/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/INFN/gen_mcmds.c
ViewVC logotype

Contents of /quicklook/dataToXML/Data/compilationInfo/src/INFN/gen_mcmds.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Tue Apr 25 09:00:20 2006 UTC (18 years, 8 months ago) by kusanagi
Branch: MAIN
CVS Tags: dataToXML1_02/01, dataToXML1_02/00, dataToXML1_03/00, dataToXML1_03/01, dataToXML1_00/00, firstRelease, dataToXML1_01/00, dataToXML1_03_02, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Error occurred while calculating annotation data.
These program extract in an XML format the info contained into the ROOT files generated by YODA from the PAMELA data. To visualize the XML files in a more human readable format a collection of XSL files are given in the Data subfolder.

1 /* Note for input file format:
2
3 should declare first V,then A, then T all grouped by type
4
5 */
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 #define FLISTNAME "PRH_ParamHandler_INFN_auto.id"
10 #define TRUE 1
11 #define FALSE 0
12 #define MAXMODE 2
13
14 #define SETPARAMETERGEN 0x20
15 #define TESTDEBUG 0x43
16
17 struct list_el
18 {
19 struct list_el *next;
20 char string[255];
21 int id;
22 };
23
24 typedef struct
25 {
26 char str[255];
27 unsigned char code;
28 } sub_struct;
29
30 typedef struct list_el listItem;
31
32
33 listItem *beginList,*beginCommand=NULL;
34 unsigned char bufferOut[2048];
35 int subid;
36 sub_struct subCommandMode[MAXMODE]={{"SetParameterGen",SETPARAMETERGEN},{"TestDebug",TESTDEBUG}};
37
38
39 void convertHex2Dec(char *str)
40 {
41 char tmp[255]="";
42 char dec[10]="";
43 char *p,*s;
44 unsigned int value;
45
46 if ((p = strstr(str,"0x")) != NULL)
47 {
48 strncat(tmp,str,p-str);
49 sscanf(p+2,"%x",&value);
50 sprintf(dec,"%d",value);
51 strcat(tmp,dec);
52 memcpy(str,tmp,strlen(tmp));
53 str[strlen(tmp)]=0;
54 }
55 }
56
57 int loadList(char * filename,listItem **first,int command)
58 {
59 FILE *fileList;
60 char *s;
61 char tmp[255],tmp_1[255];
62
63 int ret = TRUE;
64
65 listItem *loc=NULL,*cur;
66
67 if ((fileList = fopen(filename,"r")) != NULL)
68 {
69 while (fgets(tmp,254,fileList) != NULL )
70 {
71 cur = (listItem*)malloc(sizeof(listItem));
72
73 if (loc == NULL)
74 {
75 *first = cur; loc = cur;
76 cur->next = NULL;
77 }
78 else
79 {
80 loc->next = cur;
81 loc = cur;
82 cur->next = NULL;
83 }
84
85 if (command == TRUE)
86 {
87 strncpy(cur->string,tmp,strlen(tmp)-1);
88 }
89 else
90 {
91 sscanf(tmp,"%s %d\n",tmp_1,&ret);
92 strncpy(cur->string,tmp_1,strlen(tmp_1));
93 }
94 cur->id = ret;
95 }
96 ret = TRUE;
97 fclose(fileList);
98 }
99 else
100 {
101 printf("Cannot open file %s!!!\n",FLISTNAME);
102 ret = FALSE;
103 }
104
105 return(ret);
106 }
107
108 void parseCommand()
109 {
110 listItem *loc;
111 char fileName[255];
112 int count = 0;
113 int VCount = 0,VFirst = TRUE,VSave,VInc;
114 int ACount = 0,AFirst = TRUE,ASave,AInc;
115 int TCount = 0,TFirst = TRUE,TSave,TInc;
116
117 loc = beginCommand;
118 memset(bufferOut,0,2048);
119
120 while (loc != NULL)
121 {
122 if (count == 0)
123 {
124 if ((loc->string[0] == 0x0a) || (loc->string[0] == 0x0))
125 {
126 printf("Finished !");
127 exit(0);
128 }
129
130 strncpy(fileName,loc->string,strlen(loc->string)+1);
131 loc = loc->next;
132 count++;
133
134 if (strcmp(loc->string,""))
135 printf("Processing file: %s\n",fileName);
136
137 continue;
138 }
139
140 if (count == 1)
141 {
142 if ((subid = returnID(loc->string)) != -1)
143 {
144 bufferOut[0] = 0;
145 bufferOut[1] = subid;
146 loc = loc->next;
147 count+=3;
148 continue;
149 }
150 else
151 {
152 printf("Fatal Error: unknown subcommand %s\n",loc->string);
153 exit(1);
154 }
155 }
156
157 if (strcmp(loc->string,""))
158 printf("Processing: %s \n",loc->string);
159
160 convertHex2Dec(loc->string);
161
162 switch (subid) // last subid
163 {
164 case SETPARAMETERGEN :
165
166 switch (loc->string[0])
167 {
168 case 'V' :
169 {
170 char type[255],name[255];
171 unsigned int value,id;
172
173 sscanf(loc->string,"%s %s %d\n",type,name,&value);
174
175 if (VFirst)
176 {
177 VSave = count; // the place for the command number
178 VFirst = FALSE;
179 VInc = 1; // do not consider N after first time
180 }
181
182 if ((id = scanList4ID(name)) != -1)
183 {
184 bufferOut[count+VInc] = id;
185 bufferOut[count+1+VInc] = ((value & 0xff000000) >> 24);
186 bufferOut[count+2+VInc] = ((value & 0x00ff0000) >> 16);
187 bufferOut[count+3+VInc] = ((value & 0x0000ff00) >> 8);
188 bufferOut[count+4+VInc] = value & 0x000000ff;
189
190 count+=(5+VInc);
191 VCount++;
192 VInc = 0;
193 }
194 else
195 {
196 printf("Fatal Error: unknown macrocommand %s\n",loc->string);
197 exit(1);
198 }
199
200 if (loc->next)
201 if (loc->next->string[0] != loc->string[0])
202 bufferOut[VSave] = VCount;
203 }
204 break;
205
206 case 'A' :
207 {
208 char type[255],name[255];
209 unsigned int value,id,index;
210
211 if (VFirst) // write 0 if V is not present
212 {
213 bufferOut[count] = 0;
214 count++;
215 VFirst = 0;
216 }
217
218 sscanf(loc->string,"%s %s %d %d\n",type,name,&index,&value);
219
220 if (AFirst)
221 {
222 ASave = count; // the place for the command number
223 AFirst = FALSE;
224 AInc = 1;
225 }
226
227 if ((id = scanList4ID(name)) != -1)
228 {
229 bufferOut[count+AInc] = id;
230 bufferOut[count+1+AInc] = index;
231 bufferOut[count+2+AInc] = ((value & 0xff000000) >> 24);
232 bufferOut[count+3+AInc] = ((value & 0x00ff0000) >> 16);
233 bufferOut[count+4+AInc] = ((value & 0x0000ff00) >> 8);
234 bufferOut[count+5+AInc] = value & 0x000000ff;
235 count+=(6+AInc);
236 ACount++;
237 AInc = 0;
238 }
239 else
240 {
241 printf("Fatal Error: unknown macrocommand %s\n",loc->string);
242 exit(1);
243 }
244
245 if (loc->next)
246 if (loc->next->string[0] != loc->string[0])
247 bufferOut[ASave] = ACount;
248 }
249 break;
250
251 case 'T' :
252 {
253 char type[255],name[255];
254 unsigned int value,id,row,col;
255
256 sscanf(loc->string,"%s %s %d %d %d\n",type,name,&row,&col,&value);
257
258 if (VFirst) // write 0 if V is not present
259 {
260
261 bufferOut[count] = 0;
262 count++;
263 VFirst = 0;
264 }
265
266 if (AFirst) // write 0 if V is not present
267 {
268 bufferOut[count] = 0;
269 count++;
270 AFirst = 0;
271 }
272
273 if (TFirst)
274 {
275 TSave = count; // the place for the command number
276 TFirst = FALSE;
277 TInc = 1;
278 }
279
280 if ((id = scanList4ID(name)) != -1)
281 {
282 bufferOut[count+TInc] = id;
283 bufferOut[count+1+TInc] = row;
284 bufferOut[count+2+TInc] = col;
285 bufferOut[count+3+TInc] = ((value & 0xff000000) >> 24);
286 bufferOut[count+4+TInc] = ((value & 0x00ff0000) >> 16);
287 bufferOut[count+5+TInc] = ((value & 0x0000ff00) >> 8);
288 bufferOut[count+6+TInc] = value & 0x000000ff;
289
290 count+=(7+TInc);
291 TCount++;
292 TInc = 0;
293 }
294 else
295 {
296 printf("Fatal Error: unknown macrocommand %s\n",loc->string);
297 exit(1);
298 }
299
300 if (loc->next)
301 if (loc->next->string[0] != loc->string[0])
302 bufferOut[TSave] = TCount;
303 }
304 break;
305 case 0 :
306 {
307 int c;
308
309 if (VFirst) // write 0 if V is not present
310 {
311 bufferOut[count] = 0;
312 count++;
313 }
314
315 if (AFirst) // write 0 if V is not present
316 {
317 bufferOut[count] = 0;
318 count++;
319 }
320
321 if (TFirst) // write 0 if V is not present
322 {
323 bufferOut[count] = 0;
324 count++;
325 }
326
327 c = count;
328
329 while ((count % 4) != 0)
330 count++;
331
332 memset(&bufferOut[c],0,count-c);
333
334 bufferOut[2] = (((count-4)/4) & 0x0100) >> 8;
335 bufferOut[3] = ((count-4)/4) & 0x00ff;
336
337 if (!write2File(fileName,count))
338 {
339 printf("Error writing on file %s\n",fileName);
340 exit(1);
341 }
342
343 count = 0;
344 VCount = 0; VFirst = TRUE;
345 ACount = 0; AFirst = TRUE;
346 TCount = 0; TFirst = TRUE;
347 }
348 break;
349
350 default :
351 printf("Fatal Error : variable identifier not known !\n");
352 exit(1);
353 }
354 break;
355
356 case TESTDEBUG:
357 {
358 unsigned int value;
359
360 if (loc->string[0])
361 {
362 sscanf(loc->string,"%d\n",&value);
363
364 bufferOut[count] = ((value & 0xff00) >> 8);
365 bufferOut[count+1] = value & 0x00ff;
366 count+=2;
367 }
368 else
369 {
370 bufferOut[2] = 0;
371 bufferOut[3] = 1;
372
373 if (!write2File(fileName,count))
374 {
375 printf("Error writing on file %s\n",fileName);
376 exit(1);
377 }
378
379 count = 0;
380 }
381
382 }
383 break;
384 }
385
386 loc = loc->next;
387
388 }
389 }
390
391 int returnID(char *key)
392 {
393 int i;
394
395 for (i=0; i < MAXMODE; i++)
396 {
397 if (strncmp(key,subCommandMode[i].str,strlen(subCommandMode[i].str)) == 0)
398 return subCommandMode[i].code;
399 }
400 return(-1);
401 }
402
403 int scanList4ID(char *name)
404 {
405 listItem *loc;
406
407 loc = beginList;
408
409 while (loc != NULL)
410 {
411 if (strncmp(name,loc->string,strlen(loc->string)) == 0)
412 return loc->id;
413 loc = loc->next;
414 }
415 return(-1);
416 }
417
418
419 int write2File(char *filename,int count)
420 {
421 FILE *out;
422 int ret = TRUE;
423 int i = 0,c;
424 char binname[255];
425 unsigned short data;
426
427 c = count;
428
429 if ((out = fopen(filename,"w")) != NULL)
430 {
431 count = count / 2;
432
433 while (count--)
434 {
435 fprintf(out,"0x%02x%02x\n",bufferOut[i],bufferOut[i+1]);
436 i+=2;
437 }
438 fclose(out);
439 }
440 else
441 ret = FALSE;
442
443
444 strcpy(binname,filename);
445 strcat(binname,".bin");
446
447 if ((out = fopen(binname,"w")) != NULL)
448 {
449 c = c / 2; i = 0;
450
451 while (c--)
452 {
453 data = *(unsigned short*)&bufferOut[i];
454 fputc((unsigned char)((data & 0xff00) >> 8),out);
455 fputc((unsigned char)((data & 0x00ff)),out);
456 i+=2;
457 }
458
459 fclose(out);
460 }
461 else
462 ret = FALSE;
463
464 return(ret);
465 }
466
467 void printList(listItem *first)
468 {
469 listItem *loc;
470
471 loc = first;
472
473 while (loc != NULL)
474 {
475 printf("%s %d\n",loc->string,loc->id);
476 loc = loc->next;
477 }
478 }
479 int main (int argc,char *argv[])
480 {
481 if (argc > 1)
482 {
483 loadList(FLISTNAME,&beginList,FALSE);
484 loadList(argv[1],&beginCommand,TRUE);
485
486 printf("Processing file %s\n\n",argv[1]);
487
488 parseCommand();
489 }
490 else
491 printf("\nMissing filename !!\n");
492 return 0;
493 }
494
495

  ViewVC Help
Powered by ViewVC 1.1.23