1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
/* ISC license. */
#ifndef SGETOPT_H
#define SGETOPT_H
/* reentrant */
typedef struct subgetopt_s subgetopt_t, *subgetopt_t_ref ;
struct subgetopt_s
{
int ind ;
int err ;
int problem ;
char const *arg ;
unsigned int pos ;
char const *prog ;
} ;
#define SUBGETOPT_ZERO { .ind = 1, .err = 1, .problem = 0, .arg = 0, .pos = 0, .prog = 0 }
extern int subgetopt_r (int, char const *const *, char const *, subgetopt_t_ref) ;
/* non-reentrant */
extern int sgetopt_r (int, char const *const *, char const *, subgetopt_t_ref) ;
extern subgetopt_t subgetopt_here ;
#define subgetopt(argc, argv, opts) subgetopt_r((argc), (argv), (opts), &subgetopt_here)
#define sgetopt(argc, argv, opts) sgetopt_r((argc), (argv), (opts), &subgetopt_here)
#define sgetopt_prog() (subgetopt_here.prog = PROG)
/* define SUBGETOPT_SHORT if you don't mind potential name conflicts */
#ifdef SUBGETOPT_SHORT
# define getopt sgetopt
# define optarg subgetopt_here.arg
# define optind subgetopt_here.ind
# define opterr subgetopt_here.err
# define optopt subgetopt_here.problem
# define opteof (-1)
#endif
#endif
|