]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/hoc/hoc.h
abaco: cleanup, handle image/x-icon, don't use backspace as a hotkey, and remove...
[plan9front.git] / sys / src / cmd / hoc / hoc.h
1 typedef void (*Inst)(void);
2 #define STOP    (Inst) 0
3
4 typedef struct Symbol   Symbol;
5 typedef union Datum     Datum;
6 typedef struct Formal   Formal;
7 typedef struct Saveval  Saveval;
8 typedef struct Fndefn   Fndefn;
9 typedef union Symval    Symval;
10
11 union Symval { /* value of a symbol */
12         double  val;            /* VAR */
13         double  (*ptr)(double); /* BLTIN */
14         Fndefn  *defn;          /* FUNCTION, PROCEDURE */
15         char    *str;           /* STRING */
16 };
17
18 struct Symbol { /* symbol table entry */
19         char    *name;
20         long    type;
21         Symval u;
22         struct Symbol   *next;  /* to link to another */
23 };
24 Symbol  *install(char*, int, double), *lookup(char*);
25
26 union Datum {   /* interpreter stack type */
27         double  val;
28         Symbol  *sym;
29 };
30
31 struct Saveval {        /* saved value of variable */
32         Symval  val;
33         long            type;
34         Saveval *next;
35 };
36
37 struct Formal { /* formal parameter */
38         Symbol  *sym;
39         Saveval *save;
40         Formal  *next;
41 };
42
43 struct Fndefn { /* formal parameter */
44         Inst    *code;
45         Formal  *formals;
46         int     nargs;
47 };
48
49 extern  Formal *formallist(Symbol*, Formal*);
50 extern  double Fgetd(int);
51 extern  int moreinput(void);
52 extern  void restore(Symbol*);
53 extern  void restoreall(void);
54 extern  void execerror(char*, char*);
55 extern  void define(Symbol*, Formal*), verify(Symbol*);
56 extern  Datum pop(void);
57 extern  void initcode(void), push(Datum), xpop(void), constpush(void);
58 extern  void varpush(void);
59 extern  void eval(void), add(void), sub(void), mul(void), div(void), mod(void);
60 extern  void negate(void), power(void);
61 extern  void addeq(void), subeq(void), muleq(void), diveq(void), modeq(void);
62
63 extern  Inst *progp, *progbase, prog[], *code(Inst);
64 extern  void assign(void), bltin(void), varread(void);
65 extern  void prexpr(void), prstr(void);
66 extern  void gt(void), lt(void), eq(void), ge(void), le(void), ne(void);
67 extern  void and(void), or(void), not(void);
68 extern  void ifcode(void), whilecode(void), forcode(void);
69 extern  void call(void), arg(void), argassign(void);
70 extern  void funcret(void), procret(void);
71 extern  void preinc(void), predec(void), postinc(void), postdec(void);
72 extern  void execute(Inst*);
73 extern  void printtop(void);
74
75 extern double   Log(double), Log10(double), Gamma(double), Sqrt(double), Exp(double);
76 extern double   Asin(double), Acos(double), Sinh(double), Cosh(double), integer(double);
77 extern double   Pow(double, double);
78
79 extern  void init(void);
80 extern  int yyparse(void);
81 extern  void execerror(char*, char*);
82 extern  void *emalloc(unsigned);