popt
1.14
|
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 0U 00021 #define POPT_ARG_STRING 1U 00022 #define POPT_ARG_INT 2U 00023 #define POPT_ARG_LONG 3U 00024 #define POPT_ARG_INCLUDE_TABLE 4U 00025 #define POPT_ARG_CALLBACK 5U 00029 #define POPT_ARG_INTL_DOMAIN 6U 00033 #define POPT_ARG_VAL 7U 00034 #define POPT_ARG_FLOAT 8U 00035 #define POPT_ARG_DOUBLE 9U 00036 #define POPT_ARG_LONGLONG 10U 00038 #define POPT_ARG_MAINCALL 16U+11U 00039 #define POPT_ARG_ARGV 12U 00041 #define POPT_ARG_MASK 0x0000FFFFU 00042 00048 #define POPT_ARGFLAG_ONEDASH 0x80000000U 00049 #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000U 00050 #define POPT_ARGFLAG_STRIP 0x20000000U 00051 #define POPT_ARGFLAG_OPTIONAL 0x10000000U 00053 #define POPT_ARGFLAG_OR 0x08000000U 00054 #define POPT_ARGFLAG_NOR 0x09000000U 00055 #define POPT_ARGFLAG_AND 0x04000000U 00056 #define POPT_ARGFLAG_NAND 0x05000000U 00057 #define POPT_ARGFLAG_XOR 0x02000000U 00058 #define POPT_ARGFLAG_NOT 0x01000000U 00059 #define POPT_ARGFLAG_LOGICALOPS \ 00060 (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR) 00061 00062 #define POPT_BIT_SET (POPT_ARG_VAL|POPT_ARGFLAG_OR) 00063 00064 #define POPT_BIT_CLR (POPT_ARG_VAL|POPT_ARGFLAG_NAND) 00065 00067 #define POPT_ARGFLAG_SHOW_DEFAULT 0x00800000U 00068 #define POPT_ARGFLAG_RANDOM 0x00400000U /*<! random value in [1,arg] */ 00069 00076 #define POPT_CBFLAG_PRE 0x80000000U 00077 #define POPT_CBFLAG_POST 0x40000000U 00078 #define POPT_CBFLAG_INC_DATA 0x20000000U 00080 #define POPT_CBFLAG_SKIPOPTION 0x10000000U 00081 #define POPT_CBFLAG_CONTINUE 0x08000000U 00083 00084 00088 #define POPT_ERROR_NOARG -10 00089 #define POPT_ERROR_BADOPT -11 00090 #define POPT_ERROR_OPTSTOODEEP -13 00091 #define POPT_ERROR_BADQUOTE -15 00092 #define POPT_ERROR_ERRNO -16 00093 #define POPT_ERROR_BADNUMBER -17 00094 #define POPT_ERROR_OVERFLOW -18 00095 #define POPT_ERROR_BADOPERATION -19 00096 #define POPT_ERROR_NULLARG -20 00097 #define POPT_ERROR_MALLOC -21 00098 #define POPT_ERROR_NOCONTEXT -22 00100 00101 00105 #define POPT_BADOPTION_NOALIAS (1U << 0) 00107 00108 00112 #define POPT_CONTEXT_NO_EXEC (1U << 0) 00113 #define POPT_CONTEXT_KEEP_FIRST (1U << 1) 00114 #define POPT_CONTEXT_POSIXMEHARDER (1U << 2) 00115 #define POPT_CONTEXT_ARG_OPTS (1U << 4) 00117 00118 00120 struct poptOption { 00121 /*@observer@*/ /*@null@*/ 00122 const char * longName; 00123 char shortName; 00124 unsigned int argInfo; 00125 /*@shared@*/ /*@null@*/ 00126 void * arg; 00127 int val; 00128 /*@observer@*/ /*@null@*/ 00129 const char * descrip; 00130 /*@observer@*/ /*@null@*/ 00131 const char * argDescrip; 00132 }; 00133 00137 struct poptAlias { 00138 /*@owned@*/ /*@null@*/ 00139 const char * longName; 00140 char shortName; 00141 int argc; 00142 /*@owned@*/ 00143 const char ** argv; 00144 }; 00145 00149 /*@-exporttype@*/ 00150 typedef struct poptItem_s { 00151 struct poptOption option; 00152 int argc; 00153 /*@owned@*/ 00154 const char ** argv; 00155 } * poptItem; 00156 /*@=exporttype@*/ 00157 00162 00166 /*@-exportvar@*/ 00167 /*@unchecked@*/ /*@observer@*/ 00168 extern struct poptOption poptAliasOptions[]; 00169 /*@=exportvar@*/ 00170 #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptAliasOptions, \ 00171 0, "Options implemented via popt alias/exec:", NULL }, 00172 00176 /*@-exportvar@*/ 00177 /*@unchecked@*/ /*@observer@*/ 00178 extern struct poptOption poptHelpOptions[]; 00179 /*@=exportvar@*/ 00180 00181 /*@-exportvar@*/ 00182 /*@unchecked@*/ /*@observer@*/ 00183 extern struct poptOption * poptHelpOptionsI18N; 00184 /*@=exportvar@*/ 00185 00186 #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \ 00187 0, "Help options:", NULL }, 00188 00189 #define POPT_TABLEEND { NULL, '\0', 0, NULL, 0, NULL, NULL } 00190 00194 /*@-exporttype@*/ 00195 typedef /*@abstract@*/ struct poptContext_s * poptContext; 00196 /*@=exporttype@*/ 00197 00200 #ifndef __cplusplus 00201 /*@-exporttype -typeuse@*/ 00202 typedef struct poptOption * poptOption; 00203 /*@=exporttype =typeuse@*/ 00204 #endif 00205 00208 /*@-exportconst@*/ 00209 enum poptCallbackReason { 00210 POPT_CALLBACK_REASON_PRE = 0, 00211 POPT_CALLBACK_REASON_POST = 1, 00212 POPT_CALLBACK_REASON_OPTION = 2 00213 }; 00214 /*@=exportconst@*/ 00215 00216 #ifdef __cplusplus 00217 extern "C" { 00218 #endif 00219 /*@-type@*/ 00220 00229 typedef void (*poptCallbackType) (poptContext con, 00230 enum poptCallbackReason reason, 00231 /*@null@*/ const struct poptOption * opt, 00232 /*@null@*/ const char * arg, 00233 /*@null@*/ const void * data) 00234 /*@globals internalState @*/ 00235 /*@modifies internalState @*/; 00236 00246 /*@only@*/ /*@null@*/ 00247 poptContext poptGetContext( 00248 /*@dependent@*/ /*@keep@*/ const char * name, 00249 int argc, /*@dependent@*/ /*@keep@*/ const char ** argv, 00250 /*@dependent@*/ /*@keep@*/ const struct poptOption * options, 00251 unsigned int flags) 00252 /*@globals internalState @*/ 00253 /*@modifies internalState @*/; 00254 00259 /*@unused@*/ 00260 void poptResetContext(/*@null@*/poptContext con) 00261 /*@modifies con @*/; 00262 00268 int poptGetNextOpt(/*@null@*/poptContext con) 00269 /*@globals fileSystem, internalState @*/ 00270 /*@modifies con, fileSystem, internalState @*/; 00271 00277 /*@observer@*/ /*@null@*/ /*@unused@*/ 00278 char * poptGetOptArg(/*@null@*/poptContext con) 00279 /*@modifies con @*/; 00280 00286 /*@observer@*/ /*@null@*/ /*@unused@*/ 00287 const char * poptGetArg(/*@null@*/poptContext con) 00288 /*@modifies con @*/; 00289 00295 /*@observer@*/ /*@null@*/ /*@unused@*/ 00296 const char * poptPeekArg(/*@null@*/poptContext con) 00297 /*@*/; 00298 00304 /*@observer@*/ /*@null@*/ 00305 const char ** poptGetArgs(/*@null@*/poptContext con) 00306 /*@modifies con @*/; 00307 00314 /*@observer@*/ 00315 const char * poptBadOption(/*@null@*/poptContext con, unsigned int flags) 00316 /*@*/; 00317 00323 /*@null@*/ 00324 poptContext poptFreeContext( /*@only@*/ /*@null@*/ poptContext con) 00325 /*@modifies con @*/; 00326 00333 /*@unused@*/ 00334 int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv) 00335 /*@modifies con @*/; 00336 00346 /*@unused@*/ 00347 int poptAddAlias(poptContext con, struct poptAlias alias, int flags) 00348 /*@modifies con @*/; 00349 00357 int poptAddItem(poptContext con, poptItem newItem, int flags) 00358 /*@modifies con @*/; 00359 00366 int poptReadConfigFile(poptContext con, const char * fn) 00367 /*@globals errno, fileSystem, internalState @*/ 00368 /*@modifies con->execs, con->numExecs, 00369 errno, fileSystem, internalState @*/; 00370 00377 /*@unused@*/ 00378 int poptReadDefaultConfig(poptContext con, /*@unused@*/ int useEnv) 00379 /*@globals fileSystem, internalState @*/ 00380 /*@modifies con->execs, con->numExecs, 00381 fileSystem, internalState @*/; 00382 00394 int poptDupArgv(int argc, /*@null@*/ const char **argv, 00395 /*@null@*/ /*@out@*/ int * argcPtr, 00396 /*@null@*/ /*@out@*/ const char *** argvPtr) 00397 /*@modifies *argcPtr, *argvPtr @*/; 00398 00410 int poptParseArgvString(const char * s, 00411 /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr) 00412 /*@modifies *argcPtr, *argvPtr @*/; 00413 00460 /*@-fcnuse@*/ 00461 int poptConfigFileToString(FILE *fp, /*@out@*/ char ** argstrp, int flags) 00462 /*@globals fileSystem @*/ 00463 /*@modifies *fp, *argstrp, fileSystem @*/; 00464 /*@=fcnuse@*/ 00465 00471 /*@observer@*/ 00472 const char * poptStrerror(const int error) 00473 /*@*/; 00474 00481 /*@unused@*/ 00482 void poptSetExecPath(poptContext con, const char * path, int allowAbsolute) 00483 /*@modifies con @*/; 00484 00491 void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags) 00492 /*@globals fileSystem @*/ 00493 /*@modifies fp, fileSystem @*/; 00494 00501 void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags) 00502 /*@globals fileSystem @*/ 00503 /*@modifies fp, fileSystem @*/; 00504 00510 /*@-fcnuse@*/ 00511 void poptSetOtherOptionHelp(poptContext con, const char * text) 00512 /*@modifies con @*/; 00513 /*@=fcnuse@*/ 00514 00520 /*@-fcnuse@*/ 00521 /*@observer@*/ 00522 const char * poptGetInvocationName(poptContext con) 00523 /*@*/; 00524 /*@=fcnuse@*/ 00525 00533 /*@-fcnuse@*/ 00534 int poptStrippedArgv(poptContext con, int argc, char ** argv) 00535 /*@modifies *argv @*/; 00536 /*@=fcnuse@*/ 00537 00545 /*@unused@*/ 00546 int poptSaveString(/*@null@*/ const char *** argvp, unsigned int argInfo, 00547 const char * val) 00548 /*@modifies *argvp @*/; 00549 00558 /*@-incondefs@*/ 00559 /*@unused@*/ 00560 int poptSaveLongLong(/*@null@*/ long long * arg, unsigned int argInfo, 00561 long long aLongLong) 00562 /*@globals internalState @*/ 00563 /*@modifies *arg, internalState @*/ 00564 /*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/; 00565 /*@=incondefs@*/ 00566 00575 /*@-incondefs@*/ 00576 /*@unused@*/ 00577 int poptSaveLong(/*@null@*/ long * arg, unsigned int argInfo, long aLong) 00578 /*@globals internalState @*/ 00579 /*@modifies *arg, internalState @*/ 00580 /*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/; 00581 /*@=incondefs@*/ 00582 00591 /*@-incondefs@*/ 00592 /*@unused@*/ 00593 int poptSaveInt(/*@null@*/ int * arg, unsigned int argInfo, long aLong) 00594 /*@globals internalState @*/ 00595 /*@modifies *arg, internalState @*/ 00596 /*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/; 00597 /*@=incondefs@*/ 00598 00599 /*@=type@*/ 00600 #ifdef __cplusplus 00601 } 00602 #endif 00603 00604 #endif