77 char temp[FILENAME_MAX];
79 if(dbname==NULL || strlen(dbname)==0)
return(0);
81 strcpy(temp, dbname); strcat(temp,
".hdr");
82 if(access(temp, 0) == -1)
return(0);
84 strcpy(temp, dbname); strcat(temp,
".img");
85 if(access(temp, 0) == -1)
return(0);
87 strcat(temp,
".sif");
if(access(temp, 0) != -1)
return(2);
88 strcpy(temp, dbname); strcat(temp,
".sif");
89 if(access(temp, 0) != -1)
return(2);
109 int ret, nr=0, s1, s2, same_order;
111 if(
ANALYZE_TEST) printf(
"anaReadHeader(%s, *dsr)\n", filename);
114 if(strlen(filename)<1 || h==NULL)
return(1);
115 little=little_endian();
117 fp=fopen(filename,
"rb");
if(fp==NULL)
return(2);
119 nr=0;
while((ret=fgetc(fp))!=EOF) nr++; rewind(fp);
120 if(nr<1) {fclose(fp);
return(3);}
128 if(
ANALYZE_TEST>1 && ret) printf(
" complete data_history not found.\n");
133 memcpy(&s1, buf1+0, 4); s2=s1; swawbip(&s2, 4);
134 if(abs(s1-nr)<abs(s2-nr)) same_order=1;
else same_order=0;
135 if(
ANALYZE_TEST>1) printf(
"same byte order: %d (s1=%d s2=%d nr=%d)\n",
136 same_order, s1, s2, nr);
137 if(same_order) h->
little=little;
141 if(!same_order) swawbip(buf1+0, 4); memcpy(&h->
hk.
sizeof_hdr, buf1+0, 4);
144 if(!same_order) swawbip(buf1+32, 4); memcpy(&h->
hk.
extents, buf1+32, 4);
145 if(!same_order) swabip(buf1+36, 2); memcpy(&h->
hk.
session_error, buf1+36, 2);
150 if(!same_order) swabip(buf2+0, 16); memcpy(h->
dime.
dim, buf2+0, 16);
151 if(!same_order) swabip(buf2+16, 2); memcpy(&h->
dime.
unused8, buf2+16, 2);
152 if(!same_order) swabip(buf2+18, 2); memcpy(&h->
dime.
unused9, buf2+18, 2);
153 if(!same_order) swabip(buf2+20, 2); memcpy(&h->
dime.
unused10, buf2+20, 2);
154 if(!same_order) swabip(buf2+22, 2); memcpy(&h->
dime.
unused11, buf2+22, 2);
155 if(!same_order) swabip(buf2+24, 2); memcpy(&h->
dime.
unused12, buf2+24, 2);
156 if(!same_order) swabip(buf2+26, 2); memcpy(&h->
dime.
unused13, buf2+26, 2);
157 if(!same_order) swabip(buf2+28, 2); memcpy(&h->
dime.
unused14, buf2+28, 2);
158 if(!same_order) swabip(buf2+30, 2); memcpy(&h->
dime.
datatype, buf2+30, 2);
159 if(!same_order) swabip(buf2+32, 2); memcpy(&h->
dime.
bitpix, buf2+32, 2);
160 if(!same_order) swabip(buf2+34, 2); memcpy(&h->
dime.
dim_un0, buf2+34, 2);
161 if(!same_order) swawbip(buf2+36, 32); memcpy(h->
dime.
pixdim, buf2+36, 32);
162 if(!same_order) swawbip(buf2+68, 4); memcpy(&h->
dime.
vox_offset, buf2+68, 4);
163 if(!same_order) swawbip(buf2+72, 4); memcpy(&h->
dime.
funused1, buf2+72, 4);
164 if(!same_order) swawbip(buf2+76, 4); memcpy(&h->
dime.
funused2, buf2+76, 4);
165 if(!same_order) swawbip(buf2+80, 4); memcpy(&h->
dime.
funused3, buf2+80, 4);
166 if(!same_order) swawbip(buf2+84, 4); memcpy(&h->
dime.
cal_max, buf2+84, 4);
167 if(!same_order) swawbip(buf2+88, 4); memcpy(&h->
dime.
cal_min, buf2+88, 4);
168 if(!same_order) swawbip(buf2+92, 4); memcpy(&h->
dime.
compressed, buf2+92, 4);
169 if(!same_order) swawbip(buf2+96, 4); memcpy(&h->
dime.
verified, buf2+96, 4);
170 if(!same_order) swawbip(buf2+100, 4); memcpy(&h->
dime.
glmax, buf2+100, 4);
171 if(!same_order) swawbip(buf2+104, 4); memcpy(&h->
dime.
glmin, buf2+104, 4);
184 if(!same_order) swawbip(buf3+168, 4); memcpy(&h->
hist.
views, buf3+168, 4);
185 if(!same_order) swawbip(buf3+172, 4); memcpy(&h->
hist.
vols_added, buf3+172, 4);
186 if(!same_order) swawbip(buf3+176, 4); memcpy(&h->
hist.
start_field, buf3+176, 4);
187 if(!same_order) swawbip(buf3+180, 4); memcpy(&h->
hist.
field_skip, buf3+180, 4);
188 if(!same_order) swawbip(buf3+184, 4); memcpy(&h->
hist.
omax, buf3+184, 4);
189 if(!same_order) swawbip(buf3+188, 4); memcpy(&h->
hist.
omin, buf3+188, 4);
190 if(!same_order) swawbip(buf3+192, 4); memcpy(&h->
hist.
smax, buf3+192, 4);
191 if(!same_order) swawbip(buf3+196, 4); memcpy(&h->
hist.
smin, buf3+196, 4);
215 int same_order, little;
218 if(
ANALYZE_TEST) printf(
"anaWriteHeader(%s, *dsr)\n", filename);
221 if(strlen(filename)<1 || h==NULL)
return(1);
222 little=little_endian();
223 if(little==h->
little) same_order=1;
else same_order=0;
228 memcpy(buf1+0, &h->
hk.
sizeof_hdr, 4);
if(!same_order) swawbip(buf1+0, 4);
231 memcpy(buf1+32, &h->
hk.
extents, 4);
if(!same_order) swawbip(buf1+32, 4);
232 memcpy(buf1+36, &h->
hk.
session_error, 2);
if(!same_order) swabip(buf1+36, 2);
237 memcpy(buf2+0, h->
dime.
dim, 16);
if(!same_order) swabip(buf2+0, 16);
238 memcpy(buf2+16, &h->
dime.
unused8, 2);
if(!same_order) swabip(buf2+16, 2);
239 memcpy(buf2+18, &h->
dime.
unused9, 2);
if(!same_order) swabip(buf2+18, 2);
240 memcpy(buf2+20, &h->
dime.
unused10, 2);
if(!same_order) swabip(buf2+20, 2);
241 memcpy(buf2+22, &h->
dime.
unused11, 2);
if(!same_order) swabip(buf2+22, 2);
242 memcpy(buf2+24, &h->
dime.
unused12, 2);
if(!same_order) swabip(buf2+24, 2);
243 memcpy(buf2+26, &h->
dime.
unused13, 2);
if(!same_order) swabip(buf2+26, 2);
244 memcpy(buf2+28, &h->
dime.
unused14, 2);
if(!same_order) swabip(buf2+28, 2);
245 memcpy(buf2+30, &h->
dime.
datatype, 2);
if(!same_order) swabip(buf2+30, 2);
246 memcpy(buf2+32, &h->
dime.
bitpix, 2);
if(!same_order) swabip(buf2+32, 2);
247 memcpy(buf2+34, &h->
dime.
dim_un0, 2);
if(!same_order) swabip(buf2+34, 2);
248 memcpy(buf2+36, h->
dime.
pixdim, 32);
if(!same_order) swawbip(buf2+36, 32);
249 memcpy(buf2+68, &h->
dime.
vox_offset, 4);
if(!same_order) swawbip(buf2+68, 4);
250 memcpy(buf2+72, &h->
dime.
funused1, 4);
if(!same_order) swawbip(buf2+72, 4);
251 memcpy(buf2+76, &h->
dime.
funused2, 4);
if(!same_order) swawbip(buf2+76, 4);
252 memcpy(buf2+80, &h->
dime.
funused3, 4);
if(!same_order) swawbip(buf2+80, 4);
253 memcpy(buf2+84, &h->
dime.
cal_max, 4);
if(!same_order) swawbip(buf2+84, 4);
254 memcpy(buf2+88, &h->
dime.
cal_min, 4);
if(!same_order) swawbip(buf2+88, 4);
255 memcpy(buf2+92, &h->
dime.
compressed, 4);
if(!same_order) swawbip(buf2+92, 4);
256 memcpy(buf2+96, &h->
dime.
verified, 4);
if(!same_order) swawbip(buf2+96, 4);
257 memcpy(buf2+100, &h->
dime.
glmax, 4);
if(!same_order) swawbip(buf2+100, 4);
258 memcpy(buf2+104, &h->
dime.
glmin, 4);
if(!same_order) swawbip(buf2+104, 4);
271 memcpy(buf3+168, &h->
hist.
views, 4);
if(!same_order) swawbip(buf3+168, 4);
272 memcpy(buf3+172, &h->
hist.
vols_added, 4);
if(!same_order) swawbip(buf3+172, 4);
273 memcpy(buf3+176, &h->
hist.
start_field, 4);
if(!same_order) swawbip(buf3+176, 4);
274 memcpy(buf3+180, &h->
hist.
field_skip, 4);
if(!same_order) swawbip(buf3+180, 4);
275 memcpy(buf3+184, &h->
hist.
omax, 4);
if(!same_order) swawbip(buf3+184, 4);
276 memcpy(buf3+188, &h->
hist.
omin, 4);
if(!same_order) swawbip(buf3+188, 4);
277 memcpy(buf3+192, &h->
hist.
smax, 4);
if(!same_order) swawbip(buf3+192, 4);
278 memcpy(buf3+196, &h->
hist.
smin, 4);
if(!same_order) swawbip(buf3+196, 4);
281 fp=fopen(filename,
"wb");
if(fp==NULL)
return(2);
284 fclose(fp);
return(3);
288 fclose(fp);
return(4);
292 fclose(fp);
return(5);
383 int dimNr, dimx, dimy, dimz=1, dimt=1, pxlNr=0;
384 int i, n, little, start_pos, rawSize;
392 if(
ANALYZE_TEST) printf(
"anaReadImagedata(fp, h, %d, data)\n", frame);
395 if(frame<=0 || fp==NULL || h==NULL || data==NULL)
return(1);
398 dimNr=h->
dime.
dim[0];
if(dimNr<2)
return(2);
401 if(dimNr>2) dimz=h->
dime.
dim[3];
402 if(dimNr>3) dimt=h->
dime.
dim[4];
if(frame>dimt)
return(3);
403 pxlNr=dimx*dimy*dimz;
if(pxlNr<1)
return(4);
407 rawSize=pxlNr*(h->
dime.
bitpix/8);
if(rawSize<1)
return(5);
408 if(
ANALYZE_TEST>0) printf(
" pxlNr=%d rawSize=%d\n", pxlNr, rawSize);
409 mdata=(
char*)malloc(rawSize);
if(mdata==NULL)
return(11);
412 start_pos=(frame-1)*rawSize;
413 n=(int)h->
dime.
vox_offset;
if((n>0 && frame==1) || (n<0)) start_pos+=abs(n);
415 fseek(fp, start_pos, SEEK_SET);
416 if(ftell(fp)!=start_pos) {
417 if(
ANALYZE_TEST>5) printf(
"could not move to start_pos\n");
418 free(mdata);
return(7);
423 if((n=fread(mptr, rawSize, 1, fp)) < 1) {
425 printf(
"could read only %d bytes when request was %d\n", n, rawSize);
426 free(mdata);
return(8);
430 little=little_endian(); mptr=mdata;
435 case 16: swabip(mptr, rawSize);
break;
436 case 32: swawbip(mptr, rawSize);
break;
437 case 64: swawbip(mptr, rawSize);
break;
440 printf(
"unsupported anahdr.dime.bitpix := %d\n", h->
dime.
bitpix);
441 free(mdata);
return(5);
450 mptr=mdata; fptr=data;
455 printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
457 free(mdata);
return(5);
459 for(i=0; i<pxlNr; i++, mptr++, fptr++) *fptr=f*(
float)(*mptr);
464 printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
466 free(mdata);
return(5);
468 for(i=0; i<pxlNr; i++, mptr+=2, fptr++) {
469 sptr=(
short int*)mptr; *fptr=f*(float)(*sptr);
475 printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
477 free(mdata);
return(5);
480 for(i=0; i<pxlNr; i++, mptr+=4, fptr++) {
481 iptr=(
int*)mptr; *fptr=f*(float)(*iptr);
484 for(i=0; i<pxlNr; i++, mptr+=4, fptr++) {
485 iptr=(
int*)mptr; *fptr=f*(float)(*iptr);
492 printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
494 free(mdata);
return(5);
497 memcpy(fptr, mptr, pxlNr*4);
498 for(i=0; i<pxlNr; i++, fptr++) *fptr*=f;
500 memcpy(fptr, mptr, pxlNr*4);
501 for(i=0; i<pxlNr; i++, fptr++) *fptr*=f;
507 printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
509 free(mdata);
return(5);
512 memcpy(fptr, mptr, pxlNr*4);
513 for(i=0; i<pxlNr; i++, fptr++) *fptr*=f;
519 printf(
"invalid combination of datatype and bitpix (%d, %d)\n",
521 free(mdata);
return(5);
523 for(i=0; i<pxlNr; i++, mptr+=8, fptr++) {
524 memcpy(&d, mptr, 8); *fptr=f*d;
529 printf(
"unsupported anahdr.dime.datatype := %d\n", h->
dime.
datatype);
530 free(mdata);
return(5);
534 if(
ANALYZE_TEST>1) printf(
"anaReadImagedata() succeeded\n");
621 char temp[FILENAME_MAX], database[FILENAME_MAX];
625 printf(
"\nanaDatabaseExists(%s, *hdrfile, *imgfile, *siffile)\n", dbname);
628 if(hdrfile!=NULL) strcpy(hdrfile,
"");
629 if(imgfile!=NULL) strcpy(imgfile,
"");
630 if(siffile!=NULL) strcpy(siffile,
"");
631 if(dbname==NULL || strlen(dbname)==0)
return(0);
633 strcpy(database, dbname);
636 strcpy(temp, database); strcat(temp,
".hdr");
637 if(access(temp, 0) != -1) {
639 strcpy(temp, database); strcat(temp,
".img");
640 if(access(temp, 0) != -1) {
641 if(hdrfile!=NULL) sprintf(hdrfile,
"%s.hdr", database);
642 if(imgfile!=NULL) sprintf(imgfile,
"%s.img", database);
645 if(siffile!=NULL) strcpy(siffile, temp);
return(2);
651 if(checked==1)
break;
669 if(dbname==NULL || siffile==NULL)
return(1);
670 sprintf(siffile,
"%s.sif", dbname);
if(access(siffile, 0) != -1)
return(0);
671 sprintf(siffile,
"%s.SIF", dbname);
if(access(siffile, 0) != -1)
return(0);
672 sprintf(siffile,
"%s.img.sif", dbname);
if(access(siffile, 0) != -1)
return(0);
673 sprintf(siffile,
"%s.IMG.SIF", dbname);
if(access(siffile, 0) != -1)
return(0);
674 sprintf(siffile,
"%s.sif", dbname);
return(2);