//////////////////////////////////////////////////////////////////////// ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; A - ATTRIB ; B - MODE ; B = #00 GET ATTRIB ; B = #01 SET ATTRIB ; OUTPUT: A - ATTRIB //////////////////////////////////////////////////////////////////////// ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 LD C,A PUSH HL PUSH BC CALL DIR_PATH_CHECK POP BC POP HL RET C LD A,C ; ; INC B DJNZ .B_1 ; B = 0 .READ: ;!TEST ;[x] 16/11/23 optimize get attribute ;XOR A ; CALL .OPENATR ;R002 RET C ;!TEST ;[x] 16/11/23 optimize get attribute LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT) ;LD B,(IY+_sFM.ATTRIBUT) ;PUSH BC ;CALL CLOSE ;POP BC ;RET C ;LD A,B ; RET ; .B_1: DJNZ .B_2 ; .WRITE_FN: AND FAT_ATTR.NoVolID ; [x] 2/12/23 фикс для volume ID .WRITE: PUSH AF XOR A ;!TEST ;[x] 16/11/23 optimize get attribute LD (OPEN_FN.TMP),A ; CALL .OPENATR ;R002 ;!TEST ;[x] 16/11/23 optimize get attribute 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 ;R002 ; выход: если CF = 0, то DE = record index ;!TEST 9/11/23 record index .OPENATR: ;!TEST ;[x] 16/11/23 optimize get attribute ;LD (OPEN.TMP),A ; раб. ячейка (здесь атрибут записи) ; CALL GETWORD ; тест на допуст. имя и настр. на диск RET C CALL MASK RET C LD A,FAT_ATTR.NoVolID ;!TEST ;[x] 16/11/23 optimize get attribute JP SEARCH.Custom ;CALL SEARCH.Custom ;RET C ; запись не найдена ;JP OPEN.FM ; на поиск своб. дескриптора ; ; ; [ ] ; !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