;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 ##### ; ;UPDATED 27 AUG 81 FOR IAS VERS 3.1 ; ; ; ; .enable lc .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 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,#STOEND ;FILLED STORAGE 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 reload/ast ? ;14-15 .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/accnt. mark/exten ? ; STORE: .BLKW 400. ;ROOM FOR 100 IN FULL MODE STOEND: .BLKW 8. ;OVERFLOW AREA .END