--- ray/src/rt/func.c 1992/03/03 13:58:12 2.6 +++ ray/src/rt/func.c 1994/04/14 04:50:29 2.12 @@ -18,15 +18,15 @@ static char SCCSid[] = "$SunId$ LBL"; #define INITFILE "rayinit.cal" -#define REFVNAME "`FILE_REFCNT" #define CALSUF ".cal" #define LCALSUF 4 +char REFVNAME[] = "`FILE_REFCNT"; XF unitxf = { /* identity transform */ - 1.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 1.0, + {{1.0, 0.0, 0.0, 0.0}, + {0.0, 1.0, 0.0, 0.0}, + {0.0, 0.0, 1.0, 0.0}, + {0.0, 0.0, 0.0, 1.0}}, 1.0 }; @@ -54,6 +54,7 @@ int dofwd; /* check to see if done already */ if ((f = (MFUNC *)m->os) != NULL) return(f); + fobj = NULL; fray = NULL; if (initfile[0]) { /* initialize on first call */ setcontext(""); scompile("Dx=$1;Dy=$2;Dz=$3;", NULL, 0); @@ -68,6 +69,7 @@ int dofwd; funset("erf", 1, ':', l_erf); funset("erfc", 1, ':', l_erfc); setnoisefuncs(); + setprismfuncs(); loadfunc(initfile); initfile[0] = '\0'; } @@ -165,7 +167,7 @@ setfunc(m, r) /* set channels for function call */ OBJREC *m; register RAY *r; { - static long lastrno = -1; + static unsigned long lastrno = ~0; register MFUNC *f; /* get function */ if ((f = (MFUNC *)m->os) == NULL) @@ -194,10 +196,10 @@ register RAY *r; loadfunc(fname) /* load definition file */ char *fname; { - extern char *libpath; /* library search path */ + extern char *getlibpath(); /* library search path */ char *ffname; - if ((ffname = getpath(fname, libpath, R_OK)) == NULL) { + if ((ffname = getpath(fname, getlibpath(), R_OK)) == NULL) { sprintf(errmsg, "cannot find function file \"%s\"", fname); error(USER, errmsg); } @@ -211,6 +213,9 @@ l_arg() /* return nth real argument */ extern double argument(); register int n; + if (fobj == NULL) + syntax("arg(n) used in constant expression"); + n = argument(1) + .5; /* round to integer */ if (n < 1) @@ -248,6 +253,9 @@ register int n; { double sum; register RAY *r; + + if (fray == NULL) + syntax("ray parameter used in constant expression"); if (--n < 0) goto badchan;