Category : Files from Magazines
Archive   : ITP9005.ZIP
Filename : MOUSE.PAS

 
Output of file : MOUSE.PAS contained in archive : ITP9005.ZIP
UNIT Mouse;

{Program: Master Mouse Routine Library}

INTERFACE

USES DOS;

CONST

{Button press definitions}

PrL = 1;
PrR = 2;
PrLr = 3;
PrM = 4;
PrLM = 5;
PrMR = 6;
PrAll = 7;
PrNone = 0;

{Button definitions}

ButtonLeft = 0;
ButtonRight = 1;
ButtonMiddle = 2;


FUNCTION ThereIsAMouse: Boolean;
FUNCTION MouseReset: Boolean;
FUNCTION GetMouseStatus
(VAR MPosX, MPosY: Byte): Byte;

PROCEDURE ClearButton (Button: Byte);
PROCEDURE MouseOn;
PROCEDURE MouseOff;
PROCEDURE SetMouseSoftCursor
(MouseChar, MouseFGColor, MouseBGColor: Byte);

IMPLEMENTATION

CONST
MouseIntr = $33;

VAR
MouseVisible : Boolean;
MHMax, MVMax, MHCell, MVCell : Word;
Regs : Registers;

PROCEDURE MouseHandler (A, B, C, D: Byte);
BEGIN
WITH Regs DO
BEGIN
ax := A;
bx := B;
cx := C;
dx := D;
Intr(MouseIntr, Regs)
END
END;

FUNCTION GetButtonUpStatus
(Button: Byte;VAR MPosX, MPosY: Word): Boolean;

BEGIN
WITH Regs DO
BEGIN
ax := 6;
bx := Button;
MouseHandler(ax, bx, 0, 0);
MPosX := cx DIV MHCell + 1;
MPosY := dx DIV MVCell + 1;
IF ax = 0 THEN
GetButtonUpStatus := TRUE
ELSE
GetButtonUpStatus := FALSE
END
END;

PROCEDURE ClearButton (Button: Byte);
VAR
MPosX,MPosY: Word;

BEGIN
REPEAT UNTIL
GetButtonUpStatus(Button, MPosX,MPosY)
END;

FUNCTION GetMouseStatus
(VAR MPosX, MPosY: Byte): Byte;
BEGIN
WITH Regs DO
BEGIN
ax := 3;
MouseHandler(ax, 0, 0, 0);
GetMouseStatus := bx;
MPosX := cx DIV MHCell + 1;
MPosY := dx DIV MVCell + 1
END
END;

PROCEDURE MouseOff;
BEGIN
IF MouseVisible THEN
BEGIN
MouseHandler(2, 0, 0, 0);
MouseVisible := FALSE
END
END;

PROCEDURE MouseOn;
BEGIN
IF NOT MouseVisible THEN
BEGIN
MouseHandler(1, 0, 0, 0);
MouseVisible := TRUE
END
END;

FUNCTION MouseReset: Boolean;
BEGIN
MHMax := 639; {Max virtual horizontal pos}
MVMax := 199; {Max virtual vertical pos}
MHCell := 8; {Mouse horizontal cell width}
MVCell := 8; {Mouse vertical cell height}
MouseHandler(0, 0, 0, 0);
IF Regs.ax = 0 THEN
MouseReset := FALSE
ELSE
MouseReset := TRUE;
MouseVisible := FALSE
END;

PROCEDURE SetMouseSoftCursor
(MouseChar, MouseFGColor, MouseBGColor: Byte);
BEGIN
MouseOn;
Regs.ax := 10;
Regs.bx := 0; {Select software cursor}
{Screen Mask Value (don't change character)}
Regs.cx := $8800;
Regs.dx := $8800 + MouseBGColor * 4096 +
MouseFGColor * 256 + MouseChar;
Intr($33,Regs);
MouseOff
END;

FUNCTION ThereIsAMouse: Boolean;
CONST
IRET = 207;
VAR
MouseSegment : Word ABSOLUTE $0000:$00CE;
MouseOffset : Word ABSOLUTE $0000:$00CC;
MouseInstruction: Byte;
BEGIN
IF (MouseSegment = 0) AND
(MouseOffset = 0) THEN
ThereIsAMouse := FALSE
ELSE
BEGIN
MouseInstruction :=
MEM[MouseSegment:MouseOffset];
IF MouseInstruction = IRET THEN
ThereIsAMouse := FALSE
ELSE
ThereIsAMouse := TRUE
END
END;

{No initialization section}

END.


  3 Responses to “Category : Files from Magazines
Archive   : ITP9005.ZIP
Filename : MOUSE.PAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/