//////////////////////////////////////////////////////////////////////// ; Функция #11. Открытие файла. ; ; вход: HL - указатель на имя файла ; A - режим доступа: ; A=0 чтение/запись ; A=1 чтение ; A=2 запись ; ;!TODO A=3 запись без лишних сохранений кэша FAT ; ;!TODO A=4 записать кэш FAT ; выход: CF=0, A - дескриптор файла. ; CF=1, A - код ошибки. //////////////////////////////////////////////////////////////////////// OPEN_FN:;!TEST Current Dir ;[x] 15/10/23 LD (.TMP),A PUSH HL CALL DIR_PATH_CHECK.forceCheck POP HL RET C ;JR .start ;!FIXIT сделать как в mkdir или rmdir? ;R008 ; .start: CALL GETWORD RET C CALL MASK RET C .FILE: CALL SEARCH.File ; enter point from EXEC, CREATE RET C ;!TEST 9/11/23 record index PUSH DE ; сохраняем указатель на запись в каталоге FS (получен из SEARCH) ;R002 ; .FM: CALL GET_FM ; enter point from ATTRIB RET C LD A,C EX AF,AF' ;!TEST 9/11/23 record index указатель на запись в каталоге FS POP DE ; EXX LD (IY+_sFM.HANDLE),E LD (IY+_sFM.HANDLE+1),D ; EXX ; LD D,YH LD E,YL LD HL,HANDBUF LD BC,HANDBUF.SIZE LDIR .TMP+1: LD A,0 LD (IY+_sFM.ACCESS_MODE),A LD A,(TASK) LD (IY+_sFM.TASK_NUM),A XOR A LD (IY+_sFM.KnownCluster_L),A LD (IY+_sFM.KnownCluster_L+1),A LD (IY+_sFM.KnownOffset_L),A LD (IY+_sFM.KnownOffset_L+1),A LD (IY+_sFM.OptimizedClusters),A ; [x] fat32 LD (IY+_sFM.KnownCluster_H),A LD (IY+_sFM.KnownCluster_H+1),A LD (IY+_sFM.KnownOffset_H),A LD (IY+_sFM.KnownOffset_H+1),A ; LD (IY+_sFM.F_POSITION),A LD (IY+_sFM.F_POSITION+1),A LD (IY+_sFM.F_POSITION+2),A LD (IY+_sFM.F_POSITION+3),A LD A,(FatBuffer.DRIVE) LD (IY+_sFM.DRIVE),A ; [ ] fat32 LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L LD E,(HL) INC HL LD D,(HL) ; [ ] fat32 LD (IY+_sFM.DIR_CLUSTER),E LD (IY+_sFM.DIR_CLUSTER+1),D EX AF,AF' AND A RET ;