//////////////////////////////////////////////////////////////////////// ;Входные значения: ; C - #12 ; A - файловый манипулятор ;Выходные значения: ; A - код ошибки, если CF=1 //////////////////////////////////////////////////////////////////////// ; [ ] big dir передавать откуда и сколько байтов изменилось в кэш, чтоб не писать на диск лишнего ;CLOSE: CLOSE_FN: LD (.TMP),A CALL SET_FM RET C ; LD A,(TASK) CP (IY+_sFM.TASK_NUM) LD A,DSS_Error.sys.ACCESS_DENIED SCF RET NZ ; BIT 7,(IY+_sFM.ACCESS_MODE) JR Z,.NOTMODF ; файл изменён LD E,(IY+_sFM.DIR_CLUSTER_L) LD D,(IY+_sFM.DIR_CLUSTER_L+1) PUSH DE LD E,(IY+_sFM.DIR_CLUSTER_H) LD D,(IY+_sFM.DIR_CLUSTER_H+1) PUSH DE ; ; 15/11/2023 -bug with bad clusters LD A,(IY+_sFM.DRIVE) CALL OPENDSK JR C,.error ; XOR A CALL SET_FM ; fat32 POP DE LD (IY+_sFM.DIR_CLUSTER_H),E LD (IY+_sFM.DIR_CLUSTER_H+1),D LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),E LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),D ; POP DE LD (IY+_sFM.DIR_CLUSTER_L),E LD (IY+_sFM.DIR_CLUSTER_L+1),D ; 15/11/2023 -bug with bad clusters LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D ; LD L,(IY+_sFM.HANDLE) LD H,(IY+_sFM.HANDLE+1) ; CF=0 CALL LOADDIR.Custom ; [x] big dir ;!FIXIT check error .TMP+1: LD A,0 CALL SET_FM //////////////////////////////////////////////////////////////////////// ; ; ; SET_PAGE_X DIRPAGE ; EX AF,AF' ; LD HL,DIRPAGE.buffer ; LD DE,FAT_DIRECTORY_RECORD ; LD C,(IY+_sFM.HANDLE) ; LD B,(IY+_sFM.HANDLE+1) ; PUSH BC ; record index ; LD A,1 ; [x] big dir ; AND B ; LD B,A ; JR .next_add ; ; ; .loop_add: ADD HL,DE ; DEC BC ; LD A,B ; .next_add: OR C ; JR NZ,.loop_add ; ; ; LD D,YH ; LD E,YL ; EX DE,HL ; LD BC,FAT_DIRECTORY_RECORD ; LDIR ; EX AF,AF' ; OUT (SLOT3),A ; POP HL ; CALL SAVEDIR ; .NOTMODF: LD A,(.TMP) ; JP RES_FM ; ; ; .error: POP DE ; POP DE ; RET //////////////////////////////////////////////////////////////////////// ; //////////////////////////////////////////////////////////////////////// ; SET_PAGE_X DIRPAGE EX AF,AF' LD L,(IY+_sFM.OffsetInDirCache) LD H,(IY+_sFM.OffsetInDirCache+1) PUSH HL LD E,YL LD D,YH EX DE,HL LD BC,FAT_DIRECTORY_RECORD LDIR EX AF,AF' OUT (SLOT3),A POP HL CALL SAVEDIR .NOTMODF: LD A,(.TMP) JP RES_FM ; .error: POP DE POP DE RET