Index: drsdaq/DAQReadout.cc
===================================================================
--- drsdaq/DAQReadout.cc	(revision 44)
+++ drsdaq/DAQReadout.cc	(revision 49)
@@ -71,5 +71,5 @@
   NumEvents		= 0;
   NumEventsRequested	= 100;
-  NumCMCBoards		= 0;
+  NumBoards		= 0;
   FirstBoard		= 0;
   LastBoard		= -1;
@@ -125,5 +125,5 @@
       i, (drs->GetBoard(i)->GetSlotNumber() >> 1)+2, ((drs->GetBoard(i)->GetSlotNumber() & 1) == 0) ? "upper" : "lower", 
       drs->GetBoard(i)->GetCMCSerialNumber(), drs->GetBoard(i)->GetFirmwareVersion());
-    NumCMCBoards++;
+    NumBoards++;
     LastBoard++;
     drs->GetBoard(i)->Init();
@@ -131,6 +131,6 @@
     DRSFreq[i] = 0;
   }
-  BStruct  = new BoardStructure [NumCMCBoards == 0 ? 1:drs->GetNumberOfBoards()];
-  WaveForm = new short [NumCMCBoards == 0 ? 1:NumCMCBoards][kNumberOfChips][kNumberOfChannels][kNumberOfBins];
+  BStruct  = new BoardStructure [NumBoards == 0 ? 1:drs->GetNumberOfBoards()];
+  WaveForm = new short [NumBoards == 0 ? 1:NumBoards][kNumberOfChips][kNumberOfChannels][kNumberOfBins];
   
   // Create instance of HV feedback (must be called after CMC board detection)
@@ -182,5 +182,5 @@
     if (Match(Param[0], CommandList[CmdNumber].Name)) {
       if(CommandList[CmdNumber].NeedNotBusy && daq_state==active) PrintMessage("DAQ is busy\n");
-      else if(CommandList[CmdNumber].NeedNotBusy && NumCMCBoards==0) PrintMessage("No mezzanine boards available\n");
+      else if(CommandList[CmdNumber].NeedNotBusy && NumBoards==0) PrintMessage("No mezzanine boards available\n");
       else (this->*CommandList[CmdNumber].CommandPointer)();
       return 0;  
@@ -223,5 +223,5 @@
   
   if(!Match(Param[1],"test")) {
-    if (daq_state==active || NumCMCBoards==0) {
+    if (daq_state==active || NumBoards==0) {
       PrintMessage("DAQ is busy or no boards available.\n");
       return;
@@ -322,5 +322,5 @@
   }
   
-  if (NumCMCBoards) for (i=FirstBoard; i<=LastBoard; i++) {
+  if (NumBoards) for (i=FirstBoard; i<=LastBoard; i++) {
         PrintMessage("BLT test started (board #%d)\n",i);
         (drs->GetBoard(i))->TestRead(Param[2][0] && atoi(Param[2])<=10000 && atoi(Param[2])>0 ? atoi(Param[2]):1, Type);
@@ -345,5 +345,5 @@
 
 void DAQReadout::cmd_read() {
-  if(NumCMCBoards==0) {
+  if(NumBoards==0) {
     PrintMessage("No mezzanine boards available\n");
     return;
@@ -475,5 +475,5 @@
       NumEventsRequested, fRawDataPath,
       CheckDisk(fRawDataPath), Socket==-1 ? "disconnected":"connected",
-      NumCMCBoards, LastBoard - FirstBoard + 1);
+      NumBoards, LastBoard - FirstBoard + 1);
 
     for (int i=FirstBoard;i<=LastBoard;i++)
@@ -483,5 +483,5 @@
   if(NParam==1 || Match(Param[1],"drs")) {
     PrintMessage("\n********** DRS STATUS **********\n");
-    if (NumCMCBoards) {
+    if (NumBoards) {
       for (int i=FirstBoard; i<=LastBoard; i++) {
 
@@ -552,10 +552,10 @@
     LastBoard = drs->GetNumberOfBoards()-1;
   } 
-  else if (NParam==2 && atoi(Param[1]) >= 0 && atoi(Param[1]) < NumCMCBoards) {
+  else if (NParam==2 && atoi(Param[1]) >= 0 && atoi(Param[1]) < NumBoards) {
     FirstBoard = atoi(Param[1]);
     LastBoard = FirstBoard;
   }
-  else if (NParam==3 && atoi(Param[1])>=0 && atoi(Param[1])<NumCMCBoards && 
-           atoi(Param[2])>0 && atoi(Param[2])<NumCMCBoards) {
+  else if (NParam==3 && atoi(Param[1])>=0 && atoi(Param[1])<NumBoards && 
+           atoi(Param[2])>0 && atoi(Param[2])<NumBoards) {
     FirstBoard = atoi(Param[1]);
     LastBoard = atoi(Param[2]);
@@ -710,5 +710,5 @@
 void DAQReadout::SetDOMINOMode(int mode) {
  
-  if (NumCMCBoards) 
+  if (NumBoards) 
     for (int i=FirstBoard; i<=LastBoard; i++) {
       (drs->GetBoard(i))->SetDominoMode(mode==1 ? 1:0);
@@ -721,5 +721,5 @@
 void DAQReadout::SetDOMINOReadMode(int mode) {
 
-  if (NumCMCBoards) 
+  if (NumBoards) 
     for (int i=FirstBoard; i<=LastBoard; i++) {
       (drs->GetBoard(i))->SetReadoutMode(mode==1 ? 1:0);
@@ -732,5 +732,5 @@
 void DAQReadout::SetDOMINOWaveMode(int mode) {
 
-  if (NumCMCBoards) 
+  if (NumBoards) 
     for (int i=FirstBoard; i<=LastBoard; i++) {
       (drs->GetBoard(i))->SetDominoActive(mode==1 ? 1:0);
@@ -743,5 +743,5 @@
 void DAQReadout::SetDelayedStart(int mode) {
 
-  if (NumCMCBoards) 
+  if (NumBoards) 
     for (int i=FirstBoard; i<=LastBoard; i++) {
       (drs->GetBoard(i))->SetDelayedStart(mode==1 ? 1:0);
@@ -754,5 +754,5 @@
 void DAQReadout::HWTrigger(int mode) {
 
-  if (NumCMCBoards) 
+  if (NumBoards) 
     for (int i=FirstBoard; i<=LastBoard; i++) {
       drs->GetBoard(i)->EnableTrigger(mode==1 ? 1:0);
@@ -789,5 +789,5 @@
   DIR *pdir;
       
-  if (NumCMCBoards) {
+  if (NumBoards) {
     if(dir!=NULL) {
       if ((pdir=opendir(str))==0){
@@ -893,5 +893,5 @@
 }
 
-// Write run header and board structures
+// Write run header and board structures (revision number is zero for svn modified working copy)
 bool DAQReadout::WriteRunHeader() {
 
@@ -900,5 +900,5 @@
   RHeader->MagicNum = MAGICNUM_OPEN;
   RHeader->DataFormat = DATA_FORMAT;
-  RHeader->SoftwareRevision = atoi(REVISION);
+  RHeader->SoftwareRevision = atoi(REVISION) * (strchr(REVISION, 'M')==NULL ? 1:-1);
 
   RHeader->RunHeaderSize = sizeof(RunHeader);
@@ -914,7 +914,7 @@
   RHeader->StartMicrosecond = Time.tv_usec;
   
-  RHeader->NCMCBoards = NumCMCBoards==0 && daq_runtype==test ? 1 : (LastBoard - FirstBoard) + 1;  
-  RHeader->NChips     = kNumberOfChips;
-  RHeader->NChannels  = kNumberOfChannels;
+  RHeader->NBoards   = NumBoards==0 && daq_runtype==test ? 1 : (LastBoard - FirstBoard) + 1;  
+  RHeader->NChips    = kNumberOfChips;
+  RHeader->NChannels = kNumberOfChannels;
 
   RHeader->Offset  = fFirstSample;
@@ -934,10 +934,10 @@
 
   // In case no boards are available, dummy data is written for one board structure   
-  if (NumCMCBoards == 0) {
+  if (NumBoards == 0) {
     BStruct[0].NomFreq     = 1;
     BStruct[0].ScaleFactor = 0.1;
   }    
 
-  if(write(Rawfile, BStruct, sizeof(BoardStructure)*(LastBoard-FirstBoard+1+(NumCMCBoards==0))) != (ssize_t) sizeof(BoardStructure)*(LastBoard-FirstBoard+1+(NumCMCBoards==0))) {
+  if(write(Rawfile, BStruct, sizeof(BoardStructure)*(LastBoard-FirstBoard+1+(NumBoards==0))) != (ssize_t) sizeof(BoardStructure)*(LastBoard-FirstBoard+1+(NumBoards==0))) {
     PrintMessage("Error: Could not write (all) board structures, terminating run (%s)\n", strerror(errno));
     return false;
@@ -979,7 +979,7 @@
   EHeader->EventNumber = NumEvents;
   EHeader->TriggerType = 0x0;
-  EHeader->Seconds = Time.tv_sec;
-  EHeader->Microseconds = Time.tv_usec;
-  EHeader->EventSize = sizeof(short)*RHeader->NCMCBoards*RHeader->NChips*RHeader->NChannels*RHeader->Samples;
+  EHeader->Second = Time.tv_sec;
+  EHeader->Microsecond = Time.tv_usec;
+  EHeader->EventSize = sizeof(short)*RHeader->NBoards*RHeader->NChips*RHeader->NChannels*RHeader->Samples;
 
   if(write(Rawfile, EHeader, sizeof(EventHeader)) != sizeof(EventHeader)) {
@@ -1026,5 +1026,5 @@
     // New prompt only after newline
     if(Textbuffer[strlen(Textbuffer)-1]=='\n' || strlen(Textbuffer)==0) {
-      if (NumCMCBoards == 0) printf("\rDAQ> "); 
+      if (NumBoards == 0) printf("\rDAQ> "); 
       else if (FirstBoard == LastBoard) printf("\rDAQ|B%d> ",FirstBoard); 
       else printf("\rDAQ|B%d-%d> ",FirstBoard,LastBoard); 
@@ -1189,5 +1189,5 @@
       else {
 	double Period = ((double) rand())/RAND_MAX*20;
-	for (long int i=0; i<(m->NumCMCBoards>0 ?  m->NumCMCBoards : 1)*kNumberOfChips*kNumberOfChannels*kNumberOfBins; i++)
+	for (long int i=0; i<(m->NumBoards>0 ?  m->NumBoards : 1)*kNumberOfChips*kNumberOfChannels*kNumberOfBins; i++)
 	  *((short *) m->WaveForm+i) = (short) (sin(i/Period)*1000);
       }
@@ -1195,5 +1195,5 @@
       // Write data to disk (using writev() for performance reason)
       Count  = 0;
-      for (int i=m->FirstBoard; (i<=m->LastBoard + (m->NumCMCBoards==0)) && !WriteError; i++) {
+      for (int i=m->FirstBoard; (i<=m->LastBoard + (m->NumBoards==0)) && !WriteError; i++) {
         for (unsigned int k=0; k<m->RHeader->NChips*m->RHeader->NChannels; k++) {
     	  DataPart[Count].iov_base = &m->WaveForm[i][k/m->RHeader->NChannels][k%m->RHeader->NChannels][m->RHeader->Offset];
@@ -1201,5 +1201,5 @@
 	
 	  // Write to disk if either maximum size of DataPart[] array or last loop interation is reached 
-	  if (Count==IOV_MAX || (k==(m->RHeader->NChips*m->RHeader->NChannels-1) && i==(m->LastBoard+(m->NumCMCBoards==0)))) {
+	  if (Count==IOV_MAX || (k==(m->RHeader->NChips*m->RHeader->NChannels-1) && i==(m->LastBoard+(m->NumBoards==0)))) {
 	    if ((WriteResult=writev(m->Rawfile, DataPart, Count)) != (int) (Count*DataPart[0].iov_len)) {
               if (WriteResult==-1) m->PrintMessage("Error: Could not write event data, terminating run (%s)\n", strerror(errno));
Index: drsdaq/DAQReadout.h
===================================================================
--- drsdaq/DAQReadout.h	(revision 44)
+++ drsdaq/DAQReadout.h	(revision 49)
@@ -66,5 +66,5 @@
     int NParam;       	      	// Number of parameters
     const char *Param[MAX_NUM_TOKEN]; // Pointers to parameters
-    int NumCMCBoards;
+    int NumBoards;
     int FirstBoard;
     int LastBoard;
Index: drsdaq/HVFeedback.cc
===================================================================
--- drsdaq/HVFeedback.cc	(revision 44)
+++ drsdaq/HVFeedback.cc	(revision 49)
@@ -56,9 +56,9 @@
 
   // Initialise with zero content
-  Average    = new float [m->NumCMCBoards][kNumberOfChips][kNumberOfChannels]();
-  Sigma      = new float [m->NumCMCBoards][kNumberOfChips][kNumberOfChannels]();
-  Response   = new float [m->NumCMCBoards][kNumberOfChips][kNumberOfChannels]();
-  Target     = new float [m->NumCMCBoards][kNumberOfChips][kNumberOfChannels]();
-  Buffer     = new float [m->NumCMCBoards][kNumberOfChips][kNumberOfChannels]();  
+  Average    = new float [m->NumBoards][kNumberOfChips][kNumberOfChannels]();
+  Sigma      = new float [m->NumBoards][kNumberOfChips][kNumberOfChannels]();
+  Response   = new float [m->NumBoards][kNumberOfChips][kNumberOfChannels]();
+  Target     = new float [m->NumBoards][kNumberOfChips][kNumberOfChannels]();
+  Buffer     = new float [m->NumBoards][kNumberOfChips][kNumberOfChannels]();  
 
   Gain = 1;
@@ -267,5 +267,5 @@
 //
 void HVFeedback::SetTarget(int Board, int Chip, int Channel, float TargetVal) {
-  if(Board<m->NumCMCBoards && Chip<kNumberOfChips && Channel<kNumberOfChannels)
+  if(Board<m->NumBoards && Chip<kNumberOfChips && Channel<kNumberOfChannels)
     Target[Board][Chip][Channel] = TargetVal;
   else printf("Invalid board, chip or channel number.\n");
Index: drsdaq/History.txt
===================================================================
--- drsdaq/History.txt	(revision 44)
+++ drsdaq/History.txt	(revision 49)
@@ -27,3 +27,4 @@
 18/5/2009   Included some version and size checking in RawDataCTX.cc.
 19/5/2009   Subversion revision number included in run header. Added human readable
-    	    date and time to slow data. 
+    	    date and time to slow data.
+28/5/2009   Replaced NCMCBoards by NBoards for clarity.
Index: drsdaq/RawDataCTX.cc
===================================================================
--- drsdaq/RawDataCTX.cc	(revision 44)
+++ drsdaq/RawDataCTX.cc	(revision 49)
@@ -62,6 +62,6 @@
   
   // Read board structures
-  BStruct = new BoardStructure [RHeader->NCMCBoards];
-  for(unsigned int i=0; i<RHeader->NCMCBoards; i++) {
+  BStruct = new BoardStructure [RHeader->NBoards];
+  for(unsigned int i=0; i<RHeader->NBoards; i++) {
     if(fread(&BStruct[i], RHeader->BoardStructureSize, 1, Rawfile) != 1) {
       if(!Silent) printf("Error: Could not read board structure of board number %d\n",i+1);
@@ -72,5 +72,5 @@
   }
   // Allocate memory for event data
-  Data = new short[RHeader->NCMCBoards*RHeader->NChips*RHeader->NChannels*RHeader->Samples];
+  Data = new short[RHeader->NBoards*RHeader->NChips*RHeader->NChannels*RHeader->Samples];
   FileOpen = true;
   
@@ -79,5 +79,5 @@
     fprintf(fptr, "Magic number          %x (%s)\n", RHeader->MagicNum, RHeader->MagicNum==MAGICNUM_CLOSED?"OK":(RHeader->MagicNum==MAGICNUM_OPEN?"File not closed":"Error"));
     fprintf(fptr, "Data format:          %u\n", RHeader->DataFormat);
-    fprintf(fptr, "Software revision:    %u\n", RHeader->SoftwareRevision);         
+    fprintf(fptr, "Software revision:    %d\n", RHeader->SoftwareRevision);         
 
     fprintf(fptr, "Run header size:      %d\n", RHeader->RunHeaderSize);
@@ -91,5 +91,5 @@
     
     fprintf(fptr, "Events:           %u\n", RHeader->Events);
-    fprintf(fptr, "CMC Boards:       %u\n", RHeader->NCMCBoards);
+    fprintf(fptr, "Boards:  	     %u\n", RHeader->NBoards);
     fprintf(fptr, "DRS chips:        %u\n", RHeader->NChips);
     fprintf(fptr, "Channels/chip:    %u\n", RHeader->NChannels);
@@ -102,5 +102,5 @@
     fprintf(fptr, "  microsecond:    %u\n", RHeader->EndMicrosecond);
 
-    for (unsigned int i=0; i<RHeader->NCMCBoards; i++) {
+    for (unsigned int i=0; i<RHeader->NBoards; i++) {
       fprintf(fptr, "*** Board %d ***\n", i);
       fprintf(fptr, "Serial number:            %d\n", BStruct[i].SerialNo);
@@ -139,5 +139,5 @@
   
 /*   // Move file pointer to desired event header (if zero read next event)
-  if(EventNo!=0 && fseek(Rawfile, RHeader->RunHeaderSize+RHeader->BoardStructureSize*RHeader->NCMCBoards+(EventNo-1)*(RHeader->EventHeaderSize+RHeader->NCMCBoards*RHeader->NChips*
+  if(EventNo!=0 && fseek(Rawfile, RHeader->RunHeaderSize+RHeader->BoardStructureSize*RHeader->NBoards+(EventNo-1)*(RHeader->EventHeaderSize+RHeader->NBoards*RHeader->NChips*
       RHeader->NChannels*RHeader->Samples*sizeof(short)), SEEK_SET)!=0) {
     if(!Silent) printf("Error: Could not move to requested event\n");
@@ -149,5 +149,5 @@
   if (EventNo != 0) {
     bool SEEK_OK=true;
-    if (fseek(Rawfile, RHeader->RunHeaderSize+RHeader->BoardStructureSize*RHeader->NCMCBoards, SEEK_SET) != 0) SEEK_OK=false;
+    if (fseek(Rawfile, RHeader->RunHeaderSize+RHeader->BoardStructureSize*RHeader->NBoards, SEEK_SET) != 0) SEEK_OK=false;
     while(SEEK_OK) {
       if (fread(EHeader, RHeader->EventHeaderSize, 1, Rawfile) != 0) SEEK_OK = false;
@@ -178,6 +178,6 @@
   if(fptr != NULL) {
     fprintf(fptr, "Event number:    %u\n",        EHeader->EventNumber);
-    fprintf(fptr, "Time [sec]:      %u - UTC %s", EHeader->Seconds, asctime(gmtime((time_t *) &EHeader->Seconds)));
-    fprintf(fptr, "Time [usec]:     %u\n",        EHeader->Microseconds);
+    fprintf(fptr, "Time [sec]:      %u - UTC %s", EHeader->Second, asctime(gmtime((time_t *) &EHeader->Second)));
+    fprintf(fptr, "Time [usec]:     %u\n",        EHeader->Microsecond);
     fprintf(fptr, "Trigger type:    0x%0X\n",     EHeader->TriggerType);
     fprintf(fptr, "Size [byte]:     %u\n",        EHeader->EventSize);
Index: drsdaq/RawDataCTX.h
===================================================================
--- drsdaq/RawDataCTX.h	(revision 44)
+++ drsdaq/RawDataCTX.h	(revision 49)
@@ -26,7 +26,4 @@
 
 typedef char I8;
-typedef unsigned char U8;
-typedef short I16;
-typedef unsigned short U16;
 typedef int I32;
 typedef unsigned int U32;
@@ -47,5 +44,5 @@
   U32 MagicNum;
   U32 DataFormat;       // Increasing whenever format changes
-  U32 SoftwareRevision;	// Subversion revision number
+  I32 SoftwareRevision;	// Subversion revision number (negative for modified working copy)
 
   U32 RunHeaderSize;
@@ -60,5 +57,5 @@
     
   U32 Events;           // Number of events in the file 
-  U32 NCMCBoards;       // Number of used mezzanine boards
+  U32 NBoards;	    	// Number of used mezzanine boards
   U32 NChips;		// Number of DRS chips per board
   U32 NChannels;	// Number of channels per chip
@@ -83,6 +80,6 @@
 typedef struct {
   U32 EventNumber;
-  U32 Seconds;          // Event time stamp (result of gettimeofday())
-  U32 Microseconds;
+  U32 Second;          // Event time stamp (result of gettimeofday())
+  U32 Microsecond;
   U32 TriggerType;
   U32 EventSize; 	// Size of following data in bytes
