23 char temp[FILENAME_MAX];
25 if(dbname==NULL || strlen(dbname)==0)
return(0);
27 strlcpy(temp, dbname, FILENAME_MAX);
strlcat(temp,
".hdr", FILENAME_MAX);
28 if(access(temp, 0) == -1)
return(0);
30 strlcpy(temp, dbname, FILENAME_MAX);
strlcat(temp,
".img", FILENAME_MAX);
31 if(access(temp, 0) == -1)
return(0);
33 strlcat(temp,
".sif", FILENAME_MAX);
if(access(temp, 0) != -1)
return(2);
34 strlcpy(temp, dbname, FILENAME_MAX);
strlcat(temp,
".sif", FILENAME_MAX);
35 if(access(temp, 0) != -1)
return(2);
62 char *cptr, basefile[FILENAME_MAX], temp[FILENAME_MAX];
66 if(filename==NULL || strlen(filename)==0)
return(0);
67 if(
ANALYZE_TEST>1) printf(
"\nanaExistsNew(%s, *str, *str, *str)\n", filename);
70 strcpy(basefile, filename);
71 cptr=strrchr(basefile,
'.');
73 if(strncasecmp(cptr,
".HDR", 4)==0 || strncasecmp(cptr,
".IMG", 4)==0 )
76 cptr=strrchr(basefile,
'.');
78 if(strncasecmp(cptr,
".IMG", 4)==0 )
81 if(
ANALYZE_TEST>2) printf(
"\n basefile := %s\n", basefile);
84 strcpy(temp, basefile); strcat(temp,
".hdr");
85 if(access(temp, 0) == -1) {
86 strcpy(temp, basefile); strcat(temp,
".img.hdr");
87 if(access(temp, 0) == -1) {
88 if(
ANALYZE_TEST) printf(
"\n hdr file not found or accessible.\n");
94 if(
ANALYZE_TEST) printf(
"\n %s was not identified as Analyze header file (%d).\n", temp, ret);
98 if(hdrfile!=NULL) strcpy(hdrfile, temp);
101 strcpy(temp, basefile); strcat(temp,
".img");
102 if(access(temp, 0) == -1) {
103 if(
ANALYZE_TEST) printf(
"\n %s not found or accessible.\n", temp);
107 if(imgfile!=NULL) strcpy(imgfile, temp);
110 strcpy(temp, basefile); strcat(temp,
".sif");
111 if(access(temp, 0) == -1) {
112 strcpy(temp, basefile); strcat(temp,
".img.sif");
113 if(access(temp, 0) == -1) {
114 if(
ANALYZE_TEST) printf(
"\n SIF not found or accessible.\n");
115 if(siffile!=NULL) strcpy(siffile,
"");
120 if(siffile!=NULL) strcpy(siffile, temp);
137 unsigned char buf1[ANALYZE_HEADER_KEY_SIZE];
138 unsigned char buf2[ANALYZE_HEADER_IMGDIM_SIZE];
139 unsigned char buf3[ANALYZE_HEADER_HISTORY_SIZE];
142 int ret, nr=0, s1, s2, same_order;
144 if(
ANALYZE_TEST) printf(
"anaReadHeader(%s, *dsr)\n", filename);
147 if(strlen(filename)<1 || h==NULL)
return(1);
150 fp=fopen(filename,
"rb");
if(fp==NULL)
return(2);
152 nr=0;
while((ret=fgetc(fp))!=EOF) nr++; rewind(fp);
153 if(nr<1) {fclose(fp);
return(3);}
155 if(fread(buf1, ANALYZE_HEADER_KEY_SIZE, 1, fp)<1)
return(3);
157 if(fread(buf2, ANALYZE_HEADER_IMGDIM_SIZE, 1, fp)<1)
return(3);
160 ret=fread(buf3, ANALYZE_HEADER_HISTORY_SIZE, 1, fp);
161 if(
ANALYZE_TEST>1 && ret<1) printf(
" complete data_history not found.\n");
166 memcpy(&s1, buf1+0, 4); s2=s1;
swawbip(&s2, 4);
167 if(abs(s1-nr)<abs(s2-nr)) same_order=1;
else same_order=0;
168 if(
ANALYZE_TEST>1) printf(
"same byte order: %d (s1=%d s2=%d nr=%d)\n",
169 same_order, s1, s2, nr);
170 if(same_order) h->
little=little;
174 if(!same_order)
swawbip(buf1+0, 4);
178 if(!same_order)
swawbip(buf1+32, 4);
180 if(!same_order)
swabip(buf1+36, 2);
186 if(!same_order)
swabip(buf2+0, 16);
187 memcpy(h->
dime.
dim, buf2+0, 16);
188 if(!same_order)
swabip(buf2+16, 2);
190 if(!same_order)
swabip(buf2+18, 2);
192 if(!same_order)
swabip(buf2+20, 2);
194 if(!same_order)
swabip(buf2+22, 2);
196 if(!same_order)
swabip(buf2+24, 2);
198 if(!same_order)
swabip(buf2+26, 2);
200 if(!same_order)
swabip(buf2+28, 2);
202 if(!same_order)
swabip(buf2+30, 2);
204 if(!same_order)
swabip(buf2+32, 2);
206 if(!same_order)
swabip(buf2+34, 2);
208 if(!same_order)
swawbip(buf2+36, 32);
210 if(!same_order)
swawbip(buf2+68, 4);
212 if(!same_order)
swawbip(buf2+72, 4);
214 if(!same_order)
swawbip(buf2+76, 4);
216 if(!same_order)
swawbip(buf2+80, 4);
218 if(!same_order)
swawbip(buf2+84, 4);
220 if(!same_order)
swawbip(buf2+88, 4);
222 if(!same_order)
swawbip(buf2+92, 4);
224 if(!same_order)
swawbip(buf2+96, 4);
226 if(!same_order)
swawbip(buf2+100, 4);
228 if(!same_order)
swawbip(buf2+104, 4);
242 if(!same_order)
swawbip(buf3+168, 4);
244 if(!same_order)
swawbip(buf3+172, 4);
246 if(!same_order)
swawbip(buf3+176, 4);
248 if(!same_order)
swawbip(buf3+180, 4);
250 if(!same_order)
swawbip(buf3+184, 4);
252 if(!same_order)
swawbip(buf3+188, 4);
254 if(!same_order)
swawbip(buf3+192, 4);
256 if(!same_order)
swawbip(buf3+196, 4);
288 unsigned char buf1[ANALYZE_HEADER_KEY_SIZE];
289 unsigned char buf2[ANALYZE_HEADER_IMGDIM_SIZE];
290 unsigned char buf3[ANALYZE_HEADER_HISTORY_SIZE];
292 int same_order, little;
295 if(
ANALYZE_TEST) printf(
"anaWriteHeader(%s, *dsr)\n", filename);
298 if(strlen(filename)<1 || h==NULL)
return(1);
300 if(little==h->
little) same_order=1;
else same_order=0;
304 memset(buf1, 0, ANALYZE_HEADER_KEY_SIZE);
313 memset(buf2, 0, ANALYZE_HEADER_IMGDIM_SIZE);
314 memcpy(buf2+0, h->
dime.
dim, 16);
if(!same_order)
swabip(buf2+0, 16);
337 memset(buf3, 0, ANALYZE_HEADER_HISTORY_SIZE);
352 memcpy(buf3+184, &h->
hist.
omax, 4);
if(!same_order)
swawbip(buf3+184, 4);
353 memcpy(buf3+188, &h->
hist.
omin, 4);
if(!same_order)
swawbip(buf3+188, 4);
354 memcpy(buf3+192, &h->
hist.
smax, 4);
if(!same_order)
swawbip(buf3+192, 4);
355 memcpy(buf3+196, &h->
hist.
smin, 4);
if(!same_order)
swawbip(buf3+196, 4);
358 fp=fopen(filename,
"wb");
if(fp==NULL)
return(2);
360 if(fwrite(buf1, 1, ANALYZE_HEADER_KEY_SIZE, fp) != ANALYZE_HEADER_KEY_SIZE) {
361 fclose(fp);
return(3);}
363 if(fwrite(buf2, 1, ANALYZE_HEADER_IMGDIM_SIZE, fp) != ANALYZE_HEADER_IMGDIM_SIZE) {
364 fclose(fp);
return(4);}
366 if(fwrite(buf3, 1, ANALYZE_HEADER_HISTORY_SIZE, fp) != ANALYZE_HEADER_HISTORY_SIZE) {
367 fclose(fp);
return(5);}
465 long int dimNr, dimx, dimy, dimz=1, dimt=1;
473 if(
ANALYZE_TEST) printf(
"anaReadImagedata(fp, h, %d, data)\n", frame);
476 if(frame<=0 || fp==NULL || h==NULL || data==NULL)
return(1);
479 dimNr=h->
dime.
dim[0];
if(dimNr<2)
return(2);
482 if(dimNr>2) dimz=h->
dime.
dim[3];
483 if(dimNr>3) dimt=h->
dime.
dim[4];
484 if(frame>dimt)
return(3);
485 long long pxlNr=dimx*dimy*dimz;
if(pxlNr<1)
return(4);
498 long long rawSize=pxlNr*(h->
dime.
bitpix/8);
if(rawSize<1)
return(5);
499 if(
ANALYZE_TEST>0) printf(
" pxlNr=%lld rawSize=%lld\n", pxlNr, rawSize);
500 mdata=(
char*)malloc(rawSize);
if(mdata==NULL)
return(11);
503 long long start_pos=(frame-1)*rawSize;
506 if((n>0 && frame==1) || (n<0)) start_pos+=labs(n);
508 if(
ANALYZE_TEST>2) printf(
"start_pos=%lld\n", start_pos);
509 fseeko(fp, start_pos, SEEK_SET);
510 if(ftello(fp)!=start_pos) {
511 if(
ANALYZE_TEST>5) printf(
"could not move to start_pos\n");
512 free(mdata);
return(7);
518 size_t n=fread(mptr, rawSize, 1, fp);
520 if(
ANALYZE_TEST>5) printf(
"could read only %zu bytes when request was %lld\n", n, rawSize);
521 free(mdata);
return(8);
531 case 16:
swabip(mptr, rawSize);
break;
532 case 32:
swawbip(mptr, rawSize);
break;
533 case 64:
swawbip(mptr, rawSize);
break;
536 free(mdata);
return(5);
545 mptr=mdata; fptr=data;
549 if(
ANALYZE_TEST>5) printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
551 free(mdata);
return(5);
553 for(
long long i=0; i<pxlNr; i++, mptr++, fptr++)
554 *fptr=f*(
float)(
unsigned char)(*mptr);
558 if(
ANALYZE_TEST>5) printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
560 free(mdata);
return(5);
562 for(
long long i=0; i<pxlNr; i++, mptr+=2, fptr++) {
563 sptr=(
short int*)mptr; *fptr=f*(float)(*sptr);
568 if(
ANALYZE_TEST>5) printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
570 free(mdata);
return(5);
573 for(
long long i=0; i<pxlNr; i++, mptr+=2, fptr++) {
574 iptr=(
int*)mptr; *fptr=f*(float)(*iptr);
577 for(
long long i=0; i<pxlNr; i++, mptr+=4, fptr++) {
578 iptr=(
int*)mptr; *fptr=f*(float)(*iptr);
584 if(
ANALYZE_TEST>5) printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
586 free(mdata);
return(5);
589 memcpy(fptr, mptr, pxlNr*2);
590 for(
long long i=0; i<pxlNr; i++, fptr++) *fptr*=f;
592 memcpy(fptr, mptr, pxlNr*4);
593 for(
long long i=0; i<pxlNr; i++, fptr++) *fptr*=f;
598 if(
ANALYZE_TEST>5) printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
600 free(mdata);
return(5);
603 memcpy(fptr, mptr, pxlNr*4);
604 for(
long long i=0; i<pxlNr; i++, fptr++) *fptr*=f;
610 if(
ANALYZE_TEST>5) printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
612 free(mdata);
return(5);
614 for(
long long i=0; i<pxlNr; i++, mptr+=8, fptr++) {
615 memcpy(&d, mptr, 8); *fptr=f*d;
620 free(mdata);
return(5);
624 if(
ANALYZE_TEST>1) printf(
"anaReadImagedata() succeeded\n");
718 char temp[FILENAME_MAX], database[FILENAME_MAX];
722 printf(
"\nanaDatabaseExists(%s, *hdrfile, *imgfile, *siffile)\n", dbname);
725 if(hdrfile!=NULL) strcpy(hdrfile,
"");
726 if(imgfile!=NULL) strcpy(imgfile,
"");
727 if(siffile!=NULL) strcpy(siffile,
"");
728 if(dbname==NULL || strlen(dbname)==0)
return(0);
730 strcpy(database, dbname);
733 strcpy(temp, database); strcat(temp,
".hdr");
734 if(access(temp, 0) != -1) {
736 strcpy(temp, database); strcat(temp,
".img");
737 if(access(temp, 0) != -1) {
738 if(hdrfile!=NULL) sprintf(hdrfile,
"%s.hdr", database);
739 if(imgfile!=NULL) sprintf(imgfile,
"%s.img", database);
742 if(siffile!=NULL) strcpy(siffile, temp);
749 if(checked==1)
break;
769 if(dbname==NULL || siffile==NULL)
return(1);
770 sprintf(siffile,
"%s.sif", dbname);
if(access(siffile, 0) != -1)
return(0);
771 sprintf(siffile,
"%s.SIF", dbname);
if(access(siffile, 0) != -1)
return(0);
772 sprintf(siffile,
"%s.img.sif", dbname);
if(access(siffile, 0) != -1)
return(0);
773 sprintf(siffile,
"%s.IMG.SIF", dbname);
if(access(siffile, 0) != -1)
return(0);
774 sprintf(siffile,
"%s.sif", dbname);
return(2);