[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]

    {$A+,B-,D-,E-,F+,G-,I-,L-,N-,O-,R-,S-,V-,X-} {$M 1024,0,655360}
    Unit mouse;

    interface

    type resetrec = record
           exists   : boolean;
           nbuttons : integer;
         end;

         locrec = record
           buttonstatus : integer;
           opcount      : integer;
           column       : integer;
           row          : integer;
         end;

         moverec = record
           hcount : integer;
           vcount : integer;
         end;

    procedure mreset(var mouse:resetrec);
    procedure mshow;
    procedure mhide;
    procedure mpos(var mouse:locrec);
    procedure mmoveto(col, row:integer);
    procedure mpressed(button:integer;var mouse:locrec); procedure
    mreleased(button:integer;var mouse:locrec); procedure
    mcolrange(min,max:integer); procedure mrowrange(min,max:integer); procedure
    mgraphcursor(hhot,vhot:integer;maskseg,maskofs:word); procedure
    mtextcursor(ctype,p1,p2:word); procedure mmotion(var moved:moverec); procedure
    minsttask(mask,taskseg,taskofs:word); procedure mlpenon; procedure mlpenoff;
    procedure mratio(horiz,vert:integer);
    implementation

    uses crt,dos;

    const MDD       = $33;

    var reg       : registers;

    function lower(n1,n2:integer):integer;
    begin
      if (n1<n2) then
        lower:=n1
      else
        lower:=n2;
    end;

    function upper(n1,n2:integer):integer;
    begin
      if (n1>n2) then
        upper:=n1
      else
        upper:=n2;
    end;

    procedure mreset;
    begin
      reg.ax:=0;
      intr(mdd,reg);
      if (reg.ax<>0) then
        mouse.exists:=true
      else
        mouse.exists:=false;
      mouse.nbuttons:=reg.bx;
    end;

    procedure mshow;
    begin
      reg.ax:=1;
      intr(mdd,reg);
    end;

    procedure mhide;
    begin
      reg.ax:=2;
      intr(mdd,reg);
    end;

    procedure mpos;
    begin
       reg.ax:=3;
       intr(mdd,reg);
       mouse.buttonstatus:=reg.bx;
       mouse.column:=integer(reg.cx);
       mouse.row:=integer(reg.dx);
    end;

    procedure mmoveto;
    begin
      reg.ax:=4;
      reg.cx:=col;
      reg.dx:=row;
      intr(mdd,reg);
    end;

    procedure mpressed;
    begin
      reg.ax:=5;
      reg.bx:=button;
      intr(mdd,reg);
      mouse.buttonstatus:=reg.ax;
      mouse.opcount:=reg.bx;
      mouse.column:=reg.cx;
      mouse.row:=reg.dx;
    end;

    procedure mreleased;
    begin
      reg.ax:=6;
      reg.bx:=button;
      intr(mdd,reg);
      mouse.buttonstatus:=reg.ax;
      mouse.opcount:=reg.bx;
      mouse.column:=reg.cx;
      mouse.row:=reg.dx;
    end;

    procedure mcolrange;
    begin
      reg.ax:=7;
      reg.cx:=lower(min,max);
      reg.dx:=upper(min,max);
      intr(mdd,reg);
    end;

    procedure mrowrange;
    begin
      reg.ax:=8;
      reg.cx:=lower(min,max);
      reg.dx:=upper(min,max);
      intr(mdd,reg);
    end;

    procedure mgraphcursor;
    begin
      reg.ax:=9;
      reg.bx:=hhot;
      reg.cx:=vhot;
      reg.dx:=maskofs;
      reg.es:=maskseg;
      intr(mdd,reg);
    end;

    procedure mtextcursor;
    begin
      reg.ax:=10;
      reg.bx:=ctype;
      reg.cx:=p1;
      reg.dx:=p2;
      intr(mdd,reg);
    end;

    procedure mmotion;
    begin
       reg.ax:=11;
       intr(mdd,reg);
       moved.hcount:=integer(reg.cx);
       moved.vcount:=integer(reg.dx);
    end;

    procedure minsttask;
    begin
      reg.ax:=12;
      reg.cx:=mask;
      reg.dx:=taskofs;
      reg.es:=taskseg;
      intr(mdd,reg);
    end;

    procedure mlpenon;
    begin
      reg.ax:=14;
      intr(mdd,reg);
    end;

    procedure mlpenoff;
    begin
      reg.ax:=15;
      intr(mdd,reg);
    end;

    procedure mratio;
    begin
      reg.ax:=15;
      reg.cx:=horiz;
      reg.dx:=vert;
    end;

    end.

[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]