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.2 by greg, Wed May 29 17:44:18 1991 UTC vs.
Revision 2.3 by greg, Fri Jun 4 17:02:19 1993 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 26 | Line 28 | char  *input;
28   int  (*callback)();
29   {
30          FILE  *popen();
31 <        char  *fgets(), *fgetline();
31 >        char  *fgetline();
32          FILE  *infp;
33          char  buf[512];
34          register int  c;
# 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          }
99          thisobj.os = NULL;
98        thisobj.lastrno = -1;
100                                          /* call function */
101          (*f)(&thisobj);
102                                          /* free memory */
# Line 116 | Line 117 | int  (*f)();
117                          break;
118                  }
119          freefargs(&thisobj.oargs);
119 }
120
121
122 readfargs(fa, fp)               /* read function arguments from stream */
123 register FUNARGS  *fa;
124 FILE  *fp;
125 {
126        char  sbuf[MAXSTR];
127        int  n;
128        register int  i;
129
130        if (fscanf(fp, "%d", &n) != 1 || n < 0)
131                return(-1);
132        if (fa->nsargs = n) {
133                fa->sarg = (char **)malloc(n*sizeof(char *));
134                if (fa->sarg == NULL)
135                        goto memerr;
136                for (i = 0; i < fa->nsargs; i++) {
137                        if (fscanf(fp, "%s", sbuf) != 1)
138                                return(-1);
139                        fa->sarg[i] = savestr(sbuf);
140                }
141        } else
142                fa->sarg = NULL;
143        if (fscanf(fp, "%d", &n) != 1 || n < 0)
144                return(-1);
145 #ifdef  IARGS
146        if (fa->niargs = n) {
147                fa->iarg = (long *)malloc(n*sizeof(long));
148                if (fa->iarg == NULL)
149                        goto memerr;
150                for (i = 0; i < n; i++)
151                        if (fscanf(fp, "%ld", &fa->iarg[i]) != 1)
152                                return(-1);
153        } else
154                fa->iarg = NULL;
155 #else
156        if (n != 0)
157                return(-1);
158 #endif
159        if (fscanf(fp, "%d", &n) != 1 || n < 0)
160                return(-1);
161        if (fa->nfargs = n) {
162                fa->farg = (double *)malloc(n*sizeof(double));
163                if (fa->farg == NULL)
164                        goto memerr;
165                for (i = 0; i < n; i++)
166                        if (fscanf(fp, "%lf", &fa->farg[i]) != 1)
167                                return(-1);
168        } else
169                fa->farg = NULL;
170        return(0);
171 memerr:
172        error(SYSTEM, "out of memory in readfargs");
173 }
174
175
176 freefargs(fa)           /* free arguments */
177 register FUNARGS  *fa;
178 {
179        register int  i;
180
181        if (fa->nsargs) {
182                for (i = 0; i < fa->nsargs; i++)
183                        free(fa->sarg[i]);
184                free((char *)fa->sarg);
185        }
186 #ifdef  IARGS
187        if (fa->niargs)
188                free((char *)fa->iarg);
189 #endif
190        if (fa->nfargs)
191                free((char *)fa->farg);
120   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines