;<EXEC>X5CMD.MAC;4     6-OCT-75 15:45:23    EDIT BY PLUMMER
;1.54

;<EXEC>X5CMD.MAC;3    19-SEP-75 09:41:21    EDIT BY PLUMMER
;<EXEC>X5CMD.MAC;2     2-JAN-75 12:26:24    EDIT BY PLUMMER

;1.53
;<EXEC>X5CMD.MAC;1     2-DEC-74 10:23:02    EDIT BY PLUMMER

; 1.52
;<N-EXEC>X5CMD.MAC;8     6-SEP-74 10:44:53    EDIT BY PLUMMER
; ADD EOL AT END
;<N-EXEC>X5CMD.MAC;7    26-JUL-74 13:19:05    EDIT BY PLUMMER
; STOBE DATA FILE WITH COPY ON WRITE IN PMAP
; ADJUST FORMAT OF DISK AV. PRINTOUT
;<N-EXEC>X5CMD.MAC;4    13-MAR-74 16:34:40	EDIT BY PLUMMER
; FLUSH OLD FORMAT COMPATIBILITY STUFF
; ADD NEW FORMAT CAPABILITY, AND DISK AVAILABILITY TYPEOUT
;<N-EXEC>X5CMD.MAC;2    11-OCT-73 12:57:50	EDIT BY PLUMMER
; ADD RFPOS AT NETL55+
;<EXEC>X5CMD.MAC;5     2-OCT-73 13:14:17	EDIT BY PLUMMER

; 1.51
; REPAIR BUGS IN GTAD TIME HANDLER
; ADD GTAD "TIME OF LAST UPDATE" PROVISIONS
; NETLOAD: BE SURE WORD-1 IS NON-ZERO OF INFO FILE

; 1.50
; MAKE "NETLOAD" SUSPICIOUS OF FILE FORMAT
; FORMAT IMPROVEMENTS AND ADDITIONAL COMMENTS IN "NETLOAD"
; ALL NUMBER OF USERS TO "NETLOAD" TYPE OUT


; PDP-10 TENEX EXECUTIVE

	.DIRECTIVE XSRCVN %X5
	%X5==%X5

;CONTENTS:
;		NETLOAD


;THE ROUTINES IN THIS FILE ARE ALL PART OF THE "DISTRIBUTED
; OPERATING SYSTEM" FUNCTIONS.  A NORMAL EXEC MAY BE ASSEMBLED
; BY OMITTING THIS FILE.
; THIS WILL HAPPEN IF DST10X IS 0.



;NETLOAD

;PRINTS THE 5 MIN. LOAD AVERAGES FROM
; ALL COOPERATING TENEX SITES.  THIS INFORMATION IS KEPT IN
; THE FILE <SYSTEM>RSYSTAT.;1   PAGE 0.

;WORD-0 OF THE PAGE RSSER VERSION # OR -1 IF BEING UPDATED
;WORD-1 IS N,,PTR  WHERE  N  IS THE LENGTH OF THE BLOCK ASSOCIATED
; WITH EACH SITE, AND PTR IS THE RELATIVE ADDRESS OF THE FIRST
; SITE BLOCK.
;WORD-5 IS GTAD FORMAT TIME OF LAST UPDATE
;WORD-10 (IF PTR .GE. 10) HAS SIZE,,OFFSET OF SITE INFO

;EACH SITE BLOCK HAS THE FOLLOWING THINGS OF INTEREST IN IT
; (OFFSET IS 6 FOR OLD FORMAT (N .LE. 10):

;WORD-0:	SITE NUMBER
;WORD-4:	-1 IF DATA IS GOOD FOR THIS SITE
;WORD-(0 + OFFSET):	AMOUNT OF USER CORE (IF N .GT. 10)
;WORD-(1 + OFFSET):	1 MIN. LOAD AV.
;WORD-(2 + OFFSET):	5 MIN. LOAD AV.
;WORD-(3 + OFFSET):	15 MIN. LOAD AV.
;WORD-(4 + OFFSET):	NUMBER OF USERS
;WORD-(5 + OFFSET):	NUMBER OF DISK PAGES IN USE
;WORD-(6 + OFFSET):	NUMBER OF FREE DISK PAGES


.NETLO:	HRROI 2,[ASCIZ /<SYSTEM>RSYSTAT.;1/]
	CALL TRYGTJ		;ASSIGN AND STACK JFN
NETLO0:	 ERROR <NETWORK LOAD STATISTICS NOT AVAILABLE>
	MOVE 2,[44B5+1B19+1B25]	;READ, THAWED
	OPENF
	 JRST NETLO0		;GO TYPE ERROR
	HRLZS 1			;FROM FILE PAGE 0
	MOVE 2,[400000,,<NSBUF/1000>]	;TO ADDRESS SPACE
	MOVSI 3,(1B2!1B9)	;READ, COPY ON WRITE
	PMAP
	MOVES NSBUF		;MAKE PAGE PRIVATE (STROBE DATA)
	SKIPGE NSBUF+0		;CHECK VERSION NUMBER
	 UERR [ASCIZ / DATA BASE BEING UPDATED/]

; INSPECT TIME OF LAST UPDATE TO SEE IF DATA IS VALID

NETLO2:	GTAD			;NOW
	SUB 1,NSBUF+5		;MINUS LAST UPDATE
	TRNE 1,1B18		;SECONDS WRAPPED AROUND?
	ADD 1,[-1,,^D<24*60*60>];YES, BORROW A DAY
	SKIPE NSBUF+1		;PARANOIA
	CAIL 1,^D<5*60>		;UPDATED WITHIN LAST 5 MINUTES?
	 UERR [ASCIZ / SERVER DEAD/]

NETLO4:	HRRZ 1,NSBUF+1		;CHECK PTR
	CAILE 1,10		;TEST FOR NEW FORMAT
	TLOA Z,F1		;YES, REMEMBER THAT
	TLZ Z,F1		;NO

NETL41:	TLNE Z,F1
	 JRST NETL43
NETL42:	TYPE <  SITE		 LOAD  USERS
>
	JRST NETL44
NETL43:	TYPE <  SITE		 LOAD  USERS  DISK AV.
>

NETL44:	HRRZ D,NSBUF+1		;PTR TO FIRST SITE BLOCK
	MOVEI E,6		;OFFSET FOR OLD FILES
	TLNE Z,F1		;NEW FORMAT?
	HRRZ E,NSBUF+10		;YES, USE IT
	ADDI E,0(D)		;D AND E DIFFER BY OFFSET

NETLO5:	MOVE 1,COJFN
	SKIPN NSBUF(D)		;END OF ALL SITES?
	 JRST NETLOX		;YES, DONE.
	MOVE 3,NSBUF+4(D)
	CAME 3,[-1]		;DO WE HAVE GOOD DATA FOR THIS ONE?
	 JRST NETLO9		;NO SKIP IT
	MOVEI 2," "
	BOUT
	MOVE 2,NSBUF+0(D)	;GET BACK SITE NUMBER
	MOVEI 3,^D10
	CVHST			;PRINT HOST NAME, OR ...
	 NOUT			;NUMBER IF THAT FAILS
	  JFCL

;BE APPROPRIATELY SUSPICIOUS OF THE FILE FORMAT
NETL55:	PRINT TAB
	RFPOS
	MOVEI 2,0(2)
	CAIG 2,^D10		;WAS FIRST TAB ENOUGH?
	PRINT TAB		;NO
	SKIPGE 2,NSBUF+2(E)	;THAT SITE'S 5 MIN. LOAD AV
	JRST NETL57		;MUST BE POSITIVE
	MOVE 3,2
	TLZN 3,(1B1)
	JRST NETL56		;LOAD LESS THAN 0.5 -- OK
	TLNN 3,370000		;EXPONENT TOO BIG?
	TLNN 3,400		;NOT NORMALIZED FLOATING NUMBER?
	 JRST NETL57		;YES.
NETL56:	MOVE 3,[1B4+1B6+2B23+2B29] ;FORCE, WITH ".", 2 BEFORE AND AFTER
	FLOUT
NETL57:	 TYPE <  ?  >
	TYPE <  >
	MOVE 3,[1B2+3B17+12]	;RIGHT JUST, 3 COLS, DECIMAL
	SKIPL 2,NSBUF+4(E)	;NUMBER OF USERS ON THAT SYSTEM
	NOUT
	 TYPE <  ?>


NETLO6:	TLNN Z,F1
	 JRST NETL69		;OLD FORMAT
	MOVE 2,NSBUF+6(E)	;DISK SPACE AVAILABLE
	MOVE 3,[1B2!11B17!^D10]	;RIGHT JUSTIFIED, 9 COLS, DECIMAL
	NOUT
	 CALL JERRC
NETL69:	PRINT EOL


NETLO9:	HLRZ 1,NSBUF+1		;SITE BLOCK LENGTH
	ADDI D,0(1)		;BUMP TO NEXT BLOCK
	ADDI E,0(1)
	JRST NETLO5		;AND DO IT

NETLOX:	SETOM 1
	MOVE 2,[400000,,<NSBUF/1000>]
	PMAP			;FLUSH PAGE
	PRINT EOL
	JRST RLJFNS		;GO RELEASE THE JFN

	END EXEC

