|
|
researchv10 Norman
# 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);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.