| 18 | 
  | 
 | 
| 19 | 
  | 
#include  "standard.h" | 
| 20 | 
  | 
 | 
| 21 | 
< | 
#define  XNAME          "X_"                    /* x function name */ | 
| 22 | 
< | 
#define  YNAME          "Y_"                    /* y function name */ | 
| 23 | 
< | 
#define  ZNAME          "Z_"                    /* z function name */ | 
| 21 | 
> | 
#define  XNAME          "X`SYS`"                /* x function name */ | 
| 22 | 
> | 
#define  YNAME          "Y`SYS`"                /* y function name */ | 
| 23 | 
> | 
#define  ZNAME          "Z`SYS`"                /* z function name */ | 
| 24 | 
  | 
 | 
| 25 | 
  | 
#define  ABS(x)         ((x)>=0 ? (x) : -(x)) | 
| 26 | 
  | 
 | 
| 51 | 
  | 
        int  i, j, m, n; | 
| 52 | 
  | 
        char  stmp[256]; | 
| 53 | 
  | 
 | 
| 54 | 
< | 
        varset("PI", PI); | 
| 55 | 
< | 
        funset("hermite", 5, l_hermite); | 
| 56 | 
< | 
        funset("bezier", 5, l_bezier); | 
| 57 | 
< | 
        funset("bspline", 5, l_bspline); | 
| 54 | 
> | 
        varset("PI", ':', PI); | 
| 55 | 
> | 
        funset("hermite", 5, ':', l_hermite); | 
| 56 | 
> | 
        funset("bezier", 5, ':', l_bezier); | 
| 57 | 
> | 
        funset("bspline", 5, ':', l_bspline); | 
| 58 | 
  | 
 | 
| 59 | 
  | 
        if (argc < 8) | 
| 60 | 
  | 
                goto userror; | 
| 61 | 
  | 
 | 
| 62 | 
  | 
        for (i = 8; i < argc; i++) | 
| 63 | 
  | 
                if (!strcmp(argv[i], "-e")) | 
| 64 | 
< | 
                        scompile(NULL, argv[++i]); | 
| 64 | 
> | 
                        scompile(argv[++i], NULL, 0); | 
| 65 | 
  | 
                else if (!strcmp(argv[i], "-f")) | 
| 66 | 
  | 
                        fcompile(argv[++i]); | 
| 67 | 
  | 
                else if (!strcmp(argv[i], "-s")) | 
| 72 | 
  | 
        modname = argv[1]; | 
| 73 | 
  | 
        surfname = argv[2]; | 
| 74 | 
  | 
        sprintf(stmp, "%s(s,t)=%s;", XNAME, argv[3]); | 
| 75 | 
< | 
        scompile(NULL, stmp); | 
| 75 | 
> | 
        scompile(stmp, NULL, 0); | 
| 76 | 
  | 
        sprintf(stmp, "%s(s,t)=%s;", YNAME, argv[4]); | 
| 77 | 
< | 
        scompile(NULL, stmp); | 
| 77 | 
> | 
        scompile(stmp, NULL, 0); | 
| 78 | 
  | 
        sprintf(stmp, "%s(s,t)=%s;", ZNAME, argv[5]); | 
| 79 | 
< | 
        scompile(NULL, stmp); | 
| 79 | 
> | 
        scompile(stmp, NULL, 0); | 
| 80 | 
  | 
        m = atoi(argv[6]); | 
| 81 | 
  | 
        n = atoi(argv[7]); | 
| 82 | 
  | 
        if (m <= 0 || n <= 0) | 
| 248 | 
  | 
register POINT  *r0, *r1, *r2; | 
| 249 | 
  | 
int  siz; | 
| 250 | 
  | 
{ | 
| 251 | 
< | 
        FVECT  v1, v2, vc; | 
| 251 | 
> | 
        FVECT  v1, v2; | 
| 252 | 
  | 
        register int  i; | 
| 253 | 
  | 
 | 
| 254 | 
  | 
        if (!smooth)                    /* not needed if no smoothing */ | 
| 255 | 
  | 
                return; | 
| 256 | 
  | 
                                        /* compute middle points */ | 
| 257 | 
  | 
        while (siz-- >= 0) { | 
| 258 | 
< | 
                fvsum(v1, r2[0].p, r1[0].p, -1.0); | 
| 259 | 
< | 
                fvsum(v2, r1[1].p, r1[0].p, -1.0); | 
| 258 | 
> | 
                fvsum(v1, r2[0].p, r0[0].p, -1.0); | 
| 259 | 
> | 
                fvsum(v2, r1[1].p, r1[-1].p, -1.0); | 
| 260 | 
  | 
                fcross(r1[0].n, v1, v2); | 
| 261 | 
– | 
                fvsum(v1, r0[0].p, r1[0].p, -1.0); | 
| 262 | 
– | 
                fcross(vc, v2, v1); | 
| 263 | 
– | 
                fvsum(r1[0].n, r1[0].n, vc, 1.0); | 
| 264 | 
– | 
                fvsum(v2, r1[-1].p, r1[0].p, -1.0); | 
| 265 | 
– | 
                fcross(vc, v1, v2); | 
| 266 | 
– | 
                fvsum(r1[0].n, r1[0].n, vc, 1.0); | 
| 267 | 
– | 
                fvsum(v1, r2[0].p, r1[0].p, -1.0); | 
| 268 | 
– | 
                fcross(vc, v2, v1); | 
| 269 | 
– | 
                fvsum(r1[0].n, r1[0].n, vc, 1.0); | 
| 261 | 
  | 
                normalize(r1[0].n); | 
| 262 | 
  | 
                r0++; r1++; r2++; | 
| 263 | 
  | 
        } | 
| 273 | 
  | 
#define v  ((ax+2)%3) | 
| 274 | 
  | 
 | 
| 275 | 
  | 
        register int  ax; | 
| 276 | 
< | 
        double  eqnmat[4][4]; | 
| 276 | 
> | 
        MAT4  eqnmat; | 
| 277 | 
  | 
        FVECT  v1; | 
| 278 | 
  | 
        register int  i, j; | 
| 279 | 
  | 
 | 
| 327 | 
  | 
 */ | 
| 328 | 
  | 
 | 
| 329 | 
  | 
invmat(inverse,mat) | 
| 330 | 
< | 
double mat[4][4],inverse[4][4]; | 
| 330 | 
> | 
MAT4  inverse, mat; | 
| 331 | 
  | 
{ | 
| 332 | 
  | 
#define SWAP(a,b,t) (t=a,a=b,b=t) | 
| 333 | 
  | 
 | 
| 334 | 
< | 
        double  m4tmp[4][4]; | 
| 334 | 
> | 
        MAT4  m4tmp; | 
| 335 | 
  | 
        register int i,j,k; | 
| 336 | 
  | 
        register double temp; | 
| 337 | 
  | 
 | 
| 338 | 
< | 
        bcopy((char *)mat, (char *)m4tmp, sizeof(m4tmp)); | 
| 338 | 
> | 
        copymat4(m4tmp, mat); | 
| 339 | 
  | 
                                        /* set inverse to identity */ | 
| 340 | 
  | 
        for (i = 0; i < 4; i++) | 
| 341 | 
  | 
                for (j = 0; j < 4; j++) | 
| 342 | 
  | 
                        inverse[i][j] = i==j ? 1.0 : 0.0; | 
| 343 | 
  | 
 | 
| 344 | 
  | 
        for(i = 0; i < 4; i++) { | 
| 345 | 
< | 
                /* Look for raw with largest pivot and swap raws */ | 
| 345 | 
> | 
                /* Look for row with largest pivot and swap rows */ | 
| 346 | 
  | 
                temp = FTINY; j = -1; | 
| 347 | 
  | 
                for(k = i; k < 4; k++) | 
| 348 | 
  | 
                        if(ABS(m4tmp[k][i]) > temp) { | 
| 349 | 
  | 
                                temp = ABS(m4tmp[k][i]); | 
| 350 | 
  | 
                                j = k; | 
| 351 | 
  | 
                                } | 
| 352 | 
< | 
                if(j == -1)     /* No replacing raw -> no inverse */ | 
| 352 | 
> | 
                if(j == -1)     /* No replacing row -> no inverse */ | 
| 353 | 
  | 
                        return(0); | 
| 354 | 
  | 
                if (j != i) | 
| 355 | 
  | 
                        for(k = 0; k < 4; k++) { |