Часто виникаючою задачею в програмуванні є визначення того, чи є в буфері клавіатури доступні для читання символи чи буфер пустий. Найпростіше вирішення – порівняння значень покажчиків „голови” ті „хвоста”, тобто перевірка на рівність баітів пам'яті по адресам 40:1Ch та 40:1Eh. Наприклад, якщо використовуються описання файлу kb.h, таку перевірку виконує фрагмент коду, що приводиться далі:

 

#include”kb.h

………………

char register _es * tail=TAIL_PTR, head=HEAD_PTR;

……………...

_ES=0x40;

if(*head_ptr==*tail_ptr)

/*Дії, що виконуються, якщо буфер пустий*/

else

/*Дії, що виконуються в противному випадку*/

.........................

 

Читання символу з буферуклавіатури виконується доступом до комірки пам'яті, на котру посилається покажчик „голови”. Приведемо приклад функції key_kb(), що зчитує символ по поточній позиції показчика «голови» без видалення символу з буферу. Якщо буфер пустий, функція повертає 0. в противному випадку повертається ціле число без знаку, рівне двобайтовому коду BIOS. Таким чином, функція key_kb() подібна до функції bioskey(1) бібліотеки Turbo C.

 

/*L7_10.C*/

#include”kb.h

#include<dos.h>

unsigned key_kb(void)

{ register char _es*tail=(char _es*)TAIL_PTR;
            register char _es*head=(char _es*)HEAD_PTR;

  _ES=0x40;

if(*head=*tail) return 0;

disable(); tail =(char _es*)(*head);enable();

return *(unsigned _es*)tail;

}