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.6 by greg, Sat Feb 22 02:07:21 2003 UTC vs.
Revision 2.24 by greg, Tue Sep 26 18:33:14 2023 UTC

# Line 1 | Line 1
1 < /* RCSid: $Id$ */
1 > /* RCSid $Id$ */
2   /*
3   *  calcomp.h - header file for expression parser.
4   */
5 + #ifndef _RAD_CALCOMP_H_
6 + #define _RAD_CALCOMP_H_
7  
8 < /* ====================================================================
9 < * The Radiance Software License, Version 1.0
10 < *
11 < * Copyright (c) 1990 - 2002 The Regents of the University of California,
12 < * through Lawrence Berkeley National Laboratory.   All rights reserved.
13 < *
12 < * Redistribution and use in source and binary forms, with or without
13 < * modification, are permitted provided that the following conditions
14 < * are met:
15 < *
16 < * 1. Redistributions of source code must retain the above copyright
17 < *         notice, this list of conditions and the following disclaimer.
18 < *
19 < * 2. Redistributions in binary form must reproduce the above copyright
20 < *       notice, this list of conditions and the following disclaimer in
21 < *       the documentation and/or other materials provided with the
22 < *       distribution.
23 < *
24 < * 3. The end-user documentation included with the redistribution,
25 < *           if any, must include the following acknowledgment:
26 < *             "This product includes Radiance software
27 < *                 (http://radsite.lbl.gov/)
28 < *                 developed by the Lawrence Berkeley National Laboratory
29 < *               (http://www.lbl.gov/)."
30 < *       Alternately, this acknowledgment may appear in the software itself,
31 < *       if and wherever such third-party acknowledgments normally appear.
32 < *
33 < * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
34 < *       and "The Regents of the University of California" must
35 < *       not be used to endorse or promote products derived from this
36 < *       software without prior written permission. For written
37 < *       permission, please contact [email protected].
38 < *
39 < * 5. Products derived from this software may not be called "Radiance",
40 < *       nor may "Radiance" appear in their name, without prior written
41 < *       permission of Lawrence Berkeley National Laboratory.
42 < *
43 < * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
44 < * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
45 < * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
46 < * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
47 < * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48 < * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49 < * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
50 < * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
51 < * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
52 < * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
53 < * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
54 < * SUCH DAMAGE.
55 < * ====================================================================
56 < *
57 < * This software consists of voluntary contributions made by many
58 < * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
59 < * information on Lawrence Berkeley National Laboratory, please see
60 < * <http://www.lbl.gov/>.
61 < */
62 <                                /* EPNODE types */
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 74 | 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 {
81    int  type;                  /* node type */
82    struct epnode  *sibling;    /* next child this level */
32      union {
33          struct epnode  *kid;    /* first child */
34          double  num;            /* number */
# Line 94 | 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 +    int  type;                  /* node type */
48   }  EPNODE;      /* an expression node */
49  
50   typedef struct vardef  VARDEF;  /* a variable definition */
51  
52 < #define  MAXWORD        127             /* maximum word/id length */
52 > #define  RMAXWORD       127             /* maximum word/id length */
53   #define  CNTXMARK       '`'             /* context mark */
54  
55   #define  isid(c)        (isalnum(c) || (c) == '_' || \
# Line 106 | Line 57 | typedef struct vardef  VARDEF; /* a variable definitio
57  
58   #define  evalue(ep)     (*eoper[(ep)->type])(ep)
59  
60 + #define  dfn_name(ep)   ((ep)->v.kid->type == SYM ? \
61 +                        (ep)->v.kid->v.name : \
62 +                        (ep)->v.kid->v.kid->v.name)
63 +
64                                          /* flags to set in esupport */
65   #define  E_VARIABLE     001
66   #define  E_FUNCTION     002
# Line 114 | Line 69 | typedef struct vardef  VARDEF; /* a variable definitio
69   #define  E_RCONST       020
70   #define  E_REDEFW       040
71  
72 < extern double  (*eoper[])();
72 > extern double  (*eoper[])(EPNODE *);
73   extern unsigned long  eclock;
74   extern unsigned int  esupport;
75   extern EPNODE   *curfunc;
76   extern int  nextc;
77 <
78 < #ifdef NOPROTO
79 <
125 < extern void     fcompile();
126 < extern void     scompile();
127 < extern double   varvalue();
128 < extern double   evariable();
129 < extern void     varset();
130 < extern void     dclear();
131 < extern void     dremove();
132 < extern int      vardefined();
133 < extern char     *setcontext();
134 < extern char     *pushcontext();
135 < extern char     *popcontext();
136 < extern char     *qualname();
137 < extern int      incontext();
138 < extern void     chanout();
139 < extern void     dcleanup();
140 < extern EPNODE   *dlookup();
141 < extern VARDEF   *varlookup();
142 < extern VARDEF   *varinsert();
143 < extern void     varfree();
144 < extern EPNODE   *dfirst();
145 < extern EPNODE   *dnext();
146 < extern EPNODE   *dpop();
147 < extern void     dpush();
148 < extern void     addchan();
149 < extern void     getstatement();
150 < extern EPNODE   *getdefn();
151 < extern EPNODE   *getchan();
152 < extern EPNODE   *eparse();
153 < extern double   eval();
154 < extern int      epcmp();
155 < extern void     epfree();
156 < extern EPNODE   *ekid();
157 < extern int      nekids();
158 < extern void     initfile();
159 < extern void     initstr();
160 < extern void     getscanpos();
161 < extern int      scan();
162 < extern char     *long2ascii();
163 < extern void     syntax();
164 < extern void     addekid();
165 < extern char     *getname();
166 < extern int      getinum();
167 < extern double   getnum();
168 < extern EPNODE   *getE1();
169 < extern EPNODE   *getE2();
170 < extern EPNODE   *getE3();
171 < extern EPNODE   *getE4();
172 < extern EPNODE   *getE5();
173 < extern EPNODE   *rconst();
174 < extern int      isconstvar();
175 < extern int      isconstfun();
176 < extern int      fundefined();
177 < extern double   funvalue();
178 < extern void     funset();
179 < extern int      nargum();
180 < extern double   argument();
181 < extern VARDEF   *argf();
182 < extern char     *argfun();
183 < extern double   efunc();
184 < extern LIBR     *liblookup();
185 < extern void     libupdate();
186 < extern void     eprint();
187 < extern void     dprint();
188 < extern char     *savestr();
189 < extern void     freestr();
190 < extern int      shash();
191 < extern char     *emalloc();
192 < extern char     *ecalloc();
193 < extern char     *erealloc();
194 < extern void     efree();
195 < extern void     eputs();
196 < extern void     wputs();
197 < extern void     quit();
198 <
199 < extern double   chanvalue();
200 <
201 < #else
77 > extern int  eofc;
78 >                                        /* defined in biggerlib.c */
79 > extern void biggerlib(void);
80                                          /* defined in caldefn.c */
81   extern void     fcompile(char *fname);
82   extern void     scompile(char *str, char *fname, int ln);
83   extern double   varvalue(char *vname);
84   extern double   evariable(EPNODE *ep);
85 < extern void     varset(char *fname, int assign, double val);
85 > extern void     varset(char *vname, int assign, double val);
86   extern void     dclear(char *name);
87   extern void     dremove(char *name);
88   extern int      vardefined(char *name);
89 < extern char     *setcontext(char *ctx);
89 > extern char     *calcontext(char *ctx);
90   extern char     *pushcontext(char *ctx);
91   extern char     *popcontext(void);
92   extern char     *qualname(char *nam, int lvl);
93   extern int      incontext(char *qn);
94 < extern void     chanout(int (*cs)());
94 > extern void     chanout(void (*cs)(int n, double v));
95   extern void     dcleanup(int lvl);
96   extern EPNODE   *dlookup(char *name);
97   extern VARDEF   *varlookup(char *name);
# Line 224 | Line 102 | extern EPNODE  *dnext(void);
102   extern EPNODE   *dpop(char *name);
103   extern void     dpush(char *nm, EPNODE *ep);
104   extern void     addchan(EPNODE *sp);
105 < extern void     getstatement();
106 < extern EPNODE   *getdefn();
107 < extern EPNODE   *getchan();
105 > extern void     getstatement(void);
106 > extern EPNODE   *getdefn(void);
107 > extern EPNODE   *getchan(void);
108                                          /* defined in calexpr.c */
109   extern EPNODE   *eparse(char *expr);
110   extern double   eval(char *expr);
# Line 255 | Line 133 | extern int     isconstfun(EPNODE *ep);
133                                          /* defined in calfunc.c */
134   extern int      fundefined(char *fname);
135   extern double   funvalue(char *fname, int n, double *a);
136 < extern void     funset(char *fname, int nargs, int assign, double (*fptr)());
136 > extern void     funset(char *fname, int nargs, int assign,
137 >                                double (*fptr)(char *));
138   extern int      nargum(void);
139   extern double   argument(int n);
140   extern VARDEF   *argf(int n);
# Line 266 | Line 145 | extern void    libupdate(char *fn);
145                                          /* defined in calprnt.c */
146   extern void     eprint(EPNODE *ep, FILE *fp);
147   extern void     dprint(char *name, FILE *fp);
269                                        /* defined in savestr.c */
270 extern char     *savestr(char *str);
271 extern void     freestr(char *s);
272 extern int      shash(char *s);
273                                        /* defined in ealloc.c */
274 extern char     *emalloc(unsigned int n);
275 extern char     *ecalloc(unsigned int ne, unsigned int es);
276 extern char     *erealloc(char *cp, unsigned int n);
277 extern void     efree(char *cp);
278                                        /* miscellaneous */
279 extern void     eputs(char *s);
280 extern void     wputs(char *s);
281 extern void     quit(int code);
148                                          /* defined by client */
149   extern double   chanvalue(int n);
150  
151 + #ifdef __cplusplus
152 + }
153   #endif
154 + #endif /* _RAD_CALCOMP_H_ */
155 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines