ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calcomp.h
Revision: 2.7
Committed: Tue Feb 25 02:47:21 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Changes since 2.6: +3 -58 lines
Log Message:
Replaced inline copyright notice with #include "copyright.h"

File Contents

# User Rev Content
1 greg 2.7 /* RCSid $Id$ */
2 greg 1.1 /*
3     * calcomp.h - header file for expression parser.
4 greg 2.6 */
5    
6 greg 2.7 #include "copyright.h"
7    
8 greg 2.2 #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 greg 1.4 /* also: '+', '-', '*', '/', '^', '=', ':' */
17 greg 1.1
18     typedef struct {
19     char *fname; /* function name */
20 greg 1.5 short nargs; /* # of required arguments */
21     short atyp; /* assignment type (':' or '=') */
22 greg 1.1 double (*f)(); /* pointer to function */
23     } LIBR; /* a library function */
24    
25     typedef struct epnode {
26 greg 2.2 int type; /* node type */
27 greg 1.1 struct epnode *sibling; /* next child this level */
28     union {
29     struct epnode *kid; /* first child */
30 greg 2.2 double num; /* number */
31 greg 1.1 char *name; /* symbol name */
32     int chan; /* channel number */
33 greg 2.4 unsigned long tick; /* timestamp */
34 greg 1.1 struct vardef {
35     char *name; /* variable name */
36 greg 2.2 int nlinks; /* number of references */
37 greg 1.1 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 gregl 2.5 #define MAXWORD 127 /* maximum word/id length */
47 greg 2.2 #define CNTXMARK '`' /* context mark */
48 greg 1.6
49 greg 2.2 #define isid(c) (isalnum(c) || (c) == '_' || \
50 greg 1.6 (c) == '.' || (c) == CNTXMARK)
51    
52 greg 2.6 #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 greg 1.1 extern double (*eoper[])();
63 greg 2.4 extern unsigned long eclock;
64 greg 2.6 extern unsigned int esupport;
65     extern EPNODE *curfunc;
66 greg 1.1 extern int nextc;
67    
68 greg 2.6 #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(int (*cs)());
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