ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/object.h
Revision: 2.17
Committed: Thu Jul 17 09:21:29 2003 UTC (20 years, 8 months ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R7P2, rad3R7P1, rad3R6, rad3R6P1
Changes since 2.16: +2 -2 lines
Log Message:
Added prototypes and includes from patch by Randolph Fritz.
Added more required includes and reduced other compile warnings.

File Contents

# Content
1 /* RCSid $Id: object.h,v 2.16 2003/06/27 06:53:21 greg Exp $ */
2 /*
3 * object.h - header file for routines using objects and object sets.
4 *
5 * Include after "standard.h"
6 */
7 #ifndef _RAD_OBJECT_H_
8 #define _RAD_OBJECT_H_
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 #ifndef OCTREE
14 #define OCTREE int
15 #endif
16
17 /*
18 * Object definitions require general specifications
19 * which may include a number of different argument types.
20 * The following structure aids in the storage of such
21 * argument lists.
22 */
23
24 typedef struct {
25 short nsargs; /* # of string arguments */
26 short nfargs; /* # of real arguments */
27 char **sarg; /* string arguments */
28 RREAL *farg; /* real arguments */
29 #ifdef IARGS
30 short niargs; /* # of integer arguments */
31 long *iarg; /* integer arguments */
32 #endif
33 } FUNARGS;
34
35 #define MAXSTR 128 /* maximum string length */
36
37 /*
38 * An object is defined as an index into an array of
39 * structures containing the object type and specification
40 * and the modifier index.
41 */
42
43 #ifndef OBJECT
44 #ifdef SMLMEM
45 #define OBJECT int16 /* index to object array */
46 #else
47 #define OBJECT int32 /* index to object array */
48 #endif
49 #endif
50
51 typedef struct {
52 OBJECT omod; /* modifier number */
53 short otype; /* object type number */
54 char *oname; /* object name */
55 FUNARGS oargs; /* object specification */
56 char *os; /* object structure */
57 } OBJREC;
58
59 #ifndef MAXOBJBLK
60 #ifdef SMLMEM
61 #define MAXOBJBLK 63 /* maximum number of object blocks */
62 #else
63 #define MAXOBJBLK 65535 /* maximum number of object blocks */
64 #endif
65 #endif
66
67 extern OBJREC *objblock[MAXOBJBLK]; /* the object blocks */
68 extern OBJECT nobjects; /* # of objects */
69
70 #define OBJBLKSHFT 9
71 #define OBJBLKSIZ (1<<OBJBLKSHFT) /* object block size */
72 #define objptr(obj) (objblock[(obj)>>OBJBLKSHFT]+((obj)&(OBJBLKSIZ-1)))
73
74 #define OVOID (-1) /* void object */
75 #define VOIDID "void" /* void identifier */
76
77 /*
78 * Object sets begin with the number of objects and proceed with
79 * the objects in ascending order.
80 */
81
82 #define MAXSET 511 /* maximum object set size */
83
84 #define setfree(os) free((void *)(os))
85
86 extern void (*addobjnotify[])(); /* people to notify of new objects */
87
88 /* defined in modobject.c */
89 extern OBJECT objndx(OBJREC *op);
90 extern OBJECT lastmod(OBJECT obj, char *mname);
91 extern OBJECT modifier(char *name);
92 extern OBJECT object(char *oname);
93 extern void insertobject(OBJECT obj);
94 extern void clearobjndx(void);
95 /* defined in objset.c */
96 extern void insertelem(OBJECT *os, OBJECT obj);
97 extern void deletelem(OBJECT *os, OBJECT obj);
98 extern int inset(OBJECT *os, OBJECT obj);
99 extern int setequal(OBJECT *os1, OBJECT *os2);
100 extern void setcopy(OBJECT *os1, OBJECT *os2);
101 extern OBJECT * setsave(OBJECT *os);
102 extern void setunion(OBJECT *osr, OBJECT *os1, OBJECT *os2);
103 extern void setintersect(OBJECT *osr, OBJECT *os1, OBJECT *os2);
104 extern OCTREE fullnode(OBJECT *oset);
105 extern void objset(OBJECT *oset, OCTREE ot);
106 extern int dosets(int (*f)());
107 extern void donesets(void);
108
109 /* defined in otypes.c */
110 extern int otype(char *ofname);
111 extern void objerror(OBJREC *o, int etyp, char *msg);
112 /* defined in readfargs.c */
113 extern int readfargs(FUNARGS *fa, FILE *fp);
114 extern void freefargs(FUNARGS *fa);
115 /* defined in readobj.c */
116 extern void readobj(char *inpspec);
117 extern void getobject(char *name, FILE *fp);
118 extern OBJECT newobject(void);
119 extern void freeobjects(int firstobj, int nobjs);
120 /* defined in free_os.c */
121 extern int free_os(OBJREC *op);
122
123
124 #ifdef __cplusplus
125 }
126 #endif
127 #endif /* _RAD_OBJECT_H_ */
128