executables addMiniHeader, printMiniHeader and raw2date added
[u/mrichter/AliRoot.git] / RAW / addMiniHeader.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 // this program adds a mini header to a binary file                          //
21 //                                                                           //
22 // type "addMiniHeader -?" to get a description of the arguments             //
23 //                                                                           //
24 ///////////////////////////////////////////////////////////////////////////////
25
26 #include <stdlib.h>
27 #include <string.h>
28 #include <sys/sendfile.h>
29 #include <TError.h>
30 #include <TSystem.h>
31 #include "AliMiniHeader.h"
32
33
34 //_____________________________________________________________________________
35 int main(int argc, char** argv)
36 {
37   if ((argc < 2) || (argc > 4) || (strcmp(argv[1], "-?") == 0) || 
38       (strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) {
39     printf("\nUsage: addMiniHeader fileName [detectorID [DDLID]]\n\n");
40     printf("         fileName   : name of the raw data file\n");
41     printf("         detectorID : number of the detector (default 0xFF)\n");
42     printf("         DDLID      : number of the DDL (default 0xFFFF)\n\n");
43     return 0;
44   }
45
46   // prepare the mini header
47   AliMiniHeader header;
48   header.fMagicWord[2] = 0x12;
49   header.fMagicWord[1] = 0x34;
50   header.fMagicWord[0] = 0x56;
51   header.fDetectorID = 0xFF;
52   header.fDDLID = 0xFFFF;
53   header.fCompressionFlag = 0;
54   header.fVersion = 1;
55
56   // open the raw data file
57   FILE* file = fopen(argv[1], "rb");
58   if (!file) {
59     ::Fatal("addMiniHeader", "could not open file %s", argv[1]);
60   }
61
62   // set the correct raw data size in the mini header
63   fseek(file, 0, SEEK_END);
64   header.fSize = ftell(file);
65   fseek(file, 0, SEEK_SET);
66
67   // set the detector and DDL id if they are given
68   if (argc > 2) {
69     header.fDetectorID = atoi(argv[2]);
70   }
71   if (argc > 3) {
72     header.fDDLID = atoi(argv[3]);
73   }
74
75   // open a temporary file and write the mini header to it
76   char tmpFileName[] = "tmpXXXXXX";
77   Int_t tmpID = mkstemp(tmpFileName);
78   if (tmpID < 0) {
79     ::Fatal("addMiniHeader", "could not open temporary file");
80   }
81   FILE* tmp = fdopen(tmpID, "w");
82   fwrite(&header, sizeof(header), 1, tmp);
83
84   // copy the raw data to the temporary file
85   char buffer[256];
86   while (Int_t size = fread(buffer, 1, 256, file)) {
87     fwrite(buffer, size, 1, tmp);
88   }
89   fclose(file);
90   fclose(tmp);
91
92   // replace the original file by the temporary one
93   gSystem->Rename(tmpFileName, argv[1]);
94
95   return 0;
96 }