	.TITLE	GETDIR
	.MCALL	.PURGE	.LOOKU	.READW
	.MCALL	.PRINT	.EXIT
	.DSABL	GBL
	.GLOBL	AREA
	.GLOBL	MAXFIL	BUFF
	.GLOBL	TOTAL	LHOLE	USED	HOLES	PTRS	DIR	DEV

.PERM	=	2000
.ENDBLK	=	4000

D.NEXT	=	 2
D.EXTR	=	 6
D.STRT	=	10

$SIZE	=	10

GETDIR::
	CLR	@R5
	CLR	HOLES(R5)
 	CLR	LHOLE(R5)
	CLR	USED(R5)
	CLR	TOTAL(R5)

	.PURGE	#0
	.LOOKU	#AREA,#0,DEV(R5)
	BCS	ERROR
	MOV	DIR(R5),R3
	MOV	PTRS(R5),R4

	MOV	#6,R1
READ:	MOV	#BUFF,R2
	.READW	#AREA,#0,R2,#1000,R1
	BCS	ERROR
	TST	@R2
	BEQ	ERROR
	BIT	#^C37,@R2
	BNE	ERROR
EXTR	=	. + 4
	MOV	D.EXTR(R2),#0
	INC	EXTR
	ASL	EXTR
CURBLK	=	. + 4
	MOV	D.STRT(R2),#0
	ADD	#12,R2
REPEAT:	CMP	R2,#<BUFF+2000>
	BHIS	ERROR
	BIT	#.ENDBLK,@R2
	BEQ	1$
	MOV	<BUFF+D.NEXT>,R0
	BEQ	DCAT
	MOV	R0,R1
	ASL	R1
	ADD	#4,R1
	BR	READ

1$:	TST	$SIZE(R2)
	BMI	ERROR
	BIT	#.PERM,@R2
	BNE	2$
	INC	HOLES(R5)
	MOV	$SIZE(R2),R0
	CMP	R0,LHOLE(R5)
	BLOS	4$
	MOV	R0,LHOLE(R5)
4$:	ADD	R0,CURBLK
	ADD	#$SIZE+2+2,R2
	ADD	EXTR,R2
	BR	REPEAT

2$:	MOV	R3,(R4)+
	MOV	#4,R0
3$:	MOV	(R2)+,(R3)+
	SOB	R0,3$

	MOV	@R2,(R3)+
	MOV	CURBLK,(R3)+

	ADD	@R2,USED(R5)
	ADD	(R2)+,CURBLK
	ADD	EXTR,R2

	MOV	(R2)+,(R3)+

	INC	@R5
	CMP	@R5,#MAXFIL
	BNE	REPEAT

DCAT:	MOV	BUFF,R0
	ASL	R0
	ADD	#6,R0
	SUB	R0,CURBLK
	MOV	CURBLK,TOTAL(R5)
	CLC
	RETURN

ERROR:
	CLR	@R5
	CLR	HOLES(R5)
 	CLR	LHOLE(R5)
	CLR	USED(R5)
	CLR	TOTAL(R5)

	SEC
	RETURN

	.END
                                                                                                         