CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Table of contents 2- 5 SCOPE TYPE DETERMINATION, TABLES, SEQUENCES 2- 11 ASSEMBLY PARAMETERS 3- 1 DEFAULT AND SET UP THE ASSEMBLY PARAMETERS 3- 14 ASSEMBLED FOR RSTS/E SCOPE TYPE DETERMINATION 4- 19 ASSEMBLED TO NOT INCLUDE "WATCH" SUPPORT 4- 31 ASSEMBLED TO NOT INCLUDE IMMEDIATE MODE COMMANDS 5- 14 ASSEMBLED WITH HARDWARE 'SOB' INSTRUCTION 5- 36 ASSEMBLED WITH HARDWARE 'DIV' INSTRUCTION 6- 1 FIXED FORMAT PREAMBLE 7- 1 DETERMINE SCOPE TYPE 10- 1 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 1 1 000001 RSTS = 1 ;ASSEMBLE FOR RSTS/E SCOPE TYPE DETERMINATION 2 000000 WATCH = 0 ;ASSEMBLE TO NOT INCLUDE "WATCH" SUPPORT 3 000000 SCROLL = 0 ;ASSEMBLE TO NOT INCLUDE SCROLLING SUPPORT 4 000000 IMMEDC = 0 ;ASSEMBLE TO NOT INCLUDE IMMEDIATE MODE COMMANDS 5 000001 I$$SOB = 1 ;ASSEMBLE WITH HARDWARE SOB INSTRUCTION 6 000001 I$$DIV = 1 ;ASSEMBLE WITH HARDWARE DIVIDE INSTRUCTION CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 2 1 .TITLE CRTRUB SCOPE TYPE DETERMINATION, TABLES, SEQUENCES 2 .NLIST TTM 3 .LIST TOC,MEB,BEX 4 .ENABL REG,GBL,LC 5 .SBTTL SCOPE TYPE DETERMINATION, TABLES, SEQUENCES 6 7 ; LAST EDIT ON 02-JUN-83 BY MARK BRAMHALL 8 9 .IDENT /V39.00/ 10 11 .SBTTL ASSEMBLY PARAMETERS 12 13 ; RSTS ASSEMBLE FOR RSTS/E SCOPE TYPE DETERMINATION (D=NO) 14 ; RSX ASSEMBLE FOR RSX-11 SCOPE TYPE DETERMINATION (D=NO) 15 ; RT11 ASSEMBLE FOR RT-11 SCOPE TYPE DETERMINATION (D=NO) 16 ; VMS ASSEMBLE FOR VAX/VMS SCOPE TYPE DETERMINATION (D=NO) 17 18 ; NOTE: YOU MUST SELECT EXACTLY ONE OPERATING SYSTEM FROM THE FOUR ABOVE. 19 20 ; WATCH ASSEMBLE TO INCLUDE "WATCH" SUPPORT (D=YES) 21 ; SCROLL ASSEMBLE TO INCLUDE SCROLLING SUPPORT (D=YES) 22 ; IMMEDC ASSEMBLE TO INCLUDE IMMEDIATE MODE COMMANDS (D=YES) 23 ; I$$SOB ASSEMBLE FOR HARDWARE 'SOB' INSTRUCTION (D=NO) 24 ; I$$DIV ASSEMBLE FOR HARDWARE 'DIV' INSTRUCTION (D=NO) CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 3 DEFAULT AND SET UP THE ASSEMBLY PARAMETERS 1 .SBTTL DEFAULT AND SET UP THE ASSEMBLY PARAMETERS 2 3 .IIF NDF RSTS, RSTS=0 ;DEFAULT TO NOT RSTS/E 4 .IIF NDF RSX, RSX=0 ;DEFAULT TO NOT RSX-11 5 .IIF NDF RT11, RT11=0 ;DEFAULT TO NOT RT-11 6 .IIF NDF VMS, VMS=0 ;DEFAULT TO NOT VAX/VMS 7 8 000000 $$$$$$ = 0 9 10 .IF NE RSTS 11 12 000001 $$$$$$ = $$$$$$+1 13 14 .SBTTL ASSEMBLED FOR RSTS/E SCOPE TYPE DETERMINATION 15 16 .ENDC ;NE RSTS 17 18 .IF NE RSX 19 20 $$$$$$ = $$$$$$+1 21 22 .SBTTL ASSEMBLED FOR RSX-11 SCOPE TYPE DETERMINATION 23 24 .ENDC ;NE RSX 25 26 .IF NE RT11 27 28 $$$$$$ = $$$$$$+1 29 30 .SBTTL ASSEMBLED FOR RT-11 SCOPE TYPE DETERMINATION 31 32 .ENDC ;NE RT11 33 34 .IF NE VMS 35 36 $$$$$$ = $$$$$$+1 37 38 .SBTTL ASSEMBLED FOR VAX/VMS SCOPE TYPE DETERMINATION 39 40 .ENDC ;NE VMS 41 42 .IF NE $$$$$$-1 43 44 .ERROR ;NO OR MORE THAN ONE SCOPE TYPE DETERMINATION ROUTINE SPECIFIED 45 46 .ENDC ;NE $$$$$$-1 CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 4 ASSEMBLED FOR RSTS/E SCOPE TYPE DETERMINATION 1 .IIF NDF WATCH, WATCH=1 ;DEFAULT TO INCLUDING "WATCH" SUPPORT 2 .IIF NDF SCROLL, SCROLL=1 ;DEFAULT TO INCLUDING SCROLL SUPPORT 3 .IIF NDF IMMEDC, IMMEDC=1 ;DEFAULT TO INCLUDING IMMEDIATE MODE 4 5 .IF NE WATCH 6 7 .IF NE SCROLL 8 9 .SBTTL ASSEMBLED TO INCLUDE "WATCH" SUPPORT W/ SCROLLING 10 11 .IFF ;NE SCROLL 12 13 .SBTTL ASSEMBLED TO INCLUDE "WATCH" SUPPORT W/O SCROLLING 14 15 .ENDC ;NE SCROLL 16 17 .IFF ;NE WATCH 18 19 .SBTTL ASSEMBLED TO NOT INCLUDE "WATCH" SUPPORT 20 21 000000 SCROLL = 0 ;TURN OFF SCROLLING IF NO "WATCH" 22 23 .ENDC ;NE WATCH 24 25 .IF NE IMMEDC 26 27 .SBTTL ASSEMBLED TO INCLUDE IMMEDIATE MODE COMMANDS 28 29 .IFF ;NE IMMEDC 30 31 .SBTTL ASSEMBLED TO NOT INCLUDE IMMEDIATE MODE COMMANDS 32 33 .ENDC ;NE IMMEDC CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 5 ASSEMBLED TO NOT INCLUDE IMMEDIATE MODE COMMANDS 1 .IIF NDF I$$SOB, I$$SOB=0 ;DEFAULT TO NO HARDWARE 'SOB' 2 3 .IF EQ I$$SOB 4 5 .MACRO SOB REG,DST 6 DEC REG 7 BNE DST 8 .ENDM SOB 9 10 .SBTTL ASSEMBLED WITHOUT HARDWARE 'SOB' INSTRUCTION 11 12 .IFF ;EQ I$$SOB 13 14 .SBTTL ASSEMBLED WITH HARDWARE 'SOB' INSTRUCTION 15 16 .ENDC ;EQ I$$SOB 17 18 .IIF NDF I$$DIV, I$$DIV=0 ;DEFAULT TO NO HARDWARE 'DIV' 19 20 .IF EQ I$$DIV 21 22 .MACRO DIVR0 AMT 23 MOV AMT,R0 24 JSR PC,DIVR0 25 .ENDM DIVR0 26 27 .SBTTL ASSEMBLED WITHOUT HARDWARE 'DIV' INSTRUCTION 28 29 .IFF ;EQ I$$DIV 30 31 .MACRO DIVR0 AMT 32 CLR R0 33 DIV AMT,R0 34 .ENDM DIVR0 35 36 .SBTTL ASSEMBLED WITH HARDWARE 'DIV' INSTRUCTION 37 38 .ENDC ;EQ I$$DIV CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 6 FIXED FORMAT PREAMBLE 1 .SBTTL FIXED FORMAT PREAMBLE 2 3 000000 .PSECT CRTRUB,RO,I,GBL,REL,OVR 4 5 000000 000403 CRTRUB: BR CRTSET ;BRANCH TO THE SET UP ROUTINE 6 7 .IIF NE .-CRTRUB-2, .ERROR ;ERASE CHARACTER INCORRECTLY LOCATED 8 000002 000074' CRTERC: .WORD ERCTBL ;ERASE CHARACTER SEQUENCE POINTERS POINTER 9 10 .IIF NE .-CRTRUB-4, .ERROR ;CURSOR UP INCORRECTLY LOCATED 11 000004 000114' CRTCUP: .WORD CUPTBL ;CURSOR UP SEQUENCE POINTERS POINTER 12 13 .IIF NE .-CRTRUB-6, .ERROR ; INCORRECTLY LOCATED 14 000006 000152' CRTERL: .WORD ERLTBL ; SEQUENCE POINTERS POINTER CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 7 DETERMINE SCOPE TYPE 1 .SBTTL DETERMINE SCOPE TYPE 2 3 ;+ 4 ; CRTSET - DETERMINE SCOPE TYPE. 5 ; 6 ;*RSTS* R4 -> FIRQB @ +6 WITH CHARACTERISTICS (UU.TRM) OF SCOPE TERMINAL 7 ;*RSX* R4 -> HORIZONTAL SIZE BYTE (@ +0) & TYPE BYTE (@ +2) OF SCOPE TERMINAL 8 ;*RT11* R4 -> TERMINAL STATUS BLOCK @ +6 (M.TWID) OF SCOPE TERMINAL 9 ;*VMS* R4 -> SENSEMODE INFORMATION BUFFER @ +2 (DEVBUFSIZ) OF SCOPE TERMINAL 10 ; CRTYPE(R5) = 0 (I.E., PRE-SET FOR DEFAULT SCOPE SUPPORT) 11 ; 12 ; JSR PC,CRTRUB 13 ; 14 ; R4 = SIZE OF "WATCH" STATIC READ/WRITE REGION (0 => NONE) 15 ; CRTYPE(R5) = 0. FOR SCOPE SUPPORT TYPE #1 (VT52) 16 ; 2. FOR SCOPE SUPPORT TYPE #2 (VT100 IN VT52 MODE) 17 ; 4. FOR SCOPE SUPPORT TYPE #3 (VT100 IN ANSI MODE) 18 ; 6. FOR SCOPE SUPPORT TYPE #4 (VT05) 19 ; 8. FOR SCOPE SUPPORT TYPE #5 (VT102) 20 ; 10. FOR SCOPE SUPPORT TYPE #6 (VK100) 21 ; VTSIZE+RWSIZE(R5) = VERTICAL SIZE IF "WATCH" SUPPORT (10.-127.) 22 ; HTSIZE+RWSIZE(R5) = HORIZONTAL SIZE IF "WATCH" SUPPORT (10.-254.&EVEN) 23 ; SCROLN+RWSIZE(R5) = 0 (NO SCROLLING INITIALLY) 24 ; "ET$CRT" SET IN "ETYPE(R5)" IF SCOPE SUPPORTED FOR RUBOUT & CONTROL/U 25 ; "ET$IAS" SET IN "ETYPE(R5)" IF SCOPE SUPPORTED FOR "WATCH" 26 ;- 27 28 000012 CRTMAX == 10. ;MAXIMUM LEGAL SCOPE TYPE IS 10. 29 30 .MACRO CRTTBL LIST ;MACRO TO BUILD CRTYPE POINTER TABLES 31 $$$$$$ = . 32 .IRP ENTRY, 33 .NLIST MEB 34 .WORD ENTRY 35 .LIST MEB 36 .ENDM ;ENTRY, 37 .IIF NE .-$$$$$$-CRTMAX-2, .ERROR ;INCORRECT NUMBER OF TABLE ENTRIES 38 .ENDM CRTTBL 39 40 000010 010046 CRTSET: MOV R0,-(SP) ;SAVE R0 41 000012 012700 000012 MOV #CRTMAX,R0 ;PRESET SCOPE TYPE TO MAXIMUM 42 43 .IF NE RSTS 44 45 000016 105314 DECB (R4) ;FORM THE TRUE HORIZONTAL SIZE 46 000020 121427 000124 CMPB (R4),#84. ;IS SCOPE A VK100 (WIDTH = 84.)? 47 000024 001413 BEQ 60$ ;YES 48 000026 121427 000110 CMPB (R4),#72. ;IS SCOPE A VT05 (WIDTH = 72.)? 49 000032 001406 BEQ 40$ ;YES 50 000034 105264 000004 INCB 12-6(R4) ;REALLY A VT100 ("XON")? 51 000040 001402 BEQ 30$ ;YES, USE IT IN ANSI MODE 52 .IIF NE .-10$, .ERROR ;ELSE DEFAULT TO VT52... 53 54 .ENDC ;NE RSTS CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 8 DETERMINE SCOPE TYPE 1 .IF NE RSX 2 3 CMPB 2(R4),#T.V102 ;IS SCOPE A VT102? 4 BEQ 50$ ;YES 5 CMPB 2(R4),#T.VT05 ;IS SCOPE A VT05? 6 BEQ 40$ ;YES 7 CMPB 2(R4),#T.V100 ;IS SCOPE A VT100? 8 BEQ 30$ ;YES, USE IT IN ANSI MODE 9 CMPB (R4),#72. ;IS SCOPE A VT05 (WIDTH = 72.)? 10 BEQ 40$ ;YES 11 CMPB 2(R4),#T.VT52 ;IS SCOPE A VT52? 12 BNE 30$ ;NO, DEFAULT TO VT100 IN ANSI MODE... 13 .IIF NE .-10$, .ERROR ;YES 14 15 .ENDC ;NE RSX 16 17 .IF NE RT11 18 19 CMPB (R4),#72. ;IS SCOPE A VT05 (WIDTH = 72.)? 20 BEQ 40$ ;YES 21 BIT #TANSI$,0-6(R4) ;REALLY A VT100 ("ANSI")? 22 BNE 30$ ;YES, USE IT IN ANSI MODE 23 .IIF NE .-10$, .ERROR ;ELSE DEFAULT TO VT52... 24 25 .ENDC ;NE RT11 26 27 .IF NE VMS 28 29 ; 0-2(R4) [BYTE] = DEVCLASS 30 ; 1-2(R4) [BYTE] = DEVTYPE 31 ; 2-2(R4) [WORD] = DEVBUFSIZ (WIDTH) 32 ; 4-2(R4) [LONG] = DEVDEPEND 33 ; 10-2(R4) [LONG] = DEVDEPEND2 34 35 CMPB 1-2(R4),#T$VT05 ;IS SCOPE A VT05 (T$VT05 = TT$_VT05)? 36 BEQ 40$ ;YES 37 BIT <10+2>-2(R4),#T$EDIT ;'EDIT' FUNCTIONS? (T$EDIT = TT2$M_EDIT)? 38 BNE 50$ ;YES, CALL IT A VT102 39 BIT <10+2>-2(R4),#T$DEC ;A 'DEC CRT' (T$DEC = TT2$M_DECCRT)? 40 BNE 30$ ;YES, CALL IT A VT100 IN ANSI MODE 41 BIT <10+2>-2(R4),#T$ANSI ;AN 'ANSI CRT' (T$ANSI = TT2$M_ANSICRT)? 42 BNE 60$ ;YES, CALL IT A VK100 43 .IIF NE .-10$, .ERROR ;ELSE DEFAULT TO VT52... 44 45 .ENDC ;NE VMS CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 9 DETERMINE SCOPE TYPE 1 000042 005740 10$: TST -(R0) ;CHANGE SCOPE TYPE TO 0. (VT52) 2 000044 005740 20$: TST -(R0) ;CHANGE SCOPE TYPE TO 2. (VT100 IN VT52 MODE) 3 000046 005740 30$: TST -(R0) ;CHANGE SCOPE TYPE TO 4. (VT100 IN ANSI MODE) 4 000050 005740 40$: TST -(R0) ;CHANGE SCOPE TYPE TO 6. (VT05) 5 000052 005740 50$: TST -(R0) ;CHANGE SCOPE TYPE TO 8. (VT102) 6 000054 60$: ;LEAVE SCOPE TYPE AS 10. (VK100) 7 .IIF NE 60$-10$-CRTMAX, .ERROR ;INCORRECT SCOPE TYPE FORMATION 8 000054 010065 000000G MOV R0,CRTYPE(R5) ;SET THE SCOPE TYPE 9 000060 052765 000000G 000000G BIS #ET$CRT,ETYPE(R5) ; AND ENABLE SCOPE RUBOUT SUPPORT 10 11 .IF NE WATCH 12 13 MOV 90$(R0),VTSIZE+RWSIZE(R5) ;SAVE VERTICAL SIZE FOR "WATCH" 14 MOV 100$(R0),HTSIZE+RWSIZE(R5) ;SAVE HORIZONTAL SIZE FOR "WATCH" 15 BNE 80$ ;THE HORIZONTAL SIZE IS EXPLICIT 16 CMPB (R4),#132. ;IS CURRENT SIZE FROM 132 COLUMN MODE? 17 BEQ 70$ ;YES, GO SET 132 AS THE CORRECT SIZE 18 MOVB #80.,(R4) ;NO, JAM ALL OTHERS TO BE SIMPLY 80 COLUMNS 19 70$: MOVB (R4),HTSIZE+RWSIZE(R5) ;SET THE CORRECT HORIZONTAL SIZE 20 80$: ;CONTINUE 21 22 .IF NE SCROLL 23 24 CLR SCROLN+RWSIZE(R5) ;SET NOT SCROLLING INITIALLY 25 26 .ENDC ;NE SCROLL 27 28 BIS #ET$IAS,ETYPE(R5) ;ENABLE "WATCH" SUPPORT 29 MOV #SRWSIZ,R4 ; AND SET SIZE OF STATIC READ/WRITE REGION 30 31 .IFF ;NE WATCH 32 33 000066 005004 CLR R4 ;NO STATIC READ/WRITE REGION SINCE NO "WATCH" 34 35 .IFTF ;NE WATCH 36 37 000070 012600 MOV (SP)+,R0 ;RESTORE R0 38 000072 000207 RTS PC ; AND EXIT 39 40 .IFT ;NE WATCH 41 42 90$: CRTTBL <24.,24.,24.,20.,24.,24.> ;TABLE OF VERTICAL SIZES 43 44 100$: CRTTBL <80.,80., 0 ,72., 0 ,80.> ;TABLE OF HORIZONTAL SIZES 45 46 .ENDC ;NE WATCH CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 10 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .SBTTL NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 2 3 000074 ERCTBL: CRTTBL <10$,10$,10$,10$,10$,10$> ;ERASE CHARACTER SEQUENCE POINTERS 4 5 000110 003 10$: .BYTE 30$-20$ ;ALL TYPES => 6 000111 010 20$: .BYTE 010 ; 7 000112 040 .BYTE 040 ; 8 000113 010 .BYTE 010 ; 9 000114 30$: .EVEN 10 11 000114 CUPTBL: CRTTBL <10$,10$,40$,70$,40$,40$> ;CURSOR UP SEQUENCE POINTERS 12 13 000130 002 10$: .BYTE 30$-20$ ;VT52 & VT100(VT52) => 14 000131 033 101 20$: .BYTE 033,'A ; 15 000133 30$: .EVEN 16 17 000134 007 40$: .BYTE 60$-50$ ;VT100(ANSI), VT102, & VK100 => 18 000135 033 134 50$: .BYTE 033,'\ ; ENSURE END OF DCS STRING (IF ANY) 19 000137 033 074 .BYTE 033,'< ; ENSURE ANSI MODE 20 000141 033 133 101 .BYTE 033,'[,'A ; <[> 21 000144 60$: .EVEN 22 23 000144 005 70$: .BYTE 90$-80$ ;VT05 => 24 000145 232 80$: .BYTE 232 ; 25 000146 000 000 000 .BYTE 000,000,000,000 ; 000151 000 26 000152 90$: .EVEN 27 28 000152 ERLTBL: CRTTBL <10$,10$,40$,70$,40$,40$> ; SEQUENCE POINTERS 29 30 000166 004 10$: .BYTE 30$-20$ ;VT52 & VT100(VT52) => 31 000167 015 20$: .BYTE 015 ; ENSURE LEFT MARGIN 32 000170 033 113 .BYTE 033,'K ; 33 000172 015 .BYTE 015 ; ENSURE LEFT MARGIN 34 000173 30$: .EVEN 35 36 000174 011 40$: .BYTE 60$-50$ ;VT100(ANSI), VT102, & VK100 => 37 000175 015 50$: .BYTE 015 ; ENSURE LEFT MARGIN 38 000176 033 134 .BYTE 033,'\ ; ENSURE END OF DCS STRING (IF ANY) 39 000200 033 074 .BYTE 033,'< ; ENSURE ANSI MODE 40 000202 033 133 113 .BYTE 033,'[,'K ; <[> 41 000205 015 .BYTE 015 ; ENSURE LEFT MARGIN 42 000206 60$: .EVEN 43 44 000206 003 70$: .BYTE 90$-80$ ;VT05 => 45 000207 015 80$: .BYTE 015 ; ENSURE LEFT MARGIN 46 000210 236 .BYTE 236 ; 47 000211 015 .BYTE 015 ; ENSURE LEFT MARGIN 48 000212 90$: .EVEN CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 11 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .IF NE WATCH 2 3 .SBTTL NECESSARY TABLES AND SEQUENCES FOR "WATCH" SUPPORT 4 5 .PSECT SCRSEQ,RO,D,GBL,REL,CON 6 7 ; POSTBL - TABLE OF NUMBER OF CHARACTERS NEEDED TO POSITION CURSOR. 8 ; 9 ; THIS TABLE IS USED FOR A CURSOR MOVEMENT OPTIMIZATION: 10 ; IF THE NUMBER OF PLACES TO MOVE THE CURSOR RIGHT (ON THE 11 ; SAME LINE) IS LESS THAN THIS TABLE'S ENTRY, THEN THE 12 ; PRECEEDING TEXT CHARACTERS ARE OUTPUT INSTEAD. THIS ENSURES 13 ; THAT WE ARE ALWAYS SENDING THE MINIMAL NUMBER OF CHARACTERS 14 ; TO THE SCREEN. 15 16 POSTBL::.WORD 1+1+1+1 ; 17 .WORD 1+1+1+1 ; 18 .WORD 1+1+1+1 ;<[><# MOVES> 19 .WORD 1+1+4+1 ;<4 FILL'S> 20 .WORD 1+1+1+1 ;<[><# MOVES> 21 .WORD 1+1+1+1 ;<[><# MOVES> 22 .IIF NE .-POSTBL-CRTMAX-2, .ERROR ;INCORRECT NUMBER OF TABLE ENTRIES 23 24 ; FIXSEQ - CLEAN UP MODES. 25 ; NULL => NO FIXING UP IS NEEDED 26 27 .ENABL LSB 28 29 FIXSEQ::CRTTBL <10$,10$,20$,NULL,20$,30$> ;CLEAN UP MODES (IF ANY) 30 31 10$: .BYTE 033,'[,'?,'2,'L+40 ;ENSURE VT52 MODE 32 .BYTE 033,'\ ;EXIT HOLD SCREEN MODE (IF ON) 33 .BYTE 010,010,010,040,040,040 ;CLEAN UP THE "?2L" JUNK... 34 V52GOF: .BYTE 033,'G ;EXIT GRAPHICS MODE (IF ON) 35 .BYTE 200 36 37 20$: .BYTE 033,'\ ;ENSURE END OF DCS STRING (IF ANY) 38 .BYTE 033,'< ;ENSURE ANSI MODE 39 .BYTE 033,'7 ;SAVE CURSOR POSITION 40 .BYTE 033,'[,'?,'6 ;ENSURE ORIGIN MODE 41 .BYTE ';,'7,'L+40 ; AND AUTO WRAP ARE OFF 42 .BYTE 033,'8 ;RESTORE CURSOR POSITION 43 30$: .BYTE 033,'\ ;ENSURE END OF DCS STRING (IF ANY) 44 .BYTE 033,'< ;ENSURE ANSI MODE 45 .BYTE 033,'[,'4,'L+40 ;ENSURE REPLACE (NOT INSERT) MODE 46 .BYTE 033,'[,'M+40 ;TURN OFF ALL CHARACTER ATTRIBUTES 47 .BYTE 033,'),'0 ;SET GRAPHICS MODE TO GRAPHICS CHARACTER SET 48 ANSGOF: .BYTE 017 ;EXIT GRAPHICS MODE (IF ON) 49 .BYTE 200 50 51 .EVEN 52 53 .DSABL LSB 54 55 ; HOMSEQ - GO TO HOME. 56 57 HOMSEQ::CRTTBL <10$,10$,20$,30$,20$,20$> ;GO TO HOME CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 11-1 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 58 59 10$: .BYTE 033,'H ;GO TO HOME 60 .BYTE 200 61 62 20$: .BYTE 033,'[,'H ;GO TO HOME 63 .BYTE 200 64 65 30$: .BYTE 035 ;GO TO HOME 66 FILL4: .BYTE 000,000,000,000 ;4 FILL'S 67 NULL: .BYTE 200 ;NULL SEQUENCE 68 69 .EVEN 70 71 ; EOLSEQ - ERASE FROM CURSOR TO END OF LINE. 72 73 EOLSEQ::CRTTBL <10$,10$,20$,40$,20$,30$> ;ERASE FROM CURSOR TO END OF LINE 74 75 10$: .BYTE 033,'K ;ERASE FROM CURSOR TO END OF LINE 76 .BYTE 200 77 78 20$: .BYTE 033,'#,'5 ;ENSURE A NORMAL HEIGHT/WIDTH LINE 79 30$: .BYTE 033,'[,'K ;ERASE FROM CURSOR TO END OF LINE 80 .BYTE 200 81 82 40$: .BYTE 036 ;ERASE FROM CURSOR TO END OF LINE 83 .BYTE 200 84 85 .EVEN 86 87 ; EOSSEQ - ERASE FROM CURSOR TO END OF SCREEN. 88 ; NULL => USE MULTIPLE EOLSEQ'S (DUE TO VARIABLE SCROLLING REGION) 89 90 EOSSEQ::CRTTBL <10$,10$,NULL,30$,NULL,20$> ;ERASE FROM CURSOR TO END OF SCREEN 91 92 10$: .BYTE 033,'J ;ERASE FROM CURSOR TO END OF SCREEN 93 .BYTE 200 94 95 20$: .BYTE 033,'[,'J ;ERASE FROM CURSOR TO END OF SCREEN 96 .BYTE 200 97 98 30$: .BYTE 037 ;ERASE FROM CURSOR TO END OF SCREEN 99 .BYTE 000,000,000,000 ;4 FILL'S 100 .BYTE 200 101 102 .EVEN 103 104 ; SCUSEQ - SCROLL SCREEN UP (WITH CURSOR AT LOWER LEFT). 105 106 SCUSEQ::CRTTBL <10$,10$,10$,VT05LF,10$,10$> ;SCROLL SCREEN UP 107 108 10$: .BYTE 012 ;SCROLL SCREEN UP 109 .BYTE 200 110 111 VT05LF: .BYTE 012 ;SCROLL SCREEN UP 112 .BYTE 000,000,000,000 ;4 FILL'S 113 .BYTE 200 114 CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 11-2 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 115 .EVEN 116 117 ; SCDSEQ - SCROLL SCREEN DOWN (WITH CURSOR AT UPPER LEFT). 118 ; NULL => FEATURE IS NOT AVAILABLE 119 120 SCDSEQ::CRTTBL <10$,10$,20$,NULL,20$,20$> ;SCROLL SCREEN DOWN 121 122 10$: .BYTE 033,'I ;SCROLL SCREEN DOWN 123 .BYTE 200 124 125 20$: .BYTE 033,'M ;SCROLL SCREEN DOWN 126 .BYTE 200 127 128 .EVEN 129 130 ; GONSEQ - TURN ON GRAPHICS MODE. 131 ; NULL => FEATURE IS NOT AVAILABLE 132 133 GONSEQ::CRTTBL <10$,10$,20$,NULL,20$,20$> ;TURN ON GRAPHICS MODE 134 135 10$: .BYTE 033,'F ;TURN ON GRAPHICS MODE 136 .BYTE 200 137 138 20$: .BYTE 016 ;TURN ON GRAPHICS MODE 139 .BYTE 200 140 141 .EVEN 142 143 ; GOFSEQ - TURN OFF GRAPHICS MODE. 144 ; NULL => FEATURE IS NOT AVAILABLE 145 146 GOFSEQ::CRTTBL ;GRAPHICS MODE OFF 147 148 ; MONSEQ - TURN ON MARK'D REGION MODE. 149 ; NULL => FEATURE IS NOT AVAILABLE 150 151 MONSEQ::CRTTBL ;TURN ON MARK'D REGION MODE 152 153 10$: .BYTE 033,'[,'7,'M+40 ;SET REVERSE VIDEO ATTRIBUTE 154 .BYTE 200 155 156 .EVEN 157 158 ; MOFSEQ - TURN OFF MARK'D REGION MODE. 159 ; NULL => FEATURE IS NOT AVAILABLE 160 161 MOFSEQ::CRTTBL ;TURN OFF MARK'D REGION MODE 162 163 10$: .BYTE 033,'[,'M+40 ;CLEAR ALL ATTRIBUTES 164 .BYTE 200 165 166 .EVEN 167 168 ; GRPTBL - TABLE OF GRAPHICS MODE CHARACTERS. 169 ; 170 ; EACH TABLE CONTAINS 15. BYTES CORRESPONDING TO THE GRAPHICS 171 ; MODE CHARACTERS FOR: CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 11-3 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 172 ; 173 ; 1) A LINE WHICH OVERFLOWS THE SCREEN'S WIDTH 174 ; 2) CURSOR POSITIONED ON IMMEDIATELY AFTER 175 ; ALSO, "SEE ALL" MODE SYMBOL FOR 176 ; 3) "SEE ALL" MODE SYMBOL FOR CONTROL CHARACTER FLAG 177 ; 4) "SEE ALL" MODE SYMBOL FOR 178 ; 5) AT END OF BUFFER ENDING WITHOUT 179 ; 6) AT END OF BUFFER ENDING WITH 180 ; ALSO, "SEE ALL" MODE SYMBOL FOR 181 ; 7) "SEE ALL" MODE SYMBOL FOR 182 ; 8) "SEE ALL" MODE SYMBOL FOR NULL SPACING 183 ; 9) "SEE ALL" MODE SYMBOL FOR 184 ; 10) "SEE ALL" MODE SYMBOL FOR OVERPRINT 185 ; 11) "SEE ALL" MODE SYMBOL FOR HEX PAIR START 186 ; 12) "SEE ALL" MODE SYMBOL FOR COMPOSE SEQUENCE START 187 ; 13) "SEE ALL" MODE SYMBOL FOR HEX PAIR END 188 ; 14) "SEE ALL" MODE SYMBOL FOR COMPOSE SEQUENCE END 189 ; 15) "SEE ALL" MODE SYMBOL FOR 190 191 GRPTBL::CRTTBL <10$,20$,20$,30$,20$,20$> ;TABLE OF GRAPHICS CHARACTERS 192 193 10$: .BYTE 'H+40 ;RIGHT ARROW 194 .BYTE 'K+40 ;DOWN ARROW 195 .BYTE 'G+40 ;PLUS OR MINUS 196 .BYTE 'J+40 ;DIVIDED BY 197 .BYTE '^+40 ;PARAGRAPH 198 .BYTE 'A+40 ;SOLID RECTANGLE 199 .BYTE 'F+40 ;DEGREES 200 .BYTE 'I+40 ;ELIPSIS 201 .BYTE '@+40 ;"CD" 202 .BYTE 'D+40 ;"5/" 203 .BYTE '[ ;NO SPECIAL GRAPHIC... 204 .BYTE '< ;NO SPECIAL GRAPHIC... 205 .BYTE '] ;NO SPECIAL GRAPHIC... 206 .BYTE '> ;NO SPECIAL GRAPHIC... 207 .BYTE 'C+40 ;"3/" 208 209 20$: .BYTE 'H+40 ;"NL" 210 .BYTE 'E+40 ;"LF" 211 .BYTE 'G+40 ;PLUS OR MINUS 212 .BYTE 'I+40 ;"VT" 213 .BYTE '@+40 ;DIAMOND 214 .BYTE 'C+40 ;"FF" 215 .BYTE 'B+40 ;"HT" 216 .BYTE '^+40 ;CENTERED DOT 217 .BYTE 'D+40 ;"CR" 218 .BYTE '\+40 ;NOT EQUALS 219 .BYTE 'M+40 ;LOWER LEFT CORNER 220 .BYTE 'Y+40 ;LESS THAN OR EQUAL TO 221 .BYTE 'J+40 ;LOWER RIGHT CORNER 222 .BYTE 'Z+40 ;GREATER THAN OR EQUAL TO 223 .BYTE '[+40 ;PI 224 225 30$: .BYTE '+ ;+ 226 .BYTE '' ;' 227 .BYTE '^ ;NO GRAPHICS... 228 .BYTE 040 ;NO GRAPHICS... CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 11-4 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 229 .BYTE '% ;% 230 .BYTE '@ ;@ 231 .BYTE 040 ;NO GRAPHICS... 232 .BYTE 040 ;NO GRAPHICS... 233 .BYTE 040 ;NO GRAPHICS... 234 .BYTE 040 ;NO GRAPHICS... 235 .BYTE '[ ;NO GRAPHICS... 236 .BYTE '< ;NO GRAPHICS... 237 .BYTE '] ;NO GRAPHICS... 238 .BYTE '> ;NO GRAPHICS... 239 .BYTE '$ ;NO GRAPHICS... 240 241 .EVEN CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 12 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .IF NE SCROLL 2 3 .SBTTL NECESSARY SEQUENCES FOR SCROLLING SUPPORT 4 5 ; CONSEQ - TURN ON CURSOR CHARACTER ATTRIBUTES. 6 ; NULL => FEATURE IS NOT AVAILABLE 7 8 CONSEQ::CRTTBL ;CURSOR CHARACTER ATTRIBUTES ON 9 10 10$: .BYTE 033,'[,'1 ;SET BOLD 11 .BYTE ';,'7,'M+40 ; AND REVERSE VIDEO ATTRIBUTES 12 .BYTE 200 13 14 .EVEN 15 16 ; COFSEQ - TURN OFF CURSOR CHARACTER ATTRIBUTES. 17 ; NULL => FEATURE IS NOT AVAILABLE 18 19 COFSEQ::CRTTBL ;CURSOR CHARACTER ATTRIBUTES OFF 20 21 10$: .BYTE 033,'[,'M+40 ;CLEAR ALL ATTRIBUTES 22 .BYTE 017 ;TURN OFF GRAPHICS MODE 23 .BYTE 200 24 25 .EVEN 26 27 ; SAVCUR - SAVE CURSOR POSITION AND ATTRIBUTES. 28 ; NULL => FEATURE IS NOT AVAILABLE 29 30 SAVCUR::CRTTBL ;SAVE CURSOR POSITION/ATTRIBUTES 31 32 10$: .BYTE 033,'7 ;SAVE CURSOR POSITION AND ATTRIBUTES 33 .BYTE 200 34 35 .EVEN 36 37 ; RESCUR - RESTORE CURSOR POSITION AND ATTRIBUTES. 38 ; NULL => FEATURE IS NOT AVAILABLE 39 40 RESCUR::CRTTBL ;RESTORE POSITION/ATTRIBUTES 41 42 10$: .BYTE 033,'8 ;RESTORE CURSOR POSITION AND ATTRIBUTES 43 .BYTE 200 44 45 .EVEN 46 47 .ENDC ;NE SCROLL CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 13 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .SBTTL NECESSARY SUBROUTINES FOR "WATCH" SUPPORT 2 3 .PSECT SCRSUB,RO,I,GBL,REL,CON 4 5 ;+ 6 ; NWIDTH - A NEW HORIZONTAL SIZE (WIDTH) WAS SET. 7 ; 8 ; R3 = OLD WIDTH 9 ; HTSIZE+RWSIZE(R5) = NEW WIDTH 10 ; 11 ; JSR PC,NWIDTH 12 ; 13 ; R0 = UNDEFINED 14 ; R2 = UNDEFINED 15 ; R3 = UNDEFINED 16 ;- 17 18 NWIDTH:: ;A NEW WIDTH WAS SET 19 20 .IF NE RSTS 21 JSR PC,SAVFQB ;SAVE AND CLEAR THE FIRQB 22 MOVB #UU.TRM,(R4)+ ;SET "SET TERMINAL" FUNCTION 23 MOV (PC)+,(R4)+ ; AND OUR KB: TERMINAL 24 .BYTE 0,-1 25 MOVB HTSIZE+RWSIZE(R5),(R4) ;SET THE NEW SCOPE WIDTH 26 INCB (R4) ; PLUS 1 27 .UUO ;NOW GO DO IT 28 JSR PC,@(SP)+ ; THEN RESTORE THE FIRQB 29 .ENDC ;NE RSTS 30 31 .IF NE RSX 32 ;ANYTHING TO DO FOR RSX??? 33 .ENDC ;NE RSX 34 35 .IF NE RT11 36 ;NOTHING TO DO FOR RT-11... 37 .ENDC ;NE RT11 38 39 .IF NE VMS 40 EMT $WIDTH ;LET NATIVE MODE KNOW THE NEW WIDTH 41 .ENDC ;NE VMS CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 14 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 JSR PC,20$ ;GET SEQUENCE POINTER FOR OLD WIDTH 2 MOV R3,-(SP) ; AND SAVE IT 3 MOV HTSIZE+RWSIZE(R5),R3 ;GET THE NEW WIDTH 4 JSR PC,20$ ;GET NEW WIDTH'S SEQUENCE POINTER 5 CMP R3,(SP)+ ;ARE THE SEQUENCES THE SAME? 6 BEQ 30$ ;YES, NO NEED TO EMIT THE SEQUENCE 7 JSR PC,DOTYPE ;NO, GO EMIT SEQUENCE TO CHANGE THE WIDTH 8 9 .IF NE SCROLL 10 11 TST SCROLN+RWSIZE(R5) ;IS SCROLLING ENABLED? 12 BEQ 10$ ;NOPE 13 JSR PC,SCREOS ;YEP, POSITION TO BOTTOM OF SCREEN 14 10$: ;CONTINUE 15 16 .ENDC ;NE SCROLL 17 18 JMP TYPEBC ;FORCE OUT ANY PARTIAL BUFFER & EXIT 19 20 20$: CMP R3,#80.+1 ;IS WIDTH 81 COLUMNS OR GREATER? 21 MOV #40$,R3 ;SET SEQUENCE POINTER FOR 80 COLUMN MODE 22 BCS 30$ ;GOOD GUESS? [BCS = BLO] 23 MOV #50$,R3 ;SET SEQUENCE POINTER FOR 132 COLUMN MODE 24 30$: RTS PC ;EXIT 25 26 40$: CRTTBL ;80 COLUMN MODE 27 28 50$: CRTTBL ;132 COLUMN MODE 29 30 60$: .BYTE 033, '[, '?, '3, 'L+40 ;CLEAR 132 COLUMN MODE 31 .BYTE 200 32 33 70$: .BYTE 033, '[, '?, '3, 'H+40 ;SET 132 COLUMN MODE 34 .BYTE 200 35 36 .EVEN CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 15 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 ;+ 2 ; USRSET - SET A USER CONTROLLED PARAMETER. 3 ; 4 ; R0 = USER PARAMETER NUMBER (256.<=X<=32767.) 5 ; R4 = NEW USER PARAMETER VALUE 6 ; 7 ; JSR PC,USRSET 8 ;- 9 10 USRSET:: ;SET A USER CONTROLLED PARAMETER 11 RTS PC ;EXIT 12 13 ;+ 14 ; USRPRM - READ A USER CONTROLLED PARAMETER. 15 ; 16 ; R0 = 0 17 ; R4 = USER PARAMETER NUMBER (256.<=X<=32767.) 18 ; 19 ; JSR PC,USRPRM 20 ; 21 ; R0 = USER PARAMETER VALUE 22 ;- 23 24 USRPRM:: ;READ A USER CONTROLLED PARAMETER 25 RTS PC ;EXIT CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 16 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 ;+ 2 ; DIGITS - OUTPUT ASCII DIGITS. 3 ; 4 ; R1 = NUMBER TO OUTPUT, 0 BASED 5 ; 6 ; JSR PC,DIGITS 7 ; 8 ; R0 = UNDEFINED 9 ; R1 = UNDEFINED 10 ;- 11 12 DIGITS: INC R1 ;ANSI WANTS NUMBER "1" BASED 13 DIVR0 #100. ;DIVIDE FOR HUNDREDS 14 MOV R0,-(SP) ;SAVE HUNDREDS 15 BEQ 10$ ;NO HUNDREDS, SO SKIP THEM 16 JSR PC,30$ ;HUNDREDS, GO OUTPUT IT 17 10$: DIVR0 #10. ;DIVIDE FOR TENS 18 BIS R0,(SP)+ ;DO TENS AND/OR HUNDREDS EXIST? 19 BEQ 20$ ;NOPE 20 JSR PC,30$ ;YEP, GO OUTPUT THE TENS 21 20$: MOV R1,R0 ;SET UNITS 22 30$: ADD #'0,R0 ;MAKE INTO AN ASCII DIGIT 23 JMP TYPEBF ;OUTPUT CHARACTER, THEN EXIT CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 17 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 ;+ 2 ; DIRECT - DO DIRECT CURSOR ADDRESSING. 3 ; 4 ; R0 = DESIRED LINE NUMBER (ROW), 0 BASED 5 ; R2 = DESIRED COLUMN NUMBER, 0 BASED 6 ; PRELIN+RWSIZE(R5) = CURRENT CURSOR LINE NUMBER (ROW), 0 BASED 7 ; PRECOL+RWSIZE(R5) = CURRENT CURSOR COLUMN NUMBER, 0 BASED 8 ; 9 ; JSR PC,DIRECT 10 ; 11 ; R0 = UNDEFINED 12 ; R3 = UNDEFINED 13 ;- 14 15 DIRECT::MOV R1,-(SP) ;SAVE R1 16 MOV CRTYPE(R5),R1 ;GET THE SCOPE TYPE 17 MOV R0,-(SP) ;COPY DESIRED LINE NUMBER (ROW) 18 SUB PRELIN+RWSIZE(R5),(SP) ; AND FIND # LINES (ROWS) TO MOVE 19 BEQ 40$ ;NONE, LINE (ROW) IS ALREADY CORRECT 20 CMP (SP),#1 ;SOME, ARE WE ONLY GOING TO THE NEXT LINE? 21 BNE 10$ ;NOPE, WE MUST GO FURTHER THAN THAT... 22 TST R2 ;ARE WE GOING TO THE NEXT LINE'S FIRST COLUMN? 23 BEQ 20$ ;YES, A SIMPLE WILL DO THAT 24 10$: CMP R2,PRECOL+RWSIZE(R5) ;IS COLUMN NUMBER ALREADY CORRECT? 25 BNE 90$ ;NOPE, DO DIRECT CURSOR ADDRESSING 26 MOV #180$,R3 ;SET SEQUENCE FOR CURSOR DOWN (& UP) 27 TST (SP) ;CHECK THAT MOVEMENT DIRECTION 28 BR 60$ ; AND GO USE IT 29 30 20$: MOV #012,R0 ;SET CHARACTER TO 31 JSR PC,TYPEBF ; AND GO OUTPUT IT 32 30$: TST (SP)+ ;JUNK THAT MOVEMENT AMOUNT 33 MOV #015-40,R0 ;SET FINAL CHARACTER TO (LESS 40) 34 BR 110$ ; AND GO EXIT OUTPUTTING FINAL 35 36 40$: TST R1 ;CHECK FOR VT52 (0.) SCOPE TYPE 37 BNE 50$ ;NOT A VT52 38 MOV #24.,R0 ;THIS IS TO HELP STOP VT52 FROM FLICKER... 39 50$: MOV #190$,R3 ;SET SEQUENCE FOR CURSOR RIGHT (& LEFT) 40 MOV R2,(SP) ;COPY DESIRED COLUMN NUMBER 41 BEQ 30$ ;GOING TO FIRST COLUMN, TREAT SPECIALLY 42 SUB PRECOL+RWSIZE(R5),(SP) ;ELSE FIND # COLUMNS TO MOVE 43 60$: BPL 70$ ;WE NEED TO MOVE THE CURSOR DOWN -OR- RIGHT 44 NEG (SP) ;CORRECT FOR A POSITIVE MOVEMENT AMOUNT 45 ADD #CRTMAX+2,R3 ; AND CHANGE TO CURSOR UP -OR- LEFT 46 70$: CMP (SP),200$(R1) ;WITHIN THE MAXIMUM RANGE? 47 BHIS 90$ ;NOPE, DO DIRECT CURSOR ADDRESSING 48 MOV (SP)+,R0 ;YEP, PUT THE COUNT INTO A REGISTER 49 TST 210$(R1) ;ANSI MODE? 50 BNE 130$ ;YES, DO DIFFERENTLY 51 80$: JSR PC,DOTYPE ;DO 1 CURSOR DOWN/UP -OR- RIGHT/LEFT 52 SOB R0,80$ ; AND LOOP... 53 MOV (SP)+,R1 ;RESTORE R1 54 RTS PC ; AND EXIT CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 18 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 90$: TST (SP)+ ;JUNK THAT MOVEMENT AMOUNT 2 MOV #220$,R3 ;SET SEQUENCE FOR DIRECT CURSOR ADDRESSING 3 JSR PC,DOTYPE ; AND START DIRECT CURSOR ADDRESSING 4 TST 210$(R1) ;ANSI MODE? 5 BNE 140$ ;YES, DO DIFFERENTLY 6 JSR PC,120$ ;NO, ADJUST AND OUTPUT LINE NUMBER (ROW) 7 CMP R1,#6. ;VT05 (6.) NEEDING FILL? 8 BNE 100$ ;NOPE 9 MOV #230$,R3 ;YEP, SET FILLER SEQUENCE 10 JSR PC,DOTYPE ; AND GO DO IT 11 100$: MOV R2,R0 ;NOW SET COLUMN NUMBER 12 110$: MOV (SP)+,R1 ;RESTORE R1 13 120$: ADD #40,R0 ;ADJUST LINE (ROW) OR COLUMN NUMBER 14 JMP TYPEBF ;OUTPUT CHARACTER, THEN EXIT 15 16 130$: ADD R1,R3 ;INDEX BY THE SCOPE TYPE 17 MOV (R3),-(SP) ; AND STACK THE FINAL CHARACTER (LESS 40) 18 MOV #220$,R3 ;SET START OF MOVE SEQUENCE 19 JSR PC,DOTYPE ; AND GO DO IT 20 MOV R0,R1 ;COPY THE MOVE COUNT 21 DEC R1 ; MAKING IT 0 BASED 22 BR 160$ ;NOW GO DO IT 23 24 140$: MOV 210$(R1),-(SP) ;SET FINAL CHARACTER (LESS 40) 25 MOV R0,R1 ;COPY THE LINE NUMBER (ROW) 26 BEQ 150$ ;NO NEED FOR OUTPUT IF WOULD BE "1" 27 JSR PC,DIGITS ;ELSE OUTPUT AS ASCII DIGITS 28 150$: MOV #';,R0 ;SET THE SEPERATOR 29 JSR PC,TYPEBF ; AND OUTPUT IT 30 MOV R2,R1 ;COPY THE COLUMN NUMBER 31 160$: BEQ 170$ ;NO NEED FOR OUTPUT IF WOULD BE "1" 32 JSR PC,DIGITS ;ELSE OUTPUT AS ASCII DIGITS 33 170$: MOV (SP)+,R0 ;SET THE FINAL CHARACTER (LESS 40) 34 BR 110$ ; AND GO EXIT OUTPUTTING FINAL CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 19 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 180$: CRTTBL <240$,240$,'B-40,VT05LF,'B-40,'B-40> ;CURSOR DOWN 2 CRTTBL <250$,250$,'A-40,260$, 'A-40,'A-40> ;CURSOR UP 3 4 190$: CRTTBL <270$,270$,'C-40,280$,'C-40,'C-40> ;CURSOR RIGHT 5 CRTTBL <290$,290$,'D-40,300$,'D-40,'D-40> ;CURSOR LEFT 6 7 200$: .WORD <2+1+0+1>/2 ; VS. N*() 8 .WORD <2+1+0+1>/2 ; VS. N*() 9 .WORD -1 ;<[><;> VS. <[> 10 .WORD <1+1+4+1>/1 ;<^N><0><0><0><0> VS. N*(<^X/BS>) 11 .WORD -1 ;<[><;> VS. <[> 12 .WORD -1 ;<[><;> VS. <[> 13 .IIF NE .-200$-CRTMAX-2, .ERROR ;INCORRECT NUMBER OF TABLE ENTRIES 14 15 210$: CRTTBL <0, 0, 'H-40,0, 'H-40,'H-40> ;ANSI MODE 'DCA' FINAL (-40) 16 17 220$: CRTTBL <310$,310$, ANSI,320$, ANSI, ANSI> ;START 'DCA' SEQUENCE 18 19 230$: CRTTBL ;FILL AS REQUIRED 20 21 240$: .BYTE 033,'B ;VT52 & VT100(VT52) => 22 .BYTE 200 23 24 250$: .BYTE 033,'A ;VT52 & VT100(VT52) => 25 .BYTE 200 26 27 260$: .BYTE 032, ;VT05 => 28 .BYTE 000,000,000,000 ; & 4 FILL'S 29 .BYTE 200 30 31 270$: .BYTE 033,'C ;VT52 & VT100(VT52) => 32 .BYTE 200 33 34 280$: .BYTE 030 ;VT05 => 35 .BYTE 200 36 37 290$: .BYTE 033,'D ;VT52 & VT100(VT52) => 38 .BYTE 200 39 40 300$: .BYTE 010 ;VT05 => 41 .BYTE 200 42 43 310$: .BYTE 033,'Y ;VT52 & VT100(VT52) => 44 .BYTE 200 45 46 320$: .BYTE 016 ;VT05 => 47 .BYTE 200 48 49 ANSI: .BYTE 033,'[ ;VT100(ANSI), VT102, & VK100 => <[> 50 .BYTE 200 51 52 .EVEN CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 20 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .IF NE SCROLL 2 3 ;+ 4 ; SETSCR - SET SCROLLING REGION. 5 ; 6 ; R1 = STARTING LINE NUMBER (ROW) OF SCROLLING REGION, 0 BASED 7 ; R2 = SIZE OF SCROLLING REGION 8 ; 9 ; JSR PC,SETSCR 10 ; 11 ; R0 = UNDEFINED 12 ; R1 = UNDEFINED 13 ; R2 = UNDEFINED 14 ; R3 = UNDEFINED 15 ;- 16 17 SETSCR::MOV #10$,R3 ;SET SEQUENCE TO START THE OPERATION 18 JSR PC,DOTYPE ; AND GO DO IT 19 ADD R1,R2 ;CALCULATE THE ENDING SCROLLED LINE (ROW) +1 20 JSR PC,DIGITS ;EMIT THE STARTING LINE (ROW) AS DIGITS 21 MOV #';,R0 ;SET THE ";" SEPARATOR 22 JSR PC,TYPEBF ; AND OUTPUT IT 23 MOV R2,R1 ;SET THE ENDING SCROLLED LINE (ROW) +1 24 DEC R1 ; THEN CORRECT IT 25 JSR PC,DIGITS ;EMIT ENDING LINE (ROW) AS DIGITS 26 MOV #20$,R3 ;SET SEQUENCE TO END THE OPERATION 27 JSR PC,DOTYPE ; AND GO DO IT 28 JMP SCRHOM ;EXIT BY GOING TO HOME... 29 30 10$: CRTTBL ;SET SCROLLING SEQUENCE START 31 32 20$: CRTTBL ;SET SCROLLING SEQUENCE END 33 34 30$: .BYTE 'R+40 ;END THE ANSI SCROLLING REGION SEQUENCE 35 .BYTE 200 36 37 .EVEN 38 39 .ENDC ;NE SCROLL CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 21 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .IF EQ I$$DIV 2 3 DIVR0: MOV R0,-(SP) ;SAVE DIVISOR ON THE STACK 4 MOV #-1,R0 ;PRE-SET BIASED RESULT 5 10$: INC R0 ;COUNT 1 MORE IN RESULT 6 SUB (SP),R1 ; AND DO TRIAL SUBTRACT FROM DIVIDEND 7 BHIS 10$ ;NO UNDERFLOW YET... 8 ADD (SP)+,R1 ;UNDERFLOW, CORRECT REMAINDER 9 RTS PC ; AND EXIT 10 11 .ENDC ;EQ I$$DIV 12 13 .ENDC ;NE WATCH CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 22 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .IF NE IMMEDC 2 3 .SBTTL NECESSARY SUBROUTINE FOR IMMEDIATE MODE COMMAND SUPPORT 4 5 .PSECT TECOLS,RO,I,GBL,REL,OVR 6 7 TECOLS: TST QPNTR(R5) ;IS THIS THE FIRST INPUT REQUEST? 8 BNE 10$ ;NOPE, CAN'T BE IMMEDIATE MODE COMMAND 9 BIT #ED$IMD,EDIT(R5) ;ARE IMMEDIATE MODE COMMANDS ALLOWED? 10 BEQ 10$ ;NOPE, QUIT RIGHT NOW 11 TST INDIR(R5) ;AN INDIRECT COMMAND FILE ACTIVE? 12 BNE 10$ ;YEP, NO IMMEDIATE COMMANDS WANTED HERE 13 MOV QZ(R5),-(SP) ;GET CURRENT Q-REG ACTIVE STORAGE SIZE 14 ADD #20.,(SP) ; AND ADD IN A FUDGE FACTOR 15 CMP (SP)+,QMAX(R5) ;IS ENOUGH SPACE FREE TO PLAY WITH? 16 BHIS 10$ ;NOT ENOUGH SPACE, DON'T TRY FOR AN IMMEDIATE 17 MOV #20$,-(SP) ;THERE'S ENOUGH SPACE, CHECK FOR IMMEDIATES 18 10$: JMP LISTEN ;GO CALL THE REAL 'LISTEN' ROUTINE 19 20 20$: JSR PC,DECODE ;GO POSSIBLY DECODE A SEQUENCE 21 BCS 60$ ;NO SEQUENCE WAS DECODED... 22 MOV R0,-(SP) ;SAVE THE SEQUENCE FINAL CODE/VALUE 23 MOV R1,-(SP) ;SAVE THE SEQUENCE TYPE CODE 24 BIT #ET$CRT,ETYPE(R5) ;SCOPE TYPE TERMINAL? 25 BEQ 30$ ;NO 26 JSR PC,DELLIN ;YES, ERASE TECO'S PROMPT 27 MOV #012,R0 ;SET A "DELETED" CHARACTER OF 28 JSR PC,DELCHR ; TO MOVE THE CURSOR UP A LINE 29 30$: CLR ERRPOS(R5) ;NO ERROR POSITION IF STORING 30 CLR QLCMD(R5) ;NO LAST COMMAND IF STORING ANYTHING 31 MOV QZ(R5),R1 ;GET RELATIVE PLACE TO STORE CHARACTERS 32 ADD QRSTOR(R5),R1 ; AND MAKE IT ABSOLUTE 33 MOV #70$,R2 ;GET POINTER TO THE COMMAND STRING LAYOUT 34 40$: INC QZ(R5) ;INDICATE 1 MORE IN COMMAND 35 INC QPNTR(R5) ; Q-REGISTER 36 MOVB (R2)+,(R1)+ ;STORE NEXT COMMAND STRING CHARACTER 37 BNE 50$ ;IT'S A REGULAR CHARACTER 38 MOVB (SP)+,-1(R1) ;SET TYPE CODE FIRST, CHARACTER CODE SECOND 39 50$: TSTB (R2) ;JUST STORED THE FINAL ? 40 BPL 40$ ;NOPE, LOOP... 41 MOVB -(R1),R0 ;YEP, SET TO RETURN WITH AN 42 MOV R0,TEMP(R5) ;SAVE CHARACTER LAST STORED (THE ) 43 60$: RTS PC ;RETURN 44 45 70$: .BYTE '^&37, 0, ',, '^&37, 0, 'M, 'A, 033, -1 ;PROTOTYPE COMMAND 46 .EVEN CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 23 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 .SBTTL NECESSARY SUBROUTINE FOR :^T COMMAND SUPPORT 2 3 .PSECT TECOLT,RO,I,GBL,REL,OVR 4 5 TECOLT: JSR PC,TLISTN ;GET THE FIRST CHARACTER 6 CLR R1 ;SET CODE 0 FOR NORMAL CHARACTER 7 BIT R0,#^C<237> ;A CONTROL CHARACTER? 8 BNE 10$ ;NOPE, GO EXIT WITH CODE 0 9 INC R1 ;SET CODE 1 FOR CONTROL CHARACTER 10 CMP R0,#015 ;IS IT ? 11 BEQ 20$ ;YES, GO READ THE AFTER THE 12 JSR PC,DECODE ;GO POSSIBLY DECODE A SEQUENCE 13 BCS 10$ ;NO SEQUENCE DECODED... 14 CMPB (R1)+,(R1)+ ;BIAS THE SEQUENCE TYPE CODE BY TWO 15 10$: RTS PC ;EXIT 16 17 20$: JSR PC,TLISTN ;READ THE AFTER THE 18 MOV #015,R0 ;RESTORE RETURNED CODE AS 19 RTS PC ; AND EXIT CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 24 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 ;+ 2 ; DECODE - DECODE ESCAPE/SS3/CSI SEQUENCE IF NEEDED. 3 ; 4 ; R0 = ORIGINAL CHARACTER (, , OR => DECODE) 5 ; 6 ; JSR PC,DECODE 7 ; 8 ; IF NO DECODE (NOT , , OR ) THEN 9 ; 10 ; C-BIT = 1 11 ; R0 = ORIGINAL CHARACTER 12 ; 13 ; IF DECODED (, , OR ) THEN 14 ; 15 ; C-BIT = 0 16 ; R0 = SEQUENCE FINAL CODE/VALUE 17 ; R1 = SEQUENCE TYPE CODE: 18 ; 0 => 19 ; 1 => 20 ; 21 ; 22 ; <[> 23 ; 24 ; 2 => 25 ; 26 ; 27 ; 3 => <[> 28 ; 29 ; R2 = UNDEFINED 30 ;- 31 32 DECODE: TSTB SEQCTL(R5) ;IN ESCAPE SEQUENCE MODE? 33 BEQ 5$ ;NO => CONTINUE 34 CMP R0,#033 ;YES: ARE WE SEEING AN ESCAPE? 35 BEQ 80$ ;YES (IT CAME FROM PRIV DELIM) => KEEP IT, C=1 36 CMPB R0,#200 ;NO: IS IT START OF ESCAPE SEQUENCE, THEN? 37 BNE 5$ ;NO => GO SEE WHAT ELSE IT MIGHT BE 38 MOV #033,R0 ;YES: TELL DECODE WE'VE AN "ESCAPE" 39 5$: CMP R0,#033 ;IS IT ? 40 BEQ 10$ ;YES, SO GO DECODE 41 CMPB R0,#217 ;IS IT ? 42 BEQ 10$ ;YES, SO GO DECODE 43 CMPB R0,#233 ;IS IT ? 44 BNE 80$ ;NONE OF THE ABOVE, GO EXIT C=1 CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 25 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 10$: MOV ETYPE(R5),-(SP) ;SAVE ORIGINAL "ET" FLAG 2 BIS #ET$CC!ET$LC,ETYPE(R5) ;CONTROL/C TRAP, ENABLE LOWER CASE 3 BIC #ET$CKE,ETYPE(R5) ;ALWAYS STALL 4 CLR R1 ;SET CODE FOR (0) 5 TSTB R0 ;WAS INITIAL CHARACTER OR ? 6 BMI 90$ ;YEP, DO SPECIAL PROCESSING... 7 JSR PC,TLISTN ;READ THE NEXT CHARACTER 8 BIT R0,#^C<237> ;A CONTROL CHARACTER? 9 BEQ 60$ ;YEP, THAT'S CODE 0 10 INC R1 ;NOPE, SET CODE FOR (1) 11 CMP R0,#'[ ;IS IT <[>? 12 BEQ 100$ ;YES, WE MUST DO FURTHER CHECKING... 13 CMP R0,#'? ;IS IT ? 14 BEQ 30$ ;YES, THAT'S CODE 2 ON THE NEXT CHARACTER 15 CMP R0,#'O ;IS IT ? 16 BNE 50$ ;NONE OF THE ABOVE, IT'S CODE 1 17 20$: JSR PC,TLISTN ;WE NEED THE NEXT CHARACTER AT THIS POINT 18 CMP R0,#'A ;IS IT UPPER CASE ALPHABETIC? 19 BLO 40$ ;NOPE, USE CODE 2 20 CMP R0,#'Z ;REALLY UPPER CASE ALPHABETIC? 21 BHI 40$ ;NOPE, USE CODE 2 22 BR 50$ ;YEP, IT'S CODE 1 23 24 30$: JSR PC,TLISTN ;READ THE FINAL CHARACTER 25 40$: INC R1 ;SET CODE FOR (2) 26 50$: BIC #^C<37>,R0 ;TRIM CHARACTER TO 5 BITS 27 60$: TST ETYPE(R5) ;IS CONTROL/C TRAP STILL ON? 28 BMI 70$ ;YES 29 ;.IIF NE ET$CC-100000, .ERROR ;THE ABOVE WON'T WORK 30 BIC #ET$CC,(SP) ;NO, ENSURE IT STAYS OFF 31 70$: BIC #^C,(SP) ;TRIM SAVED "ETYPE" 32 BIC #ET$CC!ET$CKE!ET$LC,ETYPE(R5) ;TURN OFF OUR BITS 33 BIS (SP)+,ETYPE(R5) ; THEN RESTORE ORIGINAL "ETYPE" 34 TST (PC)+ ;SET C=0 FOR DECODED SEQUENCE 35 80$: SEC ;SET C=1 FOR NO DECODE 36 RTS PC ;EXIT CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 26 NECESSARY SEQUENCES FOR RUBOUT AND CONTROL/U 1 90$: INC R1 ;SET CODE FOR (1) 2 CMPB R0,#217 ;WAS INITIAL CHARACTER ? 3 BEQ 20$ ;YEP, GO CHECK THE NEXT CHARACTER... 4 100$: JSR PC,TLISTN ;GET CHARACTER FOLLOWING <[> 5 JSR PC,120$ ;CHECK FOR DIGIT (0-9) RANGE 6 BHI 50$ ;NOT A DIGIT, IT'S CODE 1 7 CLR R1 ;ELSE ZERO OUR SEQUENCE VALUE 8 110$: MOV R1,R0 ;SAVE OLD VALUE *1 9 ASL R1 ;NOW HAVE OLD VALUE *2 10 ASL R1 ; THEN *4 11 ADD R0,R1 ;FORM OLD VALUE *5 12 ASL R1 ;NOW OLD VALUE *10. 13 ADD R2,R1 ;ADD NEW DIGIT TO OLD VALUE 14 JSR PC,TLISTN ;GET THE NEXT CHARACTER 15 JSR PC,120$ ;CHECK FOR STILL DIGIT (0-9) RANGE 16 BLOS 110$ ;A DIGIT, LOOP... 17 MOV R1,R0 ;ELSE MOVE SEQUENCE VALUE TO HERE 18 MOV #3,R1 ;CODE FOR <[> (3) 19 BR 60$ ;GO EXIT 20 21 120$: MOV R0,R2 ;COPY THE CHARACTER 22 SUB #'0,R2 ; AND CONVERT (POSSIBLE) DIGIT TO BINARY 23 CMP R2,#9. ;COMPARE AGAINST HIGHEST VALID BINARY DIGIT 24 RTS PC ; AND EXIT W/ CC'S SET ('BHI' => NON-DIGIT) 25 26 .ENDC ;NE IMMEDC 27 28 000001 .END CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page 26-1 Symbol table CRTCUP 000004R 002 CRTSET 000010R 002 ETYPE = ****** GX I$$SOB= 000001 SCROLL= 000000 CRTERC 000002R 002 CRTYPE= ****** GX ET$CRT= ****** GX RSTS = 000001 VMS = 000000 CRTERL 000006R 002 CUPTBL 000114R 002 IMMEDC= 000000 RSX = 000000 WATCH = 000000 CRTMAX= 000012 G ERCTBL 000074R 002 I$$DIV= 000001 RT11 = 000000 $$$$$$= 000152R 002 CRTRUB 000000R 002 ERLTBL 000152R 002 . ABS. 000000 000 (RW,I,GBL,ABS,OVR) 000000 001 (RW,I,LCL,REL,CON) CRTRUB 000212 002 (RO,I,GBL,REL,OVR) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 0 Size of work file: 8212 Words ( 33 Pages) Size of core pool: 16896 Words ( 66 Pages) Operating system: RT-11 (Under RSTS/E) Elapsed time: 00:00:48.01 OBJ:CRTRUX,LST:CRTRUX/C=TT:,MAC:CRTRUB CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page S-1 Cross reference table (CREF V05.03a) $$$$$$ 3-8# 3-12 3-12# 3-42 10-3 10-3# 10-11 10-11# 10-28 10-28# CRTCUP 6-11# CRTERC 6-8# CRTERL 6-14# CRTMAX 7-28# 7-41 9-7 10-3 10-11 10-28 CRTRUB 6-5# 6-7 6-10 6-13 CRTSET 6-5 7-40# CRTYPE 9-8* CUPTBL 6-11 10-11# ERCTBL 6-8 10-3# ERLTBL 6-14 10-28# ET$CRT 9-9 ETYPE 9-9* I$$DIV 1-6# 5-18 5-20 I$$SOB 1-5# 5-1 5-3 IMMEDC 1-4# 4-3 4-25 22-1 RSTS 1-1# 3-3 3-10 7-43 RSX 3-4 3-18 8-1 RT11 3-5 3-26 8-17 SCROLL 1-3# 4-2 4-21# VMS 3-6 3-34 8-27 WATCH 1-2# 4-1 4-5 9-11 11-1 CRTRUB SCOPE TYPE DETERMINATIO MACRO V05.03c Monday 16-Sep-85 14:55 Page M-1 Cross reference table (CREF V05.03a) CRTTBL 7-30# 10-3 10-11 10-28 DIVR0 5-31#