//////////////////////////////////////////////////////////////////////// ; Функция #10. Переименование файла. ; Глобальные символы * и ? в именах файлов не допускаются. ; ; вход: HL - указатель на старое имя файла ; DE - указатель на новое имя файла ; выход: A - код ошибки, если CF=1 ; ; INPUT: HL - "old_name.ext",#00 without simbols * ? ; DE - "new_name.ext",#00 without simbols * ? //////////////////////////////////////////////////////////////////////// RENAME: ; Current Dir 15/10/23 PUSH HL PUSH DE CALL DIR_PATH_CHECK.forceCheck POP DE POP HL RET C ; ; !TODO воткнуть тут SetPath_GetName, чтоб можно было удалять по относительным путям? ; ; [x] 26/06/2024 {64 kb cluster} PUSH HL CALL CHECK_64kb_CLUSTER POP HL RET C ; PUSH DE CALL MASK.name POP DE RET C ; CALL CHECK_NAME RET Z ; PUSH DE ; !FIXIT дублирует действие и директория уже загружена? CALL LOADDIR ; [ ] big dir ; прочитать список каталога ; LD A,FAT_ATTR.NoSYSnoVolID CALL SEARCH.Custom ; поиск записи "old_name.ext" в списке диска ; DE - record index POP HL RET C ; LD (.recordAddr),IX ; на случай переключения страницы кэша после SEARCH.Custom "new_name.ext" LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) LD (.DirBlock),A LD (.recordIndex),DE ; CALL MASK.name RET C ; CALL CHECK_NAME RET Z ; ;PUSH IX LD A,FAT_ATTR.NoSYSnoVolID CALL SEARCH.Custom ; поиск записи "new_name.ext" в списке диска ;POP IX LD A,DSS_Error.sys.FILE_EXISTS CCF RET C ; SET_PAGE_X DIRPAGE EX AF,AF' ; на случай переключения страницы кэша после SEARCH.Custom "new_name.ext" LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) .DirBlock+1: CP 0 .recordIndex+1: LD DE,0 SCF ; не пересчитывать размер директории CALL NZ,LOADDIR.next ; LD HL,CORE_BUFFERS.MASKARE .recordAddr+1: LD DE,0 LD BC,11 LDIR ; ;CALL DELETE_LFN_RECORDS ; [ ] удаление записи LFN ; EX AF,AF' OUT (SLOT3),A ; [ ] big dir передавать откуда и сколько байтов изменилось в кэш, чтоб не писать на диск лишнего JP SAVEDIR ; ; ;