Estex-DSS/DSS/API/RmDir.asm
2026-01-04 08:02:59 +10:00

118 lines
2.5 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.

////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ª â «®£ 
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
RMDIR: ; Current Dir 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CORE_BUFFERS.CurrentDirectory
CALL CHDIR
CALL DIR_PATH_CHANGE.Current
POP AF
RET
;
.START: CALL SetPath_GetName
RET C
; [x] 26/06/2024 {64 kb cluster}
CALL CHECK_64kb_CLUSTER
RET C
;
CALL MASK
RET C
;
CALL CHECK_NAME
RET Z
;
CALL LOADDIR ; [ ] big dir
CALL SEARCH.Dir
RET C
; fat32 ; [ ] CDFS
LD HL,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
EXX
LD HL,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX ;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
;
;!TODO <20>à®æ¥¤ãà  ¯®«­®£® ¢ëç¨â뢠­¨ï ª â «®£  (¢á¥ ª« áâ¥àë). Œ®¦­® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
.read_dir_big_loop:
PUSH HL
EXX
PUSH HL
EXX
CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
LD B,A
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
.read_dir_loop: ;PUSH AF
PUSH BC
PUSH HL
PUSH IX
CALL READ_SECTOR
; !FIXIT ­¥â ¯à®¢¥àª¨ ­  ®è¨¡ªã
;
;!HARDCODE sector size. 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à 
LD B,16
LD HL,CORE_BUFFERS.SECTOR_BUFFER
.check_dir_loop:;
LD A,(HL)
OR A
JP Z,.dir_empty
CP "."
JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record
LD DE,FAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE
LD A,(HL)
SBC HL,DE
AND FAT_ATTR.VOLUME_ID
SCF
JP Z,.error ;DIR NOT EMPTY
.next_record: LD DE,FAT_DIRECTORY_RECORD
ADD HL,DE
DJNZ .check_dir_loop
;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.no_inc_hl
INC HL
.no_inc_hl: POP BC
DJNZ .read_dir_loop
; fat32
EXX
POP HL ; ­®¬¥à ª« áâ¥à 
EXX
POP HL ; ­®¬¥à ª« áâ¥à 
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
JR NC,.read_dir_big_loop ; ­¥ ª®­¥æ 楯®çª¨
;
.delete: POP IX
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
;
.dir_empty: ; CF = 0
.error: ; CF = 1
POP HL
POP HL
POP HL
POP HL
POP HL
JR NC,.delete
POP HL
LD A,DSS_Error.sys.DIR_NOT_EMPTY
RET
;