From cd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 16 Oct 2008 12:21:02 +0000 Subject: added capture command to capture log output. Useful when wanting to capture log output from tcl procedures that invoke openocd commands git-svn-id: svn://svn.berlios.de/openocd/trunk@1069 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/helper/command.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/helper/command.c b/src/helper/command.c index 8dde2568..d34c402b 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -624,6 +624,32 @@ static char* openocd_jim_fgets(char *s, int size, void *cookie) return NULL; } + +static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + if (argc != 2) + return JIM_ERR; + int retcode; + const char *str = Jim_GetString(argv[1], NULL); + + /* capture log output and return it */ + Jim_Obj *tclOutput = Jim_NewStringObj(interp, "", 0); + /* a garbage collect can happen, so we need a reference count to this object */ + Jim_IncrRefCount(tclOutput); + + log_add_callback(tcl_output, tclOutput); + + retcode = Jim_Eval_Named(interp, str, __FILE__, __LINE__ ); + + log_remove_callback(tcl_output, tclOutput); + + /* We dump output into this local variable */ + Jim_SetResult(interp, tclOutput); + Jim_DecrRefCount(interp, tclOutput); + + return retcode; +} + command_context_t* command_init() { command_context_t* context = malloc(sizeof(command_context_t)); @@ -645,6 +671,7 @@ command_context_t* command_init() Jim_CreateCommand(interp, "ocd_find", jim_find, NULL, NULL); Jim_CreateCommand(interp, "echo", jim_echo, NULL, NULL); + Jim_CreateCommand(interp, "capture", jim_capture, NULL, NULL); /* Set Jim's STDIO */ interp->cookie_stdin = interp; -- cgit v1.2.3