;       DJOB1.M68 - Dynamic memory display DJOB13.LIT part 2
;
;       Copyright [c] STUYVESANT SofSystems


       SEARCH  SYS
       SEARCH  SYSSYM
       SEARCH  TRM

       RADIX 8.


       AUTOEXTERN

;
;MACROS

DEFINE  DPACK   ADDR,COUNT                              ; SET UP FOR UNPACK ADDR= WHERE RAD50 IS COUNT=# OF WORDS @(ADDR)
       LEA     A1,ADDR                                 ; EA=> A1
       MOV     #COUNT-1,D0                             ; D0 GETS COUNT-1 SO BEQ TRUE FOR 1 WORD
       CALL UPACK                                      ; UNPACK IT ONTO SCREEN AT CURRENT POSITION
       ENDM

DEFINE  L.CRT   ROW,COL                                 ; SET A WORD=ROW/COL CODE
       WORD    <ROW_8.>+<COL>
       ENDM

DEFINE  DSPLY   ROW,COL,TEXT                            ; SET BYTES =
       WORD    <ROW_8.>+<COL>                          ; ROW/COL CODE
       BYTE    20$$-10$$                               ; LENGTH OF MESSAGE
10$$:   ASCIZ   ?TEXT?                                  ; BYTES OF MESSAGE
       EVEN                                            ; FORCE EVEN FOR NEXT NESSAGE
20$$:                                                   ; NEED FOR SUBTRACTION ABOVE
       ENDM

DEFINE  LOW                                             ; SET REDUCED INTENSITY
       MOV     #177400+11.,D1
       TCRT
       ENDM

DEFINE  HIGH                                            ; SET NORMAL INTENSITY
       MOV     #177400+12.,D1
       TCRT
       ENDM


;
;
;
; DISPLAY USER NAME
;
D$USN::
       LEA     A3,JOBUSN(A0)                           ; SET POINTER FOR JOBS USER LINE
       LEA     A2,J%USN(A5)                            ; SET POINTER FOR SAVED USER LINE
       MOVW    #19.,D0                                 ; SET COUNTER

10$:    CMMB    0(A3)[~D0],0(A2)[~D0]                   ; CMP A BYTE
       BNE     100$                                    ; BR IF # THEREFORE CHANGED
       DBF     D0,10$                                  ; DEC COUNTER AND CMP NEXT
       RTN                                             ; IF WE GET TO HERE NO CHANGE FOR WHOLE LINE

100$:   MOV     #<D%USN-C.SCR>,D0                       ; LOAD DSPLY LOCATION
       CALL    POSCRT                                  ; MOVE CURSOR
       MOVW    #0.,D0                                  ; PRECLEAR D0 COUNTER

120$:   MOVB    0(A3)[~D0],D1                           ; GET NEW BYTE
       BEQ     140$                                    ; BR IF 0
       TTY                                             ; TYPE IT OUT
       MOVB    D1,0(A2)[~D0]                           ; SAVE IT
       INC     D0                                      ; POINT TO NEXT
       CMPW    D0,#20.                                 ; HAVE WE DONE THEM ALL ?
       BNE     120$                                    ; BR IF NOT

140$:   RTN
;
;
; DISPLAY COMMAND LINE
;
;
D$CMD::
       LEA     A3,JOBCMD(A0)                           ; SET POINTER FOR JOBS CMD LINE
       LEA     A2,J%CMD(A5)                            ; SET POINTER FOR SAVED CMD LINE
       MOVW    #29.,D0                                 ; SET COUNTER

10$:    CMMB    0(A3)[~D0],0(A2)[~D0]                   ; CMP A BYTE
       BNE     100$                                    ; BR IF # THEREFORE CHANGED
       DBF     D0,10$                                  ; DEC COUNTER AND CMP NEXT
       RTN                                             ; IF WE GET TO HERE NO CHANGE FOR WHOLE LINE

100$:   MOV     #<D%CMD-C.SCR>,D0                       ; LOAD DSPLY LOCATION
       CALL    POSCRT                                  ; MOVE CURSOR
       MOVW    #0.,D0                                  ; PRECLEAR D0 COUNTER

120$:   MOVB    0(A3)[~D0],D1                           ; GET NEW BYTE
       BEQ     140$                                    ; BR IF 0
       TTY                                             ; TYPE IT OUT
       MOVB    D1,0(A2)[~D0]                           ; SAVE IT
       INC     D0                                      ; POINT TO NEXT
       CMPW    D0,#30.                                 ; HAVE WE DONE THEM ALL ?
       BNE     120$                                    ; BR IF NOT

140$:   RTN
;
;
; DISPLAY CURRENT USER LEVEL            - currently un used
;
D$LVL:: MOVB    JOBLVL(A0),D2                           ; MOV CURRENT JOBS USER-LEVEL TO D2
       CMPB    D2,J%LVL(A5)                            ; CMP W/ LAST KNOWN
       BNE     100$                                    ; IF NE THEN TO RTN TO REPLACE AND PRINT
       RTN                                             ; RTN IF EQ

100$:   MOVB    D2,J%LVL(A5)                            ; REPLACE OLD WITH CURRENT
       MOV     #<D%LVL-C.SCR>,D0                       ; LOCATE MESSAGE LINE
       CALL    POSCRT                                  ; MOVE CURSOR
       TSTB    D2                                      ; TEST THAT L-WORD IF =0 OR (-)
       BEQ     200$                                    ; BRANCH IF 0

       MOV     #0,D1
       MOVB    D2,D1                                   ; MOV FOR PRINT OUT
       OCVT    8.,OT$TRM!OT$ZER!OT$TSP                 ; DISPLAY ON SCREEN IN OCTAL (or hex)/ NO LEAD ZERO/ W-TRAIL SP
       RTN                                             ; FINISHED WITH THIS RTN

200$:   LOW                                             ; TYPE LOW INTENSITY
       TYPE    < un-used>                              ; TELL THEM
       EVEN
       HIGH                                            ; NORM INTENSITY
       RTN
;
;
; DISPLAY ROOT LOG IN  {CLOG}
;
D$RLOG::MOV     #0,D1                                   ; PRE CLEAR D1 FOR WORD OPER S
       MOVW    JOBRTP(A0),D1                           ; GET NEW ROOT PPN
       BEQ     400$                                    ; IF 0 THEN LOGGED OFF
       CMPW    D1,J%RTP(A5)                            ; COMPARE TO OLD ROOT PPN
       BNE     100$                                    ; IF NE UPDATE EVERY BODY
       MOVW    JOBRTD(A0),D1                           ; GET NEW ROOT DRIVE
       CMPW    D1,J%RTD(A5)                            ; CMP W/OLD
       BNE     100$                                    ; IF NE UPDATE EVERYBODY
       MOVW    JOBRTU(A0),D1                           ; GET NEW ROOT UNIT
       CMPW    D1,J%RTU(A5)                            ; CMP W/OLD
       BNE     100$                                    ; IF NE UPDATE EVERYBODY
       RTN                                             ; NO ONE CHANGED FINISH

100$:   MOVW    JOBRTP(A0),J%RTP(A5)                    ; SAVE ROOT PPN
       MOVW    JOBRTD(A0),J%RTD(A5)                    ; SAVE ROOT DEVICE
       MOVW    JOBRTU(A0),J%RTU(A5)                    ; SAVE ROOT UNIT
       MOV     #<D%RPN-C.SCR>,D0                       ; FIND MESSAGE STRING
       CALL    POSCRT                                  ; LOCATE CURSOR
       TYPE    <                >                      ; CLEAR OLD
       EVEN
       CALL    POSCRT                                  ; REPOSITION
       DPACK   J%RTD(A5),1                             ; DISPLAY DEVICE
       MOVW    J%RTU(A5),D1                            ; SET D1=UNIT
       DCVT    0,OT$TRM                                ; PRINT UNIT AS DECIMAL/ SPACE AS REQD/ @TRM
       TYPE    <:[>                                    ; PRINT TERMINATING COLON AND PPN BRACKET
       PRPPN   J%RTP(A5)                               ; PRINT ROOT PPN
       TYPE    <]>                                     ; PRINT TERM BRACKET
       EVEN
       RTN

400$:   CLRW    J%RTP(A5)                               ; CLEAR ROOT PPN
       CLRW    J%RTD(A5)                               ; CLEAR ROOT DEVICE
       CLRW    J%RTU(A5)                               ; CLEAR ROOT UNIT
       MOV     #<D%RPN-C.SCR>,D0                       ; LOCATE MESSAGE STRING
       CALL    POSCRT                                  ; LOCATE CURSOR
       LOW                                             ; PRINT @ LOW INTENSITY
       TYPE    <no root log-in >                       ; TELL THEM NOT LOGGED IN
       EVEN
       HIGH                                            ; NORM. VID
       RTN
;
;
; DISPLAY CURRENT USER EXPERTISE        - currently un used
;
D$EXP:: MOVB    JOBEXP(A0),D2                           ; MOV CURRENT JOBS USER-EXPERTISE TO D2
       CMPB    D2,J%EXP(A5)                            ; CMP W/ LAST KNOWN
       BNE     100$                                    ; IF NE THEN TO RTN TO REPLACE AND PRINT
       RTN                                             ; RTN IF EQ

100$:   MOVB    D2,J%EXP(A5)                            ; REPLACE OLD WITH CURRENT
       MOV     #<D%EXP-C.SCR>,D0                       ; LOCATE MESSAGE LINE
       CALL    POSCRT                                  ; MOVE CURSOR
       TSTW    D2                                      ; TEST THAT L-WORD IF =0 OR (-)
       BEQ     200$                                    ; BRANCH IF 0

       MOV     #0,D1
       MOVB    D2,D1                                   ; MOV FOR PRINT OUT
       OCVT    8.,OT$TRM!OT$ZER!OT$TSP                 ; DISPLAY ON SCREEN IN OCTAL (or hex)/ NO LEAD ZERO/ W-TRAIL SP
       RTN                                             ; FINISHED WITH THIS RTN

200$:   LOW                                             ; TYPE LOW INTENSITY
       TYPE    < un-used>                              ; TELL THEM
       EVEN
       HIGH                                            ; NORM INTENSITY
       RTN
;
;
; DISPLAY CURRENT LANGUAGE POINTER
;
D$LNG:: MOVW    JOBLNG(A0),D2                           ; MOV CURRENT JOBS LANGUAGE POINTER
       CMPW    D2,J%LNG(A5)                            ; CMP W/ LAST KNOWN
       BNE     100$                                    ; IF NE THEN TO RTN TO REPLACE AND PRINT
       RTN                                             ; RTN IF EQ

100$:   MOVW    D2,J%LNG(A5)                            ; REPLACE OLD WITH CURRENT
       MOV     #<D%LNG-C.SCR>,D0                       ; LOCATE MESSAGE LINE
       CALL    POSCRT                                  ; MOVE CURSOR
       TSTW    D2                                      ; TEST THAT L-WORD IF =0 OR (-)
       BEQ     200$                                    ; BRANCH IF 0

       MOV     #0,D1
       MOVW    D2,D1                                   ; MOV FOR PRINT OUT
       OCVT    8.,OT$TRM!OT$ZER!OT$TSP                 ; DISPLAY ON SCREEN IN OCTAL (or hex)/ NO LEAD ZERO/ W-TRAIL SP
       RTN                                             ; FINISHED WITH THIS RTN

200$:   LOW                                             ; TYPE LOW INTENSITY
       TYPE    <    none>                              ; TELL THEM
       EVEN
       HIGH                                            ; NORM INTENSITY
       RTN
;
;
; DISPLAY CURRENT PENDING MESSAGE POINTER       - currently un used
;
D$MSR:: MOVW    JOBMSR(A0),D2                           ; MOV CURRENT JOBS PENDING MESSAGE POINTER
       CMPW    D2,J%MSR(A5)                            ; CMP W/ LAST KNOWN
       BNE     100$                                    ; IF NE THEN TO RTN TO REPLACE AND PRINT
       RTN                                             ; RTN IF EQ

100$:   MOVW    D2,J%MSR(A5)                            ; REPLACE OLD WITH CURRENT
       MOV     #<D%MSR-C.SCR>,D0                       ; LOCATE MESSAGE LINE
       CALL    POSCRT                                  ; MOVE CURSOR
       TSTW    D2                                      ; TEST THAT L-WORD IF =0 OR (-)
       BEQ     200$                                    ; BRANCH IF 0

       MOV     #0,D1
       MOVW    D2,D1                                   ; MOV FOR PRINT OUT
       OCVT    8.,OT$TRM!OT$ZER!OT$TSP                 ; DISPLAY ON SCREEN IN OCTAL (or hex)/ NO LEAD ZERO/ W-TRAIL SP
       RTN                                             ; FINISHED WITH THIS RTN

200$:   LOW                                             ; TYPE LOW INTENSITY
       TYPE    < un-used>                              ; TELL THEM
       EVEN
       HIGH                                            ; NORM INTENSITY
       RTN


       END