-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/subevt.c,v 6.14 2010-06-16 14:45:05 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/subevt.c,v 6.15 2010-06-18 11:19:19 hadaq Exp $";
 
 #include <stdio.h>
 #include <stdlib.h>
        return val;
 }
 
-uint32_t SubEvt_errBit(const void *my)
+unsigned SubEvt_nrOfDataWords(const void *my)
 {
        unsigned i;
-       uint32_t val;
 
        if (SubEvt_decoding(my) == SubEvtDecoding_32bitData) {
                i = SubEvt_dataSize(my) / sizeof(uint32_t) - 1;
-
-               val = SubEvt_dataValue(my, i);
        } else if (SubEvt_decoding(my) == SubEvtDecoding_16bitData) {
                i = SubEvt_dataSize(my) / sizeof(uint16_t) - 1;
-
-               val = SubEvt_dataValue(my, i);
        } else if (SubEvt_decoding(my) == SubEvtDecoding_8bitData) {
                i = SubEvt_dataSize(my) / sizeof(uint8_t) - 1;
-
-               val = SubEvt_dataValue(my, i);
        } else {
                fprintf(stderr, " Unknown decoding: %i\n", SubEvt_decoding(my));
        }
 
+       return i;
+}
+
+uint32_t SubEvt_errBit(const void *my)
+{
+       unsigned i;
+       uint32_t val;
+
+       i = SubEvt_nrOfDataWords(my);
+
+       val = SubEvt_dataValue(my, i);
+
        return val;
 }
 
 {
        unsigned i;
        uint32_t val;
-       unsigned wordNumber = -1;
+       unsigned wordNr = -1;
 
+       /* Define debug word for the RICH */
        if (SubEvt_id(my) == 0x00008300UL || SubEvt_id(my) == 0x00008310UL || SubEvt_id(my) == 0x00008320UL) {
-               wordNumber = 2;
+               wordNr = 2;
        }
 
-       if (SubEvt_decoding(my) == SubEvtDecoding_32bitData) {
-               i = SubEvt_dataSize(my) / sizeof(uint32_t) - 1;
-       } else if (SubEvt_decoding(my) == SubEvtDecoding_16bitData) {
-               i = SubEvt_dataSize(my) / sizeof(uint16_t) - 1;
-       } else if (SubEvt_decoding(my) == SubEvtDecoding_8bitData) {
-               i = SubEvt_dataSize(my) / sizeof(uint8_t) - 1;
-       } else {
-               fprintf(stderr, " Unknown decoding: %i\n", SubEvt_decoding(my));
-       }
+       i = SubEvt_nrOfDataWords(my);
 
-       if (wordNumber == -1) {
+       if (wordNr == -1) {
                val = 0;
-       } else if (i > wordNumber) {
-               val = SubEvt_dataValue(my, wordNumber - 1);
+       } else if (i > wordNr) {
+               val = SubEvt_dataValue(my, wordNr - 1);
        } else {
                val = 0;
        }
        return val;
 }
 
+uint32_t SubEvt_trigType(const void *my, uint32_t wordNr, uint32_t bitmask, uint32_t bitshift)
+{
+       unsigned i;
+       uint32_t trigType;
+       uint32_t val;
+
+       i = SubEvt_nrOfDataWords(my);
+
+       if (i > wordNr) {
+               val = SubEvt_dataValue(my, wordNr - 1);
+       } else {
+               return 0;
+       }
+
+       return (val & bitmask) >> bitshift;
+}
+
 char *SubEvt_2charP(const void *my)
 {
        static char buf[132];