Commit | Line | Data |
---|---|---|
62402cb1 MP |
1 | /* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING |
2 | file accompanying popt source distributions, available from | |
3 | ftp://ftp.redhat.com/pub/code/popt */ | |
4 | ||
5 | #ifndef H_POPT | |
6 | #define H_POPT | |
7 | ||
b348deae MP |
8 | #ifdef __cplusplus |
9 | extern "C" { | |
10 | #endif | |
11 | ||
62402cb1 MP |
12 | #include <stdio.h> /* for FILE * */ |
13 | ||
14 | #define POPT_OPTION_DEPTH 10 | |
15 | ||
16 | #define POPT_ARG_NONE 0 | |
17 | #define POPT_ARG_STRING 1 | |
18 | #define POPT_ARG_INT 2 | |
19 | #define POPT_ARG_LONG 3 | |
20 | #define POPT_ARG_INCLUDE_TABLE 4 /* arg points to table */ | |
21 | #define POPT_ARG_CALLBACK 5 /* table-wide callback... must be | |
22 | set first in table; arg points | |
23 | to callback, descrip points to | |
24 | callback data to pass */ | |
b348deae MP |
25 | #define POPT_ARG_INTL_DOMAIN 6 /* set the translation domain |
26 | for this table and any | |
27 | included tables; arg points | |
28 | to the domain string */ | |
29 | #define POPT_ARG_VAL 7 /* arg should take value val */ | |
62402cb1 MP |
30 | #define POPT_ARG_MASK 0x0000FFFF |
31 | #define POPT_ARGFLAG_ONEDASH 0x80000000 /* allow -longoption */ | |
32 | #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000 /* don't show in help/usage */ | |
b348deae | 33 | #define POPT_ARGFLAG_STRIP 0x20000000 /* strip this arg from argv (only applies to long args) */ |
62402cb1 MP |
34 | #define POPT_CBFLAG_PRE 0x80000000 /* call the callback before parse */ |
35 | #define POPT_CBFLAG_POST 0x40000000 /* call the callback after parse */ | |
36 | #define POPT_CBFLAG_INC_DATA 0x20000000 /* use data from the include line, | |
37 | not the subtable */ | |
38 | ||
39 | #define POPT_ERROR_NOARG -10 | |
40 | #define POPT_ERROR_BADOPT -11 | |
41 | #define POPT_ERROR_OPTSTOODEEP -13 | |
42 | #define POPT_ERROR_BADQUOTE -15 /* only from poptParseArgString() */ | |
43 | #define POPT_ERROR_ERRNO -16 /* only from poptParseArgString() */ | |
44 | #define POPT_ERROR_BADNUMBER -17 | |
45 | #define POPT_ERROR_OVERFLOW -18 | |
46 | ||
47 | /* poptBadOption() flags */ | |
48 | #define POPT_BADOPTION_NOALIAS (1 << 0) /* don't go into an alias */ | |
49 | ||
50 | /* poptGetContext() flags */ | |
51 | #define POPT_CONTEXT_NO_EXEC (1 << 0) /* ignore exec expansions */ | |
52 | #define POPT_CONTEXT_KEEP_FIRST (1 << 1) /* pay attention to argv[0] */ | |
53 | #define POPT_CONTEXT_POSIXMEHARDER (1 << 2) /* options can't follow args */ | |
54 | ||
55 | struct poptOption { | |
b348deae | 56 | /*@observer@*/ /*@null@*/ const char * longName; /* may be NULL */ |
62402cb1 MP |
57 | char shortName; /* may be '\0' */ |
58 | int argInfo; | |
b348deae | 59 | /*@shared@*/ /*@null@*/ void * arg; /* depends on argInfo */ |
62402cb1 | 60 | int val; /* 0 means don't return, just update flag */ |
b348deae MP |
61 | /*@shared@*/ /*@null@*/ const char * descrip; /* description for autohelp -- may be NULL */ |
62 | /*@shared@*/ /*@null@*/ const char * argDescrip; /* argument description for autohelp */ | |
62402cb1 MP |
63 | }; |
64 | ||
65 | struct poptAlias { | |
b348deae | 66 | /*@owned@*/ /*@null@*/ const char * longName; /* may be NULL */ |
62402cb1 MP |
67 | char shortName; /* may be '\0' */ |
68 | int argc; | |
b348deae | 69 | /*@owned@*/ const char ** argv; /* must be free()able */ |
62402cb1 MP |
70 | }; |
71 | ||
72 | extern struct poptOption poptHelpOptions[]; | |
73 | #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \ | |
74 | 0, "Help options", NULL }, | |
75 | ||
76 | typedef struct poptContext_s * poptContext; | |
77 | #ifndef __cplusplus | |
78 | typedef struct poptOption * poptOption; | |
79 | #endif | |
80 | ||
81 | enum poptCallbackReason { POPT_CALLBACK_REASON_PRE, | |
82 | POPT_CALLBACK_REASON_POST, | |
83 | POPT_CALLBACK_REASON_OPTION }; | |
84 | typedef void (*poptCallbackType)(poptContext con, | |
85 | enum poptCallbackReason reason, | |
86 | const struct poptOption * opt, | |
b348deae | 87 | const char * arg, const void * data); |
62402cb1 | 88 | |
b348deae MP |
89 | /*@only@*/ poptContext poptGetContext(/*@keep@*/ const char * name, |
90 | int argc, /*@keep@*/ const char ** argv, | |
91 | /*@keep@*/ const struct poptOption * options, int flags); | |
62402cb1 MP |
92 | void poptResetContext(poptContext con); |
93 | ||
94 | /* returns 'val' element, -1 on last item, POPT_ERROR_* on error */ | |
95 | int poptGetNextOpt(poptContext con); | |
96 | /* returns NULL if no argument is available */ | |
b348deae | 97 | /*@observer@*/ /*@null@*/ const char * poptGetOptArg(poptContext con); |
62402cb1 | 98 | /* returns NULL if no more options are available */ |
b348deae MP |
99 | /*@observer@*/ /*@null@*/ const char * poptGetArg(poptContext con); |
100 | /*@observer@*/ /*@null@*/ const char * poptPeekArg(poptContext con); | |
101 | /*@observer@*/ /*@null@*/ const char ** poptGetArgs(poptContext con); | |
62402cb1 | 102 | /* returns the option which caused the most recent error */ |
b348deae MP |
103 | /*@observer@*/ const char * poptBadOption(poptContext con, int flags); |
104 | void poptFreeContext( /*@only@*/ poptContext con); | |
105 | int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv); | |
62402cb1 | 106 | int poptAddAlias(poptContext con, struct poptAlias alias, int flags); |
b348deae | 107 | int poptReadConfigFile(poptContext con, const char * fn); |
62402cb1 MP |
108 | /* like above, but reads /etc/popt and $HOME/.popt along with environment |
109 | vars */ | |
110 | int poptReadDefaultConfig(poptContext con, int useEnv); | |
111 | /* argv should be freed -- this allows ', ", and \ quoting, but ' is treated | |
112 | the same as " and both may include \ quotes */ | |
b348deae MP |
113 | int poptDupArgv(int argc, const char **argv, |
114 | /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr); | |
115 | int poptParseArgvString(const char * s, | |
116 | /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr); | |
117 | /*@observer@*/ const char *const poptStrerror(const int error); | |
62402cb1 MP |
118 | void poptSetExecPath(poptContext con, const char * path, int allowAbsolute); |
119 | void poptPrintHelp(poptContext con, FILE * f, int flags); | |
120 | void poptPrintUsage(poptContext con, FILE * f, int flags); | |
121 | void poptSetOtherOptionHelp(poptContext con, const char * text); | |
b348deae MP |
122 | /*@observer@*/ const char * poptGetInvocationName(poptContext con); |
123 | /* shuffles argv pointers to remove stripped args, returns new argc */ | |
124 | int poptStrippedArgv(poptContext con, int argc, char **argv); | |
125 | ||
126 | #ifdef __cplusplus | |
127 | } | |
128 | #endif | |
62402cb1 MP |
129 | |
130 | #endif |