return words;
}
-static struct command_context *current_command_context(Jim_Interp *interp)
+struct command_context *current_command_context(Jim_Interp *interp)
{
/* grab the command context from the associated data */
struct command_context *cmd_ctx = Jim_GetAssocData(interp, "context");
if (NULL == cmd_ctx)
{
/* Tcl can invoke commands directly instead of via command_run_line(). This would
- * happen when the Jim Tcl interpreter is provided by eCos.
+ * happen when the Jim Tcl interpreter is provided by eCos or if we are running
+ * commands in a startup script.
+ *
+ * A telnet or gdb server would provide a non-default command context to
+ * handle piping of error output, have a separate current target, etc.
*/
cmd_ctx = global_cmd_ctx;
}
if (NULL == override_name)
return JIM_ERR;
- retval = Jim_Eval_Named(interp, override_name, __THIS__FILE__ , __LINE__);
+ retval = Jim_Eval_Named(interp, override_name, 0, 0);
free((void *)override_name);
return retval;
struct command *c = command_find(*head, name);
if (NULL != c)
{
- LOG_ERROR("command '%s' is already registered in '%s' context",
+ /* TODO: originally we treated attempting to register a cmd twice as an error
+ * Sometimes we need this behaviour, such as with flash banks.
+ * http://www.mail-archive.com/openocd-development@lists.berlios.de/msg11152.html */
+ LOG_DEBUG("command '%s' is already registered in '%s' context",
name, parent ? parent->name : "<global>");
return c;
}
retcode = Jim_SetAssocData(interp, "retval", NULL, &retval);
if (retcode == JIM_OK)
{
- retcode = Jim_Eval_Named(interp, line, __THIS__FILE__, __LINE__);
+ retcode = Jim_Eval_Named(interp, line, 0, 0);
Jim_DeleteAssocData(interp, "retval");
}