util_cmdline.h 1.46 KB
Newer Older
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
/***** 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 );