/KEYPAD/PLOT COMMANDS FOR A VT52/78/100 -JVZ- /THIS OVERLAY ADDS THE 'KEYPAD' AND 'PLOT' COMMANDS TO LDF-V5D /FOR USE ON A 'VT/WT/78' DECSTATION, OR WITH A VT-52 OR VT-100 /TERMINAL. A PATCH TO CLEAR THE SCREEN UPON RECEIPT OF CTRL/L /IS ALSO INCLUDED. VT100 TERMINALS MUST BE PUT IN 'VT52 MODE' /BEFORE THE ROUTINES IN THIS OVERLAY WILL WORK PROPERLY; USE A /TYPE $\$<$[?2l" COMMAND TO DO THIS (NOTE THE LOWERCASE 'L'!). /THE 'PLOT X,Y,C' COMMAND ALLOWS A PROGRAM TO EASILY POSITION /THE CURSOR AT ANY POINT ON THE SCREEN AND DISPLAY A CHARACTER /OR GRAPHICS SYMBOL AT THAT POINT. THE 'KEY CODE=SUB' COMMAND /ALLOWS THE USER TO ACTIVATE THE AUXILLIARY KEYPAD, AND ASSIGN /SUBROUTINE CALLS TO THE VARIOUS KEYS. / DEFINITIONS (V5D: 21-MAR-83) /NOTE: USE THE '/J' OPTION FOR A NICE LISTING / WPS=. /DEFINE FOR WPS COLORS / Z19=. /DEFINE FOR Z19 COLORS ; VT100=. /DEFINE FOR VT100 TERM FIELD 1 PDLXR=13 XRT=14 AXIN=16 BOTTOM=23 ESC=33 LC=40 LORD=46 INBUF=54 SORTCN=65 CHAR=66 LINENO=67 NAGSW=70 LASTC=71 P13=74 P17=75 P43=76 P7600=77 P177=102 M4=104 M14=107 M15=110 TABCNT=176 DEWPT=652 COMGO=731 KEYCK=3200 XI33=3203 XOUTL=3215 XI33X=3232 KINT=3247 TINT=3275 MINT=3344 PUSHA=4520 PUSHJ=4522 POPJ=5523 SORTJ=4527 TESTC=4530 GETC=4537 TSTCMA=4543 GETLN=4545 GETNXT=4563 CONTINUE=5434 *166 CHAR2, 0 /SECOND CHAR OF ESC SEQ CURSW, 0 /CURSOR KEY ENABLE (=4) *777 MESC, -ESC /HERE FOR IOUH ROUTINES *4177 EOLDO /CHECK KP REQ AT BOL *COMGO-1 EOLDO /CHECK KP REQ AT EOL *COMGO+"K-"@ KEYPAD /ADD 'K' COMMAND *COMGO+"P-"@ PLOT /ADD 'P' COMMAND *KEYCK KEYDO /CHECK KP REQ IN IDLE *XI33+7 TAD CHAR2 /SHIFT INPUT BUFFER DCA INBUF *XOUTL+2 JMS I MINT+1 /MAKE FF CLEAR SCREEN *XI33X DCA CHAR2 /CLEAR BUFFER TAD XI33+1 *KINT+10 JMP I MINT /RESET ALT. KEYPAD MODE *TINT-3 KRB JMP I .+1 /CHECK FOR AN ESC. SEQ. ESCCHK *MINT KBMXIT FFCHEK /KEYPAD ROUTINES FOR LAB-FOCAL: -JVZ- / THESE ROUTINES ALLOW 'LAB-FOCAL' TO INTERPRET THE ESCAPE /SEQUENCES GENERATED BY THE KEYPAD/FUNCTION KEYS ON A VT52 /TERMINAL. UP TO 24(10) DIFFERENT KEYS ARE RECOGNIZED AND /EVERYTHING ELSE IS PASSED ALONG TO THE USER'S PROGRAM. /EACH OF THE 19 KEYPAD KEYS (PLUS THE 5 FUNCTION KEYS ON A /'Z19' TERMINAL) CAN BE ASSIGNED TO A 'DO' CALL. THE 'RED' /KEY, FOR EXAMPLE, MIGHT BE ASSIGNED TO 'DO 5.4'. HITTING /THE 'RED' KEY WILL THEN EXECUTE LINE 5.4, AFTER WHICH THE /PROGRAM WILL CONTINUE ITS PREVIOUS SEQUENCE OF OPERATIONS. /THE KEYPAD (AND/OR FUNCTION KEYS) ARE ASSIGNED SUBROUTINE /CALLS BY MEANS OF THE 'KEY' COMMAND, AS ILLUSTRATED BELOW / KEY CODE1=SUB1, CODE2=SUB2, CODE3=SUB3... /WHERE 'CODE' IS A CHARACTER (STRING) WHICH IDENTIFIES THE /KEY, AND 'SUB' IS AN ARITHMETIC EXPRESSION WHICH DEFINES /THE SUBROUTINE CALL. /THE LABEL ON THE FRONT OF THE KEY (IN THE CASE OF A 'WORD /TERMINAL') IS USED AS THE 'KEY CODE' - HENCE THE POSSIBLE /'KEY CODES' ARE THE DIGITS '0-9', THE 'DECIMAL-POINT' AND /THE LABELS 'F1','F2','F3','F4','F5'. THE 'ENTER' KEY AND /THE 'COLOR' KEYS ('BLUE', 'RED', 'GRAY') MAY BE ABBREVIA- /TED TO 'E,B,R,G', RESPECTIVELY. ('WORD TERMINALS' SHOULD /DEFINE THE SYMBOL 'WPS' TO SUBSTITUTE 'YELLOW' AND 'BLUE' /FOR 'BLUE' AND 'RED'; DEFINING 'Z19' REPLACES 'GRAY' WITH /'WHITE'.) VT100 TERMINALS USE 'PF1'...'PF4' IN PLACE OF /THE COLOR KEYS. THE FOUR CURSOR KEYS ARE DENOTED BY THE /SYMBOLS: '<'(LEFT), '>'(RIGHT), '^'(UP), AND 'V'(DOWN). /THE SUBROUTINE EXPRESSION FOLLOWING THE '=' SIGN MAY ONLY /SPECIFY SINGLE LINES OR SINGLE GROUPS. THE USE OF '0' TO /INDICATE 'ALL-OF-THE-PROGRAM' OR NEGATIVE LINE NUMBERS TO /INDICATE 'PARTIAL GROUP' OPERATIONS IS NOT LEGAL IN A KEY /COMMAND. RELATIVE LINENUMBERS MAY BE USED, HOWEVER. EX: /LINE 7.15 KEY 0=0, .=.5, 1=1.1, 2=2, RED=3.5, F1=10, V=.8 /THIS COMMAND DELETES THE KEY '0' ASSIGNMENT, THEN ASSIGNS /THE '.' KEY TO 'DO 7.5', THE '1' KEY TO 'DO 1.1', THE '2' /KEY TO 'DO 2', THE 'RED' KEY TO 'DO 3.5', THE 'F1' KEY TO /'DO 10', AND THE 'CURSOR DOWN' KEY TO 'DO 7.8'. A 'K Z' /COMMAND CANCELS ALL PREVIOUS ASSIGNMENTS AND RESTORES THE /KEYPAD TO NORMAL OPERATION. A 'TYPE $>"' COMMAND TEMPOR- /ARILY DISABLES THE KEYPAD, LEAVING THE ASSIGNMENTS INTACT /(USE 'TYPE $="' TO RESTORE KEYPAD FUNCTIONS). TO BE LIKE /A 'VT100', THE CURSOR KEYS ARE NOT ENABLED UNTIL AT LEAST /ONE OF THEM HAS BEEN DEFINED. ONCE ENABLED HOWEVER, THEY /REMAIN ACTIVE EVEN AFTER THE KEYPAD IS 'TURNED OFF'. (USE /'FPAL(0,3167)' TO DISABLE THEM, AND 'FPAL(4,3167)' TO RE- /ENABLE THEM.) THE ONLY WAY TO DISABLE THE 3 'COLOR' KEYS /(AND THE 5 Z19 FUNCTION KEYS) IS TO ASSIGN THEM TO '0'. *13400 KPREQ, 0 /KEYPAD SUBROUTINE REQ KEYTBL, ZBLOCK 4 /HOLDS ASSIGNMENTS FOR '^,V,>,<' IFDEF VT100 /HOLDS ASSIGNMENTS FOR ',' & '-' ZBLOCK 2 /HOLDS ASSIGNMENTS FOR '.,ENTER' ZBLOCK 12 /HOLDS ASSIGNMENTS FOR '0'...'9' IFNDEF VT100 /HOLDS ASSIGNMENTS FOR 'B,R,G' IFNDEF VT100 /HOLDS ASSIGNMENTS FOR 'F1'-'F5' IFDEF VT100 /HOLDS ASSIGNMENTS FOR 'PF1-PF4' ESCCHK, AND P177 /CALLED FROM 'KINT' DCA INBUF TAD EFLAG /ARE WE IN 'ESCAPE MODE'? SZA JMP ESCGO /YES WE ARE TAD INBUF TAD I (MESC /IS THIS CHARACTER AN 'ESC'? SZA CLA JMP I (TINT /NO CMA CLL RAR /YES CLL IAC /SET THE FLAG ESCXIT, DCA EFLAG / OR CLEAR IT DCA INBUF /REMOVE (RESTORE) CHARACTER JMP I (TINT ESCGO, SMA CLA /IS IT A KEYPAD DIRECTIVE? JMP ESCKEY /WHICH ONE? TAD INBUF TAD (200-"? /KEYPAD STUFF? SNA JMP ESCXIT-1 /WE'RE IN A KEYPAD SEQUENCE TAD ("?-"P STL IFDEF VT100 IFNDEF VT100 /COLOR OR FUNCTION KEY? SZL JMP ESCKEY-2 /BLUE, RED, GRAY OR (P)F1-F5 IFDEF VT100 /("P+4-"A-4 IFNDEF VT100 /("P+10-"A-4 CLL TAD CURSW /0 OR 4 SZL CLA JMP ESCKEY-1 /UP, DOWN, LEFT, RIGHT DCA EFLAG /NONE OF THE ABOVE... TAD INBUF DCA CHAR2 /SAVE SECOND CHARACTER TAD C33 JMP ESCXIT+1 /REGENERATE ESCAPE SEQUENCE ///// KLIST, 23 /, IFDEF VT100 <4> /- 7 /^ 13 /< 16 /> ///// /GOAL: TO MAP THE FINAL CHARACTER OF AN ESCAPE SEQUENCE /INTO AN ENTRY IN 'KEYTBL'. HERE ARE THE POSSIBILITIES: / ZBLK 4 UC A-D UP,DOWN,RIGHT,LEFT / ZBLK 2 LC L-M COMMA,MINUS KEYS (VT100) / ZBLK 1 LC N DECIMAL POINT / ZBLK 1 UC M ENTER KEY / ZBLK 12 LC P-Y NUMERIC KEYS (0-9) / ZBLK 3 UC P-R BLUE, RED, GRAY / ZBLK 5 UC S-W F1-F5 KEYS ON Z-19 /OR ZBLK 4 UC P-S PF1-PF4 ON A VT100 IFDEF VT100 /PF1-PF4 IFNDEF VT100 /BLUE, RED, GRAY + F1-F5 TAD EM10+1 /UP, DOWN, LEFT, RIGHT ESCKEY, TAD (200-"M /REMAINING KEYPAD KEYS TAD INBUF /GET CHAR SZA TAD ("M+1-LC-"P /NOT 'ENTER' IFNDEF VT100 IFDEF VT100 DCA .+1 EFLAG, 0 /GET KEYPAD REQUEST DCA KPREQ JMP ESCXIT ESCSEQ, 0 /SEND AN ESCAPE SEQUENCE TAD C33 JMS I (XOUTL TAD I ESCSEQ AND P7600 SZA CLA JMP I ESCSEQ TAD I ESCSEQ ISZ ESCSEQ JMP ESCSEQ+2 FFCHEK, 0 /WATCH OUTPUT FOR A FF ION TAD I (XI33 /GET SAVED CHARACTER TAD M14 SZA CLA JMP I FFCHEK /NOT A FORMFEED TAD I (XOUTL DCA TLSUB /SAVE CALLING ADDRESS JMS ESCSEQ "H&177 /CLEAR THE SCREEN C33, ESC "J&177 JMP I TLSUB /CALLED FROM 'XOUTL' ///// KEYGO, KEYX /COMMA IFDEF VT100 /MINUS KEYU /UP KEYL /LEFT KEYO /RIGHT ///// KBMXIT, JMS TLSUB /WAIT FOR OUTPUT TAD C33 JMS TLSUB TAD P43 /DISABLE KEYPAD JMS TLSUB EM10, SZL SPA SNA CLA IFDEF VT100 IFNDEF VT100 CDF CIF 0 JMP I P7600 /RETURN TO K.B.M. TLSUB, 0 TLS TSF JMP .-1 JMP I TLSUB PAGE KEYZ, TAD (KEYTBL-1 /CLEAR KEY ASSIGNMENTS DCA XRT IFDEF VT100 IFNDEF VT100 DCA CURSW DCA I XRT ISZ CURSW /DISABLE CURSOR KEYS JMP .-2 JMS I (ESCSEQ /RESTORE NORM KEYPAD ">&177 KEYF, CMA /FLAG FUNCTION KEYS KEYX, DCA LASTC /USE COMMAND-LETTER REGISTER K537, GETC /GET THE NEXT CHARACTER KEYPAD, TESTC /***** THE 'KEY' COMMAND ***** JMP KEYT /CR, ;, =, <, >, ^ JMP KEYF /Z19 FUNCTION KEYS JMP KEYN /'.' AND '0-9' (ALSO F1-F5) KEYA, TAD LASTC /TEST 'FIRST CHAR' FLAG AND P7600 TAD CHAR /'B,R,G,E,V,Z' (EITHER CASE) AND K537 SORTJ /SECOND+ CHARS NEVER MATCH BRGLST-1 KM6, BRGGO-BRGLST JMP K537 /SCAN PAST REST OF KEY NAME KEYL, IAC /LEFT KEYO, IAC /OVER (RIGHT) KEYD, IAC /DOWN KEYU, DCA SORTCN /UP CLL IAC RTL /+4 DCA CURSW /ENABLE CURSOR KEYS IFDEF VT100 IFNDEF VT100 /GET START OF TABLE KEYN, TAD SORTCN /GET KEY VALUE (0-9,1-5) ISZ LASTC /CHECK 'F' FLAG IFDEF VT100 /PF KEYS IFNDEF VT100 /COLOR AND FUNCTION KEYS JMP KEYX /SAVE TABLE POINTER IFNDEF VT100 < KEYR, IAC /'RED' KEY KEYB, TAD P13 /'BLUE' KEY KEYE, TAD M15 > /'ENTER' KEY IFDEF VT100 < KM11, -11 KEYE, STL RTL /'ENTER' KEY KEYM, TAD M14 > /'MINUS' KEY JMP KEYG KEYQ, GETLN /GET THE KEY DEFINITION IFDEF VT100 < TAD LASTC SNA TAD (KEYTBL+4 /SPECIAL CASE FOR COMMA DCA LASTC > TAD LINENO DCA I LASTC /SAVE IN 'KEYTBL' JMS I (ESCSEQ /TURN ON ALT. KEYPAD MODE "=&177 KEYT, TAD SORTCN /CHECK THE NEW TERMINATOR SNA JMP KEYQ /IT WAS AN '=' SORTJ KLIST-1 /COMMA,('-'),'<','>','^' KEYGO-KLIST IAC /NONE OF THE ABOVE DCA AXIN CONTINUE /CLEAR LOCK-OUT SW ///// KEYDO, TAD PDLXR /ARE WE IN COMMAND MODE? STL CIA TAD BOTTOM SNA CLA TAD I (KPREQ /ANYTHING TO DO? SNA CLA JMP I (XI33+1 /NO - RETURN TO WAIT LOOP TAD P177 PUSHA /RETURN TO 'START' EOLDO, TAD AXIN /CHECK LOCK-OUT SWITCH SZA CLA TAD I (KPREQ /CHECK FOR NEW REQUEST SNA POPJ /NOTHING DOING DCA LINENO TAD P177 P67, AND LINENO /SET UP LINENO AND NAGSW DCA NAGSW DCA I (KPREQ DCA AXIN /SET LOCK-OUT SWITCH PUSHJ /CALL THE SUBROUTINE DEWPT ISZ AXIN /ENABLE NEXT REQUEST POPJ /RETURN ///// BRGGO, IFNDEF VT100 < KEYB /BLUE KEYR /RED KEYG > /GRAY KEYE /ENTER KEYD /DOWN KEYZ /ZERO BRGLST, IFNDEF VT100 < IFDEF WPS <"Y&177 /YELLOW "B&177 > /BLUE IFNDEF WPS <"B&177 /BLUE "R&177 > /RED IFDEF Z19 <"W&177> /WHITE IFNDEF Z19 <"G&177> > /GRAY "E&177 /ENTER "V&177 /DOWN "Z&177 /ZERO ///// /PLOT COMMAND FOR VT52 TERMINALS -JVZ- /THIS COMMAND POSITIONS THE CURSOR AT ANY CHARACTER POSITION /ON THE SCREEN AND OPTIONALLY DISPLAYS A CHARACTER OR SYMBOL /AT THAT POSITION. THE FORM IS 'PLOT X,Y,Z' WHERE 'X' IS THE /HORIZONTAL COORDINATE (0-79) AND 'Y' IS THE VERTICAL COORDI- /NATE (0-23 WITH 0 AT THE BOTTOM). 'Z' IS THE CHARACTER CODE /(0-127), WITH '0' MEANING 'NO CHARACTER' AND 1-31 BEING THE /SPECIAL GRAPHIC SYMBOLS. ONE CAN INCREASE THE EFFECTIVE 'Y' /RESOLUTION BY USING THE 'SCAN-LINE' CHARACTERS; THE COMMAND /FOR DOING THIS IS: 'PLOT X,Y=...,20-7*FRAC(Y)' [VT100=4*]. PLOT, GETNXT /GET THE 'X' VALUE TAD KEYF /XX40 AND P177 DCA PLTX TAD LORD /SET 'TAB' COUNTER DCA I TABCNT TSTCMA /CHECK FOR 'Y' PM40, SMA SZA CLA GETNXT CIA TAD P67 /ADD (40+27 AND P177 DCA PLTY JMS I (ESCSEQ "Y&177 PLTY, 40 PLTX, 40 TSTCMA IFDEF VT100 < KM10, SZL SPA SNA CLA> IFNDEF VT100 < KM30, SPA SNA CLA> GETNXT SNA CONTINUE /'0' = EXIT TAD PM40 SMA CLA JMP PLTZ JMS I (ESCSEQ /ENTER GRAPHICS MODE "F&177 TAD K537 PLTZ, TAD LORD JMS I (XOUTL JMS I (ESCSEQ /LEAVE GRAPHICS MODE "G&177 CONTINUE ///// $END$