Výukový materiál od Lanexe -
načtení obsahu adresářeKód:
; LnxSpectrum ASM editor (www.ilnx.cz) 23.12.2021
org 32768
include "esxdos_def.asm"
Start
ld a,64 ;Drive (písmeno 64 (hd0), 65 (hd1), "*", "$")
ld ix,TestPath ;Path
call ReadDir ;Načíst položky
di ;Stop :)
halt
TestPath
defb "/DEMOS/",0 ;Budeme si listovat složku Demos
;== EsxDos ReadDir =====================================================================
ReadDir
ld b,0 ;Možnost zapnout FA_USE_HEADER (b6), povoluje +3DOS
rst 8 ;hlavičku (v DE), my ale nepoužíváme, takže 0.
defb F_OPENDIR
ret c ;Chyba? Exit BEZ Close, ani se neotevřelo.
;Kód chyby je případně v reg A.
ld (.DirHandle),a ;DirHandle Save
.DirHandle equ $+1
.NextItem
ld a,0 ;DirHandle Load
ld ix,.buffer ;Načteme položku do bufferu
rst 8
defb F_READDIR
jr c,.ReadDirError ;chyba? Close a Ret
and a ;je to záznam nebo je už konec?
jr z,.ReadDirExit ;Už žádná položka >>
ld hl,.buffer ;Záznam
bit 4,(hl) ;Folder?
jr nz,.NextItem ;Složky nechceme, přeskakujeme
;V Bufferu je tady načtena jedna položka. S daty si naložte jak chcete :)
;<byte> attributes (like MSDOS) (b4 = Folder)
;<asciiz> file/dirname (+null)
;<dword> date
;<dword> filesize
jr .NextItem ;A šup na další položku
.ReadDirError
push af ;Uložíme kód chyby i s Carry
call .ReadDirExit ;Zavřeme kanál...
pop af ;a vrátíme kód chyby i s Carry.
ret ;Exit
.ReadDirExit
ld a,(.DirHandle) ;DirHandle Load
rst 8 ;Zavřít
defb F_CLOSE
ret
.buffer defs 22,0