ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/pvalue.c
(Generate patch)

Comparing ray/src/px/pvalue.c (file contents):
Revision 2.4 by greg, Fri May 8 11:55:42 1992 UTC vs.
Revision 2.11 by greg, Wed Jan 8 08:00:23 1997 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1991 Regents of the University of California */
1 > /* Copyright (c) 1992 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 16 | Line 16 | static char SCCSid[] = "$SunId$ LBL";
16  
17   #include  "resolu.h"
18  
19 < #define  min(a,b)               ((a)<(b)?(a):(b))
19 > #define  min(a,b)               ((a)<(b)?(a):(b))
20  
21 < RESOLU  picres;                 /* resolution of picture */
21 >                                /* what to put out (also RED, GRN, BLU) */
22 > #define  ALL            3
23 > #define  BRIGHT         4
24  
25 + #define  brightonly     (putprim==BRIGHT)
26 +
27 + RESOLU  picres;                 /* resolution of picture */
28 +
29   int  uniq = 0;                  /* print only unique values? */
30  
31 < int  original = 0;              /* convert back to original values? */
31 > int  doexposure = 0;            /* exposure change? (>100 to print) */
32  
33   int  dataonly = 0;              /* data only format? */
34  
35 < int  brightonly = 0;            /* only brightness values? */
35 > int  putprim = ALL;             /* what to put out */
36  
37   int  reverse = 0;               /* reverse conversion? */
38  
# Line 35 | Line 41 | char  *fmtid = "ascii";                /* format identifier for head
41  
42   int  header = 1;                /* do header? */
43  
44 + long  skipbytes = 0;            /* skip bytes in input? */
45 +
46   int  resolution = 1;            /* put/get resolution string? */
47  
48 + int  original = 0;              /* convert to original values? */
49 +
50   int  wrongformat = 0;           /* wrong input format? */
51  
52 < double  gamcor = 1.0;           /* gamma correction */
52 > double  gamcor = 1.0;           /* gamma correction */
53  
54   int  ord[3] = {RED, GRN, BLU};  /* RGB ordering */
55   int  rord[4];                   /* reverse ordering */
# Line 49 | Line 59 | COLOR  exposure = WHTCOLOR;
59   char  *progname;
60  
61   FILE  *fin;
62 + FILE  *fin2 = NULL, *fin3 = NULL;       /* for other color channels */
63  
64   int  (*getval)(), (*putval)();
65  
# Line 58 | Line 69 | int  argc;
69   char  **argv;
70   {
71          extern int  checkhead();
72 +        extern long  atol();
73 +        double  d, expval = 1.0;
74          int  i;
75  
76          progname = argv[0];
# Line 71 | Line 84 | char  **argv;
84                          case 'H':               /* resolution string */
85                                  resolution = argv[i][0] == '+';
86                                  break;
87 +                        case 's':               /* skip bytes in header */
88 +                                skipbytes = atol(argv[++i]);
89 +                                break;
90                          case 'u':               /* unique values */
91                                  uniq = argv[i][0] == '-';
92                                  break;
# Line 78 | Line 94 | char  **argv;
94                                  original = argv[i][0] == '-';
95                                  break;
96                          case 'g':               /* gamma correction */
97 <                                gamcor = atof(argv[++i]);
97 >                                gamcor = atof(argv[i+1]);
98                                  if (argv[i][0] == '+')
99                                          gamcor = 1.0/gamcor;
100 +                                i++;
101                                  break;
102 +                        case 'e':               /* exposure correction */
103 +                                d = atof(argv[i+1]);
104 +                                if (argv[i+1][0] == '-' || argv[i+1][0] == '+')
105 +                                        d = pow(2.0, d);
106 +                                if (argv[i][0] == '-')
107 +                                        expval *= d;
108 +                                scalecolor(exposure, d);
109 +                                doexposure++;
110 +                                i++;
111 +                                break;
112                          case 'R':               /* reverse byte sequence */
113                                  if (argv[i][0] == '-') {
114                                          ord[0]=BLU; ord[1]=GRN; ord[2]=RED;
# Line 93 | Line 120 | char  **argv;
120                                  reverse = argv[i][0] == '-';
121                                  break;
122                          case 'b':               /* brightness values */
123 <                                brightonly = argv[i][0] == '-';
123 >                                putprim = argv[i][0] == '-' ? BRIGHT : ALL;
124                                  break;
125 +                        case 'p':               /* put primary */
126 +                                switch (argv[i][2]) {
127 +                                case 'r': case 'R': putprim = RED; break;
128 +                                case 'g': case 'G': putprim = GRN; break;
129 +                                case 'b': case 'B': putprim = BLU; break;
130 +                                default: goto unkopt;
131 +                                }
132 +                                break;
133                          case 'd':               /* data only (no indices) */
134                                  dataonly = argv[i][0] == '-';
135                                  switch (argv[i][2]) {
# Line 127 | Line 162 | char  **argv;
162                                  }
163                                  break;
164                          case 'x':               /* x resolution */
165 +                        case 'X':               /* x resolution */
166                                  resolution = 0;
167                                  if (argv[i][0] == '-')
168                                          picres.or |= XDECR;
169                                  picres.xr = atoi(argv[++i]);
170                                  break;
171                          case 'y':               /* y resolution */
172 +                        case 'Y':               /* y resolution */
173                                  resolution = 0;
174                                  if (argv[i][0] == '-')
175                                          picres.or |= YDECR;
# Line 162 | Line 199 | unkopt:
199                                          /* get input */
200          if (i == argc) {
201                  fin = stdin;
202 <        } else if (i == argc-1) {
202 >        } else if (i < argc) {
203                  if ((fin = fopen(argv[i], "r")) == NULL) {
204                          fprintf(stderr, "%s: can't open file \"%s\"\n",
205                                                  progname, argv[i]);
206                          quit(1);
207                  }
208 <        } else {
208 >                if (skipbytes && fseek(fin, skipbytes, 0))
209 >                        goto seekerr;
210 >                if (reverse && !brightonly && i == argc-3) {
211 >                        if ((fin2 = fopen(argv[i+1], "r")) == NULL) {
212 >                                fprintf(stderr, "%s: can't open file \"%s\"\n",
213 >                                                progname, argv[i+1]);
214 >                                quit(1);
215 >                        }
216 >                        if ((fin3 = fopen(argv[i+2], "r")) == NULL) {
217 >                                fprintf(stderr, "%s: can't open file \"%s\"\n",
218 >                                                progname, argv[i+2]);
219 >                                quit(1);
220 >                        }
221 >                        if (skipbytes && (fseek(fin2, skipbytes, 0) ||
222 >                                        fseek(fin3, skipbytes, 0)))
223 >                                goto seekerr;
224 >                } else if (i != argc-1)
225 >                        fin = NULL;
226 >        }
227 >        if (fin == NULL) {
228                  fprintf(stderr, "%s: bad # file arguments\n", progname);
229                  quit(1);
230          }
# Line 176 | Line 232 | unkopt:
232          set_io();
233  
234          if (reverse) {
235 + #ifdef MSDOS
236 +                setmode(fileno(stdout), O_BINARY);
237 +                if (format != 'a' && format != 'i')
238 +                        setmode(fileno(fin), O_BINARY);
239 + #endif
240                                          /* get header */
241 <                if (header && checkheader(fin, fmtid, stdout) < 0) {
242 <                        fprintf(stderr, "%s: wrong input format\n", progname);
243 <                        quit(1);
244 <                }
241 >                if (header) {
242 >                        if (checkheader(fin, fmtid, stdout) < 0) {
243 >                                fprintf(stderr, "%s: wrong input format\n",
244 >                                                progname);
245 >                                quit(1);
246 >                        }
247 >                        if (fin2 != NULL) {
248 >                                getheader(fin2, NULL, NULL);
249 >                                getheader(fin3, NULL, NULL);
250 >                        }
251 >                } else
252 >                        newheader("RADIANCE", stdout);
253                                          /* get resolution */
254                  if ((resolution && !fgetsresolu(&picres, fin)) ||
255                                  picres.xr <= 0 || picres.yr <= 0) {
256                          fprintf(stderr, "%s: missing resolution\n", progname);
257                          quit(1);
258                  }
259 +                if (resolution && fin2 != NULL) {
260 +                        RESOLU  pres2;
261 +                        if (!fgetsresolu(&pres2, fin2) ||
262 +                                        pres2.or != picres.or ||
263 +                                        pres2.xr != picres.xr ||
264 +                                        pres2.yr != picres.yr ||
265 +                                        !fgetsresolu(&pres2, fin3) ||
266 +                                        pres2.or != picres.or ||
267 +                                        pres2.xr != picres.xr ||
268 +                                        pres2.yr != picres.yr) {
269 +                                fprintf(stderr, "%s: resolution mismatch\n",
270 +                                                progname);
271 +                                quit(1);
272 +                        }
273 +                }
274                                                  /* add to header */
275                  printargs(i, argv, stdout);
276 +                if (expval < .99 || expval > 1.01)
277 +                        fputexpos(expval, stdout);
278                  fputformat(COLRFMT, stdout);
279                  putchar('\n');
280                  fputsresolu(&picres, stdout);   /* always put resolution */
281                  valtopix();
282          } else {
283 + #ifdef MSDOS
284 +                setmode(fileno(fin), O_BINARY);
285 +                if (format != 'a' && format != 'i')
286 +                        setmode(fileno(stdout), O_BINARY);
287 + #endif
288                                                  /* get header */
289                  getheader(fin, checkhead, NULL);
290                  if (wrongformat) {
# Line 207 | Line 298 | unkopt:
298                  }
299                  if (header) {
300                          printargs(i, argv, stdout);
301 +                        if (expval < .99 || expval > 1.01)
302 +                                fputexpos(expval, stdout);
303                          fputformat(fmtid, stdout);
304                          putchar('\n');
305                  }
# Line 216 | Line 309 | unkopt:
309          }
310  
311          quit(0);
312 + seekerr:
313 +        fprintf(stderr, "%s: cannot skip %ld bytes on input\n",
314 +                        progname, skipbytes);
315 +        quit(1);
316   }
317  
318  
# Line 226 | Line 323 | char  *line;
323          double  d;
324          COLOR   ctmp;
325  
326 <        if (isformat(line)) {
230 <                formatval(fmt, line);
326 >        if (formatval(fmt, line))
327                  wrongformat = strcmp(fmt, COLRFMT);
328 <        } else if (original && isexpos(line)) {
328 >        else if (original && isexpos(line)) {
329                  d = 1.0/exposval(line);
330                  scalecolor(exposure, d);
331 +                doexposure++;
332          } else if (original && iscolcor(line)) {
333                  colcorval(ctmp, line);
334                  setcolor(exposure, colval(exposure,RED)/colval(ctmp,RED),
335                                  colval(exposure,GRN)/colval(ctmp,GRN),
336                                  colval(exposure,BLU)/colval(ctmp,BLU));
337 +                doexposure++;
338          } else if (header)
339                  fputs(line, stdout);
340   }
# Line 244 | Line 342 | char  *line;
342  
343   pixtoval()                              /* convert picture to values */
344   {
345 <        register COLOR  *scanln;
345 >        register COLOR  *scanln;
346          int  dogamma;
347          COLOR  lastc;
348          FLOAT  hv[2];
# Line 274 | Line 372 | pixtoval()                             /* convert picture to values */
372                                          continue;
373                                  else
374                                          copycolor(lastc, scanln[x]);
375 <                        if (original)
375 >                        if (doexposure)
376                                  multcolor(scanln[x], exposure);
377                          if (dogamma)
378                                  setcolor(scanln[x],
# Line 286 | Line 384 | pixtoval()                             /* convert picture to values */
384                                  printf("%7d %7d ", (int)(hv[0]*picres.xr),
385                                                  (int)(hv[1]*picres.yr));
386                          }
387 <                        if ((*putval)(scanln[x], stdout) < 0) {
387 >                        if ((*putval)(scanln[x]) < 0) {
388                                  fprintf(stderr, "%s: write error\n", progname);
389                                  quit(1);
390                          }
# Line 299 | Line 397 | pixtoval()                             /* convert picture to values */
397   valtopix()                      /* convert values to a pixel file */
398   {
399          int  dogamma;
400 <        register COLOR  *scanln;
400 >        register COLOR  *scanln;
401          int  y;
402          register int  x;
403  
# Line 311 | Line 409 | valtopix()                     /* convert values to a pixel file */
409          dogamma = gamcor < .95 || gamcor > 1.05;
410          for (y = 0; y < numscans(&picres); y++) {
411                  for (x = 0; x < scanlen(&picres); x++) {
412 <                        if (!dataonly)
412 >                        if (!dataonly) {
413                                  fscanf(fin, "%*d %*d");
414 <                        if ((*getval)(scanln[x], fin) < 0) {
414 >                                if (fin2 != NULL) {
415 >                                        fscanf(fin2, "%*d %*d");
416 >                                        fscanf(fin3, "%*d %*d");
417 >                                }
418 >                        }
419 >                        if ((*getval)(scanln[x]) < 0) {
420                                  fprintf(stderr, "%s: read error\n", progname);
421                                  quit(1);
422                          }
# Line 322 | Line 425 | valtopix()                     /* convert values to a pixel file */
425                                          pow(colval(scanln[x],RED), gamcor),
426                                          pow(colval(scanln[x],GRN), gamcor),
427                                          pow(colval(scanln[x],BLU), gamcor));
428 +                        if (doexposure)
429 +                                multcolor(scanln[x], exposure);
430                  }
431                  if (fwritescan(scanln, scanlen(&picres), stdout) < 0) {
432                          fprintf(stderr, "%s: write error\n", progname);
# Line 339 | Line 444 | int  code;
444   }
445  
446  
447 < getcascii(col, fp)              /* get an ascii color value from fp */
447 > getcascii(col)          /* get an ascii color value from stream(s) */
448   COLOR  col;
344 FILE  *fp;
449   {
450 <        double  vd[3];
450 >        double  vd[3];
451  
452 <        if (fscanf(fp, "%lf %lf %lf", &vd[0], &vd[1], &vd[2]) != 3)
453 <                return(-1);
452 >        if (fin2 == NULL) {
453 >                if (fscanf(fin, "%lf %lf %lf", &vd[0], &vd[1], &vd[2]) != 3)
454 >                        return(-1);
455 >        } else {
456 >                if (fscanf(fin, "%lf", &vd[0]) != 1 ||
457 >                                fscanf(fin2, "%lf", &vd[1]) != 1 ||
458 >                                fscanf(fin3, "%lf", &vd[2]) != 1)
459 >                        return(-1);
460 >        }
461          setcolor(col, vd[rord[RED]], vd[rord[GRN]], vd[rord[BLU]]);
462          return(0);
463   }
464  
465  
466 < getcdouble(col, fp)             /* get a double color value from fp */
466 > getcdouble(col)         /* get a double color value from stream(s) */
467   COLOR  col;
357 FILE  *fp;
468   {
469 <        double  vd[3];
469 >        double  vd[3];
470  
471 <        if (fread((char *)vd, sizeof(double), 3, fp) != 3)
472 <                return(-1);
471 >        if (fin2 == NULL) {
472 >                if (fread((char *)vd, sizeof(double), 3, fin) != 3)
473 >                        return(-1);
474 >        } else {
475 >                if (fread((char *)vd, sizeof(double), 1, fin) != 1 ||
476 >                        fread((char *)(vd+1), sizeof(double), 1, fin2) != 1 ||
477 >                        fread((char *)(vd+2), sizeof(double), 1, fin3) != 1)
478 >                        return(-1);
479 >        }
480          setcolor(col, vd[rord[RED]], vd[rord[GRN]], vd[rord[BLU]]);
481          return(0);
482   }
483  
484  
485 < getcfloat(col, fp)              /* get a float color value from fp */
485 > getcfloat(col)          /* get a float color value from stream(s) */
486   COLOR  col;
370 FILE  *fp;
487   {
488          float  vf[3];
489  
490 <        if (fread((char *)vf, sizeof(float), 3, fp) != 3)
491 <                return(-1);
490 >        if (fin2 == NULL) {
491 >                if (fread((char *)vf, sizeof(float), 3, fin) != 3)
492 >                        return(-1);
493 >        } else {
494 >                if (fread((char *)vf, sizeof(float), 1, fin) != 1 ||
495 >                        fread((char *)(vf+1), sizeof(float), 1, fin2) != 1 ||
496 >                        fread((char *)(vf+2), sizeof(float), 1, fin3) != 1)
497 >                        return(-1);
498 >        }
499          setcolor(col, vf[rord[RED]], vf[rord[GRN]], vf[rord[BLU]]);
500          return(0);
501   }
502  
503  
504 < getcint(col, fp)                /* get an int color value from fp */
504 > getcint(col)            /* get an int color value from stream(s) */
505   COLOR  col;
383 FILE  *fp;
506   {
507          int  vi[3];
508  
509 <        if (fscanf(fp, "%d %d %d", &vi[0], &vi[1], &vi[2]) != 3)
510 <                return(-1);
509 >        if (fin2 == NULL) {
510 >                if (fscanf(fin, "%d %d %d", &vi[0], &vi[1], &vi[2]) != 3)
511 >                        return(-1);
512 >        } else {
513 >                if (fscanf(fin, "%d", &vi[0]) != 1 ||
514 >                                fscanf(fin2, "%d", &vi[1]) != 1 ||
515 >                                fscanf(fin3, "%d", &vi[2]) != 1)
516 >                        return(-1);
517 >        }
518          setcolor(col, (vi[rord[RED]]+.5)/256.,
519                          (vi[rord[GRN]]+.5)/256., (vi[rord[BLU]]+.5)/256.);
520          return(0);
521   }
522  
523  
524 < getcbyte(col, fp)               /* get a byte color value from fp */
524 > getcbyte(col)           /* get a byte color value from stream(s) */
525   COLOR  col;
397 FILE  *fp;
526   {
527          BYTE  vb[3];
528  
529 <        if (fread((char *)vb, sizeof(BYTE), 3, fp) != 3)
530 <                return(-1);
529 >        if (fin2 == NULL) {
530 >                if (fread((char *)vb, sizeof(BYTE), 3, fin) != 3)
531 >                        return(-1);
532 >        } else {
533 >                if (fread((char *)vb, sizeof(BYTE), 1, fin) != 1 ||
534 >                        fread((char *)(vb+1), sizeof(BYTE), 1, fin2) != 1 ||
535 >                        fread((char *)(vb+2), sizeof(BYTE), 1, fin3) != 1)
536 >                        return(-1);
537 >        }
538          setcolor(col, (vb[rord[RED]]+.5)/256.,
539                          (vb[rord[GRN]]+.5)/256., (vb[rord[BLU]]+.5)/256.);
540          return(0);
541   }
542  
543  
544 < getbascii(col, fp)              /* get an ascii brightness value from fp */
544 > getbascii(col)          /* get an ascii brightness value from fin */
545   COLOR  col;
411 FILE  *fp;
546   {
547 <        double  vd;
547 >        double  vd;
548  
549 <        if (fscanf(fp, "%lf", &vd) != 1)
549 >        if (fscanf(fin, "%lf", &vd) != 1)
550                  return(-1);
551          setcolor(col, vd, vd, vd);
552          return(0);
553   }
554  
555  
556 < getbdouble(col, fp)             /* get a double brightness value from fp */
556 > getbdouble(col)         /* get a double brightness value from fin */
557   COLOR  col;
424 FILE  *fp;
558   {
559 <        double  vd;
559 >        double  vd;
560  
561 <        if (fread((char *)&vd, sizeof(double), 1, fp) != 1)
561 >        if (fread((char *)&vd, sizeof(double), 1, fin) != 1)
562                  return(-1);
563          setcolor(col, vd, vd, vd);
564          return(0);
565   }
566  
567  
568 < getbfloat(col, fp)              /* get a float brightness value from fp */
568 > getbfloat(col)          /* get a float brightness value from fin */
569   COLOR  col;
437 FILE  *fp;
570   {
571          float  vf;
572  
573 <        if (fread((char *)&vf, sizeof(float), 1, fp) != 1)
573 >        if (fread((char *)&vf, sizeof(float), 1, fin) != 1)
574                  return(-1);
575          setcolor(col, vf, vf, vf);
576          return(0);
577   }
578  
579  
580 < getbint(col, fp)                /* get an int brightness value from fp */
580 > getbint(col)            /* get an int brightness value from fin */
581   COLOR  col;
450 FILE  *fp;
582   {
583          int  vi;
584 <        double  d;
584 >        double  d;
585  
586 <        if (fscanf(fp, "%d", &vi) != 1)
586 >        if (fscanf(fin, "%d", &vi) != 1)
587                  return(-1);
588          d = (vi+.5)/256.;
589          setcolor(col, d, d, d);
# Line 460 | Line 591 | FILE  *fp;
591   }
592  
593  
594 < getbbyte(col, fp)               /* get a byte brightness value from fp */
594 > getbbyte(col)           /* get a byte brightness value from fin */
595   COLOR  col;
465 FILE  *fp;
596   {
597          BYTE  vb;
598 <        double  d;
598 >        double  d;
599  
600 <        if (fread((char *)&vb, sizeof(BYTE), 1, fp) != 1)
600 >        if (fread((char *)&vb, sizeof(BYTE), 1, fin) != 1)
601                  return(-1);
602          d = (vb+.5)/256.;
603          setcolor(col, d, d, d);
# Line 475 | Line 605 | FILE  *fp;
605   }
606  
607  
608 < putcascii(col, fp)                      /* put an ascii color to fp */
608 > putcascii(col)                  /* put an ascii color to stdout */
609   COLOR  col;
480 FILE  *fp;
610   {
611 <        fprintf(fp, "%15.3e %15.3e %15.3e\n",
611 >        fprintf(stdout, "%15.3e %15.3e %15.3e\n",
612                          colval(col,ord[0]),
613                          colval(col,ord[1]),
614                          colval(col,ord[2]));
615  
616 <        return(ferror(fp) ? -1 : 0);
616 >        return(ferror(stdout) ? -1 : 0);
617   }
618  
619  
620 < putcfloat(col, fp)                      /* put a float color to fp */
620 > putcfloat(col)                  /* put a float color to stdout */
621   COLOR  col;
493 FILE  *fp;
622   {
623          float  vf[3];
624  
625          vf[0] = colval(col,ord[0]);
626          vf[1] = colval(col,ord[1]);
627          vf[2] = colval(col,ord[2]);
628 <        fwrite((char *)vf, sizeof(float), 3, fp);
628 >        fwrite((char *)vf, sizeof(float), 3, stdout);
629  
630 <        return(ferror(fp) ? -1 : 0);
630 >        return(ferror(stdout) ? -1 : 0);
631   }
632  
633  
634 < putcdouble(col, fp)                     /* put a double color to fp */
634 > putcdouble(col)                 /* put a double color to stdout */
635   COLOR  col;
508 FILE  *fp;
636   {
637 <        double  vd[3];
637 >        double  vd[3];
638  
639          vd[0] = colval(col,ord[0]);
640          vd[1] = colval(col,ord[1]);
641          vd[2] = colval(col,ord[2]);
642 <        fwrite((char *)vd, sizeof(double), 3, fp);
642 >        fwrite((char *)vd, sizeof(double), 3, stdout);
643  
644 <        return(ferror(fp) ? -1 : 0);
644 >        return(ferror(stdout) ? -1 : 0);
645   }
646  
647  
648 < putcint(col, fp)                        /* put an int color to fp */
648 > putcint(col)                    /* put an int color to stdout */
649   COLOR  col;
523 FILE  *fp;
650   {
651 <        fprintf(fp, "%d %d %d\n",
651 >        fprintf(stdout, "%d %d %d\n",
652                          (int)(colval(col,ord[0])*256.),
653                          (int)(colval(col,ord[1])*256.),
654                          (int)(colval(col,ord[2])*256.));
655  
656 <        return(ferror(fp) ? -1 : 0);
656 >        return(ferror(stdout) ? -1 : 0);
657   }
658  
659  
660 < putcbyte(col, fp)                       /* put a byte color to fp */
660 > putcbyte(col)                   /* put a byte color to stdout */
661   COLOR  col;
536 FILE  *fp;
662   {
663          register int  i;
664          BYTE  vb[3];
# Line 544 | Line 669 | FILE  *fp;
669          vb[1] = min(i,255);
670          i = colval(col,ord[2])*256.;
671          vb[2] = min(i,255);
672 <        fwrite((char *)vb, sizeof(BYTE), 3, fp);
672 >        fwrite((char *)vb, sizeof(BYTE), 3, stdout);
673  
674 <        return(ferror(fp) ? -1 : 0);
674 >        return(ferror(stdout) ? -1 : 0);
675   }
676  
677  
678 < putbascii(col, fp)                      /* put an ascii brightness to fp */
678 > putbascii(col)                  /* put an ascii brightness to stdout */
679   COLOR  col;
555 FILE  *fp;
680   {
681 <        fprintf(fp, "%15.3e\n", bright(col));
681 >        fprintf(stdout, "%15.3e\n", bright(col));
682  
683 <        return(ferror(fp) ? -1 : 0);
683 >        return(ferror(stdout) ? -1 : 0);
684   }
685  
686  
687 < putbfloat(col, fp)                      /* put a float brightness to fp */
687 > putbfloat(col)                  /* put a float brightness to stdout */
688   COLOR  col;
565 FILE  *fp;
689   {
690          float  vf;
691  
692          vf = bright(col);
693 <        fwrite((char *)&vf, sizeof(float), 1, fp);
693 >        fwrite((char *)&vf, sizeof(float), 1, stdout);
694  
695 <        return(ferror(fp) ? -1 : 0);
695 >        return(ferror(stdout) ? -1 : 0);
696   }
697  
698  
699 < putbdouble(col, fp)                     /* put a double brightness to fp */
699 > putbdouble(col)                 /* put a double brightness to stdout */
700   COLOR  col;
578 FILE  *fp;
701   {
702 <        double  vd;
702 >        double  vd;
703  
704          vd = bright(col);
705 <        fwrite((char *)&vd, sizeof(double), 1, fp);
705 >        fwrite((char *)&vd, sizeof(double), 1, stdout);
706  
707 <        return(ferror(fp) ? -1 : 0);
707 >        return(ferror(stdout) ? -1 : 0);
708   }
709  
710  
711 < putbint(col, fp)                        /* put an int brightness to fp */
711 > putbint(col)                    /* put an int brightness to stdout */
712   COLOR  col;
591 FILE  *fp;
713   {
714 <        fprintf(fp, "%d\n", (int)(bright(col)*256.));
714 >        fprintf(stdout, "%d\n", (int)(bright(col)*256.));
715  
716 <        return(ferror(fp) ? -1 : 0);
716 >        return(ferror(stdout) ? -1 : 0);
717   }
718  
719  
720 < putbbyte(col, fp)                       /* put a byte brightness to fp */
720 > putbbyte(col)                   /* put a byte brightness to stdout */
721   COLOR  col;
601 FILE  *fp;
722   {
723          register int  i;
724          BYTE  vb;
725  
726          i = bright(col)*256.;
727          vb = min(i,255);
728 <        fwrite((char *)&vb, sizeof(BYTE), 1, fp);
728 >        fwrite((char *)&vb, sizeof(BYTE), 1, stdout);
729  
730 <        return(ferror(fp) ? -1 : 0);
730 >        return(ferror(stdout) ? -1 : 0);
731   }
732  
733  
734 + putpascii(col)                  /* put an ascii primary to stdout */
735 + COLOR  col;
736 + {
737 +        fprintf(stdout, "%15.3e\n", colval(col,putprim));
738 +
739 +        return(ferror(stdout) ? -1 : 0);
740 + }
741 +
742 +
743 + putpfloat(col)                  /* put a float primary to stdout */
744 + COLOR  col;
745 + {
746 +        float  vf;
747 +
748 +        vf = colval(col,putprim);
749 +        fwrite((char *)&vf, sizeof(float), 1, stdout);
750 +
751 +        return(ferror(stdout) ? -1 : 0);
752 + }
753 +
754 +
755 + putpdouble(col)                 /* put a double primary to stdout */
756 + COLOR  col;
757 + {
758 +        double  vd;
759 +
760 +        vd = colval(col,putprim);
761 +        fwrite((char *)&vd, sizeof(double), 1, stdout);
762 +
763 +        return(ferror(stdout) ? -1 : 0);
764 + }
765 +
766 +
767 + putpint(col)                    /* put an int primary to stdout */
768 + COLOR  col;
769 + {
770 +        fprintf(stdout, "%d\n", (int)(colval(col,putprim)*256.));
771 +
772 +        return(ferror(stdout) ? -1 : 0);
773 + }
774 +
775 +
776 + putpbyte(col)                   /* put a byte primary to stdout */
777 + COLOR  col;
778 + {
779 +        register int  i;
780 +        BYTE  vb;
781 +
782 +        i = colval(col,putprim)*256.;
783 +        vb = min(i,255);
784 +        fwrite((char *)&vb, sizeof(BYTE), 1, stdout);
785 +
786 +        return(ferror(stdout) ? -1 : 0);
787 + }
788 +
789 +
790   set_io()                        /* set put and get functions */
791   {
792          switch (format) {
793          case 'a':                                       /* ascii */
794 <                if (brightonly) {
794 >                if (putprim == BRIGHT) {
795                          getval = getbascii;
796                          putval = putbascii;
797 +                } else if (putprim != ALL) {
798 +                        getval = getbascii;
799 +                        putval = putpascii;
800                  } else {
801                          getval = getcascii;
802                          putval = putcascii;
803                  }
804                  return;
805          case 'f':                                       /* binary float */
806 <                if (brightonly) {
806 >                if (putprim == BRIGHT) {
807                          getval = getbfloat;
808                          putval = putbfloat;
809 +                } else if (putprim != ALL) {
810 +                        getval = getbfloat;
811 +                        putval = putpfloat;
812                  } else {
813                          getval = getcfloat;
814                          putval = putcfloat;
815                  }
816                  return;
817          case 'd':                                       /* binary double */
818 <                if (brightonly) {
818 >                if (putprim == BRIGHT) {
819                          getval = getbdouble;
820                          putval = putbdouble;
821 +                } else if (putprim != ALL) {
822 +                        getval = getbdouble;
823 +                        putval = putpdouble;
824                  } else {
825                          getval = getcdouble;
826                          putval = putcdouble;
827                  }
828                  return;
829          case 'i':                                       /* integer */
830 <                if (brightonly) {
830 >                if (putprim == BRIGHT) {
831                          getval = getbint;
832                          putval = putbint;
833 +                } else if (putprim != ALL) {
834 +                        getval = getbint;
835 +                        putval = putpint;
836                  } else {
837                          getval = getcint;
838                          putval = putcint;
839                  }
840                  return;
841          case 'b':                                       /* byte */
842 <                if (brightonly) {
842 >                if (putprim == BRIGHT) {
843                          getval = getbbyte;
844                          putval = putbbyte;
845 +                } else if (putprim != ALL) {
846 +                        getval = getbbyte;
847 +                        putval = putpbyte;
848                  } else {
849                          getval = getcbyte;
850                          putval = putcbyte;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines