home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 189.MOUSE.PAS < prev    next >
Pascal/Delphi Source File  |  1992-08-06  |  3KB  |  201 lines

  1. {$A+,B-,D-,E-,F+,G-,I-,L-,N-,O-,R-,S-,V-,X-}
  2. {$M 1024,0,655360}
  3. Unit mouse;
  4.  
  5. interface
  6.  
  7. type resetrec = record
  8.        exists   : boolean;
  9.        nbuttons : integer;
  10.      end;
  11.  
  12.      locrec = record
  13.        buttonstatus : integer;
  14.        opcount      : integer;
  15.        column       : integer;
  16.        row          : integer;
  17.      end;
  18.  
  19.      moverec = record
  20.        hcount : integer;
  21.        vcount : integer;
  22.      end;
  23.  
  24. procedure mreset(var mouse:resetrec);
  25. procedure mshow;
  26. procedure mhide;
  27. procedure mpos(var mouse:locrec);
  28. procedure mmoveto(col, row:integer);
  29. procedure mpressed(button:integer;var mouse:locrec);
  30. procedure mreleased(button:integer;var mouse:locrec);
  31. procedure mcolrange(min,max:integer);
  32. procedure mrowrange(min,max:integer);
  33. procedure mgraphcursor(hhot,vhot:integer;maskseg,maskofs:word);
  34. procedure mtextcursor(ctype,p1,p2:word);
  35. procedure mmotion(var moved:moverec);
  36. procedure minsttask(mask,taskseg,taskofs:word);
  37. procedure mlpenon;
  38. procedure mlpenoff;
  39. procedure mratio(horiz,vert:integer);
  40.  
  41. implementation
  42.  
  43. uses crt,dos;
  44.  
  45. const MDD       = $33;
  46.  
  47. var reg       : registers;
  48.  
  49. function lower(n1,n2:integer):integer;
  50. begin
  51.   if (n1<n2) then
  52.     lower:=n1
  53.   else
  54.     lower:=n2;
  55. end;
  56.  
  57. function upper(n1,n2:integer):integer;
  58. begin
  59.   if (n1>n2) then
  60.     upper:=n1
  61.   else
  62.     upper:=n2;
  63. end;
  64.  
  65. procedure mreset;
  66. begin
  67.   reg.ax:=0;
  68.   intr(mdd,reg);
  69.   if (reg.ax<>0) then
  70.     mouse.exists:=true
  71.   else
  72.     mouse.exists:=false;
  73.   mouse.nbuttons:=reg.bx;
  74. end;
  75.  
  76. procedure mshow;
  77. begin
  78.   reg.ax:=1;
  79.   intr(mdd,reg);
  80. end;
  81.  
  82. procedure mhide;
  83. begin
  84.   reg.ax:=2;
  85.   intr(mdd,reg);
  86. end;
  87.  
  88. procedure mpos;
  89. begin
  90.    reg.ax:=3;
  91.    intr(mdd,reg);
  92.    mouse.buttonstatus:=reg.bx;
  93.    mouse.column:=integer(reg.cx);
  94.    mouse.row:=integer(reg.dx);
  95. end;
  96.  
  97. procedure mmoveto;
  98. begin
  99.   reg.ax:=4;
  100.   reg.cx:=col;
  101.   reg.dx:=row;
  102.   intr(mdd,reg);
  103. end;
  104.  
  105. procedure mpressed;
  106. begin
  107.   reg.ax:=5;
  108.   reg.bx:=button;
  109.   intr(mdd,reg);
  110.   mouse.buttonstatus:=reg.ax;
  111.   mouse.opcount:=reg.bx;
  112.   mouse.column:=reg.cx;
  113.   mouse.row:=reg.dx;
  114. end;
  115.  
  116. procedure mreleased;
  117. begin
  118.   reg.ax:=6;
  119.   reg.bx:=button;
  120.   intr(mdd,reg);
  121.   mouse.buttonstatus:=reg.ax;
  122.   mouse.opcount:=reg.bx;
  123.   mouse.column:=reg.cx;
  124.   mouse.row:=reg.dx;
  125. end;
  126.  
  127. procedure mcolrange;
  128. begin
  129.   reg.ax:=7;
  130.   reg.cx:=lower(min,max);
  131.   reg.dx:=upper(min,max);
  132.   intr(mdd,reg);
  133. end;
  134.  
  135. procedure mrowrange;
  136. begin
  137.   reg.ax:=8;
  138.   reg.cx:=lower(min,max);
  139.   reg.dx:=upper(min,max);
  140.   intr(mdd,reg);
  141. end;
  142.  
  143. procedure mgraphcursor;
  144. begin
  145.   reg.ax:=9;
  146.   reg.bx:=hhot;
  147.   reg.cx:=vhot;
  148.   reg.dx:=maskofs;
  149.   reg.es:=maskseg;
  150.   intr(mdd,reg);
  151. end;
  152.  
  153. procedure mtextcursor;
  154. begin
  155.   reg.ax:=10;
  156.   reg.bx:=ctype;
  157.   reg.cx:=p1;
  158.   reg.dx:=p2;
  159.   intr(mdd,reg);
  160. end;
  161.  
  162. procedure mmotion;
  163. begin
  164.    reg.ax:=11;
  165.    intr(mdd,reg);
  166.    moved.hcount:=integer(reg.cx);
  167.    moved.vcount:=integer(reg.dx);
  168. end;
  169.  
  170. procedure minsttask;
  171. begin
  172.   reg.ax:=12;
  173.   reg.cx:=mask;
  174.   reg.dx:=taskofs;
  175.   reg.es:=taskseg;
  176.   intr(mdd,reg);
  177. end;
  178.  
  179. procedure mlpenon;
  180. begin
  181.   reg.ax:=14;
  182.   intr(mdd,reg);
  183. end;
  184.  
  185. procedure mlpenoff;
  186. begin
  187.   reg.ax:=15;
  188.   intr(mdd,reg);
  189. end;
  190.  
  191. procedure mratio;
  192. begin
  193.   reg.ax:=15;
  194.   reg.cx:=horiz;
  195.   reg.dx:=vert;
  196. end;
  197.  
  198. end.
  199.  
  200.  
  201.