Annotation of embedaddon/ntp/sntp/libopts/autoopts.h, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:  *  \file autoopts.h
        !             4:  *
        !             5:  *  Time-stamp:      "2011-03-25 17:51:34 bkorb"
        !             6:  *
        !             7:  *  This file defines all the global structures and special values
        !             8:  *  used in the automated option processing library.
        !             9:  *
        !            10:  *  This file is part of AutoOpts, a companion to AutoGen.
        !            11:  *  AutoOpts is free software.
        !            12:  *  AutoOpts is Copyright (c) 1992-2011 by Bruce Korb - all rights reserved
        !            13:  *
        !            14:  *  AutoOpts is available under any one of two licenses.  The license
        !            15:  *  in use must be one of these two and the choice is under the control
        !            16:  *  of the user of the license.
        !            17:  *
        !            18:  *   The GNU Lesser General Public License, version 3 or later
        !            19:  *      See the files "COPYING.lgplv3" and "COPYING.gplv3"
        !            20:  *
        !            21:  *   The Modified Berkeley Software Distribution License
        !            22:  *      See the file "COPYING.mbsd"
        !            23:  *
        !            24:  *  These files have the following md5sums:
        !            25:  *
        !            26:  *  43b91e8ca915626ed3818ffb1b71248b pkg/libopts/COPYING.gplv3
        !            27:  *  06a1a2e4760c90ea5e1dad8dfaac4d39 pkg/libopts/COPYING.lgplv3
        !            28:  *  66a5cedaf62c4b2637025f049f9b826f pkg/libopts/COPYING.mbsd
        !            29:  */
        !            30: 
        !            31: #ifndef AUTOGEN_AUTOOPTS_H
        !            32: #define AUTOGEN_AUTOOPTS_H
        !            33: 
        !            34: #include "compat/compat.h"
        !            35: #include "ag-char-map.h"
        !            36: 
        !            37: #define AO_NAME_LIMIT           127
        !            38: #define AO_NAME_SIZE            ((size_t)(AO_NAME_LIMIT + 1))
        !            39: 
        !            40: #ifndef AG_PATH_MAX
        !            41: #  ifdef PATH_MAX
        !            42: #    define AG_PATH_MAX         ((size_t)PATH_MAX)
        !            43: #  else
        !            44: #    define AG_PATH_MAX         ((size_t)4096)
        !            45: #  endif
        !            46: #else
        !            47: #  if defined(PATH_MAX) && (PATH_MAX > MAXPATHLEN)
        !            48: #     undef  AG_PATH_MAX
        !            49: #     define AG_PATH_MAX        ((size_t)PATH_MAX)
        !            50: #  endif
        !            51: #endif
        !            52: 
        !            53: #undef  EXPORT
        !            54: #define EXPORT
        !            55: 
        !            56: #if defined(_WIN32) && !defined(__CYGWIN__)
        !            57: # define DIRCH                  '\\'
        !            58: #else
        !            59: # define DIRCH                  '/'
        !            60: #endif
        !            61: 
        !            62: #ifndef EX_NOINPUT
        !            63: #  define EX_NOINPUT            66
        !            64: #endif
        !            65: #ifndef EX_SOFTWARE
        !            66: #  define EX_SOFTWARE           70
        !            67: #endif
        !            68: #ifndef EX_CONFIG
        !            69: #  define EX_CONFIG             78
        !            70: #endif
        !            71: 
        !            72: /*
        !            73:  *  Convert the number to a list usable in a printf call
        !            74:  */
        !            75: #define NUM_TO_VER(n)           ((n) >> 12), ((n) >> 7) & 0x001F, (n) & 0x007F
        !            76: 
        !            77: #define NAMED_OPTS(po) \
        !            78:         (((po)->fOptSet & (OPTPROC_SHORTOPT | OPTPROC_LONGOPT)) == 0)
        !            79: 
        !            80: #define SKIP_OPT(p)  (((p)->fOptState & (OPTST_DOCUMENT|OPTST_OMITTED)) != 0)
        !            81: 
        !            82: typedef int tDirection;
        !            83: #define DIRECTION_PRESET        -1
        !            84: #define DIRECTION_PROCESS       1
        !            85: #define DIRECTION_CALLED        0
        !            86: 
        !            87: #define PROCESSING(d)           ((d)>0)
        !            88: #define PRESETTING(d)           ((d)<0)
        !            89: 
        !            90: /*
        !            91:  *  When loading a line (or block) of text as an option, the value can
        !            92:  *  be processed in any of several modes:
        !            93:  *
        !            94:  *  @table @samp
        !            95:  *  @item keep
        !            96:  *  Every part of the value between the delimiters is saved.
        !            97:  *
        !            98:  *  @item uncooked
        !            99:  *  Even if the value begins with quote characters, do not do quote processing.
        !           100:  *
        !           101:  *  @item cooked
        !           102:  *  If the value looks like a quoted string, then process it.
        !           103:  *  Double quoted strings are processed the way strings are in "C" programs,
        !           104:  *  except they are treated as regular characters if the following character
        !           105:  *  is not a well-established escape sequence.
        !           106:  *  Single quoted strings (quoted with apostrophies) are handled the way
        !           107:  *  strings are handled in shell scripts, *except* that backslash escapes
        !           108:  *  are honored before backslash escapes and apostrophies.
        !           109:  *  @end table
        !           110:  */
        !           111: typedef enum {
        !           112:     OPTION_LOAD_COOKED,
        !           113:     OPTION_LOAD_UNCOOKED,
        !           114:     OPTION_LOAD_KEEP
        !           115: } tOptionLoadMode;
        !           116: 
        !           117: static tOptionLoadMode option_load_mode;
        !           118: 
        !           119: /*
        !           120:  *  The pager state is used by optionPagedUsage() procedure.
        !           121:  *  When it runs, it sets itself up to be called again on exit.
        !           122:  *  If, however, a routine needs a child process to do some work
        !           123:  *  before it is done, then 'pagerState' must be set to
        !           124:  *  'PAGER_STATE_CHILD' so that optionPagedUsage() will not try
        !           125:  *  to run the pager program before its time.
        !           126:  */
        !           127: typedef enum {
        !           128:     PAGER_STATE_INITIAL,
        !           129:     PAGER_STATE_READY,
        !           130:     PAGER_STATE_CHILD
        !           131: } tePagerState;
        !           132: 
        !           133: typedef enum {
        !           134:     ENV_ALL,
        !           135:     ENV_IMM,
        !           136:     ENV_NON_IMM
        !           137: } teEnvPresetType;
        !           138: 
        !           139: typedef enum {
        !           140:     TOPT_UNDEFINED = 0,
        !           141:     TOPT_SHORT,
        !           142:     TOPT_LONG,
        !           143:     TOPT_DEFAULT
        !           144: } teOptType;
        !           145: 
        !           146: typedef struct {
        !           147:     tOptDesc*  pOD;
        !           148:     tCC*       pzOptArg;
        !           149:     tAoUL      flags;
        !           150:     teOptType  optType;
        !           151: } tOptState;
        !           152: #define OPTSTATE_INITIALIZER(st) \
        !           153:     { NULL, NULL, OPTST_ ## st, TOPT_UNDEFINED }
        !           154: 
        !           155: #define TEXTTO_TABLE \
        !           156:         _TT_(LONGUSAGE) \
        !           157:         _TT_(USAGE) \
        !           158:         _TT_(VERSION)
        !           159: #define _TT_(n) \
        !           160:         TT_ ## n ,
        !           161: 
        !           162: typedef enum { TEXTTO_TABLE COUNT_TT } teTextTo;
        !           163: 
        !           164: #undef _TT_
        !           165: 
        !           166: typedef struct {
        !           167:     char const * pzStr;
        !           168:     char const * pzReq;
        !           169:     char const * pzNum;
        !           170:     char const * pzFile;
        !           171:     char const * pzKey;
        !           172:     char const * pzKeyL;
        !           173:     char const * pzBool;
        !           174:     char const * pzNest;
        !           175:     char const * pzOpt;
        !           176:     char const * pzNo;
        !           177:     char const * pzBrk;
        !           178:     char const * pzNoF;
        !           179:     char const * pzSpc;
        !           180:     char const * pzOptFmt;
        !           181:     char const * pzTime;
        !           182: } arg_types_t;
        !           183: 
        !           184: #define AGALOC(c, w)          ao_malloc((size_t)c)
        !           185: #define AGREALOC(p, c, w)     ao_realloc((void*)p, (size_t)c)
        !           186: #define AGFREE(_p)            free((void *)_p)
        !           187: #define AGDUPSTR(p, s, w)     (p = ao_strdup(s))
        !           188: 
        !           189: static void *
        !           190: ao_malloc(size_t sz);
        !           191: 
        !           192: static void *
        !           193: ao_realloc(void *p, size_t sz);
        !           194: 
        !           195: #define ao_free(_p) free((void *)_p)
        !           196: 
        !           197: static char *
        !           198: ao_strdup(char const *str);
        !           199: 
        !           200: #define TAGMEM(m, t)
        !           201: 
        !           202: /*
        !           203:  *  DO option handling?
        !           204:  *
        !           205:  *  Options are examined at two times:  at immediate handling time and at
        !           206:  *  normal handling time.  If an option is disabled, the timing may be
        !           207:  *  different from the handling of the undisabled option.  The OPTST_DIABLED
        !           208:  *  bit indicates the state of the currently discovered option.
        !           209:  *  So, here's how it works:
        !           210:  *
        !           211:  *  A) handling at "immediate" time, either 1 or 2:
        !           212:  *
        !           213:  *  1.  OPTST_DISABLED is not set:
        !           214:  *      IMM           must be set
        !           215:  *      DISABLE_IMM   don't care
        !           216:  *      TWICE         don't care
        !           217:  *      DISABLE_TWICE don't care
        !           218:  *      0 -and-  1 x x x
        !           219:  *
        !           220:  *  2.  OPTST_DISABLED is set:
        !           221:  *      IMM           don't care
        !           222:  *      DISABLE_IMM   must be set
        !           223:  *      TWICE         don't care
        !           224:  *      DISABLE_TWICE don't care
        !           225:  *      1 -and-  x 1 x x
        !           226:  */
        !           227: #define DO_IMMEDIATELY(_flg) \
        !           228:     (  (((_flg) & (OPTST_DISABLED|OPTST_IMM)) == OPTST_IMM) \
        !           229:     || (   ((_flg) & (OPTST_DISABLED|OPTST_DISABLE_IMM))    \
        !           230:         == (OPTST_DISABLED|OPTST_DISABLE_IMM)  ))
        !           231: 
        !           232: /*  B) handling at "regular" time because it was not immediate
        !           233:  *
        !           234:  *  1.  OPTST_DISABLED is not set:
        !           235:  *      IMM           must *NOT* be set
        !           236:  *      DISABLE_IMM   don't care
        !           237:  *      TWICE         don't care
        !           238:  *      DISABLE_TWICE don't care
        !           239:  *      0 -and-  0 x x x
        !           240:  *
        !           241:  *  2.  OPTST_DISABLED is set:
        !           242:  *      IMM           don't care
        !           243:  *      DISABLE_IMM   don't care
        !           244:  *      TWICE         must be set
        !           245:  *      DISABLE_TWICE don't care
        !           246:  *      1 -and-  x x 1 x
        !           247:  */
        !           248: #define DO_NORMALLY(_flg) ( \
        !           249:        (((_flg) & (OPTST_DISABLED|OPTST_IMM))            == 0)  \
        !           250:     || (((_flg) & (OPTST_DISABLED|OPTST_DISABLE_IMM))    ==     \
        !           251:                   OPTST_DISABLED)  )
        !           252: 
        !           253: /*  C)  handling at "regular" time because it is to be handled twice.
        !           254:  *      The immediate bit was already tested and found to be set:
        !           255:  *
        !           256:  *  3.  OPTST_DISABLED is not set:
        !           257:  *      IMM           is set (but don't care)
        !           258:  *      DISABLE_IMM   don't care
        !           259:  *      TWICE         must be set
        !           260:  *      DISABLE_TWICE don't care
        !           261:  *      0 -and-  ? x 1 x
        !           262:  *
        !           263:  *  4.  OPTST_DISABLED is set:
        !           264:  *      IMM           don't care
        !           265:  *      DISABLE_IMM   is set (but don't care)
        !           266:  *      TWICE         don't care
        !           267:  *      DISABLE_TWICE must be set
        !           268:  *      1 -and-  x ? x 1
        !           269:  */
        !           270: #define DO_SECOND_TIME(_flg) ( \
        !           271:        (((_flg) & (OPTST_DISABLED|OPTST_TWICE))          ==     \
        !           272:                   OPTST_TWICE)                                  \
        !           273:     || (((_flg) & (OPTST_DISABLED|OPTST_DISABLE_TWICE))  ==     \
        !           274:                   (OPTST_DISABLED|OPTST_DISABLE_TWICE)  ))
        !           275: 
        !           276: /*
        !           277:  *  text_mmap structure.  Only active on platforms with mmap(2).
        !           278:  */
        !           279: #ifdef HAVE_SYS_MMAN_H
        !           280: #  include <sys/mman.h>
        !           281: #else
        !           282: #  ifndef  PROT_READ
        !           283: #   define PROT_READ            0x01
        !           284: #  endif
        !           285: #  ifndef  PROT_WRITE
        !           286: #   define PROT_WRITE           0x02
        !           287: #  endif
        !           288: #  ifndef  MAP_SHARED
        !           289: #   define MAP_SHARED           0x01
        !           290: #  endif
        !           291: #  ifndef  MAP_PRIVATE
        !           292: #   define MAP_PRIVATE          0x02
        !           293: #  endif
        !           294: #endif
        !           295: 
        !           296: #ifndef MAP_FAILED
        !           297: #  define  MAP_FAILED           ((void*)-1)
        !           298: #endif
        !           299: 
        !           300: #ifndef  _SC_PAGESIZE
        !           301: # ifdef  _SC_PAGE_SIZE
        !           302: #  define _SC_PAGESIZE          _SC_PAGE_SIZE
        !           303: # endif
        !           304: #endif
        !           305: 
        !           306: #ifndef HAVE_STRCHR
        !           307: extern char* strchr(char const *s, int c);
        !           308: extern char* strrchr(char const *s, int c);
        !           309: #endif
        !           310: 
        !           311: /*
        !           312:  *  Define and initialize all the user visible strings.
        !           313:  *  We do not do translations.  If translations are to be done, then
        !           314:  *  the client will provide a callback for that purpose.
        !           315:  */
        !           316: #undef DO_TRANSLATIONS
        !           317: #include "autoopts/usage-txt.h"
        !           318: 
        !           319: /*
        !           320:  *  File pointer for usage output
        !           321:  */
        !           322: FILE * option_usage_fp;
        !           323: static char const * program_pkgdatadir;
        !           324: 
        !           325: extern tOptProc optionPrintVersion, optionPagedUsage, optionLoadOpt;
        !           326: 
        !           327: #endif /* AUTOGEN_AUTOOPTS_H */
        !           328: /*
        !           329:  * Local Variables:
        !           330:  * mode: C
        !           331:  * c-file-style: "stroustrup"
        !           332:  * indent-tabs-mode: nil
        !           333:  * End:
        !           334:  * end of autoopts/autoopts.h */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>