ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/readfargs.c
Revision: 2.11
Committed: Thu Jun 12 22:12:20 2014 UTC (9 years, 10 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad4R2P2, rad5R0, rad5R1, rad4R2, rad4R2P1, rad5R3, HEAD
Changes since 2.10: +10 -8 lines
Log Message:
ANSIfication

File Contents

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