home *** CD-ROM | disk | FTP | other *** search
- 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