104 if(
ECAT63_TEST) printf(
"ecat63ReadMatlist(fp, mlist)\n");
105 if(fp==NULL)
return(1);
106 little=little_endian();
113 if(
ECAT63_TEST) printf(
" reading dirblock %d\n", blk);
123 if(ml->
matdir==NULL)
return(4);
128 next_blk = dirbuf[1];
129 prev_blk = dirbuf[2];
132 for(i=4; i<
MatBLKSIZE/4; i+=4)
if(dirbuf[i]>0) {
164 printf(
" matrix pl fr gate bed startblk blknr\n");
167 printf(
"%4d %8d %3d %3d %3d %3d %8d %3d\n", i+1, ml->
matdir[i].
matnum,
187 unsigned int i=0, dirblk, little, busy=1, nxtblk=0, oldsize;
190 if(
ECAT63_TEST) printf(
"ecat63Matenter(fp, %d, %d)\n", matnum, blkNr);
191 if(fp==NULL || matnum<1 || blkNr<1)
return(0);
192 little=little_endian(); memset(dirbuf, 0,
MatBLKSIZE);
196 if(ftell(fp)!=(dirblk-1)*
MatBLKSIZE)
return(0);
206 }
else if(dirbuf[i]==matnum) {
207 oldsize=dirbuf[i+2]-dirbuf[i+1]+1;
209 dirbuf[i] = 0xFFFFFFFF;
212 if(ftell(fp)!=(dirblk-1)*
MatBLKSIZE)
return(0);
215 nxtblk=dirbuf[i+2]+1;
217 nxtblk=dirbuf[i+1]; dirbuf[0]++; dirbuf[3]--; busy=0;
221 nxtblk=dirbuf[i+2]+1;
227 if(ftell(fp)!=(dirblk-1)*
MatBLKSIZE)
return(0);
234 if(ftell(fp)!=(dirblk-1)*
MatBLKSIZE)
return(0);
237 dirbuf[3]=0; dirblk=nxtblk;
243 dirbuf[i+2]=nxtblk+blkNr;
250 if(
ECAT63_TEST) printf(
"returning %d from ecat63Matenter()\n", nxtblk);
266 int mat_numcod(
int frame,
int plane,
int gate,
int data,
int bed) {
267 return((frame&0xFFF)|((bed&0xF)<<12)|((plane&0xFF)<<16)|
268 ((gate&0x3F)<<24)|((data&0x3)<<30));
277 matval->
frame = matnum&0xFFF;
278 matval->
plane = (matnum>>16)&0xFF;
279 matval->
gate = (matnum>>24)&0x3F;
280 matval->
data = (matnum>>30)&0x3;
281 matval->
bed = (matnum>>12)&0xF;
345 if(ml==NULL)
return(1);
383 int m, prev_blk, blk;
387 if(blk_nr!=NULL) *blk_nr=0;
396 if(blk_nr!=NULL) *blk_nr=blk;
416 int m, plane, frame, prev_plane, prev_frame, fnr, pnr;
420 if(plane_nr!=NULL) *plane_nr=0;
421 if(frame_nr!=NULL) *frame_nr=0;
426 prev_plane=plane=-1; prev_frame=frame=-1;
435 if(plane!=prev_plane) {
441 prev_plane=plane; prev_frame=frame;
444 if(plane_nr!=NULL) *plane_nr=pnr;
445 if(frame_nr!=NULL) *frame_nr=fnr;
462 int ecat63GetNums(
MATRIXLIST *ml,
short int *num_planes,
short int *num_frames,
short int *num_gates,
short int *num_bed_pos) {
466 if(ml==NULL)
return(1);
471 if(matval == NULL)
return(3);
477 if(num_planes!=NULL) {
478 nmax=matval[0].
plane;
479 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].plane>nmax) nmax=matval[i].
plane;
483 if(num_frames!=NULL) {
484 nmax=matval[0].
frame;
485 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].frame>nmax) nmax=matval[i].
frame;
489 if(num_gates!=NULL) {
491 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].gate>nmax) nmax=matval[i].
gate;
495 if(num_bed_pos!=NULL) {
497 for(i=1; i<ml->
matrixNr; i++)
if(matval[i].bed>nmax) nmax=matval[i].
bed;
523 if(ml==NULL)
return(1);
528 if(matval == NULL)
return(3);
536 while(ncurr <= ml->matrixNr) {
538 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].plane==ncurr) {n=1;
break;}
540 if(n==1) {ncurr++;
continue;}
543 if(matval[i].plane>ncurr) {
544 matval[i].
plane--; n++;
554 while(ncurr <= ml->matrixNr) {
556 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].frame==ncurr) {n=1;
break;}
558 if(n==1) {ncurr++;
continue;}
561 if(matval[i].frame>ncurr) {matval[i].
frame--; n++;}
570 while(ncurr <= ml->matrixNr) {
572 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].gate==ncurr) {n=1;
break;}
574 if(n==1) {ncurr++;
continue;}
577 if(matval[i].gate>ncurr) {matval[i].
gate--; n++;}
586 while(ncurr <= ml->matrixNr) {
588 for(i=0, n=0; i<ml->
matrixNr; i++)
if(matval[i].bed==ncurr) {n=1;
break;}
590 if(n==1) {ncurr++;
continue;}
593 if(matval[i].bed>ncurr) {matval[i].
bed--; n++;}
601 matval[i].frame, matval[i].plane,
602 matval[i].gate, matval[i].data,