A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / kl8e3d.pa
diff --git a/sw/rescue/lab8e_goettingen/disk2_11/rka/paroff/kl8e3d.pa b/sw/rescue/lab8e_goettingen/disk2_11/rka/paroff/kl8e3d.pa
new file mode 100644 (file)
index 0000000..ba398f5
--- /dev/null
@@ -0,0 +1,796 @@
+/17 SUPER TTY HANDLER FOR OS/8\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/COPYRIGHT  (C)  1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE\r
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT\r
+/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY\r
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.\r
+/\r
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER\r
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED\r
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH\r
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.\r
+/\r
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE\r
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY\r
+/DIGITAL.\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+/\r
+\r
+/S.W.,S.R.,H.J.,R.L.,S.R.\r
+\r
+       *0\r
+\r
+       -1\r
+       DEVICE KL8E;DEVICE TTY;0;TTY&177+4000;ZBLOCK 2\r
+\r
+/TWO-PAGE TELETYPE HANDLER FOR OS/8 V3.\r
+/ON INPUT, RECOGNIZES ^Z, ^C, ^U, RUBOUT\r
+/^Z    MEANS END OF INPUT, INSERT ^Z IN BUFFER,\r
+/      PAD WITH ZEROES, AND ECHO "^Z"\r
+/^C    MEANS ABORT JOB, RETURN TO OS/8 VIA LOC 7600 TO SAVE CORE AND PRINT "^C"\r
+/^U    MEANS DELETE THE LAST LINE, ALLOW OPERATOR TO RETYPE\r
+/      (LINE STARTS AT BEGIN OF BUFFER AND IS TERMINATED BY A CR)\r
+/      A CR GETS ENTERED INTO BUFFER, CAUSES A LF TO ALSO ECHO\r
+/      AND GET ENTERED INTO BUFFER, BUFFER IS THEN PADDED WITH NULLS.\r
+/      CONVERTS LC TO UC\r
+\r
+/ON OUTPUT RECOGNIZES ^C, ^O, ^S, ^Q FROM KEYBOARD\r
+/^C    CAUSES JOB TO ABORT, RETURN TO OS/8 VIA LOCATION 7600\r
+/      TO SAVE CORE AND PRINT "^C"\r
+/^O    CAUSES ECHOING BY THE HANDLER TO CEASE\r
+/      TYPING ANY OTHER CHARACTER RESUMES ECHOING.\r
+/^S    CAUSES THE HANDLER TO STOP SENDING TO TERMINAL\r
+/^Q    RESUMES HANDLER SENDING\r
+/      ^S AND ^Q ARE IGNORED  IN OTHER CASES\r
+\r
+/WHENEVER PRINTING CHARACTERS (EITHER ON OUTPUT OR WHEN ECHOING),\r
+/      IGNORES NULLS\r
+/      FLAGS LC WITH AN APOSTROPHE\r
+/      HANDLES TABS CORRECTLY (SEVERAL WAYS)\r
+/      PRINTS ESCAPE AS $\r
+/      DELAYS 16 MS AFTER LINEFEEDS\r
+/      PRINTS CONTROL CHARACTERS AS "^K"\r
+\r
+/DOES AUTOMATIC CR/LF AT END OF LINE WIDTH.\r
+\r
+/MAINTENANCE RELEASE CHANGES:\r
+\r
+/1.    ADDED KCC FOR NON-CONSOLE TELETYPES\r
+\r
+/V3D CHANGES: (VERSION E)\r
+\r
+/1.    ADDED DELAY OPTION FOR VT78\r
+/2.    ADDED SCOPE RUBOUTS\r
+/3.    CHANGED VT78 DEFAULTS\r
+/4.    REARRANGED CODE FOR SET TTY ESC AND ARROW\r
+\f      INDVC=03\r
+       OUTDVC=04\r
+\r
+       KSF=10^INDVC+6001\r
+       KCC=10^INDVC+6002\r
+       KRS=10^INDVC+6004\r
+       KRB=KCC KRS\r
+       TSF=10^OUTDVC+6001\r
+       TCF=10^OUTDVC+6002\r
+       TPC=10^OUTDVC+6004\r
+       TLS=TCF TPC\r
+\r
+       TTYVERSION="E&77\r
+\f/BUILD YOUR OWN TELETYPE HANDLER:\r
+\r
+/THIS SOURCE HAS MUMBLE LOCATIONS LEFT.\r
+\r
+/THE FOLLOWING CONDITIONALS ALLOW YOU TO INCLUDE OPTIONAL FEATURES.\r
+/YOU MAY INCLUDE AS MANY OR AS FEW AS YOU DESIRE PROVIDED THERE\r
+/IS ROOM LEFT.\r
+\r
+/CONDITIONAL   LOCATIONS       LOCATIONS       INCLUDED\r
+/VARIABLE      PAGE 1          PAGE 2          FEATURES\r
+\r
+/ DELAY                 0               7              DELAY AFTER GIVEN CHAR\r
+/ CTRL          0               3              PRINT CONTROL CHARS AS ^K\r
+/ RUB           0               0              PRINT CHAR RUBBED OUT ON RUBOUTS\r
+/ SIMTAB        0              10              SIMULATE TABS AS SPACES\r
+/ SLOTAB        0               6              PUT OUT 2 RUBOUTS AFTER A TAB\r
+/ ESC           0              10              PRINT ESCAPE AS $\r
+/ FLAGLC        0              12              FLAG LOWER CASE CHARS ON OUTPUT\r
+/ CNVLC                 0               7              CONVERT LOWER CASE ON INPUT TO UPPER CASE\r
+/ ALTMOD        0              11              CONVERT ALTMODES (175,176) TO ESCAPE (33)\r
+/ PAUS          0              20              PAUSE BETWEEN PAGES\r
+/ FREE LOCS:    2              33\r
+\r
+       VT78=1          /SET TO 0 TO ALLOW OTHER PARAMETERS\r
+                       /SET TO 1 TO FORCE OTHER PARAMETERS TO VT78 COMPATIBLE\r
+\r
+       DELAY=0         /SET NON-ZERO TO ALLOW DELAY AFTER ANY CHAR (12=CR)\r
+                       /TYPICALLY AFTER LF FOR HIGH SPEED VT05\r
+                       /SET VALUE OF DELAY = 7-BIT CHAR TO DELAY AFTER\r
+\r
+       CTRL=1          /SET TO 1 TO ECHO CONTROL CHARS AS ^K\r
+                       /SET TO 0 TO ACCEPT CONTROL CHARACTERS AND PUT\r
+                       /IN BUFFER, BUT NOT ECHO THEM (EXCEPT THE USUAL)\r
+       RUB=1           /SET TO 0 TO ECHO EACH RUBOUT BY TYPING A BACK SLASH\r
+                       /SET TO 1 TO ECHO CHARS RUBBED OUT UPON RUB-OUT\r
+                       /SET TO 4000 TO PERFORM SCOPE TYPE RUBOUTS\r
+       SIMTAB=1        /SET TO 1 TO SIMULATE TABS AS THE CORRECT NUMBER OF SPACES\r
+                       /SET TO 0 TO TYPE TABS AS TABS\r
+       SLOTAB=0        /SET TO 1 TO TYPE 2 RUBOUTS AFTER A TAB\r
+                       /ONLY IS APPLICABLE IF SIMTAB=0\r
+       ALTMOD=0        /SET TO 1 TO CONVERT 175,176 TO 33\r
+                       /(UPPER CASE TERMINALS ONLY)\r
+       ESC=1           /SET TO 1 TO ECHO ESCAPE AS $\r
+                       /SET TO 0 TO ECHO ESCAPE AS A CONTROL CHAR (^[)\r
+       FLAGLC=1        /SET TO 1 TO FLAG LOWER CASE CHARS ON OUTPUT\r
+                       /THIS IS FOR PEOPLE NOT PRIVELIDGED ENOUGH TO\r
+                       /OWN A LOWER CASE TERMINAL\r
+                       /SET TO 0 TO PRINT LOWER CASE CHARS AS IS\r
+       CNVLC=0         /SET TO 1 TO CONVERT LOWER CASE CHARS ON INPUT TO UPPER CASE\r
+                       /SET TO 0 TO ACCEPT INPUTTED LOWER CASE CHARS AS IS\r
+                       /THIS IS FOR PEOPLE WHO ARE HANDICAPPED BY A LOWER CASE\r
+                       /TERMINAL AND ONLY WANT UPPER CASE\r
+       PAUS=200        /NON-0 PAUSES BETWEEN SCOPE PAGES\r
+       HEIGHT=30       /NUMBER OF LINES PER SCREEN\r
+\r
+/SOME OF THE ABOVE OPTIONS SHOULD ACTUALLY BE IMPLEMENTED\r
+/IN SUCH A MANNER THAT THE USER CAN CHANGE THEM VIA AN ALTER\r
+/RATHER THAN HAVE TO REASSEMBLE.\r
+\r
+       IFNZRO VT78 <\r
+       DELAY=0\r
+       CTRL=1\r
+       RUB=4000\r
+       SIMTAB=0\r
+       SLOTAB=0\r
+       ALTMOD=0\r
+       ESC=1\r
+       FLAGLC=0\r
+       CNVLC=0\r
+       IFNZRO INDVC-3 <CTRL=0>\r
+       >\r
+\f/CROSS PAGE LINKAGE:\r
+\r
+/THIS CODE MUST BE ABLE TO LOAD INTO ANY TWO PAGES OF CORE\r
+/THE ENTRY POINT IS AT THE NEXT LOCATION TO THE END OF THE FIRST PAGE\r
+/AT THE END OF THE FIRST PAGE WE JMS TO PLINK,\r
+/THIS LEAVES THE ADDRESS OF THE FIRST LOCATION OF THE NEXT PAGE\r
+/IN LOCATION 'PLINK' .  THIS JUST HAPPENS TO BE THE ADDRESS\r
+/OF BOTH TTYPCH AND TTYGCH.\r
+\r
+/TTYPCH AND TTYGCH SHARE THE SAME ENTRY POINT.\r
+/IF IT IS CALLED WITH A 0 AC, IT IS A CALL TO TTYGCH,\r
+/IF IT IS CALLED WITH A NON-ZERO AC, IT IS A CALL TO TTYPCH.\r
+\r
+/RETURN 1 MEANS GOT RUBOUT\r
+/TTYGCH TAKES RETURN 2 IF IT GOT A ^Z.\r
+/OTHERWISE IT TAKES RETURN 3 WITH CHARACTER GOTTEN IN AC.\r
+\r
+/TTYPCH TAKES RETURN 1 IF IT WANTS THE HANDLER TO GO AWAY,\r
+/I.E IF IT SAW A ^Z.\r
+/AC IS NORMALLY NON-ZERO UPON RETURN\r
+/AC IS POSITIVE MEANS DO A CRLF\r
+\r
+/WHEN ECHOING WE WANT TO CALL TTYPRT\r
+/BUT OTHERWISE WE WANT TO CALL TTYPCH (WHICH DOES ADDITIONAL\r
+/STUFF LIKE CHECK ^O, ^Q, ETC.\r
+/WE TELL BY WHETHER OR NOT TTYGCH HAD BEEN PREVIOUSLY CALLED.\r
+\f      *200\r
+\r
+PLINK, 0               /GETS ADDRESS OF TTYPCH AND TTYGCH (START OF NEXT PAGE)\r
+       STL CLA RAR     /4000\r
+       TAD I TTY       /RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK\r
+       AND L3700       /EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER\r
+       CMA             /GET COUNT+1\r
+       DCA BUFSIZ      /STORE AWAY\r
+       RDF             /FIND OUT THE USER'S DATA FIELD\r
+       TAD CIFCDF      /FORM OUR EXIT CIF CDF\r
+       DCA TTYXIT      /STORE AWAY FOR EXIT ROUTINE\r
+       TAD TTY70       /GET FUNCTION WORD\r
+L776,  AND I TTY       /ISOLATE FIELD OF BUFFER\r
+       TAD TTYCDF      /FORM CDF TO FIELD OF BUFFER\r
+       DCA TTCDBF      /STORE WHERE IT WILL BE USEFUL\r
+                       /AT SAME TIME, INITIALIZE TTYEOF\r
+       ISZ TTY         /POINT TO BUFFER ADDRESS\r
+       TAD I TTY       /AND GET IT\r
+       DCA BUFSTRT     /AND SAVE IT\r
+       ISZ TTY         /POINT TO BLOCK #\r
+TTY376,        ISZ TTY         /POINT TO ERROR RETURN\r
+SHIFT,                 /OUTPUT SHIFT REGISTER\r
+TTYEOF,                        /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S\r
+TTCDBF,        HLT             /CDF BUFFER FIELD\r
+       JMP TTYKLG\r
+TTYLP, SNL CLA         /LINK=1 MEANS OUTPUT\r
+       JMP TTYGET      /INPUT IS FROM TTY:\r
+\f/LINK MUST BE SET FIRST TIME THROUGH HERE.\r
+/IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER\r
+ROTL,  RTL\r
+       RTL\r
+       SPA             /DO WE HAVE 8 BITS SHIFTED IN?\r
+       JMP TELP\r
+       DCA SHIFT       /SAVE SHIFT REGISTER\r
+       TAD I BUFSTRT\r
+       SZA\r
+       JMS PUNCH       /PRINT A CHARACTER\r
+       TAD I BUFSTRT\r
+       ISZ BUFSTRT     /BUMP INPUT POINTER\r
+TT7400,        7400            /PROTECT ISZ\r
+       AND TT7400\r
+       CLL RAL\r
+       TAD SHIFT       /SHIFT HIGH ORDER 4 BITS INTO\r
+       JMP ROTL        /SHIFT REGISTER\r
+TELP,  JMS PUNCH       /PRINT 3RD CHARACTER OF DOUBLE-WORD\r
+       STL             /***KLUDGE\r
+TTYKLG,        ISZ BUFSIZ      /DONE?\r
+       JMP TTYLP       /NOT YET\r
+TTYX,  TAD TTYEOF      /IF INPUT AND WE WERE PADDING WITH 0'S\r
+       SZA CLA         /TAKE SOFT ERROR EXIT\r
+TTYRTN,        ISZ TTY         /POINT TO NORMAL RETURN\r
+                       /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT\r
+TTYXIT,        HLT             /RETURN TO USER'S FIELD\r
+       JMP I TTY       /RETURN TO USER\r
+TTYCA, 0\r
+TTYWC, 0\r
+BUFSIZ,        0\r
+BUFSTRT,0\r
+TTY70, 70\r
+\r
+PUNCH, 0               /NEVER CALL TTYPCH WITH ZERO AC\r
+       JMS I PLINK     /CALL TTYPCH\r
+       JMP TTYRTN      /GO AWAY, WE SAW A ^Z\r
+L7700, SMA CLA         /DID WE REACH END OF TTY LINE?\r
+       JMS CRLF        /YES, PERFORM CR/LF\r
+       JMP I PUNCH     /RETURN\r
+\r
+TMP,\r
+CRLF,  0\r
+       TAD L215\r
+       JMS I PLINK     /CALL TTYPCH TO PRINT CR\r
+L215,  215             /CAN'T RETURN HERE\r
+       CLA             /****\r
+       TAD L212\r
+       JMS I PLINK     /CALL TTYPCH TO PRINT LF\r
+L212,  212             /CAN'T RETURN HERE\r
+       CLA             /****\r
+       JMP I CRLF      /RETURN\r
+\fCTRLU,        JMS CRLF        /PERFORM A CR/LF\r
+TTYGET,        TAD BUFSTRT\r
+       DCA TTYCA       /POINT TO START OF BUFFER\r
+       TAD BUFSIZ\r
+       CLL RAL         /CONVERT DOUBLE-WORDS TO WORDS\r
+DCAWC, DCA TTYWC       /SET SIZE OF BUFFER\r
+TSTEND,        TAD TTYEOF\r
+       SNA CLA\r
+       JMP ZERO\r
+       JMS I PLINK     /CALL TTYGCH TO GET A CHARACTER\r
+       JMP RUBOUT      /RETURN 1 MEANS SAW RUBOUT\r
+ZERO,  DCA I TTYCA     /RETURN 2 MEANS GOT CHARACTER\r
+                       /STORE AWAY TEMPORARILY\r
+                       /USING USER'S BUFFER AS A TEMP LOCATION\r
+       TAD I TTYCA     /GET BACK CHARACTER\r
+       IFNZRO .-320 <_ERROR>\r
+       SZA\r
+       JMS PUNCH       /ECHO IT\r
+       TAD I TTYCA     /GET IT AGAIN\r
+       TAD M32         /-^Z\r
+       SNA\r
+       JMP CTRLZ\r
+       TAD L5          /^Z-^U\r
+       SNA             /IS IT ^U?\r
+       JMP CTRLU       /YES\r
+       TAD L7\r
+GRUDGE,        DCA TMP\r
+       ISZ TTYCA       /NO\r
+L7,    7\r
+       ISZ TTYWC       /IS BUFFER FULL?\r
+TT10,  SKP\r
+       JMP TTYX\r
+       ISZ TMP         /WAS LAST CHAR A CR?\r
+       JMP TSTEND      /NO\r
+       DCA TTYEOF      /YES, SET "PAD WITH 0'S" FLAG\r
+       ISZ TTY         /POINT TO NORMAL RETURN\r
+                       /CR IS NOT AN ERROR OR END-OF-FILE\r
+       TAD L212        /IF LAST CHAR INPUT WAS CR, NOW PRETEND LF WAS INPUT\r
+       JMP ZERO        /REJOIN PROCESSING\r
+\r
+CTRLZ, DCA TTYEOF\r
+       JMS CRLF\r
+       JMP GRUDGE\r
+\r
+M32,   -32\r
+L5,    5\r
+L3700, 3700\r
+CIFCDF,        CIF CDF 0\r
+TTYCDF,        CDF 0\r
+\r
+/TTYEOF IS ZERO MEANS PAD BUFFER WITH ZEROES\r
+\f/DON'T DO YET:\r
+/RUBOUT,       AND TTYWC       /177 IN AC\r
+/      SNA CLA\r
+/      JMP CTRLU\r
+\r
+RUBOUT,        KCC             /TTYGCH DOESN'T CLEAR RO FROM BUFFER\r
+       TAD TTYCA\r
+       CIA\r
+       TAD BUFSTRT\r
+       SNA CLA         /ARE WE AT BEGIN OF BUFFER?\r
+       JMP CTRLU       /YES\r
+       STA\r
+       TAD TTYCA\r
+       DCA TTYCA\r
+       IFZERO RUB <\r
+LSLASH,        "\\r
+       TAD LSLASH              /PRINT A BACK SLASH FOR EACH RUBBED OUT CHAR\r
+       >\r
+       IFNZRO RUB&4000+RUB <TAD I TTYCA>       /PRINT CHAR JUST DELETED\r
+       IFNZRO RUB&4000 <TAD TT10>      /BACKSPACE-SPACE-BACKSPACE\r
+       JMS PUNCH\r
+       STA\r
+       TAD TTYWC\r
+       JMP DCAWC       /BUMP BACK WC AND GET ANOTHER CHAR\r
+\r
+       ZBLOCK 376-.\r
+TTY,   TTYVERSION      /ENTRY POINT TO HANDLER\r
+       JMS PLINK       /SET UP CROSS PAGE LINKAGE\r
+       IFNZRO TTY-376 <ENTERR,QQQQ>\r
+       PAGE\r
+\f/INTERLUDE:\r
+\r
+/USA STANDARD CODE FOR INFORMATION INTERCHANGE:\r
+\r
+/      000     001     010     011     100     101     110     111\r
+/\r
+/ 0000 NUL     DLE     SP      0       @       P       '       'P\r
+/\r
+/ 0001 SOH     DC1     !       1       A       Q       'A      'Q\r
+/\r
+/ 0010 STX     DC2     "       2       B       R       'B      'R\r
+/\r
+/ 0011 ETX     DC3     #       3       C       S       'C      'S\r
+/\r
+/ 0100 EOT     DC4     $       4       D       T       'D      'T\r
+/\r
+/ 0101 ENQ     NAK     %       5       E       U       'E      'U\r
+/\r
+/ 0110 ACK     SYN     &       6       F       V       'F      'V\r
+/\r
+/ 0111 BEL     ETB     '       7       G       W       'G      'W\r
+/\r
+/ 1000 BS      CAN     (       8       H       X       'H      'X\r
+/\r
+/ 1001 HT      EM      )       9       I       Y       'I      'Y\r
+/\r
+/ 1010 LF      SUB     *       :       J       Z       'J      'Z\r
+/\r
+/ 1011 VT      ESC     +       ;       K       [       'K      '[\r
+/\r
+/ 1100 FF      FS      ,       <       L       \       'L      '\\r
+/\r
+/ 1101 CR      GS      -       =       M       ]       'M      ']\r
+/\r
+/ 1110 SO      RS      .       >       N       ^       'N      '^\r
+/\r
+/ 1111 SI      US      /       ?       O       _       'O      '_\r
+/\r
+\f/TTYGCH:      GETS A CHAR FROM KBD\r
+/      IF GOT ^Z, IT SETS TTYEOF FLAG\r
+/      LEAVES IT IN AC IN 7-BIT\r
+\r
+/TTYPRT:       PRINTS CHAR IN AC ON TTY\r
+/      IGNORES NULLS\r
+/      PRINTS ^X ON CONTROL CHARS (EXCEPT CR, LF, FF, VT, TAB)\r
+/      PRINTS 'X ON LOWER CASE\r
+\r
+/HANDLES TABS CORRECTLY\r
+/      AND AUTOMATICALLY PRINTS CR/LF AT EOL\r
+/      PRINTS ESCAPE AS $\r
+\r
+/TTYTLS:       USED TO ACTUALLY PRINT CHAR\r
+/              IT HANDLES TABS AUTOMATICALLY\r
+/              AND CR/LF'S AT END OF LINE\r
+\r
+/TTYPCH:       IT USES TTYPRT TO PRINT CHAR BUT ALSO RESPONDS TO\r
+/              ^C, ^O, ^S, ^Q.\r
+/              IF ^Z IS BEING PRINTED, IT THEN STOPS FURTHER PRINTING\r
+\f/MUST BE AT TOP OF PAGE\r
+TTYPCH,                        /ENTRY POINT TO TTY PUNCH ROUTINE\r
+                       /OR TTY PRINT ROUTINE\r
+TTYGCH,        0               /ENTRY POINT TO TTY GET CHAR ROUTINE\r
+       SNA\r
+       JMS TGCH        /ZERO AC-MEANT CALL TO TTYGCH\r
+PCH,   AND (177        /FORCE TO 7-BIT\r
+       DCA TCHAR\r
+       TAD TGCH\r
+M140,  SZA CLA         /ARE WE ECHOING?\r
+       JMP ECHO        /YES, IGNORE ^S AND STUFF\r
+K5,    5               /MUST BE AT REL 10\r
+       TAD TCHAR\r
+       TAD (-32\r
+       IFZERO PAUS <\r
+       SNA CLA\r
+       JMP I TTYPCH\r
+       >\r
+       IFNZRO PAUS <\r
+       SNA\r
+       JMP I TTYPCH\r
+       TAD L15         /32-15\r
+       SNA CLA         /LOOK FOR CR\r
+       ISZ LINCNT      /AT END OF PAGE?\r
+       JMP NOPAUS      /NOT AT CR, OR AT CR BUT NOT AT END OF PAGE\r
+L15,   15              /MUST BE HERE FOR SET\r
+       TAD PAUSN\r
+       DCA TTYTLS      /SET COUNT FOR OUTER LOOP\r
+       ISZ LINCNT\r
+       JMP .-1\r
+       ISZ TTYTLS\r
+       JMP .-3\r
+       TAD LINSYZ\r
+       DCA LINCNT\r
+       >\r
+NOPAUS,        JMS TTYTST\r
+       TAD (203-217    /NO\r
+       SNA             /^O?\r
+       DCA TCHAR       /YES, SET TO NULL SO IT WILL BE IGNORED\r
+       TAD (217-223    /NO\r
+       SZA CLA         /^S?\r
+       JMP ECHO        /NO, IGNORE CHAR\r
+TTCTLQ,        JMS TTYTST\r
+       TAD (203-221    /NO, NOTHING ELSE MATTERS UNTIL ^Q\r
+       SZA CLA         /^Q?\r
+       JMP TTCTLQ      /NO, SUSPEND OUTPUTTING\r
+TTY32, KCC             /YES, REMOVE ^Q FROM BUFFER\r
+/HAD NO ROOM FOR:\r
+/      TAD LINSYZ\r
+/      DCA LINCNT\r
+ECHO,  DCA TGCH\r
+       ISZ TTYPCH\r
+       IFNZRO ESC <\r
+       TAD TCHAR\r
+       TAD (-33\r
+       SZA CLA\r
+       JMP .+3\r
+       TAD L44\r
+       DCA TCHAR\r
+L44,   44\r
+       >\r
+       TAD TCHAR\r
+       SNA\r
+       JMP TTYCTO      /IGNORE NULLS\r
+       IFNZRO RUB&4000 <\r
+       TAD (-10\r
+       SNA\r
+       JMP RUBO\r
+       TAD (10-16\r
+       >\r
+       IFZERO RUB&4000 <\r
+       TAD (-16\r
+       >\r
+TTY100,        CLL\r
+TTY10, TAD K5\r
+TTY240,        SZA             /TAB?\r
+       JMP NOTAB\r
+       IFNZRO SIMTAB <\r
+TTYTAB,        TAD TTY240\r
+       JMS TTYTLS\r
+TTY7,  7               /HERE FOR NO SPECIAL REASON\r
+       TAD TABCTR\r
+       AND TTY7\r
+       SZA CLA\r
+       JMP TTYTAB\r
+       JMP TTYCTO\r
+       >\r
+       IFNZRO SLOTAB <\r
+       TAD TCHAR\r
+       JMS TTYTLS\r
+       TAD (177\r
+       JMS TTYTLS\r
+       TAD (177\r
+       JMP PRIN+1\r
+       >\r
+       IFZERO SIMTAB+SLOTAB <JMP PRIN>\r
+\r
+/BUG: IF HARDWARE TABS, DON'T COUNT COLUMNS CORRECTLY\r
+\r
+       IFNZRO RUB&4000 <\r
+RUBO,  TAD TTY10       /OUTPUT BACKSPACE-RUBOUT-BACKSPACE\r
+       JMS TTYTLS\r
+       TAD TTY240\r
+       JMS TTYTLS\r
+       TAD (-4\r
+       TAD TABCTR\r
+       JMP PREPRN\r
+       >\r
+\fNOTAB,        SZL CLA\r
+       JMP SPCHR       /DON'T UPARROW CHARS LF,CR,TAB,VT,FF\r
+       IFNZRO FLAGLC <\r
+       TAD TCHAR\r
+       AND TTY140\r
+       TAD M140\r
+       SZA CLA         /IS IT LC?\r
+       JMP NOLC        /NO\r
+TTYQUO,        "'\r
+       TAD TTYQUO      /YES\r
+       JMS TTYTLS      /PRINT QUOTE\r
+       TAD M40\r
+       JMP PRIN        /PRINT UPPER CASE OF CHAR\r
+       >\r
+NOLC,  TAD TCHAR       /NO, GET BACK CHAR\r
+       AND TTY140      /HIGH ORDER BITS IRRELEVANT\r
+       IFNZRO CTRL <\r
+M40,   SMA SZA CLA     /CAN'T BE NEGATIVE\r
+       JMP PRIN        /NOT A CONTROL CHARACTER\r
+       TAD TTYUPA      /ECHO 201-237 AS ^X (EXCEPT 211-215)\r
+       JMS TTYTLS\r
+       TAD TTY100      /ADD X100 TO ^K TO GET K\r
+       >\r
+       IFZERO CTRL <\r
+       SNA CLA         /IS CHAR A CONTROL CHAR?\r
+       JMP TTYCTO      /YES, DON'T ECHO CONTROL CHARACTERS EXCEPT FOR 211-215\r
+       >\r
+PRIN,  TAD TCHAR\r
+       JMS TTYTLS\r
+TTYCTO,        TAD TABCTR      /RETURN TABCNT IN AC\r
+       JMP I TTYPCH\r
+\r
+       IFZERO CTRL <\r
+M40,   -40\r
+       >\r
+\r
+TTY140,\r
+SPCHR, STA CLL\r
+       TAD LINSIZ\r
+PREPRN,        DCA TABCTR      /THESE CHARS RESET COLUMN COUNTER\r
+       JMP PRIN\r
+\fTGCH, 0               /NON-ZERO MEANS TTYGCH WAS CALLED\r
+       KSF\r
+       JMP .-1         /WAIT FOR CHAR TO BE TYPED\r
+       JMS TTYTST\r
+/WILD: (DON'T PUT IN)  SZA CLA /FALL THRU AND RETURN R.O.\r
+/      ISZ TTYGCH\r
+       TAD (203-377\r
+       SNA CLA         /TAKE RETURN 1 ON RUB OUT\r
+       JMP I TTYGCH    /"CLUMSY" - R.L. (9/18/73)\r
+       ISZ TTYGCH\r
+       KRB             /GET CHARACTER\r
+TTYAND,        AND (177        /MUST RETURN CHAR IN 7-BIT\r
+       IFNZRO CNVLC <\r
+       DCA TCHAR\r
+       TAD TCHAR\r
+       AND TTY140\r
+       TAD M140\r
+       SNA CLA         /IS IT LC?\r
+       TAD M40         /YES\r
+       TAD TCHAR       /NO\r
+       >\r
+       IFNZRO ALTMOD <\r
+       TAD (-175       /IS IT 175 OR 176?\r
+       SMA\r
+       JMP CONV        /YES, CONVERT ALTMODE TO ESCAPE\r
+       TAD (175        /NO, RESTORE CHAR\r
+       >\r
+       JMP I TTYGCH    /TAKE RETURN 3\r
+\r
+/SHOULDN'T TABCTR BE INITIALIZED TO C(LINSIZ) UPON ENTRY?\r
+\r
+TABCTR,        -110\r
+\r
+TTYTLS,        0\r
+       TLS\r
+       IFNZRO DELAY <\r
+       TAD (-DELAY\r
+       SZA CLA\r
+       STA\r
+       >\r
+TTYTSF,        TSF\r
+       JMP .-1\r
+       IFNZRO DELAY <\r
+       IAC\r
+       SZA             /19.66 MS IS G.T. 1/60 SEC\r
+       JMP TTYTSF\r
+       >\r
+       ISZ TABCTR\r
+TTYUPA,        "^\r
+TT7600,        7600\r
+       JMP I TTYTLS\r
+LINSIZ,        -110\r
+\r
+       IFNZRO PAUS <\r
+LINSYZ,        -HEIGHT\r
+LINCNT,        -HEIGHT\r
+PAUSN, -PAUS\r
+       >\r
+\r
+       IFNZRO ALTMOD <\r
+               IFNZRO KCC-6032 <\r
+CONV,          CLA\r
+               TAD (33\r
+               JMP I TTYGCH\r
+               >\r
+       IFZERO KCC-6032 <\r
+CONV,          CLA IAC\r
+               TAD TTY32       /DEVICE DEPENDENT\r
+               JMP TTYAND\r
+               >\r
+       >\r
+\fTCHAR,        0\r
+\r
+/TTYTST:       READS KEYBOARD STATICALLY AND RESPONDS TO ^C\r
+/              OTHERWISE RETURNS CHAR (8-BIT) MINUS 203 IN AC.\r
+/              IF FLAG IS NOT UP, IT RETURNS A 1.\r
+\r
+TTYTST,        0\r
+       TAD TT7600      /OR CHAR IN\r
+       KRS\r
+       TAD (-7603      /-7603=175\r
+       KSF\r
+       CLA IAC         /STUFF IN BUFFER IS UNRELIABLE IF FLAG ISN'T UP\r
+       SZA\r
+       JMP I TTYTST\r
+       IFNZRO INDVC-3 <KCC>\r
+       CIF CDF 0       /BRANCH TO OS/8 MONITOR AT 07600\r
+       JMP I TT7600    /IT WILL PRINT "^C" FOR CHAR IN BUFFER\r
+       PAGE\r
+\f/     DYNAMICALLY MODIFYING THE KL8E HANDLER\r
+\r
+/      *** I M P O R T A N T ***\r
+\r
+/      THIS HANDLER CAN BE DYNAMICALLY CHANGED VIA SET COMMANDS.\r
+/      CONSEQUENTLY, IT IS EXTREMELY IMPORTANT THAT PEOPLE\r
+/      WHO MODIFY THIS SOURCE DO NOT AFFECT THE ALGORITHMS\r
+/      NECESSARY TO PERFORM SUCH MODIFICATIONS.\r
+\r
+/      THIS ALGORITHM IS EXPLAINED BELOW.\r
+\r
+/      SET TTY WIDTH=N\r
+\r
+/      SEARCH LOCATIONS 200-377 FOR A 7600.  CALL ITS ADDRESS X.\r
+/      LET Y BE THE INSTRUCTION AT LOCATION X+1.\r
+/      FORM THE (RELATIVE) ADDRESS T=Y&177+200-1.\r
+/      THEN LOCATIONS T AND X+2 CONTAIN MINUS THE TTY WIDTH.\r
+/      THE WIDTH MUST BE A MULTIPLE OF 10 AND MUST NOT BE 200.\r
+/      (BECAUSE -200 IS THE MAGIC 7600)\r
+\r
+/      SET TTY CODE XX\r
+\r
+/      SEARCH ENTIRE HANDLER FOR INSTRUCTIONS OF THE FORM 6XXY\r
+/      WHERE XX IS NOT 20 OR 21,\r
+/      AND FURTHERMORE DON'T INCLUDE A 6031 IF 2 LOCATIONS\r
+/      FOLLOWING IS A 7650\r
+/      AND DON'T INCLUDE A 6034 IF 4 LOCATIONS FOLLOWING IS A 7650.\r
+\r
+\r
+/      SET TTY [NO] ECHO\r
+\r
+/      THE WORD INVOLVED IS AT (RELATIVE) LOCATION 120.\r
+/      SET TO 7440 TO ECHO.\r
+/      SET TO 7610 TO SUPPRESS ECHOING.\r
+\r
+\r
+/      SET TTY LC\r
+\r
+/      SEARCH LOCATIONS 200-377 FOR A 377.  CALL ITS ADDRESS X.\r
+/      LOOK AT LOCATION X+5.\r
+/      IF THIS LOCATION IS NOT A 7650, THEN LC TO UC CONVERSION\r
+/      WAS NOT ENABLED AT ASSEMBLY TIME.\r
+/      IF THE FEATURE IS ENABLED, CHANGE LOCATION X+5 TO A 7610\r
+/      TO PREVENT THE CONVERSION.  TO ALLOW CONVERSION, SET\r
+/      LOCATION X+5 BACK TO 7650.\r
+\r
+/      SET TTY PAGE\r
+\r
+/      SEARCH LOCATIONS 215-300 FOR A 7450. CALL ITS ADDRESS X.\r
+/      SET X+3 TO 7640 TO ENABLE ^S, ^Q.\r
+/      SET X+3 TO 7200 TO DISABLE ^S, ^Q.\r
+\f/     SET TTY TAB\r
+\r
+/      SEARCH LOCATIONS 200-300 FOR A 7.\r
+/      IF NOT FOUND, SIMULATED TABS WAS NOT ENABLED AT ASSEMBLY TIME.\r
+/      IF FOUND, CALL ITS ADDRESS X.\r
+/      TO PATCH OUT SIMULATED TABS:\r
+/              MOVE C(X-12) TO LOCATION X-2\r
+/              CHANGE LOCATION X+3 TO A 7610\r
+/      TO RESTORE SIMULATED TABS:\r
+/              SET LOCATION X-2 TO X-4&77+1200\r
+/              CHANGE LOCATION X+3 TO A 7640\r
+\r
+/      SET TTY FILL\r
+\r
+/      THE LITERAL 177 MUST REMAIN AT THE END OF PAGE 2\r
+/      SEARCH LOCATIONS 200-300 FOR A 1377.\r
+/      IF NOT FOUND, THEN FILL CHARACTERS WERE NOT ENABLED AT ASSEMBLY\r
+/      TIME.  IF FOUND, CALL ITS ADDRESS X.\r
+/      TO PATCH OUT FILL CHARACTERS, MOVE C(X+3) TO LOCATION X-1.\r
+/      TO RESTORE FILL CHARACTERS, MOVE C(X+1) TO LOCATION X-1.\r
+\r
+/      SET TTY FLAGLC\r
+\r
+/      SEARCH LOCATIONS 200-377 FOR A 247.\r
+/      IF NOT FOUND, LOWER CASE FLAGGING WAS NOT ENABLED AT ASSEMBLY TIME.\r
+/      IF FOUND, CALL ITS ADDRESS X.\r
+/      TO DISABLE FLAGGING, SET LOCATION X-2 TO A 7200.\r
+/      TO RE-ENABLE FLAGGING, SET LOCATION X-2 TO A 7640.\r
+\r
+/      SET TTY PAUSE [N]\r
+\r
+/      SEARCH LOCATIONS 200-300 FOR A 15.\r
+/      IF NOT FOUND, PAUSING WAS NOT ENABLED AT ASSEMBLY TIME.\r
+/      IF FOUND, CALL ITS ADDRESS X.\r
+/      TO DISABLE PAUSING AFTER A FULL SCREEN,\r
+/      SET LOCATION X-3 TO A 7610.\r
+/      TO RE-ENABLE PAUSING, SET LOCATION X-3 TO A 7650.\r
+/      TO SET PAUSE DURATION, SEARCH LOCATIONS 300-377 FOR A 7600,\r
+/      CALLING ITS ADDRESS X.  THEN (MINUS THE) PAUSE DURATION IS AT\r
+/      LOCATION X+5.\r
+\r
+/      SET TTY HEIGHT\r
+\r
+/      THIS IS ONLY APPLICABLE IF SET TTY PAUSE HAS BEEN ASSEMBLED IN\r
+/      (A 15 CAN BE FOUND ON SECOND PAGE).\r
+/      NEGATIVE OF HEIGHT MUST BE SET IN BOTH LOCATIONS X+3 AND X+4\r
+/      WHERE X IS THE ADDRESS OF A 7600 AS IN ABOVE.\r
+\f/     SET TTY ESCAPE\r
+\r
+/      SEARCH LOCATIONS 200-377 FOR A 44.\r
+/      IF NOT FOUND, THEN $ WAS NOT ASSEMBLED INTO TTY HANDLER.\r
+/      IF FOUND, CALL ITS ADDRESS X.\r
+/      TO DISABLE PRINTING ESCAPE AS $, SET LOCATION X-4 TO A 'CLA'.\r
+/      TO CAUSE ESCAPE TO PRINT AS AN ESCAPE, SET LOCATION X-4 TO SZA CLA.\r
+\r
+/      SET TTY ARROW\r
+\r
+/      SEARCH LOCATIONS 200-377 FOR 7740.\r
+\r
+/      IF NOT FOUND, USING OLD HANDLER.\r
+/      CALL ITS ADDRESS X.\r
+/      IF LOCATION X+1 IS MORE THAN 7000,\r
+/      THEN UPARROW MODE WAS NOT ASSEMBLED INTO KL8E.\r
+/      OTHERWISE, TO ALLOW ARROWS, SET LOCATION X+3 TO THE\r
+/      CONTENTS OF LOCATION X+6.\r
+/      TO CAUSE CONTROL CHARACTERS TO ECHO AS IS, SET\r
+/      LOCATION X+3 TO 'SKP CLA'.\r
+/      NOTE THAT THIS IS A DIFFERENT OPTION THAN ASSEMBLING CTRL=0.\r
+\f      IFDEF TEST <\r
+       *600\r
+\r
+/TEST ROUTINE FOR KL8E HANDLER\r
+\r
+GO,    JMS I (TTY      /CALL HANDLER\r
+       0600            /READ SIX PAGES\r
+       1000            /BUFFER AT 01000\r
+       0001            /BLOCK 1\r
+       HLT             /ERROR RETURN\r
+       JMS I (TTY      /CALL HANDLER AGAIN\r
+       4600            /OUTPUT SIX PAGES\r
+       1000\r
+       0001\r
+       HLT\r
+       CLA\r
+       JMP GO\r
+       >\r
+       $\r
+\f\1a\0
\ No newline at end of file