summaryrefslogtreecommitdiff
path: root/src/helper/command.h
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-18 05:19:34 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-18 15:51:07 -0800
commitbd5a1799ea63c2a863eae4aca2b55e41373d7528 (patch)
tree4334d94e264076dbf8830ee4afd859cd0e240938 /src/helper/command.h
parentbd9d05e14bd08352811561e2d59a7ef2d9f3ed25 (diff)
downloadopenocd+libswd-bd5a1799ea63c2a863eae4aca2b55e41373d7528.tar.gz
openocd+libswd-bd5a1799ea63c2a863eae4aca2b55e41373d7528.tar.bz2
openocd+libswd-bd5a1799ea63c2a863eae4aca2b55e41373d7528.tar.xz
openocd+libswd-bd5a1799ea63c2a863eae4aca2b55e41373d7528.zip
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.
Diffstat (limited to 'src/helper/command.h')
-rw-r--r--src/helper/command.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/helper/command.h b/src/helper/command.h
index 05088b56..9f2d9712 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);