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

Comparing ray/src/cal/rcalc.c (file contents):
Revision 1.19 by greg, Tue Jun 14 01:25:02 2005 UTC vs.
Revision 1.20 by greg, Sat Dec 23 17:27:45 2006 UTC

# Line 81 | Line 81 | int  igneol = 0;                /* ignore end of line?
81   int  passive = 0;               /* passive mode (transmit unmatched input) */
82   char  sepchar = '\t';           /* input/output separator */
83   int  noinput = 0;               /* no input records? */
84 + int  itype = 'a';               /* input type (a/f/F/d/D) */
85   int  nbicols = 0;               /* number of binary input columns */
86 < int  bocols = 0;                /* produce binary output columns */
86 > int  otype = 'a';               /* output format (a/f/F/d/D) */
87   char  inpbuf[INBSIZ];           /* input buffer */
88   double  colval[MAXCOL];         /* input column values */
89   unsigned long  colflg = 0;      /* column retrieved flags */
# Line 146 | Line 147 | char  *argv[]
147                  case 'i':
148                          switch (argv[i][2]) {
149                          case '\0':
150 +                                itype = 'a';
151                                  nbicols = 0;
152                                  readfmt(argv[++i], 0);
153                                  break;
154                          case 'a':
155 +                                itype = 'a';
156                                  nbicols = 0;
157                                  break;
158                          case 'd':
159 +                        case 'D':
160 +                                itype = argv[i][2];
161                                  if (isdigit(argv[i][3]))
162                                          nbicols = atoi(argv[i]+3);
163                                  else
# Line 164 | Line 169 | char  *argv[]
169                                  }
170                                  break;
171                          case 'f':
172 +                        case 'F':
173 +                                itype = argv[i][2];
174                                  if (isdigit(argv[i][3]))
175 <                                        nbicols = -atoi(argv[i]+3);
175 >                                        nbicols = atoi(argv[i]+3);
176                                  else
177 <                                        nbicols = -1;
178 <                                if (-nbicols*sizeof(float) > INBSIZ) {
177 >                                        nbicols = 1;
178 >                                if (nbicols*sizeof(float) > INBSIZ) {
179                                          eputs(argv[0]);
180                                          eputs(": too many input columns\n");
181                                          quit(1);
# Line 181 | Line 188 | char  *argv[]
188                  case 'o':
189                          switch (argv[i][2]) {
190                          case '\0':
191 <                                bocols = 0;
191 >                                otype = 'a';
192                                  readfmt(argv[++i], 1);
193                                  break;
194                          case 'a':
195 <                                bocols = 0;
195 >                                otype = 'a';
196                                  break;
197                          case 'd':
198 <                                bocols = 1;
192 <                                SET_FILE_BINARY(stdout);
193 <                                break;
198 >                        case 'D':
199                          case 'f':
200 <                                bocols = -1;
201 <                                SET_FILE_BINARY(stdout);
200 >                        case 'F':
201 >                                otype = argv[i][2];
202                                  break;
203                          default:
204                                  goto userr;
# Line 212 | Line 217 | char  *argv[]
217   eputs(" [-b][-l][-n][-p][-w][-u][-tS][-s svar=sval][-e expr][-f source][-i infmt][-o outfmt] [file]\n");
218                          quit(1);
219                  }
220 <        if (bocols)
220 >        if (otype != 'a')
221                  SET_FILE_BINARY(stdout);
222          if (noinput) {          /* produce a single output record */
223                  if (i < argc) {
# Line 224 | Line 229 | eputs(" [-b][-l][-n][-p][-w][-u][-tS][-s svar=sval][-e
229                  putout();
230                  quit(0);
231          }
232 <        if (nbicols)
232 >        if (itype != 'a')
233                  SET_FILE_BINARY(stdin);
234  
235          if (blnkeq)             /* for efficiency */
# Line 260 | Line 265 | FILE  *fp
265   {
266          if (inpfmt != NULL)
267                  return(getrec());
268 <        if (nbicols > 0)
269 <                return(fread(inpbuf, sizeof(double),
270 <                                        nbicols, fp) == nbicols);
271 <        if (nbicols < 0)
272 <                return(fread(inpbuf, sizeof(float),
273 <                                        -nbicols, fp) == -nbicols);
268 >        if (tolower(itype) == 'd') {
269 >                if (fread(inpbuf, sizeof(double), nbicols, fp) != nbicols)
270 >                        return(0);
271 >                if (itype == 'D')
272 >                        swap64(inpbuf, nbicols);
273 >                return(1);
274 >        }
275 >        if (tolower(itype) == 'f') {
276 >                if (fread(inpbuf, sizeof(float), nbicols, fp) != nbicols)
277 >                        return(0);
278 >                if (itype == 'F')
279 >                        swap32(inpbuf, nbicols);
280 >                return(1);
281 >        }
282          return(fgets(inpbuf, INBSIZ, fp) != NULL);
283   }
284  
# Line 310 | Line 323 | putout(void)                /* produce an output recor
323          colpos = 0;
324          if (outfmt != NULL)
325                  putrec();
326 <        else if (bocols)
314 <                chanout(bchanset);
315 <        else
326 >        else if (otype == 'a')
327                  chanout(chanset);
328 <        if (colpos && !bocols)
328 >        else
329 >                chanout(bchanset);
330 >        if (colpos && otype == 'a')
331                  putchar('\n');
332          if (unbuff)
333                  fflush(stdout);
# Line 333 | Line 346 | l_in(char *funame)     /* function call for $channel */
346                          /* determine number of channels */
347          if (noinput || inpfmt != NULL)
348                  return(0);
349 <        if (nbicols > 0)
349 >        if (nbicols)
350                  return(nbicols);
338        if (nbicols < 0)
339                return(-nbicols);
351          cp = inpbuf;    /* need to count */
352          for (n = 0; *cp; )
353                  if (blnkeq && isspace(sepchar)) {
# Line 369 | Line 380 | int  n
380                  eputs("illegal channel number\n");
381                  quit(1);
382          }
383 <        if (nbicols > 0) {
383 >        if (nbicols) {
384                  if (n > nbicols)
385                          return(0.0);
386 <                cp = inpbuf + (n-1)*sizeof(double);
387 <                return(*(double *)cp);
388 <        }
389 <        if (nbicols < 0) {
379 <                if (n > -nbicols)
380 <                        return(0.0);
386 >                if (tolower(itype) == 'd') {
387 >                        cp = inpbuf + (n-1)*sizeof(double);
388 >                        return(*(double *)cp);
389 >                }
390                  cp = inpbuf + (n-1)*sizeof(float);
391                  return(*(float *)cp);
392          }
# Line 429 | Line 438 | double  v
438   )
439   {
440          static char     zerobuf[sizeof(double)];
441 +        float   fval = v;
442  
443          while (++colpos < n)
444                  fwrite(zerobuf,
445 <                        bocols>0 ? sizeof(double) : sizeof(float),
445 >                        tolower(otype)=='d' ? sizeof(double) : sizeof(float),
446                          1, stdout);
447 <        if (bocols > 0)
447 >        switch (otype) {
448 >        case 'D':
449 >                swap64((char *)&v, 1);
450 >                /* fall through */
451 >        case 'd':
452                  fwrite(&v, sizeof(double), 1, stdout);
453 <        else {
454 <                float   fval = v;
453 >                break;
454 >        case 'F':
455 >                swap32((char *)&fval, 1);
456 >                /* fall through */
457 >        case 'f':
458                  fwrite(&fval, sizeof(float), 1, stdout);
459 +                break;
460          }
461   }
462  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines