Часто виникаючою задачею в програмуванні є визначення
того, чи є в буфері клавіатури доступні для читання символи чи буфер пустий.
Найпростіше вирішення – порівняння значень покажчиків „голови” ті „хвоста”,
тобто перевірка на рівність баітів пам'яті по адресам
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;
}
![]() |
![]() |
![]() |