5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
..
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#include <k/io.h>
#include <k/type.h>
#include <k/internal.egroup.h>
/* input types */
typedef struct kcli_opt {
codepoint id;
const char* name;
enum kcli_opt_kind {
kcli_opt_none /* flag is disabled and hidden */,
kcli_opt_string /* flag takes a string argument */,
kcli_opt_flag /* on if present, off if absent */,
kcli_opt_toggle /* off by default, value toggles
* for each occurrence */,
................................................................................
kcli_param_int = 0x40,
kcli_param_oct = kcli_param_int | 8,
kcli_param_dec = kcli_param_int | 10,
kcli_param_hex = kcli_param_int | 16,
} kind;
enum kcli_rule {
kcli_rule_forbidden,
kcli_rule_optional,
kcli_rule_required,
} rule;
} kcli_param;
typedef struct kcli_set {
const char* name;
const char* version;
const char** args; sz argc;
const char* desc;
................................................................................
typedef enum kcli_cond {
kcli_cond_ok = kcli_cond_id,
kcli_cond_extra /* parse succeded, but arguments or
flags were left over */,
kcli_cond_fail /* unspecified error */,
kcli_cond_parse /* bad syntax, parse failed */,
} kcli_cond;
typedef enum kcli_flag {
kcli_flag_off = 0,
kcli_flag_on = 1,
} kcli_flag;
|
|
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
..
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#include <k/io.h>
#include <k/type.h>
#include <k/internal.egroup.h>
/* input types */
typedef struct kcli_opt {
rune id;
const char* name;
enum kcli_opt_kind {
kcli_opt_none /* flag is disabled and hidden */,
kcli_opt_string /* flag takes a string argument */,
kcli_opt_flag /* on if present, off if absent */,
kcli_opt_toggle /* off by default, value toggles
* for each occurrence */,
................................................................................
kcli_param_int = 0x40,
kcli_param_oct = kcli_param_int | 8,
kcli_param_dec = kcli_param_int | 10,
kcli_param_hex = kcli_param_int | 16,
} kind;
enum kcli_rule {
kcli_rule_forbidden,
kcli_rule_required,
kcli_rule_optional,
kcli_rule_overflow,
} rule;
void* val;
const char* desc;
} kcli_param;
typedef struct kcli_set {
const char* name;
const char* version;
const char** args; sz argc;
const char* desc;
................................................................................
typedef enum kcli_cond {
kcli_cond_ok = kcli_cond_id,
kcli_cond_extra /* parse succeded, but arguments or
flags were left over */,
kcli_cond_fail /* unspecified error */,
kcli_cond_parse /* bad syntax, parse failed */,
kcli_cond_overlong /* a string in the configuration structures is longer than allowed */,
} kcli_cond;
typedef enum kcli_flag {
kcli_flag_off = 0,
kcli_flag_on = 1,
} kcli_flag;
|