| 19 |  | int     infmt = 'a';            /* input format ('a','f','d') */ | 
| 20 |  | double  pctcull = 95.;          /* target culling percentile */ | 
| 21 |  |  | 
| 22 | < | #define dval3(ix,ox,oy)         datarr[((((ix)<<log2g)+(ox))<<log2g)+(oy)] | 
| 23 | < | #define dval4(ix,iy,ox,oy)      datarr[((((((ix)<<log2g)+(iy))<<log2g)+(ox))<<log2g)+(oy)] | 
| 22 | > | #define dval3(ix,ox,oy)         datarr[((size_t)(((ix)<<log2g)+(ox))<<log2g)+(oy)] | 
| 23 | > | #define dval4(ix,iy,ox,oy)      datarr[((((size_t)(((ix)<<log2g)+(iy))<<log2g)+(ox))<<log2g)+(oy)] | 
| 24 |  |  | 
| 25 |  | /* Tensor tree node */ | 
| 26 |  | typedef struct ttree_s { | 
| 30 |  | } TNODE; | 
| 31 |  |  | 
| 32 |  | #define HISTLEN         300     /* histogram resolution */ | 
| 33 | < | #define HISTMAX         10.     /* maximum recorded measure in histogram */ | 
| 33 | > | #define HISTMAX         4.      /* maximum recorded measure in histogram */ | 
| 34 |  |  | 
| 35 |  | int     histo[HISTLEN];         /* histogram freq. of variance measure */ | 
| 36 |  |  | 
| 37 |  | double  tthresh;                /* acceptance threshold (TBD) */ | 
| 38 |  |  | 
| 39 | < | #define var_measure(tp)         ( ((tp)->vmax - (tp)->vmin) / \ | 
| 39 | > | #define var_measure(tp)         sqrt( ((tp)->vmax - (tp)->vmin) / \ | 
| 40 |  | (sqrt((tp)->vavg) + .03) ) | 
| 41 |  | #define above_threshold(tp)     (var_measure(tp) > tthresh) | 
| 42 |  |  | 
| 44 |  | static void | 
| 45 |  | new_kids(TNODE *pn) | 
| 46 |  | { | 
| 47 | < | /* XXX VC warns about 32 bit shift coerced to 64 bit */ | 
| 48 | < | pn->kid = (TNODE *)calloc(1<<ttrank, sizeof(TNODE)); | 
| 47 | > | pn->kid = (TNODE *)calloc((size_t)1<<ttrank, sizeof(TNODE)); | 
| 48 |  | if (pn->kid == NULL) | 
| 49 |  | error(SYSTEM, "out of memory in new_kids"); | 
| 50 |  | } | 
| 201 |  |  | 
| 202 |  | if ((rowp == NULL) | (n <= 0)) | 
| 203 |  | return(0); | 
| 204 | < | nread = fread(rowp, sizeof(float), n, stdin); | 
| 204 | > | nread = getbinary(rowp, sizeof(float), n, stdin); | 
| 205 |  | if (nread != n) | 
| 206 |  | error(USER, "unexpected EOF on float input"); | 
| 207 |  | return(nread); | 
| 223 |  | return(0); | 
| 224 |  | } | 
| 225 |  | if (rblen < n) { | 
| 226 | < | rowbuf = (double *)realloc(rowbuf, sizeof(double)*(rblen=n)); | 
| 226 | > | if (rblen) free(rowbuf); | 
| 227 | > | rowbuf = (double *)malloc(sizeof(double)*(rblen=n)); | 
| 228 |  | if (rowbuf == NULL) | 
| 229 |  | error(SYSTEM, "out of memory in read_double"); | 
| 230 |  | } | 
| 231 | < | nread = fread(rowbuf, sizeof(double), n, stdin); | 
| 231 | > | nread = getbinary(rowbuf, sizeof(double), n, stdin); | 
| 232 |  | if (nread != n) | 
| 233 |  | error(USER, "unexpected EOF on double input"); | 
| 234 |  | for (i = 0; i < nread; i++) | 
| 277 |  | error(COMMAND, "unsupported input format"); | 
| 278 |  | break; | 
| 279 |  | } | 
| 280 | < | /* XXX VC warns about 32 bit shift coerced to 64 bit */ | 
| 281 | < | datarr = (float *)calloc(1<<(log2g*ttrank), sizeof(float)); | 
| 280 | > | datarr = (float *)calloc((size_t)1<<(log2g*ttrank), sizeof(float)); | 
| 281 |  | if (datarr == NULL) | 
| 282 |  | error(SYSTEM, "out of memory in load_data"); | 
| 283 |  | if (ttrank == 3) { | 
| 284 |  | int     ix, ox; | 
| 285 |  | for (ix = 0; ix < 1<<(log2g-1); ix++) | 
| 286 |  | for (ox = 0; ox < 1<<log2g; ox++) | 
| 287 | < | (*readf)(datarr+(((ix<<log2g)+ox)<<log2g), | 
| 289 | < | 1<<log2g); | 
| 287 | > | (*readf)(&dval3(ix,ox,0), 1<<log2g); | 
| 288 |  | } else /* ttrank == 4 */ { | 
| 289 |  | int     ix, iy, ox; | 
| 290 |  | for (ix = 0; ix < 1<<log2g; ix++) | 
| 291 |  | for (iy = 0; iy < 1<<log2g; iy++) | 
| 292 |  | for (ox = 0; ox < 1<<log2g; ox++) | 
| 293 | < | (*readf)(datarr + | 
| 296 | < | (((((ix<<log2g)+iy)<<log2g)+ox)<<log2g), | 
| 297 | < | 1<<log2g); | 
| 293 | > | (*readf)(&dval4(ix,iy,ox,0), 1<<log2g); | 
| 294 |  | } | 
| 295 |  | (*readf)(NULL, 0);      /* releases any buffers */ | 
| 296 |  | if (infmt == 'a') { | 
| 330 |  | } | 
| 331 |  | } else /* ttrank == 4 */ { | 
| 332 |  | int     ix, iy, ox, oy; | 
| 333 | < | for (ix = 1; ix < siz; ix++) | 
| 334 | < | for (iy = 1; iy < siz; iy++) | 
| 335 | < | for (ox = 0; ox < ix; ox++) | 
| 336 | < | for (oy = 0; oy < iy; oy++) { | 
| 333 | > | for (ix = 0; ix < siz; ix++) | 
| 334 | > | for (iy = 0; iy < siz; iy++) { | 
| 335 | > | int     cnt = ix*siz + iy; | 
| 336 | > | for (ox = 0; cnt > 0; ox++) | 
| 337 | > | for (oy = 0; oy < siz; oy++) { | 
| 338 |  | v1p = &dval4(siz-1-ix,siz-1-iy,ox,oy); | 
| 339 |  | v2p = &dval4(siz-1-ox,siz-1-oy,ix,iy); | 
| 340 |  | *v1p = *v2p = .5f*( *v1p + *v2p ); | 
| 341 | + | if (--cnt <= 0) | 
| 342 | + | break; | 
| 343 |  | } | 
| 344 | + | } | 
| 345 |  | } | 
| 346 |  | } | 
| 347 |  |  |