Estex-DSS/DSS/API/Create.asm
2024-12-18 00:18:16 +10:00

121 lines
2.4 KiB
NASM

////////////////////////////////////////////////////////////////////////
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; A - File attribute
; OUTPUT: A - FM
////////////////////////////////////////////////////////////////////////
CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
PUSH HL
LD C,A
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
.old_EXE: LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
CP DSS_Error.sys.FILE_NOT_FOUND
JR Z,.DO
SCF
RET
.FILE_EXISTS_DEL:
CALL DELETE_REC_FAT
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET
;
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM
.NEW: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
LD C,A
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
.old_EXE_: LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.FILE_EXISTS
; CCF
; RET C
JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
;
;no_file_found
.DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
.TMP+1: LD A,0
; FAT_DIRECTORY_RECORD.ATTRIBUT
LD (HL),A
INC HL
LD BC,#0A00 ;!HARDCODE
; .RESERVED_NT .. .FIRST_CLUSTER_H
.loop1: LD (HL),C
INC HL
DJNZ .loop1
; .TIME .. .DATE
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
;
LD BC,#0600
;
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND
RET C
;CALL SAVEDIR
.PATH0+1: LD HL,0
XOR A
LD (OPEN_FN.TMP),A
JP OPEN_FN.FILE ;R008
;
.Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
AND FAT_ATTR.NoDIRnoVolID
LD (.TMP),A
LD (.PATH0),HL
CALL SetPath_GetName
RET C
; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER
RET C
;
JP MASK
;
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
.FILE_EXISTS: LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET
;