Let's try this. It's BUGGERED.
This commit is contained in:
parent
76e6aca867
commit
5cedca1b69
118 changed files with 26947 additions and 1 deletions
219
src/cmd/eqn/lookup.c
Normal file
219
src/cmd/eqn/lookup.c
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
#include "e.h"
|
||||
#include "y.tab.h"
|
||||
|
||||
tbl *keytbl[TBLSIZE]; /* key words */
|
||||
tbl *restbl[TBLSIZE]; /* reserved words */
|
||||
tbl *deftbl[TBLSIZE]; /* user-defined names */
|
||||
|
||||
struct keyword {
|
||||
char *key;
|
||||
int keyval;
|
||||
} keyword[] ={
|
||||
"sub", SUB,
|
||||
"sup", SUP,
|
||||
".EN", DOTEN,
|
||||
".EQ", DOTEQ,
|
||||
"from", FROM,
|
||||
"to", TO,
|
||||
"sum", SUM,
|
||||
"hat", HAT,
|
||||
"vec", VEC,
|
||||
"dyad", DYAD,
|
||||
"dot", DOT,
|
||||
"dotdot", DOTDOT,
|
||||
"bar", BAR,
|
||||
"lowbar", LOWBAR,
|
||||
"highbar", HIGHBAR,
|
||||
"tilde", TILDE,
|
||||
"utilde", UTILDE,
|
||||
"under", UNDER,
|
||||
"prod", PROD,
|
||||
"int", INT,
|
||||
"integral", INT,
|
||||
"union", UNION,
|
||||
"inter", INTER,
|
||||
"matrix", MATRIX,
|
||||
"col", COL,
|
||||
"lcol", LCOL,
|
||||
"ccol", CCOL,
|
||||
"rcol", RCOL,
|
||||
"pile", COL, /* synonyms ... */
|
||||
"lpile", LCOL,
|
||||
"cpile", CCOL,
|
||||
"rpile", RCOL,
|
||||
"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,
|
||||
"tdefine", DEFINE,
|
||||
"ndefine", NDEFINE,
|
||||
"ifdef", IFDEF,
|
||||
"gsize", GSIZE,
|
||||
".gsize", GSIZE,
|
||||
"gfont", GFONT,
|
||||
"include", INCLUDE,
|
||||
"copy", INCLUDE,
|
||||
"space", SPACE,
|
||||
"up", UP,
|
||||
"down", DOWN,
|
||||
"fwd", FWD,
|
||||
"back", BACK,
|
||||
"mark", MARK,
|
||||
"lineup", LINEUP,
|
||||
0, 0
|
||||
};
|
||||
|
||||
struct resword {
|
||||
char *res;
|
||||
char *resval;
|
||||
} resword[] ={
|
||||
">=", "\\(>=",
|
||||
"<=", "\\(<=",
|
||||
"==", "\\(==",
|
||||
"!=", "\\(!=",
|
||||
"+-", "\\(+-",
|
||||
"->", "\\(->",
|
||||
"<-", "\\(<-",
|
||||
"inf", "\\(if",
|
||||
"infinity", "\\(if",
|
||||
"partial", "\\(pd",
|
||||
"half", "\\f1\\(12\\fP",
|
||||
"prime", "\\f1\\v'.5m'\\s+3\\(fm\\s-3\\v'-.5m'\\fP",
|
||||
"dollar", "\\f1$\\fP",
|
||||
"nothing", "",
|
||||
"times", "\\(mu",
|
||||
"del", "\\(gr",
|
||||
"grad", "\\(gr",
|
||||
"approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'",
|
||||
"cdot", "\\v'-.3m'.\\v'.3m'",
|
||||
"...", "\\v'-.25m'\\ .\\ .\\ .\\ \\v'.25m'",
|
||||
",...,", "\\f1,\\fP\\ .\\ .\\ .\\ \\f1,\\fP\\|",
|
||||
"alpha", "α",
|
||||
"ALPHA", "Α",
|
||||
"beta", "β",
|
||||
"BETA", "Β",
|
||||
"gamma", "γ",
|
||||
"GAMMA", "Γ",
|
||||
"delta", "δ",
|
||||
"DELTA", "Δ",
|
||||
"epsilon", "ε",
|
||||
"EPSILON", "Ε",
|
||||
"omega", "ω",
|
||||
"OMEGA", "Ω",
|
||||
"lambda", "λ",
|
||||
"LAMBDA", "Λ",
|
||||
"mu", "μ",
|
||||
"MU", "Μ",
|
||||
"nu", "ν",
|
||||
"NU", "Ν",
|
||||
"theta", "θ",
|
||||
"THETA", "Θ",
|
||||
"phi", "φ",
|
||||
"PHI", "Φ",
|
||||
"pi", "π",
|
||||
"PI", "Π",
|
||||
"sigma", "σ",
|
||||
"SIGMA", "Σ",
|
||||
"xi", "ξ",
|
||||
"XI", "Ξ",
|
||||
"zeta", "ζ",
|
||||
"ZETA", "Ζ",
|
||||
"iota", "ι",
|
||||
"IOTA", "Ι",
|
||||
"eta", "η",
|
||||
"ETA", "Η",
|
||||
"kappa", "κ",
|
||||
"KAPPA", "Κ",
|
||||
"rho", "ρ",
|
||||
"RHO", "Ρ",
|
||||
"tau", "τ",
|
||||
"TAU", "Τ",
|
||||
"omicron", "ο",
|
||||
"OMICRON", "Ο",
|
||||
"upsilon", "υ",
|
||||
"UPSILON", "Υ",
|
||||
"psi", "ψ",
|
||||
"PSI", "Ψ",
|
||||
"chi", "χ",
|
||||
"CHI", "Χ",
|
||||
"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",
|
||||
"ln", "\\f1ln\\fP",
|
||||
"max", "\\f1max\\fP",
|
||||
"min", "\\f1min\\fP",
|
||||
"exp", "\\f1exp\\fP",
|
||||
"det", "\\f1det\\fP",
|
||||
0, 0
|
||||
};
|
||||
|
||||
int hash(char *s)
|
||||
{
|
||||
register unsigned int h;
|
||||
|
||||
for (h = 0; *s != '\0'; )
|
||||
h += *s++;
|
||||
h %= TBLSIZE;
|
||||
return h;
|
||||
}
|
||||
|
||||
tbl *lookup(tbl **tblp, char *name) /* find name in tbl */
|
||||
{
|
||||
register tbl *p;
|
||||
|
||||
for (p = tblp[hash(name)]; p != NULL; p = p->next)
|
||||
if (strcmp(name, p->name) == 0)
|
||||
return(p);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
void install(tbl **tblp, char *name, char *cval, int ival) /* install name, vals in tblp */
|
||||
{
|
||||
register tbl *p;
|
||||
int h;
|
||||
|
||||
if ((p = lookup(tblp, name)) == NULL) {
|
||||
p = (tbl *) malloc(sizeof(tbl));
|
||||
if (p == NULL)
|
||||
ERROR "out of space in install" FATAL;
|
||||
h = hash(name); /* bad visibility here */
|
||||
p->name = name;
|
||||
p->next = tblp[h];
|
||||
tblp[h] = p;
|
||||
}
|
||||
p->cval = cval;
|
||||
p->ival = ival;
|
||||
}
|
||||
|
||||
void init_tbl(void) /* initialize tables */
|
||||
{
|
||||
int i;
|
||||
extern int init_tune(void);
|
||||
|
||||
for (i = 0; keyword[i].key != NULL; i++)
|
||||
install(keytbl, keyword[i].key, (char *) 0, keyword[i].keyval);
|
||||
for (i = 0; resword[i].res != NULL; i++)
|
||||
install(restbl, resword[i].res, resword[i].resval, 0);
|
||||
init_tune(); /* tuning table done in tuning.c */
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue