#ifndef __SCC_OPTPARSER_H__ #define __SCC_OPTPARSER_H__ typedef struct scc_optparse_opt { const char prefix; const char short_name; const char *long_name; int min_args; int max_args; int parsed_args; const char *default_value; void (*invoke)(void *value); } scc_optparse_opt_t; typedef enum scc_optparse_error { SCC_OPT_ERROR_NONE, SCC_OPT_ERROR_NOT_FOUND_LONG_ARG, SCC_OPT_ERROR_NOT_FOUND_SHORT_ARG, SCC_OPT_ERROR_NOT_ENOUGH_ARGS, SCC_OPT_ERROR_TOO_MANY_ARGS, } scc_optparse_error_t; typedef struct scc_optparse_result { scc_optparse_opt_t *opt; const char *value; int error; } scc_optparse_result_t; typedef struct { int argc; const char **argv; scc_optparse_opt_t *opts; scc_optparse_opt_t *prev; int handle_positional; int current_arg_pos; int short_opt_pos; } scc_optparse_t; void scc_optparse_init(scc_optparse_t *parser, int argc, const char **argv); void scc_optparse_drop(scc_optparse_t *parser); void scc_optparse_set(scc_optparse_t *parser, scc_optparse_opt_t *opts); void scc_optparse_reset(scc_optparse_t *parser); void scc_optparse_parse(scc_optparse_t *parser, scc_optparse_result_t *res); #endif /* __SCC_OPTPARSER_H__ */