Функция Интерфейс с клавиатурой при помощи функций BIOS.
Синтаксис #include
int bioskey(int cmd);
Файл, содержащий bios.h
прототип
Описание bioskey посредством прерывания BIOS 0x16 выполняет
различные операции c клавиатурой. Параметр cmd
определяет операцию.
Возвращаемое Значение, возвращаемое функцией bioskey, зависит от
значение выполняемой операции, которая определяется аргумен-
том cmd:
--------------------------------------------------
cmd Операция
--------------------------------------------------
0 Если младшие 8 бит не нулевые, bioskey
возвращает код ASCII следующей нажатой кла-
виши, ожидающей в очереди. Если младшие 8
битов равны 0, то старшие 8 битов содержат
расширенные коды клавиатуры, описание кото-
рых вы можете найти в документе "Техническое
справочное руководство по IBM PC".
1 Производится проверка, имело ли место нажа-
тие клавиши. Если при проверке возвращает-
ся значение 0, это означает, что клавиша
не была нажата. В противном случае возвра-
щается значение очередной нажатой клавиши.
Сам же код очередной нажатой клавиши сох-
раняется и будет возвращен при следующем
вызове функции bioskey при значении пара-
метра cmd, равном нулю.
2 Запрашивает текущий статус клавиш типа
SHIFT. Значение получается при логическом
сложении следующих кодов (операции "ИЛИ")
Бит 7 0x80 INSERT нажат
Бит 6 0x40 CAPS нажат
Бит 5 0x20 NUM LOCK нажат
Бит 4 0x10 SCROLL LOCK нажат
Бит 3 0x08 ALT нажат
Бит 2 0x04 CTRL нажат
Бит 1 0x02 LEFT SHIFT нажат
Бит 0 0x01 RIGHT SHIFT нажат
Переносимость bioskey поддерживается только на компьютерах IBM PC
или совместимых с ними.
Пример:
#include
#include
#include
#define RIGHT 0x0001
#define LEFT 0x0002
#define CTRL 0x0004
#define ALT 0x0008
int main(void)
{
int key, modifiers;
/* Функция 1 возвращает 0, пока не будет
нажата клавиша. Ожидание ввода. */; /* now use function 0 to get return value of
while (bioskey(1) == 0);
/* Теперь используем функцию 0, чтобы получить
значение клавиши */
key = bioskey(0);
/* Используем функцию 2, чтобы определить,
используются ли клавиши типа SHIFT */.
modifiers = bioskey(2);
if (modifiers) {
printf("[");
if (modifiers & RIGHT) printf("RIGHT ");
if (modifiers & LEFT ) printf("LEFT ");
if (modifiers & CTRL ) printf("CTRL ");
if (modifiers & ALT ) printf("ALT ");
printf("] ");
}
/* вывести символ нажатой клавишу */
if (isalnum(key & 0xFF))
printf("'%c'\n",key);
else
printf("%#02x\n",key);
}
Результат
Key Pressed was: [LEFT] 'T'