home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 03 / extra / mouse.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-01-16  |  7.3 KB  |  267 lines

  1. (* -------------------------------------------- *)
  2. (*                MOUSE.PAS                     *)
  3. (*       V 2.0 (c) 1988, 1989 TOOLBOX           *)
  4. (* -------------------------------------------- *)
  5. UNIT Mouse;
  6.  
  7. INTERFACE
  8.  
  9. USES Crt, Dos;
  10.  
  11. CONST
  12.   MouseLButton = 1;
  13.   MouseRButton = 2;
  14.   MouseMButton = 4;
  15.  
  16. TYPE
  17.   MouseType = RECORD
  18.                 screen,
  19.                 mask    : ARRAY[0..15] OF WORD;
  20.               END;
  21. VAR
  22.   MouseRegs : Registers;
  23.  
  24. CONST                         (* der Maus-Pfeil *)
  25.   Arrow : MouseType =
  26.           (screen : ($ffff, $ffff, $ffff, $ffff,
  27.                      $ffff, $ffff, $ffff, $ffff,
  28.                      $ffff, $ffff, $ffff, $ffff,
  29.                      $ffff, $ffff, $ffff, $ffff);
  30.            mask   : ($8000, $e000, $f800, $fe00,
  31.                      $d800, $0c00, $0600, $0300,
  32.                      $0000, $0000, $0000, $0000,
  33.                      $0000, $0000, $0000, $0000));
  34.  
  35. FUNCTION  InitMouse                    : INTEGER;
  36. PROCEDURE ShowMouse;
  37. PROCEDURE HideMouse;
  38. PROCEDURE GetMouse(VAR x, y, buttons   : INTEGER;
  39.                              text_mode : BOOLEAN);
  40. PROCEDURE SetMouse(x, y                : INTEGER;
  41.                    text_mode           : BOOLEAN);
  42. PROCEDURE WhereButtonPressed
  43.                           (button      : INTEGER;
  44.                            text_mode   : BOOLEAN;
  45.                            VAR x, y, n : INTEGER);
  46. PROCEDURE WhereButtonReleased
  47.                           (button      : INTEGER;
  48.                            text_mode   : BOOLEAN;
  49.                            VAR x, y, n : INTEGER);
  50. PROCEDURE SetMouseX(xmin, xmax         : INTEGER;
  51.                     text_mode          : BOOLEAN);
  52. PROCEDURE SetMouseY(ymin, ymax         : INTEGER;
  53.                     text_mode          : BOOLEAN);
  54. PROCEDURE SetMouseXY(x1, y1, x2, y2    : INTEGER;
  55.                      text_mode         : BOOLEAN);
  56. PROCEDURE GraphicMouse(HotX, HotY      : INTEGER;
  57.                        shape         : MouseType);
  58. PROCEDURE TextMouse(MChar              : CHAR;
  59.                     Color, BckGd       : INTEGER);
  60. PROCEDURE GetMouseMotion(VAR dx, dy    : INTEGER);
  61. PROCEDURE SetMouseMotion(dx, dy        : INTEGER);
  62. FUNCTION  ButtonPressed                : BOOLEAN;
  63. FUNCTION  WhichButton                  : INTEGER;
  64. PROCEDURE WaitMouse;
  65. PROCEDURE SetMouseSpeed(s : INTEGER);
  66. FUNCTION  MouseinXY(x1, y1, x2, y2     : INTEGER;
  67.                     text_mode          : BOOLEAN):
  68.                                           BOOLEAN;
  69. PROCEDURE ScreenPage(page              : INTEGER);
  70. FUNCTION  WhichScreenPage              : INTEGER;
  71.  
  72. IMPLEMENTATION
  73.  
  74. FUNCTION InitMouse : INTEGER;
  75. BEGIN
  76.   InitMouse := 0;  MouseRegs.ax := 0;
  77.   Intr($33, MouseRegs);
  78.   IF MouseRegs.ax = -1 THEN
  79.     InitMouse := MouseRegs.bx;
  80. END;
  81.  
  82. PROCEDURE ShowMouse;
  83. BEGIN
  84.   MouseRegs.ax := 1; Intr($33, MouseRegs);
  85. END;
  86.  
  87. PROCEDURE HideMouse;
  88. BEGIN
  89.   MouseRegs.ax := 2; Intr($33, MouseRegs);
  90. END;
  91.  
  92. PROCEDURE GetMouse(VAR x, y, buttons   : INTEGER;
  93.                              text_mode : BOOLEAN);
  94.  
  95. BEGIN
  96.   MouseRegs.ax := 3; Intr($33, MouseRegs);
  97.   x := MouseRegs.cx; y := MouseRegs.dx;
  98.   buttons := MouseRegs.bx;
  99.   IF text_mode THEN BEGIN
  100.     x := Succ(x DIV 8);  y := Succ(y DIV 8);
  101.   END;
  102. END;
  103.  
  104. PROCEDURE SetMouse(x, y      : INTEGER;
  105.                    text_mode : BOOLEAN);
  106. BEGIN
  107.   IF text_mode THEN BEGIN
  108.     x := Pred(x) * 8;  y := Pred(y) * 8;
  109.   END;
  110.   MouseRegs.ax := 4;
  111.   MouseRegs.cx := x;  MouseRegs.dx := y;
  112.   Intr($33, MouseRegs);
  113. END;
  114.  
  115. PROCEDURE WhereButtonPressed
  116.                           (button      : INTEGER;
  117.                            text_mode   : BOOLEAN;
  118.                            VAR x, y, n : INTEGER);
  119. BEGIN
  120.   MouseRegs.ax := 5;  MouseRegs.bx := button;
  121.   Intr($33, MouseRegs);
  122.   x := MouseRegs.cx;  y := MouseRegs.dx;
  123.   n := MouseRegs.bx;
  124.   IF text_mode THEN BEGIN
  125.     x := Succ(x DIV 8);  y := Succ(y DIV 8);
  126.   END;
  127. END;
  128.  
  129. PROCEDURE WhereButtonReleased
  130.                            (button      : INTEGER;
  131.                             text_mode   : BOOLEAN;
  132.                             VAR x, y, n : INTEGER);
  133. BEGIN
  134.   MouseRegs.ax := 6;  MouseRegs.bx := button;
  135.   Intr($33, MouseRegs);
  136.   x := MouseRegs.cx;  y := MouseRegs.dx;
  137.   n := MouseRegs.bx;
  138.   IF text_mode THEN BEGIN
  139.     x := Succ(x DIV 8);  y := Succ(y DIV 8);
  140.   END;
  141. END;
  142.  
  143. PROCEDURE SetMouseX(xmin, xmax : INTEGER;
  144.                     text_mode  : BOOLEAN);
  145. BEGIN
  146.   IF text_mode THEN BEGIN
  147.     xmin := Pred(xmin) * 8;  xmax := Pred(xmax)*8;
  148.   END;
  149.   MouseRegs.ax := 7;
  150.   MouseRegs.cx := xmin;  MouseRegs.dx := xmax;
  151.   Intr($33, MouseRegs);
  152. END;
  153.  
  154. PROCEDURE SetMouseY(ymin, ymax : INTEGER;
  155.                     text_mode  : BOOLEAN);
  156. BEGIN
  157.   IF text_mode THEN BEGIN
  158.     ymin := Pred(ymin) * 8;  ymax := Pred(ymax)*8;
  159.   END;
  160.   MouseRegs.ax := 8;
  161.   MouseRegs.cx := ymin;  MouseRegs.dx := ymax;
  162.   Intr($33, MouseRegs);
  163. END;
  164.  
  165. PROCEDURE SetMouseXY(x1, y1, x2, y2 : INTEGER;
  166.                      text_mode      : BOOLEAN);
  167. BEGIN
  168.   SetMouseX(x1, x2, text_mode);
  169.   SetMouseY(y1, y2, text_mode);
  170. END;
  171.  
  172. PROCEDURE GraphicMouse(HotX, HotY : INTEGER;
  173.                        shape      : MouseType);
  174. BEGIN
  175.   MouseRegs.ax := 9;
  176.   MouseRegs.bx := HotX;    MouseRegs.cx := HotY;
  177.   MouseRegs.dx := Ofs(shape);
  178.   MouseRegs.es := Seg(shape);
  179.   Intr($33, MouseRegs);
  180. END;
  181.  
  182. PROCEDURE TextMouse(MChar       : CHAR;
  183.                     Color, BckGd : INTEGER);
  184. VAR attr : BYTE;
  185. BEGIN
  186.   MouseRegs.ax := 10;  MouseRegs.bx := 0;
  187.   attr := Color OR (BckGd SHL 4);
  188.   IF Color > White THEN attr := attr OR 128;
  189.   MouseRegs.cx := attr SHL 8;
  190.   MouseRegs.dx := MouseRegs.cx + Ord(MChar);
  191.   Intr($33, MouseRegs);
  192. END;
  193.  
  194. PROCEDURE GetMouseMotion(VAR dx, dy: INTEGER);
  195. BEGIN
  196.   MouseRegs.ax := 11;
  197.   Intr($33, MouseRegs);
  198.   dx := MouseRegs.cx;  dy := MouseRegs.dx;
  199. END;
  200.  
  201. PROCEDURE SetMouseMotion(dx, dy: INTEGER);
  202. BEGIN
  203.   MouseRegs.ax := 15;
  204.   MouseRegs.cx := dx;  MouseRegs.dx := dy;
  205.   Intr($33, MouseRegs);
  206. END;
  207.  
  208. FUNCTION ButtonPressed : BOOLEAN;
  209. BEGIN
  210.   MouseRegs.ax  := 3; Intr($33, MouseRegs);
  211.   ButtonPressed := (MouseRegs.BX AND 7) <> 0;
  212. END;
  213.  
  214. FUNCTION WhichButton : INTEGER;
  215. BEGIN
  216.   MouseRegs.ax := 3; Intr($33, MouseRegs);
  217.   WhichButton  := MouseRegs.bx;
  218. END;
  219.  
  220. PROCEDURE WaitMouse;
  221. VAR dx, dy: INTEGER;
  222. BEGIN
  223.   REPEAT
  224.     GetMouseMotion(dx, dy);
  225.   UNTIL (dx <> 0) OR (dy <> 0) OR ButtonPressed;
  226. END;
  227.  
  228. PROCEDURE SetMouseSpeed(s : INTEGER);
  229. BEGIN
  230.   IF s IN [1..9] THEN
  231.     SetMouseMotion(s*6, s*12);
  232. END;
  233.  
  234. FUNCTION MouseinXY(x1, y1, x2, y2 : INTEGER;
  235.                    text_mode      : BOOLEAN)
  236.                                    : BOOLEAN;
  237. VAR temp, x, y : INTEGER;
  238. BEGIN
  239.   IF x1 > x2 THEN BEGIN
  240.     temp := x1;  x1 := x2;  x2 := temp;
  241.   END;
  242.   IF y1 > y2 THEN BEGIN
  243.     temp := y1;  y1 := y2;  y2 := temp;
  244.   END;
  245.   GetMouse(x, y, temp, text_mode);
  246.   MouseinXY := (x >= x1) AND (x <= x2) AND
  247.                (y >= y1) AND (y <= y2);
  248. END;
  249.  
  250. PROCEDURE ScreenPage(page : INTEGER);
  251. BEGIN
  252.   MouseRegs.ax := 29;
  253.   MouseRegs.bx := page;
  254.   Intr($33, MouseRegs);
  255. END;
  256.  
  257. FUNCTION WhichScreenPage : INTEGER;
  258. BEGIN
  259.   MouseRegs.ax := 30;
  260.   Intr($33, MouseRegs);
  261.   WhichScreenPage := MouseRegs.bx;
  262. END;
  263.  
  264. END.
  265. (* -------------------------------------------- *)
  266. (*            Ende von MOUSE.PAS                *)
  267.