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:
Ferdi Franceschini
2013-05-31 09:18:35 +10:00
parent 0954c3bceb
commit 8f0ceac2ad

60
scan.c
View File

@@ -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);
}