xref: /plan9/sys/src/cmd/hoc/hoc.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier typedef void (*Inst)(void);
23e12c5d1SDavid du Colombier #define	STOP	(Inst) 0
33e12c5d1SDavid du Colombier 
4*7dd7cddfSDavid du Colombier typedef struct Symbol	Symbol;
5*7dd7cddfSDavid du Colombier typedef union Datum 	Datum;
6*7dd7cddfSDavid du Colombier typedef struct Formal	Formal;
7*7dd7cddfSDavid du Colombier typedef struct Saveval	Saveval;
8*7dd7cddfSDavid du Colombier typedef struct Fndefn	Fndefn;
9*7dd7cddfSDavid du Colombier typedef union Symval	Symval;
10*7dd7cddfSDavid du Colombier 
11*7dd7cddfSDavid du Colombier union Symval { /* value of a symbol */
123e12c5d1SDavid du Colombier 	double	val;		/* VAR */
133e12c5d1SDavid du Colombier 	double	(*ptr)(double);	/* BLTIN */
14*7dd7cddfSDavid du Colombier 	Fndefn	*defn;		/* FUNCTION, PROCEDURE */
153e12c5d1SDavid du Colombier 	char	*str;		/* STRING */
16*7dd7cddfSDavid du Colombier };
17*7dd7cddfSDavid du Colombier 
18*7dd7cddfSDavid du Colombier struct Symbol {	/* symbol table entry */
19*7dd7cddfSDavid du Colombier 	char	*name;
20*7dd7cddfSDavid du Colombier 	long	type;
21*7dd7cddfSDavid du Colombier 	Symval u;
223e12c5d1SDavid du Colombier 	struct Symbol	*next;	/* to link to another */
23*7dd7cddfSDavid du Colombier };
243e12c5d1SDavid du Colombier Symbol	*install(char*, int, double), *lookup(char*);
253e12c5d1SDavid du Colombier 
26*7dd7cddfSDavid du Colombier union Datum {	/* interpreter stack type */
273e12c5d1SDavid du Colombier 	double	val;
283e12c5d1SDavid du Colombier 	Symbol	*sym;
29*7dd7cddfSDavid du Colombier };
30*7dd7cddfSDavid du Colombier 
31*7dd7cddfSDavid du Colombier struct Saveval {	/* saved value of variable */
32*7dd7cddfSDavid du Colombier 	Symval	val;
33*7dd7cddfSDavid du Colombier 	long		type;
34*7dd7cddfSDavid du Colombier 	Saveval	*next;
35*7dd7cddfSDavid du Colombier };
36*7dd7cddfSDavid du Colombier 
37*7dd7cddfSDavid du Colombier struct Formal {	/* formal parameter */
38*7dd7cddfSDavid du Colombier 	Symbol	*sym;
39*7dd7cddfSDavid du Colombier 	Saveval	*save;
40*7dd7cddfSDavid du Colombier 	Formal	*next;
41*7dd7cddfSDavid du Colombier };
42*7dd7cddfSDavid du Colombier 
43*7dd7cddfSDavid du Colombier struct Fndefn {	/* formal parameter */
44*7dd7cddfSDavid du Colombier 	Inst	*code;
45*7dd7cddfSDavid du Colombier 	Formal	*formals;
46*7dd7cddfSDavid du Colombier 	int	nargs;
47*7dd7cddfSDavid du Colombier };
48*7dd7cddfSDavid du Colombier 
49*7dd7cddfSDavid du Colombier extern	Formal *formallist(Symbol*, Formal*);
503e12c5d1SDavid du Colombier extern	double Fgetd(int);
513e12c5d1SDavid du Colombier extern	int moreinput(void);
52*7dd7cddfSDavid du Colombier extern	void restore(Symbol*);
53*7dd7cddfSDavid du Colombier extern	void restoreall(void);
543e12c5d1SDavid du Colombier extern	void execerror(char*, char*);
55*7dd7cddfSDavid du Colombier extern	void define(Symbol*, Formal*), verify(Symbol*);
563e12c5d1SDavid du Colombier extern	Datum pop(void);
573e12c5d1SDavid du Colombier extern	void initcode(void), push(Datum), xpop(void), constpush(void);
583e12c5d1SDavid du Colombier extern	void varpush(void);
593e12c5d1SDavid du Colombier extern	void eval(void), add(void), sub(void), mul(void), div(void), mod(void);
603e12c5d1SDavid du Colombier extern	void negate(void), power(void);
613e12c5d1SDavid du Colombier extern	void addeq(void), subeq(void), muleq(void), diveq(void), modeq(void);
623e12c5d1SDavid du Colombier 
633e12c5d1SDavid du Colombier extern	Inst *progp, *progbase, prog[], *code(Inst);
643e12c5d1SDavid du Colombier extern	void assign(void), bltin(void), varread(void);
653e12c5d1SDavid du Colombier extern	void prexpr(void), prstr(void);
663e12c5d1SDavid du Colombier extern	void gt(void), lt(void), eq(void), ge(void), le(void), ne(void);
673e12c5d1SDavid du Colombier extern	void and(void), or(void), not(void);
683e12c5d1SDavid du Colombier extern	void ifcode(void), whilecode(void), forcode(void);
693e12c5d1SDavid du Colombier extern	void call(void), arg(void), argassign(void);
703e12c5d1SDavid du Colombier extern	void funcret(void), procret(void);
713e12c5d1SDavid du Colombier extern	void preinc(void), predec(void), postinc(void), postdec(void);
723e12c5d1SDavid du Colombier extern	void execute(Inst*);
733e12c5d1SDavid du Colombier extern	void printtop(void);
743e12c5d1SDavid du Colombier 
753e12c5d1SDavid du Colombier extern double	Log(double), Log10(double), Gamma(double), Sqrt(double), Exp(double);
763e12c5d1SDavid du Colombier extern double	Asin(double), Acos(double), Sinh(double), Cosh(double), integer(double);
773e12c5d1SDavid du Colombier extern double	Pow(double, double);
783e12c5d1SDavid du Colombier 
793e12c5d1SDavid du Colombier extern	void init(void);
803e12c5d1SDavid du Colombier extern	int yyparse(void);
813e12c5d1SDavid du Colombier extern	void execerror(char*, char*);
823e12c5d1SDavid du Colombier extern	void *emalloc(unsigned);
83