1 | /*******************************************************************************
|
---|
2 | * *
|
---|
3 | * mcf_xdr.h -- Include file for mcfast Xdr layer. Specifies the headers *
|
---|
4 | * ( Block, event, table and files) * *
|
---|
5 | * *
|
---|
6 | * Copyright (c) 1994 Universities Research Association, Inc. *
|
---|
7 | * All rights reserved. *
|
---|
8 | * *
|
---|
9 | * This material resulted from work developed under a Government Contract and *
|
---|
10 | * is subject to the following license: The Government retains a paid-up, *
|
---|
11 | * nonexclusive, irrevocable worldwide license to reproduce, prepare derivative *
|
---|
12 | * works, perform publicly and display publicly by or for the Government, *
|
---|
13 | * including the right to distribute to other Government contractors. Neither *
|
---|
14 | * the United States nor the United States Department of Energy, nor any of *
|
---|
15 | * their employees, makes any warrenty, express or implied, or assumes any *
|
---|
16 | * legal liability or responsibility for the accuracy, completeness, or *
|
---|
17 | * usefulness of any information, apparatus, product, or process disclosed, or *
|
---|
18 | * represents that its use would not infringe privately owned rights. *
|
---|
19 | * *
|
---|
20 | *******************************************************************************/
|
---|
21 | #define MCF_XDR_F_TITLE_LENGTH 255
|
---|
22 | #define MCF_XDR_B_TITLE_LENGTH 80
|
---|
23 | #define MCF_XDR_MAXLREC 32000
|
---|
24 | #define MCF_XDR_MINLREC 512
|
---|
25 | #define MCF_XDR_VERSION "v0.0"
|
---|
26 | #define MCF_STREAM_NUM_MAX 20
|
---|
27 | #define MCF_DEFAULT_TABLE_SIZE 100
|
---|
28 | #define MCF_XDR_VERSION_LENGTH 4
|
---|
29 | #define MCF_XDR_STDCM2_LENGTH 20
|
---|
30 | #define XDR_MCFIOCODE 1025 /* Private code to be passed to the encoding
|
---|
31 | filter to estimate the length prior to encode
|
---|
32 | in memory */
|
---|
33 |
|
---|
34 | typedef enum _mcfxdrBlockType {
|
---|
35 | GENERIC, FILEHEADER, EVENTTABLE, SEQUENTIALHEADER,
|
---|
36 | EVENTHEADER, NOTHING
|
---|
37 | } mcfxdrBlockType;
|
---|
38 |
|
---|
39 |
|
---|
40 | typedef struct _mcfxdrGeneric{
|
---|
41 | int id; /* Identifier for this item = FILEHEADER */
|
---|
42 | int length; /* The length of data body, byte count, excluding
|
---|
43 | the id and version, and this word */
|
---|
44 | char version[MCF_XDR_VERSION_LENGTH+1];
|
---|
45 | /* The version of this particular block */
|
---|
46 | int *data; /* The data block */
|
---|
47 | } mcfxdrGeneric;
|
---|
48 |
|
---|
49 | typedef struct _mcfxdrFileHeader{
|
---|
50 | int id; /* Identifier for this item = FILEHEADER */
|
---|
51 | int length; /* The length of data body, byte count, excluding
|
---|
52 | the id and version, and this word */
|
---|
53 | char version[MCF_XDR_VERSION_LENGTH+1];
|
---|
54 | /* The version of this particular block */
|
---|
55 | char title[MCF_XDR_F_TITLE_LENGTH+1];
|
---|
56 | /* The title length */
|
---|
57 | char comment[MCF_XDR_F_TITLE_LENGTH+1]; /* The comment ..*/
|
---|
58 | char date[30];
|
---|
59 | char closingDate[30];
|
---|
60 | unsigned int numevts_expect; /* The number of event expected */
|
---|
61 | unsigned int numevts; /* The number of evts really written on tape */
|
---|
62 | unsigned int firstTable; /* The XDR locator for the first table */
|
---|
63 | unsigned int dimTable; /* The number of events listed in the fixed-sized
|
---|
64 | event table */
|
---|
65 | unsigned int nBlocks;
|
---|
66 | /* The maximum number of Block types in the file
|
---|
67 | ( excluding File headers and Event Tables) */
|
---|
68 | int *blockIds; /* The list of Block identifiers */
|
---|
69 |
|
---|
70 | char **blockNames; /* The list of names ( Titles) for these blocks */
|
---|
71 | unsigned int nNTuples;
|
---|
72 | /* The maximum number of Ntuples defined for this
|
---|
73 | stream */
|
---|
74 |
|
---|
75 | } mcfxdrFileHeader;
|
---|
76 |
|
---|
77 | typedef struct _mcfxdrEventTable{
|
---|
78 | int id; /* Identifier for this item = EVENTTABLE */
|
---|
79 | int length; /* The length of data body, byte count, excluding
|
---|
80 | the id and version, and this word */
|
---|
81 | char version[MCF_XDR_VERSION_LENGTH+1];
|
---|
82 | /* The version of this particular block */
|
---|
83 | int nextLocator; /*The Locator for the next Event Table. */
|
---|
84 | int previousnumevts; /* The size of the previous Table */
|
---|
85 | int numevts; /* The number of events in this chunk */
|
---|
86 | unsigned int dim; /* The dimension of the arrays listed below */
|
---|
87 | unsigned int ievt; /* The current index in the list */
|
---|
88 | int *evtnums; /* The List of event numbers, within a store */
|
---|
89 | int *storenums; /* The list of Store number within a Run */
|
---|
90 | int *runnums; /* The list of run numbers */
|
---|
91 | int *trigMasks; /* The list of user-defined Trigger masks */
|
---|
92 | unsigned int *ptrEvents;
|
---|
93 | /* The list of XDR pointers for these events */
|
---|
94 | } mcfxdrEventTable;
|
---|
95 |
|
---|
96 | typedef struct _mcfxdrSequentialHeader{
|
---|
97 | int id; /* Identifier for this item = SEQUENTIALHEADER */
|
---|
98 | int length; /* The length of data body, byte count, excluding
|
---|
99 | the id and version, and this word */
|
---|
100 | char version[MCF_XDR_VERSION_LENGTH+1];
|
---|
101 | /* The version of this particular block */
|
---|
102 | unsigned int nRecords; /* The number of records (including this one)
|
---|
103 | in the logical event */
|
---|
104 | } mcfxdrSequentialHeader;
|
---|
105 |
|
---|
106 | typedef struct _mcfxdrEventHeader{
|
---|
107 | int id; /* Identifier for this item = CHUNKHEADER */
|
---|
108 | int length; /* The length of data body, byte count, excluding
|
---|
109 | the id and version, and this word */
|
---|
110 | char version[MCF_XDR_VERSION_LENGTH+1];
|
---|
111 | /* The version of this particular block */
|
---|
112 | int previousevtnum; /* The previous event number */
|
---|
113 | int evtnum; /* The event numbers, within a store */
|
---|
114 | int storenum; /* The Store number within a Run */
|
---|
115 | int runnum; /* The Run numbers */
|
---|
116 | int trigMask; /* The Trigger masks */
|
---|
117 | unsigned int nBlocks; /* The number of Blocks */
|
---|
118 | unsigned int dimBlocks; /* The dimension of the two following arrays */
|
---|
119 | int *blockIds; /* The list of Block identifiers */
|
---|
120 | unsigned int *ptrBlocks;
|
---|
121 | /* The list of XDR pointers for these blocks */
|
---|
122 | unsigned int nNTuples;
|
---|
123 | /* The number of Ntuples defined for this event */
|
---|
124 |
|
---|
125 | unsigned int dimNTuples; /* The dimension of the two following arrays */
|
---|
126 | int *nTupleIds; /* The list of Ntuple identifiers, pointing to the
|
---|
127 | global list array */
|
---|
128 | unsigned int *ptrNTuples;
|
---|
129 | /* The list of XDR pointers for these NTuples */
|
---|
130 |
|
---|
131 | } mcfxdrEventHeader;
|
---|
132 |
|
---|
133 | typedef struct _mcfStream{
|
---|
134 | int id; /* Id of the Stream */
|
---|
135 | int row; /* Read or Write */
|
---|
136 | int dos; /* Direct, Memory Mapped I/O or Sequential */
|
---|
137 | int status; /* The Stream status, either at BOF, RUNNING, EOF
|
---|
138 | or simply declared, and needs to be opened
|
---|
139 | (NTuple usage) */
|
---|
140 | int numWordsC; /* The number of words read or written, Content */
|
---|
141 | int numWordsT; /* The number of words read or written, Total */
|
---|
142 | mcfxdrFileHeader *fhead; /* The File header */
|
---|
143 | mcfxdrEventHeader *ehead; /* The current Event Header */
|
---|
144 | unsigned int currentPos; /* The XDR current position */
|
---|
145 | unsigned int evtPos; /* The XDR position for the begingin of evt */
|
---|
146 | unsigned int tablePos; /* The XDR position for the table */
|
---|
147 | unsigned int firstPos; /* The XDR position just before file header */
|
---|
148 | XDR *xdr; /* The XDR stream */
|
---|
149 | char *filename; /* Filename */
|
---|
150 | FILE *filePtr; /* The file pointer */
|
---|
151 | int fileDescr; /* File descriptor if Memory Mapped */
|
---|
152 | char *fileAddr; /* Address in virtual memory if Memory Mapped */
|
---|
153 | size_t fileLen; /* The file length */
|
---|
154 | mcfxdrEventTable *table; /* The event table */
|
---|
155 | char *device; /* The device name, if any */
|
---|
156 | char *vsn; /* The Visual S. number, e.g., the tape label */
|
---|
157 | int filenumber; /* The sequential file number, if any */
|
---|
158 | int minlrec; /* The minimum record length for this stream */
|
---|
159 | int maxlrec; /* The maximum record length for this stream */
|
---|
160 | int bufferSize; /* The current size of the primary buffer */
|
---|
161 | mcfxdrSequentialHeader *shead; /* The Sequential header */
|
---|
162 | char *buffer; /* A pointer to a generic data buffer, to get the
|
---|
163 | data from tape and then decode it */
|
---|
164 | char *buffer2; /* A secondary buffer, to hold the event
|
---|
165 | as the event grows */
|
---|
166 | } mcfStream;
|
---|
167 |
|
---|
168 | extern mcfStream **McfStreamPtrList;
|
---|
169 | extern char **McfGenericVersion;
|
---|
170 | extern unsigned int McfNumOfStreamActive;
|
---|
171 | extern bool_t McfNTuPleSaveDecoding;
|
---|
172 |
|
---|
173 | bool_t xdr_mcfast_generic(XDR *xdrs, int *blockid,
|
---|
174 | int *ntot, char** version, char** data);
|
---|
175 | bool_t xdr_mcfast_headerBlock(XDR *xdrs, int *blockid,
|
---|
176 | int *ntot, char** version);
|
---|
177 | bool_t xdr_mcfast_fileheader(XDR *xdrs, int *blockid,
|
---|
178 | int *ntot, char** version, mcfxdrFileHeader **mcf,
|
---|
179 | int streamId);
|
---|
180 | bool_t xdr_mcfast_eventtable(XDR *xdrs, int *blockid,
|
---|
181 | int *ntot, char** version, mcfxdrEventTable **mcf);
|
---|
182 | bool_t xdr_mcfast_seqheader(XDR *xdrs, int *blockid,
|
---|
183 | int *ntot, char** version, mcfxdrSequentialHeader **mcf);
|
---|
184 | bool_t xdr_mcfast_eventheader(XDR *xdrs, int *blockid,
|
---|
185 | int *ntot, char** version, mcfxdrEventHeader **mcf);
|
---|