Cleaned up ANSTO code to merge with sinqdev.sics
This is our new RELEASE-4_0 branch which was taken from ansto/93d9a7c Conflicts: .gitignore SICSmain.c asynnet.c confvirtualmot.c counter.c devexec.c drive.c event.h exebuf.c exeman.c histmem.c interface.h motor.c motorlist.c motorsec.c multicounter.c napi.c napi.h napi4.c network.c nwatch.c nxscript.c nxxml.c nxxml.h ofac.c reflist.c scan.c sicshipadaba.c sicsobj.c site_ansto/docs/Copyright.txt site_ansto/instrument/lyrebird/config/tasmad/sicscommon/nxsupport.tcl site_ansto/instrument/lyrebird/config/tasmad/taspub_sics/tasscript.tcl statusfile.c tasdrive.c tasub.c tasub.h tasublib.c tasublib.h
This commit is contained in:
509
nxscript.c
509
nxscript.c
@@ -9,6 +9,8 @@
|
||||
Mark Koennecke, February 2003
|
||||
Mark Koennecke, January 2004
|
||||
added putHdb and putHdbSlab, Mark Koennecke, December 2008
|
||||
|
||||
added sput, sappend and slab. Mark Koennecke, November 2013
|
||||
------------------------------------------------------------------------*/
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
@@ -32,6 +34,9 @@
|
||||
#include "nxscript.h"
|
||||
#include "sicsdata.h"
|
||||
#include "sicshipadaba.h"
|
||||
#include "messagepipe.h"
|
||||
#include "sicsget.h"
|
||||
#include "stptok.h"
|
||||
|
||||
extern char *trim(char *str);
|
||||
|
||||
@@ -230,6 +235,7 @@ static int handleFileOperations(SConnection * pCon, pNXScript self,
|
||||
SCWrite(pCon, buffer, eError);
|
||||
return -1;
|
||||
}
|
||||
traceIO("datafile", "Opening %s", argv[2]);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
}
|
||||
@@ -945,9 +951,7 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
|
||||
pSICSData data = NULL;
|
||||
pCounter memsec = NULL;
|
||||
pHdb node = NULL;
|
||||
char buffer[256];
|
||||
enum histargs { haStart, haLength, haBank };
|
||||
int i, haIndex, hpars[HANUM], haFirst = 6;
|
||||
double dVal;
|
||||
|
||||
if (argc < 6) {
|
||||
SCWrite(pCon, "ERROR: insufficient number of arguments to putslab",
|
||||
@@ -978,38 +982,12 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
|
||||
*/
|
||||
mem = (pHistMem) FindCommandData(pSics, argv[5], "HistMem");
|
||||
if (mem != NULL) {
|
||||
if (argc == 6) {
|
||||
histData = GetHistogramPointer(mem, pCon);
|
||||
} else if (argc > 6) {
|
||||
for (i = 0, haIndex = haFirst; i < HANUM; i++, haIndex++) {
|
||||
status = Tcl_GetInt(InterpGetTcl(pSics), argv[haIndex], &hpars[i]);
|
||||
if (status != TCL_OK) {
|
||||
sprintf(buffer, "ERROR: failed to convert %s to integer",
|
||||
argv[haIndex]);
|
||||
SCWrite(pCon, buffer, eError);
|
||||
return;
|
||||
}
|
||||
}
|
||||
histData = (HistInt *) malloc(hpars[haLength] * sizeof(HistInt));
|
||||
if (!histData) {
|
||||
SCWrite(pCon, "ERROR: out of memory for reading histogram memory",
|
||||
eError);
|
||||
return;
|
||||
}
|
||||
memset(histData, 0, hpars[haLength] * sizeof(HistInt));
|
||||
status = GetHistogramDirect(mem, pCon, hpars[haBank],
|
||||
hpars[haStart],
|
||||
hpars[haStart] + hpars[haLength],
|
||||
histData,
|
||||
hpars[haLength] * sizeof(HistInt));
|
||||
}
|
||||
histData = GetHistogramPointer(mem, pCon);
|
||||
if (histData) {
|
||||
status = NXputslab(self->fileHandle, histData, start, size);
|
||||
if (status == NX_OK) {
|
||||
written = 1;
|
||||
}
|
||||
if (argc > 6)
|
||||
free(histData);
|
||||
status = NXputslab(self->fileHandle, histData, start, size);
|
||||
if (status == NX_OK) {
|
||||
written = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1039,6 +1017,24 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
|
||||
written = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* try to look for a single double. This is a hack to make absolute_time
|
||||
* work at BOA. A cleaner solution should be devised in a later stage.
|
||||
* MK, June 2013
|
||||
*/
|
||||
if(written == 0) {
|
||||
status = Tcl_GetDouble(InterpGetTcl(pSics), argv[5], &dVal);
|
||||
if (status != TCL_OK) {
|
||||
written = 0;
|
||||
} else {
|
||||
status = NXputslab(self->fileHandle, &dVal, start, size);
|
||||
if (status == NX_OK) {
|
||||
written = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* drop out of hierarchy
|
||||
*/
|
||||
@@ -1426,7 +1422,421 @@ static void putGlobal(SConnection * pCon, SicsInterp * pSics,
|
||||
}
|
||||
SCSendOK(pCon);
|
||||
}
|
||||
/*-----------------------------------------------------------------------
|
||||
sget based functions
|
||||
-------------------------------------------------------------------------*/
|
||||
static pMP putPipe = NULL;
|
||||
static pMP appendPipe = NULL;
|
||||
/*------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
hdbValue v;
|
||||
char error[512];
|
||||
char defString[1024];
|
||||
int success;
|
||||
int argc;
|
||||
char **argv;
|
||||
pNXScript nx;
|
||||
int rank;
|
||||
int dim[NX_MAXRANK];
|
||||
int point;
|
||||
}PutMessage, *pPutMessage;
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int CheckNoArguments(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
int *noArgs = (int *)userData;
|
||||
|
||||
if(self->argc < *noArgs){
|
||||
snprintf(self->error, sizeof(self->error),"Not enough arguments, %d required",
|
||||
*noArgs);
|
||||
return MPSTOP;
|
||||
}
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int SGetData(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
int status;
|
||||
|
||||
status = sget(self->argv[3],&self->v);
|
||||
if(status == 0){
|
||||
snprintf(self->error, sizeof(self->error),"data for %s NOT found",
|
||||
self->argv[3]);
|
||||
return MPSTOP;
|
||||
}
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
static int GetDefString(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
NXstatus status;
|
||||
|
||||
status = NXDget(self->nx->dictHandle, self->argv[2],
|
||||
self->defString,sizeof(self->defString));
|
||||
if(status != NX_OK){
|
||||
snprintf(self->error, sizeof(self->error),"alias %s NOT found",
|
||||
self->argv[2]);
|
||||
return MPSTOP;
|
||||
}
|
||||
NXDtextreplace(self->nx->dictHandle,self->defString,
|
||||
self->defString,sizeof(self->defString));
|
||||
|
||||
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int SPutAddType(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
switch(self->v.dataType){
|
||||
case HIPINT:
|
||||
case HIPINTAR:
|
||||
case HIPINTVARAR:
|
||||
strncat(self->defString," -type NX_INT32 ",sizeof(self->defString));
|
||||
break;
|
||||
case HIPFLOAT:
|
||||
case HIPFLOATAR:
|
||||
case HIPFLOATVARAR:
|
||||
strncat(self->defString," -type NX_FLOAT32 ",sizeof(self->defString));
|
||||
break;
|
||||
case HIPTEXT:
|
||||
strncat(self->defString," -type NX_CHAR ",sizeof(self->defString));
|
||||
break;
|
||||
default :
|
||||
snprintf(self->error, sizeof(self->error),"invalid data type %d",
|
||||
self->v.dataType);
|
||||
return MPSTOP;
|
||||
}
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*-----------------------------------------------------------------------
|
||||
Writing should not fail due to some error in padding. Thus this routine
|
||||
protects against errors but does not fail
|
||||
------------------------------------------------------------------------*/
|
||||
static int SPutPadding(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
char *pPtr = NULL, *pEnd = NULL;
|
||||
unsigned int len = 0, i;
|
||||
|
||||
if(self->v.dataType == HIPTEXT && strstr(self->v.v.text,"@len") != NULL){
|
||||
pPtr = strchr(self->v.v.text,'=');
|
||||
pPtr++;
|
||||
pEnd = strchr(pPtr,'@');
|
||||
if(pPtr != NULL && pEnd != NULL){
|
||||
*pEnd = '\0';
|
||||
len = atoi(pPtr);
|
||||
}
|
||||
pPtr = malloc((len+7)*sizeof(char));
|
||||
if(pPtr != NULL){
|
||||
memset(pPtr,0,len*sizeof(char));
|
||||
strncpy(pPtr,pEnd+1,len);
|
||||
for(i = strlen(pPtr); i < len-2; i++){
|
||||
pPtr[i] = ' ';
|
||||
}
|
||||
pPtr[len-1] = '!';
|
||||
free(self->v.v.text);
|
||||
self->v.v.text = pPtr;
|
||||
}
|
||||
}
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int SPutDim(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
char dim[20], *pPtr;
|
||||
int i;
|
||||
|
||||
if(self->argc > 4) {
|
||||
pPtr = self->argv[4];
|
||||
while((pPtr = stptok(pPtr,dim,sizeof(dim),",")) != NULL){
|
||||
self->dim[self->rank] = atoi(dim);
|
||||
self->rank++;
|
||||
}
|
||||
} else {
|
||||
self->rank = 1;
|
||||
switch(self->v.dataType){
|
||||
case HIPINT:
|
||||
case HIPFLOAT:
|
||||
self->dim[0] = 1;
|
||||
break;
|
||||
case HIPINTAR:
|
||||
case HIPINTVARAR:
|
||||
case HIPFLOATAR:
|
||||
case HIPFLOATVARAR:
|
||||
self->dim[0] = self->v.arrayLength;
|
||||
break;
|
||||
case HIPTEXT:
|
||||
if(self->v.v.text != NULL){
|
||||
self->dim[0] = strlen(self->v.v.text)+1;
|
||||
} else {
|
||||
self->dim[0] = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
snprintf(self->error, sizeof(self->error),"invalid data type %d",
|
||||
self->v.dataType);
|
||||
return MPSTOP;
|
||||
}
|
||||
}
|
||||
snprintf(dim,sizeof(dim)," -rank %d ", self->rank);
|
||||
strncat(self->defString,dim,sizeof(self->defString));
|
||||
strncat(self->defString," -dim {",sizeof(self->defString));
|
||||
for(i = 0; i < self->rank; i++){
|
||||
sprintf(dim,"%d,", self->dim[i]);
|
||||
strncat(self->defString,dim,sizeof(self->defString));
|
||||
}
|
||||
pPtr = strrchr(self->defString,(int)',');
|
||||
*pPtr = '}';
|
||||
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
static int SPutWrite(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
NXstatus status;
|
||||
float fVal, *fData;
|
||||
int i;
|
||||
|
||||
switch(self->v.dataType){
|
||||
case HIPINT:
|
||||
status = NXDputdef(self->nx->fileHandle, self->nx->dictHandle,
|
||||
self->defString, &self->v.v.intValue);
|
||||
break;
|
||||
case HIPFLOAT:
|
||||
fVal = self->v.v.doubleValue;
|
||||
status = NXDputdef(self->nx->fileHandle, self->nx->dictHandle,
|
||||
self->defString, &fVal);
|
||||
break;
|
||||
case HIPINTAR:
|
||||
case HIPINTVARAR:
|
||||
status = NXDputdef(self->nx->fileHandle, self->nx->dictHandle,
|
||||
self->defString, self->v.v.intArray);
|
||||
break;
|
||||
case HIPFLOATAR:
|
||||
case HIPFLOATVARAR:
|
||||
fData = malloc(self->v.arrayLength * sizeof(float));
|
||||
if(fData == NULL){
|
||||
snprintf(self->error, sizeof(self->error),"out of memory in SPutWrire");
|
||||
return MPSTOP;
|
||||
}
|
||||
for(i = 0; i < self->v.arrayLength; i++){
|
||||
fData[i] = self->v.v.floatArray[i];
|
||||
}
|
||||
status = NXDputdef(self->nx->fileHandle, self->nx->dictHandle,
|
||||
self->defString, &fData);
|
||||
free(fData);
|
||||
break;
|
||||
case HIPTEXT:
|
||||
status = NXDputdef(self->nx->fileHandle, self->nx->dictHandle,
|
||||
self->defString, self->v.v.text);
|
||||
break;
|
||||
default:
|
||||
snprintf(self->error, sizeof(self->error),"invalid data type %d",
|
||||
self->v.dataType);
|
||||
return MPSTOP;
|
||||
}
|
||||
|
||||
if(status == NX_OK){
|
||||
self->success = 1;
|
||||
} else {
|
||||
snprintf(self->error, sizeof(self->error),"error writing %s", self->argv[2]);
|
||||
}
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static void configurePutPipe()
|
||||
{
|
||||
int *noArgs;
|
||||
putPipe = MakeMP();
|
||||
|
||||
noArgs = malloc(sizeof(int));
|
||||
*noArgs = 4;
|
||||
AppendMPFilter(putPipe,CheckNoArguments, noArgs,free);
|
||||
AppendMPFilter(putPipe,SGetData, NULL,NULL);
|
||||
AppendMPFilter(putPipe,GetDefString, NULL,NULL);
|
||||
AppendMPFilter(putPipe,SPutAddType, NULL,NULL);
|
||||
AppendMPFilter(putPipe,SPutPadding, NULL,NULL);
|
||||
AppendMPFilter(putPipe,SPutDim, NULL,NULL);
|
||||
AppendMPFilter(putPipe,SPutWrite, NULL,NULL);
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int SAppendDim(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
char dim[20], *pPtr;
|
||||
int i;
|
||||
|
||||
self->point = atoi(self->argv[4]);
|
||||
self->rank = 1;
|
||||
self->dim[0] = -1;
|
||||
|
||||
if(self->argc > 5) {
|
||||
pPtr = self->argv[5];
|
||||
while((pPtr = stptok(pPtr,dim,sizeof(dim),",")) != NULL){
|
||||
self->dim[self->rank] = atoi(dim);
|
||||
self->rank++;
|
||||
}
|
||||
} else {
|
||||
self->rank = 1;
|
||||
switch(self->v.dataType){
|
||||
case HIPINT:
|
||||
case HIPFLOAT:
|
||||
break;
|
||||
case HIPINTAR:
|
||||
case HIPINTVARAR:
|
||||
case HIPFLOATAR:
|
||||
case HIPFLOATVARAR:
|
||||
self->rank = 2;
|
||||
self->dim[1] = self->v.arrayLength;
|
||||
break;
|
||||
case HIPTEXT:
|
||||
self->rank = 2;
|
||||
self->dim[1] = strlen(self->v.v.text)+1;
|
||||
break;
|
||||
default:
|
||||
snprintf(self->error, sizeof(self->error),"invalid data type %d",
|
||||
self->v.dataType);
|
||||
return MPSTOP;
|
||||
}
|
||||
}
|
||||
snprintf(dim,sizeof(dim)," -rank %d ", self->rank);
|
||||
strncat(self->defString,dim,sizeof(self->defString));
|
||||
strncat(self->defString," -dim {",sizeof(self->defString));
|
||||
for(i = 0; i < self->rank; i++){
|
||||
sprintf(dim,"%d,", self->dim[i]);
|
||||
strncat(self->defString,dim,sizeof(self->defString));
|
||||
}
|
||||
pPtr = strrchr(self->defString,(int)',');
|
||||
*pPtr = '}';
|
||||
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
static int SAppendWrite(void *message, void *userData)
|
||||
{
|
||||
pPutMessage self = (pPutMessage)message;
|
||||
NXstatus status;
|
||||
float fVal, *fData;
|
||||
int i;
|
||||
int start[NX_MAXRANK], size[NX_MAXRANK];
|
||||
|
||||
|
||||
NXopenpath(self->nx->fileHandle,"/");
|
||||
status = NXDopendef(self->nx->fileHandle, self->nx->dictHandle,
|
||||
self->defString);
|
||||
if(status != NX_OK){
|
||||
snprintf(self->error, sizeof(self->error),"cannot open NeXus object");
|
||||
return MPSTOP;
|
||||
}
|
||||
|
||||
start[0] = self->point;
|
||||
size[0] = 1;
|
||||
for(i = 1; i < self->rank; i++){
|
||||
start[i] = 0;
|
||||
size[i] = self->dim[i];
|
||||
}
|
||||
|
||||
|
||||
switch(self->v.dataType){
|
||||
case HIPINT:
|
||||
status = NXputslab(self->nx->fileHandle,&self->v.v.intValue, start,size);
|
||||
break;
|
||||
case HIPFLOAT:
|
||||
fVal = self->v.v.doubleValue;
|
||||
status = NXputslab(self->nx->fileHandle,&fVal, start,size);
|
||||
break;
|
||||
case HIPINTAR:
|
||||
case HIPINTVARAR:
|
||||
status = NXputslab(self->nx->fileHandle,&self->v.v.intArray, start,size);
|
||||
break;
|
||||
case HIPFLOATAR:
|
||||
case HIPFLOATVARAR:
|
||||
fData = malloc(self->v.arrayLength * sizeof(float));
|
||||
if(fData == NULL){
|
||||
snprintf(self->error, sizeof(self->error),"out of memory in SPutWrire");
|
||||
return MPSTOP;
|
||||
}
|
||||
for(i = 0; i < self->v.arrayLength; i++){
|
||||
fData[i] = self->v.v.floatArray[i];
|
||||
}
|
||||
status = NXputslab(self->nx->fileHandle,fData, start,size);
|
||||
free(fData);
|
||||
break;
|
||||
case HIPTEXT:
|
||||
status = NXputslab(self->nx->fileHandle,self->v.v.text, start,size);
|
||||
break;
|
||||
default:
|
||||
snprintf(self->error, sizeof(self->error),"invalid data type %d",
|
||||
self->v.dataType);
|
||||
return MPSTOP;
|
||||
}
|
||||
|
||||
if(status == NX_OK){
|
||||
self->success = 1;
|
||||
} else {
|
||||
snprintf(self->error, sizeof(self->error),"error writing %s", self->argv[2]);
|
||||
}
|
||||
NXopenpath(self->nx->fileHandle,"/");
|
||||
return MPCONTINUE;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static void configureAppendPipe()
|
||||
{
|
||||
int *noArgs;
|
||||
appendPipe = MakeMP();
|
||||
|
||||
noArgs = malloc(sizeof(int));
|
||||
*noArgs = 5;
|
||||
AppendMPFilter(appendPipe,CheckNoArguments, noArgs,free);
|
||||
AppendMPFilter(appendPipe,SGetData, NULL,NULL);
|
||||
AppendMPFilter(appendPipe,GetDefString, NULL,NULL);
|
||||
AppendMPFilter(appendPipe,SPutAddType, NULL,NULL);
|
||||
AppendMPFilter(appendPipe,SAppendDim, NULL,NULL);
|
||||
AppendMPFilter(appendPipe,SAppendWrite, NULL,NULL);
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int handleSPut(SConnection * pCon, SicsInterp * pSics,
|
||||
pNXScript self, int argc, char *argv[])
|
||||
{
|
||||
PutMessage mess;
|
||||
|
||||
memset(&mess, 0, sizeof(PutMessage));
|
||||
mess.argc = argc;
|
||||
mess.argv = argv;
|
||||
mess.nx = self;
|
||||
MPprocess(putPipe,&mess);
|
||||
if(mess.success == 0){
|
||||
SCPrintf(pCon,eLogError,"ERROR: %s", mess.error);
|
||||
} else {
|
||||
SCSendOK(pCon);
|
||||
}
|
||||
ReleaseHdbValue(&mess.v);
|
||||
return mess.success;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static int handleSAppend(SConnection * pCon, SicsInterp * pSics,
|
||||
pNXScript self, int argc, char *argv[])
|
||||
{
|
||||
PutMessage mess;
|
||||
|
||||
memset(&mess, 0, sizeof(PutMessage));
|
||||
mess.argc = argc;
|
||||
mess.argv = argv;
|
||||
mess.nx = self;
|
||||
MPprocess(appendPipe,&mess);
|
||||
if(mess.success == 0){
|
||||
SCPrintf(pCon,eLogError,"ERROR: %s", mess.error);
|
||||
} else {
|
||||
SCSendOK(pCon);
|
||||
}
|
||||
ReleaseHdbValue(&mess.v);
|
||||
return mess.success;
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
static int handlePut(SConnection * pCon, SicsInterp * pSics,
|
||||
pNXScript self, int argc, char *argv[])
|
||||
@@ -1558,6 +1968,12 @@ static int handlePut(SConnection * pCon, SicsInterp * pSics,
|
||||
} else if (strcmp(argv[1], "putslab16") == 0) {
|
||||
/*===============*/
|
||||
putSlab16(pCon, pSics, self, argc, argv);
|
||||
} else if (strcmp(argv[1], "puts") == 0) {
|
||||
/*===============*/
|
||||
handleSPut(pCon, pSics, self, argc, argv);
|
||||
} else if (strcmp(argv[1], "sappend") == 0) {
|
||||
/*===============*/
|
||||
handleSAppend(pCon, pSics, self, argc, argv);
|
||||
} else {
|
||||
SCPrintf(pCon, eLogError, "ERROR: put command %s not recognised", argv[1] );
|
||||
}
|
||||
@@ -1700,7 +2116,7 @@ int NXScriptAction(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strstr(argv[1], "put") != NULL) {
|
||||
if (strstr(argv[1], "put") != NULL || strstr(argv[1],"sappend") != NULL) {
|
||||
handlePut(pCon, pSics, self, argc, argv);
|
||||
return 1;
|
||||
}
|
||||
@@ -1769,6 +2185,12 @@ int MakeNXScript(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
return 0;
|
||||
}
|
||||
self->timeDivisor = 1;
|
||||
|
||||
/*
|
||||
configure pipes
|
||||
*/
|
||||
configurePutPipe();
|
||||
configureAppendPipe();
|
||||
|
||||
/*
|
||||
create with with a default name if none specified
|
||||
@@ -1787,3 +2209,20 @@ int MakeNXScript(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
static pNXScript sysScript= NULL;
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int isNXScriptWriting(void)
|
||||
{
|
||||
|
||||
if(sysScript == NULL){
|
||||
sysScript = FindCommandData(pServ->pSics,"nxscript","NXScript");
|
||||
}
|
||||
|
||||
|
||||
if(sysScript != NULL && sysScript->fileHandle != NULL){
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user