LORW

Материал из ПМК вики
Перейти к: навигация, поиск

LORW — встроенное слово Каллисто. Чтение/запись блока из файла в загруженном каталоге.

LORW           ( a c −− )                           Чтение/запись (c=1/0) блока из файла с именем из 4 литер по адресу a.

Чтение/запись блока из файла в загруженном каталоге. Если файла нет, он создаётся.

a − адрес имени файла, состоящего из 4 символов

c=0 запись блока: имя 0 LORW

c=1 чтение блока: имя 1 LORW

Ввод слова LORW[править]

В режиме ЛАТ последовательно нажмите четыре белые клавиши     5   ×   В↑ 

Реализация[править]

Нужный каталог выбирает слово КАТ.

Слово LORW реализует низкоуровневый доступ к файлам текста на внутреннем диске МК-161 и позволяет воплотить различные нестандартные сценарии такого доступа. Прикладному программисту рекомендуются более удобные стандартные и проверенные временем слова BLOCK BUFFER UPDATE и т.п.

4058 ;#LORW
4059 ; LORW             ( a c −− )                           Считать/записать (c=1/0) блок из файла с именем из 4 литер по адресу a.
4060 ; Прочесть/записать блока из файла в загруженном каталоге.
4061 ; Если файла нет, создать его.
4062 ; a − адрес имени файла, состоящего из 4 литер
4063 ; c − флаг "чтение−запись" (c=1 для чтения, c=0 для записи)
4064 LLORW:          .DB     4
4065                 .TEXT   "LORW"                  ; ( a flg −− )
4066                 .DW     LRERW
4067 LORW:           .DW     JLORW
4068 JLORW:          PKRM03 MA                       ; RA := flg  ( флаг R/W)
4069                 RM3 1 + M7  1 + M3
4070                 KRM7 10001 − M7                 ; R7 := a−1  ( адрес четырёхлитерного имени файла − 1)
4071                 Cx M8  9034 MB                  ; R8 := 0    ( номер строки в каталоге) ; RB := 9034  ( чтение по индексу 1)
4072 LORWN1:         Cx  PPM 9030  PPM 9031          ; Сбросить индексные регистры 0 и 1
4073                 RM8 PPM 9122                    ; Считать строчку каталога
4074                 KRMB 5 −  FX=0 LORWNXT          ; Это файл с текстом?
4075                 KRMB KRMB                       ; Пропустить поле 2  ( двухбайтовое)
4076                 RM7 M5  4 M0                    ; R5 := R7  ( адрес имени − 1)  ; R0 := 4  ( длина имени)
4077 LORWZ:          KRMB KRM5 −  FX=0 LORWNXT       ; Литеры равны?
4078                 FL0 LORWZ                       ; Это Bxxx ? ( сравнить 4 литеры имени)
4079                 RMA  FX!=0 LORWR1               ; R/W ?
4080                 RM8  PPM 9128  PPM 9123         ; Считать найденный файл
4081                 KGOTO9                          ; NEXT
4082 LORWR1:                                         ;−−− Файл найден, записать в него.
4083                 RM8  PPM 9128  PPM 9126         ; Перезаписать найденный файл
4084                 KGOTO9                          ; NEXT
4085 LORWNXT:        RM8 1 + M8  64 −  PX=0 LORWN1   ;−−− Перейти к следующей строчке каталога. Закончились?
4086                 RMA FX!=0 LORWR2                ; R/W ?
4087                 5095 M5  3072 M0  32            ; R5 := 5095  ( начало текста − 1)      ; R0 := 3072  ( длина текста)
4088 LORWE:          KM5 FL0 LORWE                   ; Заполнить текст пробелами
4089                 KGOTO9                          ; Всё, "считан" ещё не существующий блок. Сюрприз: он весь состоит из пробелов!
4090 LORWR2:                                         ;−−− Файл не найден, надо создать и записать текст в него.
4091                 PPM 9030  3 PPM 9031            ; Инициализировать индексные регистры 0 и 1
4092                 RM7 M5  4 M0                    ; R5 := R7  ( адрес имени − 1)  ; R0 := 4  ( длина имени)
4093 LORWS:          KRM5 KMB  FL0 LORWS             ; Перенести имя в буфер
4094                 16 M0  32                       ; R0 := 16  ( кол−во пробелов)  ; RX := 32 ( код пробела)
4095 LORWS1:         KMB  FL0 LORWS1                 ; Строка "Bxxx" ( 4 литеры имени + 16 литер пробелов)
4096                 5  PPM 9128  PPM 9125           ; Создать файл ( записать текст)
4097                 KGOTO9                          ; NEXT

Ссылки[править]


  Nopictures-icon.png У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Stub-icon-48px.png Это заготовка статьи. Вы можете помочь проекту, дополнив её.