summaryrefslogtreecommitdiff
path: root/src/include/skalibs/sgetopt.h
blob: 367edf3cd765825762749876ca5e9a2142ba175f (plain)
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