mods for dynamically allocated display save area for formal calls
[unix-history] / usr / src / usr.bin / pascal / pc2 / langpats.c
CommitLineData
b3e05d18
KM
1/* Copyright (c) 1979 Regents of the University of California */
2
6b4e6ddb 3static 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
13struct 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\
261:\n\
27 addl3 $4,(sp)+,r1\n\
28 movzbl *(r1),r0\n\
29 incl (r1)\n\
302:\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\
361:\n\
945bf1d0
KM
37 popr $0x3\n\
38 movb r0,*4(r1)\n\
39 incl 4(r1)\n\
b3e05d18
KM
402:\n" },
41
25d46c52 42 { "3,_blkcpy\n",
945bf1d0
KM
43" popr $0xb\n\
44 pushl r0\n\
45 jbr 2f\n\
b3e05d18 461:\n\
b3e05d18
KM
47 subl2 r0,(sp)\n\
48 movc3 r0,(r1),(r3)\n\
945bf1d0
KM
492:\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 591:\n\
25d46c52
KM
60 subl2 r0,(sp)\n\
61 movc5 $0,(r3),$0,r0,(r3)\n\
622:\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
721:\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 811:\n\
945bf1d0 82 locc r4,r5,(r1)\n\
b3e05d18
KM
832:\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 1151:\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 1222:\n\
945bf1d0 123 clrl r0\n\
f703f747
KM
124 jbr 4f\n\
1253:\n\
945bf1d0
KM
126 cmpc3 r4,(r1),(r3)\n\
127 jneq 2b\n\
128 incl r0\n\
f703f747 1294:\n" },
b3e05d18 130
25d46c52 131 { "3,_RELNE\n",
945bf1d0
KM
132" popr $0x10\n\
133 popr $0xa\n\
b3e05d18 1341:\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 1412:\n\
b3e05d18 142 movl $1,r0\n\
945bf1d0
KM
143 jbr 4f\n\
1443:\n\
145 cmpc3 r4,(r1),(r3)\n\
146 jneq 2b\n\
f703f747 1474:\n" },
b3e05d18 148
25d46c52 149 { "3,_RELSLT\n",
945bf1d0
KM
150" popr $0x10\n\
151 popr $0xa\n\
152 jbr 2f\n\
b3e05d18 1531:\n\
f703f747
KM
154 subl2 r0,r4\n\
155 cmpc3 r0,(r1),(r3)\n\
945bf1d0 156 jneq 3f\n\
f703f747 1572:\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\
1623:\n\
163 jlss 4f\n\
164 clrl r0\n\
165 jbr 5f\n\
1664:\n\
b3e05d18 167 movl $1,r0\n\
f703f747 1685:\n" },
b3e05d18 169
25d46c52 170 { "3,_RELSLE\n",
945bf1d0
KM
171" popr $0x10\n\
172 popr $0xa\n\
173 jbr 2f\n\
b3e05d18 1741:\n\
f703f747
KM
175 subl2 r0,r4\n\
176 cmpc3 r0,(r1),(r3)\n\
945bf1d0 177 jneq 3f\n\
f703f747 1782:\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\
1833:\n\
184 jleq 4f\n\
185 clrl r0\n\
186 jbr 5f\n\
1874:\n\
b3e05d18 188 movl $1,r0\n\
f703f747 1895:\n" },
b3e05d18 190
25d46c52 191 { "3,_RELSGT\n",
945bf1d0
KM
192" popr $0x10\n\
193 popr $0xa\n\
194 jbr 2f\n\
b3e05d18 1951:\n\
f703f747
KM
196 subl2 r0,r4\n\
197 cmpc3 r0,(r1),(r3)\n\
945bf1d0 198 jneq 3f\n\
f703f747 1992:\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\
2043:\n\
205 jgtr 4f\n\
206 clrl r0\n\
207 jbr 5f\n\
2084:\n\
b3e05d18 209 movl $1,r0\n\
f703f747 2105:\n" },
b3e05d18 211
25d46c52 212 { "3,_RELSGE\n",
945bf1d0
KM
213" popr $0x10\n\
214 popr $0xa\n\
215 jbr 2f\n\
b3e05d18 2161:\n\
f703f747
KM
217 subl2 r0,r4\n\
218 cmpc3 r0,(r1),(r3)\n\
945bf1d0 219 jneq 3f\n\
f703f747 2202:\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\
2253:\n\
226 jgeq 4f\n\
227 clrl r0\n\
228 jbr 5f\n\
2294:\n\
b3e05d18 230 movl $1,r0\n\
f703f747 2315:\n" },
b3e05d18 232
25d46c52 233 { "4,_ADDT\n",
945bf1d0 234" popr $0x17\n\
b3e05d18 235 movl r0,r3\n\
b3e05d18
KM
2361:\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
2431:\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
2501:\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\
2631:\n" }
b3e05d18
KM
264};
265
266struct 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
284main(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);
335nextline:;
336 }
337 exit(0);
338}