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'