- inserted command echo into exe manager

This commit is contained in:
zolliker
2005-03-30 14:27:44 +00:00
parent 6b745e8254
commit 3327c8d8bf
6 changed files with 55 additions and 13 deletions

4
exe.w
View File

@ -88,7 +88,7 @@ The interface to this buffer system comprises:
* @@return 1 on success, 0 on error * @@return 1 on success, 0 on error
*/ */
int exeBufProcess(pExeBuf self, SicsInterp *pSics, int exeBufProcess(pExeBuf self, SicsInterp *pSics,
SConnection *pCon, pICallBack pCall); SConnection *pCon, pICallBack pCall, int echo);
/** /**
* retrieves the executing range * retrieves the executing range
* @@param self The exe buffer to query * @@param self The exe buffer to query
@ -145,6 +145,7 @@ typedef struct __EXEMAN{
int exeStackPtr; int exeStackPtr;
int runList; int runList;
pExeBuf uploadBuffer; pExeBuf uploadBuffer;
int echo;
}ExeMan, *pExeMan; }ExeMan, *pExeMan;
@} @}
The fields: The fields:
@ -159,6 +160,7 @@ about the operation of this module.
\item[uploadBuffer] A exe buffer to which data is uploaded. Also serves \item[uploadBuffer] A exe buffer to which data is uploaded. Also serves
as a flag if uploading is possible. In this case uploadBuffer must be as a flag if uploading is possible. In this case uploadBuffer must be
not NULL. not NULL.
\item[echo] Echo flag. When set, SICS commands are echoed.
\end{itemize} \end{itemize}
The public interface to the exe manager are the interpreter interface The public interface to the exe manager are the interpreter interface

View File

@ -147,11 +147,17 @@ static pDynString findBlockEnd(pExeBuf self){
} }
/*---------------------------------------------------------------------*/ /*---------------------------------------------------------------------*/
int exeBufProcess(pExeBuf self, SicsInterp *pSics, int exeBufProcess(pExeBuf self, SicsInterp *pSics,
SConnection *pCon, pICallBack pCall){ SConnection *pCon, pICallBack pCall, int echo){
pDynString command = NULL; pDynString command = NULL;
Tcl_Interp *pTcl = NULL; Tcl_Interp *pTcl = NULL;
int status; int status;
static int weWantLogging = 1;
char *cmd;
char cmdName[128];
char *ende;
int l;
assert(self); assert(self);
assert(pSics); assert(pSics);
@ -162,9 +168,34 @@ int exeBufProcess(pExeBuf self, SicsInterp *pSics,
InvokeCallBack(pCall,BATCHSTART,self->name); InvokeCallBack(pCall,BATCHSTART,self->name);
if (echo) {
SCsetMacro(pCon,0);
}
while((command = findBlockEnd(self)) != NULL){ while((command = findBlockEnd(self)) != NULL){
InvokeCallBack(pCall,BATCHAREA,NULL); InvokeCallBack(pCall,BATCHAREA,NULL);
status = Tcl_Eval(pTcl,GetCharArray(command)); cmd = GetCharArray(command);
if (echo) {
/* find first word */
while (*cmd == ' ') {
cmd++;
}
ende = cmd;
while (*ende > ' ') {
ende++;
}
l = ende - cmd;
if (l < sizeof cmdName) {
strncpy(cmdName, cmd, l);
cmdName[l] = '\0';
if (FindCommand(pSics, cmdName) != NULL) {
/* print only SICS commands */
SCPrintf(pCon, eValue, "%s:%d>> %s",self->name,self->lineno,cmd);
}
}
}
status = Tcl_Eval(pTcl,cmd);
if(status != TCL_OK){ if(status != TCL_OK){
if(pCon->sicsError == 0){ if(pCon->sicsError == 0){
/* /*

View File

@ -1,5 +1,5 @@
#line 205 "exe.w" #line 207 "exe.w"
/** /**
* Buffer handling code for the Exe Buffer batch file processing * Buffer handling code for the Exe Buffer batch file processing
@ -62,7 +62,7 @@
* @return 1 on success, 0 on error * @return 1 on success, 0 on error
*/ */
int exeBufProcess(pExeBuf self, SicsInterp *pSics, int exeBufProcess(pExeBuf self, SicsInterp *pSics,
SConnection *pCon, pICallBack pCall); SConnection *pCon, pICallBack pCall, int echo);
/** /**
* retrieves the executing range * retrieves the executing range
* @param self The exe buffer to query * @param self The exe buffer to query
@ -89,7 +89,7 @@
*/ */
char *exeBufName(pExeBuf self); char *exeBufName(pExeBuf self);
#line 218 "exe.w" #line 220 "exe.w"
#endif #endif

View File

@ -1,5 +1,5 @@
#line 196 "exe.w" #line 198 "exe.w"
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Internal header file for the exe buffer module. Do not edit. This is Internal header file for the exe buffer module. Do not edit. This is
@ -16,6 +16,6 @@ typedef struct __EXEBUF{
int lineno; int lineno;
} ExeBuf; } ExeBuf;
#line 201 "exe.w" #line 203 "exe.w"

View File

@ -208,7 +208,7 @@ static int runBatchBuffer(pExeMan self, SConnection *pCon,
self->exeStackPtr++; self->exeStackPtr++;
DynarPut(self->exeStack,self->exeStackPtr,buffer); DynarPut(self->exeStack,self->exeStackPtr,buffer);
status = exeBufProcess(buffer,pSics,pCon,self->pCall); status = exeBufProcess(buffer,pSics,pCon,self->pCall,self->echo);
self->exeStackPtr--; self->exeStackPtr--;
return status; return status;
} }
@ -702,7 +702,7 @@ static int execQueue(pExeMan self, SConnection *pCon, SicsInterp *pSics){
return 0; return 0;
} }
DynarPut(self->exeStack,self->exeStackPtr,buf); DynarPut(self->exeStack,self->exeStackPtr,buf);
status = exeBufProcess(buf,pSics,pCon,self->pCall); status = exeBufProcess(buf,pSics,pCon,self->pCall,self->echo);
self->exeStackPtr--; self->exeStackPtr--;
if(SCGetInterrupt(pCon) >= eAbortBatch){ if(SCGetInterrupt(pCon) >= eAbortBatch){
SCWrite(pCon,"ERROR: queue processing interrupted",eError); SCWrite(pCon,"ERROR: queue processing interrupted",eError);
@ -781,6 +781,14 @@ int ExeManagerWrapper(SConnection *pCon, SicsInterp *pSics, void *pData,
SCSendOK(pCon); SCSendOK(pCon);
} }
return status; return status;
}else if(strcmp(argv[1],"echo") == 0){
if (argc > 2) {
self->echo = atoi(argv[2]) != 0;
SCSendOK(pCon);
} else {
SCPrintf(pCon, eValue, "echo = %d", self->echo);
}
return 1;
} else { } else {
status = runBatchBuffer(self,pCon,pSics,pBufferName); status = runBatchBuffer(self,pCon,pSics,pBufferName);
if(self->exeStackPtr < 0){ if(self->exeStackPtr < 0){

View File

@ -1,5 +1,5 @@
#line 174 "exe.w" #line 176 "exe.w"
/*------------------------------------------------------------------- /*-------------------------------------------------------------------
Internal header file for the exe manager module. Do not edit. This Internal header file for the exe manager module. Do not edit. This
@ -17,7 +17,8 @@ typedef struct __EXEMAN{
int exeStackPtr; int exeStackPtr;
int runList; int runList;
pExeBuf uploadBuffer; pExeBuf uploadBuffer;
int echo;
}ExeMan, *pExeMan; }ExeMan, *pExeMan;
#line 179 "exe.w" #line 181 "exe.w"