Hi
I once made the program READDIR2. It is a piece of MC and a small basic prg.
An array is declared in BASIC and filled with spaces, the address of this
array is then passed to the MC, which fills the array.
It is extremely fast, but only works for floppy's without subdirs (SS and
DS, depending on nr of sides-byte in bootsector).
Unfortunately it is in Dutch, let me know if I have to translate it.
10 '
20 'READDIR2.BAS
30 'Dit programma leest de directory supersnel in een array-variabele.
40 'Het gebruikt READDIR2.BIN, dat volgt uit de source READDIR2.ASM.
50 'Geschreven door Patrick Kramer 25-10-91
60 'Iedereen mag deze routine gebruiken in zijn/haar programma's.
70 'De adressen: &hD590 : Hierin komt na de USR-aanroep het aantal files.
80 ' &hD591 : Hierin moet het VARPTR adres gePOKE't worden van
de
90 ' array-variabele (twee-byte adres).
100 'Als het resultaat van a=usr(0) is dat a <> 0 dan is er iets met de disk
110 'fout gegaan.
120 '
130 CLEAR1800,&HC6FF
140 BLOAD"Readdir2.bin":DEFUSR=&HD500
150 DEFINTA-Z:DEFSNGW
160 DIMST$(111)
170 FORX=0TO111:ST$(X)=SPACE$(11):NEXTX :'Vullen met spaties noodzakelijk
!!!!
180 A=&HD591:W=VARPTR(ST$(0)):GOSUB240
190 CLS:A=USR(0):IFA<>0THENPRINT"Disk error.":END
200 FORX=0TOPEEK(&HD590)-1:PRINTST$(X),:NEXTX
210 PRINT:PRINT"Druk een toets voor de files."
220 IFINKEY$=""THEN220ELSEGOTO 190
230 'Poke het twee-byte adres van W in A
240 IFW<0THENW=W+65536!
250 POKEA,W-INT(W/256)*256
260 POKEA+1,W/256
270 RETURN
; READDIR.WB2
;
; Dit programma is geschreven door Patrick Kramer 25-10-91
; Deze source is geschreven met WB-ASS2
;
; Dit programma leest de directory in een array-variabele
; die van te voren gedeclareerd is en waarvan het varptr-adres
; ingevuld is in de variabele varptr onderaan het programma.
; Zie verder bijbehorende file READDIR.BAS.
; Iedereen mag dit programma gebruiken in zijn/haar programma's
;
ORG &HD500 ;Programma vanaf &hD500
PHYDIO: EQU &H0144
XOR A ;Zet de variabelen op 0
LD (ATF),A
LD HL,(VARPTR)
LD (VAR),HL
READ: LD DE,0 ;Lees sector 0 in op adres &hC700
LD HL,&HC700 ;vanaf default drive (&hF247)
LD B,1
LD C,&HF8
XOR A
LD A,(&HF247)
PUSH AF
PUSH HL
CALL PHYDIO
POP HL
POP AF
JR C,ERROR ;Test op fouten
PUSH AF
CALL EZDZ ;Bepaal beginsector (5/7)
LD B,7 ;Laad 7 sectoren vanaf beginsector naar &hC700
LD A,(&HC715)
LD C,A
POP AF
CALL PHYDIO
JR C,ERROR
CNAME: LD HL,&HC700 ;Stel beginwaarden in
PUSH HL
LD HL,(VAR)
INC HL
LD (VAR),HL
LD E,(HL)
INC HL
LD D,(HL)
POP HL
LD BC,0
LOOP: LD A,(HL) ;Bekijk of een entry geldig is
CP 0 ;0 = geen file
JP Z,NEXTR
CP &HE5 ;&he5 = gewiste file
JP Z,NEXTR
PUSH BC ;Kopieer geldige naam naar variabele
LD BC,11
PUSH HL
LDIR
LD HL,(VAR) ;Verhoog de index van de array
INC HL
INC HL
INC HL
LD (VAR),HL
LD E,(HL)
INC HL
LD D,(HL)
POP HL
POP BC
LD A,(ATF) ;Verhoog het aantal ingelezen files met 1
INC A
LD (ATF),A
NEXTR: PUSH DE ;Verhoog pointer naar directory-adres
LD DE,&H20
ADD HL,DE
PUSH HL
LD H,B
LD L,C
ADD HL,DE
LD B,H
LD C,L
POP HL
POP DE
LD A,&H0E ;Kijk of de laatste file bereikt is
CP B
RET Z ;Ja ? Dan klaar.
JP LOOP
ERROR: LD A,255 ;Bij een error 255 teruggeven aan USR
LD (&HF7F8),A
RET
EZDZ: LD DE,5 ;Stel beginsector op 5
LD A,(&HC715)
AND 1 ;Test op enkelzijdigheid
RET Z ;Ja? Dan terug.
INC DE ;Nee? Dan 2 erbij optellen (dus sector 7)
INC DE
RET
ATF: DEFB 0 ;Aantal ingelezen files
VARPTR: DEFB 0,0 ;VARPTR-adres
VAR: DEFB 0,0 ;kopie hiervan
;Aantal ingelezen files
VARPTR: DEFB 0,0 ;
Greetz and sorry for this much text
Patrick
****
MSX Mailinglist. To unsubscribe, send an email to [EMAIL PROTECTED] and put
in the body (not subject) "unsubscribe msx [EMAIL PROTECTED]" (without the
quotes :-) Problems? contact [EMAIL PROTECTED] (www.stack.nl/~wiebe/mailinglist/)
****