ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calcomp.h
Revision: 2.4
Committed: Fri Feb 17 18:34:41 1995 UTC (29 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.3: +2 -2 lines
Log Message:
fixed potential bug in eclock tracking

File Contents

# User Rev Content
1 greg 2.2 /* Copyright (c) 1992 Regents of the University of California */
2 greg 1.1
3     /* SCCSid "$SunId$ LBL" */
4    
5     /*
6     * calcomp.h - header file for expression parser.
7     *
8     */
9     /* EPNODE types */
10 greg 2.2 #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 greg 1.4 /* also: '+', '-', '*', '/', '^', '=', ':' */
19 greg 1.1
20     typedef struct {
21     char *fname; /* function name */
22 greg 1.5 short nargs; /* # of required arguments */
23     short atyp; /* assignment type (':' or '=') */
24 greg 1.1 double (*f)(); /* pointer to function */
25     } LIBR; /* a library function */
26    
27     typedef struct epnode {
28 greg 2.2 int type; /* node type */
29 greg 1.1 struct epnode *sibling; /* next child this level */
30     union {
31     struct epnode *kid; /* first child */
32 greg 2.2 double num; /* number */
33 greg 1.1 char *name; /* symbol name */
34     int chan; /* channel number */
35 greg 2.4 unsigned long tick; /* timestamp */
36 greg 1.1 struct vardef {
37     char *name; /* variable name */
38 greg 2.2 int nlinks; /* number of references */
39 greg 1.1 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 greg 2.2 #define MAXWORD 63 /* maximum word/id length */
49     #define CNTXMARK '`' /* context mark */
50 greg 1.6
51 greg 2.2 #define isid(c) (isalnum(c) || (c) == '_' || \
52 greg 1.6 (c) == '.' || (c) == CNTXMARK)
53    
54 greg 1.1 extern double eval(), varvalue(), chanvalue(), funvalue();
55     extern double argument(), getnum();
56     extern double (*eoper[])();
57     extern int getinum();
58 greg 2.3 extern char *getname(), *qualname(), *argfun();
59     extern char *setcontext(), *pushcontext(), *popcontext();
60 greg 1.1 extern EPNODE *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext();
61     extern EPNODE *getdefn(), *getchan();
62     extern EPNODE *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst();
63     extern VARDEF *varinsert(), *varlookup(), *argf();
64     extern LIBR *liblookup();
65 greg 2.4 extern unsigned long eclock;
66 greg 1.1 extern int nextc;
67    
68 greg 2.2 #define evalue(ep) (*eoper[(ep)->type])(ep)