--- ray/src/common/calcomp.h 2003/04/27 06:08:03 2.8 +++ ray/src/common/calcomp.h 2008/05/01 16:42:05 2.22 @@ -1,17 +1,23 @@ -/* RCSid $Id: calcomp.h,v 2.8 2003/04/27 06:08:03 greg Exp $ */ +/* RCSid $Id: calcomp.h,v 2.22 2008/05/01 16:42:05 greg Exp $ */ /* * calcomp.h - header file for expression parser. */ +#ifndef _RAD_CALCOMP_H_ +#define _RAD_CALCOMP_H_ -#include "copyright.h" +#include +#ifdef __cplusplus +extern "C" { +#endif + #define VAR 1 #define NUM 2 #define UMINUS 3 #define CHAN 4 #define FUNC 5 #define ARG 6 -#define TICK 7 +#define CLKT 7 #define SYM 8 /* also: '+', '-', '*', '/', '^', '=', ':' */ @@ -19,12 +25,10 @@ typedef struct { char *fname; /* function name */ short nargs; /* # of required arguments */ short atyp; /* assignment type (':' or '=') */ - double (*f)(); /* pointer to function */ + double (*f)(char *); /* pointer to function */ } LIBR; /* a library function */ typedef struct epnode { - int type; /* node type */ - struct epnode *sibling; /* next child this level */ union { struct epnode *kid; /* first child */ double num; /* number */ @@ -39,11 +43,13 @@ typedef struct epnode { struct vardef *next; /* next in hash list */ } *ln; /* link */ } v; /* value */ + struct epnode *sibling; /* next child this level */ + int type; /* node type */ } EPNODE; /* an expression node */ typedef struct vardef VARDEF; /* a variable definition */ -#define MAXWORD 127 /* maximum word/id length */ +#define RMAXWORD 127 /* maximum word/id length */ #define CNTXMARK '`' /* context mark */ #define isid(c) (isalnum(c) || (c) == '_' || \ @@ -59,97 +65,22 @@ typedef struct vardef VARDEF; /* a variable definitio #define E_RCONST 020 #define E_REDEFW 040 -extern double (*eoper[])(); +extern double (*eoper[])(EPNODE *); extern unsigned long eclock; extern unsigned int esupport; extern EPNODE *curfunc; extern int nextc; +extern int eofc; -#ifdef NOPROTO + /* defined in biggerlib.c */ +extern void biggerlib(void); -extern void fcompile(); -extern void scompile(); -extern double varvalue(); -extern double evariable(); -extern void varset(); -extern void dclear(); -extern void dremove(); -extern int vardefined(); -extern char *setcontext(); -extern char *pushcontext(); -extern char *popcontext(); -extern char *qualname(); -extern int incontext(); -extern void chanout(); -extern void dcleanup(); -extern EPNODE *dlookup(); -extern VARDEF *varlookup(); -extern VARDEF *varinsert(); -extern void varfree(); -extern EPNODE *dfirst(); -extern EPNODE *dnext(); -extern EPNODE *dpop(); -extern void dpush(); -extern void addchan(); -extern void getstatement(); -extern EPNODE *getdefn(); -extern EPNODE *getchan(); -extern EPNODE *eparse(); -extern double eval(); -extern int epcmp(); -extern void epfree(); -extern EPNODE *ekid(); -extern int nekids(); -extern void initfile(); -extern void initstr(); -extern void getscanpos(); -extern int scan(); -extern char *long2ascii(); -extern void syntax(); -extern void addekid(); -extern char *getname(); -extern int getinum(); -extern double getnum(); -extern EPNODE *getE1(); -extern EPNODE *getE2(); -extern EPNODE *getE3(); -extern EPNODE *getE4(); -extern EPNODE *getE5(); -extern EPNODE *rconst(); -extern int isconstvar(); -extern int isconstfun(); -extern int fundefined(); -extern double funvalue(); -extern void funset(); -extern int nargum(); -extern double argument(); -extern VARDEF *argf(); -extern char *argfun(); -extern double efunc(); -extern LIBR *liblookup(); -extern void libupdate(); -extern void eprint(); -extern void dprint(); -extern char *savestr(); -extern void freestr(); -extern int shash(); -extern char *emalloc(); -extern char *ecalloc(); -extern char *erealloc(); -extern void efree(); -extern void eputs(); -extern void wputs(); -extern void quit(); - -extern double chanvalue(); - -#else /* defined in caldefn.c */ extern void fcompile(char *fname); extern void scompile(char *str, char *fname, int ln); extern double varvalue(char *vname); extern double evariable(EPNODE *ep); -extern void varset(char *fname, int assign, double val); +extern void varset(char *vname, int assign, double val); extern void dclear(char *name); extern void dremove(char *name); extern int vardefined(char *name); @@ -169,9 +100,9 @@ extern EPNODE *dnext(void); extern EPNODE *dpop(char *name); extern void dpush(char *nm, EPNODE *ep); extern void addchan(EPNODE *sp); -extern void getstatement(); -extern EPNODE *getdefn(); -extern EPNODE *getchan(); +extern void getstatement(void); +extern EPNODE *getdefn(void); +extern EPNODE *getchan(void); /* defined in calexpr.c */ extern EPNODE *eparse(char *expr); extern double eval(char *expr); @@ -200,7 +131,8 @@ extern int isconstfun(EPNODE *ep); /* defined in calfunc.c */ extern int fundefined(char *fname); extern double funvalue(char *fname, int n, double *a); -extern void funset(char *fname, int nargs, int assign, double (*fptr)()); +extern void funset(char *fname, int nargs, int assign, + double (*fptr)(char *)); extern int nargum(void); extern double argument(int n); extern VARDEF *argf(int n); @@ -211,20 +143,12 @@ extern void libupdate(char *fn); /* defined in calprnt.c */ extern void eprint(EPNODE *ep, FILE *fp); extern void dprint(char *name, FILE *fp); - /* defined in savestr.c */ -extern char *savestr(char *str); -extern void freestr(char *s); -extern int shash(char *s); - /* defined in ealloc.c */ -extern char *emalloc(unsigned int n); -extern char *ecalloc(unsigned int ne, unsigned int es); -extern char *erealloc(char *cp, unsigned int n); -extern void efree(char *cp); - /* miscellaneous */ -extern void eputs(char *s); -extern void wputs(char *s); -extern void quit(int code); /* defined by client */ extern double chanvalue(int n); + +#ifdef __cplusplus +} #endif +#endif /* _RAD_CALCOMP_H_ */ +