;***************************************************************************;
; ;
; UltraStat 3.x ;
; JOB STATUS SCREEN ;
; ;
;***************************************************************************;
;Copyright (C) 1988 UltraSoft Corporation. All Rights Reserved.
;
;Written by: David Pallmann
;
;All edit history for USTAT is in USYM.M68.
ASMMSG "== UltraStat 3.x (JOB) =="
AUTOEXTERN
;--- Include files
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
COPY DSKINF.CPY
COPY USYM/L
;--- Job Scanning Loop
JOB.SCAN::
MOV JOBTBL,A0 ; point to base of job table
LEA JIB,JB.TBL(MEM)
MOVB JOB.ROW(MEM),ROW(MEM) ; set starting job row
CLRB JOB.UPDATE(MEM) ; clear new arrow row
JOB.BYPASS:
MOVWL JOB.OFFSET(MEM),D0
BEQ JOB.LOOP
10$: MOV (A0)+,D7
JMI SNOOZE
ADD #JB.SIZ,JIB
SOB D0,10$
JOB.LOOP:
KEY GET.COMMAND
BIT #F$UPDATE,FLAGS(MEM)
BEQ 10$
OR #JB$NEW,JB.FLG(JIB)
10$: MOV (A0)+,D7 ; get JCB address
MOV D7,JCB ; (condition codes unchanged)
JMI SNOOZE
JEQ DEALLOCATED.JOB ; handle deallocated job
JMP ALLOCATED.JOB ; handle allocated job
JOB.NEXT::
ADD #JB.SIZ,JIB ;
INCB ROW(MEM) ; increment display row
CMMB ROW(MEM),LAST.ROW(MEM) ; end of page?
JLOS JOB.LOOP ; no - on to next job
JMP SNOOZE
;--- Handle a deallocated job
DEALLOCATED.JOB:
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 10$ ; yes
TST JB.NAM(JIB) ; already deallocated?
BEQ 20$ ; yes
10$: CURSOR ROW(MEM),#2 ; position cursor
LOW ; low intensity
CLREOL
CLR JB.NAM(JIB)
20$: JMP JOB.NEXT
;--- Handle an allocated job
ALLOCATED.JOB:
CALL JOB.NAME ; update job name
KEY 10$ ; check for keyboard input
CALL JOB.TERM ; update terminal name
KEY 10$ ; check for keyboard input
CALL JOB.PPN ; update log PPN
KEY 10$ ; check for keyboard input
CALL JOB.STATE ; update run state
KEY 10$ ; check for keyboard input
CALL JOB.PROG ; update job program name
KEY 10$ ; check for keyboard input
CALL JOB.MEMORY ; update job memory size
KEY 10$ ; check for keyboard input
CALL JOB.CPU ; update job CPU time
KEY 10$ ; check for keyboard input
BIT #F$USER,FLAGS(MEM)
BNE 4$
CALL JOB.READS ; update job disk reads
KEY 10$ ; check for keyboard input
CALL JOB.WRITES ; update job disk writes
KEY 10$
CALL JOB.PRI
KEY 10$
BR 6$
4$: BIT #F$32,FLAGS(MEM) ; /32 data structures present?
BEQ 6$ ; no
CALL JOB.USER
KEY 10$
6$: BIT #F$WIDE,FLAGS(MEM)
JEQ 100$
CALL JOB.OWNER
KEY 10$
CALL JOB.LEVEL
KEY 10$
CALL JOB.MEM.BASE
KEY 10$
CALL JOB.JCB.BASE
KEY 10$
CALL JOB.TCB.BASE
100$: AND #^C<JB$NEW>,JB.FLG(JIB) ; clear forced update flag
10$: CALL ARROW
JMP JOB.NEXT
;--- update job name
JOB.NAME:
MOV JOBNAM(JCB),D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 10$ ; yes
CMM D0,JB.NAM(JIB) ; did name change?
REQ ; no
10$: MOV D0,JB.NAM(JIB)
CURSOR ROW(MEM),#2
HIGH
OUTNAM JB.NAM(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update job attached terminal name
JOB.TERM:
CLR D0
MOV JOBTRM(JCB),D6
BEQ 10$
MOV D6,A6
MOV -4(A6),D0
10$: BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 20$ ; yes
CMM D0,JB.TRM(JIB) ; did term name change?
REQ ; no
20$: MOV D0,JB.TRM(JIB)
CURSOR ROW(MEM),#9.
HIGH
OUTNAM JB.TRM(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update job log account
JOB.PPN:
MOVW JOBUSR(JCB),D0
MOVW JOBDEV(JCB),D2
MOVW JOBDRV(JCB),D3
BIT #JB$NEW,JB.FLG(JIB)
BNE 11$
CMPW D0,JB.PPN(JIB)
BNE 10$
CMPW D2,JB.DEV(JIB)
BNE 10$
CMPW D3,JB.DRV(JIB)
REQ
10$: BIT #F$LOG,FLAGS(MEM)
BEQ 11$
DING
11$: MOVB ROW(MEM),JOB.UPDATE(MEM)
MOVW D0,JB.PPN(JIB)
MOVW D2,JB.DEV(JIB)
MOVW D3,JB.DRV(JIB)
CURSOR ROW(MEM),#16.
HIGH
TYPE < >
CURSOR ROW(MEM),#16.
TSTW JB.PPN(JIB)
JEQ NOT.LOGGED.IN
BIT #F$ERSATZ,FLAGS(MEM)
BEQ LOG.PHYSICAL
LOG.ERSATZ:
SAVE A0
LEA A0,JB.DEV(JIB)
LEA A2,TEMP(MEM)
CALL PPNERZ
REST A0
BNE LOG.PHYSICAL
CLRB @A2 ; [103]
TTYL TEMP(MEM)
FCYAN
RTN
LOG.PHYSICAL:
OUTDEV JB.DEV(JIB)
MOVWL JB.DRV(JIB),D1
DCVT 0,OT$TRM
TYPE :
CMP D1,#10.
BHI 10$
TYPESP
10$: CMPB JB.PPN+1(JIB),#10
BHIS 20$
TYPESP
20$: CMPB JB.PPN+1(JIB),#100
BHIS 30$
TYPESP
30$: TYPE [
PRPPN JB.PPN(JIB)
TYPE ]
FCYAN
RTN
NOT.LOGGED.IN:
FCYAN
LOW
TYPE not logged in
RTN
;--- update job program name
JOB.PROG:
MOV JOBPRG(JCB),D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 11$ ; yes
CMM D0,JB.PRG(JIB) ; did name change?
REQ ; no
10$: BIT #F$PROG,FLAGS(MEM)
BEQ 11$
DING
11$: MOV D0,JB.PRG(JIB)
CURSOR ROW(MEM),#32.
HIGH
OUTNAM JB.PRG(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update run state
JOB.STATE:
FCYAN
MOVWL JOBSTS(JCB),D1
LEA A1,STATE1
MOV #1,D0
CLR D2
10$: TSTW @A1
BEQ 20$
INC D0
MOVW (A1)+,D2
BITW D2,D1
BNE 30$
BR 10$
20$: MOV #1,D0
30$: DEC D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 40$ ; yes
CMMW D0,JB.STS(JIB) ; did run state change?
REQ ; no
40$: MOVW D0,JB.STS(JIB) ; update run state
CURSOR ROW(MEM),#39.
LEA A1,STATE2
MUL D0,#4
ADD D0,A1
CMPB @A1,#'a
BHIS 50$
HIGH
FGREEN ; RUN in green
CMPW JB.STS(JIB),#1 ; IOW?
BNE 60$ ; no
FYELLOW ; IOW in yellow
BR 60$
50$: LOW
CMPW JB.STS(JIB),#2 ; in monitor mode?
BNE 54$ ; no
FWHITE ; white fgd
BR 60$
54$: CMPW JB.STS(JIB),#9. ; in control-C state?
BNE 60$ ; no
FRED ; yes - red
60$: TTYL @A1
MOVB ROW(MEM),JOB.UPDATE(MEM)
FCYAN
RTN
;--- update memory
JOB.MEMORY:
MOV JOBSIZ(JCB),D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 10$ ; yes
CMM D0,JB.MEM(JIB) ; memory changed?
REQ ; no
10$: MOV D0,JB.MEM(JIB)
CURSOR ROW(MEM),#43.
TST D0
BEQ 20$
HIGH
MOV D0,D1
DIV D1,#2000
AND #177777,D1
DCVT 4,OT$TRM!OT$ZER
TYPE K
BR 30$
20$: LOW
TYPE < none>
30$: MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update job CPU time
JOB.CPU:
MOV JOBCPU(JCB),D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 10$ ; yes
CMM D0,JB.CPU(JIB) ; did CPU time change?
REQ ; no
10$: MOV D0,JB.CPU(JIB) ;
CURSOR ROW(MEM),#49.
HIGH
MOV D0,D1
SUB A2,A2
CALL $OTCPU
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update job disk reads
JOB.READS:
MOV JOBDSR(JCB),D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 10$ ; yes
CMM D0,JB.DSR(JIB) ; did disk reads change?
REQ ; no
10$: MOV D0,JB.DSR(JIB) ;
CURSOR ROW(MEM),#60.
TST D0
BEQ 20$
HIGH
MOV D0,D1
DCVT 5,OT$TRM!OT$ZER
BR 30$
20$: LOW
TYPE < none>
30$: MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update job disk writes
JOB.WRITES:
MOV JOBDSW(JCB),D0
BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 10$ ; yes
CMM D0,JB.DSW(JIB) ; did disk writes change?
REQ ; no
10$: MOV D0,JB.DSW(JIB) ;
CURSOR ROW(MEM),#66.
TST D0
BEQ 20$
HIGH
MOV D0,D1
DCVT 6,OT$TRM!OT$ZER
BR 30$
20$: LOW
TYPE < none>
30$: MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- Update job user name
JOB.USER:
MOVSTR JOBUSN(JCB),TEMP(MEM)
BIT #JB$NEW,JB.FLG(JIB)
BNE 10$
CMPSTR TEMP(MEM),JB.USN(JIB)
REQ
10$: MOVSTR TEMP(MEM),JB.USN(JIB)
CURSOR ROW(MEM),#60.
HIGH
LEA A1,JB.USN(JIB)
MOV #16.,D2
20$: MOVB (A1)+,D1
BEQ 30$
TTY
SOB D2,20$
BR 40$
30$: TYPESP
SOB D2,30$
40$: MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- Update job priority
JOB.PRI:
MOV JOBRNQ+20(JCB),D0
BIT #JB$NEW,JB.FLG(JIB)
BNE 10$
CMPW D0,JB.PRI(JIB)
REQ
10$: MOVW D0,JB.PRI(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
CURSOR ROW(MEM),#73.
HIGH
MOV D0,D1
DCVT 3,OT$TRM!OT$ZER
RTN
;--- Update job owner
JOB.OWNER:
CLR D0
MOV JOBATT(JCB),D6
BEQ 10$
MOV D6,A6
MOV JOBNAM(A6),D0
10$: BIT #JB$NEW,JB.FLG(JIB) ; forced update?
BNE 20$ ; yes
CMM D0,JB.OWN(JIB) ; did name change?
REQ ; no
20$: MOV D0,JB.OWN(JIB)
CURSOR ROW(MEM),#78.
HIGH
OUTNAM JB.OWN(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- update job security level (if UltraSafe installed)
JOB.LEVEL:
RTN
;--- update job memory base
JOB.MEM.BASE:
MOV JOBBAS(JCB),D0
BIT #JB$NEW,JB.FLG(JIB)
BNE 10$
CMP D0,JB.BAS(JIB)
REQ
10$: MOV D0,JB.BAS(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
CURSOR ROW(MEM),#90.
HIGH
MOV D0,D1
OCVT 11,OT$TRM!OT$ZER
RTN
;--- update job JCB base
JOB.JCB.BASE:
MOV JCB,D0
BIT #JB$NEW,JB.FLG(JIB)
BNE 10$
CMP D0,JB.JCB(JIB)
REQ
10$: MOV D0,JB.JCB(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
CURSOR ROW(MEM),#100.
HIGH
MOV D0,D1
OCVT 11,OT$TRM!OT$ZER
RTN
;--- update job TCB base
JOB.TCB.BASE:
MOV JOBTRM(JCB),D0
BIT #JB$NEW,JB.FLG(JIB)
BNE 10$
CMP D0,JB.TCB(JIB)
REQ
10$: MOV D0,JB.TCB(JIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
CURSOR ROW(MEM),#110.
HIGH
MOV D0,D1
OCVT 11,OT$TRM!OT$ZER
RTN
STATE1: WORD J.IOW ; 1
WORD J.MON ; 2
WORD J.TOW ; 3
WORD J.TIW ; 4
WORD J.SLP ; 5
WORD J.MSG ; 6
WORD J.EXW ; 7
WORD J.SMW ; 8
WORD J.CCC ; 9
WORD J.LOK ; 10
WORD J.SUS ; 11
WORD J.FIL ; 12
WORD 0
STATE2: ASCIZ /RUN/
ASCIZ /IOW/
ASCIZ /mon/
ASCIZ /tow/
ASCIZ /tiw/
ASCIZ /slp/
ASCIZ /msg/
ASCIZ /exw/
ASCIZ /smw/
ASCIZ /ctc/
ASCIZ /lok/
ASCIZ /sus/
ASCIZ /fil/
END