.TITLE BEL ; ; PURPOSE: TO RING THE BEL ON TI: 1,2,3,4,5 TIMES A SECOND OR EVERY 10 SEC ; ; CALLING PROCEDURE: BEL I WITH I = 0: EVERY 10 SEC ; 1: 1/SEC ; 2: 2/SEC ; 3: 3/SEC ; 4: 4/SEC ; 5: 5/SEC ; ; TO STOP THIS TERRIBLE NOISE TYPE ^G ; ; ; REMARKS: THE TERMINAL IS ATTACHED TO THIS TASK ; ; ^C WILL REACH MCR AND NOT THIS TASK ; .GLOBL BEL .MCALL MRKT$S,QIO$S,EXIT$S,DIR$,GMCR$,WTSE$S,ASTX$S,SETF$S ; ; GMCR: GMCR$ ;LOCAL STORAGE FOR COMMAND LINE ; ; BEL: DIR$ #GMCR ;GET COMMAND LINE MOV #GMCR+G.MCRB+4,R0 ;POINT TO PARAMETER 0,1,2,3,4 OR 5 CALL $CDTB ;CONVERT THIS PARAMETER ASL R1 ;MUL BY 2 BGE B1 ;IF GE BRANCH CLR R1 ;IF LT MAKE IT 0 (EVERY 10 SEC A BLEEP) BR B2 ;AND BRANCH B1: CMP #10.,R1 ;IF PARAMETER < 5.... BGE B2 ;BRANCH MOV #10.,R1 ;IF NOT....MAKE IT 5 (A BLEEP 5/SEC) B2: MRKT$S #4,TAB(R1),#1,#MRKAST ;SET UP MARK TIME QIO$S #IO.ATA!TF.XCC,#5,#3,,,,<#INAST> ;ATTACH TERMINAL (^C TO MCR) WTSE$S #10. ;WAIT UNTIL ^G WAS TYPED EXIT$S ;AND EXIT ; ; MRKAST: QIO$S #IO.WAL,#5,#2,,#IO,,<#B,#1,#0> ;DO A BLEEP WTSE$S #2 ;AND WAIT FOR IT TO COMPLETE ;IF YOU DON'T WAIT, AND ^C IS TYPED SO ;MCR IS WAITING, THE OUTPUT (ALL BELLS) ;WILL BE QUEUED AND THE POOL WILL BE ;FILLED RATHER QUICKLY!!!!! MRKT$S #4,TAB(R1),#1,#MRKAST ;SET UP NEXT MARK TIME ASTEX: TST (SP)+ ;CORRECT SP ASTX$S ;AND EXIT AST ; ; INAST: BICB #200,(SP) ;GET RID OF PARITY BIT (IF ANY) CMPB B,(SP) ;^G???? BNE ASTEX ;IF NOT, EXIT AST SETF$S #10. ;IF IT WAS ^G, SET EVENT FLAG #10. BR ASTEX ;SO THE PROGRAM WILL EXIT AS SOON AS ;THIS AST IS SERVED ; ; TAB: .WORD 500. ;500 CLOCK TICKS .WORD 50. ;50.... .WORD 25. ;ETC .WORD 17. .WORD 13. .WORD 10. IO: .WORD 0,0 ;IO STATUS BLOCK B: .BYTE 7,0 ;OUTPUT BUFFER ; ; .END BEL