--- ray/src/common/caldefn.c 1990/06/26 09:15:08 1.3 +++ ray/src/common/caldefn.c 1990/07/20 08:30:23 1.7 @@ -68,7 +68,7 @@ char *fname; eputs(": cannot open\n"); quit(1); } - initfile(fname, fp); + initfile(fp, fname, 0); while (nextc != EOF) loaddefn(); if (fname != NULL) @@ -76,11 +76,12 @@ char *fname; } -scompile(file, str) /* get definitions from a string */ -char *file; +scompile(str, fn, ln) /* get definitions from a string */ char *str; +char *fn; +int ln; { - initstr(file, str); + initstr(str, fn, ln); while (nextc != EOF) loaddefn(); } @@ -114,7 +115,6 @@ double val; ep2 = ep1->v.kid->sibling; if (ep2->type == NUM) { ep2->v.num = val; - ep2->sibling->v.tick = -1; return; } } @@ -129,13 +129,6 @@ double val; ep2->type = NUM; ep2->v.num = val; addekid(ep1, ep2); - ep2 = newnode(); - ep2->type = TICK; - ep2->v.tick = -1; - addekid(ep1, ep2); - ep2 = newnode(); - ep2->type = NUM; - addekid(ep1, ep2); dclear(vname); dpush(ep1); } @@ -161,12 +154,13 @@ char *name; #ifdef OUTCHAN -chanout() /* set output channels */ +chanout(cs) /* set output channels */ +int (*cs)(); { register EPNODE *ep; for (ep = outchan; ep != NULL; ep = ep->sibling) - chanset(ep->v.kid->v.chan, evalue(ep->v.kid->sibling)); + (*cs)(ep->v.kid->v.chan, evalue(ep->v.kid->sibling)); } #endif @@ -436,10 +430,11 @@ getdefn() /* A -> SYM = E1 */ addekid(ep2, ep1); addekid(ep2, getE1()); + if ( #ifdef FUNCTION - if (ep1->type == SYM) + ep1->type == SYM && #endif - { + ep1->sibling->type != NUM) { ep1 = newnode(); ep1->type = TICK; ep1->v.tick = -1; @@ -500,13 +495,15 @@ EPNODE *d; quit(1); } ep1 = d->v.kid->sibling; /* get expression */ + if (ep1->type == NUM) + return(ep1->v.num); /* return if number */ ep2 = ep1->sibling; /* check time */ if (ep2->v.tick < 0 || ep2->v.tick < eclock) { ep2->v.tick = eclock; ep2 = ep2->sibling; - ep2->v.num = evalue(ep1); /* compute new value */ + ep2->v.num = evalue(ep1); /* needs new value */ } else - ep2 = ep2->sibling; /* reuse old value */ + ep2 = ep2->sibling; /* else reuse old value */ return(ep2->v.num); }