ПРИЛОЖЕНИЕ 11. Вектор для строкового редактора
/ edstr(#7F) WIND.SYS /
подается в IX.
сме-
щение имя длина комментарии
-23 KDEV 1 Логический номер драйвера клавиатуры (ДК)
-22 KCSR 1 управляющий регистр для ДК (KCSR)
-21 MCSR 1 ............. (MCSR) (см. ПРИЛОЖЕНИЕ 2)
-20 XS 1 Х-координата начала редактируемой области
экрана (РОЭ) в знакоместах
-19 YS 1 то же по оси Y.(левый верхний угол (ЛВУ)
прямоугольной РОЭ относ-но ЛВУ экрана)
-18 LN 1 длина РОЭ в знакоместах
-17 НТ 1 высота РОЭ
-16 SCSR 1 регистр состояния строкового редактора :
Биты 0/1:
7 - mod - признак модифицированной строки (1)
6 - s_e - smbgt/edstr
1 - c_i - change/insert
0 - t_d - text/document - отрабатывать(1)
или нет(0) логические границы
-15 DBUF 2 адрес ASCII-буфера строки
-13 ХС 1 текущая Х-координата курсора в буфере
-12 ХМАХ 1 максимальная длина строки-2
-11 LM 1 левая логичесая граница
-10 RM 1 правая логическая граница
-9 Х0 1 число пропускаемых символов
-8 SZ 1 ширина поля требования скроллинга
-7 CODE 1 код, возвращаемый редактором
-6 LNST 1 длина строки с <ENTER>
-5 СОМ 1 команда, к-рую должен выполнить
редактор при входе
-4 TYPE 2 адрес подпрограммы отображения текущего
состояния (если 0Г то не вызывается)
KDEV: может принимать 2 значения: (0/1). При входе
edstr переключается на указанный, на выходе восстанавли-
вает текущий. При загрузки iS-DOS устанавливает 0-ой.
Программа edstr(#7Fj является внутренней точкой входа
рестарта smbgt(#6E) (см.ПРИЛОЖЕНИЕ 14).
Предполагалось его использование в Базах Данных прямо
в файловых панелях, для чего их вектора совместили
(см. ПРИЛОЖЕНИЕ 18).
(Коды, с которыми edstr возвращается см. ПРИЛОЖЕНИЕ 13).
ПРИЛОЖЕНИЕ 12
Некоторые коды клавиш
формируемые ttyin.key
Код клавиша Функция
4 CS/3 Ins/Ovr
5 CS/4 Ноше
6 CS/2 BIG/smal
7 CS/1 Pyc/Lat
8 CS/5 Left
9 CS/8 Right
A CS/6 Down
В CS/7 Up
С CS/0 Delete
D ENTER
E CS/SS Macro
F CS/9 End
10 SS/A PgDn
11 SS/ENTER Prefix
12 SS/SPACE Prefix
13 SS/W Erase
14 SS/E Insert
15 SS/Q PgUp
16 CS/SPACE
17 CS/ENTER Tabulator
ПРИЛОЖЕНИЕ 13. Коды , формируемые edstr(#7F)
/ WIND.sys /
Xmax = 32 - попытка передвинуть курсор (ППК)
за правую физическую границу (ФГ) ХМАХ
Xmin = 33 - ППК за левую ФГ (0)
Pdel = 34 - попытка удаления за левой ФГ
Rmrg = 35 - ППК за правую логическую границу (ЛГ) RM
Lmrg = 36 - ППК за левую ЛГ (LM)
Ldel = 37 - попытка удаления за левой ЛГ
Rscr = 38 - требование правого скроллинга
Lscr = 39 - требование левого скроллинга
Sdel = 40 - попытка удаления за окном
Pins = 41 - попытка выдвинуть текст за правую ФГ
Lins = 42 - попытка выдвинуть текст за правую ЛГ
Elns = 43 - длина строки превышает ХМАХ+2
ПРИЛОЖЕНИЕ 14. Вектор 3-го уровня "Оконная технология"
/ g scr(#72) WIND.SYS /
смещ имя длина комментарии
ение
-2 2 адрес таблицы ф-ций пользователя для
panel(#6А) (см.ПРИЛОЖЕНИЕ 15.)
0 PAPER 1 атрибуты экрана
1 B0RD 1 атрибуты бордюра
2 9 Не используются
параметры для smbgt(#6Е):
11 SMDRV 1 Логический номер драйвера клавиатуры(ДК)
12 SMKCS * 1 управляющий регистр для ДК (KCSR)
13 SMMCS * 1 MCSR (см. ПРИЛОЖЕНИЕ 2.)
14 SMXS * 1 левая верхняя координаты редактируемой
15 SMYS * 1 строки на экране в знакоместах
16 SMLN * 1 длина редактируемой области экрана
17 SMHT * 1 высота редактируемой области экрана
18 SMCSR 1 регистр состояния строкового редактора.
Биты 0/1:
* 6 - s_e - smbgt/edstr - режим работы (0)
1 - c_i - change/insert
19 SMDBF * 2 адрес строки
21 SMXC * 1 тек Х-коор курсора в тексте
22 SMXMX * 1 максимальная длина строки-2 (LN*HT-1)
23 SMLM * 1 левая лог граница (0)
24 SMRM 1 правая лог граница
25 SMX0 * 1 число пропускаемых символов (0)
26 SMSZ 1 ширина поля требования скроллинга
27 SMC0D 1 код, возвращаемый редактором
28 SMLNS 1 длина строки с кодом 13
29 SMC0M 1 команда, к-рую должен выполнить
редактор при входе
30 SMTYP 2 адрес подпрограммы отображения тек.
состояния (если 0, то не вызывается)
Параметры для строкового редактора smbgt полностью
дублируют вектор для edstr(#7F), в чем Вы можете
убедиться, ознакомившись с ПРИЛОЖЕНИЯМИ 11 и 18.
Значения всех границ могут изменяться в пределах от 0
до 253
* Все параметры отмеченные звездочками smbgt
инициализирует сам
ПРИЛОЖЕНИЕ 15. ПОДПРОГРАММЫ ФУНКЦИИ panel(#6А)
- РАБОТА С ПАНЕЛЬЮ / WIND.SYS /
Рестарт имеет 21 точку входа, причем первые 12 функций
необходимы для его поддержки (он сам обращается к этим
функциям), а остальные задают режим работы. Адреса
ф-ций 0..11 сведены в таблицу, адрес которой лежит в
векторе WIND.SYS со смещением -2 (см. ПРИЛОЖЕНИЕ 14).
Т.о. пользователь может подменить эти 12 ф-ций на
свои, что и делают некоторые Базы Данных. Этим же
рестартом пользуется оболочка (уровень SHELL.SYS),
|хисуя на экране свои панели с файлами. Рестарт вынесен
в уровень WIND.SYS, что предполагает возможность его
использования даже при отсутствии уровня SHELL.SYS.
Нужная функция выбирается с помощью регистра А.
0. fprev - по входному номеру записи в регистре
DE найти предыдущую запись.
Выход : Флаг с -ошибка ввода;
z -успешно (DE'= номер)
nz -запись отсутствует.
(DE'= прежний номер записи)
1. fnext - по входному номеру записи в регистре DE
найти следующую запись.
Выход : Флаг с -ошибка ввода;
z -успешно (в DE' - номер)
nz -запись отсутствует.
(DE'= прежний номер записи)
2. pread - заполнить буфер текущей записью
3. g_rcst - вернуть в регистр А состояние записи
4. p_rcst - установить состояние текущей записи.
равным per. В
5. g_no - вернуть в регистр А номер отметки
6. р_по - установить номер отметки текущей записи
равным per. В
7. g_min - вернуть в DE' минимальный номер записи
8. g_max - вернуть в DE' максимальный номер записи
9. сгсог - установка курсора
10. tssel - проверка можно ли отмечать данную запись.
Z-да, NZ-нет.
11. tsres - проверка на маску.
^ Z - подходит, NZ -нет, С -нет.
12. inipnl - самостоятельная инициализация вектора
панели. С - системная ошибка.
13. ctman - печать панели с инициализацией начала
страницы.
14. ctmin - то же, но конца страницы.
15. tymin - скроллинг вверх с печатью нижней строки.
16. tymax - скроллинг вверх с печатью верхней строки.
17. fcmon - движение по панели.
18. cname - печать текущей записи на месте курсора.
19. oners - зажигание курсора.
20. ofcrs - тушение курсора.
21. crset - установка курсора на заданный номер
записи и желаемую позицию