39 if(verbose>0) printf(
"%s(dsr, ift)\n", __func__);
40 if(dsr==NULL || ift==NULL)
return STATUS_FAULT;
41 if(ift->
keyNr<1)
return STATUS_INVALIDHEADER;
42 if(verbose>5)
iftWrite(ift,
"stdout", 0);
44 strcpy(keyname,
"byte_order");
45 if((i=
iftGet(ift, keyname, 0))>=0) {
46 if(strcasecmp(ift->
item[i].
value,
"big")==0) {
48 }
else if(strcasecmp(ift->
item[i].
value,
"little")==0) {
53 strcpy(keyname,
"sizeof_hdr");
54 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
57 strcpy(keyname,
"data_type");
58 if((i=
iftGet(ift, keyname, 0))>=0) {
61 strcpy(keyname,
"db_name");
62 if((i=
iftGet(ift, keyname, 0))>=0) {
65 strcpy(keyname,
"extents");
66 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
67 if(ret>=0 && i>=0) {dsr->
h.
extents=i; ne++;}
69 strcpy(keyname,
"session_error");
70 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
73 strcpy(keyname,
"regular");
74 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
75 if(ret>=0 && i>=0) {dsr->
h.
regular=i; ne++;}
77 strcpy(keyname,
"dim_info");
78 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
79 if(ret>=0 && i>=0) {dsr->
h.
dim_info=i; ne++;}
82 strcpy(keyname,
"dim");
83 if((i=
iftGet(ift, keyname, 0))>=0) {
84 n=sscanf(ift->
item[i].
value,
"%hd %hd %hd %hd %hd %hd %hd %hd",
87 if(n!=8)
return STATUS_UNSUPPORTED;
92 strcpy(keyname,
"intent_p1");
93 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
94 if(ret>=0 && !isnan(f)) {dsr->
h.
intent_p1=f; ne++;}
95 strcpy(keyname,
"intent_p2");
96 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
97 if(ret>=0 && !isnan(f)) {dsr->
h.
intent_p2=f; ne++;}
98 strcpy(keyname,
"intent_p3");
99 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
100 if(ret>=0 && !isnan(f)) {dsr->
h.
intent_p3=f; ne++;}
101 strcpy(keyname,
"intent_code");
102 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
105 strcpy(keyname,
"datatype");
106 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
107 if(ret>=0 && i>=0) {dsr->
h.
datatype=i; ne++;}
109 strcpy(keyname,
"bitpix");
110 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
111 if(ret>=0 && i>=0) {dsr->
h.
bitpix=i; ne++;}
113 strcpy(keyname,
"slice_start");
114 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
117 strcpy(keyname,
"pixdim");
118 if((i=
iftGet(ift, keyname, 0))>=0) {
119 n=sscanf(ift->
item[i].
value,
"%f %f %f %f %f %f %f %f",
123 if(n!=8)
return STATUS_UNSUPPORTED;
127 strcpy(keyname,
"vox_offset");
128 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
129 if(ret>=0 && !isnan(f)) {dsr->
h.
vox_offset=f; ne++;}
131 strcpy(keyname,
"scl_slope");
132 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
133 if(ret>=0 && !isnan(f)) {dsr->
h.
scl_slope=f; ne++;}
135 strcpy(keyname,
"scl_inter");
136 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
137 if(ret>=0 && !isnan(f)) {dsr->
h.
scl_inter=f; ne++;}
139 strcpy(keyname,
"slice_end");
140 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
141 if(ret>=0 && i>=0) {dsr->
h.
slice_end=i; ne++;}
143 strcpy(keyname,
"slice_code");
144 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
147 strcpy(keyname,
"zyzt_units");
148 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
151 strcpy(keyname,
"cal_max");
152 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
153 if(ret>=0 && !isnan(f)) {dsr->
h.
cal_max=f; ne++;}
155 strcpy(keyname,
"cal_min");
156 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
157 if(ret>=0 && !isnan(f)) {dsr->
h.
cal_min=f; ne++;}
159 strcpy(keyname,
"slice_duration");
160 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
163 strcpy(keyname,
"toffset");
164 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
165 if(ret>=0 && !isnan(f)) {dsr->
h.
toffset=f; ne++;}
167 strcpy(keyname,
"glmax");
168 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
169 if(ret>=0 && i>=0) {dsr->
h.
glmax=i; ne++;}
171 strcpy(keyname,
"glmin");
172 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
173 if(ret>=0 && i>=0) {dsr->
h.
glmin=i; ne++;}
175 strcpy(keyname,
"descrip");
176 if((i=
iftGet(ift, keyname, 0))>=0) {
179 strcpy(keyname,
"aux_file");
180 if((i=
iftGet(ift, keyname, 0))>=0) {
184 strcpy(keyname,
"qform_code");
185 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
187 strcpy(keyname,
"sform_code");
188 ret=
iftGetIntValue(ift, 0, keyname, &i, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
190 strcpy(keyname,
"quatern_b");
191 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
192 if(ret>=0 && !isnan(f)) {dsr->
h.
quatern_b=f; ne++;}
193 strcpy(keyname,
"quatern_c");
194 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
195 if(ret>=0 && !isnan(f)) {dsr->
h.
quatern_c=f; ne++;}
196 strcpy(keyname,
"quatern_d");
197 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
198 if(ret>=0 && !isnan(f)) {dsr->
h.
quatern_d=f; ne++;}
199 strcpy(keyname,
"qoffset_x");
200 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
201 if(ret>=0 && !isnan(f)) {dsr->
h.
qoffset_x=f; ne++;}
202 strcpy(keyname,
"qoffset_y");
203 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
204 if(ret>=0 && !isnan(f)) {dsr->
h.
qoffset_y=f; ne++;}
205 strcpy(keyname,
"qoffset_z");
206 ret=
iftGetFloatValue(ift, 0, keyname, &f, 0);
if(ret<-1)
return STATUS_UNSUPPORTED;
207 if(ret>=0 && !isnan(f)) {dsr->
h.
qoffset_z=f; ne++;}
209 strcpy(keyname,
"srow_x");
210 if((i=
iftGet(ift, keyname, 0))>=0) {
211 n=sscanf(ift->
item[i].
value,
"%f %f %f %f",
214 if(n!=4)
return STATUS_UNSUPPORTED;
217 strcpy(keyname,
"srow_y");
218 if((i=
iftGet(ift, keyname, 0))>=0) {
219 n=sscanf(ift->
item[i].
value,
"%f %f %f %f",
222 if(n!=4)
return STATUS_UNSUPPORTED;
225 strcpy(keyname,
"srow_z");
226 if((i=
iftGet(ift, keyname, 0))>=0) {
227 n=sscanf(ift->
item[i].
value,
"%f %f %f %f",
230 if(n!=4)
return STATUS_UNSUPPORTED;
234 strcpy(keyname,
"intent_name");
235 if((i=
iftGet(ift, keyname, 0))>=0) {
238 strcpy(keyname,
"magic");
239 if((i=
iftGet(ift, keyname, 0))>=0) {
242 strcpy(keyname,
"extension");
243 if((i=
iftGet(ift, keyname, 0))>=0) {
246 if(verbose>1) printf(
"%d field(s) edited.\n", ne);
247 if(ne>0)
return STATUS_OK;
248 return STATUS_INVALIDHEADER;