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

Comparing ray/src/cal/rsplit.c (file contents):
Revision 1.11 by greg, Thu Nov 7 23:13:12 2019 UTC vs.
Revision 1.12 by greg, Tue Mar 31 16:39:01 2020 UTC

# Line 22 | Line 22 | static const char      RCSid[] = "$Id$";
22   static int              swapped = 0;    /* input is byte-swapped */
23  
24   static FILE             *output[MAXFILE];
25 + static int              ncomp[MAXFILE];
26   static int              bytsiz[MAXFILE];
27 < static short            hdrflags[MAXFILE];
27 > static int              hdrflags[MAXFILE];
28   static const char       *format[MAXFILE];
29   static int              termc[MAXFILE];
30   static int              nfiles = 0;
# Line 96 | Line 97 | main(int argc, char *argv[])
97          long            outcnt = 0;
98          int             bininp = 0;
99          int             curterm = '\n';
100 +        int             curncomp = 1;
101          int             curbytes = 0;
102          int             curflags = 0;
103          const char      *curfmt = "ascii";
# Line 165 | Line 167 | main(int argc, char *argv[])
167                                          break;
168                                  case 'a':
169                                          curfmt = "ascii";
170 <                                        curbytes = -1;
170 >                                        curbytes = 0;
171                                          break;
172                                  default:
173                                          goto badopt;
174                                  }
175 <                                if (isdigit(argv[i][3]))
176 <                                        curbytes *= atoi(argv[i]+3);
177 <                                curbytes += (curbytes == -1);
176 <                                if (curbytes > (int)sizeof(buf)) {
175 >                                curncomp = isdigit(argv[i][3]) ?
176 >                                                        atoi(argv[i]+3) : 1 ;
177 >                                if (curbytes*curncomp > (int)sizeof(buf)) {
178                                          fputs(argv[0], stderr);
179                                          fputs(": output size too big\n", stderr);
180                                          return(1);
# Line 188 | Line 189 | main(int argc, char *argv[])
189                                  if (curbytes > 0)
190                                          SET_FILE_BINARY(output[nfiles]);
191                                  format[nfiles] = curfmt;
192 +                                ncomp[nfiles] = curncomp;
193                                  bytsiz[nfiles++] = curbytes;
194                                  break;
195                          badopt:;
# Line 208 | Line 210 | main(int argc, char *argv[])
210                          if (curbytes > 0)
211                                  SET_FILE_BINARY(output[nfiles]);
212                          format[nfiles] = curfmt;
213 +                        ncomp[nfiles] = curncomp;
214                          bytsiz[nfiles++] = curbytes;
215                  } else {
216                          if (append & (curflags != 0)) {
# Line 234 | Line 237 | main(int argc, char *argv[])
237                          if (curbytes > 0)
238                                  SET_FILE_BINARY(output[nfiles]);
239                          format[nfiles] = curfmt;
240 +                        ncomp[nfiles] = curncomp;
241                          bytsiz[nfiles++] = curbytes;
242                  }
243                  if (nfiles >= MAXFILE) {
# Line 287 | Line 291 | main(int argc, char *argv[])
291                          if (!(inpflags & DOHEADER))
292                                  newheader("RADIANCE", output[i]);
293                          printargs(argc, argv, output[i]);
294 +                        fprintf(output[i], "NCOMP=%d\n", ncomp[i]);
295                          if (format[i] != NULL) {
296                                  extern const char  BIGEND[];
297                                  if ((format[i][0] == 'f') |
# Line 305 | Line 310 | main(int argc, char *argv[])
310          do {                                    /* main loop */
311                  for (i = 0; i < nfiles; i++) {
312                          if (bytsiz[i] > 0) {            /* binary output */
313 <                                if (getbinary(buf, bytsiz[i], 1, stdin) < 1)
313 >                                if (getbinary(buf, bytsiz[i], ncomp[i],
314 >                                                        stdin) < ncomp[i])
315                                          break;
316 <                                if (putbinary(buf, bytsiz[i], 1, output[i]) < 1)
316 >                                if (putbinary(buf, bytsiz[i], ncomp[i],
317 >                                                        output[i]) < ncomp[i])
318                                          break;
319 <                        } else if (bytsiz[i] < 0) {     /* N-field output */
320 <                                int     n = -bytsiz[i];
319 >                        } else if (ncomp[i] > 1) {      /* N-field output */
320 >                                int     n = ncomp[i];
321                                  while (n--) {
322                                          if (!scanOK(termc[i]))
323                                                  break;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines