]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.0.0/test/src/util_cmdline.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.0.0 / test / src / util_cmdline.h
1 /***** defines *****/
2 #define NUMBER_OF_LOWERCASE_LETTERS_IN_LATIN_ALPHABET 26
3
4 /***** enums *****/
5 enum util_cmdline_arg_type
6 {
7   LIBCOMMON_CMDLINE_ARG_TYPE_INTEGER_RANGE,
8   LIBCOMMON_CMDLINE_ARG_TYPE_INTEGER,
9   LIBCOMMON_CMDLINE_ARG_TYPE_FLAG,
10   LIBCOMMON_CMDLINE_ARG_TYPE_UNSET
11 };
12
13 /***** structs *****/
14 struct util_cmdline_arg_integer_range
15 {
16   int long long unsigned
17     integer_start,
18     integer_end;
19 };
20
21 struct util_cmdline_arg_integer
22 {
23   int long long unsigned
24     integer;
25 };
26
27 struct util_cmdline_arg_flag
28 {
29   enum flag
30     flag;
31 };
32
33 union util_cmdline_arg_data
34 {
35   struct util_cmdline_arg_integer_range
36     integer_range;
37
38   struct util_cmdline_arg_integer
39     integer;
40
41   struct util_cmdline_arg_flag
42     flag;
43 };
44
45 struct util_cmdline_arg_letter_and_data
46 {
47   enum util_cmdline_arg_type
48     arg_type;
49
50   enum flag
51     processed_flag;
52
53   union util_cmdline_arg_data
54     arg_data;
55 };
56
57 struct util_cmdline_state
58 {
59   struct util_cmdline_arg_letter_and_data
60     args[NUMBER_OF_LOWERCASE_LETTERS_IN_LATIN_ALPHABET];
61 };
62
63 /***** public protoypes *****/
64 void util_cmdline_init( struct util_cmdline_state *cs );
65 void util_cmdline_cleanup( struct util_cmdline_state *cs );
66 void util_cmdline_add_arg( struct util_cmdline_state *cs, char arg_letter, enum util_cmdline_arg_type arg_type );
67 int  util_cmdline_process_args( struct util_cmdline_state *cs, int argc, char **argv );
68 void util_cmdline_get_arg_data( struct util_cmdline_state *cs, char arg_letter, union util_cmdline_arg_data **arg_data );
69