Скачиваний:
106
Добавлен:
02.05.2014
Размер:
403.46 Кб
Скачать

3.3.1. Инициализация мыши

На входе: AX = 0000h.

На выходе: AX = состояние мыши:

0000h - драйвер мыши или мышь не

установлены;

FFFFh - драйвер и мышь установлены;

BX = количество клавиш у мыши:

2 - две клавиши;

0 - больше или меньше, чем две;

3 - мышь системы Mouse Systems

(имеет три клавиши).

Эта функция выполняет аппаратный сброс оборудования мыши и программную установку драйвера мыши в начальное состояние. С помощью функции 21h можно выполнить установку драйвера в исходное состояние, не выполняя аппаратного сброса мыши.

При установке в исходное состояние для программ, работающих в текстовом режиме, выполняются следующие действия:

  • курсор перемещается в центр экрана и гасится;

  • разрешается перемещение курсора по всей поверхности экрана, причем на экране отсутствуют зоны, в которых курсор является невидимым;

  • устанавливается режим отображения курсора - инвертирование атрибута символа, на который указывает курсор;

  • для изображения курсора выбирается нулевая страница видеопамяти;

  • разрешается эмуляция светового пера (хотя это вам едва ли понадобится);

  • устанавливается начальная скорость перемещения курсора.

Мы подготовили функцию для инициализации мыши из программы, составленной на языке Си:

/**

*.Name ms_init

*.Title Инициализация мыши

*

*.Descr Эта функция выполняет аппаратный сброс мыши,

* устанавливает в начальные значения внутренние

* переменные ее драйвера. Дополнительно определяется

* количество клавиш мыши.

*

*.Proto int ms_init(int *nbottoms)

*

*.Params int *nbottoms - указатель на переменную

* типа int, в которую будет записано количество

* клавиш, имеющихся в мыши.

*

*.Return 0 - плата или драйвер не установлены;

* -1 - плата установлена, инициализация

* выполнена успешно;

*

* В переменную nbottoms записывается количество

* клавиш мыши:

*

* 2 - две клавиши;

* 0 - больше или меньше, чем две;

* 3 - мышь системы Mouse Systems, три клавиши.

*

*.Sample ms_sampl1.c

**/

#include <dos.h>

#include <conio.h>

union REGS reg;

int ms_init(int *nbottoms) {

reg.x.ax = 0;

int86(0x33,&reg,&reg);

*nbottoms = reg.x.bx;

return reg.x.ax;

}

3.3.2. Включить курсор мыши

На входе: AX = 0001h.

На выходе: регистры не используются.

Для управления видимостью курсора драйвер мыши использует внутренний счетчик. Этот счетчик можно увеличивать, вызывая функцию 01h прерывания INT 33h, или уменьшать при помощи функции 02h этого же прерывания.

После инициализации драйвера функцией 00h счетчик устанавливается равным -1. После первого вызова функции 01h счетчик становится равным 0. При этом курсор мыши становится видимым, его можно перемещать по экрану.

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

Функция 01h сбрасывает область, в которой курсор не отображается (если такая область была ранее установлена функцией 10h).

Вызов функции из Си:

/**

*.Name ms_on

*.Title Включение курсора мыши

*

*.Descr Эта функция увеличивает на 1 индикатор

* уровня видимости курсора. Если индикатор

* равен нулю, курсор появляется на экране.

* Значение индикатора не превышает

* нуля даже при многократных вызовах этой функции.

*

*.Proto void ms_on(void)

*

*.Params Не используются

*

*.Return Ничего

*

*.Sample ms_sampl1.c

**/

#include <dos.h>

#include <conio.h>

union REGS reg;

void ms_on(void) {

reg.x.ax = 1;

int86(0x33,&reg,&reg);

}

Соседние файлы в папке input_devices