78 if(
ECAT63_TEST) printf(
"ecat63WriteMainheader()\n");
79 little=little_endian();
85 tovax=1;
else tovax=0;
102 memcpy(buf+472, h->
fill2, 40);
121 memcpy(buf+14, h->
fill1, 14);
152 int i, little, tovax;
155 if(
ECAT63_TEST) printf(
"ecat63WriteImageheader(fp, %d, ih)\n", block);
156 little=little_endian();
160 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
162 tovax=1;
else tovax=0;
173 memcpy(buf+460, h->
fill2, 52);
225 if(
ECAT63_TEST) printf(
"ecat63WriteAttnheader(fp, %d, ah)\n", block);
226 little=little_endian();
230 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
232 tovax=1;
else tovax=0;
252 if(ftell(fp)!=(block-1)*
MatBLKSIZE)
return(2);
271 int i, little, tovax;
274 if(
ECAT63_TEST) printf(
"ecat63WriteScanheader(fp, %d, ih)\n", block);
275 little=little_endian();
279 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
281 tovax=1;
else tovax=0;
289 memcpy(buf+468, h->
fill2, 44);
297 for(i=0; i<16; i++) {
317 memcpy(buf+0, h->
fill1, 126);
341 if(
ECAT63_TEST) printf(
"ecat63WriteNormheader(fp, %d, nh)\n", block);
342 little=little_endian();
346 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
348 tovax=1;
else tovax=0;
368 if(ftell(fp)!=(block-1)*
MatBLKSIZE)
return(2);
388 char tmp[FILENAME_MAX];
393 if(fname==NULL || h==NULL)
return(NULL);
395 if(access(fname, 0) != -1) {
397 if(access(tmp, 0) != -1)
remove(tmp);
398 if(
ECAT63_TEST) printf(
"Renaming %s -> %s\n", fname, tmp);
402 fp=fopen(fname,
"wb+");
if(fp==NULL)
return(fp);
407 buf[0]=31; buf[1]=2;
if(!little_endian()) swawbip(buf,
MatBLKSIZE);
430 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
432 if(
ECAT63_TEST) printf(
"ecat63WriteImage(fp, %d, ih, data)\n", matnum);
433 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
451 data_size=pxlNr*pxlSize;
461 if(ret)
return(50+ret);
479 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
481 if(
ECAT63_TEST) printf(
"ecat63WriteScan(fp, %d, sh, data)\n", matnum);
482 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
500 data_size=pxlNr*pxlSize;
510 if(ret)
return(50+ret);
528 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
530 if(
ECAT63_TEST) printf(
"ecat63WriteNorm(fp, %d, nh, data)\n", matnum);
531 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
549 data_size=pxlNr*pxlSize;
559 if(ret)
return(50+ret);
577 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
579 if(
ECAT63_TEST) printf(
"ecat63WriteAttn(fp, %d, ah, data)\n", matnum);
580 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
598 data_size=pxlNr*pxlSize;
608 if(ret)
return(50+ret);
632 int i, blkNr, dataSize, byteNr, little;
634 if(
ECAT63_TEST) printf(
"ecat63WriteMatdata(fp, %d, data, %d, %d)\n", strtblk, pxlNr, pxlSize);
635 if(fp==NULL || strtblk<1 || data==NULL || pxlNr<1 || pxlSize<1)
return(1);
636 little=little_endian(); memset(buf, 0,
MatBLKSIZE);
637 dataSize=pxlNr*pxlSize;
if(dataSize<1)
return(1);
644 for(i=0, dptr=data; i<blkNr && dataSize>0; i++) {
646 memcpy(buf, dptr, byteNr);
648 if(!little_endian()) {
649 if(pxlSize==2) swabip(buf, byteNr);
650 else if(pxlSize==4) swawbip(buf, byteNr);
676 if(nr<1 || data==NULL)
return(0);
678 if(amax<0.9999)
return(1);
680 if(modf(amax, &d)>0.0001)
return(1);
682 for(i=0; i<nr; i++) if(modf(*data++, &d)>0.0001)
return(1);
701 int i, nxtblk, blkNr, data_size, pxlNr, ret;
702 float *fptr, fmin, fmax, g, f;
708 if(
ECAT63_TEST) printf(
"ecat63WriteImageMatrix(fp, %d, h, data)\n", matnum);
709 if(fp==NULL || matnum<1 || h==NULL || fdata==NULL) {
727 mdata=(
char*)calloc(blkNr,
MatBLKSIZE);
if(mdata==NULL) {
732 fptr=fdata; fmin=fmax=*fptr;
733 for(i=0; i<pxlNr; i++, fptr++) {
734 if(*fptr>fmax) fmax=*fptr;
else if(*fptr<fmin) fmin=*fptr;
736 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
737 if(g>0) f=32766./g;
else f=1.0;
743 sptr=(
short int*)mdata; fptr=fdata;
744 for(i=0; i<pxlNr; i++, sptr++, fptr++) *sptr=(
short int)temp_roundf(f*(*fptr));
746 h->
image_min=(
short int)temp_roundf(f*fmin);
747 h->
image_max=(
short int)temp_roundf(f*fmax);
750 sprintf(
ecat63errmsg,
"cannot determine matrix block (%d).\n", -nxtblk);
751 free(mdata);
return(8);
753 if(
ECAT63_TEST>2) printf(
" block=%d fmin=%g fmax=%g\n", nxtblk, fmin, fmax);
756 sprintf(
ecat63errmsg,
"cannot write subheader (%d).\n", ret);
757 free(mdata);
return(10);
764 sprintf(
ecat63errmsg,
"cannot write matrix data (%d).\n", ret);
785 int i, nxtblk, blkNr, data_size, pxlNr, ret;
786 float *fptr, fmin, fmax, g, f;
791 if(
ECAT63_TEST) printf(
"ecat63WriteScanMatrix(fp, %d, h, data)\n", matnum);
792 if(fp==NULL || matnum<1 || h==NULL || fdata==NULL) {
810 mdata=(
char*)calloc(blkNr,
MatBLKSIZE);
if(mdata==NULL) {
815 fptr=fdata; fmin=fmax=*fptr;
816 for(i=0; i<pxlNr; i++, fptr++) {
817 if(*fptr>fmax) fmax=*fptr;
else if(*fptr<fmin) fmin=*fptr;
819 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
820 if(g>0) f=32766./g;
else f=1.0;
826 sptr=(
short int*)mdata; fptr=fdata;
827 for(i=0; i<pxlNr; i++, sptr++, fptr++) *sptr=(
short int)temp_roundf(f*(*fptr));
829 h->
scan_min=(
short int)temp_roundf(f*fmin);
830 h->
scan_max=(
short int)temp_roundf(f*fmax);
833 sprintf(
ecat63errmsg,
"cannot determine matrix block (%d).\n", -nxtblk);
834 free(mdata);
return(8);
836 if(
ECAT63_TEST>2) printf(
" block=%d fmin=%g fmax=%g\n", nxtblk, fmin, fmax);
839 sprintf(
ecat63errmsg,
"cannot write subheader (%d).\n", ret);
840 free(mdata);
return(10);
847 sprintf(
ecat63errmsg,
"cannot write matrix data (%d).\n", ret);
866 memcpy(&ul, bufi, 4);
if(ul==0) {memcpy(bufo, bufi, 4);
return;}
870 if(islittle) swawip(&ul, 4);
else swabip(&ul, 4);
872 if(!islittle) swawbip(&ul, 4);
874 memcpy(bufo, &ul, 4);
885 void ecat63wInt(
int *bufi,
void *bufo,
int tovax,
int islittle) {
889 memcpy(&i, bufi, 4);
if(!islittle) swawbip(&i, 4);