home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ZSYS
/
SIMTEL20
/
SYSLIB
/
SLIB1.LBR
/
SDIR09.Z80
< prev
next >
Wrap
Text File
|
2000-06-30
|
2KB
|
87 lines
;
; SYSLIB Module Name: SDIR09
; Author: Richard Conn
; Part of SYSLIB3 SDIR Series
; SYSLIB Version Number: 3.6
; Module Version Number: 1.5
public dirpack
MACLIB SDIRHDR.LIB
EXT SDMOVE
;*
;* DIRECTORY PACK UTILITY -- RESTRUCTURE THE DIRECTORY TO INCLUDE ONLY
;* THOSE ENTRIES MARKED BY DIRSEL
;*
;* ON INPUT, HL PTS TO DIRECTORY BUFFER AND BC=NUMBER OF FILES
;* ON EXIT, BC=NUMBER OF SELECTED FILES
;* REQUIRED SIDE EFFECT IS THAT FLAG EXTENT (SET BY DIR::) BE CORRECT
;* (IN MOST CASES, DEFAULT OF 0 IS OK, EXCEPT WHEN EXTENT SIZE >16K)
;*
DIRPACK:
PUSH HL ; SAVE REGS
PUSH DE
PUSH AF
PUSH HL ; SAVE HL
LD HL,0
LD (FCOUNT),HL ; INIT FILE COUNT
POP HL ; GET HL
LD (DIRBUF),HL ; SAVE PTR
PUSH BC ; SAVE COUNTER
DPLOOP:
POP BC ; GET COUNTER
LD A,B ; CHECK FOR DONE
OR C
JP Z,DPDONE
DEC BC ; COUNT DOWN
PUSH BC ; SAVE COUNTER
LD A,(HL) ; GET 1ST BYTE OF ENTRY
AND 80H ; SELECTED?
JP Z,DPNEXT
;
;* FOUND SELECTED ENTRY
;
LD A,(HL) ; CLEAR MSB OF SELECTED ENTRY
AND 7FH
LD (HL),A
PUSH HL ; SAVE PTR
LD HL,(FCOUNT) ; INCREMENT FILE COUNT
INC HL
LD (FCOUNT),HL
POP DE ; PT TO CURRENT ENTRY IN DE
LD HL,(DIRBUF) ; PT TO NEXT ENTRY POSITION
EX DE,HL ; HL PTS TO CURRENT, DE PTS TO NEXT ENTRY
LD B,ESIZE ; COPY ENTRY
CALL SDMOVE
EX DE,HL ; HL PTS TO NEXT ENTRY
LD (DIRBUF),HL ; SAVE IT
EX DE,HL ; HL PTS TO NEXT ENTRY TO CHECK
JP DPLOOP ; CONTINUE
;
;* SKIP TO NEXT ENTRY
;
DPNEXT:
LD BC,ESIZE ; SKIP ENTRY
ADD HL,BC
JP DPLOOP ; CONTINUE
;
;* COMPRESSION COMPLETE -- SET UP RETURNED VALUES
;
DPDONE:
LD HL,(FCOUNT) ; PUT FILE COUNT
LD B,H ; ... IN BC
LD C,L
POP AF ; RESTORE REGS
POP DE
POP HL
RET
;
; BUFFERS
;
FCOUNT:
DS 2 ; FILE COUNT
END