Russian Belarusian English German Japanese Ukrainian

Функция


Интерфейс с клавиатурой при помощи функций BIOS.

Синтаксис


#include<bios.h>
int bioskey(int cmd);

Прототип


bios.h

Описание


Функция bioskey посредством прерывания BIOS 0x16 выполняет различные операции c клавиатурой. Параметр cmd определяет операцию.

Возвращаемое значение


Значение, возвращаемое функцией bioskey, зависит от выполняемой операции, которая определяется аргументом 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;
while (bioskey(1) == 0);
key = bioskey(0);
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);
}

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Поиск по сайту