Annotation of researchv10no/cmd/hoc/init.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.