/* ------------- mouse.c ------------- */ #include "dflat.h" static union REGS regs; static void near mouse(int m1,int m2,int m3,int m4) { regs.x.dx = m4; regs.x.cx = m3; regs.x.bx = m2; regs.x.ax = m1; int86(MOUSE, ®s, ®s); } /* ---------- reset the mouse ---------- */ void resetmouse(void) { mouse(0,0,0,0); } /* ----- test to see if the mouse driver is installed ----- */ int mouse_installed(void) { unsigned char far *ms; ms = MK_FP(peek(0, MOUSE*4+2), peek(0, MOUSE*4)); return (SCREENWIDTH <= 80 && ms != NULL && *ms != 0xcf); } /* ------ return true if mouse buttons are pressed ------- */ int mousebuttons(void) { if (mouse_installed()) { mouse(3,0,0,0); return regs.x.bx & 3; } return 0; } /* ---------- return mouse coordinates ---------- */ void get_mouseposition(int *x, int *y) { if (mouse_installed()) { mouse(3,0,0,0); *x = regs.x.cx/8; *y = regs.x.dx/8; if (SCREENWIDTH == 40) *x /= 2; } } /* -------- position the mouse cursor -------- */ void set_mouseposition(int x, int y) { if (mouse_installed()) { if (SCREENWIDTH == 40) x *= 2; mouse(4,0,x*8,y*8); } } /* --------- display the mouse cursor -------- */ void show_mousecursor(void) { if (mouse_installed()) mouse(1,0,0,0); } /* --------- hide the mouse cursor ------- */ void hide_mousecursor(void) { if (mouse_installed()) mouse(2,0,0,0); } /* --- return true if a mouse button has been released --- */ int button_releases(void) { if (mouse_installed()) { mouse(6,0,0,0); return regs.x.bx; } return 0; } /* ----- set mouse travel limits ------- */ void set_mousetravel(int minx, int maxx, int miny, int maxy) { if (mouse_installed()) { if (SCREENWIDTH == 40) { minx *= 2; maxx *= 2; } mouse(7, 0, minx*8, maxx*8); mouse(8, 0, miny*8, maxy*8); } }