//////////////////////////////////////////////////////////////////////// ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; A - ATTRIB ; B - MODE: ; 0 GET ATTRIB ; 1 SET ATTRIB ; OUTPUT: A - ATTRIB //////////////////////////////////////////////////////////////////////// ATTRIB: ; Current Dir ;[x] 15/10/23 LD C,A ; PUSH HL PUSH BC CALL DIR_PATH_CHECK POP BC POP HL RET C ; на случай чтения для обхода проверки CHECK_64kb_CLUSTER LD A,1 LD (OPEN_FN.TMP),A ; LD A,C ; ; INC B DJNZ .B_1 ; B = 0 .READ: CALL .OPENATR ;R002 RET C LD A,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT) RET ; .B_1: DJNZ .B_2 ; .WRITE_FN: AND FAT_ATTR.NoVolID ; [x] 2/12/23 фикс для volume ID .WRITE: PUSH AF XOR A LD (OPEN_FN.TMP),A CALL .OPENATR ;R002 ; DE = record index CALL NC,OPEN_FN.FM ; POP BC RET C SET 7,(IY+_sFM.ACCESS_MODE) ;RES 3,B ;CLEAR LABEL ATTR ;R003 LD (IY+_sFM.FS_REC.ATTRIBUT),B PUSH BC CALL CLOSE_FN .error: POP BC RET C LD A,B RET ; ; ; выход: если CF = 0, то DE = record index ;!TEST 9/11/23 record index .OPENATR: CALL SetPath_GetName ; тест на допуст. имя и настр. на диск RET C ; если это не чтение, то проверяем размер кластера LD A,(OPEN_FN.TMP) AND A CALL Z,CHECK_64kb_CLUSTER RET C ; CALL MASK RET C LD A,FAT_ATTR.NoVolID JP SEARCH.Custom ; ; [ ] ; !TODO для команды LABEL в Shell ; 1. проверить что в HL указана только метка в кавычках ; 2. если метка без недопустимых символов, то делаем её не ; только в BPB, но и на корневом разделе, иначе удаляем на корневом ; 3. открываем требуемый диск через .force, чтоб сбросить кэши .B_2: DJNZ .error_fn ; .error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION SCF RET