ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/object.h
Revision: 2.8
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.7: +131 -7 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 /* RCSid: $Id$ */
2 /*
3 * object.h - header file for routines using objects and object sets.
4 */
5
6 /* ====================================================================
7 * The Radiance Software License, Version 1.0
8 *
9 * Copyright (c) 1990 - 2002 The Regents of the University of California,
10 * through Lawrence Berkeley National Laboratory. All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 *
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 *
19 * 2. Redistributions in binary form must reproduce the above copyright
20 * notice, this list of conditions and the following disclaimer in
21 * the documentation and/or other materials provided with the
22 * distribution.
23 *
24 * 3. The end-user documentation included with the redistribution,
25 * if any, must include the following acknowledgment:
26 * "This product includes Radiance software
27 * (http://radsite.lbl.gov/)
28 * developed by the Lawrence Berkeley National Laboratory
29 * (http://www.lbl.gov/)."
30 * Alternately, this acknowledgment may appear in the software itself,
31 * if and wherever such third-party acknowledgments normally appear.
32 *
33 * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
34 * and "The Regents of the University of California" must
35 * not be used to endorse or promote products derived from this
36 * software without prior written permission. For written
37 * permission, please contact [email protected].
38 *
39 * 5. Products derived from this software may not be called "Radiance",
40 * nor may "Radiance" appear in their name, without prior written
41 * permission of Lawrence Berkeley National Laboratory.
42 *
43 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
44 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
45 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
46 * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
47 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
50 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
51 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
52 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
53 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
54 * SUCH DAMAGE.
55 * ====================================================================
56 *
57 * This software consists of voluntary contributions made by many
58 * individuals on behalf of Lawrence Berkeley National Laboratory. For more
59 * information on Lawrence Berkeley National Laboratory, please see
60 * <http://www.lbl.gov/>.
61 */
62
63 #ifndef OCTREE
64 #define OCTREE int
65 #endif
66
67 /*
68 * Object definitions require general specifications
69 * which may include a number of different argument types.
70 * The following structure aids in the storage of such
71 * argument lists.
72 */
73
74 typedef struct {
75 short nsargs; /* # of string arguments */
76 short nfargs; /* # of real arguments */
77 char **sarg; /* string arguments */
78 FLOAT *farg; /* real arguments */
79 #ifdef IARGS
80 short niargs; /* # of integer arguments */
81 long *iarg; /* integer arguments */
82 #endif
83 } FUNARGS;
84
85 #define MAXSTR 128 /* maximum string length */
86
87 /*
88 * An object is defined as an index into an array of
89 * structures containing the object type and specification
90 * and the modifier index.
91 */
92
93 #ifndef OBJECT
94 #ifdef BIGMEM
95 #define OBJECT int4 /* index to object array */
96 #else
97 #define OBJECT int2 /* index to object array */
98 #endif
99 #endif
100
101 typedef struct {
102 OBJECT omod; /* modifier number */
103 short otype; /* object type number */
104 char *oname; /* object name */
105 FUNARGS oargs; /* object specification */
106 char *os; /* object structure */
107 } OBJREC;
108
109 #ifndef MAXOBJBLK
110 #ifdef BIGMEM
111 #define MAXOBJBLK 65535 /* maximum number of object blocks */
112 #else
113 #define MAXOBJBLK 63 /* maximum number of object blocks */
114 #endif
115 #endif
116
117 extern OBJREC *objblock[MAXOBJBLK]; /* the object blocks */
118 extern OBJECT nobjects; /* # of objects */
119
120 #define OBJBLKSHFT 9
121 #define OBJBLKSIZ (1<<OBJBLKSHFT) /* object block size */
122 #define objptr(obj) (objblock[(obj)>>OBJBLKSHFT]+((obj)&(OBJBLKSIZ-1)))
123
124 #define OVOID (-1) /* void object */
125 #define VOIDID "void" /* void identifier */
126
127 /*
128 * Object sets begin with the number of objects and proceed with
129 * the objects in ascending order.
130 */
131
132 #define MAXSET 127 /* maximum object set size */
133
134 #define setfree(os) free((void *)(os))
135
136 extern void (*addobjnotify[])(); /* people to notify of new objects */
137
138 #ifdef NOPROTO
139
140 extern int objndx();
141 extern int lastmod();
142 extern int modifier();
143 extern int object();
144 extern void insertobject();
145 extern void clearobjndx();
146 extern void insertelem();
147 extern void deletelem();
148 extern int inset();
149 extern int setequal();
150 extern void setcopy();
151 extern OBJECT * setsave();
152 extern void setunion();
153 extern void setintersect();
154 extern OCTREE fullnode();
155 extern void objset();
156 extern int dosets();
157 extern void donesets();
158 extern int otype();
159 extern void objerror();
160 extern int readfargs();
161 extern void freefargs();
162 extern void readobj();
163 extern void getobject();
164 extern int newobject();
165 extern void freeobjects();
166 extern int free_os();
167
168 #else
169 /* defined in modobject.c */
170 extern int objndx(OBJREC *op);
171 extern int lastmod(OBJECT obj, char *mname);
172 extern int modifier(char *name);
173 extern int object(char *oname);
174 extern void insertobject(OBJECT obj);
175 extern void clearobjndx(void);
176 /* defined in objset.c */
177 extern void insertelem(OBJECT *os, OBJECT obj);
178 extern void deletelem(OBJECT *os, OBJECT obj);
179 extern int inset(OBJECT *os, OBJECT obj);
180 extern int setequal(OBJECT *os1, OBJECT *os2);
181 extern void setcopy(OBJECT *os1, OBJECT *os2);
182 extern OBJECT * setsave(OBJECT *os);
183 extern void setunion(OBJECT *osr, OBJECT *os1, OBJECT *os2);
184 extern void setintersect(OBJECT *osr, OBJECT *os1, OBJECT *os2);
185 extern OCTREE fullnode(OBJECT *oset);
186 extern void objset(OBJECT *oset, OCTREE ot);
187 extern int dosets(int (*f)());
188 extern void donesets(void);
189
190 /* defined in otypes.c */
191 extern int otype(char *ofname);
192 extern void objerror(OBJREC *o, int etyp, char *msg);
193 /* defined in readfargs.c */
194 extern int readfargs(FUNARGS *fa, FILE *fp);
195 extern void freefargs(FUNARGS *fa);
196 /* defined in readobj.c */
197 extern void readobj(char *inpspec);
198 extern void getobject(char *name, FILE *fp);
199 extern int newobject();
200 extern void freeobjects(int firstobj, int nobjs);
201 /* defined in free_os.c */
202 extern int free_os(OBJREC *op);
203
204 #endif