ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calcomp.h
(Generate patch)

Comparing ray/src/common/calcomp.h (file contents):
Revision 2.4 by greg, Fri Feb 17 18:34:41 1995 UTC vs.
Revision 2.25 by greg, Fri Feb 23 03:47:57 2024 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1992 Regents of the University of California */
2 <
3 < /* SCCSid "$SunId$ LBL" */
4 <
1 > /* RCSid $Id$ */
2   /*
3   *  calcomp.h - header file for expression parser.
7 *
4   */
5 <                                /* EPNODE types */
5 > #ifndef _RAD_CALCOMP_H_
6 > #define _RAD_CALCOMP_H_
7 >
8 > #include <stdio.h>
9 >
10 > #ifdef __cplusplus
11 > extern "C" {
12 > #endif
13 >
14   #define  VAR            1
15   #define  NUM            2
16   #define  UMINUS         3
17   #define  CHAN           4
18   #define  FUNC           5
19   #define  ARG            6
20 < #define  TICK           7
20 > #define  CLKT           7
21   #define  SYM            8
22                                  /* also: '+', '-', '*', '/', '^', '=', ':' */
23  
# Line 21 | Line 25 | typedef struct {
25      char  *fname;               /* function name */
26      short  nargs;               /* # of required arguments */
27      short  atyp;                /* assignment type (':' or '=') */
28 <    double  (*f)();             /* pointer to function */
28 >    double  (*f)(char *);       /* pointer to function */
29   }  LIBR;                /* a library function */
30  
31   typedef struct epnode {
28    int  type;                  /* node type */
29    struct epnode  *sibling;    /* next child this level */
32      union {
33          struct epnode  *kid;    /* first child */
34          double  num;            /* number */
# Line 41 | Line 43 | typedef struct epnode {
43              struct vardef  *next;       /* next in hash list */
44          }  *ln;                 /* link */
45      } v;                /* value */
46 +    struct epnode  *sibling;    /* next child this level */
47 +    short  type;                /* node type */
48 +    short  nkids;               /* child count (neg if array) */
49   }  EPNODE;      /* an expression node */
50  
51   typedef struct vardef  VARDEF;  /* a variable definition */
52  
53 < #define  MAXWORD        63              /* maximum word/id length */
53 > #define  nekids(ep)     abs((ep)->nkids)
54 >
55 > #define  RMAXWORD       127             /* maximum word/id length */
56   #define  CNTXMARK       '`'             /* context mark */
57  
58   #define  isid(c)        (isalnum(c) || (c) == '_' || \
59                          (c) == '.' || (c) == CNTXMARK)
60  
61 < extern double  eval(), varvalue(), chanvalue(), funvalue();
62 < extern double  argument(), getnum();
63 < extern double  (*eoper[])();
64 < extern int  getinum();
65 < extern char  *getname(), *qualname(), *argfun();
66 < extern char  *setcontext(), *pushcontext(), *popcontext();
67 < extern EPNODE  *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext();
68 < extern EPNODE  *getdefn(), *getchan();
69 < extern EPNODE  *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst();
70 < extern VARDEF  *varinsert(), *varlookup(), *argf();
71 < extern LIBR  *liblookup();
61 > #define  evalue(ep)     (*eoper[(ep)->type])(ep)
62 >
63 > #define  dfn_name(ep)   ((ep)->v.kid->type == SYM ? \
64 >                        (ep)->v.kid->v.name : \
65 >                        (ep)->v.kid->v.kid->v.name)
66 >
67 >                                        /* flags to set in esupport */
68 > #define  E_VARIABLE     001
69 > #define  E_FUNCTION     002
70 > #define  E_INCHAN       004
71 > #define  E_OUTCHAN      010
72 > #define  E_RCONST       020
73 > #define  E_REDEFW       040
74 >
75 > extern double  (*eoper[])(EPNODE *);
76   extern unsigned long  eclock;
77 + extern unsigned int  esupport;
78 + extern EPNODE   *curfunc;
79   extern int  nextc;
80 + extern int  eofc;
81 +                                        /* defined in biggerlib.c */
82 + extern void biggerlib(void);
83 +                                        /* defined in caldefn.c */
84 + extern void     fcompile(char *fname);
85 + extern void     scompile(char *str, char *fname, int ln);
86 + extern double   varvalue(char *vname);
87 + extern double   evariable(EPNODE *ep);
88 + extern void     varset(char *vname, int assign, double val);
89 + extern void     dclear(char *name);
90 + extern void     dremove(char *name);
91 + extern int      vardefined(char *name);
92 + extern char     *calcontext(char *ctx);
93 + extern char     *pushcontext(char *ctx);
94 + extern char     *popcontext(void);
95 + extern char     *qualname(char *nam, int lvl);
96 + extern int      incontext(char *qn);
97 + extern void     chanout(void (*cs)(int n, double v));
98 + extern void     doptimize(int activate);
99 + extern void     dcleanup(int lvl);
100 + extern EPNODE   *dlookup(char *name);
101 + extern VARDEF   *varlookup(char *name);
102 + extern VARDEF   *varinsert(char *name);
103 + extern void     varfree(VARDEF *ln);
104 + extern EPNODE   *dfirst(void);
105 + extern EPNODE   *dnext(void);
106 + extern EPNODE   *dpop(char *name);
107 + extern void     dpush(char *nm, EPNODE *ep);
108 + extern void     addchan(EPNODE *sp);
109 + extern void     getstatement(void);
110 + extern EPNODE   *getdefn(void);
111 + extern EPNODE   *getchan(void);
112 +                                        /* defined in calexpr.c */
113 + extern EPNODE   *eparse(char *expr);
114 + extern double   eval(char *expr);
115 + extern int      epcmp(EPNODE *ep1, EPNODE *ep2);
116 + extern void     epfree(EPNODE *epar, int frep);
117 + extern void     epoptimize(EPNODE *epar);
118 + extern EPNODE   *ekid(EPNODE *ep, int n);
119 + extern void     initfile(FILE *fp, char *fn, int ln);
120 + extern void     initstr(char *s, char *fn, int ln);
121 + extern void     getscanpos(char **fnp, int *lnp, char **spp, FILE **fpp);
122 + extern int      scan(void);
123 + extern char     *long2ascii(long l);
124 + extern void     syntax(char *err);
125 + extern void     addekid(EPNODE *ep, EPNODE *ek);
126 + extern char     *getname(void);
127 + extern int      getinum(void);
128 + extern double   getnum(void);
129 + extern EPNODE   *getE1(void);
130 + extern EPNODE   *getE2(void);
131 + extern EPNODE   *getE3(void);
132 + extern EPNODE   *getE4(void);
133 + extern EPNODE   *getE5(void);
134 + extern EPNODE   *rconst(EPNODE *epar);
135 + extern int      isconstvar(EPNODE *ep);
136 + extern int      isconstfun(EPNODE *ep);
137 +                                        /* defined in calfunc.c */
138 + extern int      fundefined(char *fname);
139 + extern double   funvalue(char *fname, int n, double *a);
140 + extern void     funset(char *fname, int nargs, int assign,
141 +                                double (*fptr)(char *));
142 + extern int      nargum(void);
143 + extern double   argument(int n);
144 + extern VARDEF   *argf(int n);
145 + extern char     *argfun(int n);
146 + extern double   efunc(EPNODE *ep);
147 + extern LIBR     *liblookup(char *fname);
148 + extern void     libupdate(char *fn);
149 +                                        /* defined in calprnt.c */
150 + extern void     eprint(EPNODE *ep, FILE *fp);
151 + extern void     dprint(char *name, FILE *fp);
152 +                                        /* defined by client */
153 + extern double   chanvalue(int n);
154  
155 < #define  evalue(ep)     (*eoper[(ep)->type])(ep)
155 > #ifdef __cplusplus
156 > }
157 > #endif
158 > #endif /* _RAD_CALCOMP_H_ */
159 >

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines