;PROGRAM TO DO A QUICK SCAN OF ACTIVE TASKS ;AND TELL YOU WHERE THEY ARE IN CORE SO YOU KNOW WHICH ;PROGRAMS ARE FRAGMENTING YOUR GEN PARTITION ;ALL TO ##### ; ; ; ; .TITLE ACT .GLOBL .ATLLH .MCALL QIO$C,EXIT$C,WTSE$C,RQST$C ACT:: MOV #MCRBUF,R0 ;GET START OF COMMAND LINE ADD MCRSIZ,R0 ;BUMP TO TERMINATOR MOVB -(R0),FULLST ;SAVE (POSSIBLE) FULL LISTING SWITCH MOV #.ATLLH,R0 ;GET START OF LIST MOV #STORE,R5 ;SET POINTER TO INTERNAL STORAGE ;NOW ON STACK STARTING AT 1400 BYTES BELOW ;ACT:: THEREFORE STACK MUST BE 2000 NEXT: MOV (R0),R0 ;TO NEXT ENTRY CMP (R0),#.ATLLH ;DONE ? BEQ OUTPUT ;YES TST A.TD(R0) ;IF NO STD INTRY, SPEC ATL ENTRY BEQ NEXT MOV A.TD(R0),(R5)+ ;SAVE STD ENTRY MOV A.HA(R0),(R5)+ ;SAVE STARTING ADDRESS (MOD 64) CMP FULLST,#105 ;DO EXTENDED LISTING ? BNE BRANXT ;NO SAVE NEXT TASK INFO MOV A.TS(R0),(R5)+ ;SAVE TASK STATUS MOV A.TI(R0),(R5)+ ;AND TI POINTER CMP R5,#ACT-400 ;FILLED STACK AREA BGT OUTPUT ;IF SO, QUIT BRANXT: BR NEXT ;GO GET DATA ON ANOTHER TASK OUTPUT: CMP FULLST,#105 ;EXTENDED LISTING ? BEQ FULOUT ;YES DO FULL HEADER LINE QIO$C IO.WVB,2,1,,IOST,, ;WRITE SHORT HEADER WTSE$C 1 ;WAIT FOR IT QIO$C IO.WVB,2,1,,IOST,, ;WRITE SHORT HEADER WTSE$C 1 ;WAIT FOR IT BR HEADDN ;HEADER DONE FULOUT: QIO$C IO.WVB,2,1,,IOST,, ;WRITE LONG HEADER WTSE$C 1 ;WAIT FOR IT QIO$C IO.WVB,2,1,,IOST,, ;WRITE LONG HEADER WTSE$C 1 ;WAIT FOR IT HEADDN: MOV R5,ENDOFD ;STORE END OF DATA POINTER MOV #STORE,R5 ;POINTER TO START OF STORAGE NEXOUT: CMP R5,ENDOFD ;ARE WE AT END OF DATA ? BEQ DONE ;YES LIST IS DONE MOV (R5)+,R2 ;START OF STD ENTRY TO R2 MOV #6,R1 ;SET UP TO CONVERT MOV #BUFF,R3 JSR PC,..RDTA ;CALL CONVERT MOV #BUFF+6,R0 ;BUMP PAST TASK NAME CHARCK: TSTB -(R0) ;IS ASCII CODE A NULL BNE NAMEOK ;NO ITS A 6-CHAR NAME MOVB #40,(R0) ;YES, CHANGE TO A SPACE BR CHARCK ;AND CHECK ANOTHER CHARACTER NAMEOK: MOV (R5)+,R3 ;START ADDRESS/64 INTO R3 MOV #BUFF1,R0 ;CREATE POINTER TO BUFF1 CLR R2 ;AND CLEAR R2 ASHC #1,R2 ;GET BIT 22 OF ADDRESS INTO R2 ADD #60,R2 ;CONVERT TO OCTAL DIGIT MOVB R2,(R0)+ ;PUT IN ASCII BUFFER CLR R2 ;AND CLEAR OUT FOR NEXT SHIFT CONV: ASHC #3,R2 ;GET OCTAL DIGIT INTO R2 ADD #60,R2 ;CONVERT TO ASCII DIGIT MOVB R2,(R0) ;AND MOVE TO BUFFER INC R0 ;BUMP POINTER CLR R2 ;AND ZERO R2 CMP R0,#BUFF2 ;DONE WITH CONVERT ? BLT CONV ;NO CONVERT ANOTHER DIGIT CMP FULLST,#105 ;DO EXTENDED LISTING ? BNE SHTLST ;NO DO SHORT LIST MOV (R5)+,R3 ;GET TASK STATUS IN R3 BIC #177400,R3 ;CLEAR OLD STATUS (UPPER BYTE) MUL #6,R3 ;CONVERT TO 12-BYTE OFFSET ADD #TSTAT,R3 ;ADD BASE OF ASCII STATUS CODES MOV #BUFF3,R2 ;R2 POINTS TO OUTPUT BUFFER MOV #12.,R1 ;SET TO MOVE 12. ASCII CHARACTERS LOOP: MOVB (R3)+,(R2)+ ;INTO OUTPUT BUFFER SOB R1,LOOP ;NOT DONE, XFER ANOTHER MOV (R5)+,R2 ;TI OF TASK TO R2 MOV #BUFF4,R3 ;POINT R3 TO "TTXX:" IN OUTPUT BUFFER MOVB U.DN(R2),(R3)+ ;FILL IN DEV NAME IN BUFFER MOVB U.DN+1(R2),(R3)+ MOVB U.UN(R2),R1 ;UNIT # TO R1 MOV R3,R0 ;BUFFER POINTER -> R0 CLR R2 ;SUPRESS LEADING 0'S JSR PC,$CBOMG ;CONVERT UNIT # TO OCTAL MOVB #':,(R0)+ ;FILL IN ":" MOVB #' ,(R0)+ ;IN CASE ONE DIGIT # QIO$C IO.WVB,2,1,,IOST,, ;WRITE FULL DATA LINE WTSE$C 1 ;WAIT FOR IT BR OUTDON ;AND TRY FOR ANOTHER TASK SHTLST: QIO$C IO.WVB,2,1,,IOST,, WTSE$C 1 OUTDON: BR NEXOUT ;OUTPUT DATA ON NEXT TASK DONE: RTS PC ;RETURN IOST: .BLKW 2 BUFF: .WORD 0,0,0 ;TASK NAME (6 CHARACTERS) .BYTE 040 ;SPACE BUFF1: .ASCII / / ;6 SPACES FOR ADDRESS BUFF2: .ASCII /00/ ;2 0'S TO MAKE ADDRESS REAL LENGT1=.-BUFF BUFF3: .ASCII / / ;TASK STATUS BUFF4: .ASCII /TTNN: / ;TASK TI LENGT2=.-BUFF .EVEN ENDOFD: .WORD 0 FULLST: .WORD 0 HEAD1: .ASCII / TASK ADDRESS STATUS TASK'S TI/ .EVEN HEAD2: .ASCII /------ -------- ----------- ---------/ .EVEN LENGTH=.-HEAD2 ; ;BUFFER CONTAINING ASCII STATUS CODES TSTAT: .ASCII / LOAD PEND'G LOAD QUEUED LOAD SUCESS/ ;0-4 .ASCII ? LOAD FAILED WAIT/REGION RUNNABLE ? ;6-12 .ASCII / AST QUEUED / ;14 .ASCII ? SUSPENDED SUSP./NODES WAITING/SEM? ;16,20,22 .ASCII ? STOPPED STOPPED/EV0 STOPPED/EV1? ;24,26,30 .ASCII ? STOPPED/EV2 STOPPED/EV3 STOPPED/ALL? ;32,34,36 .ASCII ? WAITING/EV0 WAITING/EV1 WAITING/EV2? ;40,42,44 .ASCII ? WAITING/EV3? ;46 .ASCII ? WAITING/ALL EXITING R'DOWN PEND? ;50,52,54 .ASCII / R'DOWN GNG. R'DOWN COMP R'DOWN FAIL/ ;56,60,62 .ASCII ? TERM. FAULT TERMN. REQ. SUSP. F/TRM? ;64,66,70 .ASCII ? SUSP. F/CKP RECORD Q'ED RECORD SUC.? ;72,74,76 .ASCII ? RECORD FAI. PARITY ERR. TIMESH/EXIT? ;100,102,104 .ASCII ? TIMESH./TS1 TIMESH./TS2 WAITING/MEM? ;106,110,112 .ASCII ? WAITING/EXE WAITING/REG WAITING/DIR? ;114,116,120 .ASCII ? DIRECT OVER NULL TASK WAITING/ACC? ;122,124,116 .ASCII ? EXIT/ACOUNT? ;130 ;STORE: .BLKW 80. ;CHANGED TO STACK STORAGE STORE=ACT-1000 .END