.CHARSET 1251 ; Файл primdos ; Запись, чтение и перезапись файла десятичных данных ; расположенного в головном каталоге STR1 .EQU 1000 FID .EQU 1080 ; номер строки каталога (вне области десятичных данных) CX 10 PP M 9025 ; очистить строку комментариев 1 PP M 9120 ; разрешить дисковые операции CX PP M 9128 ; разрешение PP M 9121 ; выбор диска A PP RM 9129 P X=0 FILEERR ; ошибка дисковой операции ; создать файл данных в головном каталоге ; создать и записать случайное имя в строку STR1 ; а также в поле имени УББ (со смещения 3) .NUM STR1 MB 3 PP M 9031 ; индекс 1 УББ 20 M0 ; размер поля имени 20 символов A1: 26 KRAN * 97 + ; В RX коды символов a-z KMB ; запись в STR1 PP M 9034 ; запись в УББ по индексу 1 с автоинкрементом RMB 1 + MB PFL0 A1 0 PP M 9030 ; обнулить индекс 0 УББ ; метка файла данных "1" 1 PP M 9047 ; разрешение записи в ЭСППЗУ 1 MA ; записать файл десятичных данных 4 PP M 9128 ; разрешение PP M 9125 ; запись файла PP RM 9129 P X=0 FILEERR ; ошибка дисковой операции ; найти номер строки в текущем каталоге 0 MA A2: 0 PP M 9030 ; индекс 0 УББ RMA PP M 9122 ; чтение очередной строки каталога в УББ 0 PP M 9031 PP RM 9033 4 - P X=0 A4 ; !=4 - это не файл десятичных данных 3 PP M 9031 ; начало имени файла в УББ .NUM STR1 MB ; начало имени файла в STR1 20 M0 ; длина имени A3: KRMB PP RM 9034 - P X=0 A4 ; перейти если имя не совпадает RMB 1 + MB PFL0 A3 P GOTO A5 A4: RMA 1 + MA 64 - P X=0 A2 ; цикл по строкам окончен, файл не обнаружен .NUM TEXT1 PP M 9026 P GOTO AE A5: ; файл обнаружен RMA PP M FID ; сохранить номер строки каталога в области двоичных данных ; изменить RA 1 PP M 9047 ; разрешение записи в ЭСППЗУ 2 MA PP RM FID PP M 9128 ; разрешение PP M 9123 ; чтение файла PP RM 9129 P X=0 FILEERR ; ошибка дисковой операции RMA 1 - ; проверить чтение P X!=0 A6 ; ошибка содержимого файла .NUM TEXT2 PP M 9026 P GOTO AE A6: ; изменить RA 1 PP M 9047 ; разрешение записи в ЭСППЗУ 3 MA PP RM FID PP M 9128 ; разрешение PP M 9126 ; перезапись файла PP RM 9129 P X=0 FILEERR ; ошибка дисковой операции ; изменить RA 1 PP M 9047 ; разрешение записи в ЭСППЗУ 4 MA PP RM FID PP M 9128 ; разрешение PP M 9123 ; чтение файла PP RM 9129 P X=0 FILEERR ; ошибка дисковой операции RMA 3 - ; проверить чтение P X!=0 A7 ; ошибка содержимого файла .NUM TEXT2 PP M 9026 P GOTO AE A7: .NUM TEXT0 PP M 9026 AE: CX PP M 9120 ; запретить дисковые операции R/S TEXT0: .TEXT "Ошибок нет\0" TEXT1: .TEXT "Файл не найден\0" TEXT2: .TEXT "Ошибка в файле\0" ;============================================== Обработка ошибки дисковой операции FILEERR: MB P X<0 FILEERR1 CX MB FILEERR1: 9 - F X>=0 FILEERR2 9 MB FILEERR2: 1000 ENT 5 PP M 9052 ; звук RMB .NUM TFERRT + K PRGM .NUM TFERR0 + PP M 9026 R/S .BASE TFERR0: .TEXT "Нет ошибок\0" TFERR1: .TEXT "Нет диска\0" TFERR2: .TEXT "Диск не форматирован\0" TFERR3: .TEXT "Нет места на диске\0" TFERR4: .TEXT "Нет места в каталоге\0" TFERR5: .TEXT "Ошибка имени\0" TFERR6: .TEXT "Операция невозможна\0" TFERR7: .TEXT "Объект не выбран\0" TFERR8: .TEXT "Нет разрешения\0" TFERR9: .TEXT "Неизвестно\0" TFERRT: .DBB TFERR0, TFERR1, TFERR2, TFERR3, TFERR4 .DBB TFERR5, TFERR6, TFERR7, TFERR8, TFERR9