command: capture command now handles both types commands
[fw/openocd] / src / helper / command.h
index 611db8733eb806df4e185a9457dc2b268b1e3aa1..1bf2cb48cb1b06ba4365fc9c44ca879bc510dd85 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef COMMAND_H
 #define COMMAND_H
 
-#include "types.h"
+#include <helper/types.h>
 
 /* Integrate the JIM TCL interpretor into the command processing. */
 #if BUILD_ECOSBOARD
@@ -32,7 +32,7 @@
 /* Jim is provied by eCos */
 #include <cyg/jimtcl/jim.h>
 #else
-#include "jim.h"
+#include <helper/jim.h>
 #endif
 
 /* To achieve C99 printf compatibility in MinGW, gnu_printf should be
@@ -253,17 +253,6 @@ struct command_registration {
 struct command* register_command(struct command_context *cmd_ctx,
                struct command *parent, const struct command_registration *rec);
 
-#define COMMAND_REGISTER(_cmd_ctx, _parent, _name, _handler, _mode, _help) \
-       ({ \
-               struct command_registration cr = { \
-                               .name = _name, \
-                               .handler = _handler, \
-                               .mode = _mode, \
-                               .help = _help, \
-                       }; \
-               register_command(_cmd_ctx, _parent, &cr); \
-       })
-
 /**
  * Register one or more commands in the specified context, as children
  * of @c parent (or top-level commends, if NULL).  In a registration's
@@ -322,10 +311,16 @@ void command_set_output_handler(struct command_context* context,
 
 int command_context_mode(struct command_context *context, enum command_mode mode);
 
+/* Return the current command context associated with the Jim interpreter or
+ * alternatively the global default command interpreter
+ */
+struct command_context *current_command_context(Jim_Interp *interp);
 /**
- * Creates a new command context using the startup TCL provided.
+ * Creates a new command context using the startup TCL provided and
+ * the existing Jim interpreter, if any. If interp == NULL, then command_init
+ * creates a command interpreter.
  */
-struct command_context* command_init(const char *startup_tcl);
+struct command_context* command_init(const char *startup_tcl, Jim_Interp *interp);
 /**
  * Creates a copy of an existing command context.  This does not create
  * a deep copy of the command list, so modifications in one context will
@@ -338,7 +333,7 @@ struct command_context* copy_command_context(struct command_context* cmd_ctx);
 /**
  * Frees the resources associated with a command context.  The commands
  * are not removed, so unregister_all_commands() must be called first.
- * @param cmd_ctx The command_context that will be destroyed.
+ * @param context The command_context that will be destroyed.
  */
 void command_done(struct command_context *context);
 
@@ -392,11 +387,11 @@ DECLARE_PARSE_WRAPPER(_s8, int8_t);
  */
 #define COMMAND_PARSE_NUMBER(type, in, out) \
        do { \
-               int retval = parse_##type(in, &(out)); \
-               if (ERROR_OK != retval) { \
+               int retval_macro_tmp = parse_##type(in, &(out)); \
+               if (ERROR_OK != retval_macro_tmp) { \
                        command_print(CMD_CTX, stringify(out) \
                                " option value ('%s') is not valid", in); \
-                       return retval; \
+                       return retval_macro_tmp; \
                } \
        } while (0)
 
@@ -409,13 +404,13 @@ DECLARE_PARSE_WRAPPER(_s8, int8_t);
 #define COMMAND_PARSE_BOOL(in, out, on, off) \
        do { \
                bool value; \
-               int retval = command_parse_bool_arg(in, &value); \
-               if (ERROR_OK != retval) { \
+               int retval_macro_tmp = command_parse_bool_arg(in, &value); \
+               if (ERROR_OK != retval_macro_tmp) { \
                        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 retval; \
+                       return retval_macro_tmp; \
                } \
                out = value; \
        } while (0)