import HEAD into svn+ssh://svn.samba.org/home/svn/samba/trunk
[metze/old/v3-2-winbind-ndr.git] / source / popt / popt.h
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
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
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 */
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 */
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 */
33 #define POPT_ARGFLAG_STRIP      0x20000000  /* strip this arg from argv (only applies to long args) */
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 {
56     /*@observer@*/ /*@null@*/ const char * longName;    /* may be NULL */
57     char shortName;             /* may be '\0' */
58     int argInfo;
59     /*@shared@*/ /*@null@*/ void * arg;         /* depends on argInfo */
60     int val;                    /* 0 means don't return, just update flag */
61     /*@shared@*/ /*@null@*/ const char * descrip;       /* description for autohelp -- may be NULL */
62     /*@shared@*/ /*@null@*/ const char * argDescrip;    /* argument description for autohelp */
63 };
64
65 struct poptAlias {
66     /*@owned@*/ /*@null@*/ const char * longName;       /* may be NULL */
67     char shortName;             /* may be '\0' */
68     int argc;
69     /*@owned@*/ const char ** argv;             /* must be free()able */
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,
87                                  const char * arg, const void * data);
88
89 /*@only@*/ poptContext poptGetContext(/*@keep@*/ const char * name,
90                 int argc, /*@keep@*/ const char ** argv,
91                 /*@keep@*/ const struct poptOption * options, int flags);
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 */
97 /*@observer@*/ /*@null@*/ const char * poptGetOptArg(poptContext con);
98 /* returns NULL if no more options are available */
99 /*@observer@*/ /*@null@*/ const char * poptGetArg(poptContext con);
100 /*@observer@*/ /*@null@*/ const char * poptPeekArg(poptContext con);
101 /*@observer@*/ /*@null@*/ const char ** poptGetArgs(poptContext con);
102 /* returns the option which caused the most recent error */
103 /*@observer@*/ const char * poptBadOption(poptContext con, int flags);
104 void poptFreeContext( /*@only@*/ poptContext con);
105 int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv);
106 int poptAddAlias(poptContext con, struct poptAlias alias, int flags);
107 int poptReadConfigFile(poptContext con, const char * fn);
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 */
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 *poptStrerror(const int error);
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);
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
129
130 #endif