RGRW
RGRW — встроенное слово Каллисто. Чтение/запись файла регистров (словаря) в загруженном каталоге.
RGRW ( a c1 c2 −− c ) Чтение/запись (c2=1/0) десятичного/двоичного (c1=4/2) файла с именем из 20 литер по адресу a+1.
Чтение/запись файла регистров (словаря) в загруженном каталоге. Выдаёт код ошибки дисковой операции, 0 если успех.
a — адрес имени файла, состоящего из 20 литер, минус 1
с1 — тип файла (с1=4 для десятичных регистров, с1=2 для двоичных регистров)
с2 — флаг "чтение−запись" (с2=1 для чтения, с2=0 для записи)
с — статус операции (с=0 нет ошибок, с<>0 код ошибки дисковой операции)
Ввод слова RGRW[править]
В режиме ЛАТ последовательно нажмите четыре клавиши × БП × В↑
Реализация[править]
Нужный каталог выбирает слово КАТ.
В регистрах хранятся служебные переменные и структуры Каллисто (включая исполняемый шитый код), повреждение которых легко приводит среду в нестабильное состояние. Поэтому слово низкого уровня RGRW вряд ли потребуется обычному разработчику, для которого разработаны удобные слова SAVE" и LOAD"
При необходимости освобождения места в памяти программ заголовок RGRW можно исключить.
3996 ; Сохранить регистры в энергонезависимую память 3997 ; R1 = 4 для десятичных регистров (0..999), всего 1000 3998 ; = 2 для двоичных регистров (1000..5095), всего 4096 3999 SAVRGS: 4000 RM1 4 − FX=0 SAVBIN 4001 SAVDEC: 1 M5 998 ; R0, R1 не сохранять 4002 GOTO SMLM0 4003 SAVBIN: 999 M5 4096 4004 SMLM0: M0 4005 SML: 1 PPM 9047 4006 KRM5 PKM05 4007 FL0 SML 4008 RTN 4009 4010 ;#RGRW 4011 ; RGRW ( a c1 c2 −− c ) Считать/записать (c2=1/0) десятичный/двоичный (c1=4/2) файл с именем из 20 литер по адресу a+1. 4012 ; Служебное слово, которое вряд ли потребуется разработчику. 4013 ; Чтение/запись файла регистров (словаря) в загруженном каталоге. 4014 ; Выдаёт код ошибки дисковой операции, 0 если успех. 4015 ; a − адрес имени файла, состоящего из 20 литер, минус 1 4016 ; c1 − тип файла (c1=4 для десятичных регистров, c1=2 для двоичных регистров) 4017 ; c2 − флаг "чтение−запись" (c2=1 для чтения, c2=0 для записи) 4018 ; c − статус операции (c=0 нет ошибок, c<>0 код ошибки дисковой операции) 4019 LRERW: .DB 4 4020 .TEXT "RGRW" ; ( a t flg −− f ) 4021 .DW LWYKL 4022 RERW: .DW JRERW 4023 JRERW: PKRM03 MA ; RA := flg ( флаг R/W) 4024 RM3 1 + M8 1 + M7 1 + M3 4025 KRM7 1 EE 4 − M7 ; R7 := a−1 ( адрес 20−литерного имени файла − 1) 4026 KRM8 M1 ; R1 := t ( тип файла) 4027 Cx M8 9034 MB ; R8 := 0 ( номер строки в каталоге) ; RB := 9034 ( чтение по индексу 1) 4028 RERWN1: Cx PPM 9030 PPM 9031 ; Сброс индексных регистров 0 и 1 4029 RM8 PPM 9122 ; Считать строчку каталога. 4030 KRMB RM1 − FX=0 JZRERWNXT ; Нужный нам тип файла? 4031 KRMB KRMB ; Пропустить поле 2 ( двухбайтовое) 4032 RM7 M5 20 M0 ; R5 := R7 ( адрес имени − 1) ; R0 := 20 ( длина имени) 4033 RERWZ: KRMB KRM5 − 4034 JZRERWNXT: FX=0 RERWNXT 4035 FL0 RERWZ ; Совпадает имя в каталоге с нужным? 4036 RMA FX!=0 RERWR1 ; R/W ? 4037 RMC ; Нужно только при чтении дестичных регистров 4038 RM8 PPM 9128 PPM 9123 ; Считать найденный файл 4039 <−> MC ; Восстановить RC 4040 256 ME 4041 GOTO JRERWRET ; Выход 4042 RERWR1: PGSB SAVRGS 4043 RM8 PPM 9128 PPM 9126 ; Перезаписать найденный файл 4044 JRERWRET: PGOTO RERWRET ; Выход 4045 RERWNXT: RM8 1 + M8 64 − PX=0 RERWN1 ; Следующая строчка. Она 64−я? 4046 RMA FX!=0 RERWR2 ; R/W ? 4047 4 ; Выход с кодом ошибки 40 "файл не найден". 4048 JZERO: 0 KM3 KGOTO9 ; Обработчик FALSE 4049 RERWR2: PPM 9030 3 PPM 9031 ; RX==0 ( инициализация индексных регистров) 4050 RM7 M5 20 M0 4051 RERWS: KRM5 KMB FL0 RERWS ; Записать имя файла в буфер. 4052 PGSB SAVRGS 4053 RM1 PPM 9128 PPM 9125 ; Создать файл. 4054 RERWRET: PPRM 9129 FX!=0 RERW0 ; Выйти 4055 40 + ; Преобразовать код ошибки дисковой операции в код ошибки Каллисто 4056 RERW0: KM3 KGOTO9
Ссылки[править]
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |