Commit | Line | Data |
---|---|---|
b3e05d18 KM |
1 | /* Copyright (c) 1979 Regents of the University of California */ |
2 | ||
6b4e6ddb | 3 | static char sccsid[] = "@(#)langpats.c 1.9 %G%"; |
b3e05d18 KM |
4 | |
5 | #include <stdio.h> | |
6 | #include <ctype.h> | |
7 | /* | |
8 | * The hash table must be at least twice as big as the number | |
9 | * of patterns, preferably bigger. It must also be a prime number | |
10 | */ | |
11 | #define HSHSIZ 101 | |
12 | ||
13 | struct pats { | |
14 | char *name; | |
15 | char *replace; | |
16 | } ptab[] = { | |
17 | ||
25d46c52 | 18 | { "1,_ACTFILE\n", |
945bf1d0 | 19 | " popr $0x2\n\ |
b3e05d18 KM |
20 | movl 12(r1),r0\n" }, |
21 | ||
25d46c52 KM |
22 | { "1,_fgetc\n", |
23 | " sobgeq *(sp),1f\n\ | |
b3e05d18 KM |
24 | calls $1,__filbuf\n\ |
25 | jbr 2f\n\ | |
26 | 1:\n\ | |
27 | addl3 $4,(sp)+,r1\n\ | |
28 | movzbl *(r1),r0\n\ | |
29 | incl (r1)\n\ | |
30 | 2:\n" }, | |
31 | ||
25d46c52 KM |
32 | { "2,_fputc\n", |
33 | " sobgeq *4(sp),1f\n\ | |
b3e05d18 KM |
34 | calls $2,__flsbuf\n\ |
35 | jbr 2f\n\ | |
36 | 1:\n\ | |
945bf1d0 KM |
37 | popr $0x3\n\ |
38 | movb r0,*4(r1)\n\ | |
39 | incl 4(r1)\n\ | |
b3e05d18 KM |
40 | 2:\n" }, |
41 | ||
25d46c52 | 42 | { "3,_blkcpy\n", |
945bf1d0 KM |
43 | " popr $0xb\n\ |
44 | pushl r0\n\ | |
45 | jbr 2f\n\ | |
b3e05d18 | 46 | 1:\n\ |
b3e05d18 KM |
47 | subl2 r0,(sp)\n\ |
48 | movc3 r0,(r1),(r3)\n\ | |
945bf1d0 KM |
49 | 2:\n\ |
50 | movzwl $65535,r0\n\ | |
51 | cmpl (sp),r0\n\ | |
52 | jgtr 1b\n\ | |
53 | popr $0x1\n\ | |
b3e05d18 KM |
54 | movc3 r0,(r1),(r3)\n" }, |
55 | ||
25d46c52 | 56 | { "2,_blkclr\n", |
b3e05d18 | 57 | " movl 4(sp),r3\n\ |
25d46c52 | 58 | jbr 2f\n\ |
b3e05d18 | 59 | 1:\n\ |
25d46c52 KM |
60 | subl2 r0,(sp)\n\ |
61 | movc5 $0,(r3),$0,r0,(r3)\n\ | |
62 | 2:\n\ | |
b3e05d18 KM |
63 | movzwl $65535,r0\n\ |
64 | cmpl (sp),r0\n\ | |
25d46c52 | 65 | jgtr 1b\n\ |
945bf1d0 | 66 | popr $0x3\n\ |
25d46c52 | 67 | movc5 $0,(r3),$0,r0,(r3)\n" }, |
b3e05d18 | 68 | |
25d46c52 | 69 | { "3,_LOCC\n", |
945bf1d0 KM |
70 | " popr $0x30\n\ |
71 | popr $0x2\n\ | |
b3e05d18 KM |
72 | 1:\n\ |
73 | movzwl $65535,r0\n\ | |
945bf1d0 | 74 | cmpl r5,r0\n\ |
f703f747 | 75 | jleq 1f\n\ |
945bf1d0 KM |
76 | subl2 r0,r5\n\ |
77 | locc r4,r0,(r1)\n\ | |
f703f747 | 78 | jeql 1b\n\ |
945bf1d0 | 79 | addl2 r5,r0\n\ |
f703f747 | 80 | jbr 2f\n\ |
b3e05d18 | 81 | 1:\n\ |
945bf1d0 | 82 | locc r4,r5,(r1)\n\ |
b3e05d18 KM |
83 | 2:\n" }, |
84 | ||
b3df80a8 | 85 | { "2,_ROUND\n", |
b3e05d18 KM |
86 | " cvtrdl (sp)+,r0\n" }, |
87 | ||
b3df80a8 | 88 | { "2,_TRUNC\n", |
b3e05d18 KM |
89 | " cvtdl (sp)+,r0\n" }, |
90 | ||
6b4e6ddb KM |
91 | { "2,_FCALL\n", |
92 | " movl 4(sp),r0\n\ | |
b3e05d18 | 93 | ashl $3,4(r0),r1\n\ |
6b4e6ddb KM |
94 | movc3 r1,__disply+8,*(sp)+\n\ |
95 | movl (sp)+,r0\n\ | |
b3e05d18 | 96 | ashl $3,4(r0),r1\n\ |
6b4e6ddb | 97 | movc3 r1,8(r0),__disply+8\n" }, |
b3e05d18 | 98 | |
25d46c52 | 99 | { "2,_FRTN\n", |
6b4e6ddb | 100 | " movl (sp)+,r0\n\ |
b3e05d18 | 101 | ashl $3,4(r0),r1\n\ |
6b4e6ddb | 102 | movc3 r1,*(sp)+,__disply+8\n" }, |
b3e05d18 | 103 | |
25d46c52 | 104 | { "3,_FSAV\n", |
b3e05d18 KM |
105 | " movl 8(sp),r0\n\ |
106 | movl (sp)+,(r0)\n\ | |
107 | movl (sp)+,4(r0)\n\ | |
108 | ashl $3,4(r0),r1\n\ | |
109 | movc3 r1,__disply+8,8(r0)\n\ | |
945bf1d0 | 110 | popr $0x1\n" }, |
b3e05d18 | 111 | |
25d46c52 | 112 | { "3,_RELEQ\n", |
945bf1d0 KM |
113 | " popr $0x10\n\ |
114 | popr $0xa\n\ | |
b3e05d18 | 115 | 1:\n\ |
f703f747 KM |
116 | movzwl $65535,r0\n\ |
117 | cmpl r4,r0\n\ | |
945bf1d0 | 118 | jleq 3f\n\ |
f703f747 KM |
119 | subl2 r0,r4\n\ |
120 | cmpc3 r0,(r1),(r3)\n\ | |
121 | jeql 1b\n\ | |
f703f747 | 122 | 2:\n\ |
945bf1d0 | 123 | clrl r0\n\ |
f703f747 KM |
124 | jbr 4f\n\ |
125 | 3:\n\ | |
945bf1d0 KM |
126 | cmpc3 r4,(r1),(r3)\n\ |
127 | jneq 2b\n\ | |
128 | incl r0\n\ | |
f703f747 | 129 | 4:\n" }, |
b3e05d18 | 130 | |
25d46c52 | 131 | { "3,_RELNE\n", |
945bf1d0 KM |
132 | " popr $0x10\n\ |
133 | popr $0xa\n\ | |
b3e05d18 | 134 | 1:\n\ |
f703f747 KM |
135 | movzwl $65535,r0\n\ |
136 | cmpl r4,r0\n\ | |
945bf1d0 | 137 | jleq 3f\n\ |
f703f747 KM |
138 | subl2 r0,r4\n\ |
139 | cmpc3 r0,(r1),(r3)\n\ | |
140 | jeql 1b\n\ | |
f703f747 | 141 | 2:\n\ |
b3e05d18 | 142 | movl $1,r0\n\ |
945bf1d0 KM |
143 | jbr 4f\n\ |
144 | 3:\n\ | |
145 | cmpc3 r4,(r1),(r3)\n\ | |
146 | jneq 2b\n\ | |
f703f747 | 147 | 4:\n" }, |
b3e05d18 | 148 | |
25d46c52 | 149 | { "3,_RELSLT\n", |
945bf1d0 KM |
150 | " popr $0x10\n\ |
151 | popr $0xa\n\ | |
152 | jbr 2f\n\ | |
b3e05d18 | 153 | 1:\n\ |
f703f747 KM |
154 | subl2 r0,r4\n\ |
155 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 156 | jneq 3f\n\ |
f703f747 | 157 | 2:\n\ |
945bf1d0 KM |
158 | movzwl $65535,r0\n\ |
159 | cmpl r4,r0\n\ | |
160 | jgtr 1b\n\ | |
f703f747 KM |
161 | cmpc3 r4,(r1),(r3)\n\ |
162 | 3:\n\ | |
163 | jlss 4f\n\ | |
164 | clrl r0\n\ | |
165 | jbr 5f\n\ | |
166 | 4:\n\ | |
b3e05d18 | 167 | movl $1,r0\n\ |
f703f747 | 168 | 5:\n" }, |
b3e05d18 | 169 | |
25d46c52 | 170 | { "3,_RELSLE\n", |
945bf1d0 KM |
171 | " popr $0x10\n\ |
172 | popr $0xa\n\ | |
173 | jbr 2f\n\ | |
b3e05d18 | 174 | 1:\n\ |
f703f747 KM |
175 | subl2 r0,r4\n\ |
176 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 177 | jneq 3f\n\ |
f703f747 | 178 | 2:\n\ |
945bf1d0 KM |
179 | movzwl $65535,r0\n\ |
180 | cmpl r4,r0\n\ | |
181 | jgtr 1b\n\ | |
f703f747 KM |
182 | cmpc3 r4,(r1),(r3)\n\ |
183 | 3:\n\ | |
184 | jleq 4f\n\ | |
185 | clrl r0\n\ | |
186 | jbr 5f\n\ | |
187 | 4:\n\ | |
b3e05d18 | 188 | movl $1,r0\n\ |
f703f747 | 189 | 5:\n" }, |
b3e05d18 | 190 | |
25d46c52 | 191 | { "3,_RELSGT\n", |
945bf1d0 KM |
192 | " popr $0x10\n\ |
193 | popr $0xa\n\ | |
194 | jbr 2f\n\ | |
b3e05d18 | 195 | 1:\n\ |
f703f747 KM |
196 | subl2 r0,r4\n\ |
197 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 198 | jneq 3f\n\ |
f703f747 | 199 | 2:\n\ |
945bf1d0 KM |
200 | movzwl $65535,r0\n\ |
201 | cmpl r4,r0\n\ | |
202 | jgtr 1b\n\ | |
f703f747 KM |
203 | cmpc3 r4,(r1),(r3)\n\ |
204 | 3:\n\ | |
205 | jgtr 4f\n\ | |
206 | clrl r0\n\ | |
207 | jbr 5f\n\ | |
208 | 4:\n\ | |
b3e05d18 | 209 | movl $1,r0\n\ |
f703f747 | 210 | 5:\n" }, |
b3e05d18 | 211 | |
25d46c52 | 212 | { "3,_RELSGE\n", |
945bf1d0 KM |
213 | " popr $0x10\n\ |
214 | popr $0xa\n\ | |
215 | jbr 2f\n\ | |
b3e05d18 | 216 | 1:\n\ |
f703f747 KM |
217 | subl2 r0,r4\n\ |
218 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 219 | jneq 3f\n\ |
f703f747 | 220 | 2:\n\ |
945bf1d0 KM |
221 | movzwl $65535,r0\n\ |
222 | cmpl r4,r0\n\ | |
223 | jgtr 1b\n\ | |
f703f747 KM |
224 | cmpc3 r4,(r1),(r3)\n\ |
225 | 3:\n\ | |
226 | jgeq 4f\n\ | |
227 | clrl r0\n\ | |
228 | jbr 5f\n\ | |
229 | 4:\n\ | |
b3e05d18 | 230 | movl $1,r0\n\ |
f703f747 | 231 | 5:\n" }, |
b3e05d18 | 232 | |
25d46c52 | 233 | { "4,_ADDT\n", |
945bf1d0 | 234 | " popr $0x17\n\ |
b3e05d18 | 235 | movl r0,r3\n\ |
b3e05d18 KM |
236 | 1:\n\ |
237 | bisl3 (r1)+,(r2)+,(r3)+\n\ | |
238 | sobgtr r4,1b\n" }, | |
239 | ||
25d46c52 | 240 | { "4,_SUBT\n", |
945bf1d0 | 241 | " popr $0x17\n\ |
b3e05d18 | 242 | movl r0,r3\n\ |
b3e05d18 KM |
243 | 1:\n\ |
244 | bicl3 (r2)+,(r1)+,(r3)+\n\ | |
245 | sobgtr r4,1b\n" }, | |
246 | ||
25d46c52 | 247 | { "4,_MULT\n", |
945bf1d0 | 248 | " popr $0x17\n\ |
b3e05d18 | 249 | movl r0,r3\n\ |
b3e05d18 KM |
250 | 1:\n\ |
251 | mcoml (r1)+,r5\n\ | |
252 | bicl3 r5,(r2)+,(r3)+\n\ | |
253 | sobgtr r4,1b\n" }, | |
254 | ||
25d46c52 | 255 | { "4,_IN\n", |
0d53952d KM |
256 | " popr $0x1e\n\ |
257 | clrl r0\n\ | |
945bf1d0 KM |
258 | subl2 r2,r1\n\ |
259 | cmpl r1,r3\n\ | |
f703f747 | 260 | jgtru 1f\n\ |
945bf1d0 KM |
261 | jbc r1,(r4),1f\n\ |
262 | incl r0\n\ | |
263 | 1:\n" } | |
b3e05d18 KM |
264 | }; |
265 | ||
266 | struct pats *htbl[HSHSIZ]; | |
267 | ||
268 | ||
b3e05d18 KM |
269 | #define HASH(cp, hp) {\ |
270 | hash = 0; rehash = 1; ccp = cp; \ | |
271 | do { \ | |
272 | hash *= (int)*ccp++; \ | |
273 | } while (*ccp && *ccp != '\n'); \ | |
274 | hash >>= 7; hash %= HSHSIZ; hp = &htbl[hash]; size = ccp - cp + 1; \ | |
275 | } | |
276 | ||
277 | #define REHASH(hp) {\ | |
278 | hp += rehash; rehash += 2; \ | |
279 | if (hp >= &htbl[HSHSIZ]) \ | |
280 | hp -= HSHSIZ; \ | |
281 | } | |
282 | ||
283 | ||
284 | main(argc, argv) | |
285 | ||
286 | int argc; | |
287 | char **argv; | |
288 | { | |
289 | register struct pats *pp; | |
290 | register struct pats **hp; | |
6e4fa11e | 291 | register char *cp, *ccp, *lp; |
b3e05d18 KM |
292 | register int hash, rehash, size; |
293 | char line[BUFSIZ]; | |
6e4fa11e | 294 | extern char *index(); |
b3e05d18 KM |
295 | |
296 | if (argc > 1) | |
297 | freopen(argv[1], "r", stdin); | |
298 | if (argc > 2) | |
299 | freopen(argv[2], "w", stdout); | |
300 | /* | |
301 | * set up the hash table | |
302 | */ | |
303 | for(pp = ptab; pp < &ptab[sizeof ptab/sizeof ptab[0]]; pp++) { | |
304 | HASH(pp->name, hp); | |
305 | while (*hp) | |
306 | REHASH(hp); | |
307 | *hp = pp; | |
308 | } | |
309 | /* | |
310 | * check each line and replace as appropriate | |
311 | */ | |
312 | while (fgets(line, BUFSIZ, stdin)) { | |
6e4fa11e KM |
313 | lp = index(line, ':'); |
314 | for (cp = (lp != NULL) ? ++lp : line; *cp == '\t'; ) | |
b3e05d18 | 315 | cp++; |
6e4fa11e KM |
316 | if (strcmpn(cp, "calls\t$", 7) != 0) { |
317 | fputs(line, stdout); | |
318 | continue; | |
319 | } | |
320 | cp += 7; | |
b3e05d18 KM |
321 | HASH(cp, hp); |
322 | while (*hp) { | |
6e4fa11e | 323 | if (strcmpn((*hp)->name, cp, size)==NULL) { |
6e4fa11e KM |
324 | if (lp != NULL) { |
325 | *lp++ = '\n'; | |
326 | *lp = '\0'; | |
327 | fputs(line, stdout); | |
328 | } | |
b3e05d18 KM |
329 | fputs((*hp)->replace, stdout); |
330 | goto nextline; | |
331 | } | |
332 | REHASH(hp); | |
333 | } | |
b3e05d18 KM |
334 | fputs(line, stdout); |
335 | nextline:; | |
336 | } | |
337 | exit(0); | |
338 | } |