date and time created 83/02/11 18:28:22 by shannon
authorBill Shannon <shannon@ucbvax.Berkeley.EDU>
Sat, 12 Feb 1983 10:28:22 +0000 (02:28 -0800)
committerBill Shannon <shannon@ucbvax.Berkeley.EDU>
Sat, 12 Feb 1983 10:28:22 +0000 (02:28 -0800)
SCCS-vsn: old/eqn/common_source/lookup.c 4.1

usr/src/old/eqn/common_source/lookup.c [new file with mode: 0644]

diff --git a/usr/src/old/eqn/common_source/lookup.c b/usr/src/old/eqn/common_source/lookup.c
new file mode 100644 (file)
index 0000000..bab1eb2
--- /dev/null
@@ -0,0 +1,226 @@
+/*     lookup.c        4.1     83/02/11        */
+
+# 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",
+       "sec",  "\\f1sec\\fP",
+       "csc",  "\\f1csc\\fP",
+       "arc",  "\\f1arc\\fP",
+       "asin", "\\f1asin\\fP",
+       "acos", "\\f1acos\\fP",
+       "atan", "\\f1atan\\fP",
+       "asec", "\\f1asec\\fP",
+       "acsc", "\\f1acsc\\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);
+}