1
2 #include "mrilib.h"
3 #include "mayo_analyze.h"
4
5 void ShowHdr(char *, struct dsr *);
6 void swap_hdr(struct dsr *pntr);
7 void swap_long(void *);
8 void swap_short(void *);
9
10 static int swapped ;
11
main(int argc,char * argv[])12 int main( int argc , char * argv[] )
13 {
14 struct dsr hdr;
15 int size, nn ;
16 double cmax, cmin;
17 FILE *fp;
18
19 if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
20 printf("Usage: mayo_analyze file.hdr ...\n"
21 "Prints out info from the Mayo Analyze 7.5 header file(s)\n"
22 ) ;
23 exit(0) ;
24 }
25
26 for( nn=1 ; nn < argc ; nn++ ){
27
28 if((fp=fopen(argv[nn],"r"))==NULL){
29 fprintf(stderr,"Can't open:<%s>\n", argv[1]);
30 continue ;
31 }
32 fread(&hdr,1,sizeof(struct dsr),fp);
33
34 if(hdr.dime.dim[0] < 0 || hdr.dime.dim[0] > 15){
35 printf("Byte swapping header %s\n",argv[nn]) ;
36 swap_hdr(&hdr); swapped = 1 ;
37 } else {
38 swapped = 0 ;
39 }
40
41 ShowHdr(argv[nn], &hdr);
42 fclose(fp) ;
43 if( nn < argc-1 )
44 printf("======================================================\n") ;
45 }
46 exit(0) ;
47 }
48
49
ShowHdr(char * fileName,struct dsr * hdr)50 void ShowHdr(char *fileName, struct dsr *hdr)
51 {
52 int i;
53 char string[128];
54 printf("Analyze Header Dump of: <%s> \n", fileName);
55 /* Header Key */
56 printf("sizeof_hdr: <%d> \n", hdr->hk.sizeof_hdr);
57 printf("data_type: <%s> \n", hdr->hk.data_type);
58 printf("db_name: <%s> \n", hdr->hk.db_name);
59 printf("extents: <%d> \n", hdr->hk.extents);
60 printf("session_error: <%d> \n", hdr->hk.session_error);
61 printf("regular: <%c> \n", hdr->hk.regular);
62 printf("hkey_un0: <%c> \n", hdr->hk.hkey_un0);
63
64 /* Image Dimension */
65 for(i=0;i<8;i++)
66 printf("dim[%d]: <%d> \n", i, hdr->dime.dim[i]);
67
68 #if 0
69 strncpy(string,hdr->dime.vox_units,4);
70 printf("vox_units: <%s> \n", string);
71 #endif
72
73 #if 0
74 strncpy(string,hdr->dime.cal_units,8);
75 printf("cal_units: <%s> \n", string);
76 printf("unused1: <%d> \n", hdr->dime.unused1);
77 #endif
78 printf("datatype: <%d> \n", hdr->dime.datatype);
79 printf("bitpix: <%d> \n", hdr->dime.bitpix);
80
81 for(i=0;i<8;i++)
82 printf("pixdim[%d]: <%6.4f> \n",i, hdr->dime.pixdim[i]);
83
84 printf("vox_offset: <%6.4f> \n", hdr->dime.vox_offset);
85 printf("funused1: <%6.4f> \n", hdr->dime.funused1);
86 printf("funused2: <%6.4f> \n", hdr->dime.funused2);
87 printf("funused3: <%6.4f> \n", hdr->dime.funused3);
88 printf("cal_max: <%6.4f> \n", hdr->dime.cal_max);
89 printf("cal_min: <%6.4f> \n", hdr->dime.cal_min);
90 printf("compressed: <%6.4f> \n", hdr->dime.compressed);
91 printf("verified: <%6.4f> \n", hdr->dime.verified);
92 printf("glmax: <%d> \n", hdr->dime.glmax);
93 printf("glmin: <%d> \n", hdr->dime.glmin);
94
95 /* Data History */
96 strncpy(string,hdr->hist.descrip,80);
97 printf("descrip: <%s> \n", string);
98 strncpy(string,hdr->hist.aux_file,24);
99 printf("aux_file: <%s> \n", string);
100 printf("orient: <%d> \n", (int) hdr->hist.orient);
101
102 /* 28 Nov 2001: attempt to decode originator a la SPM */
103
104 { short xyzuv[5] , xx,yy,zz ;
105 memcpy( xyzuv , hdr->hist.originator , 10 ) ;
106 if( xyzuv[3] == 0 && xyzuv[4] == 0 ){
107 xx = xyzuv[0] ; yy = xyzuv[1] ; zz = xyzuv[2] ;
108 if( swapped ){ swap_short(&xx); swap_short(&yy); swap_short(&zz); }
109 if( xx > 0 && xx < hdr->dime.dim[1] &&
110 yy > 0 && yy < hdr->dime.dim[2] &&
111 zz > 0 && zz < hdr->dime.dim[3] ){
112
113 printf("SPM originator decodes to %d %d %d\n",xx,yy,zz) ;
114 }
115 }
116 }
117
118 strncpy(string,hdr->hist.originator,10);
119 printf("originator: <%s> \n", string);
120
121 strncpy(string,hdr->hist.generated,10);
122 printf("generated: <%s> \n", string);
123
124 strncpy(string,hdr->hist.scannum,10);
125 printf("scannum: <%s> \n", string);
126
127 strncpy(string,hdr->hist.patient_id,10);
128 printf("patient_id: <%s> \n", string);
129
130 strncpy(string,hdr->hist.exp_date,10);
131 printf("exp_date: <%s> \n", string);
132
133 strncpy(string,hdr->hist.exp_time,10);
134 printf("exp_time: <%s> \n", string);
135
136 strncpy(string,hdr->hist.hist_un0,10);
137 printf("hist_un0: <%s> \n", string);
138
139 printf("views: <%d> \n", hdr->hist.views);
140 printf("vols_added: <%d> \n", hdr->hist.vols_added);
141 printf("start_field:<%d> \n", hdr->hist.start_field);
142 printf("field_skip: <%d> \n", hdr->hist.field_skip);
143 printf("omax: <%d> \n", hdr->hist.omax);
144 printf("omin: <%d> \n", hdr->hist.omin);
145 printf("smin: <%d> \n", hdr->hist.smax);
146 printf("smin: <%d> \n", hdr->hist.smin);
147
148 }
149
swap_hdr(struct dsr * pntr)150 void swap_hdr(struct dsr *pntr)
151 {
152 swap_long(&pntr->hk.sizeof_hdr) ;
153 swap_long(&pntr->hk.extents) ;
154 swap_short(&pntr->hk.session_error) ;
155 swap_short(&pntr->dime.dim[0]) ;
156 swap_short(&pntr->dime.dim[1]) ;
157 swap_short(&pntr->dime.dim[2]) ;
158 swap_short(&pntr->dime.dim[3]) ;
159 swap_short(&pntr->dime.dim[4]) ;
160 swap_short(&pntr->dime.dim[5]) ;
161 swap_short(&pntr->dime.dim[6]) ;
162 swap_short(&pntr->dime.dim[7]) ;
163 #if 0
164 swap_short(&pntr->dime.unused1) ;
165 #endif
166 swap_short(&pntr->dime.datatype) ;
167 swap_short(&pntr->dime.bitpix) ;
168 swap_long(&pntr->dime.pixdim[0]) ;
169 swap_long(&pntr->dime.pixdim[1]) ;
170 swap_long(&pntr->dime.pixdim[2]) ;
171 swap_long(&pntr->dime.pixdim[3]) ;
172 swap_long(&pntr->dime.pixdim[4]) ;
173 swap_long(&pntr->dime.pixdim[5]) ;
174 swap_long(&pntr->dime.pixdim[6]) ;
175 swap_long(&pntr->dime.pixdim[7]) ;
176 swap_long(&pntr->dime.vox_offset) ;
177 swap_long(&pntr->dime.funused1) ;
178 swap_long(&pntr->dime.funused2) ;
179 swap_long(&pntr->dime.cal_max) ;
180 swap_long(&pntr->dime.cal_min) ;
181 swap_long(&pntr->dime.compressed) ;
182 swap_long(&pntr->dime.verified) ;
183 swap_short(&pntr->dime.dim_un0) ;
184 swap_long(&pntr->dime.glmax) ;
185 swap_long(&pntr->dime.glmin) ;
186 }
187
swap_long(void * ppp)188 void swap_long(void *ppp)
189 {
190 unsigned char *pntr = (unsigned char *) ppp ;
191 unsigned char b0, b1, b2, b3;
192
193 b0 = *pntr;
194 b1 = *(pntr+1);
195 b2 = *(pntr+2);
196 b3 = *(pntr+3);
197
198 *pntr = b3;
199 *(pntr+1) = b2;
200 *(pntr+2) = b1;
201 *(pntr+3) = b0;
202 }
203
swap_short(void * ppp)204 void swap_short(void *ppp)
205 {
206 unsigned char *pntr = (unsigned char *) ppp ;
207 unsigned char b0, b1;
208
209 b0 = *pntr;
210 b1 = *(pntr+1);
211
212 *pntr = b1;
213 *(pntr+1) = b0;
214 }
215