00001
00005
00006
00007
00008
00009 #ifndef H_POPT
00010 #define H_POPT
00011
00012 #include <stdio.h>
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
00116 const char * longName;
00117 char shortName;
00118 int argInfo;
00119
00120 void * arg;
00121 int val;
00122
00123 const char * descrip;
00124
00125 const char * argDescrip;
00126 };
00127
00131 struct poptAlias {
00132
00133 const char * longName;
00134 char shortName;
00135 int argc;
00136
00137 const char ** argv;
00138 };
00139
00143
00144 typedef struct poptItem_s {
00145 struct poptOption option;
00146 int argc;
00147
00148 const char ** argv;
00149 } * poptItem;
00150
00151
00156
00160
00161
00162 extern struct poptOption poptAliasOptions[];
00163
00164 #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptAliasOptions, \
00165 0, "Options implemented via popt alias/exec:", NULL },
00166
00170
00171
00172 extern struct poptOption poptHelpOptions[];
00173
00174
00175
00176
00177 extern struct poptOption * poptHelpOptionsI18N;
00178
00179
00180 #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
00181 0, "Help options:", NULL },
00182
00183 #define POPT_TABLEEND { NULL, '\0', 0, NULL, 0, NULL, NULL }
00184
00188
00189 typedef struct poptContext_s * poptContext;
00190
00191
00194 #ifndef __cplusplus
00195
00196 typedef struct poptOption * poptOption;
00197
00198 #endif
00199
00200
00201 enum poptCallbackReason {
00202 POPT_CALLBACK_REASON_PRE = 0,
00203 POPT_CALLBACK_REASON_POST = 1,
00204 POPT_CALLBACK_REASON_OPTION = 2
00205 };
00206
00207
00208 #ifdef __cplusplus
00209 extern "C" {
00210 #endif
00211
00212
00221 typedef void (*poptCallbackType) (poptContext con,
00222 enum poptCallbackReason reason,
00223 const struct poptOption * opt,
00224 const char * arg,
00225 const void * data)
00226
00227 ;
00228
00238
00239 poptContext poptGetContext(
00240 const char * name,
00241 int argc, const char ** argv,
00242 const struct poptOption * options,
00243 int flags)
00244 ;
00245
00250
00251 void poptResetContext(poptContext con)
00252 ;
00253
00259 int poptGetNextOpt(poptContext con)
00260
00261 ;
00262
00268
00269 const char * poptGetOptArg(poptContext con)
00270 ;
00271
00277
00278 const char * poptGetArg(poptContext con)
00279 ;
00280
00286
00287 const char * poptPeekArg(poptContext con)
00288 ;
00289
00295
00296 const char ** poptGetArgs(poptContext con)
00297 ;
00298
00305
00306 const char * poptBadOption(poptContext con, int flags)
00307 ;
00308
00314
00315 poptContext poptFreeContext( poptContext con)
00316 ;
00317
00324
00325 int poptStuffArgs(poptContext con, const char ** argv)
00326 ;
00327
00337
00338 int poptAddAlias(poptContext con, struct poptAlias alias, int flags)
00339 ;
00340
00348 int poptAddItem(poptContext con, poptItem newItem, int flags)
00349 ;
00350
00357 int poptReadConfigFile(poptContext con, const char * fn)
00358
00359
00360 ;
00361
00368
00369 int poptReadDefaultConfig(poptContext con, int useEnv)
00370
00371
00372 ;
00373
00385 int poptDupArgv(int argc, const char **argv,
00386 int * argcPtr,
00387 const char *** argvPtr)
00388 ;
00389
00401 int poptParseArgvString(const char * s,
00402 int * argcPtr, const char *** argvPtr)
00403 ;
00404
00451
00452 int poptConfigFileToString(FILE *fp, char ** argstrp, int flags)
00453
00454 ;
00455
00456
00462
00463 const char *const poptStrerror(const int error)
00464 ;
00465
00472
00473 void poptSetExecPath(poptContext con, const char * path, int allowAbsolute)
00474 ;
00475
00482 void poptPrintHelp(poptContext con, FILE * fp, int flags)
00483
00484 ;
00485
00492 void poptPrintUsage(poptContext con, FILE * fp, int flags)
00493
00494 ;
00495
00501
00502 void poptSetOtherOptionHelp(poptContext con, const char * text)
00503 ;
00504
00505
00511
00512
00513 const char * poptGetInvocationName(poptContext con)
00514 ;
00515
00516
00524
00525 int poptStrippedArgv(poptContext con, int argc, char ** argv)
00526 ;
00527
00528
00537
00538
00539 int poptSaveLong( long * arg, int argInfo, long aLong)
00540
00541 ;
00542
00543
00552
00553
00554 int poptSaveInt( int * arg, int argInfo, long aLong)
00555
00556 ;
00557
00558
00559
00560 #ifdef __cplusplus
00561 }
00562 #endif
00563
00564 #endif