Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Проверка состояния стандартного ввода

Функция 0Bh проверяет состояние клавиатурного буфера. Вы можете вызывать ее перед функциями 01h, 07h, 08h для того, чтобы избежать ожидания нажатия на клавишу.

Регистры на входе:

AH = 0Bh

Регистры на выходе:

AL = 0FFh, если в буфере имеется код нажатой клавиши;

AL = 0, если буфер клавиатуры пуст.

Функция проверяет комбинации клавиш <Control+C>и<Control+Break>

Если ваша программа выполняет какую-либо длительную обработку (копирование файлов, форматирование дисков и так далее), вы можете вызывать эту функцию в процессе обработки для того чтобы пользователь мог прервать процесс.

Сброс буфера клавиатуры

Функция 0Ch очищает клавиатурный буфер, затем вызывает клавиатурную функцию MS-DOS, номер которой определяется содержимым регистра AL.

Регистры на входе:

AH = 0Сh

AL = 1, 6, 7, 8 или 0Ah

Регистры на выходе:

Не опеределены

Если же регистр AL содержит другое значение, кроме приведенных выше, функция просто сбрасывает содержимое буфера и не выполняет никаких других действий.

Эту функцию удобно использовать тогда, когда перед вводом символа необходимо убедиться в том, что буфер клавиатуры пуст.

Клавиатурные функции стандартной библиотеки c

Стандартные библиотеки C содержат набор функций, предназначенных для работы с клавиатурой. Эти функции повторяют и немного дополняют возможности функций MS-DOS и BIOS, обслуживающих клавиатуру.

Функции getch и getche

Самые простые из функций стандартной библиотеки С, предназначенных для работы с клавиатурой - getch и getche. Они описаны в файле conio.h.

Функция getch имеет следующий прототип:

int getch(void);

Эта функция возвращает код ASCII символа, прочитанного из клавиатурного буфера, причем прочитанный символ не отображается на экране. Если была нажата функциональная клавиша или клавиша перемещения курсора, функция возвращает 0. В этом случае функцию надо вызвать еще раз для получения расширенного кода ASCII нажатой клавиши.

Функция обрабатывает клавиши <Control+C>и<Control+Break> - при вводе этих комбинаций клавиш работа программы завершается.

Если клавиатурный буфер пуст, программа переводится в состояние ожидания.

Функция getche полностью аналогична функции getch, за исключением того, что прочитанный символ отображается на экране. Приведем прототип функции getche:

int getche(void);

ПрограммаKbdascii

Приведем исходные тексты программы KBDASCII, отображающей на экране коды ASCII и расширенные коды ASCII нажимаемых клавиш (листинг 2.4).

Листинг 2.4. Файлkbdascii\kbdascii.c

// =====================================================

// Просмотр клавиатурных кодов ASCII

//

// (C) Фролов А.В, 1997

//

// E-mail: frolov@glas.apc.org

// WWW: http://www.glasnet.ru/~frolov

// или

// http://www.dials.ccas.ru/frolov

// =====================================================

#include <conio.h>

#include <ctype.h>

#include <stdio.h>

int main(void)

{

int key;

printf("KBDASCII, (c) A. Frolov, 1997\n"

"Press any key, <Esc> to exit\n");

// Читаем в цикле символы с клавиатуры и отображаем

// коды ASCII нажатых клавиш.

// Выходим из цикла, когда пользователь нажимает

// клавишу <Esc>

for(;;)

{

// Читаем символ

key = getch();

// Если прочитанный символ равен 0, вызываем функцию

// getch для получения расширенного

// кода ASCII нажатой клавиши

if((key == 0) || (key == 0xe0))

{

key = getch();

printf("Extended code ASCII:\t" );

}

else

printf( "Code ASCII:\t");

printf("%d\n",key);

// Когда пользователь нажимает клавишу

// <Esc>. выходим из цикла

if(key == 27)

break;

}

return 0;

}

Соседние файлы в папке несколько программ