                                    KMOUSE


        KMouse is a Turbo Pascal Micorsoft/Logitech Mouse handler
        that enables text based programs to use a mouse with a minimal
        amount of effort by the programmer.  Simply add Kmouse to
        your USES statement and your program is 'Mouseified.'

        In a nutshell, KMOUSE offers the following features:

        o  Inserts mouse movement and button press keys directly
           into the keyboard buffer.
        o  Programmable Key simulation for each button.
        o  Programmable delays for vertical and horizontal mouse
           movements.  Makes menus feel more natural.
        o  The mouse event handler is programmed in assembler for
           fastest possible execution speed.
        o  The mouse entry state is restored upon exit if the mouse
           driver (Mouse.Sys, or Mouse.Com) is Version 6.0 or greater.
        o  Designed to quickly  interface with existing text based
           applications.
        o  Compatible with Turbo Pascal Versions 4.0 to (as of the
           present) 5.5.

        Files included:
        KMouse.PAS      - Unit driver for the mouse.
        TestKmou.PAS    - Demo program.
        Keymous.ASM     - Assembley language mouse event handler.
        KeyMous.OBJ     - Object file linkable to KMouse.
        Read.ME         - This file.

        The Mouse Interface:
        {  Exposed to the programmer Using this Unit }

InterFace

Const
  HasMouse : Boolean = False;
  { Set to True if mouse found during initialization }
  MouseVerified : Boolean = False;
  { Set to True if the mouse reset function finds the mouse }
  GoodMouse : Boolean = False;
  { Set to True if Mouse driver is Ver. 6 or higher }

  {Mouse Motion Masks}
  MoveRight = $01;
  MoveLeft  = $02;
  MoveDown  = $04;
  MoveUp    = $08;
  MoveAll   = $0F;
  { The default is MoveAll }

  {Mouse Report masks}
  MouseMoved      = $01;
  MouseLBPressed  = $02;
  MouseLBReleased = $04;
  MouseRBPressed  = $08;
  MouseRBReleased = $10;
  MouseMBPressed  = $20;
  MouseMBReleased = $40;
  { The default is MouseMoved }


Procedure ResetMouse;
{Performs hardware reset on the mouse, sets Mouse verified}

Procedure InitMouse(Mask:Word);

{ InitMouse installs the mouse handler to the mouse.  It must be called  }
{  during program initialization, although additional calls are harmless }
{  and may be used to change the interrupt mask.                         }
{   Mask is the mask passed to the mouse driver to define the Mouse      }
{  actions to report on.  This Word is bit encoded as follows:           }
{                                                                        }
{      15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00                   }
{       0  0  0  0  0  0  0  0  0  x  x  x  x  x  x  x                   }
{       -------------------------  ^  ^  ^  ^  ^  ^  ^                   }
{                   ^              |  |  |  |  |  |  Mouse motion        }
{                   |              |  |  |  |  |  Left button pressed    }
{                   |              |  |  |  |  Left button released      }
{                   |              |  |  |  Right button pressed         }
{                   |              |  |  Right button released           }
{                   |              |  Mid Button pressed                 }
{                   |              Mid button released                   }
{                   Reserved, must be 0                                  }
{ If the bit is set (ie, 1) the mouse calls the user installed handler   }
{ when the event occurs.                                                 }
{  Utilizing the constants above for the Mask, the call                  }
{     InitMouse(MouseMoved+MouseLBReleased+MouseRBReleased);             }
{  installs the handler and sets the mouse for motion, and L & R button  }
{  releases.                                                             }


Procedure SetMouseMotion(Direction : Byte);
{ Sets the movement directions the mouse will report on.                 }
{ Using the the definitions of the constants above, following the call   }
{  SetMouseMotion(MoveUp+MoveDown), the mouse will report vertical motion}
{ Correspondingly, SetMouseMotion(MoveAll); establishes vertical and     }
{ horizontal mouse motion. The default is MoveAll.  Use this procedure   }
{ to toggle mouse response from a vertical to a horizonal menu or a      }
{ full screen application.                                               }

Procedure SetMouseButtons( LB,RB,MB : Word );
{ Causes the mouse buttons to return the specified scancodes.            }
{  Should be called before first initialization, may be called anytime   }
{  after to change the buttons returned scancodes.  Each button enabled  }
{  by the call mask must be > 0                                          }

Procedure SetMouseDelay( VDelay, HDelay : Word);
{ Sets the delay count for vertical and horizontal mouse movements.  The }
{  delay is read and decremented by the mouse driver and only actuated   }
{  when the delay counter reaches 0.  Use this Procedure to change the   }
{  mouse sensitivity for menus, etc. The default is VDelay = 3, HDelay =1}

Procedure SaveMouse;
{ Saves the mouse state if the mouse driver is ver. 6.0 or higher.       }

Procedure RestoreMouse;
{ Restores a previously saved mouse state if the mouse driver is Ver. 6.0 }
{  or higher.                                                             }

{ The initialization code saves the current mouse in a separate buffer and }
{  restores it during the exit process.                                    }
{ The save/restore mouse procs may be used by a TP application before and }
{  after spawning a child process, eg. in a menuing program.              }
{ These procedures require that GoodMouse be true, ie. the mouse driver   }
{   must be ver 6.0 or higher.                                            }

(*****************************************************************************)
