mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
149 lines
3.6 KiB
NASM
149 lines
3.6 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
|
||
; Current Dir 15/10/23
|
||
CALL DIR_PATH_CHECK
|
||
POP HL
|
||
RET C
|
||
;
|
||
JR F_FIRST.begin
|
||
;
|
||
F_FIRST: CALL .INIT_VARS
|
||
.begin: CALL SetPath_GetName ;!FIXIT ¥ ¤ã¡«¨àã¥âáï «¨ ¯®á«¥ DIR_PATH_CHECK ¢ëè¥?
|
||
;CALL LOADDIR
|
||
RET C
|
||
CALL MASK
|
||
RET C
|
||
LD A,(.SEARCH_ATTRIBUT)
|
||
CALL SEARCH.Custom
|
||
RET C
|
||
; çâ®-â® è«®áì
|
||
PUSH DE ; record index ¬®¦¥â ¨ ¥ 㦮
|
||
LD HL,CORE_BUFFERS.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
|
||
; ¯à¨ ¯à릪¥ áî¤ á⥪¥ ¤®«¦¥ «¥¦ âì record index
|
||
.FIND_S: INC DE
|
||
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à ª â «®£ > #4000 bytes
|
||
;LD BC,FAT_DIRECTORY_RECORD
|
||
;ADD IX,BC
|
||
LD (F_NEXT.CURHND),IX
|
||
POP HL ; record index
|
||
;!FIXIT ¥â ¯à®¢¥àª¨ ¯¥à¥¯®«¥¨¥
|
||
; ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
|
||
;INC HL
|
||
LD (F_NEXT.RecordIndex),HL
|
||
;
|
||
LD HL,CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT
|
||
LD BC,CORE_BUFFERS.HANDBUF.SIZE - FAT_DIRECTORY_RECORD.RESERVED_NT
|
||
LDIR
|
||
LD A,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||
LD (DE),A
|
||
INC DE
|
||
LD HL,CORE_BUFFERS.HANDBUF
|
||
.FNDMODE+1: LD A,0
|
||
AND %0111'1111
|
||
JR NZ,.FIND_M2
|
||
LD BC,11 ;!HARDCODE
|
||
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
|
||
;CP 2
|
||
;CALL NC,GetName_LFN
|
||
;CALL C,GetName
|
||
;
|
||
CALL GetName
|
||
JR .exit
|
||
;
|
||
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A
|
||
LD (.DTABUF),DE
|
||
LD DE,0
|
||
LD (.FindCounter),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,CORE_BUFFERS.MASKARE
|
||
LD BC,11 ;!HARDCODE
|
||
LDIR
|
||
;
|
||
XOR A ; F_NEXT.NO_NEXT.YES
|
||
LD (F_NEXT.NO_NEXT),A
|
||
; ¯à®¢¥àª ०¨¬ ªãç¨ ä ©«®¢ ¨«¨ ¥ ¡®«ìè¥ 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
|
||
;
|
||
.NSEARCH: EX AF,AF'
|
||
SET_PAGE_X DIRPAGE
|
||
PUSH AF
|
||
EX AF,AF'
|
||
CPL
|
||
LD C,A
|
||
;!TEST 9/11/23 record index
|
||
EXX
|
||
.RecordIndex+1: LD DE,0 ; record index ¬®¦¥â ¨ ¥ 㦮
|
||
EXX
|
||
;
|
||
.CURHND+2: LD IX,0 ; ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨
|
||
LD DE,SEARCH.for_F_NEXT
|
||
PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE
|
||
JP SEARCH_RECORD_IN_DIR_CACHE.next_record
|
||
;
|
||
/*
|
||
‹î¡ë¥ ¨§¬¥¥¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ.
|
||
*/ |