-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.5 2000-05-27 06:01:48 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.6 2000-05-28 14:44:39 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
        }
        my = allocMem(sizeof(Hardware));
 
-       my->maxSubEvtSize = SubEvt_hdrSize() + (1600 * sizeof(UInt4));
+       my->maxSubEvtSize = SubEvt_hdrSize() + (NSHIPS * 1600 * sizeof(UInt4));
        my->shipToRead = 0;
 
        for (i = 0; i < NSHIPS; i++) {
 
 void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 {
-       if (HwShip_isEmpty(my->ship[my->shipToRead])) {
-               HwShip_requestBuffer(my->ship[my->shipToRead]);
-               while (HwShip_isBusy(my->ship[my->shipToRead])) {
-#if 1
-                       struct timespec tS, *t = &tS;
-                       t->tv_sec = 0;
-                       t->tv_nsec = 020000000;
-                       nanosleep(t, NULL);
-#endif
-               }
-       }
 }
 
-void Hardware_readout(Hardware *my, void *subEvt)
+void Hardware_readout(Hardware *my, void *partEvt)
 {
-       HwShip_readSubEvt(my->ship[my->shipToRead], subEvt);
-       if (++my->shipToRead == NSHIPS ) {
-               my->shipToRead = 0;
+       void *subEvt = SubEvt_data(partEvt);
+
+       SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
+
+       for (my->shipToRead = 0; my->shipToRead < NSHIPS; my->shipToRead++) {
+               if (HwShip_isEmpty(my->ship[my->shipToRead])) {
+                       HwShip_requestBuffer(my->ship[my->shipToRead]);
+                       while (HwShip_isBusy(my->ship[my->shipToRead])) {
+#if 0
+/*
+ * This sleep prevents a tight loop which stops work on real
+ * time systems if the priority of readout is not lowered.
+ * When not using the sleep use option -p -2 for daq_readout.
+*/
+                               struct timespec tS, *t = &tS;
+                               t->tv_sec = 0;
+                               t->tv_nsec = 020000000;
+                               nanosleep(t, NULL);
+#endif
+                       }
+               }
+               HwShip_readSubEvt(my->ship[my->shipToRead], subEvt);
+               SubEvt_setTrigNr(partEvt, SubEvt_trigNr(subEvt));
+               subEvt = SubEvt_next(partEvt, subEvt);
        }
+
+       SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt);
+       SubEvt_setId(partEvt, 0);
+       msglog(LOG_DEBUG, "partEvt: %s\n", SubEvt_2charP(partEvt));
 }