доперепелить FINDDIR

This commit is contained in:
Tolik 2026-01-10 22:54:34 +10:00
parent c8b0f457c7
commit 48b9504b37
4 changed files with 37 additions and 23 deletions

View File

@ -23,7 +23,7 @@ F_FIRST_FN: CALL F_FIRST.INIT_VARS
JR F_FIRST.begin
;
F_FIRST: CALL .INIT_VARS
.begin: CALL SetPath_GetName
.begin: CALL SetPath_GetName ;!FIXIT ­¥ ¤ã¡«¨àã¥âáï «¨ ¯®á«¥ DIR_PATH_CHECK ¢ëè¥?
;CALL LOADDIR
RET C
CALL MASK
@ -31,6 +31,7 @@ F_FIRST: CALL .INIT_VARS
LD A,(.SEARCH_ATTRIBUT)
CALL SEARCH.Custom
RET C
; çâ®-â® ­ è«®áì
PUSH DE ; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
LD HL,CORE_BUFFERS.MASKARE
.DTABUF+1: LD DE,0
@ -45,8 +46,7 @@ F_FIRST: CALL .INIT_VARS
;LD BC,FAT_DIRECTORY_RECORD
;ADD IX,BC
LD (F_NEXT.CURHND),IX
; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
POP HL
POP HL ; record index
;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥
; ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
;INC HL
@ -66,6 +66,9 @@ F_FIRST: CALL .INIT_VARS
LDIR
.exit: LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A
.FindCounter+1: LD HL,0
INC HL
LD (.FindCounter),HL
XOR A
RET
.FIND_M2: ;!TODO LFN
@ -78,6 +81,8 @@ F_FIRST: CALL .INIT_VARS
;
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A
LD (.DTABUF),DE
LD DE,0
LD (.FindCounter),DE
LD A,B
LD (.FNDMODE),A
RET
@ -102,12 +107,23 @@ F_NEXT:
;
XOR A ; F_NEXT.NO_NEXT.YES
LD (F_NEXT.NO_NEXT),A
LD A,(HL)
; ¯à®¢¥àª  ­  ०¨¬ ªãç¨ ä ©«®¢ ¨«¨ ­¥ ¡®«ìè¥ 512
LD A,(F_FIRST.FindCounter + 1) ; áâ à訩 ¡ ©â áçñâ稪 
CP 2
JR C,.nextSearch
;
LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
RLA
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
CCF
RET C
; ;
.nextSearch: LD A,(HL)
PUSH HL
CALL .NSEARCH
POP HL
RET C
;
; çâ®-â® ­ è«®áì
PUSH DE
EX DE,HL
JP F_FIRST.FIND_S
@ -124,10 +140,6 @@ F_NEXT:
EXX
;
.CURHND+2: LD IX,0 ;  ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨
;LD A,XH
;OR XL
;JP Z,SEARCH.error_too_many_files ; [ ] big dir
;JP SEARCH.loop
JP SEARCH.next_record
;
/*

View File

@ -2119,9 +2119,10 @@ DELETE_LFN_RECORDS:
;----------------------------------------------------------------------;
; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£ 
; ¢å®¤: a =  âਡãâ § ¯¨á¨
; ¢å®¤: a =  âਡãâ § ¯¨á¨ (.Custom)
; (CORE_BUFFERS.MASKARE) - ¬ áª  ¤«ï ¯®¨áª 
; ¢ë室: de = ¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; (HANDBUF) = file's direcory record
; (HANDBUF) = file's directory record
; CF - ª â «®£ ­¥ ­ ©¤¥­
SEARCH:
.Dir: ;LD A,FAT_ATTR.DIRECTORY
@ -2212,11 +2213,10 @@ SEARCH:
ADD IX,DE
JR NC,.loop
;
.error_too_many_files:
; [ ] big dir
LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
RLA
JR NC,.ErrorTooManyFiles
; LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
; RLA
; JR NC,.error_too_many_files
;
; CF=1
; !FIXIT root dir in LOADDIR
@ -2238,12 +2238,12 @@ SEARCH:
SCF
RET
;
.ErrorTooManyFiles:
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
SCF
RET
; .error_too_many_files:
; POP AF
; OUT (SLOT3),A
; LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
; SCF
; RET
;
;----------------------------------------------------------------------;
@ -2770,7 +2770,7 @@ LOAD_SAVE_DIR_PREPARE:
;----------------------------------------------------------------------;
ASSERT 0, "TODO! GET_ADDR_IN_DIR_CACHE"
; ASSERT 0, "TODO! GET_ADDR_IN_DIR_CACHE"
;!TODO
; .DIRSIZE ¯®¬¥è ¥â ¥á«¨ ¢ ªíè ¡ã¤¥â ¤à㣠ï áâà ­¨æ ?
; LOAD_SAVE_DIR_PREPARE ¢®§¬®¦­® ­¥ ­ã¦¥­, ­ã¦­® ⮫쪮 ãáâ ­®¢¨âì ¯à ¢¨«ì­®¥ ᬥ饭¨¥ ¢ FM

View File

@ -1,5 +1,6 @@
<EFBFBD>® ¯®«­ë¬ ¤¨à¥ªâ®à¨ï¬.
;[x] LOADDIR ¯®á«¥ READ ¢ë室¨âì á CF, ¥á«¨ ¯à®ç¨â ­® 0
;[ ] FINDDIR - ¯®ª  à ¡®â ¥â ⮫쪮 á ⥬, çâ® ¡ë«® § £à㦥­® ¢ ªíè ¨ ¬ «® çâ® ­ å®¤¨â, ¥á«¨ áâà ­¨æ ¡®«ìè¥ 1.
;[ ] <20>¥à¥¤¥« âì WRITE_DIR_HANDLE ¤«ï à ¡®âë á «î¡®© § ¯¨áìî ¢ ª â «®£¥ (ᥩç á ¨é¥â ¯¥à¢ãî ¯ãáâãî, ç⮡ § ¯¨á âì ¢ ­¥ñ)
;[ ] ‚ᥠ¨§¬¥­¥­¨ï ¢ § ¯¨áïå ª â «®£  ¤¥« âì ¢ ¡ãä¥à¥ CORE_BUFFERS.HANDBUF ¨ á®åà ­ïâì ç¥à¥§ WRITE_DIR_HANDLE
;[x] <20>¥à¥¬¥­­ ï DirBlock ¯®ª §ë¢ îé ï ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ ¢ ªíè.
@ -11,6 +12,7 @@
<EFBFBD>¥à¥«®¯ â¨âì
;[ ] FINDDIR
;[ ] LOAD_SAVE_DIR_PREPARE
;[ ] LOADDIR
;[ ] SAVEDIR

View File

@ -1 +1 @@
531
532