Blame


1 5cedca1b 2004-05-15 devnull #include "e.h"
2 5cedca1b 2004-05-15 devnull #include "y.tab.h"
3 5cedca1b 2004-05-15 devnull
4 5cedca1b 2004-05-15 devnull tbl *keytbl[TBLSIZE]; /* key words */
5 5cedca1b 2004-05-15 devnull tbl *restbl[TBLSIZE]; /* reserved words */
6 5cedca1b 2004-05-15 devnull tbl *deftbl[TBLSIZE]; /* user-defined names */
7 5cedca1b 2004-05-15 devnull
8 5cedca1b 2004-05-15 devnull struct keyword {
9 5cedca1b 2004-05-15 devnull char *key;
10 5cedca1b 2004-05-15 devnull int keyval;
11 5cedca1b 2004-05-15 devnull } keyword[] ={
12 b237df90 2004-05-16 devnull { "sub", SUB, },
13 b237df90 2004-05-16 devnull { "sup", SUP, },
14 b237df90 2004-05-16 devnull { ".EN", DOTEN, },
15 b237df90 2004-05-16 devnull { ".EQ", DOTEQ, },
16 b237df90 2004-05-16 devnull { "from", FROM, },
17 b237df90 2004-05-16 devnull { "to", TO, },
18 b237df90 2004-05-16 devnull { "sum", SUM, },
19 b237df90 2004-05-16 devnull { "hat", HAT, },
20 b237df90 2004-05-16 devnull { "vec", VEC, },
21 b237df90 2004-05-16 devnull { "dyad", DYAD, },
22 b237df90 2004-05-16 devnull { "dot", DOT, },
23 b237df90 2004-05-16 devnull { "dotdot", DOTDOT, },
24 b237df90 2004-05-16 devnull { "bar", BAR, },
25 b237df90 2004-05-16 devnull { "lowbar", LOWBAR, },
26 b237df90 2004-05-16 devnull { "highbar", HIGHBAR, },
27 b237df90 2004-05-16 devnull { "tilde", TILDE, },
28 b237df90 2004-05-16 devnull { "utilde", UTILDE, },
29 b237df90 2004-05-16 devnull { "under", UNDER, },
30 b237df90 2004-05-16 devnull { "prod", PROD, },
31 b237df90 2004-05-16 devnull { "int", INT, },
32 b237df90 2004-05-16 devnull { "integral", INT, },
33 b237df90 2004-05-16 devnull { "union", UNION, },
34 b237df90 2004-05-16 devnull { "inter", INTER, },
35 b237df90 2004-05-16 devnull { "matrix", MATRIX, },
36 b237df90 2004-05-16 devnull { "col", COL, },
37 b237df90 2004-05-16 devnull { "lcol", LCOL, },
38 b237df90 2004-05-16 devnull { "ccol", CCOL, },
39 b237df90 2004-05-16 devnull { "rcol", RCOL, },
40 b237df90 2004-05-16 devnull { "pile", COL }, /* synonyms ... */
41 b237df90 2004-05-16 devnull { "lpile", LCOL, },
42 b237df90 2004-05-16 devnull { "cpile", CCOL, },
43 b237df90 2004-05-16 devnull { "rpile", RCOL, },
44 b237df90 2004-05-16 devnull { "over", OVER, },
45 b237df90 2004-05-16 devnull { "sqrt", SQRT, },
46 b237df90 2004-05-16 devnull { "above", ABOVE, },
47 b237df90 2004-05-16 devnull { "size", SIZE, },
48 b237df90 2004-05-16 devnull { "font", FONT, },
49 b237df90 2004-05-16 devnull { "fat", FAT, },
50 b237df90 2004-05-16 devnull { "roman", ROMAN, },
51 b237df90 2004-05-16 devnull { "italic", ITALIC, },
52 b237df90 2004-05-16 devnull { "bold", BOLD, },
53 b237df90 2004-05-16 devnull { "left", LEFT, },
54 b237df90 2004-05-16 devnull { "right", RIGHT, },
55 b237df90 2004-05-16 devnull { "delim", DELIM, },
56 b237df90 2004-05-16 devnull { "define", DEFINE, },
57 b237df90 2004-05-16 devnull { "tdefine", DEFINE, },
58 b237df90 2004-05-16 devnull { "ndefine", NDEFINE, },
59 b237df90 2004-05-16 devnull { "ifdef", IFDEF, },
60 b237df90 2004-05-16 devnull { "gsize", GSIZE, },
61 b237df90 2004-05-16 devnull { ".gsize", GSIZE, },
62 b237df90 2004-05-16 devnull { "gfont", GFONT, },
63 b237df90 2004-05-16 devnull { "include", INCLUDE, },
64 b237df90 2004-05-16 devnull { "copy", INCLUDE, },
65 b237df90 2004-05-16 devnull { "space", SPACE, },
66 b237df90 2004-05-16 devnull { "up", UP, },
67 b237df90 2004-05-16 devnull { "down", DOWN, },
68 b237df90 2004-05-16 devnull { "fwd", FWD, },
69 b237df90 2004-05-16 devnull { "back", BACK, },
70 b237df90 2004-05-16 devnull { "mark", MARK, },
71 b237df90 2004-05-16 devnull { "lineup", LINEUP, },
72 b237df90 2004-05-16 devnull { 0, 0 }
73 5cedca1b 2004-05-15 devnull };
74 5cedca1b 2004-05-15 devnull
75 5cedca1b 2004-05-15 devnull struct resword {
76 5cedca1b 2004-05-15 devnull char *res;
77 5cedca1b 2004-05-15 devnull char *resval;
78 5cedca1b 2004-05-15 devnull } resword[] ={
79 b237df90 2004-05-16 devnull { ">=", "\\(>=", },
80 b237df90 2004-05-16 devnull { "<=", "\\(<=", },
81 b237df90 2004-05-16 devnull { "==", "\\(==", },
82 b237df90 2004-05-16 devnull { "!=", "\\(!=", },
83 b237df90 2004-05-16 devnull { "+-", "\\(+-", },
84 b237df90 2004-05-16 devnull { "->", "\\(->", },
85 b237df90 2004-05-16 devnull { "<-", "\\(<-", },
86 b237df90 2004-05-16 devnull { "inf", "\\(if", },
87 b237df90 2004-05-16 devnull { "infinity", "\\(if", },
88 b237df90 2004-05-16 devnull { "partial", "\\(pd", },
89 b237df90 2004-05-16 devnull { "half", "\\f1\\(12\\fP", },
90 b237df90 2004-05-16 devnull { "prime", "\\f1\\v'.5m'\\s+3\\(fm\\s-3\\v'-.5m'\\fP", },
91 b237df90 2004-05-16 devnull { "dollar", "\\f1$\\fP", },
92 b237df90 2004-05-16 devnull { "nothing", "", },
93 b237df90 2004-05-16 devnull { "times", "\\(mu", },
94 b237df90 2004-05-16 devnull { "del", "\\(gr", },
95 b237df90 2004-05-16 devnull { "grad", "\\(gr", },
96 b237df90 2004-05-16 devnull { "approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'", },
97 b237df90 2004-05-16 devnull { "cdot", "\\v'-.3m'.\\v'.3m'", },
98 b237df90 2004-05-16 devnull { "...", "\\v'-.25m'\\ .\\ .\\ .\\ \\v'.25m'", },
99 b237df90 2004-05-16 devnull { ",...,", "\\f1,\\fP\\ .\\ .\\ .\\ \\f1,\\fP\\|", },
100 b237df90 2004-05-16 devnull { "alpha", "α", },
101 b237df90 2004-05-16 devnull { "ALPHA", "Α", },
102 b237df90 2004-05-16 devnull { "beta", "β", },
103 b237df90 2004-05-16 devnull { "BETA", "Β", },
104 b237df90 2004-05-16 devnull { "gamma", "γ", },
105 b237df90 2004-05-16 devnull { "GAMMA", "Γ", },
106 b237df90 2004-05-16 devnull { "delta", "δ", },
107 b237df90 2004-05-16 devnull { "DELTA", "Δ", },
108 b237df90 2004-05-16 devnull { "epsilon", "ε", },
109 b237df90 2004-05-16 devnull { "EPSILON", "Ε", },
110 b237df90 2004-05-16 devnull { "omega", "ω", },
111 b237df90 2004-05-16 devnull { "OMEGA", "Ω", },
112 b237df90 2004-05-16 devnull { "lambda", "λ", },
113 b237df90 2004-05-16 devnull { "LAMBDA", "Λ", },
114 b237df90 2004-05-16 devnull { "mu", "μ", },
115 b237df90 2004-05-16 devnull { "MU", "Μ", },
116 b237df90 2004-05-16 devnull { "nu", "ν", },
117 b237df90 2004-05-16 devnull { "NU", "Ν", },
118 b237df90 2004-05-16 devnull { "theta", "θ", },
119 b237df90 2004-05-16 devnull { "THETA", "Θ", },
120 b237df90 2004-05-16 devnull { "phi", "φ", },
121 b237df90 2004-05-16 devnull { "PHI", "Φ", },
122 b237df90 2004-05-16 devnull { "pi", "π", },
123 b237df90 2004-05-16 devnull { "PI", "Π", },
124 b237df90 2004-05-16 devnull { "sigma", "σ", },
125 b237df90 2004-05-16 devnull { "SIGMA", "Σ", },
126 b237df90 2004-05-16 devnull { "xi", "ξ", },
127 b237df90 2004-05-16 devnull { "XI", "Ξ", },
128 b237df90 2004-05-16 devnull { "zeta", "ζ", },
129 b237df90 2004-05-16 devnull { "ZETA", "Ζ", },
130 b237df90 2004-05-16 devnull { "iota", "ι", },
131 b237df90 2004-05-16 devnull { "IOTA", "Ι", },
132 b237df90 2004-05-16 devnull { "eta", "η", },
133 b237df90 2004-05-16 devnull { "ETA", "Η", },
134 b237df90 2004-05-16 devnull { "kappa", "κ", },
135 b237df90 2004-05-16 devnull { "KAPPA", "Κ", },
136 b237df90 2004-05-16 devnull { "rho", "ρ", },
137 b237df90 2004-05-16 devnull { "RHO", "Ρ", },
138 b237df90 2004-05-16 devnull { "tau", "τ", },
139 b237df90 2004-05-16 devnull { "TAU", "Τ", },
140 b237df90 2004-05-16 devnull { "omicron", "ο", },
141 b237df90 2004-05-16 devnull { "OMICRON", "Ο", },
142 b237df90 2004-05-16 devnull { "upsilon", "υ", },
143 b237df90 2004-05-16 devnull { "UPSILON", "Υ", },
144 b237df90 2004-05-16 devnull { "psi", "ψ", },
145 b237df90 2004-05-16 devnull { "PSI", "Ψ", },
146 b237df90 2004-05-16 devnull { "chi", "χ", },
147 b237df90 2004-05-16 devnull { "CHI", "Χ", },
148 b237df90 2004-05-16 devnull { "and", "\\f1and\\fP", },
149 b237df90 2004-05-16 devnull { "for", "\\f1for\\fP", },
150 b237df90 2004-05-16 devnull { "if", "\\f1if\\fP", },
151 b237df90 2004-05-16 devnull { "Re", "\\f1Re\\fP", },
152 b237df90 2004-05-16 devnull { "Im", "\\f1Im\\fP", },
153 b237df90 2004-05-16 devnull { "sin", "\\f1sin\\fP", },
154 b237df90 2004-05-16 devnull { "cos", "\\f1cos\\fP", },
155 b237df90 2004-05-16 devnull { "tan", "\\f1tan\\fP", },
156 b237df90 2004-05-16 devnull { "arc", "\\f1arc\\fP", },
157 b237df90 2004-05-16 devnull { "sinh", "\\f1sinh\\fP", },
158 b237df90 2004-05-16 devnull { "coth", "\\f1coth\\fP", },
159 b237df90 2004-05-16 devnull { "tanh", "\\f1tanh\\fP", },
160 b237df90 2004-05-16 devnull { "cosh", "\\f1cosh\\fP", },
161 b237df90 2004-05-16 devnull { "lim", "\\f1lim\\fP", },
162 b237df90 2004-05-16 devnull { "log", "\\f1log\\fP", },
163 b237df90 2004-05-16 devnull { "ln", "\\f1ln\\fP", },
164 b237df90 2004-05-16 devnull { "max", "\\f1max\\fP", },
165 b237df90 2004-05-16 devnull { "min", "\\f1min\\fP", },
166 b237df90 2004-05-16 devnull { "exp", "\\f1exp\\fP", },
167 b237df90 2004-05-16 devnull { "det", "\\f1det\\fP", },
168 b237df90 2004-05-16 devnull { 0, 0 }
169 5cedca1b 2004-05-15 devnull };
170 5cedca1b 2004-05-15 devnull
171 5cedca1b 2004-05-15 devnull int hash(char *s)
172 5cedca1b 2004-05-15 devnull {
173 5cedca1b 2004-05-15 devnull register unsigned int h;
174 5cedca1b 2004-05-15 devnull
175 5cedca1b 2004-05-15 devnull for (h = 0; *s != '\0'; )
176 5cedca1b 2004-05-15 devnull h += *s++;
177 5cedca1b 2004-05-15 devnull h %= TBLSIZE;
178 5cedca1b 2004-05-15 devnull return h;
179 5cedca1b 2004-05-15 devnull }
180 5cedca1b 2004-05-15 devnull
181 5cedca1b 2004-05-15 devnull tbl *lookup(tbl **tblp, char *name) /* find name in tbl */
182 5cedca1b 2004-05-15 devnull {
183 5cedca1b 2004-05-15 devnull register tbl *p;
184 5cedca1b 2004-05-15 devnull
185 5cedca1b 2004-05-15 devnull for (p = tblp[hash(name)]; p != NULL; p = p->next)
186 5cedca1b 2004-05-15 devnull if (strcmp(name, p->name) == 0)
187 5cedca1b 2004-05-15 devnull return(p);
188 5cedca1b 2004-05-15 devnull return(NULL);
189 5cedca1b 2004-05-15 devnull }
190 5cedca1b 2004-05-15 devnull
191 5cedca1b 2004-05-15 devnull void install(tbl **tblp, char *name, char *cval, int ival) /* install name, vals in tblp */
192 5cedca1b 2004-05-15 devnull {
193 5cedca1b 2004-05-15 devnull register tbl *p;
194 5cedca1b 2004-05-15 devnull int h;
195 5cedca1b 2004-05-15 devnull
196 5cedca1b 2004-05-15 devnull if ((p = lookup(tblp, name)) == NULL) {
197 5cedca1b 2004-05-15 devnull p = (tbl *) malloc(sizeof(tbl));
198 5cedca1b 2004-05-15 devnull if (p == NULL)
199 5cedca1b 2004-05-15 devnull ERROR "out of space in install" FATAL;
200 5cedca1b 2004-05-15 devnull h = hash(name); /* bad visibility here */
201 5cedca1b 2004-05-15 devnull p->name = name;
202 5cedca1b 2004-05-15 devnull p->next = tblp[h];
203 5cedca1b 2004-05-15 devnull tblp[h] = p;
204 5cedca1b 2004-05-15 devnull }
205 5cedca1b 2004-05-15 devnull p->cval = cval;
206 5cedca1b 2004-05-15 devnull p->ival = ival;
207 5cedca1b 2004-05-15 devnull }
208 5cedca1b 2004-05-15 devnull
209 5cedca1b 2004-05-15 devnull void init_tbl(void) /* initialize tables */
210 5cedca1b 2004-05-15 devnull {
211 5cedca1b 2004-05-15 devnull int i;
212 5cedca1b 2004-05-15 devnull extern int init_tune(void);
213 5cedca1b 2004-05-15 devnull
214 5cedca1b 2004-05-15 devnull for (i = 0; keyword[i].key != NULL; i++)
215 5cedca1b 2004-05-15 devnull install(keytbl, keyword[i].key, (char *) 0, keyword[i].keyval);
216 5cedca1b 2004-05-15 devnull for (i = 0; resword[i].res != NULL; i++)
217 5cedca1b 2004-05-15 devnull install(restbl, resword[i].res, resword[i].resval, 0);
218 5cedca1b 2004-05-15 devnull init_tune(); /* tuning table done in tuning.c */
219 5cedca1b 2004-05-15 devnull }