Duane Ellis: "target as an [tcl] object" feature.
[fw/openocd] / src / helper / command.c
index 811328dc95d42cdd331ce26f90264a1ec9cbcefd..9719d1860ce6b24b389eeae9f33148bcdec76829 100644 (file)
@@ -209,8 +209,8 @@ command_t* register_command(command_context_t *context, command_t *parent, char
        free((void *)full_name);
        
        /* we now need to add an overrideable proc */
-       const char *override_name=alloc_printf("proc %s%s%s {args} {eval \"ocd_%s%s%s $args\";return \"\"}", t1, t2, t3, t1, t2, t3);
-       Jim_Eval(interp, override_name);        
+       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__ );     
        free((void *)override_name);
        
        /* accumulate help text in Tcl helptext list.  */
@@ -430,7 +430,7 @@ int command_run_line(command_context_t *context, char *line)
                retcode = Jim_SetAssocData(interp, "retval", NULL, &retval);
                if (retcode == JIM_OK)
                {
-                       retcode = Jim_Eval(interp, line);
+                       retcode = Jim_Eval_Named(interp, line, __FILE__, __LINE__ );
                        
                        Jim_DeleteAssocData(interp, "retval");
                }       
@@ -655,9 +655,10 @@ command_context_t* command_init()
        
        add_default_dirs();
 
+#ifdef JIM_EMBEDDED
        Jim_EventLoopOnLoad(interp);
-
-       if (Jim_Eval(interp, startup_tcl)==JIM_ERR)
+#endif
+       if (Jim_Eval_Named(interp, startup_tcl, "embedded:startup.tcl",1)==JIM_ERR)
        {
                LOG_ERROR("Failed to run startup.tcl (embedded into OpenOCD compile time)");
                Jim_PrintErrorMessage(interp);
@@ -692,7 +693,7 @@ int handle_sleep_command(struct command_context_s *cmd_ctx, char *cmd, char **ar
        if (argc == 1)
        {
                duration = strtoul(args[0], NULL, 0);
-               usleep(duration * 1000);
+               alive_sleep(duration);
        }
 
        return ERROR_OK;
@@ -708,8 +709,9 @@ int handle_fast_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
        return ERROR_OK;
 }
 
-void process_jim_events() 
+void process_jim_events(void
 {
+#ifdef JIM_EMBEDDED
        static int recursion = 0;
 
        if (!recursion) 
@@ -718,6 +720,7 @@ void process_jim_events()
                Jim_ProcessEvents (interp, JIM_ALL_EVENTS|JIM_DONT_WAIT);
                recursion--;
        }
+#endif
 }
 
 void register_jim(struct command_context_s *cmd_ctx, const char *name, int (*cmd)(Jim_Interp *interp, int argc, Jim_Obj *const *argv), const char *help)