70 lines
1.5 KiB
C
70 lines
1.5 KiB
C
/***** defines *****/
|
|
#define NUMBER_OF_LOWERCASE_LETTERS_IN_LATIN_ALPHABET 26
|
|
|
|
/***** enums *****/
|
|
enum util_cmdline_arg_type
|
|
{
|
|
LIBCOMMON_CMDLINE_ARG_TYPE_INTEGER_RANGE,
|
|
LIBCOMMON_CMDLINE_ARG_TYPE_INTEGER,
|
|
LIBCOMMON_CMDLINE_ARG_TYPE_FLAG,
|
|
LIBCOMMON_CMDLINE_ARG_TYPE_UNSET
|
|
};
|
|
|
|
/***** structs *****/
|
|
struct util_cmdline_arg_integer_range
|
|
{
|
|
int long long unsigned
|
|
integer_start,
|
|
integer_end;
|
|
};
|
|
|
|
struct util_cmdline_arg_integer
|
|
{
|
|
int long long unsigned
|
|
integer;
|
|
};
|
|
|
|
struct util_cmdline_arg_flag
|
|
{
|
|
enum flag
|
|
flag;
|
|
};
|
|
|
|
union util_cmdline_arg_data
|
|
{
|
|
struct util_cmdline_arg_integer_range
|
|
integer_range;
|
|
|
|
struct util_cmdline_arg_integer
|
|
integer;
|
|
|
|
struct util_cmdline_arg_flag
|
|
flag;
|
|
};
|
|
|
|
struct util_cmdline_arg_letter_and_data
|
|
{
|
|
enum util_cmdline_arg_type
|
|
arg_type;
|
|
|
|
enum flag
|
|
processed_flag;
|
|
|
|
union util_cmdline_arg_data
|
|
arg_data;
|
|
};
|
|
|
|
struct util_cmdline_state
|
|
{
|
|
struct util_cmdline_arg_letter_and_data
|
|
args[NUMBER_OF_LOWERCASE_LETTERS_IN_LATIN_ALPHABET];
|
|
};
|
|
|
|
/***** public protoypes *****/
|
|
void util_cmdline_init( struct util_cmdline_state *cs );
|
|
void util_cmdline_cleanup( struct util_cmdline_state *cs );
|
|
void util_cmdline_add_arg( struct util_cmdline_state *cs, char arg_letter, enum util_cmdline_arg_type arg_type );
|
|
int util_cmdline_process_args( struct util_cmdline_state *cs, int argc, char **argv );
|
|
void util_cmdline_get_arg_data( struct util_cmdline_state *cs, char arg_letter, union util_cmdline_arg_data **arg_data );
|
|
|