summaryrefslogtreecommitdiffstats
path: root/src/cmd/hoc/init.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-12-04 17:45:49 +0000
committerrsc <devnull@localhost>2003-12-04 17:45:49 +0000
commitc5b9ff9fa8f7a65939c3592572a3df1b60dcf57e (patch)
treedce9424b222c536cd425040c81195eb48ee4cf71 /src/cmd/hoc/init.c
parentc72688efcfdebe28798396239e0fab6e9fc47584 (diff)
downloadplan9port-c5b9ff9fa8f7a65939c3592572a3df1b60dcf57e.tar.gz
plan9port-c5b9ff9fa8f7a65939c3592572a3df1b60dcf57e.zip
add hoc
Diffstat (limited to 'src/cmd/hoc/init.c')
-rw-r--r--src/cmd/hoc/init.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/cmd/hoc/init.c b/src/cmd/hoc/init.c
new file mode 100644
index 00000000..e0745325
--- /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;
+ }
+}