//////////////////////////////////////////////////////////////////////// ;Входные значения: ; C - #12 ; A - файловый манипулятор ;Выходные значения: ; A - код ошибки, если CF=1 //////////////////////////////////////////////////////////////////////// ;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) CALL LOADDIR.Custom ; [ ] big dir ; [ ] big dir ;!TODO отмотать кэш до нужного record index? ; .TMP+1: LD A,0 CALL SET_FM ; SET_PAGE_X DIRPAGE EX AF,AF' ; [ ] big dir ;!TEST 9/11/23 record index LD HL,DIRPAGE.buffer LD DE,FAT_DIRECTORY_RECORD LD C,(IY+_sFM.HANDLE) LD B,(IY+_sFM.HANDLE+1) JR .CLOSE2 ; .CLOSE1: ADD HL,DE DEC BC .CLOSE2: LD A,B OR C JR NZ,.CLOSE1 ;LD L,(IY+_sFM.HANDLE) ;LD H,(IY+_sFM.HANDLE+1) ;;;;;;;;; LD D,YH LD E,YL EX DE,HL LD BC,FAT_DIRECTORY_RECORD LDIR EX AF,AF' OUT (SLOT3),A ; [ ] big dir передавать откуда и сколько байтов изменилось в кэш, чтоб не писать на диск лишнего CALL SAVEDIR .NOTMODF: LD A,(.TMP) JP RES_FM ; .error: POP DE POP DE RET ;