File: VCM200.PG of Tape: Sources/Other/new-22-vista-2
(Source file text)
FILE VCM200 - VISUAL TECHNOLOGY-200 / TITLE VERSION 01.30 -- COPYRIGHT NOTICE / / / ****************************************** / ** ** / ** V I D E O ** / ** C H A R A C T E R I S T I C S ** / ** M O D U L E ** / ** ** / ** CODED BY ** / ** C. E. STEUART DEWAR ** / ** MARCH, 1980 ** / ** ** / ** ** / ****************************************** / / / COPYRIGHT (c) 1980 Under BERNE and UNIVERSAL COPYRIGHT LAW / By: DEWAR INFORMATION SYSTEMS CORPORATION / / The information in this document is subject to change without / notice and should not be construed as a commitment by DEWAR / INFORMATION SYSTEMS CORPORATION. DEWAR INFORMATION SYSTEMS / assumes no responsibility for any errors that may appear in / this document other than providing corrections for any such / errors when brought to the attention of DEWAR INFORMATION SYS- / TEMS CORPORATION. / / 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 DISC's copyright notice) / only for use in such system. / / Licensees of the SOFTWARE may make changes to the software / with the understanding that the warranty for the SOFTWARE only / applies to the original unmodified version delivered to the / licensee. The fact that licensee may have modified or changed / the SOFTWARE in no way alters or detracts from the copyright / protection and proprietary rights due to DISC for the SOFTWARE / /01.20 / REVISION HISTORY /01.20 / /01.20 / 1-MAY-80 C.E.S.D MODIFIED TO INCLUDE INSERT BLOCK /01.20 / REMOVED CURSOR RIGHT FUNCTION /01.21 / REMOVED CONTROL TAB FUNCTION /01.21 / 5-MAY-80 C.E.S.D ADDED SMOOTH SCROLL SUPPORT /01.30 / ADDED VIDEO ENHANCEMENT SUPPORT /01.30 EJECT / / VISTA IS A SCREEN ORIENTED TEXT EDITOR FOR A VISUAL DISPLAY / TERMINAL. / / FUNCTION KEYS ON A TERMINAL ARE HANDLED THROUGH THE USE OF / THIS VIDEO CHARACTERISTICS MODULE (VCM), THAT HANDLES ALL INPUT TO THE / MAIN PORTION OF THE VISTA PROGRAM. IN THE SAME WAY, ALL OUTPUT FROM / THE VISTA PROGRAM IS ENCODED AND IT IS THE FUNCTION OF THE /01.20 / 'VCM' MODULE TO RETRANSLATE THIS OUTPUT INTO A FORM / SUITABLE FOR THE SPECIFIC TERMINAL IN USE. / / THE VCM PROVIDED STANDARDLY PROVIDED WITH / VISTA HAS BEEN DESIGNED AROUND THE VT52/VT100 TERMINALS SINCE / IT IS EXPECTED THAT THESE ARE THE MOST COMMON DISPLAY TERMINALS / TO BE FOUND ON PDP8 SYSTEMS. / / IMPLEMENTATION OF OTHER VIDEO DISPLAY TERMINALS IS EXTREMELY / SIMPLE SINCE THE MAIN CORE OF THE VISTA PROGRAM IS NEVER / CHANGED. / / CONSULT THE 'VISTA' PROGRAM MANUAL FOR DETAILS ON THE USE OF THIS / EDITING PROGRAM. / / VIDEO CHARACTERISTICS MODULE IS ALLOCATED 3 PDP8 PAGES FROM / 06000-06577 TITLE SCREEN LAYOUT FORMAT / / IN ORDER TO UNDERSTAND HOW VISTA WORKS IT IS ESSENTIAL TO / KNOW THE MEMORY LAYOUT. / / A COPY OF EACH LINE ON THE VIDEO SCREEN IS MAINTAINED IN A / FIELD 1 BUFFER CALLED 'SCREEN'. EACH BYTE ON THE SCREEN OCCUPIES / ONE WORD IN THIS BUFFER. / / A ROW TABLE IS MAINTAINED WHICH CONSISTS OF A ONE WORD ADDRESS / FOR EACH LINE ON THE SCREEN. THE ROW TABLE IS SIMPLY A SET OF / POINTERS TO THE FIRST WORD ON EACH LINE. THIS FIRST WORD IS / A STATUS/COUNT WORD FOR THE LINE WHICH IMMEDIATELY FOLLOWS. / / THE FUNCTION OF THE ROW TABLE IS TO AVOID MOVING THE SCREEN MEMORY / AROUND DURING INSERTION AND DELETION OF LINES. IN THIS CASE, ONLY / THE ROW TABLE ITSELF HAS TO BE ADJUSTED. FOR THIS REASON, THE / POINTER ADDRESSES IN THE ROW TABLE ARE NOT NECESSARY IN ANY ORDER. / / THE FORMAT OF THE STATUS/COUNT WORD FOR EACH LINE IS: / / ABC DEE EEE EEE / / A = 0 CURRENT LINE EXISTS / 1 CURRENT LINE DOES NOT EXIST (AT END OF FILE OR UNESTABLISHED) / / B = 0 LINE ENDS WITH CR/LF / 1 LINE ENDS WITHOUT CR/LF / / C = 0 LINE NOT MARKED / 1 LINE MARKED AS PART OF BLOCK (FOR SAVE/DELETION) / / D = 0 CURRENT LINE HAS NOT BEEN MODIFIED ON THIS EDIT / 1 HAS BEEN MODIFIED ON THIS EDIT CYCLE / / EEE..E LINE LENGTH IN THE RANGE 0-255 / / / END OF FILE IS INDICATED BY 'BOF' FLAG BEING SET AND BY ROWS / WITH A BIT 0 STATUS OF 1. / / THERE ARE TWO ONE-BLOCK BUFFERS 'FEEDING' THE SCREEN WINDOW: / THE ABOVE SCREEN BUFFER (ABUF) AND THE BELOW SCREEN BUFFER / (BBUF). THESE BUFFERS ARE IN OS/8 FORMAT AND ARE READ AND / WRITTEN FROM THE OS/8 DEVICE AS NEEDED. / TITLE IMPORTANT GLOBAL CELLS / / YOU MAY NEED TO BE AWARE OF THE FOLLOWING IMPORTANT CELLS AND / ENTRY POINTS IN VISTA: / / NAME FUNCTION / / COL CONTAINS BINARY COLUMN POSITION OF CURSOR IN RANGE / 0-(N-1). NOTE: POSITION IS NOT GUARANTEED FOR ALL / POSSIBLE VCM FUNCTIONS (BUT IT IS FOR ALL IMPORT/01.20 / ONES). / / ROW CURRENT POINTER INTO THE ROW TABLE. / / ROWTAB ADDRESS OF FIRST ROW IN ROW TABLE / LASTROW ADDRESS OF LAST ROW IN ROW TABLE / ROWSIZ COUNT OF NUMBER OF ROWS IN ROW TABLE (1-N) / COLSIZ COUNT OF NUMBER OF COLUMNS ON SCREEN / PKBD POINTER TO CONSOLE INPUT ROUTINE / PSCR POINTER TO CONSOLE OUTPUT ROUTINE / XT/XT2 TWO CELLS ON PAGE 0 RESERVED FOR USE BY 'VCM' / MODULE. VCM CAN ALLOCATE MORE PAGE 0 STORAGE / FROM THE ADDRESS XT2+1 UP TO 177 ON PAGE 0. / CAUTION: SPR'S FOR VISTA MAY REQUIRE THE USE OF / PAGE 0 CELLS (STARTING BACK FROM 177), SO USE / PAGE 0 CELLS ONLY WHEN ABSOLUTELY NECESSARY. / / PRLINE SUBROUTINE TO OUTPUT A FULL ROW ON THE SCREEN. / CAN ONLY BE CALLED FROM VCM IF VCM FILE ITSELF / PROTECTS AGAINST A RECURSIVE CALL BY SAVING THE / RETURN ADDRESSES IN 'PRLINE' AND 'XTER'. / / THIS ROUTINE WILL BE NEEDED FOR TERMINALS THAT ARE / CAPABLE OF PERFORMING INSERT AND DELETE LINE IN LOCAL / MODE (SEE VCM52 FOR AN EXAMPLE OF CALLING 'PRLINE') TITLE ASSEMBLY INSTRUCTIONS / / THIS VCM FILE IS TO BE ASSEMBLED WITH THE GLOBAL SYMBOL / DICTIONARY FROM VISTA: / / .R PAGE8 / *VCM,LPT:<VISTA.SD,VCM/I / / OR IF YOU HAVE TO USE PAL8 / / .R PAL8 / *VCM,LPT:<VISTA.EQ,VCM /01.20 / / WHERE FOR PAL8, 'VISTA.EQ' IS THE PAGE8 SYMBOL DIRECTORY CONVERT/01.20 / INTO PAL8 COMPATIBLE FORMAT. / XT3 EQU XT2+1 SCRATCH CELL / / ADJUST EQUATE BELOW BASED UPON BAUD RATE. VALUE BELOW IS CORRECT / FOR 9600 BAUD. / NULCT EQU 142 NUMBER OF NULLS FOR SMOOTH SCROLL TIMING / ORG KIO KEYBOARD I/O DSEC / / ALL FOLLOWING ADDRESSES ARE ABSOLUTELY REFERENCED BY VISTA / AND CANNOT BE CHANGED UNLESS VISTA ITSELF IS ALTERED. / KIO DC 0 KEYBOARD I/O ENTRY JMPI PXIN CONTINUE NOW / SIO DC 0 SCREEN I/O ENTRY POINT JMPI PXOUT CONTINUE / VMCMNT DC -'/ MINUS ASCII CODE OF COMMENT FIELD CHARACTER VMTAG DC -', MINUS ASCII CODE OF TAG FIELD DELIMITER VROWS DC 24 NUMBER OF ROWS ON VIDEO SCREEN VCOLS DC 80 NUMBER OF COLUMNS ON VIDEO SCREEN VAUCOL DC 72 STARTING COLUMN FOR AUDIT TRAIL OF VERSION #'S VSTAT DC 02000 NO XON/XOFF, CTRL/O ALLOWED / / ### END OF FIXED ADDRESS SECTION UTILIZED BY VISTA PROGRAM ### / XKIO JMPI KIO HERE TO EXIT FROM 'KIO' XSIO JMPI SIO HERE TO EXIT FROM 'SIO' PXIN DC XIN POINTER TO 'XIN' PXOUT DC XOUT POINTER TO 'XOUT' TITLE KEYBOARD ESCAPE TRANSLATION TABLE / / VISTA INTERNAL CODE FOR ALL ESCAPED CHARACTERS POSSIBLE ON THE / KEYBOARD. / / CHARACTERS PRECEDED BY ESCAPE KEY ONLY / PQR DC Y:NEWCMD P ENTER COMMAND MODE DC Y:TOFC Q TOP OF FILE DC Y:BOFC R BOTTOM OF FILE / /01.11 / THE FOLLOWING TABLE ENTRIES ARE PRECEDED WITH THE ESCAPE KEY (AND /01.11 / USUALLY GENERATED MANUALLY) /01.11 / /01.11 ESCDIG DC Y:INSBLK 1 INSERT BLOCK /01.11 DC Y:DELSCR 2 DELETE SCREEN /01.11 DC Y:TRUNCF 3 TRUNCATE FILE /01.11 / / CHARACTERS PRECEDED BY ESCAPE KEY ONLY / SPST DC Y:PAGEUP SP PAGE UP DC Y:PAGEDN ! PAGE DOWN DC Y:UNMKROW " UNMARK LINE DC Y:MKROW # MARK LINE DC Y:PICKUP $ PICKUP DC Y:PUTDN % PUT DOWN DC Y:RSTEP & REPLACEMENT STEP DC Y:RCONT ' REPLACEMENT CONTINUOUS DC Y:DISMOD ( DISPLAY MODIFIED LINES DC Y:DOSCRN ) RESTORE SCREEN DC Y:ROWINS * INSERT ROW / / LOWER CASE CHARACTERS PRECEDED BY ESCAPE AND QUESTION MARK / LMN DC Y:CDOWN L CURSOR DOWN DC Y:AWAY M CURSOR TO AWAY POSITION DC Y:WRIGHT N WORD RIGHT DC 0 O DC Y:WLEFT P WORD LEFT DC Y:CLEFT Q CURSOR LEFT DC Y:HOME R HOME CURSOR DC Y:CRIGHT S CURSOR RIGHT DC Y:CEOL T CURSOR TO END OF LINE DC Y:CUP U CURSOR UP DC Y:SCRLDN V SCROLL DOWN DC Y:CNEXTL W CURSOR TO START OF NEXT LINE DC Y:SEARCH X SEARCH KEY DC Y:SCRLUP Y SCROLL UP / / ASCII CONTROL CODE TABLE / ITRAN DC 0 CTRL/NULL DC Y:TRANSP CTRL/A TRANSPARENT MODE DC Y:DISMOD CTRL/B DISPLAY MODIFIED LINES DC Y:QUIT CTRL/C ABORT TO OS/8 DC Y:CSTART CTRL/D CURSOR TO START OF LINE DC Y:TABL CTRL/E TAB LEFT DC Y:CEOL CTRL/F CURSOR TO END OF CURRENT LINE DC Y:UNMKROW CTRL/G UNMARK ROW DC Y:BKDEL CTRL/H BACKSPACE DELETE DC Y:TABR CTRL/I TAB RIGHT DC Y:INSTOG CTRL/J INSERT CHARACTER TOGGLE DC Y:DELWD CTRL/K DELETE WORD DC Y:DELEWD CTRL/L DELETE TO END OF WORD DC Y:RETURN CTRL/M RETURN CODE DC Y:DOSCRN CTRL/N RESTORE SCREEN DC 0 CTRL/O DC Y:CASE CTRL/P INVERT CASE OF WORD DC 0 CTRL/Q DC Y:RCONT CTRL/R CONTINUOUS REPLACE DC 0 CTRL/S DC Y:RSTEP CTRL/T DC Y:DLETLN CTRL/U DELETE LINE DC 0 CTRL/V DC Y:AWAY CTRL/W CURSOR TO AWAY POSITION DC 0 CTRL/X DC Y:CNEXTL CTRL/Y CURSOR TO START OF NEXT LINE DC Y:XEDIT CTRL/Z CLOSE FILE DC 0 CTRL/[ DC 0 CTRL/\ DC 0 CTRL/] DC Y:INSBLK CTRL/^ INSERT BLOCK /01.20 DC Y:TRUNCF CTRL/_ TRUNCATE FILE TITLE SCREEN TRANSLATION TABLE / / DISPATCH TABLE FOR OUTPUT FUNCTION CODES / XTAB DC Z:POS 0 POSITION CURSOR DC Z:INIT 1 INITIALIZE SCREEN DC Z:SPAC 2 TABULATION/PAD CODE /01.21 DC Z:CRLF 3 CR/LF TYPE SEQUENCE DC Z:EOL 4 ERASE TO END OF LINE DC Z:CLSC 5 CLEAR SCREEN AND HOME CURSOR DC Z:INS 6 INSERT LINE DC Z:DEL 7 DELETE LINE DC Z:BEL 8 RING BELL DC Z:BKSP 9 BACKSPACE DC Z:SPV1 10 SPECIAL VIDEO MODE 1 DC Z:SPV2 11 SPECIAL VIDEO MODE 2 DC Z:NMV 12 NORMAL VIDEO MODE DC Z:END 13 NO-CRLF AT END OF LINE GRAPHIC /01.21 DC Z:RTN 14 RETURN TERMINAL TO ORIGINAL CONDITION/01.21 DC Z:CTRL 15 CONTROL CODE-NON-DISPLAYABLE /01.21 TITLE TRANSLATION ROUTINES / ISEC 0 / / ENTER HERE TO GET NEXT CHARACTER FROM CONSOLE TERMINAL. / ALL CHARACTERS ARE RETURNED IMMEDIATELY AND DIRECTLY / EXCEPT FOR THE ESCAPE/CONTROL CODES WHICH ARE USED TO IMPLEMENT / ALL FUNCTIONS. / XIN JMSI PKBD GET CHARACTER FROM KEYBOARD TAD =-0233 TEST FOR ESCAPE CODE SNA SKIP IF NOT JMP 1F HANDLE ESCAPE CODE TAD =0233-0240 TEST FOR CONTROL CODE SPA SKIP IF NOT CONTROL CODE JMP 0F ELSE HANDLE CONTROL CODE TAD =0240 RESTORE NORMAL CHARACTER JMP XKIO RETURN DIRECTLY TO VISTA / / HERE ON CONTROL CODE. / 0H TAD =ITRAN+040 BIAS CODE TO RANGE 0-37 JMP 2F MERGE BELOW TO GET ASSOCIATED CODE / / HERE ON ESCAPE CODE. / NEXT CHARACTER MUST BE: / QUESTION MARK = 3 CHAR SEQUENCE / P-R FIRST 3 FUNCTION KEYS / SPACE-* NEXT 11 FUNCTION KEYS / 1H JMSI PKBD READ CHARACTER AFTER ESCAPE CODE TAD =-'? 3-CHAR ESCAPE SEQUENCE? SNA SKIP IF NOT JMP THRCHR HANDLE THREE CHARACTER SEQUENCE / /01.11 / CHECK FOR 1-3 FOR ESCAPE/DIGIT TYPE SEQUENCES /01.11 / /01.11 TAD ='?-'3-1 TEST FOR 1-3 /01.11 CLL ... /01.11 TAD ='3-'1+1 ... /01.11 SZL DIGIT 1-3 HERE? /01.11 JMP DO123 YES: HANDLE THIS /01.11 / / HERE TO CHECK FOR P-R / ADCK TAD ='1-'R-1 TEST FOR P-R CLL ... TAD ='R-'P+1 ... SZL SKIP IF NOT P-R JMP DOPQR ELSE HANDLE A-D HERE TAD ='P-'*-1 SPACE THROUGH STAR? CLL ... TAD ='*-' +1 ... SZL JMP DOSPST SPACE-STAR JMP BADESC ELSE HANDLE BAD ESCAPE SEQUENCE NOW / THRCHR JMSI PKBD READ THIRD CHARACTER OF SEQUENCE TAD =-('Y+040)-1 L-Y LOWER CASE? CLL ... TAD ='Y-'L+1 ... SZL JMP DOLMN L-Y LOWER CASE BADESC CLA JMP XIN SOMETHING ELSE: IGNORE IT / DO123 TAD =ESCDIG-PQR INDEX TABLE DOPQR TAD =PQR-SPST ... DOSPST TAD =SPST-LMN ... DOLMN TAD =LMN ... / 2H DCA XT ... CDF %* TADI XT LOAD VISTA INTERNAL CODE CDF BUF RESET TO MAIN BUFFER FIELD SZA IS THIS AN UNDEFINED CODE? JMP XKIO NO: SO RETURN IT IN THE AC JMP XIN YES: SO STRIP COMPLETELY TITLE VCM OUTPUT SECTION / / ENTER HERE WITH CHARACTER TO BE OUTPUT TO THE SCREEN / XOUT DCA XT SAVE CHARACTER FOR A MOMENT TAD XT REGET CHARACTER TAD =-0200 LOWEST ASCII CODE SPA SKIP IF DISPLAYABLE CODE JMP 1F ELSE OFF FOR FUNCTION CODE TAD =0200 NORMAL CODE: RESTORE IT CHOUT JMSI PSCR OUTPUT BACK TO SCREEN / / COME HERE TO IGNORE CHARACTER / XNULL JMP XSIO ALL DONE HERE / / HERE FOR VIDEO MODES. USE HALF INTENSITY FEATURE FOR MARKED LINE/01.30 / /01.30 Z:NMV LDI -1 NORMAL VIDEO: FULL INTENSITY /01.30 / Z:SPV1 TAD ='4 SPECIAL VIDEO: HALF INTENSITY /01.30 Z:SPV2 QUT %*,Z:SPV1 ... /01.30 JMP ESCX SEND ESCAPE SEQUENCE /01.30 / / HERE ON END OF LINE CODE- MUST DISPLAY SOME KIND OF GRAPHIC / ON SCREEN. / Z:END TAD ='A-'P GRAPHIC FOR END OF LINE Z:CTRL TAD ='P+040 GRAPHIC FOR CONTROL CHARACTER DCA XT2 SAVE FOR A MOMENT TAD ='F ENTER GRAPHICS MODE JMS DOESC ... TAD XT2 GENERATES NICE GRAPHIC JMSI PSCR ... RESETG TAD ='G RE-SET GRAPHICS MODE JMP ESCX ALL DONE HERE / / HERE ON INITIAL ENTRY, MUST ENSURE GRAPHICS MODE CLEAR AND ALSO SET / ALTERNATE KEYPAD MODE / Z:RTN TAD ='>-'= RESET ALTERNATE KEYPAD MODE FOR EXIT Z:IN IT TAD ='= ESCAPE/= SETS ALTERNATE KEYPAD MODE JMS DOESC ... JMP RESETG END UP NOW BY RESETTING GRAPHICS MODE / / HERE ON FUNCTION CODE: INDEX DISPATCH TABLE / 1H TAD =XTAB+0200 INDEX DISPATCH TABLE DCA XT2 ... CDF %* TO CURRENT FIELD TADI XT2 GET ADDRESS CDF BUF BACK TO BUFFER FIELD DCA XT2 ... JMPI XT2 PASS CONTROL NOW / / HERE ON CONTROL CODE WHICH WE WISH TO SEND NORMALLY / OCTRL TAD XT REGET THE CONTROL CHARACTER JMP CHOUT OUTPUT CHARACTER NOW EJECT / / HERE FOR BACKSPACE/BELL/TAB AND PAD FUNCTIONS / Z:BEL LDI -1 CONTROL/G DOES BELL FUNCTION Z:BKSP TAD =0210-' CONTROL/H DOES BACKSPACE FUNCTION Z:SPAC TAD =' TAB/PAD CODE BECOMES A SPACE CODE JMP CHOUT ... / / HERE FOR SIMPLE TWO-CHARACTER ESCAPE FUNCTIONS / Z:EOL TAD ='K-'C DO ESCAPE/K FOR ERASE TO EOL Z:CRI TAD ='C ESCAPE/C IS CURSOR RIGHT ESCX JMS DOESC DO ESCAPE SEQUENCE JMP XSIO ALL DONE HERE / / HERE FOR DELETE LINE. IF DELETING TOP LINE ON SCREEN, CURSOR POSITION / TO BOTTOM LINE AND ISSUE LINE FEED. IT HAS THE SAME EFFECT AND HAS THE / ADVANTAGE ON THE VISUAL-200 OF ENABLING THE SMOOTH SCROLL. THE / SMOOTH SCROLL IS NOT PERFECT BECAUSE OF DISC/TAPE I/O, BUT IT'S CLOSE / Z:DEL TAD ROW GET CURRENT ROW POSITION CMA IAC SUBTRACT FROM TAD ROWTAB FIRST ROW IN ROW TABLE SZA CLA SKIP IF DELETING TOP ROW JMP Z:DEL2 NOT TOP ROW: JUST DO DELETE LINE THEN / / HERE FOR DELETE OF TOP ROW. ISSUE LINE FEED ON BOTTOM ROW. / LDI -1 COMPUTE BINARY POSITION OF LAST ROW TAD ROWSIZ ... JMS MOVEC MOVE CURSOR TO THAT ROW / / GET LENGTH OF CURRENT BOTTOM LINE ON SCREEN TO CALCULATE HOW / MANY NULLS TO SEND OUT. / LDI -1 LAST ROW IS NOW ON 2ND TO LAST ROW TAD LASTROW ... DCA XT SAVE POINTER TO 2ND TO LAST ROW TADI XT GET ADDRESS OF LENGTH/STATUS DCA XT SET POINTER TADI XT GET THE LENGTH/STATUS WORD AND =0377 ISOLATE THE LENGTH FIELD TAD =-NULCT NUMBER OF NULLS NEEDED AT BAUD RATE JMS NULSUB GENERATE THAT NUMBER OF NULLS NOW TAD =LF ISSUE LINE FEED ON THAT ROW JMSI PSCR ... JMS MOVEC MOVE CURSOR BACK TO TOP ROW JMP DONULLS FOR SAFETY, FOLLOW WITH NULL STRING / / DELETE LINE, INSERT LINE AND CLEAR SCREEN. / Z:DEL2 TAD ='M-('V+040) ESCAPE/M DELETES LINE Z:CLSC TAD ='V+040-'L DO ESCAPE/v FOR CLEAR SCREEN Z:INS TAD ='L ESCAPE/L INSERTS LINE JMS DOESC ... / / COME HERE TO ISSUE A ST RING OF NULLS TO AVOID TIMING PROBLEMS / DONULLS TAD =-30 FOLLOW WITH 30 NULLS FOR TIMING JMS NULSUB CALL NULL SUBROUTINE JMP XSIO ALL DONE HERE / / SUBROUTINE TO GENERATE NULLS. CALL WITH NEGATIVE NUMBER OF NULLS / TO GENERATE IN AC ON ENTRY. / NULSUB SUB DCA XT ... 2H TAD =NULL OUTPUT NULLS JMSI PSCR ... ISZ XT MORE NULLS? JMP 2B YES: DO THEM RET NULSUB NO: ALL DONE HERE / / OUTPUT ESCAPE SEQUENCE, CHAR IN AC / DOESC SUB DCA XT SAVE CHARACTER TAD =0233 OUTPUT ESCAPE CODE JMSI PSCR ... TAD XT REGET CHARACTER JMSI PSCR ... RET DOESC ALL DONE HERE / / HERE FOR CR/LF ON SCREEN. / Z:CRLF TAD =CR CARRIAGE RETURN JMSI PSCR ... TAD =LF LINE FEED JMP CHOUT ... EJECT / / HERE FOR POSITION CURSOR COMMAND. IN THIS CASE, WE POSITION / TO THE ROW AND COLUMN SPECIFIED BY 'ROW' AND 'COL' / / VISUAL-200 REQUIRES: / / ESC Y L C / / WHERE X IS THE LINE NUMBER, AND Y IS THE COLUMN POSITION / Z:POS TAD ROWTAB START OF ROW TABLE CMA IAC NEGATE AND SUBTRACT FROM TAD ROW CURRENT ROW POSITION JMS MOVEC MOVE CURSOR TO THAT ROW NOW JMP XSIO ALL DONE HERE / / SUBROUTINE TO MOVE TO A PARTICULAR ROW AND COLUMN. ON ENTRY / 'COL' HAS THE DESIRED COLUMN, AND THE AC HAS THE BINARY ROW / POSITION THAT WE WANT. / MOVEC SUB TAD =' BUILD ASCII CODE FOR LINE POSITION DCA XT3 SAVE FOR A MOMENT TAD ='Y START OF POSITIONING SEQUENCE JMS DOESC START THE SEQUENCE TAD XT3 GET ROW POSITION JMSI PSCR OUTPUT THAT TAD COL GET THE BINARY COLUMN POSITION TAD =' BUILD ASCII CODE FOR COLUMN JMSI PSCR OUTPUT THAT RET MOVEC ALL DONE HERE