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

Comparing ray/src/ot/readobj2.c (file contents):
Revision 1.3 by greg, Wed Jul 17 13:56:02 1991 UTC vs.
Revision 2.1 by greg, Tue Nov 12 17:01:03 1991 UTC

# Line 16 | Line 16 | static char SCCSid[] = "$SunId$ LBL";
16  
17   #include  <ctype.h>
18  
19 + extern char  *fgetword();
20 +
21   OBJREC  *objblock[MAXOBJBLK];           /* our objects */
22   OBJECT  nobjects = 0;                   /* # of objects */
23   int newobject() {return(0);}
# Line 72 | Line 74 | int  (*f)();
74          char  sbuf[MAXSTR];
75          OBJREC  thisobj;
76                                          /* get modifier */
77 <        fscanf(fp, "%*s");
77 >        fgetword(sbuf, MAXSTR, fp);
78          thisobj.omod = OVOID;
79                                          /* get type */
80 <        fscanf(fp, "%s", sbuf);
80 >        fgetword(sbuf, MAXSTR, fp);
81          if (!strcmp(sbuf, ALIASID))
82                  thisobj.otype = -1;
83          else if ((thisobj.otype = otype(sbuf)) < 0) {
# Line 83 | Line 85 | int  (*f)();
85                  error(USER, errmsg);
86          }
87                                          /* get identifier */
88 <        fscanf(fp, "%s", sbuf);
88 >        fgetword(sbuf, MAXSTR, fp);
89          thisobj.oname = sbuf;
90                                          /* get arguments */
91          if (thisobj.otype == -1) {
92                  fscanf(fp, "%*s");
93                  return;
94          }
95 <        if (readfargs(&thisobj.oargs, fp) < 0) {
95 >        if (readfargs(&thisobj.oargs, fp) <= 0) {
96                  sprintf(errmsg, "(%s): bad arguments", name);
97                  objerror(&thisobj, USER, errmsg);
98          }
# Line 116 | Line 118 | int  (*f)();
118                          break;
119                  }
120          freefargs(&thisobj.oargs);
119 }
120
121
122 readfargs(fa, fp)               /* read function arguments from stream */
123 register FUNARGS  *fa;
124 FILE  *fp;
125 {
126        extern char  *strcpy();
127        char  sbuf[MAXSTR];
128        int  n;
129        register int  i;
130
131        if (fscanf(fp, "%d", &n) != 1 || n < 0)
132                return(-1);
133        if (fa->nsargs = n) {
134                fa->sarg = (char **)malloc(n*sizeof(char *));
135                if (fa->sarg == NULL)
136                        goto memerr;
137                for (i = 0; i < fa->nsargs; i++) {
138                        if (fscanf(fp, "%s", sbuf) != 1)
139                                return(-1);
140                        fa->sarg[i] = malloc(strlen(sbuf)+1);
141                        if (fa->sarg[i] == NULL)
142                                goto memerr;
143                        (void)strcpy(fa->sarg[i], sbuf);
144                }
145        } else
146                fa->sarg = NULL;
147        if (fscanf(fp, "%d", &n) != 1 || n < 0)
148                return(-1);
149 #ifdef  IARGS
150        if (fa->niargs = n) {
151                fa->iarg = (long *)malloc(n*sizeof(long));
152                if (fa->iarg == NULL)
153                        goto memerr;
154                for (i = 0; i < n; i++)
155                        if (fscanf(fp, "%ld", &fa->iarg[i]) != 1)
156                                return(-1);
157        } else
158                fa->iarg = NULL;
159 #else
160        if (n != 0)
161                return(-1);
162 #endif
163        if (fscanf(fp, "%d", &n) != 1 || n < 0)
164                return(-1);
165        if (fa->nfargs = n) {
166                fa->farg = (double *)malloc(n*sizeof(double));
167                if (fa->farg == NULL)
168                        goto memerr;
169                for (i = 0; i < n; i++)
170                        if (fscanf(fp, "%lf", &fa->farg[i]) != 1)
171                                return(-1);
172        } else
173                fa->farg = NULL;
174        return(0);
175 memerr:
176        error(SYSTEM, "out of memory in readfargs");
177 }
178
179
180 freefargs(fa)           /* free arguments */
181 register FUNARGS  *fa;
182 {
183        register int  i;
184
185        if (fa->nsargs) {
186                for (i = 0; i < fa->nsargs; i++)
187                        free(fa->sarg[i]);
188                free((char *)fa->sarg);
189        }
190 #ifdef  IARGS
191        if (fa->niargs)
192                free((char *)fa->iarg);
193 #endif
194        if (fa->nfargs)
195                free((char *)fa->farg);
121   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines