;***************************************************************************; ; ; ; 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