| init.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
| git clone git://git.suckless.org/9base | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| init.c (1440B) | |
| --- | |
| 1 #include <u.h> | |
| 2 #include <libc.h> | |
| 3 #include "hoc.h" | |
| 4 #include "y.tab.h" | |
| 5 | |
| 6 static struct { /* Keywords */ | |
| 7 char *name; | |
| 8 int kval; | |
| 9 } keywords[] = { | |
| 10 "proc", PROC, | |
| 11 "func", FUNC, | |
| 12 "return", RETURN, | |
| 13 "if", IF, | |
| 14 "else", ELSE, | |
| 15 "while", WHILE, | |
| 16 "for", FOR, | |
| 17 "print", PRINT, | |
| 18 "read", READ, | |
| 19 0, 0 | |
| 20 }; | |
| 21 | |
| 22 static struct { /* Constants */ | |
| 23 char *name; | |
| 24 double cval; | |
| 25 } consts[] = { | |
| 26 "PI", 3.14159265358979323846, | |
| 27 "E", 2.71828182845904523536, | |
| 28 "GAMMA", 0.57721566490153286060, /* Euler */ | |
| 29 "DEG", 57.29577951308232087680, /* deg/radian */ | |
| 30 "PHI", 1.61803398874989484820, /* golden ratio */ | |
| 31 0, 0 | |
| 32 }; | |
| 33 | |
| 34 static struct { /* Built-ins */ | |
| 35 char *name; | |
| 36 double (*func)(double); | |
| 37 } builtins[] = { | |
| 38 "sin", sin, | |
| 39 "cos", cos, | |
| 40 "tan", tan, | |
| 41 "atan", atan, | |
| 42 "asin", Asin, /* checks range */ | |
| 43 "acos", Acos, /* checks range */ | |
| 44 "sinh", Sinh, /* checks range */ | |
| 45 "cosh", Cosh, /* checks range */ | |
| 46 "tanh", tanh, | |
| 47 "log", Log, /* checks range */ | |
| 48 "log10", Log10, /* checks range */ | |
| 49 "exp", Exp, /* checks range */ | |
| 50 "sqrt", Sqrt, /* checks range */ | |
| 51 "int", integer, | |
| 52 "abs", fabs, | |
| 53 0, 0 | |
| 54 }; | |
| 55 | |
| 56 void | |
| 57 init(void) /* install constants and built-ins in table */ | |
| 58 { | |
| 59 int i; | |
| 60 Symbol *s; | |
| 61 for (i = 0; keywords[i].name; i++) | |
| 62 install(keywords[i].name, keywords[i].kval, 0.0); | |
| 63 for (i = 0; consts[i].name; i++) | |
| 64 install(consts[i].name, VAR, consts[i].cval); | |
| 65 for (i = 0; builtins[i].name; i++) { | |
| 66 s = install(builtins[i].name, BLTIN, 0.0); | |
| 67 s->u.ptr = builtins[i].func; | |
| 68 } | |
| 69 } |