ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/readfargs.c
Revision: 2.7
Committed: Sat Feb 22 02:07:22 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.6: +76 -22 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #endif
4 /*
5 * Allocate, read and free object arguments
6 */
7
8 /* ====================================================================
9 * The Radiance Software License, Version 1.0
10 *
11 * Copyright (c) 1990 - 2002 The Regents of the University of California,
12 * through Lawrence Berkeley National Laboratory. All rights reserved.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions
16 * are met:
17 *
18 * 1. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 *
21 * 2. Redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in
23 * the documentation and/or other materials provided with the
24 * distribution.
25 *
26 * 3. The end-user documentation included with the redistribution,
27 * if any, must include the following acknowledgment:
28 * "This product includes Radiance software
29 * (http://radsite.lbl.gov/)
30 * developed by the Lawrence Berkeley National Laboratory
31 * (http://www.lbl.gov/)."
32 * Alternately, this acknowledgment may appear in the software itself,
33 * if and wherever such third-party acknowledgments normally appear.
34 *
35 * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
36 * and "The Regents of the University of California" must
37 * not be used to endorse or promote products derived from this
38 * software without prior written permission. For written
39 * permission, please contact [email protected].
40 *
41 * 5. Products derived from this software may not be called "Radiance",
42 * nor may "Radiance" appear in their name, without prior written
43 * permission of Lawrence Berkeley National Laboratory.
44 *
45 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
46 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
47 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48 * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
49 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
52 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
53 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
54 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
55 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56 * SUCH DAMAGE.
57 * ====================================================================
58 *
59 * This software consists of voluntary contributions made by many
60 * individuals on behalf of Lawrence Berkeley National Laboratory. For more
61 * information on Lawrence Berkeley National Laboratory, please see
62 * <http://www.lbl.gov/>.
63 */
64
65 #include "standard.h"
66
67 #include "object.h"
68
69
70
71 int
72 readfargs(fa, fp) /* read function arguments from stream */
73 register FUNARGS *fa;
74 FILE *fp;
75 {
76 #define getstr(s) (fgetword(s,sizeof(s),fp)!=NULL)
77 #define getint(s) (getstr(s) && isint(s))
78 #define getflt(s) (getstr(s) && isflt(s))
79 char sbuf[MAXSTR];
80 register int n, i;
81
82 if (!getint(sbuf) || (n = atoi(sbuf)) < 0)
83 return(0);
84 if (fa->nsargs = n) {
85 fa->sarg = (char **)malloc(n*sizeof(char *));
86 if (fa->sarg == NULL)
87 return(-1);
88 for (i = 0; i < fa->nsargs; i++) {
89 if (!getstr(sbuf))
90 return(0);
91 fa->sarg[i] = savestr(sbuf);
92 }
93 } else
94 fa->sarg = NULL;
95 if (!getint(sbuf) || (n = atoi(sbuf)) < 0)
96 return(0);
97 #ifdef IARGS
98 if (fa->niargs = n) {
99 fa->iarg = (long *)malloc(n*sizeof(long));
100 if (fa->iarg == NULL)
101 return(-1);
102 for (i = 0; i < n; i++) {
103 if (!getint(sbuf))
104 return(0);
105 fa->iarg[i] = atol(sbuf);
106 }
107 } else
108 fa->iarg = NULL;
109 #else
110 if (n != 0)
111 return(0);
112 #endif
113 if (!getint(sbuf) || (n = atoi(sbuf)) < 0)
114 return(0);
115 if (fa->nfargs = n) {
116 fa->farg = (FLOAT *)malloc(n*sizeof(FLOAT));
117 if (fa->farg == NULL)
118 return(-1);
119 for (i = 0; i < n; i++) {
120 if (!getflt(sbuf))
121 return(0);
122 fa->farg[i] = atof(sbuf);
123 }
124 } else
125 fa->farg = NULL;
126 return(1);
127 #undef getflt
128 #undef getint
129 #undef getstr
130 }
131
132
133 void
134 freefargs(fa) /* free object arguments */
135 register FUNARGS *fa;
136 {
137 register int i;
138
139 if (fa->nsargs) {
140 for (i = 0; i < fa->nsargs; i++)
141 freestr(fa->sarg[i]);
142 free((void *)fa->sarg);
143 fa->sarg = NULL;
144 fa->nsargs = 0;
145 }
146 #ifdef IARGS
147 if (fa->niargs) {
148 free((void *)fa->iarg);
149 fa->iarg = NULL;
150 fa->niargs = 0;
151 }
152 #endif
153 if (fa->nfargs) {
154 free((void *)fa->farg);
155 fa->farg = NULL;
156 fa->nfargs = 0;
157 }
158 }