.TITLE NODES .IDENT /28JUN7/ ; ; NODES FREE NODES DISPLAY FOR STATUS ; ; AUTHOR: M. KELLOGG ; SYSTEM: RSX-11D ; DATE: 17-NOV-76 ; REVISIONS: ; 3-DEC-76 (MK) STARTUP TIME DISPLAY ADDED ; 28-JUN-77 (MK) VERSION DISPLAY ADDED ; ; THIS SUBROUTINE DISPLAYS FREE NODES IN THE SYSTEM, AND ALSO DISPLAYS ; THE DATE AND TIME. ; ; DISPLAY FORMAT: ; ; FREE NODES: XXX:YYY MIN: XXX:YYY MAX: XXX:YYY DD-MMM-YY HH:MM ; ; XXX IS TOTAL NODES, AND YYY IS LARGEST HOLE. ; ; INPUTS: ; ; R0 LINE NUMBER OF DISPLAY ; IF R0 IS ZERO, THE LINE ; RSX-11D VX.Y STARTUP: DD-MMM-YY HH:MM ; IS DISPLAYED IN PLACE OF THE NORMAL DISPLAY. ; ; OUTPUTS: ; ; R0 NUMBER OF NEXT FREE LINE (INPUT R0 + 1) ; ; NO REGISTERS PRESERVED ; .MCALL DIR$,GTIM$S ; .MACRO .INH0 MOV @#PS.EXP,-(SP) BISB #140,@#PS.EXP .ENDM .INH0 ; .MACRO MOVTXT TEXT,?L MOV #TEXT,R1 L: MOVB (R1)+,(R0)+ TSTB (R1) BNE L .ENDM MOVTXT ; .MACRO PUTNUM NUM MOV NUM,R1 CALL $CBDMG .ENDM PUTNUM ; .MACRO PUT2D NUM JSR R5,PUT2DG .WORD NUM .ENDM PUT2D ; MOTBL: .ASCII /JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC/ FN: .ASCIZ /FREE NODES: / MIN: .ASCIZ /MIN: / MAX: .ASCIZ /MAX: / VERSN: .ASCIZ /RSX-11D V6.2/ STRTUP: .ASCIZ /STARTUP:/ .EVEN FREE: .WORD 0 HOLE: .WORD 0 MINFRE: .WORD 999. MINHOL: .WORD 999. MAXFRE: .WORD 0 MAXHOL: .WORD 0 TIMBUF: .BLKW 8. NODES:: MOVB #177,CURCH ;SET CHAR POSITION MOVB #177,CURLIN ;SET LINE POSITION BICB R0,CURLIN DIR$ #SETCUR ;SET CURSOR MOV R0,-(SP) MOV #BUFF,R0 MOV #40.,R1 10$: MOV #" ,(R0)+ ;BLANK THE BUFFER SOB R1,10$ ; ; GET FREE NODES AND HOLE SIZE ; CLR R2 CLR R3 .INH0 ;;INHIBIT TASK SWITCHING MOV .POLLH,R1 ;;POINT R1 TO FIRST HOLE BEQ 40$ ;;CATCH NO HOLES AT ALL 20$: TST (R1)+ ADD (R1),R2 ;;ADD HOLE TO FREE NODES CMP (R1),R3 ;;CHECK AGAINST MAX HOLE SIZE BLE 30$ ;;NO BIGGER MOV (R1),R3 ;;UPDATE MAX HOLE SIZE 30$: MOV -(R1),R1 ;;POINT TO NEXT HOLE BNE 20$ ;;DO IT IF IT'S THERE 40$: CALL ..ENB0 ;;ENABLE TASK SWITCHING ASH #-4,R2 ;CONVERT BYTES TO NODES ASH #-4,R3 MOV R2,FREE ;SAVE FREE AND HOLE MOV R3,HOLE CMP R2,MAXFRE ;UPDATE MAX FREE BLE 50$ MOV R2,MAXFRE 50$: CMP R2,MINFRE ;UPDATE MIN FREE BGE 60$ MOV R2,MINFRE 60$: CMP R3,MAXHOL ;UPDATE MAX HOLE BLE 70$ MOV R3,MAXHOL 70$: CMP R3,MINHOL ;UPDATE MIN HOLE BGE 80$ MOV R3,MINHOL 80$: ; ; GET DATE AND TIME ; GTIM$S #TIMBUF ; ; FORMAT INFORMATION INTO BUFFER ; FORMAT: TST (SP) ;SPECIAL DISPLAY? BNE 10$ ;NO MOV #BUFF,R0 ;YES MOVTXT VERSN ;RSX-11D VX.Y MOV #BUFF+50.,R0 MOVTXT STRTUP ;STARTUP: BR 20$ 10$: CLR R2 ;SUPPRESS LEAD ZEROS IN $CBDMG MOV #BUFF,R0 MOVTXT FN ;FREE NODES: PUTNUM FREE ;XXX MOVB #':,(R0)+ ;: PUTNUM HOLE ;YYY MOV #BUFF+22.,R0 MOVTXT MIN ;MIN: PUTNUM MINFRE ;XXX MOVB #':,(R0)+ ;: PUTNUM MINHOL ;YYY MOV #BUFF+37.,R0 MOVTXT MAX ;MAX: PUTNUM MAXFRE ;XXX MOVB #':,(R0)+ ;: PUTNUM MAXHOL ;YYY 20$: MOV #BUFF+60.,R0 PUT2D TIMBUF+G.TIDA ;DD MOVB #'-,(R0)+ ;- MOV TIMBUF+G.TIMO,R1 ASL R1 ADD TIMBUF+G.TIMO,R1 ADD #MOTBL-3,R1 MOVB (R1)+,(R0)+ ;M MOVB (R1)+,(R0)+ ;M MOVB (R1)+,(R0)+ ;M MOVB #'-,(R0)+ ;- PUT2D TIMBUF+G.TIYR ;YY MOV #BUFF+71.,R0 PUT2D TIMBUF+G.TIHR ;HH MOVB #':,(R0)+ ;: PUT2D TIMBUF+G.TIMI ;MM ; ; OUTPUT LINE AND RETURN ; MOV #80.,CHCNT ;SET CHAR COUNT DIR$ #LINOUT ;WRITE LINE MOV (SP)+,R0 INC R0 ;COUNT LINE RETURN ; ; SUBROUTINE TO PUT 2 DIGITS IN LINE ; ; JSR R5,PUT2DG ; .WORD NUM ;ADDR OF NUMBER TO CONVERT ; PUT2DG: CLR R2 MOV @(R5)+,R3 DIV #10.,R2 ADD #60,R2 ADD #60,R3 MOVB R2,(R0)+ MOVB R3,(R0)+ RTS R5 .END