	TITLE DU - list disk usage by user
	.DECSAVE

p==17
Call=pushj p,
Ret=popj p,
Pcall=jumpa 1,
ifndef verbose,verbose==0

Start:	jfcl
	move	p, [-lpdl,,pdl-1]
	reset

	Movsi 1,(RC%AWL)
	Hrroi 2,[Asciz '*']
	RCUSR
	Movem 3,Usr
	Tlnn 1,(RC%NOM\RC%AMB\RC%NMD)
	 Tlnn 1,(RC%WLD)	;This is neccessary due to RCDIR bugs
	  Jrst	LOSS

Loop:	Setzm	Usum
	Hrroi	1,Ustr
	Move	2,Usr
	DIRST
	 Erjmp Next
ifn verbose,[
	Hrroi	1, Ustr
	PSOUT
	Call	TerPri
]

	Hrroi	1, [Asciz 'ps']
	Call	OnDisk
	Hrroi	1, [Asciz 'usr0']
	Call	OnDisk
	Hrroi	1, [Asciz 'usr1']
	Call	OnDisk
	Hrroi	1, [Asciz 'ap20']
	Call	OnDisk

Next:	Movsi 1,(RC%AWL+RC%STP)	;Step to the next directory
	Hrroi 2,[Asciz '*']
	Move 3,Usr
	RCUSR
	Movem 3,Usr
	Tlnn 1,(RC%NOM\RC%AMB\RC%NMD)
	 Tlnn 1,(RC%WLD)	;This is neccessary due to RCDIR bugs
	  Jrst Done

	Hrroi	1, ustr
	PSOUT
	Hrroi	1, [asciz ' Total:']
	PSOUT
	Call	.TTAB
	Move	2, Usum
	Call	PU
	Call	TerPri
	Call	TerPri
	Jrst	Loop

Done:	HALTF
	Jrst Start

TerPri:	Hrroi 1,[Asciz '
'] ? 	PSOUT
	Ret

; 1/	bp to disk name
; ustr/	user string
OnDisk:	Setzm	Sum

	Movem	1, dname
	Move	2, 1
	Hrroi	1, tmp
	Setz	3,
	SOUT
	Movei	2, ":
	Idpb	2, 1
	Movei	2, "<		;>
	Idpb	2, 1
	Hrroi	2, ustr
	SOUT			;<
	Movei	2, ">
	Idpb	2, 1
	Idpb	3, 1		;tie off
	Movsi	1, (rc%emo)
	Hrroi	2, tmp
	RCDIR
	 Erjmp	.popj
	jumpe	3, .popj
	movem	3, dno
	Call	DoUsage		;do main dir

; now do subdirs
	Move	2, dname
	Hrroi	1, tmp
	Setz	3,
	SOUT
	Movei	2, ":
	Idpb	2, 1
	Movei	2, "<		;>
	Idpb	2, 1
	Hrroi	2, ustr
	SOUT
	Movei	2, ".
	Idpb	2, 1
	Movei	2, "*
	Idpb	2, 1		;<
	Movei	2, ">
	Idpb	2, 1
	Idpb	3, 1		;tie off

	Movsi	1,(RC%AWL)	;allow wilds
	Hrroi	2, tmp
	RCDIR
	Movem	3, dno
	Tlnn	1,(RC%NOM\RC%AMB\RC%NMD) ;no match, ambig, no more
	 Tlnn	1,(RC%WLD)	;(contained wild cards)
	  Ret

Loop2:	Call	DoUsage
Next2:	Movsi 1,(RC%AWL+RC%STP)	;Step to the next directory
	Hrroi 2,tmp
	Move 3,dno
	RCDIR
	Movem	3,dno
	Tlnn	1,(RC%NOM\RC%AMB\RC%NMD)
	 Tlnn	1,(RC%WLD)	;This is neccessary due to RCDIR bugs
	  Trna
	   Jrst Loop2

Done2:
ifn verbose,[
	Move	1, dname
	PSOUT
	Hrroi	1, [Asciz ' total:']
	PSOUT
	Call	.TTAB
	Move	2, Sum
	Call	PU
	Call	Terpri
]
	Ret

; dno/	dir number
DoUsage:
	Setzm	Dstr
	Hrroi	1,Dstr
	Move	2,dno
	DIRST
	 Erjmp	.+1
	Move	1, dno
	GTDAL
	 Erjmp	Next2
	Addm	2, Sum
	Addm	2, Usum
ifn verbose,[
	Hrroi	1, Dstr
	PSOUT
	Call	.TTAB
	Call	PU
	Call	Terpri
]
	Ret

; print usage in pages (and blocks)
PU:	Call	.PDEC
	Call	.TTAB
	Movei	1, "(		;)
	PBOUT
	Imuli	2, 512.*5/512.	;(ie * 5 )
	Call	.PDEC		;(
	Movei	1, ")
	PBOUT
	Ret

.PDEC:	Movei	1, .PRIOU
	Movei	3, 10.
	NOUT
	 trn
	Ret

.TTAB:	Movei	1, ^I
	PBOUT
.popj:	Ret

Loss:	Jrst	4, .

Usr:	Block	1		;user number
ustr:	block	20		;USER for above
tmp:	block	30		;DISK:<USER*>
dno:	block	1		;curr dir number for above
Dstr:	block	30		;string for dno
Sum:	block	1		;total used for this user on this disk
Usum:	block	1		;total for this user on all disks
pdl:	block	<lpdl==20>	;push downe list
dname:	block	1		;bp to curr disk name

	END Start
the good always die young...
