return (retval==ERROR_OK)?JIM_OK:JIM_ERR;
}
+/* nice short description of source file */
+#define __THIS__FILE__ "command.c"
+
command_t* register_command(command_context_t *context, command_t *parent, char *name, int (*handler)(struct command_context_s *context, char* name, char** args, int argc), enum command_mode mode, char *help)
{
command_t *c, *p;
/* we now need to add an overrideable proc */
const char *override_name=alloc_printf("proc %s%s%s {args} {if {[catch {eval \"ocd_%s%s%s $args\"}]==0} {return \"\"} else { return -code error }", t1, t2, t3, t1, t2, t3);
- Jim_Eval_Named(interp, override_name, __FILE__, __LINE__ );
+ Jim_Eval_Named(interp, override_name, __THIS__FILE__, __LINE__ );
free((void *)override_name);
/* accumulate help text in Tcl helptext list. */
- Jim_Obj *helptext=Jim_GetGlobalVariableStr(interp, "ocd_helptext", JIM_ERRMSG);
- if (Jim_IsShared(helptext))
- helptext = Jim_DuplicateObj(interp, helptext);
+ Jim_Obj *helptext=Jim_GetGlobalVariableStr(interp, "ocd_helptext", JIM_ERRMSG);
+ if (Jim_IsShared(helptext))
+ helptext = Jim_DuplicateObj(interp, helptext);
Jim_Obj *cmd_entry=Jim_NewListObj(interp, NULL, 0);
Jim_Obj *cmd_list=Jim_NewListObj(interp, NULL, 0);
return ERROR_INVALID_ARGUMENTS;
/* find command */
- for (c = context->commands; c; c = c->next)
- {
+ c = context->commands;
+
+ while(NULL != c)
+ {
if (strcmp(name, c->name) == 0)
{
/* unlink command */
}
else
{
+ /* first element in command list */
context->commands = c->next;
}
-
+
/* unregister children */
- if (c->children)
+ while(NULL != c->children)
{
- for (c2 = c->children; c2; c2 = c2->next)
- {
- free(c2->name);
- free(c2);
- }
+ c2 = c->children;
+ c->children = c->children->next;
+ free(c2->name);
+ c2->name = NULL;
+ free(c2);
+ c2 = NULL;
}
-
+
/* delete command */
free(c->name);
+ c->name = NULL;
free(c);
+ c = NULL;
+ return ERROR_OK;
}
-
+
/* remember the last command for unlinking */
p = c;
+ c = c->next;
}
return ERROR_OK;
* The latter bit isn't precisely neat, but will do for now.
*/
LOG_USER_N("%s", string);
- // We already printed it above
- //command_output_text(context, string);
+ /* We already printed it above */
+ /* command_output_text(context, string); */
free(string);
}
* The latter bit isn't precisely neat, but will do for now.
*/
LOG_USER_N("%s", string);
- // We already printed it above
- //command_output_text(context, string);
+ /* We already printed it above */
+ /* command_output_text(context, string); */
free(string);
}
retcode = Jim_SetAssocData(interp, "retval", NULL, &retval);
if (retcode == JIM_OK)
{
- retcode = Jim_Eval_Named(interp, line, __FILE__, __LINE__ );
+ retcode = Jim_Eval_Named(interp, line, __THIS__FILE__, __LINE__ );
Jim_DeleteAssocData(interp, "retval");
}
return NULL;
}
-
static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
if (argc != 2)
log_add_callback(tcl_output, tclOutput);
- retcode = Jim_Eval_Named(interp, str, __FILE__, __LINE__ );
+ retcode = Jim_Eval_Named(interp, str, __THIS__FILE__, __LINE__ );
log_remove_callback(tcl_output, tclOutput);
Jim_CreateCommand(interp, name, cmd, NULL, NULL);
/* FIX!!! it would be prettier to invoke add_help_text...
- accumulate help text in Tcl helptext list. */
+ * accumulate help text in Tcl helptext list. */
Jim_Obj *helptext=Jim_GetGlobalVariableStr(interp, "ocd_helptext", JIM_ERRMSG);
if (Jim_IsShared(helptext))
helptext = Jim_DuplicateObj(interp, helptext);
Jim_ListAppendElement(interp, helptext, cmd_entry);
}
-
/* return global variable long value or 0 upon failure */
long jim_global_long(const char *variable)
{