2 * functions for the mcfile structure
9 #include "rdmc_local.h"
13 void rdmc_init_mcfile_f2000(f2000_fp_t *t);
14 void rdmc_free_mcfile_f2000(f2000_fp_t *t);
15 void rdmc_init_mcfile_dumand(dumand_fp_t *t);
16 void rdmc_init_mcfile_uwi(uwi_fp_t *t);
17 void rdmc_init_mcfile_baikal(baikal_fp_t *t);
20 /****************************************************************************/
21 /* mccpfp() copies the relevant fields from one mcfile* to another */
22 /* (this is useful for file transforming) */
23 /****************************************************************************/
25 int rdmc_mccpfp(const mcfile *src, mcfile *dest)
27 if ((src == NULL) || (dest == NULL))
30 the file pointer, src->fp
32 the format, src->format
33 also not: fpos,fmajor,fminor,zipped,errline,sloppy, last_line h_buff,e_buff
34 But: creator,comment,nrun,time
35 The format specific stuff is converted to comments */
37 dest->time = src->time;
38 dest->nrun = src->nrun;
40 memcpy(dest->last_line,src->last_line,RDMC_MAXLINE*sizeof(char));
42 /* copy creator + comment structure */
44 rdmc_append_comment(&(dest->creator),src->creator);
46 rdmc_append_comment(&(dest->comment),src->comment);
48 /* now tryy to convert the special info */
52 /* nothing is to be copied here */
56 case DUMAND_ASCII_F: /* if it is a dumand-like format */
57 switch (dest->format){
59 memcpy(&(dest->info),&(src->info),sizeof(rdmc_special_format_info_t));
63 { /* copy everything to a comment line */
64 char tmp[RDMC_MAXLINE];
65 sprintf(tmp,"! DUM-Form M-header: id=%c mc_vers=%s \n",src->info.dum.mc_id,src->info.dum.mc_vers);
66 rdmc_append_comment(&(dest->comment),tmp);
68 "! DUM-Form M-header: igen=%i, igeo=%i, igtrack=%i, daswrun=%i\n"
69 ,src->info.dum.igen,src->info.dum.igeo
70 ,src->info.dum.igtrack,src->info.dum.daswrun);
71 rdmc_append_comment(&(dest->comment),tmp);
77 dest->info.uwi.mc_id = src->info.dum.mc_id;
78 strcpy(dest->info.uwi.mc_vers, src->info.dum.mc_vers);
83 dest->info.bai.mc_id = src->info.dum.mc_id;
84 dest->info.bai.igen = src->info.dum.igen;
85 dest->info.bai.igtrack = src->info.dum.igtrack;
86 dest->info.bai.time = src->info.dum.time;
87 dest->info.bai.nrun = src->info.dum.nrun;
88 strcpy(dest->info.bai.mc_vers, src->info.dum.mc_vers);
92 return RDMC_UNKNOWN_FORMAT;
97 case UWI_ASCII_F: /* if it is the UWI format: read default geometry */
98 switch (dest->format){
100 memcpy(&(dest->info),&(src->info),sizeof(rdmc_special_format_info_t));
102 #ifdef AMANDA_ASCII_F
103 case AMANDA_ASCII_F :
104 { /* copy everything to a comment line */
105 char tmp[RDMC_MAXLINE];
106 sprintf(tmp,"! UWI-Format header: id=%c mc_vers=%s \n"
107 ,src->info.uwi.mc_id,src->info.uwi.mc_vers);
108 rdmc_append_comment(&(dest->comment),tmp);
112 #ifdef DUMAND_ASCII_F
113 case DUMAND_ASCII_F :
114 dest->info.dum.mc_id = src->info.uwi.mc_id;
115 strcpy(dest->info.dum.mc_vers, src->info.uwi.mc_vers);
120 dest->info.bai.mc_id = src->info.uwi.mc_id;
121 strcpy(dest->info.bai.mc_vers, src->info.uwi.mc_vers);
125 return RDMC_UNKNOWN_FORMAT;
130 case BAIKAL_BIN_F: /* if it is a baikal-like format */
131 switch (dest->format){
133 memcpy(&(dest->info),&(src->info),sizeof(rdmc_special_format_info_t));
135 #ifdef AMANDA_ASCII_F
136 case AMANDA_ASCII_F :
137 { /* copy everything to a comment line */
138 char tmp[RDMC_MAXLINE];
139 sprintf(tmp,"! BAI-Form header: id=%c mc_vers=%s \n",src->info.bai.mc_id,src->info.bai.mc_vers);
140 rdmc_append_comment(&(dest->comment),tmp);
141 sprintf(tmp,"! BAI-Form header: igen=%i, igtrack=%i\n"
142 ,src->info.bai.igen,src->info.dum.igtrack);
143 rdmc_append_comment(&(dest->comment),tmp);
144 sprintf(tmp,"! BAI-Form header: rec_vers=%i, min_vers=%i mc=%i\n"
145 ,src->info.bai.rec_vers,src->info.bai.min_vers
147 rdmc_append_comment(&(dest->comment),tmp);
151 #ifdef DUMAND_ASCII_F
152 case DUMAND_ASCII_F :
153 dest->info.dum.mc_id = src->info.bai.mc_id;
154 dest->info.dum.igen = src->info.bai.igen;
155 dest->info.dum.igtrack = src->info.bai.igtrack;
156 dest->info.dum.time = src->info.bai.time;
157 dest->info.dum.nrun = src->info.bai.nrun;
158 strcpy(dest->info.dum.mc_vers, src->info.bai.mc_vers);
163 dest->info.dum.mc_id = src->info.bai.mc_id;
164 strcpy(dest->info.dum.mc_vers, src->info.bai.mc_vers);
168 return RDMC_UNKNOWN_FORMAT;
173 return RDMC_UNKNOWN_FORMAT;
182 void rdmc_init_mcfile(mcfile *fp, int format, int mode, FILE *tf)
187 fp->fmajor = fp->fminor = fp->zipped = 0;
188 fp->creator = fp->comment = NULL; /* default: no file creator */
198 #ifdef DUMAND_ASCII_F
199 case DUMAND_ASCII_F: /* if it is a dumand-like format */
200 rdmc_init_mcfile_dumand(&(fp->info.dum));
201 fp->fmajor = DUMAND_ASCII_VERSION;
205 case UWI_ASCII_F: /* if it is the UWI format: read default geometry */
206 rdmc_init_mcfile_uwi(&(fp->info.uwi));
207 fp->fmajor = UWI_ASCII_VERSION;
210 #ifdef AMANDA_ASCII_F
211 case AMANDA_ASCII_F: /* if it is a amanda-like format */
212 rdmc_init_mcfile_f2000(&(fp->info.f2000));
213 fp->fmajor = AMANDA_ASCII_VERSION;
214 fp->fminor = AMANDA_ASCII_MINOR;
218 case BAIKAL_BIN_F: /* if it is a baikal-like format */
219 rdmc_init_mcfile_baikal(&(fp->info.bai));
220 fp->fmajor = BAIKAL_NEW; /* default: new format */
228 void rdmc_init_mcfile_f2000(f2000_fp_t *t){
230 t->parse_line[0] = '\0' ;
233 t->f2k_buffer = malloc(sizeof(rdmc_f2k_buffer_t));
234 rdmc_init_f2k_buffer(t->f2k_buffer);
237 void rdmc_free_mcfile_f2000(f2000_fp_t *t){
238 rdmc_unlink_f2k_buffer(t->f2k_buffer);
243 void rdmc_init_mcfile_dumand(dumand_fp_t *t){
253 void rdmc_init_mcfile_uwi(uwi_fp_t *t){
255 strcpy(t->mc_vers,"0.");
258 void rdmc_init_mcfile_baikal(baikal_fp_t *t){
259 t->mc = 1; /* default: mc file */
260 t->swap = 0; /* default: no bytes swapped */
261 t->fortran_recs = 1; /* default: fortran file */
266 t->enr = 0; /* first event number */
268 strcpy(t->mc_vers,"0.");
275 void rdmc_free_mcfile(mcfile *fp)
277 if (fp->format == AMANDA_ASCII_F)
278 rdmc_free_mcfile_f2000(&(fp->info.f2000));