60 if(verbose>0) {printf(
"ecat63ReadMatlist(fp, mlist)\n"); fflush(stdout);}
61 if(fp==NULL)
return(1);
69 if(verbose>1) {printf(
" reading dirblock %d\n", blk); fflush(stdout);}
70 sn=fread(dirbuf,
sizeof(
int),
MatBLKSIZE/4, fp);
72 if(verbose>0) {printf(
"sn=%d\n", (
int)sn); fflush(stdout);}
77 if(verbose>0) {printf(
"sn=%d\n", (
int)sn); fflush(stdout);}
88 if(ml->
matdir==NULL)
return(4);
96 if(verbose>3) printf(
"next_blk=%d\n", next_blk);
97 fpos_t current_fp; fgetpos(fp, ¤t_fp);
98 for(i=4; i<
MatBLKSIZE/4; i+=4)
if(dirbuf[i]>0) {
103 if(verbose>4) printf(
"matnum=%d strtblk=%d endblk=%d matstat=%d matrixNr=%d\n",
109 fsetpos(fp, ¤t_fp);
137 printf(
"nr\tmatrix\tpl\tfr\tgate\tbed\tstartblk\tblknr\n");
140 printf(
"%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", i+1, ml->
matdir[i].
matnum,
160 FILE *fp,
int matnum,
int blkNr
162 unsigned int i=0, dirblk, little, busy=1, nxtblk=0, oldsize;
165 if(
ECAT63_TEST) printf(
"ecat63Matenter(fp, %d, %d)\n", matnum, blkNr);
166 if(fp==NULL || matnum<1 || blkNr<1)
return(0);
171 if(ftello(fp)!=(
int)(dirblk-1)*
MatBLKSIZE)
return(0);
181 }
else if(dirbuf[i]==(
unsigned int)matnum) {
182 oldsize=dirbuf[i+2]-dirbuf[i+1]+1;
183 if(oldsize<(
unsigned int)blkNr) {
184 dirbuf[i] = 0xFFFFFFFF;
187 if(ftello(fp)!=(
int)(dirblk-1)*
MatBLKSIZE)
return(0);
190 nxtblk=dirbuf[i+2]+1;
192 nxtblk=dirbuf[i+1]; dirbuf[0]++; dirbuf[3]--; busy=0;
196 nxtblk=dirbuf[i+2]+1;
202 if(ftello(fp)!=(
int)(dirblk-1)*
MatBLKSIZE)
return(0);
209 if(ftello(fp)!=(
int)(dirblk-1)*
MatBLKSIZE)
return(0);
212 dirbuf[3]=0; dirblk=nxtblk;
218 dirbuf[i+2]=nxtblk+blkNr;
224 if(ftello(fp)!=(
int)(dirblk-1)*
MatBLKSIZE)
return(0);
226 if(
ECAT63_TEST) printf(
"returning %d from ecat63Matenter()\n", nxtblk);
243 int frame,
int plane,
int gate,
int data,
int bed
245 return((frame&0xFFF)|((bed&0xF)<<12)|((plane&0xFF)<<16)|
246 ((gate&0x3F)<<24)|((data&0x3)<<30));
255 int matnum,
Matval *matval
257 matval->
frame = matnum&0xFFF;
258 matval->
plane = (matnum>>16)&0xFF;
259 matval->
gate = (matnum>>24)&0x3F;
260 matval->
data = (matnum>>30)&0x3;
261 matval->
bed = (matnum>>12)&0xF;
277 for(
int i=0; i<ml->
matrixNr-1; i++) {
279 for(
int j=i+1; j<ml->
matrixNr; j++) {
303 for(
int i=0; i<ml->
matrixNr-1; i++) {
305 for(
int j=i+1; j<ml->
matrixNr; j++) {
327 if(ml==NULL)
return(1);
369 int m, prev_blk, blk;
372 if(mlist==NULL)
return STATUS_FAULT;
373 if(blk_nr!=NULL) *blk_nr=0;
379 if(blk!=prev_blk)
return STATUS_VARMATSIZE;
382 if(blk_nr!=NULL) *blk_nr=blk;
404 int m, plane, frame, prev_plane, prev_frame, fnr, pnr;
407 if(mlist==NULL)
return STATUS_FAULT;
408 if(plane_nr!=NULL) *plane_nr=0;
409 if(frame_nr!=NULL) *frame_nr=0;
414 prev_plane=plane=-1; prev_frame=frame=-1;
423 if(plane!=prev_plane) {
427 if(prev_frame>0 && frame!=prev_frame+1)
return STATUS_MISSINGMATRIX;
429 prev_plane=plane; prev_frame=frame;
431 if(fnr*pnr != mlist->
matrixNr)
return STATUS_MISSINGMATRIX;
432 if(plane_nr!=NULL) *plane_nr=pnr;
433 if(frame_nr!=NULL) *frame_nr=fnr;
451 MATRIXLIST *ml,
short int *num_planes,
short int *num_frames,
452 short int *num_gates,
short int *num_bed_pos
457 if(ml==NULL)
return(1);
462 if(matval == NULL)
return(3);
468 if(num_planes!=NULL) {
469 nmax=matval[0].
plane;
470 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].plane>nmax) nmax=matval[i].
plane;
474 if(num_frames!=NULL) {
475 nmax=matval[0].
frame;
476 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].frame>nmax) nmax=matval[i].
frame;
480 if(num_gates!=NULL) {
482 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].gate>nmax) nmax=matval[i].
gate;
486 if(num_bed_pos!=NULL) {
488 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].bed>nmax) nmax=matval[i].
bed;
511 MATRIXLIST *ml,
short int do_planes,
short int do_frames,
short int do_gates,
517 if(ml==NULL)
return(1);
522 if(matval == NULL)
return(3);
530 while(ncurr <= ml->matrixNr) {
532 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].plane==ncurr) {n=1;
break;}
534 if(n==1) {ncurr++;
continue;}
537 if(matval[i].plane>ncurr) {
538 matval[i].
plane--; n++;
548 while(ncurr <= ml->matrixNr) {
550 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].frame==ncurr) {n=1;
break;}
552 if(n==1) {ncurr++;
continue;}
555 if(matval[i].frame>ncurr) {matval[i].
frame--; n++;}
564 while(ncurr <= ml->matrixNr) {
566 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].gate==ncurr) {n=1;
break;}
568 if(n==1) {ncurr++;
continue;}
571 if(matval[i].gate>ncurr) {matval[i].
gate--; n++;}
580 while(ncurr <= ml->matrixNr) {
582 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].bed==ncurr) {n=1;
break;}
584 if(n==1) {ncurr++;
continue;}
587 if(matval[i].bed>ncurr) {matval[i].
bed--; n++;}
595 matval[i].frame, matval[i].plane,
596 matval[i].gate, matval[i].data,
int ecat63Matenter(FILE *fp, int matnum, int blkNr)
int ecat63ReadMatlist(FILE *fp, MATRIXLIST *ml, int verbose)
int ecat63GetPlaneAndFrameNr(MATRIXLIST *mlist, ECAT63_mainheader *h, int *plane_nr, int *frame_nr)
void ecat63InitMatlist(MATRIXLIST *mlist)
void ecat63EmptyMatlist(MATRIXLIST *mlist)
int ecat63GatherMatlist(MATRIXLIST *ml, short int do_planes, short int do_frames, short int do_gates, short int do_beds)
int mat_numcod(int frame, int plane, int gate, int data, int bed)
int ecat63GetNums(MATRIXLIST *ml, short int *num_planes, short int *num_frames, short int *num_gates, short int *num_bed_pos)
int ecat63GetMatrixBlockSize(MATRIXLIST *mlist, int *blk_nr)
int ecat63DeleteLateFrames(MATRIXLIST *ml, int frame_nr)
void ecat63SortMatlistByPlane(MATRIXLIST *ml)
void ecat63PrintMatlist(MATRIXLIST *ml)
int ecat63CheckMatlist(MATRIXLIST *ml)
void mat_numdoc(int matnum, Matval *matval)
void ecat63SortMatlistByFrame(MATRIXLIST *ml)
Header file for libtpcimgio.
void swawbip(void *buf, long long int size)