.TITLE TIMOUT ; TIMOUT FORTRAN CALLABLE SUBROUTINE ; ; ORIGINALLY WRITTEN FOR THE G.D.SEARLE "PSA" PROJECT BY F. PENNER, ; MODIFIED FOR DECUS SUBMISSION "VTLIB" BY K. ROLLER ; ; TIMOUT TIME OUT ; THIS SUBROUTINE, WHEN CALLED BEFORE A READ ; FROM THE SPECIFIED LUN, WILL DO AN I/O KILL AND TERMINATE ; THE READ IF A TERMINATING CHARACTER IS NOT TYPED ; WITHIN A SPECIFIED NUMBER OF SECONDS. (DEFAULT IS 10) ; IMMEDIATELY FOLLOWING THE READ THE FORTRAN PROGRAM ; SHOULD ISSUE A CANCEL MARK TIME : CALL CANMT(,IDS) ; ; ; TO USE: ; CALL TIMOUT(LUN,IDS) ; WHERE LUN IS THE LOGICAL UNIT OF THE TERMINAL, ; AND WHERE IDS WILL RETURN THE DIRECTIVE STATUS WORD ; IDS = +1 MEANS SUCCESS ; .MCALL QIOW$,DIR$ .MCALL MRKT$,ASTX$S MARK: MRKT$ MEFN,TMG,TNT,MRKAST ;MARK TIME AST DPB MEFN= 16. ;MARK EVENT FLAG NUMBER TMG= 10 ;TIME MAGNITUDE TNT= 2 ;TIME INTERVAL UNIT (2=SECONDS) QIOKIL: QIOW$ IO.KIL,LUN,EFN IOSTAT: .WORD 0 .WORD 0 EFN =5 ;EVENT FLAG NUMBER LUN =5 ;LUN FOR TERMINAL VFC =40 ; TIMOUT:: ;TIME OUT SUBROUT ENTRY POINT CMP 2(R5),#-1 ;IS LOGICAL UNIT PARAMETER PRESENT ? BEQ 1$ ;NULL PARAMETER ADDRESS, SO BRANCH MOV @2(R5),QIOKIL+Q.IOLU ;PUT PASSED LUN INTO CALL 1$: DIR$ #MARK ;DO MARK TIME AST MOV $DSW,@4(R5) ;RETURN DIRECTIVE STATUS WORD TO CALLER RTS PC ;RETURN TO CALLER MRKAST: ;ENTRY POINT FOR MARK TIME AST DIR$ #QIOKIL ;DO I/O KILL DIRECTIVE TST (SP)+ ;CLEAN STACK OF MARK AST ARG (EVNT FLG) ASTX$S ;AST EXIT .END