.TITLE IDLMTR - IDLE METER .SBTTL DISPLAYS GRAPHIC SHOWING CPU % IDLE .SBTTL MACRO DEFINITIONS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CALLIUNG PROCEDURE: ; ; PUSHL NULL_PID ; PID OF NULL PROCESS (VALUE, NOT THE ADDR) ; CALLS #1,IDLMTR $JPIDEF $SSDEF $IODEF ; ; ***** ; SET TIMER AND SAMPLE CPU TIME ACCUMULATED BY NULL PROCESS ; ***** .PSECT TTYOUT RD,WRT,GBL,OVR,NOEXE ; DATA NECCESSARY TO DO TTY OUTPUT TTCHAN: .BLKW 1 MSGLEN: .BLKW 1 ; MSGLEN FOR SUMMARY OUTPUT FAOLEN: .BLKW 1 IOSB: .BLKQ 1 OUTDSC: OUTLEN: .LONG 250. .ADDRESS OUTBUF OUTBUF: .BLKB 250. OUTPUT: .ASCID /SYS$OUTPUT/ .PSECT IDLDAT,RD,WRT,NOEXE BAR: .BLKL 1 BARPCT: .BLKL 1 FBLEN: .BLKL 1 GRPHOF: .ASCID /(B/ ; GRAPHICS OFF, CLEAR EOL LOCLEN: .BLKL 1 BARFMT: .ASCID /!3UL(0!AD!AS/ BARSTR: .ASCII /aaaaaaaaaaaaaaaaaaaaaaaaa/ .ASCII /aaaaaaaaaaaaaaaaaaaaaaaaa/ .ASCII /<<<<<<<<< GTJPI: MOVAL INICPU,CPUTIM $GETJPI_S EFN=#12.,- PIDADR=4(AP),- ITMLST=JPLST ; IOSB=IOSB ; CMPL R0,#SS$_NORMAL ; BEQL WAIT02 ; IF SUCCESS, WAIT FOR COMPLETION ; $EXIT_S CODE=R0 ; NO PRIVILEGE OUTPUT ERROR MESSAGE WAIT02: $WAITFR_S EFN=#12. MOVAL NEWCPU,CPUTIM $SETIMR_S DAYTIM=HALFSEC,EFN=#06 ; SET TIMER FOR 1/2 SEC (50*10msc) $WAITFR_S EFN=#06 ; WAIT FOR TIMER GETNEW: $GETJPI_S EFN=#13.,- PIDADR=4(AP),- ITMLST=JPLST ; IOSB=IOSB ; CMPL R0,#SS$_NORMAL ; BEQL WAIT03 ; IF SUCCESS, WAIT FOR COMPLETION ; $EXIT_S CODE=R0 ; NO PRIVILEGE OUTPUT ERROR MESSAGE WAIT03: $WAITFR_S EFN=#13. LOOKR3: SUBL3 INICPU,NEWCPU,R3 ; FIND THE DIFFERENCE ASHL #1,R3,BARPCT ; MULTIPLY BY 2 ; CURSOR POSITIONING ; $ASSIGN_S DEVNAM=TTNAME,CHAN=TTCHAN ; ASSIGN SYS$OUTPUT FAOBAR: $FAO_S CTRSTR=BARFMT,OUTLEN=FBLEN,- OUTBUF=BARDSC,P1=BARPCT,P2=R3,P3=#BARSTR,P4=#GRPHOF $QIO_S CHAN=TTCHAN,- FUNC=#IO$_WRITEVBLK!IO$M_BREAKTHRU!IO$M_REFRESH,- P1=BARBUF,P2=FBLEN,IOSB=IOSB ; WRITE OUT BAR MOVL #1,R0 ; PUT A SUCCESS STATUS IN R0 RET .END