home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Virtual Reality Homebrewer's Handbook
/
vr.iso
/
vroom
/
msmouse.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-03-19
|
9KB
|
360 lines
Unit MSMOUSE;
interface
uses dos;
const MouseInterrupt = 51;
type
GraphicsPointerDeclaration = ARRAY[1..34] OF WORD;
(* RECORD
screen_mask: ARRAY[1..16] OF WORD;
cursor_mask: ARRAY[1..16] OF WORD;
horizontal_hotspot_offset: INTEGER;
vertical_hotspot_offset: INTEGER
END; *)
const
Standard_Arrow_Cursor : GraphicsPointerDeclaration = (
(* AND screen mask *)
$03FFF, (* 0011111111111111 *)
$01FFF, (* 0001111111111111 *)
$00FFF, (* 0000111111111111 *)
$007FF, (* 0000011111111111 *)
$003FF, (* 0000001111111111 *)
$001FF, (* 0000000111111111 *)
$000FF, (* 0000000011111111 *)
$0007F, (* 0000000001111111 *)
$0003F, (* 0000000000111111 *)
$0003F, (* 0000000000111111 *)
$001FF, (* 0000000111111111 *)
$010FF, (* 0001000011111111 *)
$030FF, (* 0011000011111111 *)
$0F87F, (* 1111100001111111 *)
$0F87F, (* 1111100001111111 *)
$0FC7F, (* 1111110001111111 *)
(* XOR cursor mask *)
$00000, (* 0000000000000000 *)
$04000, (* 0100000000000000 *)
$06000, (* 0110000000000000 *)
$07000, (* 0111000000000000 *)
$07800, (* 0111100000000000 *)
$07C00, (* 0111110000000000 *)
$07E00, (* 0111111000000000 *)
$07F00, (* 0111111100000000 *)
$07F80, (* 0111111110000000 *)
$07E00, (* 0111111011000000 *)
$06C00, (* 0110110000000000 *)
$04600, (* 0100011000000000 *)
$00600, (* 0000011000000000 *)
$00300, (* 0000001100000000 *)
$00300, (* 0000001100000000 *)
$00000, (* 0000000000000000 *)
(* horizontal hotspot offset *)
0,
(* vertical hotspot offset *)
0);
Inverted_Arrow_Cursor : GraphicsPointerDeclaration=(
$0FC7F, (* 1111110001111111 *)
$0F87F, (* 1111100001111111 *)
$0F87F, (* 1111100001111111 *)
$030FF, (* 0011000011111111 *)
$010FF, (* 0001000011111111 *)
$001FF, (* 0000000111111111 *)
$0003F, (* 0000000000111111 *)
$0003F, (* 0000000000111111 *)
$0007F, (* 0000000001111111 *)
$000FF, (* 0000000011111111 *)
$001FF, (* 0000000111111111 *)
$003FF, (* 0000001111111111 *)
$007FF, (* 0000011111111111 *)
$00FFF, (* 0000111111111111 *)
$01FFF, (* 0001111111111111 *)
$03FFF, (* 0011111111111111 *)
$00000, (* 0000000000000000 *)
$00300, (* 0000001100000000 *)
$00300, (* 0000001100000000 *)
$00600, (* 0000011000000000 *)
$04600, (* 0100011000000000 *)
$06C00, (* 0110110000000000 *)
$07E00, (* 0111111011000000 *)
$07F80, (* 0111111110000000 *)
$07F00, (* 0111111100000000 *)
$07E00, (* 0111111000000000 *)
$07C00, (* 0111110000000000 *)
$07800, (* 0111100000000000 *)
$07000, (* 0111000000000000 *)
$06000, (* 0110000000000000 *)
$04000, (* 0100000000000000 *)
$00000, (* 0000000000000000 *)
1, 16);
Hand_Cursor : GraphicsPointerDeclaration=(
$0E1FF, (* 1110000111111111 *)
$0E1FF, (* 1110000111111111 *)
$0E1FF, (* 1110000111111111 *)
$0E1FF, (* 1110000111111111 *)
$0E1FF, (* 1110000111111111 *)
$0E000, (* 1110000000000000 *)
$0E000, (* 1110000000000000 *)
$0E000, (* 1110000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$01E00, (* 0001111000000000 *)
$01200, (* 0001001000000000 *)
$01200, (* 0001001000000000 *)
$01200, (* 0001001000000000 *)
$01200, (* 0001001000000000 *)
$013FF, (* 0001001111111111 *)
$01249, (* 0001001001001001 *)
$01249, (* 0001001001001001 *)
$0F249, (* 1111001001001001 *)
$09001, (* 1001000000000001 *)
$09001, (* 1001000000000001 *)
$09001, (* 1001000000000001 *)
$08001, (* 1000000000000001 *)
$08001, (* 1000000000000001 *)
$08001, (* 1000000000000001 *)
$0FFFF, (* 1111111111111111 *)
5, 0);
Hourglass_Cursor : GraphicsPointerDeclaration=(
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$08001, (* 1000000000000001 *)
$0C003, (* 1100000000000011 *)
$0E007, (* 1110000000000111 *)
$0F00F, (* 1111000000001111 *)
$0E007, (* 1110000000000111 *)
$0C003, (* 1100000000000011 *)
$08001, (* 1000000000000001 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
$0FFFF, (* 1111111111111111 *)
$00000, (* 0000000000000000 *)
$07FFE, (* 0111111111111110 *)
$06006, (* 0110000000000110 *)
$0300C, (* 0011000000001100 *)
$01818, (* 0001100000011000 *)
$00C30, (* 0000110000110000 *)
$00660, (* 0000011001100000 *)
$003C0, (* 0000001111000000 *)
$00660, (* 0000011001100000 *)
$00C30, (* 0000110000110000 *)
$01998, (* 0001100110011000 *)
$033CC, (* 0011001111001100 *)
$067E6, (* 0110011111100110 *)
$07FFE, (* 0111111111111110 *)
$00000, (* 0000000000000000 *)
$00000, (* 0000000000000000 *)
7, 7 );
type MouseRegPack = registers;
function InitMouse: integer;
procedure ShowMouse;
procedure HideMouse;
function MousePosition(var MouseX, MouseY: integer): integer;
procedure SetMousePosition(MouseX, MouseY: integer);
function MousePress(Button: integer; var Count, LastX, LastY: integer): integer;
function MouseRelease(Button: integer; var Count, LastX, LastY: integer ): integer;
procedure SetXRange(MinX, MaxX: integer);
procedure SetYRange(MinY, MaxY: integer);
procedure SetGraphicsCursor(thiscursor : GraphicsPointerDeclaration);
procedure SetTextCursor(HardwareCursor: boolean; ScreenMaskStart, CursorMaskStop: integer);
procedure ReadMouseCounter(var CountX, CountY: integer);
procedure SetCallMask(CallMask, HandlerSeg, HandlerOfs : integer);
procedure LightPenEmulateOn;
procedure LightPenEmulateOff;
implementation
function Mouse_Available : boolean;
begin
if InitMouse=0 then Mouse_Available:=false else Mouse_Available:=true;
end;
function InitMouse: integer;
var r: MouseRegPack;
begin
r.AX := 0;
Intr(MouseInterrupt,r);
InitMouse := r.AX
end;
procedure ShowMouse;
var r: MouseRegPack;
begin
r.AX := 1;
Intr(MouseInterrupt,r);
end;
procedure HideMouse;
var r: MouseRegPack;
begin
r.AX := 2;
Intr(MouseInterrupt,r)
end;
function MousePosition(var MouseX, MouseY: integer): integer;
var r: MouseRegPack;
begin
r.AX := 3;
Intr(MouseInterrupt,r);
MouseX := r.CX;
MouseY := r.DX;
MousePosition := r.BX
end;
procedure SetMousePosition(MouseX, MouseY: integer);
var r: MouseRegPack;
begin
r.AX := 4;
r.CX := MouseX;
r.DX := MouseY;
Intr(MouseInterrupt,r)
end;
function MousePress(Button: integer; var Count, LastX, LastY: integer): integer;
var r: MouseRegPack;
begin
r.AX := 5;
r.BX := Button;
Intr(MouseInterrupt,r);
MousePress := r.AX;
Count := r.BX;
LastX := r.CX;
LastY := r.DX
end;
function MouseRelease(Button: integer; var Count, LastX, LastY: integer ): integer;
var r: MouseRegPack;
begin
r.AX := 6;
r.BX := Button;
Intr(MouseInterrupt, r);
MouseRelease := r.AX;
Count := r.BX;
LastX := r.CX;
LastY := r.DX
end;
procedure SetXRange(MinX, MaxX: integer);
var r: MouseRegPack;
begin
r.AX := 7;
r.CX := MinX;
r.DX := MaxX;
Intr(MouseInterrupt,r)
end;
procedure SetYRange(MinY, MaxY: integer);
var r: MouseRegPack;
begin
r.AX := 8;
r.CX := MinY;
r.DX := MaxY;
Intr(MouseInterrupt,r)
end;
procedure SetGraphicsCursor(thiscursor : GraphicsPointerDeclaration);
var r: MouseRegPack;
begin
r.AX := 9;
r.BX := thiscursor[33];
r.CX := thiscursor[34];
r.DX := ofs(thiscursor);
r.ES := seg(thiscursor);
Intr(MouseInterrupt,r)
end;
procedure SetTextCursor(HardwareCursor: boolean; ScreenMaskStart, CursorMaskStop: integer);
var r: MouseRegPack;
begin
r.AX := 10;
r.BX := ord(HardwareCursor);
r.CX := ScreenMaskStart;
r.DX := CursorMaskStop;
Intr(MouseInterrupt,r)
end;
procedure ReadMouseCounter(var CountX, CountY: integer);
var r: MouseRegPack;
begin
r.AX := 11;
Intr(MouseInterrupt,r);
CountX := r.CX;
CountY := r.DX
end;
procedure SetCallMask(CallMask, HandlerSeg, HandlerOfs : integer);
var r: MouseRegPack;
begin
r.AX := 12;
r.CX := CallMask;
r.ES := HandlerSeg;
r.DX := HandlerOfs;
Intr(MouseInterrupt,r)
end;
procedure LightPenEmulateOn;
var r: MouseRegPack;
begin
r.AX := 13;
Intr(MouseInterrupt,r)
end;
procedure LightPenEmulateOff;
var r: MouseRegPack;
begin
r.AX := 14;
Intr(MouseInterrupt,r)
end;
procedure SetRatio(RatioX, RatioY: integer);
var r: MouseRegPack;
begin
r.AX := 15;
r.CX := RatioX;
r.DX := RatioY;
Intr(MouseInterrupt,r)
end;
end.