diff --git a/callback.c b/callback.c index 54c4f816..d6a2331c 100644 --- a/callback.c +++ b/callback.c @@ -323,10 +323,12 @@ static int ScriptCallback(int iEvent, void *pEventData, void *pUserData) return 0; } if (pUserData == NULL) { + SCDeleteConnection(pCon); fprintf(stdout, "ERROR: ScriptCallback: no script to execute\n"); return 0; } SCSetRights(pCon, usInternal); + SCSetWriteFunc(pCon,SCNotWrite); status = InterpExecute(pServ->pSics, pCon, (char *) pUserData); SCDeleteConnection(pCon); diff --git a/commandlog.c b/commandlog.c index 888596ce..0f64f16d 100644 --- a/commandlog.c +++ b/commandlog.c @@ -26,6 +26,7 @@ #include #include #include +#include "splitter.h" #include "sics.h" #include "ifile.h" #include "sicsvar.h" @@ -423,6 +424,16 @@ int CommandLog(SConnection * pCon, SicsInterp * pSics, void *pData, PrintTail(iVal, pCon); return 1; } + /** + * handle write + */ + + if (strcmp(argv[1], "write") == 0) { + Arg2Text(argc-2, &argv[2],pBueffel,sizeof(pBueffel)); + WriteToCommandLogId(NULL, pCon->sockHandle,pBueffel); + SCSendOK(pCon); + return 1; + } /* check rights */ if (!SCMatchRights(pCon, usMugger)) { diff --git a/conman.c b/conman.c index 9d01496c..5f81e203 100644 --- a/conman.c +++ b/conman.c @@ -248,6 +248,9 @@ SConnection *SCCreateDummyConnection(SicsInterp * pSics) SConnection *pRes = NULL; pRes = CreateConnection(pSics); + if(pRes == NULL){ + return pServ->dummyCon; + } pRes->sockHandle = -1; pRes->iUserRights = usInternal; @@ -958,12 +961,61 @@ int SCOnlySockWrite(SConnection * self, char *buffer, int iOut) /*--------------------------------------------------------------------------*/ int SCPureSockWrite(SConnection * self, char *buffer, int iOut) { + char pBueffel[1024]; + char *pPtr; + /* for commandlog tail */ if (!VerifyConnection(self)) { return 0; } - testAndWriteSocket(self, buffer, iOut); + if(self->iProtocolID == 5) { + if (strlen(buffer) + 30 > 1024) { + pPtr = (char *) malloc((strlen(buffer) + 30) * sizeof(char)); + memset(pPtr, 0, strlen(buffer) + 20); + } else { + pPtr = pBueffel; + } + sprintf(pPtr, "%d::>%s<::", self->transID, buffer); + testAndWriteSocket(self, pPtr, iOut); + if(pPtr != pBueffel){ + free(pPtr); + } + } else { + testAndWriteSocket(self, buffer, iOut); + } + + return 1; +} + +/*-------------------------------------------------------------------------- + special for ClientLog. Do not use elsewhere without check + ----------------------------------------------------------------------------*/ +int SCLogWrite(SConnection * self, char *buffer, int iOut) +{ + char pBueffel[1024]; + char *pPtr; + + if (!VerifyConnection(self)) { + return 0; + } + WriteToCommandLogId(NULL, self->sockHandle, buffer); + + if(self->iProtocolID == 5) { + if (strlen(buffer) + 30 > 1024) { + pPtr = (char *) malloc((strlen(buffer) + 30) * sizeof(char)); + memset(pPtr, 0, strlen(buffer) + 20); + } else { + pPtr = pBueffel; + } + sprintf(pPtr, "%d::>%s<::", self->transID, buffer); + testAndWriteSocket(self, pPtr, iOut); + if(pPtr != pBueffel){ + free(pPtr); + } + } else { + testAndWriteSocket(self, buffer, iOut); + } return 1; } @@ -978,10 +1030,11 @@ int SCNotWrite(SConnection * self, char *buffer, int iOut) return 0; } - /* log it for any case */ + /* log it for any case sprintf(pBueffel, "Next line intended for socket: %d", self->sockHandle); SICSLogWrite(pBueffel, eInternal); SICSLogWrite(buffer, iOut); + */ testAndStoreInTcl(self, buffer, iOut); return 1; @@ -1130,7 +1183,7 @@ int SCWriteZipped(SConnection * self, char *pName, void *pData, sprintf(outBuf, "SICSBIN ZIP %s %d %d\r\n", pName, compressedLength, cc.transID); } else { - sprintf(outBuf, "SICSBIN ZIP %s %d \r\n", pName, compressedLength); + sprintf(outBuf, "SICSBIN ZIP %s %d\r\n", pName, compressedLength); } pHeader = strdup(outBuf); if (pHeader == NULL) { @@ -1195,7 +1248,7 @@ int SCWriteBinary(SConnection * self, char *pName, void *pData, sprintf(outBuf, "SICSBIN BIN %s %d %d\r\n", pName, iDataLen, cc.transID); } else { - sprintf(outBuf, "SICSBIN BIN %s %d \r\n", pName, iDataLen); + sprintf(outBuf, "SICSBIN BIN %s %d\r\n", pName, iDataLen); } pHeader = strdup(outBuf); if (pHeader == NULL) { @@ -1429,15 +1482,17 @@ int SCPrompt(SConnection * pCon, char *pPrompt, char *pResult, int iLen) char pFrom[50]; Status eOld; int oldMode; + SConnection *master = NULL; if (!VerifyConnection(pCon)) { return 0; } SCWrite(pCon, pPrompt, eWarning); + master = SCfindMaster(pCon); eOld = GetStatus(); SetStatus(eInput); - CostaUnlock(pCon->pStack); + CostaUnlock(master->pStack); while (1) { /* wait a second. We want to wait even in a simulation, otherwise @@ -1454,17 +1509,17 @@ int SCPrompt(SConnection * pCon, char *pPrompt, char *pResult, int iLen) break; } /* do we have data ? */ - iRet = CostaPop(pCon->pStack, &pPtr); + iRet = CostaPop(master->pStack, &pPtr); if (iRet == 1) { SetStatus(eOld); - CostaLock(pCon->pStack); + CostaLock(master->pStack); strlcpy(pResult, pPtr, iLen); WriteToCommandLogId(" prompted>", pCon->sockHandle, pPtr); return 1; } } SetStatus(eOld); - CostaLock(pCon->pStack); + CostaLock(master->pStack); return 0; } @@ -1560,7 +1615,9 @@ int SCInvoke(SConnection * self, SicsInterp * pInter, char *pCommand) if (SCGetWriteFunc(self) != SCNotWrite) { sendingConnection = self->sockHandle; if (self->sockHandle >= 0) { - WriteToCommandLogCmd(self->sockHandle, pCommand); + if(strstr(pCommand,"Poch") == NULL){ + WriteToCommandLogCmd(self->sockHandle, pCommand); + } } else { WriteToCommandLog("CRON>>", pCommand); } diff --git a/conman.h b/conman.h index 27561052..8f085332 100644 --- a/conman.h +++ b/conman.h @@ -106,6 +106,7 @@ writeFunc SCGetWriteFunc(SConnection * pCon); void SCSetWriteFunc(SConnection * pCon, writeFunc x); int SCOnlySockWrite(SConnection * self, char *buffer, int iOut); int SCPureSockWrite(SConnection * self, char *buffer, int iOut); +int SCLogWrite(SConnection * self, char *buffer, int iOut); int SCFileWrite(SConnection * self, char *buffer, int iOut); int SCNotWrite(SConnection * self, char *buffer, int iOut); int SCNormalWrite(SConnection * self, char *buffer, int iOut); diff --git a/counter.c b/counter.c index ac9f6e5f..c6b6ab5b 100644 --- a/counter.c +++ b/counter.c @@ -241,7 +241,7 @@ static int CheckCountStatus(void *pData, SConnection * pCon) if(self->pDriv->fTime > .0){ rate = (float)(self->pDriv->lCounts[1])/self->pDriv->fTime; - if(rate > 5000){ + if(rate > 10000){ SCWrite(pCon,"WARNING: Your control monitor is running into dead time", eWarning); } diff --git a/drive.c b/drive.c index 6dd77dc3..51a6fcdd 100644 --- a/drive.c +++ b/drive.c @@ -103,7 +103,7 @@ int Drive(SConnection * pCon, SicsInterp * pInter, char *name, float fNew) if (pInt) { iRet = pInt->CheckLimits(pDum, fNew, pBueffel, 511); if (!iRet) { - SCWrite(pCon, pBueffel, eError); + SCWrite(pCon, pBueffel, eLogError); SCSetInterrupt(pCon, eAbortOperation); return 0; } diff --git a/fourmess.c b/fourmess.c index d54b0e59..b6cb77b5 100644 --- a/fourmess.c +++ b/fourmess.c @@ -40,6 +40,7 @@ extern char *trim(char *); extern void SNXFormatTime(char *pBueffel, int iLen); +#define ABS(x) (x < 0 ? -(x) : (x)) /*---------------------------------------------------------------------------*/ typedef struct { FILE *profFile; /* file with reflection profiles, ccl */ @@ -765,7 +766,13 @@ static int GenInconsumerate(pSICSOBJ self, SConnection * pCon, qvec[2] = par[2]->value.v.doubleValue; for (i = 0; i < priv->masterCount; i++) { - GetRefIndex(priv->messList, i, hkl); + GetRefIndex(priv->messList, i, hkl); + if(ABS(hkl[0])+ABS(hkl[1])+ABS(hkl[2]) < .3){ + /* + * Stop generation for 0,0,0, + */ + continue; + } for (j = 0; j < 3; j++) { hkl[j] += qvec[j]; } diff --git a/macro.c b/macro.c index a5f265f1..446537ba 100644 --- a/macro.c +++ b/macro.c @@ -728,7 +728,52 @@ int ClientPut(SConnection * pCon, SicsInterp * pInter, void *pData, } return 1; } +/*----------------------------------------------------------------- + ClientLog writes to the socket and the command log only + -------------------------------------------------------------------*/ +int ClientLog(SConnection * pCon, SicsInterp * pInter, void *pData, + int argc, char *argv[]) +{ + OutCode eOut = eLog; + int i = 0, iLen; + char *pMessage = NULL; + assert(pCon); + assert(pInter); + + if (argc < 2) { + SCWrite(pCon, "Insufficient arguments to ClientLog", eError); + return 0; + } + + + /* recombine the message */ + /* find length */ + iLen = 0; + for (i = 1; i < argc; i++) { + iLen += strlen(argv[i]); + } + pMessage = (char *) malloc((iLen + 100) * sizeof(char)); + if (!pMessage) { + SCWrite(pCon, "ERROR: out of memory in clientlo", eLogError); + return 0; + } + memset(pMessage, 0, (iLen + 100) * sizeof(char)); + Arg2Text(argc - 1, &argv[1], pMessage, (iLen + 100) * sizeof(char)); + + SCLogWrite(pCon,pMessage, eError); + free(pMessage); + return 1; +} +/*----------------------------------------------------------------------- + A heartbeat command ............. + ------------------------------------------------------------------------*/ +int Poch(SConnection * pCon, SicsInterp * pInter, void *pData, + int argc, char *argv[]) +{ + SCPureSockWrite(pCon,"Poch", eLog); + return 1; +} /*-----------------------------------------------------------------------*/ int GumPut(SConnection * pCon, SicsInterp * pInter, void *pData, int argc, char *argv[]) diff --git a/motor.h b/motor.h index 027e66ab..f06bc2c6 100644 --- a/motor.h +++ b/motor.h @@ -37,6 +37,7 @@ typedef struct __Motor { int retryCount; /* for retries in status */ int posFaultCount; int stopped; + int stopReported; int errorCount; int running; ObPar *ParArray; diff --git a/motorsec.c b/motorsec.c index 76faaebc..cc5ae903 100644 --- a/motorsec.c +++ b/motorsec.c @@ -105,7 +105,8 @@ static long SecMotorRun(void *sulf, SConnection * pCon, float fNew) return 0; } self->stopped = 0; - + self->stopReported = 0; + v = MakeHdbFloat(fNew); status = SetHipadabaPar(self->pDescriptor->parNode, v, pCon); node = GetHipadabaNode(self->pDescriptor->parNode, "status"); @@ -211,7 +212,10 @@ static int checkPosition(pMotor self, SConnection * pCon) pHdb node = NULL; if (self->stopped) { - SCPrintf(pCon, eWarning, "WARNING: %s stopped", self->name); + if(self->stopReported == 0){ + SCPrintf(pCon, eLog, "WARNING: %s stopped", self->name); + self->stopReported = 1; + } return HWFault; } if (SCGetInterrupt(pCon) != eContinue) { diff --git a/nxdict.c b/nxdict.c index 187bd21e..05f62d44 100644 --- a/nxdict.c +++ b/nxdict.c @@ -553,7 +553,7 @@ typedef struct { int iTerminal; } ParDat; -static void DummyError(void *pData, char *pError) +static void DummyError(void *p, char *pError) { return; } @@ -720,9 +720,9 @@ static void NXDIAttValue(ParDat * sStat) int NXDIParsePath(NXhandle hfil, ParDat * pParse) { int iRet, iToken; - void (*ErrFunc) (void *pData, char *pErr); char pName[132], pClass[132]; char pError[256]; + void *pData = NULL; /* get the name */ NXDIDefToken(pParse); /* next token */ @@ -760,12 +760,11 @@ int NXDIParsePath(NXhandle hfil, ParDat * pParse) strcpy(pClass, pParse->pToken); /* done reading, ACTION, first install dummy error handler */ - ErrFunc = NXIReportError; - NXMSetError(NXpData,DummyError); + NXMDisableErrorReporting(); /* try opening vGroup */ iRet = NXopengroup(hfil, pName, pClass); - NXMSetError(NXpData,ErrFunc); + NXMEnableErrorReporting(); if (iRet == NX_OK) { pParse->iDepth++; return NX_OK; @@ -960,7 +959,6 @@ static int NXDIParseSDS(NXhandle hfil, ParDat * pParse) int iRet, iStat, i; char pError[256]; char pName[NX_MAXNAMELEN]; - void (*ErrFunc) (void *pData, char *pErr); AttItem sAtt; @@ -1061,12 +1059,11 @@ static int NXDIParseSDS(NXhandle hfil, ParDat * pParse) /* first install dummy error handler, try open it, then deinstall again and create if allowed */ - ErrFunc = NXIReportError; - NXMSetError(NXpData, DummyError); + NXMDisableErrorReporting(); /* try opening SDS */ iRet = NXopendata(hfil, pName); - NXMSetError(NXpData, ErrFunc); + NXMEnableErrorReporting(); if (iRet == NX_OK) { LLDdelete(iList); return NX_OK; @@ -1687,16 +1684,15 @@ NXstatus NXUwriteglobals(NXhandle pFile, /*-----------------------------------------------------------------------*/ NXstatus NXUentergroup(NXhandle hFil, char *name, char *class) { - void (*ErrFunc) (void *pData, char *pErr); int iRet; /* ACTION, first install dummy error handler */ - ErrFunc = NXIReportError; - NXMSetError(NXpData, DummyError); + NXMDisableErrorReporting(); + /* try opening vGroup */ iRet = NXopengroup(hFil, name, class); - NXMSetError(NXpData, ErrFunc); + NXMEnableErrorReporting(); if (iRet == NX_OK) { return NX_OK; } else { @@ -1719,16 +1715,14 @@ NXstatus NXUentergroup(NXhandle hFil, char *name, char *class) NXstatus NXUenterdata(NXhandle hFil, char *label, int datatype, int rank, int dim[], char *pUnits) { - void (*ErrFunc) (void *pData, char *pErr); int iRet; /* ACTION, first install dummy error handler */ - ErrFunc = NXIReportError; - NXMSetError(NXpData, DummyError); + NXMDisableErrorReporting(); /* try opening SDS */ iRet = NXopendata(hFil, label); - NXMSetError(NXpData, ErrFunc); + NXMEnableErrorReporting(); if (iRet == NX_OK) { return NX_OK; } else { diff --git a/ofac.c b/ofac.c index 7fd1f723..6c293fc0 100644 --- a/ofac.c +++ b/ofac.c @@ -68,6 +68,8 @@ static void InitIniCommands(SicsInterp * pInter) PCMD("broadcast", Broadcast); PCMD("Capture", CaptureAction); PCMD("ClientPut", ClientPut); + PCMD("ClientLog", ClientLog); + PCMD("Poch", Poch); PCMD("config", ConfigCon); PCMD("db", SICSDebug); PCMD("Dir", ListObjects); diff --git a/scriptcontext.c b/scriptcontext.c index a91732ed..33c9e594 100644 --- a/scriptcontext.c +++ b/scriptcontext.c @@ -210,7 +210,7 @@ int SctCommand(SConnection * con, SicsInterp * sics, void *object, SCsetMacro(con, queueData->inMacro); /* take macro flag stored at set callback */ } Arg2Text(argc - 2, argv + 2, value, sizeof value); - SCWrite(con, value, eWarning); + SCWrite(con, value, eLog); SCsetMacro(con, 1); /* we are always in Macro */ return 1; } @@ -469,7 +469,7 @@ static char *SctActionHandler(void *actionData, char *lastReply, emsg = GetHdbProp(node, eprop); if (emsg == NULL || con != controller->conn) { GetHdbPath(node, path, sizeof path); - SCPrintf(con, eError, + SCPrintf(con, eLogError, "ERROR: action {%s} in {%s} node %s:\nERROR: %s", data->name, origScript, path, result); if(data != NULL && data->controller != NULL){ diff --git a/sicsdata.c b/sicsdata.c index ca707c69..74f6e087 100644 --- a/sicsdata.c +++ b/sicsdata.c @@ -818,7 +818,7 @@ static int copyNode(pSICSData self, int argc, char *argv[], return 0; } - if(argc < 2){ + if(argc > 2){ status = Tcl_GetInt(InterpGetTcl(pSics), argv[2], &length); if (status != TCL_OK) { SCWrite(pCon, @@ -827,6 +827,8 @@ static int copyNode(pSICSData self, int argc, char *argv[], } else { length = node->value.arrayLength; } + } else { + length = node->value.arrayLength; } if(length < 1) { length = 1; diff --git a/sicshipadaba.c b/sicshipadaba.c index 954e4902..eeffe81a 100644 --- a/sicshipadaba.c +++ b/sicshipadaba.c @@ -3094,10 +3094,12 @@ static hdbCallbackReturn ChainCallback(pHdb node, void *userData, } if (slave != NULL) { + /* memset(&vv, 0, sizeof(hdbValue)); GetHipadabaPar(slave, &vv, mm->callData); - UpdateHipadabaPar(slave, vv, mm->callData); - ReleaseHdbValue(&vv); + */ + UpdateHipadabaPar(slave, *(mm->v), mm->callData); + /* ReleaseHdbValue(&vv); */ } return hdbContinue; } diff --git a/stdscan.c b/stdscan.c index 616a18d5..06da3638 100644 --- a/stdscan.c +++ b/stdscan.c @@ -563,12 +563,9 @@ int prepareDataFile(pScanData self) pTcl = InterpGetTcl(pServ->pSics); val = Tcl_GetVar(pTcl,"simMode",TCL_GLOBAL_ONLY); - if(val != NULL){ - if(strstr(val,"2") != NULL){ - pPtr = strdup("sicssim.scn"); - } + if(val != NULL && strstr(val,"2") != NULL){ + pPtr = strdup("sicssim.scn"); } else { - /* allocate a new data file */ pPtr = ScanMakeFileName(pServ->pSics, self->pCon); if (!pPtr) { diff --git a/tasdrive.c b/tasdrive.c index 16cf765a..505a781e 100644 --- a/tasdrive.c +++ b/tasdrive.c @@ -40,6 +40,8 @@ static long TASSetValue(void *pData, SConnection * pCon, float value) { ptasMot self = (ptasMot) pData; assert(self); + int qcodes[] = {3,4,5,8}; /* qh,qk,ql, en */ + int i; if (self->code > 5 && self->math->tasMode == ELASTIC) { SCWrite(pCon, "ERROR: cannot drive this motor in elastic mode", @@ -48,6 +50,11 @@ static long TASSetValue(void *pData, SConnection * pCon, float value) } setTasPar(&self->math->target, self->math->tasMode, self->code, value); self->math->mustDrive = 1; + for(i = 0; i < 4; i++){ + if(self->code == qcodes[i]) { + self->math->mustDriveQ = 1; + } + } return OKOK; } @@ -525,16 +532,25 @@ static int calculateAndDrive(ptasMot self, SConnection * pCon) driveTilt = 0; } + if(self->math->mustDriveQ == 0){ + driveQ = 0; + } + + if (driveQ != 0) { if (!checkQMotorLimits(self, pCon, angles, driveTilt)) { driveQ = 0; } } - if (driveQ == 0) { + if (driveQ == 0 && self->math->mustDriveQ == 1) { SCWrite(pCon, "WARNING: NOT driving Q-vector because of errors", eError); } + /* + * reset the Q flag + */ + self->math->mustDriveQ = 0; return startMotors(self, angles, pCon, driveQ, driveTilt); } diff --git a/tasscanub.c b/tasscanub.c index 07c1e5da..ba2cfb40 100644 --- a/tasscanub.c +++ b/tasscanub.c @@ -656,6 +656,7 @@ static int TASUBScanDrive(pScanData self, int iPoint) int i, status, iPtr; int iTAS = 0; pMotor pMot; + pDynString err; pTAS->ub->silent = 1; /* @@ -665,7 +666,7 @@ static int TASUBScanDrive(pScanData self, int iPoint) DynarGet(self->pScanVar, i, &pPtr); pVar = (pVarEntry) pPtr; if (pVar) { - StartMotor(pServ->pExecutor, self->pSics, self->pCon, pVar->Name, + status = StartMotor(pServ->pExecutor, self->pSics, self->pCon, pVar->Name, RUNDRIVE, pVar->fStart + iPoint * pVar->fStep); /* Ignore errors. TAS scans continues when a motor runs into diff --git a/tasub.h b/tasub.h index 4aa1d40d..0dead93c 100644 --- a/tasub.h +++ b/tasub.h @@ -27,6 +27,7 @@ double targetEn, actualEn; int mustRecalculate; int mustDrive; + int mustDriveQ; pMotor motors[12]; tasReflection r1, r2; int ubValid; diff --git a/test/sicsstat.tcl b/test/sicsstat.tcl index 40fc44cf..3c750926 100644 --- a/test/sicsstat.tcl +++ b/test/sicsstat.tcl @@ -1,3 +1,4 @@ + exe batchpath ./ exe syspath ./ @@ -218,15 +219,20 @@ tasub r2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 tasub update #----- MultiMotor sa sa recovernampos noeff a3 24 a4 48 + + + + + ref anglesheader stt,om,chi,phi ref clear -singlex cell 0 0 0 0 0 0 -singlex oldub 0 0 0 0 0 0 0 0 0 -singlex ub 0 0 0 0 0 0 0 0 0 -singlex planenormal 0 0 0 +singlex cell { 0 0 0 0 0 0} +singlex oldub { 0 0 0 0 0 0 0 0 0} +singlex ub { 0 0 0 0 0 0 0 0 0} +singlex planenormal { 0 0 0} singlex mode bi singlex spacegroup P -singlex peaksearch +singlex peaksearch {} singlex peaksearch/min2t 5 singlex peaksearch/step2t 1 singlex peaksearch/max2t 15 @@ -238,6 +244,7 @@ singlex peaksearch/phimin 0 singlex peaksearch/phimax 180 singlex peaksearch/chimin 90 singlex peaksearch/chimax 180 + #HKL Settings hkl scantolerance 2.500000 ubcalcint difftheta 0.300000 @@ -249,13 +256,32 @@ messref clear fmess weak 0 fmess weakthreshold 20 fmess fast 0 -fmess hkllim -10 -10 10 10 10 10 -fmess sttlim 5 180 +fmess hkllim { -10 -10 10 10 10 10} +fmess sttlim { 5 180} + fmess table clear -cone target 0 0 0 +cone target { 0 0 0} cone qscale 1 cone center unknown + simidx sttlim 0.2 simidx anglim 0.5 + simi preset 0 simi mode monitor + + +nano targetposition -50 +nano sign 1 +nano softzero 0 +nano softlowerlim -10000 +nano softupperlim 10000 +nano fixed -1 +nano interruptmode 0 +nano precision 0.01 +nano accesscode 2 +nano failafter 3 +nano maxretry 3 +nano ignorefault 0 +nano movecount 10 + diff --git a/test/testini.tcl b/test/testini.tcl index 58124a48..ee794e04 100644 --- a/test/testini.tcl +++ b/test/testini.tcl @@ -797,3 +797,21 @@ source ../sim/poldi_sics/zug.tcl #MakeSPSS7 s7 203 251 129.129.195.55:2005 #MakeSPSS7 s7 203 251 localhost:8090 + +set jvl 0 + +if {$jvl == 1} { +source ../sim/boa_sics/jvl.tcl +makesctcontroller jvlsct jvl localhost:8080 +jvlsct debug -1 +jvl::make ja 2 jvlsct -10000 10000 120 +} + +set nanotec 1 + +if {$nanotec == 1} { +source ../sim/boa_sics/nanotec.tcl +makesctcontroller nanosct std localhost:8080 \r 1 \r +nanosct debug -1 +nanotec::make nano 1 nanosct -100000 100000 120 +}