--- ray/src/rt/func.c 1989/02/02 10:41:23 1.1 +++ ray/src/rt/func.c 1989/04/11 13:30:29 1.4 @@ -16,8 +16,8 @@ static char SCCSid[] = "$SunId$ LBL"; typedef struct { - double sca; /* scalefactor */ double xfm[4][4]; /* transform matrix */ + double sca; /* scalefactor */ } XF; static OBJREC *fobj; /* current function object */ @@ -25,11 +25,11 @@ static RAY *fray; /* current function ray */ static XF fxf; /* current transformation */ -setmap(m, r, sca, xfm) /* set channels for function call */ +setmap(m, r, xfm, sca) /* set channels for function call */ OBJREC *m; register RAY *r; -double sca; double xfm[4][4]; +double sca; { extern double l_noise3(), l_noise3a(), l_noise3b(), l_noise3c(); extern double l_hermite(), l_fnoise3(), l_arg(); @@ -53,8 +53,8 @@ double xfm[4][4]; } fobj = m; fray = r; - fxf.sca = r->ros * sca; - multmat4(fxf.xfm, r->rox, xfm); + fxf.sca = r->robs * sca; + multmat4(fxf.xfm, r->robx, xfm); eclock++; /* notify expression evaluator */ } @@ -63,9 +63,9 @@ setfunc(m, r) /* simplified interface to setmap */ register OBJREC *m; RAY *r; { -#define mxf ((XF *)m->os) + register XF *mxf; - if (mxf == NULL) { + if ((mxf = (XF *)m->os) == NULL) { register int n = m->oargs.nsargs; register char **sa = m->oargs.sarg; @@ -82,8 +82,9 @@ RAY *r; objerror(m, USER, "bad transform"); if (mxf->sca < 0.0) mxf->sca = -mxf->sca; + m->os = (char *)mxf; } - setmap(m, r, mxf->sca, mxf->xfm); + setmap(m, r, mxf->xfm, mxf->sca); return; memerr: error(SYSTEM, "out of memory in setfunc");