| 16 | 
  | 
 | 
| 17 | 
  | 
 | 
| 18 | 
  | 
typedef struct { | 
| 19 | 
– | 
        double  sca;                    /* scalefactor */ | 
| 19 | 
  | 
        double  xfm[4][4];              /* transform matrix */ | 
| 20 | 
+ | 
        double  sca;                    /* scalefactor */ | 
| 21 | 
  | 
}  XF; | 
| 22 | 
  | 
 | 
| 23 | 
  | 
static OBJREC  *fobj;           /* current function object */ | 
| 25 | 
  | 
static XF  fxf;                 /* current transformation */ | 
| 26 | 
  | 
 | 
| 27 | 
  | 
 | 
| 28 | 
< | 
setmap(m, r, sca, xfm)          /* set channels for function call */ | 
| 28 | 
> | 
setmap(m, r, xfm, sca)          /* set channels for function call */ | 
| 29 | 
  | 
OBJREC  *m; | 
| 30 | 
  | 
register RAY  *r; | 
| 31 | 
– | 
double  sca; | 
| 31 | 
  | 
double  xfm[4][4]; | 
| 32 | 
+ | 
double  sca; | 
| 33 | 
  | 
{ | 
| 34 | 
  | 
        extern double  l_noise3(), l_noise3a(), l_noise3b(), l_noise3c(); | 
| 35 | 
  | 
        extern double  l_hermite(), l_fnoise3(), l_arg(); | 
| 53 | 
  | 
        } | 
| 54 | 
  | 
        fobj = m; | 
| 55 | 
  | 
        fray = r; | 
| 56 | 
< | 
        fxf.sca = r->ros * sca; | 
| 57 | 
< | 
        multmat4(fxf.xfm, r->rox, xfm); | 
| 56 | 
> | 
        fxf.sca = r->robs * sca; | 
| 57 | 
> | 
        multmat4(fxf.xfm, r->robx, xfm); | 
| 58 | 
  | 
        eclock++;               /* notify expression evaluator */ | 
| 59 | 
  | 
} | 
| 60 | 
  | 
 | 
| 63 | 
  | 
register OBJREC  *m; | 
| 64 | 
  | 
RAY  *r; | 
| 65 | 
  | 
{ | 
| 66 | 
< | 
#define  mxf    ((XF *)m->os) | 
| 66 | 
> | 
        register XF  *mxf; | 
| 67 | 
  | 
 | 
| 68 | 
< | 
        if (mxf == NULL) { | 
| 69 | 
< | 
                register int  n = m->oargs.nsargs; | 
| 70 | 
< | 
                register char  **sa = m->oargs.sarg; | 
| 68 | 
> | 
        if ((mxf = (XF *)m->os) == NULL) { | 
| 69 | 
> | 
                register int  n; | 
| 70 | 
> | 
                register char  **sa; | 
| 71 | 
  | 
 | 
| 72 | 
< | 
                while (n > 0 && **sa != '-') { | 
| 73 | 
< | 
                        n--; | 
| 74 | 
< | 
                        sa++; | 
| 75 | 
< | 
                } | 
| 72 | 
> | 
                for (n = m->oargs.nsargs, sa = m->oargs.sarg; | 
| 73 | 
> | 
                                n > 0 && **sa != '-'; n--, sa++) | 
| 74 | 
> | 
                        ; | 
| 75 | 
  | 
                mxf = (XF *)malloc(sizeof(XF)); | 
| 76 | 
  | 
                if (mxf == NULL) | 
| 77 | 
  | 
                        goto memerr; | 
| 81 | 
  | 
                        objerror(m, USER, "bad transform"); | 
| 82 | 
  | 
                if (mxf->sca < 0.0) | 
| 83 | 
  | 
                        mxf->sca = -mxf->sca; | 
| 84 | 
+ | 
                m->os = (char *)mxf; | 
| 85 | 
  | 
        } | 
| 86 | 
< | 
        setmap(m, r, mxf->sca, mxf->xfm); | 
| 86 | 
> | 
        setmap(m, r, mxf->xfm, mxf->sca); | 
| 87 | 
  | 
        return; | 
| 88 | 
  | 
memerr: | 
| 89 | 
  | 
        error(SYSTEM, "out of memory in setfunc"); |