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

Comparing ray/src/common/loadvars.c (file contents):
Revision 2.13 by schorsch, Sun Jul 27 22:12:01 2003 UTC vs.
Revision 2.21 by greg, Sat Jun 10 20:20:51 2023 UTC

# Line 20 | Line 20 | extern char  *fgetline();
20  
21  
22   void
23 < loadvars(rfname)                /* load variables into vv from file */
24 < char    *rfname;
23 > loadvars(                       /* load variables into vv from file */
24 >        const char      *rfname
25 > )
26   {
27          FILE    *fp;
28          char    buf[512];
29 <        register char   *cp;
29 >        char    *cp;
30  
31          if (rfname == NULL)
32                  fp = stdin;
# Line 53 | Line 54 | char   *rfname;
54                          quit(1);
55                  }
56          }
57 <        fclose(fp);
57 >        if (fp != stdin)
58 >                fclose(fp);
59   }
60  
61  
62   int
63 < setvariable(ass, mv)            /* assign variable according to string */
64 < register char   *ass;
65 < VARIABLE        *(*mv)();
63 > setvariable(                    /* assign variable according to string */
64 >        const char      *ass,
65 >        VARIABLE        *(*mv)(const char*)
66 > )
67   {
68 +        int     quote = '\0';
69          char    varname[32];
70          int     n;
71 <        register char   *cp;
72 <        register VARIABLE       *vp;
73 <        register int    i;
71 >        char    *cp;
72 >        VARIABLE        *vp;
73 >        int     i;
74  
75          while (isspace(*ass))           /* skip leading space */
76                  ass++;
# Line 103 | Line 107 | VARIABLE       *(*mv)();
107                  perror(progname);
108                  quit(1);
109          }
110 <        cp = vp->value+i;               /* copy value, squeezing spaces */
110 >        cp = vp->value+i;               /* copy value */
111          *cp = *ass;
112          for (i = 1; i <= n; i++) {
113                  if (ass[i] == NOCHAR)
114                          continue;
115 <                if (isspace(*cp))
116 <                        while (isspace(ass[i]))
117 <                                i++;
115 >                if (quote) {            /* don't change quoted parts */
116 >                        quote *= (ass[i] != quote);
117 >                } else {                /* otherwise, squeeze spaces */
118 >                        if (isspace(*cp))
119 >                                while (isspace(ass[i])|(ass[i]==NOCHAR))
120 >                                        i++;
121 >                        if ((ass[i] == '"') | (ass[i] == '\''))
122 >                                quote = ass[i];
123 >                }
124                  *++cp = ass[i];
125          }
126          if (isspace(*cp))               /* remove trailing space */
# Line 120 | Line 130 | VARIABLE       *(*mv)();
130  
131  
132   VARIABLE *
133 < matchvar(nam)                   /* match a variable by its name */
134 < char    *nam;
133 > matchvar(                       /* match a variable by its name */
134 >        const char      *nam
135 > )
136   {
137          int     n = strlen(nam);
138 <        register int    i;
138 >        int     i;
139  
140          for (i = 0; i < NVARS; i++)
141                  if (n >= vv[i].nick && !strncmp(nam, vv[i].name, n))
# Line 134 | Line 145 | char   *nam;
145  
146  
147   char *
148 < nvalue(vn, n)                   /* return nth variable value */
149 < register int    vn;
150 < register int    n;
148 > nvalue(                         /* return nth variable value */
149 >        int     vn,
150 >        int     n
151 > )
152   {
153 <        register char   *cp;
153 >        char    *cp;
154  
155          if ((vval(vn) == NULL) | (n < 0) | (n >= vdef(vn)))
156                  return(NULL);
# Line 151 | Line 163 | register int   n;
163  
164  
165   void
166 < checkvalues()                   /* check assignments */
166 > checkvalues(void)               /* check assignments */
167   {
168 <        register int    i;
168 >        int     i;
169  
170          for (i = 0; i < NVARS; i++)
171                  if (vv[i].fixval != NULL)
# Line 162 | Line 174 | checkvalues()                  /* check assignments */
174  
175  
176   void
177 < onevalue(vp)                    /* only one assignment for this variable */
178 < register VARIABLE       *vp;
177 > onevalue(                       /* only one assignment for this variable */
178 >        VARIABLE        *vp
179 > )
180   {
181          if (vp->nass < 2)
182                  return;
# Line 178 | Line 191 | register VARIABLE      *vp;
191  
192  
193   void
194 < catvalues(vp)                   /* concatenate variable values */
195 < register VARIABLE       *vp;
194 > catvalues(                      /* concatenate variable values */
195 >        VARIABLE        *vp
196 > )
197   {
198 <        register char   *cp;
198 >        char    *cp;
199  
200          if (vp->nass < 2)
201                  return;
# Line 194 | Line 208 | register VARIABLE      *vp;
208  
209  
210   int
211 < badmatch(tv, cv)                /* case insensitive truncated comparison */
212 < register char   *tv, *cv;
211 > badmatch(                       /* case insensitive truncated comparison */
212 >        char    *tv,
213 >        char    *cv
214 > )
215   {
216          if (!*tv) return(1);            /* null string cannot match */
217          do
# Line 207 | Line 223 | register char  *tv, *cv;
223  
224  
225   void
226 < boolvalue(vp)                   /* check boolean for legal values */
227 < register VARIABLE       *vp;
226 > boolvalue(                      /* check boolean for legal values */
227 >        VARIABLE        *vp
228 > )
229   {
230          if (!vp->nass) return;
231          onevalue(vp);
# Line 227 | Line 244 | register VARIABLE      *vp;
244  
245  
246   void
247 < qualvalue(vp)                   /* check qualitative var. for legal values */
248 < register VARIABLE       *vp;
247 > qualvalue(                      /* check qualitative var. for legal values */
248 >        VARIABLE        *vp
249 > )
250   {
251          if (!vp->nass) return;
252          onevalue(vp);
# Line 248 | Line 266 | register VARIABLE      *vp;
266          quit(1);
267   }
268  
269 + void
270 + strvalue(                               /* check for single (quoted) string value */
271 +        VARIABLE        *vp
272 + )
273 + {
274 +        if (!vp->nass) return;
275 +        onevalue(vp);
276 +        if ((vp->value[0] == '"') | (vp->value[0] == '\'')) {
277 +                char    *cp = vp->value + strlen(vp->value+1);
278 +                if ((cp != vp->value) & (*cp == vp->value[0])) {
279 +                        vp->value++;    /* elide quotation marks */
280 +                        *cp = '\0';
281 +                }
282 +        }
283 + }
284  
285 +
286   void
287 < intvalue(vp)                    /* check integer variable for legal values */
288 < register VARIABLE       *vp;
287 > intvalue(                               /* check integer variable for legal values */
288 >        VARIABLE        *vp
289 > )
290   {
291          if (!vp->nass) return;
292          onevalue(vp);
# Line 263 | Line 298 | register VARIABLE      *vp;
298  
299  
300   void
301 < fltvalue(vp)                    /* check float variable for legal values */
302 < register VARIABLE       *vp;
301 > fltvalue(                               /* check float variable for legal values */
302 >        VARIABLE        *vp
303 > )
304   {
305          if (!vp->nass) return;
306          onevalue(vp);
# Line 276 | Line 312 | register VARIABLE      *vp;
312  
313  
314   void
315 < printvars(fp)                   /* print variable values */
316 < register FILE   *fp;
315 > printvars(                              /* print variable values */
316 >        FILE    *fp
317 > )
318   {
319          int     i, j, k, clipline;
320 <        register char   *cp;
320 >        char    *cp;
321  
322          for (i = 0; i < NVARS; i++)             /* print each variable */
323              for (j = 0; j < vdef(i); j++) {     /* print each assignment */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines