ReactOS 0.4.15-dev-7924-g5949c20
getargs.h
Go to the documentation of this file.
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
32extern "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
83typedef int (*getargfun) __PR((const char *__arg, void *__valp));
84typedef 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
90struct 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
96struct 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 */
137extern int getallargs __PR((int *, char * const**, const char *, ...));
138extern int getargs __PR((int *, char * const**, const char *, ...));
139extern int getfiles __PR((int *, char * const**, const char *));
140extern 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 */
146extern int getlallargs __PR((int *, char * const**, struct ga_props *,
147 const char *, ...));
148extern int getlargs __PR((int *, char * const**, struct ga_props *,
149 const char *, ...));
150extern int getlfiles __PR((int *, char * const**, struct ga_props *,
151 const char *));
152extern 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 */
160extern int getvallargs __PR((int *, char * const**, struct ga_props *,
161 struct ga_flags *));
162extern int getvargs __PR((int *, char * const**, struct ga_props *,
163 struct ga_flags *));
164extern 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 */
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
int getargfun __PR((const char *__arg, void *__valp))
Definition: getargs.h:83
void * ga_arg
Definition: getargs.h:92
getpargfun ga_funcp
Definition: getargs.h:93
const char * ga_format
Definition: getargs.h:91
UInt32_t ga_oflags
Definition: getargs.h:98
UInt32_t ga_flags
Definition: getargs.h:97
size_t ga_size
Definition: getargs.h:99
EXPORT int _getarginit(struct ga_props *props, size_t size, UInt32_t flags)
Definition: getargs.c:121
EXPORT int getlargs(int *pac, pav, struct ga_props *props, char *fmt, va_alist)
Definition: getargs.c:200
EXPORT int getfiles(int *pac, pav, const char *fmt)
Definition: getargs.c:342
EXPORT int getargs(int *pac, pav, char *fmt, va_alist)
Definition: getargs.c:170
EXPORT int getlallargs(int *pac, pav, struct ga_props *props, char *fmt, va_alist)
Definition: getargs.c:278
EXPORT int getallargs(int *pac, pav, char *fmt, va_alist)
Definition: getargs.c:245
EXPORT int getvallargs(int *pac, pav, struct ga_props *props, struct ga_flags *vfmt)
Definition: getargs.c:314
EXPORT int getvfiles(int *pac, pav, struct ga_props *props, struct ga_flags *vfmt)
Definition: getargs.c:371
EXPORT int getlfiles(int *pac, pav, struct ga_props *props, const char *fmt)
Definition: getargs.c:356
EXPORT char * getargerror(int err)
Definition: getargs.c:1335
EXPORT int getvargs(int *pac, pav, struct ga_props *props, struct ga_flags *vfmt)
Definition: getargs.c:226