 Unit Mouse;
{
             лллллллллллллллллллллллллллллллллллллллллллллллллл
             лллнммммммммммммммммммммммммммммммммммммммммммолллББ
             лллнлл                                      ллолллББ
             лллнлл             Mouse driver             ллолллББ
             лллнлл                                      ллолллББ
             лллнлл           Aleksandar Dlabac          ллолллББ
             лллнлл  (C)1993-1996. Dlabac Bros. Company  ллолллББ
             лллнлл    ------------------------------    ллолллББ
             лллнлл      adlabac@urcpg.urc.cg.ac.yu      ллолллББ
             лллнлл      adlabac@urcpg.pmf.cg.ac.yu      ллолллББ
             лллнлл                                      ллолллББ
             лллнпппппппппппппппппппппппппппппппппппппппппполллББ
             ллллллллллллллллллллллллллллллллллллллллллллллллллББ
               ББББББББББББББББББББББББББББББББББББББББББББББББББ
}
   Interface

   Type CursorMask = Record
                       Mask : array [1..32] of word;
                       HotX, HotY : word
                     End;

   Const ArrowMask : CursorMask =
           (Mask:(16383,8191,4095,2047,1023,511,255,127,63,31,511,4351,12543,63615,63615,64639,
                  0,16384,24576,28672,30720,31744,32256,32512,32640,31744,27648,17920,1536,768,768,0);
            HotX:0;HotY:0);
         WaitMask : CursorMask =
           (Mask:(0,0,0,0,49155,49155,57351,61455,61455,57351,49155,49155,0,0,0,0,
                  0,32766,28686,4104,5128,2768,1440,832,576,1056,2320,4808,5032,30558,32766,0);
            HotX:7;HotY:7);
         ZoomMask : CursorMask =
           (Mask: {$I ZOOM.CUR} HotX:5;HotY:5);

   Var MouseOK, Visible : Boolean;

   Function  MouseInstalled : Boolean;
   Procedure ResetMouse;
   Procedure HercReset (Page:byte);
   Procedure ShowCursor;
   Procedure HideCursor;
   Function  LeftButton : Boolean;
   Function  RightButton : Boolean;
   Function  GetMouseX : integer;
   Function  GetMouseY : integer;
   Procedure SetMouseCursor (Mask:CursorMask);
   Procedure SetMouseSensitivity (X,Y:integer);
   Procedure SetMouseWindow (X1,Y1,X2,Y2:integer);

 Implementation

   Uses Dos;

   Var Regs : registers;

   Function  MouseInstalled : Boolean;
     Begin
       With Regs do
         Begin
           Visible:=False;
           AX:=$0000;
           Intr ($33,Regs);
           MouseInstalled:=not AX=0
         End
     End;

   Procedure ResetMouse;
     Begin
       If MouseOK then
         With Regs do
           Begin
             Visible:=False;
             AX:=$0000;
             Intr ($33,Regs)
           End
     End;

   Procedure HercReset (Page:byte);     { This procedure is for Hercules     }
     Begin                              { Graphics Card, only. It must be    }
       If MouseOK then                  { used to display cursor correctly   }
         With Regs do                   { in graphics mode. Page is graphics }
           Begin                        { page on which cursor will be       }
             Visible:=False;            { displayed (usually 0).             }
             If Page=0 then             { Should not be used for text mode!  }
               Mem [$0000:$0449]:=6
                       else
               Mem [$0000:$0449]:=5;
             AX:=$0000;
             Intr ($33,Regs)
           End
     End;

   Procedure ShowCursor;
     Begin
       If MouseOK and not Visible then
         With Regs do
           Begin
             Visible:=True;
             AX:=$0001;
             Intr ($33,Regs)
           End
     End;

   Procedure HideCursor;
     Begin
       If MouseOK and Visible then
         With Regs do
           Begin
             Visible:=False;
             AX:=$0002;
             Intr ($33,Regs)
           End
     End;

   Function  LeftButton : Boolean;
     Var T : Boolean;
       Begin
         T:=False;
         If MouseOK then
           With Regs do
             Begin
               AX:=$0003;
               Intr ($33,Regs);
               T:=BX in [1,3]
             End;
         LeftButton:=T
       End;

   Function  RightButton : Boolean;
     Var T : Boolean;
       Begin
         T:=False;
         If MouseOK then
           With Regs do
             Begin
               AX:=$0003;
               Intr ($33,Regs);
               T:=BX in [2,3]
             End;
         RightButton:=T
       End;

   Function  GetMouseX : integer;
     Var T : integer;
       Begin
         T:=-1;
         If MouseOK then
           With Regs do
             Begin
               AX:=$0003;
               Intr ($33,Regs);
               T:=CX
             End;
         GetMouseX:=T
       End;

   Function  GetMouseY : integer;
     Var T : integer;
       Begin
         T:=-1;
         If MouseOK then
           With Regs do
             Begin
               AX:=$0003;
               Intr ($33,Regs);
               T:=DX
             End;
         GetMouseY:=T
       End;

   Procedure SetMouseCursor (Mask:CursorMask);
     Begin
       If MouseOK then
         With Regs do
           Begin
             AX:=$0009;
             BX:=Mask.HotX;
             CX:=Mask.HotY;
             ES:=Seg (Mask.Mask);
             DX:=Ofs (Mask.Mask);
             Intr ($33,Regs)
           End
     End;

   Procedure SetMouseSensitivity (X,Y:integer);
     Begin
       If MouseOK then
         With Regs do
           Begin
             AX:=$001A;
             BX:=X;
             CX:=Y;
             DX:=0;
             Intr ($33,Regs)
           End
     End;

   Procedure SetMouseWindow (X1,Y1,X2,Y2:integer);
     Begin
       If MouseOK then
         With Regs do
           Begin
             AX:=$0007;
             CX:=X1;
             DX:=X2;
             Intr ($33,Regs);
             AX:=$0008;
             CX:=Y1;
             DX:=Y2;
             Intr ($33,Regs)
           End
     End;

 Begin
   MouseOK:=MouseInstalled
 End.

You should also create a file ZOOM.CUR and insert this two lines in it:
(61695,49215,32799,32799,15,15,15,15,32799,32799,49167,61447,65411,65473,65505,65523,
0,3840,4224,9280,20000,17440,16416,18208,8256,4288,4064,112,56,28,12,0);

Cursor data in ZOOM.CUR file is created with MOUSEDIT program, made by same
author (also available in SWAG).