add COMMAND_PARSE_BOOL macro and friends
Adds several macros similar to COMMAND_PARSE_NUMBER, but for parsing boolean command arguments. Two flavors are provided to provide drop-in compatibility with existing code, allow for the elimination of a lot of code bloat while improving the error checking and reporting. COMMAND_PARSE_ON_OFF parses "on"/"off" command parameters. COMMAND_PARSE_ENABLE parses "enable"/"disable" command parameters. Both print the error and return an error out of the calling function.
This commit is contained in:
parent
bd9d05e14b
commit
bd5a1799ea
|
@ -263,6 +263,34 @@ DECLARE_PARSE_WRAPPER(_s8, int8_t);
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the string @c as a binary parameter, storing the boolean value
|
||||||
|
* in @c out. The strings @c on and @c off are used to match different
|
||||||
|
* strings for true and false options (e.g. "on" and "off" or
|
||||||
|
* "enable" and "disable").
|
||||||
|
*/
|
||||||
|
#define COMMAND_PARSE_BOOL(in, out, on, off) \
|
||||||
|
do { \
|
||||||
|
if (strcmp(in, on) == 0) \
|
||||||
|
out = true; \
|
||||||
|
else if (strcmp(in, off) == 0) \
|
||||||
|
out = false; \
|
||||||
|
else { \
|
||||||
|
command_print(CMD_CTX, stringify(out) \
|
||||||
|
" option value ('%s') is not valid", in); \
|
||||||
|
command_print(CMD_CTX, " choices are '%s' or '%s'", \
|
||||||
|
on, off); \
|
||||||
|
return ERROR_COMMAND_SYNTAX_ERROR; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/// parses an on/off command argument
|
||||||
|
#define COMMAND_PARSE_ON_OFF(in, out) \
|
||||||
|
COMMAND_PARSE_BOOL(in, out, "on", "off")
|
||||||
|
/// parses an enable/disable command argument
|
||||||
|
#define COMMAND_PARSE_ENABLE(in, out) \
|
||||||
|
COMMAND_PARSE_BOOL(in, out, "enable", "disable")
|
||||||
|
|
||||||
void script_debug(Jim_Interp *interp, const char *cmd,
|
void script_debug(Jim_Interp *interp, const char *cmd,
|
||||||
unsigned argc, Jim_Obj *const *argv);
|
unsigned argc, Jim_Obj *const *argv);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue