| 1 |
greg |
1.1 |
/* Copyright (c) 1986 Regents of the University of California */
|
| 2 |
|
|
|
| 3 |
|
|
/* SCCSid "$SunId$ LBL" */
|
| 4 |
|
|
|
| 5 |
|
|
/*
|
| 6 |
|
|
* calcomp.h - header file for expression parser.
|
| 7 |
|
|
*
|
| 8 |
|
|
*/
|
| 9 |
|
|
/* EPNODE types */
|
| 10 |
|
|
#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 |
|
|
int type; /* node type */
|
| 29 |
|
|
struct epnode *sibling; /* next child this level */
|
| 30 |
|
|
union {
|
| 31 |
|
|
struct epnode *kid; /* first child */
|
| 32 |
|
|
double num; /* number */
|
| 33 |
|
|
char *name; /* symbol name */
|
| 34 |
|
|
int chan; /* channel number */
|
| 35 |
|
|
long tick; /* timestamp */
|
| 36 |
|
|
struct vardef {
|
| 37 |
|
|
char *name; /* variable name */
|
| 38 |
|
|
int nlinks; /* number of references */
|
| 39 |
|
|
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 |
|
|
extern double eval(), varvalue(), chanvalue(), funvalue();
|
| 49 |
|
|
extern double argument(), getnum();
|
| 50 |
|
|
extern double (*eoper[])();
|
| 51 |
|
|
extern int getinum();
|
| 52 |
|
|
extern char *getname(), *argfun();
|
| 53 |
|
|
extern EPNODE *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext();
|
| 54 |
|
|
extern EPNODE *getdefn(), *getchan();
|
| 55 |
|
|
extern EPNODE *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst();
|
| 56 |
|
|
extern VARDEF *varinsert(), *varlookup(), *argf();
|
| 57 |
|
|
extern LIBR *liblookup();
|
| 58 |
|
|
extern long eclock;
|
| 59 |
|
|
extern int nextc;
|
| 60 |
|
|
extern int errno;
|
| 61 |
|
|
|
| 62 |
|
|
#define evalue(ep) (*eoper[(ep)->type])(ep)
|