add hoc
diff --git a/src/cmd/hoc/init.c b/src/cmd/hoc/init.c
new file mode 100644
index 0000000..e074532
--- /dev/null
+++ b/src/cmd/hoc/init.c
@@ -0,0 +1,69 @@
+#include <u.h>
+#include <libc.h>
+#include "hoc.h"
+#include "y.tab.h"
+
+static struct {		/* Keywords */
+	char	*name;
+	int	kval;
+} keywords[] = {
+	"proc",		PROC,
+	"func",		FUNC,
+	"return",	RETURN,
+	"if",		IF,
+	"else",		ELSE,
+	"while",	WHILE,
+	"for",		FOR,
+	"print",	PRINT,
+	"read",		READ,
+	0,		0,
+};
+
+static struct {		/* Constants */
+	char *name;
+	double cval;
+} consts[] = {
+	"PI",	 3.14159265358979323846,
+	"E",	 2.71828182845904523536,
+	"GAMMA", 0.57721566490153286060,  /* Euler */
+	"DEG",	57.29577951308232087680,  /* deg/radian */
+	"PHI",   1.61803398874989484820,  /* golden ratio */
+	0,	 0
+};
+
+static struct {		/* Built-ins */
+	char *name;
+	double	(*func)(double);
+} builtins[] = {
+	"sin",	sin,
+	"cos",	cos,
+	"tan",	tan,
+	"atan",	atan,
+	"asin",	Asin,	/* checks range */
+	"acos", Acos,	/* checks range */
+	"sinh",	Sinh,	/* checks range */
+	"cosh",	Cosh,	/* checks range */
+	"tanh",	tanh,
+	"log",	Log,	/* checks range */
+	"log10", Log10,	/* checks range */
+	"exp",	Exp,	/* checks range */
+	"sqrt",	Sqrt,	/* checks range */
+	"int",	integer,
+	"abs",	fabs,
+	0,	0
+};
+
+void
+init(void)	/* install constants and built-ins in table */
+{
+	int i;
+	Symbol *s;
+	for (i = 0; keywords[i].name; i++)
+		install(keywords[i].name, keywords[i].kval, 0.0);
+	for (i = 0; consts[i].name; i++)
+		install(consts[i].name, VAR, consts[i].cval);
+	for (i = 0; builtins[i].name; i++) {
+		s = install(builtins[i].name, BLTIN, 0.0);
+		s->u.ptr = builtins[i].func;
+	}
+}