From bd5a1799ea63c2a863eae4aca2b55e41373d7528 Mon Sep 17 00:00:00 2001 From: Zachary T Welch Date: Wed, 18 Nov 2009 05:19:34 -0800 Subject: [PATCH] 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. --- src/helper/command.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/helper/command.h b/src/helper/command.h index 05088b56f6..9f2d97124e 100644 --- a/src/helper/command.h +++ b/src/helper/command.h @@ -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); -- 2.30.2