; TTYTST - TEST FOR UNSOLISITED CHAR USING SINGLE CHAR AST. ; LAST EDIT: 20-AUG-81 .NLIST .NLIST BEX .LIST TTM .TITLE TTYTST .LIST ; ; THIS ROUTINE ENABLES OUTPUT TO BE PERFORMED ON A TERMINAL WHILST ; AT THE SAME TIME ACCEPTING INPUT CHARACTERS FROM THE TERMINAL. ; IT ALSO ENABLES CHARACTERS TO BE INPUT WITHOUT WAITING FOR CR. ; ; CALL TTYTST(ICH[,LUN]) ; ; ICH IS CLEARED BY THE CALL AND REMAINS ZERO UNTIL A CHARACTER ; IS TYPED ON TI: IF A LUN IS SPECIFIED IT IS USED FOR INPUT ; OTHERWISE 6 IS ASSUMED. ; WHEN A CHARACTER IS ENTERED ICH RECEIVES ITS ASCII VALUE. ; TTYTST MUST THEN BE CALLED AGAIN IF ANOTHER CHAR IS TO BE READ. ; WHILE A REQUEST IS CURRENT THE TERMINAL IS ATTACHED THUS ; ANY OTHER TASK (EG. CLONE) ATTEMPTING TO WRITE TO THE TERMINAL ; WILL HANG. IF A DETACH IS TO BE PERFORMED WHEN NO CHARACTER HAS BEEN ; RECIEVED, TTYTST MAY BE CALLED WITH THE FIRST ARGUMENT NULL. ; ; ;- .PSECT TTYTST ; .MCALL DIR$,QIOW$,ASTX$S ; P1=2 P2=4 ; ; TTYTST::TSTB (R5) ;ANY ARGUMENTS ? BEQ DET ;IF SO DETACH CMPB (R5),#2 ;LUN SPECIFIED ? BLT 1$ MOV @P2(R5),R1 MOV R1,BLK+Q.IOLU MOVB R1,BLK+Q.IOEF 1$: MOV P1(R5),POINTR ;SAVE ADDRESS OF USERS LOCATION CMP POINTR,#-1 ;DETACH REQUEST ? BEQ DET CLR @P1(R5) MOV #IO.ATA,BLK+Q.IOFN DIR$ #BLK RETURN ; BLK: QIOW$ IO.ATA,6,6,,,, POINTR: .WORD 0 ; AST: BIC #177400,(SP) MOV (SP)+,@POINTR CALL DET ASTX$S ; DET: MOV #IO.DET,BLK+Q.IOFN DIR$ #BLK RETURN ; .END