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;
}
}