[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]
  unit MyMouse;
  { bare bones mouse unit used by the simulator -stolen from swag, sorta }
  interface
  uses dos;
  var
    mousex, mousey:integer;
  procedure initmouse(var buttons:byte; var is:boolean);
  Procedure showmouse;
  Procedure hidemouse;
  procedure getmousexy;
  procedure mouseto80;
  Procedure MouseExit;
  function mouserightpressed:boolean; {??}
  function mouseleftpressed:boolean;
  function mouserightdown:boolean;
  function mousebothdown:boolean;
  function mouseleftdown:boolean;
 implementation
 Var
   ExitPtr: pointer;
   Regs: registers;
   TempWord: word;
  procedure initmouse(var buttons:byte; var is:boolean);
  var msavailable:boolean;
      msbuttons:byte;
  begin
     msavailable:=false;
     Asm
       MOV MsButtons,0
       MOV AX,0000h
       INT 33h
       CMP AX,0000h
       JE  @Dne
       CMP AX,0FFFFh
       JNE @Dne
       MOV MsAvailable,True
       CMP BX,0002h
       JE  @Two
       CMP BX,0003h
       JE  @Thr
       CMP BX,0FFFFh
       JE  @Thr
 @Two: MOV MsButtons,2
       JMP @Dne
 @Thr: MOV MsButtons,3
 @Dne:
     End;
     buttons:=msbuttons;
     is:=msavailable;
  end;
  Procedure showmouse; Assembler;
  Asm
    MOV AX,0001h
    INT 33h
  end;
  Procedure Hidemouse; Assembler;
  Asm
    MOV AX,0002h
    INT 33h
  end;
  procedure getmousexy; Assembler;
  Asm
    MOV AX,0003h
    INT 33h
    MOV mousex,CX
    MOV mousey,DX
  end;
  procedure mouseto80;
  begin
    {makes it a number for 80x25 text mode}
    mousex:=(mousex div 8)+1;
    mousey:=(mousey div 8)+1;
  end;
  {dont know the diff between 'rghtDOWN and rightPRESSED'}
  function mouseleftpressed:boolean;
  begin
    asm
      MOV @Result,False
      MOV AX,0005h
      MOV BX,0000h
      INT 33h
      {MOV Count,BX} {what is count?}
      MOV mousex,CX
      MOV mousey,DX
      CMP AX,1
      JNE @Done
      MOV @Result,True
      @Done:
    end;
  end;
  function mouserightpressed:boolean;
  begin
    asm
      MOV @Result,False
      MOV AX,0005h
      MOV BX,0001h
      INT 33h
      {MOV Count,BX} {what is count?}
      MOV mousex,CX
      MOV mousey,DX
      CMP AX,2
      JNE @Done
      MOV @Result,True
      @Done:
    end;
  end;
  function mouserightdown:boolean;
  begin
    asm
      MOV @Result,False
      MOV AX,0003h
      INT 33h
      MOV mousex,CX
      MOV mousey,DX
      CMP BX,2
      JNE @Done
      MOV @Result,True
      @Done:
    end;
  end;
  function mousebothdown:boolean;
  begin
    asm
      MOV @Result,False
      MOV AX,0003h
      INT 33h
      MOV MouseX,CX
      MOV MouseY,DX
      CMP BX,3
      JNE @Done
      MOV @Result,True
      @Done:
    end;
  end;
  function mouseleftdown:boolean;
  begin
    Asm
      MOV @Result,False
      MOV AX,0003h
      INT 33h
      MOV mousex,CX
      MOV mousey,DX
      CMP BX,1
      JNE @Done
      MOV @Result,True
      @Done:
    end;
  end;
  Procedure MouseExit;
  begin
    ExitProc:=ExitPtr;
  end;
  begin
    ExitPtr:=ExitProc;
    ExitProc:=@MouseExit;
  End.
[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]