; [x] fat32 ;!TEST //////////////////////////////////////////////////////////////////////// ; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ? //////////////////////////////////////////////////////////////////////// DEL_FN: ;!TEST ;!TEST Current Dir ;[x] 15/10/23 PUSH HL CALL DIR_PATH_CHECK POP HL RET C ; CALL GETWORD ; тест на допуст. имя и настр. на диск RET C CALL MASK RET C ; ;!TEST optimization ;LD HL,MASKARE ;LD BC,11 ;LD A,"?" ;CPIR ;LD A,DSS_Error.sys.INVALID_NAME ;SCF CALL CHECK_NAME ; RET Z CALL LOADDIR CALL SEARCH.File RET C ; пометить запись как "удаленная" ;!TODO record index. возможно, что может сломаться, если больше страницы .DELETE: SET_PAGE_X DIRPAGE EX AF,AF' CALL DELETE_LFN_RECORDS ; [ ] удаление записи LFN LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; признак удаления файла ; fat32 LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; № первого кластера LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) LD A,E OR D EXX LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; № первого кластера LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) OR D OR E ; EX AF,AF' OUT (SLOT3),A EX AF,AF' JP Z,SAVEDIR ; сбросить кеш каталога на диск ; если размер файла не ноль .loop: EX DE,HL ; hl=номер кластера EXX EX DE,HL EXX CALL READ_FROM_FAT ; прочитать из кеша FAT-а номер след. кластера EXX PUSH DE ; номер след. кластера PUSH AF LD DE,#0000 ; номер кластера EXX PUSH DE LD DE,#0000 ; номер кластера CALL WRITE_TO_FAT.Custom ; записать в кеш FAT-а номер кластера POP DE EXX POP AF POP DE EXX JP NC,.loop CALL WRITE_FAT_TABLE JP SAVEDIR ; сбросить кеш каталога на диск ;