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 1.2 by greg, Tue Mar 14 11:36:59 1989 UTC vs.
Revision 1.10 by greg, Wed Jan 24 09:16:03 1990 UTC

# Line 113 | Line 113 | char  *argv[];
113          FILE  *fopen();
114          FILE  *fp;
115          int  a;
116 +                                        /* check for array */
117 +        for (a = 1; a < argc; a++)
118 +                if (!strcmp(argv[a], "-a"))
119 +                        return(doarray(argc, argv, a));
120  
117        xav = argv;
118
121          for (a = 1; a < argc; a++) {
122                  if (argv[a][0] == '-')
123                          switch (argv[a][1]) {
124                          case 'n':
125 +                                if (argv[a][2] || a+1 >= argc)
126 +                                        break;
127                                  idprefix = argv[++a];
128                                  continue;
129                          case 'e':
130 +                                if (argv[a][2])
131 +                                        break;
132                                  expand = 1;
133                                  continue;
134                          }
135                  break;
136          }
137  
138 +        xav = argv;
139          xfa = a;
140  
141          totscale = 1.0;
# Line 139 | Line 146 | char  *argv[];
146          if (reverse = totscale < 0.0)
147                  totscale = -totscale;
148  
149 <        xac = a;
149 >        if (a < argc && argv[a][0] == '-') {
150 >                fprintf(stderr, "%s: command line error at '%s'\n",
151 >                                argv[0], argv[a]);
152 >                exit(1);
153 >        }
154  
155 <        putchar('#');                           /* simple header */
155 >        xac = a;
156 >                                        /* simple header */
157 >        putchar('#');
158          for (a = 0; a < xac; a++)
159                  printf(" %s", xav[a]);
160          putchar('\n');
161 <
162 <        if (a == argc)
161 >                                        /* transform input */
162 >        if (xac == argc)
163                  xform("standard input", stdin);
164          else
165 <                for ( ; a < argc; a++) {
165 >                for (a = xac; a < argc; a++) {
166                          if ((fp = fopen(argv[a], "r")) == NULL) {
167                                  fprintf(stderr, "%s: cannot open \"%s\"\n",
168                                                  progname, argv[a]);
# Line 159 | Line 172 | char  *argv[];
172                          fclose(fp);
173                  }
174  
175 <        exit(0);
175 >        return(0);
176   }
177  
178  
179 + doarray(ac, av, ai)                     /* make array */
180 + char  **av;
181 + int  ac, ai;
182 + {
183 +        char  *newav[256], **avp;
184 +        char  newid[128], repts[32];
185 +        char  *oldid = NULL;
186 +        int  i, err;
187 +        
188 +        avp = newav+2;
189 +        avp[0] = av[0];
190 +        for (i = 1; i < ac; i++)
191 +                if (!strcmp(av[i-1], "-n")) {
192 +                        oldid = av[i];
193 +                        avp[i] = newid;
194 +                } else
195 +                        avp[i] = av[i];
196 +        avp[ai] = "-i";
197 +        avp[ai+1] = repts;
198 +        avp[i] = NULL;
199 +        if (oldid == NULL) {
200 +                newav[0] = av[0];
201 +                newav[1] = "-n";
202 +                newav[2] = newid;
203 +                avp = newav;
204 +                ac += 2;
205 +        }
206 +        err = 0;
207 +        for (i = 0; i < atoi(av[ai+1]); i++) {
208 +                if (oldid == NULL)
209 +                        sprintf(newid, "a%d", i);
210 +                else
211 +                        sprintf(newid, "%s.%d", oldid, i);
212 +                sprintf(repts, "%d", i);
213 +                err |= main(ac, avp);
214 +        }
215 +        return(err);
216 + }
217 +
218 +
219   xform(name, fin)                        /* transform stream by totxform */
220   char  *name;
221   register FILE  *fin;
# Line 181 | Line 234 | register FILE  *fin;
234                          } while (c != '\n');
235                  } else if (c == '!') {                  /* command */
236                          ungetc(c, fin);
237 <                        if (expand)
185 <                                xfcomm(name, fin);
186 <                        else {
187 <                                putchar('\n');
188 <                                while ((c = getc(fin)) != EOF && c != '\n')
189 <                                        putchar(c);
190 <                                printf(" |");
191 <                                for (c = 0; c < xac; c++)
192 <                                        printf(" %s", xav[c]);
193 <                                putchar('\n');
194 <                        }
237 >                        xfcomm(name, fin);
238                  } else {                                /* object */
239                          ungetc(c, fin);
240                          xfobject(name, fin);
# Line 200 | Line 243 | register FILE  *fin;
243   }
244  
245  
246 < xfcomm(fname, fin)                              /* expand a command */
246 > xfcomm(fname, fin)                      /* transform a command */
247   FILE  *fin;
248   {
249          FILE  *popen();
250 <        char  *fgets();
250 >        char  *fgetline();
251          FILE  *pin;
252          char  buf[512];
253 +        int  i;
254  
255 <        buf[0] = '\0';
256 <        fgets(buf, sizeof(buf), fin);
257 <        if (buf[0] && buf[strlen(buf)-1] == '\n')
258 <                buf[strlen(buf)-1] = '\0';
259 <        if ((pin = popen(buf+1, "r")) == NULL) {
260 <                fprintf(stderr, "%s: (%s): cannot execute \"%s\"\n",
261 <                                progname, fname, buf);
262 <                exit(1);
255 >        fgetline(buf, sizeof(buf), fin);
256 >        if (expand) {
257 >                if (xac > 2) {
258 >                        if ((pin = popen(buf+1, "r")) == NULL) {
259 >                                fprintf(stderr,
260 >                                "%s: (%s): cannot execute \"%s\"\n",
261 >                                                progname, fname, buf);
262 >                                exit(1);
263 >                        }
264 >                        xform(buf, pin);
265 >                        pclose(pin);
266 >                } else {
267 >                        fflush(stdout);
268 >                        system(buf+1);
269 >                }
270 >        } else {
271 >                printf("\n%s", buf);
272 >                if (xac > 1) {
273 >                        printf(" | %s -e", xav[0]);
274 >                        for (i = 1; i < xac; i++)
275 >                                printf(" %s", xav[i]);
276 >                }
277 >                putchar('\n');
278          }
220        xform(buf, pin);
221        pclose(pin);
279   }
280  
281  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines