.TITLE ATPAGE - ACTIVE TASK 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: ; ; ACTIVE TASK 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 PCBDF$ ; DEFINE PCB OFFSETS AND SYMBOLS TCBDF$ ; DEFINE TCB 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 LOCAL OFFSETS .PSECT OFFSET,ABS ; ; OFFSETS OF TASK LIST BLOCK ; AT.NAM: .BLKW 2 ; TASK NAME AT.LEN: .BLKW 1 ; SIZE OF TASK IN BYTES AT.DEV: .BLKB 2 ; OWNING TI DEVICE AT.UNT: .BLKB 1 ; OWNING TI UNIT NUMBER AT.PRI: .BLKB 1 ; PRIORITY AT.CNT: .BLKB 1 ; I/O COUNT AT.SLN: .BLKB 1 ; LENGTH OF STATUS FIELD AT.STA: .BLKW 3 ; STATUS FLAGS T.STAT,T.ST2,T.ST3 .SBTTL ENTRY POINT DEFINITION .PSECT PAGE,OVR,I,LCL .WORD PAGE ; DEFINE ENTRY POINT .SBTTL LOCAL DATA ; ; LOCAL SYMBOLS ; TSKMX = 20. ; MAXIMUM NUMBER OF ACTIVE PARTITIONS ; *** NOTE ANY CHANGE HERE WILL RESULT ; IN A CHANGE IN GBLATM ; ; TASK LIST BLOCK: ; ; .BLKW 2 ; (R50) TASK NAME ; .BLKW 1 ; (BIN) SIZE OF TASK IN BYTES ; .BLKB 2 ; (ASC) OWNING TI DEVICE ; .BLKB 1 ; (BIN) OWNING TI UNIT NUMBER ; .BLKB 1 ; (BIN) PRIORITY ; .BLKB 1 ; (BIN) I/O COUNT ; .BLKB 1 ; (BIN) LENGTH OF STATUS FIELD ; .BLKW 3 ; STATUS FLAGS T.STAT,T.ST2,T.ST3 ; ; LOCAL DATA ; TSKDT: .BLKW TSKMX*9. ; TASK LIST BLOCK TSKEND: .WORD 0 ; END OF TASK LIST BLOCK TIMBUF: .BLKW 8. ; BUFFER FOR TIME PARAMETERS FROM GTIM$S EDTBUF: .BLKW 30. ; EDIT CONVERSION BUFFER NULL: .WORD 0,0 ; GUARD WORD OUT: .ASCII // ; OUT OF MEMORY STRING OUTLEN = .-OUT .EVEN .SBTTL ATPAGE ENTRY POINT ;+ ; ; PAGE - ACTIVE TASK DISPLAY UPDATE PROCESSING ; ; INPUTS: NONE ; ; OUTPUTS: THE ACTIVE TASK DISPLAY IS UPDATED ; ;- PAGE: MOV #TSKDT,R4 MOV #TSKMX,R1 10$: CALL $ATCLR SOB R1,10$ CALL FIND ; ALL THE ACTIVE TASKS. CALL UPDATE ; THE DISPLAY. RETURN .SBTTL FIND ;+ ; **-FIND - FILL UP BUFFER WITH CURRENT ACTIVE TASK INFO ; ; INPUTS: ; ; OUTPUTS: ; ;- FIND: MOV #TSKDT,R5 CALL $SWSTK,90$ MOV $TSKHD,R4 ; GET THE TASK LIST HEADER ; ; BACK HERE FOR EACH TASK IN THE TASK LIST ; 10$: TST T.STAT(R4) ; IS TASK ACTIVE ? BMI 70$ ; IF NOT, PASS IT BY. CMPB T.PRI(R4),$XCPRI ; LOWER THAN TOP PRIORITY? BHI 70$ ; BR IF NO MOV T.NAM+0(R4),(R5)+ ; COPY NAME WD 1 MOV T.NAM+2(R4),(R5)+ ; COPY NAME WD 2 MOV T.PCB(R4),R2 ; GET PCB ADDRESS .IF DF,R$$MPL BNE 20$ ; BR IF IN MEMORY CLR (R5)+ ; ELSE INDICATE OUT OF MEMORY BR 30$ ; CONTINUE .ENDC 20$: MOV P.SIZE(R2),(R5)+ ; GET ACTIVE SIZE 30$: MOV T.UCB(R4),R2 ; PUT TI UCB ADDR IN BUFFER MOV U.DCB(R2),R3 ; GET THE DCB MOV D.NAM(R3),(R5)+ ; TO STORE ITS NAME MOV R2,R0 ; GET UCB ADDRESS SUB D.UCB(R3),R0 ; COMPUTE RELATIVE UCB ADDRESS MOV D.UCBL(R3),R1 ; GET UCB LENGTH CALL $DIV ; COMPUTE RELATIVE UNIT NUMBER ADD D.UNIT(R3),R0 ; COMPUTE ABSOLUTE UNIT NUMBER MOVB R0,(R5)+ ; AND NUMBER. MOVB T.PRI(R4),(R5)+ ; STORE T.PRI IN BUFFER MOVB T.IOC(R4),(R5)+ ; GET T.IOC CLRB (R5)+ ; NOT USED HERE. MOV T.STAT(R4),(R5)+ ; COPY TASK STATUS WORD MOV T.ST2(R4),(R5)+ ; STORE T.ST2 MOV T.ST3(R4),(R5)+ ; AND T.ST3 CMP R5,#TSKEND ; MAXIMUM NUMBER OF TASKS PROCESSED? BEQ 80$ ; BR IF YES ; ; HERE TO PICK UP ADDRESS OF NEXT TCB ; 70$: MOV T.TCBL(R4),R4 ; CHAIN TO NEXT TCB TST T.TCBL(R4) ; IS THIS THE NULL TASK? BNE 10$ ; IF NOT, GO FOR MORE. 80$: CLR (R5) 90$: RETURN .SBTTL UPDATE ; NAME LENGTH TI PRI I/O STATUS FLAGS ; XXXXXX XXXXXX XXXXX XXX. XXX. ; 1 8 15 21 26 31 UPDATE: GTIM$S #TIMBUF ; GET TIME AND DATE TST $ATDAT ; 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,$ATDAT,9. ; MOVE ONTO SCREEN 2$: TST $ATTIM ; DO WE WANT TIME DISPLAYED? BEQ 5$ ; BR IF NO MOV #" ,EDTBUF+6 ; IF TIME IS BEFORE 10 O'CLOCK MOV #EDTBUF,R0 ; OUTPUT FROM CONVERSION MOV #TIMBUF+6,R1 ; INPUT BUFFER MOV #3,R2 ; HH:MM:SS FORMAT CALL $TIM ; CONVERT TIME TO ASCII MVN #EDTBUF,$ATTIM,8. ; MOVE ONTO SCREEN 5$: MOV #TSKDT,R5 MOV #$ATNAM,R4 10$: TST (R5) BNE 40$ CMP R4,#$ATNAE ; END OF TASK ENTRIES? BHIS 30$ ; BR IF YES MOV (R4),R4 ; GET BEGINNING OF TASK INFORMATION BEQ 30$ ; BR IF AT END OF SCREEN 20$: CMP #$ESCRN,R4 ; AT END OF SCREEN? BLOS 30$ ; BR IF YES CMP #$SCRN,R4 ; BEFORE BEGINNING OF SCREEN? BHIS 30$ ; BR IF YES CMPB #40,(R4)+ ; IS IT A SPACE ALREADY? BEQ 20$ ; BR IF YES MOVB #40,-1(R4) ; ELSE MAKE IT A SPACE FLAG -1(R4) ; FLAG IT BR 20$ ; CONTINUE 30$: RETURN 40$: MOV #EDTBUF,R0 ; CONVERSION STORAGE BUFFER MOV (R5)+,R1 ; FIRST HALF OF NAME CALL $C5TA ; CONVERT IT TO ASCII MOV (R5)+,R1 ; SECOND HALF CALL $C5TA ; CONVERT IT MOV (R4)+,R3 ; GET ADDRESS TO STORE TASK NAME BEQ 45$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R3,6. ; STORE IT 45$: MOV #EDTBUF,R0 ; CONVERSION STORAGE BUFFER MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #" ,(R2)+ ; INITIALIZE TO SPACES MOV #" ,(R2)+ ; ... MOV #" ,(R2)+ ; ... MOV #6.*4000+1000+8.,R2 MOV (R5)+,R1 .IF DF,R$$MPL BNE 60$ ; BR IF IN MEMORY MOV #OUT,R1 ; INDICATE OUT OF MEMORY MOV #OUTLEN,R2 ; LENGTH OF STRING 50$: MOVB (R1)+,(R3)+ ; STORE IT DEC R2 ; BGT 50$ ; BR IF MORE TO STORE BR 130$ ; CONTINUE .ENDC 60$: ASH #6,R1 CALL $CBTA MOV (R4)+,R3 ; GET ADDRESS TO STORE TASK LENGTH BEQ 130$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R3,6. ; STORE TASK LENGTH 130$: MOV #EDTBUF,R0 ; CONVERSION STORAGE BUFFER MOVB (R5)+,(R0)+ ; FIRST HALF OF DEVICE NAME MOVB (R5)+,(R0)+ ; SECOND HALF OF NAME MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #" ,(R2)+ ; INITIALIZE TO SPACES MOV #" ,(R2)+ ; ... CLR R1 ; GET UNIT NUMBER BISB (R5)+,R1 ; ... MOV #3.*4000+8.,R2 CALL $CBTA MOV (R4)+,R3 ; GET ADDRESS TO STORE OWNING TI BEQ 140$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R3,5 ; STORE IT 140$: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #" ,(R2)+ ; INITIALIZE TO SPACES MOV #" ,(R2)+ ; ... CLR R1 ; GET PRIORITY BISB (R5)+,R1 ; ... CLR R2 ; ZERO SUPPRESSION CALL $CBDMG ; CONVERT IT MOVB #'.,(R0)+ ; STORE DECIMAL POINT MOV (R4)+,R3 ; GET ADDRESS TO STORE PRIORITY BEQ 150$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R3,4 ; STORE IT 150$: MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #" ,(R2)+ ; INITIALIZE TO SPACES MOV #" ,(R2)+ ; ... CLR R1 ; GET I/O COUNT BISB (R5)+,R1 ; ... CLR R2 ; ZERO SUPPRESSION CALL $CBDMG ; CONVERT IT MOVB #'.,(R0)+ ; STORE DECIMAL POINT MOV (R4)+,R3 ; GET ADDRESS TO STORE I/O COUNT BEQ 160$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R3,4 ; STORE IT 160$: INC R5 MOV #EDTBUF,R0 ; EDIT CONVERSION BUFFER MOV R0,R2 ; POINT TO CONVERSION BUFFER MOV #30.,R1 ; NUMBER OF WORDS IN BUFFER 170$: MOV #" ,(R2)+ ; INITIALIZE TO SPACES DEC R1 ; MORE? BGT 170$ ; BR IF YES MOV #STABLE,R2 MOV (R5)+,R1 ; T.STAT CALL STATUS MOV (R5)+,R1 ; T.ST2 BMI 180$ ; IF NO AST IN PROGRESS THEN BIC #*2,R1 ; CLEAR THE AST FLAGS. 180$: CALL STATUS MOV (R5)+,R1 ; T.ST3 CALL STATUS MOV (R4)+,R3 ; GET ADDRESS TO STORE STATUS FLAGS BEQ 190$ ; BR IF NOT TO BE DISPLAYED MVN #EDTBUF,R3,38. ; STORE IT 190$: JMP 10$ .SBTTL RSX11M-PLUS FLAGS .IF DF,R$$MPL ; ; 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) .EVEN .SBTTL RSX11M STATUS FLAGS .IFF ;R$$MPL ; ; 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) .EVEN .ENDC ; R$$MPL .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