unit mouse;
interface
uses dos;

function InitMouse : boolean;      {инициализация мыши}

function GetMouse(var MouseX,MouseY : word) : word;
     {запрос положения курсора и состояния клавиш мыши}

procedure SetMouse(MouseX, MouseY: word);
                     {установка положения курсора мыши}

procedure SetMouseRange(X1,Y1,X2,Y2: word);
            {установка границ перемещения курсора мыши}

implementation

function InitMouse : boolean;      {инициализация мыши}
var
  CPU_Reg : registers;
begin
  CPU_Reg.Ax := 0;
  Intr($33,CPU_Reg);
  InitMouse := CPU_Reg.Ax = $ffff;
end;

function GetMouse(var MouseX,MouseY : word) : word;
     {запрос положения курсора и состояния клавиш мыши}
var
  CPU_Reg : registers;
begin
  CPU_Reg.Ax := 3;
  Intr($33,CPU_Reg);
  with CPU_Reg do begin
    MouseX   := Cx;
    MouseY   := Dx;
    GetMouse := Bx;

  end;
end;

procedure SetMouse(MouseX, MouseY: word);
                     {установка положения курсора мыши}
var
  CPU_Reg        : registers;
begin
  with CPU_Reg do begin
    Ax := 4;
    Cx := MouseX;
    Dx := MouseY;
  end;
  intr($33,CPU_Reg);
end;

procedure SetMouseRange(x1,y1,x2,y2: word);
            {установка границ перемещения курсора мыши}
var
  CPU_Reg        : registers;
begin
  with CPU_Reg do begin
    Ax := 7;
    Cx := x1;
    Dx := x2;
  end;
  intr($33,CPU_Reg); 
         {функция 7 - установка горизонтальных границ}
  with CPU_Reg do begin
    Ax := 8;
    Cx := y1;
    Dx := y2;
  end;
  intr($33,CPU_Reg);
           {функция 8 - установка вертикальных границ}
end;

end.