home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / pascal / spx10.zip / SPX_TPU6.ZIP / MOUSE.PAS < prev    next >
Pascal/Delphi Source File  |  1992-11-06  |  4KB  |  226 lines

  1. Unit Mouse;
  2.  
  3. Interface
  4.  
  5. Uses dos;
  6.  
  7. const
  8.    visible     : boolean = false;
  9.    mousehere   : boolean = false;
  10.    mousewason  : boolean = false;
  11.    mouseoncall : boolean = false;
  12.    skl         : integer = 1;
  13.    mseshp      : array[0..31] of word =
  14.                  ($1fff,$0fff,$07ff,$03ff,$07ff,$03ff,$e7ff,$ffff,
  15.                   $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,
  16.                   $0000,$4000,$6000,$7000,$6000,$1000,$0000,$0000,
  17.                   $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000);
  18.  
  19.  
  20. var
  21.    m1,m2,m3,m4 : integer;
  22.  
  23. procedure mset(var m1,m2,m3,m4:integer);
  24. function mousereset:integer;
  25. procedure mouseon;
  26. procedure mouseoff;
  27. procedure getmouse(var m2,m3,m4:integer);
  28. procedure setmouse(m3,m4:integer);
  29. procedure getmousepresses(var m2,m3,m4:integer);
  30. procedure getmousereleases(var m2,m3,m4:integer);
  31. procedure getmousemotion(var m3,m4:integer);
  32. procedure setmousecursor(m2,m3:integer; var mask);
  33. procedure setmouseratio(m3,m4:integer);
  34. procedure setmouseoff(x1,y1,x2,y2:integer);
  35. procedure cleanmouse;
  36. procedure chkmouseon;
  37. procedure setdefptr;
  38. procedure normalizemx;
  39.  
  40. Implementation
  41.  
  42. var
  43.    legal : boolean;
  44.  
  45.  
  46. procedure setdefptr;
  47. begin
  48.    setmousecursor(0,0,mseshp);
  49. end;
  50.  
  51.  
  52. procedure mset;
  53. var
  54.    reg : registers;
  55. begin
  56.    if not legal
  57.       then exit;
  58.    with reg do
  59.       begin
  60.          ax := m1;
  61.          bx := m2;
  62.          cx := m3;
  63.          dx := m4;
  64.          intr($33,reg);
  65.          m1 := ax;
  66.          m2 := bx;
  67.          m3 := cx;
  68.          m4 := dx;
  69.       end;
  70. end;
  71.  
  72.  
  73. procedure setmousecursor;
  74. var
  75.    reg : registers;
  76. begin
  77.    m1 := 9;
  78.    m4 := ofs(mask);
  79.    reg.es := seg(mask);
  80.    with reg do
  81.       begin
  82.          ax := m1;
  83.          bx := m2;
  84.          cx := m3;
  85.          dx := m4;
  86.          intr($33,reg);
  87.          m1 := ax;
  88.          m2 := bx;
  89.          m3 := cx;
  90.          m4 := dx;
  91.       end;
  92. end;
  93.  
  94.  
  95. function mousereset;
  96. var
  97.   x : integer;
  98. begin
  99.    m1 := 0; legal := true;
  100.    mset(m1,m2,m3,m4);
  101.    mousehere := (m1<>0);
  102.    if m1=0
  103.       then mousereset := 0
  104.       else mousereset := m2;
  105.    legal := mousehere;
  106. end;
  107.  
  108.  
  109. procedure mouseon;
  110. begin
  111.    mouseoncall := true;
  112.    if not visible and mousehere
  113.       then
  114.          begin
  115.             m1 := 1;
  116.             mset(m1,m2,m3,m4);
  117.             visible := true;
  118.          end;
  119. end;
  120.  
  121.  
  122. procedure chkmouseon;
  123. begin
  124.    if mousewason
  125.       then
  126.          begin
  127.             mousewason := false;
  128.             mouseon;
  129.          end;
  130. end;
  131.  
  132.  
  133. procedure mouseoff;
  134. begin
  135.   mouseoncall := false;
  136.    if visible and mousehere
  137.       then
  138.          begin
  139.             m1 := 2;
  140.             mset(m1,m2,m3,m4);
  141.             visible := false;
  142.             mousewason := true;
  143.          end;
  144. end;
  145.  
  146.  
  147. procedure getmouse;
  148. begin
  149.    m1 := 3;
  150.    mset(m1,m2,m3,m4);
  151.    if not mousehere
  152.       then m2 := 0;
  153. end;
  154.  
  155.  
  156. procedure setmouse;
  157. begin
  158.    m1 := 4;
  159.    mset(m1,m2,m3,m4);
  160. end;
  161.  
  162.  
  163. procedure getmousepresses;
  164. begin
  165.    m1 := 5;
  166.    mset(m1,m2,m3,m4);
  167. end;
  168.  
  169.  
  170. procedure getmousereleases;
  171. begin
  172.    m1 := 6;
  173.    mset(m1,m2,m3,m4);
  174. end;
  175.  
  176.  
  177. procedure getmousemotion;
  178. begin
  179.    m1 := 11;
  180.    mset(m1,m2,m3,m4);
  181. end;
  182.  
  183.  
  184. procedure cleanmouse;
  185. begin
  186.    if not mousehere
  187.       then exit
  188.       else
  189.         begin
  190.          repeat
  191.             getmouse(m2,m3,m4);
  192.          until m2 and 3=0;
  193.          m2 := 0;
  194.         end;
  195. end;
  196.  
  197.  
  198. procedure setmouseratio;
  199. begin
  200.    m1 := 15;
  201.    mset(m1,m2,m3,m4);
  202. end;
  203.  
  204.  
  205. procedure setmouseoff(x1,y1,x2,y2:integer);
  206. begin
  207.   asm
  208.     mov   ax,0010h
  209.     mov   cx,x1
  210.     mov   dx,y1
  211.     mov   si,x2
  212.     mov   di,y2
  213.     int 33h
  214.   end;
  215. end;
  216.  
  217.  
  218. procedure normalizemx; { for mode $13 }
  219. begin
  220.   getmouse(m2,m3,m4); skl := m3 div 160;
  221. end;
  222.  
  223.  
  224. begin
  225.    legal := false;
  226. end.