Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

# popt.h

Go to the documentation of this file.

    00001
    00005 /* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
    00006    file accompanying popt source distributions, available from
    00007    ftp://ftp.rpm.org/pub/rpm/dist. */
    00008
    00009 #ifndef H_POPT
    00010 #define H_POPT
    00011
    00012 #include <stdio.h>                      /* for FILE * */
    00013
    00014 #define POPT_OPTION_DEPTH       10
    00015
    00020 #define POPT_ARG_NONE           0
    00021 #define POPT_ARG_STRING         1
    00022 #define POPT_ARG_INT            2
    00023 #define POPT_ARG_LONG           3
    00024 #define POPT_ARG_INCLUDE_TABLE  4
    00025 #define POPT_ARG_CALLBACK       5
    00029 #define POPT_ARG_INTL_DOMAIN    6
    00033 #define POPT_ARG_VAL            7
    00034 #define POPT_ARG_FLOAT          8
    00035 #define POPT_ARG_DOUBLE         9
    00037 #define POPT_ARG_MASK           0x0000FFFF
    00038
    00044 #define POPT_ARGFLAG_ONEDASH    0x80000000
    00045 #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000
    00046 #define POPT_ARGFLAG_STRIP      0x20000000
    00047 #define POPT_ARGFLAG_OPTIONAL   0x10000000
    00049 #define POPT_ARGFLAG_OR         0x08000000
    00050 #define POPT_ARGFLAG_NOR        0x09000000
    00051 #define POPT_ARGFLAG_AND        0x04000000
    00052 #define POPT_ARGFLAG_NAND       0x05000000
    00053 #define POPT_ARGFLAG_XOR        0x02000000
    00054 #define POPT_ARGFLAG_NOT        0x01000000
    00055 #define POPT_ARGFLAG_LOGICALOPS \
    00056         (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR)
    00057
    00058 #define POPT_BIT_SET    (POPT_ARG_VAL|POPT_ARGFLAG_OR)
    00059
    00060 #define POPT_BIT_CLR    (POPT_ARG_VAL|POPT_ARGFLAG_NAND)
    00061
    00063 #define POPT_ARGFLAG_SHOW_DEFAULT 0x00800000
    00066
    00067
    00071 #define POPT_CBFLAG_PRE         0x80000000
    00072 #define POPT_CBFLAG_POST        0x40000000
    00073 #define POPT_CBFLAG_INC_DATA    0x20000000
    00075 #define POPT_CBFLAG_SKIPOPTION  0x10000000
    00076 #define POPT_CBFLAG_CONTINUE    0x08000000
    00078
    00079
    00083 #define POPT_ERROR_NOARG        -10
    00084 #define POPT_ERROR_BADOPT       -11
    00085 #define POPT_ERROR_OPTSTOODEEP  -13
    00086 #define POPT_ERROR_BADQUOTE     -15
    00087 #define POPT_ERROR_ERRNO        -16
    00088 #define POPT_ERROR_BADNUMBER    -17
    00089 #define POPT_ERROR_OVERFLOW     -18
    00090 #define POPT_ERROR_BADOPERATION -19
    00091 #define POPT_ERROR_NULLARG      -20
    00092 #define POPT_ERROR_MALLOC       -21
    00094
    00095
    00099 #define POPT_BADOPTION_NOALIAS  (1 << 0)
    00101
    00102
    00106 #define POPT_CONTEXT_NO_EXEC    (1 << 0)
    00107 #define POPT_CONTEXT_KEEP_FIRST (1 << 1)
    00108 #define POPT_CONTEXT_POSIXMEHARDER (1 << 2)
    00109 #define POPT_CONTEXT_ARG_OPTS   (1 << 4)
    00111
    00112
    00114 struct poptOption {
    00115 /*@observer@*/ /*@null@*/ const char * longName;
    00116     char shortName;
    00117     int argInfo;
    00118 /*@shared@*/ /*@null@*/ void * arg;
    00119     int val;
    00120 /*@observer@*/ /*@null@*/ const char * descrip;
    00121 /*@observer@*/ /*@null@*/ const char * argDescrip;
    00122 };
    00123
    00127 struct poptAlias {
    00128 /*@owned@*/ /*@null@*/ const char * longName;
    00129     char shortName;
    00130     int argc;
    00131 /*@owned@*/ const char ** argv;
    00132 };
    00133
    00137 typedef struct poptItem_s {
    00138     struct poptOption option;
    00139     int argc;
    00140 /*@owned@*/ const char ** argv;
    00141 } * poptItem;
    00142
    00147
    00151 /*@observer@*/ /*@checked@*/
    00152 extern struct poptOption poptAliasOptions[];
    00153 #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptAliasOptions, \
    00154                         0, "Options implemented via popt alias/exec:", NULL },
    00155
    00159 /*@observer@*/ /*@checked@*/
    00160 extern struct poptOption poptHelpOptions[];
    00161 #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
    00162                         0, "Help options:", NULL },
    00163
    00164 #define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
    00165
    00169 typedef /*@abstract@*/ struct poptContext_s * poptContext;
    00170
    00173 #ifndef __cplusplus
    00174 /*@-typeuse@*/
    00175 typedef struct poptOption * poptOption;
    00176 /*@=typeuse@*/
    00177 #endif
    00178
    00179 enum poptCallbackReason { POPT_CALLBACK_REASON_PRE,
    00180                           POPT_CALLBACK_REASON_POST,
    00181                           POPT_CALLBACK_REASON_OPTION };
    00182
    00183 #ifdef __cplusplus
    00184 extern "C" {
    00185 #endif
    00186 /*@-type@*/
    00187
    00196 typedef void (*poptCallbackType) (poptContext con,
    00197                 enum poptCallbackReason reason,
    00198                 /*@null@*/ const struct poptOption * opt,
    00199                 /*@null@*/ const char * arg,
    00200                 /*@null@*/ const void * data)
    00201         /*@*/;
    00202
    00212 /*@only@*/ /*@null@*/ poptContext poptGetContext(
    00213                 /*@dependent@*/ /*@keep@*/ const char * name,
    00214                 int argc, /*@dependent@*/ /*@keep@*/ const char ** argv,
    00215                 /*@dependent@*/ /*@keep@*/ const struct poptOption * options,
    00216                 int flags)
    00217         /*@*/;
    00218
    00223 void poptResetContext(/*@null@*/poptContext con)
    00224         /*@modifies con @*/;
    00225
    00231 int poptGetNextOpt(/*@null@*/poptContext con)
    00232         /*@globals fileSystem@*/
    00233         /*@modifies con, fileSystem @*/;
    00234
    00235 /*@-redecl@*/
    00241 /*@observer@*/ /*@null@*/ const char * poptGetOptArg(/*@null@*/poptContext con)
    00242         /*@modifies con @*/;
    00243
    00249 /*@observer@*/ /*@null@*/ const char * poptGetArg(/*@null@*/poptContext con)
    00250         /*@modifies con @*/;
    00251
    00257 /*@observer@*/ /*@null@*/ const char * poptPeekArg(/*@null@*/poptContext con)
    00258         /*@*/;
    00259
    00265 /*@observer@*/ /*@null@*/ const char ** poptGetArgs(/*@null@*/poptContext con)
    00266         /*@modifies con @*/;
    00267
    00273 /*@observer@*/ const char * poptBadOption(/*@null@*/poptContext con, int flags)
    00274         /*@*/;
    00275 /*@=redecl@*/
    00276
    00282 /*@null@*/ poptContext poptFreeContext( /*@only@*/ /*@null@*/ poptContext con)
    00283         /*@modifies con @*/;
    00284
    00291 int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv)
    00292         /*@modifies con @*/;
    00293
    00303 /*@unused@*/
    00304 int poptAddAlias(poptContext con, struct poptAlias alias, int flags)
    00305         /*@modifies con @*/;
    00306
    00314 int poptAddItem(poptContext con, poptItem newItem, int flags)
    00315         /*@modifies con @*/;
    00316
    00323 int poptReadConfigFile(poptContext con, const char * fn)
    00324         /*@globals fileSystem@*/
    00325         /*@modifies fileSystem,
    00326                 con->execs, con->numExecs @*/;
    00327
    00334 int poptReadDefaultConfig(poptContext con, /*@unused@*/ int useEnv)
    00335         /*@globals fileSystem@*/
    00336         /*@modifies fileSystem,
    00337                 con->execs, con->numExecs @*/;
    00338
    00350 int poptDupArgv(int argc, /*@null@*/ const char **argv,
    00351                 /*@null@*/ /*@out@*/ int * argcPtr,
    00352                 /*@null@*/ /*@out@*/ const char *** argvPtr)
    00353         /*@modifies *argcPtr, *argvPtr @*/;
    00354
    00366 int poptParseArgvString(const char * s,
    00367                 /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr)
    00368         /*@modifies *argcPtr, *argvPtr @*/;
    00369
    00375 /*@-redecl@*/
    00376 /*@observer@*/ const char *const poptStrerror(const int error)
    00377         /*@*/;
    00378 /*@=redecl@*/
    00379
    00386 void poptSetExecPath(poptContext con, const char * path, int allowAbsolute)
    00387         /*@modifies con @*/;
    00388
    00395 void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags)
    00396         /*@globals fileSystem @*/
    00397         /*@modifies *fp, fileSystem @*/;
    00398
    00405 void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
    00406         /*@globals fileSystem @*/
    00407         /*@modifies *fp, fileSystem @*/;
    00408
    00414 /*@-fcnuse@*/
    00415 void poptSetOtherOptionHelp(poptContext con, const char * text)
    00416         /*@modifies con @*/;
    00417 /*@=fcnuse@*/
    00418
    00424 /*@-redecl -fcnuse@*/
    00425 /*@observer@*/ const char * poptGetInvocationName(poptContext con)
    00426         /*@*/;
    00427 /*@=redecl =fcnuse@*/
    00428
    00436 /*@-fcnuse@*/
    00437 int poptStrippedArgv(poptContext con, int argc, char ** argv)
    00438         /*@modifies *argv @*/;
    00439 /*@=fcnuse@*/
    00440
    00441 /*@=type@*/
    00442 #ifdef  __cplusplus
    00443 }
    00444 #endif
    00445
    00446 #endif