Эмулятор терминала.
2. Настройки клавиатуры.
------------------------------
Базовые параметры объектов типа Terminal находятся в ini-файле класса - Terminal.ini.
Любой из этих параметров может быть переопределён для конкретного экземпляра объекта типа Terminal в ini-секции такого объекта в файле конфигурации.
Например.
В файле Terminal.ini из комплекта поставки эмулятора для клавиши <F12> задана такая подставляемая строка:
А в секции [VT52.ini] файла default.cfg такая:Код:ANSI_STR_FOR_KEY[F12] = "F12 "
Запустив эмулятор в конфигурации по-умолчанию и нажав клавишу <F12> можно проверить, какая из подстановок будет выполнена.Код:ANSI_STR_FOR_KEY[F12] = "f12 "
Всего можно определить в файле Terminal.ini и переопределить в ini-секциях объектов типа Terminal в файлах конфигурации подставляемые строки для следующих клавиш:
Легко заметить, что в конфигурации по-умолчанию - клавиши <Ctrl>, <Win> и <Alt>, расположенные слева от пробела - генерят код перехода на русский регистр ( 016 ), а расположенные справа - код перехода на латинский регистр ( 017 ).Код:ANSI_STR_FOR_KEY[F1] = "Help me !!! " ANSI_STR_FOR_KEY[F2] = "Dir\015" ANSI_STR_FOR_KEY[F3] = "F3 " ANSI_STR_FOR_KEY[F4] = "F4 " ANSI_STR_FOR_KEY[F5] = "\033g" ANSI_STR_FOR_KEY[F6] = "\033h" ANSI_STR_FOR_KEY[F7] = "\033S" ANSI_STR_FOR_KEY[F8] = "\033c" ANSI_STR_FOR_KEY[F9] = "\033\024" ANSI_STR_FOR_KEY[F10] = "\033\010" ANSI_STR_FOR_KEY[F11] = "\033\023" ANSI_STR_FOR_KEY[F12] = "F12 " ANSI_STR_FOR_KEY[Insert] = "\033P" ANSI_STR_FOR_KEY[Delete] = "\033e" ANSI_STR_FOR_KEY[Home] = "\033Q" ANSI_STR_FOR_KEY[End] = "\033f" ANSI_STR_FOR_KEY[PageUp] = "\033R" ANSI_STR_FOR_KEY[PageDown] = "\033d" ANSI_STR_FOR_KEY[PF1] = "\033P" ANSI_STR_FOR_KEY[Pad_Slash] = "\033Q" ANSI_STR_FOR_KEY[Pad_Star] = "\033R" ANSI_STR_FOR_KEY[Pad_Minus] = "\033S" ANSI_STR_FOR_KEY[Pad_Plus] = "\012" ANSI_STR_FOR_KEY[LCtrl] = "\016" ANSI_STR_FOR_KEY[RCtrl] = "\017" ANSI_STR_FOR_KEY[LWin] = "\016" ANSI_STR_FOR_KEY[RWin] = "\017" ANSI_STR_FOR_KEY[LAlt] = "\016" ANSI_STR_FOR_KEY[RAlt] = "\017" ANSI_STR_FOR_KEY[Apps] = "\012"
Клавиша <Apps> генерит по-умолчанию код LF ( 012 ).
Код, назначенный для клавиши PF1 :
генерится при нажатии на клавишу <Num Lock>, но только в том случае, если параметр Use_NumLock_as_PF1 имеет действующее значение 1.Код:ANSI_STR_FOR_KEY[PF1] = "\033P"
По умолчанию параметры управления клавиатурой таковы:
Параметр KeyboardControlling разрешает или запрещает терминалу имитировать нажатия на клавиши <Num Lock>, <Caps Lock> и <Scroll Lock>.Код:KeyboardControlling = 1 NumLockControlling = 1 NumpadSwapping = 1 Use_NumLock_as_PF1 = 0
Параметр NumLockControlling позволяет выборочно запретить терминалу имитировать нажатия на клавишу <Num Lock>.
Параметр NumpadSwapping отвечает за имитацию эмулятором терминала - цифрового и дополнительного клавиатурных блоков терминала 15ИЭ-00-013. При имитации терминала VT52 этот параметр лучше установить в 0, а при имитации 15ИЭ-00-013 - в 1.
Если NumpadSwapping = 1, то при включенном <Num Lock> - KEYPAD PC-шной клавиатуры имитирует NUMPAD терминалов VT52 и 15ИЭ-00-013, а стрелки PC-шной клавиатуры - имитируют стрелки терминалов VT52 и 15ИЭ-00-013 ( режим по-умолчанию ), тогда как при выключенном <Num Lock> - KEYPAD PC-шной клавиатуры имитирует KEYPAD клавиатуры 15ИЭ-00-013 ( отсутствующий у VT52 ), а стрелки PC-шной клавиатуры - имитируют клавиши 4, 5, 6 и 8 NUMPAD.
Поскольку большинство динамичных игр для PDP-11 управляются клавишами 4, 5, 6 и 8 NUMPAD - выключив <Num Lock> в режиме NumpadSwapping = 1 - можно передать эти функции стрелкам.
Но главное в том, что большинство программ для ДВК управляются кодами клавиш KEYPAD клавиатуры 15ИЭ-00-013. Поэтому, при выключенном <Num Lock> в режиме NumpadSwapping = 1 такие программы можно использовать более привычным и естественным образом.
...
В окне терминала клавиши <Alt>, <F10>, <Win> и <Apps> не выполняют своих системных функций, а генерят коды наравне с другими клавишами.
Клавиши <Ctrl> генерят назначенные им коды только при одиночном нажатии, тогда как при нажатии совместно с другими клавишами - обеспечивают генерацию управляющих кодов.
В режиме KeyboardControlling = 1:
1. При каждом получении фокуса ввода окном объекта типа Terminal - объект запоминает текущее состояние параметров <Num Lock>, <Caps Lock> и <Scroll Lock> клавиатуры и восстанавливает свой контекст, а при потере фокуса - осуществляет обратную операцию.
Каждый экземпляр терминала имеет свой собственный контекст состояний клавиатуры.
2. Одиночное нажатие на левую клавишу <Shift> всегда устанавливает <Caps Lock>, а одиночное нажатие на правую клавишу <Shift> - всегда сбрасывает <Caps Lock>.
3. Последовательные нажатия на клавишу <Scroll Lock> посылают в выходной поток коды <Ctrl/S> и <Ctrl/Q>.