/* ===================================================================== */
// char prg_name[] = "MOUSE. Oct-01-1993.";
// char prg_purpose[] = "Gestion de souris";
/* ===================================================================== */
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define INIT_MOUSE 0x0000
#define SHOW_MOUSE 0x0001
#define HIDE_MOUSE 0x0002
#define WATCH_MOUSE 0x0003
#define POSIT_MOUSE 0x0004
#define ASK_MOUSE 0x0005
char f_mouse_exist;
char f_mouse_hidden;
/* -------- public functions ------- */
void init_mouse(void);
void end_mouse(void);
void show_mouse(void);
void hide_mouse(void);
int ask_mouse(int *mx, int *my);
int watch_mouse(int *mx, int *my);
/* -------- external functions ------- */
/* -------- procedure division ------- */
void hide_mouse(void)
{
union REGS regs;
if (f_mouse_exist == 'N' || f_mouse_hidden == 'Y')
return;
regs.x.ax = HIDE_MOUSE;
int86(0x33, ®s, ®s);
f_mouse_hidden = 'Y';
return;
}
void show_mouse(void)
{
union REGS regs;
if (f_mouse_exist == 'N' || f_mouse_hidden == 'N')
return;
regs.x.ax = SHOW_MOUSE;
int86(0x33, ®s, ®s);
f_mouse_hidden = 'N';
return;
}
int ask_mouse(int *mx, int *my)
{
union REGS regs;
int mouse_click_nb;
regs.x.ax = ASK_MOUSE;
regs.x.bx = 0; /* left button */
int86(0x33, ®s, ®s);
mouse_click_nb = regs.x.bx;
*mx = regs.x.cx;
*my = regs.x.dx;
return mouse_click_nb;
}
int watch_mouse(int *mx, int *my)
{
union REGS regs;
int mouse_button;
regs.x.ax = WATCH_MOUSE;
regs.x.bx = 0;
int86(0x33, ®s, ®s);
mouse_button = regs.x.bx & 0x0001;
*mx = regs.x.cx;
*my = regs.x.dx;
return mouse_button;
}
void init_mouse(void)
{
union REGS regs;
f_mouse_exist = 'N';
f_mouse_hidden = 'Y';
regs.x.ax = INIT_MOUSE;
if (int86(0x33, ®s, ®s) == 0)
return;
f_mouse_exist = 'Y';
show_mouse();
regs.x.ax = POSIT_MOUSE;
regs.x.cx = 0;
regs.x.dx = 0;
int86(0x33, ®s, ®s);
return;
}
void end_mouse(void)
{
hide_mouse();
return;
} |