bioskey
Функция Интерфейс с клавиатурой при помощи функций BIOS.
Синтаксис #include<bios.h>
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 <stdio.h>
#include <bios.h>
#include <ctype.h>
#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);
}
|