Doc.
[rsync/rsync.git] / popt-1.2 / 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 #include <stdio.h>                      /* for FILE * */
9
10 #define POPT_OPTION_DEPTH       10
11
12 #define POPT_ARG_NONE           0
13 #define POPT_ARG_STRING         1
14 #define POPT_ARG_INT            2
15 #define POPT_ARG_LONG           3
16 #define POPT_ARG_INCLUDE_TABLE  4       /* arg points to table */
17 #define POPT_ARG_CALLBACK       5       /* table-wide callback... must be
18                                            set first in table; arg points 
19                                            to callback, descrip points to 
20                                            callback data to pass */
21 #define POPT_ARG_MASK           0x0000FFFF
22 #define POPT_ARGFLAG_ONEDASH    0x80000000  /* allow -longoption */
23 #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000  /* don't show in help/usage */
24 #define POPT_CBFLAG_PRE         0x80000000  /* call the callback before parse */
25 #define POPT_CBFLAG_POST        0x40000000  /* call the callback after parse */
26 #define POPT_CBFLAG_INC_DATA    0x20000000  /* use data from the include line,
27                                                not the subtable */
28
29 #define POPT_ERROR_NOARG        -10
30 #define POPT_ERROR_BADOPT       -11
31 #define POPT_ERROR_OPTSTOODEEP  -13
32 #define POPT_ERROR_BADQUOTE     -15     /* only from poptParseArgString() */
33 #define POPT_ERROR_ERRNO        -16     /* only from poptParseArgString() */
34 #define POPT_ERROR_BADNUMBER    -17
35 #define POPT_ERROR_OVERFLOW     -18
36
37 /* poptBadOption() flags */
38 #define POPT_BADOPTION_NOALIAS  (1 << 0)  /* don't go into an alias */
39
40 /* poptGetContext() flags */
41 #define POPT_CONTEXT_NO_EXEC    (1 << 0)  /* ignore exec expansions */
42 #define POPT_CONTEXT_KEEP_FIRST (1 << 1)  /* pay attention to argv[0] */
43 #define POPT_CONTEXT_POSIXMEHARDER (1 << 2) /* options can't follow args */
44
45 struct poptOption {
46     const char * longName;      /* may be NULL */
47     char shortName;             /* may be '\0' */
48     int argInfo;
49     void * arg;                 /* depends on argInfo */
50     int val;                    /* 0 means don't return, just update flag */
51     char * descrip;             /* description for autohelp -- may be NULL */
52     char * argDescrip;          /* argument description for autohelp */
53 };
54
55 struct poptAlias {
56     char * longName;            /* may be NULL */
57     char shortName;             /* may be '\0' */
58     int argc;
59     char ** argv;               /* must be free()able */
60 };
61
62 extern struct poptOption poptHelpOptions[];
63 #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
64                         0, "Help options", NULL },
65
66 typedef struct poptContext_s * poptContext;
67 #ifndef __cplusplus
68 typedef struct poptOption * poptOption;
69 #endif
70
71 enum poptCallbackReason { POPT_CALLBACK_REASON_PRE, 
72                           POPT_CALLBACK_REASON_POST,
73                           POPT_CALLBACK_REASON_OPTION };
74 typedef void (*poptCallbackType)(poptContext con, 
75                                  enum poptCallbackReason reason,
76                                  const struct poptOption * opt,
77                                  const char * arg, void * data);
78
79 poptContext poptGetContext(char * name, int argc, char ** argv, 
80                            const struct poptOption * options, int flags);
81 void poptResetContext(poptContext con);
82
83 /* returns 'val' element, -1 on last item, POPT_ERROR_* on error */
84 int poptGetNextOpt(poptContext con);
85 /* returns NULL if no argument is available */
86 char * poptGetOptArg(poptContext con);
87 /* returns NULL if no more options are available */
88 char * poptGetArg(poptContext con);
89 char * poptPeekArg(poptContext con);
90 char ** poptGetArgs(poptContext con);
91 /* returns the option which caused the most recent error */
92 char * poptBadOption(poptContext con, int flags);
93 void poptFreeContext(poptContext con);
94 int poptStuffArgs(poptContext con, char ** argv);
95 int poptAddAlias(poptContext con, struct poptAlias alias, int flags);
96 int poptReadConfigFile(poptContext con, char * fn);
97 /* like above, but reads /etc/popt and $HOME/.popt along with environment 
98    vars */
99 int poptReadDefaultConfig(poptContext con, int useEnv);
100 /* argv should be freed -- this allows ', ", and \ quoting, but ' is treated
101    the same as " and both may include \ quotes */
102 int poptParseArgvString(char * s, int * argcPtr, char *** argvPtr);
103 const char * poptStrerror(const int error);
104 void poptSetExecPath(poptContext con, const char * path, int allowAbsolute);
105 void poptPrintHelp(poptContext con, FILE * f, int flags);
106 void poptPrintUsage(poptContext con, FILE * f, int flags);
107 void poptSetOtherOptionHelp(poptContext con, const char * text);
108 const char * poptGetInvocationName(poptContext con);
109
110 #endif