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

Comparing ray/src/rt/data.c (file contents):
Revision 1.6 by greg, Fri Apr 6 14:12:21 1990 UTC vs.
Revision 1.10 by greg, Mon Jul 22 13:02:24 1991 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1986 Regents of the University of California */
1 > /* Copyright (c) 1991 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 17 | Line 17 | static char SCCSid[] = "$SunId$ LBL";
17   #include  "data.h"
18  
19  
20 + extern char  *fgetword();
21 + extern double  atof();
22 +
23   extern char  *libpath;                  /* library search path */
24  
25   static DATARRAY  *dlist = NULL;         /* data array list */
# Line 28 | Line 31 | DATARRAY *
31   getdata(dname)                          /* get data array dname */
32   char  *dname;
33   {
34 +        char  word[64];
35          char  *dfname;
36          FILE  *fp;
37          int  asize;
# Line 72 | Line 76 | char  *dname;
76                  error(SYSTEM, errmsg);
77          }
78                                                          /* get dimensions */
79 <        if (fscanf(fp, "%d", &dp->nd) != 1)
79 >        if (fgetword(word, sizeof(word), fp) == NULL || !isint(word))
80                  goto scanerr;
81 <        if (dp->nd <= 0 || dp->nd > MAXDIM) {
81 >        dp->nd = atoi(word);
82 >        if (dp->nd <= 0 || dp->nd > MAXDDIM) {
83                  sprintf(errmsg, "bad number of dimensions for \"%s\"", dname);
84                  error(USER, errmsg);
85          }
86          asize = 1;
87          for (i = 0; i < dp->nd; i++) {
88 <                if (fscanf(fp, "%lf %lf %d",
84 <                                &dp->dim[i].org, &dp->dim[i].siz,
85 <                                &dp->dim[i].ne) != 3)
88 >                if (fgetword(word, sizeof(word), fp) == NULL || !isflt(word))
89                          goto scanerr;
90 +                dp->dim[i].org = atof(word);
91 +                if (fgetword(word, sizeof(word), fp) == NULL || !isflt(word))
92 +                        goto scanerr;
93 +                dp->dim[i].siz = atof(word);
94 +                if (fgetword(word, sizeof(word), fp) == NULL || !isint(word))
95 +                        goto scanerr;
96 +                dp->dim[i].ne = atoi(word);
97                  if (dp->dim[i].ne < 2)
98                          goto scanerr;
99                  asize *= dp->dim[i].ne;
# Line 91 | Line 101 | char  *dname;
101                          dp->dim[i].p = (double *)malloc(dp->dim[i].ne*sizeof(double));
102                          if (dp->dim[i].p == NULL)
103                                  goto memerr;
104 <                        for (j = 0; j < dp->dim[i].ne; j++)
105 <                                if (fscanf(fp, "%lf", &dp->dim[i].p[j]) != 1)
104 >                        for (j = 0; j < dp->dim[i].ne; j++) {
105 >                                if (fgetword(word, sizeof(word), fp) == NULL ||
106 >                                                !isflt(word))
107                                          goto scanerr;
108 +                                dp->dim[i].p[j] = atof(word);
109 +                        }
110                          for (j = 1; j < dp->dim[i].ne-1; j++)
111                                  if ((dp->dim[i].p[j-1] < dp->dim[i].p[j]) !=
112                                          (dp->dim[i].p[j] < dp->dim[i].p[j+1]))
# Line 107 | Line 120 | char  *dname;
120          if ((dp->arr = (DATATYPE *)malloc(asize*sizeof(DATATYPE))) == NULL)
121                  goto memerr;
122          
123 <        for (i = 0; i < asize; i++)
124 <                if (fscanf(fp, DSCANF, &dp->arr[i]) != 1)
123 >        for (i = 0; i < asize; i++) {
124 >                if (fgetword(word, sizeof(word), fp) == NULL || !isflt(word))
125                          goto scanerr;
126 <        
126 >                dp->arr[i] = atof(word);
127 >        }
128          fclose(fp);
129          dp->next = dlist;
130          return(dlist = dp);
# Line 174 | Line 188 | char  *pname;
188                  goto readerr;
189          for (i = 0; i < 3; i++) {
190                  pp[i].nd = 2;
191 <                pp[i].dim[0].ne = width;
192 <                pp[i].dim[1].ne = height;
191 >                pp[i].dim[0].ne = height;
192 >                pp[i].dim[1].ne = width;
193                  pp[i].dim[0].org =
194                  pp[i].dim[1].org = 0.0;
195                  if (width <= height*inpaspect) {
196 <                        pp[i].dim[0].siz = 1.0;
183 <                        pp[i].dim[1].siz = inpaspect*(double)height/width;
184 <                } else {
185 <                        pp[i].dim[0].siz = (double)width/height/inpaspect;
196 >                        pp[i].dim[0].siz = inpaspect*(double)height/width;
197                          pp[i].dim[1].siz = 1.0;
198 +                } else {
199 +                        pp[i].dim[0].siz = 1.0;
200 +                        pp[i].dim[1].siz = (double)width/height/inpaspect;
201                  }
202 +                pp[i].dim[0].p = pp[i].dim[1].p = NULL;
203                  pp[i].arr = (DATATYPE *)malloc(width*height*sizeof(DATATYPE));
204                  if (pp[i].arr == NULL)
205                          goto memerr;
# Line 197 | Line 212 | char  *pname;
212                          goto readerr;
213                  for (x = 0; x < width; x++)
214                          for (i = 0; i < 3; i++)
215 <                                pp[i].arr[x*height+y] = colval(scanin[x],i);
215 >                                pp[i].arr[y*width+x] = colval(scanin[x],i);
216          }
217          free((char *)scanin);
218          fclose(fp);
# Line 298 | Line 313 | double  *pt;
313                          i = (lower + upper) >> 1;
314                          if (pt[0] >= dp->dim[0].p[i])
315                                  lower = i;
316 <                        else if (pt[0] < dp->dim[0].p[i])
316 >                        else
317                                  upper = i;
318                  } while (i != (lower + upper) >> 1);
319 <                if (i < 0)
305 <                        i = 0;
306 <                else if (i > dp->dim[0].ne - 2)
319 >                if (i > dp->dim[0].ne - 2)
320                          i = dp->dim[0].ne - 2;
321                  x = i + (pt[0] - dp->dim[0].p[i]) /
322                                  (dp->dim[0].p[i+1] - dp->dim[0].p[i]);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines