- Scriptcontext debugged to be working

- Added a drivable adapter to scriptcontext nodes
- Added subsampling to simulated histograms (and as a general option) in
  order to support Gumtree testing.
This commit is contained in:
koennecke
2008-06-09 08:57:53 +00:00
parent 3cb901b437
commit 0915491925
33 changed files with 1938 additions and 247 deletions

View File

@ -1,5 +1,5 @@
#line 465 "histogram.w" #line 467 "histogram.w"
/*--------------------------------------------------------------------------- /*---------------------------------------------------------------------------
H I S T D R I V H I S T D R I V
@ -72,7 +72,7 @@
void *pPriv; void *pPriv;
} HistDriver; } HistDriver;
#line 477 "histogram.w" #line 479 "histogram.w"
#line 232 "histogram.w" #line 232 "histogram.w"
@ -81,8 +81,10 @@
void DeleteHistDriver(pHistDriver self); void DeleteHistDriver(pHistDriver self);
int HistDriverConfig(pHistDriver self, pStringDict pOpt, int HistDriverConfig(pHistDriver self, pStringDict pOpt,
SConnection *pCon); SConnection *pCon);
HistInt *DefaultSubSample(pHistDriver self, SConnection *pCon,
int bank, char *command);
#line 478 "histogram.w" #line 480 "histogram.w"
#endif #endif

View File

@ -1,5 +1,5 @@
#line 438 "histogram.w" #line 440 "histogram.w"
/*-------------------------------------------------------------------------- /*--------------------------------------------------------------------------
H I S T M E M H I S T M E M
@ -42,22 +42,22 @@
eReflect eReflect
} OverFlowMode; } OverFlowMode;
#line 458 "histogram.w" #line 460 "histogram.w"
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
#line 290 "histogram.w" #line 292 "histogram.w"
pHistMem CreateHistMemory(char *drivername); pHistMem CreateHistMemory(char *drivername);
void DeleteHistMemory(void *self); void DeleteHistMemory(void *self);
#line 306 "histogram.w" #line 308 "histogram.w"
int HistGetOption(pHistMem self, char *name, char *result, int iResultLen); int HistGetOption(pHistMem self, char *name, char *result, int iResultLen);
int HistSetOption(pHistMem self, char *name, char *value); int HistSetOption(pHistMem self, char *name, char *value);
int HistConfigure(pHistMem self, SConnection *pCon, SicsInterp *pSics); int HistConfigure(pHistMem self, SConnection *pCon, SicsInterp *pSics);
#line 334 "histogram.w" #line 336 "histogram.w"
float GetHistPreset(pHistMem self); float GetHistPreset(pHistMem self);
int SetHistPreset(pHistMem self, float fVal); int SetHistPreset(pHistMem self, float fVal);
@ -73,7 +73,7 @@
void HistDirty(pHistMem self); void HistDirty(pHistMem self);
#line 364 "histogram.w" #line 366 "histogram.w"
int SetHistogram(pHistMem self, SConnection *pCon, int SetHistogram(pHistMem self, SConnection *pCon,
int i,int iStart, int iEnd, HistInt *lData); int i,int iStart, int iEnd, HistInt *lData);
@ -85,7 +85,7 @@
HistInt *lData, int iDataLen); HistInt *lData, int iDataLen);
int PresetHistogram(pHistMem self, SConnection *pCon, HistInt lVal); int PresetHistogram(pHistMem self, SConnection *pCon, HistInt lVal);
#line 407 "histogram.w" #line 409 "histogram.w"
int MakeHistMemory(SConnection *pCon, SicsInterp *pSics, void *pData, int MakeHistMemory(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[]); int argc, char *argv[]);
@ -94,7 +94,7 @@
int argc, char *argv[]); int argc, char *argv[]);
#line 460 "histogram.w" #line 462 "histogram.w"
#endif #endif

View File

@ -1,5 +1,5 @@
#line 483 "histogram.w" #line 485 "histogram.w"
/*--------------------------------------------------------------------------- /*---------------------------------------------------------------------------
H I S T M E M -- Internal H I S T M E M -- Internal
@ -11,7 +11,7 @@
#ifndef SICSHISTMEMINT #ifndef SICSHISTMEMINT
#define SICSHISTMEMINT #define SICSHISTMEMINT
#line 254 "histogram.w" #line 256 "histogram.w"
typedef struct __HistMem { typedef struct __HistMem {
pObjectDescriptor pDes; pObjectDescriptor pDes;
@ -23,7 +23,7 @@
pICallBack pCall; pICallBack pCall;
} HistMem; } HistMem;
#line 493 "histogram.w" #line 495 "histogram.w"
#endif #endif

View File

@ -478,6 +478,10 @@ extern char *SkipSpace(char *pPtr);
pCurrent = tail; pCurrent = tail;
while(pCurrent) while(pCurrent)
{ {
/* the line below fixes problems with kill functions
* traversing the command list
*/
pCurrent->pNext = NULL;
if(pCurrent->KFunc) if(pCurrent->KFunc)
{ {
pCurrent->KFunc(pCurrent->pData); pCurrent->KFunc(pCurrent->pData);

33
ascon.c
View File

@ -75,9 +75,9 @@ static void AsconError(Ascon *a, char *msg, int errorno) {
state = stateText[a->state]; state = stateText[a->state];
} }
if (errorno != 0) { if (errorno != 0) {
ErrPutMsg(a->errList, "%s %s (during %s)", msg, strerror(errorno), state); a->errList = ErrPutMsg(a->errList, &a->curError, "ASCERR: %s %s (during %s)", msg, strerror(errorno), state);
} else { } else {
ErrPutMsg(a->errList, "%s (during %s)", msg, state); a->errList = ErrPutMsg(a->errList, &a->curError, "ASCERR: %s (during %s)", msg, state);
} }
a->state |= AsconFailed; a->state |= AsconFailed;
} }
@ -126,12 +126,21 @@ static void AsconConnect(Ascon *a) {
return; return;
} }
void AsconStdInit(Ascon *a, char *hostport) { void AsconStdInit(Ascon *a, int argc, char *argv[]) {
a->fd = -1; a->fd = -1;
a->state = AsconConnectStart; a->state = AsconConnectStart;
a->timeout = 2.0; /* sec */
a->reconnectInterval = 10; a->reconnectInterval = 10;
a->hostport = strdup(hostport); a->hostport = strdup(argv[1]);
if(argc < 2){
a->sendTerminator = strdup(argv[2]);
} else {
a->sendTerminator = strdup("\n");
}
if(argc > 3){
a->timeout = atof(argv[3]);
} else {
a->timeout = 2.0; /* sec */
}
} }
int AsconReadGarbage(int fd) { int AsconReadGarbage(int fd) {
@ -276,7 +285,7 @@ int AsconStdHandler(Ascon *a) {
} }
break; break;
case AsconWriteStart: case AsconWriteStart:
DynStringConcatChar(a->wrBuffer, '\r'); DynStringConcat(a->wrBuffer, a->sendTerminator);
a->wrPos = 0; a->wrPos = 0;
a->state = AsconWriting; a->state = AsconWriting;
break; break;
@ -337,6 +346,7 @@ int AsconStdHandler(Ascon *a) {
if (a->timeout > 0) { if (a->timeout > 0) {
if (DoubleTime() - a->start > a->timeout) { if (DoubleTime() - a->start > a->timeout) {
AsconError(a, "read timeout", 0); AsconError(a, "read timeout", 0);
a->state = AsconTimeout;
} }
} }
} }
@ -363,7 +373,7 @@ AsconHandler AsconSetHandler(Ascon *a, int argc, char *argv[]) {
if (argc < 1) return NULL; if (argc < 1) return NULL;
if (strcasecmp(argv[0], "std") == 0) { if (strcasecmp(argv[0], "std") == 0) {
if (argc != 2) return NULL; if (argc != 2) return NULL;
AsconStdInit(a, argv[1]); AsconStdInit(a, argc, argv);
return AsconStdHandler; return AsconStdHandler;
} }
for (p = protocols.head; p!= NULL; p=p->next) { for (p = protocols.head; p!= NULL; p=p->next) {
@ -402,7 +412,6 @@ Ascon *AsconMake(SConnection *con, int argc, char *argv[]) {
a->wrBuffer = CreateDynString(60, 63); a->wrBuffer = CreateDynString(60, 63);
a->errList = NULL; a->errList = NULL;
a->responseValid = 0; a->responseValid = 0;
a->timeout = 2.0;
a->reconnectInterval = 10; a->reconnectInterval = 10;
a->lastReconnect = 0; a->lastReconnect = 0;
return a; return a;
@ -419,6 +428,9 @@ void AsconKill(Ascon *a) {
if (a->hostport) { if (a->hostport) {
free(a->hostport); free(a->hostport);
} }
if(a->sendTerminator){
free(a->sendTerminator);
}
free(a); free(a);
} }
@ -454,13 +466,12 @@ AsconStatus AsconTask(Ascon *a) {
case AsconStart: case AsconStart:
return AsconPending; return AsconPending;
case AsconFailed: case AsconFailed:
if (a->state <= AsconConnectFailed) { if (a->state != AsconTimeout) {
now = DoubleTime(); now = DoubleTime();
if (now > a->lastReconnect + a->reconnectInterval) { if (now > a->lastReconnect + a->reconnectInterval) {
a->lastReconnect = now; a->lastReconnect = now;
a->state = AsconConnectStart; a->state = AsconConnectStart;
} }
return AsconUnconnected;
} }
return AsconFailure; return AsconFailure;
case AsconFinished: case AsconFinished:
@ -501,5 +512,5 @@ char *AsconRead(Ascon *a) {
} }
ErrMsg *AsconGetErrList(Ascon *a) { ErrMsg *AsconGetErrList(Ascon *a) {
return a->errList; return a->curError;
} }

View File

@ -9,7 +9,7 @@
* \brief Asynchronous connection handling for devices controlled over tcp-ip * \brief Asynchronous connection handling for devices controlled over tcp-ip
* connections. Interface for the implementation of custom protocols. * connections. Interface for the implementation of custom protocols.
* *
* For the implmentation of a custom protocol, hou have to implement * For the implementation of a custom protocol, you have to implement
* the handler function and the init function, declare the protocol * the handler function and the init function, declare the protocol
* of type AsconProtocol and call AsconInsertProtocol on startup. * of type AsconProtocol and call AsconInsertProtocol on startup.
* The handler and init functions are normally be a wrapper around AsconStdHandler * The handler and init functions are normally be a wrapper around AsconStdHandler
@ -43,7 +43,8 @@ typedef enum {
AsconReading=12+AsconOnTheWay, AsconReading=12+AsconOnTheWay,
AsconReadStart=AsconReading+AsconStart, AsconReadStart=AsconReading+AsconStart,
AsconReadDone=AsconReading+AsconFinished, AsconReadDone=AsconReading+AsconFinished,
AsconIdle=16+AsconFinished AsconIdle=16+AsconFinished,
AsconTimeout=20 + AsconFailed
} AsconState; } AsconState;
/** \brief the task handler function prototype /** \brief the task handler function prototype
@ -63,8 +64,10 @@ struct Ascon {
pDynString wrBuffer;/**< write buffer */ pDynString wrBuffer;/**< write buffer */
int wrPos; /**< write buffer position */ int wrPos; /**< write buffer position */
double timeout; /**< read timeout (sec) */ double timeout; /**< read timeout (sec) */
char *sendTerminator; /**< terminator for sending messages */
char *hostport; /**< host:port to connect */ char *hostport; /**< host:port to connect */
ErrMsg *errList; /**< error message list */ ErrMsg *errList; /**< error message list */
ErrMsg *curError; /**< the currently active error */
double start; /**< unix time when read was started */ double start; /**< unix time when read was started */
void *private; /**< private data of protocol */ void *private; /**< private data of protocol */
int noResponse; /**< no response expected */ int noResponse; /**< no response expected */
@ -93,7 +96,7 @@ int AsconStdHandler(Ascon *a);
* *
* In most cases a custom init function may be a wrapper around AsconStdInit * In most cases a custom init function may be a wrapper around AsconStdInit
*/ */
void AsconStdInit(Ascon *a, char *hostport); void AsconStdInit(Ascon *a, int argc, char *argv[]);
/** The Ascon Protocol /** The Ascon Protocol
*/ */

View File

@ -60,7 +60,9 @@ static void DevFreeActionList(DevAction *actions) {
} }
static void DevKillTask(void *devser) { static void DevKillTask(void *devser) {
free(devser); if(devser != NULL){
DevKill(devser);
}
} }
DevAction *DevNextAction(DevSer *devser) { DevAction *DevNextAction(DevSer *devser) {
@ -119,14 +121,17 @@ int DevQueueTask(void *ds) {
status = AsconTask(devser->asyncConn); status = AsconTask(devser->asyncConn);
if (status == AsconFailure) { if (status == AsconFailure) {
devser->errmsg = AsconGetErrList(devser->asyncConn); devser->errmsg = AsconGetErrList(devser->asyncConn);
return 1;
} else if (status != AsconReady) { } else if (status != AsconReady) {
return 1; return 1;
} }
if (devser->steps > 0) { /* debugging mode */ if (devser->steps > 0) { /* debugging mode */
devser->steps--; devser->steps--;
} }
replyData = AsconRead(devser->asyncConn); if(status == AsconFailure){
replyData = devser->errmsg->text;
} else {
replyData = AsconRead(devser->asyncConn);
}
sendData = action->hdl(action->data, replyData); sendData = action->hdl(action->data, replyData);
if (sendData != NULL) { if (sendData != NULL) {
AsconWrite(devser->asyncConn, sendData, 0); AsconWrite(devser->asyncConn, sendData, 0);
@ -144,8 +149,8 @@ int DevQueueTask(void *ds) {
} }
DevSer *DevMake(SConnection *con, int argc, char *argv[]) { DevSer *DevMake(SConnection *con, int argc, char *argv[]) {
DevSer *devser; DevSer *devser = NULL;
Ascon *asyncConn; Ascon *asyncConn = NULL;
asyncConn = AsconMake(con, argc, argv); asyncConn = AsconMake(con, argc, argv);
if (!asyncConn) { if (!asyncConn) {

View File

@ -18,51 +18,91 @@ int ErrEqual(char *str1, char *str2) {
if (str1 == NULL || str2 == NULL) { if (str1 == NULL || str2 == NULL) {
return str1 == str2; return str1 == str2;
} }
str1++;
str2++;
} else {
str1++;
str2++;
} }
str1++;
str2++;
} }
return 1; return 1;
} }
ErrMsg *ErrPutMsg(ErrMsg *dump, char *fmt, ...) { ErrMsg *ErrFind(ErrMsg *dump, char *message){
ErrMsg *m; ErrMsg *cur = dump;
ErrMsg **last; while(cur != NULL){
va_list ap; if(ErrEqual(message,cur->text)){
char buf[256]; break;
char *text; }
int l; cur = cur->next;
}
va_start(ap, fmt); return cur;
l = vsnprintf(buf, sizeof buf, fmt, ap); }
va_end(ap);
if (l < sizeof buf) { ErrMsg *ErrPutMsg(ErrMsg *dump, ErrMsg **current, char *fmt, ...){
text = buf; ErrMsg *m = NULL;
} else { va_list ap;
/* assuming we have a C99 conforming snprintf and need a larger buffer */ char buf[1024];
text = calloc(l, 1);
va_start(ap, fmt); /* format message */
vsnprintf(text, l, fmt, ap); va_start(ap, fmt);
va_end(ap); memset(buf,0,1024*sizeof(char));
} vsnprintf(buf, sizeof buf, fmt, ap);
last = &dump; va_end(ap);
for (m = dump; m != NULL; m = m->next) {
m = ErrFind(dump, buf);
if(m == NULL){
m = calloc(1, sizeof(*m));
m->text = strdup(buf);
m->cnt = 1;
m->next = dump;
*current = m;
return m;
} else {
*current = m;
return dump;
}
}
ErrMsg *ErrOldPutMsg(ErrMsg *dump, char *fmt, ...) {
ErrMsg *m = NULL;
ErrMsg **last = NULL;
va_list ap;
char buf[256];
char *text = NULL;
int l;
va_start(ap, fmt);
l = vsnprintf(buf, sizeof buf, fmt, ap);
va_end(ap);
if (l < sizeof buf) {
text = buf;
} else {
/* assuming we have a C99 conforming snprintf and need a larger buffer */
text = calloc(l, 1);
va_start(ap, fmt);
vsnprintf(text, l, fmt, ap);
va_end(ap);
}
for (last = &dump; *last != NULL; last = &m->next) {
m = *last;
if (ErrEqual(text, m->text)) { if (ErrEqual(text, m->text)) {
*last = m->next; /* remove found item from the list */ *last = m->next;
break; break;
} }
last = &m->next;
} }
if (m == NULL) { /* make a fresh list item m */ if (m == NULL) {
if (text == buf) text = strdup(buf); if (text == buf) text = strdup(buf);
m = calloc(1, sizeof(*m)); m = calloc(1, sizeof(*m));
m->text = text; m->text = text;
m->cnt = 1; m->cnt = 1;
} else { /* take the found item m */ } else {
if (text != buf) free(text); if (text != buf) free(text);
m->cnt++; m->cnt++;
} }
m->next = dump; /* add the new item to the head of the list */ if(m != dump){
m->next = dump;
}
time(&m->last); time(&m->last);
return m; return m;
} }

View File

@ -24,9 +24,10 @@ typedef struct ErrMsg {
* The newset message is always at the head of the list. * The newset message is always at the head of the list.
* *
* \param dump the error message list * \param dump the error message list
* \param current The currently active error message
* \param fmt the format for the message * \param fmt the format for the message
* \return the new error message list head * \return the new error message list head
*/ */
ErrMsg *ErrPutMsg(ErrMsg *dump, char *fmt, ...); ErrMsg *ErrPutMsg(ErrMsg *dump, ErrMsg **current, char *fmt, ...);
#endif #endif

255
fomerge.c
View File

@ -17,6 +17,8 @@
Mark Koennecke, March 2000 Mark Koennecke, March 2000
extended to support nxscripted file writing: Mark Koennecke, May 2004 extended to support nxscripted file writing: Mark Koennecke, May 2004
extended to support GTSE, Mark Koennecke, May 2008
--------------------------------------------------------------------------*/ --------------------------------------------------------------------------*/
#include <stdlib.h> #include <stdlib.h>
#include <assert.h> #include <assert.h>
@ -27,6 +29,7 @@
#include "fortify.h" #include "fortify.h"
#include "scan.h" #include "scan.h"
#include "fitcenter.h" #include "fitcenter.h"
#include "sicsdata.h"
static pFit fitter = NULL; static pFit fitter = NULL;
@ -594,6 +597,98 @@ static int putSum(SicsInterp *pSics, SConnection *pCon,
return status; return status;
} }
/*---------------------------------------------------------------------*/ /*---------------------------------------------------------------------*/
static int TOFLambda(SicsInterp *pSics, SConnection *pCon,
int argc, char *argv[]){
int status, iTime, iDet, i;
const float *fTimeBin = NULL;
int *sum = NULL;
long *lSum = NULL;
pHistMem pMem = NULL;
float fCenter, fFWHM, fStdDev, fVal;
float fMon, fData, distMonoDet, distFermiDet, tdiff, lambda;
pMem = (pHistMem)FindCommandData(pSics,"hm1","HistMem");
if(pMem == NULL)
{
SCWrite(pCon,
"ERROR: need lower detector bank for lambda calculation",
eError);
return 0;
}
/**
* locate elastic position in data
*/
fTimeBin = GetHistTimeBin(pMem,&iTime);
iDet = getFMdim(LOWER);
sum = calculateTimeSum(GetHistogramPointer(pMem,pCon),iDet,iTime);
if(!sum)
{
SCWrite(pCon,"ERROR: out of memory calculating lambda",
eError);
return 0;
}
if(fitter == NULL)
{
fitter = CreateFitCenter(NULL);
if(!fitter)
{
SCWrite(pCon,"ERROR: cannot allocate fitting structure",eError);
return 0;
}
}
/*
copy sum to make compiler happy
*/
lSum = (long *)malloc(iTime*sizeof(long));
if(lSum == NULL)
{
SCWrite(pCon,"ERROR: out of memory in TOFLambda",eError);
free(sum);
return 0;
}
for(i = 0; i < iTime; i++)
{
lSum[i] = sum[i];
}
status = CalculateFitFromData(fitter,(float *)fTimeBin,lSum,iTime);
if(status < 0)
{
SCWrite(pCon,"ERROR: no peak in data",eError);
free(sum);
free(lSum);
return 0;
}
GetFitResults(fitter,&fCenter,&fStdDev,&fFWHM,&fVal);
fData = fCenter;
/*
* locate elastic position in tofmon
*/
GetHistogram(pMem, pCon, 0, iTime*iDet, iTime*(iDet+1),
sum, iTime*sizeof(HistInt));
for(i = 0; i < iTime; i++)
{
lSum[i] = sum[i];
}
status = CalculateFitFromData(fitter,(float *)fTimeBin,lSum,iTime);
GetFitResults(fitter,&fCenter,&fStdDev,&fFWHM,&fVal);
fMon = fCenter;
free(sum);
free(lSum);
/*
* calculate
*/
distFermiDet = 3000.;
distMonoDet = distFermiDet - 215.7;
tdiff = fData - fMon;
lambda = tdiff/(252.78*distMonoDet*.001);
SCPrintf(pCon,eValue, "toflambda = %f", lambda);
return 1;
}
/*---------------------------------------------------------------------*/
static int putElastic(SicsInterp *pSics, SConnection *pCon, static int putElastic(SicsInterp *pSics, SConnection *pCon,
pNXScript pNexus, char *alias, float fElastic) pNXScript pNexus, char *alias, float fElastic)
{ {
@ -663,12 +758,157 @@ static int putElastic(SicsInterp *pSics, SConnection *pCon,
return status; return status;
} }
/*----------------------------------------------------------------------*/
static int FMputTTH(SConnection *pCon, int argc, char *argv[]){
pSICSData data = NULL;
int length = -1, i;
float *tthData = NULL;
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient no of arguments to FMputTTH",
eError);
return 0;
}
data = (pSICSData)FindCommandData(pServ->pSics,argv[3],"SICSData");
if(data == NULL){
SCWrite(pCon,"ERROR: SICSData object not found", eError);
return 0;
}
if(strcmp(argv[2],"upper") == 0)
{
length = getFMdim(UPPER);
tthData = getFMBankTheta(UPPER);
}
else if(strcmp(argv[2],"middle") == 0)
{
length = getFMdim(MIDDLE);
tthData = getFMBankTheta(MIDDLE);
}
else if(strcmp(argv[2],"lower") == 0)
{
length = getFMdim(LOWER);
tthData = getFMBankTheta(LOWER);
}
else if(strcmp(argv[2],"merged") == 0)
{
length = getFMdim(MERGED);
tthData = getFMBankTheta(MERGED);
}
else
{
SCWrite(pCon,"ERROR: requested two_theta for invalid detector bank",
eError);
return 0;
}
if(length < 0 || tthData == NULL){
SCWrite(pCon,"ERROR: requested two_theta for invalid detector bank",
eError);
return 0;
}
clearSICSData(data);
for(i = 0; i < length; i++){
setSICSDataFloat(data,i,tthData[i]);
}
SCSendOK(pCon);
return 1;
}
/*---------------------------------------------------------------------*/
static int FMcopyMerged(SConnection *pCon, int argc, char *argv[]){
pSICSData data = NULL;
int i, length;
HistInt *hmData = NULL;
if(argc < 3){
SCWrite(pCon,"ERROR: insufficient no of arguments to FMcopyMerged",
eError);
return 0;
}
data = (pSICSData)FindCommandData(pServ->pSics,argv[2],"SICSData");
if(data == NULL){
SCWrite(pCon,"ERROR: SICSData object not found", eError);
return 0;
}
if(!updateHMFMData(pServ->pSics, pCon)){
SCWrite(pCon,"ERROR: not enough HM's to merge or bad names in fomerge.c",
eError);
return 0;
}
clearSICSData(data);
length = getFMdim(MERGED)*getFMdim(TIMEBIN);
hmData = getFMBankPointer(MERGED);
if(hmData == NULL){
SCWrite(pCon,"ERROR: merged data not available", eError);
return 0;
}
for(i = 0; i < length; i++){
setSICSDataInt(data,i,hmData[i]);
}
SCSendOK(pCon);
return 1;
}
/*---------------------------------------------------------------------*/
static int FMcopyMergedSum(SConnection *pCon, int argc, char *argv[]){
pSICSData data = NULL;
int i, length, tbin, j, row;
HistInt *hmData = NULL, *sumData = NULL;
if(argc < 3){
SCWrite(pCon,"ERROR: insufficient no of arguments to FMcopyMerged",
eError);
return 0;
}
data = (pSICSData)FindCommandData(pServ->pSics,argv[2],"SICSData");
if(data == NULL){
SCWrite(pCon,"ERROR: SICSData object not found", eError);
return 0;
}
if(!updateHMFMData(pServ->pSics, pCon)){
SCWrite(pCon,"ERROR: not enough HM's to merge or bad names in fomerge.c",
eError);
return 0;
}
clearSICSData(data);
length = getFMdim(MERGED);
tbin = getFMdim(TIMEBIN);
hmData = getFMBankPointer(MERGED);
if(hmData == NULL){
SCWrite(pCon,"ERROR: merged data not available", eError);
return 0;
}
sumData = malloc(tbin*sizeof(int));
if(sumData == NULL){
SCWrite(pCon,"ERROR: out-of-memory in FMcopyMergedSum", eError);
return 0;
}
memset(sumData,0,tbin*sizeof(int));
for(j = 0; j < length; j++){
row = j*tbin;
for(i = 0; i < tbin; i++){
sumData[i] += hmData[row+i];
}
}
for(i = 0; i < tbin; i++){
setSICSDataInt(data,i,sumData[i]);
}
free(sumData);
SCSendOK(pCon);
return 1;
}
/*----------------------------------------------------------------------- /*-----------------------------------------------------------------------
Usage: Usage:
focusmerge puttwotheta nxscriptmod bankname alias focusmerge puttwotheta nxscriptmod bankname alias
focusmerge puttth bankname sicsdataname
focusmerge copymerged sicsdataname
focusmerge copymergedsum sicsdataname
focusmerge putmerged nxscriptmod alias focusmerge putmerged nxscriptmod alias
focusmerge putsum nxscriptmod bankname alias focusmerge putsum nxscriptmod bankname alias
focusmerge putelastic nxscriptmod alias theoelastic focusmerge putelastic nxscriptmod alias theoelastic
focusmerge toflambda
nxscriptmod = name of the nxscript module used for writing, must be open nxscriptmod = name of the nxscript module used for writing, must be open
alias = The alias under which to write the data item alias = The alias under which to write the data item
@ -690,6 +930,21 @@ int FocusMergeAction(SConnection *pCon, SicsInterp *pSics, void *pData,
} }
strtolower(argv[1]); strtolower(argv[1]);
if(strcmp(argv[1],"puttth") == 0){
return FMputTTH(pCon,argc,argv);
}
if(strcmp(argv[1],"copymerged") == 0){
return FMcopyMerged(pCon,argc,argv);
}
if(strcmp(argv[1],"copymergedsum") == 0){
return FMcopyMergedSum(pCon,argc,argv);
}
if(strcmp(argv[1],"toflambda") == 0){
return TOFLambda(pSics, pCon,argc,argv);
}
if(strcmp(argv[1],"puttwotheta") == 0) if(strcmp(argv[1],"puttwotheta") == 0)
{ {
if(argc < 4) if(argc < 4)

View File

@ -834,7 +834,7 @@ void HistDirty(pHistMem self)
return 0; return 0;
} }
if(iEnd > iDataLen/sizeof(HistInt)) if( (iEnd -iStart) > iDataLen/sizeof(HistInt))
{ {
SCWrite(pCon,"WARNING: truncating request to fit data space",eWarning); SCWrite(pCon,"WARNING: truncating request to fit data space",eWarning);
iEnd = (iDataLen/sizeof(HistInt)) - 1; iEnd = (iDataLen/sizeof(HistInt)) - 1;
@ -1138,7 +1138,7 @@ static int checkHMEnd(pHistMem self, char *text){
return 0; return 0;
} }
memset(pBuf,0,iRet+60); memset(pBuf,0,iRet+60);
HistGetOption(self,argv[2],pBuf,iRet); HistGetOption(self,argv[2],pBuf,iRet+60);
sprintf(pBueffel,"%s.%s = %s",argv[0],argv[2],pBuf); sprintf(pBueffel,"%s.%s = %s",argv[0],argv[2],pBuf);
SCWrite(pCon,pBueffel,eValue); SCWrite(pCon,pBueffel,eValue);
free(pBuf); free(pBuf);

View File

@ -21,7 +21,7 @@ $\langle$Modes {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ ePSD,@\\ \mbox{}\verb@ ePSD,@\\
\mbox{}\verb@ eSANSTOF@\\ \mbox{}\verb@ eSANSTOF@\\
\mbox{}\verb@ } HistMode;@\\ \mbox{}\verb@ } HistMode;@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -59,7 +59,7 @@ $\langle$Modes {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ eOCount,@\\ \mbox{}\verb@ eOCount,@\\
\mbox{}\verb@ eReflect@\\ \mbox{}\verb@ eReflect@\\
\mbox{}\verb@ } OverFlowMode;@\\ \mbox{}\verb@ } OverFlowMode;@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -176,7 +176,7 @@ $\langle$HistType {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ int (*FreePrivate)(pHistDriver self);@\\ \mbox{}\verb@ int (*FreePrivate)(pHistDriver self);@\\
\mbox{}\verb@ void *pPriv;@\\ \mbox{}\verb@ void *pPriv;@\\
\mbox{}\verb@ } HistDriver;@\\ \mbox{}\verb@ } HistDriver;@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -279,7 +279,9 @@ $\langle$HistDrivProt {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ void DeleteHistDriver(pHistDriver self);@\\ \mbox{}\verb@ void DeleteHistDriver(pHistDriver self);@\\
\mbox{}\verb@ int HistDriverConfig(pHistDriver self, pStringDict pOpt,@\\ \mbox{}\verb@ int HistDriverConfig(pHistDriver self, pStringDict pOpt,@\\
\mbox{}\verb@ SConnection *pCon);@\\ \mbox{}\verb@ SConnection *pCon);@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@ HistInt *DefaultSubSample(pHistDriver self, SConnection *pCon, @\\
\mbox{}\verb@ int bank, char *command); @\\
\mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -318,7 +320,7 @@ $\langle$HistST {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ pICountable pCountInt;@\\ \mbox{}\verb@ pICountable pCountInt;@\\
\mbox{}\verb@ pICallBack pCall;@\\ \mbox{}\verb@ pICallBack pCall;@\\
\mbox{}\verb@ } HistMem;@\\ \mbox{}\verb@ } HistMem;@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -360,7 +362,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@@\\ \mbox{}\verb@@\\
\mbox{}\verb@ pHistMem CreateHistMemory(char *drivername);@\\ \mbox{}\verb@ pHistMem CreateHistMemory(char *drivername);@\\
\mbox{}\verb@ void DeleteHistMemory(void *self);@\\ \mbox{}\verb@ void DeleteHistMemory(void *self);@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -390,7 +392,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ int HistGetOption(pHistMem self, char *name, char *result, int iResultLen);@\\ \mbox{}\verb@ int HistGetOption(pHistMem self, char *name, char *result, int iResultLen);@\\
\mbox{}\verb@ int HistSetOption(pHistMem self, char *name, char *value);@\\ \mbox{}\verb@ int HistSetOption(pHistMem self, char *name, char *value);@\\
\mbox{}\verb@ int HistConfigure(pHistMem self, SConnection *pCon, SicsInterp *pSics);@\\ \mbox{}\verb@ int HistConfigure(pHistMem self, SConnection *pCon, SicsInterp *pSics);@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -441,7 +443,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ int HistBlockCount(pHistMem self, SConnection *pCon);@\\ \mbox{}\verb@ int HistBlockCount(pHistMem self, SConnection *pCon);@\\
\mbox{}\verb@ void HistDirty(pHistMem self); @\\ \mbox{}\verb@ void HistDirty(pHistMem self); @\\
\mbox{}\verb@@\\ \mbox{}\verb@@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -481,7 +483,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ int i, int iStart, int iEnd, @\\ \mbox{}\verb@ int i, int iStart, int iEnd, @\\
\mbox{}\verb@ HistInt *lData, int iDataLen);@\\ \mbox{}\verb@ HistInt *lData, int iDataLen);@\\
\mbox{}\verb@ int PresetHistogram(pHistMem self, SConnection *pCon, HistInt lVal);@\\ \mbox{}\verb@ int PresetHistogram(pHistMem self, SConnection *pCon, HistInt lVal);@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -535,7 +537,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@ int HistAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\ \mbox{}\verb@ int HistAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
\mbox{}\verb@ int argc, char *argv[]);@\\ \mbox{}\verb@ int argc, char *argv[]);@\\
\mbox{}\verb@ @\\ \mbox{}\verb@ @\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-1ex} \vspace{-1ex}
\footnotesize\addtolength{\baselineskip}{-1ex} \footnotesize\addtolength{\baselineskip}{-1ex}
@ -597,7 +599,7 @@ following.
\mbox{}\verb@@$\langle$Protos {\footnotesize ?, \ldots\ }$\rangle$\verb@@\\ \mbox{}\verb@@$\langle$Protos {\footnotesize ?, \ldots\ }$\rangle$\verb@@\\
\mbox{}\verb@@\\ \mbox{}\verb@@\\
\mbox{}\verb@#endif@\\ \mbox{}\verb@#endif@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-2ex} \vspace{-2ex}
\end{minipage}\\[4ex] \end{minipage}\\[4ex]
@ -623,7 +625,7 @@ following.
\mbox{}\verb@@$\langle$HistDrivProt {\footnotesize ?}$\rangle$\verb@@\\ \mbox{}\verb@@$\langle$HistDrivProt {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@@\\ \mbox{}\verb@@\\
\mbox{}\verb@#endif@\\ \mbox{}\verb@#endif@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-2ex} \vspace{-2ex}
\end{minipage}\\[4ex] \end{minipage}\\[4ex]
@ -646,7 +648,7 @@ following.
\mbox{}\verb@@$\langle$HistST {\footnotesize ?}$\rangle$\verb@@\\ \mbox{}\verb@@$\langle$HistST {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@@\\ \mbox{}\verb@@\\
\mbox{}\verb@#endif@\\ \mbox{}\verb@#endif@\\
\mbox{}\verb@@$\diamond$ \mbox{}\verb@@$\Diamond$
\end{list} \end{list}
\vspace{-2ex} \vspace{-2ex}
\end{minipage}\\[4ex] \end{minipage}\\[4ex]

View File

@ -234,6 +234,8 @@ only these few functions operate on histogram memory drivers in general:
void DeleteHistDriver(pHistDriver self); void DeleteHistDriver(pHistDriver self);
int HistDriverConfig(pHistDriver self, pStringDict pOpt, int HistDriverConfig(pHistDriver self, pStringDict pOpt,
SConnection *pCon); SConnection *pCon);
HistInt *DefaultSubSample(pHistDriver self, SConnection *pCon,
int bank, char *command);
@} @}
CreateHistDriver creates a new HistDriver data structure and returns it. Or CreateHistDriver creates a new HistDriver data structure and returns it. Or

View File

@ -250,6 +250,21 @@
return pDriv->fTime; return pDriv->fTime;
} }
/*-------------------------------------------------------------------------*/
HistInt *DefaultSubSample(pHistDriver self, SConnection *pCon,
int bank, char *command){
HistInt *data = NULL;
char error[132];
assert(bank == 0); /* no bank handling yet.. */
memset(error,0,132*sizeof(char));
data = subSample(self->data, command, error, 132);
if(data == NULL){
SCWrite(pCon,error,eError);
}
return data;
}
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
pHistDriver CreateSIMHM(pStringDict pOpt) pHistDriver CreateSIMHM(pStringDict pOpt)
{ {
@ -286,6 +301,7 @@
pNew->FreePrivate = SimFreePrivate; pNew->FreePrivate = SimFreePrivate;
pNew->Pause = SimPause; pNew->Pause = SimPause;
pNew->Continue = SimContinue; pNew->Continue = SimContinue;
pNew->SubSample = DefaultSubSample;
StringDictAddPair(pOpt,"failrate","-1"); StringDictAddPair(pOpt,"failrate","-1");
return pNew; return pNew;

153
hmdata.c
View File

@ -16,10 +16,12 @@
#include "splitter.h" #include "splitter.h"
#include "fortify.h" #include "fortify.h"
#include "hmdata.h" #include "hmdata.h"
#include <nxdataset.h>
#include "HistMem.h" #include "HistMem.h"
#include "HistMem.i" #include "HistMem.i"
#include "HistDriv.i" #include "HistDriv.i"
#include "countdriv.h" #include "countdriv.h"
#include "stptok.h"
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
pHMdata makeHMData(void) { pHMdata makeHMData(void) {
pHMdata self = NULL; pHMdata self = NULL;
@ -484,4 +486,155 @@ int loadHMData(pHMdata self, SConnection *pCon, char *filename){
fclose(fd); fclose(fd);
return 1; return 1;
} }
/*==========================================================================
* subsampling was stolen from the SinqHTTP histogram memory code and
* thus contains some additional indirections.
* =========================================================================*/
static pNXDS hmDataToNXDataset(pHMdata self){
pNXDS result = NULL;
int i;
result = malloc(sizeof(NXDS));
if(result == NULL){
return NULL;
}
memset(result,0,sizeof(NXDS));
result->magic = MAGIC;
result->type = NX_INT32;
result->rank = self->rank;
if(isInTOFMode(self)){
result->rank++;
}
result->dim = malloc(self->rank*sizeof(int));
if(result->dim == NULL){
free(result);
return NULL;
}
for(i = 0; i < self->rank; i++){
result->dim[i] = self->iDim[i];
}
if(isInTOFMode(self)){
result->dim[result->rank-1] = getNoOfTimebins(self);
}
if(self->localBuffer == NULL){
resizeBuffer(self);
}
result->u.iPtr = self->localBuffer;
return result;
}
/*---------------------------------------------------------------------------*/
static pNXDS subSampleCommand(pNXDS source, char *command,
char *error, int errLen){
int startDim[NX_MAXRANK], endDim[NX_MAXRANK];
int dim = 0, start = 0, i;
char *pPtr = NULL, token[80];
pPtr = stptok(command,token,79,":\0");
while((pPtr = stptok(pPtr,token,79,":\0")) != NULL){
if(start == 0){
startDim[dim] = atoi(token);
start = 1;
} else {
endDim[dim] = atoi(token);
start = 0;
dim++;
}
}
if(dim < source->rank - 1){
strncpy(error,"ERROR: Not enough border values specified for subsampling",errLen);
return NULL;
}
for(i = 0; i < source->rank; i++){
if(startDim[i] < 0 || startDim[i] >= source->dim[i]){
snprintf(error,errLen,"ERROR: invalid start value %d for dimension %d", startDim[1], i);
return NULL;
}
if(endDim[i] < startDim[i] || endDim[i] >= source->dim[i]){
snprintf(error,errLen,"ERROR: invalid end value %d for dimension %d", endDim[1], i);
return NULL;
}
}
return cutNXDataset(source,startDim,endDim);
}
/*-----------------------------------------------------------------------------*/
static pNXDS sumCommand(pNXDS source, char *command, char *error, int errlen){
int dimNo = -1, start = -1, end = -1;
char *pPtr = NULL;
char token[80];
pPtr = stptok(command,token,79,":\0");
pPtr = stptok(pPtr,token,79,":\0");
if(pPtr != NULL){
dimNo = atoi(token);
}
pPtr = stptok(pPtr,token,79,":\0");
if(pPtr != NULL){
start = atoi(token);
}
pPtr = stptok(pPtr,token,79,":\0");
if(pPtr != NULL){
end = atoi(token);
}
if(dimNo < 0 || dimNo > source->rank - 1){
snprintf(error,errlen,"ERROR: invalid dimension %d requestd to sum", dimNo);
return NULL;
}
if(end < 0 || end > source->dim[dimNo] || start < 0 || start > end){
snprintf(error,errlen,"ERROR: invalid summing limits %d to %d requested", start,end);
return NULL;
}
return sumNXDataset(source,dimNo, start, end);
}
/*--------------------------------------------------------------------------*/
HistInt *subSample(pHMdata self, char *command,
char *error, int errLen){
pNXDS source = NULL, start = NULL;
pNXDS result = NULL;
char *pPtr = NULL;
char subCommand[132];
HistInt *data = NULL;
int length;
start = hmDataToNXDataset(self);
if(start == NULL){
strncpy(error,"Out-Of-Memory or no data while subsampling ",
errLen);
return NULL;
}
source = start;
pPtr = command;
while((pPtr = stptok(pPtr,subCommand,131,";\0\r\n")) != NULL){
if(strstr(subCommand,"sample") != NULL){
result = subSampleCommand(source,subCommand,error, errLen);
} else if(strstr(subCommand,"sum") != NULL){
result = sumCommand(source,subCommand,error, errLen);
} else {
strncpy(error,"ERROR: invalid subcommand to process requested",errLen);
return NULL;
}
if(result == NULL){
return NULL;
}
if(source != start){
dropNXDataset(source);
}
source = result;
}
length = getNXDatasetLength(result);
data = malloc((length+1)*sizeof(int));
if(data == NULL){
strncpy(error,"Out-Of-Mmeory in Subsample", errLen);
dropNXDataset(result);
return NULL;
}
data[0] = length;
memcpy(data+1,result->u.iPtr, length*sizeof(int));
dropNXDataset(result);
return data;
}

View File

@ -60,6 +60,8 @@
int start[MAXDIM], int end[MAXDIM]); int start[MAXDIM], int end[MAXDIM]);
int loadHMData(pHMdata self, SConnection *pCon, char *filename); int loadHMData(pHMdata self, SConnection *pCon, char *filename);
HistInt *subSample(pHMdata self, char *command,
char *error, int errLen);
#endif #endif

View File

@ -36,7 +36,8 @@ SOBJ = network.o ifile.o conman.o SCinter.o splitter.o passwd.o \
moregress.o multicounter.o regresscter.o histregress.o \ moregress.o multicounter.o regresscter.o histregress.o \
sicshdbadapter.o polldriv.o sicspoll.o statemon.o hmslave.o \ sicshdbadapter.o polldriv.o sicspoll.o statemon.o hmslave.o \
nwatch.o asyncqueue.o asyncprotocol.o sicsobj.o \ nwatch.o asyncqueue.o asyncprotocol.o sicsobj.o \
nxcopy.o nxinterhelper.o nxinter_wrap.o genericcontroller.o nxstack.o nxcopy.o nxinterhelper.o nxinter_wrap.o genericcontroller.o nxstack.o \
sctdriveadapter.o
MOTOROBJ = motor.o simdriv.o MOTOROBJ = motor.o simdriv.o
COUNTEROBJ = countdriv.o simcter.o counter.o COUNTEROBJ = countdriv.o simcter.o counter.o

View File

@ -7,6 +7,7 @@
Mark Koennecke, October 2002 Mark Koennecke, October 2002
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h>
#include <string.h> #include <string.h>
#include "nxdataset.h" #include "nxdataset.h"
@ -306,6 +307,140 @@ int putNXDatasetValueAt(pNXDS dataset, int address, double value){
} }
return 1; return 1;
} }
/*----------------------------------------------------------------------
This is working recursively through the dimensions. When at the last:
actual copying takes place.
-----------------------------------------------------------------------*/
static void copyCutData(pNXDS source, pNXDS target, int sourceDim[],
int targetDim[], int start[], int end[],
int dim){
int i, length;
double val;
targetDim[dim] = 0;
length = end[dim] - start[dim];
if(dim == source->rank -1){
for(i = 0; i < length; i++){
sourceDim[dim] = start[dim] + i;
val = getNXDatasetValue(source,sourceDim);
targetDim[dim] = i;
putNXDatasetValue(target, targetDim, val);
}
} else {
for(i = 0; i < length; i++){
sourceDim[dim] = start[dim] + i;
targetDim[dim] = i;
copyCutData(source,target, sourceDim, targetDim, start, end, dim+1);
}
}
}
/*-----------------------------------------------------------------------*/
pNXDS cutNXDataset(pNXDS source, int start[], int end[]){
pNXDS result = NULL;
int newDim[NX_MAXRANK], i;
int sourceDim[NX_MAXRANK], targetDim[NX_MAXRANK];
for(i = 0; i < source->rank; i++){
if(start[i] < 0 || end[i] > source->dim[i]){
fprintf(stderr,"ERROR: invalid boundaries specified for cutting");
return NULL;
}
newDim[i] = end[i] - start[i];
if(newDim[i] <= 0){
fprintf(stderr,"ERROR: invalid cut limits specified for cutting dataset");
return NULL;
}
}
result = createNXDataset(source->rank, source->type, newDim);
if(result == NULL){
fprintf(stderr,"ERROR: out of memory creating result dataset");
return NULL;
}
copyCutData(source, result, sourceDim, targetDim, start, end, 0);
return result;
}
/*----------------------------------------------------------------------
This recurses through all dimesnions, thereby skipping the summed one.
At the end of the rescusion the actual summing is performed.
----------------------------------------------------------------------*/
static void sumData(pNXDS source, pNXDS target, int sourceDim[],
int targetDim[], int targetDimCount, int dimNo,
int start, int end, int currentDim){
int i, length;
double val, sumVal;
/*
when we have recursed through all dimensions
we actually do the sums...
*/
if(currentDim == source->rank){
length = end - start;
sumVal = getNXDatasetValue(target, targetDim);
for(i = 0; i < length; i++){
sourceDim[dimNo] = start + i;
val = getNXDatasetValue(source,sourceDim);
sumVal += val;
}
putNXDatasetValue(target, targetDim, sumVal);
} else {
/*
jump over the summed dimension while recursing
through the dimensions
*/
if(currentDim == dimNo){
sumData(source,target,sourceDim,
targetDim,targetDimCount,
dimNo,start,end,currentDim+1);
} else {
/*
loop over all values of the non summed dimension
*/
for(i = 0; i < source->dim[currentDim]; i++){
/*
the problem here is that we have to jump over the summed
dimension here. This why we have to maintain a separate
dimension count for the target array. Jumping is done
above.
*/
targetDim[targetDimCount] = i;
targetDimCount++;
sourceDim[currentDim] = i;
sumData(source,target,sourceDim,targetDim,targetDimCount,
dimNo,start,end,currentDim+1);
targetDimCount--;
}
}
}
}
/*-----------------------------------------------------------------------*/
pNXDS sumNXDataset(pNXDS source, int dimNo, int start, int end){
int newDim[NX_MAXRANK], targetDim[NX_MAXRANK], sourceDim[NX_MAXRANK];
pNXDS result = NULL;
int i, count;
if(dimNo < 0 || dimNo > source->rank-1) {
fprintf(stderr,"ERROR: invalid dimension for summing requested");
return NULL;
}
/*
make result dataset with missing summed dimension
*/
for(i = 0, count = 0; i < source->rank; i++){
if(i != dimNo){
newDim[count] = source->dim[i];
count++;
}
}
result = createNXDataset(source->rank-1, source->type, newDim);
if(result == NULL){
fprintf(stderr,"ERROR: out of memory creating result dataset");
return NULL;
}
sumData(source,result,sourceDim,targetDim,0,
dimNo, start, end, 0);
return result;
}

View File

@ -71,4 +71,7 @@ char *getNXDatasetText(pNXDS dataset);
int putNXDatasetValue(pNXDS dataset, int pos[], double value); int putNXDatasetValue(pNXDS dataset, int pos[], double value);
int putNXDatasetValueAt(pNXDS dataset, int address, double value); int putNXDatasetValueAt(pNXDS dataset, int address, double value);
pNXDS cutNXDataset(pNXDS source, int start[], int end[]);
pNXDS sumNXDataset(pNXDS source, int dimNo, int start, int end);
#endif #endif

View File

@ -13,7 +13,7 @@
#include <splitter.h> #include <splitter.h>
#include "polldriv.h" #include "polldriv.h"
#include "splitter.h" #include "macro.h"
#include "sicshipadaba.h" #include "sicshipadaba.h"
/*================ actual driver implementation =========================*/ /*================ actual driver implementation =========================*/
static int timeDue(struct __POLLDRIV *self, time_t now, SConnection *pCon){ static int timeDue(struct __POLLDRIV *self, time_t now, SConnection *pCon){
@ -73,6 +73,58 @@ static pPollDriv makeHdbDriver(SConnection *pCon, char *objectIdentifier,
pNew->pollIntervall = 10; pNew->pollIntervall = 10;
} }
return pNew;
}
/*==================== script poll driver ========================*/
static int pollScript(struct __POLLDRIV *self, SConnection *pCon){
int status;
Tcl_Interp *pTcl = InterpGetTcl(pServ->pSics);
self->nextPoll = time(NULL) + self->pollIntervall;
MacroPush(pCon);
status = Tcl_Eval(pTcl,(char *)self->objPointer);
MacroPop();
if(status == 0){
return 1;
} else {
return 0;
}
}
/*-----------------------------------------------------------------------*/
static void killScriptObj(void *data){
if(data != NULL){
free(data);
}
}
/*-----------------------------------------------------------------------*/
static pPollDriv makeScriptDriver(SConnection *pCon, char *objectIdentifier,
int argc, char *argv[]){
pPollDriv pNew = NULL;
char scriptBuffer[512];
if(argc < 2){
SCWrite(pCon,
"ERROR: need intervall and script parameter for script polling driver", eError);
return NULL;
}
pNew = malloc(sizeof(PollDriv));
if(pNew == NULL){
return NULL;
}
memset(pNew,0,sizeof(PollDriv));
pNew->pollIntervall = atoi(argv[0]);
memset(scriptBuffer,0,512);
Arg2Text(argc-1, &argv[1],scriptBuffer,511);
pNew->objectIdentifier = strdup(objectIdentifier);
pNew->objPointer = strdup(scriptBuffer);
pNew->isDue = timeDue;
pNew->poll = pollScript;
pNew->killObjPointer = killScriptObj;
return pNew; return pNew;
} }
/*================ external interface ====================================*/ /*================ external interface ====================================*/
@ -81,7 +133,9 @@ pPollDriv makePollDriver(SConnection *pCon, char *driver,
strtolower(driver); strtolower(driver);
if(strcmp(driver,"hdb") == 0) { if(strcmp(driver,"hdb") == 0) {
return makeHdbDriver(pCon,objectIdentifier, argc, argv); return makeHdbDriver(pCon,objectIdentifier, argc, argv);
} else if(strcmp(driver,"script") == 0){
return makeScriptDriver(pCon,objectIdentifier, argc, argv);
} else { } else {
SCWrite(pCon,"ERROR: polling driver type unknown",eError); SCWrite(pCon,"ERROR: polling driver type unknown",eError);
return NULL; return NULL;
@ -92,5 +146,8 @@ void deletePollDriv(pPollDriv self){
if(self->objectIdentifier != NULL){ if(self->objectIdentifier != NULL){
free(self->objectIdentifier); free(self->objectIdentifier);
} }
if(self->objPointer != NULL && self->killObjPointer != NULL){
self->killObjPointer(self->objPointer);
}
free(self); free(self);
} }

View File

@ -20,6 +20,8 @@ typedef struct __POLLDRIV{
/* function called to determine if this object must be polled */ /* function called to determine if this object must be polled */
int (*poll)(struct __POLLDRIV *self, SConnection *pCon); int (*poll)(struct __POLLDRIV *self, SConnection *pCon);
/* the actual polling function */ /* the actual polling function */
void (*killObjPointer)(void *data);
/* a function to possibly kill the objPointer. Can be NULL */
}PollDriv, *pPollDriv; }PollDriv, *pPollDriv;
/*==================== the interface =====================================*/ /*==================== the interface =====================================*/
/* /*

View File

@ -11,6 +11,9 @@
#include "sicshipadaba.h" #include "sicshipadaba.h"
#include "dynstring.h" #include "dynstring.h"
#include "devser.h" #include "devser.h"
#include "ascon.h"
#include "macro.h"
#define MAX_HDB_PATH 1024 #define MAX_HDB_PATH 1024
@ -128,12 +131,18 @@ static char *GetProp(Hdb *node, Hdb *cNode, char *key) {
return val; return val;
} }
/*
* This is the actual sct command available in scripts.
*/
int SctCommand(SConnection *con, SicsInterp *sics, void *object, int SctCommand(SConnection *con, SicsInterp *sics, void *object,
int argc, char *argv[]) { int argc, char *argv[]) {
static char value[1024]; static char value[1024];
char *val; char *val;
char error[512];
Hdb *node = sct->nodes->node; Hdb *node = sct->nodes->node;
Hdb *cNode = sct->nodes->controllerNode; Hdb *cNode = sct->nodes->controllerNode;
hdbValue v;
double dtime;
assert(sct == object); assert(sct == object);
if (node == NULL && cNode == NULL) { if (node == NULL && cNode == NULL) {
@ -146,6 +155,49 @@ int SctCommand(SConnection *con, SicsInterp *sics, void *object,
SCWrite(con, value, eValue); SCWrite(con, value, eValue);
return 1; return 1;
} }
/*
* update command
*/
if(strcmp(argv[1],"update") == 0){
cloneHdbValue(&node->value, &v);
Arg2Text(argc-2, argv+2, value, sizeof value);
if(!readHdbValue(&v, value, error, 512)){
SCWrite(con, error, eError);
return 0;
}
UpdateHipadabaPar(node,v,con);
SetHdbProperty(node,"geterror", NULL);
return 1;
}
/*
* print
*/
if(strcmp(argv[1],"print") == 0){
Arg2Text(argc-2, argv+2, value, sizeof value);
SCWrite(con,value,eWarning);
return 1;
}
/*
* time stamping
*/
if(strcmp(argv[1],"utime") == 0){
if(argc < 3){
SCWrite(con,"ERROR: need property to write time stamp too",
eError);
return 0;
}
dtime = DoubleTime();
snprintf(value,1024,"%ld",(long)dtime);
SetHdbProperty(node,argv[2], value);
return 1;
}
/*
* property handling
*/
if (argc == 2) { /* get case */ if (argc == 2) { /* get case */
val = GetProp(node, cNode, argv[1]); val = GetProp(node, cNode, argv[1]);
if (val == NULL) { if (val == NULL) {
@ -154,9 +206,9 @@ int SctCommand(SConnection *con, SicsInterp *sics, void *object,
} }
SCWrite(con, val, eValue); SCWrite(con, val, eValue);
} else { /* set case */ } else { /* set case */
val = Arg2Tcl(argc-2, argv+2, value, sizeof value); val = Arg2Tcl(argc-2, argv+2, value, sizeof value);
SetProp(node, cNode, argv[1], val); SetProp(node, cNode, argv[1], val);
if (val != NULL && val != value) free(val); if (val != NULL && val != value) free(val);
} }
return 1; return 1;
} }
@ -174,6 +226,7 @@ int SctCallInContext(SConnection *con, char *script, Hdb *node,
SCPrintf(con, eInError, "\nscript: %s\n", script); SCPrintf(con, eInError, "\nscript: %s\n", script);
} }
MacroPush(con);
l = strlen(script); l = strlen(script);
ret = Tcl_EvalEx(pTcl, script, l, 0); ret = Tcl_EvalEx(pTcl, script, l, 0);
result = (char *)Tcl_GetStringResult(pTcl); result = (char *)Tcl_GetStringResult(pTcl);
@ -185,7 +238,7 @@ int SctCallInContext(SConnection *con, char *script, Hdb *node,
} }
*resPtr = result; *resPtr = result;
PopContext(); MacroPop();
PopContext(); PopContext();
return iRet; return iRet;
} }
@ -359,19 +412,21 @@ static hdbCallbackReturn SctActionCallback(Hdb *node, void *userData,
mm = GetHdbSetMessage(msg); mm = GetHdbSetMessage(msg);
if (mm != NULL && data->writable) { if (mm != NULL && data->writable) {
con = mm->callData; con = mm->callData;
/* set target value */
text = formatValue(*(mm->v), node);
SetHdbProperty(node, "target", GetCharArray(text));
/* call check script, if available */ /* call check script, if available */
script = GetProp(node, data->controller->node, "check"); script = GetProp(node, data->controller->node, "check");
if (script != NULL) { if (script != NULL) {
if (SctCallInContext(con, script, node, data->controller, &error) == 0) { if (SctCallInContext(con, script, node, data->controller, &error) == 0) {
SCPrintf(con, eError, "ERROR: %s", error); SCPrintf(con, eError, "ERROR: %s", error);
SetHdbProperty(node,"target", NULL);
return hdbAbort; return hdbAbort;
} }
} }
/* set target value */
text = formatValue(*(mm->v), node);
SetHdbProperty(node, "target", GetCharArray(text));
/* enqueue write action */ /* enqueue write action */
writeprio = GetProp(node, data->controller->node, "writeprio"); writeprio = GetProp(node, data->controller->node, "writeprio");
@ -494,6 +549,7 @@ static int SctPollCmd(pSICSOBJ ccmd, SConnection *con,
SCPrintf(con, eError, "ERROR: %s not found", path); SCPrintf(con, eError, "ERROR: %s not found", path);
return 0; return 0;
} }
SetHdbProperty(node,"geterror","Not read yet");
interval = ParValue(cmdNode, "interval"); interval = ParValue(cmdNode, "interval");
prio = DevText2Prio(ParText(cmdNode, "prio")); prio = DevText2Prio(ParText(cmdNode, "prio"));
action = ParText(cmdNode, "action"); action = ParText(cmdNode, "action");
@ -505,6 +561,36 @@ static int SctPollCmd(pSICSOBJ ccmd, SConnection *con,
return 1; return 1;
} }
static int SctConnectCmd(pSICSOBJ ccmd, SConnection *con,
Hdb *cmdNode, Hdb *par[], int nPar) {
Hdb *node;
SctController *controller;
char *path;
hdbCallback *cb;
if(nPar < 1){
SCPrintf(con,eError,
"ERROR: should be: %s connect <node> ",
ccmd->objectNode->name);
return 0;
}
controller = ccmd->pPrivate;
path = ParText(cmdNode, "node");
node = FindHdbNode(NULL, path, con);
if (node == NULL) {
SCPrintf(con, eError, "ERROR: %s not found", path);
return 0;
}
if (! FindHdbCallbackData(node, controller)) {
cb = MakeHipadabaCallback(SctMainCallback, controller, NULL);
assert(cb);
AppendHipadabaCallback(node, cb);
}
SCSendOK(con);
return 1;
}
int SctAddWriteNode(SctController *controller, Hdb *node) { int SctAddWriteNode(SctController *controller, Hdb *node) {
hdbCallback *cb; hdbCallback *cb;
SctData *data; SctData *data;
@ -619,6 +705,87 @@ static int SctQueueCmd(pSICSOBJ ccmd, SConnection *con,
return 1; return 1;
} }
typedef struct SctTransact {
char *command;
int sent;
SConnection *con;
}SctTransact, *pSctTransact;
static void KillSctTransact(void *data){
pSctTransact self = (pSctTransact)data;
if(self == NULL){
return;
}
if(self->command){
free(self->command);
}
free(self);
}
static char *TransactionHandler(void *actionData, char *lastReply){
pSctTransact st = (pSctTransact)actionData;
if(st->sent == 0){
st->sent = 1;
return st->command;
} else {
st->sent = 2;
SCWrite(st->con,lastReply, eValue);
return NULL;
}
}
static int SctTransactMatch(void *d1, void *d2){
return d1 == d2;
}
static int SctTransactCmd(pSICSOBJ ccmd, SConnection *con,
Hdb *cmdNode, Hdb *par[], int nPar) {
pSctTransact st = NULL;
SctController *c;
c = (SctController *)ccmd->pPrivate;
st = calloc(sizeof(SctTransact),1);
if(st == NULL){
SCWrite(con,"ERROR: out of memory in SctTransactCommand", eError);
return 0;
}
st->con = con;
st->command = strdup(par[0]->value.v.text);
DevQueue(c->devser, st, WritePRIO,
TransactionHandler, SctTransactMatch, NULL);
while(st->sent != 2){
TaskYield(pServ->pTasker);
if(SCGetInterrupt(con) != eContinue){
break;
}
}
KillSctTransact(st);
return 1;
}
static int SctQueueComCmd(pSICSOBJ ccmd, SConnection *con,
Hdb *cmdNode, Hdb *par[], int nPar) {
pSctTransact st = NULL;
SctController *c;
c = (SctController *)ccmd->pPrivate;
st = calloc(sizeof(SctTransact),1);
if(st == NULL){
SCWrite(con,"ERROR: out of memory in SctTransactCommand", eError);
return 0;
}
st->con = con;
st->command = strdup(par[0]->value.v.text);
DevQueue(c->devser, st, WritePRIO,
TransactionHandler, SctTransactMatch, KillSctTransact);
return 1;
}
static hdbCallbackReturn SctDebugCallback(Hdb *node, void *userData, static hdbCallbackReturn SctDebugCallback(Hdb *node, void *userData,
hdbMessage *msg) { hdbMessage *msg) {
hdbDataMessage *mm; hdbDataMessage *mm;
@ -648,7 +815,7 @@ static void SctKillController(void *c) {
CleanStack(controller->node); CleanStack(controller->node);
RemoveSICSInternalCallback(controller); RemoveSICSInternalCallback(controller);
DevKill(controller->devser); /* devser is killed by task function */
} }
static int SctMakeController(SConnection *con, SicsInterp *sics, static int SctMakeController(SConnection *con, SicsInterp *sics,
@ -696,6 +863,10 @@ static int SctMakeController(SConnection *con, SicsInterp *sics,
AddSICSHdbPar(cmd, "interval", usMugger, MakeHdbFloat(5.0)); AddSICSHdbPar(cmd, "interval", usMugger, MakeHdbFloat(5.0));
AddSICSHdbPar(cmd, "prio", usMugger, MakeHdbText("read")); AddSICSHdbPar(cmd, "prio", usMugger, MakeHdbText("read"));
AddSICSHdbPar(cmd, "action", usMugger, MakeHdbText("read")); AddSICSHdbPar(cmd, "action", usMugger, MakeHdbText("read"));
cmd = AddSICSHdbPar(controller->node,
"connect", usMugger, MakeSICSFunc(SctConnectCmd));
AddSICSHdbPar(cmd, "node", usMugger, MakeHdbText(""));
cmd = AddSICSHdbPar(controller->node, cmd = AddSICSHdbPar(controller->node,
"write", usMugger, MakeSICSFunc(SctWriteCmd)); "write", usMugger, MakeSICSFunc(SctWriteCmd));
@ -708,6 +879,15 @@ static int SctMakeController(SConnection *con, SicsInterp *sics,
AddSICSHdbPar(cmd, "prio", usMugger, MakeHdbText("write")); AddSICSHdbPar(cmd, "prio", usMugger, MakeHdbText("write"));
AddSICSHdbPar(cmd, "action", usMugger, MakeHdbText("write")); AddSICSHdbPar(cmd, "action", usMugger, MakeHdbText("write"));
cmd = AddSICSHdbPar(controller->node,
"transact", usMugger, MakeSICSFunc(SctTransactCmd));
AddSICSHdbPar(cmd, "data", usMugger, MakeHdbText(""));
cmd = AddSICSHdbPar(controller->node,
"queuecom", usMugger, MakeSICSFunc(SctQueueComCmd));
AddSICSHdbPar(cmd, "data", usMugger, MakeHdbText(""));
par = AddSICSHdbPar(controller->node, "debug", usUser, MakeHdbInt(0)); par = AddSICSHdbPar(controller->node, "debug", usUser, MakeHdbInt(0));
cb = MakeHipadabaCallback(SctDebugCallback, controller, NULL); cb = MakeHipadabaCallback(SctDebugCallback, controller, NULL);
@ -738,6 +918,10 @@ void SctKill(void *object) {
sct = NULL; sct = NULL;
} }
/* from sctdriveadapter.c */
int SctMakeDriveAdapter(SConnection *pCon, SicsInterp *pSics, void *object,
int argc, char *argv[]);
void SctInit(void) { void SctInit(void) {
if (sct) return; if (sct) return;
sct = calloc(1, sizeof(*sct)); sct = calloc(1, sizeof(*sct));
@ -747,4 +931,5 @@ void SctInit(void) {
sct->base = sct->nodes; sct->base = sct->nodes;
AddCommand(pServ->pSics, "sct", SctCommand, SctKill, sct); AddCommand(pServ->pSics, "sct", SctCommand, SctKill, sct);
AddCmd("makesctcontroller", SctMakeController); AddCmd("makesctcontroller", SctMakeController);
AddCmd("makesctdrive", SctMakeDriveAdapter);
} }

266
sctdriveadapter.c Normal file
View File

@ -0,0 +1,266 @@
/**
* This is an adapter to a node under the control of the new
* scriptcontext generic device model. This is a wrapper around
* such a node which implements the drivable interface.
*
* Soem cooperation from the node is required: It has to provide
* certain properties the value of which define scripts which
* have to be called at various stages. These are:
*
* checklimits, for limits checking
* checkstatus, for evaluating progress
* halt , for halting things
*
* copyright: see file COPYRIGHT
*
* Mark Koennecke, June 2008
* --------------------------------------------------------------*/
#include <sics.h>
#include <sicshipadaba.h>
#include <devser.h>
#include <tcl.h>
#include <macro.h>
#include <sicsobj.h>
/*------------- Some things from scriptcontext.c ----------------*/
typedef struct SctController SctController;
typedef struct SctData SctData;
SctData *SctQueueNode(SctController *controller, pHdb node,
DevPrio prio, char *action);
int SctCallInContext(SConnection *con, char *script, Hdb *node,
SctController *controller, char **resPtr);
/*---------------------------------------------------------------*/
typedef struct {
pObjectDescriptor pDes;
pIDrivable pDriv;
pHdb node;
SctController *c;
}SctDrive, *pSctDrive;
/*---------------------------------------------------------------*/
static void *SCTDRIVGetInterface(void *data, int iD){
pSctDrive self = NULL;
self = (pSctDrive)data;
if(self != NULL && iD == DRIVEID){
return self->pDriv;
} else {
return NULL;
}
return NULL;
}
/*----------------------------------------------------------------
This routine can return either OKOK or HWFault when thing
go wrong. However, the return value of Halt is usually ignored!
------------------------------------------------------------------*/
static int SCTDRIVHalt(void *data) {
pSctDrive self = NULL;
self = (pSctDrive)data;
SctQueueNode(self->c, self->node, HaltPRIO, "halt");
/*
* SctQueueNode returns a dynamically allocated SctData
* structure. I am not sure if this is not really a memory
* leak
*/
return OKOK;
}
/*----------------------------------------------------------------
This routine can return either 1 or 0. 1 means the position can
be reached, 0 NOT
If 0, error shall contain up to errlen characters of information
about which limit was violated
------------------------------------------------------------------*/
static int SCTDRIVCheckLimits(void *data, float val,
char *error, int errlen){
pSctDrive self = NULL;
char script[1024];
int status;
Tcl_Interp *pTcl = NULL;
char *result;
self = (pSctDrive)data;
snprintf(script,1024,"%f", val);
SetHdbProperty(self->node,"target", script);
if(GetHdbProperty(self->node,"checklimits",script,1024)){
status = SctCallInContext(pServ->dummyCon, script,
self->node, self->c, &result);
if(status == 0){
strncpy(error,result,errlen);
}
}
return 1;
}
/*----------------------------------------------------------------
This routine can return 0 when a limit problem occurred
OKOK when the motor was successfully started
HWFault when a problem occured starting the device
Possible errors shall be printed to pCon
For real motors, this is supposed to try at least three times
to start the motor in question
val is the value to drive the motor too
------------------------------------------------------------------*/
static long SCTDRIVSetValue(void *data, SConnection *pCon, float val){
pSctDrive self = NULL;
int status;
hdbValue v;
self = (pSctDrive)data;
v.dataType = HIPFLOAT;
v.v.doubleValue = (double)val;
status = SetHipadabaPar(self->node, v, pCon);
if(status == 1){
return OKOK;
} else {
return HWFault;
}
}
/*----------------------------------------------------------------
Checks the status of a running motor. Possible return values
HWBusy The motor is still running
OKOK or HWIdle when the motor finished driving
HWFault when a hardware problem ocurred
HWPosFault when the hardware cannot reach a position
Errors are duly to be printed to pCon
For real motors CheckStatus again shall try hard to fix any
issues with the motor
------------------------------------------------------------------*/
static int SCTDRIVCheckStatus(void *data, SConnection *pCon){
pSctDrive self = NULL;
char script[1024];
int status;
Tcl_Interp *pTcl = NULL;
char *result;
self = (pSctDrive)data;
if(GetHdbProperty(self->node,"checkstatus",script,1024)){
status = SctCallInContext(pCon,script, self->node,
self->c, &result);
if(status == 1){
if(strstr(result,"busy") != NULL){
return HWBusy;
} else if(strstr(result,"posfault") != NULL){
return HWPosFault;
} else if(strstr(result,"fault") != NULL){
return HWFault;
} else if(strstr(result,"idle") != NULL){
return HWIdle;
} else {
SCPrintf(pCon,eError,"ERROR: invalid status code %s returned from checkstatus script",
result);
return HWFault;
}
} else {
SCWrite(pCon,result, eError);
return HWFault;
}
} else {
SCWrite(pCon,
"ERROR: configuration problem: no checkstatus script!", eError);
return HWFault;
}
return HWFault;
}
/*----------------------------------------------------------------
GetValue is supposed to read a motor position
On errors, -99999999.99 is returned and messages printed to pCon
------------------------------------------------------------------*/
static float SCTDRIVGetValue(void *data, SConnection *pCon){
pSctDrive self = NULL;
float val = -99999999.99;
int status;
char error[256];
hdbValue v;
self = (pSctDrive)data;
if(GetHdbProperty(self->node,"geterror", error, 256)){
SCWrite(pCon,error, eError);
return val;
}
return (float)self->node->value.v.doubleValue;
}
/*----------------------------------------------------------------
returns NULL on failure, a new datastructure else
------------------------------------------------------------------*/
static pSctDrive SCTDRIVMakeObject(){
pSctDrive self = NULL;
self = calloc(sizeof(SctDrive),1);
if(self == NULL){
return NULL;
}
self->pDes = CreateDescriptor("SctDriveAdapter");
self->pDriv = CreateDrivableInterface();
if(self->pDes == NULL || self->pDriv == NULL){
free(self);
return NULL;
}
self->pDes->GetInterface = SCTDRIVGetInterface;
self->pDriv->Halt = SCTDRIVHalt;
self->pDriv->CheckLimits = SCTDRIVCheckLimits;
self->pDriv->SetValue = SCTDRIVSetValue;
self->pDriv->CheckStatus = SCTDRIVCheckStatus;
self->pDriv->GetValue = SCTDRIVGetValue;
return self;
}
/*-----------------------------------------------------------------*/
static int SctDriveCommand(SConnection *pCon, SicsInterp *sics, void *object,
int argc, char *argv[]) {
pSctDrive self = (pSctDrive)object;
float val;
assert(self != NULL);
/*
* only action: print value
*/
val = self->pDriv->GetValue(self,pCon);
SCPrintf(pCon,eValue,"%s = %f", argv[0], val);
return 1;
}
/*----------------------------------------------------------------*/
static void SctDriveKill(void *data){
pSctDrive self = (pSctDrive)data;
if(self == NULL){
return;
}
if(self->pDriv != NULL){
free(self->pDriv);
}
if(self->pDes != NULL){
DeleteDescriptor(self->pDes);
}
free(self);
}
/*---------------------------------------------------------------*/
int SctMakeDriveAdapter(SConnection *pCon, SicsInterp *pSics, void *object,
int argc, char *argv[]) {
pSctDrive pNew = NULL;
pSICSOBJ obj = NULL;
pNew = SCTDRIVMakeObject();
if(pNew == NULL){
SCWrite(pCon,"ERROR: out of memory in SctmakeDriveAdapter",
eError);
return 0;
}
if(argc < 4){
SCWrite(pCon,"ERROR: not enough arguments for SctMakeDriveAdapter", eError);
return 0;
}
pNew->node = FindHdbNode(NULL,argv[2], pCon);
obj = FindCommandData(pSics,argv[3], "SctController");
if(pNew->node == NULL || obj == NULL){
SCWrite(pCon,"ERROR: node or controller not found", eError);
SctDriveKill(pNew);
return 0;
}
pNew->c =(SctController *)obj->pPrivate;
AddCommand(pSics, argv[1], SctDriveCommand, SctDriveKill, pNew);
SetHdbProperty(pNew->node,"sicsdev",argv[1]);
return 1;
}

View File

@ -577,8 +577,7 @@ static int copyTimeBin(pSICSData self, int argc, char *argv[],
return 0; return 0;
} }
for(i = 0; i < noTimeBin; i++){ for(i = 0; i < noTimeBin; i++){
memcpy(iData + pos + i, fTimeBin + i, sizeof(float)); setSICSDataInt(self,pos+i,(int)(fTimeBin[i]));
self->dataType[pos+i] = FLOATTYPE;
} }
SCSendOK(pCon); SCSendOK(pCon);
return 1; return 1;

View File

@ -20,6 +20,8 @@
#include "stptok.h" #include "stptok.h"
#include "motor.h" #include "motor.h"
#include "HistMem.h" #include "HistMem.h"
#include "HistMem.i"
#include "HistDriv.i"
#include "sicsvar.h" #include "sicsvar.h"
#include "counter.h" #include "counter.h"
#include "lld.h" #include "lld.h"
@ -770,3 +772,52 @@ int SICSHdbAdapter(SConnection *pCon, SicsInterp *pSics, void *pData,
SCWrite(pCon,buffer,eError); SCWrite(pCon,buffer,eError);
return 0; return 0;
} }
/*====================== SubSample =========================================*/
int HdbSubSample(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[]){
pHistMem pHM = NULL;
pHdb node = NULL;
int bank = 0, length = -1, status;
HistInt *data = NULL;
char *pPtr = NULL;
hdbValue v;
if(argc < 4){
SCWrite(pCon,"ERROR: insufficient number of arguments to HdbSubSample",
eError);
return 0;
}
pPtr = strchr(argv[1],':');
if(pPtr != NULL){
*pPtr = '\0';
pPtr++;
sscanf(pPtr,"%d",&bank);
}
pHM = (pHistMem)FindCommandData(pSics,argv[1],"HistMem");
node = FindHdbNode(NULL,argv[2], pCon);
if(pHM == NULL || node == NULL){
SCWrite(pCon,"ERROR: either histogram memory or node not found!",
eError);
return 0;
}
if(pHM->pDriv->SubSample == NULL){
SCWrite(pCon,"ERROR: hm does not support subsampling", eError);
return 0;
}
data = pHM->pDriv->SubSample(pHM->pDriv, pCon, bank, argv[3]);
if(data == NULL){
SCWrite(pCon,"ERROR: sub sampling failed", eError);
return 0;
}
v.dataType = HIPINTVARAR;
v.arrayLength = data[0];
v.v.intArray = data+1;
UpdateHipadabaPar(node,v,pCon);
free(data);
SCSendOK(pCon);
return 1;
}

View File

@ -19,5 +19,7 @@
int SICSHdbAdapter(SConnection *pCon, SicsInterp *pSics, void *pData, int SICSHdbAdapter(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[]); int argc, char *argv[]);
int HdbSubSample(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[]);
#endif /*SICSHDBADAPTER_H_*/ #endif /*SICSHDBADAPTER_H_*/

View File

@ -268,8 +268,8 @@ static hdbCallbackReturn CommandGetCallback(pHdb node, void *userData,
return hdbContinue; return hdbContinue;
} }
hdbValue v2 = MakeHdbText("Nothing to get"); hdbValue v2 = MakeHdbText(strdup("Nothing to get"));
copyHdbValue(&v2, mm->v); /* MakeHdbText makes no strdup ! */ copyHdbValue(&v2, mm->v);
return hdbContinue; return hdbContinue;
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/

View File

@ -715,6 +715,17 @@ static hdbCallbackReturn SICSScriptReadCallback(pHdb node, void *userData,
} }
return hdbAbort; return hdbAbort;
} }
/*
* do we need to copy?
*/
if(strstr(data,"@@NOCOPY@@") != NULL){
return hdbContinue;
}
/*
* we need to copy: do it
*/
equal = strchr(data,'='); equal = strchr(data,'=');
if(equal != NULL){ if(equal != NULL){
data = equal + 1; data = equal + 1;
@ -1412,7 +1423,7 @@ void RemoveSICSInternalCallback(void *internalID) {
m.type = killPtr; m.type = killPtr;
m.pPtr = internalID; m.pPtr = internalID;
RecurseCallbackChains(GetHipadabaRoot(),(pHdbMessage)&m); RecurseCallbackChains(GetHipadabaRoot(),(pHdbMessage)&m);
ForEachCommand(RemoveParNodeCallback, internalID); ForEachCommand(RemoveParNodeCallback, internalID);
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
int SICSHdbGetPar(void *obj, SConnection *pCon, char *path, hdbValue *v){ int SICSHdbGetPar(void *obj, SConnection *pCon, char *path, hdbValue *v){
@ -2951,7 +2962,25 @@ static int SetSICSHdbProperty(SConnection *pCon, SicsInterp *pSics, void *pData,
SCSendOK(pCon); SCSendOK(pCon);
return 1; return 1;
} }
/*--------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------*/
static int DelSICSHdbProperty(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[]){
pHdb targetNode = NULL;
if(argc < 3) {
SCWrite(pCon,"ERROR: need path key as parameters",eError);
return 0;
}
targetNode = FindHdbNode(NULL,argv[1],pCon);
if(targetNode == NULL){
SCWrite(pCon,"ERROR: node not found",eError);
return 0;
}
SetHdbProperty(targetNode,argv[2], NULL);
SCSendOK(pCon);
return 1;
}
/*--------------------------------------------------------------------------*/
static int GetSICSHdbProperty(SConnection *pCon, SicsInterp *pSics, void *pData, static int GetSICSHdbProperty(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[]){ int argc, char *argv[]){
pHdb targetNode = NULL; pHdb targetNode = NULL;
@ -3106,6 +3135,7 @@ int InstallSICSHipadaba(SConnection *pCon, SicsInterp *pSics, void *pData,
AddCommand(pSics,"hfactory", HdbNodeFactory, NULL, NULL); AddCommand(pSics,"hfactory", HdbNodeFactory, NULL, NULL);
AddCommand(pSics,"hmakescript", MakeHdbScriptNode, NULL, NULL); AddCommand(pSics,"hmakescript", MakeHdbScriptNode, NULL, NULL);
AddCommand(pSics,"hattach", SICSHdbAdapter, NULL, NULL); AddCommand(pSics,"hattach", SICSHdbAdapter, NULL, NULL);
AddCommand(pSics,"hsubsamplehm", HdbSubSample, NULL, NULL);
AddCommand(pSics,"hdel", DeleteHdbNode, NULL, NULL); AddCommand(pSics,"hdel", DeleteHdbNode, NULL, NULL);
AddCommand(pSics,"hset", SetHdbNode, NULL, NULL); AddCommand(pSics,"hset", SetHdbNode, NULL, NULL);
AddCommand(pSics,"hupdate", UpdateHdbNode, NULL, NULL); AddCommand(pSics,"hupdate", UpdateHdbNode, NULL, NULL);
@ -3121,6 +3151,7 @@ int InstallSICSHipadaba(SConnection *pCon, SicsInterp *pSics, void *pData,
AddCommand(pSics,"hchain", ChainHdbNode, NULL, NULL); AddCommand(pSics,"hchain", ChainHdbNode, NULL, NULL);
AddCommand(pSics,"hcommand",SicsCommandNode, NULL, NULL); AddCommand(pSics,"hcommand",SicsCommandNode, NULL, NULL);
AddCommand(pSics,"hsetprop",SetSICSHdbProperty, NULL, NULL); AddCommand(pSics,"hsetprop",SetSICSHdbProperty, NULL, NULL);
AddCommand(pSics,"hdelprop",DelSICSHdbProperty, NULL, NULL);
AddCommand(pSics,"hgetprop",GetSICSHdbProperty, NULL, NULL); AddCommand(pSics,"hgetprop",GetSICSHdbProperty, NULL, NULL);
AddCommand(pSics,"hgetpropval",GetSICSHdbPropertyVal, NULL, NULL); AddCommand(pSics,"hgetpropval",GetSICSHdbPropertyVal, NULL, NULL);
AddCommand(pSics,"hmatchprop",MatchHdbProperty, NULL, NULL); AddCommand(pSics,"hmatchprop",MatchHdbProperty, NULL, NULL);

View File

@ -57,13 +57,13 @@ void KillSICSOBJ(void *data){
if(self == NULL){ if(self == NULL){
return; return;
} }
if(self->KillPrivate != NULL && self->pPrivate != NULL){
self->KillPrivate(self->pPrivate);
}
RemoveHdbNodeFromParent(self->objectNode, pServ->dummyCon); RemoveHdbNodeFromParent(self->objectNode, pServ->dummyCon);
if(self->pDes != NULL){ if(self->pDes != NULL){
DeleteDescriptor(self->pDes); /* kill descriptor including node */ DeleteDescriptor(self->pDes); /* kill descriptor including node */
} }
if(self->KillPrivate != NULL && self->pPrivate != NULL){
self->KillPrivate(self->pPrivate);
}
free(self); free(self);
} }
/*===========================================================================*/ /*===========================================================================*/

View File

@ -229,7 +229,7 @@ int SICSPollWrapper(SConnection *pCon,SicsInterp *pSics, void *pData,
} }
driv = makePollDriver(pCon,argv[3], argv[2], driv = makePollDriver(pCon,argv[3], argv[2],
argc-3, &argv[4]); argc-4, &argv[4]);
if(driv != NULL){ if(driv != NULL){
LLDnodeAppend(self->pollList,&driv); LLDnodeAppend(self->pollList,&driv);
SCSendOK(pCon); SCSendOK(pCon);

View File

@ -210,7 +210,7 @@
assert(pUser); assert(pUser);
node = (pHdb)pUser; node = (pHdb)pUser;
v = MakeHdbText(pText[eCode]); v = MakeHdbText(strdup(pText[eCode]));
if(node != NULL && iEvent == VALUECHANGE){ if(node != NULL && iEvent == VALUECHANGE){
UpdateHipadabaPar(node,v,NULL); UpdateHipadabaPar(node,v,NULL);
} }

View File

@ -174,7 +174,7 @@
{ {
if(pResult == NULL) if(pResult == NULL)
{ {
return strlen(sVal.value); return strlen(sVal.value) + 1; /* for \0 */
} }
else else
{ {

755
val.lis
View File

@ -1,148 +1,611 @@
==23429== Memcheck, a memory error detector.
==23429== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
==23429== Using LibVEX rev 1658, a library for dynamic binary translation.
==23429== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
==23429== Using valgrind-3.2.1, a dynamic binary instrumentation framework.
==23429== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
==23429== For more details, rerun with: -v
==23429==
WARNING: Cannot log(Accepted dummy connection ) WARNING: Cannot log(Accepted dummy connection )
sim/topsi/morpheus.tcl:0>> ServerOption ReadTimeOut 10 sim/powder/hrpt.tcl:0>> ServerOption RedirectFile $loghome/stdhrpt
sim/topsi/morpheus.tcl:1>> ServerOption AcceptTimeOut 50 sim/powder/hrpt.tcl:1>> ServerOption ReadTimeOut 10
sim/topsi/morpheus.tcl:2>> ServerOption ReadUserPasswdTimeout 500000 sim/powder/hrpt.tcl:2>> ServerOption AcceptTimeOut 10
sim/topsi/morpheus.tcl:3>> ServerOption LogFileBaseName $loghome/morpheus sim/powder/hrpt.tcl:3>> ServerOption ReadUserPasswdTimeout 500000
sim/topsi/morpheus.tcl:4>> ServerOption TecsPort 9753 sim/powder/hrpt.tcl:4>> ServerOption LogFileBaseName "$loghome/hrptlog"
sim/topsi/morpheus.tcl:5>> ServerOption ServerPort 2911 sim/powder/hrpt.tcl:5>> ServerOption LogFileDir $loghome
sim/topsi/morpheus.tcl:6>> ServerOption InterruptPort 9709 sim/powder/hrpt.tcl:6>> ServerOption TecsPort 9753
sim/topsi/morpheus.tcl:7>> ServerOption statusfile $datahome/morpheusstatus.tcl sim/powder/hrpt.tcl:7>> ServerOption ServerPort 2911
sim/topsi/morpheus.tcl:8>> ServerOption TelnetPort 1301 sim/powder/hrpt.tcl:8>> ServerOption statusfile $datahome/hrptstatus.tcl
sim/topsi/morpheus.tcl:9>> ServerOption TelWord sicslogin sim/powder/hrpt.tcl:9>> ServerOption InterruptPort 3007
sim/topsi/morpheus.tcl:10>> ServerOption QuieckPort 2108 sim/powder/hrpt.tcl:10>> ServerOption TelnetPort 1301
sim/topsi/morpheus.tcl:11>> TokenInit connan sim/powder/hrpt.tcl:11>> ServerOption TelWord sicslogin
sim/topsi/morpheus.tcl:12>> ServerOption LogFileDir $loghome sim/powder/hrpt.tcl:12>> ServerOption QuieckPort 2108
sim/topsi/morpheus.tcl:13>> commandlog auto sim/powder/hrpt.tcl:13>> TokenInit connan
sim/topsi/morpheus.tcl:14>> ServerOption RedirectFile $loghome/mostdout sim/powder/hrpt.tcl:14>> SicsUser lnsmanager lnsSICSlns 1
sim/topsi/morpheus.tcl:15>> MakeDataNumber SicsDataNumber $datahome/DataNumber sim/powder/hrpt.tcl:15>> SicsUser Manager lnsSICSlns 1
sim/topsi/morpheus.tcl:16>> VarMake SicsDataPath Text Mugger sim/powder/hrpt.tcl:16>> SicsUser User 07lns1 2
sim/topsi/morpheus.tcl:17>> SicsDataPath $datahome/ sim/powder/hrpt.tcl:17>> SicsUser hrptuser 08lns1 2
sim/topsi/morpheus.tcl:18>> SicsDataPath lock sim/powder/hrpt.tcl:18>> SicsUser user 08lns1 2
sim/topsi/morpheus.tcl:19>> VarMake SicsDataPrefix Text Mugger sim/powder/hrpt.tcl:19>> SicsUser manager lnsSICSlns 1
sim/topsi/morpheus.tcl:20>> SicsDataPrefix lock sim/powder/hrpt.tcl:20>> ClientPut "Initialising Elephant"
sim/topsi/morpheus.tcl:21>> VarMake SicsDataPostFix Text Mugger Initialising Elephant
sim/topsi/morpheus.tcl:22>> SicsDataPostFix .dat sim/powder/hrpt.tcl:21>> ClientPut "Initialising Sample Table Motors"
sim/topsi/morpheus.tcl:23>> SicsDataPostFix lock Initialising Sample Table Motors
sim/topsi/morpheus.tcl:24>> SicsUser lnsmanager lnsSICSlns 1 sim/powder/hrpt.tcl:22>> SicsAlias MOMU A1
sim/topsi/morpheus.tcl:25>> SicsUser morpheususer 07lns1 2 sim/powder/hrpt.tcl:23>> SicsAlias SOM A3
sim/topsi/morpheus.tcl:26>> SicsUser mu 07lns1 2 sim/powder/hrpt.tcl:24>> SicsAlias SOM OM
sim/topsi/morpheus.tcl:27>> SicsUser User 07lns1 2 sim/powder/hrpt.tcl:25>> SicsAlias SOM OMEGA
sim/topsi/morpheus.tcl:28>> VarMake Instrument Text Internal sim/powder/hrpt.tcl:26>> SicsAlias STT A4
sim/topsi/morpheus.tcl:29>> VarMake sample Text User sim/powder/hrpt.tcl:27>> SicsAlias STT TH
sim/topsi/morpheus.tcl:30>> sample " " sim/powder/hrpt.tcl:28>> SicsAlias MOML B1
sim/topsi/morpheus.tcl:31>> VarMake Title Text User sim/powder/hrpt.tcl:29>> SicsAlias CEX1 A17
sim/topsi/morpheus.tcl:32>> Title "morpheus" sim/powder/hrpt.tcl:30>> SicsAlias CEX2 A18
sim/topsi/morpheus.tcl:33>> VarMake User Text User sim/powder/hrpt.tcl:31>> SicsAlias MTVU A12
sim/topsi/morpheus.tcl:34>> User "unknown" sim/powder/hrpt.tcl:32>> SicsAlias MTPU A13
sim/topsi/morpheus.tcl:35>> VarMake email Text User sim/powder/hrpt.tcl:33>> SicsAlias MGVU A14
sim/topsi/morpheus.tcl:36>> email "unknown" sim/powder/hrpt.tcl:34>> SicsAlias MGPU A15
sim/topsi/morpheus.tcl:37>> VarMake adress Text User sim/powder/hrpt.tcl:35>> SicsAlias MCVU A16
sim/topsi/morpheus.tcl:38>> adress "unknown" sim/powder/hrpt.tcl:36>> SicsAlias MEXZ A37
sim/topsi/morpheus.tcl:39>> VarMake fax Text User sim/powder/hrpt.tcl:37>> SicsAlias MTVL A22
sim/topsi/morpheus.tcl:40>> fax "unknown" sim/powder/hrpt.tcl:38>> SicsAlias MTPL A23
sim/topsi/morpheus.tcl:41>> VarMake phone Text User sim/powder/hrpt.tcl:39>> SicsAlias MGVL A24
sim/topsi/morpheus.tcl:42>> phone "unknown" sim/powder/hrpt.tcl:40>> SicsAlias MGPL A25
sim/topsi/morpheus.tcl:43>> VarMake BatchRoot text User sim/powder/hrpt.tcl:41>> SicsAlias MCVL A26
sim/topsi/morpheus.tcl:44>> VarMake lastscancommand Text User sim/powder/hrpt.tcl:42>> DefineAlias TT temperature
sim/topsi/morpheus.tcl:45>> lastscancommand "unknown scan" sim/powder/hrpt.tcl:43>> VarMake MTT Float User
sim/topsi/morpheus.tcl:46>> VarMake window Text User sim/powder/hrpt.tcl:44>> MTT 90.
sim/topsi/morpheus.tcl:47>> window 0:256:0:256 sim/powder/hrpt.tcl:45>> SicsAlias MTT A2
sim/topsi/morpheus.tcl:48>> Publish savemotorpar Mugger sim/powder/hrpt.tcl:46>> VarMake typename Text Mugger
sim/topsi/morpheus.tcl:49>> SicsAlias STH A3 sim/powder/hrpt.tcl:47>> typename Pyrolithic Graphite
sim/topsi/morpheus.tcl:50>> SicsAlias STH SOM sim/powder/hrpt.tcl:48>> VarMake radcol Text Mugger
sim/topsi/morpheus.tcl:51>> SicsAlias STH TH sim/powder/hrpt.tcl:49>> MakeConfigurableMotor D1W
sim/topsi/morpheus.tcl:52>> SicsAlias STH OM sim/powder/hrpt.tcl:50>> D1W drivescript widthscript
sim/topsi/morpheus.tcl:53>> SicsAlias STT A4 sim/powder/hrpt.tcl:51>> D1W readscript readwidth
sim/topsi/morpheus.tcl:54>> SicsAlias STT S2T sim/powder/hrpt.tcl:52>> ClientPut "Installing counters"
sim/topsi/morpheus.tcl:55>> SicsAlias STT TTH Installing counters
sim/topsi/morpheus.tcl:56>> SicsAlias STT 2T sim/powder/hrpt.tcl:53>> banana configure HistMode hrpt
sim/topsi/morpheus.tcl:57>> SicsAlias SCX SCH sim/powder/hrpt.tcl:54>> banana configure OverFlowMode reflect
sim/topsi/morpheus.tcl:58>> SicsAlias SCX CHI sim/powder/hrpt.tcl:55>> banana configure Rank 1
sim/topsi/morpheus.tcl:59>> SicsAlias SCY SPH sim/powder/hrpt.tcl:56>> banana configure dim0 1600
sim/topsi/morpheus.tcl:60>> SicsAlias SCY PHI sim/powder/hrpt.tcl:57>> banana configure BinWidth 4
sim/topsi/morpheus.tcl:61>> SicsAlias SCY ATX sim/powder/hrpt.tcl:58>> banana preset 100.
sim/topsi/morpheus.tcl:62>> SicsAlias PO1 POL sim/powder/hrpt.tcl:59>> banana CountMode Timer
sim/topsi/morpheus.tcl:63>> SicsAlias PO2 ANA sim/powder/hrpt.tcl:60>> banana configure HMComputer lnse03.psi.ch
sim/topsi/morpheus.tcl:64>> SicsAlias MTH A1 sim/powder/hrpt.tcl:61>> banana configure HMPort 2400
sim/topsi/morpheus.tcl:65>> SicsAlias MTH MOM sim/powder/hrpt.tcl:62>> banana configure Counter counter
sim/topsi/morpheus.tcl:66>> SicsAlias MTT A2 sim/powder/hrpt.tcl:63>> banana init
sim/topsi/morpheus.tcl:67>> SicsAlias MTT M2T Receive on port 0xABCB=43979, use multicast group="226.129.151.54" addr=INADDR_ANY
sim/topsi/morpheus.tcl:68>> SicsAlias MFV MCV sim/powder/hrpt.tcl:64>> VarMake SicsDataPath Text Internal
sim/topsi/morpheus.tcl:69>> MakeLin2Ang sttl utt sim/powder/hrpt.tcl:65>> SicsDataPath "$datahome/"
sim/topsi/morpheus.tcl:70>> sttl length 2110 sim/powder/hrpt.tcl:66>> SicsDataPath lock
sim/topsi/morpheus.tcl:71>> SicsAlias sttl u2t sim/powder/hrpt.tcl:67>> VarMake DetStepWidth Float Internal
sim/topsi/morpheus.tcl:72>> Publish motransfer Spy sim/powder/hrpt.tcl:68>> DetStepWidth 0.1
sim/topsi/morpheus.tcl:73>> MakeO2T O2T sth stt sim/powder/hrpt.tcl:69>> DetStepWidth lock
sim/topsi/morpheus.tcl:74>> MakeO2T O2TL sth sttl sim/powder/hrpt.tcl:70>> VarMake Instrument Text Internal
sim/topsi/morpheus.tcl:75>> MakeO2T O2U sth sttl sim/powder/hrpt.tcl:71>> Instrument lock
sim/topsi/morpheus.tcl:76>> MakeProxy ptt temperature float sim/powder/hrpt.tcl:72>> VarMake Title Text User
sim/topsi/morpheus.tcl:77>> ptt map upperlimit upperlimit float user sim/powder/hrpt.tcl:73>> VarMake User Text User
ERROR: not enough arguments to MapFunc sim/powder/hrpt.tcl:74>> VarMake Collimation Text User
sim/topsi/morpheus.tcl:78>> ptt map lowerlimit lowerlimit float user sim/powder/hrpt.tcl:75>> VarMake Sample Text User
ERROR: not enough arguments to MapFunc sim/powder/hrpt.tcl:76>> Sample Fischerit
sim/topsi/morpheus.tcl:79>> MakeScanCommand xxxscan counter $scripthome/morpheus.hdd \ sim/powder/hrpt.tcl:77>> VarMake comment1 Text User
$loghome/recover.bin sim/powder/hrpt.tcl:78>> VarMake comment2 Text User
sim/topsi/morpheus.tcl:80>> MakePeakCenter xxxscan sim/powder/hrpt.tcl:79>> VarMake comment3 Text User
sim/topsi/morpheus.tcl:81>> MakeOptimise opti counter sim/powder/hrpt.tcl:80>> VarMake starttime Text User
sim/topsi/morpheus.tcl:82>> SicsAlias drive dr sim/powder/hrpt.tcl:81>> starttime ""
sim/topsi/morpheus.tcl:83>> MakeHKL stt sth sch sph sim/powder/hrpt.tcl:82>> VarMake SicsDataPrefix Text Internal
sim/topsi/morpheus.tcl:84>> MakeHKLMot hkl sim/powder/hrpt.tcl:83>> SicsDataPrefix hrpt
sim/topsi/morpheus.tcl:85>> MakeUBCalc ubcalc hkl sim/powder/hrpt.tcl:84>> SicsDataPrefix lock
sim/topsi/morpheus.tcl:86>> MakeCone cone ubcalc sim/powder/hrpt.tcl:85>> MakeDataNumber SicsDataNumber $datahome/DataNumber
sim/topsi/morpheus.tcl:87>> hkl lambdavar lambda sim/powder/hrpt.tcl:86>> VarMake SicsDataPostFix Text Internal
sim/topsi/morpheus.tcl:88>> MakeXYTable table sim/powder/hrpt.tcl:87>> SicsDataPostFix ".hdf"
sim/topsi/morpheus.tcl:89>> MakeConfigurableMotor two sim/powder/hrpt.tcl:88>> SicsDataPostFix lock
sim/topsi/morpheus.tcl:90>> two drivescript twoscript sim/powder/hrpt.tcl:89>> VarMake Adress Text User
sim/topsi/morpheus.tcl:91>> fileeval $scripthome/morpheuscom.tcl sim/powder/hrpt.tcl:90>> VarMake phone Text User
ERROR: new SICSData not created due to name collision sim/powder/hrpt.tcl:91>> VarMake fax Text User
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:92>> hfactory /instrument plain spy none sim/powder/hrpt.tcl:92>> VarMake email Text User
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:93>> hsetprop /instrument type instrument sim/powder/hrpt.tcl:93>> VarMake sample_mur Float User
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:94>> hfactory /instrument/experiment/filemode script filemode filemode text sim/powder/hrpt.tcl:94>> VarMake BatchRoot Text User
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:95>> hsetprop /instrument/experiment/filemode values prehistoric,nexus,4circle,2circleub sim/powder/hrpt.tcl:95>> VarMake lambda Float User
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:96>> hfactory /instrument/monochromator plain spy none sim/powder/hrpt.tcl:96>> hfactory /instrument plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:97>> hsetprop /instrument/monochromator type part sim/powder/hrpt.tcl:97>> hsetprop /instrument type instrument
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:98>> hattach /instrument/monochromator lambda wavelength sim/powder/hrpt.tcl:98>> hmake /instrument/sinq spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:99>> hchain /instrument/monochromator/wavelength /instrument/monochromator/two_theta sim/powder/hrpt.tcl:99>> hfactory /instrument/sinq/counts plain internal int
ERROR: master /instrument/monochromator/wavelength not found sim/powder/hrpt.tcl:100>> hattach /instrument/sinq/counts counter 4
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:100>> hattach /instrument/monochromator mth theta sim/powder/hrpt.tcl:101>> hfactory /instrument/sinq/ring_current script "sinq ring" hdbReadOnly int
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:101>> hattach /instrument/monochromator mtt two_theta sim/powder/hrpt.tcl:102>> hfactory /instrument/sinq/sinq_current script "sinq beam" hdbReadOnly int
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:102>> hattach /instrument/monochromator mtx x_translation sim/powder/hrpt.tcl:103>> sicspoll add /instrument/sinq/ring_current hdb 5
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:103>> hattach /instrument/monochromator mty y_translation sim/powder/hrpt.tcl:104>> sicspoll add /instrument/sinq/beam_current hdb 5
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:104>> hattach /instrument/monochromator mfv vertical_focusing ERROR: node /instrument/sinq/beam_current not found
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:105>> hsetprop /instrument/slit1/upper sicsdev d1t ERROR: object to poll not found
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:106>> hsetprop /instrument/slit1/bottom sicsdev d1b sim/powder/hrpt.tcl:105>> hfactory $path plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:107>> hsetprop /instrument/slit2/upper sicsdev d2t sim/powder/hrpt.tcl:106>> hattach $path cex1 drum1
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:108>> hsetprop /instrument/slit2/bottom sicsdev d2b sim/powder/hrpt.tcl:107>> hattach $path cex2 drum2
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:109>> hfactory /instrument/sample plain spy none sim/powder/hrpt.tcl:108>> hfactory $path plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:110>> hsetprop /instrument/sample type part sim/powder/hrpt.tcl:109>> hfactory $path/upper plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:111>> hattach /instrument/sample sample name sim/powder/hrpt.tcl:110>> hfactory $path/lower plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:112>> hattach /instrument/sample sth omega sim/powder/hrpt.tcl:111>> hattach $path/upper mtvu vertical_translation
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:113>> hattach /instrument/sample stt two_theta sim/powder/hrpt.tcl:112>> hattach $path/upper mtpu paralell_translation
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:114>> hattach /instrument/sample stx x_translation sim/powder/hrpt.tcl:113>> hattach $path/upper mgvu vertical_tilt
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:115>> hattach /instrument/sample sty y_translation sim/powder/hrpt.tcl:114>> hattach $path/upper mgpu paralell_tilt
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:116>> hattach /instrument/sample sgy y_goniometer sim/powder/hrpt.tcl:115>> hattach $path/upper momu omega
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:117>> hattach /instrument/sample sgx x_goniometer sim/powder/hrpt.tcl:116>> hattach $path/lower mtvl vertical_translation
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:118>> hattach /imstrument/sample scx chi sim/powder/hrpt.tcl:117>> hattach $path/lower mtpl paralell_translation
ERROR: path to attach object too not found sim/powder/hrpt.tcl:118>> hattach $path/lower mgvl vertical_tilt
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:119>> hattach /imstrument/sample scy phi sim/powder/hrpt.tcl:119>> hattach $path/lower mgpl paralell_tilt
ERROR: path to attach object too not found sim/powder/hrpt.tcl:120>> hattach $path/lower moml omega
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:120>> hfactory /instrument/monitor plain spy none sim/powder/hrpt.tcl:121>> hattach $path mexz lift
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:121>> hsetprop /instrument/monitor type part sim/powder/hrpt.tcl:122>> hattach $path lambda wavelength
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:122>> hfactory /instrument/monitor/counts plain internal int sim/powder/hrpt.tcl:123>> hattach $path/lower mcvl curvature
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:123>> hattach /instrument/monitor/counts counter 1 sim/powder/hrpt.tcl:124>> hattach /instrument/slit d1w width
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:124>> hsetprop /instrument/monitor/counts priv internal sim/powder/hrpt.tcl:125>> hchain /instrument/slit/d1r /instrument/slit/width
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:125>> hsetprop /instrument/monitor/counts sicsdev counter ERROR: slave /instrument/slit/d1r not found
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:126>> hfactory /instrument/monitor/preset script "counter getpreset" "counter setpreset" float sim/powder/hrpt.tcl:126>> hfactory $path plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:127>> hfactory /instrument/monitor/countmode script "counter getmode" "counter setmode" text sim/powder/hrpt.tcl:127>> hattach $path sample name
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:128>> hfactory /instrument/counter plain spy none sim/powder/hrpt.tcl:128>> hattach $path som omega
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:129>> hsetprop /instrument/counter type part sim/powder/hrpt.tcl:129>> hfactory $path/monitor plain internal int
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:130>> hfactory /instrument/counter/counts plain internal int sim/powder/hrpt.tcl:130>> hattach $path/monitor counter 1
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:131>> hattach /instrument/counter/counts counter 0 sim/powder/hrpt.tcl:131>> hfactory $path/changer plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:132>> hsetprop /instrument/counter/counts priv internal sim/powder/hrpt.tcl:132>> hfactory $path/changer/rotation script sarot sarot text
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:133>> hfactory /graphics plain spy none sim/powder/hrpt.tcl:133>> hsetprop $path/changer/rotation values on,off
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:134>> hsetprop /graphics type graphset sim/powder/hrpt.tcl:134>> hattach $path/changer chpos position
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:135>> hfactory /instrument/commands plain spy none sim/powder/hrpt.tcl:135>> hfactory /instrument/radial_collimator plain spy none
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:136>> hsetprop /instrument/commands type commandset sim/powder/hrpt.tcl:136>> hfactory /instrument/radial_collimator/status script radial hdbradial text
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:137>> hmake /quickview spy none sim/powder/hrpt.tcl:137>> hsetprop /instrument/radial_collimator values start,stop
/afs/psi.ch/user/k/koennecke/src/workspace/sics/sim/topsi/morpheuscom.tcl:138>> __filemode prehistoric sim/powder/hrpt.tcl:138>> sicspoll /instrument/radial_collimator/status hdb 60
sim/powder/hrpt.tcl:139>> hattach /instrument/radial_collimator radcol type
sim/powder/hrpt.tcl:140>> hfactory $path plain spy none
sim/powder/hrpt.tcl:141>> hattach $path stt two_theta
sim/powder/hrpt.tcl:142>> hfactory /instrument/detector/preset script "banana preset" hdbReadOnly float
sim/powder/hrpt.tcl:143>> hsetprop /instrument/detector/preset priv internal
sim/powder/hrpt.tcl:144>> hfactory /instrument/detector/countmode script "banana countmode" hdbReadOnly text
sim/powder/hrpt.tcl:145>> hsetprop /instrument/detector/countmode priv internal
sim/powder/hrpt.tcl:146>> sicspoll add /instrument/detector/preset hdb 30
sim/powder/hrpt.tcl:147>> sicspoll add /instrument/detector/countmode hdb 30
sim/powder/hrpt.tcl:148>> hfactory /instrument/detector/count_time plain internal float
sim/powder/hrpt.tcl:149>> hattach /instrument/detector/count_time counter -1
sim/powder/hrpt.tcl:150>> hfactory /instrument/commands plain spy none
sim/powder/hrpt.tcl:151>> hfactory /graphics plain spy none
sim/powder/hrpt.tcl:152>> hfactory /graphics/powder_diagram plain spy none
sim/powder/hrpt.tcl:153>> hattach /graphics/powder_diagram title title
sim/powder/hrpt.tcl:154>> hsetprop /graphics/powder_diagram type graphdata
sim/powder/hrpt.tcl:155>> hsetprop /graphics/powder_diagram viewer default
sim/powder/hrpt.tcl:156>> hfactory /graphics/powder_diagram/rank plain internal int
sim/powder/hrpt.tcl:157>> hset /graphics/powder_diagram/rank 1
sim/powder/hrpt.tcl:158>> hfactory /graphics/powder_diagram/dim plain internal intar 1
sim/powder/hrpt.tcl:159>> hset /graphics/powder_diagram/dim 1600
sim/powder/hrpt.tcl:160>> hfactory /graphics/powder_diagram/two_theta script maketwotheta hdbReadOnly floatar 1600
sim/powder/hrpt.tcl:161>> hchain /graphics/powder_diagram/two_theta /instrument/detector/two_theta
sim/powder/hrpt.tcl:162>> hsetprop /graphics/powder_diagram/two_theta type axis
sim/powder/hrpt.tcl:163>> hsetprop /graphics/powder_diagram/two_theta transfer zip
sim/powder/hrpt.tcl:164>> hsetprop /graphics/powder_diagram/two_theta dim 0
sim/powder/hrpt.tcl:165>> hattach /graphics/powder_diagram banana counts
sim/powder/hrpt.tcl:166>> hsetprop /graphics/powder_diagram/counts type data
sim/powder/hrpt.tcl:167>> hsetprop /graphics/powder_diagram/counts transfer zip
sim/powder/hrpt.tcl:168>> hsetprop /graphics/powder_diagram/counts priv internal
sim/powder/hrpt.tcl:169>> sicspoll add /graphics/powder_diagram/counts hdb 60
sim/powder/hrpt.tcl:170>> hfactory /quickview plain spy none
ERROR: duplicate exe manager not created
sim/powder/hrpt.tcl:171>> sicsdatafactory new hmdata
sim/powder/hrpt.tcl:172>> sicsdatafactory new effdata
sim/powder/hrpt.tcl:173>> MakeOscillator a3osc som
sim/powder/hrpt.tcl:174>> commandlog auto
sim/powder/hrpt.tcl:175>> MakeScanCommand xxxscan counter $scripthome/hrpt.hdd recover.bin
sim/powder/hrpt.tcl:176>> MakePeakCenter xxxscan
sim/powder/hrpt.tcl:177>> sicscron 10 backupCron $datahome/statusHistory
sim/powder/hrpt.tcl:178>> clientput "Finished initializing HRPT"
Finished initializing HRPT
OK OK
==23429== Invalid read of size 1
==23429== at 0x400630E: strcmp (mc_replace_strmem.c:341)
==23429== by 0x80FEED0: compareHdbValue (hipadaba.c:430)
==23429== by 0x8115EDC: pollHdb (polldriv.c:38)
==23429== by 0x81165EA: PollTask (sicspoll.c:135)
==23429== by 0x8058CEA: TaskSchedule (task.c:211)
==23429== by 0x80576F9: RunServer (nserver.c:406)
==23429== by 0x8057BFB: main (SICSmain.c:62)
==23429== Address 0x42B6E08 is 0 bytes inside a block of size 8 free'd
==23429== at 0x4004FDA: free (vg_replace_malloc.c:233)
==23429== by 0x8104291: readHdbValue (sicshipadaba.c:1829)
==23429== by 0x8101A71: SICSScriptReadCallback (sicshipadaba.c:734)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFD3B: GetHipadabaPar (hipadaba.c:895)
==23429== by 0x8115E89: pollHdb (polldriv.c:37)
==23429== by 0x81165EA: PollTask (sicspoll.c:135)
==23429== by 0x8058CEA: TaskSchedule (task.c:211)
==23429== by 0x80576F9: RunServer (nserver.c:406)
==23429== by 0x8057BFB: main (SICSmain.c:62)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0x8105700: HdbNodeInfo (sicshipadaba.c:2356)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x30DF60: (within /usr/lib/libtcl8.4.so)
==23429== by 0x311D9B: TclCompEvalObj (in /usr/lib/libtcl8.4.so)
==23429== by 0x33E86B: TclObjInterpProc (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x30DF60: (within /usr/lib/libtcl8.4.so)
==23429== by 0x311D9B: TclCompEvalObj (in /usr/lib/libtcl8.4.so)
==23429== by 0x33E86B: TclObjInterpProc (in /usr/lib/libtcl8.4.so)
==23429==
==23429== Invalid read of size 1
==23429== at 0x400632E: strcmp (mc_replace_strmem.c:341)
==23429== by 0x80FEED0: compareHdbValue (hipadaba.c:430)
==23429== by 0x8115EDC: pollHdb (polldriv.c:38)
==23429== by 0x81165EA: PollTask (sicspoll.c:135)
==23429== by 0x8058CEA: TaskSchedule (task.c:211)
==23429== by 0x80576F9: RunServer (nserver.c:406)
==23429== by 0x8057BFB: main (SICSmain.c:62)
==23429== Address 0x45BC419 is 1 bytes inside a block of size 7 free'd
==23429== at 0x4004FDA: free (vg_replace_malloc.c:233)
==23429== by 0x8104291: readHdbValue (sicshipadaba.c:1829)
==23429== by 0x8101A71: SICSScriptReadCallback (sicshipadaba.c:734)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFD3B: GetHipadabaPar (hipadaba.c:895)
==23429== by 0x8115E89: pollHdb (polldriv.c:37)
==23429== by 0x81165EA: PollTask (sicspoll.c:135)
==23429== by 0x8058CEA: TaskSchedule (task.c:211)
==23429== by 0x80576F9: RunServer (nserver.c:406)
==23429== by 0x8057BFB: main (SICSmain.c:62)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27CE9: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F511: SCWriteZipped (conman.c:1231)
==23429== by 0x8100C1B: sendZippedNodeData (sicshipadaba.c:414)
==23429== by 0x81051D8: ZipGetHdbNode (sicshipadaba.c:2229)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x80F7C2D: ContextDo (protocol.c:200)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x804FF53: SCInvoke (conman.c:1604)
==23429== by 0x8051333: SCTaskFunction (conman.c:2097)
==23429== by 0x8058CEA: TaskSchedule (task.c:211)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27CE9: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100C1B: sendZippedNodeData (sicshipadaba.c:414)
==23429== by 0x81051D8: ZipGetHdbNode (sicshipadaba.c:2229)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x80F7C2D: ContextDo (protocol.c:200)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x804FF53: SCInvoke (conman.c:1604)
==23429== by 0x8051333: SCTaskFunction (conman.c:2097)
==23429== by 0x8058CEA: TaskSchedule (task.c:211)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D70: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D82: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D91: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27DA3: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27DB2: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D3C: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D4F: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D61: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0xD25B91: compress2 (in /usr/lib/libz.so.1.2.3)
==23429== by 0x82B37D7: H5Z_filter_deflate (in /afs/psi.ch/user/k/koennecke/src/workspace/sics/SICServer)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D70: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F511: SCWriteZipped (conman.c:1231)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D70: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D82: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D91: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27DA3: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27DB2: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D3C: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D4F: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== Conditional jump or move depends on uninitialised value(s)
==23429== at 0xD27D61: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD28EA0: (within /usr/lib/libz.so.1.2.3)
==23429== by 0xD282D6: deflate (in /usr/lib/libz.so.1.2.3)
==23429== by 0x804F7C6: SCWriteZipped (conman.c:1287)
==23429== by 0x8100B0F: sendZippedNodeData (sicshipadaba.c:394)
==23429== by 0x8100EE0: SICSNotifyCallback (sicshipadaba.c:494)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFC67: UpdateHipadabaPar (hipadaba.c:876)
==23429== by 0x81146E7: HMDataGetCallback (sicshdbadapter.c:339)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429==
==23429== ERROR SUMMARY: 59345 errors from 22 contexts (suppressed: 17 from 1)
==23429== malloc/free: in use at exit: 247,513 bytes in 3,132 blocks.
==23429== malloc/free: 8,290,472 allocs, 8,287,340 frees, 310,185,272 bytes allocated.
==23429== For counts of detected errors, rerun with: -v
==23429== searching for pointers to 3,132 not-freed blocks.
==23429== checked 566,520 bytes.
==23429==
==23429==
==23429== 8 bytes in 1 blocks are definitely lost in loss record 2 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x80FF25C: MakeHipadabaNode (hipadaba.c:546)
==23429== by 0x8114732: MakeHMDataNode (sicshdbadapter.c:350)
==23429== by 0x8115658: SICSHdbAdapter (sicshdbadapter.c:701)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E18C6: Tcl_EvalEx (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E1BAB: Tcl_Eval (in /usr/lib/libtcl8.4.so)
==23429== by 0x8059FE8: MacroFileEval (macro.c:540)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429==
==23429==
==23429== 8 bytes in 1 blocks are definitely lost in loss record 3 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x8082E96: CreateCallBackInterface (callback.c:85)
==23429== by 0x80B0E03: MakeConfigurableVirtualMotor (confvirtualmot.c:470)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E18C6: Tcl_EvalEx (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E1BAB: Tcl_Eval (in /usr/lib/libtcl8.4.so)
==23429== by 0x8059FE8: MacroFileEval (macro.c:540)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x805CD19: InitObjectCommands (ofac.c:481)
==23429==
==23429==
==23429== 32 bytes in 1 blocks are definitely lost in loss record 11 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x8082BBD: CreateDrivableInterface (interface.c:74)
==23429== by 0x80B0D4E: MakeConfigurableVirtualMotor (confvirtualmot.c:451)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E18C6: Tcl_EvalEx (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E1BAB: Tcl_Eval (in /usr/lib/libtcl8.4.so)
==23429== by 0x8059FE8: MacroFileEval (macro.c:540)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x805CD19: InitObjectCommands (ofac.c:481)
==23429==
==23429==
==23429== 36 bytes in 3 blocks are definitely lost in loss record 13 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x812D4E1: NewSIMCounter (simcter.c:331)
==23429== by 0x812E721: MakeCounter (counter.c:528)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x30DF60: (within /usr/lib/libtcl8.4.so)
==23429== by 0x311D9B: TclCompEvalObj (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E2454: Tcl_EvalObjEx (in /usr/lib/libtcl8.4.so)
==23429== by 0x2EEF46: Tcl_IfObjCmd (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429==
==23429==
==23429== 45 bytes in 6 blocks are definitely lost in loss record 15 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x16DB7F: strdup (in /lib/libc-2.5.so)
==23429== by 0x812CBDA: CreateCounterDriver (countdriv.c:59)
==23429== by 0x812D4BD: NewSIMCounter (simcter.c:325)
==23429== by 0x8082A3D: CreateSIMHM (histsim.c:281)
==23429== by 0x807E3ED: CreateHistMemory (histmem.c:459)
==23429== by 0x807E647: MakeHistMemory (histmem.c:545)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x30DF60: (within /usr/lib/libtcl8.4.so)
==23429==
==23429==
==23429== 192 (60 direct, 132 indirect) bytes in 5 blocks are definitely lost in loss record 18 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x8068F92: ListInit (lld.c:76)
==23429== by 0x8069352: LLDcreate (lld.c:196)
==23429== by 0x8082EBD: CreateCallBackInterface (callback.c:92)
==23429== by 0x80B0E03: MakeConfigurableVirtualMotor (confvirtualmot.c:470)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E18C6: Tcl_EvalEx (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E1BAB: Tcl_Eval (in /usr/lib/libtcl8.4.so)
==23429== by 0x8059FE8: MacroFileEval (macro.c:540)
==23429==
==23429==
==23429== 137 (36 direct, 101 indirect) bytes in 1 blocks are definitely lost in loss record 20 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x80BF1F6: MakeExeManager (exeman.c:81)
==23429== by 0x8059600: SicsUnknownProc (macro.c:185)
==23429== by 0x2DF95D: TclInvokeStringCommand (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E130A: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E13FA: TclEvalObjvInternal (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E18C6: Tcl_EvalEx (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E1BAB: Tcl_Eval (in /usr/lib/libtcl8.4.so)
==23429== by 0x8059FE8: MacroFileEval (macro.c:540)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x805CD19: InitObjectCommands (ofac.c:481)
==23429== by 0x8056F1E: InitServer (nserver.c:128)
==23429==
==23429==
==23429== 48 (24 direct, 24 indirect) bytes in 2 blocks are definitely lost in loss record 21 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x8068FEE: ListInit (lld.c:87)
==23429== by 0x8069352: LLDcreate (lld.c:196)
==23429== by 0x804D8A3: CreateConnection (conman.c:175)
==23429== by 0x804DACB: SCCreateDummyConnection (conman.c:241)
==23429== by 0x8100482: SICSReadDriveCallback (sicshipadaba.c:230)
==23429== by 0x80FE75D: InvokeCallbackChain (hipadaba.c:155)
==23429== by 0x80FFBDD: SendDataMessage (hipadaba.c:866)
==23429== by 0x80FFD3B: GetHipadabaPar (hipadaba.c:895)
==23429== by 0x8105349: GetHdbNode (sicshipadaba.c:2268)
==23429== by 0x805248A: InterpExecute (SCinter.c:322)
==23429== by 0x80F7C2D: ContextDo (protocol.c:200)
==23429==
==23429==
==23429== 8,000 bytes in 1 blocks are possibly lost in loss record 24 of 26
==23429== at 0x40053C0: malloc (vg_replace_malloc.c:149)
==23429== by 0x2DEECC: TclpAlloc (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E68B4: Tcl_Alloc (in /usr/lib/libtcl8.4.so)
==23429== by 0x311F7C: TclCreateExecEnv (in /usr/lib/libtcl8.4.so)
==23429== by 0x2E3F42: Tcl_CreateInterp (in /usr/lib/libtcl8.4.so)
==23429== by 0x8059930: MacroInit (macro.c:321)
==23429== by 0x8051D8D: InitInterp (SCinter.c:101)
==23429== by 0x8056E3B: InitServer (nserver.c:109)
==23429== by 0x8057BCD: main (SICSmain.c:54)
==23429==
==23429== LEAK SUMMARY:
==23429== definitely lost: 249 bytes in 20 blocks.
==23429== indirectly lost: 257 bytes in 17 blocks.
==23429== possibly lost: 8,000 bytes in 1 blocks.
==23429== still reachable: 239,007 bytes in 3,094 blocks.
==23429== suppressed: 0 bytes in 0 blocks.
==23429== Reachable blocks (those to which a pointer was found) are not shown.
==23429== To see them, rerun with: --show-reachable=yes