unit cgmouse;
interface
uses crt,dos;
var
regs : registers;
type
onoff = (on,off);
function initmouse : boolean;
procedure mousecursor(com : onoff);
function getmousex : integer;
function getmousey : integer;
procedure setmouse(x,y : integer);
function button : integer;
procedure mwindow(x1,y1,x2,y2:integer);
PROCEDURE set_pointer( hotx, hoty : Word;image : POINTER );
PROCEDURE HideRegion( top, left, bottom, right : Word );
implementation
FUNCTION PSeg( x : POINTER ) : Word; INLINE( $5a/$58 );
FUNCTION POfs( x : POINTER ) : Word; INLINE( $58/$5a );
function initmouse: boolean;
begin
regs.ax:=$00;
intr($33,regs);
if regs.ax=0 then
initmouse := false;
if regs.ax=-1 then
initmouse := true;
end;
procedure mousecursor(com : onoff);
begin
if com = off then
begin
regs.ax := $02;
intr($33,regs);
end;
if com = on then
begin
regs.ax := $01;
intr($33,regs);
end;
end;
function getmousex : integer;
begin
regs.ax := $03;
intr($33,regs);
getmousex := regs.cx;
end;
function getmousey : integer;
begin
regs.ax := $03;
intr($33,regs);
getmousey := regs.dx;
end;
procedure setmouse(x,y : integer);
begin
regs.ax := $04;
regs.dx := y;
regs.cx := x;
intr($33,regs);
end;
function button : integer;
begin
regs.ax := $03;
intr($33,regs);
button := regs.bx;
end;
procedure mwindow(x1,y1,x2,y2 : integer);
begin
regs.ax := $08;
regs.cx := y1;
regs.dx := y2;
intr($33,regs);
regs.ax := $07;
regs.cx := x1;
regs.dx := x2;
intr($33,regs);
end;
{==============================================================
ms_set_graphPointer real-mode mouse function 9
==============================================================
hotx, hoty (+/-16) are the hot spot coordinates relative to
the upper-left of the pointer image.
image = pointer to the mouse pointer image bitmap
The first 32 bytes define the screen mask
The last 32 bytes define the pointer mask
The pointer is drawn by:
AND screen mask with pixels under the pointer,
XOR pointer mask with result
In mode 6, each bit defines the color of a pixel.
In modes 4 and 5, each pair of bits defines the color of a
pixel.
}
PROCEDURE set_pointer( hotx, hoty : Word;
image : POINTER );
BEGIN
regs.AX := 9;
regs.BX := hotx;
regs.CX := hoty;
regs.DX := POfs(image);
regs.ES := PSeg(image);
Intr($33,regs);
END;
PROCEDURE HideRegion( top, left, bottom, right : Word );
VAR Regs : Registers;
BEGIN
Regs.AX := 16;
Regs.CX := left;
Regs.DX := top;
Regs.SI := right;
Regs.DI := bottom;
Intr($33,Regs);
END;
end.
               (
geocities.com/~franzglaser)