.TITLE CHK -- List Checkpoint Space In-Use .IDENT /01/ ; ; ; ; Local data: ; .MCALL PCBDF$,TCBDF$ PCBDF$ TCBDF$ ; .MCALL QIOW$,DIR$,EXIT$S .NLIST BEX MAXTSK = 100. ; Maximum number of tasks. BUFF: .BLKW 2*MAXTSK ; Buffer space for task names. NTSKS: .WORD 0 ; Number of tasks to print. TOTAL: .WORD 0 ; Number of tasks checkpointed. OUT: .BLKB 50. ; Output line buffer. ; TASK: .WORD T2,T3,T4,T5,T6 ; Addresses of $EDMSG strings. MES1: .ASCII /%N%2R / ; Format for $EDMSG T2: .ASCII /%2R / ; to print T3: .ASCII /%2R / ; six T4: .ASCII /%2R / ; tasks T5: .ASCII /%2R / ; per T6: .ASCIZ /%2R / ; line. MES2: .ASCIZ /There are %D tasks checked on the system/ MES3: .ASCII /CHK -- Buffer capacity exceeded/ SIZ3 = . - MES3 .EVEN ; WRITE: QIOW$ IO.WVB,5,1,,,, ; .PAGE .ENABLE LSB ; CHK:: MOV #BUFF,R0 ; Address of data buffer. CALL $SWSTK,OUTPT ;;; Switch to system state. MOV #$PARHD,R1 ;;; Get the first partition pointer. MOV (R1),R1 ;;; Get the address. 7$: ;;; Jump here on new main partition. MOV P.WAIT(R1),R2 ;;; Get the next task waiting address. BEQ 15$ ;;; If zero, there isn't one here. BIT P.STAT(R2),#PS.CKP ;;; Is this partition checkpointed? BEQ 5$ ;;; If not set, yes. 10$: ;;; Jump here for next subpartition. MOV P.TCB(R2),R3 ;;; Get TCB pointer. INC TOTAL ;;; Increment total tasks found. CMP NTSKS,#MAXTSK ;;; Buffer capacity exceeded? BEQ 5$ ;;; If zero, yes. INC NTSKS ;;; Add task names MOV T.NAM(R3),(R0)+ ;;; to the task MOV T.NAM+2(R3),(R0)+ ;;; list. 5$: ;;; Jump here for next subpartition. MOV (R2),R2 ;;; Get the address. BEQ 15$ ;;; If zero, try for another main. BR 10$ ;;; Otherwise branch back up. 15$: ;;; Jump here for next main. MOV (R1),R1 ;;; Get main partition address. BNE 7$ ;;; Jump back up. 20$: ;;; Exitting system state. RETURN ;;; Jump to OUTPT. OUTPT: ; MOV #OUT,R0 MOV #MES2,R1 MOV #TOTAL,R2 CALL $EDMSG MOV R1,WRITE+Q.IOPL+2 DIR$ #WRITE ; MOV NTSKS,R5 MOV #BUFF,R2 ; 30$: MOV #6,R4 CMP R4,R5 BLE 40$ MOV R5,R4 DEC R4 ASL R4 MOVB #0,@TASK(R4) 40$: MOV #OUT,R0 MOV #MES1,R1 CALL $EDMSG MOV R1,WRITE+Q.IOPL+2 DIR$ #WRITE SUB #6,R5 BGE 30$ ; CMP TOTAL,NTSKS BEQ EXIT MOV #MES3,WRITE+Q.IOPL MOV #SIZ3,WRITE+Q.IOPL+2 DIR$ #WRITE EXIT: EXIT$S .END CHK