- 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
This commit is contained in:
46
arrayutil.c
Normal file
46
arrayutil.c
Normal file
@ -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;
|
||||
}
|
31
arrayutil.h
Normal file
31
arrayutil.h
Normal file
@ -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_ */
|
21
ascon.c
21
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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
1
devser.c
1
devser.c
@ -227,7 +227,6 @@ static int DevQueueTask(void *ds)
|
||||
DevAction *action;
|
||||
char *sendData;
|
||||
char *replyData = NULL;
|
||||
|
||||
if (devser->steps == 0)
|
||||
return 1;
|
||||
|
||||
|
@ -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.
|
||||
</P>
|
||||
<h2>Commands understood by Tasub</h2>
|
||||
<H2>Commands understood by Tasub</H2>
|
||||
<p>
|
||||
<h3>Monochromator and Analyzer Parameters
|
||||
<h3>Monochromator and Analyzer Parameters</h3>
|
||||
<p>
|
||||
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
|
||||
|
1
event.c
1
event.c
@ -70,6 +70,7 @@ static char *pEvent[] = {
|
||||
"STATESTART",
|
||||
"STATEEND",
|
||||
"NEWTARGET",
|
||||
"DIMCHANGE",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
11
event.h
11
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
|
||||
|
@ -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}
|
||||
|
1
event.w
1
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
|
||||
|
38
exebuf.c
38
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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
8
lld.c
8
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
|
||||
|
2
make_gen
2
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 \
|
||||
|
@ -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,
|
||||
|
24
nxscript.c
24
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
1
ofac.c
1
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);
|
||||
|
9
script.c
9
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
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "sicsobj.h"
|
||||
#include <macro.h>
|
||||
#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",
|
||||
|
@ -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]);
|
||||
|
@ -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);
|
||||
|
288
sicsstat.tcl
288
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
|
||||
|
@ -1,3 +1,3 @@
|
||||
302
|
||||
318
|
||||
NEVER, EVER modify or delete this file
|
||||
You'll risk eternal damnation and a reincarnation as a cockroach!
|
||||
|
Reference in New Issue
Block a user