File: VCMHAZ.PG of Tape: Sources/Other/new-22-vista-2
(Source file text)
FILE VCMHAZ - HAZLETINE /01.16 / TITLE VERSION 01.18 -- 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 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 / '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 IMPORTANT / 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.GL,VCM / / WHERE FOR PAL8, 'VISTA.GL' IS THE PAGE8 SYMBOL DIRECTORY CONVERTED / INTO PAL8 COMPATIBLE FORMAT. / LEADIN EQU 0376 LEAD IN CODE FOR HAZELTINE 1500 (TILDE) ESC EQU 0233 ESCAPE CODE XT3 EQU XT2+1 SCRATCH CELL XCOL EQU XT3+1 'GUARANTEED' CORRECT SCREEN COLUMN / ORG KIO KEYBOARD I/O DSEC AFIELD BUF MAIN ASSEMBLY DATA FIELD / / 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 27 NUMBER OF ROWS ON VIDEO SCREEN VCOLS DC 74 NUMBER OF COLUMNS ON VIDEO SCREEN VAUCOL DC 64 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 LEADIN TRANSLATION TABLE / / VISTA INTERNAL CODE FOR TWO-CHARACTER SEQUENCES WHERE FIRST CHARACTER / IS ESCAPE, AND SECOND CHARACTER IS A DECIMAL DIGIT. / ESCDIG DC Y:QUIT 0 RETURN TO OS/8 DC Y:ROWINS 1 INSERT LINE /01.16 DC Y:TRANSP 2 TRANSPARENT ENTRY DC Y:DOSCRN 3 RESTORE SCREEN DC Y:TABL 4 TAB LEFT DC Y:UNMKROW 5 UNMARK LINE DC Y:DISMOD 6 DISPLAY MODIFIED LINES DC 0 7 (UNUSED) DC Y:TRUNCF 8 TRUNCATE FILE DC Y:DELSCR 9 DELETE SCREEN / /01.16 / VISTA INTERNAL CODE FOR TWO-CHARACTER SEQUENCE OF ESCAPE AND THEN /01.16 / AND ALPHABETIC CHARACTER /01.16 / /01.16 ESCALPH DC Y:NEWCMD A ENTER COMMAND MODE /01.16 DC Y:SCRLUP B SCROLL UP /01.16 DC Y:SCRLDN C SCROLL DOWN /01.16 DC Y:PAGEUP D PAGE UP /01.16 DC Y:PAGEDN E PAGE DOWN /01.16 DC Y:INSBLK F INSERT BLOCK /01.16 DC Y:PICKUP G PICKUP TEXT /01.16 DC Y:PUTDN H PUTDOWN /01.16 DC Y:TOFC I TOP OF FILE /01.16 DC Y:BOFC J BOTTOM OF FILE /01.16 / / VISTA INTERNAL CODE FOR ALL CONTROL CHARACTERS POSSIBLE ON THE / KEYBOARD. / /01.16 ITRAN DC 0 CTRL/NULL DC Y:WLEFT CTRL/A WORD LEFT DC Y:MKROW CTRL/B MARK LINES DC Y:CDOWN CTRL/C CURSOR DOWN DC Y:HOME CTRL/D HOME CURSOR DC Y:CUP CTRL/E CURSOR UP DC Y:CRIGHT CTRL/F CURSOR RIGHT DC Y:WRIGHT CTRL/G WORD RIGHT 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 (RESERVED FOR SCREEN BLANKING DC Y:CASE CTRL/P INVERT CASE OF WORD DC Y:SEARCH CTRL/Q SEARCH DC Y:RCONT CTRL/R CONTINUOUS REPLACE DC Y:CLEFT CTRL/S CURSOR LEFT DC Y:RSTEP CTRL/T STEP REPLACEMENT DC Y:DLETLN CTRL/U DELETE LINE DC Y:CEOL CTRL/V CURSOR TO END OF LINE DC Y:AWAY CTRL/W CURSOR TO AWAY POSITION DC Y:CSTART CTRL/X CURSOR TO START OF LINE 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 0 CTRL/^ DC 0 CTRL/_ 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 PAD CODE FOR TABS 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 DC Z:RTN 14 RETURN VDT TO INITIAL STATE DC Z:CTRL 15 CONTROL CODE-NON-DISPLAYABLE 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 CLA (IN CASE IGNORING ESCAPE SEQUENCE) JMSI PKBD GET CHARACTER FROM KEYBOARD TAD =-ESC TEST FOR ESCAPE CODE SNA SKIP IF NOT JMP 0F HANDLE ESCAPE CODE TAD =ESC-0240 TEST FOR CONTROL CODE SPA SKIP IF NOT CONTROL CODE JMP 1F ELSE HANDLE CONTROL CODE TAD =0240 RESTORE NORMAL CHARACTER JMP XKIO RETURN DIRECTLY TO VISTA / / HERE ON ESCAPE CODE. / NEXT CHARACTER MUST BE: / A-J (UPPER/LOWER CASE) /01.16 / DIGIT FROM 0-9 / 0H JMSI PKBD READ CHARACTER AFTER ESCAPE CODE TAD =-'9-1 TEST FOR DIGIT FROM 0-9 /01.16 CLL ... TAD ='9-'0+1 ... SZL SKIP IF NOT A DIGIT FROM 0-9 /01.16 JMP DODIG HANDLE ESCAPE/ DIGIT /01.16 TAD ='0 RESTORE CHARACTER /01.16 AND =040.XO.-1 REMOVE POSSIBLE UPPER/ LOWER CASE BIT /01.16 TAD =-'J-1 TEST FOR A-J /01.16 CLL ... /01.16 TAD ='J-'A+1 ... /01.16 SNL SKIP IF A-J HERE /01.16 JMP XIN IGNORE INVALID ESCAPE SEQUENCE /01.16 / /01.16 TAD =ESCALPH-ESCDIG INDEX ALPHA TABLE /01.16 DODIG TAD =ESCDIG-(ITRAN+040) INDEX TABLE /01.16 / / HERE ON CONTROL CODE. / 1H TAD =ITRAN+040 ... 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 /01.16 / / ENTER HERE WITH CHARACTER TO BE OUTPUT TO THE SCREEN / XOUT DCA XT SAVE CHARACTER FOR A MOMENT TAD XT REGET CH ARACTER TAD =-0200 LOWEST ASCII CODE SPA SKIP IF DISPLAYABLE CODE JMP 1F ELSE OFF FOR FUNCTION CODE TAD =0200 NORMAL CODE: RESTORE IT INC XCOL COUNT COLUMN POSITION ON SCREEN CHOUT JMSI PSCR OUTPUT BACK TO SCREEN / / HERE TO RETURN TERMINAL TO NORMAL MODE BEFORE EXITING VISTA / Z:RTN JMP XNULL NOTHING FOR RETURNING TERMINAL / / COME HERE FOR INITIALIZATION OF THE TERMINAL / Z:INIT DCA XCOL MARK AT COLUMN 0 JMP XNULL ALL DONE HERE / / COME HERE TO IGNORE CHARACTER / XNULL JMP XSIO ALL DONE HERE / / HERE FOR VIDEO MODES. USE BACKGROUND FOR VIDEO ENHANCEMENT / Z:SPV1 NOP (SAME THING FOR BOTH VIDEO MODES) Z:SPV2 TAD ='Y-'O USE BACKGROUND FOR SPECIAL VIDEO Z:NMV TAD ='O SET FOREGROUND FOR NORMAL VIDEO ESCX JMS DOESC JMP XSIO ALL DONE HERE / / HERE ON END OF LINE CODE- MUST DISPLAY SOME KIND OF SPECIAL / CHARACTER ON SCREEN. / Z:END TAD ='_-'@ CHARQACTER FOR END OF LINE Z:CTRL TAD ='@ CHARACTER FOR CONTROL CHARACTER INC XCOL ACCOUNT FOR THE CHARACTER JMP CHOUT ... / / 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 EJECT / / HERE FOR BACKSPACE/BELL/TAB AND PAD FUNCTIONS / Z:BEL TAD =0207 CONTROL/G DOES BELL FUNCTION JMP CHOUT / Z:BKSP LDI -1 BACKSPACE DECREMENTS COLUMN TAD XCOL ... DCA XCOL ... TAD =0210 CONTROL/H DOES BACKSPACE FUNCTION JMP CHOUT ... / Z:SPAC TAD =' TAB/PAD CODE BECOMES A SPACE CODE INC XCOL ACCOUNT FOR COLUMN SHIFT JMP CHOUT ... / / HERE FOR ERASE TO END OF LINE. SINCE THERE IS NO NATIVE FUNCTION ON THE / HAZELTINE TERMINAL, WE WILL HAVE TO GENERATE SPACES TO THE END OF THE / CURRENT LINE. /01.16 / /01.16 / NOTE: VERSION 01.09 OF VISTA DOES NOT OPTIMIZE THE ERASE TO /01.16 / END OF LINE FUNCTION. IN PARTICULAR, THE ROW AND COLUMN /01.16 / IN 'ROW' AND 'COL' ARE NOT GUARANTEED TO MATCH THE /01.16 / SCREEN AT THE TIME THE 'EOL' FUNCTION IS ISSUED. BEST /01.16 / BET WITH HAZELTINE THEREFORE IS TO ISSUE SPACES TO THE /01.16 / END OF THE SCREEN (ENSURES ALL CHARACTERS REMOVED) AND /01.16 / THEN FOLLOW WITH BACKSPACES TO RESTORE CURSOR POSITION. /01.16 / (NOT IDEAL, BUT AT 9600 BAUD ITS ACCEPTABLE) /01.16 / Z:EOL TADX VCOLS GET FULL COLUMN WIDTH CMA IAC SUBTRACT FROM TAD XCOL CORRECT SCREEN COLUMN POSITION DCA XT SAVE COUNT TAD XT COPY COUNT DCA XT2 ... JMP 4F START AT END OF LOOP IN CASE NULL / / LOOP HERE GENERATING SPACE CODES. / 3H TAD =' GENERATE A SINGLE SPACE JMSI PSCR ... 4H ISZ XT MORE TO GENERATE? JMP 3B YES: SO LOOP ON IT JMP 6F CONTINUE INTO 2ND LOOP NOW / 5H TAD =0210 DO BACKSPACE FUNCTION JMSI PSCR ... 6H ISZ XT2 MORE TO GO? JMP 5B YES: CONTINUE JMP XSIO ALL DONE HERE / / DELETE LINE/INSERT LINE AND CLEAR SCREEN. / Z:CLSC TAD ='\-'Z DO LEADIN/CTRL-\ FOR CLEAR SCREEN Z:INS TAD ='Z-'S LEADIN/CTRL-Z INSERTS LINE Z:DEL TAD ='S-64 LEADIN/CTRL-S DELETES LINE JMS DOESC ... DCA XCOL ALL FUNCTIONS RESET COLUMN TO 0 / / MERGE HERE FROM POSITION CURSOR COMMAND FOR TIMING DELAY / HDELAY TAD =-8 FOLLOW WITH 8 NULLS FOR TIMING DCA XT ... 1H TAD =0377 USE DELETE FOR NULL CODE JMSI PSCR ... ISZ XT MORE NULLS? JMP 1B YES: DO THEM JMP XSIO NO: ALL DONE HERE / / OUTPUT LEADIN SEQUENCE, CHAR IN AC / DOESC SUB DCA XT SAVE CHARACTER TAD =LEADIN OUTPUT LEADIN 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 ... DCA XCOL RESET COLUMN TO 0 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' / / HAZELTINE TERMINAL REQUIRES: / / LEADIN CTRL/Q COL ROW (THEN 5-6MSEC DELAY) / Z:POS TAD COL SET FOR VISTA COLUMN DCA XCOL AS ACTUAL COLUMN Z:POS2 TAD ROWTAB START OF ROW TABLE CMA IAC NEGATE AND SUBTRACT FROM TAD ROW CURRENT ROW POSITION TAD =0200 BUILD ASCII CODE FOR LINE POSITION DCA XT3 SAVE FOR A MOMENT TAD ='Q-64 START OF POSITIONING SEQUENCE JMS DOESC START THE SEQUENCE TAD XCOL GET THE BINARY COLUMN POSITION TAD =0200 BUILD ASCII CODE FOR COLUMN JMSI PSCR OUTPUT THAT TAD XT3 GET ROW POSITION JMSI PSCR OUTPUT THAT JMP HDELAY END UP NOW WITH DELAY LOOP