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.15 by gregl, Fri May 30 18:24:32 1997 UTC vs.
Revision 2.16 by gwlarson, Thu Jun 3 14:15:01 1999 UTC

# Line 47 | Line 47 | short  tinvers[NUMOTYPE];              /* inverse types for surfac
47  
48   int  nrept = 1;                         /* number of array repetitions */
49  
50 < extern char  *malloc(), *fgetword();
50 > extern char  *malloc(), *fgets(), *fgetword();
51  
52   char  mainfn[MAXPATH];                  /* main file name */
53   FILE  *mainfp = NULL;                   /* main file pointer */
# Line 61 | Line 61 | char  *argv[];
61   {
62          char  *fname;
63          int  a;
64 <                                        /* check for array */
64 >                                        /* check for argument list file */
65          for (a = 1; a < argc; a++)
66 +                if (!strcmp(argv[a], "-f"))
67 +                        return(doargf(argc, argv, a));
68 +                                        /* check for regular array */
69 +        for (a = 1; a < argc; a++)
70                  if (!strcmp(argv[a], "-a"))
71                          return(doarray(argc, argv, a));
72  
# Line 136 | Line 140 | char  *argv[];
140   }
141  
142  
143 + doargf(ac, av, fi)                      /* take argument list from file */
144 + char  **av;
145 + int  ac, fi;
146 + {
147 +        char  *newav[256], **avp;
148 +        char  argbuf[2048];
149 +        char  newid[128];
150 +        char  *oldid;
151 +        register char   *cp;
152 +        FILE    *argfp;
153 +        int  n, i, k, newac, err;
154 +        
155 +        if (fi >= ac-1 || av[fi+1][0] == '-') {
156 +                fprintf(stderr, "%s: missing file for -f option\n", av[0]);
157 +                exit(1);
158 +        }
159 +        if ((argfp = fopen(av[fi+1], "r")) == NULL) {
160 +                fprintf(stderr, "%s: cannot open argument file \"%s\"\n",
161 +                                av[0], av[fi+1]);
162 +                exit(1);
163 +        }
164 +        n = 0;                  /* count number of lines in file */
165 +        while (fgets(argbuf, sizeof(argbuf), argfp) != NULL)
166 +                n++;
167 +        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);
177 +                avp = newav+2;
178 +                avp[0] = av[0];
179 +                for (i = 1; i < fi; i++)
180 +                        avp[i] = av[i];
181 +                newac = i;
182 +                cp = argbuf;                    /* parse new words */
183 +                for ( ; ; ) {
184 +                        while (isspace(*cp))    /* nullify spaces */
185 +                                *cp++ = '\0';
186 +                        if (!*cp)               /* all done? */
187 +                                break;
188 +                        avp[newac++] = cp;      /* add argument to list */
189 +                        while (*++cp && !isspace(*cp))
190 +                                ;
191 +                }
192 +                for (i = fi+2; i < ac; i++)
193 +                        avp[newac++] = av[i];
194 +                avp[newac] = NULL;
195 +                oldid = NULL;
196 +                for (i = 2; i < newac; i++)
197 +                        if (!strcmp(avp[i-1], "-n")) {
198 +                                oldid = avp[i];
199 +                                avp[i] = newid;
200 +                                break;
201 +                        }
202 +                if (oldid == NULL) {
203 +                        newav[0] = av[0];
204 +                        newav[1] = "-n";
205 +                        newav[2] = newid;
206 +                        avp = newav;
207 +                        newac += 2;
208 +                }
209 +                if (oldid == NULL)
210 +                        sprintf(newid, "i%d", k);
211 +                else
212 +                        sprintf(newid, "%s.%d", oldid, k);
213 +                err |= main(newac, avp);
214 +        }
215 +        fclose(argfp);
216 +        return(err);
217 + }
218 +
219 +
220   doarray(ac, av, ai)                     /* make array */
221   char  **av;
222   int  ac, ai;
# Line 145 | Line 226 | int  ac, ai;
226          char  *oldid = NULL;
227          int  n, i, err;
228          
229 +        if (ai >= ac-1 || (n = atoi(av[ai+1])) <= 0) {
230 +                fprintf(stderr, "%s: missing count for -a option\n", av[0]);
231 +                exit(1);
232 +        }
233 +        nrept *= n;
234          avp = newav+2;
235          avp[0] = av[0];
236          for (i = 1; i < ac; i++)
# Line 163 | Line 249 | int  ac, ai;
249                  avp = newav;
250                  ac += 2;
251          }
166        nrept *= n = atoi(av[ai+1]);
252          err = 0;
253          for (i = 0; i < n; i++) {
254                  if (oldid == NULL)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines