1 |
< |
/* Copyright (c) 1986 Regents of the University of California */ |
1 |
> |
/* Copyright (c) 1992 Regents of the University of California */ |
2 |
|
|
3 |
|
/* SCCSid "$SunId$ LBL" */ |
4 |
|
|
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 |
< |
/* also: '+', '-', '*', '/', '^', '=' */ |
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 |
> |
/* also: '+', '-', '*', '/', '^', '=', ':' */ |
19 |
|
|
20 |
|
typedef struct { |
21 |
|
char *fname; /* function name */ |
22 |
< |
int nargs; /* # of required arguments */ |
22 |
> |
short nargs; /* # of required arguments */ |
23 |
> |
short atyp; /* assignment type (':' or '=') */ |
24 |
|
double (*f)(); /* pointer to function */ |
25 |
|
} LIBR; /* a library function */ |
26 |
|
|
27 |
|
typedef struct epnode { |
28 |
< |
int type; /* node type */ |
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 */ |
32 |
> |
double num; /* number */ |
33 |
|
char *name; /* symbol name */ |
34 |
|
int chan; /* channel number */ |
35 |
< |
long tick; /* timestamp */ |
35 |
> |
unsigned long tick; /* timestamp */ |
36 |
|
struct vardef { |
37 |
|
char *name; /* variable name */ |
38 |
< |
int nlinks; /* number of references */ |
38 |
> |
int nlinks; /* number of references */ |
39 |
|
struct epnode *def; /* definition */ |
40 |
|
LIBR *lib; /* library definition */ |
41 |
|
struct vardef *next; /* next in hash list */ |
45 |
|
|
46 |
|
typedef struct vardef VARDEF; /* a variable definition */ |
47 |
|
|
48 |
+ |
#define MAXWORD 127 /* maximum word/id length */ |
49 |
+ |
#define CNTXMARK '`' /* context mark */ |
50 |
+ |
|
51 |
+ |
#define isid(c) (isalnum(c) || (c) == '_' || \ |
52 |
+ |
(c) == '.' || (c) == CNTXMARK) |
53 |
+ |
|
54 |
|
extern double eval(), varvalue(), chanvalue(), funvalue(); |
55 |
|
extern double argument(), getnum(); |
56 |
|
extern double (*eoper[])(); |
57 |
|
extern int getinum(); |
58 |
< |
extern char *getname(), *argfun(); |
58 |
> |
extern char *getname(), *qualname(), *argfun(); |
59 |
> |
extern char *setcontext(), *pushcontext(), *popcontext(); |
60 |
|
extern EPNODE *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext(); |
61 |
|
extern EPNODE *getdefn(), *getchan(); |
62 |
|
extern EPNODE *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst(); |
63 |
|
extern VARDEF *varinsert(), *varlookup(), *argf(); |
64 |
|
extern LIBR *liblookup(); |
65 |
< |
extern long eclock; |
65 |
> |
extern unsigned long eclock; |
66 |
|
extern int nextc; |
59 |
– |
extern int errno; |
67 |
|
|
68 |
< |
#define evalue(ep) (*eoper[(ep)->type])(ep) |
68 |
> |
#define evalue(ep) (*eoper[(ep)->type])(ep) |