.TITLE THPAGE - TASK HEADER PAGE UPDATE .IDENT /V01.00/ .NLIST BEX ; ; COPYRIGHT (C) 1979, 1980 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; ; ; MODULE DESCRIPTION: ; ; TASK HEADER DISPLAY PAGE UPDATE PROCESSING ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 04-MAR-80 ; .SBTTL GLOBAL MACROS ; ; GLOBAL MACROS ; .MCALL PCBDF$,TCBDF$,UCBDF$,DCBDF$,GTIM$S,HDRDF$ PCBDF$ ; DEFINE PCB OFFSETS AND SYMBOLS TCBDF$ ; DEFINE TCB OFFSETS AND SYMBOLS HDRDF$ ; DEFINE HEADER OFFSETS AND SYMBOLS UCBDF$ ; DEFINE UCB OFFSETS AND SYMBOLS DCBDF$ ; DEFINE DCB OFFSETS AND SYMBOLS .SBTTL LOCAL MACROS ; ; LOCAL MACRO DEFINITIONS ; .MACRO FLAG,DD ; FLAG CHARACTER AS CHANGED BISB #200,DD .ENDM .MACRO MVN,FROM,TO,LEN,?A,?B ; MOVE NEW CHARACTERS ONTO SCREEN MOV #LEN,R0 ; GET LENGTH MOV FROM,R1 ; SENDING STRING MOV TO,R2 ; ADDRESS OF POSITION IN SCREEN BUFFER A: CMPB (R1)+,(R2)+ ; CHARACTER CHANGED? BEQ B ; BR IF NO MOVB -1(R1),-1(R2) ; YES, MOVE IT ON FLAG -1(R2) ; AND FLAG IT AS CHANGED B: DEC R0 ; MORE? BGT A ; BR IF YES .ENDM .MACRO OUTC,FROM,TO,?A ; OUTPUT A SINGLE CHARACTER CMPB FROM,TO ; NEW CHARACTER BEQ A ; BR IF NO MOVB FROM,TO ; STORE NEW CHARACTER FLAG TO ; FLAG IT A: .ENDM .MACRO PUSH LIST ; PUSH ONTO STACK .IRP VAL, MOV VAL,-(SP) .ENDM .ENDM PUSH .MACRO POP LIST ; POP OFF STACK .IRP VAL, MOV (SP)+,VAL .ENDM .ENDM POP .SBTTL LUN DISPLAY CONTROL ; ; EACH DEVICE WHICH REQUIRES SPECIAL HANDLING OF THE INFORMATION IN THE ; DEVICE/FILE WINDOW BLOCK SHOULD HAVE A SPECIAL ROUTINE PROGRAMMED FOR ; IT. THIS ROUTINE WILL BE PASSED THE ADDRESS OF THE WINDOW BLOCK, AND ; SHOULD FORMAT AN OUTPUT STRING (25. BYTES OR UNDER) TO DISPLAY ALL ; APPROPRIATE INFORMATION. ; ; EACH ROUTINE SHOULD BE IN A SEPARATE FILE, WITH THE FOLLOWING FORMAT: ; ; .PSECT XDEVX1,I ;LUN DISPLAY ROUTINE TABLE PSECT ; .WORD "DD 0 ;DEVICE NAME CATCH-ALL ; .WORD ADDR ;ADDRESS OF ROUTINE TO PROCESS LUN INFO ; ; .PSECT XDEVXX,I ;PSECT FOR ROUTINE ; ; ADDR: ... ;CODE ; RETURN ;FINISHED ; ; INPUTS TO THE ROUTINE ARE: ; R0 - ADDRESS OF NEXT BYTE IN OUTPUT BUFFER TO STORE DISPLAY INFORMATION ; R1 - ADDRESS OF DEVICE UCB ; R2 - ADDRESS OF FILE WINDOW BLOCK, OR ZERO (NONE) ; ; OUTPUTS EXPECTED FROM THE ROUTINE ARE: ; R0 - ADDRESS OF NEXT BYTE IN OUTPUT BUFFER ; ; CARRY: CLEAR - DEVICE INFO COMPLETELY FINISHED, NO MORE TO DO ; CARRY: SET - CONTINUE SCANNING LIST FOR MORE ROUTINES TO CALL ; ; .PSECT XDEVX0 DEVTBL: .BLKW 0 ; START OF LUN DISPLAY ROUTINE TABLE .PSECT XDEVX2 .WORD 0,0 ; END OF LUN DISPLAY ROUTINE TABLE .SBTTL ENTRY POINT DEFINITION .PSECT PAGE,OVR,I,LCL .WORD PAGE ; DEFINE ENTRY POINT .SBTTL DISPLAY CONTROL TABLE ; ; THIS TABLE IS USED TO DISPLAY OR CLEAR THE SPECIFIED INFORMATION ; ON THE SCREEN. EACH ENTRY HAS CONTAINS THREE WORDS IN THE ; FOLLOWING FORMAT: ; WORD 1 ADDRESS OF AREA ON SCREEN TO DISPLAY THE INFORMATION ; WORD 2 ADDRESS OF THE CLEAR ROUTINE FOR THE PARAMETER ; WORD 3 ADDRESS OF THE DISPLAY ROUTINE FOR THE PARAMETER ; DSPTBL: .WORD $THIOC,CLRFL4,DSPBYT .WORD $THDPR,CLRFL4,DSPBYT .WORD $THPRI,CLRFL4,DSPBYT .WORD $THSPR,CLRFL4,DSPBYT .WORD $THR0,CLRFL6,DSPWRD .WORD $THR1,CLRFL6,DSPWRD .WORD $THR2,CLRFL6,DSPWRD .WORD $THR3,CLRFL6,DSPWRD .WORD $THR4,CLRFL6,DSPWRD .WORD $THR5,CLRFL6,DSPWRD .WORD $THPC,CLRFL6,DSPWRD .WORD $THPS,CLRFL6,DSPWRD .WORD $THSP,CLRFL6,DSPWRD .WORD $THEF1,CLRFL6,DSPWRD .WORD $THEF2,CLRFL6,DSPWRD .WORD 0 .SBTTL LOCAL DATA ;+ ; SCREEN FORMAT: ;1--------10--------20--------30--------40--------50--------60--------70------ ;RSX-11M V3.2 BL22 1 ;*NONE* 2 ; 3 ;TASK: xxxxxx PARTITION: xxxxxx STATUS: xxx+xxx+xxx+..... 4 ; OWN: xxxxx I/O: xxx DPRI: xxx PRI: xxx SPRI: xxx 5 ; 6 ;R0 = xxxxxx R1 = xxxxxx R2 = xxxxxx R3 = xxxxxx R4 = xxxxxx R5 = xxxxxx 7 ;PC = xxxxxx PS = xxxxxx SP = xxxxxx $DSW = xxxx EFLG = xxxxxx xxxxxx 8 ; 9 ;LUN FILE LUN FILE 10 ;--- ---- --- ---- 11 ;xx. xxxxx:[xxx,xxx]xxxxxxxxx.xxx;xxxxx xx. xxxxx:[xxx,xxx]xxxxxxxxx.xxx;xxxxx12 ;1--------10--------20--------30--------40--------50--------60--------70------ ;- LUNMX = 26. TSKDT: .BLKW 0 PNAM: .BLKW 2 ; NAME OF PARTITION. TSTAT: .BLKW 1 ; T.STAT FLAGS TST2: .BLKW 1 ; T.ST2 FLAGS TST3: .BLKW 1 ; T.ST3 FLAGS TUCB: .BLKW 1 ; T.UCB TIOC: .BLKB 1 ; T.IOC TPRI: .BLKB 1 ; T.PRI TDPRI: .BLKB 1 ; T.DPRI HSPRI: .BLKB 1 ; H.SPRI .BLKW 6 ; r0, r1, r2, r3, r4, r5 .BLKW 3 ; pc, ps, H.CSP HDSW: .BLKW 1 ; H.DSW TEFLG: .BLKW 2 ; T.EFLG HNLUN: .BLKW 1 ; H.NLUN .REPT LUNMX ; LUNS: .BLKW 1 ; DEVICE UCB .BLKW 1 ; FILE WINDOW BLOCK ADDRESS .EVEN .ENDR TSKLN = .-TSKDT/2 PSTAT: .BLKW 1 ; TASK'S PCB ADDRESS TIMBUF: .BLKW 8. ; BUFFER FOR GTIM$ DIRECTIVE UCBADD= TIMBUF+0 ; ADDRESS OF DEVICE UCB WINADD= TIMBUF+2 ; ADDRESS OF FILE WINDOW BLOCK LUNSCR= TIMBUF+4 ; CURRENT ADDRESS OF LUN SCREEN DISPLAY EDTBUF: .BLKW 30. ; EDIT CONVERSION BUFFER EDTLEN = .-EDTBUF/2 ; LENGTH OF BUFFER IN WORDS .ENABL LC ; ; ASCII MESSAGES ; NOTASK: .ASCIZ /Task not in system/ TSKOUT: .ASCIZ /Task out of memory/ NDVTXT: .ASCIZ /None/ .DSABL LC .EVEN .SBTTL THPAGE ENTRY POINT ;+ ; ; PAGE - TASK HEADER DISPLAY UPDATE PROCESSING ; ; INPUTS: NONE ; ; OUTPUTS: THE TASK HEADER DISPLAY IS UPDATED ; ;- PAGE: CALL FIND ; THE TASK. CALL UPDATE ; THE DISPLAY. RETURN .SBTTL FIND ;+ ; **-FIND - FILL UP BUFFER WITH CURRENT ACTIVE TASK INFO ; ; INPUTS: ; ; OUTPUTS: ; ;- FIND: MOV #TSKDT,R5 ; POINT TO TASK DATA SWSTK$ 90$ MOV #$XCTSK,R3 ;; GET ADDRESS OF TASK NAME CALL $SRSTD ;; AND LOOK FOR ITS TCB. BCC 30$ ;; IF NOT FOUND CLR (R5) ;; THEN NO MORE TASK. RETURN 30$: MOV T.PCB(R0),R4 ;; GET PCB .IF DF,R$$MPL BNE 40$ ;; BR IF IN MEMORY MOV #-1,(R5)+ ;; INDICATE TASK NOT IN MEMORY CLR (R5)+ ;; BR 45$ ;; .ENDC 40$: MOV P.STAT(R4),PSTAT ;; SAVE PCB STATUS WORD MOV P.NAM+0(R4),(R5)+ ;; TO PICK UP MOV P.NAM+2(R4),(R5)+ ;; PARTITION NAME. 45$: MOV T.STAT(R0),(R5)+ ;; COPY TASK STATUS WORD MOV T.ST2(R0),(R5)+ ;; STORE T.ST2 MOV T.ST3(R0),(R5)+ ;; AND T.ST3 MOV T.UCB(R0),(R5)+ ;; OWNING DEVICE MOVB T.IOC(R0),(R5)+ ;; I/O COUNT MOVB T.DPRI(R0),(R5)+ ;; DEFAULT PRIORITY MOVB T.PRI(R0),(R5)+ ;; CURRENT PRIORITY .IF NDF,R$$MPL BIT #TS.OUT,T.STAT(R0) ;; IF OUT OF MEMORY BNE 90$ ;; THEN NO HEADER. .IFF TST R4 ;; TASK IN MEMORY? BEQ 90$ ;; BR IF NO BIT #PS.OUT,P.STAT(R4) ;; TASK IN MEMORY? BNE 90$ ;; BR IF NO .ENDC MOV P.HDR(R4),R4 ;; GET HEADER ADDRESS MOV R4,$THTHA ;; SAVE IT BEQ 90$ ;; BR IF NOT THERE MOVB H.SPRI(R4),R3 ;; SCHEDULER PRIORITY ADD T.PRI(R0),R3 ;; ADDED TO CURRENT PRIORITY MOVB R3,(R5)+ ;; GIVES SWAPPING PRIORITY. MOV H.GARD(R4),R3 ;; GET GUARD WORD MOV -(R3),(R5)+ ;; R0 MOV -(R3),(R5)+ ;; R1 MOV -(R3),(R5)+ ;; R2 MOV -(R3),(R5)+ ;; R3 MOV -(R3),(R5)+ ;; R4 MOV -(R3),(R5)+ ;; R5 MOV -(R3),(R5)+ ;; PC MOV -(R3),(R5)+ ;; PS MOV H.CSP(R4),(R5)+ ;; SP MOV H.DSW(R4),(R5)+ ;; $DSW MOV T.EFLG+0(R0),(R5)+ ;; EVENT FLAGS 1 - 16 MOV T.EFLG+2(R0),(R5)+ ;; EVENT FLAGS 17 - 32 MOV H.NLUN(R4),(R5) ;; GET THE NUMBER OF LUNS BEQ 90$ ;; AND DISAPPEAR IF NONE. CMP #LUNMX,(R5) ;; IF TOO MANY BHIS 48$ ;; THEN MOV #LUNMX,(R5) ;; CUT THE NUMBER DOWN. 48$: MOV (R5)+,R3 ;; PICK UP THE NUMBER ADD #H.LUN,R4 ;; AND ADDRESS OF LUN TABLE. 50$: MOV (R4)+,(R5)+ ;; GET UCB ADDRESS BEQ 55$ ;; BR IF NONE MOV (R4),R0 ;; NOW GET THE WINDOW BLOCK ADDRESS BIC #1,R0 ;; REMOVE INTERLOCK CALL CHKADR ;; VALID WINDOW BLOCK ADDRESS? BCC 60$ ;; BR IF YES 55$: CLR R0 ;; ELSE INDICATE NO 60$: TST (R4)+ ;; POINT PAST WINDOW BLOCK ADDRESS MOV R0,(R5)+ ;; STORE IT DEC R3 ;; MORE LUNS? BGT 50$ ;; BR IF YES 90$: RETURN ;; RETURN TO USER STATE CHKADR: CMP R0,#$POOL-1 BLOS 10$ CMP @#$EXSIZ,R0 10$: RETURN .SBTTL UPDATE - UPDATE THE SCREEN .ENABL LSB UPDATE: GTIM$S #TIMBUF ; GET TIME AND DATE TST $THDAT ; DO WE WANT DATE DISPLAYED? BEQ 2$ ; BR IF NO MOV #" ,EDTBUF+8. ; IF DAY IS LESS THAN 10 MOV #EDTBUF,R0 ; OUTPUT FROM CONVERSION MOV #TIMBUF,R1 ; INPUT BUFFER CALL $DAT ; CONVERT DATE TO ASCII MVN #EDTBUF,$THDAT,9. ; MOVE ONTO SCREEN 2$: TST $THTIM ; DO WE WANT TIME DISPLAYED? BEQ 5$ ; BR IF NO MOV #" ,EDTBUF+6 ; IF TIME IS BEFORE 10 O'CLOCK MOV #EDTBUF,R0 ; OUTPUT CONVERSION BUFFER MOV #TIMBUF+6,R1 ; INPUT BUFFER MOV #3,R2 ; HH:MM:SS FORMAT CALL $TIM ; CONVERT TIME TO ASCII MVN #EDTBUF,$THTIM,8. ; MOVE ONTO SCREEN 5$: MOV #EDTBUF,R0 ; OUTPUT CONVERSION BUFFER MOV $XCTSK+0,R1 ; GET RAD50 TASK NAME CALL $C5TA ; AND CONVERT IT TO ASCII MOV $XCTSK+2,R1 ; ... CALL $C5TA ; ... MVN #EDTBUF,$THTSK,6 ; MOVE ONTO SCREEN MOV #TSKDT,R5 ; POINT TO TASK DATA TST (R5) ; TASK IN SYSTEM? BNE 30$ ; BR IF YES TST $THMES ; DO WE WANT TO DISPLAY MESSAGE? BEQ 20$ ; BR IF NO MOV #EDTBUF,R0 ; OUTPUT CONVERSION BUFFER MOV #NOTASK,R1 ; TASK NOT IN SYSTEM MESSAGE MOV R0,R2 ; GET OUTPUT CONVERSION BUFFER MOV #20.,R3 ; LENGTH OF MESSAGE TEXT 10$: MOV #" ,(R2)+ ; INITIALIZE TO SPACES DEC R3 ; MORE TO COPY? BGT 10$ ; BR IF YES 15$: MOVB (R1)+,(R0)+ ; STORE MESSAGE BNE 15$ ; ... MVN #EDTBUF,$THMES,40. ; MOVE TO SCREEN 20$: MOV #EDTBUF,R0 ; INITIALIZE OUTPUT CONVERSION BUF TO SPACES MOV #EDTLEN,R1 ; LENGTH OF BUFFER 25$: MOV #" ,(R0)+ ; STORE SPACES DEC R1 ; MORE TO FILL? BGT 25$ ; BR IF YES CALL CLRTLN ; CLEAR TASK LINE CALL CLROWN ; CLEAR OWNING TI: STRING JMP 187$ 30$: MOV #EDTBUF,R0 ; OUTPUT CONVERSION BUFFER MOV R0,R2 ; SAVE IT MOV #EDTLEN,R1 ; NUMBER OF WORDS IN BUFFER 32$: MOV #" ,(R2)+ ; INITIALIZE TO SPACES DEC R1 ; MORE? BGT 32$ ; BR IF YES TST $THMES ; CLEAR THE MESSAGE? BEQ 35$ ; BR IF NO MVN #EDTBUF,$THMES,40. 35$: MOV #EDTBUF,R0 ; OUTPUT CONVERSION BUFFER MOV (R5)+,R1 ; GET FIRST HALF OF PARTITION NAME (RAD50) .IF DF,R$$MPL CMP #-1,R1 ; TASK IN MEMORY BNE 37$ ; BR IF YES JMP 58$ ; JMP IF NO .ENDC 37$: CALL $C5TA ; CONVERT IT TO ASCII MOV (R5)+,R1 ; GET SECOND HALF OF NAME CALL $C5TA ; CONVERT IT TO ASCII TST $THPAR ; DO WE WANT TO DISPLAY PARTITION NAME? BEQ 40$ ; BR IF NO MVN #EDTBUF,$THPAR,6 ; MOVE IT ONTO SCREEN 40$: TST $THSTA ; DO WE WANT TO DISPLAY STATUS FLAGS? BNE 42$ ; BR IF YES ADD #6,R5 ; POINT PAST STATUS WORDS BR 55$ ; SKIP STATUS FLAGS DISPLAY 42$: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #EDTLEN,R1 ; NUMBER OF WORDS IN BUFFER 45$: MOV #" ,(R2)+ ; INITIALIZE TO SPACES DEC R1 ; MORE? BGT 45$ ; BR IF YES MOV #STABLE,R2 ; POINT TO STATUS TEXT TABLE MOV (R5)+,R1 ; T.STAT CALL STATUS MOV (R5)+,R1 ; T.ST2 BMI 50$ ; BR IF AST IN PROGRESS BIC #*2,R1 ; CLEAR THE AST FLAGS 50$: CALL STATUS MOV (R5)+,R1 ; T.ST3 CALL STATUS MVN #EDTBUF,$THSTA,38. STORE IT 55$: .IF NDF,R$$MPL BIT #TS.OUT,TSTAT ; OUT OF MEMORY? BEQ 150$ ; BR IF NO .IFF BIT #PS.OUT,PSTAT ; OUT OF MEMORY? BEQ 150$ ; BR IF NO .ENDC 58$: TST $THMES ; DO WE WANT TO DISPLAY THE MESSAGE? BEQ 140$ ; BR IF NO MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV #TSKOUT,R1 ; TASK OUT OF MEMORY MESSAGE MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #20.,R3 ; NUMBER OF WORDS IN MESSAGE 130$: MOV #" ,(R2)+ ; INITIALIZE MESSAGE TO SPACES DEC R3 ; MORE? BGT 130$ ; BR IF YES 135$: MOVB (R1)+,(R0)+ ; STORE MESSAGE BNE 135$ ; BR IF MORE MVN #EDTBUF,$THMES,40. ; MOVE ONTO SCREEN 140$: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV #EDTLEN,R1 ; LENGTH OF BUFFER 145$: MOV #" ,(R0)+ ; INITIALIZE TO SPACES DEC R1 ; MORE? BGT 145$ ; BR IF YES CALL CLROWN ; CLEAR OWNING TI: STRING BR 187$ 150$: CALL UPDOWN ; UPDATE OWNING TI: STRING TST $THTHA ; IS THERE A TASK HEADER? BEQ 183$ ; BR IF NO CALL UPDHDR ; UPDATE TASK HEADER INFORMATION MOV (R5)+,R3 ; GET NUMBER OF LUNS BEQ 190$ ; BR IF NONE MOV #$THLUN,R4 ; POINT TO ADDRESS OF LUN INFO DISPLAY 160$: MOV HNLUN,R1 ; GET NUMBER OF LUNS SUB R3,R1 ; CALCULATE CURRENT LUN NUMBER TO PROCESS INC R1 ; ... MOV R1,$THTLN ; SAVE THE LUN NUMBER MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV R0,R2 ; SAVE IT MOV #" ,(R2)+ ; INITIALIZE LUN TO SPACES MOV #" ,(R2)+ ; ... CLR R2 ; ZERO SUPPRESSION CALL $CBDMG ; CONVERT TO DECIMAL MOVB #'.,(R0)+ ; INSERT DECIMAL POINT MOV (R4)+,R2 ; DO WE WANT TO DISPLAY LUN INFO? BEQ 190$ ; BR IF NO MVN #EDTBUF,R2,4 ; MOVE ONTO SCREEN CALL UPDLUN DEC R3 ; MORE LUNS BGT 160$ ; BR IF YES BR 190$ ; FINISHED 183$: MOV #EDTBUF,R0 ; OUTPUT CONVERSION BUFFER MOV #EDTLEN,R1 ; LENGTH OF BUFFER 185$: MOV #" ,(R0)+ ; INITIALIZE TO SPACES DEC R1 ; MORE? BGT 185$ ; BR IF YES 187$: CALL CLRHDR ; CLEAR TASK HEADER INFORMATION CALL CLRDLN ; CLEAR LUN DISPLAY 190$: RETURN .DSABL LSB .SBTTL CLEAR DISPLAY ROUTINES ;+ ; ; CLRTLN,CLROWN,CLRHDR,CLRDLN - CLEAR THE SPECIFIED PARTS OF THE TASK HEADER ; DISPLAY (STORE BLANKS IN SPECIFIED FIELDS) ; ; INPUTS: ; EDTBUF CONTAINS ALL SPACES ; ; OUTPUTS: ; THE SPECIFIED FIELDS ARE BLANKED ON THE SCREEN ; ;- CLRTLN: MOV $THPAR,R4 ; GET ADDRESS OF PARTITION NAME CALL CLRFL6 ; PUT IN SPACES TST $THSTA ; DO WE WANT TO DISPLAY THE STATUS FLAGS? BEQ 10$ ; BR IF NO MVN #EDTBUF,$THSTA,38. ; MOVE SPACES ONTO SCREEN 10$: RETURN CLROWN: TST $THOWN ; DO WE WANT TO DISPLAY OWNING TI:? BEQ 10$ ; BR IF NO MVN #EDTBUF,$THOWN,6 ; MOVE ONTO SCREEN 10$: RETURN CLRHDR: MOV #DSPTBL,R3 ; POINT TO DISPLAY TABLE 15$: MOV (R3)+,R4 ; GET ADDRESS OF SCREEN DISPLAY ADDRESS BEQ 18$ ; BR IF END OF TABLE MOV (R3)+,R2 ; GET ADDRESS OF CLEAR ROUTINE TST (R3)+ ; SKIP DISPLAY ROUTINE MOV (R4),R4 ; GET SCREEN DISPLAY ADDRESS BEQ 15$ ; BR IF NOT TO BE DISPLAYED CALL (R2) ; CLEAR OUT THE AREA ON THE SCREEN BR 15$ ; CONTINUE 18$: TST $THDSW ; DO WE WANT TO DISPLAY $DSW? BEQ 20$ ; BR IF NO MVN #EDTBUF,$THDSW,5 ; MOVE ONTO SCREEN 20$: RETURN CLRDLN: MOV #LUNMX,-(SP) ; GET NUMBER OF LUNS MOV #$THLUN,R4 ; POINT TO ADDRESS OF LUN INFO DISPLAY 5$: MOV (R4)+,R3 ; GET ADDRESS BEQ 10$ ; BR IF WE DON'T WANT TO DISPLAY THIS ONE MVN #EDTBUF,R3,3 ; BLANK OUT LUN INFO 10$: MOV (R4)+,R3 ; POINT TO ADDRESS OF FILE NAME DISPLAY BEQ 20$ ; BR IF WE DON'T WANT TO DISPLAY THIS ONE MVN #EDTBUF,R3,35. ; BLANK OUT FILE NAME 20$: DEC (SP) ; MORE LUNS? BGT 5$ ; BR IF YES TST (SP)+ ; CLEAN UP STACK RETURN .SBTTL CLRFL4,CLRFL6 - CLEAR 4,6 CHARACTER FIELD ;+ ; ; CLRFL4,CLRFL6 - CLEAR 4 CHARACTER FIELD, CLEAR 6 CHARACTER FIELD ; ; INPUTS: ; EDTBUF = ALL BLANKS ; R4 = ADDRESS OF DISPLAY AREA TO CLEAR ; ; OUTPUTS: ; THE SPECIFIED AREA IS BLANKED OUT ; ;+ CLRFL4: TST R4 ; BEQ 10$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R4,4 ; MOVE ONTO SCREEN 10$: RETURN CLRFL6: TST R4 ; BEQ 10$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R4,6 ; MOVE ONTO SCREEN 10$: RETURN .SBTTL UPDOWN - UPDATE OWNING TI: STRING UPDOWN: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV #" ,(R0) ; INITIALIZE OWNER TO SPACES MOV (R0),EDTBUF+2 ; ... MOV (R0),EDTBUF+4 ; ... MOV (R5)+,R3 ; GET UCB ADDRESS BEQ 5$ ; BR IF NONE CALL $FMTDV ; FORMAT THE DEVICE NAME 5$: TST $THOWN ; DO WE WANT TO DISPLAY OWNING TI:? BEQ 10$ ; BR IF NO MVN #EDTBUF,$THOWN,6 ; MOVE ONTO SCREEN 10$: RETURN .SBTTL UPDHDR - UPDATE TASK HEADER INFORMATION UPDHDR: MOV #DSPTBL,R3 ; POINT TO DISPLAY TABLE 15$: MOV (R3)+,R4 ; GET ADDRESS OF SCREEN DISPLAY ADDRESS BEQ 18$ ; BR IF END OF TABLE TST (R3)+ ; SKIP CLEAR ROUTINE MOV (R3)+,R2 ; GET ADDRESS OF DISPLAY ROUTINE MOV (R4),R4 ; GET SCREEN DISPLAY ADDRESS CALL (R2) ; CLEAR OUT THE AREA ON THE SCREEN BR 15$ ; CONTINUE 18$: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV #" ,EDTBUF+2 ; INITIALIZE TO SPACES MOV #" ,EDTBUF+4 ; ... MOVB (R5),R1 ; GET $DSW CLR R2 ; SUPPRESS ZEROES CALL $CBDSG ; ... MOVB #'.,(R0)+ ; DECIMAL VALUE TST (R5)+ ; UPDATE TASK DATA POINTER TST $THDSW ; DISPLAY DSW VALUE? BEQ 20$ ; BR IF NO MVN #EDTBUF,$THDSW,5 ; MOVE ONTO SCREEN 20$: RETURN .SBTTL DSPBYT,DSPWRD - DISPLAY ROUTINES ; ; DSPBYT - CONVERT A BYTE VALUE TO ASCII AND MOVE ONTO SCREEN ; DSPWRD - CONVERT A WORD VALUE TO ASCII AND MOVE ONTO SCREEN ; ; INPUTS: ; R5 = POINTER TO VALUE TO BE DISPLAYED ; R4 = ADDRESS OF SCREEN DISPLAY TO STORE VALUE ; ; OUTPUTS: ; THE ASCII VALUE IS MOVED ONTO THE SCREEN ; R5 = UPDATED ; R3,R4 PRESERVED ; DSPBYT: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV #" ,EDTBUF+2 ; INITIALIZE TO SPACES CLR R1 ; BISB (R5)+,R1 ; GET BYTE VALUE CLR R2 ; SUPPRESS ZEROES CALL $CBDMG ; CONVERT TO ASCII MOVB #'.,(R0)+ ; STORE DECIMAL POINT TST R4 ; DISPLAY THIS FIELD? BEQ 10$ ; BR IF NO MVN #EDTBUF,R4,4 ; MOVE ONTO SCREEN 10$: RETURN DSPWRD: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV (R5)+,R1 ; GET WORD VALUE MOV #1,R2 ; DON'T SUPPRESS LEADING ZEROES CALL $CBOMG ; CONVERT TO ASCII TST R4 ; DISPLAY THIS FIELD? BEQ 10$ ; BR IF NO MVN #EDTBUF,R4,6 ; MOVE ONTO SCREEN 10$: RETURN .SBTTL UPDLUN UPDLUN: MOV (R5)+,UCBADD ; GET UCB ADDRESS MOV (R5)+,WINADD ; GET WINDOW ADDRESS MOV (R4)+,LUNSCR ; GET ADDRESS OF LUN DISPLAY BEQ 60$ ; BR IF CAN'T DISPLAY IT JSR R5,$SAVRG ; SAVE R3-R5 MOV #EDTBUF,R0 ; POINT TO OUTPUT BUFFER MOV R0,R2 ; SAVE IT MOV #EDTLEN,R1 ; LENGTH OF BUFFER 10$: MOV #" ,(R2)+ ; INITIALIZE TO SPACES DEC R1 ; MORE? BGT 10$ ; BR IF YES MOV UCBADD,R3 ; GET DEVICE UCB ADDRESS BEQ 40$ ; BR IF NONE CALL $FMTDV ; FORMAT THE DEVICE NAME MOV R1,$THUNT ; SAVE DEVICE UNIT NUMBER MOV R2,$THDNM ; SAVE DEVICE NAME MOV UCBADD,R1 ; GET DEVICE UCB ADDRESS MOV WINADD,R2 ; GET FILE WINDOW BLOCK ADDRESS BEQ 50$ ; BR IF NONE MOV U.DCB(R1),R4 ; GET DCB ADDRESS MOV #DEVTBL,R3 ; POINT TO DEVICE TABLE 20$: MOV (R3)+,R5 ; GET DEVICE NAME BEQ 30$ ; BR IF CATCHALL ROUTINE CMP D.NAM(R4),R5 ; IS THIS THE PROPER ROUTINE TO CALL? BEQ 30$ ; BR IF YES TST (R3)+ ; POINT PAST ADDRESS OF ROUTINE BR 20$ 30$: MOV (R3)+,R5 ; GET ADDRESS OF ROUTINE TO CALL BEQ 50$ ; BR IF END OF TABLE CALL (R5) ; CALL THE PROPER ROUTINE BCS 20$ ; BR IF NOT PROCESSED BR 50$ 40$: MOV #NDVTXT,R2 ; GET "NONE" TEXT 45$: MOVB (R2)+,(R0)+ ; STORE IN OUTPUT BUFFER BNE 45$ ; BR IF MORE TO STORE MOVB #40,-(R0) ; END WITH A SPACE 50$: MVN #EDTBUF,LUNSCR,35. ; MOVE ONTO SCREEN 60$: RETURN .IF DF,R$$MPL .SBTTL RSX11M-PLUS FLAGS ; ; STATUS FLAG NAMES. IF FLAG IS SET IN T.STAT, T.ST2, T.ST3 ; THE FLAG NAME WILL BE PRINTED. ; ; T.STAT BITS (BLOCKING BITS) STABLE: .ASCIZ /-EXE/ ; NOT IN EXECUTION (100000) .ASCIZ /RDN/ ; I/O RUNDOWN IN PROGRESS (40000) .ASCIZ /MSG/ ; TASK STOPPED FOR ABORT MESSAGE (20000) .ASCIZ /CIP/ ; TASK BLOCKED FOR CHECKPOINT IN PROG (10000) .ASCIZ /RUN/ ; TASK IS RUNNING ON ANOTHER PROCESS (4000) .BYTE 0,0,0,0 ; (3600) .ASCIZ /CKR/ ; TASK CHECKPOINT REQUESTED (100) .BYTE 0,0,0,0,0,0 ; (77) ; T.ST2 BITS (STATE BITS) .ASCIZ /AST/ ; AST IN PROGRESS (100000) .ASCIZ /DST/ ; AST RECOGNITION DISABLED (40000) .ASCIZ /-CHK/ ; TASK NOT CHECKPOINTABLE (20000) .ASCIZ /REX/ ; REQUESTED EXIT AST SPECIFIED (10000) .ASCIZ /SEF/ ; TASK STOPPED FOR EVENT FLAGS (4000) .BYTE 0 ; (2000) .ASCIZ /TIO/ ; TASK WAITING FOR TERMINAL I/O (1000) .ASCIZ /AFF/ ; TASK IS INSTALLED WITH AFFINITY (400) .ASCIZ /HLT/ ; TASK IS BEING HALTED (200) .ASCIZ /ABO/ ; TASK IS MARKED FOR ABORT (100) .ASCIZ /STPA/ ; TASK STOPPED BEFORE AST (40) .ASCIZ /STP/ ; TASK STOPPED (20) .ASCIZ /SPNA/ ; SAVED TS.SPN ON AST IN PROGRESS (10) .ASCIZ /SPN/ ; TASK SUSPENDED (4) .ASCIZ /WFRA/ ; SAVED TS.WFR ON AST IN PROGRESS (2) .ASCIZ /WFR/ ; TASK IS IN A WAITFOR STATE (1) ; T.ST3 BITS (ATTRIBUTE BITS) .ASCIZ /ACP/ ; ANCILLIARY CONTROL PROCESSOR (100000) .ASCIZ /-PMD/ ; DUMP TASK ON SYNCHRONOUS ABORT (40000) .ASCIZ /REM/ ; REMOVE TASK ON EXIT (20000) .ASCIZ /PRV/ ; TASK IS PRIVILEGED (10000) .ASCIZ /MCR/ ; TASK REQUESTED AS EXTERNAL MCR FUNCTION (4000) .ASCIZ /SLV/ ; TASK IS A SLAVE (2000) .ASCIZ /CLI/ ; TASK WAS ACTIVATED BY CONTROLLING TASK (1000) .ASCIZ /RST/ ; TASK IS RESTRICTED (400) .ASCIZ /NSD/ ; NO SEND DATA ALLOWED (200) .ASCIZ /CAL/ ; CHECKPOINT SPACE IN TASK IMAGE (100) .ASCIZ /ROV/ ; TASK HAS RESIDENT OVERLAYS (40) .ASCIZ /NET/ ; NETWORK PROTOCOL LEVEL 2 (20) .ASCIZ /MPC/ ; MAPPING CHANGE WITH OUTSTANDING I/O .ASCIZ /NTA/ ; NO TASK ACCOUNTING ON THIS TASK .BYTE 0,0 ; (3) .IFF ;R$$MPL .SBTTL RSX11M STATUS FLAGS ; ; STATUS FLAG NAMES. IF FLAG IS SET IN T.STAT, T.ST2, T.ST3 ; THE FLAG NAME WILL BE PRINTED. ; ; T.STAT BITS (BLOCKING BITS) STABLE: .ASCIZ /-EXE/ ; NOT IN EXECUTION (100000) .ASCIZ /RDN/ ; I/O RUNDOWN IN PROGRESS (40000) .ASCIZ /MSG/ ; TASK STOPPED FOR ABORT MESSAGE (20000) .ASCIZ /NRP/ ; TASK MAPPED TO NONRESIDENT PARTITION (10000) .BYTE 0,0,0 ; (7000) .ASCIZ /OUT/ ; TASK IS OUT OF MEMORY (400) .ASCIZ /CKP/ ; TASK IS CHECKPOINTED (200) .ASCIZ /CKR/ ; TASK CHECKPOINT REQUESTED (100) .BYTE 0,0,0,0,0,0 ; (77) ; T.ST2 BITS (STATE BITS) .ASCIZ /AST/ ; AST IN PROGRESS (100000) .ASCIZ /DST/ ; AST RECOGNITION DISABLED (40000) .ASCIZ /-CHK/ ; TASK NOT CHECKPOINTABLE (20000) .ASCIZ /CKD/ ; CHECKPOINTING DISABLED (10000) .ASCIZ /BFX/ ; TASK BEING FIXED IN MEMORY (4000) .ASCIZ /FXD/ ; TASK IS FIXED IN MEMORY (2000) .ASCIZ /TIO/ ; TASK WAITING FOR TERMINAL I/O (1000) .ASCIZ /CAF/ ; CHECKPOINT SPACE ALLOCATION FAILURE (400) .ASCIZ /HLT/ ; TASK IS BEING HALTED (200) .ASCIZ /ABO/ ; TASK IS MARKED FOR ABORT (100) .ASCIZ /STPA/ ; TASK STOPPED BEFORE AST (40) .ASCIZ /STP/ ; TASK STOPPED (20) .ASCIZ /SPNA/ ; SAVED TS.SPN ON AST IN PROGRESS (10) .ASCIZ /SPN/ ; TASK SUSPENDED (4) .ASCIZ /WFRA/ ; SAVED TS.WFR ON AST IN PROGRESS (2) .ASCIZ /WFR/ ; TASK IS IN A WAITFOR STATE (1) ; T.ST3 BITS (ATTRIBUTE BITS) .ASCIZ /ACP/ ; ANCILLIARY CONTROL PROCESSOR (100000) .ASCIZ /-PMD/ ; DUMP TASK ON SYNCHRONOUS ABORT (40000) .ASCIZ /REM/ ; REMOVE TASK ON EXIT (20000) .ASCIZ /PRV/ ; TASK IS PRIVILEGED (10000) .ASCIZ /MCR/ ; TASK REQUESTED AS EXTERNAL MCR FUNCTION (4000) .ASCIZ /SLV/ ; TASK IS A SLAVE (2000) .ASCIZ /CLI/ ; TASK WAS ACTIVATED BY CONTROLLING TASK (1000) .ASCIZ /RST/ ; TASK IS RESTRICTED (400) .ASCIZ /NSD/ ; NO SEND DATA ALLOWED (200) .ASCIZ /CAL/ ; CHECKPOINT SPACE IN TASK IMAGE (100) .ASCIZ /ROV/ ; TASK HAS RESIDENT OVERLAYS (40) .ASCIZ /NET/ ; NETWORK PROTOCOL LEVEL 2 (20) .BYTE 0,0,0,0 ; (17) .ENDC ; R$$MPL .EVEN .SBTTL DISPLAY STATUS BITS STATUS: PUSH ; DISPLAY THE STATUS BITS MOV #16.,R3 10$: TST R1 BPL 20$ MOVB #' ,(R0)+ 20$: MOVB (R2)+,R4 BEQ 30$ TST R1 BPL 20$ MOVB R4,(R0)+ BR 20$ 30$: ASL R1 DEC R3 BNE 10$ POP RETURN .END