1 / OS/8 ENCODING PROGRAM 2 3 / LAST EDIT: 08-JUL-1992 22:00:00 CJL 4 5 / MUST BE ASSEMBLED WITH '/F' SWITCH SET. 6 7 / PROGRAM TO ENCODE OS/8 FILES INTO "PRINTABLE" ASCII FORMAT ("ENCODE"). 8 9 / DISTRIBUTED BY CUCCA AS "K12ENC.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE. 10 11 / WRITTEN BY: 12 13 / CHARLES LASNER (CJL) 14 / CLA SYSTEMS 15 / 72-55 METROPOLITAN AVENUE 16 / MIDDLE VILLAGE, NEW YORK 11379-2107 17 / (718) 894-6499 18 19 / USAGE: 20 21 / .RUN DEV ENCODE INVOKE PROGRAM 22 / *OUTPUT) 23 / *OUTPUT) 46 / . PROGRAM EXITS NORMALLY 47 48 / INPUT FILE ASSUMES .SV EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION. IF 49 / IMAGE MODE IS USED, THERE IS NO INPUT FILE SPECIFICATION; ONLY A DEVICE IS 50 / GIVEN ALONG WITH A LENGTH AND THE MANDATORY /I SWITCH. 51 52 / PROGRAM EXIT IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE 53 / KEYBOARD DURING THE COMMAND, OR ENDING THE COMMAND INPUT LINE WITH AN 54 / CHARACTER. 55 / THIS PROGRAM SUPPORTS A SUBSET OF THE ASCII FILE ENCODING SCHEME DEVELOPED BY 56 / CHARLES LASNER AND FRANK DA CRUZ. THE SCHEME USED IS FIVE-BIT ENCODING WITH 57 / COMPRESSION, (AS OPPOSED TO SIX-BIT WITHOUT COMPRESSION AS USED IN PRIOR 58 / VERSIONS). 59 60 / RESTRICTIONS: 61 62 / A) NO SUPPORT FOR MULTIPLE DECODABLE FILES PER ENCODED FILE. 63 64 / B) CREATES ENCODED PDP-8 60-BIT CHECKSUM AT END OF FILE. 65 66 / C) CUSTOMIZED (REMARK) COMMANDS MUST BE SEPARATELY ADDED BY THE USER. 67 68 / D) THE FILENAME IN THE (FILE ) AND (END ) COMMANDS WILL BE IDENTICAL TO 69 / THE ACTUAL INVOKED INPUT FILE. THE USER MUST SEPARATELY MODIFY THESE 70 / COMMANDS WHEN EXPORTING THE ENCODED FILE TO A SYSTEM WITH DIFFERENT 71 / NAMING CONVENTIONS. 72 73 / ERROR MESSAGES. 74 75 / ERROR MESSAGES ARE ONE OF TWO VARIETIES: COMMAND DECODER MESSAGES AND USER 76 / (PROGRAM-SIGNALLED) MESSAGES. 77 78 / COMMAND DECODER MESSAGES ARE NON-FATAL AND MERELY REQUIRE RETYPING THE 79 / COMMAND. ATTEMPTING TO USE MORE THAN ONE OUTPUT FILE WILL YIELD THE COMMAND 80 / DECODER MESSAGE "TOO MANY FILES" AND CAUSE A REPEAT OF THE COMMAND DECODER 81 / PROMPT REQUIRING USER INPUT. THE USER IS DIRECTED TO OTHER DOCUMENTATION OF 82 / THE "SPECIAL" MODE OF THE COMMAND DECODER, AS THAT IS THE ONLY MODE USED BY 83 / THIS UTILITY PROGRAM. 84 85 / ANY USER MESSAGE PRINTED IS A FATAL ERROR MESSAGE CAUSED BY A PROBLEM BEYOND 86 / THE SCOPE OF THE COMMAND DECODER. ALL USER MESSAGES ARE THE STANDARD OS/8 87 / "USER" ERROR MESSAGES OF THE FORM: "USER ERROR X AT AAAAA", WHERE X IS THE 88 / ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED. 89 / THE FOLLOWING USER ERRORS ARE DEFINED: 90 91 / ERROR NUMBER PROBABLE CAUSE 92 93 / 0 NO OUTPUT FILE. 94 95 / 1 INPUT FILE ERROR (CAN'T FIND INPUT FILE) OR NO INPUT 96 / FILE SPECIFIED OR TOO MANY INPUT FILES SPECIFIED. 97 / 2 ILLEGAL OUTPUT FILE NAME (WILD CARDS NOT ALLOWED). 98 99 / 3 NO OUTPUT FILE NAME (DEVICE ONLY IS NOT ALLOWED). 100 101 / 4 ERROR WHILE FETCHING FILE HANDLER. 102 103 / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. 104 105 / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. 106 107 / 7 ERROR WHILE CLOSING THE OUTPUT FILE. 108 109 / 8 I/O ERROR WHILE ENCODING FILE DATA. 110 / ASSEMBLY INSTRUCTIONS. 111 112 / IT IS ASSUMED THE SOURCE FILE K12ENC.PAL HAS BEEN MOVED AND RENAMED TO 113 / DSK:ENCODE.PA. 114 115 / .PAL ENCODE TERMINATED THE LINE 215 000214 3325 DCA EXITZAP /ELSE CAUSE EXIT LATER 216 000215 3041 DCA IMSW /CLEAR IMAGE-MODE; MIGHT GET SET LATER THOUGH 217 000216 1775 TAD I (OUTFILE) /GET OUTPUT FILE DEVICE WORD 218 000217 7450 SNA /SKIP IF OUTPUT FILE PRESENT 219 000220 5352 JMP TSTMORE /JUMP IF NOT THERE 220 000221 0176 AND [17] /JUST DEVICE BITS 221 000222 3056 DCA ODNUMBER /SAVE OUTPUT DEVICE NUMBER 222 000223 1774 TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD 223 000224 7450 SNA /SKIP IF PRESENT 224 000225 5343 JMP INERR /JUMP IF NOT 225 000226 0176 AND [17] /JUST DEVICE BITS 226 000227 3034 DCA IDNUMBER /SAVE INPUT DEVICE NUMBER 227 000230 1773 TAD I (INFILE+5) /GET SECOND INPUT FILE DEVICE WORD 228 000231 7640 SZA CLA /SKIP IF ONLY ONE INPUT FILE 229 000232 5343 JMP INERR /ELSE COMPLAIN 230 000233 4772 JMS I (MIFNAME) /MOVE INPUT FILENAME WITH ADJUSTED EXTENSION 231 000234 1575 TAD I [OUTFILE+1] /GET FIRST OUTPUT FILENAME WORD 232 000235 7650 SNA CLA /SKIP IF NAME PRESENT 233 000236 5341 JMP NONAMERROR /JUMP IF DEVICE ONLY 234 000237 4771 JMS I (MOFNAME) /MOVE OUTPUT FILENAME 235 000240 6201 CDF PRGFLD /BACK TO OUR FIELD 236 000241 6212 CIF USRFLD /GOTO USR FIELD 237 000242 4577 JMS I [USR] /CALL USR ROUTINE 238 000243 0013 RESET /RESET SYSTEM TABLES 239 000244 1370 TAD (OHNDBUFFER+1) /GET BUFFER POINTER+TWO-PAGE BIT 240 000245 3252 DCA OHPTR /STORE IN-LINE 241 000246 1056 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 242 000247 6212 CIF USRFLD /GOTO USR FIELD 243 000250 4577 JMS I [USR] /CALL USR ROUTINE 244 000251 0001 FETCH /FETCH HANDLER 245 000252 0000 OHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT 246 000253 5340 JMP FERROR /FETCH ERROR 247 000254 1252 TAD OHPTR /GET RETURNED ADDRESS 248 000255 3057 DCA OUTPUT /STORE AS OUTPUT HANDLER ADDRESS 249 000256 1367 TAD (IHNDBUFFER+1) /GET INPUT BUFFER POINTER+TWO-PAGE BIT 250 000257 3264 DCA IHPTR /STORE IN-LINE 251 000260 1034 TAD IDNUMBER /GET INPUT DEVICE NUMBER 252 000261 6212 CIF USRFLD /GOTO USR FIELD 253 000262 4577 JMS I [USR] /CALL USR ROUTINE 254 000263 0001 FETCH /FETCH HANDLER 255 000264 0000 IHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT 256 000265 5340 JMP FERROR /FETCH ERROR 257 000266 1264 TAD IHPTR /GET RETURNED ADDRESS 258 000267 3044 DCA INPUT /STORE AS INPUT HANDLER ADDRESS 259 000270 1041 TAD IMSW /GET IMAGE-MODE SWITCH 260 000271 7650 SNA CLA /SKIP IF IMAGE MODE SET 261 000272 4766 JMS I (GEIFILE) /GO LOOKUP INPUT FILE 262 000273 1365 TAD (FNAME) /POINT TO 263 000274 3303 DCA ENTAR1 /STORED FILENAME 264 000275 3304 DCA ENTAR2 /CLEAR SECOND ARGUMENT 265 000276 4764 JMS I (INDATE) /GET INPUT FILE'S DATE 266 000277 1056 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 267 000300 6212 CIF USRFLD /GOTO USR FIELD 268 000301 4577 JMS I [USR] /CALL USR ROUTINE 269 000302 0003 ENTER /ENTER TENTATIVE FILENAME 270 000303 0000 ENTAR1, .-. /WILL POINT TO FILENAME 271 000304 0000 ENTAR2, .-. /WILL BE ZERO 272 000305 5336 JMP ENTERR /ENTER ERROR 273 000306 1303 TAD ENTAR1 /GET RETURNED FIRST RECORD 274 000307 3060 DCA OUTRECORD /STORE IT 275 000310 1304 TAD ENTAR2 /GET RETURNED EMPTY LENGTH 276 000311 7001 IAC /ADD 2-1 FOR OS/278 CRAZINESS 277 000312 3031 DCA DANGCNT /STORE AS DANGER COUNT 278 000313 4763 JMS I (CLRCHKSUM) /CLEAR THE CHECKSUM 279 000314 4762 JMS I (ENCODIT) /GO DO THE ACTUAL ENCODING 280 000315 5327 JMP PROCERR /ERROR WHILE ENCODING 281 000316 1056 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 282 000317 6212 CIF USRFLD /GOTO USR FIELD 283 000320 4577 JMS I [USR] /CALL USR ROUTINE 284 000321 0004 CLOSE /CLOSE OUTPUT FILE 285 000322 0046 FNAME /POINTER TO FILENAME 286 000323 0000 OUTCNT, .-. /WILL BE ACTUAL COUNT 287 000324 5331 JMP CLSERR /CLOSE ERROR 288 000325 5202 EXITZAP,JMP START /**** TERMINATION **** 0000 289 000326 5775 JMP I (SBOOT) /EXIT TO MONITOR 290 / ERROR WHILE PROCESSING INPUT FILE. 291 292 000327 7326 PROCERR,NL0002 /SET INCREMENT 293 000330 7410 SKP /DON'T USE NEXT 294 295 / ERROR WHILE CLOSING THE OUTPUT FILE. 296 297 000331 7201 CLSERR, NL0001 /SET INCREMENT 298 000332 7410 SKP /DON'T CLEAR IT 299 300 / OUTPUT FILE TOO LARGE ERROR. 301 302 000333 7200 SIZERR, CLA /CLEAN UP 303 000334 1174 TAD [3] /SET INCREMENT 304 000335 7410 SKP /DON'T USE NEXT 305 306 / ENTER ERROR. 307 308 000336 7326 ENTERR, NL0002 /SET INCREMENT 309 000337 7410 SKP /DON'T USE NEXT 310 311 / HANDLER FETCH ERROR. 312 313 000340 7201 FERROR, NL0001 /SET INCREMENT 314 315 / NO OUTPUT FILENAME ERROR. 316 317 000341 7001 NONAMER,IAC /SET INCREMENT 318 319 / ILLEGAL OUTPUT FILE NAME ERROR. 320 321 000342 7001 BADNAME,IAC /SET INCREMENT 322 323 / INPUT FILESPEC ERROR. 324 325 000343 7001 INERR, IAC /SET INCREMENT 326 327 / OUTPUT FILESPEC ERROR. 328 329 000344 3351 OUTERR, DCA ERRNUMBER /STORE ERROR NUMBER 330 000345 6201 CDF PRGFLD /ENSURE OUR FIELD 331 000346 6212 CIF USRFLD /GOTO USR FIELD 332 000347 4577 JMS I [USR] /CALL USR ROUTINE 333 000350 0007 USERROR /USER ERROR 334 000351 0000 ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER 335 336 / COMES HERE TO TEST FOR NULL LINE. 337 338 000352 1774 TSTMORE,TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD 339 000353 7640 SZA CLA /SKIP NO INPUT OR OUTPUT GIVEN 340 000354 5344 JMP OUTERR /ELSE COMPLAIN 341 000355 6201 CDF PRGFLD /BACK TO OUR FIELD 342 000356 5325 JMP EXITZAP /MIGHT BE LAST TIME, SO GO THERE FIRST 343 000362 0400 PAGE 000363 1425 000364 1631 000365 0046 000366 1200 000367 7201 000370 6601 000371 1325 000372 1651 000373 7612 000374 7605 000375 7600 000376 7642 000377 7700 344 000400 0000 ENCODIT,.-. /ENCODING ROUTINE 345 000401 1045 TAD INRECORD /GET INPUT FILE STARTING RECORD 346 000402 3224 DCA INREC /STORE IN-LINE 347 000403 7240 NL7777 /SETUP INITIALIZE VALUE 348 000404 4573 JMS I [DOBYTE] /INITIALIZE OUTPUT ROUTINE 349 000405 4777 JMS I (TDMESSAGE) /OUTPUT TODAY'S DATE MESSAGE 350 000406 4776 JMS I (FDMESSAGE) /OUTPUT FILE DATE MESSAGE 351 000407 4572 JMS I [SCRIBE] /OUTPUT THE 352 000410 2040 FILMSG /(FILE MESSAGE 353 000411 4775 JMS I (PIFNAME) /OUTPUT THE INPUT FILENAME 354 000412 4572 JMS I [SCRIBE] /OUTPUT THE 355 000413 2014 EMSG /LINE ENDING 356 000414 1171 TAD [-WIDTH] /SETUP THE 357 000415 3075 DCA WIDCNT /LINE WIDTH COUNTER 358 000416 4774 JMS I (OUTSETUP) /SETUP PACKING ROUTINE AND CLEAR FILL 359 000417 1170 TAD [-5] /INITIALIZE 360 000420 3053 DCA OBOUND /BOUNDARY COUNTER 361 000421 4444 ENCLOOP,JMS I INPUT /CALL INPUT HANDLER 362 000422 0200 2^100 /READ TWO PAGES 363 000423 6200 PINBUFF,INBUFFER /INTO INPUT BUFFER 364 000424 0000 INREC, .-. /WILL BE LATEST INPUT FILE RECORD 365 000425 5600 ENCERRO,JMP I ENCODIT /INPUT ERROR, TAKE IMMEDIATE RETURN 366 000426 2224 ISZ INREC /BUMP TO NEXT RECORD 367 000427 7000 NOP /JUST IN CASE 368 000430 1223 TAD PINBUFFER/(INBUFFER) /SETUP THE 369 000431 3043 DCA INPTR /BUFFER POINTER 370 000432 4773 LOOP, JMS I (CHKBND) /CHECK IF ON A GOOD BOUNDARY 371 000433 5276 JMP NOCOMPRESSION /COMPRESS IS NOT ALLOWED AT THIS TIME 372 000434 1043 TAD INPTR /GET CURRENT POINTER 373 000435 3010 DCA XR1 /STASH FOR SEARCH 374 000436 3030 DCA CMPCNT /CLEAR MATCH COUNT 375 000437 1010 CMPLUP, TAD XR1 /GET INDEX VALUE 376 000440 1372 TAD (-2^200-INBUFFER+1) /COMPARE TO LIMIT 377 000441 7650 SNA CLA /SKIP IF NOT AT END OF BUFFER 378 000442 5252 JMP CMPEND /JUMP IF AT END OF BUFFER 379 000443 1410 TAD I XR1 /GET A CANDIDATE WORD 380 000444 7041 CIA /INVERT FOR TEST 381 000445 1443 TAD I INPTR /COMPARE TO CURRENT TEST VALUE 382 000446 7640 SZA CLA /SKIP IF IT MATCHES 383 000447 5252 JMP CMPEND /JUMP IF THIS IS NOT A REPEAT 384 000450 2030 ISZ CMPCNT /BUMP MATCH COUNT 385 000451 5237 JMP CMPLUP /TRY TO FIND MORE 386 / COMES HERE POSSIBLY WITH SOME COMPRESSED VALUES COUNTED. 387 388 000452 7344 CMPEND, NL7776 /-2 389 000453 1030 TAD CMPCNT /DID WE FIND ENOUGH MATCHES? 390 000454 7710 SPA CLA /SKIP IF SO 391 000455 5276 JMP NOCOMPRESSION /FORGET IT 392 000456 1371 TAD ("X-"0) /SETUP COMPRESSION INDICATOR 393 000457 4774 JMS I (OUTSETUP) /SETUP SPECIAL MODE 394 000460 4770 JMS I (PUT5) /OUTPUT "X" 395 000461 4774 JMS I (OUTSETUP) /SETUP NORMAL NUMERICAL MODE 396 000462 1443 TAD I INPTR /GET THE VALUE 397 000463 4567 JMS I [PUTIT] /OUTPUT IT 398 000464 2030 ISZ CMPCNT /ACCOUNT FOR ORIGINAL 399 000465 1030 TAD CMPCNT /GET COMPRESSION COUNT 400 000466 7106 CLL RTL;RTL /*16 000467 7006 401 000470 4567 JMS I [PUTIT] /OUTPUT BITS[0-7] ONLY 402 000471 4774 JMS I (OUTSETUP) /SETUP NORMAL NUMERICAL MODE AGAIN 403 000472 1043 TAD INPTR /GET INPUT POINTER 404 000473 1030 TAD CMPCNT /UPDATE PAST ALL COMPRESSED VALUES 405 000474 3043 DCA INPTR /STORE BACK 406 000475 5305 JMP TEST /CONTINUE THERE 407 408 / COMES HERE IF NO COMPRESSION FOUND (OR NOT ALLOWED). 409 410 000476 1443 NOCOMPR,TAD I INPTR /GET LATEST VALUE 411 000477 4567 JMS I [PUTIT] /OUTPUT IT 412 000500 2043 ISZ INPTR /BUMP TO NEXT 413 000501 2053 ISZ OBOUND /BUMP TO NEXT WORD 414 000502 5305 JMP TEST /KEEP GOING 415 000503 1170 TAD [-5] /RESET THE 416 000504 3053 DCA OBOUND /BOUNDARY COUNTER 417 000505 1043 TEST, TAD INPTR /GET INPUT POINTER 418 000506 1367 TAD (-2^200-INBUFFER) /COMPARE TO UPPER LIMIT 419 000507 7640 SZA CLA /SKIP IF AT END OF BUFFER 420 000510 5232 JMP LOOP /ELSE JUST KEEP GOING 421 000511 2042 ISZ INLEN /DONE ALL INPUT RECORDS? 422 000512 5221 JMP ENCLOOP /NO, KEEP GOING 423 424 / WE MUST FINISH THE LAST [5 WORDS => 12 BYTES] SEQUENCE. 425 426 000513 4773 ENDLUP, JMS I (CHKBND) /AT A GOOD BOUNDARY? 427 000514 7410 SKP /SKIP IF NOT 428 000515 5321 JMP ENDONE /JUMP IF SO 429 000516 4567 JMS I [PUTIT] /OUTPUT SOME WASTE BYTES 430 000517 2053 ISZ OBOUND /AT A GOOD BOUNDARY NOW? 431 000520 5313 JMP ENDLUP /NO, TRY AGAIN 432 000521 1366 ENDONE, TAD ("Z-"0) /GET END INDICATOR 433 000522 4774 JMS I (OUTSETUP) /SETUP SPECIAL MODE 434 000523 4770 JMS I (PUT5) /OUTPUT A "Z" 435 000524 4765 JMS I (INVCHKSUM) /INVERT THE CHECKSUM 436 000525 4774 JMS I (OUTSETUP) /SETUP NORMAL NUMERICAL MODE 437 000526 4764 JMS I (CHKOUT) /OUTPUT THE CHECKSUM 438 000527 4572 JMS I [SCRIBE] /OUTPUT THE 439 000530 2016 ENDMSG /END MESSAGE 440 000531 4775 JMS I (PIFNAME) /OUTPUT THE INPUT FILENAME 441 000532 4572 JMS I [SCRIBE] /OUTPUT THE 442 000533 2014 EMSG /LINE ENDING 443 000534 4572 JMS I [SCRIBE] /OUTPUT THE 444 000535 2023 EOFMSG /FINAL MESSAGE 445 000536 1363 TAD ("Z&37) /GET <^Z> 446 000537 4573 CLOSLUP,JMS I [DOBYTE] /OUTPUT A BYTE (^Z OR NULL) 447 000540 1020 TAD BUFPTR /GET THE OUTPUT BUFFER POINTER 448 000541 1362 TAD (-OUTBUFFER) /COMPARE TO RESET VALUE 449 000542 7640 SZA CLA /SKIP IF IT MATCHES 450 000543 5337 JMP CLOSLUP /ELSE KEEP GOING 451 000544 2200 ISZ ENCODIT /NO ERRORS 452 000545 5600 JMP I ENCODIT /RETURN 453 454 000562 2200 PAGE 000563 0032 000564 1415 000565 1434 000566 0052 000567 1200 000570 0733 000571 0050 000572 1201 000573 1725 000574 0726 000575 1236 000576 1457 000577 1472 455 000600 0000 PUTIT, .-. /WORD OUTPUT ROUTINE 456 000601 3062 DCA PUTEMP /SAVE PASSED VALUE 457 000602 4777 JMS I (CALCHKSUM) /UPDATE CHECKSUM 458 000603 5604 JMP I PUTNXT /GO WHERE YOU SHOULD GO 459 460 000604 0611 PUTNXT, PUT0 /OUTPUT EXIT ROUTINE 461 000605 1062 TAD PUTEMP /GET LATEST VALUE 462 000606 3064 DCA PUTPREV /SAVE FOR NEXT TIME 463 000607 5600 JMP I PUTIT /RETURN TO MAIL CALLER 464 465 000610 4204 PUTLUP, JMS PUTNXT /GET ANOTHER WORD 466 000611 1062 PUT0, TAD PUTEMP /GET WORD[0] 467 000612 7006 RTL;RTL;RTL /BITS[0-4] => AC[7-11] 000613 7006 000614 7006 468 000615 4333 JMS PUT5 /OUTPUT A CHARACTER 469 000616 1062 TAD PUTEMP /GET WORD[0] AGAIN 470 000617 7012 RTR /BITS[5-9] => AC[7-11] 471 000620 4333 JMS PUT5 /OUTPUT A CHARACTER 472 000621 4204 JMS PUTNXT /GET ANOTHER WORD 473 000622 1064 PUT1, TAD PUTPREV /GET WORD[0] 474 000623 0174 AND [3] /ISOLATE BITS[10-11] 475 000624 7106 CLL RTL;RAL /BITS[10-11] => AC[7-8] 000625 7004 476 000626 3064 DCA PUTPREV /SAVE FOR NOW 477 000627 1062 TAD PUTEMP /GET WORD[1] 478 000630 7006 RTL;RTL /BITS[0-2] => AC[9-11] 000631 7006 479 000632 0166 AND [7] /ISOLATE DESIRED BITS 480 000633 1064 TAD PUTPREV /ADD ON WORD[0] BITS IN AC[7-8] 481 000634 4333 JMS PUT5 /OUTPUT A CHARACTER 482 000635 1062 TAD PUTEMP /GET WORD[1] 483 000636 7012 RTR;RTR /BITS[3-7] => AC[7-11] 000637 7012 484 000640 4333 JMS PUT5 /OUTPUT A CHARACTER 485 000641 4204 JMS PUTNXT /GET ANOTHER WORD 486 000642 1062 PUT2, TAD PUTEMP /GET WORD[2] 487 000643 7004 RAL /BIT[0] => L 488 000644 7200 CLA /CLEAN UP 489 000645 1064 TAD PUTPREV /GET WORD[1] 490 000646 7004 RAL /BITS[8-11],L => AC[7-11] 491 000647 4333 JMS PUT5 /OUTPUT A CHARACTER 492 000650 1062 TAD PUTEMP /GET WORD[2] 493 000651 7012 RTR;RTR;RTR /BITS[1-5] => AC[7-11] 000652 7012 000653 7012 494 000654 4333 JMS PUT5 /OUTPUT A CHARACTER 495 000655 1062 TAD PUTEMP /GET WORD[2] 496 000656 7010 RAR /BITS[6-10] => AC[7-11] 497 000657 4333 JMS PUT5 /OUTPUT A CHARACTER 498 000660 4204 JMS PUTNXT /GET ANOTHER WORD 499 000661 1064 PUT3, TAD PUTPREV /GET WORD[2] 500 000662 7010 RAR /BIT[11] => L 501 000663 7200 CLA /CLEAN UP 502 000664 1062 TAD PUTEMP /GET WORD[3] 503 000665 7006 RTL;RTL;RAL /L, BITS[0-3] => AC[7-11] 000666 7006 000667 7004 504 000670 4333 JMS PUT5 /OUTPUT A CHARACTER 505 000671 1062 TAD PUTEMP /GET WORD[3] 506 000672 7012 RTR;RAR /BITS[4-8] => AC[7-11] 000673 7010 507 000674 4333 JMS PUT5 /OUTPUT A CHARACTER 508 000675 4204 JMS PUTNXT /GET ANOTHER WORD 509 000676 1064 PUT4, TAD PUTPREV /GET WORD[3] 510 000677 0166 AND [7] /ISOLATE BITS[9-11] 511 000700 7106 CLL RTL /BITS[9-11] => AC[7-9] 512 000701 3064 DCA PUTPREV /SAVE FOR NOW 513 000702 1062 TAD PUTEMP /GET WORD[4] 514 000703 7006 RTL;RAL /BITS[0-1] => AC[10-11] 000704 7004 515 000705 0174 AND [3] /ISOLATE BITS[10-11] 516 000706 1064 TAD PUTPREV /ADD ON WORD[3] BITS IN AC[7-9] 517 000707 4333 JMS PUT5 /OUTPUT A CHARACTER 518 000710 1062 TAD PUTEMP /GET WORD[4] 519 000711 7012 RTR;RTR;RAR /BITS[2-6] => AC[7-11] 000712 7012 000713 7010 520 000714 4333 JMS PUT5 /OUTPUT A CHARACTER 521 000715 1062 TAD PUTEMP /GET WORD[4] BITS[7-11] IN AC[7-11] 522 000716 4333 JMS PUT5 /OUTPUT A CHARACTER 523 000717 5210 JMP PUTLUP /GO DO ANOTHER GROUP OF FIVE WORDS 524 525 000720 0000 CHKNL, .-. /CHECK IF AT NEW LINE ROUTINE 526 000721 1075 TAD WIDCNT /GET LINE WIDTH COUNTER 527 000722 1376 TAD (WIDTH) /COMPARE TO MAXIMIM VALUE 528 000723 7640 SZA CLA /SKIP IF AT MAXIMUM 529 000724 2320 ISZ CHKNL /TAKE SKIP RETURN IF NOT AT MAXIMUM 530 000725 5720 JMP I CHKNL /RETURN EITHER WAY 531 532 000726 0000 OUTSETU,.-. /OUTPUT SETUP ROUTINE 533 000727 3033 DCA FILLVALUE /STORE PASSED FILL VALUE 534 000730 1375 TAD (PUT0) /SETUP THE 535 000731 3204 DCA PUTNXT /OUTPUT CO-ROUTINE 536 000732 5726 JMP I OUTSETUP /RETURN 537 000733 0000 PUT5, .-. /FIVE-BIT OUTPUT ROUTINE 538 000734 0165 AND [37] /JUST 5 BITS 539 000735 3063 DCA PUTLATEST /SAVE IT 540 000736 4320 JMS CHKNL /CHECK IF AT BEGINNING OF LINE 541 000737 7410 SKP /SKIP IF NOT 542 000740 5343 JMP PUTNORMAL /JUMP IF SO 543 000741 1374 TAD ("<&177) /GET BEGINNING BRACKET 544 000742 4573 JMS I [DOBYTE] /OUTPUT IT 545 000743 1063 PUTNORM,TAD PUTLATEST /GET LATEST VALUE 546 000744 1373 TAD ("0-"9-1) /COMPARE TO FIRST LIMIT 547 000745 7700 SMA CLA /SKIP IF LESS 548 000746 1166 TAD ["A-"9-1] /CONVERT LARGER VALUES TO A-V 549 000747 1063 TAD PUTLATEST /ADD ON LATEST VALUE 550 000750 1164 TAD ["0&177] /MAKE IT ASCII 551 000751 1033 TAD FILLVALUE /ADD ON FILL VALUE FOR SPECIAL MODE 552 000752 4573 JMS I [DOBYTE] /OUTPUT IT 553 000753 2075 ISZ WIDCNT /BUMP LINE COUNTER 554 000754 1075 TAD WIDCNT /GET LINE COUNTER 555 000755 7640 SZA CLA /SKIP IF AT END OF LINE 556 000756 5733 JMP I PUT5 /ELSE JUST RETURN 557 000757 1372 TAD (">&177) /GET DATA CLOSING CHARACTER 558 000760 4573 JMS I [DOBYTE] /OUTPUT IT 559 000761 1163 TAD ["M&37] /GET A 560 000762 4573 JMS I [DOBYTE] /OUTPUT IT 561 000763 1162 TAD ["J&37] /GET A 562 000764 4573 JMS I [DOBYTE] /OUTPUT IT 563 000765 1171 TAD [-WIDTH] /RESET THE 564 000766 3075 DCA WIDCNT /LINE WIDTH COUNTER 565 000767 5733 JMP I PUT5 /RETURN 566 567 000772 0076 PAGE 000773 7766 000774 0074 000775 0611 000776 0105 000777 1400 568 / MESSAGE PRINT ROUTINE. 569 570 001000 0000 SCRIBE, .-. /MESSAGE PRINT ROUTINE 571 001001 1600 TAD I SCRIBE /GET IN-LINE POINTER ARGUMENT 572 001002 3071 DCA SCRPTR /STASH THE POINTER 573 001003 2200 ISZ SCRIBE /BUMP PAST ARGUMENT 574 001004 1377 TAD (140) /INITIALIZE TO 575 001005 3067 DCA SCRCASE /LOWER-CASE 576 001006 1471 SCRLUP, TAD I SCRPTR /GET LEFT HALF-WORD 577 001007 7012 RTR;RTR;RTR /MOVE OVER 001010 7012 001011 7012 578 001012 4217 JMS SCRPRNT /PRINT IT 579 001013 1471 TAD I SCRPTR /GET RIGHT HALF-WORD 580 001014 4217 JMS SCRPRNT /PRINT IT 581 001015 2071 ISZ SCRPTR /BUMP TO NEXT PAIR 582 001016 5206 JMP SCRLUP /KEEP GOING 583 584 001017 0000 SCRPRNT,.-. /CHARACTER PRINT ROUTINE 585 001020 0161 AND [77] /JUST SIX BITS 586 001021 7450 SNA /END OF MESSAGE? 587 001022 5600 JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER 588 001023 3070 DCA SCRCHAR /NO, SAVE FOR NOW 589 001024 1070 TAD SCRCHAR /GET IT BACK 590 001025 1376 TAD (-"%!200) /IS IT "%"? 591 001026 7450 SNA /SKIP IF NOT 592 001027 5242 JMP SCRCRLF /JUMP IF IT MATCHES 593 001030 1375 TAD (-"^+100+"%) /IS IT "^" 594 001031 7650 SNA CLA /SKIP IF NOT 595 001032 5246 JMP SCRFLIP /JUMP IF IT MATCHES 596 001033 1070 TAD SCRCHAR /GET THE CHARACTER 597 001034 0160 AND [40] /DOES CASE MATTER? 598 001035 7650 SNA CLA /SKIP IF NOT 599 001036 1067 TAD SCRCASE /ELSE GET PREVAILING CASE 600 001037 1070 TAD SCRCHAR /GET THE CHARACTER 601 001040 4573 SCRPRLF,JMS I [DOBYTE] /OUTPUT THE CHARACTER 602 001041 5617 JMP I SCRPRNT /RETURN 603 604 001042 1163 SCRCRLF,TAD ["M&37] /GET A 605 001043 4573 JMS I [DOBYTE] /OUTPUT IT 606 001044 1162 TAD ["J&37] /GET A 607 001045 5240 JMP SCRPRLF /CONTINUE THERE 608 609 001046 1067 SCRFLIP,TAD SCRCASE /GET CURRENT CASE 610 001047 7041 CIA /INVERT IT 611 001050 1374 TAD (140+100) /ADD SUM OF POSSIBLE VALUES 612 001051 3067 DCA SCRCASE /STORE NEW INVERTED CASE 613 001052 5617 JMP I SCRPRNT /RETURN 614 001053 0000 PUTBYTE,.-. /OUTPUT A BYTE ROUTINE 615 001054 7510 SPA /ARE WE INITIALIZING? 616 001055 5266 JMP PUTINITIALIZE /YES 617 001056 0373 AND (177) /JUST IN CASE 618 001057 3052 DCA LATEST /SAVE LATEST CHARACTER 619 001060 1052 TAD LATEST /GET LATEST CHARACTER 620 001061 5662 JMP I PUTNEXT /GO WHERE YOU SHOULD GO 621 622 001062 0000 PUTNEXT,.-. /EXIT ROUTINE 623 001063 2253 ISZ PUTBYTE /BUMP TO GOOD RETURN 624 001064 7300 PUTERRO,CLA CLL /CLEAN UP 625 001065 5653 JMP I PUTBYTE /RETURN TO MAIN CALLER 626 627 001066 7200 PUTINIT,CLA /CLEAN UP 628 001067 1060 TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE 629 001070 3333 DCA PUTRECORD /STORE IN-LINE 630 001071 3772 DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH 631 001072 1371 PUTNEWR,TAD (OUTBUFFER) /SETUP THE 632 001073 3020 DCA BUFPTR /BUFFER POINTER 633 001074 4262 PUTLOOP,JMS PUTNEXT /GET A CHARACTER 634 001075 3420 DCA I BUFPTR /STORE IT 635 001076 1020 TAD BUFPTR /GET POINTER VALUE 636 001077 3074 DCA TEMPTR /SAVE FOR LATER 637 001100 2020 ISZ BUFPTR /BUMP TO NEXT 638 001101 4262 JMS PUTNEXT /GET A CHARACTER 639 001102 3420 DCA I BUFPTR /STORE IT 640 001103 4262 JMS PUTNEXT /GET A CHARACTER 641 001104 7006 RTL;RTL /MOVE UP 001105 7006 642 001106 0157 AND [7400] /ISOLATE HIGH NYBBLE 643 001107 1474 TAD I TEMPTR /ADD ON FIRST BYTE 644 001110 3474 DCA I TEMPTR /STORE COMPOSITE 645 001111 1052 TAD LATEST /GET LATEST CHARACTER 646 001112 7012 RTR;RTR;RAR /MOVE UP AND 001113 7012 001114 7010 647 001115 0157 AND [7400] /ISOLATE LOW NYBBLE 648 001116 1420 TAD I BUFPTR /ADD ON SECOND BYTE 649 001117 3420 DCA I BUFPTR /STORE COMPOSITE 650 001120 2020 ISZ BUFPTR /BUMP TO NEXT 651 001121 1020 TAD BUFPTR /GET LATEST POINTER VALUE 652 001122 1370 TAD (-2^200-OUTBUFFERR) /COMPARE TO LIMIT 653 001123 7640 SZA CLA /SKIP IF AT END 654 001124 5274 JMP PUTLOOP /KEEP GOING 655 001125 2031 ISZ DANGCNT /TOO MANY RECORDS? 656 001126 7410 SKP /SKIP IF NOT 657 001127 5767 JMP I (SIZERR) /JUMP IF SO 658 001130 4457 JMS I OUTPUT /CALL I/O HANDLER 659 001131 4200 2^100+WRITE /WRITE SOME PAGES FROM OUTPUT BUFFER 660 001132 5600 OUTBUFFER /BUFFER ADDRESS 661 001133 0000 PUTRECO,.-. /WILL BE LATEST RECORD NUMBER 662 001134 5264 JMP PUTERROR /OUTPUT ERROR! 663 001135 2772 ISZ I (OUTCNT) /BUMP ACTUAL LENGTH 664 001136 2333 ISZ PUTRECORD /BUMP TO NEXT RECORD 665 001137 5272 JMP PUTNEWRECORD /KEEP GOING 666 001140 0000 DOBYTE, .-. /OUTPUT A BYTE ROUTINE 667 001141 4253 JMS PUTBYTE /OUTPUT PASSED VALUE 668 001142 5766 JMP I (ENCERROR) /COULDN'T DO IT 669 001143 5740 JMP I DOBYTE /RETURN 670 671 001166 0425 PAGE 001167 0333 001170 1600 001171 5600 001172 0323 001173 0177 001174 0240 001175 0007 001176 7733 001177 0140 672 / INPUT FILE ROUTINE. 673 674 001200 0000 GEIFILE,.-. /GET INPUT FILE ROUTINE 675 001201 4222 JMS LUKUP /TRY TO LOOKUP THE FILE 676 001202 7410 SKP /SKIP IF IT WORKED 677 001203 5211 JMP TRYNULL /TRY NULL EXTENSION VERSION 678 001204 1233 NULLOK, TAD LARG2 /GET NEGATED LENGTH 679 001205 3042 DCA INLEN /STASH IT 680 001206 1232 TAD LARG1 /GET FIRST INPUT RECORD 681 001207 3045 DCA INRECORD /STASH IT 682 001210 5600 JMP I GEIFILE /RETURN 683 684 / COMES HERE IF LOOKUP FAILED. 685 686 001211 6211 TRYNULL,CDF TBLFLD /GOTO TABLE FIELD 687 001212 1556 TAD I [INFILE+4] /GET ORIGINAL FILENAME'S EXTENSION 688 001213 6201 CDF PRGFLD /BACK TO OUR FIELD 689 001214 7640 SZA CLA /SKIP IF IT WAS NULL ORIGINALLY 690 001215 5777 JMP I (INERR) /ELSE COMPLAIN OF EXPLICIT LOOKUP FAILURE 691 001216 3040 DCA IFNAME+3 /NOW TRY NULL VERSION INSTEAD OF DEFAULT VERSION 692 001217 4222 JMS LUKUP /TRY TO LOOK IT UP AGAIN 693 001220 5204 JMP NULLOK /THAT WORKED! 694 001221 5777 JMP I (INERR) /COMPLAIN OF LOOKUP FAILURE 695 696 001222 0000 LUKUP, .-. /LOW-LEVEL LOOKUP ROUTINE 697 001223 1376 TAD (IFNAME) /GET OUR FILENAME POINTER 698 001224 3232 DCA LARG1 /STORE IN-LINE 699 001225 3233 DCA LARG2 /CLEAR SECOND ARGUMENT 700 001226 1034 TAD IDNUMBER /GET INPUT DEVICE NUMBER 701 001227 6212 CIF USRFLD /GOTO USR FIELD 702 001230 4577 JMS I [USR] /CALL USR ROUTINE 703 001231 0002 LOOKUP /WANT LOOKUP FUNCTION 704 001232 0000 LARG1, .-. /WILL BE POINTER TO OUR FILENAME 705 001233 0000 LARG2, .-. /WILL RETURN FILE LENGTH (HOPEFULLY) 706 001234 2222 ISZ LUKUP /LOOKUP FAILED, SO BUMP RETURN ADDRESS 707 001235 5622 JMP I LUKUP /RETURN EITHER WAY 708 / INPUT FILENAME PRINT ROUTINE. 709 710 001236 0000 PIFNAME,.-. /PRINT INPUT FILENAME ROUTINE 711 001237 1041 TAD IMSW /GET IMAGE-MODE SWITCH 712 001240 7650 SNA CLA /SKIP IF SET 713 001241 5267 JMP DOIFNAME /JUMP IF NOT 714 001242 4572 JMS I [SCRIBE] /OUTPUT THE 715 001243 2044 IFMSG /IMAGE MESSAGE 716 001244 6211 CDF TBLFLD /GOTO TABLE FIELD 717 001245 1555 TAD I [EQUWRD] /GET EQUALS PARAMETER 718 001246 6201 CDF PRGFLD /BACK TO OUR FIELD 719 001247 4775 JMS I (OCTOUT) /OUTPUT IT 720 001250 6211 CDF TBLFLD /GOTO TABLE FIELD 721 001251 1554 TAD I [SWY9] /GET /Y-/9 SWITCHES 722 001252 6201 CDF PRGFLD /BACK TO OUR FIELD 723 001253 0167 AND [600] /JUST /1, /2 BITS 724 001254 7450 SNA /SKIP IF SOMETHING SET 725 001255 5636 JMP I PIFNAME /JUST RETURN IF NOT 726 001256 0153 AND [400] /JUST /1 BIT 727 001257 7650 SNA CLA /SKIP IF /1 SET 728 001260 5264 JMP PIFPT2 /JUMP IF /2 SET 729 001261 4572 JMS I [SCRIBE] /OUTPUT THE 730 001262 2070 PT1MSG /PART ONE MESSAGE 731 001263 5636 JMP I PIFNAME /RETURN 732 733 001264 4572 PIFPT2, JMS I [SCRIBE] /OUTPUT THE 734 001265 2100 PT2MSG /PART TWO MESSAGE 735 001266 5636 JMP I PIFNAME /RETURN 736 737 001267 1035 DOIFNAM,TAD IFNAME /GET FIRST PAIR 738 001270 4302 JMS PIF2 /PRINT IT 739 001271 1036 TAD IFNAME+1 /GET SECOND PAIR 740 001272 4302 JMS PIF2 /PRINT IT 741 001273 1037 TAD IFNAME+2 /GET THIRD PAIR 742 001274 4302 JMS PIF2 /PRINT IT 743 001275 1374 TAD (".&177) /GET SEPARATOR 744 001276 4314 JMS PIFOUT /PRINT IT 745 001277 1040 TAD IFNAME+3 /GET FOURTH PAIR 746 001300 4302 JMS PIF2 /PRINT IT 747 001301 5636 JMP I PIFNAME /RETURN 748 749 001302 0000 PIF2, .-. /PRINT A PAIR ROUTINE 750 001303 3070 DCA SCRCHAR /SAVE PASSED PAIR 751 001304 1070 TAD SCRCHAR /GET IT BACK 752 001305 7012 RTR;RTR;RTR /MOVE DOWN 001306 7012 001307 7012 753 001310 4314 JMS PIFOUT /PRINT HIGH-ORDER FIRST 754 001311 1070 TAD SCRCHAR /GET IT AGAIN 755 001312 4314 JMS PIFOUT /PRINT LOW-ORDER 756 001313 5702 JMP I PIF2 /RETURN 757 001314 0000 PIFOUT, .-. /FILENAME CHARACTER OUTPUT ROUTINE 758 001315 0161 AND [77] /JUST SIXBIT 759 001316 7450 SNA /SKIP IF SOMETHING THERE 760 001317 5714 JMP I PIFOUT /ELSE IGNORE IT 761 001320 1160 TAD [40] /INVERT IT 762 001321 0161 AND [77] /REMOVE EXCESS 763 001322 1160 TAD [40] /INVERT IT AGAIN 764 001323 4573 JMS I [DOBYTE] /OUTPUT IT 765 001324 5714 JMP I PIFOUT /RETURN 766 767 001325 0000 MOFNAME,.-. /MOVE OUTPUT FILENAME ROUTINE 768 001326 1575 TAD I [OUTFILE+1] /GET FIRST OUTPUT FILENAME WORD 769 001327 4343 JMS CHKNAME /CHECK IF LEGAL 770 001330 3046 DCA FNAME /STASH IT 771 001331 1773 TAD I (OUTFILE+2) /GET SECOND OUTPUT FILENAME WORD 772 001332 4343 JMS CHKNAME /CHECK IF LEGAL 773 001333 3047 DCA FNAME+1 /STASH IT 774 001334 1772 TAD I (OUTFILE+3) /GET THIRD OUTPUT FILENAME WORD 775 001335 4343 JMS CHKNAME /CHECK IF LEGAL 776 001336 3050 DCA FNAME+2 /STASH IT 777 001337 1771 TAD I (OUTFILE+4) /GET FOURTH OUTPUT FILENAME WORD 778 001340 4343 JMS CHKNAME /CHECK IF LEGAL 779 001341 3051 DCA FNAME+3 /STASH IT 780 001342 5725 JMP I MOFNAME /RETURN 781 782 / OUTPUT NAME CHECK ROUTINE. 783 784 001343 0000 CHKNAME,.-. /OUTPUT NAME CHECK ROUTINE 785 001344 3222 DCA LUKUP /SAVE PASSED VALUE 786 001345 1222 TAD LUKUP /GET IT BACK 787 001346 7012 RTR;RTR;RTR /MOVE DOWN 001347 7012 001350 7012 788 001351 4354 JMS CHKIT /CHECK HIGH-ORDER AND GET IT BACK 789 001352 4354 JMS CHKIT /CHECK LOW-ORDER AND GET IT BACK 790 001353 5743 JMP I CHKNAME /RETURN 791 792 001354 0000 CHKIT, .-. /ONE CHARACTER CHECK ROUTINE 793 001355 0161 AND [77] /JUST SIX BITS 794 001356 1370 TAD (-"?!200) /COMPARE TO "?" 795 001357 7440 SZA /SKIP IF ALREADY BAD 796 001360 1367 TAD (-"*+"?) /ELSE COMPARE TO "*" 797 001361 7650 SNA CLA /SKIP IF NEITHER BAD CASE 798 001362 5766 JMP I (BADNAME) /COMPLAIN OF WILD CHARACTER 799 001363 1222 TAD LUKUP /GET THE PAIR BACK FOR NEXT TIME 800 001364 5754 JMP I CHKIT /RETURN 801 001366 0342 PAGE 001367 0025 001370 7701 001371 7604 001372 7603 001373 7602 001374 0056 001375 1733 001376 0035 001377 0343 802 001400 0000 CALCHKS,.-. /CALCULATE CHECKSUM ROUTINE 803 001401 1022 TAD CHKFLG /SHOULD WE CHECKSUM? 804 001402 7640 SZA CLA /SKIP IF SO 805 001403 5600 JMP I CALCHKSUM /JUMP IF NOT 806 001404 4247 JMS CHKSETUP /SETUP 807 001405 1062 TAD PUTEMP /GET PASSED VALUE 808 001406 7110 CLL RAR /CLEAR LINK AND MOVE OVER 809 001407 7004 ADDLUP, RAL /MOVE OVER CARRY 810 001410 1410 TAD I XR1 /ADD A WORD 811 001411 3411 DCA I XR2 /STORE BACK 812 001412 2021 ISZ CCNT /DONE ENOUGH? 813 001413 5207 JMP ADDLUP /NO, KEEP GOING 814 001414 5600 JMP I CALCHKSUM /YES, RETURN 815 816 001415 0000 CHKOUT, .-. /OUTPUT THE CHECKSUM ROUTINE 817 001416 4247 JMS CHKSETUP /SETUP 818 001417 2022 ISZ CHKFLG /DISABLE CHECKSUMMING 819 001420 1410 TAD I XR1 /GET A WORD 820 001421 4567 JMS I [PUTIT] /OUTPUT IT 821 001422 2021 ISZ CCNT /DONE YET? 822 001423 5220 JMP .-3 /NO, KEEP GOING 823 001424 5615 JMP I CHKOUT /YES, WE'RE DONE 824 825 001425 0000 CLRCHKS,.-. /CLEAR CHECKSUM ROUTINE 826 001426 4247 JMS CHKSETUP /SETUP 827 001427 3410 DCA I XR1 /CLEAR A WORD 828 001430 2021 ISZ CCNT /DONE YET? 829 001431 5227 JMP .-2 /NO, DO ANOTHER 830 001432 3022 DCA CHKFLG /ENABLE CHECKSUMMING 831 001433 5625 JMP I CLRCHKSUM /RETURN 832 833 001434 0000 INVCHKS,.-. /CHECKSUM INVERSION ROUTINE 834 001435 4247 JMS CHKSETUP /SETUP 835 001436 7120 STL /FORCE INITIAL CARRY 836 001437 1410 COMLUP, TAD I XR1 /GET A WORD 837 001440 7040 CMA /INVERT IT 838 001441 7430 SZL /SKIP IF NO CARRY 839 001442 7101 CLL IAC /ELSE ADD ONE AND CLEAR CARRY FOR NEXT TIME 840 001443 3411 DCA I XR2 /STORE BACK 841 001444 2021 ISZ CCNT /DONE ALL YET? 842 001445 5237 JMP COMLUP /NO, KEEP GOING 843 001446 5634 JMP I INVCHKSUM /YES, RETURN 844 845 001447 0000 CHKSETU,.-. /CHECKSUM SETUP ROUTINE 846 001450 1377 TAD (CHKSUM-1) /POINT TO 847 001451 3010 DCA XR1 /CHECKSUM AREA 848 001452 1377 TAD (CHKSUM-1) /POINT TO 849 001453 3011 DCA XR2 /CHECKSUM AREA 850 001454 1170 TAD [-5] /SETUP THE 851 001455 3021 DCA CCNT /CHECKSUM COUNT 852 001456 5647 JMP I CHKSETUP /RETURN 853 / FILE DATE ROUTINE. 854 855 001457 0000 FDMESSA,.-. /PUT FILE DATE IN MESSAGE ROUTINE 856 001460 1032 TAD FDATE /GET INPUT FILE'S DATE 857 001461 7650 SNA CLA /SKIP IF ANY 858 001462 5657 JMP I FDMESSAGE /RETURN IF NONE 859 001463 4572 JMS I [SCRIBE] /PRINT OUT THE 860 001464 2000 DATMSG /DATE BLURB 861 001465 1032 TAD FDATE /GET IT BACK 862 001466 4312 JMS PRDATE /PRINT THE DATE 863 001467 4572 JMS I [SCRIBE] /PRINT THE 864 001470 2014 EMSG /END MESSAGE 865 001471 5657 JMP I FDMESSAGE /RETURN 866 867 001472 0000 TDMESSA,.-. /PUT TODAY'S DATE IN MESSAGE ROUTINE 868 001473 4572 JMS I [SCRIBE] /OUTPUT THE 869 001474 2111 REMMSG /OPENING REMARKS 870 001475 6211 CDF TBLFLD /GOTO TABLE FIELD 871 001476 1776 TAD I (DATWRD) /GET DATE WORD 872 001477 6201 CDF PRGFLD /BACK TO OUR FIELD 873 001500 7450 SNA /SKIP IF THERE 874 001501 5307 JMP NOTDATE /JUMP IF NOT 875 001502 3072 DCA TDATE /SAVE TODAY'S DATE 876 001503 4572 JMS I [SCRIBE] /OUTPUT THE 877 001504 2066 ONMSG /BRIDGING MESSAGE 878 001505 1072 TAD TDATE /GET TODAY'S DATE 879 001506 4312 JMS PRDATE /PRINT TODAY'S DATE 880 001507 4572 NOTDATE,JMS I [SCRIBE] /OUTPUT THE 881 001510 2014 EMSG /END MESSAGE 882 001511 5672 JMP I TDMESSAGE /RETURN 883 001512 0000 PRDATE, .-. /DATE PRINT ROUTINE 884 001513 3061 DCA PRTEMP /SAVE PASSED VALUE 885 001514 1061 TAD PRTEMP /GET IT BACK 886 001515 7012 RTR;RAR /MOVE DOWN 001516 7010 887 001517 0165 AND [37] /JUST DAY BITS 888 001520 4775 JMS I (DEC2) /PRINT AS TWO DIGITS 889 001521 1061 TAD PRTEMP /GET DATE AGAIN 890 001522 0157 AND [7400] /JUST MONTH BITS 891 001523 7106 CLL RTL;RTL;RTL /MOVE DOWN 001524 7006 001525 7006 892 001526 1374 TAD (MONLST-2-1) /POINT TO PROPER ELEMENT 893 001527 3010 DCA XR1 /STASH THE POINTER 894 001530 1410 TAD I XR1 /GET FIRST PAIR 895 001531 3773 DCA I (MMSG+1) /STORE IN MESSAGE 896 001532 1410 TAD I XR1 /GET SECOND PAIR 897 001533 3772 DCA I (MMSG+2) /STORE IN MESSAGE 898 001534 4572 JMS I [SCRIBE] /OUTPUT THE 899 001535 2061 MMSG /MONTH MESSAGE 900 001536 1061 TAD PRTEMP /GET DATE AGAIN 901 001537 0166 AND [7] /JUST YEAR BITS 902 001540 3073 DCA TEMP /SAVE IT 903 001541 6211 CDF TBLFLD /GOTO TABLE FIELD 904 001542 1776 TAD I (DATWRD) /GET CURRENT DATE WORD 905 001543 6201 CDF PRGFLD /BACK TO OUR FIELD 906 001544 0166 AND [7] /JUST YEAR BITS 907 001545 7041 CIA /INVERT FOR TEST 908 001546 1073 TAD TEMP /COMPARE TO DESIRED YEAR 909 001547 7740 SMA SZA CLA /SKIP IF THEY MATCH OR ARE EARLIER 910 001550 1371 TAD (-10) /ELSE BACKUP A GROUP 911 001551 1073 TAD TEMP /ADD TO YEAR 912 001552 3073 DCA TEMP /STORE BACK 913 001553 1770 TAD I (DATEXT) /GET EXTENSION WORD 914 001554 0167 AND [600] /JUST EXTENSION BITS 915 001555 7112 CLL RTR;RTR /MAKE IT GROUP COUNT 001556 7012 916 001557 1073 TAD TEMP /ADD ON RELATIVE YEAR 917 001560 1367 TAD (106) /MAKE IT ABSOLUTE YEAR (70-99) 918 001561 4775 JMS I (DEC2) /PRINT AS TWO DIGITS 919 001562 5712 JMP I PRDATE /RETURN 920 921 001567 0106 PAGE 001570 7777 001571 7770 001572 2063 001573 2062 001574 2206 001575 1600 001576 7666 001577 0022 922 001600 0000 DEC2, .-. /PRINT TWO DIGITS ROUTINE 923 001601 4211 JMS DIVIDE /DIVIDE 924 001602 0012 12 /BY 10 925 001603 1164 TAD ["0&177] /MAKE IT ASCII 926 001604 4573 JMS I [DOBYTE] /OUTPUT IT 927 001605 1066 TAD REM /GET SECOND DIGIT 928 001606 1164 TAD ["0&177] /MAKE IT ASCII 929 001607 4573 JMS I [DOBYTE] /OUTPUT IT 930 001610 5600 JMP I DEC2 /RETURN 931 932 / DIVIDE ROUTINE. 933 934 001611 0000 DIVIDE, .-. /DIVIDE ROUTINE 935 001612 3066 DCA REM /SAVE IN REMAINDER 936 001613 3065 DCA QUO /CLEAR QUOTIENT 937 001614 1066 TAD REM /GET IT BACK 938 001615 7161 STL CIA /INVERT 939 001616 7410 SKP /DON'T FIRST TIME 940 001617 2065 DVLOOP, ISZ QUO /BUMP UP QUOTIENT 941 001620 1611 TAD I DIVIDE /ADD ON ARGUMENT 942 001621 7470 SNA SZL /UNDERFLOW? 943 001622 5217 JMP DVLOOP /NO, KEEP GOING 944 001623 7041 CIA /YES, INVERT IT BACK 945 001624 1611 TAD I DIVIDE /RESTORE LOST VALUE 946 001625 3066 DCA REM /SAVE AS REMAINDER 947 001626 1065 TAD QUO /GET THE QUOTIENT 948 001627 2211 ISZ DIVIDE /BUMP PAST ARGUMENT 949 001630 5611 JMP I DIVIDE /RETURN 950 951 001631 0000 INDATE, .-. /GET INPUT FILE'S DATE WORD 952 001632 6211 CDF TBLFLD /GOTO TABLE FIELD 953 001633 1041 TAD IMSW /GET IMAGE-MODE SWITCH 954 001634 7650 SNA CLA /SKIP IF SET 955 001635 5240 JMP NOIMG /JUMP IF NOT 956 001636 1777 TAD I (DATWRD) /USE TODAY'S DATE 957 001637 5246 JMP NOAIW /CONTINUE THERE 958 959 001640 1776 NOIMG, TAD I (AIWCNT) /GET AIW COUNT 960 001641 7450 SNA /SKIP IF ANY 961 001642 5246 JMP NOAIW /JUMP IF NOT 962 001643 1576 TAD I [AIWXR] /GET ENTRY POINTER 963 001644 3073 DCA TEMP /STASH FIRST AIW POINTER 964 001645 1473 TAD I TEMP /GET FIRST AIW 965 001646 3032 NOAIW, DCA FDATE /SAVE AS FILE'S DATE 966 001647 6201 CDF PRGFLD /BACK TO OUR FIELD 967 001650 5631 JMP I INDATE /RETURN 968 / INPUT FILENAME MOVE ROUTINE; USES DEFAULT EXTENSION IF NONE PROVIDED BY USER. 969 970 001651 0000 MIFNAME,.-. /MOVE INPUT FILENAME ROUTINE 971 001652 1775 TAD I (INFILE+1) /GET FIRST INPUT FILENAME WORD 972 001653 7450 SNA /SKIP IF SOMETHING THERE 973 001654 5267 JMP IMTEST /JUMP IF NOT 974 001655 3035 IFNAMOK,DCA IFNAME /STASH IT 975 001656 1774 TAD I (INFILE+2) /GET SECOND INPUT FILENAME WORD 976 001657 3036 DCA IFNAME+1 /STASH IT 977 001660 1773 TAD I (INFILE+3) /GET THIRD INPUT FILENAME WORD 978 001661 3037 DCA IFNAME+2 /STASH IT 979 001662 1556 TAD I [INFILE+4] /GET FOURTH INPUT FILENAME WORD 980 001663 7450 SNA /SKIP IF SOMETHING THERE 981 001664 1372 TAD ("S^100+"V-300) /ELSE USE DEFAULT EXTENSION VALUE 982 001665 3040 DCA IFNAME+3 /STASH IT EITHER WAY 983 001666 5651 JMP I MIFNAME /RETURN 984 985 / TEST IF IMAGE-MODE IS SET. ASSUME /1 AND /2 ARE NOT SET. 986 987 001667 1771 IMTEST, TAD I (SWAL) /GET /A-/L SWITCHES 988 001670 0370 AND (10) /JUST /I BIT 989 001671 7640 SZA CLA /SKIP IF NOT SET 990 001672 1555 TAD I [EQUWRD] /GET EQUALS PARAMETER 991 001673 7450 SNA /SKIP IF SOMETHING THERE 992 001674 5767 JMP I (INERR) /ELSE COMPLAIN 993 001675 7041 CIA /INVERT IT 994 001676 3042 DCA INLEN /USE AS INPUT RECORD COUNT 995 001677 3045 DCA INRECORD /START AT THE BEGINNING OF THE DEVICE 996 001700 2041 ISZ IMSW /INDICATE IMAGE-MODE SET 997 998 / TEST IF /1 OR /2 IS SET. 999 1000 001701 1554 TAD I [SWY9] /GET /Y-/9 SWITCHES 1001 001702 0167 AND [600] /JUST /1, /2 SWITCHES 1002 001703 7450 SNA /SKIP IF EITHER SET 1003 001704 5255 JMP IFNAMOK /JUMP IF NEITHER SET 1004 1005 / TEST IF /1 IS SET. IF NOT, /2 MUST BE SET. 1006 1007 001705 0153 AND [400] /JUST /1 SWITCH 1008 001706 7650 SNA CLA /SKIP IF /1 SET 1009 001707 5315 JMP IM2 /JUMP IF /2 SET 1010 1011 / FOR A FIRST HALF, USE THE ROUNDED-DOWN FIRST HALF LENGTH. THE DATA STARTS AT 1012 / RECORD ZERO (ALREADY SET). 1013 1014 001710 1555 TAD I [EQUWRD] /GET EQUALS PARAMETER 1015 001711 7110 CLL RAR /%2 1016 001712 7041 IM2ENTR,CIA /INVERT IT 1017 001713 3042 DCA INLEN /SET COUNT FOR HALF OF THE DEVICE 1018 001714 5255 JMP IFNAMOK /KEEP GOING 1019 / FOR A SECOND HALF, THE DATA STARTS AT THE HALFWAY POINT (ROUNDED DOWN). 1020 1021 001715 1555 IM2, TAD I [EQUWRD] /GET EQUALS PARAMETER 1022 001716 7110 CLL RAR /%2 1023 001717 3045 DCA INRECORD /SETUP STARTING RECORD 1024 1025 / FOR A SECOND HALF, THE COUNT IS THE ORIGINAL AMOUNT MINUS THE COUNT FOR THE 1026 / FIRST HALF. 1027 1028 001720 1555 TAD I [EQUWRD] /GET EQUALS PARAMETER 1029 001721 7110 CLL RAR /%2 1030 001722 7041 CIA /INVERT IT 1031 001723 1555 TAD I [EQUWRD] /SUBTRACT FROM EQUALS PARAMETER 1032 001724 5312 JMP IM2ENTRY /CONTINUE THERE 1033 1034 001725 0000 CHKBND, .-. /CHECK IF ON GOOD OUTPUT BOUNDARY ROUTINE 1035 001726 1053 TAD OBOUND /GET BOUNDARY COUNTER 1036 001727 1366 TAD (5) /COMPARE TO BEGINNING VALUE 1037 001730 7650 SNA CLA /SKIP IF NOT AT BEGINNING 1038 001731 2325 ISZ CHKBND /SET SKIP RETURN IF AT BEGINNING 1039 001732 5725 JMP I CHKBND /RETURN EITHER WAY 1040 1041 001733 0000 OCTOUT, .-. /OCTAL OUTPUT ROUTINE 1042 001734 3055 DCA OCTEMP /SAVE IT 1043 001735 1365 TAD (-4) /SETUP THE 1044 001736 3054 DCA OCTCNT /DIGIT COUNTER 1045 001737 1055 OCTLUP, TAD OCTEMP /GET THE VALUE 1046 001740 7006 RTL;RAL /MOVE UP A DIGIT 001741 7004 1047 001742 3055 DCA OCTEMP /STORE BACK 1048 001743 1055 TAD OCTEMP /GET IT AGAIN 1049 001744 7004 RAL /PUT INTO CORRECT BITS 1050 001745 0166 AND [7] /JUST ONE DIGIT 1051 001746 1164 TAD ["0&177] /MAKE IT ASCII 1052 001747 4573 JMS I [DOBYTE] /OUTPUT IT 1053 001750 2054 ISZ OCTCNT /DONE ENOUGH? 1054 001751 5337 JMP OCTLUP /NO, GO BACK FOR MORE 1055 001752 5733 JMP I OCTOUT /YES, RETURN TO CALLER 1056 1057 001765 7774 PAGE 001766 0005 001767 0343 001770 0010 001771 7643 001772 2326 001773 7610 001774 7607 001775 7606 001776 1404 001777 7666 1058 / FILE TEXT MESSAGES. 1059 1060 002000 5036 DATMSG, TEXT "(^REMARK F^ILE ^D^ATE: " 002001 2205 002002 1501 002003 2213 002004 4006 002005 3611 002006 1405 002007 4036 002010 0436 002011 0124 002012 0572 002013 4000 1061 002014 5145 EMSG, TEXT ")%^" 002015 3600 1062 002016 7645 ENDMSG, TEXT ">%(^END ^" 002017 5036 002020 0516 002021 0440 002022 3600 1063 002023 5036 EOFMSG, TEXT "(^REMARK E^ND OF ^F^ILE)%" 002024 2205 002025 1501 002026 2213 002027 4005 002030 3616 002031 0440 002032 1706 002033 4036 002034 0636 002035 1114 002036 0551 002037 4500 1064 002040 5036 FILMSG, TEXT "(^FILE " 002041 0611 002042 1405 002043 4000 1065 002044 3602 IFMSG, TEXT "^B^LOCK-^I^MAGE-^F^ILE =^" 002045 3614 002046 1703 002047 1355 002050 3611 002051 3615 002052 0107 002053 0555 002054 3606 002055 3611 002056 1405 002057 4075 002060 3600 1066 002061 5536 MMSG, TEXT "-^D^EC-19" 002062 0436 002063 0503 002064 5561 002065 7100 1067 002066 7240 ONMSG, TEXT ": ^" 002067 3600 1068 002070 4036 PT1MSG, TEXT " ^F^IRST ^H^ALF" 002071 0636 002072 1122 002073 2324 002074 4036 002075 1036 002076 0114 002077 0600 1069 002100 4036 PT2MSG, TEXT " ^S^ECOND ^H^ALF^" 002101 2336 002102 0503 002103 1716 002104 0440 002105 3610 002106 3601 002107 1406 002110 3600 1070 002111 5036 REMMSG, TEXT "(^REMARK PDP-8/DEC^MATE ^E^NCODING ^P^ROGRAM ^V^ERSION ^" 002112 2205 002113 1501 002114 2213 002115 4020 002116 0420 002117 5570 002120 5704 002121 0503 002122 3615 002123 0124 002124 0540 002125 3605 002126 3616 002127 0317 002130 0411 002131 1607 002132 4036 002133 2036 002134 2217 002135 0722 002136 0115 002137 4036 002140 2636 002141 0522 002142 2311 002143 1716 002144 4036 1071 002145 6256 "0+VERSION^100+".-200; "0+REVISION^100+" -200 002146 6140 1072 002147 4040 TEXT " C^HARLES ^L^ASNER)%" 002150 4040 002151 4003 002152 3610 002153 0122 002154 1405 002155 2340 002156 3614 002157 3601 002160 2316 002161 0522 002162 5145 1073 002163 5036 TEXT "(^REMARK I^MAGE ^F^ILE ^C^REATED BY ^PDP^-8" 002164 2205 002165 1501 002166 2213 002167 4011 002170 3615 002171 0107 002172 0540 002173 3606 002174 3611 002175 1405 002176 4036 002177 0336 002200 2205 002201 0124 002202 0504 002203 4002 002204 3140 002205 3620 002206 0420 002207 3655 002210 7000 1074 1075 / MONTH TEXT TABLE. 1076 1077 002211 1236 MONLST, TEXT "J^AN" /JANUARY 002212 0116 1078 002213 0636 TEXT "F^EB" /FEBRUARY 002214 0502 1079 002215 1536 TEXT "M^AR" /MARCH 002216 0122 1080 002217 0136 TEXT "A^PR" /APRIL 002220 2022 1081 002221 1536 TEXT "M^AY" /MAY 002222 0131 1082 002223 1236 TEXT "J^UN" /JUNE 002224 2516 1083 002225 1236 TEXT "J^UL" /JULY 002226 2514 1084 002227 0136 TEXT "A^UG" /AUGUST 002230 2507 1085 002231 2336 TEXT "S^EP" /SEPTEMBER 002232 0520 1086 002233 1736 TEXT "O^CT" /OCTOBER 002234 0324 1087 002235 1636 TEXT "N^OV" /NOVEMBER 002236 1726 1088 002237 0436 TEXT "D^EC" /DECEMBER 002240 0503 1089 000153 0400 $ /THAT'S ALL FOLK! 000154 7645 000155 7646 000156 7611 000157 7400 000160 0040 000161 0077 000162 0012 000163 0015 000164 0060 000165 0037 000166 0007 000167 0600 000170 7773 000171 7673 000172 1000 000173 1140 000174 0003 000175 7601 000176 0017 000177 0200 ADDLUP 1407 AIWCNT 1404 AIWXR 0017 BADNAM 0342 BEGIN 0200 unreferenced BUFPTR 0020 CALCHK 1400 CCNT 0021 CHKBND 1725 CHKFLG 0022 CHKIT 1354 CHKNAM 1343 CHKNL 0720 CHKOUT 1415 CHKSET 1447 CHKSUM 0023 CLOSE 0004 CLOSLU 0537 CLRCHK 1425 CLSERR 0331 CMPCNT 0030 CMPEND 0452 CMPLUP 0437 COMLUP 1437 DANGCN 0031 DATEXT 7777 DATMSG 2000 DATWRD 7666 DEC2 1600 DECODE 0005 DIVIDE 1611 DOBYTE 1140 DOIFNA 1267 DVLOOP 1617 EMSG 2014 ENCERR 0425 ENCLOO 0421 ENCODI 0400 ENDLUP 0513 ENDMSG 2016 ENDONE 0521 ENTAR1 0303 ENTAR2 0304 ENTER 0003 ENTERR 0336 EOFMSG 2023 EQUWRD 7646 ERRNUM 0351 EXITZA 0325 FDATE 0032 FDMESS 1457 FERROR 0340 FETCH 0001 FILLVA 0033 FILMSG 2040 FNAME 0046 GEIFIL 1200 IDNUMB 0034 IFMSG 2044 IFNAME 0035 IFNAMO 1655 IHNDBU 7200 IHPTR 0264 IM2 1715 IM2ENT 1712 IMSW 0041 IMTEST 1667 INBUFF 6200 INDATE 1631 INERR 0343 INFILE 7605 INLEN 0042 INPTR 0043 INPUT 0044 INREC 0424 INRECO 0045 INVCHK 1434 LARG1 1232 LARG2 1233 LATEST 0052 LOOKUP 0002 LOOP 0432 LUKUP 1222 MIFNAM 1651 MMSG 2061 MOFNAM 1325 MONLST 2211 NL0001 7201 NL0002 7326 NL7776 7344 NL7777 7240 NOAIW 1646 NOCOMP 0476 NOIMG 1640 NONAME 0341 NOTDAT 1507 NULLOK 1204 OBOUND 0053 OCTCNT 0054 OCTEMP 0055 OCTLUP 1737 OCTOUT 1733 ODNUMB 0056 OHNDBU 6600 OHPTR 0252 ONMSG 2066 OUTBUF 5600 OUTCNT 0323 OUTERR 0344 OUTFIL 7600 OUTPUT 0057 OUTREC 0060 OUTSET 0726 PIF2 1302 PIFNAM 1236 PIFOUT 1314 PIFPT2 1264 PINBUF 0423 PRDATE 1512 PRGFLD 0000 PROCER 0327 PRTEMP 0061 PT1MSG 2070 PT2MSG 2100 PUT0 0611 PUT1 0622 unreferenced PUT2 0642 unreferenced PUT3 0661 unreferenced PUT4 0676 unreferenced PUT5 0733 PUTBYT 1053 PUTEMP 0062 PUTERR 1064 PUTINI 1066 PUTIT 0600 PUTLAT 0063 PUTLOO 1074 PUTLUP 0610 PUTNEW 1072 PUTNEX 1062 PUTNOR 0743 PUTNXT 0604 PUTPRE 0064 PUTREC 1133 QUO 0065 REM 0066 REMMSG 2111 RESET 0013 REVISI 0001 SBOOT 7600 SCRCAS 0067 SCRCHA 0070 SCRCRL 1042 SCRFLI 1046 SCRIBE 1000 SCRLUP 1006 SCRPRL 1040 SCRPRN 1017 SCRPTR 0071 SIZERR 0333 START 0202 SWAL 7643 SWY9 7645 TBLFLD 0010 TDATE 0072 TDMESS 1472 TEMP 0073 TEMPTR 0074 TERMWR 7642 TEST 0505 TRYNUL 1211 TSTMOR 0352 USERRO 0007 USR 0200 USRENT 7700 USRFLD 0010 USRIN 0010 VERSIO 0002 WIDCNT 0075 WIDTH 0105 WRITE 4000 XR1 0010 XR2 0011