home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
PASCAL
/
WCTUNITS.ZIP
/
MOUSE.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-08-03
|
26KB
|
821 lines
UNIT Mouse;
{ Mouse unit for Turbo Pascal.
The comments in this unit were basically copied directly
from the Advanced MS Dos Programing book, the section on
the Microsoft Mouse Driver, which was the source of all
the mouse interrupt functions and their parameters.
}
INTERFACE
USES
Dos;
CONST
LeftButton = 1;
RightButton = 2;
CenterButton = 4;
AnyButton = 7;
var
mouseon: boolean;
PROCEDURE InitMouse(VAR Buttons : word; VAR Err : boolean);
{ Initializes the mouse driver.
Call: nothing
Returns: Buttons = number of mouse buttons
Err = false if mouse support is available, true otherwise
Note: * After a call to this function the driver is initialized to the
following state:
- Mouse pointer at screen center and hidden.
- Display page is set to zero.
- Mouse pointer shape set to default arrow shape in graphics modes,
or reverse block in text modes.
- User mouse event handlers are disabled.
- Light pen emulation enabled.
- Mouse sensitivity set to default vales (see SetMouseSense)
- Pointer limits set to entire screen.
- Set mouseon to false
}
PROCEDURE Showmouse;
{ Displays the mouse pointer, and cancels any pointer exclusion area. }
PROCEDURE Hidemouse;
{ Removes the mouse pointer from the screen, but continues to track the
position of the mouse. }
FUNCTION ButtonPressed(Mask : word) : boolean;
{ Returns a true value if the specified button(s) is pressed.
Call: Mask = bit mask of desired button(s)
bit(s) Significance(if set)
0 left button
1 right button
2 center button
3-15 reserved(0)
: True is button is pressed, false otherwise.
Note: * The constants LeftButton, RightButton, CenterButton, and
AnyButton can be used for the bit masking. They equal 1, 2,
4, and 7 respectivly.
}
PROCEDURE GetMousePosition(VAR Buttons, Horiz, Vert : word);
{ Returns the current mouse button status and pointer position.
Call: nothing
Returns: Buttons = mouse button status
Horiz = horizontal (X) coordinate
Vert = vertical (Y) coordinate
Note: * Coordinates are in pixels regardless of the current display mode.
Position (0,0) is the upper left corner of the screen.
}
FUNCTION MouseIn(x1,y1,x2,y2: word):boolean;
{ Returns true if mouse is within rectangle with upper-left
corner (x1,y1) and lower-right corner (x2,y2).
}
PROCEDURE SetPointerPosition(Horiz, Vert : word);
{ Set the position of the pointer. The pointer is displayed in the new
position unless it has been hidden using HidePointer or it is an exclusion
area defined by SetPointerExcl.
Call: Horiz = horizontal (X) coordinate
Vert = vertical (Y) coordinate
Returns: nothing
Notes: * Coordinates are in pixels regardless of the current display mode.
Position (0,0) is the upper left corner of the screen.
* The position is adjusted if necessary to lie within the pointer
limits set by SetLimits.
}
PROCEDURE GetPressInfo(Button : word;
VAR Stat, Count, Horiz, Vert : word);
{ Returns the current status of all mouse buttons, and the number of presses
and position of the last press for a specifed mouse button since the last
call to this procedure for that button. The press counter for the button
is reset to zero.
Call: Button = button identifier
0 = left button
1 = right button
2 = center button
: Stat = button status
bit(s) Significance(if set)
0 left button is down
1 right button is down
2 center button is down
3-15 reserved(0)
Count = button press counter
Horiz = horizontal (X) coordinate of last button press
Vert = vertical (Y) coordinate of last button press
}
PROCEDURE GetReleaseInfo(Button : word;
VAR Stat, Count, Horiz, Vert : word);
{ Returns the current status of all mouse buttons, and the number of releases
and position of the last release for a specifed mouse button since the last
call to this procedure for that button. The release counter for the button
is reset to zero.
Call: Button = button identifier
0 = left button
1 = right button
2 = center button
Returns: Stat = button status
bit(s) Significance(if set)
0 left button is down
1 right button is down
2 center button is down
3-15 reserved(0)
Count = button release counter
Horiz = horizontal (X) coordinate of last button release
Vert = vertical (Y) coordinate of last button release
}
PROCEDURE SetLimits(HorMin, HorMax, VerMin, VerMax : word);
{ Limits the mouse pointer to stay within a certian area.
Call: HorMin = Minimum horizontal (X) coordinate
HorMax = Maximum horizontal (X) coordinate
VerMin = Minimum vertical (Y) coordinate
VerMax = Maximum vertical (Y) coordinate
Returns: nothing
Note: * If both HorMin and HorMax are zero then then the previous
horizontal limits remain unchanged; the same is true for
VerMin and VerMax.
}
PROCEDURE SetPointerShape(Horiz, Vert : word; Buffer : pointer);
{ Defines the shape, color, and hot spot of the pointer in graphics modes.
Call: Horiz = hot spot offset from the left
Vert = hot spot offset from the top
Buffer = pointer to mouse pointer image buffer
Returns: nothing
Note: * The pointer image buffer is 64 bytes long. The first 32 bytes
contain a bit mask which is ANDed with the screen image, and the
remaining 32 bytes are then XORed with the screen image.
* The hot spot is relative to the upper left corner of the pointer
image, and each offset must be in the range -16 to 16. In display
modes 4 and 5, the horizontal offset must be an even number.
}
PROCEDURE SetTextPointer(PtrTyp, AND_Str, XOR_End : word);
{ Defines the shape and attributes of the mouse pointer in text modes.
Call: PtrTyp = pointer type
0 = software cursor
1 = hardware cursor
AND_Str = AND mask value (if PtrTyp = 0) or starting line for
cursor (if PtrTyp = 1)
XOR_End = XOR mask value (if PtrTyp = 0) or ending line for
cursor (if PtrTyp = 1)
Returns: nothing
Notes: * If the software text cursor is selected, the masks in AND_Str and
XOR_End are mapped as follows:
Bit(s) Significance
0-7 character code
8-10 foreground color
11 intensity
12-14 background color
15 blink
For Example, the following call would yeild a software cursor
that inverts the foreground and background colors:
SetTextPointer(0, $77FF, $7700);
* When the hardware text cursor is selected, the values in AND_Str
and XOR_End are the starting and ending lines for the blinking
cursor generated by the video adapter. The maximum scan line
depends on the type of adapter and the current display mode.
}
PROCEDURE GetMotionCount(VAR Horiz, Vert : word);
{ Returns the net mouse displacement since the last call to this procedure.
The returned value is in mickeys; a positive number indicates travel to the
right or downwards, a negative number indicates travel to the left or
upwards. One mickey represents approximately 1/200 of an inch of mouse
movement.
Call: nothing
Returns: Horiz = horizontal (X) mickey count
Vert = vertical (Y) mickey count
}
PROCEDURE SetEventHandler(EventMask : word; Handler : pointer);
{ Sets the address and event mask for an application program's mouse event
handler. The handler is called by the mouse drvier whenever the specifed
mouse events occur.
Call: EventMask = event mask
Bit(s) Significance(if set)
0 mouse movement
1 left button pressed
2 left button released
3 right button pressed
4 right button released
5 center button pressed
6 center button released
7-15 reserved(0)
Handler = Pointer to the handler procedure
Returns: nothing
Notes: * The user-defined handler is entered from the mouse driver by a
far call with the registers set up as follows:
AX mouse event flags (see event mask)
BX button state
Bit(s) Significance(if set)
0 left button is down
1 right button is down
2 center button is down
3-15 reserved(0)
CX horizontal (X) pointer coordinate
DX vertical (Y) pointer coordinate
SI last raw vertical mickey count
DI last raw horizontal mickey count
DS mouse driver data segment
* If an event does not generate a call to the user-defined handler
because its bit is not set in the event mask, it is still reported
in the event falgs during calls to the handler for events which
are enabled.
}
PROCEDURE SetLightPen(On_Off : word);
{ Turns the light pen emulation by the mouse driver for IBM BASIC on or off.
A "pen down" condition is created by pressing the left and right mouse
buttons simultaneosly.
Call: On_Off = true to enable or false to disable emulation.
Returns: nothing
}
PROCEDURE SetPointerExcl(HorMin, VerMin, HorMax, VerMax : word);
{ Defines an exclusion area for the mouse pointer. When the mouse pointer
lies within the specified area, it is not displayed.
Call: HorMin = upper left X coordinate
VerMin = upper left Y coordinate
HorMax = lower right X coordinate
VerMax = lower right Y coordinate
Returns: nothing
Note: * The exclusion area is replaced by another call to this
procdure or cancelled by InitMouse and ShowPointer.
}
PROCEDURE SwapEventHandlers(VAR Mask : word; VAR Buffer : pointer);
{ Set the address and event mask for an application program's mouse event
handler and returns the address and event mask for the previous handler.
The newly installed handler is called by the mouse driver whenever the
specified mouse events occur.
Call: Mask = event mask
Bit(s) Significance(if set)
0 mouse movement
1 left button pressed
2 left button released
3 right button pressed
4 right button released
5 center button pressed
6 center button released
7-15 reserved(0)
Handler = Pointer to the handler procedure
Returns: Mask = previous event mask
Handler = pointer to previous handler
Notes: * The notes for SetEventHandler describe the information passed to
the user-defined event handler. Also see SetAltEventHandler.
* Calls to the event handler are disabled with InitMouse or by
setting an event mask of zero.
}
FUNCTION GetSaveStateSize : word;
{ Returns the size of the buffer required to store the current state of the
mouse driver.
Note: * also see SaveDrvrState and RestoreDrvrState.
}
PROCEDURE SaveDrvrState(Buffer : pointer);
{ Saves the mouse driver state in a user buffer. THe minimum size for the
buffer must be determined by GetSaveStateSize.
Call: Buffer = pointer to the user defined buffer.
Returns: nothing
Note: * Use this procedure before executing a child program (Exec), in
case the child aslo uses the mouse. After the Exec call, restore
the previous mouse driver state using RestoreDrvrState.
}
PROCEDURE RestoreDrvrState(Buffer : pointer);
{ Restores the mouse driver state from a user buffer.
Call: Buffer = pointer to the user defined buffer.
Returns: nothing
Note: * The mouse driver state must have been previously saved into the
same buffer with SaveDrvrState. The format of the data in the
buffer in undocumented and subject to change.
}
PROCEDURE SetAltEventHandler(Mask : word; Handler : pointer; VAR Err: boolean);
{ Sets the address and event mask for an application program's mouse event
handler. As many as three handlers with distinct event masks can be
registered with this function. When an event occurs that matches one of the
masks, the corresponding handler is called by the mouse driver.
Call: Mask = event mask
Bit(s) Significance(if set)
0 mouse movement
1 left button pressed
2 left button released
3 right button pressed
4 right button released
5 Shift key pressed during button press or release
6 Ctrl key pressed during button press or release
7 Alt key pressed during button press or release
8-15 reserved(0)
Handler = Pointer to the handler procedure
Returns: Err = false if successful, true otherwise
Notes: * When this procedure is called, at least one of the bits 5, 6, and
7 must be set in Mask.
* The user-defined handler is entered from the mouse driver by a
far call with the registers set up as follows:
AX mouse event flags (see event mask)
BX button state
Bit(s) Significance(if set)
0 left button is down
1 right button is down
2 center button is down
3-15 reserved(0)
CX horizontal (X) pointer coordinate
DX vertical (Y) pointer coordinate
SI last raw vertical mickey count
DI last raw horizontal mickey count
DS mouse driver data segment
* If an event does not generate a call to the user-defined handler
because its bit is not set in the event mask, it is still reported
in the event falgs during calls to the handler for events which
are enabled.
* Calls to the handler are disabled with InitMouse.
* Also see SetEventHandler and SwapEventHandlers.
}
PROCEDURE GetAltEventAdrs(VAR Mask : word; VAR Handler : pointer;
VAR Err : boolean);
{ Returns the address for the mouse event handler matching the specified
event mask.
Call: Mask = event mask
(see SetAltEventHandler)
Returns: Mask = event mask
Handler = pointer to the alternate event handler
Err = false if successful, true if not successful (no handler
installed or event mask does not match any installed
handler.
Note: * SetAltEventHandler allows as many as three event handler with
distinct event masks to be installed. This procedure can be
called to search for a handler that matches a specific event, so
that it can be replaced or disabled.
}
PROCEDURE SetMouseSense(Horiz, Vert, Double : word);
{ Set the number of mickeys per 8 pixels for horizontal and vertical mouse
motion and the threshold speed for doubleing pointer motion on the screen.
One mickey represents approximately 1/200 of an inch of mouse travel.
Call: Horiz = horizontal mickeys (1-32,767; default=8)
Vert = vertical mickeys (1-32,767; default=16)
Double = double speed threshold in mickeys/second (default=64);
Returns: nothing
}
PROCEDURE GetMouseSense(VAR Horiz, Vert, Double : word);
{ Return the current mickeys to pixels ratios for vertical and horizontal
screen movement and the threshold speed for doubling of pointer motion.
Call: nothing
Returns: Horiz = horizontal mickeys (1-32,767; default=8)
Vert = vertical mickeys (1-32,767; default=16)
Double = double speed threshold in mickeys/second (default=64);
}
PROCEDURE SetMouseIntr(Flags : word);
{ Sets the rate at which the mouse driver polls the status of the mouse.
Faster rates provide better resolution in graphics mode but may degrade
the performance of application programs.
Call: Flags = interrupt rate flags
Bit(s) Significance(if set)
0 no interrupts allowed
1 30 interrupts/second
2 50 interrupts/second
3 100 interrupts/second
4 200 interrupts/second
5-15 reserved(0)
Returns: nothing
Notes: * This procedure is applicable for the InPort Mouse only.
* In more than one bit is set in Flags, the lowest order bit
prevails.
}
PROCEDURE SetPointerPage(Page : word);
{ Selects the display page for the mouse pointer.
Call: Page = display page
Returns: nothing
Note: * The valid page numbers depend on the current display mode.
}
FUNCTION GetPointerPage : word;
{ Returns the current display page for the mouse pointer.
}
PROCEDURE DisableMouseDrvr(VAR Handler : pointer; VAR Err : boolean);
{ Disables the mouse driver and returns the address of the previous Int 33H
handler.
Call: nothing
Returns: Handler = pointer to previous Int 33H handler
Err = false if successful, true otherwise
Notes: * When this procedure is called, the mouse driver releases any
interrupt vectors it hase captured OTHER than Int 33H (which may
be Int 10H, Int 71H, and/or Int 74H). The application program
can COMPLETE the process of logically removing the mouse driver
by restoring the original contents of the Int 33H vector with
SetIntVec using the pointer returned by the procedure.
* Also see EnableMouseDrvr.
}
PROCEDURE EnableMouseDrvr;
{ Enables the mouse driver and the servicing fo mouse interrupts.
Call: nothing
Returns: nothing
Note: * Also see DisableMouseDrvr
}
PROCEDURE ResetMouseDrvr(VAR Buttons : word; VAR Err : boolean);
{ Resets the mouse driver and returns driver status. If the mouse pointer was
previously visible, is is removed trom the screen, and any presoiusly
installed user event handlers for mouse events are disabled.
Call: nothing
Returns: Buttons = number of mouse buttons
Err = false if mouse support is available, true otherwise
Note: * This procedure differ from InitMouse in that there is no
initialization of the mouse hardware.
}
PROCEDURE SetMouseLang(LangNumber : word);
{ Selects the language that will be used by the mouse driver for prompts and
error messages.
Call: LangNumber = language number
0 = English
1 = French
2 = Dutch
3 = German
4 = Swedish
5 = Finnish
6 = Spanish
7 = Portuguese
8 = Italian
Returns: nothing
Note: * This procedure is only functional in international versions of
the Microsoft Mouse drive.
}
FUNCTION GetMouseLang : word;
{ Returns the number of the language that is used by the mouse driver for
prompts and error messages.
Call: nothing
Returns: language number (see above)
Note: * This procedure is only functional in international versions of
the Microsoft Mouse drive.
}
PROCEDURE GetMouseInfo(VAR MajVer, MinVer, MouseType, IRQ : word);
{ Returns the mouse driver version number, mouse type, and the IRQ number of
the interrupt used by the mouse adapter.
Call: nothing
Returns: MajVer = major version number (6 for version 6.10, etc.)
MinVer = minor version number (10 for version 6.10, etc.)
MouseType = mouse type
1 = bus mouse
2 = serial mouse
3 = InPort mouse
4 = PS/2 mouse
5 = HP mouse
IRQ = IRQ number
0 = PS/2
2, 3, 4, 5, or 7 = IRQ number
}
IMPLEMENTATION
CONST
MouseInt = $33;
VAR
Reg : Registers;
PROCEDURE InitMouse(VAR Buttons : word; VAR Err : boolean);
{ Iniialize the mouse driver, if present, and return the number of buttons. }
BEGIN
Reg.AX := 0;
intr(MouseInt, Reg);
Buttons := Reg.BX;
IF (Reg.AX = 0) THEN
Err := true
ELSE begin
Err := false;
mouseon:=false;
end
END;
procedure showmouse;
begin
if not mouseon then begin
reg.ax:=1;
intr(mouseint,reg);
mouseon:=true
end
end;
procedure hidemouse;
begin
if mouseon then begin
reg.ax:=2;
intr(mouseint,reg);
mouseon:=false
end
end;
FUNCTION ButtonPressed(Mask : word) : boolean;
BEGIN
Reg.AX := 3;
intr(MouseInt, Reg);
IF (Reg.BX > 0) THEN
ButtonPressed := true
ELSE
ButtonPressed := false;
END;
PROCEDURE GetMousePosition(VAR Buttons, Horiz, Vert : word);
BEGIN
Reg.AX := 3;
intr(MouseInt, Reg);
Buttons := Reg.BX;
Horiz := Reg.CX;
Vert := Reg.DX;
END;
FUNCTION MouseIn(x1,y1,x2,y2: word):boolean;
VAR b,x,y: word;
BEGIN
GetMousePosition(b,x,y);
MouseIn:=(x>=x1) AND (x<=x2) AND (y>=y1) AND (y<=y2)
END;
PROCEDURE SetPointerPosition(Horiz, Vert : word);
BEGIN
Reg.AX := 4;
Reg.CX := Horiz;
Reg.DX := Vert;
intr(MouseInt, Reg);
END;
PROCEDURE GetPressInfo(Button : word;
VAR Stat, Count, Horiz, Vert : word);
BEGIN
Reg.AX := 5;
Reg.BX := Button;
intr(MouseInt, Reg);
Stat := Reg.AX;
Count := Reg.BX;
Horiz := Reg.CX;
Vert := Reg.DX;
END;
PROCEDURE GetReleaseInfo(Button : word;
VAR Stat, Count, Horiz, Vert : word);
BEGIN
Reg.AX := 6;
Reg.BX := Button;
intr(MouseInt, Reg);
Stat := Reg.AX;
Count := Reg.BX;
Horiz := Reg.CX;
Vert := Reg.DX;
END;
PROCEDURE SetLimits(HorMin, HorMax, VerMin, VerMax : word);
BEGIN
IF (HorMin > 0) AND (HorMax > 0) THEN
BEGIN
Reg.AX := 7;
Reg.CX := HorMin;
Reg.DX := HorMax;
intr(MouseInt, Reg);
END;
IF (VerMin > 0) AND (VerMax > 0) THEN
BEGIN
Reg.AX := 8;
Reg.CX := VerMin;
Reg.DX := VerMax;
intr(MouseInt, Reg);
END;
END;
PROCEDURE SetPointerShape(Horiz, Vert : word; Buffer : pointer);
BEGIN
Reg.AX := 9;
Reg.BX := Horiz;
Reg.CX := Vert;
Reg.ES := Seg(Buffer);
Reg.DX := Ofs(Buffer);
intr(MouseInt, Reg);
END;
PROCEDURE SetTextPointer(PtrTyp, AND_Str, XOR_End : word);
BEGIN
Reg.AX := 10;
Reg.BX := PtrTyp;
Reg.CX := AND_Str;
Reg.DX := XOR_End;
intr(MouseInt, Reg);
END;
PROCEDURE GetMotionCount(VAR Horiz, Vert : word);
BEGIN
Reg.AX := 11;
intr(MouseInt, Reg);
Horiz := Reg.CX;
Vert := Reg.DX;
END;
PROCEDURE SetEventHandler(EventMask : word; Handler : pointer);
BEGIN
Reg.AX := 12;
Reg.CX := EventMask;
Reg.ES := seg(Handler);
Reg.DX := ofs(Handler);
intr(MouseInt, Reg);
END;
PROCEDURE SetLightPen(On_Off : word);
BEGIN
IF (On_Off = 0) THEN
Reg.AX := 14
ELSE
Reg.AX := 13;
intr(MouseInt, Reg);
END;
PROCEDURE SetPointerExcl(HorMin, VerMin, HorMax, VerMax : word);
BEGIN
Reg.AX := 16;
Reg.CX := HorMin;
Reg.SI := HorMax;
Reg.DX := VerMin;
Reg.DI := VerMax;
intr(MouseInt, Reg);
END;
PROCEDURE SwapEventHandlers(VAR Mask : word; VAR Buffer : pointer);
BEGIN
Reg.AX := 20;
Reg.CX := Mask;
Reg.ES := Seg(Buffer);
Reg.DX := Ofs(Buffer);
intr(MouseInt, Reg);
Mask := Reg.CX;
Buffer := Ptr(Reg.ES, Reg.DX);
END;
FUNCTION GetSaveStateSize : word;
BEGIN
Reg.AX := 21;
intr(MouseInt, Reg);
GetSaveStateSize := Reg.BX;
END;
PROCEDURE SaveDrvrState(Buffer : pointer);
BEGIN
Reg.AX := 22;
Reg.ES := Seg(Buffer);
Reg.DX := Ofs(Buffer);
intr(MouseInt, Reg);
END;
PROCEDURE RestoreDrvrState(Buffer : pointer);
BEGIN
Reg.AX := 23;
Reg.ES := Seg(Buffer);
Reg.DX := Ofs(Buffer);
intr(MouseInt, Reg);
END;
PROCEDURE SetAltEventHandler(Mask : word; Handler : pointer; VAR Err: boolean);
BEGIN
Reg.AX := 24;
Reg.CX := Mask;
Reg.ES := Seg(Handler);
Reg.DX := Ofs(Handler);
intr(MouseInt, Reg);
IF (Reg.AX = 24) THEN
Err := false
ELSE
Err := true;
END;
PROCEDURE GetAltEventAdrs(VAR Mask : word; VAR Handler : pointer;
VAR Err : boolean);
BEGIN
Reg.AX := 25;
Reg.CX := Mask;
intr(MouseInt, Reg);
IF (Reg.CX > 0) THEN
BEGIN
Mask := Reg.CX;
Handler := Ptr(Reg.ES, Reg.DX);
Err := false;
END
ELSE
Err := true;
END;
PROCEDURE SetMouseSense(Horiz, Vert, Double : word);
BEGIN
Reg.AX := 26;
Reg.BX := Horiz;
Reg.CX := Vert;
Reg.DX := Double;
intr(MouseInt, Reg);
END;
PROCEDURE GetMouseSense(VAR Horiz, Vert, Double : word);
BEGIN
Reg.AX := 27;
intr(MouseInt, Reg);
Horiz := Reg.BX;
Vert := Reg.CX;
Double := Reg.DX;
END;
PROCEDURE SetMouseIntr(Flags : word);
BEGIN
Reg.AX := 28;
Reg.BX := Flags;
intr(MouseInt, Reg);
END;
PROCEDURE SetPointerPage(Page : word);
BEGIN
Reg.AX := 29;
Reg.BX := Page;
intr(MouseInt, Reg);
END;
FUNCTION GetPointerPage : word;
BEGIN
Reg.AX := 30;
intr(MouseInt, Reg);
GetPointerPage := Reg.BX;
END;
PROCEDURE DisableMouseDrvr(VAR Handler : pointer; VAR Err : boolean);
BEGIN
Reg.AX := 31;
intr(MouseInt, Reg);
IF (Reg.AX = 31) THEN
BEGIN
Handler := ptr(Reg.ES, Reg.DX);
Err := false;
END
ELSE
Err := true;
END;
PROCEDURE EnableMouseDrvr;
BEGIN
Reg.AX := 32;
intr(MouseInt, Reg);
END;
PROCEDURE ResetMouseDrvr(VAR Buttons : word; VAR Err : boolean);
BEGIN
Reg.AX := 33;
intr(MouseInt, Reg);
IF (Reg.AX = $FFFF) THEN
BEGIN
Buttons := Reg.BX;
Err := false;
END
ELSE
Err := true;
END;
PROCEDURE SetMouseLang(LangNumber : word);
BEGIN
Reg.AX := 34;
Reg.BX := LangNumber;
intr(MouseInt, Reg);
END;
FUNCTION GetMouseLang : word;
BEGIN
Reg.AX := 35;
intr(MouseInt, Reg);
GetMouseLang := Reg.BX;
END;
PROCEDURE GetMouseInfo(VAR MajVer, MinVer, MouseType, IRQ : word);
BEGIN
Reg.AX := 36;
intr(MouseInt, Reg);
MajVer := Reg.BH;
MinVer := Reg.BL;
MouseType := Reg.CH;
IRQ := Reg.CL;
END;
END.