#ifndef MARISA_CMDOPT_H_
#define MARISA_CMDOPT_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef struct cmdopt_option_ {
// `name' specifies the name of this option.
// An array of options must be terminated with an option whose name == NULL.
const char *name;
// `has_name' specifies whether an option takes an argument or not.
// 0 specifies that this option does not have any argument.
// 1 specifies that this option has an argument.
// 2 specifies that this option may have an argument.
int has_arg;
// `flag' specifies an integer variable which is overwritten by cmdopt_next()
// with its return value.
int *flag;
// `val' specifies a return value of cmdopt_next(). This value is returned
// when cmdopt_next() finds this option.
int val;
} cmdopt_option;
typedef struct cmdopt_t_ {
// Command line arguments.
int argc;
char **argv;
// Option settings.
const cmdopt_option *longopts;
const char *optstring;
int optind; // Index of the next argument.
char *nextchar; // Next character.
char *optarg; // Argument of the last option.
int optopt; // Label of the last option.
char *optlong; // Long option.
int opterr; // Warning level (0: nothing, 1: warning, 2: all).
int longindex; // Index of the last long option.
int optnum; // Number of options.
} cmdopt_t;
// cmdopt_init() initializes a cmdopt_t for successive cmdopt_next()s.
void cmdopt_init(cmdopt_t *h, int argc, char **argv,
const char *optstring, const cmdopt_option *longopts);
// cmdopt_get() analyzes command line arguments and gets the next option.
int cmdopt_get(cmdopt_t *h);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // MARISA_CMDOPT_H_