/ VCMD80 - PAL8 COMPATIBLE VCM FILE / VERSION 01.66 -- VISTA INTRODUCTION / / / ****************************************** / ** ** / ** 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 ** / ** ** / ** MODIFIED FROM VCM100.PA FOR VT100 ** / ** TO VCMD80.PA FOR AMPEX DIALOG 80 ** / ** BY EUGENE J. M. LYNCH AUGUST, 1984 ** / ** ** / ** ** / ****************************************** / / / 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 in public domain / / / 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 / / 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. / / / 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') / / THIS VCM FILE IS TO BE ASSEMBLED WITH THE GLOBAL SYMBOL / DICTIONARY FROM VISTA: / / .R PAGE8 / *VCM,LPT: YDELSCR /V DELETE SCREEN / / / ASCII CONTROL CODE TABLE / ITRAN, 0 /CTRL/NULL YTRANSP /CTRL/A TRANSPARENT MODE YDISMOD /CTRL/B DISPLAY MODIFIED LINES YQUIT /CTRL/C ABORT TO OS/8 YCSTART /CTRL/D CURSOR TO START OF LINE YTABL /CTRL/E TAB LEFT YCEOL /CTRL/F CURSOR TO END OF LINE YUNMKROW /CTRL/G UNMARK ROW YCLEFT /CTRL/H CURSOR LEFT (BS) YTABR /CTRL/I TAB RIGHT YCDOWN /CTRL/J CURSOR DOWN (LF) YCUP /CTRL/K CURSOR UP YCRIGHT /CTRL/L CURSOR RIGHT YRETURN /CTRL/M RETURN CODE YINSTOG /CTRL/N INSERT CHARACTER TOGGLE 0 /CTRL/O YCASE /CTRL/P INVERT CASE OF WORD 0 /CTRL/Q YRCONT /CTRL/R CONTINUOUS REPLACE 0 /CTRL/S YRSTEP /CTRL/T STEP REPLACEMENT YDLETLN /CTRL/U DELETE LINE YINSBLK /CTRL/V INSERT BLOCK YDELWD /CTRL/W DELETE WORD YDELEWD /CTRL/X DELETE TO END OF WORD YCNEXTL /CTRL/Y CURSOR TO START OF NEXT LINE YXEDIT /CTRL/Z CLOSE FILE 0 /CTRL/[ 0 /CTRL/\ 0 /CTRL/] YHOME /CTRL/^ HOME CURSOR YRETURN /CTRL/_ NEW LINE / / 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, JMS I PKBD /GET CHARACTER FROM KEYBOARD TAD (-234 /TEST FOR PROGRAM CODE SNA JMP ESCODE IAC /TEST FOR ESCAPE CODE SNA /SKIP IF NOT JMP ESCODE /HANDLE ESCAPE CODE TAD (0233-0240 /TEST FOR CONTROL CODE SPA /SKIP IF NOT CONTROL CODE JMP CTRCOD /ELSE HANDLE CONTROL CODE TAD (0240 /RESTORE NORMAL CHARACTER / / MERGE FROM SEVERAL PLACES TO EXIT / XKIO, JMP I KIO /RETURN DIRECTLY TO VISTA / / HERE ON ESCAPE CODE. / NEXT CHARACTER WILL BE LETTER O, SO FLUSH IT OUT / ESCODE, JMS I PKBD /READ CHARACTER AFTER ESCAPE CODE TAD (-"V-1 /TEST FOR A-V CLL /... TAD ("V-"A+1 /... SZL JMP DOLETR /A-V / IAC SNA JMP PRINT TAD ("A-1-236 /HOME CTRL CHAR? SNA /... JMP DOAWAY TAD (236-210 /BACKSPACE? SZA CLA JMP XIN /SOMETHING ELSE IGNORE IT IAC /BACKSPACE DELETE DOAWAY, CMA /CURSOR TO AWAY POSITION / DOLETR, TAD (PRCMDS-ITRAN-40 /INDEX TABLE CTRCOD, TAD (35 SZA JMP DOCTR CONTC, TAD (5 JMS SIO DOCTR, TAD (ITRAN+003 /BIAS CODE TO RANGE 0-37 JMS INDEX SZA /IS THIS AN UNDEFINED CODE? JMP XKIO /NO SO RETURN IT IN THE AC JMP XIN /YES SO STRIP COMPLETELY / INDEX, 0 DCA XT2 /... CDF 00 TAD I XT2 /LOAD VISTA INTERNAL CODE CDF 10 /RESET TO MAIN BUFFER FIELD JMP I INDEX PAGE / ENTER HERE WITH CHARACTER TO BE OUTPUT TO THE SCREEN / XOUT, TAD (-0200 /LOWEST ASCII CODE SPA /SKIP IF DISPLAYABLE CODE JMP FUNCOD /ELSE OFF FOR FUNCTION CODE TAD (0200 /NORMAL CODE RESTORE IT CHOUT, JMS I PSCR /OUTPUT BACK TO SCREEN / / COME HERE TO IGNORE CHARACTER / XNULL, JMP XSIO /ALL DONE HERE / / HERE ON FUNCTION CODE: INDEX DISPATCH TABLE / FUNCOD, TAD (XTAB+0200 /INDEX DISPATCH TABLE / DCA XT2 /... / CDF 00 /TO CURRENT FIELD / TAD I XT2 /GET ADDRESS / CDF 10 /BACK TO BUFFER FIELD JMS INDEX DCA XT2 /... JMP I XT2 /PASS CONTROL NOW / / HERE ON CONTROL CHARACTER - MUST DISPLAY SOME KIND OF GRAPHIC / ON SCREEN. ENTER VT52 MODE TEMPORARILY AND ISSUE GRAPHIC CODE / ZCTRL, TAD ("J+040 / ESC j for reverse video JMS DOESC TAD (" / Write space for control char JMP ZATTR / Go finish ZEND, TAD ("A+040 / ESC a to leave attr mode JMS DOESC TAD ("C+40 / ESC c for program mode JMS DOESC TAD (CR / Output "CR" graphic ZATTR, JMS I PSCR CLA IAC / NL1 TAD XT / Cancel mode with next char JMS DOESC ZATTR1, TAD (-40 / ESC A for attr mode / / HERE TO RETURN VDT TO ORIGINAL CONDITION. / ZRTN, TAD ("A+40-"R / ESC a to leave attr mode / / DELETE LINE FUNCTION / ZDEL, TAD ("R-"* / ESC R to delete line / / CLEAR SCREEN COMMAND / ZCLSC, TAD ("*-"T-40 /ERASE ENTIRE SCREEN / / ERASE TO END OF LINE / ZEOL, TAD ("T+40 /Erase to end of line / XESC, JMS DOESC /... JMP XSIO /ALL DONE HERE / / INSERT LINE FUNCTION / ZINS, TAD ("E JMS DOESC / ESC E to insert line JMP ZEOL / Erase to nuls / / HERE FOR CR/LF ON SCREEN. / ZCRLF, TAD ("T+40 JMS DOESC TAD (0237 /CR JMS I PSCR JMP ZEOL / / HERE FOR BACKSPACE FUNCTION / ZBEL, CLA CMA /CONTROL/G DOES BELL FUNCTION / / HERE FOR BACKSPACE FUNCTION / ZBKSP, TAD (0210-" /CONTROL/H DOES BACKSPACE FUNCTION / / HERE ON TAB/PAD CODE: SEND AS SPACE / ZSPAC, TAD (" /RETURN SPACE INSTEAD JMP CHOUT /... / / OUTPUT ESCAPE SEQUENCE, CHAR IN AC / DOESC, 0 DCA XT /SAVE CHARACTER TAD (0233 /OUTPUT ESCAPE CODE JMS I PSCR /... TAD XT /REGET CHARACTER JMS I PSCR /... JMP I DOESC /ALL DONE HERE / / HERE FOR VIDEO MODES / ZNMV, TAD XT4 / Turn off attributes SNA CLA / SKP if flash on JMP ZNMV1 TAD ("M+40 / ESC o to turn off JMS DOESC DCA XT4 / Clear indicator ZNMV1, TAD XT5 SNA CLA / SKP if underline on JMP XSIO / No - all done DCA XT5 / Clear indicator TAD ("O+40 / ESC m to turn off JMP XESC ZSPV1, ISZ XT4 / Set flash indicator TAD ("L-"N / ESC l for flash on SKP ZSPV2, ISZ XT5 / Set underline indicator TAD ("N+40 / ESC n for underline JMP XESC / / HERE FOR POSITION CURSOR COMMAND. IN THIS CASE, WE POSITION / TO THE ROW AND COLUMN SPECIFIED BY 'ROW' AND 'COL' / / D80 REQUIRES: / / ESC=LC / / WHERE L IS THE LINE CODE, AND C IS THE COLUMN CODE / CODE IS LINE/COLUMN NUMBER (0-23/0-79) PLUS ASCII SPACE / ZPOS, TAD ("= JMS DOESC /START WITH ESCAPE AND EQUAL TAD ROWTAB /FIRST LINE IN TABLE CMA IAC /NEGATE AND SUBTRACT TAD ROW /FROM CURRENT ROW TAD (" /CODE JMS I PSCR /OUTPUT LINE ADDRESS TAD COL /COLUMN POSITION TAD (" /CODE JMP CHOUT /ALL DONE HERE / PAGE PRINT1, TAD LASTROW CIA TAD ROW SPA CLA JMP PABORT TAD (YPAGEUP JMS PXIN PRINT, TAD (YAWAY JMS PXIN TAD ("P JMS DOESC JMS I PKBD TAD (-CR SNA CLA JMP PRINT1 PABORT, TAD ("O JMS DOESC TAD (XIN CDF 00 DCA PXIN CDF 10 JMP XIN / / HERE TO INITIALIZE VDT. SET UP PROGRAM KEYS. / ZINIT, TAD ("D+40 / Program mode off JMS DOESC TAD ("K / Transparent print off JMS DOESC TAD ("" / Unlock keyboard JMS DOESC TAD ("' / Protect mode off JMS DOESC TAD ("( / Write protect off JMS DOESC TAD ("C / Conversational mode JMS DOESC TAD ("P+40 / Blank on JMS DOESC TAD ("A / Attribute mode on JMS DOESC TAD ("A / Set up to load program keys DCA XT2 / Send ESC e A/B 0-9 to load TAD XT2 / keys A0 through B9, ESC S to DCA XT3 / send key to modem, FS A TAD ("0-1 / through FS T for the 20 keys, DCA XT4 / ESC x to terminate load TAD (-24 / 20. loops DCA XT5 CLL / Increment digit switch INLOOP, TAD ("E+40 / ESC e to start load JMS DOESC TAD XT2 / A or B key identifier JMS I PSCR TAD XT2 / Toggle A and B for next CIA TAD ("A+"B SZL / Increment digit only after B ISZ XT4 DCA XT2 / Save A or B for next TAD XT4 / Send digit identifier JMS I PSCR TAD ("S / ESC S for send to modem JMS DOESC TAD (234 JMS I PSCR TAD XT3 / ESC A through T for function JMS I PSCR ISZ XT3 / Bump letter for next TAD ("X+40 / ESC x to terminate load JMS DOESC TAD (210 / BS JMS I PSCR ISZ XT5 / Done? JMP INLOOP / No - repeat DCA XT4 / Clear attributes on JMP XSIO / Go set attribute mode / / / DISPATCH TABLE FOR EXTERPRETER FUNCTION CODES / XTAB, ZPOS /0 POSITION CURSOR ZINIT /1 INITIALIZE SCREEN ZSPAC /2 PAD CODE FOR TABS ZCRLF /3 CR/LF TYPE SEQUENCE ZEOL /4 ERASE TO END OF LINE ZCLSC /5 CLEAR SCREEN AND HOME CURSOR ZINS /6 INSERT LINE ZDEL /7 DELETE LINE ZBEL /8 RING BELL ZBKSP /9 BACKSPACE ZSPV1 /10 SPECIAL VIDEO MODE 1 ZSPV2 /11 SPECIAL VIDEO MODE 2 ZNMV /12 NORMAL VIDEO MODE ZEND /13 NO-CRLF AT END OF LINE GRAPHIC ZRTN /14 RETURN VDT TO ORIGINAL STATE ZCTRL /15 CONTROL CODE-NON-DISPLAYABLE $