21 char temp[FILENAME_MAX];
23 if(dbname==NULL || strlen(dbname)==0)
return(0);
25 strlcpy(temp, dbname, FILENAME_MAX);
strlcat(temp,
".hdr", FILENAME_MAX);
26 if(access(temp, 0) == -1)
return(0);
28 strlcpy(temp, dbname, FILENAME_MAX);
strlcat(temp,
".img", FILENAME_MAX);
29 if(access(temp, 0) == -1)
return(0);
31 strlcat(temp,
".sif", FILENAME_MAX);
if(access(temp, 0) != -1)
return(2);
32 strlcpy(temp, dbname, FILENAME_MAX);
strlcat(temp,
".sif", FILENAME_MAX);
33 if(access(temp, 0) != -1)
return(2);
60 char *cptr, basefile[FILENAME_MAX], temp[FILENAME_MAX];
64 if(filename==NULL || strlen(filename)==0)
return(0);
65 if(
ANALYZE_TEST>1) printf(
"\nanaExistsNew(%s, *str, *str, *str)\n", filename);
68 strcpy(basefile, filename);
69 cptr=strrchr(basefile,
'.');
71 if(strncasecmp(cptr,
".HDR", 4)==0 || strncasecmp(cptr,
".IMG", 4)==0 )
74 cptr=strrchr(basefile,
'.');
76 if(strncasecmp(cptr,
".IMG", 4)==0 )
79 if(
ANALYZE_TEST>2) printf(
"\n basefile := %s\n", basefile);
82 strcpy(temp, basefile); strcat(temp,
".hdr");
83 if(access(temp, 0) == -1) {
84 strcpy(temp, basefile); strcat(temp,
".img.hdr");
85 if(access(temp, 0) == -1) {
86 if(
ANALYZE_TEST) printf(
"\n hdr file not found or accessible.\n");
92 if(
ANALYZE_TEST) printf(
"\n %s was not identified as Analyze header file (%d).\n", temp, ret);
96 if(hdrfile!=NULL) strcpy(hdrfile, temp);
99 strcpy(temp, basefile); strcat(temp,
".img");
100 if(access(temp, 0) == -1) {
101 if(
ANALYZE_TEST) printf(
"\n %s not found or accessible.\n", temp);
105 if(imgfile!=NULL) strcpy(imgfile, temp);
108 strcpy(temp, basefile); strcat(temp,
".sif");
109 if(access(temp, 0) == -1) {
110 strcpy(temp, basefile); strcat(temp,
".img.sif");
111 if(access(temp, 0) == -1) {
112 if(
ANALYZE_TEST) printf(
"\n SIF not found or accessible.\n");
113 if(siffile!=NULL) strcpy(siffile,
"");
118 if(siffile!=NULL) strcpy(siffile, temp);
135 unsigned char buf1[ANALYZE_HEADER_KEY_SIZE];
136 unsigned char buf2[ANALYZE_HEADER_IMGDIM_SIZE];
137 unsigned char buf3[ANALYZE_HEADER_HISTORY_SIZE];
140 int ret, nr=0, s1, s2, same_order;
142 if(
ANALYZE_TEST) printf(
"anaReadHeader(%s, *dsr)\n", filename);
145 if(strlen(filename)<1 || h==NULL)
return(1);
148 fp=fopen(filename,
"rb");
if(fp==NULL)
return(2);
150 nr=0;
while((ret=fgetc(fp))!=EOF) nr++; rewind(fp);
151 if(nr<1) {fclose(fp);
return(3);}
153 if(fread(buf1, ANALYZE_HEADER_KEY_SIZE, 1, fp)<1)
return(3);
155 if(fread(buf2, ANALYZE_HEADER_IMGDIM_SIZE, 1, fp)<1)
return(3);
158 ret=fread(buf3, ANALYZE_HEADER_HISTORY_SIZE, 1, fp);
159 if(
ANALYZE_TEST>1 && ret<1) printf(
" complete data_history not found.\n");
164 memcpy(&s1, buf1+0, 4); s2=s1;
swawbip(&s2, 4);
165 if(abs(s1-nr)<abs(s2-nr)) same_order=1;
else same_order=0;
166 if(
ANALYZE_TEST>1) printf(
"same byte order: %d (s1=%d s2=%d nr=%d)\n",
167 same_order, s1, s2, nr);
168 if(same_order) h->
little=little;
172 if(!same_order)
swawbip(buf1+0, 4);
176 if(!same_order)
swawbip(buf1+32, 4);
178 if(!same_order)
swabip(buf1+36, 2);
184 if(!same_order)
swabip(buf2+0, 16);
185 memcpy(h->
dime.
dim, buf2+0, 16);
186 if(!same_order)
swabip(buf2+16, 2);
188 if(!same_order)
swabip(buf2+18, 2);
190 if(!same_order)
swabip(buf2+20, 2);
192 if(!same_order)
swabip(buf2+22, 2);
194 if(!same_order)
swabip(buf2+24, 2);
196 if(!same_order)
swabip(buf2+26, 2);
198 if(!same_order)
swabip(buf2+28, 2);
200 if(!same_order)
swabip(buf2+30, 2);
202 if(!same_order)
swabip(buf2+32, 2);
204 if(!same_order)
swabip(buf2+34, 2);
206 if(!same_order)
swawbip(buf2+36, 32);
208 if(!same_order)
swawbip(buf2+68, 4);
210 if(!same_order)
swawbip(buf2+72, 4);
212 if(!same_order)
swawbip(buf2+76, 4);
214 if(!same_order)
swawbip(buf2+80, 4);
216 if(!same_order)
swawbip(buf2+84, 4);
218 if(!same_order)
swawbip(buf2+88, 4);
220 if(!same_order)
swawbip(buf2+92, 4);
222 if(!same_order)
swawbip(buf2+96, 4);
224 if(!same_order)
swawbip(buf2+100, 4);
226 if(!same_order)
swawbip(buf2+104, 4);
240 if(!same_order)
swawbip(buf3+168, 4);
242 if(!same_order)
swawbip(buf3+172, 4);
244 if(!same_order)
swawbip(buf3+176, 4);
246 if(!same_order)
swawbip(buf3+180, 4);
248 if(!same_order)
swawbip(buf3+184, 4);
250 if(!same_order)
swawbip(buf3+188, 4);
252 if(!same_order)
swawbip(buf3+192, 4);
254 if(!same_order)
swawbip(buf3+196, 4);
265 else printf(
"hk.regular := (%d)\n", h->
hk.
regular);
289 unsigned char buf1[ANALYZE_HEADER_KEY_SIZE];
290 unsigned char buf2[ANALYZE_HEADER_IMGDIM_SIZE];
291 unsigned char buf3[ANALYZE_HEADER_HISTORY_SIZE];
293 int same_order, little;
296 if(
ANALYZE_TEST) printf(
"anaWriteHeader(%s, *dsr)\n", filename);
299 if(strlen(filename)<1 || h==NULL)
return(1);
301 if(little==h->
little) same_order=1;
else same_order=0;
305 memset(buf1, 0, ANALYZE_HEADER_KEY_SIZE);
314 memset(buf2, 0, ANALYZE_HEADER_IMGDIM_SIZE);
315 memcpy(buf2+0, h->
dime.
dim, 16);
if(!same_order)
swabip(buf2+0, 16);
338 memset(buf3, 0, ANALYZE_HEADER_HISTORY_SIZE);
353 memcpy(buf3+184, &h->
hist.
omax, 4);
if(!same_order)
swawbip(buf3+184, 4);
354 memcpy(buf3+188, &h->
hist.
omin, 4);
if(!same_order)
swawbip(buf3+188, 4);
355 memcpy(buf3+192, &h->
hist.
smax, 4);
if(!same_order)
swawbip(buf3+192, 4);
356 memcpy(buf3+196, &h->
hist.
smin, 4);
if(!same_order)
swawbip(buf3+196, 4);
359 fp=fopen(filename,
"wb");
if(fp==NULL)
return(2);
361 if(fwrite(buf1, 1, ANALYZE_HEADER_KEY_SIZE, fp) != ANALYZE_HEADER_KEY_SIZE) {
362 fclose(fp);
return(3);}
364 if(fwrite(buf2, 1, ANALYZE_HEADER_IMGDIM_SIZE, fp) != ANALYZE_HEADER_IMGDIM_SIZE) {
365 fclose(fp);
return(4);}
367 if(fwrite(buf3, 1, ANALYZE_HEADER_HISTORY_SIZE, fp) != ANALYZE_HEADER_HISTORY_SIZE) {
368 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);