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

2.4.5. Запись символов в буфер клавиатуры

На входе: AH = 05h;

CL = ASCII-код записываемого символа;

CH = скан-код записываемого символа, или 0.

На выходе: AL = 0 - запись выполнена успешно;

1 - буфер клавиатуры переполнен.

С помощью этой функции можно вставить символы в буфер клавиатуры, как будто они были введены оператором.

Приведенная программа записывает в буфер клавиатуры пять символов '*'. Запустите ее и посмотрите на системное приглашение. Вы увидите что-нибудь похожее на C:>*****.

#include <stdio.h>

#include <dos.h>

void main(void);

void main(void) {

union REGS rg;

int i;

for(i=0; i<5; i++) {

rg.h.ah = 5;

rg.h.cl = '*';

rg.h.ch = 9;

int86(0x16, &rg, &rg);

}

}

2.4.6 Чтение символа с ожиданием для 101-клавишной клавиатуры

Функция 10h полностью аналогична функции 00h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу.

Приведем формат вызова функции:

На входе: AH = 10h.

На выходе: AL = ASCII-код символа или 0, если AH содержит

расширенный ASCII-код символа;

AH = скан-код или расширенный ASCII-код

символа, если AL=0.

Функция определена для BIOS, изготовленной не раньше 15 декабря 1985 года.

2.4.7. Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры

На входе: AH = 11h.

На выходе: ZF = 0, если в буфере имеется код нажатой

на клавиатуре клавиши;

ZF = 1, если буфер клавиатуры пуст;

AL = ASCII-код символа или 0, если AH содержит

расширенный ASCII-код символа;

AH = скан-код или расширенный ASCII-код

символа, если AL=0.

Функция 11h полностью аналогична функции 01h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу.

Эта функция определена для BIOS, изготовленной не раньше 15 декабря 1985 года.

2.4.8. Получение состояния переключающих клавиш для 101-клавишной клавиатуры

На входе: AH = 12h.

На выходе: AL = Байт состояния переключающих клавиш.

Функция возвращает в регистре AL состояние переключающих клавиш (Shift, Ctrl, Alt, ScrollLock, NumLock, CapsLock, Ins):

Биты Значение

0 Нажата левая клавиша Shift вместе с Ctrl.

1 Нажата левая клавиша Shift вместе с Alt.

2 Нажата правая клавиша Shift вместе с Ctrl.

3 Нажата правая клавиша Shift вместе с Alt.

4 Нажата клавиша ScrollLock.

5 Нажата клавиша NumLock.

6 Нажата клавиша CapsLock.

7 Нажата клавиша SysReq.

Функция 12h аналогична функции 02h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу и имеет другой формат байта состояния.

Эта функция определена для BIOS, изготовленной не раньше 15 декабря 1985 года.

2.5. Средства ms-dos для работы с клавиатурой

К сожалению, MS-DOS не предоставляет программам каких-либо существенных дополнительных возможностей по сравнению с функциями прерывания BIOS INT 16h. Поэтому многие программы работают с клавиатурой через BIOS.

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

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

Вообще говоря, клавиатурные функции MS-DOS больше всего подходят для тех программ, которые ведут с оператором "построчный" диалог. Для таких программ при использовании средств переназначения ввода/вывода возможна организация автоматического "пакетного" выполнения, когда все сообщения выводятся в файл, а все данные, которые обычно вводятся с клавиатуры, считываются из заранее подготовленного файла "ответов".

Некоторые клавиатурные функции MS-DOS отслеживают комбинации клавиш Ctrl-C и Ctrl-Break. Если оператор ввел такую комбинацию клавиш, вызывается прерывание INT 23h, завершающее работу текущей программы. Если ваша программа не должна завершаться при нажатии этих комбинаций клавиш, можно либо создать и подключить собственный обработчик для INT 23h, либо использовать те клавиатурные функции MS-DOS, которые не выполняют проверку указанных выше комбинаций клавиш.

Приведем подробное описание клавиатурных функций прерывания MS-DOS INT 21h.

2.5.1. Буферизованный ввод с эхо-выводом

2.5.2. Буферизованный ввод без эхо-вывода

2.5.3. Нефильтрованный ввод без эхо-вывода

2.5.4. Ввод/вывод на консоль

2.5.5. Ввод строки символов

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

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

Соседние файлы в папке Периферийные устройства ПК