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
..
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
* `size_t optc` - the number of options in the list to process.
a kcli_set might be used like so:
#include <k/core.h>
#include <k/io.h>
#include <k/cli.h>
u8 entry(kenv e) {
kcli_flag aardvark;
kcli_flag zebra;
char* user;
char* password;
long age;
kcli_param* params = {
{ "user", kcli_param_string, kcli_class_required,
&user, "the user to log in as" }
// or Kcli_param(user,string,required,"the user to log in as"),
{ "age", kcli_param_dec, kcli_class_optional,
&age, "the age of the user" }
// or Kcli_param(age,dec,optional,"the age of the user"),
};
kcli_opt* options = {
{ 'a', "aardvark", kcli_opt_flag, &aardvark,
"a nocturnal burrowing mammal" },
// or Kcli_opt(aardvark, 'a', flag, "a nocturnal burrowing mammal")
{ 'z', "zebra", kcli_opt_flag, &zebra,
"a striped equine" },
{ 'p', "password", kcli_opt_string, &password,
"the password to log in with" }
};
kcli_set me = {
"demo", e.argc, e.argv,
"a demonstration of the kcli_set type",
params, Kmsz(params),
options, Kmsz(options)
},
size_t args_parsed = kcli_parse(&me);
if (args_parsed == 0) { kcli_usage(&me, e.err); return 1; }
return 0;
}
### struct kcli_opt
a `kcli_opt` is a representation of a command-line flag and its function. each option must have a unique `id` and/or a unique `name`.
................................................................................
* `kcli_opt_string` - flag tells kcli to add a string to the list of expected parameters; appropriate string will be returned
* `kcli_opt_oct` - flag tells kcli to add an octal number to the list of expected parameters
* `kcli_opt_dec` - flag tells kcli to add a decimal number to the list of expected parameters
* `kcli_opt_hex` - flag tells kcli to add a hexdecimal number to the list of expected parameters
* `kcli_opt_flag` - flag is an option: will return `kcli_flag_on` if entered at least once, `kcli_flag_off` otherwise.
* `kcli_opt_toggle` - flag toggles value on and off: will return `kcli_flag_on` if entered an odd number of times, `kcli_flag_off` otherwise.
* `kcli_opt_accumulate` - flag increments a value every time it is entered; often used to implement `-v (--verbose)`-style options (e.g. `-vvvv` would return a value of `4`).
### struct kcli_param
`kcli_param` describes a parameter that may be passed to the program whether or not any flags are passed.
* `const char* name` - a short name for the parameter
* `kcli_param_kind kind` - the kind of parameter passed
* `kcli_class class` - whether or not the parameter is optional
|
|
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
..
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
* `size_t optc` - the number of options in the list to process.
a kcli_set might be used like so:
#include <k/core.h>
#include <k/io.h>
#include <k/cli.h>
stat entry(kenv e) {
kcli_flag aardvark;
kcli_flag zebra;
char* user;
char* password;
long age;
kcli_param params[] = {
{ "user", kcli_param_string, kcli_class_required,
&user, "the user to log in as" }
// or Kcli_param(user,string,required,"the user to log in as"),
{ "age", kcli_param_dec, kcli_class_optional,
&age, "the age of the user" }
// or Kcli_param(age,dec,optional,"the age of the user"),
};
kcli_opt options[] = {
{ 'a', "aardvark", kcli_opt_flag, &aardvark,
"a nocturnal burrowing mammal" },
// or Kcli_opt(aardvark, 'a', flag, "a nocturnal burrowing mammal")
{ 'z', "zebra", kcli_opt_flag, &zebra,
"a striped equine" },
{ 'p', "password", kcli_opt_string, &password,
"the password to log in with" }
};
kcli_set argset = {
"demo", e.argc, e.argv,
"a demonstration of the kcli_set type",
params, Kmsz(params),
options, Kmsz(options)
},
size_t args_parsed = kcli_parse(&argset);
if (args_parsed == 0) { kcli_usage(&me, e.err); return 1; }
return 0;
}
### struct kcli_opt
a `kcli_opt` is a representation of a command-line flag and its function. each option must have a unique `id` and/or a unique `name`.
................................................................................
* `kcli_opt_string` - flag tells kcli to add a string to the list of expected parameters; appropriate string will be returned
* `kcli_opt_oct` - flag tells kcli to add an octal number to the list of expected parameters
* `kcli_opt_dec` - flag tells kcli to add a decimal number to the list of expected parameters
* `kcli_opt_hex` - flag tells kcli to add a hexdecimal number to the list of expected parameters
* `kcli_opt_flag` - flag is an option: will return `kcli_flag_on` if entered at least once, `kcli_flag_off` otherwise.
* `kcli_opt_toggle` - flag toggles value on and off: will return `kcli_flag_on` if entered an odd number of times, `kcli_flag_off` otherwise.
* `kcli_opt_accumulate` - flag increments a value every time it is entered; often used to implement `-v (--verbose)`-style options (e.g. `-vvvv` would return a value of `4`).
* `kcli_opt_enum` - flag is one of a series of enumerated values, which will be matched against a table to yield the associated integer.
### struct kcli_param
`kcli_param` describes a parameter that may be passed to the program whether or not any flags are passed.
* `const char* name` - a short name for the parameter
* `kcli_param_kind kind` - the kind of parameter passed
* `kcli_class class` - whether or not the parameter is optional
|