]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Merge with new-worker branch, cont correctness in daq_lib
authorhades <hades>
Tue, 18 Jul 2000 14:24:35 +0000 (14:24 +0000)
committerhades <hades>
Tue, 18 Jul 2000 14:24:35 +0000 (14:24 +0000)
26 files changed:
hadaq/Makefile
hadaq/agent.c
hadaq/daq_lib.c [new file with mode: 0644]
hadaq/daq_lib.h [new file with mode: 0644]
hadaq/daqctrl.c [new file with mode: 0644]
hadaq/hwdtu.c
hadaq/hwmdc.c
hadaq/hwrace.c
hadaq/hwrich.c
hadaq/hwsam.c
hadaq/hwship.c
hadaq/hwshow.c
hadaq/hwsis3801.c
hadaq/hwsoft.c
hadaq/hwtbus.c
hadaq/hwtip.c
hadaq/hwtof.c
hadaq/hwtrig.c
hadaq/hwv488.c
hadaq/hwv775.c
hadaq/hwv878.c
hadaq/param.c
hadaq/param.h
hadaq/param.tcl
hadaq/worker.c
hadaq/worker.h

index fc0d5187294602515108ed484bc4daa5940ddec3..dcb31c0412a29c5dc5b3e38995bafb8d26cfd4c6 100644 (file)
@@ -14,6 +14,8 @@
 COPTS = -g
 CFLAGS = $(COPTS) $(INCLUDES) $(DEFINES)
 
+DAQCTRL_OBJS = daqctrl.o daq_lib.o param.o \
+       worker.o psxshm.o mman.o
 DAQ_XMANAGE_OBJS = tcldaq.o tkAppInit.o \
        agent_clnt.o agent_xdr.o worker.o psxshm.o mman.o
 DAQ_MANAGE_OBJS = tcldaq.o tclAppInit.o \
@@ -60,6 +62,9 @@ xmanage: daq_xmanage anal
 
 all : seb eb anal
 
+daqctrl: $(DAQCTRL_OBJS)
+       $(CC) $(CFLAGS) $(LDFLAGS) $(DAQCTRL_OBJS) $(LOADLIBES) -o daqctrl
+
 daq_xmanage: $(DAQ_XMANAGE_OBJS)
        $(CC) $(CFLAGS) $(LDFLAGS) $(DAQ_XMANAGE_OBJS) $(LOADLIBES) -o daq_xmanage
 
index 780565adee8fad1ecbff8b204675e189072cf0a8..2f099c3413098670de006cb36bffdc891972c154 100644 (file)
@@ -3,27 +3,28 @@
 #include "worker.h"
 
 #define NWORKERS 16
-Worker *workers[NWORKERS];             /* inplicitly set to zero */
+char workers[NWORKERS][32];            /* inplicitly set to zero */
 
-static int addWorker(Worker *worker)
+static int addWorker(const char *worker)
 {
        int i;
 
-       for (i = 0; workers[i] != NULL; i++) {  /* BUGBUG crash if workers full */
+       for (i = 0; strcmp(workers[i], "") != 0; i++) {
+               /* BUGBUG crash if workers full */
        }
-       workers[i] = worker;
+       strcpy(workers[i], worker);
 
        return i;
 }
 
-static Worker *getWorker(int id)
+static char *getWorker(int id)
 {
        return workers[id];
 }
 
 static void removeWorker(int id)
 {
-       workers[id] = NULL;
+       strcpy(workers[id], "");
 }
 
 int *rpcworker_start_1(RpcWorker_startArgs * args, CLIENT * cl)
@@ -43,11 +44,11 @@ int *rpcworker_start_1(RpcWorker_startArgs * args, CLIENT * cl)
        }
        argv[i] = NULL;
 
-       worker = Worker_start(args->name, argv);
+       Worker_start(args->name, argv);
+       retVal = addWorker(argv[0]);
 
        free(argv);
 
-       retVal = addWorker(worker);
        return &retVal;
 }
 
@@ -74,6 +75,7 @@ int *rpcworker_stop_1(int *id, CLIENT * cl)
        static int retVal;
 
        Worker_stop(getWorker(*id), 15);
+       removeWorker(*id);
 
        retVal = 0;
 
diff --git a/hadaq/daq_lib.c b/hadaq/daq_lib.c
new file mode 100644 (file)
index 0000000..0b422a8
--- /dev/null
@@ -0,0 +1,72 @@
+static char rcsId[] = "$Id: daq_lib.c,v 6.1 2000-07-18 14:24:36 hades Exp $";
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <lvme.h>
+#include "param.h"
+#include "worker.h"
+#include "daq_lib.h"
+
+int Daq_reset(const char *name, const Param *param)
+{
+       Daq_stop(name, param);
+
+       return 0;
+}
+
+int Daq_init(const char *name, const Param *param)
+{
+       Daq_reset(name, param);
+
+       return 0;
+}
+
+int Daq_start(const char *name, const Param *param)
+{
+       const char *file;
+       const char *args;
+       char *argv[512];
+       int i;
+       char *s;
+
+       file = Param_getString(param, name, "file");
+       args = Param_getString(param, name, "args");
+
+       i = 0;
+       s = malloc(strlen(args));
+       strcpy(s, args);
+       while((argv[i++] = strtok(s, " \t\n")) != NULL) {
+               s = NULL;
+       }
+       free(s);
+       return Worker_start(file, argv);
+}
+
+int Daq_stop(const char *name, const Param *param)
+{
+       const char *args;
+       char *s;
+
+       args = Param_getString(param, name, "args");
+       s = malloc(strlen(args));
+       strcpy(s, args);
+       strtok(s, " \t\n");
+       Worker_stop(s, 15);
+       free(s);
+       return 0;
+}
+
+int Daq_status(const char *name, const Param *param)
+{
+       const char *args;
+       char *s;
+
+       args = Param_getString(param, name, "args");
+       s = malloc(strlen(args));
+       strcpy(s, args);
+       strtok(s, " \t\n");
+       puts(Worker_status(s));
+       free(s);
+       return 0;
+}
diff --git a/hadaq/daq_lib.h b/hadaq/daq_lib.h
new file mode 100644 (file)
index 0000000..dace452
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef Daq_LIB_H
+#define Daq_LIB_H
+
+#include "param.h"
+
+int Daq_init(const char *name, const Param *param);
+int Daq_reset(const char *name, const Param *param);
+int Daq_start(const char *name, const Param *param);
+int Daq_stop(const char *name, const Param *param);
+int Daq_status(const char *name, const Param *param);
+
+#endif
diff --git a/hadaq/daqctrl.c b/hadaq/daqctrl.c
new file mode 100644 (file)
index 0000000..a944fcc
--- /dev/null
@@ -0,0 +1,70 @@
+static char rcsId[] = "$Id: daqctrl.c,v 6.1 2000-07-18 14:24:36 hades Exp $";
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <stdio.h>
+#include <strings.h>
+#include <signal.h>
+
+#include "param.h"
+
+#include "daq_lib.h"
+
+jmp_buf terminateJmp;
+
+void sighandler(int sig) {
+  longjmp(terminateJmp, sig);
+}
+
+void usage(char *commandName) {
+  fprintf(stderr, "Usage: %s command boardName\n", commandName);
+  fprintf(stderr, "where command may be one of the following:\n");
+  fprintf(stderr, "init\n");
+  fprintf(stderr, "reset\n");
+  fprintf(stderr, "start\n");
+  fprintf(stderr, "stop\n");
+  fprintf(stderr, "status\n");
+}
+
+
+int main(int argc, char *argv[]) {
+  Param paramS, *param = &paramS;
+  char *name;
+  char *command;
+  
+  if(argc < 3) {
+    usage(argv[0]);
+    exit(EXIT_FAILURE);
+  }
+        
+  command = argv[1];
+  name = argv[2];
+
+  if (-1 == conParam(param)) {
+    perror("conParam");
+    exit(EXIT_FAILURE);
+  }
+  if (0 == setjmp(terminateJmp)) {
+    signal(SIGHUP, sighandler);
+    signal(SIGINT, sighandler);
+    signal(SIGTERM, sighandler);
+
+    if(strcmp(command, "init") == 0) {
+      Daq_init(name, param);
+    } else if(strcmp(command, "reset") == 0) {
+      Daq_reset(name, param);
+    } else if(strcmp(command, "start") == 0) {
+      Daq_start(name, param);
+    } else if(strcmp(command, "stop") == 0) {
+      Daq_stop(name, param);
+    } else if(strcmp(command, "status") == 0) {
+      Daq_status(name, param);
+    } else {
+      usage(argv[0]);
+      exit(EXIT_FAILURE);
+    }
+  }
+  desParam(param);
+  exit(EXIT_SUCCESS);
+}
index a6c9969528a896a1e1b908eddd9b61321fae2ac2..0f370a78a5910457052b27f3e4d8cd781ed990ed 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwdtu.c,v 1.2 1999-09-05 11:20:08 hades Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwdtu.c,v 1.3 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -26,7 +26,7 @@ int conHwDtu(HwDtu *my, const char *name, const Param *param)
        strcpy(my->name, name);
        my->trigNr = 0;
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->lvme = allocMem(sizeof(LVme));
 
        if (0 > conLVme(my->lvme, cardBase, 0x10000, 0x09, DTU_MAGIC, 1)) {
index 0bbdbcf81c92632767173b5d23d31bc44a04775a..42191513bdb1397077be4b2fffc0b0f63c847c6e 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.3 2000-02-03 10:11:08 muench Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.4 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -42,7 +42,7 @@ Hardware *newHardware(void)
        system("cd /home/hades/ht99/slow; mdc init >/dev/null 2>&1");
 #endif
 
-       if (0 > conParam(param, "param.tcl")) {
+       if (0 > conParam(param)) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
index 2a473095169b90b67b6a804e2109a8cb2d70ad7f..9acc8918dccdc6fed56eb0805f29f18608d05866 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.6 2000-05-27 05:22:22 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.7 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -46,7 +46,7 @@ int conHwRace(HwRace *my, const char *name, const Param *param)
 
        my->trigNr = 0;
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->rc = allocMem(sizeof(Rc));
 
        if (0 > conRc(my->rc, "rc", cardBase)) {
index f06a45f00c00119300515d1163ad5c4826415d5c..a2717825ab4662ad988e1f18e3dc0027a0528c93 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.7 2000-05-27 06:02:32 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.8 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -57,7 +57,7 @@ Hardware *newHardware(void)
        cardBase = 0x44100000;
 #endif
 
-       if (0 > conParam(param, "param.tcl")) {
+       if (0 > conParam(param)) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
index 75eee01d874d544dd20ca9681f7fa7f0b93c8651..9d512b7822b8d7952488fa720cae64305c1d6ada 100644 (file)
@@ -48,7 +48,7 @@ int conHwSam(HwSam * my, const char *name, const Param *param)
 
   strcpy(my->name, name);
 
-  cardBase = Param_getVal(param, my->name, "cardbase");
+  cardBase = Param_getInt(param, my->name, "cardbase");
   my->cram = allocMem(sizeof(LVme));
   if (0 > conLVme(my->cram, cardBase, 0x10000L, 0x09, 0x0, 4)) {
     msglog(LOG_ERR, "HwSam on %p not found\n", cardBase);
index 2ff41f50dac47f2fdc73360def26f8820dd24066..b93779c003276042e1f20b018042ac1f79604cc8 100644 (file)
@@ -96,7 +96,7 @@ int conHwShip(HwShip * my, const char *name, const Param *param)
 
   strcpy(my->name, name);
 
-  cardBase = Param_getVal(param, my->name, "cardbase");
+  cardBase = Param_getInt(param, my->name, "cardbase");
   my->lvme = allocMem(sizeof(LVme));
   if (0 > conLVme(my->lvme, cardBase, 0x400000UL, 0x39UL, 0, 0)) {
     msglog(LOG_ERR, "HwShip on %p not found\n", cardBase);
index 6e3b388858bcf379844d9e8713ed0cf4637987cf..4a5cda874c4722188347ffedb0c71d320f4aa051 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.6 2000-05-28 14:44:39 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.7 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -39,7 +39,7 @@ Hardware *newHardware(void)
        Param paramS, *param = &paramS;
        int i;
 
-       if (0 > conParam(param, "param.tcl")) {
+       if (0 > conParam(param)) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
index e8e1a3746e0c3927d474816f319a7846d9786fce..b99100b8c939c767d19eee9409b8bdf6e8d63cf7 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsis3801.c,v 1.1 1999-09-05 11:08:34 hades Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsis3801.c,v 1.2 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -26,7 +26,7 @@ int conHwSis3801(HwSis3801 *my, const char *name, const Param *param)
        strcpy(my->name, name);
        my->trigNr = 0;
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->lvme = allocMem(sizeof(LVme));
 
        if (0 > conLVme(my->lvme, cardBase, 0x10000, 0x09, SIS3801_MODID, 4)) {
index b001d4e7fd5cfaf91c957cf15341bee1f4f30d9e..3abe546c4634e9e74cb66e73977e9a39f5958971 100644 (file)
@@ -34,8 +34,8 @@ Hardware *newHardware(void)
        my->maxSubEvtSize = 3 * SubEvt_hdrSize() + 1001 * sizeof(UInt4);
 
        param = allocMem(sizeof(Param));
-       conParam(param, "param.tcl");
-       printf("%d\n", Param_getVal(param, "soft", "size"));
+       conParam(param);
+       printf("%d\n", Param_getInt(param, "soft", "size"));
        desParam(param);
        return my;
 }
index e12f0a7dc5d5f589b389b721adaa1a9426543718..c09a5b7007db55d5b0b4d3dc262522b249761bbb 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.2 1999-11-22 10:45:55 hades Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.3 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -33,7 +33,7 @@ Hardware *newHardware(void)
        Param paramS, *param = &paramS;
        HwDtu *dtu;
 
-       if (0 > conParam(param, "param.tcl")) {
+       if (0 > conParam(param)) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
index ada253dfa6d4396661fd0baa71e5e51ba32f637d..1769b546ca1acbfa105587e8454e51a470c3e7bb 100644 (file)
@@ -110,7 +110,7 @@ int conHwTip(HwTip * my, const char *name, const Param *param)
        signal(SIGBUS, sigbusHandler);
        strcpy(my->name, name);
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->lvme = allocMem(sizeof(LVme));
        if (0 > conLVme(my->lvme, cardBase, 0x2000000UL, 0x09UL, 0, 0)) {
                msglog(LOG_ERR, "HwTip on %p not found\n", cardBase);
index faa61d19354f8b44c53dfd717ee999b70a2b6579..04160f50fc5105011dadca33f8f167af336db24d 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.11 2000-06-01 08:39:32 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.12 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -39,7 +39,7 @@ Hardware *newHardware(void)
        Param paramS, *param = &paramS;
        int i;
 
-       if (0 > conParam(param, "param.tcl")) {
+       if (0 > conParam(param)) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
index 8b7929ff3af875bbcfbb095fe334bdcfc840b986..f5477e5a687a9aef00685fe81fcecf97b35b4ad0 100644 (file)
@@ -48,8 +48,8 @@ Hardware *newHardware(void)
        my->old_evtCount = 0;
 
        param = allocMem(sizeof(Param));
-       conParam(param, "param.tcl");
-       cardBase = Param_getVal(param, "mu", "cardbase");
+       conParam(param);
+       cardBase = Param_getInt(param, "mu", "cardbase");
        desParam(param);
 
        my->lvme0 = allocMem(sizeof(LVme));
index 29787da423ed3f5eed48e25fb1f9605f42846fb1..eec6dc326563d05cd4e74f1566c8ad8f62a14413 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv488.c,v 1.4 2000-02-03 18:52:37 muench Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv488.c,v 1.5 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -26,7 +26,7 @@ int conHwV488(HwV488 * my, const char *name, const Param *param)
        strcpy(my->name, name);
        my->trigNr = 0;
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->lvme = allocMem(sizeof(LVme));
 
        if (0 > conLVme(my->lvme, cardBase, 0x10000, 0x39, V488_TYPE, 2)) {
@@ -35,11 +35,11 @@ int conHwV488(HwV488 * my, const char *name, const Param *param)
        }
        LVme_setW(my->lvme, V488_RESET, 0);
        LVme_setW(my->lvme, V488_FF_REG, 0);
-       LVme_setW(my->lvme, V488_CTRL_REG, Param_getVal(param, my->name, "ctrl"));
-       LVme_setW(my->lvme, V488_THRL, Param_getVal(param, my->name, "thrl"));
-       LVme_setW(my->lvme, V488_THRH, Param_getVal(param, my->name, "thrh"));
-       LVme_setW(my->lvme, V488_RANGE, Param_getVal(param, my->name, "range"));
-       my->id = Param_getVal(param, my->name, "id");
+       LVme_setW(my->lvme, V488_CTRL_REG, Param_getInt(param, my->name, "ctrl"));
+       LVme_setW(my->lvme, V488_THRL, Param_getInt(param, my->name, "thrl"));
+       LVme_setW(my->lvme, V488_THRH, Param_getInt(param, my->name, "thrh"));
+       LVme_setW(my->lvme, V488_RANGE, Param_getInt(param, my->name, "range"));
+       my->id = Param_getInt(param, my->name, "id");
 
        return 0;
 }
index c956bcbdbdfa7b25d7925c4f2d93dc594391efac..3ea8a94cc489038183f4da50924080961cf33e25 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv775.c,v 1.9 2000-02-03 18:28:47 muench Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv775.c,v 1.10 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -25,7 +25,7 @@ int conHwV775(HwV775 *my, const char *name, const Param *param)
 
        strcpy(my->name, name);
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->lvme = allocMem(sizeof(LVme));
 
        if (0 > conLVme(my->lvme, cardBase, 0x10000, 0x09, V775_GEO_ADDR, 2)) {
@@ -40,15 +40,15 @@ int conHwV775(HwV775 *my, const char *name, const Param *param)
        LVme_setW(my->lvme, V775_BIT_SET_2, 0x0020);
        LVme_setW(my->lvme, V775_CTRL_REG_2, 0x0003);
        LVme_setW(my->lvme, V775_CRATE_REG, 0x0000);
-       LVme_setW(my->lvme, V775_RANGE_SET, Param_getVal(param, my->name, "range"));
-       LVme_setW(my->lvme, V775_VSET, Param_getVal(param, my->name, "vset"));
-       LVme_setW(my->lvme, V775_VOFF, Param_getVal(param, my->name, "voff"));
+       LVme_setW(my->lvme, V775_RANGE_SET, Param_getInt(param, my->name, "range"));
+       LVme_setW(my->lvme, V775_VSET, Param_getInt(param, my->name, "vset"));
+       LVme_setW(my->lvme, V775_VOFF, Param_getInt(param, my->name, "voff"));
        for (i = 0; i < V775_NCHANNELS; i++) {
                char buf[16];
 
                sprintf(buf, "threshold%02d", i);
                LVme_setW(my->lvme,
-                                 V775_THRESH + 2 * i, Param_getVal(param, my->name, buf));
+                                 V775_THRESH + 2 * i, Param_getInt(param, my->name, buf));
        }
        return 0;
 }
index 100d3eab552011229255c42fcd174209c4695469..aa0e93001e224cb1860deb1a64f2b3e1e0d5b232 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv878.c,v 1.7 2000-02-03 18:28:47 muench Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv878.c,v 1.8 2000-07-18 14:24:36 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -25,7 +25,7 @@ int conHwV878(HwV878 *my, const char *name, const Param *param)
 
        strcpy(my->name, name);
 
-       cardBase = Param_getVal(param, my->name, "cardbase");
+       cardBase = Param_getInt(param, my->name, "cardbase");
        my->lvme = allocMem(sizeof(LVme));
 
        if (0 > conLVme(my->lvme, cardBase, 0x10000, 0x09, V878_GEO_ADDR, 2)) {
@@ -42,16 +42,16 @@ int conHwV878(HwV878 *my, const char *name, const Param *param)
        LVme_setW(my->lvme, V878_BIT_SET_2, 0xf800);
        LVme_setW(my->lvme, V878_CRATE_REG, 0x0000);
        LVme_setW(my->lvme, V878_SLIDE, 0);
-       LVme_setW(my->lvme, V878_FCLR_WIN, Param_getVal(param, my->name, "fclr_win"));
-       LVme_setW(my->lvme, V878_VSET, Param_getVal(param, my->name, "vset"));
-       LVme_setW(my->lvme, V878_VOFF, Param_getVal(param, my->name, "voff"));
-       LVme_setW(my->lvme, V878_CLR_TIME, Param_getVal(param, my->name, "clr_time"));
+       LVme_setW(my->lvme, V878_FCLR_WIN, Param_getInt(param, my->name, "fclr_win"));
+       LVme_setW(my->lvme, V878_VSET, Param_getInt(param, my->name, "vset"));
+       LVme_setW(my->lvme, V878_VOFF, Param_getInt(param, my->name, "voff"));
+       LVme_setW(my->lvme, V878_CLR_TIME, Param_getInt(param, my->name, "clr_time"));
        for (i = 0; i < V878_NCHANNELS; i++) {
                char buf[16];
 
                sprintf(buf, "threshold%02d", i);
                LVme_setW(my->lvme,
-                                 V878_THRESH + 2 * i, Param_getVal(param, my->name, buf));
+                                 V878_THRESH + 2 * i, Param_getInt(param, my->name, buf));
        }
        return 0;
 }
index 78d3f413c6ba483a522fef7370c0490fdce711db..eca5028d171a942b3b87795926a3987ebd0c3f9d 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Id: param.c,v 6.2 1999-08-31 10:45:16 muench Stab $";
+static char rcsId[] = "$Id: param.c,v 6.3 2000-07-18 14:24:36 hades Exp $";
 
 #include <unistd.h>
 
@@ -6,63 +6,54 @@ static char rcsId[] = "$Id: param.c,v 6.2 1999-08-31 10:45:16 muench Stab $";
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include <hadesstd.h>
+#include <tcl.h>
 
 #include "param.h"
 
-int conParam(Param *my, const char *fileName)
+int conParam(Param *my)
 {
-       int i;
-       FILE *f;
-       char buf[132 + 1];
+       int retVal;
+       char *fileName;
+       int code;
 
-       if (NULL == (f = fopen(fileName, "r"))) {
-               msglog(LOG_ERR, "opening param file: %s\n", strerror(errno));
-               return -1;
+       fileName = getenv("DAQSLOW_PARAM_FILE");
+       if (fileName == NULL) {
+               fileName = "param.tcl";
        }
-       for (
-                       i = 0;
-                       i < PARAM_MAXNVALS
-                       && NULL != fgets(buf, 132, f);
-                       i++
-               ) {
-               if (buf[0] != '#') {
-                       char s[512];
-                       sscanf(buf, "set%s%s", &my->name[i], s);
-                       my->val[i] = strtoul(s, NULL, 0);
+       my->interp = Tcl_CreateInterp();
+       code = Tcl_EvalFile(my->interp, fileName);
+       if (*my->interp->result != 0) {
+               fprintf(stderr, "opening param file: %s\n", my->interp->result);
+               retVal = -1;
+       } else {
+               if (code != TCL_OK) {
+                       retVal = -1;
+               } else {
+                       retVal = 0;
                }
        }
-       if (i == PARAM_MAXNVALS) {
-               msglog(LOG_WARNING,
-                          "More than %d Parameter in file, ignoring the rest\n", PARAM_MAXNVALS);
-       }
-       fclose(f);
+       return retVal;
 }
 
 void desParam(Param *my)
 {
+       Tcl_DeleteInterp(my->interp);
 }
 
-long Param_getVal(const Param *my, const char *name, const char *idx)
+const char *Param_getString(const Param *my, const char *name, const char *idx)
 {
-       int i;
-       int val;
-       char fullName[PARAM_MAXNAMELEN];
+       const char *val;
 
-       sprintf(fullName, "%s(%s)", name, idx);
-       for (
-                       i = 0;
-                       i < PARAM_MAXNVALS
-                       && strcmp(my->name[i], fullName) != 0;
-                       i++
-               ) {
-       }
-       if (i == PARAM_MAXNVALS) {
-               val = 0;
-               msglog(LOG_WARNING, "Parameter %s not found, defaulting to 0\n", fullName);
-       } else {
-               val = my->val[i];
+       val = Tcl_GetVar2(my->interp, name, idx, 0);
+       if (val == NULL) {
+               val = "";
+               fprintf(stderr,
+                       "Parameter %s(%s) not found, default is \"\"\n", name, idx);
        }
        return val;
 }
+
+unsigned long Param_getInt(const Param *my, const char *name, const char *idx)
+{
+       return strtoul(Param_getString(my, name, idx), NULL, 0);
+}
index bf78cf63ad4de69008210432cd6379e47b0dd139..fced49a2f9c662c6cb6e0e2a0c57b574875ea546 100644 (file)
@@ -1,17 +1,15 @@
 #ifndef PARAM_H
 #define PARAM_H
 
-#define PARAM_MAXNVALS 1024
-#define PARAM_MAXNAMELEN 32
+#include <tcl.h>
 
 typedef struct ParamS {
-       int nVals;
-       char name[PARAM_MAXNVALS][PARAM_MAXNAMELEN];
-       long val[PARAM_MAXNVALS];
+       Tcl_Interp *interp;
 } Param;
 
-int conParam(Param *my, const char *fileName);
+int conParam(Param *my);
 void desParam(Param *my);
-long Param_getVal(const Param *my, const char *name, const char *idx);
+const char *Param_getString(const Param *my, const char *name, const char *idx);
+unsigned long Param_getInt(const Param *my, const char *name, const char *idx);
 
 #endif
index 4fac04ba6c5b0e014f230f70fda112a5865130c9..bb8db5ad51204c60687aa9db8affeb23c645d749 100644 (file)
@@ -1,3 +1,8 @@
+set evtbuild(file) ./daq_evtbuild
+set evtbuild(args) "daq_evtbuild -s 1 -a"
+set readout(file) ./daq_readout
+set readout(args) "daq_readout -a"
+
 set sam0(cardbase) 0x9C000000
 set soft(size) 1024
 
index a57db936404bebeef06bba52ca57bd4095a22870..6909118f761b1c48c0659f1779f8b1024b477720 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/worker.c,v 6.1 1999-08-31 10:37:25 muench Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/worker.c,v 6.2 2000-07-18 14:24:37 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -23,8 +23,6 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had
 
 #include "worker.h"
 
-static struct sigaction ourOldSigActionS, *ourOldSigAction = &ourOldSigActionS;
-
 static sigReceived = 0;
 
 static void noopHandler(int sig)
@@ -47,75 +45,142 @@ static int changePriority(int p)
                sched_getparam(0, sp);
        }
        sp->sched_priority += p;
-       if (0 > sched_setscheduler(0, SCHED_FIFO, sp)) {
-               msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut0;
+
+       return sched_setscheduler(0, SCHED_FIFO, sp);
+}
+
+static int createStatShm(Worker *my)
+{
+       int retVal;
+       char ipcName[_POSIX_PATH_MAX];
+
+       strcpy(ipcName, my->name);
+       strcat(ipcName, ".shm");
+
+       if (-1 == PsxShm_unlink(ipcName) && errno != ENOENT) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               retVal = -1;
+       } else {
+               my->shm = PsxShm_open(ipcName, O_CREAT | O_RDWR, S_IRWXU, 32 * sizeof(Statistic));
+               if (NULL == my->shm) {
+                       msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+                       retVal = -1;
+               } else {
+                       my->statistics = my->shm->addr;
+                       strcpy(my->statistics[0].name, "");
+                       retVal = 0;
+               }
        }
-       return 0;
 
-  bailOut0:
-       return -1;
+       return retVal;
 }
 
-Worker *Worker_initBegin(const char *name, void (*sigHandler) (int), int priority, int isStandalone)
+static int removeStatShm(Worker *my)
 {
-       Worker *my;
        char ipcName[_POSIX_PATH_MAX];
-       struct sigaction actS, *act = &actS;
 
-       my = allocMem(sizeof(Worker));
+       PsxShm_close(my->shm);
 
-       strcpy(my->name, name);
-       my->pid = getpid();
+       strcpy(ipcName, my->name);
+       strcat(ipcName, ".shm");
+       PsxShm_unlink(ipcName);
+
+       return 0;
+}
+
+static int openStatShm(Worker *my)
+{
+       int retVal;
+       char ipcName[_POSIX_PATH_MAX];
+
+       strcpy(ipcName, my->name);
+       strcat(ipcName, ".shm");
+
+       my->shm = PsxShm_open(ipcName, O_RDWR, 0, 32 * sizeof(Statistic));
+       if (NULL == my->shm) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               retVal = -1;
+       } else {
+               my->statistics = my->shm->addr;
+               retVal = 0;
+       }
+
+       return retVal;
+}
+
+static int closeStatShm(Worker *my)
+{
+       return PsxShm_close(my->shm);
+}
+
+static int removeSigHandlers(Worker *my) {
+       return sigaction(SIGINT, my->oldSigAction0, NULL)
+               | sigaction(SIGTERM, my->oldSigAction1, NULL);
+}
+
+static int installSigHandlers(Worker *my, int s0, int s1, void (*sigHandler) (int)) {
+       int retVal;
+       struct sigaction actS, *act = &actS;
 
        act->sa_handler = sigHandler;
-       sigfillset(&(act->sa_mask));
+       sigfillset(&act->sa_mask);
        act->sa_flags = 0;
-       if (0 > sigaction(SIGTERM, act, ourOldSigAction)) {
-               msglog(LOG_DEBUG, "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut1;
+
+       my->oldSigAction0 = &my->oldSigAction0S;
+       if (0 > sigaction(s0, act, my->oldSigAction0)) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               my->oldSigAction0 = NULL;
        }
-       if (0 > sigaction(SIGINT, act, ourOldSigAction)) {
-               msglog(LOG_DEBUG, "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut2;
+
+       my->oldSigAction1 = &my->oldSigAction1S;
+       if (0 > sigaction(s1, act, my->oldSigAction1)) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               my->oldSigAction1 = NULL;
        }
-       if (0 > changePriority(priority)) {
-               msglog(LOG_WARNING,
-                          "changeing priority: %s\n", strerror(errno));
+       
+       if (my->oldSigAction0 == NULL || my->oldSigAction1 == NULL) {
+               removeSigHandlers(my);
+               retVal = -1;
+       } else {
+               retVal = 0;
        }
+
+       return retVal;  
+}
+
+Worker *Worker_initBegin(const char *name, void (*sigHandler) (int), int priority, int isStandalone)
+{
+       Worker *retVal;
+       Worker *my;
+
+       my = allocMem(sizeof(Worker));
+
+       strcpy(my->name, name);
+       my->pid = getpid();
        my->isStandalone = isStandalone;
 
-       if (my->isStandalone) {
-               my->statistics = allocMem(32 * sizeof(Statistic));
+       if (-1 == installSigHandlers(my, SIGINT, SIGTERM, sigHandler)) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               Worker_fini(my);
+               retVal = NULL;
+       } else if (-1 == createStatShm(my)) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               Worker_fini(my);
+               retVal = NULL;
        } else {
-               strcpy(ipcName, my->name);
-               strcat(ipcName, ".shm");
+               unsigned long *pidP;
 
-               if (NULL == (my->shm = PsxShm_open(ipcName, O_RDWR, 0, 32 * sizeof(Statistic)))) {
-                       msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-                       goto bailOut3;
-               }
-               my->statistics = my->shm->addr;
+               pidP = Worker_addStatistic(my, "pid");
+               *pidP = my->pid;
 
-       }
-       strcpy(my->statistics[0].name, "");
-       return my;
+               if (0 > changePriority(priority)) {
+                       msglog(LOG_WARNING, "changeing priority: %s\n", strerror(errno));
+               }
 
-       if (my->isStandalone) {
-               freeMem(my->statistics);
-       } else {
-               PsxShm_close(my->shm);
+               retVal = my;
        }
-  bailOut3:
-       sigaction(SIGINT, ourOldSigAction, NULL);
-  bailOut2:
-       sigaction(SIGTERM, ourOldSigAction, NULL);
-  bailOut1:
-       freeMem(my);
 
-       return NULL;
+       return retVal;
 }
 
 void Worker_initEnd(Worker *my)
@@ -123,169 +188,129 @@ void Worker_initEnd(Worker *my)
        if (!my->isStandalone) {
                if (0 > kill(getppid(), SIGUSR1)) {
                        msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
+                                  "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
                }
        }
 }
 
 void Worker_fini(Worker *my)
 {
-       if (my->isStandalone) {
-               freeMem(my->statistics);
-       } else {
-               PsxShm_close(my->shm);
-       }
-       sigaction(SIGINT, ourOldSigAction, NULL);
-       sigaction(SIGTERM, ourOldSigAction, NULL);
+       removeStatShm(my);
+       removeSigHandlers(my);
+
        freeMem(my);
 }
 
-Worker *Worker_start(const char *name, char *argv[])
+int Worker_start(const char *path, char *const argv[])
 {
-       Worker *my;
-       char ipcName[_POSIX_PATH_MAX];
-       struct sigaction actS, *act = &actS;
-       struct sigaction oAlrmActS, *oAlrmAct = &oAlrmActS;
-       struct sigaction oChldActS, *oChldAct = &oChldActS;
-       sigset_t sigMaskS, *sigMask = &sigMaskS;
+       int retVal;
+       Worker myS, *my = &myS;
 
-       my = allocMem(sizeof(Worker));
+       strcpy(my->name, argv[0]);
 
-       strcpy(my->name, name);
+       installSigHandlers(my, SIGCHLD, SIGUSR1, noopHandler);
 
-       strcpy(ipcName, my->name);
-       strcat(ipcName, ".shm");
-       if (-1 == PsxShm_unlink(ipcName)) {
-               switch (errno) {
-               case ENOENT:
-                       break;
-               default:
-                       msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-                       goto bailOut1;
-                       break;
-               }
-       }
-       if (NULL == (my->shm = PsxShm_open(ipcName, O_CREAT | O_RDWR, S_IRWXU, 32 * sizeof(Statistic)))) {
-               msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut1;
-       }
-       my->statistics = my->shm->addr;
-
-       act->sa_handler = noopHandler;
-       sigfillset(&(act->sa_mask));
-       act->sa_flags = 0;
-       if (0 > sigaction(SIGCHLD, act, oChldAct)) {
-               msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut2;
-       }
-       if (0 > sigaction(SIGUSR1, act, oAlrmAct)) {
-               msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut3;
-       }
-       if (0 > (my->pid = fork())) {
-               msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-               goto bailOut4;
-       }
-       if (my->pid == 0) {                     /* This is the child, we can not get out of
-                                   this block */
-               if (0 > execvp(name, argv)) {
-                       msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-                       msglog(LOG_EMERG, "Starting %s: %s\n", name, strerror(errno));
-                       abort();
-               }
+       my->pid = fork();
+       if (0 > my->pid) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               retVal = -1;
        } else {
-               /* BUGBUG there should be a timeout here */
-               sigemptyset(sigMask);   /* This is the parent, so wait for the child */
-               sigsuspend(sigMask);    /* to initialize */
-
-               if (sigReceived == SIGCHLD) {
-                       msglog(LOG_DEBUG,
-                          "%s, line %d: %s\n", __FILE__, __LINE__, strerror(errno));
-                       goto bailOut4;
+               if (my->pid == 0) {     /* This is the child, we can not get out of */
+                                                       /* this block */
+                       if (0 > execvp(path, argv)) {
+                               msglog(LOG_DEBUG,
+                                          "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+                               msglog(LOG_EMERG, "Starting %s: %s\n", path, strerror(errno));
+                               abort();
+                       }
+               } else {
+                       sigset_t sigMaskS, *sigMask = &sigMaskS;
+
+                       /* BUGBUG there should be a timeout here */
+                       sigemptyset(sigMask);   /* This is the parent, so wait for the */
+                       sigsuspend(sigMask);    /* child to initialize */
+
+                       if (sigReceived == SIGCHLD) {
+                               wait(NULL);
+                               msglog(LOG_DEBUG,
+                                          "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+                               retVal = -1;
+                       } else {
+                               retVal = 0;
+                       }
                }
        }
 
-       sigaction(SIGUSR1, oAlrmAct, NULL);
-       sigaction(SIGCHLD, oChldAct, NULL);
+       removeSigHandlers(my);
 
-       return my;
-
-  bailOut5:
-       if (0 == kill(my->pid, SIGTERM)) {
-               wait(NULL);
-       }
-  bailOut4:
-       sigaction(SIGUSR1, oAlrmAct, NULL);
-  bailOut3:
-       sigaction(SIGCHLD, oChldAct, NULL);
-  bailOut2:
-       PsxShm_close(my->shm);
-       strcpy(ipcName, my->name);
-       strcat(ipcName, ".shm");
-       PsxShm_unlink(ipcName);
-  bailOut1:
-       freeMem(my);
-
-       return NULL;
+       return retVal;
 }
 
-char *Worker_status(Worker *my)
+char *Worker_status(const char *name)
 {
+       char *retVal;
+       Worker myS, *my = &myS;
        static char buf[32 * 80];
        char *p;
        int i;
 
-       strcpy(buf, "{}");
-       for (
-                       i = 0, p = buf;
-                       i < 32 && strcmp(my->statistics[i].name, "") != 0;
-                       i++) {
-               p += sprintf(p,
-                "{ %s %lu } ", my->statistics[i].name, my->statistics[i].value);
+       strcpy(my->name, name);
+
+       if (-1 == openStatShm(my)) {
+               msglog(LOG_DEBUG, "%s:%d: %s\n", __FILE__, __LINE__, strerror(errno));
+               retVal = NULL;
+       } else {
+               strcpy(buf, "{}");
+               for (
+                               i = 0, p = buf;
+                               i < 32 && strcmp(my->statistics[i].name, "") != 0;
+                               i++) {
+                       p += sprintf(p,
+                         "{ %s %lu } ", my->statistics[i].name, my->statistics[i].value);
+               }
+               closeStatShm(my);
+               retVal = buf;
        }
-       return buf;
+
+       return retVal;
 }
 
-void Worker_stop(Worker *my, int timeout)
+void Worker_stop(const char *name, int timeout)
 {
-       char ipcName[_POSIX_PATH_MAX];
+       Worker myS, *my = &myS;
+
+       strcpy(my->name, name);
 
-       if (0 == kill(my->pid, SIGTERM)) {
-               wait(NULL);
+       if (0 == openStatShm(my)) {
+               my->pid = my->statistics[0].value;
+               if (my->pid > 0) {
+                       if (0 == kill(my->pid, SIGTERM)) {
+                               wait(NULL);
+                       }
+               }
        }
-       PsxShm_close(my->shm);
-       strcpy(ipcName, my->name);
-       strcat(ipcName, ".shm");
-       PsxShm_unlink(ipcName);
-       freeMem(my);
 }
 
 unsigned long *Worker_addStatistic(Worker *my, const char *name)
 {
+       unsigned long *retVal;
        int i;
 
        for (i = 0; i < 32 && strcmp(my->statistics[i].name, "") != 0; i++) {
        }
        if (i == 32) {
-               errno = 0;
+               errno = ENOSPC;
                msglog(LOG_DEBUG,
-                "%s, line %d: %s\n", __FILE__, __LINE__, "Too many statistics");
-               goto bailOut0;
-       }
-       strcpy(my->statistics[i].name, name);
-       my->statistics[i].value = 0;
-       strcpy(my->statistics[i + 1].name, "");
-
-       return &(my->statistics[i].value);
+                          "%s:%d: %s\n", __FILE__, __LINE__, "Too many statistics");
+               retVal = NULL;
+       } else {
+               strcpy(my->statistics[i].name, name);
+               my->statistics[i].value = 0;
+               strcpy(my->statistics[i + 1].name, "");
 
-  bailOut0:
-       return NULL;
+               retVal = &(my->statistics[i].value);
+       }
+       return retVal;
 }
 
 void Worker_dump(Worker *my, time_t interval)
@@ -296,7 +321,7 @@ void Worker_dump(Worker *my, time_t interval)
 
                curTime = time(NULL);
                if (curTime >= lastTime + interval) {
-                       msglog(LOG_INFO, "%s\n", Worker_status(my));
+                       msglog(LOG_INFO, "%s\n", Worker_status(my->name));
                        lastTime = curTime;
                }
        }
index 910a7d203f56ce4976b8ad144859c26e06f99f79..3b799ecdda8467e3686e6816aa486dd40a8f18a0 100644 (file)
@@ -2,29 +2,34 @@
 #define WORKER_H
 
 #include <limits.h>
+#include <signal.h>
 
 #include "psxshm.h"
 
 typedef struct StatisticS {
-  char name[256];
-  unsigned long value;
+       char name[256];
+       unsigned long value;
 } Statistic;
 
 typedef struct WorkerS {
-  char name[_POSIX_PATH_MAX];
-  PsxShm *shm;
-  Statistic *statistics;
-  pid_t pid;
-  int isStandalone;
+       char name[_POSIX_PATH_MAX];
+       struct sigaction oldSigAction0S;
+       struct sigaction *oldSigAction0;
+       struct sigaction oldSigAction1S;
+       struct sigaction *oldSigAction1;
+       PsxShm *shm;
+       Statistic *statistics;
+       pid_t pid;
+       int isStandalone;
 } Worker;
 
-Worker *Worker_start(const char *name, char *argv[]);
-char *Worker_status(Worker * my);
-void Worker_stop(Worker * my, int timeout);
+int Worker_start(const char *path, char *const argv[]);
+char *Worker_status(const char *name);
+void Worker_stop(const char *name, int timeout);
 Worker *Worker_initBegin(const char *name, void (*sigHandler) (int), int priority, int isStandalone);
-void Worker_initEnd(Worker * my);
-void Worker_fini(Worker * my);
-unsigned long *Worker_addStatistic(Worker * my, const char *name);
-void Worker_dump(Worker * my, time_t interval);
+void Worker_initEnd(Worker *my);
+void Worker_fini(Worker *my);
+unsigned long *Worker_addStatistic(Worker *my, const char *name);
+void Worker_dump(Worker *my, time_t interval);
 
 #endif