[MKISOFS]
[reactos.git] / reactos / sdk / tools / mkisofs / schilytools / include / schily / getargs.h
1 /* @(#)getargs.h 1.22 16/10/23 Copyright 1985-2016 J. Schilling */
2 /*
3 * Definitions for getargs()/getallargs()/getfiles()
4 *
5 * Copyright (c) 1985-2016 J. Schilling
6 */
7 /*
8 * The contents of this file are subject to the terms of the
9 * Common Development and Distribution License, Version 1.0 only
10 * (the "License"). You may not use this file except in compliance
11 * with the License.
12 *
13 * See the file CDDL.Schily.txt in this distribution for details.
14 * A copy of the CDDL is also available via the Internet at
15 * http://www.opensource.org/licenses/cddl1.txt
16 *
17 * When distributing Covered Code, include this CDDL HEADER in each
18 * file and include the License file CDDL.Schily.txt from this distribution.
19 */
20
21 #ifndef _SCHILY_GETARGS_H
22 #define _SCHILY_GETARGS_H
23
24 #ifndef _SCHILY_MCONFIG_H
25 #include <schily/mconfig.h>
26 #endif
27 #ifndef _SCHILY_UTYPES_H
28 #include <schily/utypes.h>
29 #endif
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 /*
36 * Return values for get*args()/get*files()
37 *
38 * This package calls options "flags", they are returned from get*args().
39 *
40 * Note that NOTAFILE is not returned by the interface functions.
41 * NOTAFILE is however used as return code from the user's callback functions
42 * to signal that the current arg may be an option the callback function does
43 * not know and definitely is no file type argument.
44 *
45 * General rules for the return code of the interface functions
46 * get*args()/get*files():
47 *
48 * > 0 A file type argument was found
49 * 0 All arguments have been parsed
50 * < 0 An error occured
51 *
52 * Flag and file arg processing should be terminated after getting a return
53 * code <= 0.
54 */
55 #define FLAGDELIM 2 /* "--" stopped flag processing */
56 #define NOTAFLAG 1 /* Not a flag type argument */
57 #define NOARGS 0 /* No more args */
58 #define BADFLAG (-1) /* Not a valid flag argument */
59 #define BADFMT (-2) /* Error in format string */
60 #define NOTAFILE (-3) /* Seems to be a flag type */
61
62 /*
63 * The callback functions are called with the following parameters:
64 *
65 * arg The option argument
66 * valp A pointer to the related value argument from a get*arg*() call
67 * pac A pointer to the current argument counter
68 * pav A pointer to the current argument vector
69 * opt The option that caused the call
70 *
71 * The return value of the callback function may be:
72 *
73 * FLAGDELIM Pretend "--" stopped flag processing
74 * FLAGPARSED A valid flag was found, getallargs() will continue scanning
75 * ------------ the following codes will interrupt getallargs() processing:
76 * NOARGS Pretend all arguments have been examined
77 * BADFLAG Not a valid flag argument
78 * BADFMT General Error
79 * NOTAFILE Continue to check the format string for matches with option arg
80 */
81 #define FLAGPARSED 1 /* Flag was sucessfully parsed */
82
83 typedef int (*getargfun) __PR((const char *__arg, void *__valp));
84 typedef int (*getpargfun) __PR((const char *__arg, void *__valp,
85 int *__pac, char *const **__pav,
86 const char *__opt));
87
88 #define NO_ARGFUN (getargpfun)0
89
90 struct ga_flags {
91 const char *ga_format; /* Comma separated list for one flag */
92 void *ga_arg; /* Ptr. to variable to fill for flag */
93 getpargfun ga_funcp; /* Ptr. for function to call (&/~) */
94 };
95
96 struct ga_props {
97 UInt32_t ga_flags; /* Flags to define behavior */
98 UInt32_t ga_oflags; /* State flags */
99 size_t ga_size; /* Size of this struct gs_props */
100 };
101
102 /*
103 * This may be used instead of a struct ga_props * parameter:
104 */
105 #define GA_NO_PROPS (struct ga_props *)0 /* Default behavior */
106 #define GA_POSIX_PROPS (struct ga_props *)-1 /* POSIX behavior */
107
108 /*
109 * Definitions for ga_flags
110 */
111 #define GAF_DEFAULT 0x00 /* The default behavior */
112 #define GAF_NO_PLUS 0x01 /* Options may not start with '+' */
113 #define GAF_NO_EQUAL 0x02 /* Disallow '=' between opt and val */
114 #define GAF_NEED_DASH 0x04 /* Need dash before (-name=val), */
115 /* name=val is not allowed */
116 #define GAF_DELIM_DASHDASH 0x08 /* "--" stops even get?allargs() */
117 #define GAF_POSIX 0x1000 /* Will be expanded as shown below */
118
119 /*
120 * POSIX does not allow options in the form "+option", "-option=value" or
121 * "option=value". get*files() needs to know what may be a valid option.
122 *
123 * If ga_flags == GAF_POSIX, ga_flags is replaced with the value
124 * of the current definition for GAF_POSIX_DEFAULT.
125 *
126 * GAF_NO_PLUS do not allow options to start with a '+'
127 * GAF_NO_EQUAL do not allow options to contain '=' between name & val
128 *
129 * Warning: future versions may need different flags for POSIX, better use the
130 * GA_POSIX_PROPS "struct" or the GAF_POSIX flag.
131 */
132 #define GAF_POSIX_DEFAULT (GAF_NO_PLUS | GAF_NO_EQUAL)
133
134 /*
135 * Keep in sync with schily.h
136 */
137 extern int getallargs __PR((int *, char * const**, const char *, ...));
138 extern int getargs __PR((int *, char * const**, const char *, ...));
139 extern int getfiles __PR((int *, char * const**, const char *));
140 extern char *getargerror __PR((int));
141
142 /*
143 * The new list versions of the functions need struct ga_props and thus need
144 * getargs.h
145 */
146 extern int getlallargs __PR((int *, char * const**, struct ga_props *,
147 const char *, ...));
148 extern int getlargs __PR((int *, char * const**, struct ga_props *,
149 const char *, ...));
150 extern int getlfiles __PR((int *, char * const**, struct ga_props *,
151 const char *));
152 extern int _getarginit __PR((struct ga_props *, size_t, UInt32_t));
153
154 #define getarginit(p, f) _getarginit(p, sizeof (struct ga_props), f)
155
156 /*
157 * The vector versions of the functions need struct ga_flags and thus need
158 * getargs.h
159 */
160 extern int getvallargs __PR((int *, char * const**, struct ga_props *,
161 struct ga_flags *));
162 extern int getvargs __PR((int *, char * const**, struct ga_props *,
163 struct ga_flags *));
164 extern int getvfiles __PR((int *, char * const**, struct ga_props *,
165 struct ga_flags *));
166
167 #ifdef __cplusplus
168 }
169 #endif
170
171 #endif /* _SCHILY_GETARGS_H */