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.8 by greg, Sun Apr 27 06:08:03 2003 UTC vs.
Revision 2.25 by greg, Fri Feb 23 03:47:57 2024 UTC

# Line 2 | Line 2
2   /*
3   *  calcomp.h - header file for expression parser.
4   */
5 + #ifndef _RAD_CALCOMP_H_
6 + #define _RAD_CALCOMP_H_
7  
8 < #include "copyright.h"
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 19 | 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 {
26    int  type;                  /* node type */
27    struct epnode  *sibling;    /* next child this level */
32      union {
33          struct epnode  *kid;    /* first child */
34          double  num;            /* number */
# Line 39 | 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        127             /* 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) == '_' || \
# Line 51 | Line 60 | typedef struct vardef  VARDEF; /* a variable definitio
60  
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
# Line 59 | Line 72 | typedef struct vardef  VARDEF; /* a variable definitio
72   #define  E_RCONST       020
73   #define  E_REDEFW       040
74  
75 < extern double  (*eoper[])();
75 > extern double  (*eoper[])(EPNODE *);
76   extern unsigned long  eclock;
77   extern unsigned int  esupport;
78   extern EPNODE   *curfunc;
79   extern int  nextc;
80 <
81 < #ifdef NOPROTO
82 <
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
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 *fname, int assign, double val);
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     *setcontext(char *ctx);
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);
# Line 169 | Line 106 | 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();
110 < extern EPNODE   *getdefn();
111 < extern EPNODE   *getchan();
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);
116 > extern void     epfree(EPNODE *epar, int frep);
117 > extern void     epoptimize(EPNODE *epar);
118   extern EPNODE   *ekid(EPNODE *ep, int n);
181 extern int      nekids(EPNODE *ep);
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 *ekid);
125 > extern void     addekid(EPNODE *ep, EPNODE *ek);
126   extern char     *getname(void);
127   extern int      getinum(void);
128   extern double   getnum(void);
# Line 200 | Line 137 | 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, double (*fptr)());
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);
# Line 211 | Line 149 | 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);
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);
152                                          /* defined by client */
153   extern double   chanvalue(int n);
154  
155 + #ifdef __cplusplus
156 + }
157   #endif
158 + #endif /* _RAD_CALCOMP_H_ */
159 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines