Estex-DSS/DSS/API/Find.asm
2024-10-27 00:56:31 +10:00

127 lines
2.6 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

////////////////////////////////////////////////////////////////////////
;‚室­ë¥ §­ ç¥­¨ï:
; 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 GETWORD
;CALL LOADDIR
RET C
CALL MASK
RET C
LD A,(.TMP)
CALL SEARCH.Custom
RET C
LD HL,MASKARE
.DTABUF+1: LD DE,0
LD BC,FAT_DIRECTORY_RECORD.ATTRIBUT ; ª®¯¨à㥬 .NAME ¨ .EXT
LDIR
.TMP+1: LD A,0
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 (.TMP),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
;