доперепелить 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 JR F_FIRST.begin
; ;
F_FIRST: CALL .INIT_VARS F_FIRST: CALL .INIT_VARS
.begin: CALL SetPath_GetName .begin: CALL SetPath_GetName ;!FIXIT ­¥ ¤ã¡«¨àã¥âáï «¨ ¯®á«¥ DIR_PATH_CHECK ¢ëè¥?
;CALL LOADDIR ;CALL LOADDIR
RET C RET C
CALL MASK CALL MASK
@ -31,6 +31,7 @@ F_FIRST: CALL .INIT_VARS
LD A,(.SEARCH_ATTRIBUT) LD A,(.SEARCH_ATTRIBUT)
CALL SEARCH.Custom CALL SEARCH.Custom
RET C RET C
; çâ®-â® ­ è«®áì
PUSH DE ; record index ¬®¦¥â ¨ ­¥ ­ã¦­® PUSH DE ; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
LD HL,CORE_BUFFERS.MASKARE LD HL,CORE_BUFFERS.MASKARE
.DTABUF+1: LD DE,0 .DTABUF+1: LD DE,0
@ -45,8 +46,7 @@ F_FIRST: CALL .INIT_VARS
;LD BC,FAT_DIRECTORY_RECORD ;LD BC,FAT_DIRECTORY_RECORD
;ADD IX,BC ;ADD IX,BC
LD (F_NEXT.CURHND),IX LD (F_NEXT.CURHND),IX
; record index ¬®¦¥â ¨ ­¥ ­ã¦­® POP HL ; record index
POP HL
;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥ ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥
; ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢ ; ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
;INC HL ;INC HL
@ -66,6 +66,9 @@ F_FIRST: CALL .INIT_VARS
LDIR LDIR
.exit: LD A,F_NEXT.NO_NEXT.NO .exit: LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A LD (F_NEXT.NO_NEXT),A
.FindCounter+1: LD HL,0
INC HL
LD (.FindCounter),HL
XOR A XOR A
RET RET
.FIND_M2: ;!TODO LFN .FIND_M2: ;!TODO LFN
@ -78,6 +81,8 @@ F_FIRST: CALL .INIT_VARS
; ;
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A .INIT_VARS: LD (.SEARCH_ATTRIBUT),A
LD (.DTABUF),DE LD (.DTABUF),DE
LD DE,0
LD (.FindCounter),DE
LD A,B LD A,B
LD (.FNDMODE),A LD (.FNDMODE),A
RET RET
@ -102,12 +107,23 @@ F_NEXT:
; ;
XOR A ; F_NEXT.NO_NEXT.YES XOR A ; F_NEXT.NO_NEXT.YES
LD (F_NEXT.NO_NEXT),A 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 PUSH HL
CALL .NSEARCH CALL .NSEARCH
POP HL POP HL
RET C RET C
; ; çâ®-â® ­ è«®áì
PUSH DE PUSH DE
EX DE,HL EX DE,HL
JP F_FIRST.FIND_S JP F_FIRST.FIND_S
@ -124,10 +140,6 @@ F_NEXT:
EXX EXX
; ;
.CURHND+2: LD IX,0 ;  ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨ .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 JP SEARCH.next_record
; ;
/* /*

View File

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

View File

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

View File

@ -1 +1 @@
531 532