65 lines
1.9 KiB
C
65 lines
1.9 KiB
C
#ifndef MR4TH_CMDLN_H
|
|
#define MR4TH_CMDLN_H
|
|
|
|
////////////////////////////////
|
|
// Types: Command Line Parsing
|
|
|
|
typedef struct CMDLN_Params{
|
|
String8 raw;
|
|
String8List list;
|
|
} CMDLN_Params;
|
|
|
|
typedef struct CMDLN_Node{
|
|
struct CMDLN_Node *next;
|
|
String8 string;
|
|
CMDLN_Params *params;
|
|
// (params == 0 ) -> 'input' (not a flag)
|
|
// (params != 0 ) -> flag
|
|
// (params == nil) -> flag has no parameters
|
|
} CMDLN_Node;
|
|
|
|
typedef CMDLN_Node CMDLN_Flag;
|
|
|
|
typedef struct CMDLN{
|
|
String8List raw;
|
|
String8 program;
|
|
CMDLN_Node *first;
|
|
CMDLN_Node *last;
|
|
U64 input_count;
|
|
U64 flag_count;
|
|
CMDLN_Node **inputs;
|
|
CMDLN_Node **flags;
|
|
} CMDLN;
|
|
|
|
////////////////////////////////
|
|
// Functions: Command Line Parsing
|
|
|
|
MR4TH_SYMBOL CMDLN* cmdln_from_args(Arena *arena, String8List *args);
|
|
MR4TH_SYMBOL CMDLN_Params* cmdln_params_from_string(Arena *arena, String8 flag_param);
|
|
|
|
MR4TH_SYMBOL U64 cmdln_input_count(CMDLN *cmdln);
|
|
MR4TH_SYMBOL String8 cmdln_input_from_idx(CMDLN *cmdln, U64 idx);
|
|
|
|
MR4TH_SYMBOL U64 cmdln_flag_count(CMDLN *cmdln);
|
|
MR4TH_SYMBOL CMDLN_Flag* cmdln_flag_from_idx(CMDLN *cmdln, U64 idx);
|
|
|
|
MR4TH_SYMBOL CMDLN_Params* cmdln_get_params(CMDLN *cmdln, String8 flagstr, char abbrev);
|
|
MR4TH_SYMBOL B32 cmdln_has_flag(CMDLN *cmdln, String8 flagstr, char abbrev);
|
|
MR4TH_SYMBOL String8 cmdln_get_str8(CMDLN *cmdln, String8 flagstr, char abbrev);
|
|
MR4TH_SYMBOL S64 cmdln_get_s64(CMDLN *cmdln, String8 flagstr, char abbrev);
|
|
MR4TH_SYMBOL F64 cmdln_get_f64(CMDLN *cmdln, String8 flagstr, char abbrev);
|
|
|
|
MR4TH_SYMBOL S64 cmdln_s64_from_str8(String8 valstr);
|
|
MR4TH_SYMBOL F64 cmdln_f64_from_str8(String8 valstr);
|
|
|
|
MR4TH_SYMBOL void cmdln_dump(Arena *arena, String8List *out, CMDLN *cmdln, U32 indent);
|
|
|
|
/* TODO:
|
|
** [ ] fuzz
|
|
** [ ] built in parser diagnostics
|
|
** [ ] built in misuse feedback
|
|
** [ ] help structurer
|
|
*/
|
|
|
|
#endif //MR4TH_CMDLN_H
|