| 7 |
|
* 4/23/86 |
| 8 |
|
*/ |
| 9 |
|
|
| 10 |
– |
#include <time.h> |
| 11 |
– |
|
| 12 |
– |
#include "standard.h" |
| 10 |
|
#include "platform.h" |
| 11 |
+ |
#include "standard.h" |
| 12 |
|
#include "color.h" |
| 13 |
|
#include "resolu.h" |
| 14 |
|
|
| 37 |
|
|
| 38 |
|
long skipbytes = 0; /* skip bytes in input? */ |
| 39 |
|
|
| 40 |
< |
int swapbytes = 0; /* swap bytes in 16-bit words? */ |
| 40 |
> |
int swapbytes = 0; /* swap bytes? */ |
| 41 |
|
|
| 42 |
|
int interleave = 1; /* file is interleaved? */ |
| 43 |
|
|
| 61 |
|
|
| 62 |
|
int (*getval)(), (*putval)(); |
| 63 |
|
|
| 64 |
+ |
static gethfunc checkhead; |
| 65 |
+ |
|
| 66 |
+ |
|
| 67 |
|
double |
| 68 |
|
rgb_bright(clr) |
| 69 |
|
COLOR clr; |
| 85 |
|
int argc; |
| 86 |
|
char **argv; |
| 87 |
|
{ |
| 87 |
– |
extern int checkhead(); |
| 88 |
|
extern long atol(); |
| 89 |
|
double d, expval = 1.0; |
| 90 |
|
int i; |
| 173 |
|
format = 'w'; |
| 174 |
|
fmtid = "16-bit"; |
| 175 |
|
break; |
| 176 |
+ |
case 'F': /* swapped floats */ |
| 177 |
+ |
swapbytes = 1; |
| 178 |
|
case 'f': /* float */ |
| 179 |
|
dataonly = 1; |
| 180 |
|
format = 'f'; |
| 181 |
|
fmtid = "float"; |
| 182 |
|
break; |
| 183 |
+ |
case 'D': /* swapped doubles */ |
| 184 |
+ |
swapbytes = 1; |
| 185 |
|
case 'd': /* double */ |
| 186 |
|
dataonly = 1; |
| 187 |
|
format = 'd'; |
| 355 |
|
} |
| 356 |
|
|
| 357 |
|
|
| 358 |
< |
int |
| 359 |
< |
checkhead(line) /* deal with line from header */ |
| 360 |
< |
char *line; |
| 358 |
> |
static int |
| 359 |
> |
checkhead( /* deal with line from header */ |
| 360 |
> |
char *line, |
| 361 |
> |
void *p |
| 362 |
> |
) |
| 363 |
|
{ |
| 364 |
|
char fmt[32]; |
| 365 |
|
double d; |
| 527 |
|
} |
| 528 |
|
} |
| 529 |
|
|
| 530 |
+ |
|
| 531 |
+ |
swap32(wp, n) /* swap n 32-bit words */ |
| 532 |
+ |
register uint32 *wp; |
| 533 |
+ |
int n; |
| 534 |
+ |
{ |
| 535 |
+ |
while (n-- > 0) { |
| 536 |
+ |
*wp = *wp << 24 | ((*wp >> 24) & 0xff) | |
| 537 |
+ |
(*wp & 0xff00) << 8 | (*wp & 0xff0000) >> 8; |
| 538 |
+ |
wp++; |
| 539 |
+ |
} |
| 540 |
+ |
} |
| 541 |
+ |
|
| 542 |
+ |
|
| 543 |
+ |
swap64(wp, n) /* swap n 64-bit words */ |
| 544 |
+ |
register char *wp; |
| 545 |
+ |
int n; |
| 546 |
+ |
{ |
| 547 |
+ |
register int t; |
| 548 |
+ |
|
| 549 |
+ |
while (n-- > 0) { |
| 550 |
+ |
t = wp[0]; wp[0] = wp[7]; wp[7] = t; |
| 551 |
+ |
t = wp[1]; wp[1] = wp[6]; wp[6] = t; |
| 552 |
+ |
t = wp[2]; wp[2] = wp[5]; wp[5] = t; |
| 553 |
+ |
t = wp[3]; wp[3] = wp[4]; wp[4] = t; |
| 554 |
+ |
wp += 8; |
| 555 |
+ |
} |
| 556 |
+ |
} |
| 557 |
+ |
|
| 558 |
+ |
|
| 559 |
|
getcascii(col) /* get an ascii color value from stream(s) */ |
| 560 |
|
COLOR col; |
| 561 |
|
{ |
| 589 |
|
fread((char *)(vd+2), sizeof(double), 1, fin3) != 1) |
| 590 |
|
return(-1); |
| 591 |
|
} |
| 592 |
+ |
if (swapbytes) |
| 593 |
+ |
swap64((char *)vd, 3); |
| 594 |
|
setcolor(col, vd[rord[RED]], vd[rord[GRN]], vd[rord[BLU]]); |
| 595 |
|
return(0); |
| 596 |
|
} |
| 610 |
|
fread((char *)(vf+2), sizeof(float), 1, fin3) != 1) |
| 611 |
|
return(-1); |
| 612 |
|
} |
| 613 |
+ |
if (swapbytes) |
| 614 |
+ |
swap32((uint32 *)vf, 3); |
| 615 |
|
setcolor(col, vf[rord[RED]], vf[rord[GRN]], vf[rord[BLU]]); |
| 616 |
|
return(0); |
| 617 |
|
} |
| 698 |
|
|
| 699 |
|
if (fread((char *)&vd, sizeof(double), 1, fin) != 1) |
| 700 |
|
return(-1); |
| 701 |
+ |
if (swapbytes) |
| 702 |
+ |
swap64((char *)&vd, 1); |
| 703 |
|
setcolor(col, vd, vd, vd); |
| 704 |
|
return(0); |
| 705 |
|
} |
| 712 |
|
|
| 713 |
|
if (fread((char *)&vf, sizeof(float), 1, fin) != 1) |
| 714 |
|
return(-1); |
| 715 |
+ |
if (swapbytes) |
| 716 |
+ |
swap32((uint32 *)&vf, 1); |
| 717 |
|
setcolor(col, vf, vf, vf); |
| 718 |
|
return(0); |
| 719 |
|
} |
| 783 |
|
vf[0] = colval(col,ord[0]); |
| 784 |
|
vf[1] = colval(col,ord[1]); |
| 785 |
|
vf[2] = colval(col,ord[2]); |
| 786 |
+ |
if (swapbytes) |
| 787 |
+ |
swap32((uint32 *)vf, 3); |
| 788 |
|
fwrite((char *)vf, sizeof(float), 3, stdout); |
| 789 |
|
|
| 790 |
|
return(ferror(stdout) ? -1 : 0); |
| 799 |
|
vd[0] = colval(col,ord[0]); |
| 800 |
|
vd[1] = colval(col,ord[1]); |
| 801 |
|
vd[2] = colval(col,ord[2]); |
| 802 |
+ |
if (swapbytes) |
| 803 |
+ |
swap64((char *)vd, 3); |
| 804 |
|
fwrite((char *)vd, sizeof(double), 3, stdout); |
| 805 |
|
|
| 806 |
|
return(ferror(stdout) ? -1 : 0); |
| 872 |
|
float vf; |
| 873 |
|
|
| 874 |
|
vf = (*mybright)(col); |
| 875 |
+ |
if (swapbytes) |
| 876 |
+ |
swap32((uint32 *)&vf, 1); |
| 877 |
|
fwrite((char *)&vf, sizeof(float), 1, stdout); |
| 878 |
|
|
| 879 |
|
return(ferror(stdout) ? -1 : 0); |
| 886 |
|
double vd; |
| 887 |
|
|
| 888 |
|
vd = (*mybright)(col); |
| 889 |
+ |
if (swapbytes) |
| 890 |
+ |
swap64((char *)&vd, 1); |
| 891 |
|
fwrite((char *)&vd, sizeof(double), 1, stdout); |
| 892 |
|
|
| 893 |
|
return(ferror(stdout) ? -1 : 0); |
| 948 |
|
float vf; |
| 949 |
|
|
| 950 |
|
vf = colval(col,putprim); |
| 951 |
+ |
if (swapbytes) |
| 952 |
+ |
swap32((uint32 *)&vf, 1); |
| 953 |
|
fwrite((char *)&vf, sizeof(float), 1, stdout); |
| 954 |
|
|
| 955 |
|
return(ferror(stdout) ? -1 : 0); |
| 962 |
|
double vd; |
| 963 |
|
|
| 964 |
|
vd = colval(col,putprim); |
| 965 |
+ |
if (swapbytes) |
| 966 |
+ |
swap64((char *)&vd, 1); |
| 967 |
|
fwrite((char *)&vd, sizeof(double), 1, stdout); |
| 968 |
|
|
| 969 |
|
return(ferror(stdout) ? -1 : 0); |