Split code out into separate files and remove some global variables to
[rsync/rsync.git] / popt / popt.h
CommitLineData
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
9extern "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
55struct 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
65struct 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
72extern struct poptOption poptHelpOptions[];
73#define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
74 0, "Help options", NULL },
75
76typedef struct poptContext_s * poptContext;
77#ifndef __cplusplus
78typedef struct poptOption * poptOption;
79#endif
80
81enum poptCallbackReason { POPT_CALLBACK_REASON_PRE,
82 POPT_CALLBACK_REASON_POST,
83 POPT_CALLBACK_REASON_OPTION };
84typedef 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
92void poptResetContext(poptContext con);
93
94/* returns 'val' element, -1 on last item, POPT_ERROR_* on error */
95int 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);
104void poptFreeContext( /*@only@*/ poptContext con);
105int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv);
62402cb1 106int poptAddAlias(poptContext con, struct poptAlias alias, int flags);
b348deae 107int poptReadConfigFile(poptContext con, const char * fn);
62402cb1
MP
108/* like above, but reads /etc/popt and $HOME/.popt along with environment
109 vars */
110int 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
113int poptDupArgv(int argc, const char **argv,
114 /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr);
115int poptParseArgvString(const char * s,
116 /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr);
117/*@observer@*/ const char *const poptStrerror(const int error);
62402cb1
MP
118void poptSetExecPath(poptContext con, const char * path, int allowAbsolute);
119void poptPrintHelp(poptContext con, FILE * f, int flags);
120void poptPrintUsage(poptContext con, FILE * f, int flags);
121void 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 */
124int poptStrippedArgv(poptContext con, int argc, char **argv);
125
126#ifdef __cplusplus
127}
128#endif
62402cb1
MP
129
130#endif