[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]
Unit Mouse;
{ Copyright (c) 1991, Crazy Systems Software, Inc. }
{$G+}
{
*************************************************
* *
* Mouse in Text Mode Interface Unit *
* for Borland Pascal 7.0 *
* *
* Completely written by Andrew Eigus *
*************************************************
}
interface
type
TMouseWinRect = record
X1, Y1, X2, Y2 : word
end;
TMouseParamTable = record
BaudRate, { Baud rate / 100 }
Emulation,
ReportRate, { Report rate }
FirmRev,
ZeroWord, { Should be zero }
Port, { Com Port used }
PhysButtons, { Physical buttons }
LogButtons : word { Logical buttons }
end;
TMouseRec = record
Keys,
Hzints,
Page,
XCoord,
YCoord,
HSpeed,
VSpeed,
DSpeed : word;
Column,
Row : byte;
W : TMouseWinRect;
ButtonClicked : byte;
ParamTable : TMouseParamTable
end;
const
LeftButton = 1;
MidButton = 4;
RightButton = 2;
mNoInts = 0;
m30HzInts = 1;
m50HzInts = 2;
m100HzInts = 3;
m200HzInts = 4;
var
M : TMouseRec;
MouseInstalled : boolean;
function InstallMouse : boolean;
function GetMouseInfo(var M : TMouseRec) : byte;
function ButtonReleased : boolean;
procedure SetMouseCursor(CursorOn : boolean);
procedure SetMouseCursorType(HotSpotX, HotSpotY : word; var CursorImage);
procedure MoveMouseTo(XCoord, YCoord : integer);
procedure SetMouseWindow(X1, Y1, X2, Y2 : word);
procedure GetMouseSpeed;
procedure SetMouseSpeed(HorSpeed, VrtSpeed, DblSpeed : integer);
procedure SetMouseInts(Hz : word);
function GetMousePage : word;
procedure SetMousePage(Page : word);
procedure UninstallMouse;
implementation
Function InstallMouse; assembler;
Asm
XOR AX,AX { zero function }
INT 33h
CMP AL,0
JE @@1
MOV MouseInstalled,True
LEA DI,M
MOV [ES:DI](TMouseRec).Keys,0
MOV [ES:DI](TMouseRec).Keys,BX
PUSH ES
PUSH DI
CALL GetMouseInfo
CALL GetMousePage
CALL GetMouseSpeed
MOV [ES:DI](TMouseRec).W.X1,1
MOV [ES:DI](TMouseRec).W.Y1,1
MOV [ES:DI](TMouseRec).W.X2,639
MOV [ES:DI](TMouseRec).W.Y2,199
MOV AX,246Ch
LEA DX,M.ParamTable
INT 33h
MOV AL,True
@@1:
End; { InstallMouse }
Function GetMouseInfo; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,0003h
INT 33h
LES DI,M
MOV [ES:DI](TMouseRec).XCoord,CX
SHR CX,3
INC CL
MOV [ES:DI](TMouseRec).Column,CL
MOV [ES:DI](TMouseRec).YCoord,DX
SHR DX,3
INC DL
MOV [ES:DI](TMouseRec).Row,DL
MOV [ES:DI](TMouseRec).ButtonClicked,BL
MOV AL,BL { LeftButton, MidButton or RightButton }
@@1:
End; { GetMouseInfo }
Function ButtonReleased; assembler;
Asm
LEA DI,M
PUSH ES
PUSH DI
CALL GetMouseInfo
MOV AL,True
CMP BL,0
JE @@1
MOV AL,False
@@1:
End; { ButtonReleased }
Procedure SetMouseCursor; assembler;
Asm
CMP MouseInstalled,True
JNE @@2
MOV AX,0001h
CMP CursorOn,True
JE @@1
MOV AX,0002h
@@1:
INT 33h
@@2:
End; { SetMouseCursor }
Procedure SetMouseCursorType; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,000Ah
MOV BX,HotSpotX
MOV CX,HotSpotY
LES DX,CursorImage
INT 33h
@@1:
End; { SetMouseCursorType }
Procedure MoveMouseTo; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,0004h
MOV CX,XCoord
MOV DX,YCoord
INT 33h
@@1:
End; { MoveMouseTo }
Procedure SetMouseWindow; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
LEA DI,M
MOV AX,0007h
MOV CX,X1
MOV [ES:DI](TMouseRec).W.X1,CX
MOV DX,X2
MOV [ES:DI](TMouseRec).W.X2,DX
INT 33h
MOV AX,0008h
MOV CX,Y1
MOV [ES:DI](TMouseRec).W.Y1,CX
MOV DX,Y2
MOV [ES:DI](TMouseRec).W.Y2,DX
INT 33h
@@1:
End; { SetMouseWindow }
Procedure GetMouseSpeed; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,001Bh
INT 33h
LEA DI,M
MOV [ES:DI](TMouseRec).HSpeed,BX
MOV [ES:DI](TMouseRec).VSpeed,CX
MOV [ES:DI](TMouseRec).DSpeed,DX
@@1:
End; { GetMouseSpeed }
Procedure SetMouseSpeed; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,001Ah
MOV BX,HorSpeed
MOV CX,VrtSpeed
MOV DX,DblSpeed
INT 33h
CALL GetMouseSpeed
@@1:
End; { SetMouseSpeed }
Procedure SetMouseInts; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,001Ch
MOV BX,Hz
INT 33h
@@1:
End; { SetMouseInts }
Function GetMousePage; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,001Eh
INT 33h
LEA DI,M
MOV [ES:DI](TMouseRec).Page,BX
MOV AX,BX
@@1:
End; { GetMousePage }
Procedure SetMousePage; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,001D
MOV BX,Page
INT 33h
CALL GetMousePage
@@1:
End; { SetMousePage }
Procedure UninstallMouse; assembler;
Asm
CMP MouseInstalled,True
JNE @@1
MOV AX,0020h
INT 33h
@@1:
End; { UninstallMouse }
Begin
MouseInstalled := False;
FillChar(M, SizeOf(TMouseRec), 0)
End. { Mouse }
{---now the demo program---}
Program MouDemo;
uses Crt, Mouse;
Begin
if InstallMouse then
begin
ClrScr;
SetMouseCursor(True);
WriteLn('Mouse is installed.');
WriteLn('Click left mouse button in the upper left corner of your ' +
'screen to quit.');
repeat
GetMouseInfo(M);
until (M.ButtonClicked = LeftButton) and (M.Column = 1) and (M.Row = 1);
Write('Waiting to release left button...');
repeat until ButtonReleased;
Write(#13);
ClrEol;
SetMouseCursor(False);
UninstallMouse
end else WriteLn('Mouse is NOT installed.')
End.
[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]