[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]
UNIT AMOUSE; (* mouse/keyboard Routines *)
INTERFACE
CONST
MouseInstalled : Boolean = FALSE;
FUNCTION InitMouse : WORD;
PROCEDURE ShowMouseCursor;
PROCEDURE HideMouseCursor;
PROCEDURE SetMouseWindow (X1, Y1, X2, Y2 : WORD);
PROCEDURE GetMousePos (VAR X, Y, button : WORD);
PROCEDURE SetMousePos (X, Y : WORD);
PROCEDURE GetButtonPressInfo (VAR X, Y, Button, NumberOfPresses : WORD);
PROCEDURE GetButtonRelInfo (VAR X, Y, Button, NumberOfReleases : WORD);
PROCEDURE KeyOrButton (VAR Code, X, Y, Button : WORD; VAR Ch : CHAR);
FUNCTION KEYPRESSED : BOOLEAN;
FUNCTION MousePRESSED : BOOLEAN;
FUNCTION MouseORKeyPRESSED : BOOLEAN;
IMPLEMENTATION
USES DOS;
CONST
MIO = $33; (* Mouse Services *)
KBIO = $16; (* BIOS Keyboard *)
VAR
X, Y : WORD;
reg : REGISTERS;
FUNCTION KEYPRESSED : BOOLEAN; Assembler;
ASM
PUSH DS
MOV AX, 40h
MOV DS, AX
CLI
MOV AX, [1Ah]
CMP AX, [1Ch]
STI
MOV AX, 0
JZ @NoPress
INC AX
@NoPress :
POP DS
END;
FUNCTION PollKey (VAR Status : WORD) : WORD;
VAR s : WORD;
BEGIN
asm
MOV AH, 01
INT KBIO
MOV @Result, AX
LAHF
AND AX, 64
MOV S, AX
END;
Status := s;
END;
FUNCTION MousePressed : BOOLEAN;
VAR B : WORD;
BEGIN
Asm
MOV AX, $0003
INT $33
MOV B, BX
END;
MousePressed := (B <> 0);
END;
FUNCTION MouseORKeyPressed : BOOLEAN;
VAR B : WORD;
BEGIN
Asm
MOV AX, $0003
INT $33
MOV B, BX
END;
MouseORKeyPressed := (B <> 0) OR KeyPressed;
END;
PROCEDURE KeyOrButton (VAR Code, X, Y, Button : WORD; VAR Ch : CHAR);
(* wait for key or mouse click and returns data *)
VAR Status : WORD;
BEGIN
REPEAT
Code := PollKey (Status);
GetMousePos (X, Y, Button);
UNTIL (Button <> 0) OR (Status = 0);
IF (LO (Status) = 0) AND (HI (Status) <> 0) THEN
Ch := CHR ( HI (Status) + 128 )
ELSE
Ch := CHR (LO (Status) );
END;
FUNCTION InitMouse : WORD;
BEGIN
Asm
MOV AX, $0000
INT MIO
MOV @Result, AX
END;
END;
PROCEDURE ShowMouseCursor; Assembler;
Asm
MOV AX, $0001
INT MIO
END;
PROCEDURE HideMouseCursor; Assembler;
Asm
MOV AX, $0002
INT MIO
END;
PROCEDURE GetMousePos (VAR X, Y, Button : WORD);
VAR X1, Y1, b : WORD;
BEGIN
Asm
MOV AX, $0003
INT MIO
MOV b, BX
MOV X1, CX
MOV Y1, DX
END;
X := X1;
Y := Y1;
Button := b;
END;
PROCEDURE SetMousePos (X, Y : WORD); Assembler;
Asm
MOV AX, $0004
MOV CX, X
MOV DX, Y
INT MIO
END;
PROCEDURE GetButtonPressInfo (VAR X, Y, Button, NumberOfPresses : WORD);
BEGIN
reg. AX := $0005;
reg. BX := Button;
INTR (MIO, reg);
Button := reg. AX;
X := reg. CX;
Y := reg. DX;
NumberOfPresses := reg. BX
END;
PROCEDURE GetButtonRelInfo (VAR X, Y, Button, NumberOfReleases : WORD);
BEGIN
reg. AX := $0006;
reg. BX := Button;
INTR (MIO, reg);
Button := reg. AX;
X := reg. CX;
Y := reg. DX;
NumberOfReleases := reg. BX
END;
PROCEDURE SetMouseWindow (X1, Y1, X2, Y2 : WORD);
BEGIN
reg. AX := $0007;
reg. CX := X1;
reg. DX := X2;
INTR ($33, reg);
INC (reg. AX, 1);
reg. CX := Y1;
reg. DX := Y2;
INTR (MIO, reg)
END;
BEGIN
MouseInstalled := (InitMouse <> 0);
END.
[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]