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:
Zachary T Welch 2009-11-18 05:19:34 -08:00
parent bd9d05e14b
commit bd5a1799ea

View File

@ -263,6 +263,34 @@ DECLARE_PARSE_WRAPPER(_s8, int8_t);
} \
} 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,
unsigned argc, Jim_Obj *const *argv);