;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 ATL .GLOBL .ATLLH .MCALL QIO$C,EXIT$C,WTSE$C,RQST$C ATL:: 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 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.RQ(R0),(R5)+ ;AND STD ENTRY OF REQUESTOR 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 ;SET POINTER 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 ASHC #4,R2 ;ACCOUNT FOR UPPER 4 BITS CLR R2 ;AND CLEAR R2 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 SUB #2,R2 ;BUMP BACK 2 FOR COSMETICS 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 ;STD OF REQUESTING TASK TO R2 MOV #6,R1 ;COUNT 6 CHARACTERS TO CONVERT MOV #BUFF4,R3 ;FROM RAD-50 TO ASCII IN BUFF4 JSR PC,..RDTA ;CALL CONVERT SUBROUTINE 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 .BYTE 040,040 BUFF1: .WORD 0,0 BUFF2: .BYTE 060,060,040,040 BUFF3: .ASCII / / BUFF4: .ASCII / / ENDOFD: .WORD 0 FULLST: .WORD 0 HEAD1: .ASCII / TASK ADDRESS STATUS REQUESTOR/ .EVEN HEAD2: .ASCII /------ ------- ------------ ---------/ .EVEN LENGTH=.-HEAD2 LENGT1=LENGTH-24. LENGT2=LENGTH-2 ; ;BUFFER CONTAINING ASCII STATUS CODES TSTAT: .ASCII / LOAD PEND'G LOAD QUEUED LOAD SUCESS/ .ASCII / LOAD FAILED EXECUTING AST QUEUED / .ASCII / SUSPENDED / .ASCII ? W/F EVENT 0 W/F EVENT 1 W/F EVENT 2? .ASCII ? W/F EVENT 3? .ASCII ? W/F ALL EVS EXITED R'DOWN REQ.? .ASCII / R'DOWN GNG. R'DOWN OVER R'DOWN FAIL/ .ASCII / TERM. FAULT TERMN. REQ. TERMN. SUS./ .ASCII ? SUSP. F/CKP RECORD Q'ED RECORD SUC.? .ASCII / RECORD FAI. PARITY ERR. EXIT AC'ING/ .ASCII ? W/F ACCOUNT SWAPPED OUT MRL EXECUTE? STORE: .BLKW 80. .END