;SECTION TO LIST NODE POOL USAGE ;AS MODIFIED BY F. BORGER, MICHAEL REESE MECICAL CENTER ; ; .TITLE NOD .MCALL DIR$,QIO$,WTSE$,EXIT$,RQST$ .enable lc PSW=177776 NOD:: ;FIRST CALC MAX POOL AND HOLE MOV .POLLH,R4 ;;GET POOL LISTHEAD CLR R3 ;;CLEAR 'LARGEST HOLE' COUNT CLR R5 ;;CLEAR TOTAL NODES COUNT 10$: ADD 2(R4),R5 ;;ADD IN NEW HOLE SIZE CMP 2(R4),R3 ;;IS THIS THE LARGEST HOLE SO FAR BLOS 20$ ;;BR IF NO MOV 2(R4),R3 ;;GET NEW SIZE 20$: TST (R4) ;;DONE BEQ 30$ ;;BR IF YES MOV @R4,R4 ;;MOVE TO NEXT HOLE BR 10$ ;;LOOP TIL DONE 30$: ASH #-4,R3 ;CONVERT TO 8-WORDS MOV R3,HOLTOT ;;SAVE MAX HOLE SIZE ASH #-4,R5 MOV R5,POLTOT ;;SAVE TOTAL NODE COUNT MOV #ORISZ+4,R2 ;TEXT POINTER TO R2 MOV POLTOT,R0 ;POOL SIZE -> R0 JSR PC,UNPAK ;UNPACK NUMBER INTO MESSAGE MOV #ORIHOL+4,R2 ;TEXT POINTER TO R2 MOV HOLTOT,R0 ;LARGEST HOLE SIZE TO R0 JSR PC,UNPAK ;UNPACK NUMBER DIR$ #ORIQIO DIR$ #WAIT TASK: MOV .STDTA,R4 ;GET START OF STD CLR STDLAS ;CLEAR LAST STD ENTRY POINTER CLR STDTOT ;CLEAR COUNTER FOR STD USAGE CLR R1 ;CLEAR FORMAT COUNTER NEXT: MOV (R4)+,R5 MOV R5,STDLAS ;SAVE STD ENTRY POINTER FOR END CHECK ADD #2,STDTOT ;COUNT 2 8-WORD NODES USED 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 R1,-(SP) MOV #6,R1 ;SET UP FOR RA50 CONVERT MOV R5,R2 MOV #TASKNM,R3 JSR PC,..RDTA MOV (SP)+,R1 INC R1 MOVB #'$,TASQIO+Q.IOPL+4 ;SET UP CARRIAGE CONTROL CMP R1,#1 ;1ST OF LINE, WE'RE SET FOR IT ALREADY BEQ 100$ CMP R1,#4 ;4TH TIME ON LINE ? BLT 99$ ;BR IF NOT CLR R1 ;RESET MOD 4 COUNTER MOVB #'+,TASQIO+Q.IOPL+4 ;MAKE THIS ONE OVERPRINT BR 100$ 99$: CLRB TASQIO+Q.IOPL+4 ;FIRST LINE MAKE IT A PROMPT CAR CTL 100$: DIR$ #TASQIO DIR$ #WAIT CHECK: CMP (R4),STDLAS ;DUPLICATE ENTRIES IN STD TABLE MEAN END BEQ 1$ ;NO GO AGAIN TST (R4) ;OR NO STD ENTRY POINTER MEANS DONE TOO BNE NEXT ;NO GO AGAIN 1$: DIR$ #POOL ;DO TOTAL, MAX HOLE LINE DIR$ #WAIT 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,, POOL: 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 /----- ------ / .ASCII /----- ------ / .ASCII /----- ------ / .ASCII /----- ------ / END1=. SIZE: .BYTE 12,15 ORISZ: .ASCII / . available/ .BYTE 15,12 ORIHOL: .ASCII / . largest hole/ END1A=. .EVEN TASKND: .ASCII / . / .EVEN TASKNM: .BLKB 6 .ASCII / / END3=. STDND: .ASCII / . system task directory / END4=. .EVEN GCDND: .ASCII / . global common directory / END5=. .EVEN UNAND: .ASCII / . not accounted/ END6=. .EVEN POLTOT: .WORD 0 ;TOTAL NUMBE OF NODES HOLTOT: .WORD 0 ;LARGEST HOLE IN NODE POOL STDTOT: .WORD 0 ;TOTAL NODES USED FOR STD STDLAS: .WORD 0 ;POINTER TO CURRENT 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