ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/readfargs.c
Revision: 2.10
Committed: Sun Jul 27 22:12:01 2003 UTC (20 years, 9 months ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R7P2, rad3R7P1, rad4R1, rad4R0, rad3R6, rad3R6P1, rad3R8, rad3R9
Changes since 2.9: +3 -3 lines
Log Message:
Added grouping parens to reduce ambiguity warnings.

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 schorsch 2.10 static const char RCSid[] = "$Id: readfargs.c,v 2.9 2003/06/26 00:58:09 schorsch Exp $";
3 greg 1.1 #endif
4     /*
5     * Allocate, read and free object arguments
6     */
7    
8 greg 2.8 #include "copyright.h"
9 greg 2.7
10 gwlarson 2.6 #include "standard.h"
11 greg 1.1
12     #include "object.h"
13    
14    
15    
16 greg 2.7 int
17 greg 1.1 readfargs(fa, fp) /* read function arguments from stream */
18     register FUNARGS *fa;
19     FILE *fp;
20     {
21 greg 2.3 #define getstr(s) (fgetword(s,sizeof(s),fp)!=NULL)
22     #define getint(s) (getstr(s) && isint(s))
23     #define getflt(s) (getstr(s) && isflt(s))
24 greg 1.1 char sbuf[MAXSTR];
25 greg 1.2 register int n, i;
26 greg 1.1
27 greg 2.3 if (!getint(sbuf) || (n = atoi(sbuf)) < 0)
28 greg 1.1 return(0);
29 schorsch 2.10 if ( (fa->nsargs = n) ) {
30 greg 2.7 fa->sarg = (char **)malloc(n*sizeof(char *));
31 greg 1.1 if (fa->sarg == NULL)
32     return(-1);
33     for (i = 0; i < fa->nsargs; i++) {
34 greg 2.3 if (!getstr(sbuf))
35 greg 1.1 return(0);
36     fa->sarg[i] = savestr(sbuf);
37     }
38     } else
39     fa->sarg = NULL;
40 greg 2.3 if (!getint(sbuf) || (n = atoi(sbuf)) < 0)
41 greg 1.1 return(0);
42     #ifdef IARGS
43     if (fa->niargs = n) {
44 greg 2.7 fa->iarg = (long *)malloc(n*sizeof(long));
45 greg 1.1 if (fa->iarg == NULL)
46     return(-1);
47 greg 1.2 for (i = 0; i < n; i++) {
48 greg 2.3 if (!getint(sbuf))
49 greg 1.1 return(0);
50 greg 1.2 fa->iarg[i] = atol(sbuf);
51     }
52 greg 1.1 } else
53     fa->iarg = NULL;
54     #else
55     if (n != 0)
56     return(0);
57     #endif
58 greg 2.3 if (!getint(sbuf) || (n = atoi(sbuf)) < 0)
59 greg 1.1 return(0);
60 schorsch 2.10 if ( (fa->nfargs = n) ) {
61 schorsch 2.9 fa->farg = (RREAL *)malloc(n*sizeof(RREAL));
62 greg 1.1 if (fa->farg == NULL)
63     return(-1);
64 greg 1.2 for (i = 0; i < n; i++) {
65 greg 2.3 if (!getflt(sbuf))
66 greg 1.1 return(0);
67 greg 1.2 fa->farg[i] = atof(sbuf);
68     }
69 greg 1.1 } else
70     fa->farg = NULL;
71     return(1);
72 greg 1.2 #undef getflt
73     #undef getint
74     #undef getstr
75 greg 1.1 }
76    
77    
78 greg 2.7 void
79 greg 1.2 freefargs(fa) /* free object arguments */
80 greg 1.1 register FUNARGS *fa;
81     {
82     register int i;
83    
84     if (fa->nsargs) {
85     for (i = 0; i < fa->nsargs; i++)
86     freestr(fa->sarg[i]);
87 greg 2.7 free((void *)fa->sarg);
88     fa->sarg = NULL;
89     fa->nsargs = 0;
90 greg 1.1 }
91     #ifdef IARGS
92 greg 2.7 if (fa->niargs) {
93     free((void *)fa->iarg);
94     fa->iarg = NULL;
95     fa->niargs = 0;
96     }
97 greg 1.1 #endif
98 greg 2.7 if (fa->nfargs) {
99     free((void *)fa->farg);
100     fa->farg = NULL;
101     fa->nfargs = 0;
102     }
103 greg 1.1 }