нашел. разобрался.
кому интересно:
#ifndef MOUSEH
#define MOUSEH 1
#include <dos.h>
#define MOUSE_INT 0x33
#define RESET 0x00
#define SHOW 0x01
#define HIDE 0x02
#define BUTT_POS 0x03
int mouse(int command,int *x,int *y,int *buttons)
{
union REGS inregs,outregs;
switch(command)
{
case RESET:
{
inregs.x.ax=0x00;
int86(MOUSE_INT,&inregs,&outregs);
*buttons=outregs.x.bx;
return(outregs.x.ax);
}
case SHOW:
// функция инкрементирует счетчик драйвера. Когда значение счетчика становится
// больше или равно 0, курсор появляется на экране
{
inregs.x.ax=0x01;
int86(MOUSE_INT,&inregs,&outregs);
return(1);
}
case HIDE:
// функция декрементирует счетчик драйвера. Когда значение счетчика становится
// меньше 0, курсор исчезает с экрана
{
inregs.x.ax=0x02;
int86(MOUSE_INT,&inregs,&outregs);
return(1);
}
case BUTT_POS:
// функция позволяет получить полный статус состояния мыши, включая позицию
// курсора в координатах (х,у) и состояние кнопок
{
inregs.x.ax=0x03;
int86(MOUSE_INT,&inregs,&outregs);
*x=outregs.x.cx;
*y=outregs.x.dx;
*buttons=outregs.x.bx;
return(1);
}
default: break;
}
return(0);
}
#endif
Это, насколько помню, для DOS realmode решение. Кстати, лучше (во времена 386-х, когда боролись за каждый такт проца) работу с мышиными прерываниями оформить как отдельный asm-модуль (кроме того, читабельнее становится).
P.S. Когда будете переписывать код под Protected mode, вот там начнётся хардкор... ;-)