COPTS = -g
 CFLAGS = $(COPTS) $(INCLUDES) $(DEFINES)
 
-DAQCTRL_OBJS = daqctrl.o daq_lib.o param.o \
+DAQCTRL_OBJS = daqctrl.o daq_lib.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
        worker.o psxshm.o mman.o
 DAQ_READOUT_OBJS = readout.o \
        worker.o \
-       $(HW_OBJS) param.o subevt.o \
+       $(HW_OBJS) subevt.o \
        shmtrans.o semaphore.o hadtuqueue.o \
                psxshm.o mman.o \
                hadtu.o
 hadtu.o: hadtu.c hadtu.h
 hadtuqueue.o: hadtuqueue.c hadtu.h hadtuqueue.h
 hldread.o: hldread.c evt.h hadtu.h subevt.h hldread.h
-hwdtu.o: hwdtu.c subevt.h hadtu.h param.h hwdtu.h rc.h
-hwmdc.o: hwmdc.c param.h subevt.h hadtu.h hwsam.h hardware.h
-hwrace.o: hwrace.c subevt.h hadtu.h param.h rc.h hwrace.h
-hwrich.o: hwrich.c param.h subevt.h hadtu.h hwrace.h rc.h hardware.h
-hwsam.o: hwsam.c subevt.h hadtu.h sam_defs.h hwsam.h param.h
-hwship.o: hwship.c param.h ipc_basis.h hwship.h
-hwshow.o: hwshow.c param.h subevt.h hadtu.h hwship.h hardware.h
-hwsis3801.o: hwsis3801.c subevt.h hadtu.h param.h hwsis3801.h rc.h
-hwsoft.o: hwsoft.c subevt.h hadtu.h param.h hardware.h
-hwtbus.o: hwtbus.c param.h subevt.h hadtu.h hwdtu.h rc.h hardware.h
-hwtip.o: hwtip.c subevt.h hadtu.h param.h tof_defs.h hwtip.h
-hwtof.o: hwtof.c param.h subevt.h hadtu.h hwtip.h hardware.h
-hwtrig.o: hwtrig.c subevt.h hadtu.h param.h hardware.h
-hwv488.o: hwv488.c subevt.h hadtu.h param.h hwv488.h rc.h
-hwv775.o: hwv775.c subevt.h hadtu.h param.h hwv775.h rc.h
-hwv878.o: hwv878.c subevt.h hadtu.h param.h hwv878.h rc.h
+hwdtu.o: hwdtu.c subevt.h hadtu.h hwdtu.h rc.h
+hwmdc.o: hwmdc.c subevt.h hadtu.h hwsam.h hardware.h
+hwrace.o: hwrace.c subevt.h hadtu.h rc.h hwrace.h
+hwrich.o: hwrich.c subevt.h hadtu.h hwrace.h rc.h hardware.h
+hwsam.o: hwsam.c subevt.h hadtu.h sam_defs.h hwsam.h
+hwship.o: hwship.c ipc_basis.h hwship.h
+hwshow.o: hwshow.c subevt.h hadtu.h hwship.h hardware.h
+hwsis3801.o: hwsis3801.c subevt.h hadtu.h hwsis3801.h rc.h
+hwsoft.o: hwsoft.c subevt.h hadtu.h hardware.h
+hwtbus.o: hwtbus.c subevt.h hadtu.h hwdtu.h rc.h hardware.h
+hwtip.o: hwtip.c subevt.h hadtu.h tof_defs.h hwtip.h
+hwtof.o: hwtof.c subevt.h hadtu.h hwtip.h hardware.h
+hwtrig.o: hwtrig.c subevt.h hadtu.h hardware.h
+hwv488.o: hwv488.c subevt.h hadtu.h hwv488.h rc.h
+hwv775.o: hwv775.c subevt.h hadtu.h hwv775.h rc.h
+hwv878.o: hwv878.c subevt.h hadtu.h hwv878.h rc.h
 memnet.o: memnet.c shmtrans.h semaphore.h psxshm.h hadtuqueue.h \
  hadtu.h nettrans.h worker.h
 mman.o: mman.c mman.h
 online_clnt.o: online_clnt.c online.h
 online_svc.o: online_svc.c online.h
 online_xdr.o: online_xdr.c online.h
-param.o: param.c param.h
 psxshm.o: psxshm.c mman.h psxshm.h
 rc.o: rc.c rc.h
 readout.o: readout.c grmblfx.h hardware.h shmtrans.h semaphore.h \
 
-static char rcsId[] = "$Id: daq_lib.c,v 6.1 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Id: daq_lib.c,v 6.2 2000-09-21 09:28:47 hades Exp $";
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <lvme.h>
-#include "param.h"
+#include <p.h>
 #include "worker.h"
 #include "daq_lib.h"
 
-int Daq_reset(const char *name, const Param *param)
+typedef struct OurParamsS {
+       char file[PARAM_MAX_VALUE_LEN];
+       char args[PARAM_MAX_VALUE_LEN];
+} OurParams;
+
+static OurParams *getParams(const char *n, const Param *p) {
+       static OurParams *pa = NULL;
+
+       if (pa == NULL) {
+               int i;
+
+               pa = malloc(sizeof(OurParams));
+
+               if (pa == NULL
+                       || -1 == Param_getString(p, n, "file", &i, pa->file) || i == 0
+                       || -1 == Param_getString(p, n, "args", &i, pa->args) || i == 0
+               ) {
+                       free(pa);
+                       pa = NULL;
+               }
+       }
+
+       return pa;
+}
+
+int Daq_reset(const char *n, const Param *p)
 {
-       Daq_stop(name, param);
+       Daq_stop(n, p);
 
        return 0;
 }
 
-int Daq_init(const char *name, const Param *param)
+int Daq_init(const char *n, const Param *p)
 {
-       Daq_reset(name, param);
+       Daq_reset(n, p);
 
        return 0;
 }
 
-int Daq_start(const char *name, const Param *param)
+int Daq_start(const char *n, const Param *p)
 {
-       const char *file;
-       const char *args;
        char *argv[512];
        int i;
        char *s;
+       OurParams *pa;
 
-       file = Param_getString(param, name, "file");
-       args = Param_getString(param, name, "args");
+       pa = getParams(n, p);
 
        i = 0;
-       s = malloc(strlen(args));
-       strcpy(s, args);
+       s = malloc(strlen(pa->args) + 1);
+       strcpy(s, pa->args);
        while((argv[i++] = strtok(s, " \t\n")) != NULL) {
                s = NULL;
        }
        free(s);
-       return Worker_start(file, argv);
+       return Worker_start(pa->file, argv);
 }
 
-int Daq_stop(const char *name, const Param *param)
+int Daq_stop(const char *n, const Param *p)
 {
-       const char *args;
        char *s;
+       OurParams *pa;
 
-       args = Param_getString(param, name, "args");
-       s = malloc(strlen(args));
-       strcpy(s, args);
+       pa = getParams(n, p);
+       s = malloc(strlen(pa->args) + 1);
+       strcpy(s, pa->args);
        strtok(s, " \t\n");
        Worker_stop(s, 15);
        free(s);
        return 0;
 }
 
-int Daq_status(const char *name, const Param *param)
+int Daq_status(const char *n, const Param *p)
 {
-       const char *args;
        char *s;
+       OurParams *pa;
 
-       args = Param_getString(param, name, "args");
-       s = malloc(strlen(args));
-       strcpy(s, args);
+       pa = getParams(n, p);
+       s = malloc(strlen(pa->args) + 1);
+       strcpy(s, pa->args);
        strtok(s, " \t\n");
        puts(Worker_status(s));
        free(s);
 
 #ifndef Daq_LIB_H
 #define Daq_LIB_H
 
-#include "param.h"
+#include <param.h>
 
 int Daq_init(const char *name, const Param *param);
 int Daq_reset(const char *name, const Param *param);
 
-static char rcsId[] = "$Id: daqctrl.c,v 6.1 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Id: daqctrl.c,v 6.2 2000-09-21 09:28:47 hades Exp $";
 
 #include <stdlib.h>
 #include <stddef.h>
 #include <strings.h>
 #include <signal.h>
 
-#include "param.h"
+#include <param.h>
 
 #include "daq_lib.h"
 
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwdtu.c,v 1.3 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwdtu.c,v 1.4 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 
 
 #include "subevt.h"
-#include "param.h"
+#include <param.h>
 #include "hwdtu.h"
 
 int conHwDtu(HwDtu *my, const char *name, const Param *param)
 {
        unsigned long cardBase;
+       int paramWasFound;
        int i;
 
        assert(my != NULL);
        strcpy(my->name, name);
        my->trigNr = 0;
 
-       cardBase = Param_getInt(param, my->name, "cardbase");
+       Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, default = 0\n", my->name, "cardbase");
+               cardBase = 0;
+       }
+
        my->lvme = allocMem(sizeof(LVme));
 
        if (0 > conLVme(my->lvme, cardBase, 0x10000, 0x09, DTU_MAGIC, 1)) {
 
 #include <lvme.h>
 #include "rc.h"
 
-#include "param.h"
+#include <param.h>
 
 typedef struct HwDtuS {
        char name[16];
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.4 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.5 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 #include <string.h> 
 #include <sys/time.h>
 
-#include "param.h"
+#include <param.h>
 #include "subevt.h"
 #include "hwsam.h"
 
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.7 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.8 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 
 
 #include "subevt.h"
-#include "param.h"
+#include <param.h>
 #include "rc.h"
 #include "hwrace.h"
 
 int conHwRace(HwRace *my, const char *name, const Param *param)
 {
        unsigned long cardBase;
+       int paramWasFound;
        int i;
 
        assert(my != NULL);
 
        my->trigNr = 0;
 
-       cardBase = Param_getInt(param, my->name, "cardbase");
+       Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, default = 0\n", my->name, "cardbase");
+               cardBase = 0;
+       }
+
        my->rc = allocMem(sizeof(Rc));
 
        if (0 > conRc(my->rc, "rc", cardBase)) {
 
 #include <lvme.h>
 #include "rc.h"
 
-#include "param.h"
+#include <param.h>
 
 typedef struct HwRaceS {
   char name[16];
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.8 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.9 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 #include "dtu_defs.h"
 
 #endif
-#include "param.h"
+#include <param.h>
 #include "subevt.h"
 #include "hwrace.h"
 
 
 int conHwSam(HwSam * my, const char *name, const Param *param)
 {
   unsigned long cardBase;
+       int paramWasFound;
   int i;
 
   assert(my != NULL);
 
   strcpy(my->name, name);
 
-  cardBase = Param_getInt(param, my->name, "cardbase");
+       Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, default = 0\n", my->name, "cardbase");
+               cardBase = 0;
+       }
+
   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);
 
 
 #include <lvme.h>
 
-#include "param.h"
+#include <param.h>
 
 typedef struct HwSamS {
   char name[16];
 
 #include <hadesstd.h>
 #include <lvme.h>
 
-#include "param.h"
+#include <param.h>
 
 #include "ipc_basis.h"
 #include "hwship.h"
 int conHwShip(HwShip * my, const char *name, const Param *param)
 {
   unsigned long cardBase;
+       int paramWasFound;
   int i;
 
   assert(my != NULL);
 
   strcpy(my->name, name);
 
-  cardBase = Param_getInt(param, my->name, "cardbase");
+       Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, default = 0\n", my->name, "cardbase");
+               cardBase = 0;
+       }
+
   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);
 
 
 #include <lvme.h>
 
-#include "param.h"
+#include <param.h>
 
 typedef struct HwShipS {
   char name[16];
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.7 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.8 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 #include <string.h> 
 #include <sys/time.h>
 
-#include "param.h"
+#include <param.h>
 #include "subevt.h"
 #include "hwship.h"
 
 
 
 #include <sys/time.h>
 
+#include <param.h>
+
 #include "subevt.h"
-#include "param.h"
 
 struct HardwareS {
        size_t maxSubEvtSize;
 {
        Hardware *my;
        Param *param;
+       int paramWasFound;
+       unsigned long size;
 
        my = allocMem(sizeof(Hardware));
        my->maxSubEvtSize = 2 * SubEvt_hdrSize() + 5004 * sizeof(UInt4);
 
        param = allocMem(sizeof(Param));
        conParam(param);
-       printf("%d\n", Param_getInt(param, "soft", "size"));
+       Param_getInt(param, "soft", "size", ¶mWasFound, &size);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, defaulting to 0\n", "soft", "size");
+               size = 0;
+       }
+       printf("size: %d\n", size);
        desParam(param);
        return my;
 }
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.3 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.4 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 #include <string.h>
 #include <sys/time.h>
 
-#include "param.h"
+#include <param.h>
 #include "subevt.h"
 #include "hwdtu.h"
 
 
 #if 1
 #include "subevt.h"
 #endif
-#include "param.h"
+#include <param.h>
 
 #include "tof_defs.h"
 #include "hwtip.h"
 int conHwTip(HwTip * my, const char *name, const Param *param)
 {
        unsigned long cardBase;
+       int paramWasFound;
        int i;
 
        assert(my != NULL);
        signal(SIGBUS, sigbusHandler);
        strcpy(my->name, name);
 
-       cardBase = Param_getInt(param, my->name, "cardbase");
+       Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, default = 0\n", my->name, "cardbase");
+               cardBase = 0;
+       }
+
        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);
 
 
 #include <lvme.h>
 
-#include "param.h"
+#include <param.h>
 
 typedef struct HwTipS {
   char name[16];
 
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.12 2000-07-18 14:24:36 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.13 2000-09-21 09:28:47 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 #include <string.h> 
 #include <sys/time.h>
 
-#include "param.h"
+#include <param.h>
 #include "subevt.h"
 #include "hwtip.h"
 
 
 #include <lvme.h>
 
 #include "subevt.h"
-#include "param.h"
+#include <param.h>
 
 #define MU_EVT_COUNT    0x0e8014UL
 #define MU_FIFO         0x0000UL
 {
        Hardware *my;
     unsigned long cardBase;
+       int paramWasFound;
        Param *param;
 
        my = allocMem(sizeof(Hardware));
 
        param = allocMem(sizeof(Param));
        conParam(param);
-       cardBase = Param_getInt(param, "mu", "cardbase");
+       Param_getInt(param, "mu", "cardbase", ¶mWasFound, &cardBase);
+       if (!paramWasFound) {
+               msglog(LOG_WARNING,
+                       "Parameter %s(%s) not found, default = 0\n", "mu", "cardbase");
+               cardBase = 0;
+       }
+
        desParam(param);
 
        my->lvme0 = allocMem(sizeof(LVme));
 
 then
        export CC="gcc"
        export RPCGEN="rpcgen"
-       export LOADLIBES="-L$HOME/lib/$SYSTYPE -lhadesstd -llatm -llvme -ltk -L/usr/X11R6/lib -lX11 -ltcl -lm -ldl -latm"
-       export INCLUDES="-I$HOME/include"
+       export LOADLIBES="-L$HOME/lib/$SYSTYPE -lhadesstd -llatm -llvme -ltclParam -ltk -L/usr/X11R6/lib -lX11 -ltcl -lm -ldl -latm"
+       export INCLUDES="-I$HOME/include -I$HOME/include/tcl"
        export DEFINES="-UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT"
 elif test $HADAQ_CONF = "LINUX_NOATM"
 then
        export CC="gcc"
        export RPCGEN="rpcgen"
-       export LOADLIBES="-L$HOME/lib/$SYSTYPE -lhadesstd -llatm -llvme -ltk -L/usr/X11R6/lib -lX11 -ltcl -lm -ldl"
-       export INCLUDES="-I$HOME/include"
+       export LOADLIBES="-L$HOME/lib/$SYSTYPE -lhadesstd -llatm -llvme -ltclParam -ltk -L/usr/X11R6/lib -lX11 -ltcl -lm -ldl"
+       export INCLUDES="-I$HOME/include -I$HOME/include/tcl"
        export DEFINES="-UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM"
 elif test $HADAQ_CONF = "LINUX_E128"
 then
 
+++ /dev/null
-static char rcsId[] = "$Id: param.c,v 6.3 2000-07-18 14:24:36 hades Exp $";
-
-#include <unistd.h>
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <tcl.h>
-
-#include "param.h"
-
-int conParam(Param *my)
-{
-       int retVal;
-       char *fileName;
-       int code;
-
-       fileName = getenv("DAQSLOW_PARAM_FILE");
-       if (fileName == NULL) {
-               fileName = "param.tcl";
-       }
-       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;
-               }
-       }
-       return retVal;
-}
-
-void desParam(Param *my)
-{
-       Tcl_DeleteInterp(my->interp);
-}
-
-const char *Param_getString(const Param *my, const char *name, const char *idx)
-{
-       const char *val;
-
-       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);
-}
 
+++ /dev/null
-#ifndef PARAM_H
-#define PARAM_H
-
-#include <tcl.h>
-
-typedef struct ParamS {
-       Tcl_Interp *interp;
-} Param;
-
-int conParam(Param *my);
-void desParam(Param *my);
-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
 
 set evtbuild(file) ./daq_evtbuild
-set evtbuild(args) "daq_evtbuild -s 1 -m 1 -a"
+set evtbuild(args) "daq_evtbuild -s 1 -a"
 set netmem(file) ./daq_netmem
 set netmem(args) "daq_netmem -a -i UDP:0.0.0.0:3000 -m 1"
 set memnet(file) ./daq_memnet