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.2 by greg, Wed Jan 17 15:45:16 1996 UTC vs.
Revision 2.8 by gwlarson, Thu Jul 9 10:47:59 1998 UTC

# Line 18 | Line 18 | static char SCCSid[] = "$SunId$ LBL";
18   extern char  *malloc(), *realloc();
19   #endif
20  
21 + extern char  *fgetline();
22  
23 +
24   loadvars(rfname)                /* load variables into vv from file */
25   char    *rfname;
26   {
# Line 30 | Line 32 | char   *rfname;
32                  fp = stdin;
33          else if ((fp = fopen(rfname, "r")) == NULL) {
34                  perror(rfname);
35 <                exit(1);
35 >                quit(1);
36          }
37          while (fgetline(buf, sizeof(buf), fp) != NULL) {
38                  for (cp = buf; *cp; cp++) {
# Line 46 | Line 48 | char   *rfname;
48                          }
49                          break;
50                  }
51 <                setvariable(buf);
51 >                if (setvariable(buf, matchvar) < 0) {
52 >                        fprintf(stderr, "%s: unknown variable: %s\n",
53 >                                        rfname, buf);
54 >                        quit(1);
55 >                }
56          }
57          fclose(fp);
58   }
59  
60  
61 < setvariable(ass)                /* assign variable according to string */
61 > int
62 > setvariable(ass, mv)            /* assign variable according to string */
63   register char   *ass;
64 + VARIABLE        *(*mv)();
65   {
66          char    varname[32];
67          int     n;
# Line 69 | Line 77 | register char  *ass;
77                  *cp++ = *ass++;
78          *cp = '\0';
79          if (!varname[0])
80 <                return;         /* no variable name! */
80 >                return(0);      /* no variable name! */
81                                          /* trim value */
82          while (isspace(*ass) || *ass == '=')
83                  ass++;
84          for (n = strlen(ass); n > 0; n--)
85                  if (!isspace(ass[n-1]))
86                          break;
87 <        if (!n && !nowarn) {
88 <                fprintf(stderr, "%s: warning - missing value for variable '%s'\n",
81 <                                progname, varname);
82 <                return;
83 <        }
87 >        if (!n)
88 >                return(0);      /* no assignment */
89                                          /* match variable from list */
90 <        vp = matchvar(varname);
91 <        if (vp == NULL) {
92 <                fprintf(stderr, "%s: unknown variable '%s'\n",
88 <                                progname, varname);
89 <                exit(1);
90 <        }
90 >        vp = (*mv)(varname);
91 >        if (vp == NULL)
92 >                return(-1);
93                                          /* assign new value */
94          if (i = vp->nass) {
95                  cp = vp->value;
# Line 100 | Line 102 | register char  *ass;
102                  vp->value = malloc(n+1);
103          if (vp->value == NULL) {
104                  perror(progname);
105 <                exit(1);
105 >                quit(1);
106          }
107          cp = vp->value+i;               /* copy value, squeezing spaces */
108          *cp = *ass;
# Line 114 | Line 116 | register char  *ass;
116          }
117          if (isspace(*cp))               /* remove trailing space */
118                  *cp = '\0';
119 <        vp->nass++;
119 >        return(++vp->nass);
120   }
121  
122  
# Line 217 | Line 219 | register VARIABLE      *vp;
219          }
220          fprintf(stderr, "%s: illegal value for boolean variable '%s'\n",
221                          progname, vp->name);
222 <        exit(1);
222 >        quit(1);
223   }
224  
225  
# Line 239 | Line 241 | register VARIABLE      *vp;
241          }
242          fprintf(stderr, "%s: illegal value for qualitative variable '%s'\n",
243                          progname, vp->name);
244 <        exit(1);
244 >        quit(1);
245   }
246  
247  
# Line 251 | Line 253 | register VARIABLE      *vp;
253          if (isint(vp->value)) return;
254          fprintf(stderr, "%s: illegal value for integer variable '%s'\n",
255                          progname, vp->name);
256 <        exit(1);
256 >        quit(1);
257   }
258  
259  
# Line 263 | Line 265 | register VARIABLE      *vp;
265          if (isflt(vp->value)) return;
266          fprintf(stderr, "%s: illegal value for real variable '%s'\n",
267                          progname, vp->name);
268 <        exit(1);
268 >        quit(1);
269   }
270  
271  
# Line 277 | Line 279 | register FILE  *fp;
279              for (j = 0; j < vdef(i); j++) {     /* print each assignment */
280                  fputs(vnam(i), fp);
281                  fputs("= ", fp);
282 <                k = clipline = ( vv[i].fixval == catvalues ? 64 : 320 )
282 >                k = clipline = ( vv[i].fixval == catvalues ? 64 : 236 )
283                                  - strlen(vnam(i)) ;
284                  cp = nvalue(i, j);
285                  while (*cp) {
286                      putc(*cp++, fp);
287                      if (--k <= 0) {             /* line too long */
288                          while (*cp && !isspace(*cp))
289 <                            putc(*cp++, fp);    /* finish this word */
289 >                            fputc(*cp++, fp);   /* finish this word */
290                          if (*cp) {              /* start new line */
291 <                            putc('\n', fp);
292 <                            fputs(vnam(i), fp);
293 <                            putc('=', fp);
291 >                            if (vv[i].fixval == catvalues) {
292 >                                fputc('\n', fp);
293 >                                fputs(vnam(i), fp);
294 >                                fputc('=', fp);
295 >                            } else
296 >                                fputs(" \\\n", fp);
297                              k = clipline;
298                          }
299                      }
300                  }
301 <                putc('\n', fp);
301 >                fputc('\n', fp);
302              }
303          fflush(fp);
304   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines