home *** CD-ROM | disk | FTP | other *** search
- # include "e.h"
- #include "e.def"
-
- #define TBLSIZE 100
-
- tbl *keytbl[TBLSIZE]; /* key words */
- tbl *restbl[TBLSIZE]; /* reserved words */
- tbl *deftbl[TBLSIZE]; /* user-defined names */
-
- struct {
- char *key;
- int keyval;
- } keyword[] ={
- "sub", SUB,
- "sup", SUP,
- ".EN", EOF,
- "from", FROM,
- "to", TO,
- "sum", SUM,
- "hat", HAT,
- "vec", VEC,
- "dyad", DYAD,
- "dot", DOT,
- "dotdot", DOTDOT,
- "bar", BAR,
- "tilde", TILDE,
- "under", UNDER,
- "prod", PROD,
- "int", INT,
- "integral", INT,
- "union", UNION,
- "inter", INTER,
- "pile", PILE,
- "lpile", LPILE,
- "cpile", CPILE,
- "rpile", RPILE,
- "over", OVER,
- "sqrt", SQRT,
- "above", ABOVE,
- "size", SIZE,
- "font", FONT,
- "fat", FAT,
- "roman", ROMAN,
- "italic", ITALIC,
- "bold", BOLD,
- "left", LEFT,
- "right", RIGHT,
- "delim", DELIM,
- "define", DEFINE,
-
- #ifdef NEQN /* make ndefine synonym for define, tdefine a no-op */
-
- "tdefine", TDEFINE,
- "ndefine", DEFINE,
-
- #else /* tdefine = define, ndefine = no-op */
-
- "tdefine", DEFINE,
- "ndefine", NDEFINE,
-
- #endif
-
- "gsize", GSIZE,
- ".gsize", GSIZE,
- "gfont", GFONT,
- "include", INCLUDE,
- "up", UP,
- "down", DOWN,
- "fwd", FWD,
- "back", BACK,
- "mark", MARK,
- "lineup", LINEUP,
- "matrix", MATRIX,
- "col", COL,
- "lcol", LCOL,
- "ccol", CCOL,
- "rcol", RCOL,
- 0, 0
- };
-
- struct {
- char *res;
- char *resval;
- } resword[] ={
- ">=", "\\(>=",
- "<=", "\\(<=",
- "==", "\\(==",
- "!=", "\\(!=",
- "+-", "\\(+-",
- "->", "\\(->",
- "<-", "\\(<-",
- "inf", "\\(if",
- "infinity", "\\(if",
- "partial", "\\(pd",
- "half", "\\f1\\(12\\fP",
- "prime", "\\f1\\(fm\\fP",
- "dollar", "\\f1$\\fP",
- "nothing", "",
- "times", "\\(mu",
- "del", "\\(gr",
- "grad", "\\(gr",
- #ifdef NEQN
- "<<", "<<",
- ">>", ">>",
- "approx", "~\b\\d~\\u",
- "cdot", "\\v'-.5'.\\v'.5'",
- "...", "...",
- ",...,", ",...,",
- #else
- "<<", "<\\h'-.3m'<",
- ">>", ">\\h'-.3m'>",
- "approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'",
- "cdot", "\\v'-.3m'.\\v'.3m'",
- "...", "\\v'-.3m'\\ .\\ .\\ .\\ \\v'.3m'",
- ",...,", ",\\ .\\ .\\ .\\ ,\\|",
- #endif
-
- "alpha", "\\(*a",
- "beta", "\\(*b",
- "gamma", "\\(*g",
- "GAMMA", "\\(*G",
- "delta", "\\(*d",
- "DELTA", "\\(*D",
- "epsilon", "\\(*e",
- "EPSILON", "\\f1E\\fP",
- "omega", "\\(*w",
- "OMEGA", "\\(*W",
- "lambda", "\\(*l",
- "LAMBDA", "\\(*L",
- "mu", "\\(*m",
- "nu", "\\(*n",
- "theta", "\\(*h",
- "THETA", "\\(*H",
- "phi", "\\(*f",
- "PHI", "\\(*F",
- "pi", "\\(*p",
- "PI", "\\(*P",
- "sigma", "\\(*s",
- "SIGMA", "\\(*S",
- "xi", "\\(*c",
- "XI", "\\(*C",
- "zeta", "\\(*z",
- "iota", "\\(*i",
- "eta", "\\(*y",
- "kappa", "\\(*k",
- "rho", "\\(*r",
- "tau", "\\(*t",
- "omicron", "\\(*o",
- "upsilon", "\\(*u",
- "UPSILON", "\\(*U",
- "psi", "\\(*q",
- "PSI", "\\(*Q",
- "chi", "\\(*x",
- "and", "\\f1and\\fP",
- "for", "\\f1for\\fP",
- "if", "\\f1if\\fP",
- "Re", "\\f1Re\\fP",
- "Im", "\\f1Im\\fP",
- "sin", "\\f1sin\\fP",
- "cos", "\\f1cos\\fP",
- "tan", "\\f1tan\\fP",
- "arc", "\\f1arc\\fP",
- "sinh", "\\f1sinh\\fP",
- "coth", "\\f1coth\\fP",
- "tanh", "\\f1tanh\\fP",
- "cosh", "\\f1cosh\\fP",
- "lim", "\\f1lim\\fP",
- "log", "\\f1log\\fP",
- "max", "\\f1max\\fP",
- "min", "\\f1min\\fP",
- "ln", "\\f1ln\\fP",
- "exp", "\\f1exp\\fP",
- "det", "\\f1det\\fP",
- 0, 0
- };
-
- tbl *lookup(tblp, name, defn) /* find name in tbl. if defn non-null, install */
- tbl **tblp;
- char *name, *defn;
- {
- register tbl *p;
- register int h;
- register char *s = name;
- char *malloc();
-
- for (h = 0; *s != '\0'; )
- h += *s++;
- h %= TBLSIZE;
-
- for (p = tblp[h]; p != NULL; p = p->next)
- if (strcmp(name, p->name) == 0) { /* found it */
- if (defn != NULL)
- p->defn = defn;
- return(p);
- }
- /* didn't find it */
- if (defn == NULL)
- return(NULL);
- p = (tbl *) malloc(sizeof (tbl));
- if (p == NULL)
- error(FATAL, "out of space in lookup");
- p->name = name;
- p->defn = defn;
- p->next = tblp[h];
- tblp[h] = p;
- return(p);
- }
-
- init_tbl() /* initialize all tables */
- {
- int i;
-
- for (i = 0; keyword[i].key != NULL; i++)
- lookup(keytbl, keyword[i].key, keyword[i].keyval);
- for (i = 0; resword[i].res != NULL; i++)
- lookup(restbl, resword[i].res, resword[i].resval);
- }
-