Як вказано в 7.1,два байти пам'яті по адресам 40:17h та 40:18h (див. Табл.7.1) зберігають поточний стан шифт- та тригерних клавіш. Безпосередній доступ до цих байтів дає можливість отримати дозширену інфоормацію, недоступну при використанні функції AH=02 переривання 16h BIOS або ії аналога bioskey(2). Наведемо приклад функції getsh_kb(), котра повертає розширену інформацію про поточий стан шифт- та тригерних клавіш комп’ютера; стан повертається в змінній unsigned, на котру вказує old_status:

 

/*L7_11.C*/

#include<dos.h>

Void getsh_kb(unsigned *old_status)

{ unsigned _es *shift_adress=(unsigned _es*)0x17;

     disable();

       _ES=0x40;

    *old_status=*shift_adress;

   enable();

}

 

Інтерпритація поточного стану шифт- та тригерних клавіш дозволяє визначити їх натиснення і використовувати їх в якості „гарячих” клавіш, що активізуватимуть резудентну програму: наприклад, запустити ту чи іншу TSR при одночасному натисненні Shift Left, Shift Right та Ctrl. Можна уявити і більш екзотичну комбінацію.

Фукція getsh_kb() на відміну від функції Turbo C bioskey() повертає стан не тільки байта по адресі 40:17h та байта по адресі 40:18h. Це дає додаткові можливості при управлінні системою.

Встановлення необхідних значень шифт- та тригерних клавіш дозволяє програмі привести клавіатуру комп’ютера в очікуваний нею стан, наприклад визначити, що при завантаженні програми по замовчанню встановлюється режим Ins – включено, нижній регістр (строкові літери, CapsLock включений), цифрова клавіатура вимкнена (NumLock - вимкнений) і т.д. Далі приведений приклад функції setsh_kb(), що виконує встановлення потрібних значень шифт- та тригерних клавіш. Параметром являється покажчик на структурну змінну по шаблону struct shft_status, що зберігає нові установки для шифт- та тригерних клавіш.

 

/*L7_12.C*/

#include<dos.h>

#include ”kb.h”

void setsh_kb(unsigned * new_ststus)

{ unsigned _es *shift_address=

              (unsigned _es*)0x17;

disable();

_ES=0x40;

*shift_address=*new_status;

enable();

}

 

Персональні компютери ЕС-1840 та ЕС-1841 мають одну інтерфейсну особливістьпри роботі з шифт-прапорами. ISR BIOS переривання 9 цих компютерів при натисненні клавіші Лат встановлює в 1 обидва прапори Ctrl Left та  Alt Left. При натисненні клавіші Рус обидва ці прапори переходять в 0. При початковому завантаженні компютера встановлюється по замовчанню значення 0. Таким чином, прочитавши значення Ctrl Left та Alt Left (біти 0 та 1 00418h), завжди можна визначити поточне значення регістру Рус/Лат. Зміни цих бітів для програми користувача міняє і регістр клавіатури. Правда при цьому не змінюється стан світодіодів, що може привести до помилки: на клавіатурі буде світитися лампочка Рус, але при цьому будуть генеруватися латинські літери, і навпаки.