;SECTION TO LIST NODE POOL USAGE ;AS MODIFIED BY F. BORGER, MICHAEL REESE MECICAL CENTER ; ; .TITLE NOD .MCALL DIR$,QIO$,WTSE$,EXIT$,RQST$ .GLOBL .POLSZ,.POLLH,..RDTA,.STDTA PSW=177776 NOD:: ;FIRST CALC ORIGINAL MAX POOL SIZE MOV #.CRTSK,POLTOT ;RECORD END OF POOL SUB .POLBE,POLTOT ;SUB START OF POOL ;NOW CORRECT FOR AREA USED FOR PUD & STD ALPHA TABLE MOV .STDTC,R2 ;GET MAX NUMBER OF STD'S ASL R2 ;CONVERT TO SIZE OF STD ALPHA TABLE ADD .STDTA,R2 ;ADD BASE ADDRESS, NOW =END OF STDTA SUB .PUDBA,R2 ;SUB BASE OF PUD SUB R2,POLTOT ;SUB THIS AREA FROM TOTAL SIZE MOV POLTOT,R0 ;GET TOTAL BACK IN R0 ASH #-4,R0 ;CONVERT TO # OF 8-WORD NODES MOV R0,POLTOT ;AND STORE MOV #ORISZ+4,R2 ;TEXT POINTER TO R2 JSR PC,UNPAK ;UNPACK NUMBER INTO MESSAGE DIR$ #ORIQIO DIR$ #WAIT MOV .POLLH,R2 ;GET POOL LISTHEAD CLR R0 ;FOR COUNT MOV @#PSW,-(SP) ;INHIBIT TASK SWITCHING BIS #340,@#PSW ;SO POOL NOT MESSED UP LOOP: TST (R2) ;CHECK FOR END OF POOL BEQ DONE ;IF NEXT =0, WERE DONE MOV (R2),R2 ;GET START OF NEXT NODE ADD 2(R2),R0 ;ADD SIZE OF THIS BLOCK BR LOOP ;COUNT ANOTHER DONE: MOV (SP)+,@#PSW ;REENABLE TASK SWITCHING ASH #-4,R0 ;CONVERT R0 TO # OF 8-WORD NODES SUB R0,POLTOT ;UPDATE NODE ACCOUNTING MOV #CURND+4,R2 ;DONE SET UP BUFFER POINTER JSR PC,UNPAK ;UNPACK DIGITS AND STORE DIR$ #CURQIO DIR$ #WAIT TASK: MOV .STDTA,R4 ;GET START OF STD CLR STDTOT ;CLEAR COUNTER FOR STD USAGE NEXT: MOV (R4)+,R5 ADD #2,STDTOT ;COUNT 2 8-WORD NODES USED BIT #SF.24,S.FW(R5) ;IS THIS A 3-WORD NODE ? BEQ 1$ ;NO INC STDTOT ;YES, COUNT EXTRA NODE 1$: MOV S.PU(R5),R0 ;GET COUNT BEQ CHECK ;NO NODES USED SUB R0,POLTOT ;SUB FROM TOTAL MOV #TASKND+4,R2 ;BUFFER POINTER SET UP JSR PC,UNPAK ;AGAIN UNPACK DIGIT MOV #6,R1 ;SET UP FOR RA50 CONVERT MOV R5,R2 MOV #TASKNM,R3 JSR PC,..RDTA DIR$ #TASQIO DIR$ #WAIT CHECK: TST (R4) ;ARE WE DONE ? BNE NEXT ;NO GO AGAIN MOV STDTOT,R0 ;NUMBER OF NODES USED FOR STD -> R0 SUB R0,POLTOT ;SUB FROM TOTAL NODES MOV #STDND+4,R2 ;GET POINTER TO MESSAGE AREA JSR PC,UNPAK ;CONVERT NUMBER TO ASCII DIR$ #STDQIO ;REPORT IT DIR$ #WAIT ;WAIT FOR QIO DONE MOV .GCDLH,R2 ;GET START OF GLOBAL COMMON DIRECTORY CLR R0 ;CLEAR COUNTER GCLOOP: TST (R0)+ ;COUNT ONE GCD ENTRY MOV (R2),R2 ;GET NEXT GCD ENTRY CMP R2,#.GCDLH ;AT END OF GLOBAL COMMON DIR. ? BNE GCLOOP ;NO GET ANOTHER SUB R0,POLTOT ;SUB NODES USED MOV #GCDND+4,R2 ;TEXT POINTER TO R2 JSR PC,UNPAK ;INSERT NODE USAGE DIR$ #GCDQIO ;REPORT ON GCD DIR$ #WAIT MOV POLTOT,R0 ;UNACCOUNTED NODES TO R0 1$: MOV #UNAND+4,R2 ;TEXT POINTER TO R2 JSR PC,UNPAK ;WRITE INTO BUFFER DIR$ #UNAQIO ;WRITE UNACCOUNTED NODES DIR$ #WAIT ;WAIT FOR IT STOP: RTS PC ;BACK TO MAIN ORIQIO: QIO$ IO.WVB,2,1,,IOST,, CURQIO: QIO$ IO.WVB,2,1,,IOST,, TASQIO: QIO$ IO.WVB,2,1,,IOST,, STDQIO: QIO$ IO.WVB,2,1,,IOST,, GCDQIO: QIO$ IO.WVB,2,1,,IOST,, UNAQIO: QIO$ IO.WVB,2,1,,IOST,, WAIT: WTSE$ 1 ORIND: .BYTE 12,15 ;CARRET,LF .ASCII /NODES USAGE / .BYTE 12,15 .ASCII /----- ------/ .BYTE 12,15 ORISZ: .ASCII / . TOTAL / END1=. .EVEN CURND: .ASCII / . UNUSED/ END2=. .EVEN TASKND: .ASCII / . / .EVEN TASKNM: .BLKB 6 END3=. STDND: .ASCII / . S T D / END4=. .EVEN GCDND: .ASCII / . G C D / END5=. .EVEN UNAND: .ASCII / . NOT ACCOUNTED/ END6=. .EVEN POLTOT: .WORD 0 ;TOTAL NUMBE OF NODES STDTOT: .WORD 0 ;TOTAL NODES USED FOR STD IOST: .BLKW 2 SPSP: .BYTE 40,40 ; ;SUBROUTINE TO UNPACK R0,CONVERT TO DECIMAL ;AND STORE THE ASCII NUMBER IN THE APPROPRIATE BUFFER USING R2 ;AS A POINTER ; ; UNPAK: MOV R1,HOLD ;SAVE R1 MOV #TASKND,R1 ;GET START OF NODES USED BY MESSAGE MOV SPSP,(R1)+ ;BLANK OUT (TO SPACES) THE MOV SPSP,(R1) ;PREVIOUS NUMBER TST R0 ;NUMBER 0 ? BGT UNPAK1 ;IF NOT OK MOVB #60,-(R2) ;ELSE PUT ASCII ZERO IN BUFFER BR UNPKD ;AND WE'RE DONE UNPAK1: MOV R0,R1 ;CET VALUE INTO R1 TST R1 ;IS IT ZERO ? BEQ UNPKD CLR R0 ;NO CONTINUE DIV #10.,R0 ;AFTER DIVIDE, REMAINDER IN R1 ADD #60,R1 ;CONVERT R1 TO ASCII DIGIT MOVB R1,-(R2) ;AND STORE BR UNPAK1 UNPKD: MOV HOLD,R1 ;RESTORE R1 RTS PC HOLD: .WORD 0 .END