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

Comparing ray/src/cal/total.c (file contents):
Revision 1.10 by greg, Tue Mar 25 05:36:22 2014 UTC vs.
Revision 1.14 by greg, Sat Dec 28 18:05:13 2019 UTC

# Line 7 | Line 7 | static const char      RCSid[] = "$Id$";
7   *      5/18/88
8   */
9  
10 #include  <stdio.h>
10   #include  <stdlib.h>
11   #include  <ctype.h>
12   #include  <math.h>
13   #include  "platform.h"
14 + #include  "rtio.h"
15  
16   #define  MAXCOL         8192            /* maximum number of columns */
17  
# Line 22 | Line 22 | static const char      RCSid[] = "$Id$";
22  
23   double  init_val[] = {0., 1., -1e12, 1e12};     /* initial values */
24  
25 + long  incnt = 0;                        /* limit number of input records? */
26 + long  outcnt = 0;                       /* limit number of output records? */
27 +
28   int  func = ADD;                        /* default function */
29   double  power = 0.0;                    /* power for sum */
30   int  mean = 0;                          /* compute mean */
# Line 30 | Line 33 | int  nbicols = 0;                      /* number of binary input columns
33   int  bocols = 0;                        /* produce binary output columns */
34   int  tabc = '\t';                       /* default separator */
35   int  subtotal = 0;                      /* produce subtotals? */
36 + int  nrecsout = 0;                      /* number of records produced */
37  
38   static int execute(char *fname);
39  
# Line 72 | Line 76 | char  *argv[]
76                                          break;
77                                  case 'i':
78                                          switch (argv[a][2]) {
79 +                                        case 'n':
80 +                                                incnt = atol(argv[++a]);
81 +                                                break;
82                                          case 'a':
83                                                  nbicols = 0;
84                                                  break;
# Line 105 | Line 112 | char  *argv[]
112                                          break;
113                                  case 'o':
114                                          switch (argv[a][2]) {
115 +                                        case 'n':
116 +                                                outcnt = atol(argv[++a]);
117 +                                                break;
118                                          case 'a':
119                                                  bocols = 0;
120                                                  break;
# Line 143 | Line 153 | char  *argv[]
153          if (a >= argc)
154                  status = execute(NULL) == -1 ? 1 : status;
155          else
156 <                for ( ; a < argc; a++)
156 >                for ( ; a < argc && (outcnt <= 0 || nrecsout < outcnt); a++)
157                          status = execute(argv[a]) == -1 ? 2 : status;
158          exit(status);
159   }
# Line 160 | Line 170 | getrecord(                     /* read next input record */
170          int   nf;
171                                                  /* reading binary input? */
172          if (nbicols > 0)
173 <                return(fread(field, sizeof(double), nbicols, fp));
173 >                return(getbinary(field, sizeof(double), nbicols, fp));
174          if (nbicols < 0) {
175                  float   *fbuf = (float *)buf;
176                  int     i;
177 <                nf = fread(fbuf, sizeof(float), -nbicols, fp);
177 >                nf = getbinary(fbuf, sizeof(float), -nbicols, fp);
178                  for (i = nf; i-- > 0; )
179                          field[i] = fbuf[i];
180                  return(nf);
# Line 201 | Line 211 | putrecord(                     /* write out results record */
211   {
212                                                  /* binary output? */
213          if (bocols > 0) {
214 <                fwrite(field, sizeof(double), n, fp);
214 >                putbinary(field, sizeof(double), n, fp);
215                  return;
216          }
217          if (bocols < 0) {
218                  float   fv;
219                  while (n-- > 0) {
220                          fv = *field++;
221 <                        fwrite(&fv, sizeof(float), 1, fp);
221 >                        putbinary(&fv, sizeof(float), 1, fp);
222                  }
223                  return;
224          }
# Line 261 | Line 271 | char  *fname
271                  }
272                  ncol = 0;
273                  for (nlin = 0; (count <= 0 || nlin < count) &&
274 +                                (incnt <= 0 || nlin < incnt) &&
275                                  (nread = getrecord(inpval, fp)) > 0;
276                                  nlin++) {
277                                                          /* compute */
# Line 311 | Line 322 | char  *fname
322                                  result[n] = rsign[n] * exp(result[n]);
323                  }
324                  putrecord(result, ncol, stdout);
325 +                ++nrecsout;
326 +                if (outcnt > 0 && nrecsout >= outcnt)
327 +                        break;
328                  if (!subtotal)
329                          ltotal = 0;
330 +                if (incnt > 0 && nlin >= incnt)
331 +                        break;
332          }
333                                                          /* close input */
334          return(fclose(fp));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines