Bioskey
bioskey
Функция Интерфейс с клавиатурой при помощи функций 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'