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

Comparing ray/src/common/caldefn.c (file contents):
Revision 1.1 by greg, Thu Feb 2 10:34:26 1989 UTC vs.
Revision 1.7 by greg, Fri Jul 20 08:30:23 1990 UTC

# Line 16 | Line 16 | static char SCCSid[] = "$SunId$ LBL";
16   *  1/15/88  Added clock for caching of variable values.
17   *
18   *  11/16/88  Added VARDEF structure for hard linking.
19 + *
20 + *  5/31/90  Added conditional compile (REDEFW) for redefinition warning.
21   */
22  
23   #include  <stdio.h>
# Line 32 | Line 34 | static char SCCSid[] = "$SunId$ LBL";
34  
35   extern char  *ecalloc(), *savestr();
36  
37 < extern double  dvalue();
37 > static double  dvalue();
38  
39   long  eclock = -1;                      /* value storage timer */
40  
# Line 66 | Line 68 | char  *fname;
68          eputs(": cannot open\n");
69          quit(1);
70      }
71 <    initfile(fname, fp);
71 >    initfile(fp, fname, 0);
72      while (nextc != EOF)
73          loaddefn();
74      if (fname != NULL)
# Line 74 | Line 76 | char  *fname;
76   }
77  
78  
79 < scompile(file, str)             /* get definitions from a string */
78 < char  *file;
79 > scompile(str, fn, ln)           /* get definitions from a string */
80   char  *str;
81 + char  *fn;
82 + int  ln;
83   {
84 <    initstr(file, str);
84 >    initstr(str, fn, ln);
85      while (nextc != EOF)
86          loaddefn();
87   }
# Line 112 | Line 115 | double  val;
115          ep2 = ep1->v.kid->sibling;
116          if (ep2->type == NUM) {
117              ep2->v.num = val;
115            ep2->sibling->v.tick = -1;
118              return;
119          }
120      }
# Line 127 | Line 129 | double  val;
129      ep2->type = NUM;
130      ep2->v.num = val;
131      addekid(ep1, ep2);
130    ep2 = newnode();
131    ep2->type = TICK;
132    ep2->v.tick = -1;
133    addekid(ep1, ep2);
134    ep2 = newnode();
135    ep2->type = NUM;
136    addekid(ep1, ep2);
132      dclear(vname);
133      dpush(ep1);
134   }
# Line 159 | Line 154 | char  *name;
154  
155  
156   #ifdef  OUTCHAN
157 < chanout()                       /* set output channels */
157 > chanout(cs)                     /* set output channels */
158 > int  (*cs)();
159   {
160      register EPNODE  *ep;
161  
162      for (ep = outchan; ep != NULL; ep = ep->sibling)
163 <        chanset(ep->v.kid->v.chan, evalue(ep->v.kid->sibling));
163 >        (*cs)(ep->v.kid->v.chan, evalue(ep->v.kid->sibling));
164  
165   }
166   #endif
# Line 370 | Line 366 | loaddefn()                     /* load next definition */
366   #endif
367      {                           /* ordinary definition */
368          ep = getdefn();
369 + #ifdef  REDEFW
370 +        if (dlookup(dname(ep)) != NULL) {
371 +                dclear(dname(ep));
372 +                wputs(dname(ep));
373 +                wputs(": redefined\n");
374 +        }
375 + #else
376          dclear(dname(ep));
377 + #endif
378          dpush(ep);
379      }
380      if (nextc != EOF) {
# Line 426 | Line 430 | getdefn()                      /* A -> SYM = E1 */
430      addekid(ep2, ep1);
431      addekid(ep2, getE1());
432  
433 +    if (
434   #ifdef  FUNCTION
435 <    if (ep1->type == SYM)
435 >            ep1->type == SYM &&
436   #endif
437 <    {
437 >            ep1->sibling->type != NUM) {
438          ep1 = newnode();
439          ep1->type = TICK;
440          ep1->v.tick = -1;
# Line 490 | Line 495 | EPNODE  *d;
495          quit(1);
496      }
497      ep1 = d->v.kid->sibling;                    /* get expression */
498 +    if (ep1->type == NUM)
499 +        return(ep1->v.num);                     /* return if number */
500      ep2 = ep1->sibling;                         /* check time */
501      if (ep2->v.tick < 0 || ep2->v.tick < eclock) {
502          ep2->v.tick = eclock;
503          ep2 = ep2->sibling;
504 <        ep2->v.num = evalue(ep1);               /* compute new value */
504 >        ep2->v.num = evalue(ep1);               /* needs new value */
505      } else
506 <        ep2 = ep2->sibling;                     /* reuse old value */
506 >        ep2 = ep2->sibling;                     /* else reuse old value */
507  
508      return(ep2->v.num);
509   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines