-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/agent.c,v 6.12 2003-03-02 16:24:59 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/agent.c,v 6.13 2003-05-14 13:54:42 muench Exp $";
 
 #define _GNU_SOURCE
 #include <unistd.h>
 
+
+
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/ctrlctu.c,v 6.15 2003-03-02 16:24:59 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/ctrlctu.c,v 6.16 2003-05-14 13:54:42 muench Exp $";
 
 #define _XOPEN_SOURCE
 #define _POSIX_C_SOURCE 199506L
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evt.c,v 6.16 2003-04-25 12:15:16 muench Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evt.c,v 6.17 2003-05-14 13:54:42 muench Exp $";
 
 
 #define _ANSI_C_SOURCE
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.63 2003-04-25 12:15:16 muench Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.64 2003-05-14 13:54:42 muench Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/hadtu.c,v 6.5 2003-03-02 16:24:59 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/hadtu.c,v 6.6 2003-05-14 13:54:43 muench Exp $";
 
 
 #define _ANSI_C_SOURCE
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/hadtuqueue.c,v 6.5 2003-03-02 16:24:59 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/hadtuqueue.c,v 6.6 2003-05-14 13:54:43 muench Exp $";
 
 
 #define _ANSI_C_SOURCE
 
+
 #ifndef HARDWARE_H
 #define HARDWARE_H
 
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/hldread.c,v 6.7 2003-03-02 16:24:59 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/hldread.c,v 6.8 2003-05-14 13:54:43 muench Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.39 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.40 2003-05-14 13:54:43 muench Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsam.c,v 6.18 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsam.c,v 6.19 2003-05-14 13:54:44 muench Exp $";
 
 #include <assert.h>
 #include <string.h>
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwship.c,v 6.29 2002-10-25 06:49:53 hadaq Exp $";
-
-#undef SHIP_DEBUG
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwship.c,v 6.30 2003-05-14 13:54:44 muench Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 
 #include <assert.h>
+#include <errno.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
                syslog(LOG_ERR, "Parameter %s(cardbase) not found", my->name);
                return -1;
        }
+       my->cardBase = cardBase;        /* BUGBUG see header */
        my->lvme = malloc(sizeof(LVme));
        if (0 > conLVme(my->lvme, cardBase, 0x400000UL, 0x39UL, LVL2_OFFSET, 4)) {
                syslog(LOG_ERR, "%s on %p not found", my->name, cardBase);
 #endif
 }
 
-#define SHIP_NODATASIZE 0x10
 int HwShip_readSubEvt(HwShip *my, void *subEvt)
 {
        int readSubEvtR;
        lastAddr = my->currAddr + size;
 
 #ifndef SHIP_DEBUG
-       assert(size < sizeof(uint32_t) * 0x1600);       /* whereever the 0x1600 comes from */
+       assert(size <= HwShip_maxSubEvtSize(my));
 #else
        if (my->isDoomed) {
                dumpDbgBufs(my);
                syslog(LOG_EMERG, "%s: was doomed in previous buffer, dump buffer again and abort", my->name);
                abort();
        }
-       if (size >= sizeof(uint32_t) * 0x1600) {
+       if (size >= HwShip_maxSubEvtSize(my)) {
                dumpDbgBufs(my);
                syslog(LOG_EMERG, "%s: corrupted subEvt, dump buffer and try one more", my->name);
                my->currAddr = my->endOfData;
        }
 #endif
 
-       if (size <= SHIP_NODATASIZE) {
+       if (size <= HwShip_minSubEvtSize(my)) {
                my->currAddr = lastAddr;
                readSubEvtR = 1;
                syslog(LOG_DEBUG, "subEvt: empty, skipped");
                        my->currAddr += 4;
                }
                readSubEvtR = 0;
+#ifndef NDEBUG
                syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));
+#endif
        }
 
        return readSubEvtR;
 }
+
+int HwShip_fillLBmaChain(HwShip *my, LBma *lbma, unsigned long virtOff)
+{
+       int fillLBmeChainR;
+       unsigned long size;
+       unsigned long lastAddr;
+
+       assert(my->bankRequested == bankConfirmed(my));
+       assert(my->endOfData > 0);
+       assert(my->endOfData <= LVL2_OFFSET + sizeof(uint16_t) * LVL2_SIZE);
+
+       size = LVme_getL(my->lvme, my->currAddr);
+       lastAddr = my->currAddr + size;
+
+#ifndef SHIP_DEBUG
+       assert(size <= HwShip_maxSubEvtSize(my));
+#else
+       if (my->isDoomed) {
+               dumpDbgBufs(my);
+               syslog(LOG_EMERG, "%s: was doomed in previous buffer, dump buffer again and abort", my->name);
+               abort();
+       }
+       if (size >= HwShip_maxSubEvtSize(my)) {
+               dumpDbgBufs(my);
+               syslog(LOG_EMERG, "%s: corrupted subEvt, dump buffer and try one more", my->name);
+               my->currAddr = my->endOfData;
+               my->isDoomed = 1;
+               SubEvt_setDecoding(subEvt, 0x00020001);
+               SubEvt_setSize(subEvt, 0x10);
+               SubEvt_setId(subEvt, 399 | 0x80000000);
+               SubEvt_setTrigNr(subEvt, 0);
+               return 0;
+       }
+#endif
+
+       if (size <= HwShip_minSubEvtSize(my)) {
+               fillLBmeChainR = 0;
+       } else {
+               if (0 > LBma_readChain(lbma, virtOff, my->currAddr + my->cardBase, size / 4, 0x3bUL)) {
+                       fillLBmeChainR = -1;
+               } else {
+#ifndef NDEBUG
+                       syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(LVme_getPtrL(my->lvme, my->currAddr)));
+#endif
+                       fillLBmeChainR = size;
+               }
+       }
+       my->currAddr = lastAddr;
+
+       return fillLBmeChainR;
+}
 
 #ifndef HwShip_H
 #define HwShip_H
 
+#undef SHIP_DEBUG
+
 #include <lvme.h>
 
 #include <allParam.h>
 typedef struct HwShipS {
        char name[12];
        LVme *lvme;
-       int currAddr;
+       unsigned long cardBase;         /* BUGBUG workaround for stupid lvme design */
+       unsigned long currAddr;
        int endOfData;
        int bankRequested;
        int currDbgBuf;
 int conHwShip(HwShip *my, const char *name, const Param *param);
 void desHwShip(HwShip *my);
 
+static size_t HwShip_minSubEvtSize(const HwShip *my)
+{
+       return 16;
+}
+
+static size_t HwShip_maxSubEvtSize(const HwShip *my)
+{
+       return 3088;
+}
+
 void HwShip_requestBuffer(HwShip *my);
 
 static int HwShip_isEmpty(HwShip *my)
        return my->bankRequested != bankConfirmed(my);
 }
 
+int HwShip_fillLBmaChain(HwShip *my, LBma *lbma, unsigned long virtOff);
 #endif
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.33 2003-02-14 11:54:41 sailer Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.34 2003-05-14 13:54:44 muench Exp $";
+
+#define SHIP_BLT
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 #include <syslog.h>
 
 #include <allParam.h>
+#include <lvme.h>
 #include "subevt.h"
 #include "hwship.h"
 
        size_t maxSubEvtSize;
        int nShips;
        HwShip **ship;
+#ifdef SHIP_BLT
+       LBma *lbma;
+       LVme_L *buf;
+#endif
 };
 
 #include "hardware.h"
        my->ship = malloc(nCards * sizeof(HwShip *));
        my->nShips = nCards;
 
-#if 0
-       my->maxSubEvtSize = SubEvt_hdrSize() + (my->nShips * 1600 * sizeof(uint32_t));
-#endif
-       my->maxSubEvtSize = SubEvt_hdrSize() + (my->nShips * 1900 * sizeof(uint32_t));
+       my->maxSubEvtSize = SubEvt_hdrSize();
 
        for (i = 0; i < my->nShips; i++) {
                my->ship[i] = malloc(sizeof(HwShip));
                        syslog(LOG_ERR, "Construction of card %s failed:%s", cards[i], strerror(errno));
                        return NULL;
                }
+               my->maxSubEvtSize += HwShip_maxSubEvtSize(my->ship[i]);
        }
 
+#ifdef SHIP_BLT
+       my->lbma = malloc(sizeof(LBma));
+       if (0 > conLBma(my->lbma, 0, Hardware_maxSubEvtSize(my), 0x3b)) {
+               syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+               return -1;
+       }
+       my->buf = LBma_getPtrL(my->lbma, 0);
+#endif
+
        desParam(param);
        return my;
 }
 {
        int i;
 
+#ifdef SHIP_BLT
+       desLBma(my->lbma);
+       free(my->lbma);
+#endif
        for (i = 0; i < my->nShips; i++) {
                desHwShip(my->ship[i]);
                free(my->ship[i]);
 
 }
 
+#ifdef SHIP_BLT
+void Hardware_readout(Hardware *my, void *partEvt)
+{
+       int i;
+       int firstShip = -1;
+       void *subEvt = SubEvt_data(my->buf);
+       static unsigned long trigNr = 0;
+       unsigned trigTag;
+       int dataError;
+       int size;
+
+       /* init partial event, necessary for  SubEvt_next() */
+       SubEvt_setDecoding(my->buf, SubEvtDecoding_SubEvts);
+       dataError = 0;
+       SubEvt_setId(my->buf, 0);
+
+       for (i = 0; i < my->nShips; i++) {
+               if (0 > LBma_resetChain(my->lbma)) {
+                       syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+               }
+               size = HwShip_fillLBmaChain(my->ship[i], my->lbma, (char *) subEvt - (char *) my->buf);
+               if (size > 0) {
+                       subEvt = (char *) subEvt + (size + 0x7U & ~0x7U);
+               }
+               if (0 > LBma_startChain(my->lbma)) {
+                       syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+               }
+               if (0 > LBma_waitChain(my->lbma)) {
+                       syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+               }
+       }
+
+       SubEvt_setTrigNr(my->buf, trigNr << 8 | trigTag);
+       SubEvt_setSize(my->buf, (char *) subEvt - (char *) my->buf);
+       trigNr++;
+
+       assert(SubEvt_size(my->buf) <= Hardware_maxSubEvtSize(my));
+
+       memcpy(partEvt, my->buf, SubEvt_size(my->buf));
+
+       syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
+}
+
+#else
 void Hardware_readout(Hardware *my, void *partEvt)
 {
        int i;
        SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt);
        trigNr++;
 
-       assert(SubEvt_size(partEvt) <= my->maxSubEvtSize);
-#ifndef NDEBUG
+       assert(SubEvt_size(partEvt) <= Hardware_maxSubEvtSize(my));
        syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
-#endif
 }
+
+#endif
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsoft.c,v 6.28 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsoft.c,v 6.29 2003-05-14 13:54:44 muench Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.30 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.31 2003-05-14 13:54:44 muench Exp $";
 
 #include <assert.h>
 #include <string.h>
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtrig.c,v 6.36 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtrig.c,v 6.37 2003-05-14 13:54:44 muench Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 
 -T Mask
 -T NetTrans
 -T NetTransType
+-T OurArgs
 -T Param
 -T Pixmap
 -T PsxShm
 -T Tcl_VarTraceProc
 -T Tcl_WaitForEventProc
 -T TheArgs
--T OurArgs
 -T TheStats
 -T ThrArgs
 -T Time
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.25 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.26 2003-05-14 13:54:44 muench Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.27 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.28 2003-05-14 13:54:44 muench Exp $";
 
 
 #define _GNU_SOURCE
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/online.c,v 6.8 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/online.c,v 6.9 2003-05-14 13:54:45 muench Exp $";
 
 
 #define _GNU_SOURCE
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/rc.c,v 6.5 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/rc.c,v 6.6 2003-05-14 13:54:45 muench Exp $";
 
 
 #include <stdlib.h>
 
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.26 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.27 2003-05-14 13:54:45 muench Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #define SYSLOG_NAMES
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/shmtrans.c,v 6.8 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/shmtrans.c,v 6.9 2003-05-14 13:54:45 muench Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/showevt.c,v 6.10 2003-03-10 13:22:26 muench Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/showevt.c,v 6.11 2003-05-14 13:54:45 muench Exp $";
 
 
 #define _ANSI_C_SOURCE
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/sniff.c,v 6.9 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/sniff.c,v 6.10 2003-05-14 13:54:45 muench Exp $";
 
 
 #define SYSLOG_NAMES
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/subevt.c,v 6.11 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/subevt.c,v 6.12 2003-05-14 13:54:45 muench Exp $";
 
 
 #include <stdlib.h>
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tclAppInit.c,v 6.5 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tclAppInit.c,v 6.6 2003-05-14 13:54:45 muench Exp $";
 
 
 /*
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tcldaq.c,v 6.13 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tcldaq.c,v 6.14 2003-05-14 13:54:45 muench Exp $";
 
 #define _GNU_SOURCE
 #include <unistd.h>
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tkAppInit.c,v 6.5 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tkAppInit.c,v 6.6 2003-05-14 13:54:46 muench Exp $";
 
 
 /*
 
 /****  Headerfile for TOF-IPU registers */
 /****  created: E.Lins 13-Jan-2000 */
 
-/* $Id: tof_defs.h,v 1.5 2003-03-02 16:25:00 hadaq Exp $ */
+/* $Id: tof_defs.h,v 1.6 2003-05-14 13:54:46 muench Exp $ */
 /* $Source: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/tof_defs.h,v $ */
 
 
 
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/worker.c,v 6.19 2003-03-02 16:25:00 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/worker.c,v 6.20 2003-05-14 13:54:46 muench Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>