/1 KEY$ PATCH FOR COMMERCIAL BASIC / THIS FILE PROVIDES A WAY OF ACCESSING SLU2 AND 3 ON THE VT78. / THE FUNCTION CALL IS OF THE FORM KEY$(4*D+L) / L = LINE NUMBER: 0 = CONSOLE, 1 = SLU2, 2 = SLU3 / D = TIMEOUT DELAY, 0 = NO TIMEOUT, N = APPROX *TBS* SEC OF TIMEOUT / THE STRING RETURNED IS OF THE SAME FORM AS USUAL, EXCEPT A NULL / STRING IS RETURNED IF THE TIMEOUT OCCURS. ALSO, NOTE THAT SINCE / TIMEOUT OCCURS ON EACH CHARACTER, YOU CAN DIFFERENTIATE BETWEEN / A SINGLE ESC AND A WHOLE SEQUENCE; A SINGLE ESC WILL BE RETURNED / AFTER A TIMEOUT, WHEREAS A WHOLE SEQUENCE IS TRANSMITTED RAPIDLY / ENOUGH TO BE PICKED UP COMPLETELY. / ASSEMBLE AND LOAD THIS FILE AS FOLLOWS: / .PAL KEYPAT / .R ABSLDR / *BASIC.OV/I / *KEYPAT$ / .SAVE SYS BASIC.OV 3400-4577,22000-26377,33400-34777;7605 / IT IS RECOMMENDED THAT YOU KEEP AN UNPATCHED COPY OF BASIC.OV AS A BACKUP XKSTROK=3515 KSTROK=3625 PGCH=3772 SETLEN=3603 O177=160 XR1=11 XR2=12 TEMP1=63 PUNSFIX=172 CTCCHK=1260 VALCNT=3732 JMPSF=3407 OVERLAY=3400 LITPL=3564 FIELD 2 /PUT PATCH ON THE OVERLAY CODE NOW *2000 RELOC OVERLAY *JMPSF+15 XKSTROK /PATCH DISPATCH TABLE TO KSTROK NOW *XKSTROK XKSTROK,JMS I PUNSFIX /GET THE ARG DCA TEMP1 TAD TEMP1 /ISOLATE KEYBOARD TO USE AND I KTAB /HACK POINTER TO LITERAL "3" CLL RAL TAD KTAB DCA XR1 /POINT TO PAIR OF IOT'S TAD I XR1 /PICK UP KSF IOT DCA KSFIOT TAD I XR1 /NOW PICK UP KRB IOT DCA KRBIOT JMP I .+1 /JMP INTO NORMAL ROUTINE NOW KSTROK KTAB, XKTAB-1 KGCH, 0 /SUBSTITUTE GET CHAR ROUTINE TAD TEMP1 /GET PARAMETER AND O7774 /ISOLATE DELAY TO USE CIA DCA KC KWAIT2, CLA STL RAR /CLA IF PDP-8/A DCA KZ KWAIT, JMS I PCTCCHK /TEST IF ^C HIT KSFIOT, HLT /GETS KSF JMP FIGUR8 /WAIT IN FIGURE 8 LOOP JMS I PCTCCHK KRBIOT, HLT /GETS KRB AND O177 JMP I KGCH /RETURN WITH A CHARACTER FIGUR8, ISZ KZ /DO INNER TIMEOUT LOOP JMP KWAIT TAD KC /LOOP FOREVER IF NO DELAY SZA CLA ISZ KC JMP KWAIT2 JMP I .+1 SETLEN /JUST USE CURRENT STRING IF TIMEOUT /NOTE THAT WE CAN DIFFERENTIATE BETWEEN ESC AND /ALTERNATE KEYPAD SEQ BY TIMING OUT HERE... O7774, 7774 PCTCCHK,CTCCHK IFZERO .-LITPL&4000 <__TOO BIG!__> KC= XR1 KZ= XR2 /DEFINE A FEW TEMPS *VALCNT+1 /PUT IOT TABLE HERE O3, 3 /MUST PRECEDE XKTAB BY 1 XKTAB, 6031;6036 6401;6406 6421;6426 6031;6036 *PGCH KGCH /ZAP LINK TO GCH IN KSTROK $