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.4 by greg, Wed Jun 7 08:40:59 1989 UTC vs.
Revision 1.8 by greg, Thu Oct 5 09:49:04 1989 UTC

# Line 40 | Line 40 | extern int  o_face();
40   extern int  o_cone();
41   extern int  o_cylinder();
42   extern int  o_ring();
43 + extern int  m_glow();
44 + extern int  m_spot();
45   extern int  m_dielectric();
46   extern int  m_interface();
47   extern int  text();
# Line 60 | Line 62 | FUN  ofun[] = {
62          { "instance", addxform },
63          { "alias", alias },
64          { "antimatter", passargs },
65 +        { "glow", m_glow },
66 +        { "spotlight", m_spot },
67          { "dielectric", m_dielectric },
68          { "interface", m_interface },
69          { "colortext", text },
# Line 76 | Line 80 | FUN  ofun[] = {
80          { "mixtext", text },
81          { "light", passargs },
82          { "illum", passargs },
79        { "glow", passargs },
83          { "plastic", passargs },
84          { "metal", passargs },
85          { "trans", passargs },
# Line 110 | 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  
114        xav = argv;
115
121          for (a = 1; a < argc; a++) {
122                  if (argv[a][0] == '-')
123                          switch (argv[a][1]) {
# Line 126 | Line 131 | char  *argv[];
131                  break;
132          }
133  
134 +        xav = argv;
135          xfa = a;
136  
137          totscale = 1.0;
# Line 156 | Line 162 | char  *argv[];
162                          fclose(fp);
163                  }
164  
165 <        exit(0);
165 >        return(0);
166   }
167  
168  
169 + doarray(ac, av, ai)                     /* make array */
170 + char  **av;
171 + int  ac, ai;
172 + {
173 +        char  *newav[256], **avp;
174 +        char  newid[128], repts[32];
175 +        char  *oldid = NULL;
176 +        int  i, err;
177 +        
178 +        avp = newav+2;
179 +        avp[0] = av[0];
180 +        for (i = 1; i < ac; i++)
181 +                if (!strcmp(av[i-1], "-n")) {
182 +                        oldid = av[i];
183 +                        avp[i] = newid;
184 +                } else
185 +                        avp[i] = av[i];
186 +        avp[ai] = "-i";
187 +        avp[ai+1] = repts;
188 +        avp[i] = NULL;
189 +        if (oldid == NULL) {
190 +                newav[0] = av[0];
191 +                newav[1] = "-n";
192 +                newav[2] = newid;
193 +                avp = newav;
194 +                ac += 2;
195 +        }
196 +        err = 0;
197 +        for (i = 0; i < atoi(av[ai+1]); i++) {
198 +                if (oldid == NULL)
199 +                        sprintf(newid, "a%d", i);
200 +                else
201 +                        sprintf(newid, "%s.%d", oldid, i);
202 +                sprintf(repts, "%d", i);
203 +                err |= main(ac, avp);
204 +        }
205 +        return(err);
206 + }
207 +
208 +
209   xform(name, fin)                        /* transform stream by totxform */
210   char  *name;
211   register FILE  *fin;
# Line 178 | Line 224 | register FILE  *fin;
224                          } while (c != '\n');
225                  } else if (c == '!') {                  /* command */
226                          ungetc(c, fin);
227 <                        if (expand)
182 <                                xfcomm(name, fin);
183 <                        else {
184 <                                putchar('\n');
185 <                                while ((c = getc(fin)) != EOF && c != '\n')
186 <                                        putchar(c);
187 <                                printf(" |");
188 <                                for (c = 0; c < xac; c++)
189 <                                        printf(" %s", xav[c]);
190 <                                putchar('\n');
191 <                        }
227 >                        xfcomm(name, fin);
228                  } else {                                /* object */
229                          ungetc(c, fin);
230                          xfobject(name, fin);
# Line 197 | Line 233 | register FILE  *fin;
233   }
234  
235  
236 < xfcomm(fname, fin)                              /* expand a command */
236 > xfcomm(fname, fin)                      /* transform a command */
237   FILE  *fin;
238   {
239          FILE  *popen();
240 <        char  *fgets();
240 >        char  *fgetline();
241          FILE  *pin;
242          char  buf[512];
243 +        int  i;
244  
245 <        fgets(buf, sizeof(buf), fin);
246 <        if (buf[strlen(buf)-1] == '\n')
247 <                buf[strlen(buf)-1] = '\0';
248 <        if ((pin = popen(buf+1, "r")) == NULL) {
249 <                fprintf(stderr, "%s: (%s): cannot execute \"%s\"\n",
250 <                                progname, fname, buf);
251 <                exit(1);
245 >        fgetline(buf, sizeof(buf), fin);
246 >        if (expand) {
247 >                if ((pin = popen(buf+1, "r")) == NULL) {
248 >                        fprintf(stderr, "%s: (%s): cannot execute \"%s\"\n",
249 >                                        progname, fname, buf);
250 >                        exit(1);
251 >                }
252 >                xform(buf, pin);
253 >                pclose(pin);
254 >        } else {
255 >                printf("\n%s | %s -e", buf, xav[0]);
256 >                for (i = 1; i < xac; i++)
257 >                        printf(" %s", xav[i]);
258 >                putchar('\n');
259          }
216        xform(buf, pin);
217        pclose(pin);
260   }
261  
262  
# Line 328 | Line 370 | FILE  *fin;
370          if (fscanf(fin, "%s", alias) != 1)
371                  return(-1);
372          printf("\t%s\n", alias);
373 +        return(0);
374 + }
375 +
376 +
377 + m_glow(fin)                     /* transform arguments for proximity light */
378 + FILE  *fin;
379 + {
380 +        register FUNARGS  *fa;
381 +
382 +        if ((fa = getfargs(fin)) == NULL)
383 +                return(-1);
384 +        if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 4)
385 +                return(-1);
386 +        printf("0\n0\n4");
387 +        printf(" %18.12g %18.12g %18.12g",
388 +                        fa->farg[0], fa->farg[1], fa->farg[2]);
389 +        printf(" %18.12g\n", fa->farg[3] * totscale);
390 +        freefargs(fa);
391 +        return(0);
392 + }
393 +
394 +
395 + m_spot(fin)                     /* transform arguments for spotlight */
396 + FILE  *fin;
397 + {
398 +        double  v[3];
399 +        register FUNARGS  *fa;
400 +
401 +        if ((fa = getfargs(fin)) == NULL)
402 +                return(-1);
403 +        if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 7)
404 +                return(-1);
405 +        printf("0\n0\n7");
406 +        printf(" %18.12g %18.12g %18.12g %18.12g\n",
407 +                        fa->farg[0], fa->farg[1], fa->farg[2], fa->farg[3]);
408 +        multv3(v, fa->farg+4, totxform);
409 +        printf("\t%18.12g %18.12g %18.12g\n", v[0], v[1], v[2]);
410 +        freefargs(fa);
411          return(0);
412   }
413  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines