[comp.lang.pascal] mouse input

caasi@sdsu.UUCP (Richard Caasi) (07/22/88)

Here is the Turbo Pascal 3.0 source code for mouse input.  I haven't
tried it under TP4.0 (of course the registers type declaration would
no longer be necessary).

{$I DISCLAIMER.STD}

================== CUT HERE =====================================
{ Functions and subroutines for use with the PC Mouse. }

Type
  registers = record
                ax,bx,cx,dx,bp,si,di,ds,es,Flags : integer;
              end;
Var
  MouseR          : registers;
  m1, m2, m3, m4  : integer;
  mouse           : boolean;

function MsMouse : boolean;
var
  mseg, m  : integer;
Begin
  mseg := 256 * mem[$0000:0207] + mem[$0000:0206];
  m    := 256 * mem[$0000:0205] + mem[$0000:0206];
  if (mseg <> 0) and (m <> 2) then
    Msmouse := true
  else
    msmouse := false;
end;  { MsMouse }

Procedure Reset_mouse;  { resets mouse internal variables }
begin
  Mouser.ax := 0;
  intr ($33, mouser);
end;

Procedure Show_mouse;  { displays the mouse cursor on the screen }
begin
  Mouser.ax := 1;
  intr ($33, mouser);
end;

Procedure Hide_mouse;  { Hides the mouse cursor on the screen }
begin
  Mouser.ax := 2;
  intr ($33, mouser);
end;

Procedure Get_mouse_status (Var m2, m3, m4 : integer);
begin
  Mouser.ax := 3;
  intr ($33, mouser);
    m2 := mouser.bx;
    m3 := mouser.cx;
    m4 := mouser.dx;
end;

Procedure Put_mouse ( x, y : integer);
begin
    mouser.ax := 4;
    mouser.cx := x;
    mouser.dx := y;
  intr ($33, mouser);
end;

Procedure Get_mouse_button_pressed (Var m1, m2, m3, m4 : integer);
begin
    mouser.ax := 5;
    mouser.bx := m2;
  intr ($33, mouser);
    m1 := mouser.ax;
    m2 := mouser.bx;
    m3 := mouser.cx;
    m4 := mouser.dx;
end;

Procedure Get_mouse_button_released (Var m1, m2, m3, m4 : integer);
begin
    mouser.ax := 6;
    mouser.bx := m2;
  intr ($33, mouser);
    m1 := mouser.ax;
    m2 := mouser.bx;
    m3 := mouser.cx;
    m4 := mouser.dx;
end;

Procedure Set_mouse_X_range (Min, Max : integer);
begin
    mouser.ax := 7;
    mouser.cx := min;
    mouser.dx := max;
  intr ($33, mouser);
end;

Procedure Set_mouse_Y_range (Min, Max : integer);
begin
    mouser.ax := 8;
    mouser.cx := min;
    mouser.dx := max;
  intr ($33, mouser);
end;

Procedure Set_Graphics_Icon (Var xspot, yspot, icon_pointer : integer);
begin
    mouser.ax := 9;
    mouser.bx := xspot;
    mouser.cx := yspot;
    mouser.dx := icon_pointer;
  intr ($33, mouser);
end;

Procedure Set_text_cursor (cursor_type, start, stop : integer);
begin
    mouser.ax := 10;
    mouser.bx := cursor_type;
    mouser.cx := start;
    mouser.dx := stop;
  intr ($33, mouser);
end;

Procedure Mouse_motion (Var xcounter, ycounter : integer);
begin
  mouser.ax := 11;
  intr ($33, mouser);
    xcounter := mouser.cx;
    ycounter := mouser.dx;
end;

Procedure mouse_mickeys (x, y : integer);
begin
    mouser.ax := 15;
    mouser.cx := x;
    mouser.dx := y;
  intr ($33, mouser);
end;

Procedure mouse_DST (mickeys : integer);
begin
    mouser.ax := 19;
    mouser.dx := mickeys;
  intr ($33, mouser);
end;