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

Comparing ray/src/gen/xform.c (file contents):
Revision 2.16 by gwlarson, Thu Jun 3 14:15:01 1999 UTC vs.
Revision 2.19 by gwlarson, Fri Jun 4 16:00:27 1999 UTC

# Line 47 | Line 47 | short  tinvers[NUMOTYPE];              /* inverse types for surfac
47  
48   int  nrept = 1;                         /* number of array repetitions */
49  
50 + int stdinused = 0;                      /* stdin has been used by -f option? */
51 +
52   extern char  *malloc(), *fgets(), *fgetword();
53  
54   char  mainfn[MAXPATH];                  /* main file name */
# Line 128 | Line 130 | char  *argv[];
130          putchar('\n');
131                                          /* transform input */
132          if (xac == argc) {
133 +                if (stdinused) {
134 +                        fprintf(stderr, "%s: cannot use stdin more than once\n",
135 +                                        argv[0]);
136 +                        exit(1);
137 +                }
138                  openmain(NULL);
139                  xform(mainfn, mainfp);
140          } else
# Line 152 | Line 159 | int  ac, fi;
159          FILE    *argfp;
160          int  n, i, k, newac, err;
161          
162 <        if (fi >= ac-1 || av[fi+1][0] == '-') {
162 >        if (fi >= ac-1 || (av[fi+1][0] == '-' && av[fi+1][1] != '\0')) {
163                  fprintf(stderr, "%s: missing file for -f option\n", av[0]);
164                  exit(1);
165          }
166 <        if ((argfp = fopen(av[fi+1], "r")) == NULL) {
167 <                fprintf(stderr, "%s: cannot open argument file \"%s\"\n",
168 <                                av[0], av[fi+1]);
169 <                exit(1);
166 >        if (av[fi+1][0] == '-' && av[fi+1][1] == '\0') {
167 >                if (stdinused++) {
168 >                        fprintf(stderr, "%s: cannot use stdin more than once\n",
169 >                                        av[0]);
170 >                        exit(1);
171 >                }
172 >                argfp = stdin;
173 >                n = 100;                /* we just don't know! */
174 >        } else {
175 >                if ((argfp = fopen(av[fi+1], "r")) == NULL) {
176 >                        fprintf(stderr, "%s: cannot open argument file \"%s\"\n",
177 >                                        av[0], av[fi+1]);
178 >                        exit(1);
179 >                }
180 >                n = 0;                  /* count number of lines in file */
181 >                while (fgets(argbuf,sizeof(argbuf),argfp) != NULL)
182 >                        n += argbuf[0] != '\n' & argbuf[0] != '#';
183 >                if (!n) {
184 >                        fprintf(stderr, "%s: empty argument file \"%s\"\n",
185 >                                        av[0], av[fi+1]);
186 >                        exit(1);
187 >                }
188 >                nrept *= n;
189 >                rewind(argfp);
190          }
191 <        n = 0;                  /* count number of lines in file */
192 <        while (fgets(argbuf, sizeof(argbuf), argfp) != NULL)
193 <                n++;
194 <        if (!n) {
168 <                fprintf(stderr, "%s: empty argument file \"%s\"\n",
169 <                                av[0], av[fi+1]);
170 <                exit(1);
171 <        }
172 <        rewind(argfp);
173 <        nrept *= n;
174 <        err = 0;                        /* read each arg list and call main */
175 <        for (k = 0; k < n; k++) {
176 <                fgets(argbuf, sizeof(argbuf), argfp);
191 >        err = 0; k = 0;                 /* read each arg list and call main */
192 >        while (fgets(argbuf,sizeof(argbuf),argfp) != NULL) {
193 >                if (argbuf[0] == '\n' | argbuf[0] == '#')
194 >                        continue;
195                  avp = newav+2;
196                  avp[0] = av[0];
197                  for (i = 1; i < fi; i++)
198                          avp[i] = av[i];
199                  newac = i;
200 <                cp = argbuf;                    /* parse new words */
200 >                cp = argbuf;            /* parse new words */
201 >                if (*cp == '!') cp++;
202 >                if (!strncmp(cp, "xform ", 6)) cp += 6;
203                  for ( ; ; ) {
204                          while (isspace(*cp))    /* nullify spaces */
205                                  *cp++ = '\0';
# Line 211 | Line 231 | int  ac, fi;
231                  else
232                          sprintf(newid, "%s.%d", oldid, k);
233                  err |= main(newac, avp);
234 +                k++;
235          }
236          fclose(argfp);
237          return(err);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines