;*********************************************************************
;* JOBTIM.M68
;*
;* Scans the system and prints every defined job to the screen
;* AND their cumulative CPU time
;*
;* Usage: JOBTIM
;*
;* Must .LNKLIT JOBTIM after "Phase 2" when assembling
;*
;* by Dave Heyliger - AMUS Staff
;*********************************************************************
; added Elapsed Time. 12 May 1992. Rhett McMahon MCMA/AM
;*********************************************************************
AUTOEXTERN
OBJNAM JOBTIM.LIT ;Define the final product
SEARCH SYS ;Grab all MACRO definitions
SEARCH SYSSYM
SEARCH TRM
VMAJOR=1. ;Major version number of the program
VMINOR=1. ;Minor version number of the program
VEDIT=101. ;the edit number of the program
.OFINI ;OFfset INItialization:
.OFDEF BUFFER,7. ;OFfset DEFinition - "BUFFER"
.OFSIZ IMPSIZ ;IMPSIZ is the final size of bytes (7)
DEFINE TYPEIT V,B
;+---
;| TYPEIT will process a JCB variable that is two words packed RAD50 data
;| and type this variable to the screen in ascii format.
;| where
;| V = variable to be UNPACKED
;| B = buffer area to place unpacked characters
;+--------------------------------------------------------------------------
LEA A1,V(A4) ;A1 points to variable to be unpacked
LEA A2,B(A5) ;and ^ A2 to byte "0" of "BUFFER"
UNPACK ;get the letters unpacked
UNPACK ; ...for up to full letters
CLRB @A2 ;Place a "null" after the characters
LEA A2,B(A5) ;Repoint A2 to byte "0" of "BUFFER"
TTYL @A2 ;Print out all chars until a null
ENDM
DEFINE PRTTAB AA,BB
;+---
;| PRTTAB acts just like "PRINT TAB (#,#) from within BASIC
;| where
;| AA is the first #, BB is the second #
;+------------------------------------------------------------
MOVB #AA,D1 ;move 1st number into D1
LSLW D1,#10 ;shift it left 8. bits
MOVB #BB,D1 ;move in 2nd number
TCRT ;and perform TCRT call
ENDM
DEFINE TABDWN AA,BB
;+---
;| TABDWN - or "TAB DOWN" will place the cursor at the row specified by
;| AA and the column specified by BB. Assumes a data register
;| (AA) has been "dedicated" to keep track of which row.
;| where
;| AA is a dedicated data register holding current row number
;| BB is the column number
;+----------------------------------------------------------------------
MOVB AA,D1 ;move in value from dedicated reg.
LSLW D1,#10 ;shift it left 8. bits
MOVB #BB,D1 ;move in column number
TCRT ;and perform TCRT call
INC AA ;increment dedicated data register
ENDM
;--- Program initialization and screen format headers etc...
;
PHDR -1,0,PH$REE!PH$REU ;Program is Re-entrant & Re-useable
GETIMP IMPSIZ,A5 ;Reg. A5 now ^'s to byte "0" of BUFFER
PRTTAB -1,29. ;cursor OFF
PRTTAB -1,0 ;clear the screen
MOV #1,D4 ;initialize dedicated register
TABDWN D4,40 ;move cursor here
TYPE < Job CPU Time Elapsed Time> ;create a header
TABDWN D4,40 ;again move the cursor
TYPE <-------+----------+-------------> ;create an underline
;--- First loop: type out both the JOB name and the cum. CPU time
;
LOOP: CTRLC EXIT ;quit on a ^C
MOV JOBTBL,A0 ;Get base of JOB TABLE into A0
NXTJOB: MOV (A0)+,A4 ;and let A4 point to each JBC
MOV A4,D0 ;this will set the flags 2 B checked
BMI SNOOZE ;end of the JOB TABLE on a "-1"
BEQ NXTJOB ;goto the top on a "0"
TABDWN D4,40 ;adjust cursor
TYPEIT JOBNAM,BUFFER ;type out the JOB NAME
TYPE < > ;type some spaces
MOV JOBCPU(A4),D1 ;get cpu time
MOV #0,A2 ;a must for $OTCPU
CALL $OTCPU ;type out the time
BR NXTJOB ;do it again
;--- Now for each loop thereafter, just type out the CPU time
;
; NOTE: if you have more than 15 or so JOBs, you might want to make
; have SNOOZE: at the EXIT: label for just a 1-time listing.
;
SNOOZE: PRTTAB -1,29. ;cursor OFF while sleeping
SLEEP #25000. ;sleep for a bit
CTRLC EXIT ;quit on a ^C
MOV #3,D4 ;initialize D4 for TABDWN
MOV JOBTBL,A0 ;Get base of JOB TABLE into A0
;;; PRTTAB -1,28. ;cursor ON for effect
NXTPRG: MOV (A0)+,A4 ;and let A4 point to each JBC
MOV A4,D0 ;this will set the flags 2 B checked
BMI SNOOZE ;end of the JOB TABLE on a "-1"
BEQ NXTPRG ;goto the top on a "0"
TABDWN D4,51 ;adjust before each PROGRAM is typed
MOV JOBCPU(A4),D1 ;get CPU time
MOV #0,A2 ;a must for $OTCPU
CALL $OTCPU ;type it out
MOV JOBUSR(A4),D1
BEQ NXTPRG
TYPESP < >
MOV JOBCON(A4),D1 ;get elapsed time
SUB A2,A2 ;clear register A2 for $OTCON
CALL $OTCON ;output elapsed time to screen
BR NXTPRG ;do it again
EXIT: PRTTAB -1,28. ;cursor ON
PRTTAB -1,0 ;clear the screen