home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / PASWIZ13.ZIP / SOURCE.ZIP / MOUSE.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-10-29  |  5.2 KB  |  225 lines

  1. {   +----------------------------------------------------------------------+
  2.     |                                                                      |
  3.     |        PasWiz  Copyright (c) 1990-1992  Thomas G. Hanlin III         |
  4.     |             3544 E. Southern Ave. #104,  Mesa, AZ 85204              |
  5.     |                                                                      |
  6.     |                     The Pascal Wizard's Library                      |
  7.     |                                                                      |
  8.     +----------------------------------------------------------------------+
  9.  
  10.  
  11.  
  12. Mouse:
  13.  
  14.    This unit provides mouse support by direct access to the Microsoft mouse
  15.    driver.  It will also work with compatible drivers, such as those produced
  16.    by Logitech and many other companies.  Trackballs and other devices that
  17.    use compatible drivers are likewise fine.
  18.  
  19.    Note that PS/2 computers have rather unusual mouse support, due to an
  20.    incomprehensible decision by IBM.  To the best of my knowledge, these
  21.    routines will not work at all with PS/2 rodents.
  22.  
  23. }
  24.  
  25.  
  26.  
  27. UNIT Mouse;
  28.  
  29.  
  30.  
  31. INTERFACE
  32.  
  33.  
  34.  
  35. FUNCTION Init: Integer;
  36. FUNCTION LeftButton: Boolean;
  37. FUNCTION MidButton: Boolean;
  38. FUNCTION RightButton: Boolean;
  39. FUNCTION WhereX: Integer;
  40. FUNCTION WhereY: Integer;
  41.  
  42. PROCEDURE GotoXY(X, Y: Integer);
  43. PROCEDURE HideCursor;
  44. PROCEDURE Info(VAR Version: Real; VAR Connector, IRQ: Byte);
  45. PROCEDURE LeftClick(VAR Count, X, Y: Integer);
  46. PROCEDURE LeftRelease(VAR Count, X, Y: Integer);
  47. PROCEDURE MidClick(VAR Count, X, Y: Integer);
  48. PROCEDURE MidRelease(VAR Count, X, Y: Integer);
  49. PROCEDURE RightClick(VAR Count, X, Y: Integer);
  50. PROCEDURE RightRelease(VAR Count, X, Y: Integer);
  51. PROCEDURE ShowCursor;
  52. PROCEDURE Window(X1, Y1, X2, Y2: Integer);
  53.  
  54.  
  55.  
  56. { --------------------------------------------------------------------------- }
  57.  
  58.  
  59.  
  60. IMPLEMENTATION
  61.  
  62.  
  63.  
  64. USES
  65.    Dos;
  66.  
  67.  
  68.  
  69. VAR
  70.    Reg: Registers;
  71.  
  72.  
  73.  
  74. { ---- procs to access the mouse driver ----------------------------------- }
  75.  
  76.  
  77.  
  78. { set the mouse cursor position }
  79. PROCEDURE GotoXY(X, Y: Integer);
  80. BEGIN
  81.    Reg.AX := 4;
  82.    Reg.CX := X;
  83.    Reg.DX := Y;
  84.    Intr($33, Reg);
  85. END;
  86.  
  87.  
  88.  
  89. { # of times left button has been pressed & where it was at the last press }
  90. PROCEDURE LeftClick(VAR Count, X, Y: Integer);
  91. BEGIN
  92.    Reg.AX := 5;
  93.    Reg.BX := 0;
  94.    Intr($33, Reg);
  95.    Count := Reg.BX;
  96.    X := Reg.CX;
  97.    Y := Reg.DX;
  98. END;
  99.  
  100.  
  101.  
  102. { # of times middle button has been pressed & where it was at the last press }
  103. PROCEDURE MidClick(VAR Count, X, Y: Integer);
  104. BEGIN
  105.    Reg.AX := 5;
  106.    Reg.BX := 2;
  107.    Intr($33, Reg);
  108.    Count := Reg.BX;
  109.    X := Reg.CX;
  110.    Y := Reg.DX;
  111. END;
  112.  
  113.  
  114.  
  115. { # of times right button has been pressed & where it was at the last press }
  116. PROCEDURE RightClick(VAR Count, X, Y: Integer);
  117. BEGIN
  118.    Reg.AX := 5;
  119.    Reg.BX := 1;
  120.    Intr($33, Reg);
  121.    Count := Reg.BX;
  122.    X := Reg.CX;
  123.    Y := Reg.DX;
  124. END;
  125.  
  126.  
  127.  
  128. { # times left button has been released & where it was at the last release }
  129. PROCEDURE LeftRelease(VAR Count, X, Y: Integer);
  130. BEGIN
  131.    Reg.AX := 6;
  132.    Reg.BX := 0;
  133.    Intr($33, Reg);
  134.    Count := Reg.BX;
  135.    X := Reg.CX;
  136.    Y := Reg.DX;
  137. END;
  138.  
  139.  
  140.  
  141. { # times middle button has been released & where it was at the last release }
  142. PROCEDURE MidRelease(VAR Count, X, Y: Integer);
  143. BEGIN
  144.    Reg.AX := 6;
  145.    Reg.BX := 2;
  146.    Intr($33, Reg);
  147.    Count := Reg.BX;
  148.    X := Reg.CX;
  149.    Y := Reg.DX;
  150. END;
  151.  
  152.  
  153.  
  154. { # times right button has been released & where it was at the last release }
  155. PROCEDURE RightRelease(VAR Count, X, Y: Integer);
  156. BEGIN
  157.    Reg.AX := 6;
  158.    Reg.BX := 1;
  159.    Intr($33, Reg);
  160.    Count := Reg.BX;
  161.    X := Reg.CX;
  162.    Y := Reg.DX;
  163. END;
  164.  
  165.  
  166.  
  167. { range to which to restrict the mouse cursor }
  168. PROCEDURE Window(X1, Y1, X2, Y2: Integer);
  169. BEGIN
  170.    Reg.AX := 7;
  171.    Reg.CX := Y1;
  172.    Reg.DX := Y2;
  173.    Intr($33, Reg);
  174.    Reg.AX := 8;
  175.    Reg.CX := X1;
  176.    Reg.DX := X2;
  177.    Intr($33, Reg);
  178. END;
  179.  
  180.  
  181.  
  182. { basic mouse hardware/software info }
  183. PROCEDURE Info(VAR Version: Real; VAR Connector, IRQ: Byte);
  184. BEGIN
  185.    Reg.AX := 36;
  186.    Intr($33, Reg);
  187.    Version := (Hi(Reg.BX) DIV 16) * 10 + (Hi(Reg.BX) MOD 16)
  188.            + ((Lo(Reg.BX) DIV 16) * 10 + (Lo(Reg.BX) MOD 16)) / 100;
  189.    Connector :=  Hi(Reg.CX);
  190.    IRQ := Lo(Reg.CX);
  191.    { attempt to safeguard against incompatible or outdated drivers }
  192.    IF ((Connector < 1) OR (Connector > 20) OR (IRQ = 1) OR (IRQ > 15)) THEN BEGIN
  193.       Version := 0.0;
  194.       Connector := 0;
  195.       IRQ := 0;
  196.    END;
  197. END;
  198.  
  199.  
  200.  
  201. {$F+}
  202.  
  203. { the below routines are in assembly language }
  204.  
  205.  
  206.  
  207. FUNCTION Init; external;               { init mouse driver, return buttons }
  208. PROCEDURE HideCursor; external;        { hide mouse cursor }
  209. FUNCTION LeftButton; external;         { return left button status }
  210. FUNCTION MidButton; external;          { return middle button status }
  211. FUNCTION RightButton; external;        { return right button status }
  212. PROCEDURE ShowCursor; external;        { show mouse cursor }
  213. FUNCTION WhereX; external;             { return X coordinate of mouse }
  214. FUNCTION WhereY; external;             { return Y coordinate of mouse }
  215.  
  216.  
  217.  
  218. {$L MOUSES}
  219.  
  220.  
  221.  
  222. { ----------------------- initialization code --------------------------- }
  223. BEGIN
  224. END.
  225.