SICS-764: An alternative to the PSI capture command which works when capturing the "run" command.
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
#include <tcl.h>
|
#include <tcl.h>
|
||||||
#include <site.h>
|
#include <site.h>
|
||||||
#include <SCinter.h>
|
#include <SCinter.h>
|
||||||
|
#include <splitter.h>
|
||||||
|
|
||||||
#ifdef SICS_VALGRIND
|
#ifdef SICS_VALGRIND
|
||||||
#include <valgrind/memcheck.h>
|
#include <valgrind/memcheck.h>
|
||||||
@@ -322,6 +323,33 @@ int testLogCmd(SConnection *pCon, SicsInterp *pInter, void *pData,
|
|||||||
return OKOK;
|
return OKOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Writes multiline output from a command to a client.
|
||||||
|
* This is useful for implementing Tcl proc wrappers for commands.
|
||||||
|
* NOTE: SICS-764, currently this sends output to the client as well as capturing it.
|
||||||
|
* We should try to improve this in Release 3.2 see SICS-765
|
||||||
|
*/
|
||||||
|
int Ansto_Capture(SConnection *pCon, SicsInterp * pSics, void *pData, int argc, char *argv[]) {
|
||||||
|
char buffer[1024];
|
||||||
|
char *command, *data;
|
||||||
|
int status, inMacro;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
SCWrite(pCon, "ERROR: insufficient arguments to capture", eError);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
command = Arg2Tcl(argc - 1, &argv[1], buffer, sizeof buffer);
|
||||||
|
inMacro = pCon->iMacro;
|
||||||
|
pCon->iMacro = 0;
|
||||||
|
status = InterpExecute(pSics, pCon, command);
|
||||||
|
pCon->iMacro = inMacro;
|
||||||
|
if (command != buffer)
|
||||||
|
free(command);
|
||||||
|
data = ANETgetWBuffer(pCon->sockHandle);
|
||||||
|
SCWrite(pCon, data, eValue);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
void SiteInit(void) {
|
void SiteInit(void) {
|
||||||
#define INIT(F) { void F(void); F(); }
|
#define INIT(F) { void F(void); F(); }
|
||||||
/* insert here initialization routines ... */
|
/* insert here initialization routines ... */
|
||||||
@@ -376,6 +404,7 @@ static void AddCommands(SicsInterp *pInter)
|
|||||||
AddCommand(pInter, "sicslist", SicsList, NULL, NULL);
|
AddCommand(pInter, "sicslist", SicsList, NULL, NULL);
|
||||||
AddCommand(pInter, "FileEvalGlob", MacroFileEvalGlob, NULL, NULL);
|
AddCommand(pInter, "FileEvalGlob", MacroFileEvalGlob, NULL, NULL);
|
||||||
AddCommand(pInter, "Valgrind", Ansto_Valgrind, NULL, NULL);
|
AddCommand(pInter, "Valgrind", Ansto_Valgrind, NULL, NULL);
|
||||||
|
AddCommand(pInter, "anstocapture", Ansto_Capture, NULL, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tcl 8.5 has implemented the clock command in tcl rather then C.
|
* Tcl 8.5 has implemented the clock command in tcl rather then C.
|
||||||
|
|||||||
Reference in New Issue
Block a user