*/
struct command_invocation {
struct command_context *ctx;
+ const char *name;
unsigned argc;
const char **argv;
};
* Use this macro to access the name of the command being handled,
* rather than accessing the variable directly. It may be moved.
*/
-#define CMD_NAME CMD_ARGV[-1]
+#define CMD_NAME cmd->name
/// The type signature for commands' handler functions.
int command_context_mode(struct command_context *context, enum command_mode mode);
-struct command_context* command_init(void);
+/**
+ * Creates a new command context using the startup TCL provided.
+ */
+struct command_context* command_init(const char *startup_tcl);
int command_done(struct command_context *context);
void command_print(struct command_context *context, const char *format, ...)
} \
} 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);