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


         

Descr Эта функция выполняет установку


/** *.Name ms_seth *.Title Установка драйвера событий * *. Descr Эта функция выполняет установку драйвера событий. * *.Proto void ms_seth(int mask, void (far *hand)()) * *.Params int mask - маска событий; * void (far *hand)() - адрес драйвера событий * *.Return Ничего * *.Sample ms_samp8.c **/

#include <dos.h> #include <conio.h>

union REGS reg; struct SREGS segregs;

void ms_seth(int mask, void (far *hand)()) {

reg.x.ax = 0x14; reg.x.cx = mask; reg.x.dx = FP_OFF(hand); segregs.es = FP_SEG(hand);

int86x(0x33,&reg,&reg,&segregs);

}

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

Мы подготовили образец драйвера событий, использовав язык ассемблера:

;** ;.Name ms_handl ;.Title Драйвер событий ; ;.Descr Драйвер событий вызывается драйвером мыши, ; когда происходит какое-нибудь событие из числа ; заданных при установке драйвера событий. ; Функция не должна вызываться из программы ; пользователя, ее вызывает только драйвер мыши. ; ;.Proto void far ms_handl(void); ; ;.Params Не используются ; ;.Return Ничего ; ;.Sample ms_samp8.c ;**

DOSSEG DGROUP GROUP _DATA

_DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS

_TEXT SEGMENT WORD PUBLIC 'CODE' ASSUME cs:_TEXT, ds:DGROUP, ss:DGROUP

; Флаг вызова драйвера событий

extrn _ms_flag:word

; Внешние переменные для записи содержимого регистров

extrn _ms_bx:word extrn _ms_cx:word extrn _ms_dx:word extrn _ms_si:word extrn _ms_di:word extrn _ms_ds:word

public _ms_handl

_ms_handl proc far

mov _ms_ds, ds

; Так как на входе в драйвер событий регистр DS указывает на ; сегмент данных драйвера мыши, устанавливаем его на сегмент ; данных программы;

push ax mov ax, DGROUP mov ds, ax pop ax

mov _ms_bx, bx mov _ms_cx, cx mov _ms_dx, dx mov _ms_si, si mov _ms_di, di

; Устанавливаем флаг вызова драйвера в 1, сигнализируя ; программе о том, что произошло событие.


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