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 |
greg |
1.7 |
#define MAXWORD 63 /* maximum word/id length */ |
49 |
greg |
1.6 |
#define CNTXMARK '`' /* context mark */ |
50 |
|
|
|
51 |
|
|
#define isid(c) (isalnum(c) || (c) == '_' || \ |
52 |
|
|
(c) == '.' || (c) == CNTXMARK) |
53 |
|
|
|
54 |
greg |
1.1 |
extern double eval(), varvalue(), chanvalue(), funvalue(); |
55 |
|
|
extern double argument(), getnum(); |
56 |
|
|
extern double (*eoper[])(); |
57 |
|
|
extern int getinum(); |
58 |
greg |
1.6 |
extern char *getname(), *qualname(), *setcontext(), *argfun(); |
59 |
greg |
1.1 |
extern EPNODE *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext(); |
60 |
|
|
extern EPNODE *getdefn(), *getchan(); |
61 |
|
|
extern EPNODE *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst(); |
62 |
|
|
extern VARDEF *varinsert(), *varlookup(), *argf(); |
63 |
|
|
extern LIBR *liblookup(); |
64 |
|
|
extern long eclock; |
65 |
|
|
extern int nextc; |
66 |
|
|
extern int errno; |
67 |
|
|
|
68 |
|
|
#define evalue(ep) (*eoper[(ep)->type])(ep) |