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 }