ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calcomp.h
Revision: 2.8
Committed: Sun Apr 27 06:08:03 2003 UTC (21 years ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.7: +1 -1 lines
Log Message:
Added -idN or -ifN and -od or -of options to rcalc

File Contents

# Content
1 /* RCSid $Id$ */
2 /*
3 * calcomp.h - header file for expression parser.
4 */
5
6 #include "copyright.h"
7
8 #define VAR 1
9 #define NUM 2
10 #define UMINUS 3
11 #define CHAN 4
12 #define FUNC 5
13 #define ARG 6
14 #define TICK 7
15 #define SYM 8
16 /* also: '+', '-', '*', '/', '^', '=', ':' */
17
18 typedef struct {
19 char *fname; /* function name */
20 short nargs; /* # of required arguments */
21 short atyp; /* assignment type (':' or '=') */
22 double (*f)(); /* pointer to function */
23 } LIBR; /* a library function */
24
25 typedef struct epnode {
26 int type; /* node type */
27 struct epnode *sibling; /* next child this level */
28 union {
29 struct epnode *kid; /* first child */
30 double num; /* number */
31 char *name; /* symbol name */
32 int chan; /* channel number */
33 unsigned long tick; /* timestamp */
34 struct vardef {
35 char *name; /* variable name */
36 int nlinks; /* number of references */
37 struct epnode *def; /* definition */
38 LIBR *lib; /* library definition */
39 struct vardef *next; /* next in hash list */
40 } *ln; /* link */
41 } v; /* value */
42 } EPNODE; /* an expression node */
43
44 typedef struct vardef VARDEF; /* a variable definition */
45
46 #define MAXWORD 127 /* maximum word/id length */
47 #define CNTXMARK '`' /* context mark */
48
49 #define isid(c) (isalnum(c) || (c) == '_' || \
50 (c) == '.' || (c) == CNTXMARK)
51
52 #define evalue(ep) (*eoper[(ep)->type])(ep)
53
54 /* flags to set in esupport */
55 #define E_VARIABLE 001
56 #define E_FUNCTION 002
57 #define E_INCHAN 004
58 #define E_OUTCHAN 010
59 #define E_RCONST 020
60 #define E_REDEFW 040
61
62 extern double (*eoper[])();
63 extern unsigned long eclock;
64 extern unsigned int esupport;
65 extern EPNODE *curfunc;
66 extern int nextc;
67
68 #ifdef NOPROTO
69
70 extern void fcompile();
71 extern void scompile();
72 extern double varvalue();
73 extern double evariable();
74 extern void varset();
75 extern void dclear();
76 extern void dremove();
77 extern int vardefined();
78 extern char *setcontext();
79 extern char *pushcontext();
80 extern char *popcontext();
81 extern char *qualname();
82 extern int incontext();
83 extern void chanout();
84 extern void dcleanup();
85 extern EPNODE *dlookup();
86 extern VARDEF *varlookup();
87 extern VARDEF *varinsert();
88 extern void varfree();
89 extern EPNODE *dfirst();
90 extern EPNODE *dnext();
91 extern EPNODE *dpop();
92 extern void dpush();
93 extern void addchan();
94 extern void getstatement();
95 extern EPNODE *getdefn();
96 extern EPNODE *getchan();
97 extern EPNODE *eparse();
98 extern double eval();
99 extern int epcmp();
100 extern void epfree();
101 extern EPNODE *ekid();
102 extern int nekids();
103 extern void initfile();
104 extern void initstr();
105 extern void getscanpos();
106 extern int scan();
107 extern char *long2ascii();
108 extern void syntax();
109 extern void addekid();
110 extern char *getname();
111 extern int getinum();
112 extern double getnum();
113 extern EPNODE *getE1();
114 extern EPNODE *getE2();
115 extern EPNODE *getE3();
116 extern EPNODE *getE4();
117 extern EPNODE *getE5();
118 extern EPNODE *rconst();
119 extern int isconstvar();
120 extern int isconstfun();
121 extern int fundefined();
122 extern double funvalue();
123 extern void funset();
124 extern int nargum();
125 extern double argument();
126 extern VARDEF *argf();
127 extern char *argfun();
128 extern double efunc();
129 extern LIBR *liblookup();
130 extern void libupdate();
131 extern void eprint();
132 extern void dprint();
133 extern char *savestr();
134 extern void freestr();
135 extern int shash();
136 extern char *emalloc();
137 extern char *ecalloc();
138 extern char *erealloc();
139 extern void efree();
140 extern void eputs();
141 extern void wputs();
142 extern void quit();
143
144 extern double chanvalue();
145
146 #else
147 /* defined in caldefn.c */
148 extern void fcompile(char *fname);
149 extern void scompile(char *str, char *fname, int ln);
150 extern double varvalue(char *vname);
151 extern double evariable(EPNODE *ep);
152 extern void varset(char *fname, int assign, double val);
153 extern void dclear(char *name);
154 extern void dremove(char *name);
155 extern int vardefined(char *name);
156 extern char *setcontext(char *ctx);
157 extern char *pushcontext(char *ctx);
158 extern char *popcontext(void);
159 extern char *qualname(char *nam, int lvl);
160 extern int incontext(char *qn);
161 extern void chanout(void (*cs)(int n, double v));
162 extern void dcleanup(int lvl);
163 extern EPNODE *dlookup(char *name);
164 extern VARDEF *varlookup(char *name);
165 extern VARDEF *varinsert(char *name);
166 extern void varfree(VARDEF *ln);
167 extern EPNODE *dfirst(void);
168 extern EPNODE *dnext(void);
169 extern EPNODE *dpop(char *name);
170 extern void dpush(char *nm, EPNODE *ep);
171 extern void addchan(EPNODE *sp);
172 extern void getstatement();
173 extern EPNODE *getdefn();
174 extern EPNODE *getchan();
175 /* defined in calexpr.c */
176 extern EPNODE *eparse(char *expr);
177 extern double eval(char *expr);
178 extern int epcmp(EPNODE *ep1, EPNODE *ep2);
179 extern void epfree(EPNODE *epar);
180 extern EPNODE *ekid(EPNODE *ep, int n);
181 extern int nekids(EPNODE *ep);
182 extern void initfile(FILE *fp, char *fn, int ln);
183 extern void initstr(char *s, char *fn, int ln);
184 extern void getscanpos(char **fnp, int *lnp, char **spp, FILE **fpp);
185 extern int scan(void);
186 extern char *long2ascii(long l);
187 extern void syntax(char *err);
188 extern void addekid(EPNODE *ep, EPNODE *ekid);
189 extern char *getname(void);
190 extern int getinum(void);
191 extern double getnum(void);
192 extern EPNODE *getE1(void);
193 extern EPNODE *getE2(void);
194 extern EPNODE *getE3(void);
195 extern EPNODE *getE4(void);
196 extern EPNODE *getE5(void);
197 extern EPNODE *rconst(EPNODE *epar);
198 extern int isconstvar(EPNODE *ep);
199 extern int isconstfun(EPNODE *ep);
200 /* defined in calfunc.c */
201 extern int fundefined(char *fname);
202 extern double funvalue(char *fname, int n, double *a);
203 extern void funset(char *fname, int nargs, int assign, double (*fptr)());
204 extern int nargum(void);
205 extern double argument(int n);
206 extern VARDEF *argf(int n);
207 extern char *argfun(int n);
208 extern double efunc(EPNODE *ep);
209 extern LIBR *liblookup(char *fname);
210 extern void libupdate(char *fn);
211 /* defined in calprnt.c */
212 extern void eprint(EPNODE *ep, FILE *fp);
213 extern void dprint(char *name, FILE *fp);
214 /* defined in savestr.c */
215 extern char *savestr(char *str);
216 extern void freestr(char *s);
217 extern int shash(char *s);
218 /* defined in ealloc.c */
219 extern char *emalloc(unsigned int n);
220 extern char *ecalloc(unsigned int ne, unsigned int es);
221 extern char *erealloc(char *cp, unsigned int n);
222 extern void efree(char *cp);
223 /* miscellaneous */
224 extern void eputs(char *s);
225 extern void wputs(char *s);
226 extern void quit(int code);
227 /* defined by client */
228 extern double chanvalue(int n);
229
230 #endif