|
Приложение 15,16,17 - подпрограммы функции panel (#6A) - работа с панелью.
|
Приложение 15
Подпрограммы функции panel
(#6A) - работа с панелью / WIND.SYS /
№ функции
|
Имя
|
Примечание
|
Рестарт имеет 21 точку входа, причем первые 12
функций необходимы для его поддержки (он сам обращается к этим функциям), а
остальные задают режим работы. Адреса функций 0..11 сведены в таблицу, адрес
которой лежит в векторе WIND.SYS со смещением -2 (см. ПРИЛОЖЕНИЕ 14).
Т.о. пользователь может подменить эти 12 функций на
свои, что и делают некоторые базы данных. Этим же рестартом пользуется
оболочка (уровень SHELL.SYS), рисуя на экране свои панели с файлами. Рестарт вынесен
в уровень WIND.SYS, что предполагает возможность его использования
даже при отсутствии уровня SHELL.SYS.
Нужная функция выбирается с помощью регистра A.
|
0
|
fprev
|
По входному номеру записи в регистре DE найти
предыдущую запись.
Выход: C - ошибка ввода
Z
- успешно (DE' - номер)
NZ
- запись отсутствует (DE' - прежний номер записи)
|
1
|
fnext
|
По входному номеру записи в регистре DE найти
следующую запись.
Выход: C - ошибка ввода
Z
- успешно (DE' - номер)
NZ
- запись отсутствует (DE' - прежний номер записи)
|
2
|
pread
|
Заполнить буфер текущей записью
|
3
|
g_rcst
|
Вернуть в регистр A состояние записи
|
4
|
p_rcst
|
Установить состояние текущей записи равным регистру B
|
5
|
g_no
|
Вернуть в регистр A номер отметки
|
6
|
p_no
|
Установить номер отметки текущей записи равным регистру B
|
7
|
g_min
|
Вернуть в DE' минимальный номер записи
|
8
|
g_max
|
Вернуть в DE' максимальный номер записи
|
9
|
crcor
|
Установка курсора
|
10
|
tssel
|
Проверка, можно ли отмечать данную запись: Z- да, NZ
- нет
|
11
|
tsres
|
Проверка на маску: Z - подходит, NZ - нет, C
- нет
|
12
|
inipnl
|
Самостоятельная инициализация вектора панели. C -
системная ошибка
|
13
|
ctman
|
Печать панели с инициализацией начала страницы
|
14
|
ctmin
|
То же, но конца страницы
|
15
|
tymin
|
Скроллинг вверх с печатью нижней строки
|
16
|
tymax
|
Скроллинг вверх (вниз?) с печатью верхней строки
|
17
|
fcmon
|
Движение по панели
|
18
|
cname
|
Печать текущей записи на месте курсора
|
19
|
oncrs
|
Зажигание курсора
|
20
|
ofcrs
|
Тушение курсора
|
21
|
crset
|
Установка курсора на заданный номер записи и желаемую позицию
|
Приложение 16
Команды оболочки / SHELL.SYS /
Код
|
Клавиша
|
Имя
|
Примечание
|
0(#00)
|
|
fcmon
|
Выход без каких-либо специальных действий
|
5(#37)
|
7
|
mkdir
|
Создание подкаталога на текущей панели
|
6(#06)
|
CS/2
|
rtdev
|
Выбор устройства на правой панели
|
7(#07)
|
CS/1
|
lfdev
|
Выбор устройства на левой панели
|
8(#08)
|
CS/5
|
plpan
|
Перемещение курсора на левую панель без открытия устройства
|
9(#09)
|
CS/8
|
prpan
|
Перемещение курсора на правую панель без открытия устройства
|
13(#0D)
|
ENTER
|
curun
|
Запуск файла, на котором стоит курсор, а также вход и выход из каталога
|
14(#0C)
|
CS/SS
|
dbpnl
|
Копирование текущей панели на альтернативную
|
54(#36)
|
6
|
view
|
Запуск программы просмотра согласно файлу S:SHELLextview.txt
|
56(#38)
|
8
|
gmenu
|
Вызов главного меню
|
79(#4F)
|
O
|
nlpan
|
Перемещение курсора на левую панель с открытием устройства
|
80(#50)
|
P
|
nrpan
|
Перемещение курсора на правую панель с открытием устройства
|
104(#68)
|
h
|
prnt
|
Запуск программы печати согласно файлу S:SHELLextprint.txt
|
111(#6F)
|
o
|
plpan
|
то же, что 8 - CS/5
|
112(#70)
|
p
|
prpan
|
то же, что 9 - CS/8
|
|
Код
|
pnCSR
|
Имя
|
Примечание
|
240(#F0)
|
01110
|
cvwnel
|
Перепечатка текущей панели с сохранением позиции курсора
|
241(#F1)
|
01010
|
nvwpnl
|
Перепечатка текущей панели с установкой курсора на начало панели
|
242(#F2)
|
01110
|
cshel2
|
Аналог $shel2(#82) с сохранением позиций курсора на обеих
панелях
|
243(#F3)
|
01010
|
nshel2
|
Полный аналог рестарта $shel2
|
244(#F4)
|
01110
|
cshel1
|
Аналог $shel1(#81) с сохранением позиций курсора на обеих
панелях
|
245(#F5)
|
01010
|
nshel1
|
Полный аналог рестарта $shel1
|
246(#F6)
|
01110
|
cshel0
|
Аналог $shel0(#80) с сохранением позиций курсора на обеих
панелях
|
247(#F7)
|
01010
|
nshel0
|
Полный аналог рестарта $shel0
|
248(#F8)
|
00110
|
_panel
|
Перепечатка текущей панели с сохранением отметки
|
251(#FB)
|
11010
|
new
|
Перепечатка текущей панели с открытием устройства
|
Выполнить все эти команды можно если вернуться в
оболочку с флагом Z и NC по RET или по рестарту shout(#84). Чтобы выполнить
данные команды и остаться в прикладной задаче пользуйтесь рестартом
shsubr(#8E). Эти же команды отрабатывает оболочка при опросе клавиатуры. Все
остальные коды клавиш оболочка ищет в файле S:SHELLextkey.txt. Рестарт
shsubr инициализирует панель при ее перепечатке. После чего при повторном его
вызове с любым кодом кроме перечисленных (например 255) он перехватит
управление и будет сам отрабатывать движение по панели вверх и вниз. По любой
клавише кроме A, Q,CS/A,CS/Q он вернет управление.
Запуска файлов рестарт shsubr не производит.
В случае вызова по рестартам флаг Z не существенен.
Биты регистра pnCSR см. ПРИЛОЖЕНИЕ 17.
|
Приложение 17
Вектор оболочки / $g_mpan (#87) - BC' / SHELL.SYS/
Смещение
|
Имя
|
Длина
|
Комментарий
|
-9
|
SHLDAT
|
2
|
Дата трансляции SHELL.SYS
|
-7
|
ERCSR
|
1
|
Управляющий байт для $shexe (#93):
0 - не/1 - сообщить об ошибке 81 (нет файла)
|
-6
|
FNC
|
1
|
Код ошибки или клавиши
|
-5
|
nLOG
|
1
|
Управление подкраской строки подсказок: 1 -
красить, 0 - нет / $mmenu (#89)
|
-4
|
pnCSR
|
1
|
Регистр состояния печати панелей. Биты:
0 - pn - временный номер панели
1 - sw - разрешение (требование)
смены панели (1)
2 - crs - сброс (0)/сохранение (1)
позиции курсора
3 - in - сброс (1)/сохранение (0)
отметки
4 - nw - открытие устройства (1)
5 - err - наличие ошибок
(внутреннее употребление)
pnCSR подаётся в регистре B на входе в $shpanl (#90)
|
-3
|
DFANL
|
2
|
Адрес анализатора 12 функций (см. ПРИЛОЖЕНИЕ 15)
|
-1
|
NPANL
|
1
|
Номер панели / $g_curs (#8A) - B'
|
0
|
CHPAN
|
2
|
Номера каналов левой и правой панелей / $g_mpan (#87) - BC'
|
2
|
PAPER
|
1
|
Цвет верхней части экрана
|
3
|
GRAND
|
1
|
Цвет бордюра
|
4
|
MWCOL
|
2
|
Цвета надписей "Please Wait"
левой и правой
|
6
|
FCURS
|
2
|
|
8
|
Pshl
|
8
|
Путь:
"S:SHELL"
|
|
|