Google
 

Trailing-Edge - PDP-10 Archives - bb-x130a-sb - whosum.mac
There are 4 other files named whosum.mac in the archive. Click here to see a list.
	TITLE	WHOSUM - Summary routines for WHO

	SEARCH	WHOMAC

	$SETUP	(WHOSUM)

Comment |

This module provides the entry points for summary collection and
printout. The entry points are WHOSTA to collect summary statistics
and WHOSUM to print summary statistics.

|

	ENTRY	WHOSTA	;Entry for summary collection
	ENTRY	WHOSUM	;Entry for summary statistics output

DEFINE	ZZ(DEF),<
	IRP	DEF,<
		DEFINE	XX(MOD,ABR,MAP,TXT,ERR),<EXP ABR''DEF>
		DEF'XXX: MODES
	>;END IRP
>;END DEFINE ZZ

	ZZ	<STA,SUM>
;               TABLE OF CONTENTS FOR WHOSUM
;
;
;                        SECTION                                   PAGE
;    1. Summary statistics routines
;         1.1   WHOSTA - Dispatch to mode statistics routines.....   3
;         1.2   JOBSTA - JOB mode statistics......................   4
;         1.3   LINSTA - LINE mode statistics.....................   5
;         1.4   NODSTA - NODE mode statistics.....................   6
;         1.5   USRSTA - USER mode statistics.....................   7
;    2. Summary print routines
;         2.1   WHOSUM - Dispatch to mode summary routines........   8
;         2.2   JOBSUM - JOB mode print routines..................  11
;         2.3   LINSUM - LINE mode print routines.................  12
;         2.4   NODSUM - NODE mode print routines.................  13
;         2.5   USRSUM - USER node print routines.................  14
;    3. Storage...................................................  15
	SUBTTL	Summary statistics routines -- WHOSTA - Dispatch to mode statistics routines

WHOSTA:	AOS	NMATCH			;COUNT TOTAL MATCHES
	SKIPGE	T1,S.SUMMARY##		;SEE IF /SUMMARY
	 POPJ	P,			;NO--SAVE SOME CPU
	CAIN	T1,PD.SUM##		;JUST /SUMMARY?
	 PJRST	@STAXXX(M)		;YES--DISPATCH TO MODE SPECIFIC
	PUSHJ	P,.SAVE1##		;SAVE P1
	MOVEI	P1,(T1)			;SAVE SUMMARY INDEX
	XCT	SUMLOD(P1)		;LOAD THE KEY
	MOVE	T3,SUMROU(P1)		;GET ROUNDING FACTOR
	CAIG	T3,1			;DONT BOTHER WITH TRIVAL CASE
	 JRST	WHOST1			;AS THAT MESSES UP SIXBIT WORDS
	ADDI	T3,1			;ROUND ROUNDING FACTOR
	LSH	T3,-1			;HALF IT
	ADD	T1,T3			;ROUND NUMBER
	IDIV	T1,SUMROU(P1)		;SCALE DOWN
	IMUL	T1,SUMROU(P1)		;SCALE UP
WHOST1:	ADDI	T1,1			;ALLOW 0 (TURN INTO 1)
	PUSHJ	P,.HASHA##		;ADD IN TABLE
	 JFCL				;ALREADY THERE
	AOS	1(T1)			;COUNT THEM BY KEY
	POPJ	P,			;AND RETURN
	SUBTTL	Summary statistics routines -- JOBSTA - JOB mode statistics

JOBSTA:	PUSHJ	P,JB$PPG##		;GET PROJECT
	HRRZ	T2,OPRPPN##		;GET OPR
	CAIE	T1,(T2)			;OPR?
	  AOS	NUSERS			;NO--COUNT USERS
	PUSHJ	P,JB$STS##		;GET JOB STATUS
	TXNE	T1,JS.LOG		;LOGGED IN?
	  AOS	NLOGIN			;YES--COUNT
	TXNN	T1,JS.SWP		;NOT SWAPPED?
	 AOSA	NNSW			;YES--COUNT NOT SWAPED
	  AOS	NSW			;ELSE COUNT SWAPPED
	PUSHJ	P,JB$TLN##		;GET TERMINAL
	CAIGE	T1,0			;SEE IF DETACHED
	  AOS	NDET			;YES--COUNT
	PUSHJ	P,JB$BJB##		;GET BATCH
	CAIE	T1,0			;IS IT?
	  AOS	NBATCH			;YES--COUNT
	PUSHJ	P,JB$WSC##		;GET STATES CODE
	LDB	T1,[POINT 12,T1,11]	;FIRST TWO CHARS
	CAIE	T1,'^C'			;^C?
	 CAIN	T1,'TI'			;TI?
	  AOS	NTI			;YES--COUNT
	CAIN	T1,'TO'			;TO?
	  AOS	NTO			;YES--COUNT
	PUSHJ	P,JB$STA##		;GET STATE BITS
	TRNE	T1,STATSLEEP##		;SLEEPING?
	 AOS	NSL			;YES--COUNT
	TRNE	T1,STATLOCK##		;LOCKED?
	 AOS	NLK			;YES--COUNT
	TRNN	T1,STATACTIVE##		;ACTIVE?
	 POPJ	P,			;NO--RETURN
	AOS	NACT			;YES--COUNTT
	TRNE	T1,STATRUN##		;RUNNING?
	 AOS	NRN			;YES--COUNT
	TRNE	T1,STATIOWAIT##		;I/O WAIT?
	 AOS	NIO			;YES--COUNT
	TRNE	T1,STATEVENTWAIT##	;EVENT WAIT?
	 AOS	NEW			;YES--COUNT
	TRNE	T1,STATRWAIT##		;RESOUSE WAIT?
	 AOS	NRW			;YES--COUNT
	POPJ	P,			;AND RETURN
	SUBTTL	Summary statistics routines -- LINSTA - LINE mode statistics

LINSTA:	PUSHJ	P,LB$APC##		;DATA SET?
	CAILE	T1,1
	 AOS	NDIAL			;COUNT
	PUSHJ	P,LB$RMT##		;REMOTE?
	CAIN	T1,0
	  AOS	NLOCAL			;COUNT
	PUSHJ	P,LB$DSC##		;CARRIER?
	CAIE	T1,0
	  AOS	NCARRIER		;YES--COUNT
	PUSHJ	P,LB$JOB##		;JOB?
	CAIE	T1,0
	  AOS	NUSE			;YES--COUNT
	PUSHJ	P,LB$SLV##		;SLAVED?
	CAIE	T1,0
	  AOS	NSLAVE
	POPJ	P,			;AND RETURN
	SUBTTL	Summary statistics routines -- NODSTA - NODE mode statistics


; This routine will count up the number of nodes with devices and
; the total number of devices.  It is stored in NODCNT with the LH
; of each word being the number of nodes having a given device and
; the RH containing the total number of that device in the entire
; network.
;
NODSTA:	PUSHJ	P,.SAVE1##		;SAVE P1
	MOVE	P1,[-NODLEN,,NODTAB]	;AOBJN POINTER TO STORAGE,,SUBR

NODS.1:	HRRZ	T1,(P1)			;GET A SUBROUTINE
	PUSHJ	P,(T1)			;GET DEVICE COUNT
	TRNN	T1,777777		;ANY OF THIS DEVICE?
	JRST	NODS.2			;NO
	HRLI	T1,1			;+1 FOR THIS NODE
	HLRZ	T2,(P1)			;GET STORAGE ADDRESS
	ADDM	T1,(T2)			;ACCUMUATE

NODS.2:	AOBJN	P1,NODS.1		;LOOP
	POPJ	P,			;ALL DONE

DEFINE	XX(NAM),<XWD	N'NAM,NB$'NAM##>

NODTAB:	OBJECTS
NODLEN==.-NODTAB
	SUBTTL	Summary statistics routines -- USRSTA - USER mode statistics

USRSTA:	POPJ	P,			;NONE FOR NOW
	SUBTTL	Summary print routines -- WHOSUM - Dispatch to mode summary routines

WHOSUM:	SKIPGE	T1,S.SUMMARY##		;SEE IF /SUMMARY
	 POPJ	P,			;NO--RETURN
	SKIPLE	S.PRINT##		;ALSO /PRINT?
	 PUSHJ	P,.TCRLF##		;YES--PRETTY UP WITH EXTRA CRLF
	PUSHJ	P,.SAVE1##		;YES--SAVE P1
	MOVEI	P1,(T1)			;COPY KEYWORD INDEX
	CAIN	P1,PD.SUM##		;GENERAL DEFAULT?
	 PJRST	@SUMXXX(M)		;YES--DISPATCH TO MODE SPECIFIC
	MOVEI	T1,CHRDIR##		;NO--COUNT AND OUTPUT CHARS
	PUSHJ	P,.TYOCH##		;TELL SCAN
	PUSH	P,T1			;AND SAVE OLD
	MOVEI	L,0			;CLEAR CHAR COUNTER
	MOVE	T1,SUMTXT(P1)		;GET TITLE
	PUSHJ	P,.TSTRG##		;TYPE
	SUBI	L,2			;GIVE AN EXTRA SPACE
	PUSHJ	P,PADIT			;GO PAD IT
	MOVE	T1,TXTXXX##(M)
	PUSHJ	P,.TSTRG##
	MOVEI	T1,"s"
	PUSHJ	P,.TCHAR##
	PUSHJ	P,.TCRLF##
	MOVEI	L,0			;CLEAR CHAR COUNTER
	MOVE	T1,SUMTXT(P1)		;GET TITLE
	PUSHJ	P,.TDSTR		;TYPE
	SUBI	L,2			;GIVE AN EXTRA SPACE
	PUSHJ	P,PADIT			;GO PAD IT
	MOVE	T1,TXTXXX##(M)
	PUSHJ	P,.TDSTR
	PUSHJ	P,.TDASH##
	PUSHJ	P,.TCRLF##
	PUSHJ	P,.HSRTI##		;INIT AND SORT
	MOVE	P2,T1			;COPY AOBJN WORD
WHOSM2:	MOVEI	L,0			;CLEAR CHAR COUNTER
	MOVE	T1,(P2)			;GET THE KEYWORDD
	SUBI	T1,1			;ACCOUNT FOR AOS
	MOVEI	T3,^D6			;FIELDWIDTH
	XCT	SUMPRT(P1)		;PRINT IT
	PUSHJ	P,PADIT			;GO PAD IT
	MOVE	T1,1(P2)		;GET ADDR OF COUNT
	MOVE	T1,1(T1)		;GET COUNT OF JOBS
	MOVEI	T3,^D5			;FIELDWIDTH
	PUSHJ	P,.TDECJ##		;TYPE
	PUSHJ	P,.TCRLF##		;CRLF
	AOBJN	P2,.+1			;LOOP FOR ALL
	AOBJN	P2,WHOSM2		;..
	PUSHJ	P,.TCRLF##		;CRLF
	MOVEI	L,0			;CLEAR COUNTER
	MOVEI	T1,[ASCIZ/Total/]	;GET TEXT
	PUSHJ	P,.TSTRG##		;TYPE
	PUSHJ	P,PADIT			;PAD
	MOVE	T1,NMATCH		;GET TOTAL THINGS
	MOVEI	T3,^D5			;FIELDWIDTH
	PUSHJ	P,.TDECJ##		;TYPE
	PUSHJ	P,.TCRLF##		;AND CRLF
	POP	P,.TOUTZ##		;RESTORE SCANS TYPER
	PJRST	.HSRTE##		;FINISH SORT AND RETURN
PADIT:	MOVE	T1,SUMWID(P1)		;GET WIDTH
	SUBI	T1,(L)			;MINUS WHAT WE DID
	PJRST	.TSPAN##		;PAD AND RETURN

.TDSTR:	HRLI	T1,(POINT 7,)		;FORM BYTE POINTER
	PUSH	P,T1			;SAVE
DSTR.1:	ILDB	T1,(P)			;GET A CHAR
	JUMPE	T1,.PPOPJ##		;RETURN IF NULL
	CAIE	T1," "			;TURN ALL BUT SPACES
	 MOVEI	T1,"-"			;INTO DASHS
	PUSHJ	P,.TCHAR##		;TYPE
	JRST	DSTR.1			;AND LOOP
DEFINE START(X),<>
DEFINE LEN(X),<>

DEFINE X(KEY,TXT,LOD,PRT,WID,RND<1>),<EXP [ASCIZ |TXT|]>

SUMTXT:	SUMMARY

DEFINE X(KEY,TXT,LOD,PRT,WID,RND<1>),<
	GLOB	LOD
	PUSHJ	P,LOD
>

SUMLOD::SUMMARY

DEFINE X(KEY,TXT,LOD,PRT,WID,RND<1>),<
	GLOB	PRT
	PUSHJ	P,PRT
>

SUMPRT:	SUMMARY

DEFINE X(KEY,TXT,LOD,PRT,WID,RND<1>),<DEC RND>

SUMROU:	SUMMARY

DEFINE X(KEY,TXT,LOD,PRT,WID,RND<1>),<DEC WID>

SUMWID:	SUMMARY

CCORE:	PUSHJ	P,JB$PPL##
	PUSH	P,T1
	PUSHJ	P,JB$PPH##
	POP	P,T2
	ADDI	T1,(T2)
	POPJ	P,

VCORE:	PUSHJ	P,JB$PVL##
	PUSH	P,T1
	PUSHJ	P,JB$PVH##
	POP	P,T2
	ADDI	T1,1(T2)		;PLUS UPMP
	POPJ	P,

YESNO::	CAIE	T1,0
	 SKIPA	T1,[[ASCIZ/Yes/]]
	  MOVEI	T1,[ASCIZ/No/]
	PJRST	.TSTRG##

ONOFF::	CAIE	T1,0
	 SKIPA	T1,[[ASCIZ/On/]]
	  MOVEI	T1,[ASCIZ/Off/]
	PJRST	.TSTRG##

ATTYES::CAIE	T1,0
	 SKIPA	T1,[[ASCIZ/Ignore/]]
	  MOVEI	T1,[ASCIZ/Ask/]
	PJRST	.TSTRG##

TAPC:	MOVE	T1,[ [ASCIZ/Unknown/]
		     [ASCIZ/Hardwired/]
		     [ASCIZ/Data set/]
		     [ASCIZ/TSN/]
		     [ASCIZ/Gandalf/]
		     [ASCIZ/Auto dialer/]
		     [ASCIZ/Micom/]
		     [ASCIZ/NRTSER/]
		     [ASCIZ/Unknown/]
		     [ASCIZ/Unknown/] ](T1)
	PJRST	.TSTRG##

IFN FTLGNQ,<
TLGNQ::	JUMPG	T1,.TDECJ##
	JUMPL	T1,[MOVEI T1,[ASCIZ/Permission/]
		    PJRST .TSTRG##]
	MOVEI	T1,[ASCIZ/    No/]
	PJRST	.TSTRG##
> ;END IFN FTLGNQ
	SUBTTL	Summary print routines -- JOBSUM - JOB mode print routines

JOBSUM:	MOVEI	T1,[ASCIZ/LOGMAX /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,LOGMAX##
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/: /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NMATCH
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ assigned, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NLOGIN
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ logged in, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NUSERS
	MOVEI	T2,[ASCIZ/user/]
	PUSHJ	P,.TPLRS##
	MOVEI	T1,[ASCIZ/, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NDET
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ detached, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NBATCH
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ batched
/]
	PUSHJ	P,.TSTRG##
	MOVEI	T1,3
	PUSHJ	P,.TSPAN##
	MOVE	T1,NTI
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ typing in, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NTO
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ typing out, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NSL
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ sleeping, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NSW
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ swapped, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NNSW
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ in core, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NLK
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ locked
/]
	PUSHJ	P,.TSTRG##
	MOVEI	T1,3
	PUSHJ	P,.TSPAN##
	MOVE	T1,NACT
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ active: /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NRN
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ running, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NIO
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ" in I/O wait, "]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NEW
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ in event wait, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NRW
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ in resource wait/]
	PUSHJ	P,.TSTRG##
	PJRST	.TCRLF##
	SUBTTL	Summary print routines -- LINSUM - LINE mode print routines

LINSUM:	MOVE	T1,MAXLIN##		;GET MAXLIN
	ADDI	T1,1			;ACCOUNT FOR SOS
	MOVEI	T2,[ASCIZ/line/]
	PUSHJ	P,.TPLRS##
	MOVEI	T1,[ASCIZ/: /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NMATCH
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ connected, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NLOCAL
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ local, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NDIAL
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ dialup, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NCARRIER
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ powered up,
    /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NUSE
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ in use, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,NSLAVE
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ slaved/]
	PUSHJ	P,.TSTRG##

IFN FTLGNQ,<
	TLNN	F,(FL.LGNQ)
	PJRST	.TCRLF##
	MOVEI	T1,[ASCIZ/, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,LGQCNT##
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ waiting to LOGIN, /]
	PUSHJ	P,.TSTRG##
	MOVE	T1,LGQPTL##
	PUSHJ	P,.TDECW##
	MOVEI	T1,[ASCIZ/ given permission/]
	PUSHJ	P,.TSTRG##
> ;END IFN FTLGNQ

	PJRST	.TCRLF##
	SUBTTL	Summary print routines -- NODSUM - NODE mode print routines

NODSUM:	PUSHJ	P,.SAVE2##		;SAVE P1 AND P2
	MOVE	T1,NMATCH		;GET NUMBER OF NODES
	MOVEI	T2,[ASCIZ/node/]	;AND ASSOCIATED TEXT
	PUSHJ	P,.TPLRS##		;TYPE IT
	MOVEI	T1,[ASCIZ/: /]		;ADD A COLON TO
	PUSHJ	P,.TSTRG##		;SEPARATE FROM SUMMARY
	MOVN	P1,OBJ.MX##		;GET -LENGTH OG ANF-10 OBJECT TABLE
	HRLZS	P1			;MAKE AN AOBJN POINTER
	JRST	NODSU2			;DON'T TYPE A CRLF THE FIRST TIME

NODSU1:	PUSHJ	P,.TCRLF##		;NEW LINE
	MOVEI	T1,3			;OUTPUT
	PUSHJ	P,.TSPAN##		; SPACES
	SKIPA	P2,[EXP 6]		;LIST 6 DEVICES PER LINE NOW

NODSU2:	MOVEI	P2,5			;LIST 5 DEVICES PER LINE
	TRZ	F,FR.COMMA		;CLEAR COMMA FLAG

NODSU3:	SKIPN	NODCNT(P1)		;ANY OF THIS TYPE OF DEVICE?
	JRST	NODSU4			;NOPE
	MOVEI	T1,[ASCIZ |, |]		;INCASE THIS ISN'T THE FIRST TIME
	TROE	F,FR.COMMA		;BEEN HERE BEFORE?
	PUSHJ	P,.TSTRG##		;YES
	HLRZ	T1,NODCNT(P1)		;GET JUST THE COUNT OF NODES
	PUSHJ	P,.TDECW##		;TYPE COUNT
	MOVEI	T1,[ASCIZ | with |]	;TYPE
	PUSHJ	P,.TSTRG##		; SEPARATOR
	HRRZ	T1,OBJTAB##		;GET POINTER TO ANF-10 OBJECT TABLE
	ADDI	T1,(P1)			;INDEX INTO IT
	HRLZ	T1,(T1)			;GET A DEVICE NAME
	PUSHJ	P,.TSIXW##		;TYPE IT
	MOVEI	T1,"s"			;INCASE PLURAL
	HLRZ	T2,NODCNT(P1)		;GET COUNT
	CAIE	T2,1			;SINGULAR?
	PUSHJ	P,.TCHAR##		;NO
	AOBJP	P1,.TCRLF##		;TYPE A CRLF IF DONE
	SOJG	P2,NODSU3		;COUNT DEVICES PER LINE
	JRST	NODSU1			;NEED A CRLF

NODSU4:	AOBJP	P1,.TCRLF##		;TYPE A CRLF IF DONE
	JRST	NODSU3			;TRY ANOTHER DEVICE
	SUBTTL	Summary print routines -- USRSUM - USER node print routines

USRSUM:	MOVE	T1,NMATCH
	MOVEI	T2,[ASCIZ/user/]
	PUSHJ	P,.TPLRS##
	POPJ	P,
	SUBTTL	Storage

	$LOW

ZERC0::!

;Common summary counters

NMATCH::BLOCK	1
NFOUND::BLOCK	1

;JOB mode summary counters

NLOGIN:	BLOCK	1
NUSERS:	BLOCK	1
NDET:	BLOCK	1
NBATCH:	BLOCK	1
NTI:	BLOCK	1
NTO:	BLOCK	1
NSL:	BLOCK	1
NRN:	BLOCK	1
NNSW:	BLOCK	1
NSW:	BLOCK	1
NLK:	BLOCK	1
NACT:	BLOCK	1
NEW:	BLOCK	1
NRW:	BLOCK	1
NIO:	BLOCK	1

;Line mode summary counters

NDIAL:	BLOCK	1
NLOCAL:	BLOCK	1
NCARRI:	BLOCK	1
NUSE:	BLOCK	1
NSLAVE:	BLOCK	1

;Node mode summary counters

DEFINE	XX(NAM),<N'NAM:	BLOCK	1>
NODCNT:	OBJECTS

ZERC1==:.-1

	END