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