1 |
< |
/* Copyright (c) 1988 Regents of the University of California */ |
1 |
> |
/* Copyright (c) 1991 Regents of the University of California */ |
2 |
|
|
3 |
|
#ifndef lint |
4 |
|
static char SCCSid[] = "$SunId$ LBL"; |
14 |
|
|
15 |
|
#include "data.h" |
16 |
|
|
17 |
+ |
#include "func.h" |
18 |
+ |
|
19 |
|
/* |
20 |
|
* A stored mixture is specified: |
21 |
|
* |
39 |
|
register OBJREC *m; |
40 |
|
RAY *r; |
41 |
|
{ |
40 |
– |
extern double varvalue(), funvalue(), datavalue(); |
41 |
– |
extern int errno; |
42 |
– |
register int i; |
42 |
|
double coef; |
43 |
|
double pt[MAXDIM]; |
44 |
|
DATARRAY *dp; |
45 |
|
OBJECT mod[2]; |
46 |
< |
register char **sa; |
46 |
> |
register MFUNC *mf; |
47 |
> |
register int i; |
48 |
|
|
49 |
– |
setfunc(m, r); |
50 |
– |
|
51 |
– |
sa = m->oargs.sarg; |
52 |
– |
|
49 |
|
if (m->oargs.nsargs < 6) |
50 |
|
objerror(m, USER, "bad # arguments"); |
51 |
|
for (i = 0; i < 2; i++) |
52 |
< |
if (!strcmp(sa[i], VOIDID)) |
52 |
> |
if (!strcmp(m->oargs.sarg[i], VOIDID)) |
53 |
|
mod[i] = OVOID; |
54 |
< |
else if ((mod[i] = modifier(sa[i])) == OVOID) { |
55 |
< |
sprintf(errmsg, "undefined modifier \"%s\"", sa[i]); |
54 |
> |
else if ((mod[i] = modifier(m->oargs.sarg[i])) == OVOID) { |
55 |
> |
sprintf(errmsg, "undefined modifier \"%s\"", |
56 |
> |
m->oargs.sarg[i]); |
57 |
|
objerror(m, USER, errmsg); |
58 |
|
} |
59 |
< |
funcfile(sa[4]); |
60 |
< |
for (i = 0; i+5 < m->oargs.nsargs && |
61 |
< |
sa[i+5][0] != '-'; i++) { |
62 |
< |
if (i >= MAXDIM) |
63 |
< |
objerror(m, USER, "dimension error"); |
64 |
< |
errno = 0; |
65 |
< |
pt[i] = varvalue(sa[i+5]); |
59 |
> |
dp = getdata(m->oargs.sarg[3]); |
60 |
> |
i = (1 << dp->nd) - 1; |
61 |
> |
mf = getfunc(m, 4, i<<5, 0); |
62 |
> |
setfunc(m, r); |
63 |
> |
errno = 0; |
64 |
> |
for (i = 0; i < dp->nd; i++) { |
65 |
> |
pt[i] = evalue(mf->ep[i]); |
66 |
|
if (errno) |
67 |
|
goto computerr; |
68 |
|
} |
72 |
– |
dp = getdata(sa[3]); |
73 |
– |
if (dp->nd != i) |
74 |
– |
objerror(m, USER, "dimension error"); |
69 |
|
coef = datavalue(dp, pt); |
70 |
|
errno = 0; |
71 |
< |
coef = funvalue(sa[2], 1, &coef); |
71 |
> |
coef = funvalue(m->oargs.sarg[2], 1, &coef); |
72 |
|
if (errno) |
73 |
|
goto computerr; |
74 |
|
raymixture(r, mod[0], mod[1], coef); |
75 |
|
return; |
82 |
– |
|
76 |
|
computerr: |
77 |
|
objerror(m, WARNING, "compute error"); |
78 |
|
} |