mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
128 lines
2.7 KiB
NASM
128 lines
2.7 KiB
NASM
////////////////////////////////////////////////////////////////////////
|
||
;‚å®¤ë¥ § 票ï:
|
||
; C - #19
|
||
; HL - 㪠§ ⥫ì ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
|
||
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨ ç¥ 256 ¡ ©â
|
||
; A - âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
|
||
; B = #00 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠11 ¡ ©â "FilenameExt"
|
||
; B = #01 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||
; ¯®¨áª ¡¥§ ®£à ¨ç¥¨¥ à §¬¥à ª â «®£ :
|
||
; !TODO B = #02 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS + LFN
|
||
; !TODO B = #80 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠11 ¡ ©â "FilenameExt"
|
||
; !TODO B = #81 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||
;‚ëå®¤ë¥ § 票ï:
|
||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
////////////////////////////////////////////////////////////////////////
|
||
F_FIRST_FN: CALL F_FIRST.INIT_VARS
|
||
PUSH HL
|
||
;!TEST Current Dir ;[x] 15/10/23
|
||
; [ ] 10/06/24
|
||
IF OLD_DSS_FOR_OLD_EXE
|
||
LD A,(EXE_VERSION)
|
||
OR A
|
||
JR Z,.old_EXE
|
||
ENDIF
|
||
;
|
||
CALL DIR_PATH_CHECK
|
||
RET C
|
||
;
|
||
.old_EXE: POP HL
|
||
JR F_FIRST.begin
|
||
;
|
||
F_FIRST: CALL .INIT_VARS
|
||
.begin: CALL SetPath_GetName
|
||
;CALL LOADDIR
|
||
RET C
|
||
CALL MASK
|
||
RET C
|
||
LD A,(.SEARCH_ATTRIBUT)
|
||
CALL SEARCH.Custom
|
||
RET C
|
||
LD HL,MASKARE
|
||
.DTABUF+1: LD DE,0
|
||
LD BC,FAT_DIRECTORY_RECORD.ATTRIBUT ; ª®¯¨à㥬 .NAME ¨ .EXT
|
||
LDIR
|
||
.SEARCH_ATTRIBUT+1:
|
||
LD A,0 ; DSS_FCB_MAIN.SEARCH_ATTRIBUT
|
||
LD (DE),A
|
||
.FIND_S: INC DE
|
||
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à ª â «®£ > #4000 bytes
|
||
LD BC,FAT_DIRECTORY_RECORD
|
||
ADD IX,BC
|
||
LD (F_NEXT.CURHND),IX
|
||
LD HL,HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT
|
||
LD BC,HANDBUF.SIZE - FAT_DIRECTORY_RECORD.RESERVED_NT
|
||
LDIR
|
||
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||
LD (DE),A
|
||
INC DE
|
||
LD HL,HANDBUF
|
||
.FNDMODE+1: LD A,0
|
||
OR A
|
||
JR NZ,.FIND_M2
|
||
LD BC,11 ;!HARDCODE
|
||
LDIR
|
||
.exit: LD A,F_NEXT.NO_NEXT.NO
|
||
LD (F_NEXT.NO_NEXT),A
|
||
XOR A
|
||
RET
|
||
.FIND_M2: ;!TODO LFN
|
||
;CP 2
|
||
;CALL NC,GetName_LFN
|
||
;CALL C,GetName
|
||
;
|
||
CALL GetName
|
||
JR .exit
|
||
;
|
||
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A
|
||
LD (.DTABUF),DE
|
||
LD A,B
|
||
LD (.FNDMODE),A
|
||
RET
|
||
////////////////////////////////////////////////////////////////////////
|
||
;
|
||
;
|
||
////////////////////////////////////////////////////////////////////////
|
||
F_NEXT:
|
||
.NO_NEXT.YES EQU 0
|
||
.NO_NEXT.NO EQU #FF
|
||
.NO_NEXT+1:
|
||
LD A,0
|
||
OR A
|
||
LD A,DSS_Error.sys.INVALID_ACCESS
|
||
SCF
|
||
RET Z
|
||
LD (F_FIRST.DTABUF),DE
|
||
EX DE,HL
|
||
LD DE,MASKARE
|
||
LD BC,11 ;!HARDCODE
|
||
LDIR
|
||
|
||
XOR A ; F_NEXT.NO_NEXT.YES
|
||
LD (F_NEXT.NO_NEXT),A
|
||
|
||
LD A,(HL)
|
||
PUSH HL
|
||
CALL .NSEARCH
|
||
POP DE
|
||
RET C
|
||
JP F_FIRST.FIND_S
|
||
.NSEARCH:
|
||
EX AF,AF'
|
||
SET_PAGE_X DIRPAGE
|
||
;PUSH AF
|
||
EX AF,AF'
|
||
CPL
|
||
LD C,A
|
||
;!TEST 9/11/23 record index
|
||
; EXX
|
||
; LD DE,0
|
||
; EXX
|
||
;
|
||
.CURHND+2:
|
||
LD IX,0
|
||
LD A,XH
|
||
OR XL
|
||
JP Z,SEARCH.error_too_many_files
|
||
JP SEARCH.loop
|
||
; |