209 |
|
{ |
210 |
|
int warnedneg; |
211 |
|
char linebuf[8192]; |
212 |
+ |
int last_pos_val = 0; |
213 |
|
int nelem = 1000; |
214 |
|
float *sarr = (float *)malloc(sizeof(float)*nelem); |
215 |
|
FILE *fp; |
270 |
|
error(WARNING, errmsg); |
271 |
|
} |
272 |
|
sarr[i] = .0; |
273 |
< |
} |
273 |
> |
} else if (i > ntp[0]*(ntp[1]+1) && sarr[i] > FTINY) |
274 |
> |
last_pos_val = i; |
275 |
|
++i; |
276 |
|
} |
277 |
|
if (i == ntp[0]*(ntp[1]+1)) |
290 |
|
error(USER, errmsg); |
291 |
|
} |
292 |
|
} |
293 |
< |
nelem = i; |
293 |
> |
/* truncate zero region */ |
294 |
> |
ntp[0] = (last_pos_val + ntp[1])/(ntp[1]+1) - 1; |
295 |
> |
nelem = (ntp[0]+1)*(ntp[1]+1); |
296 |
|
fclose(fp); |
297 |
|
errmsg[0] = '\0'; /* sanity checks */ |
298 |
+ |
if (!last_pos_val) |
299 |
+ |
sprintf(errmsg, "no positive sensor values in file '%s'", sfile); |
300 |
|
if (ntp[0] <= 0) |
301 |
|
sprintf(errmsg, "no data in sensor file '%s'", sfile); |
302 |
|
else if (fabs(sarr[ntp[1]+1]) > FTINY) |
311 |
|
sfile); |
312 |
|
else if (sarr[ntp[0]*(ntp[1]+1)] <= FTINY) |
313 |
|
sprintf(errmsg, |
314 |
< |
"maximum theta must be positive in sensor file '%s'", |
315 |
< |
sfile); |
314 |
> |
"maximum theta (%f) must be positive in sensor file '%s'", |
315 |
> |
sarr[ntp[0]*(ntp[1]+1)], sfile); |
316 |
|
if (errmsg[0]) |
317 |
|
error(USER, errmsg); |
318 |
|
return((float *)realloc((void *)sarr, sizeof(float)*nelem)); |