--- ray/src/rt/data.c 1993/02/08 13:12:28 2.7 +++ ray/src/rt/data.c 1995/06/30 16:07:44 2.10 @@ -34,10 +34,8 @@ static char SCCSid[] = "$SunId$ LBL"; #define hash(s) (shash(s)%TABSIZ) -extern char *fgetword(); +extern char *getlibpath(); /* library search path */ -extern char *libpath; /* library search path */ - static DATARRAY *dtab[TABSIZ]; /* data array list */ static DATARRAY *ptab[TABSIZ]; /* picture list */ @@ -47,7 +45,6 @@ DATARRAY * getdata(dname) /* get data array dname */ char *dname; { - char word[64]; char *dfname; FILE *fp; int asize; @@ -78,7 +75,7 @@ char *dname; * 0 0 ni p0i p1i .. pni */ - if ((dfname = getpath(dname, libpath, R_OK)) == NULL) { + if ((dfname = getpath(dname, getlibpath(), R_OK)) == NULL) { sprintf(errmsg, "cannot find data file \"%s\"", dname); error(USER, errmsg); } @@ -92,24 +89,20 @@ char *dname; error(SYSTEM, errmsg); } /* get dimensions */ - if (fgetword(word, sizeof(word), fp) == NULL || !isint(word)) + if (fgetval(fp, 'i', &dp->nd) <= 0) goto scanerr; - dp->nd = atoi(word); if (dp->nd <= 0 || dp->nd > MAXDDIM) { sprintf(errmsg, "bad number of dimensions for \"%s\"", dname); error(USER, errmsg); } asize = 1; for (i = 0; i < dp->nd; i++) { - if (fgetword(word, sizeof(word), fp) == NULL || !isflt(word)) + if (fgetval(fp, 'd', &dp->dim[i].org) <= 0) goto scanerr; - dp->dim[i].org = atof(word); - if (fgetword(word, sizeof(word), fp) == NULL || !isflt(word)) + if (fgetval(fp, 'd', &dp->dim[i].siz) <= 0) goto scanerr; - dp->dim[i].siz = atof(word); - if (fgetword(word, sizeof(word), fp) == NULL || !isint(word)) + if (fgetval(fp, 'i', &dp->dim[i].ne) <= 0) goto scanerr; - dp->dim[i].ne = atoi(word); if (dp->dim[i].ne < 2) goto scanerr; asize *= dp->dim[i].ne; @@ -117,12 +110,9 @@ char *dname; dp->dim[i].p = (double *)malloc(dp->dim[i].ne*sizeof(double)); if (dp->dim[i].p == NULL) goto memerr; - for (j = 0; j < dp->dim[i].ne; j++) { - if (fgetword(word, sizeof(word), fp) == NULL || - !isflt(word)) + for (j = 0; j < dp->dim[i].ne; j++) + if (fgetval(fp, 'd', &dp->dim[i].p[i]) <= 0) goto scanerr; - dp->dim[i].p[j] = atof(word); - } for (j = 1; j < dp->dim[i].ne-1; j++) if ((dp->dim[i].p[j-1] < dp->dim[i].p[j]) != (dp->dim[i].p[j] < dp->dim[i].p[j+1])) @@ -136,11 +126,9 @@ char *dname; if ((dp->arr = (DATATYPE *)malloc(asize*sizeof(DATATYPE))) == NULL) goto memerr; - for (i = 0; i < asize; i++) { - if (fgetword(word, sizeof(word), fp) == NULL || !isflt(word)) + for (i = 0; i < asize; i++) + if (fgetval(fp, DATATY, &dp->arr[i]) <= 0) goto scanerr; - dp->arr[i] = atof(word); - } fclose(fp); i = hash(dname); dp->next = dtab[i]; @@ -169,7 +157,6 @@ DATARRAY * getpict(pname) /* get picture pname */ char *pname; { - extern char *libpath; double inpaspect; char *pfname; FILE *fp; @@ -185,7 +172,7 @@ char *pname; if (!strcmp(pname, pp->name)) return(pp); /* found! */ - if ((pfname = getpath(pname, libpath, R_OK)) == NULL) { + if ((pfname = getpath(pname, getlibpath(), R_OK)) == NULL) { sprintf(errmsg, "cannot find picture file \"%s\"", pname); error(USER, errmsg); } @@ -342,7 +329,7 @@ double *pt; int asize; int lower, upper; register int i; - double x, y, y0, y1; + double x, y0, y1; /* set up dimensions for recursion */ sd.nd = dp->nd - 1; asize = 1; @@ -355,7 +342,7 @@ double *pt; /* get independent variable */ if (dp->dim[0].p == NULL) { /* evenly spaced points */ x = (pt[0] - dp->dim[0].org)/dp->dim[0].siz; - x = x * (dp->dim[0].ne - 1); + x *= (double)(dp->dim[0].ne - 1); i = x; if (i < 0) i = 0; @@ -396,11 +383,10 @@ double *pt; * taper off harmonically to zero. */ if (x > i+2) - y = (2*y1-y0)/(x-i-1); - else if (x < i-1) - y = (2*y0-y1)/(i-x); - else - y = y0*((i+1)-x) + y1*(x-i); + return( (2*y1-y0)/(x-(i-1)) ); - return(y); + if (x < i-1) + return( (2*y0-y1)/(i-x) ); + + return( y0*((i+1)-x) + y1*(x-i) ); }