Составители:
Рубрика:
74
ПРИЛОЖЕНИЕ 2. РАСШИРЕННЫЕ КОДЫ
КЛАВИАТУРЫ
Нажатие клавиши преобразуется в двухбайтовый код,
называемый скан-ASCII-кодом. Этот код помещается в буфер
клавиатуры, откуда Ваша программа может считать его с
помощью прерывания системы BIOS. Старший байт
двухбайтового кода называется скан-кодом и является
отображением фактически нажатой клавиши. Скан-код не
отражает состояние клавиш Shift, Ctrl или Alt и не является
уникальным. Помимо
скан-кодов нажатия, существуют коды
отпускания клавиш, отличающиеся на шестнадцатеричное
значение 80 в сторону увеличения. Младший байт полного кода,
называемый ASCII-кодом, также не является уникальным, но
полная комбинация скан- и ASCII-кода уникальна. Некоторые
клавиши не имеют ASCII-кода и вместо него возвращается ноль.
Такие двухбайтовые коды называются расширенными. При
приеме кода нажатой клавиши
через DOS последняя отделяет от
общего значения скан-код. Кроме того, работающий в системе
русификатор может дополнительно транслировать скан-коды
буквенных клавиш в ASCII-коды русских букв.
Исходя из сказанного, при использовании стандартной
функции Readkey, работающей с ASCII-кодами клавиш, в
общем случае является правильной следующая схема обработки
на Паскале:
Ch := ReadKey; {Чтение символа в байт Ch}
if Ch = #0 then begin
{Если нет ASCII-кода,
прочитать дополнительно расширенный код}
Ch := ReadKey;
{Обработка расширенного кода}
end
else
{Обработка ASCII-кода}
На Паскале десятичный код может быть записан в виде #N,
где
N – число, например, #65 ('A' латинская). ASCII-коды
ПРИЛОЖЕНИЕ 2. РАСШИРЕННЫЕ КОДЫ КЛАВИАТУРЫ Нажатие клавиши преобразуется в двухбайтовый код, называемый скан-ASCII-кодом. Этот код помещается в буфер клавиатуры, откуда Ваша программа может считать его с помощью прерывания системы BIOS. Старший байт двухбайтового кода называется скан-кодом и является отображением фактически нажатой клавиши. Скан-код не отражает состояние клавиш Shift, Ctrl или Alt и не является уникальным. Помимо скан-кодов нажатия, существуют коды отпускания клавиш, отличающиеся на шестнадцатеричное значение 80 в сторону увеличения. Младший байт полного кода, называемый ASCII-кодом, также не является уникальным, но полная комбинация скан- и ASCII-кода уникальна. Некоторые клавиши не имеют ASCII-кода и вместо него возвращается ноль. Такие двухбайтовые коды называются расширенными. При приеме кода нажатой клавиши через DOS последняя отделяет от общего значения скан-код. Кроме того, работающий в системе русификатор может дополнительно транслировать скан-коды буквенных клавиш в ASCII-коды русских букв. Исходя из сказанного, при использовании стандартной функции Readkey, работающей с ASCII-кодами клавиш, в общем случае является правильной следующая схема обработки на Паскале: Ch := ReadKey; {Чтение символа в байт Ch} if Ch = #0 then begin {Если нет ASCII-кода, прочитать дополнительно расширенный код} Ch := ReadKey; {Обработка расширенного кода} end else {Обработка ASCII-кода} На Паскале десятичный код может быть записан в виде #N, где N – число, например, #65 ('A' латинская). ASCII-коды 74