.TITLE TEST VIRTUAL TERMINAL DRIVER .ENABLE LC .MCALL QIOW$S,EXIT$S .NLIST BEX INIMSG: .ASCII / This program is used to test out or manipulate the VT driver/ .ASCII <15><12> / It will accept any characters at all (including control/ .ASCII / characters,/<15><12>/ terminated by \\./ .ASCII <15><12> / \\ on its own will terminate the program./ .ASCII <15><12> / To set the 'trace' mode on or off type ?\./ .ASCII <15><12> / In trace mode, non-printing control characters are/ .ASCII / replaced by printing ones:-/ .ASCII <15><12> / = ^, = <, Null = /<177>/, Space = _/ .ASCII <15><12> / And the end of the record is indicated by a [/ INIMSL=.-INIMSG .EVEN .LIST BEX IOSTAT: .BLKW 2 INBUF: .BLKB 72. OUBUF: .BLKB 132. PRM: .ASCII /@@/ FLAG: .WORD 1 START: QIOW$S #IO.WVB,#5,#1,,,,<#INIMSG,#INIMSL,#40> ; START1: QIOW$S #IO.WVB,#5,#1,,,,<#PRM,#2,#44> MOV #INBUF,R0 CLR IOSTAT+2 ; 10$: QIOW$S #IO.RAL,#5,#1,,,, TST IOSTAT+2 BEQ 20$ CMPB (R0),#'\ BNE 20$ CMPB -1(R0),#'\ BEQ 30$ CMPB -1(R0),#'? BNE 20$ NEG FLAG BR START1 ; 20$: INC IOSTAT+2 INC R0 BR 10$ ; 30$: DEC IOSTAT+2 BEQ END QIOW$S #IO.WLB,#2,#1,,,,<#INBUF,IOSTAT+2> ; LOOP: QIOW$S #IO.RLB,#2,#1,,#IOSTAT,,<#OUBUF,#132.> CMPB IOSTAT,#IE.EOF BEQ START1 MOV IOSTAT+2,R0 TST FLAG BPL 60$ MOV #OUBUF,R1 ; 10$: CMPB (R1),#12 BNE 20$ MOVB #'^,(R1) BR 40$ ; 20$: CMPB (R1),#15 BNE 30$ MOVB #'<,(R1) BR 40$ ; 30$: TSTB (R1) BNE 35$ MOVB #177,(R1) BR 40$ ; 35$: CMPB (R1),#40 BNE 40$ MOVB #'_,(R1) ; 40$: INC R1 SOB R0,10$ MOVB #'],(R1) MOV #OUBUF,R0 SUB R0,R1 MOV R1,IOSTAT+2 DEC IOSTAT+2 INC R1 MOV #40,R2 BR 70$ ; 60$: MOV #OUBUF,R0 MOVB (R0)+,R2 DEC IOSTAT+2 MOV IOSTAT+2,R1 ; 70$: QIOW$S #IO.WVB,#5,#1,,,, MOV #OUBUF,R0 ADD IOSTAT+2,R0 CMPB (R0),#'> BNE LOOP JMP START1 END: EXIT$S .END START