Added support for three detector banks for FOCUS
This commit is contained in:
472
fowrite.c
472
fowrite.c
@@ -6,6 +6,10 @@
|
||||
copyright: see copyright.h
|
||||
|
||||
Mark Koennecke, November 1998
|
||||
|
||||
Added code for three detector banks.
|
||||
|
||||
Mark Koennecke, March 2000
|
||||
-----------------------------------------------------------------------------*/
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
@@ -24,6 +28,7 @@
|
||||
#include "scan.h"
|
||||
#include "sicsvar.h"
|
||||
#include "fitcenter.h"
|
||||
#include "fomerge.h"
|
||||
|
||||
/* the name of the SICS chopper controller object */
|
||||
#define CHOPPERNAME "choco"
|
||||
@@ -41,6 +46,8 @@
|
||||
char *pDictFile;
|
||||
pFit pFitter;
|
||||
float fElastic;
|
||||
int iUpper, iMiddle, iLower;
|
||||
/* detector availability flags */
|
||||
} FoWrite, *pFoWrite;
|
||||
/* ------------------- forward declaration of task function --------------*/
|
||||
static int FoTask(void *pData);
|
||||
@@ -170,7 +177,7 @@
|
||||
float fVal, *fArray;
|
||||
const float *fTime;
|
||||
float *fTime2 = NULL;
|
||||
|
||||
char pBuffer[50];
|
||||
|
||||
/* get a filename */
|
||||
if(self->pFile)
|
||||
@@ -179,7 +186,8 @@
|
||||
self->pFile = SNXMakeFileName(pServ->pSics,pCon);
|
||||
if(!self->pFile)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: Extra severe: failed to create data file name",eError);
|
||||
SCWrite(pCon,"ERROR: Extra severe: failed to create data file name",
|
||||
eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -256,7 +264,6 @@
|
||||
|
||||
|
||||
/* detector banks */
|
||||
/* currently the one and only bank */
|
||||
fTime = GetHistTimeBin(self->pHist,&iLength);
|
||||
fTime2 = (float *)malloc(iLength*sizeof(float));
|
||||
if(fTime2)
|
||||
@@ -267,7 +274,29 @@
|
||||
}
|
||||
sprintf(pBueffel,"%d",iLength);
|
||||
NXDupdate(pDict,"timebin",pBueffel);
|
||||
NXDputalias(pFile,pDict,"dtime",fTime2);
|
||||
if(self->iMiddle)
|
||||
{
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
NXDputalias(pFile,pDict,"dtime",fTime2);
|
||||
}
|
||||
if(self->iUpper)
|
||||
{
|
||||
NXDupdate(pDict,"bank","upperbank");
|
||||
NXDputalias(pFile,pDict,"dtime",fTime2);
|
||||
}
|
||||
if(self->iLower)
|
||||
{
|
||||
NXDupdate(pDict,"bank","lowerbank");
|
||||
NXDputalias(pFile,pDict,"dtime",fTime2);
|
||||
}
|
||||
if( (self->iLower || self->iUpper) && self->iMiddle)
|
||||
{
|
||||
NXDupdate(pDict,"bank","merged");
|
||||
NXDputalias(pFile,pDict,"dtime",fTime2);
|
||||
}
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
|
||||
|
||||
/* calculate theoretical position of elastic peak */
|
||||
fVal = CalculateElastic(self,pCon);
|
||||
self->fElastic = (fVal - fTime2[0]) / (fTime2[1] - fTime2[0]);
|
||||
@@ -282,21 +311,45 @@
|
||||
|
||||
SNXSPutVariable(pServ->pSics,pCon,pFile,pDict,"ddist","detectordist");
|
||||
|
||||
/* theta array */
|
||||
fArray = (float *)malloc(150*sizeof(float));
|
||||
if(fArray)
|
||||
/* theta arrays */
|
||||
if(self->iMiddle)
|
||||
{
|
||||
for(i = 0; i < 75; i++)
|
||||
{
|
||||
fArray[i] = 0.80219*i + 9.2503;
|
||||
}
|
||||
for(i = 75; i< 150; i++)
|
||||
{
|
||||
fArray[i] = 0.80219*i + 11.9343;
|
||||
}
|
||||
NXDputalias(pFile,pDict,"dtheta",fArray);
|
||||
free(fArray);
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
iLength = getFMdim(MIDDLE);
|
||||
sprintf(pBuffer,"%d",iLength);
|
||||
NXDupdate(pDict,"noofdetectors",pBuffer);
|
||||
fArray = getFMBankTheta(MIDDLE);
|
||||
NXDputalias(pFile,pDict,"dtheta",fArray);
|
||||
}
|
||||
if(self->iLower)
|
||||
{
|
||||
NXDupdate(pDict,"bank","lowerbank");
|
||||
iLength = getFMdim(LOWER);
|
||||
sprintf(pBuffer,"%d",iLength);
|
||||
NXDupdate(pDict,"noofdetectors",pBuffer);
|
||||
fArray = getFMBankTheta(LOWER);
|
||||
NXDputalias(pFile,pDict,"dtheta",fArray);
|
||||
}
|
||||
if(self->iUpper)
|
||||
{
|
||||
NXDupdate(pDict,"bank","upperbank");
|
||||
iLength = getFMdim(UPPER);
|
||||
sprintf(pBuffer,"%d",iLength);
|
||||
NXDupdate(pDict,"noofdetectors",pBuffer);
|
||||
fArray = getFMBankTheta(UPPER);
|
||||
NXDputalias(pFile,pDict,"dtheta",fArray);
|
||||
}
|
||||
if(self->iMiddle && ( self->iLower || self->iUpper) )
|
||||
{
|
||||
NXDupdate(pDict,"bank","merged");
|
||||
iLength = getFMdim(MERGED);
|
||||
sprintf(pBuffer,"%d",iLength);
|
||||
NXDupdate(pDict,"noofdetectors",pBuffer);
|
||||
fArray = getFMBankTheta(MERGED);
|
||||
NXDputalias(pFile,pDict,"dtheta",fArray);
|
||||
}
|
||||
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
SNXSPutVariable(pServ->pSics,pCon,pFile,pDict,"ddelay","delay");
|
||||
|
||||
|
||||
@@ -369,89 +422,188 @@
|
||||
lVal = GetHistMonitor(self->pHist,2,pCon);
|
||||
NXDputalias(pFile,pDict,"cnmon2",&lVal);
|
||||
|
||||
/* histogram */
|
||||
|
||||
/* histogram with three detector banks */
|
||||
fTime = GetHistTimeBin(self->pHist,&iInt);
|
||||
iTime = iInt;
|
||||
sprintf(pBueffel,"%d",iInt);
|
||||
NXDupdate(pDict,"timebin",pBueffel);
|
||||
iInt = GetHistLength(self->pHist);
|
||||
lData = (HistInt *)malloc(iInt*sizeof(HistInt));
|
||||
if(!lData)
|
||||
lData = GetHistogramPointer(self->pHist,pCon);
|
||||
setFMDataPointer(lData,iTime);
|
||||
if(self->iUpper)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: out of memory, failed to write histogram",eError);
|
||||
return;
|
||||
NXDupdate(pDict,"bank","upperbank");
|
||||
iDet = getFMdim(UPPER);
|
||||
sprintf(pBueffel,"%d",iDet);
|
||||
NXDupdate(pDict,"noofdetectors",pBueffel);
|
||||
lData = getFMBankPointer(UPPER);
|
||||
NXDputalias(pFile,pDict,"dcounts",lData);
|
||||
/* summed counts for each detector */
|
||||
iSum = (int *)malloc(iDet*sizeof(int));
|
||||
if(iSum)
|
||||
{
|
||||
memset(iSum,0,iDet*sizeof(int));
|
||||
for(i = 0; i < iDet; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
{
|
||||
iSum[i] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
NXDputalias(pFile,pDict,"dsums",iSum);
|
||||
free(iSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",
|
||||
eWarning);
|
||||
}
|
||||
}
|
||||
memset(lData,0,iInt*sizeof(HistInt));
|
||||
GetHistogram(self->pHist,pCon, 0,0,iInt,lData,iInt*sizeof(HistInt));
|
||||
NXDputalias(pFile,pDict,"dcounts",lData);
|
||||
|
||||
/* summed counts for each detector */
|
||||
iSum = (int *)malloc(iTime*sizeof(int));
|
||||
iDet = iInt/iTime; /* number of detectors */
|
||||
if(iSum)
|
||||
/* middle bank */
|
||||
if(self->iMiddle)
|
||||
{
|
||||
memset(iSum,0,iTime*sizeof(int));
|
||||
for(i = 0; i < iDet; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
{
|
||||
iSum[i] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
NXDputalias(pFile,pDict,"dsums",iSum);
|
||||
free(iSum);
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
iDet = getFMdim(MIDDLE);
|
||||
sprintf(pBueffel,"%d",iDet);
|
||||
NXDupdate(pDict,"noofdetectors",pBueffel);
|
||||
lData = getFMBankPointer(MIDDLE);
|
||||
NXDputalias(pFile,pDict,"dcounts",lData);
|
||||
/* summed counts for each detector */
|
||||
iSum = (int *)malloc(iDet*sizeof(int));
|
||||
if(iSum)
|
||||
{
|
||||
memset(iSum,0,iDet*sizeof(int));
|
||||
for(i = 0; i < iDet; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
{
|
||||
iSum[i] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
NXDputalias(pFile,pDict,"dsums",iSum);
|
||||
free(iSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",
|
||||
eWarning);
|
||||
}
|
||||
}
|
||||
else
|
||||
if(self->iLower)
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",eWarning);
|
||||
NXDupdate(pDict,"bank","lowerbank");
|
||||
iDet = getFMdim(LOWER);
|
||||
sprintf(pBueffel,"%d",iDet);
|
||||
NXDupdate(pDict,"noofdetectors",pBueffel);
|
||||
lData = getFMBankPointer(LOWER);
|
||||
NXDputalias(pFile,pDict,"dcounts",lData);
|
||||
/* summed counts for each detector */
|
||||
iSum = (int *)malloc(iDet*sizeof(int));
|
||||
if(iSum)
|
||||
{
|
||||
memset(iSum,0,iDet*sizeof(int));
|
||||
for(i = 0; i < iDet; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
{
|
||||
iSum[i] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
NXDputalias(pFile,pDict,"dsums",iSum);
|
||||
free(iSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",
|
||||
eWarning);
|
||||
}
|
||||
}
|
||||
/* merged data */
|
||||
if( (self->iUpper || self->iLower) && self->iMiddle)
|
||||
{
|
||||
NXDupdate(pDict,"bank","merged");
|
||||
iDet = getFMdim(MERGED);
|
||||
sprintf(pBueffel,"%d",iDet);
|
||||
NXDupdate(pDict,"noofdetectors",pBueffel);
|
||||
lData = getFMBankPointer(MERGED);
|
||||
NXDputalias(pFile,pDict,"dcounts",lData);
|
||||
/* summed counts for each detector */
|
||||
iSum = (int *)malloc(iDet*sizeof(int));
|
||||
if(iSum)
|
||||
{
|
||||
memset(iSum,0,iDet*sizeof(int));
|
||||
for(i = 0; i < iDet; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
{
|
||||
iSum[i] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
NXDputalias(pFile,pDict,"dsums",iSum);
|
||||
free(iSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",
|
||||
eWarning);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* calculate elastic peak position */
|
||||
lSum = (long *)malloc(iTime *sizeof(long));
|
||||
fAxis = (float *)malloc(iTime *sizeof(float));
|
||||
if( lSum && fAxis)
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
lData = getFMBankPointer(MIDDLE);
|
||||
if(lData)
|
||||
{
|
||||
memset(lSum,0,iTime*sizeof(long));
|
||||
memset(fAxis,0,iTime*sizeof(float));
|
||||
for(i = 5; i < iDet - 5; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
lSum = (long *)malloc(iTime *sizeof(long));
|
||||
fAxis = (float *)malloc(iTime *sizeof(float));
|
||||
if( lSum && fAxis)
|
||||
{
|
||||
memset(lSum,0,iTime*sizeof(long));
|
||||
memset(fAxis,0,iTime*sizeof(float));
|
||||
for(i = 5; i < iDet - 5; i++)
|
||||
{
|
||||
iIndex = i * iTime;
|
||||
for(j = 0; j < iTime; j++)
|
||||
{
|
||||
lSum[j] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
for(i = 0; i < iTime; i++)
|
||||
{
|
||||
lSum[j] += lData[iIndex+j];
|
||||
}
|
||||
}
|
||||
for(i = 0; i < iTime; i++)
|
||||
{
|
||||
fAxis[i] = (float)i;
|
||||
}
|
||||
iStat = CalculateFitFromData(self->pFitter,fAxis,lSum,iTime);
|
||||
if(iStat != 1)
|
||||
{
|
||||
SCWrite(pCon,"WARNING: problem locating elastic peak",eWarning);
|
||||
}
|
||||
GetFitResults(self->pFitter,&fCenter,&fStdDev,&fFWHM,&fVal);
|
||||
fVal = fCenter - self->fElastic;
|
||||
if(fVal < 0.)
|
||||
fVal = - fVal;
|
||||
/* bad value, leave at theoretical value */
|
||||
if(fVal > 10.)
|
||||
{
|
||||
SCWrite(pCon,
|
||||
fAxis[i] = (float)i;
|
||||
}
|
||||
iStat = CalculateFitFromData(self->pFitter,fAxis,lSum,iTime);
|
||||
if(iStat != 1)
|
||||
{
|
||||
SCWrite(pCon,"WARNING: problem locating elastic peak",eWarning);
|
||||
}
|
||||
GetFitResults(self->pFitter,&fCenter,&fStdDev,&fFWHM,&fVal);
|
||||
fVal = fCenter - self->fElastic;
|
||||
if(fVal < 0.)
|
||||
fVal = - fVal;
|
||||
/* bad value, leave at theoretical value */
|
||||
if(fVal > 10.)
|
||||
{
|
||||
SCWrite(pCon,
|
||||
"WARNING: bad fit result, using theoretical elastic peak position",
|
||||
eWarning);
|
||||
}
|
||||
else
|
||||
{
|
||||
self->fElastic = fCenter;
|
||||
}
|
||||
free(lSum);
|
||||
free(fAxis);
|
||||
}
|
||||
else
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",eWarning);
|
||||
eWarning);
|
||||
}
|
||||
else
|
||||
{
|
||||
self->fElastic = fCenter;
|
||||
}
|
||||
free(lSum);
|
||||
free(fAxis);
|
||||
}
|
||||
else
|
||||
{
|
||||
SCWrite(pCon,"WARNING: out of memory, failed to do sums",eWarning);
|
||||
}
|
||||
}
|
||||
sprintf(pBueffel,"Elastic peak found at detector: %f",self->fElastic);
|
||||
SCWrite(pCon,pBueffel,eWarning);
|
||||
@@ -479,7 +631,7 @@
|
||||
int iStat;
|
||||
char pBueffel[512];
|
||||
|
||||
/* open everything agaian */
|
||||
/* open everything again */
|
||||
NXopen(self->pFile,NXACC_RDWR,&pFile);
|
||||
if(!pFile)
|
||||
{
|
||||
@@ -498,12 +650,41 @@
|
||||
NXclose(&pFile);
|
||||
return;
|
||||
}
|
||||
|
||||
NXDaliaslink(pFile,pDict,"dana","dcounts");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtime");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtheta");
|
||||
NXDaliaslink(pFile,pDict,"dana","cnmon1");
|
||||
|
||||
|
||||
if(self->iUpper)
|
||||
{
|
||||
NXDupdate(pDict,"bank","upperbank");
|
||||
NXDaliaslink(pFile,pDict,"dana","dcounts");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtime");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtheta");
|
||||
NXDaliaslink(pFile,pDict,"dana","cnmon1");
|
||||
}
|
||||
if(self->iMiddle)
|
||||
{
|
||||
NXDupdate(pDict,"bank","bank1");
|
||||
NXDaliaslink(pFile,pDict,"dana","dcounts");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtime");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtheta");
|
||||
NXDaliaslink(pFile,pDict,"dana","cnmon1");
|
||||
}
|
||||
if(self->iLower)
|
||||
{
|
||||
NXDupdate(pDict,"bank","lowerbank");
|
||||
NXDaliaslink(pFile,pDict,"dana","dcounts");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtime");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtheta");
|
||||
NXDaliaslink(pFile,pDict,"dana","cnmon1");
|
||||
}
|
||||
if( (self->iUpper || self->iLower) && self->iMiddle)
|
||||
{
|
||||
NXDupdate(pDict,"bank","merged");
|
||||
NXDaliaslink(pFile,pDict,"dana","dcounts");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtime");
|
||||
NXDaliaslink(pFile,pDict,"dana","dtheta");
|
||||
NXDaliaslink(pFile,pDict,"dana","cnmon1");
|
||||
}
|
||||
|
||||
|
||||
/* close everything */
|
||||
NXclose(&pFile);
|
||||
NXDclose(pDict,NULL);
|
||||
@@ -574,11 +755,14 @@
|
||||
|
||||
if(self->pFitter)
|
||||
DeleteFitCenter(self->pFitter);
|
||||
|
||||
/* free fomerge */
|
||||
killFM();
|
||||
|
||||
free(self);
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
int FoInstall(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int FoInstall(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
|
||||
@@ -589,7 +773,7 @@
|
||||
pDummy pDum;
|
||||
|
||||
/* check arguments */
|
||||
if(argc < 3 )
|
||||
if(argc < 4 )
|
||||
{
|
||||
SCWrite(pCon,"ERROR: Insufficient number of arguments to FoInstall",
|
||||
eError);
|
||||
@@ -603,6 +787,12 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!initializeFM(argv[3]))
|
||||
{
|
||||
SCWrite(pCon,"ERROR: bad merge data file",eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* allocate data structure */
|
||||
pNew = (pFoWrite)malloc(sizeof(FoWrite));
|
||||
if(!pNew)
|
||||
@@ -621,13 +811,16 @@
|
||||
pNew->pHist = pHist;
|
||||
pNew->pDictFile = strdup(argv[2]);
|
||||
pNew->iInterval = 20*60;
|
||||
pNew->iMiddle =1;
|
||||
|
||||
/* install callbacks */
|
||||
pDum = (pDummy)pHist;
|
||||
pCall = (pICallBack)pDum->pDescriptor->GetInterface(pHist,CALLBACKINTERFACE);
|
||||
pCall = (pICallBack)pDum->pDescriptor->GetInterface(pHist,
|
||||
CALLBACKINTERFACE);
|
||||
if(!pCall)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: no callback interface found at your histogram memory",
|
||||
SCWrite(pCon,
|
||||
"ERROR: no callback interface found at your histogram memory",
|
||||
eError);
|
||||
KillFoWrite(pNew);
|
||||
return 0;
|
||||
@@ -710,6 +903,93 @@
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(strcmp(argv[1],"middle") == 0)
|
||||
{
|
||||
if(argc > 2) /* set value */
|
||||
{
|
||||
if(!SCMatchRights(pCon,usMugger))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
iRet = Tcl_GetInt(pSics->pTcl,argv[2],&iVal);
|
||||
if(iRet != TCL_OK)
|
||||
{
|
||||
sprintf(pBueffel,"ERROR: cannot convert --> %s <-- to number ",
|
||||
argv[2]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
if(iVal < 0) iVal = 0;
|
||||
self->iMiddle = iVal;
|
||||
setFMconfiguration(self->iUpper,self->iMiddle,self->iLower);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
}
|
||||
else /* read the value */
|
||||
{
|
||||
sprintf(pBueffel,"storefocus.middle = %d",self->iMiddle);
|
||||
SCWrite(pCon,pBueffel,eValue);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(strcmp(argv[1],"lower") == 0)
|
||||
{
|
||||
if(argc > 2) /* set value */
|
||||
{
|
||||
if(!SCMatchRights(pCon,usMugger))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
iRet = Tcl_GetInt(pSics->pTcl,argv[2],&iVal);
|
||||
if(iRet != TCL_OK)
|
||||
{
|
||||
sprintf(pBueffel,"ERROR: cannot convert --> %s <-- to number ",
|
||||
argv[2]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
if(iVal < 0) iVal = 0;
|
||||
self->iLower = iVal;
|
||||
setFMconfiguration(self->iUpper,self->iMiddle,self->iLower);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
}
|
||||
else /* read the value */
|
||||
{
|
||||
sprintf(pBueffel,"storefocus.lower = %d",self->iLower);
|
||||
SCWrite(pCon,pBueffel,eValue);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(strcmp(argv[1],"upper") == 0)
|
||||
{
|
||||
if(argc > 2) /* set value */
|
||||
{
|
||||
if(!SCMatchRights(pCon,usMugger))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
iRet = Tcl_GetInt(pSics->pTcl,argv[2],&iVal);
|
||||
if(iRet != TCL_OK)
|
||||
{
|
||||
sprintf(pBueffel,"ERROR: cannot convert --> %s <-- to number ",
|
||||
argv[2]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
if(iVal < 0) iVal = 0;
|
||||
self->iUpper = iVal;
|
||||
setFMconfiguration(self->iUpper,self->iMiddle,self->iLower);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
}
|
||||
else /* read the value */
|
||||
{
|
||||
sprintf(pBueffel,"storefocus.upper = %d",self->iUpper);
|
||||
SCWrite(pCon,pBueffel,eValue);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
SCWrite(pCon,"ERROR: subcommand to storefocus not recognized",eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user