diff --git a/counter.c b/counter.c index 7f585787..495bee96 100644 --- a/counter.c +++ b/counter.c @@ -778,8 +778,9 @@ {"mode",1,{FUPAOPT}}, {"preset",1,{FUPAOPT}}, {"send",0,{0,0}}, - {"setpar",3,{FUPATEXT,FUPAINT,FUPAFLOAT}}, - {"getpar",2,{FUPATEXT,FUPAOPT}} + {"setpar",3,{FUPATEXT,FUPAINT,FUPAFLOAT}}, + {"getpar",2,{FUPATEXT,FUPAOPT}}, + {"getnmon",0,{0,0}} }; char *pMode[] = { "timer", @@ -795,7 +796,7 @@ /* parse function args */ argtolower(argc,argv); argx = &argv[1]; - iRet = EvaluateFuPa((pFuncTemplate)&ActionTemplate,22,argc-1,argx,&PaRes); + iRet = EvaluateFuPa((pFuncTemplate)&ActionTemplate,23,argc-1,argx,&PaRes); if(iRet < 0) { sprintf(pBueffel,"%s",PaRes.pError); @@ -1134,6 +1135,10 @@ return 0; } break; + case 22: /* getnmon */ + snprintf(pBueffel,131,"%s.getnmon = %d", argv[0], GetNMonitor(self)); + SCWrite(pCon,pBueffel,eValue); + break; default: assert(0); /* internal error */ } diff --git a/diffscan.c b/diffscan.c index 597edb90..22cf3b74 100644 --- a/diffscan.c +++ b/diffscan.c @@ -70,7 +70,7 @@ int MakeDiffScan(SConnection *pCon, SicsInterp *pSics, void *pData, pNew->pDes->SaveStatus = SaveDiffScan; if(argc > 1) { - status = AddCommand(pSics,argv[2], + status = AddCommand(pSics,argv[1], DiffScanWrapper, KillDiffScan, pNew); diff --git a/histmem.c b/histmem.c index 4021c6df..1b2575ef 100644 --- a/histmem.c +++ b/histmem.c @@ -72,6 +72,10 @@ * from histregress.c */ extern pHistDriver CreateRegressHM(pStringDict pOpt); +/* + * from slavehm.c + */ +extern pHistDriver MakeHMSlaveHM(pStringDict pOpt); /*------------------------------------------------------------------------*/ static int HistHalt(void *pData) { @@ -462,6 +466,12 @@ extern pHistDriver CreateRegressHM(pStringDict pOpt); { pNew->pDriv = CreateRegressHM(pOption); } +/* + else if(strcmp(driver,"slave") == 0) + { + pNew->pDriv = MakeHMSlaveHM(pOption); + } +*/ else { site = getSite(); diff --git a/make_gen b/make_gen index 32c80b63..2b55a90c 100644 --- a/make_gen +++ b/make_gen @@ -32,7 +32,7 @@ SOBJ = network.o ifile.o conman.o SCinter.o splitter.o passwd.o \ mcstashm.o initializer.o remob.o tclmotdriv.o protocol.o \ sinfox.o sicslist.o cone.o hipadaba.o sicshipadaba.o statistics.o \ moregress.o hdbcommand.o multicounter.o regresscter.o histregress.o \ - sicshdbadapter.o polldriv.o sicspoll.o statemon.o + sicshdbadapter.o polldriv.o sicspoll.o statemon.o hmslave.o MOTOROBJ = motor.o simdriv.o COUNTEROBJ = countdriv.o simcter.o counter.o diff --git a/nserver.c b/nserver.c index 7924a07b..51c27bad 100644 --- a/nserver.c +++ b/nserver.c @@ -217,10 +217,6 @@ NetReadRegister(pReader, self->pServerPort, naccept, NULL); /* the device executor */ - pCom = FindCommand(self->pSics,"stopexe"); - assert(pCom); - assert(pCom->pData); - self->pExecutor = (pExeList)pCom->pData; openDevexecLog(); DevexecLog("START","SICS"); diff --git a/ofac.c b/ofac.c index 80d12407..3489ef06 100644 --- a/ofac.c +++ b/ofac.c @@ -203,6 +203,7 @@ assert(pInter); pExe = CreateExeList(pTask); + pServ->pExecutor = pExe; pEnv = CreateEnvMon(); assert(pExe); @@ -213,9 +214,6 @@ AddCommand(pInter,"FileEval",MacroFileEval,NULL,NULL); AddCommand(pInter,"InternEval",InternalFileEval,NULL,NULL); -/* - AddCommand(pInter,"FileWhere",MacroWhere,WhereKill,NULL); -*/ AddCommand(pInter,"ClientPut",ClientPut,NULL,NULL); AddCommand(pInter,"GumPut",GumPut,NULL,NULL); AddCommand(pInter,"broadcast",Broadcast,NULL,NULL); diff --git a/outcode.c b/outcode.c index 6e9de898..ad7fa0ee 100644 --- a/outcode.c +++ b/outcode.c @@ -23,5 +23,5 @@ "hdbvalue", "hdbevent", NULL }; - static int iNoCodes = 10; + static int iNoCodes = 13; #endif diff --git a/scan.c b/scan.c index 4ad1e37b..8b9f310f 100644 --- a/scan.c +++ b/scan.c @@ -2218,6 +2218,11 @@ static int DumpScan(pScanData self, SConnection *pCon) } return iRet; } +/*----------- getnumchan */ + else if(strcmp(argv[1],"getnumchan") == 0) { + snprintf(pBueffel,511,"%s.getnumchan = %d", argv[0], GetNMonitor((pCounter)self->pCounterData)); + SCWrite(pCon,pBueffel,eValue); + } /*----------- setchannel */ else if(strcmp(argv[1],"setchannel") == 0) { diff --git a/sicsdata.c b/sicsdata.c index 24253167..4e2e0d67 100644 --- a/sicsdata.c +++ b/sicsdata.c @@ -185,7 +185,7 @@ void clearSICSData(pSICSData self){ memset(self->dataType,0,self->currentDataSize*sizeof(char)); } /*--------------------------------------------------------------------*/ -static int dumpSICSData(pSICSData self, char *filename, SConnection *pCon){ +static int dumpSICSDataXY(pSICSData self, char *filename, SConnection *pCon){ FILE *fd = NULL; char pBueffel[132]; int i; @@ -210,6 +210,32 @@ static int dumpSICSData(pSICSData self, char *filename, SConnection *pCon){ SCSendOK(pCon); return 1; } +/*--------------------------------------------------------------------*/ +static int dumpSICSData(pSICSData self, char *filename, SConnection *pCon){ + FILE *fd = NULL; + char pBueffel[132]; + int i; + float fVal; + + fd = fopen(filename,"w"); + if(fd == NULL){ + snprintf(pBueffel,131,"ERROR: cannot open %s", filename); + SCWrite(pCon,pBueffel,eError); + return 0; + } + for(i = 0; i < self->dataUsed; i++){ + if(self->dataType[i] == INTTYPE){ + fprintf(fd," %d", self->data[i]); + } + if(self->dataType[i] == FLOATTYPE){ + memcpy(&fVal,self->data + i,sizeof(float)); + fprintf(fd," %.5f",fVal); + } + } + fclose(fd); + SCSendOK(pCon); + return 1; +} /*-------------------------------------------------------------------*/ static int putInt(pSICSData self, int argc, char *argv[], SConnection *pCon, SicsInterp *pSics){ @@ -588,6 +614,58 @@ static int copyHM(pSICSData self, int argc, char *argv[], SCSendOK(pCon); return 1; } +/*--------------------------------------------------------------------*/ +static int copyHMBank(pSICSData self, int argc, char *argv[], + SConnection *pCon, SicsInterp *pSics){ + int status, pos, i, bank, dataLength; + pHistMem pHist = NULL; + const float *fTimeBin = NULL; + int *iData = NULL; + + if(argc < 4){ + SCWrite(pCon,"ERROR: not enough arguments to SICSData copyhm", + eError); + return 0; + } + status = Tcl_GetInt(InterpGetTcl(pSics),argv[0],&pos); + if(status != TCL_OK){ + SCWrite(pCon, + "ERROR: failed to convert copyhmbank position to integer", + eError); + return 0; + } + pHist = (pHistMem)FindCommandData(pSics,argv[1],"HistMem"); + if(!pHist){ + SCWrite(pCon,"ERROR: histogram memory not found in copyhmbank", + eError); + return 0; + } + status = Tcl_GetInt(InterpGetTcl(pSics),argv[2],&bank); + if(status != TCL_OK){ + SCWrite(pCon, + "ERROR: failed to convert copyhmbank bank to integer", + eError); + return 0; + } + status = Tcl_GetInt(InterpGetTcl(pSics),argv[3],&dataLength); + if(status != TCL_OK){ + SCWrite(pCon, + "ERROR: failed to convert copyhmbank dataLength to integer", + eError); + return 0; + } + + iData = getSICSDataPointer(self,pos,pos+dataLength); + if(!iData){ + SCWrite(pCon,"ERROR: out of memory in SICSData copyhmbank",eError); + return 0; + } + GetHistogramDirect(pHist,pCon,bank,0,dataLength,iData, + dataLength*sizeof(int)); + assignType(self,pos,pos+dataLength,INTTYPE); + SCSendOK(pCon); + return 1; +} /*----------------------------------------------------------------------*/ static int copyData(pSICSData self,SicsInterp *pSics, SConnection *pCon,int argc, char *argv[]){ @@ -645,6 +723,13 @@ int SICSDataAction(SConnection *pCon, SicsInterp *pSics, void *pData, snprintf(pBueffel,131,"%s = %d", argv[0], self->dataUsed); SCWrite(pCon,pBueffel,eValue); return 1; + } else if(strcmp(argv[1],"dumpxy") == 0){ + /* --------- dump */ + if(argc < 3){ + SCWrite(pCon,"ERROR: need a file name to dump to",eError); + return 0; + } + return dumpSICSDataXY(self,argv[2],pCon); } else if(strcmp(argv[1],"dump") == 0){ /* --------- dump */ if(argc < 3){ @@ -686,8 +771,11 @@ int SICSDataAction(SConnection *pCon, SicsInterp *pSics, void *pData, /*--------- copytimebin */ return copyTimeBin(self,argc-2,&argv[2],pCon,pSics); } else if(strcmp(argv[1],"copyhm") == 0){ - /*--------- copytimebin */ + /*--------- copyhm */ return copyHM(self,argc-2,&argv[2],pCon,pSics); + } else if(strcmp(argv[1],"copyhmbank") == 0){ + /*--------- copyhmbank */ + return copyHMBank(self,argc-2,&argv[2],pCon,pSics); } else if(strcmp(argv[1],"writezipped") == 0){ /*--------- writezipped */ if(argc < 3){ diff --git a/stdscan.c b/stdscan.c index 621f2a64..a4d38bf1 100644 --- a/stdscan.c +++ b/stdscan.c @@ -1119,7 +1119,10 @@ int StandardScanWrapper(SConnection *pCon, SicsInterp *pSics, void *pData, } strtolower(argv[1]); self = (pScanData)FindCommandData(pSics,argv[2],"ScanObject"); - assert(self); + if(self == NULL){ + SCWrite(pCon,"ERROR: scan object not found",eError); + return 0; + } if(strcmp(argv[1],"writeheader") == 0){ return WriteHeader(self);