	TITLE	COSCAN	- Diskette Contents List - Scan	Directory
	SUBTTL	Version	1.0 - June 1983
	PAGE	81,132
;
CODE	SEGMENT	PARA PUBLIC 'CODE'
	ASSUME	CS:CODE,DS:CODE
;
	EXTRN	PNTR:WORD,SRCE:BYTE
;
NORM	DB	0,'???????????'		;Dummy FCB for "find/next"
	DB	24 DUP (?)
;
	PUBLIC	SCAN
SCAN	PROC	NEAR
	MOV	DI,OFFSET PNTR
	XOR	AX,AX
	MOV	CX,120
	REP	STOSW			;Clear pointer table
	MOV	BX,OFFSET PNTR		;BX points to start of pointer list
	MOV	DI,OFFSET SRCE		;DI points to start of entry stack
	XOR	CX,CX
	MOV	DX,OFFSET NORM
	MOV	AH,11H
	INT	21H			;Get first search entry
	JMP	SHORT INNER
LOOP:	MOV	DX,OFFSET NORM
	MOV	AH,12H
	INT	21H			;Get next entry
INNER:	OR	AL,AL
	JNZ	DONE
	CALL	SAVE			;Stack entry
	INC	CX			;Count entry
	JMP	LOOP
DONE:	RET				;Returns count in CX
SCAN	ENDP
;
SAVE	PROC	NEAR
	PUSH	CX
	MOV	WORD PTR [BX],DI	;Save pointer to start of entry
	ADD	BX,2			;  and step pointer table reg
	MOV	SI,81H			;Point to DTA -	file name
	MOV	CX,8
SVLP:	MOV	AL,BYTE	PTR [SI]
	CMP	AL,' '
	JZ	NMDNE			;End of	name
	MOV	BYTE PTR [DI],AL
	INC	SI
	INC	DI
	LOOP	SVLP
NMDNE:	MOV	SI,89H			;Point to DTA type field
	CMP	BYTE PTR [SI],' '
	JZ	ALLDNE			;No file type
	MOV	BYTE PTR [DI],'.'
	INC	DI
	MOV	CX,3
	REP	MOVSB			;Move type field to stack
ALLDNE:	MOV	BYTE PTR [DI],0		;Mark end of string
	INC	DI
	MOV	SI,9DH			;Point to size of file
	MOV	CX,4
	REP	MOVSB			;  and save in stack
	POP	CX
	RET
SAVE	ENDP
;
CODE	ENDS
;
	END
