ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/mx_data.c
(Generate patch)

Comparing ray/src/rt/mx_data.c (file contents):
Revision 1.1 by greg, Thu Feb 2 10:41:28 1989 UTC vs.
Revision 2.4 by gwlarson, Mon Aug 10 18:35:14 1998 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines