Аппаратное обеспечение IBM PC


         

Этот драйвер при вызове устанавливает


mov _ms_flag, 1

ret

_ms_handl endp

_TEXT ENDS

END

Этот драйвер при вызове устанавливает глобальную переменную _ms_flag в единицу, затем переписывает содержимое всех нужных регистров в соответствующие глобальные переменные. Программа, установив драйвер событий и сбросив флаг _ms_flag, может выполнять какие-либо действия (например, вывод на экран движущегося изображения), постоянно проверяя флаг _ms_flag. Как только произойдет какое-либо событие (нажатие или отпускание клавиши мыши, перемещение мыши) драйвер событий установит флаг в единицу. Программа при этом может узнать состояние мыши, прочитав содержимое глобальных переменных _ms_bx, _ms_dx, и т.д.

Этот простейший вариант использования драйвера событий иллюстрируется следующей программой:

#include <dos.h> #include <stdio.h> #include <conio.h> #include "sysp.h"

extern void far ms_handl(void);

// Флаг драйвера событий. При вызове драйвер событий // запишет в эту переменную значение 1.

unsigned ms_flag;

// Область для содержимого регистров на входе // в драйвер событий.

unsigned ms_bx; unsigned ms_cx; unsigned ms_dx; unsigned ms_si; unsigned ms_di; unsigned ms_ds;

int botm;

main () {

ms_flag=0; // Инициализируем мышь, определяем количество клавиш

if(!ms_init(&botm)) { printf("\nМышь не установлена"); exit(-1); }

// Подключаем драйвер событий, устанавливаем маску таким образом, // чтобы драйвер вызывался при нажатии на левую или правую // клавиши мыши.

ms_seth(2 | 8, ms_handl);

// Включаем курсор

ms_on();

// Ожидаем вызова драйвера событий.

for(;;) { if(ms_flag) { ms_off();

printf("\nСостояние регистров " "на входе драйвера:" "\nms_bx: %0X" "\nms_cx: %0X" "\nms_dx: %0X" "\nms_si: %0X" "\nms_di: %0X" "\nms_ds: %0X", ms_bx, ms_cx, ms_dx, ms_si, ms_di, ms_ds);

printf("\nНажмите любую клавишу..."); getch(); exit(0); } } }

Драйвер событий может также организовать очередь событий, записывая в эту очередь состояние мыши на момент появления события и время появления события.

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


Содержание  Назад  Вперед