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

Comparing ray/src/rt/rc2.c (file contents):
Revision 2.14 by greg, Fri Aug 21 18:21:05 2015 UTC vs.
Revision 2.18 by greg, Thu Aug 18 00:52:48 2016 UTC

# Line 6 | Line 6 | static const char RCSid[] = "$Id$";
6   * File i/o and recovery
7   */
8  
9 + #include <ctype.h>
10 + #include "platform.h"
11   #include "rcontrib.h"
12   #include "resolu.h"
11 #include <ctype.h>
13  
14   /* Close output stream and free record */
15   static void
# Line 161 | Line 162 | getostream(const char *ospec, const char *mname, int b
162                          if (waitflush > 0)
163                                  fflush(stdout);
164                          stdos.xr = xres; stdos.yr = yres;
165 < #if 0
165 > #ifdef getc_unlocked
166                          flockfile(stdout);      /* avoid lock/unlock overhead */
167   #endif
168                          using_stdout = 1;
# Line 203 | Line 204 | getostream(const char *ospec, const char *mname, int b
204                          goto openerr;
205                  if (outfmt != 'a')
206                          SET_FILE_BINARY(sop->ofp);
207 < #if 0
207 > #ifdef getc_unlocked
208                  flockfile(sop->ofp);            /* avoid lock/unlock overhead */
209   #endif
210                  if (accumulate > 0) {           /* global resolution */
# Line 261 | Line 262 | getvec(FVECT vec)
262                  }
263                  break;
264          case 'f':                                       /* binary float */
265 <                if (fread((char *)vf, sizeof(float), 3, stdin) != 3)
265 >                if (getbinary((char *)vf, sizeof(float), 3, stdin) != 3)
266                          return(-1);
267                  VCOPY(vec, vf);
268                  break;
269          case 'd':                                       /* binary double */
270 <                if (fread((char *)vd, sizeof(double), 3, stdin) != 3)
270 >                if (getbinary((char *)vd, sizeof(double), 3, stdin) != 3)
271                          return(-1);
272                  VCOPY(vec, vd);
273                  break;
# Line 302 | Line 303 | put_contrib(const DCOLOR cnt, FILE *fout)
303                          scalecolor(fv, sf);
304                  } else
305                          copycolor(fv, cnt);
306 <                fwrite(fv, sizeof(float), 3, fout);
306 >                putbinary(fv, sizeof(float), 3, fout);
307                  break;
308          case 'd':
309                  if (accumulate > 1) {
310                          DCOLOR  dv;
311                          copycolor(dv, cnt);
312                          scalecolor(dv, sf);
313 <                        fwrite(dv, sizeof(double), 3, fout);
313 >                        putbinary(dv, sizeof(double), 3, fout);
314                  } else
315 <                        fwrite(cnt, sizeof(double), 3, fout);
315 >                        putbinary(cnt, sizeof(double), 3, fout);
316                  break;
317          case 'c':
318                  if (accumulate > 1)
319                          setcolr(cv, sf*cnt[0], sf*cnt[1], sf*cnt[2]);
320                  else
321                          setcolr(cv, cnt[0], cnt[1], cnt[2]);
322 <                fwrite(cv, sizeof(cv), 1, fout);
322 >                putbinary(cv, sizeof(cv), 1, fout);
323                  break;
324          default:
325                  error(INTERNAL, "botched output format");
# Line 393 | Line 394 | get_contrib(DCOLOR cnt, FILE *finp)
394          case 'a':
395                  return(fscanf(finp,"%lf %lf %lf",&cnt[0],&cnt[1],&cnt[2]) == 3);
396          case 'f':
397 <                if (fread(fv, sizeof(fv[0]), 3, finp) != 3)
397 >                if (getbinary(fv, sizeof(fv[0]), 3, finp) != 3)
398                          return(0);
399                  copycolor(cnt, fv);
400                  return(1);
401          case 'd':
402 <                return(fread(cnt, sizeof(cnt[0]), 3, finp) == 3);
402 >                return(getbinary(cnt, sizeof(cnt[0]), 3, finp) == 3);
403          case 'c':
404 <                if (fread(cv, sizeof(cv), 1, finp) != 1)
404 >                if (getbinary(cv, sizeof(cv), 1, finp) != 1)
405                          return(0);
406                  colr_color(fv, cv);
407                  copycolor(cnt, fv);
# Line 474 | Line 475 | reload_output()
475                                          error(WARNING, errmsg);
476                                          break;
477                                  }
478 < #if 0
478 > #ifdef getc_unlocked
479                                  flockfile(sout.ofp);
480   #endif
481                                  if (header && checkheader(sout.ofp, outvfmt, NULL) != 1) {
# Line 482 | Line 483 | reload_output()
483                                                          oname);
484                                          error(USER, errmsg);
485                                  }
486 <                                if ((sout.xr > 0) & (sout.yr > 0) &&
486 >                                if ((sout.reclen == 1) & (sout.xr > 0) & (sout.yr > 0) &&
487                                                  (!fscnresolu(&xr, &yr, sout.ofp) ||
488                                                          (xr != sout.xr) |
489                                                          (yr != sout.yr))) {
# Line 592 | Line 593 | recover_output()
593                          } else {
594                                  sout.reclen = 0;
595                                  sout.outpipe = 0;
596 +                                sout.xr = xres;
597 +                                sout.yr = yres;
598                                  sout.ofp = NULL;
599                          }
600                          if (sout.ofp != NULL) { /* already open? */
# Line 632 | Line 635 | recover_output()
635                                                  oname);
636                                  error(USER, errmsg);
637                          }
638 <                        sout.xr = xres; sout.yr = yres;
636 <                        if ((sout.xr > 0) & (sout.yr > 0) &&
638 >                        if ((sout.reclen == 1) & (sout.xr > 0) & (sout.yr > 0) &&
639                                          (!fscnresolu(&xr, &yr, sout.ofp) ||
640                                                  (xr != sout.xr) |
641                                                  (yr != sout.yr))) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines