xref: /plan9-contrib/sys/src/cmd/hoc/hoc.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 typedef void (*Inst)(void);
2 #define	STOP	(Inst) 0
3 
4 typedef struct Symbol {	/* symbol table entry */
5 	char	*name;
6 	long	type;
7 	union {
8 		double	val;		/* VAR */
9 		double	(*ptr)(double);	/* BLTIN */
10 		Inst	*defn;		/* FUNCTION, PROCEDURE */
11 		char	*str;		/* STRING */
12 	} u;
13 	struct Symbol	*next;	/* to link to another */
14 } Symbol;
15 Symbol	*install(char*, int, double), *lookup(char*);
16 
17 typedef union Datum {	/* interpreter stack type */
18 	double	val;
19 	Symbol	*sym;
20 } Datum;
21 extern	double Fgetd(int);
22 extern	int moreinput(void);
23 extern	void execerror(char*, char*);
24 extern	void define(Symbol*), verify(Symbol*);
25 extern	Datum pop(void);
26 extern	void initcode(void), push(Datum), xpop(void), constpush(void);
27 extern	void varpush(void);
28 extern	void eval(void), add(void), sub(void), mul(void), div(void), mod(void);
29 extern	void negate(void), power(void);
30 extern	void addeq(void), subeq(void), muleq(void), diveq(void), modeq(void);
31 
32 extern	Inst *progp, *progbase, prog[], *code(Inst);
33 extern	void assign(void), bltin(void), varread(void);
34 extern	void prexpr(void), prstr(void);
35 extern	void gt(void), lt(void), eq(void), ge(void), le(void), ne(void);
36 extern	void and(void), or(void), not(void);
37 extern	void ifcode(void), whilecode(void), forcode(void);
38 extern	void call(void), arg(void), argassign(void);
39 extern	void funcret(void), procret(void);
40 extern	void preinc(void), predec(void), postinc(void), postdec(void);
41 extern	void argaddeq(void), argsubeq(void), argmuleq(void);
42 extern	void argdiveq(void), argmodeq(void);
43 extern	void execute(Inst*);
44 extern	void printtop(void);
45 
46 extern double	Log(double), Log10(double), Gamma(double), Sqrt(double), Exp(double);
47 extern double	Asin(double), Acos(double), Sinh(double), Cosh(double), integer(double);
48 extern double	Pow(double, double);
49 
50 extern	void init(void);
51 extern	int yyparse(void);
52 extern	void execerror(char*, char*);
53 extern	void *emalloc(unsigned);
54