SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Table of contents 2- 5 SCOPE "WATCH" FOR TECO 2- 11 ASSEMBLY PARAMETERS 2- 16 GENERAL PDP-11 DEFINITIONS 2- 29 ASCII CHARACTER DEFINITIONS 3- 1 GRAPHIC SYMBOL DEFINITIONS 4- 1 DEFAULT AND SET UP THE ASSEMBLY PARAMETERS 4- 16 ASSEMBLED WITH HARDWARE 'SOB' INSTRUCTION 4- 37 ASSEMBLED WITH HARDWARE 'MUL' INSTRUCTION 5- 1 SCOPE "WATCH" ROUTINE 6- 1 HANDLE W COMMANDS (SCOPE UPDATE) 7- 1 START PROCESSING A REAL CALL 8- 1 START SCREEN UPDATE, CHECK FOR HOLDING SCREEN 9- 1 LOCATE CURSOR LINE 10- 1 FIND LINES FOR SCREEN 11- 1 CHECK THE CHECKING BUFFER 12- 1 ATTEMPT TO SCROLL THE SCREEN 13- 1 DO THE SCREEN SCROLLING 14- 1 FIND MARK'D REGION, OUTPUT SCREEN IMAGE 15- 1 ALL DONE, FINISH UP 16- 1 OUTPUT SOME TEXT 22- 1 GO TO A NEW LINE 24- 1 OUTPUT A CHARACTER 27- 1 BLANK REMAINDER OF LINE/SCREEN 28- 10 SET SUBROUTINE ADDRESSES, ETC. 29- 1 DO SEQUENCES 30- 1 POSITION THE CURSOR 31- 1 HANDLE :W COMMANDS (PARAMETER READ/SET) 35- 1 SET UP THE READ/WRITE REGIONS 37- 1 SAVE REGISTERS, SET RETURN, ETC. 38- 1 HANDLE -256+N:W (INSERT PROCESSING, ETC.) 40- 1 THE LAYOUT OF THE STATIC READ/WRITE REGION 41- 19 THE LAYOUT OF THE DYNAMIC READ/WRITE REGION SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 1 1 000001 I$$SOB = 1 ;ASSEMBLE WITH HARDWARE SOB INSTRUCTION 2 000001 I$$MUL = 1 ;ASSEMBLE WITH HARDWARE MULTIPLY INSTRUCTION SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 2 1 .TITLE SCREEN SCOPE "WATCH" FOR TECO 2 .NLIST TTM 3 .LIST TOC,MEB,BEX 4 .DSABL REG,GBL,LC 5 .SBTTL SCOPE "WATCH" FOR TECO 6 7 ; LAST EDIT ON 02-JUN-83 BY MARK BRAMHALL 8 9 .IDENT /V39.00/ 10 11 .SBTTL ASSEMBLY PARAMETERS 12 13 ; I$$SOB ASSEMBLE FOR HARDWARE 'SOB' INSTRUCTION (D=NO) 14 ; I$$MUL ASSEMBLE FOR HARDWARE 'MUL' INSTRUCTION (D=NO) 15 16 .SBTTL GENERAL PDP-11 DEFINITIONS 17 18 ; GENERAL REGISTER DEFINITIONS 19 20 000000 R0 = %0 21 000001 R1 = %1 22 000002 R2 = %2 23 000003 R3 = %3 24 000004 R4 = %4 25 000005 R5 = %5 26 000006 SP = %6 27 000007 PC = %7 28 29 .SBTTL ASCII CHARACTER DEFINITIONS 30 31 000011 TAB = 011 ;ASCII HORIZONTAL TAB 32 000012 LF = 012 ;ASCII LINE FEED 33 000013 VT = 013 ;ASCII VERTICAL TAB 34 000014 FF = 014 ;ASCII FORM FEED 35 000015 CR = 015 ;ASCII CARRIAGE RETURN 36 000033 ESC = 033 ;ASCII ESCAPE (ALSO CALLED ALTMODE) 37 000040 SPACE = 040 ;ASCII SPACE 38 000177 DEL = 177 ;ASCII DELETE (ALSO CALLED RUBOUT) SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 3 GRAPHIC SYMBOL DEFINITIONS 1 .SBTTL GRAPHIC SYMBOL DEFINITIONS 2 3 000001 OVRSYM = 1. ;A LINE WHICH OVERFLOWS THE SCREEN'S WIDTH 4 000002 LFDSYM = 2. ;CURSOR POSITIONED ON IMMEDIATELY AFTER 5 ;ALSO, "SEE ALL" MODE SYMBOL FOR 6 000003 CTLSYM = 3. ;"SEE ALL" MODE SYMBOL FOR CONTROL CHARACTER FLAG 7 000004 VTBSYM = 4. ;"SEE ALL" MODE SYMBOL FOR 8 000005 EOBSYM = 5. ;AT END OF BUFFER ENDING WITHOUT 9 000006 FFDSYM = 6. ;AT END OF BUFFER ENDING WITH 10 ;ALSO, "SEE ALL" MODE SYMBOL FOR 11 000007 TABSYM = 7. ;"SEE ALL" MODE SYMBOL FOR 12 000010 NULSYM = 8. ;"SEE ALL" MODE SYMBOL FOR NULL SPACING 13 000011 RETSYM = 9. ;"SEE ALL" MODE SYMBOL FOR 14 000012 OVPSYM = 10. ;"SEE ALL" MODE SYMBOL FOR OVERPRINT 15 000013 HXSSYM = 11. ;"SEE ALL" MODE SYMBOL FOR HEX PAIR START 16 000014 COSSYM = 12. ;"SEE ALL" MODE SYMBOL FOR COMPOSE SEQUENCE START 17 000015 HXESYM = 13. ;"SEE ALL" MODE SYMBOL FOR HEX PAIR END 18 000016 COESYM = 14. ;"SEE ALL" MODE SYMBOL FOR COMPOSE SEQUENCE END 19 000017 ESCSYM = 15. ;"SEE ALL" MODE SYMBOL FOR SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 4 DEFAULT AND SET UP THE ASSEMBLY PARAMETERS 1 .SBTTL DEFAULT AND SET UP THE ASSEMBLY PARAMETERS 2 3 .IIF NDF I$$SOB, I$$SOB=0 ;DEFAULT TO NO HARDWARE 'SOB' 4 5 .IF EQ I$$SOB 6 7 .MACRO SOB REG,DST 8 DEC REG 9 BNE DST 10 .ENDM SOB 11 12 .SBTTL ASSEMBLED WITHOUT HARDWARE 'SOB' INSTRUCTION 13 14 .IFF ;EQ I$$SOB 15 16 .SBTTL ASSEMBLED WITH HARDWARE 'SOB' INSTRUCTION 17 18 .ENDC ;EQ I$$SOB 19 20 .IIF NDF I$$MUL, I$$MUL=0 ;DEFAULT TO NO HARDWARE 'MUL' 21 22 .IF EQ I$$MUL 23 24 .MACRO MULHSZ 25 JSR PC,MULHSZ 26 .ENDM MULHSZ 27 28 .SBTTL ASSEMBLED WITHOUT HARDWARE 'MUL' INSTRUCTION 29 30 .IFF ;EQ I$$MUL 31 32 .MACRO MULHSZ 33 MUL HTSIZE+RWSIZE(R5),R1 34 .GLOBL RWSIZE 35 .ENDM MULHSZ 36 37 .SBTTL ASSEMBLED WITH HARDWARE 'MUL' INSTRUCTION 38 39 .ENDC ;EQ I$$MUL SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 5 SCOPE "WATCH" ROUTINE 1 .SBTTL SCOPE "WATCH" ROUTINE 2 3 ;+ 4 ; SCREEN - SCOPE "WATCH" ROUTINE. 5 ; 6 ; IF NFLG(R5) >= 0 THEN "W" COMMAND 7 ; 8 ; R0 = N OF "NW" IF "NW" 9 ; NWATCH(R5) IF "W" 10 ; 11 ; JSR PC,SCREEN 12 ; 13 ; IF NFLG(R5) < 0 THEN ":W" COMMAND 14 ; 15 ; R0 = N OF "N:W" OR "M,N:W" 16 ; 17 ; IF CFLG(R5) <> -1 THEN "N:W" COMMAND 18 ; 19 ; IF CFLG(R5) = -1 THEN "M,N:W" COMMAND 20 ; 21 ; M(R5) = M OF "M,N:W" 22 ; 23 ; JSR PC,SCREEN 24 ; 25 ; R0 = RETURNED VALUE 26 ;- 27 28 000000 .PSECT SCREEN,RO,I,GBL,REL,OVR 29 30 000000 032765 000000G 000000G SCREEN: BIT #ET$IAS,ETYPE(R5) ;IS THE SCOPE AVAILABLE? 31 000006 001427 BEQ 30$ ;NOPE, QUICKLY EXIT... 32 000010 005765 000000G TST NFLG(R5) ;WHAT KIND OF CALL IS THIS? 33 000014 100003 BPL 10$ ;"W" COMMAND, GO PROCESS IT 34 000016 012746 003702' MOV #SCRPRM,-(SP) ;":W" COMMAND, GO OFF TO PARAMETER HANDLING 35 000022 000424 BR 50$ ; AFTER LOADING THE DUMB OVERLAY... 36 37 .GLOBL ET$IAS, ETYPE, NFLG SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 6 HANDLE W COMMANDS (SCOPE UPDATE) 1 .SBTTL HANDLE W COMMANDS (SCOPE UPDATE) 2 3 ;+ 4 ; HANDLE W COMMANDS (SCOPE UPDATE). 5 ; 6 ; W NOP 7 ; 0W SET DEFAULT CURSOR LINE; FORGET EVERYTHING 8 ; +NW SET CURSOR LINE TO N; FORGET EVERYTHING 9 ; -1W UPDATE SCOPE SCREEN 10 ; -NW FORGET TOP N-1 LINES OF SCREEN 11 ; -1000W FORGET THAT OUTPUT WAS DONE 12 ;- 13 14 000024 005700 10$: TST R0 ;CHECK OUT THE ARGUMENT'S SIGN 15 000026 100420 BMI 40$ ;ARG <0, GO PROCESS A REAL CALL 16 000030 001403 BEQ 20$ ;ARG =0, GO FORGET EVERYTHING 17 000032 020065 000000G CMP R0,NWATCH(R5) ;ARG >0, IS IT THE DEFAULT VALUE? 18 000036 001413 BEQ 30$ ;YES, DO NOTHING 19 000040 005065 000000C 20$: CLR INITFL+RWSIZE(R5) ;FORGET THE ENTIRE SCREEN 20 000044 005065 000000C CLR MRKFLG+RWSIZE(R5) ;CLEAR ANY SET "MARK" 21 000050 005065 000000C CLR TOPDOT+RWSIZE(R5) ;CLEAR LAST STARTING POSITION 22 000054 012765 000040 000000C MOV #SPACE,SEEALL+RWSIZE(R5) ;RESET "SEEING ALL" FLAG 23 000062 005065 000000C CLR HLDFLG+RWSIZE(R5) ;RESET "HOLD SCREEN" FLAG 24 000066 000207 30$: RTS PC ;EXIT 25 26 000070 012746 000000' 40$: MOV #SCRUPD,-(SP) ;GO OFF TO PROCESS A REAL CALL 27 000074 000167 000000G 50$: JMP SCRLOD ; AFTER LOADING THE DUMB OVERLAY... 28 29 .GLOBL NWATCH, RWSIZE, SCRLOD SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 7 START PROCESSING A REAL CALL 1 .SBTTL START PROCESSING A REAL CALL 2 3 000000 .PSECT SCRSUB,RO,I,GBL,REL,CON 4 5 .ENABL LSB 6 7 000000 004067 004542 SCRUPD::JSR R0,SCRSAV ;SAVE REGISTERS, SET RETURN, ETC. 8 000004 005100 COM R0 ;MAKE COUNT OF CHANGED LINES POSITIVE 9 000006 001426 BEQ DOIT ;BRANCH IF NO SPECIAL SCREEN MODS 10 000010 020027 001747 CMP R0,#1000.-1 ;SPECIAL CASE (<= -1000.)? 11 000014 103014 BHIS 20$ ;YES, JUST RESET THE OUTPUT DONE FLAG 12 000016 016501 000000C MOV VTSIZE+RWSIZE(R5),R1 ;PUT MAXIMUM LEGAL COUNT INTO ODD REG 13 000022 020001 CMP R0,R1 ;IS ARGUMENT OVER MAXIMUM? 14 000024 101001 BHI CLRSCN ;YES, USE MAXIMUM 15 000026 010001 MOV R0,R1 ;NO, USE ARGUMENT 16 000030 CLRSCN: MULHSZ ;MULTIPLY LINE COUNT TO GET BYTES 000030 070165 000000C MUL HTSIZE+RWSIZE(R5),R1 17 000034 006201 ASR R1 ; THEN MAKE THAT WORDS 18 000036 016500 000000C MOV MAPPTR+RWSIZE(R5),R0 ;GET A POINTER TO THE MAP 19 000042 005020 10$: CLR (R0)+ ;CLEAR WHAT WE THINK IT LOOKS LIKE 20 000044 077102 SOB R1,10$ ; FOR THAT MANY LINES 21 000046 012765 176030 000000C 20$: MOV #-1000.,PRELIN+RWSIZE(R5) ;CLOBBER LAST KNOWN CURSOR 22 000054 042765 000002 000000G BIC #2,OUTDNE(R5) ;CLEAR TERMINAL OUTPUT FLAG (+2) 23 000062 000207 RTS PC ; AND EXIT 24 25 .DSABL LSB 26 27 .GLOBL RWSIZE, OUTDNE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 8 START SCREEN UPDATE, CHECK FOR HOLDING SCREEN 1 .SBTTL START SCREEN UPDATE, CHECK FOR HOLDING SCREEN 2 3 000064 004467 003336 DOIT: JSR R4,SETJSR ;SET UP FOR 4 000070 003460' .WORD FTRANS ; COUNTING LINES 5 000072 016504 000000G MOV P(R5),R4 ;GET CURRENT POINTER 6 000076 010446 MOV R4,-(SP) ; AND SAVE IT 7 000100 012746 001230' MOV #SCROUT,-(SP) ;GUESS AT VALID SCREEN "HOLD" 8 000104 005765 000000C TST HLDFLG+RWSIZE(R5) ;TRY TO "HOLD" THE SCREEN? 9 000110 001457 BEQ FCURLN ;NOPE 10 000112 016500 000000C MOV TOPDOT+RWSIZE(R5),R0 ;YEP, GET TOP-OF-SCREEN POSITION +1 11 000116 005300 DEC R0 ; THEN MAKE IT ZERO BASED 12 000120 020065 000000G CMP R0,ZZ(R5) ;IS TOP POSITION OUTSIDE OF BUFFER? 13 000124 101051 BHI FCURLN ;YES, FORGET HOLDING THE SCREEN THIS TIME... 14 000126 010065 000000G MOV R0,P(R5) ;ELSE SET TOP-OF-SCREEN AS CURRENT POINTER 15 000132 005000 CLR R0 ;SET THE ARGUMENT FOR "0L" 16 000134 004767 000000G JSR PC,.VVV.V ;DO 0L (START OF TOP-OF-SCREEN LINE) 17 000140 010165 000000C MOV R1,LINPTR+RWSIZE(R5) ;SAVE RESULT IN CASE WE USE IT 18 000144 010465 000000G MOV R4,P(R5) ;RESTORE REAL CURRENT POINTER 19 000150 020401 CMP R4,R1 ;IS CURRENT POINTER BELOW TOP POSITION? 20 000152 103436 BLO FCURLN ;YES, DON'T HOLD SCREEN THIS TIME... 21 000154 066504 000000G ADD TXSTOR(R5),R4 ;MAKE CURRENT POINTER ABSOLUTE 22 000160 010465 000000C MOV R4,CURPOS+RWSIZE(R5) ; AND SET IT 23 000164 005265 000000C INC BUINDX+RWSIZE(R5) ;SET FAKE NON-ZERO MAP POINTER 24 000170 010104 MOV R1,R4 ;SET START OF THE TOP-OF-SCREEN LINE 25 000172 016501 000000G MOV ZZ(R5),R1 ;GET TOTAL SIZE OF TEXT BUFFER 26 000176 160401 SUB R4,R1 ;FIND SIZE TO END OF BUFFER 27 000200 004767 001340 JSR PC,DOTEXT ; AND SPAN LINES IN THAT TEXT 28 000204 005765 000000C TST CURABS+RWSIZE(R5) ;DID WE SPAN THE CURSOR LOCATION? 29 000210 001414 BEQ 10$ ;NOPE, CAN'T HOLD THIS TIME... 30 000212 016502 000000C MOV HLDFLG+RWSIZE(R5),R2 ;YEP, GET "HOLD" FLAG AGAIN 31 000216 100453 BMI CHKSCN ;FLAG <0 => ALWAYS HOLD SCREEN IF POSSIBLE 32 000220 026502 000000C CMP CURLIN+RWSIZE(R5),R2 ;ELSE CHECK FOR TOO FAR UP ON SCREEN 33 000224 103406 BLO 10$ ;TOO FAR UP, DON'T HOLD THE SCREEN 34 000226 016503 000000C MOV VTSIZE+RWSIZE(R5),R3 ;GET SCREEN'S SIZE 35 000232 160203 SUB R2,R3 ; AND FIND FIRST ILLEGAL BOTTOM LINE 36 000234 026503 000000C CMP CURLIN+RWSIZE(R5),R3 ;CHECK FOR TOO FAR DOWN ON SCREEN 37 000240 103442 BLO CHKSCN ;WITHIN RANGE, WE CAN HOLD THE SCREEN 38 000242 004467 003160 10$: JSR R4,SETJSR ;CAN'T HOLD, RE-SET UP FOR 39 000246 003460' .WORD FTRANS ; COUNTING LINES 40 41 .GLOBL P, RWSIZE, ZZ, .VVV.V, TXSTOR SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 9 LOCATE CURSOR LINE 1 .SBTTL LOCATE CURSOR LINE 2 3 000250 005000 FCURLN: CLR R0 ;SET THE ARGUMENT FOR "0L" 4 000252 004767 000000G JSR PC,.VVV.V ;DO 0L (START OF CURSOR LINE) 5 000256 010104 MOV R1,R4 ;SET START OF THE CURSOR LINE 6 000260 016501 000000G MOV ZZ(R5),R1 ;GET TOTAL SIZE OF TEXT BUFFER 7 000264 160401 SUB R4,R1 ; AND FIND SIZE TO END OF BUFFER 8 000266 004767 001252 JSR PC,DOTEXT ;NOW COUNT LINES IN THAT TEXT 9 000272 016500 000000C MOV VTSIZE+RWSIZE(R5),R0 ;SET THE SCREEN'S SIZE 10 000276 016516 000000G MOV NWATCH(R5),(SP) ;GET THE STANDARD CURSOR LINE NUMBER 11 000302 001402 BEQ 10$ ;ZERO, MAKE IT VALID 12 000304 020016 CMP R0,(SP) ;MIGHT BE VALID, CHECK UPPER LIMIT 13 000306 101010 BHI 30$ ;IT IS VALID, USE IT 14 000310 010002 10$: MOV R0,R2 ;SET SCREEN'S SIZE 15 000312 012716 177777 MOV #-1,(SP) ;PRESET COUNTER FOR DIVIDE BY 3 16 000316 005216 20$: INC (SP) ;COUNT IN ANSWER 17 000320 162702 000003 SUB #3,R2 ; AND SUBTRACT FROM SIZE 18 000324 103374 BHIS 20$ ; THEN LOOP IF MORE TO GO 19 000326 006316 ASL (SP) ;FINALLY FORM 2/3RD'S OF SIZE 20 000330 166500 000000C 30$: SUB BUSTRT+RWSIZE(R5),R0 ;CALC LINE NUMBER OF CURSOR LINE 21 000334 020016 CMP R0,(SP) ;SHOULD WE USE THE CALCULATED VALUE? 22 000336 101401 BLOS 40$ ;NOPE, USE STANDARD 23 000340 010016 MOV R0,(SP) ;YEP, USE CALCULATED 24 000342 012746 000472' 40$: MOV #FSCRLN,-(SP) ;SET FOR FULL SCREEN ADJUSTMENT 25 26 .ENABL LSB 27 28 000346 016502 000000C CHKSCN::MOV CHCKBP+RWSIZE(R5),R2 ;GET POINTER TO CHECKING BUFFER 29 000352 011646 MOV (SP),-(SP) ;MOVE RETURN ADDRESS UP A WORD 30 000354 010266 000002 MOV R2,2(SP) ; SO WE CAN SAVE START OF THE BUFFER 31 000360 005012 CLR (R2) ;INDICATE NO MOVEMENT INITIALLY & FILL BUFFER 32 000362 005265 000000C INC INITFL+RWSIZE(R5) ;KNOWN SCREEN STATE? 33 000366 100410 BMI 20$ ;UNKNOWN, BUT ALL FIXED UP (WAS -2) 34 000370 001003 BNE 10$ ;NOPE (WASN'T -1) 35 000372 005765 000000G TST OUTDNE(R5) ;HAS ANY OUTPUT BEEN DONE? 36 000376 001411 BEQ 30$ ;NO 37 000400 012703 000000G 10$: MOV #FIXSEQ,R3 ;SET SEQUENCE TO FIX UP TERMINAL 38 000404 004767 003064 JSR PC,DOTYPE ; AND GO DO IT 39 000410 005212 20$: INC (R2) ;SET FLAG TO AVOID FILLING CHECKING BUFFER 40 000412 016501 000000C MOV VTSIZE+RWSIZE(R5),R1 ;SET THE FULL SCREEN LENGTH 41 000416 004767 177406 JSR PC,CLRSCN ; AND GO CLEAR OUT THE SCREEN MAP, ETC. 42 000422 005765 000000C 30$: TST PRELIN+RWSIZE(R5) ;DO WE KNOW WHERE THE CURSOR IS NOW? 43 000426 100010 BPL 40$ ;YES 44 000430 012703 000000G SCRHOM::MOV #HOMSEQ,R3 ;NO, SET SEQUENCE TO HOME 45 000434 004767 003034 JSR PC,DOTYPE ; AND GO DO IT 46 000440 005065 000000C CLR PRELIN+RWSIZE(R5) ;CURSOR LINE IS NOW ZERO 47 000444 005065 000000C CLR PRECOL+RWSIZE(R5) ;CURSOR COLUMN IS NOW ZERO 48 000450 000207 40$: RTS PC ;OFF TO WHOEVER... 49 50 .DSABL LSB 51 52 .GLOBL .VVV.V, ZZ, RWSIZE, NWATCH, OUTDNE, FIXSEQ, HOMSEQ SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 10 FIND LINES FOR SCREEN 1 .SBTTL FIND LINES FOR SCREEN 2 3 000452 016502 000000C FTOPLN: MOV CHCKBP+RWSIZE(R5),R2 ;GET POINTER TO CHECKING BUFFER AGAIN 4 000456 010246 MOV R2,-(SP) ; AND SAVE IT 5 000460 005012 CLR (R2) ;TRY FILLING IT AGAIN 6 000462 012700 000014 MOV #12.,R0 ;SET FOR 12L 7 000466 004767 000000G JSR PC,.VVV.V ; AND GO USE TECO'S MOVER 8 000472 004467 002730 FSCRLN: JSR R4,SETJSR ;SET UP FOR 9 000476 003460' .WORD FTRANS ; FINDING CURSOR LINE 10 000500 005013 CLR (R3) ; CLEARING "NUMCHR" (# CHARS FOUND) 11 000502 004467 002720 10$: JSR R4,SETJSR ;RE-SET UP FOR 12 000506 003460' .WORD FTRANS ; FINDING CURSOR LINE 13 000510 010243 MOV R2,-(R3) ; RE-SAVING THAT "BUSTRT" VALUE 14 000512 016565 000000G 000000C MOV P(R5),LINPTR+RWSIZE(R5) ;SAVE OLD LINE INDEX 15 000520 001506 BEQ TRYTOP ;AT TOP OF PAGE, QUIT THIS LOOP 16 000522 012700 177777 MOV #-1,R0 ;GET TO START OF PREVIOUS TEXT LINE 17 000526 004767 000000G JSR PC,.VVV.V ; USING TECO'S MOVER 18 000532 010104 MOV R1,R4 ;NEW 'P' IS RETURNED IN R1, MAKE COPY 19 000534 166501 000000C SUB LINPTR+RWSIZE(R5),R1 ;MAKE R1 CONTAIN 20 000540 005401 NEG R1 ; ONLY CHARS IN -1L 21 000542 011602 MOV (SP),R2 ;GET CHECKING BUFFER POINTER 22 000544 105712 TSTB (R2) ;IS IT ALREADY FILLED? 23 000546 001410 BEQ 20$ ;NO, BUT ALWAYS TRY FILLING IT 24 000550 100031 BPL 50$ ;NO, BUT WE'RE NOT TRYING TO FILL IT 25 000552 026527 000000C 000017 CMP NUMCHR+RWSIZE(R5),#15. ;YES, BUT FILLED WITH ENOUGH CHARS? 26 000560 103025 BHIS 50$ ;ALL FILLED UP 27 000562 020165 000000C CMP R1,NUMCHR+RWSIZE(R5) ;WOULD THIS LINE HAVE MORE CHARACTERS? 28 000566 101422 BLOS 50$ ;NO, DON'T TRY IT 29 000570 005765 000000C 20$: TST BUSTRT+RWSIZE(R5) ;IS THIS THE FIRST TIME THROUGH? 30 000574 001402 BEQ 30$ ;YES, LEAVE IT AS A "SHORT" LINE 31 000576 010165 000000C MOV R1,NUMCHR+RWSIZE(R5) ;NO, SAVE # OF CHARACTERS IN THIS LINE 32 000602 012722 177777 30$: MOV #-1,(R2)+ ;MARK AS TENTATIVELY USED NOW 33 000606 010265 000000C MOV R2,BUINDX+RWSIZE(R5) ;SET STARTING FILL IN POINTER 34 000612 012765 003250' 000000C MOV #CCHAR,OUTCHR+RWSIZE(R5) ; AND CHANGE THE OUTPUT ROUTINE 35 000620 016500 000000C MOV HTSIZE+RWSIZE(R5),R0 ;GET SIZE OF LINE IN BYTES 36 000624 006200 ASR R0 ; THEN MAKE THAT WORDS 37 000626 012722 40$: MOV (PC)+,(R2)+ ;BLANK 38 000630 040 040 .BYTE SPACE,SPACE ; USING 'S 39 000632 077003 SOB R0,40$ ; THE WHOLE FILLIN BUFFER 40 000634 016565 000000C 000000C 50$: MOV BUSTRT+RWSIZE(R5),SVSTRT+RWSIZE(R5) ;SAVE STARTING VALUE 41 000642 004767 000676 JSR PC,DOTEXT ;FORMAT A LINE 42 000646 016500 000000C MOV BUSTRT+RWSIZE(R5),R0 ;GET FINISHING LINE NUMBER 43 000652 011602 MOV (SP),R2 ;GET BACK CHECKING BUFFER POINTER 44 000654 005722 TST (R2)+ ;DOES CHECKING BUFFER LINE NEED SETTING? 45 000656 100001 BPL 60$ ;NOPE 46 000660 110042 MOVB R0,-(R2) ;YEP, SO SAVE LINE NUMBER 47 000662 020066 000002 60$: CMP R0,2(SP) ;WOULD WE BE AT TOP? 48 000666 103705 BLO 10$ ;BRANCH IF NOT 49 000670 016565 000000C 000000C MOV SVSTRT+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;RESTORE CORRECT VALUE 50 51 .GLOBL RWSIZE, .VVV.V, P SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 11 CHECK THE CHECKING BUFFER 1 .SBTTL CHECK THE CHECKING BUFFER 2 3 .ENABL LSB 4 5 000676 012602 10$: MOV (SP)+,R2 ;GET CHECKING BUFFER POINTER 6 000700 105722 TSTB (R2)+ ;DID WE FILL IT? 7 000702 001425 BEQ 20$ ;NO, BUT WE WANTED TO 8 000704 003151 BGT SCROUT ;NO, AND WE DIDN'T EVEN TRY... 9 000706 005765 000000C TST HLDFLG+RWSIZE(R5) ;YES, ARE WE TRYING TO FULLY HOLD SCREEN? 10 000712 100546 BMI SCROUT ;WE'RE FULLY HOLDING, DON'T ATTEMPT TO SCROLL 11 000714 112200 MOVB (R2)+,R0 ;NOT HOLDING, SAVE THE "BUSTRT" VALUE 12 000716 016501 000000C MOV BUSTRT+RWSIZE(R5),R1 ;GET ENDING "BUSTRT" VALUE 13 000722 160001 SUB R0,R1 ;CALCULATE THE BUFFERED LINE NUMBER 14 000724 MULHSZ ;FIND OFFSET OF THE BUFFERED LINE 000724 070165 000000C MUL HTSIZE+RWSIZE(R5),R1 15 000730 005046 CLR -(SP) ;START MOVEMENT AT 0 16 000732 005004 CLR R4 ; WHICH IS AN OFFSET OF 0 17 000734 000424 BR FNDMOV ;ENTER THE MOVE CHECKING LOOP 18 19 000736 005166 000002 TRYTOP: COM 2(SP) ;SET CURSOR LINE <0 IF FIRST TIME THROUGH 20 000742 100355 BPL 10$ ;SECOND TIME, ALWAYS TRY TO MATCH LINES 21 000744 026527 000000C 000017 CMP NUMCHR+RWSIZE(R5),#15. ;FIRST TIME, DID WE GET ENOUGH CHARS? 22 000752 103351 BHIS 10$ ;GOT ENOUGH, SO CHECK FOR A MATCH 23 000754 005726 NOMOVE: TST (SP)+ ;JUNK THE STACK ITEM 24 000756 005716 20$: TST (SP) ;SHOULD WE TRY ANOTHER WAY (<0 CURSOR LINE)? 25 000760 100634 BMI FTOPLN ;YEP, SO GO TRY THAT OTHER WAY... 26 000762 000522 BR SCROUT ;NOPE, JUST PUNT 27 28 .DSABL LSB 29 30 .GLOBL RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 12 ATTEMPT TO SCROLL THE SCREEN 1 .SBTTL ATTEMPT TO SCROLL THE SCREEN 2 3 .ENABL LSB 4 5 000764 005416 10$: NEG (SP) ;REVERSE MOVEMENT NUMBER 6 000766 005404 NEG R4 ; AND REVERSE MOVEMENT OFFSET 7 000770 100406 BMI FNDMOV ;NOW NEGATIVE, TRY IT 8 000772 021627 000014 CMP (SP),#12. ;NOW POSITIVE, SHOULD WE CONTINUE? 9 000776 101366 BHI NOMOVE ;NOPE, CAN'T FIND A MATCHING LINE 10 001000 005216 INC (SP) ;GO 1 PLACE FURTHER 11 001002 066504 000000C ADD HTSIZE+RWSIZE(R5),R4 ; IN BOTH PLACES 12 001006 010102 FNDMOV: MOV R1,R2 ;COPY THE BUFFERED LINE'S OFFSET 13 001010 060402 ADD R4,R2 ;BUILD OFFSET POINTER FOR THIS TRY 14 001012 100764 BMI 10$ ;BELOW MAP, DON'T TRY IT 15 001014 066502 000000C ADD MAPPTR+RWSIZE(R5),R2 ;MAKE BUFFERED LINE POINTER ABSOLUTE 16 001020 020265 000000G CMP R2,TXSTOR(R5) ;IS THIS OFFSET OUT OF THE SCREEN? 17 001024 103357 BHIS 10$ ;TOO FAR OUT, GO TRY ANOTHER MOVE 18 001026 016503 000000C MOV CHCKBP+RWSIZE(R5),R3 ;GET A POINTER TO CHECK BUFFER 19 001032 005723 TST (R3)+ ; SKIPPING THE FLAG WORD 20 001034 016500 000000C MOV HTSIZE+RWSIZE(R5),R0 ;GET LINE SIZE IN BYTES 21 001040 006200 ASR R0 ; THEN MAKE THAT WORDS 22 001042 012246 20$: MOV (R2)+,-(SP) ;GET WORD FROM THE SCREEN MAP 23 001044 042716 BIC (PC)+,(SP) ; AND REMOVE ANY FLAG BIT(S) 24 001046 200 200 .BYTE 200,200 25 001050 022326 CMP (R3)+,(SP)+ ;DOES CHECK MATCH SCREEN? 26 001052 001404 BEQ 30$ ;YES, AND EXACTLY AT THAT 27 001054 026227 177776 CMP -2(R2),(PC)+ ;NO, WERE THOSE CHARACTERS "FORGOTTEN"? 28 001060 200 200 .BYTE 200,200 29 001062 001340 BNE 10$ ;NOPE, A TRUE MISMATCH... 30 001064 077012 30$: SOB R0,20$ ;LOOP 31 32 .DSABL LSB 33 34 .GLOBL RWSIZE, TXSTOR SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 13 DO THE SCREEN SCROLLING 1 .SBTTL DO THE SCREEN SCROLLING 2 3 001066 012601 DOMOVE: MOV (SP)+,R1 ;GET THE MOVEMENT AMOUNT 4 001070 005002 CLR R2 ;SET CURSOR TO COLUMN 0 5 001072 016565 000000C 000000C MOV VTSIZ1+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;SET LAST SCREEN LINE 6 001100 012703 000000G MOV #SCUSEQ,R3 ;SEQUENCE TO RAISE SCREEN 7 001104 010104 MOV R1,R4 ;SAVE THAT MOVE COUNT 8 001106 001450 BEQ SCROUT ;NO MOVEMENT, SO QUIT 9 001110 100013 BPL 10$ ;ASSUMPTION RIGHT, MOVING SCREEN UP 10 001112 016503 000000G MOV CRTYPE(R5),R3 ;MOVING DOWN, GET THE SCOPE TYPE INDEX 11 001116 127327 000000G 000200 CMPB @SCDSEQ(R3),#200 ;REALLY A SEQUENCE THERE? 12 001124 001441 BEQ SCROUT ;NOPE, JUST PUNT... 13 001126 012703 000000G MOV #SCDSEQ,R3 ;SEQUENCE TO LOWER SCREEN 14 001132 005065 000000C CLR BUSTRT+RWSIZE(R5) ;FIX TO LOWER SCREEN 15 001136 005404 NEG R4 ;MAKE COUNT POSITIVE 16 001140 004767 002324 10$: JSR PC,DOSEQ ;POSITION THE SCREEN 17 001144 077403 SOB R4,10$ ; THE CORRECT NUMBER OF TIMES 18 001146 016502 000000C MOV MAPPTR+RWSIZE(R5),R2 ;GET POINTER TO START OF MAP 19 001152 016500 000000G MOV TXSTOR(R5),R0 ;SET POINTER TO END OF MAP 20 001156 MULHSZ ;CALC OFFSET TO START MOVE FROM 001156 070165 000000C MUL HTSIZE+RWSIZE(R5),R1 21 001162 005701 TST R1 ;CHECK THE MOVE DIRECTION 22 001164 100411 BMI 40$ ;BRANCH IF TO MOVE INTERNAL MAP DOWN 23 001166 060201 ADD R2,R1 ;ADD IN MAP BASE 24 001170 012122 20$: MOV (R1)+,(R2)+ ;MOVE THE DATA 25 001172 020100 CMP R1,R0 ;DID WE MOVE LAST DATA BYTE? 26 001174 103775 BLO 20$ ;BRANCH IF NOT 27 001176 012722 30$: MOV (PC)+,(R2)+ ;FILL REMAINDER 28 001200 040 040 .BYTE SPACE,SPACE ; WITH BLANKS 29 001202 020200 CMP R2,R0 ;ARE WE AT END OF TABLE? 30 001204 103774 BLO 30$ ;BRANCH IF NOT 31 001206 000410 BR SCROUT ;ELSE DONE SHIFTING 32 33 001210 060001 40$: ADD R0,R1 ;POINT TO END OF DATA TO BE MOVED 34 001212 014140 50$: MOV -(R1),-(R0) ;MOVE THE DATA 35 001214 020102 CMP R1,R2 ;ARE WE AT THE TOP? 36 001216 101375 BHI 50$ ;BRANCH IF NOT 37 001220 012740 60$: MOV (PC)+,-(R0) ;FILL REMAINDER 38 001222 040 040 .BYTE SPACE,SPACE ; WITH BLANKS 39 001224 020002 CMP R0,R2 ;ARE WE AT TOP? 40 001226 101374 BHI 60$ ;BRANCH IF NOT 41 42 .GLOBL RWSIZE, SCUSEQ, CRTYPE, SCDSEQ, TXSTOR SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 14 FIND MARK'D REGION, OUTPUT SCREEN IMAGE 1 .SBTTL FIND MARK'D REGION, OUTPUT SCREEN IMAGE 2 3 001230 005726 SCROUT::TST (SP)+ ;POP THAT JUNK STACK ITEM 4 001232 004467 002170 JSR R4,SETJSR ;SET UP FOR 5 001236 003464' .WORD RTRANS ; THE REAL OUTPUT 6 001240 016504 000000C MOV LINPTR+RWSIZE(R5),R4 ;GET STARTING POINT OF TEXT 7 001244 010465 000000C MOV R4,TOPDOT+RWSIZE(R5) ; AND SAVE IT 8 001250 005265 000000C INC TOPDOT+RWSIZE(R5) ; MAKING IT STARTING POINT +1 9 001254 016501 000000G MOV ZZ(R5),R1 ;GET END OF TEXT 10 001260 160401 SUB R4,R1 ; AND FIND AMOUNT OF TEXT TO DO 11 001262 016565 000000C 000000C MOV MAPPTR+RWSIZE(R5),BUINDX+RWSIZE(R5) ;INIT INDEX INTO THE MAP 12 001270 011665 000000G MOV (SP),P(R5) ;FINALLY REFIX POINTER 13 001274 066516 000000G ADD TXSTOR(R5),(SP) ;COMPUTE CURSOR POINTER 14 001300 016503 000000G MOV CRTYPE(R5),R3 ;GET THE SCOPE TYPE 15 001304 127327 000000G 000200 CMPB @MONSEQ(R3),#200 ;DOES THE MARK'D REGION FEATURE EXIST? 16 001312 001417 BEQ 20$ ;NOPE, SO DON'T TRY FOR IT... 17 001314 016500 000000C MOV MRKFLG+RWSIZE(R5),R0 ;GET "MARK" IF ANY 18 001320 001414 BEQ 20$ ;NONE 19 001322 005300 DEC R0 ;ONE, MAKE "MARK" LESS ONE 20 001324 066500 000000G ADD TXSTOR(R5),R0 ; AND ABSOLUTE 21 001330 011665 000000C MOV (SP),MRKHGH+RWSIZE(R5) ;SAVE HIGH LIMIT OF MARK'D REGION 22 001334 020016 CMP R0,(SP) ;WAS THAT REALLY THE HIGH LIMIT? 23 001336 101403 BLOS 10$ ;YES 24 001340 010065 000000C MOV R0,MRKHGH+RWSIZE(R5) ;NO, THIS IS THE HIGH LIMIT 25 001344 011600 MOV (SP),R0 ; AND THIS IS THE REAL LOW LIMIT 26 001346 010065 000000C 10$: MOV R0,MRKLOW+RWSIZE(R5) ;SAVE LOW LIMIT OF MARK'D REGION 27 001352 011665 000000C 20$: MOV (SP),CURPOS+RWSIZE(R5) ;SET POSITION OF CURSOR 28 001356 004767 000162 JSR PC,DOTEXT ;NOW REALLY UPDATE THE SCREEN 29 001362 012604 MOV (SP)+,R4 ;GET CURSOR POSITION IN TEXT BUFFER 30 001364 016565 000000C 000000C MOV VTSIZ1+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;PRESET CURSOR AT LOWER 31 001372 016502 000000C MOV HTSIZ1+RWSIZE(R5),R2 ; RIGHT OF SCREEN 32 001376 016501 000000C MOV CURABS+RWSIZE(R5),R1 ;DID WE FIND THE CURSOR? 33 001402 001430 BEQ 30$ ;NO 34 001404 016565 000000C 000000C MOV CURLIN+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;SET THE LINE FOR CURSOR 35 001412 016502 000000C MOV CURCOL+RWSIZE(R5),R2 ; AND SET THE COLUMN 36 001416 005765 000000G TST P(R5) ;CURSOR AT START OF TEXT BUFFER? 37 001422 001420 BEQ 30$ ;YES, CAN'T BE BETWEEN (NO PRIOR) 38 001424 026565 000000G 000000G CMP P(R5),ZZ(R5) ;CURSOR AT END OF TEXT BUFFER? 39 001432 103014 BHIS 30$ ;YES, CAN'T BE BETWEEN (NO CURRENT) 40 001434 121427 000012 CMPB (R4),#LF ;ELSE CHECK FOR CURRENT BEING A 41 001440 001011 BNE 30$ ;NOT TRUE 42 001442 124427 000015 CMPB -(R4),#CR ;TRUE, CHECK FOR PRIOR BEING A 43 001446 001006 BNE 30$ ;NOT TRUE EITHER 44 001450 122424 CMPB (R4)+,(R4)+ ;ALL TRUE, CORRECT TEXT POINTER 45 001452 012700 000002 MOV #LFDSYM,R0 ;SET BETWEEN AND SYMBOL 46 001456 004767 001316 JSR PC,VTCHAR ; AND GO OUTPUT THAT SYMBOL 47 001462 005302 DEC R2 ;BACK UP THE COLUMN NUMBER 48 001464 004767 002034 30$: JSR PC,SETCUR ;SET THE FINAL CURSOR POSITION 49 50 .GLOBL RWSIZE, ZZ, P, TXSTOR, CRTYPE, MONSEQ SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 15 ALL DONE, FINISH UP 1 .SBTTL ALL DONE, FINISH UP 2 3 001470 005765 000000C FINISH: TST GRPON+RWSIZE(R5) ;DID WE LEAVE GRAPHIC MODE TURNED ON? 4 001474 001404 BEQ 10$ ;NO 5 001476 012703 000000G MOV #GOFSEQ,R3 ;YES, SET SEQUENCE TO TURN IT OFF 6 001502 004767 001766 JSR PC,DOTYPE ; AND GO DO IT 7 001506 005765 000000C 10$: TST MRKON+RWSIZE(R5) ;DID WE LEAVE MARK'D REGION TURNED ON? 8 001512 001404 BEQ 20$ ;NO 9 001514 012703 000000G MOV #MOFSEQ,R3 ;YES, SET SEQUENCE TO TURN IT OFF 10 001520 004767 001750 JSR PC,DOTYPE ; AND GO DO IT 11 001524 012765 177777 000000C 20$: MOV #-1,INITFL+RWSIZE(R5) ;NOW WE KNOW WHAT'S ON THE SCREEN 12 001532 004767 000000G SCRDNE::JSR PC,TYPEBC ;FORCE OUT ANY PARTIAL BUFFER 13 001536 005065 000000G CLR OUTDNE(R5) ;CLEAR TERMINAL OUTPUT FLAG 14 001542 000207 RTS PC ;FINALLY WE CAN EXIT 15 16 .GLOBL RWSIZE, GOFSEQ, MOFSEQ, TYPEBC, OUTDNE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 16 OUTPUT SOME TEXT 1 .SBTTL OUTPUT SOME TEXT 2 3 ;+ 4 ; DOTEXT - OUTPUT SOME TEXT. 5 ; 6 ; R1 = CHARACTER COUNT 7 ; R4 -> TEXT BUFFER (RELATIVE "TXSTOR") 8 ; 9 ; JSR PC,DOTEXT 10 ; 11 ; R0 = UNDEFINED 12 ; R1 = UNDEFINED 13 ; R2 = UNDEFINED 14 ; R3 = UNDEFINED 15 ; R4 = UNDEFINED 16 ;- 17 18 001544 066504 000000G DOTEXT: ADD TXSTOR(R5),R4 ;MAKE TEXT POINTER ABSOLUTE 19 001550 010146 MOV R1,-(SP) ;SAVE THE CHARACTER COUNT 20 ;CLC ;SET C=0 FOR NOT OVERPRINT (FROM THE 'ADD') 21 001552 000470 BR 100$ ; AND GO START DOING THAT TEXT... 22 23 001554 012746 036076 10$: MOV #'<*400+'>,-(SP) ;SET TRAILING/LEADING FOR COMPOSE SEQUENCE 24 001560 006300 ASL R0 ;CHANGE 177600-177777 INTO 177400-177776 25 001562 016046 000400G MOV CNV8BT+400(R0),-(SP) ;GET THE CONVERSION CHARACTER PAIR 26 001566 100005 BPL 20$ ;IT IS A COMPOSE SEQUENCE PAIR 27 001570 042716 100000 BIC #100000,(SP) ;IT IS A HEX PAIR, REMOVE THE HEX FLAG 28 001574 012766 055535 000002 MOV #'[*400+'],2(SP) ;SET TRAILING/LEADING FOR HEX PAIR 29 001602 116600 000003 20$: MOVB 3(SP),R0 ;GET THE LEADING CHARACTER 30 001606 004767 000024 JSR PC,30$ ; AND GO OUTPUT IT 31 001612 111600 MOVB (SP),R0 ;GET THE FIRST CHARACTER OF THE PAIR 32 001614 004775 000000C JSR PC,@OUTCHR+RWSIZE(R5) ; AND GO OUTPUT IT 33 001620 000316 SWAB (SP) ;SWITCH THE PAIR AROUND 34 001622 112600 MOVB (SP)+,R0 ;GET THE SECOND CHARACTER OF THE PAIR 35 001624 004775 000000C JSR PC,@OUTCHR+RWSIZE(R5) ; AND GO OUTPUT IT 36 001630 112600 MOVB (SP)+,R0 ;GET THE TRAILING CHARACTER 37 001632 012746 002120' MOV #170$,-(SP) ;SET A RETURN ADDRESS TO CONTINUE PROCESSING 38 001636 005765 000000C 30$: TST SEEALL+RWSIZE(R5) ;SEEING ALL? 39 001642 100002 BPL 40$ ;NO 40 001644 042700 177760 BIC #^C<17>,R0 ;YES, CONVERT TO THE "SEE ALL" SYMBOL 41 .IIF NE '<&17-COSSYM, .ERROR ;THE ABOVE CONVERSION WON'T WORK 42 .IIF NE '>&17-COESYM, .ERROR ;THE ABOVE CONVERSION WON'T WORK 43 .IIF NE '[&17-HXSSYM, .ERROR ;THE ABOVE CONVERSION WON'T WORK 44 .IIF NE ']&17-HXESYM, .ERROR ;THE ABOVE CONVERSION WON'T WORK 45 001650 000175 000000C 40$: JMP @OUTCHR+RWSIZE(R5) ;GO OUTPUT THE CHARACTER AND EXIT 46 47 .GLOBL TXSTOR, CNV8BT, RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 17 OUTPUT SOME TEXT 1 001654 012700 000011 50$: MOV #RETSYM,R0 ;ASSUME SEEING ALL, SET THE SYMBOL 2 001660 011646 MOV (SP),-(SP) ;MORE CHARACTER(S) COMING (& SAVE >=0 FLAG)? 3 001662 001007 BNE 60$ ;YEP, CHECK FOR NEXT 4 001664 010446 MOV R4,-(SP) ;NOPE, COPY CURRENT CHARACTER +1 POINTER 5 001666 166516 000000G SUB TXSTOR(R5),(SP) ; AND MAKE IT RELATIVE 6 001672 022665 000000G CMP (SP)+,ZZ(R5) ;ARE WE AT THE END OF THE BUFFER? 7 001676 103406 BLO 80$ ;NOT AT END, SO NO OVERPRINT 8 001700 000403 BR 70$ ;AT END, CALL IT OVERPRINT 9 10 001702 121427 000012 60$: CMPB (R4),#LF ;IS NEXT A ? 11 001706 001402 BEQ 80$ ;IT IS , ALL IS O.K. 12 001710 005200 70$: INC R0 ;NOT , SET THE OVERPRINT SYMBOL 13 .IIF NE RETSYM+1-OVPSYM, .ERROR ;THE ABOVE WON'T WORK 14 001712 005116 COM (SP) ; AND FLAG OVERPRINT WITH <0 FLAG 15 001714 005765 000000C 80$: TST SEEALL+RWSIZE(R5) ;REALLY SEEING ALL? 16 001720 100002 BPL 90$ ;NO 17 001722 004767 000666 JSR PC,360$ ;GO OUTPUT [OVERPRINT] SYMBOL IF WE CAN 18 001726 004767 000700 90$: JSR PC,370$ ;GO SET HIGHEST COLUMN NUMBER 19 001732 006326 ASL (SP)+ ;WHAT DOES THAT FLAG SAY (C=1 IF OVERPRINT)? 20 001734 040202 100$: BIC R2,R2 ;RESET COLUMN COUNTER (KEEPING C-BIT) 21 001736 016501 000000C MOV BUINDX+RWSIZE(R5),R1 ;RESET MAP POINTER 22 001742 103066 BCC 170$ ;IF C=0 THEN NOT OVERPRINT, JUST CONTINUE 23 001744 005765 000000C TST SEEALL+RWSIZE(R5) ;IT IS OVERPRINT, SEEING ALL? 24 001750 100561 BMI 220$ ;YES, GO TO A NEW LINE 25 001752 005765 000000C TST OVRPOS+RWSIZE(R5) ;ELSE IS THIS A CONTINUATION OVERFLOW LINE? 26 001756 100060 BPL 170$ ;NOPE, JUST CONTINUE 27 001760 000447 BR 150$ ;YEP, START THE LINE WITH "OVRSYM" AGAIN... 28 29 .GLOBL TXSTOR, ZZ, RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 18 OUTPUT SOME TEXT 1 001762 010246 110$: MOV R2,-(SP) ;GET THE CURRENT COLUMN 2 001764 062716 000002 ADD #4-2,(SP) ; AND FUDGE FOR A 4 CHARACTER REPRESENTATION 3 001770 022665 000000C CMP (SP)+,HTSIZ2+RWSIZE(R5) ;ABOUT TO OVERFLOW? 4 001774 103667 BLO 10$ ;NOPE 5 001776 005304 DEC R4 ;YEP, BACK UP SO WE SEE THE CHARACTER AGAIN 6 002000 121427 000015 120$: CMPB (R4),#CR ;AVOID SEQUENCE IF OVERFLOW ON 7 002004 001472 BEQ 190$ ;BRANCH IF 8 002006 012700 000001 MOV #OVRSYM,R0 ;ELSE SET THE OVERFLOW SYMBOL 9 002012 032765 000000G 000000G BIT #ET$TRU,ETYPE(R5) ;TRUNCATING OVERFLOW LINES? 10 002020 001411 BEQ 130$ ;NO, DISPLAY OVERFLOW ON NEXT LINE 11 002022 005204 INC R4 ;YES, EAT THE CHARACTER 12 002024 004767 000564 JSR PC,360$ ;OUTPUT OVERFLOW SYMBOL IF NEEDED 13 002030 020265 000000C CMP R2,OVRPOS+RWSIZE(R5) ;A NEW "OVRSYM" POSITION? 14 002034 101431 BLOS 170$ ;NOPE, JUST CONTINUE 15 002036 010265 000000C MOV R2,OVRPOS+RWSIZE(R5) ;YEP, SET THE NEW HIGHER POSITION 16 002042 000426 BR 170$ ; THEN CONTINUE 17 18 002044 005216 130$: INC (SP) ;REMEMBER TO GET THE CHARACTER AGAIN 19 002046 005765 000000C TST SEEALL+RWSIZE(R5) ;SEEING ALL? 20 002052 100002 BPL 140$ ;NO 21 002054 004775 000000C JSR PC,@OUTCHR+RWSIZE(R5) ;YES, PUT OVERFLOW SYMBOL AT LINE'S END 22 002060 004767 000546 140$: JSR PC,370$ ;GO SET HIGHEST COLUMN NUMBER 23 002064 005002 CLR R2 ;SIMULATE CARRIAGE RETURN 24 002066 004767 000554 JSR PC,NEWLIN ; AND GO TO THE NEXT LINE 25 002072 103513 BCS 240$ ;BRANCH IF AT BOTTOM OF SCREEN 26 002074 005365 000000C DEC OVRPOS+RWSIZE(R5) ;INDICATE CONTINUATION OVERFLOW LINE 27 002100 012700 000001 150$: MOV #OVRSYM,R0 ;SET OVRFLOW SYMBOL FOR CONTINUATION LINE 28 002104 004775 000000C JSR PC,@OUTCHR+RWSIZE(R5) ; AND GO OUTPUT IT 29 002110 116500 000000C MOVB SEEALL+RWSIZE(R5),R0 ;FOLLOW IT WITH OR SYMBOL 30 002114 004775 000000C 160$: JSR PC,@OUTCHR+RWSIZE(R5) ;OUTPUT A CHARACTER 31 002120 020465 000000C 170$: CMP R4,CURPOS+RWSIZE(R5) ;IS THIS WHERE THE CURSOR BELONGS? 32 002124 001015 BNE 180$ ;BRANCH IF NOT 33 002126 010165 000000C MOV R1,CURABS+RWSIZE(R5) ;SAVE THE MAP POSITION 34 002132 016565 000000C 000000C MOV BUSTRT+RWSIZE(R5),CURLIN+RWSIZE(R5) ;SAVE THE LINE NUMBER 35 002140 010265 000000C MOV R2,CURCOL+RWSIZE(R5) ;SAVE THE COLUMN NUMBER 36 002144 020265 000000C CMP R2,HTSIZE+RWSIZE(R5) ;IS THE COLUMN NUMBER ILLEGAL? 37 002150 103403 BLO 180$ ;NOPE 38 002152 016565 000000C 000000C MOV HTSIZ1+RWSIZE(R5),CURCOL+RWSIZE(R5) ;YEP, SO FIX IT 39 002160 005316 180$: DEC (SP) ;KNOCK DOWN CHARACTER COUNT 40 002162 100535 BMI 310$ ;BRANCH IF NO MORE, GO DO END OF SCREEN 41 002164 020265 000000C CMP R2,HTSIZ2+RWSIZE(R5) ;ABOUT TO OVERFLOW? 42 002170 103303 BHIS 120$ ;BRANCH IF TRUE 43 002172 112400 190$: MOVB (R4)+,R0 ;GET A BYTE OF TEXT 44 002174 100672 BMI 110$ ;IT'S IN THE "NEGATIVE" RANGE... 45 46 .GLOBL RWSIZE, ET$TRU, ETYPE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 19 OUTPUT SOME TEXT 1 002176 020027 000177 CMP R0,#DEL ;IS IT ? 2 002202 001473 BEQ 270$ ;BRANCH IF YES (TREAT AS CONTROL CHAR) 3 002204 020027 000040 CMP R0,#SPACE ;IS IT SPECIAL? 4 002210 103341 BHIS 160$ ;BRANCH IF NOT 5 002212 020027 000011 CMP R0,#TAB ;IS IT A ? 6 002216 001445 BEQ 250$ ;BRANCH IF IT IS 7 002220 103464 BLO 270$ ;BRANCH IF MUST BE REGULAR CONTROL CHAR 8 002222 020027 000015 CMP R0,#CR ;IS IT A ? 9 002226 001612 BEQ 50$ ;YES, GO PROCESS 10 002230 101060 BHI 270$ ;BRANCH IF .GT. , MAY BE ... 11 002232 162700 000012 SUB #LF,R0 ;R0=0 FOR , R0=1 FOR , R0=2 FOR 12 002236 006300 ASL R0 ;R0=0 FOR , R0=2 FOR , R0=4 FOR 13 002240 005765 000000C TST SEEALL+RWSIZE(R5) ;SEEING ALL? 14 002244 100024 BPL 230$ ;NO 15 002246 005720 TST (R0)+ ;YES, R0=2 FOR , 4 FOR , 6 FOR 16 .IIF NE LFDSYM-2, .ERROR ;THE ABOVE WON'T WORK 17 .IIF NE VTBSYM-4, .ERROR ;THE ABOVE WON'T WORK 18 .IIF NE FFDSYM-6, .ERROR ;THE ABOVE WON'T WORK 19 002250 010246 MOV R2,-(SP) ;AT LEFT MARGIN (AND SAVE CURRENT COLUMN)? 20 002252 001013 BNE 200$ ;NOPE, TRY TO OUTPUT THE SYMBOL 21 002254 005765 000000C TST RTMOST+RWSIZE(R5) ;YEP, WAS ANYTHING OUTPUT ON THIS LINE? 22 002260 001410 BEQ 200$ ;NOTHING EVER OUTPUT, SO TRY THE SYMBOL 23 002262 020027 000002 CMP R0,#LFDSYM ;SOMETHING OUTPUT, IS IT ? 24 002266 001411 BEQ 210$ ;JUST GO TO THE NEW LINE IF 25 002270 004767 000352 JSR PC,NEWLIN ; OR , GO TO THE NEXT LINE 26 002274 012602 MOV (SP)+,R2 ;RESTORE CORRECT CURRENT COLUMN (A ZERO...) 27 002276 103513 BCS 330$ ;BRANCH IF AT BOTTOM OF SCREEN 28 002300 010246 MOV R2,-(SP) ;RE-SAVE CORRECT CURRENT COLUMN (A ZERO...) 29 002302 004767 000306 200$: JSR PC,360$ ;GO OUTPUT THE SYMBOL IF WE CAN 30 002306 004767 000320 JSR PC,370$ ;GO SET HIGHEST COLUMN NUMBER 31 002312 012602 210$: MOV (SP)+,R2 ;RESTORE TO CORRECT CURRENT COLUMN 32 002314 005000 220$: CLR R0 ;ONLY DO A SINGLE NEW LINE 33 002316 004767 000324 230$: JSR PC,NEWLIN ;HANDLE A NEW SCOPE LINE 34 002322 103501 240$: BCS 330$ ;BRANCH IF AT BOTTOM OF SCREEN 35 002324 005300 DEC R0 ;KEEP COUNT FOR 'S AND 'S 36 002326 100674 BMI 170$ ;BRANCH IF DONE WITH CHAR 37 002330 000772 BR 230$ ; ELSE CONTINUE 38 39 .GLOBL RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 20 OUTPUT SOME TEXT 1 002332 016500 000000C 250$: MOV SEEALL+RWSIZE(R5),R0 ;GET STARTING & CHECK SEEING ALL 2 002336 100002 BPL 260$ ;NOT SEEING ALL, USE THE 3 002340 012700 000007 MOV #TABSYM,R0 ;SEEING ALL, USE SYMBOL INITIALLY 4 002344 004775 000000C 260$: JSR PC,@OUTCHR+RWSIZE(R5) ;OUTPUT THE CHARACTER 5 002350 030227 000007 BIT R2,#7 ;AT A TAB STOP? 6 002354 001661 BEQ 170$ ;DONE WITH THE TAB IF SO 7 002356 020265 000000C CMP R2,HTSIZ2+RWSIZE(R5) ;ELSE ABOUT TO OVERFLOW LINE? 8 002362 103256 BHIS 170$ ;YES, QUIT 9 002364 116500 000000C MOVB SEEALL+RWSIZE(R5),R0 ;FOLLOW WITH OR SYMBOL 10 002370 000765 BR 260$ ; AND LOOP... 11 12 002372 012746 000044 270$: MOV #'$,-(SP) ;GUESS AT (USE "$") 13 002376 005765 000000C TST SEEALL+RWSIZE(R5) ;SEEING ALL? 14 002402 100002 BPL 280$ ;NO 15 002404 012716 000017 MOV #ESCSYM,(SP) ;YES, USE THIS SYMBOL FOR 16 002410 020027 000033 280$: CMP R0,#ESC ;GOOD GUESS? 17 002414 001416 BEQ 300$ ;YES, GOES AS SPECIFIED 18 002416 062700 000100 ADD #100,R0 ;NO, PUT CHARACTER INTO RANGE 19 002422 042700 177600 BIC #^C<177>,R0 ; AND MASK IT FOR SAFETY ( CASE) 20 002426 010016 MOV R0,(SP) ;SAVE MODIFIED CHARACTER 21 002430 012700 000136 MOV #'^,R0 ;SET UP ARROW AS CONTROL CHARACTER FLAG 22 002434 005765 000000C TST SEEALL+RWSIZE(R5) ;SEEING ALL? 23 002440 100002 BPL 290$ ;NO 24 002442 012700 000003 MOV #CTLSYM,R0 ;YES, USE THE CONTROL CHAR FLAG SYMBOL 25 002446 004775 000000C 290$: JSR PC,@OUTCHR+RWSIZE(R5) ;OUTPUT CONTROL CHARACTER FLAG 26 002452 012600 300$: MOV (SP)+,R0 ;GET THE CHARACTER BACK 27 002454 000617 BR 160$ ; AND CONTINUE WITH MODIFIED CHARACTER 28 29 .GLOBL RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 21 OUTPUT SOME TEXT 1 002456 166504 000000G 310$: SUB TXSTOR(R5),R4 ;MAKE TEXT POINTER RELATIVE AGAIN 2 002462 020465 000000G CMP R4,ZZ(R5) ;AT END OF BUFFER NOW? 3 002466 103417 BLO 330$ ;NOPE 4 002470 012700 000005 MOV #EOBSYM,R0 ;YEP, SET END OF BUFFER W/O SYMBOL 5 002474 005765 000000G TST FFFLAG(R5) ;DOES BUFFER END WITH A ? 6 002500 001401 BEQ 320$ ;NO 7 002502 005200 INC R0 ;YES, SET END OF BUFFER W/ SYMBOL 8 .IIF NE EOBSYM+1-FFDSYM, .ERROR ;THE ABOVE WON'T WORK 9 002504 004767 000104 320$: JSR PC,360$ ;GO OUTPUT END OF BUFFER SYMBOL IF WE CAN 10 002510 005765 000000G TST EOFLAG(R5) ;AT END OF FILE NOW? 11 002514 001404 BEQ 330$ ;NOPE 12 002516 012700 000005 MOV #EOBSYM,R0 ;YEP, SET END OF BUFFER SYMBOL 13 002522 004767 000066 JSR PC,360$ ; AND GO OUTPUT IT IF WE CAN 14 002526 016516 000000C 330$: MOV BUSTRT+RWSIZE(R5),(SP) ;SAVE ENDING LINE # (OVER CHAR COUNT) 15 002532 005765 000000C TST HLDFLG+RWSIZE(R5) ;ARE WE FULLY HOLDING THE SCREEN? 16 002536 100411 BMI 340$ ;YES, NEVER USE ERASE TO END-OF-SCREEN 17 002540 005765 000000C TST SCROLN+RWSIZE(R5) ;ARE WE IN SCROLLING MODE? 18 002544 001006 BNE 340$ ;YES, CAN'T USE ERASE TO END-OF-SCREEN 19 002546 016503 000000G MOV CRTYPE(R5),R3 ;ELSE GET THE SCOPE TYPE 20 002552 127327 000000G 000200 CMPB @EOSSEQ(R3),#200 ;DOES EOS SEQUENCE EXIST? 21 002560 001006 BNE 350$ ;YES, SO GO USE IT 22 002562 004767 000204 340$: JSR PC,NEWLIX ;CALL TO BLANK ONE LINE 23 002566 103375 BCC 340$ ;LOOP IF MORE TO DO... 24 002570 012665 000000C MOV (SP)+,BUSTRT+RWSIZE(R5) ;DONE, RESTORE ORIGINAL ENDING LINE # 25 002574 000207 RTS PC ; AND EXIT 26 27 002576 005726 350$: TST (SP)+ ;JUNK ENDING LINE # 28 002600 012703 000000G MOV #EOSSEQ,R3 ;SET EOS SEQUENCE FOR BLANKING 29 002604 016500 000000G MOV TXSTOR(R5),R0 ;POINT TO END OF SCREEN MAP 30 002610 000175 000000C JMP @OUTBLN+RWSIZE(R5) ;CALL BLANKER FOR REST OF SCREEN, THEN EXIT 31 32 002614 016503 000000C 360$: MOV OVRPOS+RWSIZE(R5),R3 ;GET CURRENT "OVRSYM" POSITION +1 33 002620 005303 DEC R3 ;FIND REAL POSITION (NONE & CONTINUATION <0) 34 002622 020203 CMP R2,R3 ;ARE WE AT OR PAST "OVRSYM"? 35 002624 103007 BHIS 380$ ;YES, CAN'T OUTPUT MORE ON THIS LINE 36 002626 000175 000000C JMP @OUTCHR+RWSIZE(R5) ;NO, OUTPUT THE CHARACTER, THEN EXIT 37 38 002632 020265 000000C 370$: CMP R2,RTMOST+RWSIZE(R5) ;CHECK RIGHTMOST COLUMN ON LINE 39 002636 101402 BLOS 380$ ;BRANCH IF NOT AT IT 40 002640 010265 000000C MOV R2,RTMOST+RWSIZE(R5) ;ELSE SAVE HIGHEST FOR CLEARING REMAINDER 41 002644 000207 380$: RTS PC ;EXIT 42 43 .GLOBL TXSTOR, ZZ, FFFLAG, EOFLAG, RWSIZE, CRTYPE, EOSSEQ SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 22 GO TO A NEW LINE 1 .SBTTL GO TO A NEW LINE 2 3 ;+ 4 ; NEWLIN - PROCESS END OF LINE, GO TO THE NEXT LINE. 5 ; 6 ; R2 = COLUMN # 7 ; 8 ; JSR PC,NEWLIN 9 ; 10 ; R1 -> NEW LINE IN MAP 11 ; R3 = UNDEFINED 12 ; 13 ; IF C=0 ('BCC') THEN NOT BEYOND BOTTOM OF SCREEN 14 ; IF C=1 ('BCS') THEN BEYOND BOTTOM OF SCREEN 15 ;- 16 17 .ENABL LSB 18 19 002646 010046 NEWLIN: MOV R0,-(SP) ;SAVE R0 20 002650 010246 MOV R2,-(SP) ;SAVE R2 (COLUMN #) 21 002652 016500 000000C 10$: MOV BUINDX+RWSIZE(R5),R0 ;CALCULATE END OF 22 002656 066500 000000C ADD HTSIZE+RWSIZE(R5),R0 ; LINE POINTER 23 002662 020065 000000G CMP R0,TXSTOR(R5) ;ARE WE OFF END OF SCREEN MAP? 24 002666 101402 BLOS 20$ ;NOPE 25 002670 016500 000000G MOV TXSTOR(R5),R0 ;YEP, RESET TO WITHIN MAP 26 002674 012703 000000G 20$: MOV #EOLSEQ,R3 ;SET SEQUENCE TO CLEAR ONLY THIS LINE 27 002700 004775 000000C JSR PC,@OUTBLN+RWSIZE(R5) ; AND ERASE THE REMAINDER OF LINE IF ANY 28 002704 010065 000000C MOV R0,BUINDX+RWSIZE(R5) ;UPDATE TO NEW LINE IN MAP 29 002710 005265 000000C INC BUSTRT+RWSIZE(R5) ; AND GO TO NEXT LINE # 30 002714 010001 MOV R0,R1 ;SET NEW LINE'S MAP POINTER 31 002716 005065 000000C CLR OVRPOS+RWSIZE(R5) ;NO "OVRSYM" ON NEW LINE YET 32 002722 005065 000000C CLR RTMOST+RWSIZE(R5) ;CLEAR RIGHTMOST COLUMN FOR NEW LINE 33 002726 005002 CLR R2 ; AND START FROM COLUMN 0 34 002730 020216 30$: CMP R2,(SP) ;UP TO OLD COLUMN POSITION? 35 002732 103406 BLO 50$ ;NOPE, OUTPUT SOME FILL 36 002734 012602 40$: MOV (SP)+,R2 ;RESTORE R2 (COLUMN #) 37 002736 012600 MOV (SP)+,R0 ;RESTORE R0 38 002740 026565 000000C 000000C CMP VTSIZ1+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;CMP (#LINES-1) VS (LINE#) 39 ;BHIS ;NOT OFF SCREEN, EXIT C=0 ('BHIS'='BCC') 40 ;BLO ;OFF SCREEN, EXIT C=1 ('BLO'='BCS') 41 002746 000207 RTS PC ;EXIT WITH C-BIT INDICATION 42 43 002750 026565 000000C 000000C 50$: CMP VTSIZ1+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;ALREADY OFF SCREEN? 44 002756 103766 BLO 40$ ;YES, FORGET IT 45 002760 116500 000000C MOVB SEEALL+RWSIZE(R5),R0 ;SET OR SYMBOL 46 002764 004775 000000C JSR PC,@OUTCHR+RWSIZE(R5) ; AND OUTPUT IT 47 002770 000757 BR 30$ ;GO CHECK AGAIN... 48 49 .GLOBL RWSIZE, TXSTOR, EOLSEQ SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 23 GO TO A NEW LINE 1 ;+ 2 ; NEWLIX - SPECIAL PROCESS END OF LINE FOR BLANKING REST OF SCREEN. 3 ; 4 ; R2 = COLUMN # 5 ; 6 ; JSR PC,NEWLIX 7 ; 8 ; R1 -> NEW LINE IN MAP 9 ; R2 = 0 (COLUMN #) 10 ; R3 = UNDEFINED 11 ; 12 ; IF C=0 ('BCC') THEN NOT BEYOND BOTTOM OF SCREEN 13 ; IF C=1 ('BCS') THEN BEYOND BOTTOM OF SCREEN 14 ;- 15 16 002772 010046 NEWLIX: MOV R0,-(SP) ;SAVE R0 17 002774 005046 CLR -(SP) ;NEW NEXT COLUMN # IS ZERO 18 002776 000725 BR 10$ ;NOW GO DO IT 19 20 .DSABL LSB SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 24 OUTPUT A CHARACTER 1 .SBTTL OUTPUT A CHARACTER 2 3 ;+ 4 ; VTCHAR - REAL OUTPUT OF A CHARACTER. 5 ; 6 ; R0 = CHARACTER 7 ; R1 -> MAP 8 ; R2 = COLUMN # 9 ; R4 -> TEXT (+1) 10 ; 11 ; JSR PC,VTCHAR 12 ; 13 ; R0 = UNDEFINED 14 ; R1 -> MAP (UPDATED) 15 ; R2 = COLUMN # (UPDATED) 16 ; R3 = UNDEFINED 17 ;- 18 19 003000 020465 000000C VTCHAR: CMP R4,MRKHGH+RWSIZE(R5) ;ABOVE MARK'D REGION? 20 003004 101005 BHI 10$ ;YES 21 003006 020465 000000C CMP R4,MRKLOW+RWSIZE(R5) ;BELOW THE MARK'D REGION? 22 003012 101402 BLOS 10$ ;YES 23 003014 052700 000200 BIS #200,R0 ;WITHIN MARK'D REGION, FLAG IT 24 003020 120021 10$: CMPB R0,(R1)+ ;ARE CHARACTERS THE SAME? 25 003022 001510 BEQ FCHAR ;BRANCH IF YES, DON'T SEND IT! 26 003024 026565 000000C 000000C CMP BUSTRT+RWSIZE(R5),PRELIN+RWSIZE(R5) ;AT CORRECT LINE? 27 003032 001025 BNE 40$ ;NO, DO DIRECT CURSOR ADDRESSING 28 003034 010203 MOV R2,R3 ;YES, GET DESIRED COLUMN # 29 003036 166503 000000C SUB PRECOL+RWSIZE(R5),R3 ; AND FIND DELTA CHANGE 30 003042 001423 BEQ 50$ ;ABSOLUTELY CORRECT, JUST DO CHARACTER OUTPUT 31 003044 010146 MOV R1,-(SP) ;ELSE SAVE BUMPED MAP POSITION 32 003046 016501 000000G MOV CRTYPE(R5),R1 ;GET THE SCOPE TYPE 33 003052 020361 000000G CMP R3,POSTBL(R1) ;WITHIN RANGE FOR THE SPEED-UP? 34 003056 101012 BHI 30$ ;NO, DO DIRECT ADDRESSING 35 003060 011601 MOV (SP),R1 ;YES, GET BACK BUMPED MAP POSITION 36 003062 110041 MOVB R0,-(R1) ; AND STORE CHARACTER IN THE MAP 37 003064 160302 SUB R3,R2 ;BACK UP THE COLUMN NUMBER 38 003066 160301 SUB R3,R1 ;BACK UP THE MAP POINTER 39 003070 112100 20$: MOVB (R1)+,R0 ;GET BACK A CHARACTER FROM MAP 40 003072 020116 CMP R1,(SP) ;UP TO OUR POSITION YET? 41 003074 103003 BHIS 30$ ;YES, DONE 42 003076 004767 000010 JSR PC,50$ ;NO, GO OUTPUT THE CHARACTER 43 003102 000772 BR 20$ ; AND LOOP... 44 45 003104 012601 30$: MOV (SP)+,R1 ;RESTORE BUMPED MAP POSITION 46 003106 004767 000412 40$: JSR PC,SETCUR ;POSITION THE CURSOR 47 48 .GLOBL RWSIZE, CRTYPE, POSTBL SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 25 OUTPUT A CHARACTER 1 003112 005046 50$: CLR -(SP) ;GUESS AT DESIRING MARK'D REGION OFF (0) 2 003114 110061 177777 MOVB R0,-1(R1) ;STORE THE CHARACTER 3 003120 100003 BPL 60$ ;NOT FLAGGED 4 003122 042700 177600 BIC #^C<177>,R0 ;FLAGGED, TRIM IT BACK AGAIN 5 003126 005116 COM (SP) ;WE WANT MARK'D REGION ON 6 003130 022665 000000C 60$: CMP (SP)+,MRKON+RWSIZE(R5) ;CONDITIONED FOR MARK'D REGION? 7 003134 001411 BEQ 80$ ;YES, JUST CONTINUE 8 003136 012703 000000G MOV #MOFSEQ,R3 ;NO, GUESS AT TURNING OFF MARK'D REGION 9 003142 005165 000000C COM MRKON+RWSIZE(R5) ;NOW FLIP THE FLOP 10 003146 001402 BEQ 70$ ;MARK'D REGION NOW OFF, SO TURN IT OFF 11 003150 012703 000000G MOV #MONSEQ,R3 ;MARK'D REGION NOW ON, SET TO TURN IT ON 12 003154 004767 000314 70$: JSR PC,DOTYPE ;GO OUTPUT THE MARK'D REGION ON/OFF SEQUENCE 13 003160 005046 80$: CLR -(SP) ;GUESS AT DESIRING GRAPHICS OFF (0) 14 003162 020027 000040 CMP R0,#SPACE ;NORMAL CHARACTER? 15 003166 103006 BHIS 90$ ;YES 16 003170 016503 000000G MOV CRTYPE(R5),R3 ;NO, GET THE SCOPE TYPE 17 003174 066300 000000G ADD GRPTBL(R3),R0 ;FIND INDEX INTO CORRECT SYMBOL TABLE 18 003200 114000 MOVB -(R0),R0 ;GET THE CORRECT GRAPHICS CHARACTER 19 003202 005116 COM (SP) ;WE WANT GRAPHICS ON 20 003204 022665 000000C 90$: CMP (SP)+,GRPON+RWSIZE(R5) ;CONDITIONED FOR NOT GRAPHICS? 21 003210 001411 BEQ 110$ ;YES, JUST CONTINUE 22 003212 012703 000000G MOV #GOFSEQ,R3 ;NO, GUESS AT TURNING OFF GRAPHICS 23 003216 005165 000000C COM GRPON+RWSIZE(R5) ;NOW FLIP THE FLOP 24 003222 001402 BEQ 100$ ;GRAPHICS NOW OFF, SO TURN IT OFF 25 003224 012703 000000G MOV #GONSEQ,R3 ;GRAPHICS NOW ON, SET TO TURN IT ON 26 003230 004767 000240 100$: JSR PC,DOTYPE ;GO OUTPUT THE GRAPHICS ON/OFF SEQUENCE 27 28 .GLOBL RWSIZE, MOFSEQ, MONSEQ, CRTYPE, GRPTBL, GOFSEQ, GONSEQ SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 26 OUTPUT A CHARACTER 1 003234 004767 000000G 110$: JSR PC,TYPEBF ;SEND THE CHARACTER 2 003240 005265 000000C INC PRECOL+RWSIZE(R5) ;INDICATE CURSOR MOVED 1 TO THE RIGHT 3 4 ;+ 5 ; FCHAR - FAKE OUTPUT OF A CHARACTER. 6 ; 7 ; R2 = COLUMN # 8 ; 9 ; JSR PC,FCHAR 10 ; 11 ; R2 = COLUMN # (UPDATED) 12 ;- 13 14 003244 005202 FCHAR: INC R2 ;ADVANCE COLUMN NUMBER 15 003246 000207 RTS PC ; THEN EXIT 16 17 ;+ 18 ; CCHAR - BUFFER ALIGNMENT OUTPUT OF A CHARACTER. 19 ; 20 ; R0 = CHARACTER 21 ; R1 -> CHECKING BUFFER 22 ; R2 = COLUMN # 23 ; 24 ; JSR PC,CCHAR 25 ; 26 ; R1 -> CHECKING BUFFER (UPDATED) 27 ; R2 = COLUMN # (UPDATED) 28 ;- 29 30 003250 110021 CCHAR: MOVB R0,(R1)+ ;SAVE CHARACTER IN CHECKING BUFFER 31 003252 000774 BR FCHAR ;GO ADVANCE COLUMN AND EXIT 32 33 .GLOBL TYPEBF, RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 27 BLANK REMAINDER OF LINE/SCREEN 1 .SBTTL BLANK REMAINDER OF LINE/SCREEN 2 3 ;+ 4 ; VTBLNK - REAL OUTPUT BLANK REST OF LINE. 5 ; 6 ; R0 = MAP ADDRESS TO STOP AT 7 ; R2 = COLUMN # 8 ; R3 -> CLEARING SEQUENCE 9 ; 10 ; JSR PC,VTBLNK 11 ;- 12 13 003254 010146 VTBLNK: MOV R1,-(SP) ;SAVE 14 003256 010246 MOV R2,-(SP) ; WORK 15 003260 010446 MOV R4,-(SP) ; REGS 16 003262 010046 MOV R0,-(SP) ;SAVE ADDRESS TO STOP AT 17 003264 020265 000000C CMP R2,RTMOST+RWSIZE(R5) ;CHECK FOR RIGHTMOST USED COLUMN 18 003270 103002 BHIS 10$ ;R2 IS RIGHT 19 003272 016502 000000C MOV RTMOST+RWSIZE(R5),R2 ;ELSE UPDATE R2 20 003276 016501 000000C 10$: MOV BUINDX+RWSIZE(R5),R1 ;GET ADDRESS OF CURRENT LINE 21 003302 060201 ADD R2,R1 ;POINT TO WHERE WE ARE IN BUFFER 22 003304 005004 CLR R4 ;GUESS AT OFF THE END OF SCREEN 23 003306 026565 000000C 000000C CMP VTSIZ1+RWSIZE(R5),BUSTRT+RWSIZE(R5) ;REALLY OFF THE SCREEN? 24 003314 103401 BLO 20$ ;YES 25 003316 005104 COM R4 ;NO, FLAG TO DO CLEARING SEQUENCE ONCE 26 003320 020116 20$: CMP R1,(SP) ;ARE WE AT END YET? 27 003322 103030 BHIS 60$ ;BRANCH IF YES 28 003324 030127 000001 BIT R1,#1 ;ON WORD BOUNDARY? 29 003330 001413 BEQ 40$ ;BRANCH IF YES 30 003332 122721 000040 CMPB #SPACE,(R1)+ ;IS THIS A BLANK ALREADY? 31 003336 001770 BEQ 20$ ;BRANCH IF YES 32 003340 112761 000040 177777 MOVB #SPACE,-1(R1) ;SET IT TO A BLANK 33 003346 005204 INC R4 ;HAVE WE DONE THE SEQUENCE? 34 003350 001363 BNE 20$ ;BRANCH IF ALREADY DONE 35 003352 004767 000112 30$: JSR PC,DOSEQ ;CLEAR LINE OR SCREEN... 36 003356 000760 BR 20$ ; THEN CONTINUE 37 38 003360 022721 40$: CMP (PC)+,(R1)+ ;ARE THESE 39 003362 040 040 .BYTE SPACE,SPACE ; BLANKS ALREADY? 40 003364 001405 BEQ 50$ ;YES 41 003366 012761 020040 177776 MOV #SPACE*400+SPACE,-2(R1) ;SET LAST TWO TO BLANKS 42 003374 005204 INC R4 ;HAVE WE DONE THE SEQUENCE? 43 003376 001765 BEQ 30$ ;BRANCH IF WE NEED TO 44 003400 020116 50$: CMP R1,(SP) ;ARE WE AT END YET? 45 003402 103766 BLO 40$ ;NOT YET 46 003404 012600 60$: MOV (SP)+,R0 ;RESTORE THE LIMIT 47 003406 012604 MOV (SP)+,R4 ;RESTORE 48 003410 012602 MOV (SP)+,R2 ; WORK 49 003412 012601 MOV (SP)+,R1 ; REGS 50 003414 000207 RTS PC ;EXIT 51 52 .GLOBL RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 28 BLANK REMAINDER OF LINE/SCREEN 1 ;+ 2 ; FBLNK - FAKE BLANK REST OF LINE (FOR BUFFER ALIGNMENT). 3 ; 4 ; JSR PC,FBLNK 5 ;- 6 7 003416 012765 003244' 000000C FBLNK: MOV #FCHAR,OUTCHR+RWSIZE(R5) ;RESET TO FAKE OUTPUT ROUTINE 8 003424 000207 RTS PC ; AND EXIT 9 10 .SBTTL SET SUBROUTINE ADDRESSES, ETC. 11 12 ;+ 13 ; SETJSR - SET SUBROUTINE ADDRESSES, ETC. 14 ; 15 ; JSR R4,SETJSR 16 ; .WORD FTRANS -OR- RTRANS 17 ; 18 ; R2 = ORIGINAL "BUSTRT" VALUE 19 ; R3 -> INTO "BUSTRT", "NUMCHR" @ "NUMCHR" 20 ;- 21 22 003426 012703 000000C SETJSR: MOV #OUTCHR+RWSIZE,R3 ;GET ADDRESS OF FIRST VECTOR 23 003432 060503 ADD R5,R3 ; ABSOLUTELY 24 003434 012402 MOV (R4)+,R2 ;GET POINTER TO THE DESIRED TABLE 25 003436 012223 MOV (R2)+,(R3)+ ;SET "OUTPUT A CHARACTER" ROUTINE 26 003440 012223 MOV (R2)+,(R3)+ ;SET "PROCESS END OF LINE" ROUTINE 27 .IIF NE OUTCHR+2-OUTBLN, .ERROR ;THE ABOVE WON'T WORK 28 003442 012702 000013 MOV #/2,R2 ;SET # WORDS TO CLEAR NOW 29 .IIF NE OUTBLN+2-JSRSRT, .ERROR ;THE ABOVE WON'T WORK 30 003446 005023 10$: CLR (R3)+ ;CLEAR A WORD 31 003450 077202 SOB R2,10$ ; AND LOOP... 32 003452 011302 MOV (R3),R2 ;SAVE ORIGINAL "BUSTRT" VALUE 33 .IIF NE JSREND-BUSTRT, .ERROR ;THE ABOVE WON'T WORK 34 003454 005023 CLR (R3)+ ; THEN CLEAR CURRENT LINE NUMBER 35 003456 000204 RTS R4 ;EXIT POINTING @ "NUMCHR" 36 .IIF NE BUSTRT+2-NUMCHR, .ERROR ;THE ABOVE WON'T WORK 37 38 003460 003244' 003416' FTRANS: .WORD FCHAR, FBLNK ;BUFFER ALIGNMENT SUBROUTINES 39 40 003464 003000' 003254' RTRANS: .WORD VTCHAR, VTBLNK ;REAL OUTPUT SUBROUTINES 41 42 .GLOBL RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 29 DO SEQUENCES 1 .SBTTL DO SEQUENCES 2 3 ;+ 4 ; DOSEQ - DO SOME SEQUENCE AFTER POSITIONING CURSOR. 5 ; 6 ; R2 = COLUMN # 7 ; R3 -> SEQUENCE 8 ; 9 ; JSR PC,DOSEQ 10 ;- 11 12 003470 004767 000030 DOSEQ: JSR PC,SETCUR ;SET UP THE CURSOR 13 14 ;+ 15 ; DOTYPE - DO SOME SEQUENCE. 16 ; 17 ; R3 -> SEQUENCE 18 ; 19 ; JSR PC,DOTYPE 20 ;- 21 22 .ENABL LSB 23 24 003474 010046 DOTYPE::MOV R0,-(SP) ;SAVE R0 25 003476 010346 MOV R3,-(SP) ; AND R3 26 003500 066503 000000G ADD CRTYPE(R5),R3 ;FIND THE SEQUENCE'S POINTER 27 003504 011303 MOV (R3),R3 ; AND GET THE REAL POINTER 28 003506 112300 10$: MOVB (R3)+,R0 ;GET A CHARACTER 29 003510 120027 000200 CMPB R0,#200 ;THE ENDING 200? 30 003514 001424 BEQ 30$ ;YES 31 003516 004767 000000G JSR PC,TYPEBF ;ELSE BUFFER IT 32 003522 000771 BR 10$ ; AND CONTINUE 33 34 .GLOBL CRTYPE, TYPEBF SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 30 POSITION THE CURSOR 1 .SBTTL POSITION THE CURSOR 2 3 ;+ 4 ; SETCUR - POSITION THE CURSOR. 5 ; 6 ; R2 = COLUMN # 7 ; 8 ; JSR PC,SETCUR 9 ;- 10 11 003524 010046 SETCUR: MOV R0,-(SP) ;SAVE R0 12 003526 016500 000000C MOV BUSTRT+RWSIZE(R5),R0 ;GET LINE (ROW) NUMBER 13 003532 020065 000000C CMP R0,PRELIN+RWSIZE(R5) ;IS THIS THE RIGHT LINE? 14 003536 001003 BNE 20$ ;BRANCH IF NOT, MUST SET CURSOR 15 003540 020265 000000C CMP R2,PRECOL+RWSIZE(R5) ;IS THIS THE RIGHT COLUMN? 16 003544 001411 BEQ 40$ ;BRANCH IF SO, SO NEED TO POSITION 17 003546 010346 20$: MOV R3,-(SP) ;SAVE R3 18 003550 004767 000000G JSR PC,DIRECT ;CALL FOR DIRECT CURSOR ADDRESSING 19 003554 016565 000000C 000000C MOV BUSTRT+RWSIZE(R5),PRELIN+RWSIZE(R5) ;SAVE CURSOR POS ON SCREEN 20 003562 010265 000000C MOV R2,PRECOL+RWSIZE(R5) ; BOTH LINE (ROW) AND COLUMN 21 003566 012603 30$: MOV (SP)+,R3 ;RESTORE R3 22 003570 012600 40$: MOV (SP)+,R0 ;RESTORE R0 23 003572 000207 RTS PC ; THEN EXIT 24 25 .DSABL LSB 26 27 .GLOBL RWSIZE, DIRECT 28 29 .IF EQ I$$MUL 30 31 .SBTTL MULTIPLY BY HORIZONTAL SIZE 32 33 MULHSZ: MOV HTSIZE+RWSIZE(R5),-(SP) ;GET THE MULTIPLIER 34 MOV R1,-(SP) ;SAVE THE MULTIPLICAND 35 CLR R1 ;START ANSWER OFF AS A ZERO 36 10$: ASR 2(SP) ;BIT EXIST IN MULTIPLIER? 37 BCC 30$ ;NOPE 38 ADD (SP),R1 ;YEP, SO ADD IN MULTIPLICAND 39 20$: ASL (SP) ;SHIFT MULTIPLICAND 1 LEFT 40 BR 10$ ; AND LOOP 41 42 30$: BNE 20$ ;MORE TO COME, CONTINUE 43 CMP (SP)+,(SP)+ ;POP THE STACK ITEMS 44 RTS PC ; AND EXIT 45 46 .GLOBL RWSIZE 47 48 .ENDC ;EQ I$$MUL SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 31 HANDLE :W COMMANDS (PARAMETER READ/SET) 1 .SBTTL HANDLE :W COMMANDS (PARAMETER READ/SET) 2 3 .ENABL LSB 4 5 003574 000167 000000' 10$: JMP SCRINS ;OFF TO INSERT PROCESSING... 6 7 003600 001427 20$: BEQ 60$ ;SETTING "SEEALL" (+3) 8 003602 020027 000005 CMP R0,#5 ;"MARK" (+4) OR "HOLD" (+5)? 9 003606 103421 BLO 50$ ;SETTING "MARK" (+4) 10 003610 001415 BEQ 40$ ;SETTING "HOLD" (+5) 11 003612 020027 000007 CMP R0,#7 ;"TOP" (+6) OR "SCROLLED REGION" (+7)? 12 003616 103407 BLO 30$ ;SETTING "TOP" (+6) 13 003620 001563 BEQ 120$ ;SETTING "SCROLLED REGION" (+7), A NOP... 14 003622 020027 000400 CMP R0,#256. ;A USER CONTROLLED PARAMETER (>=+256.)? 15 003626 103560 BLO 120$ ;NO, *RESERVED* (+8. TO +255.) 16 003630 004767 000000G JSR PC,USRSET ;YES, GO SET USER CONTROLLED PARAMETER 17 003634 000555 BR 120$ ; AND GO EXIT 18 19 003636 010465 000000C 30$: MOV R4,TOPDOT+RWSIZE(R5) ;SETTING "TOP" (+6) 20 003642 000552 BR 120$ ; AND GO EXIT 21 22 003644 010465 000000C 40$: MOV R4,HLDFLG+RWSIZE(R5) ;SET THE "HOLD" FLAG (+5) 23 003650 000547 BR 120$ ; AND GO EXIT 24 25 003652 010465 000000C 50$: MOV R4,MRKFLG+RWSIZE(R5) ;SET THE "MARK" POSITION (+4) 26 003656 000544 BR 120$ ; AND GO EXIT 27 28 003660 012765 000040 000000C 60$: MOV #SPACE,SEEALL+RWSIZE(R5) ;GUESS AT RESETING "SEEALL" FLAG 29 003666 005704 TST R4 ;GOOD GUESS? 30 003670 001537 BEQ 120$ ;YES, GO EXIT 31 003672 012765 100010 000000C MOV #NULSYM!100000,SEEALL+RWSIZE(R5) ;NO, SET "SEEALL" FLAG 32 003700 000533 BR 120$ ; AND GO EXIT 33 34 .GLOBL USRSET, RWSIZE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 32 HANDLE :W COMMANDS (PARAMETER READ/SET) 1 ;+ 2 ; SCRPRM - HANDLE :W COMMANDS (PARAMETER READ/SET). 3 ; 4 ; 0:W RETURN SCOPE TYPE 5 ; 1:W RETURN HORIZONTAL SIZE 6 ; 2:W RETURN VERTICAL SIZE 7 ; 3:W RETURN "SEEALL" FLAG 8 ; 4:W RETURN ANY ACTIVE "MARK" 9 ; 5:W RETURN "HOLDING SCREEN" FLAG 10 ; 6:W RETURN LAST TOP-OF-SCREEN POSITION 11 ; 7:W RETURN SIZE OF SCROLLED REGION 12 ; 8:W START OF *RESERVED* (RETURN 0)... 13 ; 256:W START OF USER CONTROLLED (RETURN WHATEVER)... 14 ; -256+N:W PROCESS INSERTS UNTIL CONTROL CHARACTER, ETC. 15 ; 16 ; X,0:W SET SCOPE TYPE TO X (X=0, 2, 4, ... CRTMAX) 17 ; X,1:W SET HORIZONTAL SIZE (10.<=X<=254. AND EVEN) 18 ; X,2:W SET VERTICAL SIZE (10.<=X<=127.) 19 ; X,3:W SET "SEEALL" FLAG (X=0 OR X<>0) 20 ; X,4:W SET ACTIVE "MARK" (X=0 => NONE, X<>0 => MARK @ X-1) 21 ; X,5:W SET "HOLDING SCREEN" FLAG (X=0 OR X<>0) 22 ; X,6:W SET TOP-OF-SCREEN (X=0 => NONE, X<>0 => TOP @ X-1) 23 ; X,7:W SET SIZE OF SCROLLED REGION (X=0 => NONE, 2.<=X) 24 ; X,8:W START OF *RESERVED* (NOP)... 25 ; X,256:W START OF USER CONTROLLED (SET WHATEVER)... 26 ; X,-256+N:W PROCESS INSERTS UNTIL CONTROL CHARACTER, ETC. 27 ;- 28 29 003702 005700 SCRPRM::TST R0 ;INSERT PROCESSING? 30 003704 100733 BMI 10$ ;YES, SO GO DO IT 31 003706 004067 000634 JSR R0,SCRSAV ;SAVE REGISTERS, SET RETURN, ETC. 32 003712 005265 000000G INC CFLG(R5) ;READING OR SETTING (COMMA PRESENT)? 33 003716 001124 BNE 120$ ;NO COMMA, WE ARE READING 34 35 .GLOBL CFLG SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 33 HANDLE :W COMMANDS (PARAMETER READ/SET) 1 003720 016504 000000G MOV M(R5),R4 ;COMMA, WE ARE SETTING, GET THE NEW VALUE 2 003724 020027 000003 CMP R0,#3 ;WHAT ARE WE SETTING? 3 003730 103323 BHIS 20$ ;NOT "TYPE"(+0), "WIDTH"(+1), OR "HEIGHT"(+2) 4 003732 010401 MOV R4,R1 ;PUT NEW THING HERE (NEW VERTICAL SIZE SPOT) 5 003734 016502 000000C MOV HTSIZE+RWSIZE(R5),R2 ;PUT OLD HORIZONTAL SIZE HERE 6 003740 012746 MOV (PC)+,-(SP) ;SET RANGE MASK FOR 7 003742 001 377 .BYTE 1,-1 ; NOT ODD AND NOT OVER 255. 8 003744 005300 DEC R0 ;WHAT ARE WE SETTING? 9 003746 100012 BPL 70$ ;SETTING A SIZE (+1 OR +2) 10 003750 012716 177601 MOV #^C<176>,(SP) ;SETTING SCOPE TYPE (+0), MASK FOR VALID INDEX 11 003754 030426 BIT R4,(SP)+ ;IS NEW THING A VALID INDEX? 12 003756 001104 BNE 120$ ;INVALID, SO NO CHANGE... 13 003760 020427 000000G CMP R4,#CRTMAX ;IS NEW THING WITHIN VALID INDEX RANGE? 14 003764 101101 BHI 120$ ;INVALID, SO NO CHANGE... 15 003766 016501 000000C MOV VTSIZE+RWSIZE(R5),R1 ;GET OLD VERTICAL SIZE 16 003772 000416 BR 100$ ; AND GO SET NEW PARAMETERS 17 18 003774 001401 70$: BEQ 80$ ;SETTING HORIZONTAL SIZE (+1) 19 003776 006216 ASR (SP) ;SETTING VERTICAL SIZE (+2), ALLOW ODD, <=127. 20 004000 030426 80$: BIT R4,(SP)+ ;IS NEW SIZE WITHIN RANGE? 21 004002 001072 BNE 120$ ;NO, SO NO CHANGE... 22 004004 020427 000012 CMP R4,#10. ;IS NEW SIZE UNDER THE VERY MINIMUM? 23 004010 103467 BLO 120$ ;NO CHANGE IF SO... 24 004012 005700 TST R0 ;O.K., WHAT SIZE WERE WE SETTING? 25 004014 001003 BNE 90$ ;THE VERTICAL SIZE (+2) 26 004016 010402 MOV R4,R2 ;THE HORIZONTAL SIZE (+1) 27 004020 016501 000000C MOV VTSIZE+RWSIZE(R5),R1 ;GET OLD VERTICAL SIZE 28 004024 016504 000000G 90$: MOV CRTYPE(R5),R4 ;GET OLD SCOPE TYPE 29 004030 016546 000000G 100$: MOV CRTYPE(R5),-(SP) ;SAVE OLD SCOPE TYPE 30 004034 010465 000000G MOV R4,CRTYPE(R5) ; THEN SET NEW SCOPE TYPE 31 004040 016546 000000C MOV VTSIZE+RWSIZE(R5),-(SP) ;SAVE OLD VERTICAL SIZE 32 004044 010165 000000C MOV R1,VTSIZE+RWSIZE(R5) ; THEN SET NEW VERTICAL SIZE 33 004050 016503 000000C MOV HTSIZE+RWSIZE(R5),R3 ;SAVE OLD HORIZONTAL SIZE 34 004054 010265 000000C MOV R2,HTSIZE+RWSIZE(R5) ; THEN SET NEW HORIZONTAL SIZE 35 004060 016500 000000C MOV MAPSIZ+RWSIZE(R5),R0 ;GET OLD -(SCREEN MAP SIZE) 36 004064 160300 SUB R3,R0 ; THEN FORM OLD -(SIZE OF DYNAMIC REGION - 2) 37 004066 016546 000000C MOV SEEALL+RWSIZE(R5),-(SP) ;SAVE "SEEALL" FLAG 38 004072 016546 000000C MOV MRKFLG+RWSIZE(R5),-(SP) ;SAVE "MARK" POSITION 39 004076 016546 000000C MOV HLDFLG+RWSIZE(R5),-(SP) ;SAVE "HOLD" FLAG 40 004102 016546 000000C MOV SCROLN+RWSIZE(R5),-(SP) ;SAVE "SCROLLING REGION" SIZE 41 004106 004767 000226 JSR PC,SETREG ;GO MODIFY THE READ/WRITE REGIONS 42 004112 012665 000000C MOV (SP)+,SCROLN+RWSIZE(R5) ;RESTORE "SCROLLING REGION" SIZE 43 004116 012665 000000C MOV (SP)+,HLDFLG+RWSIZE(R5) ;RESTORE "HOLD" FLAG 44 004122 012665 000000C MOV (SP)+,MRKFLG+RWSIZE(R5) ;RESTORE "MARK" POSITION 45 004126 012665 000000C MOV (SP)+,SEEALL+RWSIZE(R5) ;RESTORE "SEEALL" FLAG 46 004132 103407 BCS 110$ ;ALL O.K. 47 004134 010365 000000C MOV R3,HTSIZE+RWSIZE(R5) ;FAILED, RESTORE OLD HORIZONTAL SIZE 48 004140 012665 000000C MOV (SP)+,VTSIZE+RWSIZE(R5) ;RESTORE OLD VERTICAL SIZE 49 004144 012665 000000G MOV (SP)+,CRTYPE(R5) ;RESTORE OLD SCOPE TYPE 50 004150 000407 BR 120$ ; THEN GO EXIT 51 52 004152 022626 110$: CMP (SP)+,(SP)+ ;POP SAVED OLD SCOPE TYPE & VERTICAL SIZE 53 004154 026627 000004G 000001 CMP R0OFF+4(SP),#1 ;WAS IT THE WIDTH WE JUST CHANGED (+1)? 54 004162 001002 BNE 120$ ;NOPE 55 004164 004767 000000G JSR PC,NWIDTH ;YEP, GO INFORM TERMINAL SPECIFIC CODE 56 57 .GLOBL M, RWSIZE, CRTMAX, CRTYPE, R0OFF, NWIDTH SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 34 HANDLE :W COMMANDS (PARAMETER READ/SET) 1 004170 005065 000000G 120$: CLR CFLG(R5) ;CLEAR THE COMMA FLAG 2 004174 016604 000004G MOV R0OFF+4(SP),R4 ; AND GET THE ORIGINAL N OF THE N:W COMMAND 3 004200 016500 000000C MOV HTSIZE+RWSIZE(R5),R0 ;GUESS AT HORIZONTAL SIZE (+1) 4 004204 020427 000001 CMP R4,#1 ;GOOD GUESS? 5 004210 001450 BEQ 170$ ;YES 6 004212 103445 BLO 160$ ;NO, IT IS SCOPE TYPE (+0) 7 004214 016500 000000C MOV VTSIZE+RWSIZE(R5),R0 ;NOW GUESS AT VERTICAL POSITION (+2) 8 004220 020427 000003 CMP R4,#3 ;GOOD GUESS? 9 004224 103442 BLO 170$ ;YES 10 004226 001431 BEQ 150$ ;NO, IT IS "SEEALL" (+3) 11 004230 016500 000000C MOV MRKFLG+RWSIZE(R5),R0 ;NOW GUESS AT SET "MARK" (+4) 12 004234 020427 000005 CMP R4,#5 ;GOOD GUESS? 13 004240 103434 BLO 170$ ;YES 14 004242 001420 BEQ 140$ ;NO, IT IS "HOLD" (+5) 15 004244 016500 000000C MOV TOPDOT+RWSIZE(R5),R0 ;NOW GUESS AT "TOP" POSITION (+6) 16 004250 020427 000007 CMP R4,#7 ;GOOD GUESS? 17 004254 103426 BLO 170$ ;YES 18 004256 001407 BEQ 130$ ;NO, IT IS "SCROLLED REGION" (+7) 19 004260 005000 CLR R0 ;NOW GUESS AT *RESERVED* (+8. TO +255.) 20 004262 020427 000400 CMP R4,#256. ;GOOD GUESS? 21 004266 103421 BLO 170$ ;YES 22 004270 004767 000000G JSR PC,USRPRM ;NO, GET USER CONTROLLED PARAMETER (>=+256.) 23 004274 000416 BR 170$ ; AND GO EXIT WITH IT 24 25 004276 016500 000000C 130$: MOV SCROLN+RWSIZE(R5),R0 ;GET "SCROLLED REGION" SIZE 26 004302 000413 BR 170$ ; AND GO EXIT WITH IT 27 28 004304 016500 000000C 140$: MOV HLDFLG+RWSIZE(R5),R0 ;GET "HOLD SCREEN" FLAG 29 004310 000410 BR 170$ ; AND GO EXIT WITH IT 30 31 004312 005000 150$: CLR R0 ;GUESS AT "SEEING ALL" RESET 32 004314 005765 000000C TST SEEALL+RWSIZE(R5) ;GOOD GUESS? 33 004320 100004 BPL 170$ ;YES, GO EXIT WITH IT 34 004322 005100 COM R0 ;NO, SAY "SEEALL" IS SET 35 004324 000402 BR 170$ ; AND GO EXIT WITH IT 36 37 004326 016500 000000G 160$: MOV CRTYPE(R5),R0 ;SET THE SCOPE TYPE 38 004332 010066 000004G 170$: MOV R0,R0OFF+4(SP) ;SET THE RETURNED VALUE (IN SAVED R0) 39 004336 000207 RTS PC ; AND EXIT 40 41 .DSABL LSB 42 43 .GLOBL CFLG, R0OFF, RWSIZE, USRPRM, CRTYPE SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 35 SET UP THE READ/WRITE REGIONS 1 .SBTTL SET UP THE READ/WRITE REGIONS 2 3 ;+ 4 ; SETREG - SET UP THE READ/WRITE REGIONS. 5 ; 6 ; R0 = OLD -(SIZE OF DYNAMIC READ/WRITE REGION - 2) 7 ; 8 ; JSR PC,SETREG 9 ; 10 ; R0 = NEW -(SIZE OF SCREEN MAP) 11 ; R1 = UNDEFINED 12 ; R2 = UNDEFINED 13 ; R4 = UNDEFINED 14 ; 15 ; IF C=1 ('BCS') THEN DYNAMIC REGION ALLOCATED 16 ; IF C=0 ('BCC') THEN DYNAMIC REGION FAILED TO ALLOCATE 17 ;- 18 19 004340 016501 000000C SETREG: MOV VTSIZE+RWSIZE(R5),R1 ;GET VERTICAL SIZE 20 004344 MULHSZ ; AND FIND (SIZE OF SCREEN MAP) 004344 070165 000000C MUL HTSIZE+RWSIZE(R5),R1 21 004350 010146 MOV R1,-(SP) ;SAVE SIZE OF SCREEN MAP FOR LATER... 22 004352 066501 000000C ADD HTSIZE+RWSIZE(R5),R1 ;NOW HAVE (SIZE OF DYNAMIC - 2) 23 004356 060100 ADD R1,R0 ;FORM (NEW-2)+(-(OLD-2))=(NEW)-(OLD)=(DELTA) 24 004360 001430 BEQ 40$ ;WE ARE STAYING THE SAME, DELTA = 0 25 004362 100011 BPL 20$ ;WE ARE EXPANDING, DELTA > 0 26 004364 160065 000000G SUB R0,CURFRE(R5) ;UPDATE CURRENT FREE SPACE, DELTA < 0 27 004370 004767 000122 JSR PC,70$ ;SET THE NEW POINTERS, GET NEW START/END 28 004374 060200 ADD R2,R0 ;FIND OLD TEXT START 29 004376 112022 10$: MOVB (R0)+,(R2)+ ;MOVE ONE BYTE DOWN POPPING 30 004400 020204 CMP R2,R4 ;DONE? 31 004402 103775 BLO 10$ ;NOT YET... 32 004404 000416 BR 40$ ;ELSE CONTINUE 33 34 004406 016501 000000G 20$: MOV QZ(R5),R1 ;GET CURRENT Q-REG SIZE-IN-USE 35 004412 060001 ADD R0,R1 ;UPDATE TO SIZE-TO-BE 36 004414 004767 000000G JSR PC,SIZEQR ;CALL FOR SIZING ON Q-REG AREA 37 004420 103034 BCC 60$ ;FAILED, SORRY... (GO EXIT C=0 FOR ERROR) 38 004422 160065 000000G SUB R0,QMAX(R5) ;GOT IT, TAKE IT AWAY FROM Q-REG AREA 39 004426 004767 000064 JSR PC,70$ ;SET THE NEW POINTERS, GET NEW START/END 40 004432 060400 ADD R4,R0 ;FIND OLD TEXT END 41 004434 114044 30$: MOVB -(R0),-(R4) ;MOVE ONE BYTE UP PUSHING 42 004436 020402 CMP R4,R2 ;DONE? 43 004440 101375 BHI 30$ ;NOT YET... 44 45 .GLOBL RWSIZE, CURFRE, QZ, SIZEQR, QMAX SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 36 SET UP THE READ/WRITE REGIONS 1 004442 012704 000000C 40$: MOV #CLRSRT+RWSIZE,R4 ;GET START OF AREA TO CLEAR 2 004446 060504 ADD R5,R4 ; MAKING POINTER ABSOLUTE 3 004450 012701 000026 MOV #/2,R1 ;GET WORD SIZE OF AREA TO CLEAR 4 004454 005024 50$: CLR (R4)+ ;CLEAR THE 5 004456 077102 SOB R1,50$ ; WHOLE AREA... 6 004460 012724 000040 MOV #SPACE,(R4)+ ;RESET THE "SEEING ALL" FLAG 7 .IIF NE CLREND-SEEALL, .ERROR ;THE ABOVE WON'T WORK 8 004464 012401 MOV (R4)+,R1 ;GET THE VERTICAL SIZE 9 .IIF NE SEEALL+2-VTSIZE, .ERROR ;THE ABOVE WON'T WORK 10 004466 012402 MOV (R4)+,R2 ;GET THE HORIZONTAL SIZE 11 .IIF NE VTSIZE+2-HTSIZE, .ERROR ;THE ABOVE WON'T WORK 12 004470 010114 MOV R1,(R4) ;PUT VERTICAL SIZE HERE 13 004472 005324 DEC (R4)+ ; AND MAKE IT VERTICAL SIZE MINUS 1 14 .IIF NE HTSIZE+2-VTSIZ1, .ERROR ;THE ABOVE WON'T WORK 15 004474 010214 MOV R2,(R4) ;PUT HORIZONTAL SIZE HERE 16 004476 005314 DEC (R4) ; AND MAKE IT HORIZONTAL SIZE MINUS 1 17 .IIF NE VTSIZ1+2-HTSIZ1, .ERROR ;THE ABOVE WON'T WORK 18 004500 012414 MOV (R4)+,(R4) ;MOVE HORIZONTAL SIZE -1 TO HERE 19 004502 005324 DEC (R4)+ ; AND MAKE IT HORIZONTAL SIZE MINUS 2 20 .IIF NE HTSIZ1+2-HTSIZ2, .ERROR ;THE ABOVE WON'T WORK 21 004504 011600 MOV (SP),R0 ;GET BACK +(SIZE OF SCREEN MAP) 22 004506 005400 NEG R0 ; THEN MAKE IT -(SIZE OF SCREEN MAP) 23 004510 010014 MOV R0,(R4) ;SET THAT INTO ITS SAVE SPOT 24 .IIF NE HTSIZ2+2-MAPSIZ, .ERROR ;THE ABOVE WON'T WORK 25 ;SEC ;EXIT C=1 FOR ALL O.K. (FROM 'NEG' ABOVE) 26 004512 012601 60$: MOV (SP)+,R1 ;GET RID OF STACK ITEM W/O CHANGING C-BIT 27 004514 000207 RTS PC ;EXIT C=0 FOR ALLOCATION FAILURE 28 29 004516 060065 000000G 70$: ADD R0,TXSTOR(R5) ;UPDATE START OF TEXT (+ OR -) 30 004522 060065 000000G ADD R0,QRSTOR(R5) ;UPDATE START OF Q-REGS (+ OR -) 31 004526 005400 NEG R0 ;NOW CHANGE THE SIGN OF DELTA 32 004530 016502 000000G MOV TXSTOR(R5),R2 ;SET THE NEW TEXT AREA START 33 004534 016504 000000G MOV QRSTOR(R5),R4 ;SET THE NEW Q-REG AREA START 34 004540 066504 000000G ADD QMAX(R5),R4 ; AND FIND NEW END OF BOTH AREAS 35 004544 000207 RTS PC ;NOW EXIT 36 37 .GLOBL RWSIZE, TXSTOR, QRSTOR, QMAX SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 37 SAVE REGISTERS, SET RETURN, ETC. 1 .SBTTL SAVE REGISTERS, SET RETURN, ETC. 2 3 ;+ 4 ; SCRSAV - SAVE REGISTERS, SET RETURN, ETC. 5 ; 6 ; JSR R0,SCRSAV 7 ; 8 ; R1 = UNDEFINED 9 ; R2 = UNDEFINED 10 ; R3 = UNDEFINED 11 ; R4 = UNDEFINED 12 ; SP -> CLEAN UP EXIT RETURN, SAVED "ET", 'SAVREG' SAVED REGISTERS... 13 ;- 14 15 004546 012665 000000C SCRSAV::MOV (SP)+,OUTCHR+RWSIZE(R5) ;(RE-)SAVE SAVED R0 (FROM 'JSR R0,') 16 004552 004467 000000G JSR R4,SAVREG ;SAVE ALL REGISTERS & INIT TERMINAL OUTPUT 17 004556 016566 000000C 000000G MOV OUTCHR+RWSIZE(R5),R0OFF(SP) ;(RE-)RESTORE R0 IN ITS SAVE SPOT 18 004564 016546 000000G MOV ETYPE(R5),-(SP) ;SAVE INITIAL "ET" FLAG VALUE 19 004570 010046 MOV R0,-(SP) ;MOVE RETURN ADDRESS TO THE STACK 20 004572 016500 000000C MOV MAPSIZ+RWSIZE(R5),R0 ;HAS THE SCREEN MAP BEEN ALLOCATED? 21 004576 001005 BNE 10$ ;YEP 22 004600 012700 000002 MOV #2,R0 ;MAP NOT ALLOCATED, SET -(SIZE OF DYNAMIC - 2) 23 004604 004767 177530 JSR PC,SETREG ; AND GO SET UP THE READ/WRITE REGIONS 24 004610 103026 BCC 30$ ;ERROR ALLOCATING MAP, GO DIE 25 004612 066500 000000G 10$: ADD TXSTOR(R5),R0 ;FORM POINTER TO START OF SCREEN MAP 26 004616 010065 000000C MOV R0,MAPPTR+RWSIZE(R5) ; AND SAVE IT 27 004622 166500 000000C SUB HTSIZE+RWSIZE(R5),R0 ;BACK UP BY ONE LINE 28 004626 005740 TST -(R0) ; AND BY THE FLAG WORD 29 004630 010065 000000C MOV R0,CHCKBP+RWSIZE(R5) ; THEN STORE THAT POINTER ALSO 30 004634 016600 000004G MOV R0OFF+4(SP),R0 ;NOW GET BACK THE CALLING ARGUMENT 31 004640 052765 000000G 000000G BIS #ET$BIN,ETYPE(R5) ;ENSURE IMAGE MODE OUTPUT 32 004646 004736 JSR PC,@(SP)+ ;DO A CO-ROUTINE CALL BACK 33 004650 032627 000000G BIT (SP)+,#ET$BIN ;DO WE NEED TO CLEAR IMAGE OUTPUT? 34 004654 001003 BNE 20$ ;NOPE, IT WAS SET ON ENTRY 35 004656 042765 000000G 000000G BIC #ET$BIN,ETYPE(R5) ;YEP, SO CLEAR IT ALREADY 36 004664 000207 20$: RTS PC ;FINALLY WE CAN REALLY EXIT 37 38 004666 000167 000000G 30$: JMP $E$MEM ;ALLOCATION FAILED, SORRY... 39 40 .GLOBL RWSIZE, SAVREG, R0OFF, ETYPE, TXSTOR, ET$BIN, $E$MEM SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 38 HANDLE -256+N:W (INSERT PROCESSING, ETC.) 1 .SBTTL HANDLE -256+N:W (INSERT PROCESSING, ETC.) 2 3 ;+ 4 ; SCRINS - HANDLE -256+N:W (INSERT PROCESSING, ETC.). 5 ; 6 ; R0 = -256.+N WHERE: 7 ; 8 ; N = +128. = 200 = <7> => DON'T STALL IF NO TERMINAL INPUT IS AVAILABLE 9 ; +64. = 100 = <6> => EXIT ON ANY CHARACTER 10 ; +32. = 40 = <5> => DON'T UPDATE SCREEN 11 ; +16. = 20 = <4> => ** RESERVED ** 12 ; +8. = 10 = <3> => TREAT M(R5) AS EXCEPTION CHARACTER(S) 13 ; +4. = 4 = <2> => UPPER CASE ANY INSERT(S) 14 ; +2. = 2 = <1> => TREAT AS AN EXCEPTION CHARACTER 15 ; +1. = 1 = <0> => NO NEED TO INITIALLY UPDATE THE SCREEN 16 ; 17 ; IF CFLG(R5)=-1 THEN 18 ; M(R5) = UPDATE INTERVAL IF <2> OF N IS 0 19 ; = EXCEPTION CHARACTER(S) IF <2> OF N IS 1 20 ; 21 ; JSR PC,SCRINS 22 ; 23 ; R0 = RETURNED EXIT VALUE WHERE: 24 ; 25 ; R0 <15> => ONE OR MORE INSERT(S) WERE DONE 26 ; R0 <14-8> = ** RESERVED ** 27 ; R0 <7-0> = 377 => DON'T STALL SPECIFIED AND NO INPUT AVAILABLE 28 ; <> 377 => EXCEPTION CHARACTER'S VALUE 29 ;- 30 31 000001 SI.OK == 1 ;SCREEN IMAGE IS O.K. 32 000002 SI.EXT == 2 ;TREAT AS AN EXCEPTION CHARACTER 33 000004 SI.UC == 4 ;UPPER CASE ANY INSERT(S) 34 000010 SI.EXM == 10 ;TREAT M(R5) AS EXCEPTION CHARACTER(S) 35 ; == 20 ;** RESERVED ** 36 000040 SI.NUP == 40 ;DON'T UPDATE SCREEN 37 000100 SI.EXA == 100 ;EXIT ON ANY CHARACTER 38 000200 SI.NST == 200 ;DON'T STALL IF NO TERMINAL INPUT IS AVAILABLE 39 40 000400 SI.OKS == 400 ;ALL SET FOR A SIMPLE SCREEN UPDATE 41 100000 SI.INS == 100000 ;ONE OR MORE INSERT(S) WERE DONE 42 43 000000 .PSECT SCRINS,RO,I,GBL,REL,OVR 44 45 000000 016546 000000G SCRINS: MOV ETYPE(R5),-(SP) ;SAVE INITIAL "ETYPE" 46 000004 005065 000000G CLR CFLG(R5) ;ENSURE M,N FORMAT GETS TURNED OFF 47 000010 005046 CLR -(SP) ;STACK A FLAG WORD 48 000012 110016 MOVB R0,(SP) ; AND INSERT THE CALLING ARGUMENT BITS 49 50 .GLOBL ETYPE, CFLG SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 39 HANDLE -256+N:W (INSERT PROCESSING, ETC.) 1 000014 052765 000000C 000000G 10$: BIS #ET$CC!ET$CKE!ET$NCH,ETYPE(R5) ;INDICATE NO STALL, ETC. 2 000022 004767 000000G 20$: JSR PC,TLISTN ;READ FROM THE TERMINAL 3 000026 042765 000000G 000000G BIC #ET$CKE,ETYPE(R5) ;GO BACK TO TERMINAL STALL MODE 4 000034 100017 BPL 30$ ;WHOOPS! CONTROL/C TYPED 5 ;.IIF NE ET$CC-100000, .ERROR ;THE ABOVE WON'T WORK 6 000036 005700 TST R0 ;DID WE GET ANYTHING? 7 000040 100022 BPL 40$ ;YES 8 000042 105716 TSTB (SP) ;NO STALL? 9 000044 100445 BMI 60$ ;YES, EXIT W/ R0 <7-0> = 377 10 .IIF NE SI.NST-200, .ERROR ;THE ABOVE WON'T WORK 11 000046 031627 000041 BIT (SP),#SI.NUP!SI.OK ;NO UPDATE OR SCREEN O.K.? 12 000052 001363 BNE 20$ ;ONE OR THE OTHER, SO READ W/ STALL 13 000054 012700 177777 MOV #-1,R0 ;NEED SCREEN UPDATE, SET R0 TO -1 14 000060 004767 000000' JSR PC,SCRUPD ; AND GO UPDATE THE SCREEN 15 000064 005216 INC (SP) ;SAY SCREEN IS ALL UPDATED 16 .IIF NE SI.OK-1, .ERROR ;THE ABOVE WON'T WORK 17 000066 005765 000000G TST ETYPE(R5) ;WAS A CONTROL/C TYPED? 18 000072 100753 BMI 20$ ;NO CONTROL/C, SO READ W/ STALL 19 ;.IIF NE ET$CC-100000, .ERROR ;THE ABOVE WON'T WORK 20 000074 012700 000003 30$: MOV #'C-100,R0 ;SET A CONTROL/C AS TYPED 21 000100 042766 000000G 000002 BIC #ET$CC,2(SP) ; AND ENSURE THAT CONTROL/C TRAPS TURN OFF 22 000106 031627 000114 40$: BIT (SP),#SI.EXA!SI.EXM!SI.UC ;EXIT ON ANY CHARACTER (ETC.)? 23 000112 001022 BNE 60$ ;YES, EXIT 24 000114 120027 000177 CMPB R0,#DEL ;CONTROL CHARACTER OR G1 GRAPHIC? 25 000120 103017 BHIS 60$ ;YES (177 TO 377), EXIT 26 000122 120027 000040 CMPB R0,#SPACE ;MIGHT BE... 27 000126 103006 BHIS 50$ ;NORMAL GRAPHIC (040 TO 176), DO INSERT 28 000130 120027 000011 CMPB R0,#TAB ;CONTROL CHARACTER, IS IT ? 29 000134 001011 BNE 60$ ;NO, OTHER, EXIT 30 000136 031627 000002 BIT (SP),#SI.EXT ;ALLOWING ? 31 000142 001006 BNE 60$ ;NO, EXIT 32 000144 004767 000034 50$: JSR PC,70$ ;GO SAVE REGISTERS AND DO TEXT BUFFER INSERT 33 000150 052716 100001 BIS #SI.INS!SI.OK,(SP) ;INDICATE ONE OR MORE INSERT(S) DONE 34 000154 005316 DEC (SP) ; BUT INDICATE DISPLAY NOT NOW CORRECT 35 .IIF NE SI.OK-1, .ERROR ;THE ABOVE WON'T WORK 36 000156 000716 BR 10$ ;GO READ W/O STALL 37 38 000160 110016 60$: MOVB R0,(SP) ;PUT EXCEPTION CHARACTER VALUE INTO FLAG 39 000162 012600 MOV (SP)+,R0 ; AND SET R0 FOR RETURNED VALUE 40 000164 042716 000000C BIC #^C,(SP) ;TRIM SAVED "ETYPE" 41 000170 042765 000000C 000000G BIC #ET$CC!ET$CKE!ET$NCH,ETYPE(R5) ;TURN OFF OUR BITS 42 000176 052665 000000G BIS (SP)+,ETYPE(R5) ; THEN RESTORE ORIGINAL "ETYPE" 43 000202 000207 RTS PC ; AND EXIT 44 45 000204 004467 000000G 70$: JSR R4,SAVREG ;SAVE ALL REGISTERS 46 000210 000167 000000G JMP .III.I ; AND GO DO THE TEXT BUFFER INSERT; EXIT 47 48 .GLOBL ET$CC, ET$CKE, ET$NCH, ETYPE, TLISTN, SAVREG, .III.I SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 40 THE LAYOUT OF THE STATIC READ/WRITE REGION 1 .SBTTL THE LAYOUT OF THE STATIC READ/WRITE REGION 2 3 000000 .PSECT ..ABS.,RW,D,LCL,ABS,OVR 4 000000 ..ABS.: 5 000000 . = 0!..ABS. 6 7 000000 OUTCHR::.BLKW ;-> "OUTPUT A CHARACTER" 8 000002 OUTBLN::.BLKW ;-> "PROCESS END OF LINE" 9 10 000004 CLRSRT: ;START OF 'SETREG' AREA TO CLEAR 11 000004 JSRSRT: ;START OF 'SETJSR' AREA TO CLEAR 12 13 000004 BUINDX: .BLKW ;-> TO LINE START IN MAP/CHECKING BUFFER 14 15 000006 CURPOS::.BLKW ;TEXT BUFFER POINTER OF CURSOR 16 000010 CURABS::.BLKW ;MAP POSITION OF CHARACTER UNDER CURSOR 17 000012 CURLIN: .BLKW ;LINE NUMBER OF CURSOR 18 000014 CURCOL::.BLKW ;COLUMN NUMBER OF CURSOR 19 20 000016 GRPON: .BLKW ;GRAPHICS TURNED ON FLAG 21 22 000020 MRKLOW: .BLKW ;START OF MARK'D REGION IN TEXT BUFFER 23 000022 MRKHGH: .BLKW ;END OF MARK'D REGION IN TEXT BUFFER 24 000024 MRKON: .BLKW ;MARK'D REGION TURNED ON FLAG 25 26 000026 RTMOST: .BLKW ;RIGHTMOST COLUMN SEEN 27 28 000030 OVRPOS: .BLKW ;COLUMN POSITION +1 OF "OVRSYM" 29 30 000032 JSREND: ;END OF 'SETJSR' AREA TO CLEAR 31 32 000032 BUSTRT: .BLKW ;CURRENT LINE NUMBER 33 34 000034 NUMCHR: .BLKW ;NUMBER OF CHARACTERS IN CHECKING LINE 35 36 000036 LINPTR::.BLKW ;CHARACTER POSITION (P) OF LINE START 37 38 000040 SVSTRT: .BLKW ;SAVED LINE NUMBER (BUSTRT) 39 40 000042 INITFL::.BLKW ;-1=>KNOWN; -2=>UNKNOWN, BUT FIXED; 0=>UNKNOWN 41 42 000044 TOPDOT::.BLKW ;LAST TOP-OF-SCREEN POSITION [SET/READ VIA 6:W] 43 000046 HLDFLG::.BLKW ;"HOLD SCREEN" FLAG [SET/READ VIA 5:W] 44 45 000050 PRELIN::.BLKW ;LAST SET LINE TO SCREEN (<0 => UNKNOWN) 46 000052 PRECOL::.BLKW ;LAST SET COLUMN TO SCREEN 47 48 000054 MRKFLG::.BLKW ;ACTIVE "MARK" IF ANY [SET/READ VIA 4:W] 49 50 000056 SCROLN::.BLKW ;SIZE OF SCROLLED REGION IF ANY [SET/READ VIA 7:W] 51 52 000060 CLREND: ;END OF 'SETREG' AREA TO CLEAR SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 41 THE LAYOUT OF THE STATIC READ/WRITE REGION 1 000060 SEEALL::.BLKW ;"SEE ALL CHARACTERS" FLAG [SET/READ VIA 3:W] 2 3 000062 VTSIZE::.BLKW ;VERTICAL SIZE [SET/READ VIA 2:W] 4 000064 HTSIZE::.BLKW ;HORIZONTAL SIZE [SET/READ VIA 1:W] 5 6 000066 VTSIZ1::.BLKW ;VERTICAL SIZE -1 7 8 000070 HTSIZ1: .BLKW ;HORIZONTAL SIZE -1 9 000072 HTSIZ2::.BLKW ;HORIZONTAL SIZE -2 10 11 000074 MAPSIZ: .BLKW ;-(SIZE OF THE SCREEN MAP) IN BYTES (0 => UNALLOCATED) 12 13 000076 MAPPTR: .BLKW ;POINTER TO THE SCREEN MAP 14 15 000100 CHCKBP: .BLKW ;POINTER TO: FLAG WORD, 1 LINE'S WORTH FOR CHECKING 16 17 000102 SRWSIZ:: ;SIZE OF THE STATIC READ/WRITE REGION IN BYTES 18 19 .SBTTL THE LAYOUT OF THE DYNAMIC READ/WRITE REGION 20 21 ; R5 -> .BLKB RWSIZE ;TECO'S READ/WRITE REGION 22 ; RWSIZE+R5 -> .BLKB SRWSIZ ;SCREEN'S READ/WRITE REGION 23 ; .BLKB ??? ;FOR RANDOM USE BY TECOIO 24 ; CHCKBP+RWSIZE(R5) -> .BLKW ;FLAG WORD 25 ; .BLKB HTSIZE(R5) ;CHECKING BUFFER 26 ; MAPPTR+RWSIZE(R5) -> .BLKB VTSIZE(R5)*HTSIZE(R5) ;SCREEN MAP 27 ; TXSTOR(R5) -> .BLKB ZMAX(R5) ;TEXT BUFFER 28 ; QRSTOR(R5) -> .BLKB QMAX(R5) ;Q-REGISTERS 29 ; .BLKB CURFRE(R5) ;FREE SPACE 30 31 000001 .END SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page 41-1 Symbol table BUINDX 000004 005 ETYPE = ****** G JSREND 000032 005 QMAX = ****** G SI.EXM= 000010 G BUSTRT 000032 005 ET$BIN= ****** G JSRSRT 000004 005 QRSTOR= ****** G SI.EXT= 000002 G CCHAR 003250R 003 ET$CC = ****** G LF = 000012 QZ = ****** G SI.INS= 100000 G CFLG = ****** G ET$CKE= ****** G LFDSYM= 000002 RETSYM= 000011 SI.NST= 000200 G CHCKBP 000100 005 ET$IAS= ****** G LINPTR 000036 G 005 RTMOST 000026 005 SI.NUP= 000040 G CHKSCN 000346RG 003 ET$NCH= ****** G M = ****** G RTRANS 003464R 003 SI.OK = 000001 G CLREND 000060 005 ET$TRU= ****** G MAPPTR 000076 005 RWSIZE= ****** G SI.OKS= 000400 G CLRSCN 000030R 003 FBLNK 003416R 003 MAPSIZ 000074 005 R0 =%000000 SI.UC = 000004 G CLRSRT 000004 005 FCHAR 003244R 003 MOFSEQ= ****** G R0OFF = ****** G SP =%000006 CNV8BT= ****** G FCURLN 000250R 003 MONSEQ= ****** G R1 =%000001 SPACE = 000040 COESYM= 000016 FF = 000014 MRKFLG 000054 G 005 R2 =%000002 SRWSIZ 000102 G 005 COSSYM= 000014 FFDSYM= 000006 MRKHGH 000022 005 R3 =%000003 SVSTRT 000040 005 CR = 000015 FFFLAG= ****** G MRKLOW 000020 005 R4 =%000004 TAB = 000011 CRTMAX= ****** G FINISH 001470R 003 MRKON 000024 005 R5 =%000005 TABSYM= 000007 CRTYPE= ****** G FIXSEQ= ****** G NEWLIN 002646R 003 SAVREG= ****** G TLISTN= ****** G CTLSYM= 000003 FNDMOV 001006R 003 NEWLIX 002772R 003 SCDSEQ= ****** G TOPDOT 000044 G 005 CURABS 000010 G 005 FSCRLN 000472R 003 NFLG = ****** G SCRDNE 001532RG 003 TRYTOP 000736R 003 CURCOL 000014 G 005 FTOPLN 000452R 003 NOMOVE 000754R 003 SCREEN 000000R 002 TXSTOR= ****** G CURFRE= ****** G FTRANS 003460R 003 NULSYM= 000010 SCRHOM 000430RG 003 TYPEBC= ****** G CURLIN 000012 005 GOFSEQ= ****** G NUMCHR 000034 005 SCRINS 000000R 004 TYPEBF= ****** G CURPOS 000006 G 005 GONSEQ= ****** G NWATCH= ****** G SCRLOD= ****** G USRPRM= ****** G DEL = 000177 GRPON 000016 005 NWIDTH= ****** G SCROLN 000056 G 005 USRSET= ****** G DIRECT= ****** G GRPTBL= ****** G OUTBLN 000002 G 005 SCROUT 001230RG 003 VT = 000013 DOIT 000064R 003 HLDFLG 000046 G 005 OUTCHR 000000 G 005 SCRPRM 003702RG 003 VTBLNK 003254R 003 DOMOVE 001066R 003 HOMSEQ= ****** G OUTDNE= ****** G SCRSAV 004546RG 003 VTBSYM= 000004 DOSEQ 003470R 003 HTSIZE 000064 G 005 OVPSYM= 000012 SCRUPD 000000RG 003 VTCHAR 003000R 003 DOTEXT 001544R 003 HTSIZ1 000070 005 OVRPOS 000030 005 SCUSEQ= ****** G VTSIZE 000062 G 005 DOTYPE 003474RG 003 HTSIZ2 000072 G 005 OVRSYM= 000001 SEEALL 000060 G 005 VTSIZ1 000066 G 005 EOBSYM= 000005 HXESYM= 000015 P = ****** G SETCUR 003524R 003 ZZ = ****** G EOFLAG= ****** G HXSSYM= 000013 PC =%000007 SETJSR 003426R 003 $E$MEM= ****** G EOLSEQ= ****** G INITFL 000042 G 005 POSTBL= ****** G SETREG 004340R 003 .III.I= ****** G EOSSEQ= ****** G I$$MUL= 000001 PRECOL 000052 G 005 SIZEQR= ****** G .VVV.V= ****** G ESC = 000033 I$$SOB= 000001 PRELIN 000050 G 005 SI.EXA= 000100 G ..ABS. 000000 005 ESCSYM= 000017 . ABS. 000000 000 (RW,I,GBL,ABS,OVR) 000000 001 (RW,I,LCL,REL,CON) SCREEN 000100 002 (RO,I,GBL,REL,OVR) SCRSUB 004672 003 (RO,I,GBL,REL,CON) SCRINS 000214 004 (RO,I,GBL,REL,OVR) ..ABS. 000102 005 (RW,D,LCL,ABS,OVR) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 0 Size of work file: 160 Words ( 1 Pages) Size of core pool: 16896 Words ( 66 Pages) Operating system: RT-11 (Under RSTS/E) Elapsed time: 00:01:06.18 OBJ:SCREEN,LST:SCREEN/C=TT:,MAC:SCREEN SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page S-1 Cross reference table (CREF V05.03a) $E$MEM 37-38 37-40 ..ABS. 40-4# 40-5 .III.I 39-46 39-48 .VVV.V 8-16 8-41 9-4 9-52 10-7 10-17 10-51 BUINDX 8-23* 10-33* 14-11* 17-21 22-21 22-28* 27-20 40-13# BUSTRT 9-20 10-29 10-40 10-42 10-49* 11-12 13-5* 13-14* 14-30* 14-34* 18-34 21-14 21-24* 22-29* 22-38 22-43 24-26 27-23 28-33 28-36 30-12 30-19 40-32# CCHAR 10-34 26-30# CFLG 32-32* 32-35 34-1* 34-43 38-46* 38-50 CHCKBP 9-28 10-3 12-18 37-29* 41-15# CHKSCN 8-31 8-37 9-28# CLREND 36-3 36-7 40-52# CLRSCN 7-14 7-16# 9-41 CLRSRT 36-1 36-3 40-10# CNV8BT 16-25 16-47 COESYM 3-18# 16-42 COSSYM 3-16# 16-41 CR 2-35# 14-42 18-6 19-8 CRTMAX 33-13 33-57 CRTYPE 13-10 13-42 14-14 14-50 21-19 21-43 24-32 24-48 25-16 25-28 29-26 29-34 33-28 33-29 33-30* 33-49* 33-57 34-37 34-43 CTLSYM 3-6# 20-24 CURABS 8-28 14-32 18-33* 40-16# CURCOL 14-35 18-35* 18-38* 40-18# CURFRE 35-26* 35-45 CURLIN 8-32 8-36 14-34 18-34* 40-17# CURPOS 8-22* 14-27* 18-31 40-15# DEL 2-38# 19-1 39-24 DIRECT 30-18 30-27 DOIT 7-9 8-3# DOMOVE 13-3# DOSEQ 13-16 27-35 29-12# DOTEXT 8-27 9-8 10-41 14-28 16-18# DOTYPE 9-38 9-45 15-6 15-10 25-12 25-26 29-24# EOBSYM 3-8# 21-4 21-8 21-12 EOFLAG 21-10 21-43 EOLSEQ 22-26 22-49 EOSSEQ 21-20 21-28 21-43 ESC 2-36# 20-16 ESCSYM 3-19# 20-15 ET$BIN 37-31 37-33 37-35 37-40 ET$CC 39-1 39-21 39-40 39-41 39-48 ET$CKE 39-1 39-3 39-40 39-41 39-48 ET$IAS 5-30 5-37 ET$NCH 39-1 39-40 39-41 39-48 ET$TRU 18-9 18-46 ETYPE 5-30 5-37 18-9 18-46 37-18 37-31* 37-35* 37-40 38-45 38-50 39-1* 39-3* 39-17 39-41* 39-42* 39-48 FBLNK 28-7# 28-38 FCHAR 24-25 26-14# 26-31 28-7 28-38 FCURLN 8-9 8-13 8-20 9-3# FF 2-34# FFDSYM 3-9# 19-18 21-8 FFFLAG 21-5 21-43 FINISH 15-3# FIXSEQ 9-37 9-52 SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page S-2 Cross reference table (CREF V05.03a) FNDMOV 11-17 12-7 12-12# FSCRLN 9-24 10-8# FTOPLN 10-3# 11-25 FTRANS 8-4 8-39 10-9 10-12 28-38# GOFSEQ 15-5 15-16 25-22 25-28 GONSEQ 25-25 25-28 GRPON 15-3 25-20 25-23* 40-20# GRPTBL 25-17 25-28 HLDFLG 6-23* 8-8 8-30 11-9 21-15 31-22* 33-39 33-43* 34-28 40-43# HOMSEQ 9-44 9-52 HTSIZ1 14-31 18-38 36-17 36-20 41-8# HTSIZ2 18-3 18-41 20-7 36-20 36-24 41-9# HTSIZE 7-16 10-35 11-14 12-11 12-20 13-20 18-36 22-22 33-5 33-33 33-34* 33-47* 34-3 35-20 35-22 36-11 36-14 37-27 41-4# HXESYM 3-17# 16-44 HXSSYM 3-15# 16-43 I$$MUL 1-2# 4-20 4-22 30-29 I$$SOB 1-1# 4-3 4-5 INITFL 6-19* 9-32* 15-11* 40-40# JSREND 28-28 28-33 40-30# JSRSRT 28-28 28-29 40-11# LF 2-32# 14-40 17-10 19-11 LFDSYM 3-4# 14-45 19-16 19-23 LINPTR 8-17* 10-14* 10-19 14-6 40-36# M 33-1 33-57 MAPPTR 7-18 12-15 13-18 14-11 37-26* 41-13# MAPSIZ 33-35 36-24 37-20 41-11# MOFSEQ 15-9 15-16 25-8 25-28 MONSEQ 14-15 14-50 25-11 25-28 MRKFLG 6-20* 14-17 31-25* 33-38 33-44* 34-11 40-48# MRKHGH 14-21* 14-24* 24-19 40-23# MRKLOW 14-26* 24-21 40-22# MRKON 15-7 25-6 25-9* 40-24# NEWLIN 18-24 19-25 19-33 22-19# NEWLIX 21-22 23-16# NFLG 5-32 5-37 NOMOVE 11-23# 12-9 NULSYM 3-12# 31-31 NUMCHR 10-25 10-27 10-31* 11-21 28-36 40-34# NWATCH 6-17 6-29 9-10 9-52 NWIDTH 33-55 33-57 OUTBLN 21-30 22-27 28-27 28-29 40-8# OUTCHR 10-34* 16-32 16-35 16-45 18-21 18-28 18-30 20-4 20-25 21-36 22-46 28-7* 28-22 28-27 37-15* 37-17 40-7# OUTDNE 7-22* 7-27 9-35 9-52 15-13* 15-16 OVPSYM 3-14# 17-13 OVRPOS 17-25 18-13 18-15* 18-26* 21-32 22-31* 40-28# OVRSYM 3-3# 18-8 18-27 P 8-5 8-14* 8-18* 8-41 10-14 10-51 14-12* 14-36 14-38 14-50 PC 2-27# 6-24* 7-23* 8-16* 8-27* 9-4* 9-8* 9-38* 9-41* 9-45* 9-48* 10-7* 10-17* 10-37 10-41* 12-23 12-27 13-16* 13-27 13-37 14-28* 14-46* 14-48* 15-6* 15-10* 15-12* 15-14* 16-30* 16-32* 16-35* 17-17* 17-18* 18-12* 18-21* 18-22* 18-24* 18-28* 18-30* 19-25* 19-29* 19-30* 19-33* 20-4* 20-25* 21-9* 21-13* 21-22* 21-25* 21-41* 22-27* 22-41* 22-46* 24-42* 24-46* 25-12* 25-26* 26-1* 26-15* 27-35* 27-38 27-50* 28-8* 29-12* 29-31* 30-18* 30-23* 31-16* 33-6 33-41* 33-55* 34-22* 34-39* 35-27* 35-36* 35-39* 36-27* 36-35* 37-23* 37-32* 37-36* 39-2* 39-14* 39-32* 39-43* SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page S-3 Cross reference table (CREF V05.03a) POSTBL 24-33 24-48 PRECOL 9-47* 24-29 26-2* 30-15 30-20* 40-46# PRELIN 7-21* 9-42 9-46* 24-26 30-13 30-19* 40-45# QMAX 35-38* 35-45 36-34 36-37 QRSTOR 36-30* 36-33 36-37 QZ 35-34 35-45 R0 2-20# 6-14 6-17 7-7* 7-8* 7-10 7-13 7-15 7-18* 7-19* 8-10* 8-11* 8-12 8-14 8-15* 9-3* 9-9* 9-12 9-14 9-20* 9-21 9-23 10-6* 10-16* 10-35* 10-36* 10-39* 10-42* 10-46 10-47 11-11* 11-13 12-20* 12-21* 12-30* 13-19* 13-25 13-29 13-33 13-34* 13-37* 13-39 14-17* 14-19* 14-20* 14-22 14-24 14-25* 14-26 14-45* 16-24* 16-25 16-29* 16-31* 16-34* 16-36* 16-40* 17-1* 17-12* 18-8* 18-27* 18-29* 18-43* 19-1 19-3 19-5 19-8 19-11* 19-12* 19-15 19-23 19-32* 19-35* 20-1* 20-3* 20-9* 20-16 20-18* 20-19* 20-20 20-21* 20-24* 20-26* 21-4* 21-7* 21-12* 21-29* 22-19 22-21* 22-22* 22-23 22-25* 22-28 22-30 22-37* 22-45* 23-16 24-23* 24-24 24-36 24-39* 25-2 25-4* 25-14 25-17* 25-18 25-18* 26-30 27-16 27-46* 29-24 29-28* 29-29 30-11 30-12* 30-13 30-22* 31-8 31-11 31-14 32-29 32-31* 33-2 33-8* 33-24 33-35* 33-36* 34-3* 34-7* 34-11* 34-15* 34-19* 34-25* 34-28* 34-31* 34-34* 34-37* 34-38 35-23* 35-26 35-28* 35-29 35-35 35-38 35-40* 35-41 36-21* 36-22* 36-23 36-29 36-30 36-31* 37-19 37-20* 37-22* 37-25* 37-26 37-27* 37-28 37-29 37-30* 38-48 39-6 39-13* 39-20* 39-24 39-26 39-28 39-38 39-39* R0OFF 33-53 33-57 34-2 34-38* 34-43 37-17* 37-30 37-40 R1 2-21# 7-12* 7-13 7-15* 7-16* 7-17* 7-20* 8-17 8-19 8-24 8-25* 8-26* 9-5 9-6* 9-7* 9-40* 10-18 10-19* 10-20* 10-27 10-31 11-12* 11-13* 11-14* 12-12 13-3* 13-7 13-20* 13-21 13-23* 13-24 13-25 13-33* 13-34 13-35 14-9* 14-10* 14-32* 16-19 17-21* 18-33 22-30* 24-24 24-31 24-32* 24-33 24-35* 24-36* 24-38* 24-39 24-40 24-45* 25-2 26-30* 27-13 27-20* 27-21* 27-26 27-28 27-30 27-32 27-38 27-41 27-44 27-49* 33-4* 33-15* 33-27* 33-32 35-19* 35-20* 35-21 35-22* 35-23 35-34* 35-35* 36-3* 36-5* 36-8* 36-12 36-26* R2 2-22# 8-30* 8-32 8-35 9-14* 9-17* 9-28* 9-30 9-31* 9-39* 10-3* 10-4 10-5* 10-13 10-21* 10-22 10-32* 10-33 10-37* 10-43* 10-44 10-46* 11-5* 11-6 11-11 12-12* 12-13* 12-15* 12-16 12-22 12-27 13-4* 13-18* 13-23 13-24* 13-27* 13-29 13-35 13-39 14-31* 14-35* 14-47* 17-20 17-20* 18-1 18-13 18-15 18-23* 18-35 18-36 18-41 19-19 19-26* 19-28 19-31* 20-5 20-7 21-34 21-38 21-40 22-20 22-33* 22-34 22-36* 24-28 24-37* 26-14* 27-14 27-17 27-19* 27-21 27-48* 28-24* 28-25 28-26 28-28* 28-31* 28-32* 30-15 30-20 33-5* 33-26* 33-34 35-28 35-29* 35-30 35-42 36-10* 36-15 36-32* R3 2-23# 8-34* 8-35* 8-36 9-37* 9-44* 10-10* 10-13* 12-18* 12-19 12-25 13-6* 13-10* 13-11 13-13* 14-14* 14-15 15-5* 15-9* 21-19* 21-20 21-28* 21-32* 21-33* 21-34 22-26* 24-28* 24-29* 24-33 24-37 24-38 25-8* 25-11* 25-16* 25-17 25-22* 25-25* 28-22* 28-23* 28-25* 28-26* 28-30* 28-32 28-34* 29-25 29-26* 29-27 29-27* 29-28 30-17 30-21* 33-33* 33-36 33-47 R4 2-24# 8-3* 8-5* 8-6 8-18 8-19 8-21* 8-22 8-24* 8-26 8-38* 9-5* 9-7 10-8* 10-11* 10-18* 11-16* 12-6* 12-11* 12-13 13-7* 13-15* 13-17* 14-4* 14-6* 14-7 14-10 14-29* 14-40 14-42 14-44 14-44 16-18* 17-4 17-10 18-5* 18-6 18-11* 18-31 18-43 21-1* 21-2 24-19 24-21 27-15 27-22* 27-25* 27-33* 27-42* 27-47* 28-24 28-35* 31-19 31-22 31-25 31-29 33-1* 33-4 33-11 33-13 33-20 33-22 33-26 33-28* 33-30 34-2* 34-4 34-8 34-12 34-16 34-20 35-30 35-40 35-41* 35-42 36-1* 36-2* 36-4* 36-6* 36-8 36-10 36-12* 36-13* 36-15* 36-16* 36-18 36-18* 36-19* 36-23* 36-33* 36-34* 37-16* 39-45* R5 2-25# 5-30 5-32 6-17 6-19 6-20 6-21 6-22 6-23 7-12 7-16 7-18 7-21 7-22 8-5 8-8 8-10 8-12 8-14 8-17 8-18 8-21 8-22 8-23 8-25 8-28 8-30 8-32 8-34 8-36 9-6 9-9 9-10 9-20 9-28 9-32 9-35 9-40 9-42 9-46 9-47 10-3 10-14 10-14 10-19 10-25 10-27 10-29 10-31 10-33 10-34 10-35 10-40 10-40 10-42 10-49 10-49 11-9 11-12 11-14 11-21 12-11 12-15 12-16 12-18 12-20 13-5 13-5 13-10 13-14 13-18 13-19 SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page S-4 Cross reference table (CREF V05.03a) 13-20 14-6 14-7 14-8 14-9 14-11 14-11 14-12 14-13 14-14 14-17 14-20 14-21 14-24 14-26 14-27 14-30 14-30 14-31 14-32 14-34 14-34 14-35 14-36 14-38 14-38 15-3 15-7 15-11 15-13 16-18 16-32 16-35 16-38 16-45 17-5 17-6 17-15 17-21 17-23 17-25 18-3 18-9 18-13 18-15 18-19 18-21 18-26 18-28 18-29 18-30 18-31 18-33 18-34 18-34 18-35 18-36 18-38 18-38 18-41 19-13 19-21 20-1 20-4 20-7 20-9 20-13 20-22 20-25 21-1 21-2 21-5 21-10 21-14 21-15 21-17 21-19 21-24 21-29 21-30 21-32 21-36 21-38 21-40 22-21 22-22 22-23 22-25 22-27 22-28 22-29 22-31 22-32 22-38 22-38 22-43 22-43 22-45 22-46 24-19 24-21 24-26 24-26 24-29 24-32 25-6 25-9 25-16 25-20 25-23 26-2 27-17 27-19 27-20 27-23 27-23 28-7 28-23 29-26 30-12 30-13 30-15 30-19 30-19 30-20 31-19 31-22 31-25 31-28 31-31 32-32 33-1 33-5 33-15 33-27 33-28 33-29 33-30 33-31 33-32 33-33 33-34 33-35 33-37 33-38 33-39 33-40 33-42 33-43 33-44 33-45 33-47 33-48 33-49 34-1 34-3 34-7 34-11 34-15 34-25 34-28 34-32 34-37 35-19 35-20 35-22 35-26 35-34 35-38 36-2 36-29 36-30 36-32 36-33 36-34 37-15 37-17 37-18 37-20 37-25 37-26 37-27 37-29 37-31 37-35 38-45 38-46 39-1 39-3 39-17 39-41 39-42 RETSYM 3-13# 17-1 17-13 RTMOST 19-21 21-38 21-40* 22-32* 27-17 27-19 40-26# RTRANS 14-5 28-40# RWSIZE 6-19* 6-20* 6-21* 6-22* 6-23* 6-29 7-12 7-16 7-16 7-18 7-21* 7-27 8-8 8-10 8-17* 8-22* 8-23* 8-28 8-30 8-32 8-34 8-36 8-41 9-9 9-20 9-28 9-32* 9-40 9-42 9-46* 9-47* 9-52 10-3 10-14* 10-19 10-25 10-27 10-29 10-31* 10-33* 10-34* 10-35 10-40 10-40* 10-42 10-49 10-49* 10-51 11-9 11-12 11-14 11-14 11-21 11-30 12-11 12-15 12-18 12-20 12-34 13-5 13-5* 13-14* 13-18 13-20 13-20 13-42 14-6 14-7* 14-8* 14-11 14-11* 14-17 14-21* 14-24* 14-26* 14-27* 14-30 14-30* 14-31 14-32 14-34 14-34* 14-35 14-50 15-3 15-7 15-11* 15-16 16-32 16-35 16-38 16-45 16-47 17-15 17-21 17-23 17-25 17-29 18-3 18-13 18-15* 18-19 18-21 18-26* 18-28 18-29 18-30 18-31 18-33* 18-34 18-34* 18-35* 18-36 18-38 18-38* 18-41 18-46 19-13 19-21 19-39 20-1 20-4 20-7 20-9 20-13 20-22 20-25 20-29 21-14 21-15 21-17 21-24* 21-30 21-32 21-36 21-38 21-40* 21-43 22-21 22-22 22-27 22-28* 22-29* 22-31* 22-32* 22-38 22-38 22-43 22-43 22-45 22-46 22-49 24-19 24-21 24-26 24-26 24-29 24-48 25-6 25-9* 25-20 25-23* 25-28 26-2* 26-33 27-17 27-19 27-20 27-23 27-23 27-52 28-7* 28-22 28-42 30-12 30-13 30-15 30-19 30-19* 30-20* 30-27 31-19* 31-22* 31-25* 31-28* 31-31* 31-34 33-5 33-15 33-27 33-31 33-32* 33-33 33-34* 33-35 33-37 33-38 33-39 33-40 33-42* 33-43* 33-44* 33-45* 33-47* 33-48* 33-57 34-3 34-7 34-11 34-15 34-25 34-28 34-32 34-43 35-19 35-20 35-20 35-22 35-45 36-1 36-37 37-15* 37-17 37-20 37-26* 37-27 37-29* 37-40 SAVREG 37-16 37-40 39-45 39-48 SCDSEQ 13-11 13-13 13-42 SCRDNE 15-12# SCREEN 5-30# SCRHOM 9-44# SCRINS 31-5 38-45# SCRLOD 6-27 6-29 SCROLN 21-17 33-40 33-42* 34-25 40-50# SCROUT 8-7 11-8 11-10 11-26 13-8 13-12 13-31 14-3# SCRPRM 5-34 32-29# SCRSAV 7-7 32-31 37-15# SCRUPD 6-26 7-7# 39-14 SCUSEQ 13-6 13-42 SEEALL 6-22* 16-38 17-15 17-23 18-19 18-29 19-13 20-1 20-9 20-13 20-22 22-45 31-28* 31-31* 33-37 33-45* 34-32 36-7 36-9 41-1# SETCUR 14-48 24-46 29-12 30-11# SETJSR 8-3 8-38 10-8 10-11 14-4 28-22# SETREG 33-41 35-19# 37-23 SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page S-5 Cross reference table (CREF V05.03a) SI.EXA 38-37# 39-22 SI.EXM 38-34# 39-22 SI.EXT 38-32# 39-30 SI.INS 38-41# 39-33 SI.NST 38-38# 39-10 SI.NUP 38-36# 39-11 SI.OK 38-31# 39-11 39-16 39-33 39-35 SI.OKS 38-40# SI.UC 38-33# 39-22 SIZEQR 35-36 35-45 SP 2-26# 5-34* 6-26* 8-6* 8-7* 9-10* 9-12 9-15* 9-16* 9-19* 9-21 9-23* 9-24* 9-29 9-29* 9-30 10-4* 10-21 10-43 10-47 11-5 11-15* 11-19 11-23 11-24 12-5* 12-8 12-10* 12-22* 12-23* 12-25 13-3 14-3 14-12 14-13* 14-21 14-22 14-25 14-27 14-29 16-19* 16-23* 16-25* 16-27* 16-28 16-29 16-31 16-33* 16-34 16-36 16-37* 17-2 17-2* 17-4* 17-5* 17-6 17-14* 17-19* 18-1* 18-2* 18-3 18-18* 18-39* 19-19* 19-26 19-28* 19-31 20-12* 20-15* 20-20* 20-26 21-14* 21-24 21-27 22-19* 22-20* 22-34 22-36 22-37 23-16* 23-17* 24-31* 24-35 24-40 24-45 25-1* 25-5* 25-6 25-13* 25-19* 25-20 27-13* 27-14* 27-15* 27-16* 27-26 27-44 27-46 27-47 27-48 27-49 29-24* 29-25* 30-11* 30-17* 30-21 30-22 33-6* 33-10* 33-11 33-19* 33-20 33-29* 33-31* 33-37* 33-38* 33-39* 33-40* 33-42 33-43 33-44 33-45 33-48 33-49 33-52 33-52 33-53 34-2 34-38 35-21* 36-21 36-26 37-15 37-17 37-18* 37-19* 37-30 37-32 37-33 38-45* 38-47* 38-48* 39-8 39-11 39-15* 39-21 39-22 39-30 39-33* 39-34* 39-38* 39-39 39-40* 39-42 SPACE 2-37# 6-22 10-38 10-38 13-28 13-28 13-38 13-38 19-3 25-14 27-30 27-32 27-39 27-39 27-41 27-41 31-28 36-6 39-26 SRWSIZ 41-17# SVSTRT 10-40* 10-49 40-38# TAB 2-31# 19-5 39-28 TABSYM 3-11# 20-3 TLISTN 39-2 39-48 TOPDOT 6-21* 8-10 14-7* 14-8* 31-19* 34-15 40-42# TRYTOP 10-15 11-19# TXSTOR 8-21 8-41 12-16 12-34 13-19 13-42 14-13 14-20 14-50 16-18 16-47 17-5 17-29 21-1 21-29 21-43 22-23 22-25 22-49 36-29* 36-32 36-37 37-25 37-40 TYPEBC 15-12 15-16 TYPEBF 26-1 26-33 29-31 29-34 USRPRM 34-22 34-43 USRSET 31-16 31-34 VT 2-33# VTBLNK 27-13# 28-40 VTBSYM 3-7# 19-17 VTCHAR 14-46 24-19# 28-40 VTSIZ1 13-5 14-30 22-38 22-43 27-23 36-14 36-17 41-6# VTSIZE 7-12 8-34 9-9 9-40 33-15 33-27 33-31 33-32* 33-48* 34-7 35-19 36-9 36-11 41-3# ZZ 8-12 8-25 8-41 9-6 9-52 14-9 14-38 14-50 17-6 17-29 21-2 21-43 SCREEN SCOPE "WATCH" FOR TECO MACRO V05.03c Monday 16-Sep-85 14:53 Page M-1 Cross reference table (CREF V05.03a) MULHSZ 4-32# 7-16 11-14 13-20 35-20