Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /1 OS8 SOURCE COMPARE (SRCCOM) |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION | |
12 | / | |
13 | / | |
14 | / | |
15 | / | |
16 | / | |
17 | / | |
18 | / | |
19 | / | |
20 | / | |
21 | / | |
22 | /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE | |
23 | /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT | |
24 | /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY | |
25 | /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. | |
26 | / | |
27 | /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER | |
28 | /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED | |
29 | /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH | |
30 | /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. | |
31 | / | |
32 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE | |
33 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY | |
34 | /DIGITAL. | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | / | |
41 | / | |
42 | / | |
43 | / | |
44 | / | |
45 | \f/LAST EDITED 4/28/77 | |
46 | / | |
47 | / | |
48 | /COPYRIGHT 1973,1977 | |
49 | /DIGITAL EQUIPMENT CORPORATION | |
50 | /MAYNARD, MASS. 01754 | |
51 | / | |
52 | /PDP-8 SOURCE COMPARISON PROGRAM | |
53 | /STOLEN FROM PDP-10 SRCCOM BY R. LARY | |
54 | ||
55 | VERSION= 4 /CHANGE EVERY MAJOR EDIT | |
56 | PATCH="A | |
57 | ||
58 | IFNDEF CORE <CORE=2 /DEFAULT IS 8K SYSTEM> | |
59 | MPARAM=7643 /COMMAND DECODER PARAMETER BLOCK | |
60 | ||
61 | IFZERO CORE-2 <F1=0 /FIELD FOR FILE 1 | |
62 | F2=10 /FIELD FOR FILE 2 | |
63 | LNBEG=2000 /BEGINNING OF LINE BUFFER | |
64 | > | |
65 | IFZERO CORE-4 <F1=20 | |
66 | F2=30 | |
67 | LNBEG=20 | |
68 | > | |
69 | BUFLIM=FBLOCK-1001 /END OF LINE BUFFER | |
70 | INBUF=FBLOCK-1000 /INPUT BUFFER | |
71 | \f/SRCCOM FIELD 0 PAGE 0 | |
72 | ||
73 | FIELD 0 | |
74 | ||
75 | XR=10 | |
76 | ||
77 | *20 | |
78 | SCT, 0 /TEMPORARY | |
79 | OFILNM, ZBLOCK 4 /OUTPUT FILE NAME | |
80 | IFPTR, 0 /TEMPORARY | |
81 | SETUP1, NOPUNCH | |
82 | *7556 /JAM PARAMETERS UP AGAINST TOP OF USER CORE | |
83 | FBLOCK, ENPUNCH | |
84 | ||
85 | /LAYOUT OF FILE PARAMETER TABLE | |
86 | /THERE IS A COPY OF THIS TABLE IN FIELDS F1 AND F2. EACH COPY | |
87 | /CONTAINS ALL THE INFORMATION ABOUT THE FILE WHOSE BUFFERS | |
88 | /ARE IN THE SAME FIELD | |
89 | ||
90 | ||
91 | PGNUM, 1 /CURRENT INPUT PAGE | |
92 | CURLIN, 0 /CURRENT LINE (IN LINE BUFFER) | |
93 | TOPLIN, 0 /NUMBER OF LINES IN LINE BUFFER | |
94 | TMPLIN, 0 /TEMPORARY STORAGE FOR "CURLIN" | |
95 | OLDLIN, 1 /LINE OPTIMIZATION COUNTER | |
96 | OLDPTR, LNBEG /LINE OPTIMIZATION POINTER | |
97 | /THE NEXT SEVERAL WORDS ARE A SUBROUTINE | |
98 | /WHICH READS A BUFFER IN FROM THE INPUT FILE | |
99 | INTEMP, 0 /SHIFT REGISTER FOR "GCHAR" ROUTINE | |
100 | CIF 0 | |
101 | JMS I INHNDL | |
102 | INCHCT, 7777 /COUNT OF CHARACTERS IN BUFFER | |
103 | INPTR, 0 /POINTS TO CURRENT WORD IN BUFFER | |
104 | INREC, 0 /CONTAINS CURRENT INPUT RECORD | |
105 | ISZ INTEMP /SUBROUTINE SKIPS ON INPUT ERROR | |
106 | CIF 10 | |
107 | JMP I INTEMP | |
108 | INHNDL, 0 /POINTS TO ENTRY POINT OF INPUT HANDLER | |
109 | ||
110 | INEOF, 0 /END-OF-FILE INDICATOR | |
111 | INRCNT, 0 /COUNT OF RECORDS REMAINING IN THIS FILE | |
112 | IFNZRO .-7600 <_ERROR_> | |
113 | *SETUP1+.-FBLOCK/PUT ASSEMBLER LOCATION COUNTER BACK | |
114 | SETUP2=. | |
115 | \f | |
116 | ||
117 | /CORE ALLOCATION FOR 8K SYSTEM | |
118 | ||
119 | / FIELD 0 | |
120 | / | |
121 | /0000-0377 CONTROL CODE | |
122 | /0400-0777 INPUT HANDLER 1 | |
123 | /1000-1377 INPUT HANDLER 2 | |
124 | /1400-1777 OUTPUT HANDLER | |
125 | /2000-6555 FILE 1 LINE BUFFER | |
126 | /6556-7555 FILE 1 INPUT BUFFER | |
127 | /7556-7577 FILE 1 CONTROL BLOCK | |
128 | / | |
129 | / FIELD 1 | |
130 | / | |
131 | /0000-1377 SRCCOM PROPER | |
132 | /1400-1777 OUTPUT BUFFER | |
133 | /2000-6555 FILE 2 LINE BUFFER | |
134 | /6556-7555 FILE 2 INPUT BUFFER | |
135 | /7556-7577 FILE 2 CONTROL BLOCK | |
136 | / | |
137 | / | |
138 | / FORMAT OF LINE BUFFER: | |
139 | / THE LINE BUFFER CONSISTS OF SOURCE LINES. THE FIRST WORD | |
140 | / OF EACH LINE IS A LENGTH WORD GIVING THE LENGTH OF THE | |
141 | / LINE (INCLUDING THE LENGTH WORD ITSELF) AS A POSITIVE | |
142 | / NUMBER. THE NEXT WORD IS THE NUMBER OF THE SOURCE PAGE | |
143 | / ON WHICH THIS LINE WAS FOUND. SUBSEQUENT WORDS CONTAIN THE | |
144 | / CHARACTERS OF THE LINE ITSELF, PACKED ONE PER WORD. | |
145 | ||
146 | ||
147 | NODFMS, "N;"O;" ;"D;"I;"F;"F;"E;"R;"E;"N;"C;"E;"S;0 | |
148 | \fSETUP, 0 /ROUTINE TO SET UP FILE PARAMETERS | |
149 | TAD [SETUP1-SETUP2 | |
150 | DCA SCT | |
151 | TAD [TAD SETUP1 | |
152 | DCA INST2 | |
153 | TAD [FBLOCK-1 | |
154 | DCA XR | |
155 | INST2, HLT /MOVE THE SKELETON PARAMETER BLOCK | |
156 | DCA I XR /UP INTO THE DESIRED FIELD | |
157 | ISZ INST2 | |
158 | ISZ SCT | |
159 | JMP INST2 | |
160 | RDF | |
161 | TAD [6201 | |
162 | DCA SETCDF /SAVE FIELD NUMBER | |
163 | CDF 10 | |
164 | TAD I IFPTR | |
165 | CDF 0 | |
166 | SNA | |
167 | JMP I [INERR1 /NO INPUT FILE - BAD | |
168 | CIF 10 | |
169 | JMS I [200 /ASSIGN DEVICE HANDLER | |
170 | 1 | |
171 | DVPAGE, 0 | |
172 | HLT /NEVER HOPPEN | |
173 | CDF 10 | |
174 | TAD I IFPTR | |
175 | AND [7760 /COMPUTE FILE LENGTH | |
176 | SZA | |
177 | TAD [17 | |
178 | CLL CML RTR | |
179 | RTR | |
180 | DCA SCT /SAVE IT AWAY TEMPORARILY | |
181 | ISZ IFPTR | |
182 | TAD I IFPTR | |
183 | SETCDF, HLT /RESET DATA FIELD | |
184 | DCA I [INREC /SAVE STARTING BLOCK NUMBER | |
185 | TAD SCT | |
186 | DCA I [INRCNT /SAVE FILE LENGTH | |
187 | TAD DVPAGE | |
188 | DCA I [INHNDL /SAVE DEVICE HANDLER ENTRY POINT | |
189 | ISZ IFPTR | |
190 | JMP I SETUP /RETURN | |
191 | \f *200 /INITIALIZATION CODE | |
192 | SRCCOM, ISZ NOCHN | |
193 | CIF 10 | |
194 | JMS I [7700 | |
195 | 10 /BRING USR INTO CORE | |
196 | SRCCD, TAD NOCHN /HAVE WE BEEN CHAINED TO? | |
197 | SNA CLA | |
198 | JMP NOSRCD /YES | |
199 | CIF 10 | |
200 | JMS I [200 | |
201 | 5 /COMMAND DECODE | |
202 | 0 /NO DEFAULT EXTENSIONS | |
203 | NOSRCD, TAD [7617 | |
204 | DCA IFPTR /SET IFPTR POINTING TO FILE 1 | |
205 | TAD [401 | |
206 | DCA DVPAGE /FILE 1 HANDLER GOES IN 400-777 | |
207 | CDF F1 | |
208 | JMS SETUP /SET UP FILE 1 PARAMETER AREA | |
209 | TAD [1001 | |
210 | DCA DVPAGE /FILE 2 HANDLER GOES INTO 1000-1377 | |
211 | CDF F2 | |
212 | JMS SETUP /SET UP FILE 2 PARAMETER AREA | |
213 | TAD [1401 | |
214 | DCA OUPAGE /OUTPUT HANDLER GOES INTO 1400-1777 | |
215 | GTOUHN, CDF 10 | |
216 | TAD I [7600 /GET OUTPUT DEVICE # | |
217 | CDF 0 | |
218 | SZA /IS THERE ONE? | |
219 | JMP ASSOUT | |
220 | DCA TTYNO | |
221 | CIF 10 /NO - LOOK UP "TTY" | |
222 | JMS I [200 | |
223 | 12 /INQUIRE | |
224 | 5524 /=2424+3100 = TTY | |
225 | TTYNO, 0 | |
226 | 0 | |
227 | JMP OUERR1 /NO TELETYPE | |
228 | TAD TTYNO | |
229 | CDF 10 | |
230 | DCA I [7600 | |
231 | JMP GTOUHN /BACK TO GET IT AGAIN | |
232 | ASSOUT, CIF 10 | |
233 | JMS I [200 | |
234 | 1 | |
235 | OUPAGE, 0 | |
236 | JMP OUERR1 | |
237 | \f TAD [-4 | |
238 | DCA SCT | |
239 | TAD [7600 | |
240 | DCA XR | |
241 | TAD [DCA OFILNM | |
242 | DCA INST1 | |
243 | CDF 10 /MOVE OUTPUT FILE NAME INTO FIELD 0 | |
244 | TAD I XR | |
245 | INST1, HLT | |
246 | ISZ INST1 | |
247 | ISZ SCT | |
248 | JMP INST1-1 | |
249 | TAD PFILNM | |
250 | DCA ORCNO /SET UP ENTER | |
251 | TAD OFILNM+3 | |
252 | SNA | |
253 | TAD [1423 /ASSUMED OUTPUT EXTENSION = .LS | |
254 | DCA OFILNM+3 | |
255 | TAD I [7600 | |
256 | CDF 0 | |
257 | CIF 10 | |
258 | JMS I [200 | |
259 | 3 | |
260 | ORCNO, 0 /POINTS TO FILE NAME | |
261 | OLEN, 0 | |
262 | JMP OUERR1 | |
263 | CIF 10 | |
264 | JMS I [200 | |
265 | 11 /KICK USR OUT OF CORE | |
266 | DCA OCOUNT | |
267 | CDF CIF 10 | |
268 | TAD ORCNO | |
269 | DCA I [OUREC | |
270 | TAD OUPAGE | |
271 | JMP I .+1 | |
272 | SRCOPT /GO SET UP OPTION SWITCHES AND COMPARE | |
273 | \fOCLOSE, CIF 10 | |
274 | JMS I [7700 | |
275 | 10 /GET USR INTO CORE | |
276 | CDF CIF 10 | |
277 | TAD I [7600 /GET OUTPUT DEVICE NUMBER | |
278 | CDF 0 | |
279 | JMS I [200 | |
280 | 4 /CLOSE OUTPUT FILE | |
281 | PFILNM, OFILNM | |
282 | OCOUNT, 0 /COUNT OF BLOCKS WRITTEN | |
283 | JMP OUERR1 /ERROR ON CLOSE | |
284 | SRCATS, ISZ NOCHN /IN CASE WE LOOP, CLEAR "CHAINED TO" FLAG | |
285 | CDF 10 | |
286 | TAD I [MPARAM-1 /GET ALTMODE FLAG | |
287 | CDF 0 | |
288 | SPA CLA | |
289 | JMP I [7605 /GO AWAY IF ALTMODE | |
290 | JMP SRCCD /GO BACK FOR MORE | |
291 | ||
292 | NOCHN, 0 | |
293 | ||
294 | INERR1, RDF | |
295 | CLL RTR | |
296 | RAR | |
297 | TAD [-4 | |
298 | OUERR1, TAD [4005 | |
299 | NOROOM, TAD [260 | |
300 | DCA SETUP | |
301 | TAD [277 | |
302 | JMS TYPE /OUTPUT "?N" WHERE N IS THE ERROR NUMBER | |
303 | TAD SETUP | |
304 | JMS TYPE | |
305 | TAD [215 | |
306 | JMS TYPE | |
307 | TAD [212 | |
308 | JMS TYPE | |
309 | TAD SETUP | |
310 | SPA CLA /IS THE USR IN CORE? | |
311 | JMP SRCATS /YES - DON'T LOAD IT | |
312 | CIF 10 | |
313 | JMS I [7700 /NO - LOAD IT | |
314 | 10 | |
315 | JMP SRCATS | |
316 | ||
317 | TYPE, 0 | |
318 | TLS | |
319 | TSF | |
320 | JMP .-1 | |
321 | CLA | |
322 | JMP I TYPE | |
323 | \f/ PAGE 0 LITERALS | |
324 | FIELD 1 | |
325 | \f /PAGE 0 FOR SRCCOM | |
326 | ||
327 | *0 | |
328 | T1, 0 | |
329 | T2, 0 | |
330 | T, 0 | |
331 | CT, 0 | |
332 | ||
333 | XR1=11 | |
334 | XR2=12 | |
335 | ||
336 | *20 | |
337 | ||
338 | /*************** SRCCOM SWITCHES *************** | |
339 | ||
340 | CSW, 0 /"C" SWITCH - ON=-257, MEANING IGNORE COMMENTS | |
341 | / OFF=+521, MEANING COMPARE COMMENTS | |
342 | SSW, 0 /"S" SWITCH - ON=-240, MEANING IGNORE SPACES & TABS | |
343 | / OFF=-200, MEANING COMPARE SPACES&TABS | |
344 | TSW, 0 /"T" SWITCH - ON=20 , MEANING CONVERT TABS ON OUTPUT | |
345 | / OFF=0 , MEANING PRINT TABS ON OUTPUT | |
346 | XSW, 0 /"X" SWITCH - ON=1 , MEANING DON'T INPUT COMMENTS | |
347 | / OFF=0 , MEANING INPUT COMMENTS INTO CORE | |
348 | ALLSW, 0 /"B" SWITCH - ON=2000, MEANING COMPARE BLANK LINES | |
349 | / OFF=0 , MEANING IGNORE BLANK LINES | |
350 | NUMLIN, 0 /NUMERICAL ARGUMENT - NUMBER OF LINES CONSTITUTING | |
351 | /A MATCH - SET TO -3 IF NO NUMERICAL ARGUMENT | |
352 | ||
353 | MLIMIT, 0 | |
354 | GETCNT, 0 | |
355 | GETFIL, 0 | |
356 | CHAR, 0 | |
357 | IPTR, 0 | |
358 | NUMTMP, 0 | |
359 | PLNCNT, 0 | |
360 | PNTPGN, 0 | |
361 | OUHNDL, 0 /THESE 5 WORDS ARE USED BY OUTPUT ROUTINE | |
362 | OUCHCT, 0 | |
363 | OUPTR, 0 | |
364 | OUXPTR, 0 | |
365 | OUTEMP, 0 | |
366 | TABCT, 0 | |
367 | DIFFS, 0 /DIFFERENCES FOUND FLAG | |
368 | ||
369 | CTCCHK, 0 | |
370 | TAD [200 | |
371 | KRS /GET A CHAR FROM THE TELETYPE | |
372 | TAD [-203 /CHECK FOR EITHER PARITY ^C | |
373 | SNA CLA | |
374 | KSF /WITH THE KEYBOARD FLAG UP | |
375 | JMP I CTCCHK /NOPE | |
376 | CDF CIF 0 /YUP - RETURN TO OS/8 | |
377 | JMP I [7600 | |
378 | \f PAGE | |
379 | ||
380 | SETONE, 0 /ROUTINE TO FIND WHERE A LINE IS | |
381 | TAD I [CURLIN /GET LINE NUMBER | |
382 | DCA TLNNUM /SAVE IT AWAY | |
383 | TAD I [OLDPTR /GET THE POINTER TO THE LATEST LINE | |
384 | SETOPT, DCA T /SAVE THE STARTING POINTER | |
385 | TAD TLNNUM /GET THE TARGET LINE | |
386 | CMA CLL | |
387 | TAD I [OLDLIN /IS IT BEFORE OR AFTER THE LATEST LINE? | |
388 | SZL | |
389 | JMP SETRST /BEFORE - WE MUST START SEARCHING FROM LINE 1 | |
390 | DCA CT /AFTER - START SEARCHING FROM LATEST LINE | |
391 | TLOOP, ISZ CT | |
392 | JMP KEEPON /NOT THERE YET | |
393 | TAD TLNNUM /WE FOUND IT - MAKE THIS LINE | |
394 | DCA I [OLDLIN /THE NEW "LATEST LINE" | |
395 | TAD T /TO SPEED UP | |
396 | DCA I [OLDPTR /FUTURE SEARCHES. | |
397 | CLA CMA | |
398 | TAD T | |
399 | JMP I SETONE /RETURN POINTER FOR AUTO-XR | |
400 | KEEPON, TAD I T | |
401 | TAD T /ADD LENGTH OF THIS LINE TO POINTER | |
402 | DCA T /TO GET POINTER TO NEXT LINE | |
403 | JMP TLOOP | |
404 | TLNNUM, 0 /TEMPORARY FOR SETONE - DO NOT USE ANYWHERE ELSE | |
405 | ||
406 | SETRST, CLA IAC /RESET THE "LATEST LINE" POINTERS TO THE FIRST | |
407 | DCA I [OLDLIN /LINE, SINCE THE LINE WE SEEK IS BEFORE | |
408 | TAD [LNBEG /THE CURRENT "LATEST LINE" | |
409 | JMP SETOPT /GO BACK AND FIND THE LINE | |
410 | \fMOVEUP, 0 /SUBR TO DELETE LINES FROM CORE | |
411 | TAD I [CURLIN /GET FIRST LINE NOT TO BE DELETED | |
412 | CIA | |
413 | TAD I [TOPLIN | |
414 | DCA I [TOPLIN /REDUCE THE NUMBER OF LINES IN THE BUFFER | |
415 | TAD I [TOPLIN /GET NEW LINE COUNT | |
416 | SNA /IF ALL LINES DELETED, DON'T MOVE CORE | |
417 | JMP MOVXIT /JUST CLEAN UP AND GET OUT | |
418 | IAC | |
419 | JMS SETONE /GET POINTER TO LAST LINE+1 | |
420 | CIA | |
421 | DCA MLIMIT /SAVE AS LIMIT ON MOVE | |
422 | IAC | |
423 | JMS SETONE /GET POINTER TO THE FIRST LINE NOT TO DELETE | |
424 | DCA XR1 | |
425 | TAD [LNBEG-1 | |
426 | DCA XR2 | |
427 | MLOOP, TAD I XR1 | |
428 | DCA I XR2 /AREN'T AUTO-XRS WONDERFUL | |
429 | TAD XR1 | |
430 | TAD MLIMIT /(ACTUALLY, NO) | |
431 | SZA CLA | |
432 | JMP MLOOP | |
433 | MOVXIT, CLA IAC /AFTER MOVING CORE AROUND, WE MUST | |
434 | DCA I [OLDLIN /RESET THE "LATEST LINE" POINTERS TO THE FIRST | |
435 | TAD [LNBEG /LINE SINCE IT IS THE ONLY ONE WHICH | |
436 | DCA I [OLDPTR /HAS A KNOWN POSITION. | |
437 | JMP I MOVEUP | |
438 | \fCOMPL, 0 /SUBROUTINE TO COMPARE TWO LINES | |
439 | CDF F1 | |
440 | JMS SETONE /GET POINTER TO CURRENT LINE IN FILE 1 | |
441 | TAD [2 /SKIP OVER PROLOGUE | |
442 | DCA XR1 | |
443 | CDF F2 | |
444 | JMS SETONE /GET POINTER TO CURRENT LINE IN FILE 2 | |
445 | TAD [2 /SKIP OVER PROLOGUE | |
446 | DCA XR2 | |
447 | COMP1, CDF F1 | |
448 | TAD I XR1 /GET A CHAR FROM FILE 1 | |
449 | DCA T1 | |
450 | COMP2, CDF F2 | |
451 | TAD I XR2 | |
452 | DCA T2 /AND A CHAR FROM FILE 2 | |
453 | COMP0, TAD T2 | |
454 | CIA | |
455 | TAD T1 | |
456 | SZA CLA /ARE THEY EQUAL? | |
457 | JMP COMP4 /NO | |
458 | COMP5, TAD T1 | |
459 | SZA | |
460 | TAD CSW /IF AT END OF LINE, OR IF AT A "/" | |
461 | SZA CLA /AND "IGNORE COMMENTS" SWITCH ON, | |
462 | JMP COMP1 | |
463 | JMP I COMPL /TAKE "LINES MATCH" RETURN | |
464 | ||
465 | COMP3, CDF F1 | |
466 | TAD I XR1 /GET THE NEXT CHAR FROM FILE 1 | |
467 | DCA T1 | |
468 | COMP4, TAD T1 | |
469 | TAD SSW /IF T1 IS A BLANK OR A TAB | |
470 | SZA | |
471 | TAD [27 /(27=BLANK-TAB) | |
472 | SNA CLA /AND WE ARE IGNORING BLANKS, | |
473 | JMP COMP3 /THEN IGNORE T1 | |
474 | TAD T2 | |
475 | TAD SSW /DO THE SAME WITH T2 | |
476 | SZA | |
477 | TAD [27 | |
478 | SNA CLA | |
479 | JMP COMP2 | |
480 | TAD T1 | |
481 | CIA | |
482 | TAD T2 /NOW THAT WE HAVE (MAYBE) ELIMINATED BLANKS | |
483 | SNA CLA /ARE T1 AND T2 STILL UNEQUAL? | |
484 | JMP COMP5 /NO - THERE'S STILL HOPE | |
485 | TAD T1 /YES - NOW TEST COMMENT SWITCH | |
486 | CMA | |
487 | AND T2 | |
488 | TAD CSW /IF T1 IS A CARRIAGE RETURN AND T2 IS A "/" | |
489 | SNA CLA /WITH THE COMMENT SWITCH ON WE'VE SUCEEDED | |
490 | JMP I COMPL /SO TAKE "LINES MATCH" RETURN | |
491 | TAD T2 | |
492 | CMA | |
493 | AND T1 /SAME IF T2=CARRIAGE RETURN AND T1="/" | |
494 | TAD CSW | |
495 | SZA CLA | |
496 | ISZ COMPL /OTHERWISE TAKE "LINES DON'T MATCH" RETURN | |
497 | JMP I COMPL | |
498 | ||
499 | GETTWO, 0 /SUBROUTINE TO GET A LINE FROM EACH FILE | |
500 | CLA CLL CMA RTL | |
501 | DCA GETCNT | |
502 | DCA GETFIL /ZERO INDICATOR AS TO WHICH FILE IS NULL | |
503 | CDF F1 | |
504 | JMS I [GLINE /GET A LINE FROM FILE 1 | |
505 | CDF F2 | |
506 | JMS I [GLINE /DITTO FILE 2 | |
507 | ISZ GETCNT /HOW MANY LINES DID WE GET? | |
508 | JMP I GETTWO /LESS THAN TWO - TAKE EOF RETURN | |
509 | ISZ GETTWO | |
510 | JMP I GETTWO /TAKE NORMAL RETURN | |
511 | ||
512 | PAGE | |
513 | \fGLINE, 0 /SUBROUTINE TO GET A LINE FROM A FILE | |
514 | TAD I [CURLIN | |
515 | CIA | |
516 | TAD I [TOPLIN | |
517 | SZA CLA /IS THE LINE IN CORE? | |
518 | JMP GLEXIT /YES | |
519 | CLA IAC | |
520 | JMS I [SETONE /GET POINTER TO THIS LINE | |
521 | DCA XR1 | |
522 | CLA CLL CML RTL | |
523 | DCA I XR1 /SET WORD COUNT TO 2 | |
524 | TAD XR1 | |
525 | DCA T /SAVE POINTER TO LENGTH WORD | |
526 | JMS CTCCHK /CHECK FOR ^C TYPED | |
527 | ISZ XR1 | |
528 | GLINE2, JMS GCHAR /MAIN LOOP - GET A CHARACTER | |
529 | JMS I [TSTXSW /SEE WHETHER WE SHOULD INPUT COMMENTS | |
530 | CLA CLL CMA RAL | |
531 | TAD CHAR | |
532 | TAD ALLSW /IF THE CHAR IS A CARRIAGE RETURN AND THE | |
533 | TAD I T /"B" SWITCH IS OFF AND THE LINE COUNT IS 2, | |
534 | SNA CLA /THEN WE SHOULD IGNORE THIS BLANK LINE. | |
535 | JMP GLINE2 | |
536 | TAD CHAR | |
537 | DCA I XR1 /SALT IT AWAY | |
538 | TAD XR1 | |
539 | CLL | |
540 | TAD [4-BUFLIM /COMPARE AGAINST END OF BUFFER | |
541 | SNL CLA | |
542 | JMP .+3 | |
543 | CDF CIF 0 /LINE OVERFLOWS CORE - BAD! | |
544 | JMP I [NOROOM /TELL THE WORLD | |
545 | ISZ I T /BUMP COUNTER OF WORDS IN LINE | |
546 | TAD CHAR | |
547 | SZA CLA /WAS IT A CARRIAGE RETURN? | |
548 | JMP GLINE2 /NO | |
549 | ISZ I [TOPLIN /YES - BUMP COUNT OF LINES IN CORE | |
550 | ISZ T | |
551 | TAD I [PGNUM | |
552 | DCA I T | |
553 | GLEXIT, ISZ GETCNT /BUMP COUNTER OF # OF LINES GOTTEN | |
554 | RDF | |
555 | TAD [6201 | |
556 | DCA GETFIL /INDICATE THAT THIS FILE WAS NOT NULL | |
557 | ISZ I [CURLIN /BUMP CURRENT LINE POINTER | |
558 | JMP I GLINE | |
559 | \fGCHAR, 0 /SUBROUTINE TO GET A CHAR FROM A FILE | |
560 | TAD I [INPTR | |
561 | DCA IPTR /SAVE POINTER TO CURRENT BUFFER WORD | |
562 | ISZ I [INCHCT /BUMP CHAR COUNTER | |
563 | JMP GETIN | |
564 | TAD I [INEOF /END OF BUFFER | |
565 | SZA CLA /END OF FILE?? | |
566 | JMP GEOF+1 /YES | |
567 | CLA CLL CML RTL | |
568 | TAD I [INRCNT /BUMP COUNT OF REMAINING RECORDS BY 2 | |
569 | SZL /OVERFLOW? | |
570 | ISZ I [INEOF /YES - SET END OF FILE FLAG | |
571 | SNL | |
572 | DCA I [INRCNT /RESTORE COUNTER IF NO OVERFLOW | |
573 | CLL CMA CML RTL | |
574 | RTL | |
575 | RTL | |
576 | TAD [401 /COMPUTE INPUT CONTROL WORD | |
577 | RDF | |
578 | DCA I [INCHCT | |
579 | TAD [INBUF | |
580 | DCA I [INPTR /PUT BUFFER ADDRESS INTO CALLING SEQUENCE | |
581 | RDF | |
582 | TAD [6203 | |
583 | DCA .+1 | |
584 | NOP /SET INSTRUCTION FIELD TO DATA FIELD | |
585 | JMS I [INTEMP /CALL SUBR TO READ IN BUFFER | |
586 | JMP .+4 /NO ERROR | |
587 | SPA CLA /FATAL ERROR? | |
588 | JMP I [INERR /YES | |
589 | ISZ I [INEOF /NO - SET END OF FILE FLAG | |
590 | ISZ I [INREC | |
591 | ISZ I [INREC /BUMP RECORD NUMBER BY 2 | |
592 | TAD [10 | |
593 | DCA I [INTEMP /INITIALIZE SHIFT REGISTER | |
594 | TAD I [INCHCT | |
595 | CLL RAL | |
596 | TAD I [INCHCT | |
597 | AND [7600 | |
598 | CMA | |
599 | DCA I [INCHCT /COMPUTE CHAR COUNT FROM BUFFER CONTROL WD | |
600 | JMP GCHAR+1 /START ALL OVER WITH NEW BUFFER | |
601 | \fGETIN, TAD I [INTEMP | |
602 | SPA /IF WE HAVE A CHAR IN THE SHIFT BUFFER | |
603 | DCA I IPTR /WRITE OVER THE CURRENT BUFFER WORD WITH IT | |
604 | DCA I [INTEMP /AND ZERO THE SHIFT BUFFER | |
605 | TAD I IPTR /GET THE CURRENT BUFFER WORD | |
606 | AND [7400 | |
607 | CLL RAL | |
608 | TAD I [INTEMP | |
609 | RTL /SHIFT THE HIGH ORDER 4 BITS | |
610 | RTL /INTO THE SHIFT BUFFER | |
611 | SMA /DID WE GET A COMPLETE CHARACTER? | |
612 | ISZ I [INPTR /NO - BUMP WORD POINTER | |
613 | DCA I [INTEMP | |
614 | TAD I IPTR | |
615 | AND [177 /USE LOW ORDER 7 BITS OF THE CURRENT WORD | |
616 | SZA /AS THE CHARACTER | |
617 | TAD [-177 /IGNORING BLANK TAPE, RUBOUTS, LINE-FEEDS | |
618 | SZA /AND VERT. TABS | |
619 | TAD [177-13 | |
620 | SZA | |
621 | IAC | |
622 | SNA | |
623 | JMP GCHAR+1 | |
624 | TAD [12-14 | |
625 | SNA | |
626 | JMP FFEED /FORM FEED IS SPECIAL | |
627 | TAD [14-32 | |
628 | SNA | |
629 | JMP GEOF /^Z SIGNIFIES END-OF-FILE | |
630 | TAD [32-15 | |
631 | SZA | |
632 | TAD [215 /AND CARRIAGE RETURN IS MAPPED INTO 0 | |
633 | DCA CHAR | |
634 | JMP I GCHAR | |
635 | ||
636 | FFEED, ISZ I [PGNUM /BUMP THE PROPER PAGE COUNT ON A FORM FEED | |
637 | JMP GCHAR+1 /BUT OTHERWISE IGNORE IT | |
638 | ||
639 | GEOF, ISZ I [INEOF /SET END-OF-FILE FLAG | |
640 | CLA CMA | |
641 | DCA I [INCHCT /FORCE AN EMPTY BUFFER | |
642 | JMP I GLINE /RETURN FROM GLINE WITHOUT SETTING GETFIL | |
643 | ||
644 | PAGE | |
645 | \f/ INITIALIZATION | |
646 | STARTC, JMS I [OUSETP /INITIALIZE OUTPUT BUFFER POINTERS | |
647 | CLA IAC | |
648 | DCA PNTPGN /FUDGE PNTPGN WHILE PRINTING HEADER LINES | |
649 | TAD [HEDING-1 | |
650 | JMS I [PNTHDG /PRINT SRCCOM HEADING LINE | |
651 | JMS I [GETTWO /GET TITLE LINES | |
652 | JMP FINISH /ONE FILE IS EMPTY - ABORT COMPARISON | |
653 | CDF F1 | |
654 | JMS I [PNTTXT /PRINT FILE 1 HEADER | |
655 | CDF F2 | |
656 | JMS I [PNTTXT /AND FILE 2 HEADER | |
657 | DCA PNTPGN /INITIALIZE PAGE NUMBER | |
658 | STA | |
659 | DCA DIFFS /INITIALIZE FLAG TO NO DIFFERENCES | |
660 | ||
661 | / MAIN LOOP | |
662 | ||
663 | MAIN, CDF F1 | |
664 | JMS I [MOVEUP | |
665 | CDF F2 | |
666 | JMS I [MOVEUP /DELETE ANY USELESS LINES | |
667 | MAINST, CDF F1 | |
668 | DCA I [CURLIN | |
669 | CDF F2 | |
670 | DCA I [CURLIN | |
671 | JMS I [GETTWO /GET TWO INPUT LINES | |
672 | JMP MAIN15 /ONE FILE IS EMPTY | |
673 | JMS I [COMPL /COMPARE THE LINES | |
674 | JMP MAIN /EQUAL - DELETE AND CONTINUE | |
675 | DCA DIFFS /UNEQUAL - CLEAR "NO DIFFERENCES" FLAG | |
676 | ||
677 | MAIN10, JMS I [GETTWO /GET TWO MORE LINES | |
678 | JMP MAIN15 /ONE FILE RAN OUT | |
679 | CDF F1 | |
680 | DCA I [CURLIN /INITIALIZE FILE 1 LINE NO. | |
681 | MAIN12, ISZ I [CURLIN /BUMP TO NEXT LINE IN FILE 1 | |
682 | JMS I [COMPL /COMPARE NEW LINE FROM FILE 2 | |
683 | JMS MULTI /WITH THIS LINE FROM FILE 1 | |
684 | CDF F2 /AND IF MATCH IS FOUND CHECK MULTIPLE LINES | |
685 | TAD I [CURLIN | |
686 | CIA | |
687 | CDF F1 | |
688 | TAD I [CURLIN | |
689 | SZA CLA /THROUGH WITH FILE 1 LINES? | |
690 | JMP MAIN12 /NO | |
691 | CDF F2 | |
692 | CLA IAC | |
693 | DCA I [CURLIN /NOW INITIALIZE FILE 2 LINE NO. | |
694 | MAIN14, TAD I [CURLIN | |
695 | CIA | |
696 | CDF F1 | |
697 | TAD I [CURLIN | |
698 | SNA CLA /HAVE WE EXHAUSTED FILE 2 LINES? | |
699 | JMP MAIN10 /YES - NO MATCH AT ALL | |
700 | JMS I [COMPL /NO - COMPARE ALL FILE 2 LINES | |
701 | JMS MULTI /AGAINST NEW FILE 1 LINE | |
702 | CDF F2 /AND, IF MATCH, CHECK MULTIPLE LINES | |
703 | ISZ I [CURLIN /GO TO NEXT FILE 2 LINE | |
704 | JMP MAIN14 /AND LOOP | |
705 | ||
706 | MAIN15, TAD GETFIL | |
707 | SNA /FIND WHICH FILE WAS EMPTY | |
708 | JMP FINISH /BOTH - ALL DONE | |
709 | DCA MAIN18 | |
710 | CDF F1 | |
711 | TAD I [CURLIN | |
712 | CDF F2 | |
713 | SZA CLA | |
714 | TAD I [CURLIN | |
715 | SNA CLA /IS EITHER FILE EXHAUSTED IN CORE? | |
716 | JMP MAIN18 /YES - PRINT ALL OF OTHER FILE | |
717 | TAD MAIN18 /GET CDF OF LONG FILE | |
718 | CIA | |
719 | TAD [4402+F1+F2 /COMPUTE CDF OF SHORT FILE | |
720 | DCA MAIN17 | |
721 | MAIN17, NOP | |
722 | TAD I [CURLIN | |
723 | CMA CLL | |
724 | TAD I [TOPLIN | |
725 | SNL CLA /IS CURLIN < TOPLIN? | |
726 | JMP MAIN10 /NO - WE STILL HAVE SOME COMPARING TO DO | |
727 | ISZ I [CURLIN | |
728 | JMS I [COMPL | |
729 | JMS MULTI | |
730 | JMP MAIN17 | |
731 | ||
732 | MAIN18, NOP /SET DF TO DATA FIELD OF LONG FILE | |
733 | JMS I [PNTTXT /PRINT IT | |
734 | JMP MAIN | |
735 | ||
736 | FINISH, CDF F1 | |
737 | TAD I [CURLIN | |
738 | CDF F2 | |
739 | TAD I [CURLIN | |
740 | SZA CLA /ARE BOTH CORE BUFFERS EMPTY? | |
741 | JMS I [PNTBTH /NO - PRINT THEM | |
742 | JMP I [EOCOMP | |
743 | \f/ MULTI-LINE COMPARATOR | |
744 | MULTI, 0 | |
745 | CDF F1 | |
746 | TAD I [CURLIN | |
747 | DCA I [TMPLIN | |
748 | CDF F2 | |
749 | TAD I [CURLIN | |
750 | DCA I [TMPLIN /STORE CURLIN AWAY IN A TEMPORARY | |
751 | TAD NUMLIN | |
752 | DCA NUMTMP /GET COUNT OF LINES TO COMPARE | |
753 | JMP MULT6 | |
754 | ||
755 | MULT2, JMS I [GETTWO /GET TWO LINES | |
756 | JMP MULT4 /ONE FILE HAS NO MORE | |
757 | JMS I [COMPL /COMPARE THEM | |
758 | JMP MULT6 /THEY COMPARE - KEEP GOING | |
759 | MULT4, JMS SWAPCT /RESET OLD CURLIN | |
760 | JMP I MULTI | |
761 | MULT6, ISZ NUMTMP /LINE COUNT EXHAUSTED? | |
762 | JMP MULT2 /NO - KEEP COMPARING | |
763 | JMS SWAPCT /RESTORE OLD CURLIN | |
764 | JMS I [PNTBTH /PRINT OUT DIFFERENCES | |
765 | TAD [-10 | |
766 | JMS I [PNTAST /PRINT OUT SEPARATOR | |
767 | JMS SWAPCT /RE-SWAP FOR DELETION | |
768 | JMP MAIN /DELETE THRU MATCHING LINES AND CONTINUE | |
769 | ||
770 | SWAPCT, 0 | |
771 | CDF F1 | |
772 | JMS SWAPX /SWAP CURLIN AND TMPLIN FOR FILE 1 | |
773 | CDF F2 | |
774 | JMS SWAPX /DITTO FOR FILE 2 | |
775 | JMP I SWAPCT | |
776 | SWAPX, 0 | |
777 | TAD I [CURLIN | |
778 | DCA NUMTMP | |
779 | TAD I [TMPLIN | |
780 | DCA I [CURLIN | |
781 | TAD NUMTMP | |
782 | DCA I [TMPLIN | |
783 | JMP I SWAPX | |
784 | ||
785 | PAGE | |
786 | \fPNTBTH, 0 /PRINT BOTH TEXT BUFFERS | |
787 | TAD [212 | |
788 | JMS I [OCHAR /SEPARATOR | |
789 | CDF F1 | |
790 | JMS PNTTXT /PRINT FILE 1 BUFFER | |
791 | TAD [-4 | |
792 | JMS PNTAST /PRINT SEPARATOR | |
793 | CDF F2 | |
794 | JMS PNTTXT /PRINT FILE 2 BUFFER | |
795 | TAD [212 | |
796 | JMS I [OCHAR /SEPARATOR | |
797 | JMP I PNTBTH | |
798 | ||
799 | PNTTXT, 0 /PRINT A TEXT BUFFER | |
800 | TAD I [CURLIN | |
801 | CIA | |
802 | DCA PLNCNT /GET # OF LINES TO PRINT | |
803 | PNTLP, DCA TABCT /ZERO TAB COUNTER (IN CASE "T" SW ON) | |
804 | RDF | |
805 | CLL RTR | |
806 | RAR /GET FILE NUMBER | |
807 | TAD [261 /260 FOR 12K VERSION | |
808 | JMS I [OCHAR | |
809 | TAD [251 | |
810 | JMS I [OCHAR /PRINT RPAR | |
811 | TAD PLNCNT | |
812 | IAC | |
813 | JMS I [SETONE /GET POINTER TO LINE | |
814 | IAC | |
815 | DCA XR1 | |
816 | TAD I XR1 /GET THE PAGE NUMBER OF THE LINE | |
817 | DCA T | |
818 | TAD T | |
819 | CIA | |
820 | TAD PNTPGN | |
821 | SNA CLA /DID THE PAGE NUMBER JUST CHANGE? | |
822 | JMP PNTTAB /NO - DON'T PRINT IT | |
823 | TAD TENTAD | |
824 | DCA PNTTAD | |
825 | TAD T | |
826 | DCA PNTPGN /UPDATE THE CURRENT PAGE NUMBER | |
827 | CLA CLL CMA RTL | |
828 | DCA CT /PRINT 3 DECIMAL DIGITS | |
829 | DIGLP1, DCA T1 | |
830 | JMP .+3 | |
831 | DIGLP2, DCA T | |
832 | ISZ T1 | |
833 | TAD T | |
834 | PNTTAD, HLT /ADD IN A POWER OF 10 | |
835 | SMA | |
836 | JMP DIGLP2 /KEEP GOING | |
837 | PN7200, CLA | |
838 | ISZ PNTTAD /GOT A DIGIT - GO TO NEXT POWER OF 10 | |
839 | TAD T1 | |
840 | TAD [260 | |
841 | JMS I [OCHAR /PRINT DIGIT | |
842 | ISZ CT /THROUGH? | |
843 | JMP DIGLP1 /NO | |
844 | PNTTAB, TAD TSW | |
845 | SNA CLA /SHOULD WE SIMULATE TABS? | |
846 | JMP PNTCHR /NO | |
847 | TAD [240 /YES - PRINT A BLANK | |
848 | JMS I [OCHAR | |
849 | TAD TABCT | |
850 | AND [7 | |
851 | SZA CLA /KEEP PRINTING BLANKS UNTIL WE REACH A MULTIPLE OF | |
852 | JMP PNTTAB /EIGHT COLUMNS. | |
853 | PNTCLP, TAD I XR1 /GET A CHARACTER FROM THE LINE | |
854 | SNA /END? | |
855 | JMP PNTCR /YES | |
856 | TAD [-211 | |
857 | SNA /IS IT A TAB? | |
858 | JMP PNTTAB /YES | |
859 | PNTCHR, TAD [211 /NO - RESTORE THE CHAR | |
860 | JMS I [OCHAR | |
861 | JMP PNTCLP /PRINT IT AND LOOP | |
862 | PNTCR, TAD [215 /PRINT CRLF | |
863 | JMS I [OCHAR | |
864 | TAD [212 | |
865 | JMS I [OCHAR | |
866 | ISZ PLNCNT | |
867 | JMP PNTLP /LOOP FOR EACH LINE IN BUFFER | |
868 | JMP I PNTTXT | |
869 | \fPNTAST, 0 /ROUTINE TO PRINT ASTERISKS | |
870 | DCA CT /SAVE COUNTER | |
871 | TAD ["* | |
872 | JMS I [OCHAR | |
873 | ISZ CT | |
874 | JMP .-3 /PRINT REQUIRED NUMBER OF ASTERISKS | |
875 | TAD [215 | |
876 | JMS I [OCHAR /TERMINATE THE LINE | |
877 | TAD [212 | |
878 | JMS I [OCHAR | |
879 | DCA PNTPGN /KILL CURR. PAGE NUMBER | |
880 | JMP I PNTAST | |
881 | ||
882 | EOCOMP, ISZ DIFFS /ANY DIFFERENCES? | |
883 | JMP .+4 /YES | |
884 | CDF 0 /MESSAGE IN FIELD 0 | |
885 | TAD [NODFMS-1 | |
886 | JMS I [PNTHDG /NO - PRINT MESSAGE | |
887 | TAD PN7200 /ROUTINE TO FINISH UP OUTPUT | |
888 | DCA CT | |
889 | TAD [214 | |
890 | JMS I [OCHAR /TERMINATE THE OUTPUT FILE | |
891 | TAD [232 /WITH A FORM FEED AND A ^Z | |
892 | JMS I [OCHAR | |
893 | ISZ CT | |
894 | JMP .-2 /FILL WITH ZEROS TO FORCE BUFFER OUT | |
895 | CDF CIF 0 | |
896 | JMP I .+1 /GO TO FIELD 0 TO FINISH UP AS WE WILL BE | |
897 | OCLOSE /OVERLAYED BY THE USR DURING THE CLOSE | |
898 | ||
899 | TENTAD, TAD .+1 /TABLE OF POWERS OF TEN | |
900 | -144 | |
901 | -12 | |
902 | -1 | |
903 | ||
904 | INERR, RDF /INPUT ERROR - ERROR NUMBER=FILE NUMBER | |
905 | CLL RTR | |
906 | RAR | |
907 | IFZERO CORE-2 <IAC> | |
908 | IFZERO CORE-4 <TAD [-1> | |
909 | CDF CIF 0 | |
910 | JMP I [NOROOM /GO TO COMMON ERROR ROUTINE | |
911 | ||
912 | PNTHDG, 0 /ROUTINE TO PRINT A LITERAL LINE | |
913 | DCA XR1 /POINTER TO LINE IN AC | |
914 | TAD PNTHDG | |
915 | DCA PNTTXT /WE WORK BY FAKING OUT PNTTXT | |
916 | STA | |
917 | DCA PLNCNT /SET LINE COUNTER TO 1 | |
918 | JMP PNTCLP | |
919 | ||
920 | PAGE | |
921 | \fOCHAR, 0 /LOW LEVEL OUTPUT ROUTINE | |
922 | AND [377 | |
923 | DCA OUTEMP | |
924 | ISZ TABCT /BUMP TAB COUNTER | |
925 | RDF | |
926 | TAD [6201 | |
927 | DCA OCDF | |
928 | CDF 10 | |
929 | TAD OUCHCT /GET CHAR COUNTER - CHAR COUNTER COUNTS | |
930 | RTR /FOUR TIMES FOR EACH THREE CHARACTERS. | |
931 | CML /WHEN THE LOW ORDER BITS OF THE COUNT ARE 10, | |
932 | SZL SPA CLA /ITS TIME TO SQUEEZE A CHAR INTO THE HIGH | |
933 | JMP OUNORM /ORDER BITS - OTHERWISE JUST STORE IT | |
934 | ISZ OUCHCT /WE MUST SQUEEZE - BUMP OUCHCT AN EXTRA | |
935 | TAD OUTEMP /TIME | |
936 | RTL | |
937 | RTL | |
938 | AND [7400 | |
939 | TAD I OUXPTR /FIRST WORD OF DOUBLET | |
940 | DCA I OUXPTR | |
941 | TAD OUTEMP | |
942 | RTR | |
943 | RTR | |
944 | RAR | |
945 | AND [7400 | |
946 | TAD I OUPTR /SECOND WORD OF DOUBLET | |
947 | JMP OUCOMN | |
948 | ||
949 | OUNORM, TAD OUPTR | |
950 | DCA OUXPTR /REMEMBER LAST WORD | |
951 | ISZ OUPTR | |
952 | TAD OUTEMP | |
953 | OUCOMN, DCA I OUPTR | |
954 | ISZ OUCHCT /BUMP CHAR COUNT | |
955 | JMP OCDF /RETURN | |
956 | CIF 0 /CHAR COUNT OVFLO - OUTPUT BUFFER | |
957 | JMS I OUHNDL | |
958 | 4210 | |
959 | 1400 | |
960 | OUREC, 0 | |
961 | JMP OUERR2 | |
962 | JMS OUSETP /INITIALIZE FOR NEXT BUFFER | |
963 | ISZ OUREC /BUMP RECORD NUMBER | |
964 | CDF 0 | |
965 | ISZ I [OCOUNT /BUMP CLOSING COUNT | |
966 | ISZ I [OLEN /AND LENGTH OF HOLE | |
967 | JMP OCDF | |
968 | OUERR2, CLL CML RTL /OUTPUT ERROR OR FILE TOO BIG - GENERATE | |
969 | IAC /A 3 OR A 4 MESSAGE, RESPECTIVELY | |
970 | CDF CIF 0 | |
971 | JMP I [NOROOM | |
972 | OCDF, HLT /RESTORE DATA FIELD | |
973 | JMP I OCHAR /RETURN | |
974 | \fOUSETP, 0 | |
975 | TAD [7000 /4 COUNTS FOR 2 WORDS | |
976 | DCA OUCHCT | |
977 | TAD [1377 | |
978 | DCA OUPTR | |
979 | JMP I OUSETP | |
980 | ||
981 | TSTXSW, 0 /SUBROUTINE TO IGNORE COMMENTS ON INPUT | |
982 | TAD CHAR /IF "X" SWITCH SET | |
983 | TAD [-257 | |
984 | SNA CLA | |
985 | TAD XSW /IF XSW IS OFF OR THE CURRENT CHAR ISN'T A / | |
986 | SNA CLA | |
987 | JMP I TSTXSW /RETURN | |
988 | JMS I [GCHAR | |
989 | TAD CHAR /SKIP CHARACTERS UNTIL CARRIAGE RETURN | |
990 | SZA CLA | |
991 | JMP .-3 | |
992 | TSTXLP, CLA CLL CMA RAL | |
993 | TAD I T | |
994 | SNA CLA /ARE WE AT THE BEGINNING OF A LINE? | |
995 | JMP I TSTXSW /YES - GLINE WILL DELETE IT IF NECESSARY | |
996 | TAD XR1 | |
997 | DCA TX | |
998 | TAD I TX | |
999 | TAD [-240 | |
1000 | SZA /IS THE PREVIOUS CHARACTER A SPACE | |
1001 | TAD [240-211 | |
1002 | SZA CLA /OR A TAB? | |
1003 | JMP I TSTXSW /NO | |
1004 | CMA | |
1005 | TAD XR1 | |
1006 | DCA XR1 /BACK UP CHAR PTR | |
1007 | CMA | |
1008 | TAD I T | |
1009 | DCA I T /AND CHAR CTR | |
1010 | JMP TSTXLP /LOOP | |
1011 | TX, 0 | |
1012 | \fSRCOPT, DCA OUHNDL | |
1013 | TAD I [MPARAM | |
1014 | CMA | |
1015 | AND [1000 /"C" OPTION | |
1016 | TAD [-257 | |
1017 | DCA CSW | |
1018 | CLA CLL CML RTR | |
1019 | AND I [MPARAM | |
1020 | DCA ALLSW /"B" OPTION | |
1021 | TAD I [MPARAM+1 | |
1022 | CMA | |
1023 | AND [40 /"S" OPTION | |
1024 | TAD [-240 | |
1025 | DCA SSW | |
1026 | TAD I [MPARAM+1 | |
1027 | AND [20 /"T" OPTION | |
1028 | DCA TSW | |
1029 | CLA IAC | |
1030 | AND I [MPARAM+1 | |
1031 | DCA XSW /"X" OPTION | |
1032 | TAD I [MPARAM+3 | |
1033 | CIA /GET NEGATIVE OF NUMERICAL ARGUMENT | |
1034 | SNA | |
1035 | CLA CLL CMA RTL /DEFAULT VALUE IS 3 | |
1036 | DCA NUMLIN /TO NUMBER OF LINES NECESSARY FOR A MATCH | |
1037 | JMP I .+1 | |
1038 | STARTC | |
1039 | ||
1040 | HEDING, "S;"R;"C;"C;"O;"M;" ;"V;VERSION+"0;PATCH;212;0 | |
1041 | \f/PAGE 0 LITERALS FOR FIELD 1 | |
1042 | $-$-$ /END OF ASSEMBLY OF SRCCOM | |
1043 | \f |