SICS-615 You can now update the start and step fields of scan parameters.
NOTE: This also fixes the bug that was crashing SICS. The n was missing in an snprintf().
This commit is contained in:
60
scan.c
60
scan.c
@@ -241,6 +241,31 @@ int AddScanVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
int ReplaceScanVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
||||
int index, float fStart, float fStep)
|
||||
{
|
||||
pVarEntry pVar = NULL;
|
||||
void *pPtr = NULL;
|
||||
|
||||
if (self->iActive) {
|
||||
SCWrite(pCon, "ERROR: cannot change parameters while scan is running",
|
||||
eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DynarGet(self->pScanVar, index, &pPtr);
|
||||
pVar = (pVarEntry) pPtr;
|
||||
if (pVar == NULL) {
|
||||
return 0;
|
||||
}
|
||||
pVar->fStart = fStart;
|
||||
pVar->fStep = fStep;
|
||||
|
||||
/* put it away */
|
||||
DynarReplace(self->pScanVar, index, pVar, sizeof(VarEntry));
|
||||
return 1;
|
||||
}
|
||||
/*-------------------------------------------------------------------------*/
|
||||
int AddLogVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
||||
char *name)
|
||||
@@ -1619,7 +1644,7 @@ int ScanWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
char pBueffel[512], varname[512];
|
||||
double fStep, fStart, fPreset;
|
||||
float *fData = NULL;
|
||||
int lNP;
|
||||
int lNP, foundMatch=0;
|
||||
int iChannel;
|
||||
int iRet, iMode, i, varnum;
|
||||
char *pPtr = NULL, pItem[20];
|
||||
@@ -1860,17 +1885,6 @@ int ScanWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
SCWrite(pCon, pBueffel, eError);
|
||||
return 0;
|
||||
}
|
||||
/* check for duplicate scanvar */
|
||||
for (varnum = 0; varnum < self->iScanVar; varnum++) {
|
||||
GetScanVarName(self, varnum, varname, 512);
|
||||
if (strcmp(argv[2], varname) == 0) {
|
||||
sprintf(pBueffel, sizeof(pBueffel)-1,
|
||||
"ERROR: Scan variable %s has already been added.",
|
||||
argv[2]);
|
||||
SCWrite(pCon, pBueffel, eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* get numbers */
|
||||
iRet = Tcl_GetDouble(InterpGetTcl(pSics), argv[3], &fStart);
|
||||
if (iRet != TCL_OK) {
|
||||
@@ -1884,8 +1898,26 @@ int ScanWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
SCWrite(pCon, pBueffel, eError);
|
||||
return 0;
|
||||
}
|
||||
iRet = AddScanVar(self, pSics, pCon, argv[2],
|
||||
(float) fStart, (float) fStep);
|
||||
if (self->iScanVar == 0) {
|
||||
iRet = AddScanVar(self, pSics, pCon, argv[2], (float) fStart,
|
||||
(float) fStep);
|
||||
} else {
|
||||
foundMatch = 0;
|
||||
for (varnum = 0; varnum < self->iScanVar; varnum++) {
|
||||
GetScanVarName(self, varnum, varname, 512);
|
||||
if (strcmp(argv[2], varname) == 0) {
|
||||
foundMatch = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (foundMatch) {
|
||||
iRet = ReplaceScanVar(self, pSics, pCon, varnum, (float) fStart,
|
||||
(float) fStep);
|
||||
} else {
|
||||
iRet = AddScanVar(self, pSics, pCon, argv[2], (float) fStart,
|
||||
(float) fStep);
|
||||
}
|
||||
}
|
||||
if (iRet) {
|
||||
SCSendOK(pCon);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user