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/)
****

Reply via email to