--- ray/src/rt/func.c 1993/05/25 10:30:16 2.9 +++ ray/src/rt/func.c 1995/11/02 17:38:05 2.13 @@ -1,4 +1,4 @@ -/* Copyright (c) 1992 Regents of the University of California */ +/* Copyright (c) 1995 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -18,9 +18,9 @@ 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}, @@ -69,6 +69,7 @@ int dofwd; funset("erf", 1, ':', l_erf); funset("erfc", 1, ':', l_erfc); setnoisefuncs(); + setprismfuncs(); loadfunc(initfile); initfile[0] = '\0'; } @@ -195,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); } @@ -250,9 +251,6 @@ double chanvalue(n) /* return channel n to calcomp */ register int n; { - double sum; - register RAY *r; - if (fray == NULL) syntax("ray parameter used in constant expression"); @@ -280,14 +278,9 @@ register int n; fray->rop[2]*funcxf.xfm[2][n-6] + funcxf.xfm[3][n-6] ); - if (n == 9) { /* total distance */ - sum = fray->rot; - for (r = fray->parent; r != NULL; r = r->parent) - sum += r->rot; - return(sum * funcxf.sca); + if (n == 9) /* total distance */ + return(raydist(fray,PRIMARY) * funcxf.sca); - } - if (n == 10) /* dot product (range [-1,1]) */ return( fray->rod <= -1.0 ? -1.0 : fray->rod >= 1.0 ? 1.0 : @@ -308,13 +301,8 @@ register int n; if (n < 24) /* k unit vector */ return(funcxf.xfm[2][n-21] / funcxf.sca); - if (n == 24) { /* single ray (shadow) distance */ - sum = fray->rot; - for (r = fray->parent; r != NULL && r->crtype&SHADOW; - r = r->parent) - sum += r->rot; - return(sum * funcxf.sca); - } + if (n == 24) /* single ray (shadow) distance */ + return((fray->rot+raydist(fray->parent,SHADOW)) * funcxf.sca); badchan: error(USER, "illegal channel number"); }