; .TITLE MG03.. GENERAL INPUT PROCEDURE ; .IDENT /MG03.A/ ; ; MODS LIST ; ; (A) AUTOMATIC LUN ASSIGNMENT ; ; ; .PAGE .SBTTL VDU INPUT PROCEDURE ; .IF EQ OPSYS-IAS ;IS THIS AN IAS SYSTEM .MCALL QIOW$S .ENDC ; .IF EQ OPSYS-RT11 ;IS THIS AN RT11 SYSTEM .MCALL .TTYOUT,.TTINR ; IO.RNE = 000001 ;READ NO ECHO IO.RLB = 000000 ;REAL LINE (BLOCK) SPECMD = 010000 ;SPECIAL MODE BIT JSW = 000044 ;ADDRESS OF JOB STATUS WORD ; .ENDC ; V$INPUT:: ; ; ; THIS PROCEDURE HAS TWO ENTRY POINTS ; ENTRY + 0 = READ WITH ECHO ; ENTRY + 2 = READ WITH NO ECHO ; ; EXIT CONDITIONS ; ; R0 -> THE INPUT TYPED STRING ADDRESS ; ; ; ; ; ENTRY POINT ONE READ WITH ECHO ; BR 2$ ;BYPASS JUMP ; ; ; ENTRY POINT TWO READ WITHOUT ECHO ; MOV #IO.RNE,V$FUN ;HOLD FUNCTION CODE BR 3$ ;PREFORM READ REQUEST ; ; 2$: MOV #IO.RLB,V$FUN ;HOLD FUNCTION CODE ; 3$: ;COMMON FUNCTION SECTION .IF EQ OPSYS-IAS ;CODE FOR IAS SYSTEMS CALL V$ON ;ASSIGN LUN TO TERMINAL QIOW$S V$FUN,V$LUN,V$EFN,,#V$ISB,,<#V$STR+2,V$CNT> ;READ BLOCK OF DATA MAX VDUSIZE CHARACTERS ;V$CNT WILL NORMALLY HOLD VALUE 80 DEFAULT ;USE LUN V$LUN AND EVENT FLAG V$EFN ;DATA TO BE STORED IN LOCATION V$STR+2 ONWARDS MOV V$ISB+2,V$STR ;STORE NUMBER OF CHARACTERS READ CMPB V$ISB+1,#13. ;WAS LAST CHARACTERS A CARRIAGE RETURN BNE 60$ ;J IF LAST CHARACTER NOT ; CMP #IO.RNE,V$FUN ;WAS LAST FUNCTION READ NO ECHO BEQ 60$ ;IF NO ECHO DO NOT OUTPUT CRLF MOV #62$,R0 ;HOLD ADDRESS OF CRLF DATA CALL V$TX ;OUTPUT CRLF TO TERMINATE MESSAGE ; .ENDC ;END OF IAS CODE ; ; .IF EQ OPSYS-RT11 ;RT-11 SYSTEM CODE ; BIS #SPECMD,@#JSW ;SPECIAL ACTION ON VDU I/O SAVE R1 ;PROTECT REGISTER R1 5$: MOV #V$STR+2,R1 ;START ADDRESS OF CHARACTERS IN BUFFER CLR V$STR ;CHARACTER COUNT = 0 ; 10$: .TTINR ;HAS A CHARACTER ARRIVED IFERROR 10$ ;LOOP TILL CHAR ARRIVED BIC #200,R0 ;STRIP PARITY BIT MOVB R0,V$ISB+1 ;SAVE LAST CHARACTER CMP R0,#177 ;IS THIS AN ERASE CHARACTER BNE 20$ ;J IF NOT RUB OUT ; TST V$STR ;IS NUMBER OF CHARACTER ENTERED <=0 BLE 10$ ;J IF NO CHARACTER IN BUFFER DEC R1 ;PUSH CHAR POINTER BACK A PLACE DEC V$STR ;REDUCE CHARACTER COUNT BY ONE BR 10$ ;GET NEXT CHARACTER ; 20$: CMP R0,#33 ;IS THIS AN ESCAPE CHARACTER BEQ 40$ ;J IF ESCAPE CMP R0,#15 ;IS THIS CHARACTER A CR BEQ 50$ ;J IF CR CMP R0,#12 ;IS THIS CHARACTER A LF BEQ 50$ ;J IF LF CMP R0,#25 ;IF THIS CHARACTER A CNT/U BEQ 5$ ;IF CNT/U WIPE LINE CLEAN CMP R0,#22 ;IS THIS CHARACTER CNT/R (RETYPE) BEQ 55$ ;J IF RETYPE REQUEST ; MOVB R0,(R1)+ ;SAVE CHARACTER CMP V$FUN,#IO.RNE ;IS THIS A READ NO ECHO BEQ 30$ ;J IF READ NO ECHO .TTYOUT ;DUMP CHAR TO TERMINAL 30$: CMP V$STR,V$CNT ;HAS CHARACTER LIMIT BEEN REACHED BLT 10$ ;J IF NOT 40$: UNSAVE R1 ;RESTORE R1 BR 60$ ;EXIT ; 50$: CMP V$FUN,#IO.RNE ;IS THIS A READ NO ECHO BEQ 40$ ;J IF READ NO ECHO 55$: .TTYOUT #15 ;OUTPUT A CR .TTYOUT #12 ;OUTPUT A LF CMPB V$ISB+1,#22 ;IS THIS A RETYPE REQUEST BNE 40$ ;EXIT IF NOT MOV #V$STR,R0 ;HOLD STRING ADDRESS CALL V$TX ;OUTOUT STRING BR 10$ ;GET MORE CHARCTERS ; .ENDC ;END OF RT-11 CODE 60$: MOV #V$STR,R0 ;HOLD ADDRESS OF INPUT STRING RETURN ;EXIT FROM THIS PROCEDURE ; ; .IF EQ OPSYS-IAS ;IS IAS SYSTEM ; 62$: .BYTE 2,0,10.,13. ;CRLF DATA .ENDC ; ; .END ; ;