| 1 |
< |
/* Copyright (c) 1992 Regents of the University of California */ |
| 1 |
> |
/* Copyright (c) 1995 Regents of the University of California */ |
| 2 |
|
|
| 3 |
|
#ifndef lint |
| 4 |
|
static char SCCSid[] = "$SunId$ LBL"; |
| 69 |
|
funset("erf", 1, ':', l_erf); |
| 70 |
|
funset("erfc", 1, ':', l_erfc); |
| 71 |
|
setnoisefuncs(); |
| 72 |
+ |
setprismfuncs(); |
| 73 |
|
loadfunc(initfile); |
| 74 |
|
initfile[0] = '\0'; |
| 75 |
|
} |
| 196 |
|
loadfunc(fname) /* load definition file */ |
| 197 |
|
char *fname; |
| 198 |
|
{ |
| 199 |
< |
extern char *libpath; /* library search path */ |
| 199 |
> |
extern char *getlibpath(); /* library search path */ |
| 200 |
|
char *ffname; |
| 201 |
|
|
| 202 |
< |
if ((ffname = getpath(fname, libpath, R_OK)) == NULL) { |
| 202 |
> |
if ((ffname = getpath(fname, getlibpath(), R_OK)) == NULL) { |
| 203 |
|
sprintf(errmsg, "cannot find function file \"%s\"", fname); |
| 204 |
|
error(USER, errmsg); |
| 205 |
|
} |
| 251 |
|
chanvalue(n) /* return channel n to calcomp */ |
| 252 |
|
register int n; |
| 253 |
|
{ |
| 253 |
– |
double sum; |
| 254 |
– |
register RAY *r; |
| 255 |
– |
|
| 254 |
|
if (fray == NULL) |
| 255 |
|
syntax("ray parameter used in constant expression"); |
| 256 |
|
|
| 278 |
|
fray->rop[2]*funcxf.xfm[2][n-6] + |
| 279 |
|
funcxf.xfm[3][n-6] ); |
| 280 |
|
|
| 281 |
< |
if (n == 9) { /* total distance */ |
| 282 |
< |
sum = fray->rot; |
| 285 |
< |
for (r = fray->parent; r != NULL; r = r->parent) |
| 286 |
< |
sum += r->rot; |
| 287 |
< |
return(sum * funcxf.sca); |
| 281 |
> |
if (n == 9) /* total distance */ |
| 282 |
> |
return(raydist(fray,PRIMARY) * funcxf.sca); |
| 283 |
|
|
| 289 |
– |
} |
| 290 |
– |
|
| 284 |
|
if (n == 10) /* dot product (range [-1,1]) */ |
| 285 |
|
return( fray->rod <= -1.0 ? -1.0 : |
| 286 |
|
fray->rod >= 1.0 ? 1.0 : |
| 301 |
|
if (n < 24) /* k unit vector */ |
| 302 |
|
return(funcxf.xfm[2][n-21] / funcxf.sca); |
| 303 |
|
|
| 304 |
< |
if (n == 24) { /* single ray (shadow) distance */ |
| 305 |
< |
sum = fray->rot; |
| 313 |
< |
for (r = fray->parent; r != NULL && r->crtype&SHADOW; |
| 314 |
< |
r = r->parent) |
| 315 |
< |
sum += r->rot; |
| 316 |
< |
return(sum * funcxf.sca); |
| 317 |
< |
} |
| 304 |
> |
if (n == 24) /* single ray (shadow) distance */ |
| 305 |
> |
return((fray->rot+raydist(fray->parent,SHADOW)) * funcxf.sca); |
| 306 |
|
badchan: |
| 307 |
|
error(USER, "illegal channel number"); |
| 308 |
|
} |