| 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 |