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, 8 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

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