kolibrios/programs/games/checkers/trunk/dosmouse.h
2011-01-30 10:48:08 +00:00

173 lines
2.9 KiB
C++

#ifndef _INCLUDE_DOS_MOUSE
#define _INCLUDE_DOS_MOUSE
#include <dos.h>
inline int GetMouseStatus()
{
int a, b;
_AX = 0;
geninterrupt(0x33);
a = _AX; b = _BX;
if (!a) return 0;
else return b;
}
class TCursorVisible
{
public:
TCursorVisible(int s = 1) : visible(1) {if (!s) Hide();}
~TCursorVisible() {Show();}
int IsShowed() const {return visible;}
int IsHidden() const {return !visible;}
int Show()
{
if (!visible) {_AX = 1; geninterrupt(0x33); visible = 1; return 1;}
else return 0;
}
int Hide()
{
if (visible) {_AX = 2; geninterrupt(0x33); visible = 0; return 1;}
else return 0;
}
int Set(int v) {return v ? Show() : Hide();}
private:
int visible;
public:
class T_C
{
public:
~T_C() {Hide();}
int IsShowed() const {return visible;}
int IsHidden() const {return !visible;}
int Show()
{
if (!visible) {_AX = 1; geninterrupt(0x33); visible = 1; return 1;}
else return 0;
}
int Hide()
{
if (visible) {_AX = 2; geninterrupt(0x33); visible = 0; return 1;}
else return 0;
}
int Set(int v) {return v ? Show() : Hide();}
private:
T_C() : visible(0) {}
friend class TCursorVisible;
int visible;
};
static T_C C;
};
extern int MouseStatus;
inline void SetShowCursor(int show)
{
if (MouseStatus)
{
_AX = show ? 1 : 2;
geninterrupt(0x33);
}
}
inline void ShowCursor()
{
if (MouseStatus)
{
_AX = 1;
geninterrupt(0x33);
}
}
inline void HideCursor()
{
if (MouseStatus)
{
_AX = 2;
geninterrupt(0x33);
}
}
inline int PosCursor(int &x, int &y)
{
if (MouseStatus)
{
int xx, yy, r;
_AX = 3;
geninterrupt(0x33);
xx = _CX; yy = _DX;
r = _BX;
x = xx; y = yy;
return r;
}
else return 0;
}
inline int SetPosCursor(int x, int y)
{
if (MouseStatus)
{
_AX = 4; _CX = x; _DX = y;
geninterrupt(0x33);
return _BX;
}
else return 0;
}
inline int GetButtonDown(int n, int &x, int &y)
{
if (MouseStatus)
{
int xx, yy, r;
_AX = 5; _BX = n;
geninterrupt(0x33);
xx = _CX; yy = _DX;
r = _BX;
x = xx; y = yy;
return r;
}
else return 0;
}
inline int GetButtonUp(int n, int &x, int &y)
{
if (MouseStatus)
{
int xx, yy, r;
_AX = 6; _BX = n;
geninterrupt(0x33);
xx = _CX; yy = _DX;
r = _BX;
x = xx; y = yy;
return r;
}
else return 0;
}
inline void BoundCursorX(int x1, int x2)
{
if (MouseStatus)
{
_AX = 7; _CX = x1; _DX = x2;
geninterrupt(0x33);
}
}
inline void BoundCursorY(int y1, int y2)
{
if (MouseStatus)
{
_AX = 8; _CX = y1; _DX = y2;
geninterrupt(0x33);
}
}
int MouseStatus = GetMouseStatus();
TCursorVisible::T_C TCursorVisible::C;
#endif //_INCLUDE_DOS_MOUSE