- Reworked the connection object and the IO system

- Reworked the support for TRICS
- Added a second generation motor
This commit is contained in:
koennecke
2009-02-03 08:05:39 +00:00
parent f6d595665e
commit 361ee9ebea
119 changed files with 16455 additions and 3674 deletions

View File

@@ -8,6 +8,7 @@
Mark Koennecke, February 2003
Mark Koennecke, January 2004
added putHdb and putHdbSlab, Mark Koennecke, December 2008
------------------------------------------------------------------------*/
#include <stdlib.h>
#include <assert.h>
@@ -30,6 +31,7 @@
#include "nxdict.h"
#include "nxscript.h"
#include "sicsdata.h"
#include "sicshipadaba.h"
extern char *trim(char *str);
@@ -96,7 +98,7 @@ char *makeFilename(SicsInterp *pSics, SConnection *pCon) {
if(dir == NULL){
mkdir(pRes,S_IRWXU | S_IRGRP | S_IXGRP);
snprintf(pBueffel,255,"Creating dir: %s", pRes);
SCWrite(pCon,pBueffel,eWarning);
SCWrite(pCon,pBueffel,eLog);
} else {
closedir(dir);
}
@@ -126,6 +128,28 @@ void changeExtension(char *filename, char *newExtension){
assert(strlen(pPtr) >= strlen(newExtension));
strcpy(pPtr,newExtension);
}
/*----------------------------------------------------------------------*/
static int listToArray(SicsInterp *pSics, char *list,
int intar[NX_MAXRANK]){
int argc, status, i, val;
CONST char **argv;
Tcl_Interp *pTcl = InterpGetTcl(pSics);
status = Tcl_SplitList(pTcl, list, &argc, &argv);
if(status != TCL_OK){
return status;
}
for(i = 0; i < argc; i++){
status = Tcl_GetInt(pTcl,argv[i],&val);
if(status != TCL_OK){
return status;
}
intar[i] = val;
}
Tcl_Free((char *)argv);
return TCL_OK;
}
/*======================== Action =======================================*/
static int handleFileOperations(SConnection *pCon, pNXScript self,
int argc, char *argv[]){
@@ -209,7 +233,7 @@ static void putMotor(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to putmotor",
eError);
eLogError);
return;
}
@@ -219,7 +243,7 @@ static void putMotor(SConnection *pCon, SicsInterp *pSics, pNXScript self,
brumm = (pMotor)FindCommandData(pSics,argv[3],"Motor");
if(!brumm){
sprintf(buffer,"ERROR: motor %s not found!", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -229,14 +253,14 @@ static void putMotor(SConnection *pCon, SicsInterp *pSics, pNXScript self,
status = MotorGetSoftPosition(brumm, pCon,&fVal);
if(!status){
sprintf(buffer,"ERROR: failed to read position of %s", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
status = NXDputalias(self->fileHandle,self->dictHandle,argv[2],&fVal);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write %s with alias %s",
argv[3],argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -251,7 +275,7 @@ static void putMotor(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write %s zero with alias %s",
argv[3],argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
}
@@ -268,7 +292,7 @@ static void putCounter(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to putcounter",
eError);
eLogError);
return;
}
memset(dummy,0,80*sizeof(char));
@@ -279,7 +303,7 @@ static void putCounter(SConnection *pCon, SicsInterp *pSics, pNXScript self,
cter = (pCounter)FindCommandData(pSics,argv[3],"SingleCounter");
if(!cter){
sprintf(buffer,"ERROR: counter %s not found!", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -292,7 +316,7 @@ static void putCounter(SConnection *pCon, SicsInterp *pSics, pNXScript self,
status = NXDputalias(self->fileHandle,self->dictHandle,newAlias,&fVal);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write preset to %s", newAlias);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
/*
@@ -309,7 +333,7 @@ static void putCounter(SConnection *pCon, SicsInterp *pSics, pNXScript self,
status = NXDputalias(self->fileHandle,self->dictHandle,newAlias,dummy);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write counter mode to %s", newAlias);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
/*
@@ -322,7 +346,7 @@ static void putCounter(SConnection *pCon, SicsInterp *pSics, pNXScript self,
status = NXDputalias(self->fileHandle,self->dictHandle,newAlias,&fVal);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write count time to %s", newAlias);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
}
@@ -352,7 +376,7 @@ static void putSicsData(SConnection *pCon, SicsInterp *pSics,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to putSicsData",
eError);
eLogError);
return;
}
@@ -362,14 +386,14 @@ static void putSicsData(SConnection *pCon, SicsInterp *pSics,
data = (pSICSData)FindCommandData(pSics,argv[3],"SICSData");
if(data == NULL){
snprintf(buffer,255,"ERROR: sicsdata %s not found!", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
status = NXDputalias(self->fileHandle,self->dictHandle,argv[2],data->data);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write sicsdata to %s", argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
}
/*----------------------------------------------------------------------*/
@@ -380,25 +404,177 @@ static void putAttribute(SConnection *pCon, SicsInterp *pSics,
if(argc < 5){
SCWrite(pCon,"ERROR: insufficient number of arguments to putAttribute",
eError);
eLogError);
return;
}
status = NXDopenalias(self->fileHandle,self->dictHandle,argv[2]);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to open alias %s", argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
status = NXputattr(self->fileHandle,argv[3],(void *)argv[4],
strlen(argv[4])+1, type);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write attribute %s", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
NXopenpath(self->fileHandle,"/");
}
/*----------------------------------------------------------------------*/
static void putHdb(SConnection *pCon, SicsInterp *pSics, pNXScript self,
int argc, char *argv[]){
pHdb node = NULL;
char alias[512];
hdbValue v;
float fVal, *floatAr = NULL;
int i;
if(argc < 3){
SCWrite(pCon,"ERROR: putHdb needs at least node name",
eLogError);
return;
}
node = FindHdbNode(NULL,argv[2], pCon);
if(node == NULL){
SCPrintf(pCon,eLogError,"ERROR: node %s not found", argv[2]);
return;
}
memset(alias,0,512*sizeof(char));
if(!GetHdbProperty(node,"nxalias", alias, 512)){
if(argc < 4) {
SCPrintf(pCon,eLogError,"ERROR: neither nxalias property nor alias on command line found for %s",
argv[2]);
return;
} else {
strncpy(alias, argv[3],512);
}
}
GetHipadabaPar(node,&v,pCon);
switch(v.dataType){
case HIPNONE:
return;
break;
case HIPINT:
NXDputalias(self->fileHandle, self->dictHandle, alias,
&v.v.intValue);
break;
case HIPFLOAT:
fVal = v.v.doubleValue;
NXDputalias(self->fileHandle, self->dictHandle, alias,
&fVal);
break;
case HIPTEXT:
NXDputalias(self->fileHandle, self->dictHandle, alias,
v.v.text);
break;
case HIPINTAR:
case HIPINTVARAR:
NXDputalias(self->fileHandle, self->dictHandle, alias,
v.v.intArray);
break;
case HIPFLOATAR:
case HIPFLOATVARAR:
floatAr = malloc(v.arrayLength*sizeof(float));
if(floatAr == NULL){
SCPrintf(pCon,eLogError,"ERROR: out of memory writing %s", node->name);
return;
}
for(i = 0; i < v.arrayLength; i++){
floatAr[i] = v.v.floatArray[i];
}
NXDputalias(self->fileHandle, self->dictHandle, alias,
floatAr);
free(floatAr);
break;
}
ReleaseHdbValue(&v);
}
/*----------------------------------------------------------------------*/
static void putHdbSlab(SConnection *pCon, SicsInterp *pSics, pNXScript self,
int argc, char *argv[]){
pHdb node = NULL;
char alias[512];
hdbValue v;
float fVal, *floatAr = NULL;
int start[NX_MAXRANK], size[NX_MAXRANK];
int i, status;
if(argc < 5){
SCWrite(pCon,"ERROR: putHdbSlab needs at least node name start, size",
eLogError);
return;
}
node = FindHdbNode(NULL,argv[2], pCon);
if(node == NULL){
SCPrintf(pCon,eLogError,"ERROR: node %s not found", argv[2]);
return;
}
memset(alias,0,512*sizeof(char));
if(!GetHdbProperty(node,"nxalias", alias, 512)){
SCPrintf(pCon,eLogError,
"ERROR: nxalias property not found for %s",
argv[2]);
return;
}
status = NXDopenalias(self->fileHandle, self->dictHandle,alias);
if(status != NX_OK){
SCPrintf(pCon,eLogError,"ERROR: failed to open alias for %s", argv[2]);
return;
}
status = listToArray(pSics,argv[3],start);
if(status != TCL_OK){
SCWrite(pCon,"ERROR: failed to convert start value list", eLogError);
return;
}
status = listToArray(pSics,argv[4],size);
if(status != TCL_OK){
SCWrite(pCon,"ERROR: failed to convert size value list", eLogError);
return;
}
GetHipadabaPar(node,&v,pCon);
switch(v.dataType){
case HIPNONE:
return;
break;
case HIPINT:
status = NXputslab(self->fileHandle, &v.v.intValue, start,size);
break;
case HIPFLOAT:
fVal = v.v.doubleValue;
status = NXputslab(self->fileHandle, &fVal, start,size);
break;
case HIPTEXT:
status = NXputslab(self->fileHandle, v.v.text, start,size);
break;
case HIPINTAR:
case HIPINTVARAR:
status = NXputslab(self->fileHandle, v.v.intArray, start,size);
break;
case HIPFLOATAR:
case HIPFLOATVARAR:
floatAr = malloc(v.arrayLength*sizeof(float));
if(floatAr == NULL){
SCPrintf(pCon,eLogError,"ERROR: out of memory writing %s", node->name);
return;
}
for(i = 0; i < v.arrayLength; i++){
floatAr[i] = v.v.floatArray[i];
}
status = NXputslab(self->fileHandle, floatAr, start,size);
free(floatAr);
break;
}
if(status != NX_OK){
SCPrintf(pCon,eLogError,"ERROR: failed to write slab for node %s", argv[2]);
}
ReleaseHdbValue(&v);
}
/*----------------------------------------------------------------------*/
static void updateHMDim(NXScript *self, pHistMem mem){
int iDim[MAXDIM];
int i, rank, timeLength, status;
@@ -444,7 +620,7 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to puthm",
eError);
eLogError);
return;
}
@@ -454,7 +630,7 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
mem = (pHistMem)FindCommandData(pSics,argv[3],"HistMem");
if(!mem){
sprintf(buffer,"ERROR: HistMem %s not found!", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -475,14 +651,14 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to integer",
argv[4]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
status = Tcl_GetInt(InterpGetTcl(pSics),argv[5],&length);
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to integer",
argv[5]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
}
@@ -495,7 +671,7 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to integer",
argv[6]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
}
@@ -507,7 +683,7 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
iData = (HistInt *)malloc(length*sizeof(HistInt));
if(!iData){
SCWrite(pCon,"ERROR: out of memory for reading histogram memory",
eError);
eLogError);
return;
}
memset(iData,0,length*sizeof(HistInt));
@@ -526,7 +702,7 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
}
}
if(!status){
SCWrite(pCon,"ERROR: failed to read histogram memory",eError);
SCWrite(pCon,"ERROR: failed to read histogram memory",eLogError);
if(subset){
free(iData);
}
@@ -539,7 +715,7 @@ static void putHistogramMemory(SConnection *pCon, SicsInterp *pSics,
status = NXDputalias(self->fileHandle, self->dictHandle,argv[2],iData);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write histogram memory data");
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
if(subset){
@@ -563,7 +739,7 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
if(argc < 5){
SCWrite(pCon,"ERROR: insufficient number of arguments to puthmchunked",
eError);
eLogError);
return;
}
@@ -573,7 +749,7 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
mem = (pHistMem)FindCommandData(pSics,argv[3],"HistMem");
if(!mem){
sprintf(buffer,"ERROR: HistMem %s not found!", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -592,7 +768,7 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to integer",
argv[4]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -603,7 +779,7 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
iData = (HistInt *)malloc(length*sizeof(HistInt));
if(!iData){
SCWrite(pCon,"ERROR: out of memory for reading histogram memory",
eError);
eLogError);
return;
}
memset(iData,0,length*sizeof(HistInt));
@@ -622,7 +798,7 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
}
}
if(!status){
SCWrite(pCon,"ERROR: failed to read histogram memory",eError);
SCWrite(pCon,"ERROR: failed to read histogram memory",eLogError);
if(subset){
free(iData);
}
@@ -635,7 +811,7 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
status = NXDputalias(self->fileHandle, self->dictHandle,argv[2],iData);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write histogram memory data");
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
if(subset){
@@ -646,28 +822,6 @@ static void putHistogramMemoryChunked(SConnection *pCon, SicsInterp *pSics,
return;
}
/*----------------------------------------------------------------------*/
static int listToArray(SicsInterp *pSics, char *list,
int intar[NX_MAXRANK]){
int argc, status, i, val;
CONST char **argv;
Tcl_Interp *pTcl = InterpGetTcl(pSics);
status = Tcl_SplitList(pTcl, list, &argc, &argv);
if(status != TCL_OK){
return status;
}
for(i = 0; i < argc; i++){
status = Tcl_GetInt(pTcl,argv[i],&val);
if(status != TCL_OK){
return status;
}
intar[i] = val;
}
Tcl_Free((char *)argv);
return TCL_OK;
}
/*----------------------------------------------------------------------*/
static void putSlab(SConnection *pCon, SicsInterp *pSics, pNXScript self,
int argc, char *argv[]){
int start[NX_MAXRANK], size[NX_MAXRANK];
@@ -678,25 +832,25 @@ static void putSlab(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(argc < 6){
SCWrite(pCon,"ERROR: insufficient number of arguments to putslab",
eError);
eLogError);
return;
}
status = NXDopenalias(self->fileHandle, self->dictHandle,argv[2]);
if(status != NX_OK){
SCPrintf(pCon,eError,"ERROR: failed to open alias %s", argv[2]);
SCPrintf(pCon,eLogError,"ERROR: failed to open alias %s", argv[2]);
return;
}
status = listToArray(pSics,argv[3],start);
if(status != TCL_OK){
SCWrite(pCon,"ERROR: failed to convert start value list", eError);
SCWrite(pCon,"ERROR: failed to convert start value list", eLogError);
return;
}
status = listToArray(pSics,argv[4],size);
if(status != TCL_OK){
SCWrite(pCon,"ERROR: failed to convert size value list", eError);
SCWrite(pCon,"ERROR: failed to convert size value list", eLogError);
return;
}
@@ -731,7 +885,7 @@ static void putSlab(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(written == 0){
SCWrite(pCon,"ERROR: failed to write data, data not recognised",
eError);
eLogError);
}
}
/*-------------------------------------------------------------------*/
@@ -746,7 +900,7 @@ static void putTimeBinning(SConnection *pCon, SicsInterp *pSics,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to puttimebinning",
eError);
eLogError);
return;
}
@@ -756,7 +910,7 @@ static void putTimeBinning(SConnection *pCon, SicsInterp *pSics,
mem = (pHistMem)FindCommandData(pSics,argv[3],"HistMem");
if(!mem){
sprintf(buffer,"ERROR: HistMem %s not found!", argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -768,7 +922,7 @@ static void putTimeBinning(SConnection *pCon, SicsInterp *pSics,
if(!status){
sprintf(buffer,"ERROR: alias %s for time binning not found",
argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
timeBin = GetHistTimeBin(mem,&timeLength);
@@ -780,7 +934,7 @@ static void putTimeBinning(SConnection *pCon, SicsInterp *pSics,
if(self->timeDivisor != 1){
timeCopy = (float *)malloc(timeLength*sizeof(float));
if(timeCopy == NULL){
SCWrite(pCon,"ERROR: out of memory writing time binning",eError);
SCWrite(pCon,"ERROR: out of memory writing time binning",eLogError);
return;
}
for(i = 0; i < timeLength; i++){
@@ -796,7 +950,7 @@ static void putTimeBinning(SConnection *pCon, SicsInterp *pSics,
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write time binning");
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
SCSendOK(pCon);
return;
@@ -814,7 +968,7 @@ static void putArray(SConnection *pCon, SicsInterp *pSics,
if(argc < 5){
SCWrite(pCon,"ERROR: insufficient number of arguments to array",
eError);
eLogError);
return;
}
tcl = InterpGetTcl(pSics);
@@ -825,8 +979,8 @@ static void putArray(SConnection *pCon, SicsInterp *pSics,
*/
status = Tcl_GetInt(tcl,argv[4],&length);
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to integer",argv[4]);
SCWrite(pCon,buffer,eError);
sprintf(buffer,"ERROR: failed to convert %s to integer in putarray",argv[4]);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -838,9 +992,9 @@ static void putArray(SConnection *pCon, SicsInterp *pSics,
}
if(data == NULL){
snprintf(buffer,255,
"ERROR: out of memory or invalid length at %s, length = %s",
"ERROR: out of memory or invalid length in putarray at %s, length = %s",
argv[2],argv[4]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
memset(data,0,length*sizeof(float));
@@ -854,14 +1008,14 @@ static void putArray(SConnection *pCon, SicsInterp *pSics,
if(varData != NULL){
status = Tcl_GetDouble(tcl,varData,&dVal);
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to double",
sprintf(buffer,"ERROR: failed to convert %s to double in putarray",
varData);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
data[i] = (float)dVal;
} else {
snprintf(buffer,254,"WARNING: failed to find array element %d", i);
SCWrite(pCon,buffer,eError);
snprintf(buffer,254,"WARNING: failed to find array element %d in putarray", i);
SCWrite(pCon,buffer,eLogError);
}
}
@@ -870,9 +1024,9 @@ static void putArray(SConnection *pCon, SicsInterp *pSics,
*/
status = NXDdefget(self->dictHandle,argv[2],buffer,254);
if(!status){
sprintf(buffer,"ERROR: alias %s for array not found",
sprintf(buffer,"ERROR: alias %s for array not found in putarray",
argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
free(data);
return;
}
@@ -883,8 +1037,8 @@ static void putArray(SConnection *pCon, SicsInterp *pSics,
*/
status = NXDputdef(self->fileHandle,self->dictHandle,defString,data);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write array");
SCWrite(pCon,buffer,eError);
sprintf(buffer,"ERROR: failed to write array in putarray");
SCWrite(pCon,buffer,eLogError);
}
free(data);
SCSendOK(pCon);
@@ -902,7 +1056,7 @@ static void putIntArray(SConnection *pCon, SicsInterp *pSics,
if(argc < 5){
SCWrite(pCon,"ERROR: insufficient number of arguments to array",
eError);
eLogError);
return;
}
tcl = InterpGetTcl(pSics);
@@ -914,7 +1068,7 @@ static void putIntArray(SConnection *pCon, SicsInterp *pSics,
status = Tcl_GetInt(tcl,argv[4],&length);
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to integer",argv[4]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return;
}
@@ -925,7 +1079,7 @@ static void putIntArray(SConnection *pCon, SicsInterp *pSics,
data = (int *)malloc(length*sizeof(int));
}
if(data == NULL){
SCWrite(pCon,"ERROR: out of memory or invalid length",eError);
SCWrite(pCon,"ERROR: out of memory or invalid length",eLogError);
return;
}
memset(data,0,length*sizeof(int));
@@ -941,12 +1095,12 @@ static void putIntArray(SConnection *pCon, SicsInterp *pSics,
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to int",
varData);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
data[i] = iVal;
} else {
snprintf(buffer,254,"WARNING: failed to find array element %d", i);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
}
@@ -957,7 +1111,7 @@ static void putIntArray(SConnection *pCon, SicsInterp *pSics,
if(!status){
sprintf(buffer,"ERROR: alias %s for array not found",
argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
free(data);
return;
}
@@ -969,7 +1123,7 @@ static void putIntArray(SConnection *pCon, SicsInterp *pSics,
status = NXDputdef(self->fileHandle,self->dictHandle,defString,data);
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write array");
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
free(data);
SCSendOK(pCon);
@@ -983,7 +1137,7 @@ static void putGlobal(SConnection *pCon, SicsInterp *pSics,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to putglobal",
eError);
eLogError);
return;
}
@@ -991,7 +1145,7 @@ static void putGlobal(SConnection *pCon, SicsInterp *pSics,
status = NXputattr(self->fileHandle,argv[2],value,strlen(value),
NX_CHAR);
if(status != NX_OK){
SCWrite(pCon,"ERROR: failed to write attribute",eError);
SCWrite(pCon,"ERROR: failed to write attribute",eLogError);
}
SCSendOK(pCon);
}
@@ -1007,14 +1161,14 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(strcmp(argv[1],"putfloat") == 0){
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to putfloat",
eError);
eLogError);
return 1;
}
status = Tcl_GetDouble(InterpGetTcl(pSics),argv[3],&dVal);
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to float",
argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return 1;
}
fVal = (float)dVal;
@@ -1023,20 +1177,20 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write %f to alias %s",
fVal, argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
return 1;
} else if(strcmp(argv[1],"putint") == 0){
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to putint",
eError);
eLogError);
return 1;
}
status = Tcl_GetInt(InterpGetTcl(pSics),argv[3],&iVal);
if(status != TCL_OK){
sprintf(buffer,"ERROR: failed to convert %s to int",
argv[3]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return 1;
}
status = NXDputalias(self->fileHandle, self->dictHandle,
@@ -1044,14 +1198,14 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write %d to alias %s",
iVal, argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
return 1;
} else if (strcmp(argv[1],"puttext") == 0){
/*====================*/
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to puttext",
eError);
eLogError);
return 1;
}
Arg2Text(argc-3,&argv[3],buffer,1023);
@@ -1060,7 +1214,7 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(status != NX_OK){
sprintf(buffer,"ERROR: alias %s not found in puttext",
argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
return 1;
}
if(strlen(defString) < 900){
@@ -1070,7 +1224,7 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
strcat(defString," }");
} else {
SCWrite(pCon,"ERROR: out of definition string space in puttext",
eError);
eLogError);
return 1;
}
status = NXDputdef(self->fileHandle,self->dictHandle,
@@ -1078,7 +1232,7 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
if(status != NX_OK){
sprintf(buffer,"ERROR: failed to write alias %s",
argv[2]);
SCWrite(pCon,buffer,eError);
SCWrite(pCon,buffer,eLogError);
}
return 1;
} else if(strcmp(argv[1],"putmot") == 0){
@@ -1089,6 +1243,14 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
/* ================*/
putCounter(pCon,pSics,self, argc,argv);
return 1;
} else if(strcmp(argv[1],"puthdb") == 0){
/* ================*/
putHdb(pCon,pSics,self, argc,argv);
return 1;
} else if(strcmp(argv[1],"puthdbslab") == 0){
/* ================*/
putHdbSlab(pCon,pSics,self, argc,argv);
return 1;
}else if(strcmp(argv[1],"puthm") == 0){
/*=================*/
putHistogramMemory(pCon,pSics,self,argc, argv);
@@ -1115,7 +1277,7 @@ static int handlePut(SConnection *pCon, SicsInterp *pSics, pNXScript self,
/*===============*/
putSlab(pCon,pSics,self,argc,argv);
} else {
SCWrite(pCon,"ERROR: put command not recognised",eError);
SCWrite(pCon,"ERROR: put command not recognised",eLogError);
}
return 1;
}
@@ -1128,7 +1290,7 @@ static void makeLink(SConnection *pCon, SicsInterp *pSics,
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to makelink",
eError);
eLogError);
return;
}
@@ -1137,7 +1299,7 @@ static void makeLink(SConnection *pCon, SicsInterp *pSics,
if(status != NX_OK){
snprintf(pBueffel,255,"ERROR: linking %s against %s failed",
argv[2], argv[3]);
SCWrite(pCon,pBueffel,eError);
SCWrite(pCon,pBueffel,eLogError);
return;
}
@@ -1150,12 +1312,12 @@ static void updateDictVar(SConnection *pCon, pNXScript self, int argc,
if(self->dictHandle == NULL){
SCWrite(pCon,"ERROR: cannot update variable, dictionary not open",
eError);
eLogError);
return;
}
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to updateDictVar",
eError);
eLogError);
return;
}
NXDupdate(self->dictHandle,argv[2],argv[3]);
@@ -1176,7 +1338,7 @@ int NXScriptAction(SConnection *pCon, SicsInterp *pSics, void *pData,
return 1;
}
if(argc < 2){
SCWrite(pCon,"ERROR: no keyword found",eError);
SCWrite(pCon,"ERROR: no keyword found",eLogError);
return 1;
}
strtolower(argv[1]);
@@ -1193,7 +1355,7 @@ int NXScriptAction(SConnection *pCon, SicsInterp *pSics, void *pData,
}
} else if(strcmp(argv[1],"divisor") == 0){
if(argc < 3) {
SCWrite(pCon,"ERROR: no diviso found",eError);
SCWrite(pCon,"ERROR: no divisor found",eLogError);
return 1;
}
if(!SCMatchRights(pCon,usMugger)){
@@ -1216,7 +1378,7 @@ int NXScriptAction(SConnection *pCon, SicsInterp *pSics, void *pData,
if we are here, we can only continue if files are open
*/
if(self->fileHandle == NULL || self->dictHandle == NULL){
SCWrite(pCon,"ERROR: cannot write, files not open",eError);
SCWrite(pCon,"ERROR: cannot write, files not open",eLogError);
return 1;
}
@@ -1232,7 +1394,7 @@ int NXScriptAction(SConnection *pCon, SicsInterp *pSics, void *pData,
if(strcmp(argv[1],"isalias") == 0) {
if(argc < 3) {
SCWrite(pCon,"ERROR: need alias to test",eError);
SCWrite(pCon,"ERROR: need alias to test",eLogError);
return 1;
}
if(NXDget(self->dictHandle,argv[2],buffer,131) == NX_OK){