1#ifndef MARISA_ALPHA_CMDOPT_H_
2#define MARISA_ALPHA_CMDOPT_H_
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8typedef struct cmdopt_option_ {
9  // `name' specifies the name of this option.
10  // An array of options must be terminated with an option whose name == NULL.
11  const char *name;
12
13  // `has_name' specifies whether an option takes an argument or not.
14  // 0 specifies that this option does not have any argument.
15  // 1 specifies that this option has an argument.
16  // 2 specifies that this option may have an argument.
17  int  has_arg;
18
19  // `flag' specifies an integer variable which is overwritten by cmdopt_next()
20  // with its return value.
21  int *flag;
22
23  // `val' specifies a return value of cmdopt_next(). This value is returned
24  // when cmdopt_next() finds this option.
25  int  val;
26} cmdopt_option;
27
28typedef struct cmdopt_t_ {
29  // Command line arguments.
30  int    argc;
31  char **argv;
32
33  // Option settings.
34  const cmdopt_option *longopts;
35  const char          *optstring;
36
37  int   optind;     // Index of the next argument.
38  char *nextchar;   // Next character.
39  char *optarg;     // Argument of the last option.
40  int   optopt;     // Label of the last option.
41  char *optlong;    // Long option.
42  int   opterr;     // Warning level (0: nothing, 1: warning, 2: all).
43  int   longindex;  // Index of the last long option.
44  int   optnum;     // Number of options.
45} cmdopt_t;
46
47// cmdopt_init() initializes a cmdopt_t for successive cmdopt_next()s.
48void cmdopt_init(cmdopt_t *h, int argc, char **argv,
49    const char *optstring, const cmdopt_option *longopts);
50
51// cmdopt_get() analyzes command line arguments and gets the next option.
52int cmdopt_get(cmdopt_t *h);
53
54#ifdef  __cplusplus
55}  // extern "C"
56#endif
57
58#endif  // MARISA_ALPHA_CMDOPT_H_
59