CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
bioskey, _bios_keybrd - работа с клавиатурой
Описание
Оба имени обозначают одну функцию. Два произношения
нужны для совместимости с разными компиляторами.
bioskey передает флаг для BIOS_прерывания 0x14 -
- прерывание от клавиатуры. Значения flag:
0 - чтение значения ввода с клавиатуры из буфера
ввода. Ждет ввода, если буфер пуст.
1 - определение наличия значений нажатых клавиш
в буфере ввода от клавиатуры.
2 - чтение состояния клавиш типа 'shift'.
Использование
#include <bios.h>
int bioskey(int flag);
int _bios_keybrd (int flag);
Возвращаемое значение
Если flag=0, то возвращаемое значение является рас-
ширенным кодом клавиши. ASCII код клавиши находится
при этом в младшем байте, а скан-код ее - в старшем
байте. Если младший байт нулевой, то это не ASCII
код (это может быть стрелка или функциональная кла-
виша). Если flag=1, то 0 возвращается при отсутствии
ввода от клавиатуры в буфере ввода; в противном слу-
чае возвращается расширенный код клавиши. При этом,
код клавиши остается в буфере ввода и еще доступен
для чтения. Если flag=2, то возвращаемое значение ин-
формирует о состоянии 'shift' клавиш:
0x01 - нажата правая shift клавиша
0x02 - нажата левая shift клавиша
0x04 - нажата клавиша Ctrl
0x08 - нажата клавиша Alt
0x10 - включен ключ Scrolllock
0x20 - включен ключ Numlock
0x40 - включен ключ Capslock
0x80 - включен ключ Ins
Пример
#include <bios.h>
#include <stdio.h>
main ()
{
int key, shift;
int lastshift = 0;
while (1)
{
shift=bioskey(2);
if(shift!=lastshift)
/* Если изменился shift статус*/
printf("shift = 0x%02x\n", shift);
/* Если клавиша нажата*/
if (bioskey(1))
{ /* Читаем клавишу*/
Key=bioskey(0);
if ((Key & 0xFF)== 'q') break;
printf("Клавиша = 0x%04x\n", Key);
}
lastshift=shift;
}
}
