понедельник, 18 марта 2019 г.

Как в CHUI получить код нажатой клавиши

CHUI программы это программы ориентированные на символьный ввод-вывод, CHaracter-User Interface. Такие программы строятся как консольные или телнет- программы.

Для получения кода нажатой клавиши программа работающая на MiniM Database Server должна вызвать команду чтения кода символа

read *code
При этом если пользователь нажал клавишу соответствующую печатному символу, то в значении переменной code записывается десятичный код символа. Например, при нажатии клавиши "5":
USER>r *code
5
USER>w code
53
В случае если пользователь нажимает клавишу которая не имеет печатного отображения, например клавиши Escape, F2 или Ins, то процесс MiniM возвращает в качестве кода прочитанного символа значение 27, соответствующее коду клавиши Escape. В этом случае программа чтения должна прочитать значение системной переменной $key непосредственно после чтения кода до следующего чтения символа или строки. В значении $key по соглашениям MiniM Database Server хранится полная escape последовательность, соответствующая нажатой клавише.

MiniM Database Server при обслуживании telnet-клиента возвращает в значении $key ту escape последовательность которая была послана telnet клиентом и ее значение полностью определяется используемым telnet клиентом.

При обслуживании консольного ввода MiniM Database Server эмулирует в возвращаемой escape последовательности наиболее распространенные telnet клиенты.

Например, при нажатии клавиши F5 получаем:
USER>r *code s key=$key zzdump key w $zquote(key),!
0000: 1B 4F 54
$C(27)_"OT"
Здесь выведены шестнадцатеричные и строковые значения полученной escape последовательности для консоли MiniM.

Одной из особенностей обработки кодов escape последовательностей является обработка клавиш при одновременном нажатии модифицирующих клавиш Shift, Ctrl, Alt. В случае некоторых telnet клиентов информация об одновременном нажатии модифицирующих клавиш может утрачиваться, может передаваться жестко определенным кодом или может настраиваться. Для обработки кодов нажатых клавиш нужно обратиться к описанию используемого telnet клиента или проверить что он посылает при нажатии соответствующих клавиш.

В случае использования консоли MiniM информация о нажатии модифицирующих клавиш Shift, Ctrl, Alt передается дополнительными символами "a", "c", "s" в нижнем регистре именно в этой последовательности. Например, если нажата комбинация Ctrl+Alt+F5, то процесс MiniM возвращает такую последовательность:
USER>r *code s key=$key zzdump key w $zquote(key),!
0000: 1B 4F 54 61 63
$C(27)_"OTac"

Комментариев нет:

Отправить комментарий