|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)lookup.c 4.2 8/11/83";
3: #endif
4:
5: # include "e.h"
6: #include "e.def"
7:
8: #define TBLSIZE 100
9:
10: tbl *keytbl[TBLSIZE]; /* key words */
11: tbl *restbl[TBLSIZE]; /* reserved words */
12: tbl *deftbl[TBLSIZE]; /* user-defined names */
13:
14: struct {
15: char *key;
16: int keyval;
17: } keyword[] ={
18: "sub", SUB,
19: "sup", SUP,
20: ".EN", EOF,
21: "from", FROM,
22: "to", TO,
23: "sum", SUM,
24: "hat", HAT,
25: "vec", VEC,
26: "dyad", DYAD,
27: "dot", DOT,
28: "dotdot", DOTDOT,
29: "bar", BAR,
30: "tilde", TILDE,
31: "under", UNDER,
32: "prod", PROD,
33: "int", INT,
34: "integral", INT,
35: "union", UNION,
36: "inter", INTER,
37: "pile", PILE,
38: "lpile", LPILE,
39: "cpile", CPILE,
40: "rpile", RPILE,
41: "over", OVER,
42: "sqrt", SQRT,
43: "above", ABOVE,
44: "size", SIZE,
45: "font", FONT,
46: "fat", FAT,
47: "roman", ROMAN,
48: "italic", ITALIC,
49: "bold", BOLD,
50: "left", LEFT,
51: "right", RIGHT,
52: "delim", DELIM,
53: "define", DEFINE,
54:
55: #ifdef NEQN /* make ndefine synonym for define, tdefine a no-op */
56:
57: "tdefine", TDEFINE,
58: "ndefine", DEFINE,
59:
60: #else /* tdefine = define, ndefine = no-op */
61:
62: "tdefine", DEFINE,
63: "ndefine", NDEFINE,
64:
65: #endif
66:
67: "gsize", GSIZE,
68: ".gsize", GSIZE,
69: "gfont", GFONT,
70: "include", INCLUDE,
71: "up", UP,
72: "down", DOWN,
73: "fwd", FWD,
74: "back", BACK,
75: "mark", MARK,
76: "lineup", LINEUP,
77: "matrix", MATRIX,
78: "col", COL,
79: "lcol", LCOL,
80: "ccol", CCOL,
81: "rcol", RCOL,
82: 0, 0
83: };
84:
85: struct {
86: char *res;
87: char *resval;
88: } resword[] ={
89: ">=", "\\(>=",
90: "<=", "\\(<=",
91: "==", "\\(==",
92: "!=", "\\(!=",
93: "+-", "\\(+-",
94: "->", "\\(->",
95: "<-", "\\(<-",
96: "inf", "\\(if",
97: "infinity", "\\(if",
98: "partial", "\\(pd",
99: "half", "\\f1\\(12\\fP",
100: "prime", "\\f1\\(fm\\fP",
101: "dollar", "\\f1$\\fP",
102: "nothing", "",
103: "times", "\\(mu",
104: "del", "\\(gr",
105: "grad", "\\(gr",
106: #ifdef NEQN
107: "<<", "<<",
108: ">>", ">>",
109: "approx", "~\b\\d~\\u",
110: "cdot", "\\v'-.5'.\\v'.5'",
111: "...", "...",
112: ",...,", ",...,",
113: #else
114: "<<", "<\\h'-.3m'<",
115: ">>", ">\\h'-.3m'>",
116: "approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'",
117: "cdot", "\\v'-.3m'.\\v'.3m'",
118: "...", "\\v'-.3m'\\ .\\ .\\ .\\ \\v'.3m'",
119: ",...,", ",\\ .\\ .\\ .\\ ,\\|",
120: #endif
121:
122: "alpha", "\\(*a",
123: "beta", "\\(*b",
124: "gamma", "\\(*g",
125: "GAMMA", "\\(*G",
126: "delta", "\\(*d",
127: "DELTA", "\\(*D",
128: "epsilon", "\\(*e",
129: "EPSILON", "\\f1E\\fP",
130: "omega", "\\(*w",
131: "OMEGA", "\\(*W",
132: "lambda", "\\(*l",
133: "LAMBDA", "\\(*L",
134: "mu", "\\(*m",
135: "nu", "\\(*n",
136: "theta", "\\(*h",
137: "THETA", "\\(*H",
138: "phi", "\\(*f",
139: "PHI", "\\(*F",
140: "pi", "\\(*p",
141: "PI", "\\(*P",
142: "sigma", "\\(*s",
143: "SIGMA", "\\(*S",
144: "xi", "\\(*c",
145: "XI", "\\(*C",
146: "zeta", "\\(*z",
147: "iota", "\\(*i",
148: "eta", "\\(*y",
149: "kappa", "\\(*k",
150: "rho", "\\(*r",
151: "tau", "\\(*t",
152: "omicron", "\\(*o",
153: "upsilon", "\\(*u",
154: "UPSILON", "\\(*U",
155: "psi", "\\(*q",
156: "PSI", "\\(*Q",
157: "chi", "\\(*x",
158: "and", "\\f1and\\fP",
159: "for", "\\f1for\\fP",
160: "if", "\\f1if\\fP",
161: "Re", "\\f1Re\\fP",
162: "Im", "\\f1Im\\fP",
163: "sin", "\\f1sin\\fP",
164: "cos", "\\f1cos\\fP",
165: "tan", "\\f1tan\\fP",
166: "sec", "\\f1sec\\fP",
167: "csc", "\\f1csc\\fP",
168: "arc", "\\f1arc\\fP",
169: "asin", "\\f1asin\\fP",
170: "acos", "\\f1acos\\fP",
171: "atan", "\\f1atan\\fP",
172: "asec", "\\f1asec\\fP",
173: "acsc", "\\f1acsc\\fP",
174: "sinh", "\\f1sinh\\fP",
175: "coth", "\\f1coth\\fP",
176: "tanh", "\\f1tanh\\fP",
177: "cosh", "\\f1cosh\\fP",
178: "lim", "\\f1lim\\fP",
179: "log", "\\f1log\\fP",
180: "max", "\\f1max\\fP",
181: "min", "\\f1min\\fP",
182: "ln", "\\f1ln\\fP",
183: "exp", "\\f1exp\\fP",
184: "det", "\\f1det\\fP",
185: 0, 0
186: };
187:
188: tbl *lookup(tblp, name, defn) /* find name in tbl. if defn non-null, install */
189: tbl **tblp;
190: char *name, *defn;
191: {
192: register tbl *p;
193: register int h;
194: register char *s = name;
195: char *malloc();
196:
197: for (h = 0; *s != '\0'; )
198: h += *s++;
199: h %= TBLSIZE;
200:
201: for (p = tblp[h]; p != NULL; p = p->next)
202: if (strcmp(name, p->name) == 0) { /* found it */
203: if (defn != NULL)
204: p->defn = defn;
205: return(p);
206: }
207: /* didn't find it */
208: if (defn == NULL)
209: return(NULL);
210: p = (tbl *) malloc(sizeof (tbl));
211: if (p == NULL)
212: error(FATAL, "out of space in lookup");
213: p->name = name;
214: p->defn = defn;
215: p->next = tblp[h];
216: tblp[h] = p;
217: return(p);
218: }
219:
220: init_tbl() /* initialize all tables */
221: {
222: int i;
223:
224: for (i = 0; keyword[i].key != NULL; i++)
225: lookup(keytbl, keyword[i].key, keyword[i].keyval);
226: for (i = 0; resword[i].res != NULL; i++)
227: lookup(restbl, resword[i].res, resword[i].resval);
228: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.