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