From 446b05d6a2e2e6d193652a7ae8d3a60ba5921698 Mon Sep 17 00:00:00 2001
From: koennecke
Date: Fri, 8 Apr 2011 14:18:42 +0000
Subject: [PATCH] - Added some hipadab array math - Added missing cnvrt files,
stolen from Markus - Debugged the new sinqhttpopt driver for SINQ HTTP HM -
Debugged the driver for the new S7 Siemens SPS - Added handling of
hexadecimal terminators to ascon.c - Increased the write buffer size in
asynnet again - Fixed a core dump in lld.c - Added writing of second gen HM
to nxscript.c - Added doubletime command to SICS - Fixed a core dump issue in
sicshdbadapter.c on dimension changes - Modified sicsobj to look for lower
case keys too
SKIPPED:
psi/cnvrt.c
psi/cnvrt.h
psi/el734hp.c
psi/make_gen
psi/sinqhttpopt.c
psi/sinqhttpprot.c
psi/spss7.c
psi/swmotor.c
---
arrayutil.c | 46 ++++++++
arrayutil.h | 31 +++++
ascon.c | 21 ++++
asynnet.c | 2 +-
asynnet.h | 4 +-
devser.c | 1 -
doc/user/tasub.htm | 4 +-
event.c | 1 +
event.h | 11 +-
event.tex | 1 +
event.w | 1 +
exebuf.c | 38 ++++++
histmem.c | 4 +
lld.c | 8 +-
make_gen | 2 +-
nxdataset.c | 4 +-
nxscript.c | 24 +++-
ofac.c | 1 +
script.c | 9 ++
sicshdbadapter.c | 17 ++-
sicshipadaba.c | 38 ++++--
sicsobj.c | 4 +
sicspoll.c | 6 +-
sicsstat.tcl | 288 ++++++++++++++++++++++++++++++++++++++++++++-
test/DataNumber | 2 +-
25 files changed, 535 insertions(+), 33 deletions(-)
create mode 100644 arrayutil.c
create mode 100644 arrayutil.h
diff --git a/arrayutil.c b/arrayutil.c
new file mode 100644
index 00000000..9d9c458a
--- /dev/null
+++ b/arrayutil.c
@@ -0,0 +1,46 @@
+/*
+ * arrayutil.c
+ *
+ * copyright: see file COPYRIGHT
+ *
+ * some utilities for dealing with arrays
+ *
+ * Created on: Mar 16, 2011
+ * Author: koennecke
+ */
+
+long sumWindow(int *data, int xstart, int xend, int xlength,
+ int ystart, int yend, int ylength)
+{
+ int i,j;
+ long result = 0;
+ int *row;
+
+ if(xstart < 0 || xstart > xlength){
+ return -2;
+ }
+ if(xend < 0 || xend > xlength){
+ return -2;
+ }
+ if(xend < xstart){
+ return -2;
+ }
+ if(ystart < 0 || ystart > ylength){
+ return -2;
+ }
+ if(yend < 0 || yend > ylength){
+ return -2;
+ }
+ if(yend < ystart){
+ return -2;
+ }
+
+
+ for(j = ystart; j < yend; j++){
+ row = data + j*xlength;
+ for(i = xstart; i < xend; i++){
+ result += row[i];
+ }
+ }
+ return result;
+}
diff --git a/arrayutil.h b/arrayutil.h
new file mode 100644
index 00000000..c2e23f38
--- /dev/null
+++ b/arrayutil.h
@@ -0,0 +1,31 @@
+/*
+ * arrayutil.h
+ *
+ * copyright: GPL
+ *
+ * Start of some array processing utilities. This may go if
+ * a more generalized array handling gets implemented into
+ * SICS.
+ *
+ * Created on: Mar 16, 2011
+ * Author: koennecke
+ */
+
+#ifndef ARRAYUTIL_H_
+#define ARRAYUTIL_H_
+
+/**
+ * sum data in a window
+ * @param data The data pointer
+ * @param xstart
+ * @param xend
+ * @param xlength length of x dimension
+ * @param ystart
+ * @param yend
+ * @param ylength size of y dimension
+ * @return a sum or -2 if the limits fail to make sense
+ */
+long sumWindow(int *data, int xstart, int xend, int xlength,
+ int ystart, int yend, int ylength);
+
+#endif /* ARRAYUTIL_H_ */
diff --git a/ascon.c b/ascon.c
index 999a9455..3b976a57 100644
--- a/ascon.c
+++ b/ascon.c
@@ -495,6 +495,26 @@ int AsconStdHandler(Ascon * a)
return AsconBaseHandler(a);
}
+/**
+ * Treat hex strings as terminators right. Note that this
+ * is limited to single character terminators.
+ */
+static void AsconCheckTerminators(Ascon *a)
+{
+ int c;
+
+ if(a->sendTerminator != NULL && strstr(a->sendTerminator,"0x") != NULL){
+ sscanf(a->sendTerminator,"%x",&c);
+ a->sendTerminator[0] = (char)c;
+ a->sendTerminator[1] = '\0';
+ }
+ if(a->replyTerminator != NULL && strstr(a->replyTerminator,"0x") != NULL){
+ sscanf(a->replyTerminator,"%x",&c);
+ a->replyTerminator[0] = (char)c;
+ a->replyTerminator[1] = '\0';
+ }
+}
+
int AsconInterpreteArgs(int argc, char *argv[],
int parc, char *parn[], char *pars[])
{
@@ -574,6 +594,7 @@ int AsconStdInit(Ascon *a, SConnection *con, int argc, char *argv[])
} else {
a->separator = NULL;
}
+ AsconCheckTerminators(a);
return 1;
}
diff --git a/asynnet.c b/asynnet.c
index a34254ea..ad7e9c85 100644
--- a/asynnet.c
+++ b/asynnet.c
@@ -43,7 +43,7 @@
#define DATASOCKET 1
#define MAXCONNECTIONS 1024
#define RBUFFERSIZE 262144 /* 256kb */
-#define WBUFFERSIZE 10*262144 /* 512kb */
+#define WBUFFERSIZE 20*262144 /* */
/*--------------------------------------------------------------------------*/
typedef struct {
int socket;
diff --git a/asynnet.h b/asynnet.h
index a93fbfb9..9912b70f 100644
--- a/asynnet.h
+++ b/asynnet.h
@@ -2,9 +2,9 @@
* Asynchronous networking for SICS and other programs. This module centrally manages
* a number of network connections for a client program. It is a layer between the
* program and the network which manages non blocking network I/O. To this purpose, the
- * client program has to call ANETprocess at convenient intervalls. This module
+ * client program has to call ANETprocess at convenient intervals. This module
* has a couple of features:
- * - Connections are abstracted to handles which are guranteed to be unique
+ * - Connections are abstracted to handles which are guaranteed to be unique
* rather then socket numbers. Socket numbers may be reused by the OS.
* - This module allows upper level code to figure out if a connection is still
* connected or not.
diff --git a/devser.c b/devser.c
index 6ac0f16d..2418e24f 100644
--- a/devser.c
+++ b/devser.c
@@ -227,7 +227,6 @@ static int DevQueueTask(void *ds)
DevAction *action;
char *sendData;
char *replyData = NULL;
-
if (devser->steps == 0)
return 1;
diff --git a/doc/user/tasub.htm b/doc/user/tasub.htm
index 03a785c7..d5308ebf 100644
--- a/doc/user/tasub.htm
+++ b/doc/user/tasub.htm
@@ -16,9 +16,9 @@ On a triple axis instrument the parameters incoming energy, Q-position in 3D and
Q-E variables ei, ki, ef, kf, en, qh, qk and ql can be driven as virtual motors in
SICS.
-Commands understood by Tasub
+Commands understood by Tasub
-
Monochromator and Analyzer Parameters
+Monochromator and Analyzer Parameters
Incident and scattered energies are defined by monochromator crystals. In order for the
calculations to work, some parameters need to be configured. Monochromator and analyzer
diff --git a/event.c b/event.c
index 34bd30f8..233dd792 100644
--- a/event.c
+++ b/event.c
@@ -70,6 +70,7 @@ static char *pEvent[] = {
"STATESTART",
"STATEEND",
"NEWTARGET",
+ "DIMCHANGE",
NULL
};
diff --git a/event.h b/event.h
index c0a01efb..ef9dbabf 100644
--- a/event.h
+++ b/event.h
@@ -1,5 +1,5 @@
-#line 102 "event.w"
+#line 103 "event.w"
/*----------------------------------------------------------------------------
E V E N T
@@ -18,7 +18,7 @@
int Text2Event(char *pText);
-#line 115 "event.w"
+#line 116 "event.w"
@@ -48,8 +48,9 @@
#define STSTART 21
#define STEND 22
#define NEWTARGET 23
+#define DIMCHANGE 24
-#line 117 "event.w"
+#line 118 "event.w"
/*----------------- event data structure for the NEWTARGET event ---------*/
@@ -59,7 +60,7 @@ typedef struct {
} NewTarget, *pNewTarget;
/*--------------- Signals for the Signalfunction of each task ------------*/
-#line 84 "event.w"
+#line 85 "event.w"
#define SICSINT 300
#define SICSBROADCAST 301
@@ -68,6 +69,6 @@ typedef struct {
#define COMLOG 304
#define CRONLIST 305
-#line 125 "event.w"
+#line 126 "event.w"
#endif
diff --git a/event.tex b/event.tex
index 563f1e35..34aef4fb 100644
--- a/event.tex
+++ b/event.tex
@@ -59,6 +59,7 @@ $\langle$VE {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@#define STSTART 21@\\
\mbox{}\verb@#define STEND 22@\\
\mbox{}\verb@#define NEWTARGET 23@\\
+\mbox{}\verb@#define DIMCHANGE 24@\\
\mbox{}\verb@@$\Diamond$
\end{list}
\vspace{-1ex}
diff --git a/event.w b/event.w
index 21a7a2ce..6f4ed0c0 100644
--- a/event.w
+++ b/event.w
@@ -42,6 +42,7 @@ if the event code is not known, else the apropriate event code.
#define STSTART 21
#define STEND 22
#define NEWTARGET 23
+#define DIMCHANGE 24
@}
\begin{description}
\item[VALUECHANGE] This is a variable changing its value. As event data a pointer to the
diff --git a/exebuf.c b/exebuf.c
index 905c9118..cb90be08 100644
--- a/exebuf.c
+++ b/exebuf.c
@@ -164,6 +164,44 @@ static pDynString findBlockEnd(pExeBuf self)
DeleteDynString(command);
return NULL;
}
+/*-----------------attempt at a faster version -------------------------------
+ * But this only saves on the ConcatChar side of things......
+ *
+ * */
+static pDynString findBlockEndExp(pExeBuf self)
+{
+ pDynString command = NULL;
+ char *buffer = NULL;
+ char *cStart, *cEnd;
+ int i, len;
+
+ assert(self);
+
+ command = CreateDynString(80, 80);
+ if (command == NULL) {
+ return NULL;
+ }
+ buffer = GetCharArray(self->bufferContent);
+ if (self->end != -1) {
+ self->start = self->end + 1;
+ }
+ cStart = buffer +self->start;
+ cEnd = strchr(cStart,'\n');
+ while(cEnd != NULL){
+ len = cEnd - cStart+1;
+ DynStringConcatBytes(command,cStart, len);
+ self->lineno++;
+ if (Tcl_CommandComplete(GetCharArray(command))) {
+ self->end += len;
+ return command;
+ }
+ cStart = cEnd+1;
+ cEnd = strchr(cStart,'\n');
+ }
+
+ DeleteDynString(command);
+ return NULL;
+}
/*---------------------------------------------------------------------*/
int exeBufProcess(pExeBuf self, SicsInterp * pSics,
diff --git a/histmem.c b/histmem.c
index a8fe06f2..094fdbef 100644
--- a/histmem.c
+++ b/histmem.c
@@ -1274,6 +1274,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
iRet = HistConfigure(self, pCon, pSics);
if (iRet) {
self->iInit = 1;
+ InvokeCallBack(self->pCall,DIMCHANGE,NULL);
SCSendOK(pCon);
} else {
self->iInit = 0;
@@ -1657,6 +1658,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
}
/* do it */
genTimeBinning(self->pDriv->data, (float) dStart, (float) dStep, iNum);
+ InvokeCallBack(self->pCall,DIMCHANGE,NULL);
SCparChange(pCon);
SCSendOK(pCon);
return 1;
@@ -1693,6 +1695,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
return 0;
}
setTimeBin(self->pDriv->data, iNum, (float) dStep);
+ InvokeCallBack(self->pCall,DIMCHANGE,NULL);
self->iInit = 0;
SCSendOK(pCon);
return 1;
@@ -1705,6 +1708,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
return 0;
}
clearTimeBinning(self->pDriv->data);
+ InvokeCallBack(self->pCall,DIMCHANGE,NULL);
SCSendOK(pCon);
return 1;
}
diff --git a/lld.c b/lld.c
index 82cf1c3e..9270fc35 100644
--- a/lld.c
+++ b/lld.c
@@ -498,8 +498,12 @@ void LLDnodeDelete(int List)
/* adjust links
*/
- Old->prev->next = Old->next;
- Old->next->prev = Old->prev;
+ if(Old->prev != NULL){
+ Old->prev->next = Old->next;
+ }
+ if(Old->next != NULL){
+ Old->next->prev = Old->prev;
+ }
/* adjust current node pointer
prevent it from pointing to the dummy tail node
diff --git a/make_gen b/make_gen
index 9acf4d4d..39fa66eb 100644
--- a/make_gen
+++ b/make_gen
@@ -36,7 +36,7 @@ SOBJ = network.o ifile.o conman.o SCinter.o splitter.o passwd.o \
moregress.o multicounter.o regresscter.o histregress.o \
sicshdbadapter.o polldriv.o sicspoll.o statemon.o hmslave.o \
nwatch.o asyncqueue.o asyncprotocol.o sicsobj.o frame.o\
- nxcopy.o nxinterhelper.o nxinter_wrap.o nxstack.o \
+ nxcopy.o nxinterhelper.o nxinter_wrap.o nxstack.o arrayutil.o \
sctdriveadapter.o sctdriveobj.o reflist.o singlex.o fourmess.o \
sgclib.o sgfind.o sgio.o sgsi.o sghkl.o singlediff.o singlebi.o \
singlenb.o simindex.o simidx.o uselect.o singletas.o motorsec.o \
diff --git a/nxdataset.c b/nxdataset.c
index 25034bc6..5992232e 100644
--- a/nxdataset.c
+++ b/nxdataset.c
@@ -396,8 +396,8 @@ pNXDS cutNXDataset(pNXDS source, int start[], int end[])
}
/*----------------------------------------------------------------------
- This recurses through all dimesnions, thereby skipping the summed one.
- At the end of the rescusion the actual summing is performed.
+ This recurses through all dimensions, thereby skipping the summed one.
+ At the end of the recursion the actual summing is performed.
----------------------------------------------------------------------*/
static void sumData(pNXDS source, pNXDS target, int sourceDim[],
int targetDim[], int targetDimCount, int dimNo,
diff --git a/nxscript.c b/nxscript.c
index 141e3bab..cdf4c575 100644
--- a/nxscript.c
+++ b/nxscript.c
@@ -547,7 +547,7 @@ static void putHdbOff(SConnection * pCon, SicsInterp * pSics, pNXScript self,
GetHipadabaPar(node, &v, pCon);
if(offset < 0 || offset > v.arrayLength){
- SCPrintf(pCon,eLogError,"ERROR: invalid offset %d speicified", offset );
+ SCPrintf(pCon,eLogError,"ERROR: invalid offset %d specified", offset );
return;
}
switch (v.dataType) {
@@ -924,6 +924,8 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
pHistMem mem = NULL;
HistInt *histData = NULL;
pSICSData data = NULL;
+ pCounter memsec = NULL;
+ pHdb node = NULL;
if (argc < 6) {
SCWrite(pCon, "ERROR: insufficient number of arguments to putslab",
@@ -956,11 +958,27 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
if (mem != NULL) {
histData = GetHistogramPointer(mem, pCon);
if (histData) {
- status = NXputslab(self->fileHandle, histData, start, size);
+ status = NXputslab(self->fileHandle, histData, start, size);
+ if (status == NX_OK) {
+ written = 1;
+ }
+ }
+ }
+
+ /*
+ * try to write second gen histogram data
+ */
+ memsec = (pCounter) FindCommandData(pSics, argv[5], "HistMemSec");
+ if(memsec != NULL){
+ node = GetHipadabaNode(memsec->pDes->parNode,"data");
+ if(data != NULL){
+ SCWrite(pCon,"ERROR: ?? data node to second gen HM not found", eError);
+ return;
+ }
+ status = NXputslab(self->fileHandle, node->value.v.intArray, start, size);
if (status == NX_OK) {
written = 1;
}
- }
}
/*
diff --git a/ofac.c b/ofac.c
index ef67fbc7..b70e3da1 100644
--- a/ofac.c
+++ b/ofac.c
@@ -100,6 +100,7 @@ static void InitIniCommands(SicsInterp * pInter)
PCMD("sicsprompt", SicsPrompt);
PCMD("SICSStatus", SICSStatus);
PCMD("sicstime", SICSTime);
+ PCMD("doubletime", SICSDoubleTime);
PCMD("SICSType", SICSType);
PCMD("Sics_Exitus", SicsExit);
PCMD("silent", SICSSilent);
diff --git a/script.c b/script.c
index e211ac1a..5568e3cf 100644
--- a/script.c
+++ b/script.c
@@ -415,7 +415,16 @@ int SICSTime(SConnection * pCon, SicsInterp * pSics, void *pData,
SCWrite(pCon, pBueffel, eValue);
return 1;
}
+/*-------------------------------------------------------------------------*/
+int SICSDoubleTime(SConnection * pCon, SicsInterp * pSics, void *pData,
+ int argc, char *argv[])
+{
+ double dtime;
+ dtime = DoubleTime();
+ SCPrintf(pCon,eValue,"%lf",dtime);
+ return 1;
+}
/*--------------------------------------------------------------------------
Kill a command from SICS
*/
diff --git a/sicshdbadapter.c b/sicshdbadapter.c
index e9114fee..a56b4d89 100644
--- a/sicshdbadapter.c
+++ b/sicshdbadapter.c
@@ -28,6 +28,7 @@
#include "sicshipadaba.h"
#include "sicshdbadapter.h"
#include "sicsdata.h"
+#include "HistMem.i"
#define PRIVNAM "priv"
/*==================== support code ====================================*/
@@ -337,6 +338,7 @@ static long totalSum(int *data, int length)
/*----------------------------------------------------------------------*/
typedef struct {
pHistMem pHM;
+ pHdb node;
} HMAdapter, *pHMAdapter;
/*-------------------------------------------------------------------------*/
static hdbCallbackReturn HMDataGetCallback(pHdb currentNode,
@@ -359,9 +361,21 @@ static hdbCallbackReturn HMDataGetCallback(pHdb currentNode,
currentNode->value.arrayLength = GetHistLength(pHMA->pHM);
currentNode->value.v.intArray =
(int *) GetHistogramPointer(pHMA->pHM, pCon);
+ NotifyHipadabaPar(pHMA->node, NULL);
return hdbContinue;
}
+/*----------------------------------------------------------------------*/
+static int DimCallback(int iEvent, void *eventData, void *userData)
+{
+ pHMAdapter pHMA = (pHMAdapter)userData;
+ if(iEvent == DIMCHANGE){
+ pHMA->node->value.arrayLength = GetHistLength(pHMA->pHM);
+ pHMA->node->value.v.intArray =
+ (int *) GetHistogramPointer(pHMA->pHM, pServ->dummyCon);
+ }
+ return 1;
+}
/*----------------------------------------------------------------------*/
static pHdb MakeHMDataNode(pHistMem pHM, char *name)
{
@@ -375,6 +389,7 @@ static pHdb MakeHMDataNode(pHistMem pHM, char *name)
return NULL;
}
pHMA->pHM = pHM;
+ pHMA->node = node;
node->value.doNotFree = 1;
node->value.v.intArray = (int *)GetHistogramPointer(pHM, pServ->dummyCon);
pCall = MakeHipadabaCallback(HMDataGetCallback, pHMA, free);
@@ -383,7 +398,7 @@ static pHdb MakeHMDataNode(pHistMem pHM, char *name)
}
AppendHipadabaCallback(node, pCall);
AppendHipadabaCallback(node, MakeReadOnlyCallback());
-
+ RegisterCallback(pHM->pCall,DIMCHANGE, DimCallback, pHMA, NULL);
return node;
}
diff --git a/sicshipadaba.c b/sicshipadaba.c
index 4ec7e9bc..064d4f03 100644
--- a/sicshipadaba.c
+++ b/sicshipadaba.c
@@ -35,6 +35,7 @@
#include "sicsobj.h"
#include
#include "commandlog.h"
+#include "arrayutil.h"
#define MAX_HDB_PATH 1024
@@ -451,13 +452,12 @@ int formatNameValue(Protocol protocol, char *name, char *value,
}
/*----------------------------------------------------------------------------*/
-static int sendZippedNodeData(pHdb node, SConnection * pCon)
+static int sendZippedNodeData(pHdb node, hdbValue newValue, SConnection * pCon)
{
- hdbValue newValue;
int i, *iData = NULL;
char *path = NULL;
+ double sum = 0;
- newValue = node->value;
path = GetHipadabaPath(node);
switch (newValue.dataType) {
case HIPINTAR:
@@ -474,10 +474,12 @@ static int sendZippedNodeData(pHdb node, SConnection * pCon)
}
memset(iData, 0, newValue.arrayLength * sizeof(int));
for (i = 0; i < newValue.arrayLength; i++) {
+ sum += (double)newValue.v.intArray[i];
iData[i] = htonl(newValue.v.intArray[i]);
}
SCWriteZipped(pCon, path, iData, newValue.arrayLength * sizeof(int));
free(iData);
+ /* printf("Wrote zipped data %s, sum %lf\n", path, sum); */
break;
case HIPFLOATAR:
case HIPFLOATVARAR:
@@ -493,14 +495,16 @@ static int sendZippedNodeData(pHdb node, SConnection * pCon)
}
memset(iData, 0, newValue.arrayLength * sizeof(int));
for (i = 0; i < newValue.arrayLength; i++) {
+ sum+= newValue.v.floatArray[i];
iData[i] = htonl((int) (newValue.v.floatArray[i] * 65536.));
}
SCWriteZipped(pCon, path, iData, newValue.arrayLength * sizeof(int));
+ /* printf("Wrote zipped data %s, sum %lf\n", path, sum); */
free(iData);
break;
default:
- SCWrite(pCon, "ERROR: zipped writing not supported for this datatype",
- eError);
+ SCPrintf(pCon, eError, "ERROR: zipped writing not supported for this datatype on node %s",
+ path);
free(path);
return 0;
}
@@ -597,7 +601,7 @@ static hdbCallbackReturn SICSNotifyCallback(pHdb node, void *userData,
*/
if (GetHdbProperty(node, "transfer", value, 80) == 1) {
if (strstr(value, "zip") != NULL) {
- status = sendZippedNodeData(node, cbInfo->pCon);
+ status = sendZippedNodeData(node, *(mm->v), cbInfo->pCon);
free(pPath);
DeleteDynString(result);
return hdbContinue;
@@ -2094,6 +2098,7 @@ int readHdbValue(hdbValue * v, char *data, char *error, int errlen)
free(v->v.text);
}
v->v.text = strdup(data);
+ v->arrayLength = strlen(data);
break;
case HIPINTVARAR:
if (!adjustDataLength(v, data)) {
@@ -2447,8 +2452,9 @@ static int ZipGetHdbNode(SConnection * pCon, SicsInterp * pSics,
}
memset(&newValue, 0, sizeof(hdbValue));
GetHipadabaPar(targetNode, &newValue, pCon);
+ status = sendZippedNodeData(targetNode, newValue, pCon);
ReleaseHdbValue(&newValue);
- return sendZippedNodeData(targetNode, pCon);
+ return status;
}
/*---------------------------------------------------------------------------*/
@@ -2934,8 +2940,10 @@ static int HdbArrayNode(SConnection * pCon, SicsInterp * pSics, void *pData,
pHdb node = NULL;
pObjectDescriptor pDes = NULL;
int length, idx, ival, i;
+ int xstart, xend, xlength, ystart, yend, ylength;
double dval;
hdbValue v;
+ long sum;
if (argc < 4) {
SCWrite(pCon, "ERROR: need at least three arguments to harray", eError);
@@ -2988,6 +2996,22 @@ static int HdbArrayNode(SConnection * pCon, SicsInterp * pSics, void *pData,
return 1;
}
+ if(strcmp(argv[2],"sum") == 0){
+ if(argc < 9){
+ SCWrite(pCon,"ERROR: not enough arguments to harray sum", eError);
+ return 0;
+ }
+ xstart = atoi(argv[3]);
+ xend = atoi(argv[4]);
+ xlength = atoi(argv[5]);
+ ystart = atoi(argv[6]);
+ yend = atoi(argv[7]);
+ ylength = atoi(argv[8]);
+ sum = sumWindow(node->value.v.intArray,xstart,xend,xlength,ystart,yend,ylength);
+ SCPrintf(pCon,eValue,"sum = %ld", sum);
+ return 1;
+ }
+
idx = atoi(argv[2]);
if(idx < 0 || idx >= node->value.arrayLength ){
SCPrintf(pCon,eError,"ERROR: %d is out of range 0 - %d",
diff --git a/sicsobj.c b/sicsobj.c
index 27ce5852..306d7cc8 100644
--- a/sicsobj.c
+++ b/sicsobj.c
@@ -475,6 +475,10 @@ int InvokeSICSOBJ(SConnection * pCon, SicsInterp * pSics, void *pData,
}
} else {
parNode = GetHipadabaNode(self->objectNode, argv[1]);
+ if(parNode == NULL){
+ strtolower(argv[1]);
+ parNode = GetHipadabaNode(self->objectNode,argv[1]);
+ }
}
if (parNode != NULL && parNode->value.dataType == HIPFUNC) {
status = invokeOBJFunction(self, parNode, pCon, argc - 2, &argv[2]);
diff --git a/sicspoll.c b/sicspoll.c
index 69671170..493fb405 100644
--- a/sicspoll.c
+++ b/sicspoll.c
@@ -187,13 +187,15 @@ static void printPollList(pSicsPoll self, SConnection * pCon)
int status;
pPollDriv driv = NULL;
char buffer[512];
+ char tbuf[256];
status = LLDnodePtr2First(self->pollList);
while (status != 0) {
driv = (pPollDriv) LLDnodePtr(self->pollList);
if (driv != NULL) {
- snprintf(buffer, 512, "%60s %3d",
- driv->objectIdentifier, driv->pollIntervall);
+ ctime_r(&driv->nextPoll, tbuf);
+ snprintf(buffer, 512, "%30s %3d %30s",
+ driv->objectIdentifier, driv->pollIntervall, tbuf);
SCWrite(pCon, buffer, eValue);
}
status = LLDnodePtr2Next(self->pollList);
diff --git a/sicsstat.tcl b/sicsstat.tcl
index 4f286674..8f899f2d 100644
--- a/sicsstat.tcl
+++ b/sicsstat.tcl
@@ -5,9 +5,291 @@ exe syspath ./
#--- END (commands producing errors on last restore)
# Counter counter
-counter SetPreset 7.000000
+counter SetPreset 3.000000
counter SetMode Timer
-hm preset 7
-hm mode monitor
title UNKNOWN
title setAccess 2
+user Uwe Filges
+user setAccess 2
+address UNKNOWN
+address setAccess 2
+adress UNKNOWN
+adress setAccess 2
+phone UNKNOWN
+phone setAccess 2
+email UNKNOWN
+email setAccess 2
+affiliation UNKNOWN
+affiliation setAccess 2
+countrate 0.000000
+countrate setAccess 2
+t2tx targetposition 0
+t2tx sign 1
+t2tx softzero 0
+t2tx softlowerlim 0
+t2tx softupperlim 2000
+t2tx fixed -1
+t2tx interruptmode 0
+t2tx precision 0.01
+t2tx accesscode 2
+t2tx failafter 3
+t2tx maxretry 3
+t2tx ignorefault 0
+t2tx movecount 10
+t2ty targetposition 0
+t2ty sign 1
+t2ty softzero 0
+t2ty softlowerlim 0
+t2ty softupperlim 100
+t2ty fixed -1
+t2ty interruptmode 0
+t2ty precision 0.01
+t2ty accesscode 2
+t2ty failafter 3
+t2ty maxretry 3
+t2ty ignorefault 0
+t2ty movecount 10
+sdw 0.000000
+sdw setAccess 2
+sdh 0.000000
+sdh setAccess 2
+t3tx targetposition 0
+t3tx sign 1
+t3tx softzero 0
+t3tx softlowerlim 0
+t3tx softupperlim 2000
+t3tx fixed -1
+t3tx interruptmode 0
+t3tx precision 0.01
+t3tx accesscode 2
+t3tx failafter 3
+t3tx maxretry 3
+t3tx ignorefault 0
+t3tx movecount 10
+rt3 targetposition 0
+rt3 sign 1
+rt3 softzero 0
+rt3 softlowerlim -180
+rt3 softupperlim 180
+rt3 fixed -1
+rt3 interruptmode 0
+rt3 precision 0.01
+rt3 accesscode 2
+rt3 failafter 3
+rt3 maxretry 3
+rt3 ignorefault 0
+rt3 movecount 10
+sew 0.000000
+sew setAccess 2
+seh 0.000000
+seh setAccess 2
+t4tx targetposition 0
+t4tx sign 1
+t4tx softzero 0
+t4tx softlowerlim 500
+t4tx softupperlim 12000
+t4tx fixed -1
+t4tx interruptmode 0
+t4tx precision 0.01
+t4tx accesscode 2
+t4tx failafter 3
+t4tx maxretry 3
+t4tx ignorefault 0
+t4tx movecount 10
+t4ty targetposition 0
+t4ty sign 1
+t4ty softzero 0
+t4ty softlowerlim 0
+t4ty softupperlim 3000
+t4ty fixed -1
+t4ty interruptmode 0
+t4ty precision 0.01
+t4ty accesscode 2
+t4ty failafter 3
+t4ty maxretry 3
+t4ty ignorefault 0
+t4ty movecount 10
+gau targetposition 0
+gau sign 1
+gau softzero 0
+gau softlowerlim -25
+gau softupperlim 25
+gau fixed -1
+gau interruptmode 0
+gau precision 0.01
+gau accesscode 2
+gau failafter 3
+gau maxretry 3
+gau ignorefault 0
+gau movecount 10
+gal targetposition 0
+gal sign 1
+gal softzero 0
+gal softlowerlim -25
+gal softupperlim 25
+gal fixed -1
+gal interruptmode 0
+gal precision 0.01
+gal accesscode 2
+gal failafter 3
+gal maxretry 3
+gal ignorefault 0
+gal movecount 10
+t5tx targetposition 0
+t5tx sign 1
+t5tx softzero 0
+t5tx softlowerlim 500
+t5tx softupperlim 12000
+t5tx fixed -1
+t5tx interruptmode 0
+t5tx precision 0.01
+t5tx accesscode 2
+t5tx failafter 3
+t5tx maxretry 3
+t5tx ignorefault 0
+t5tx movecount 10
+t5ty targetposition 0
+t5ty sign 1
+t5ty softzero 0
+t5ty softlowerlim 0
+t5ty softupperlim 3000
+t5ty fixed -1
+t5ty interruptmode 0
+t5ty precision 0.01
+t5ty accesscode 2
+t5ty failafter 3
+t5ty maxretry 3
+t5ty ignorefault 0
+t5ty movecount 10
+sal targetposition 0
+sal sign 1
+sal softzero 0
+sal softlowerlim -30
+sal softupperlim 30
+sal fixed -1
+sal interruptmode 0
+sal precision 0.01
+sal accesscode 2
+sal failafter 3
+sal maxretry 3
+sal ignorefault 0
+sal movecount 10
+sar targetposition 0
+sar sign 1
+sar softzero 0
+sar softlowerlim -30
+sar softupperlim 30
+sar fixed -1
+sar interruptmode 0
+sar precision 0.01
+sar accesscode 2
+sar failafter 3
+sar maxretry 3
+sar ignorefault 0
+sar movecount 10
+sab targetposition 0
+sab sign 1
+sab softzero 0
+sab softlowerlim -30
+sab softupperlim 30
+sab fixed -1
+sab interruptmode 0
+sab precision 0.01
+sab accesscode 2
+sab failafter 3
+sab maxretry 3
+sab ignorefault 0
+sab movecount 10
+sat targetposition 0
+sat sign 1
+sat softzero 0
+sat softlowerlim 0
+sat softupperlim 1000
+sat fixed -1
+sat interruptmode 0
+sat precision 0.01
+sat accesscode 2
+sat failafter 3
+sat maxretry 3
+sat ignorefault 0
+sat movecount 10
+t6tx targetposition 0
+t6tx sign 1
+t6tx softzero 0
+t6tx softlowerlim 500
+t6tx softupperlim 12000
+t6tx fixed -1
+t6tx interruptmode 0
+t6tx precision 0.01
+t6tx accesscode 2
+t6tx failafter 3
+t6tx maxretry 3
+t6tx ignorefault 0
+t6tx movecount 10
+t6ty targetposition 0
+t6ty sign 1
+t6ty softzero 0
+t6ty softlowerlim 0
+t6ty softupperlim 3000
+t6ty fixed -1
+t6ty interruptmode 0
+t6ty precision 0.01
+t6ty accesscode 2
+t6ty failafter 3
+t6ty maxretry 3
+t6ty ignorefault 0
+t6ty movecount 10
+sbl targetposition 0
+sbl sign 1
+sbl softzero 0
+sbl softlowerlim -30
+sbl softupperlim 30
+sbl fixed -1
+sbl interruptmode 0
+sbl precision 0.01
+sbl accesscode 2
+sbl failafter 3
+sbl maxretry 3
+sbl ignorefault 0
+sbl movecount 10
+sbr targetposition 0
+sbr sign 1
+sbr softzero 0
+sbr softlowerlim -30
+sbr softupperlim 30
+sbr fixed -1
+sbr interruptmode 0
+sbr precision 0.01
+sbr accesscode 2
+sbr failafter 3
+sbr maxretry 3
+sbr ignorefault 0
+sbr movecount 10
+sbb targetposition 0
+sbb sign 1
+sbb softzero 0
+sbb softlowerlim -30
+sbb softupperlim 30
+sbb fixed -1
+sbb interruptmode 0
+sbb precision 0.01
+sbb accesscode 2
+sbb failafter 3
+sbb maxretry 3
+sbb ignorefault 0
+sbb movecount 10
+sbt targetposition 0
+sbt sign 1
+sbt softzero 0
+sbt softlowerlim 0
+sbt softupperlim 1000
+sbt fixed -1
+sbt interruptmode 0
+sbt precision 0.01
+sbt accesscode 2
+sbt failafter 3
+sbt maxretry 3
+sbt ignorefault 0
+sbt movecount 10
+hm preset 12
+hm mode timer
diff --git a/test/DataNumber b/test/DataNumber
index 591b2951..393d5186 100644
--- a/test/DataNumber
+++ b/test/DataNumber
@@ -1,3 +1,3 @@
- 302
+ 318
NEVER, EVER modify or delete this file
You'll risk eternal damnation and a reincarnation as a cockroach!