ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calcomp.h
Revision: 2.2
Committed: Mon Sep 21 12:01:33 1992 UTC (31 years, 7 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.1: +16 -17 lines
Log Message:
Changes for PC port

File Contents

# Content
1 /* Copyright (c) 1992 Regents of the University of California */
2
3 /* SCCSid "$SunId$ LBL" */
4
5 /*
6 * calcomp.h - header file for expression parser.
7 *
8 */
9 /* EPNODE types */
10 #define VAR 1
11 #define NUM 2
12 #define UMINUS 3
13 #define CHAN 4
14 #define FUNC 5
15 #define ARG 6
16 #define TICK 7
17 #define SYM 8
18 /* also: '+', '-', '*', '/', '^', '=', ':' */
19
20 typedef struct {
21 char *fname; /* function name */
22 short nargs; /* # of required arguments */
23 short atyp; /* assignment type (':' or '=') */
24 double (*f)(); /* pointer to function */
25 } LIBR; /* a library function */
26
27 typedef struct epnode {
28 int type; /* node type */
29 struct epnode *sibling; /* next child this level */
30 union {
31 struct epnode *kid; /* first child */
32 double num; /* number */
33 char *name; /* symbol name */
34 int chan; /* channel number */
35 long tick; /* timestamp */
36 struct vardef {
37 char *name; /* variable name */
38 int nlinks; /* number of references */
39 struct epnode *def; /* definition */
40 LIBR *lib; /* library definition */
41 struct vardef *next; /* next in hash list */
42 } *ln; /* link */
43 } v; /* value */
44 } EPNODE; /* an expression node */
45
46 typedef struct vardef VARDEF; /* a variable definition */
47
48 #define MAXWORD 63 /* maximum word/id length */
49 #define CNTXMARK '`' /* context mark */
50
51 #define isid(c) (isalnum(c) || (c) == '_' || \
52 (c) == '.' || (c) == CNTXMARK)
53
54 extern double eval(), varvalue(), chanvalue(), funvalue();
55 extern double argument(), getnum();
56 extern double (*eoper[])();
57 extern int getinum();
58 extern char *getname(), *qualname(), *setcontext(), *argfun();
59 extern EPNODE *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext();
60 extern EPNODE *getdefn(), *getchan();
61 extern EPNODE *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst();
62 extern VARDEF *varinsert(), *varlookup(), *argf();
63 extern LIBR *liblookup();
64 extern long eclock;
65 extern int nextc;
66
67 #define evalue(ep) (*eoper[(ep)->type])(ep)