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

{

   This Unit is for Adding Buttons Easily to the screen, then checking to
   See if they were hit or not...


   Like so:

     CJ Cliife * Shareware Overload BBS (613)382-1924 & (613)382-8503
                 Voice: (613)382-4194
}

{ THE MOUSER UNIT and a DEMO is at the end of this unit ... SST }

Unit BUTTUNIT;   (* 1995 CJ Cliffe *)

Interface
Uses Mouser, Crt;

Var
  butts : Array [1..1500] Of String [20];          { Up to 1500 Buttons }
  buttx : Array [1..1500] Of ShortInt;             { Can Be used at the }
  butty : Array [1..1500] Of ShortInt;             { Same time on screen}
  buttx1: Array [1..1500] Of ShortInt;
  butty1: Array [1..1500] Of ShortInt;


Procedure Addbutt (butname1: String; X1, Y1, X2, Y2: Integer);{ Add a Button on
the screen, at top left x1,y1, and bottom right x2,y2} {    Spots can be exact,
because the numbers a trimmed to fit..        }


Function  Checkbutt (butname2: String): Boolean;
{  Simple, Check to see if a button is pressed! }


Procedure InitButtons;
{Used before each time a new screen of buttons is brought up}


Procedure StopButtons;
{ Hides The mouse away from sight}

Function Leftpushed: Boolean;
{Same as Leftpressed from MOUSE.PAS, but don't have to call up MOUSE.PAS}

Function Rightpushed: Boolean;
{Same as Rightpressed from MOUSE.PAS, but don't have to call up MOUSE.PAS}



Implementation


Procedure Addbutt (butname1: String; X1, Y1, X2, Y2: Integer);Var Cur: Integer;
Begin
  Cur := 0;
  Repeat
    Inc (cur);
  Until (Cur = 1500) Or (butts [Cur] = ' ');
  If Cur = 1500 Then
  Begin
    Write ('Button Limit Exceeded!', #7, #7, #7);
    Delay (2000);
    Halt;
  End;
  butts [cur] := Butname1;
  buttx [cur] := X1 - 1;
  butty [cur] := Y1 - 1;
  buttx1 [cur] := X2 + 1;
  butty1 [cur] := Y2 + 1;
End;



Function Checkbutt (butname2: String): Boolean;   {Check to see if mouse is}
Var                                               {   On top of a button   }
  curx, cury: Integer;                            { If so, then Checkbutt  }
  cou: Integer;                                   {         is True        } Begin
  Cou := 0;
  Checkbutt := False;
  cury := getmousex;
  curx := getmousey;
  Inc (curx);                                   {Compensate to match Screen}
  Inc (cury);
  Repeat
    Inc (cou);
  Until (Cou = 1500) Or (butts [cou] = butname2);
  If cou = 1500 Then                           {Button was not there at all}
  Begin
    Checkbutt := False;
    Exit;
  End;
  If  (curx > butty [cou] )                      {Check to see if mouse is on}
      And (cury > buttx [cou] )                  {        the button,        }
      And (curx < butty1 [cou] )
      And (cury < buttx1 [cou] )
  Then Checkbutt := True;
End;

Var setit: Integer;


Procedure InitButtons;
Begin
  Resetmouse;
  MouseWindow (0, 0, 79, 24);              { Keep Mouse Within Screen Limits }
  For setit := 1 To 1500 Do
  Begin
    butts [setit] := ' ';                  {Reset All Buttons}
    buttx [setit] := 0;
    butty [setit] := 0;
    buttx1 [setit] := 0;
    butty1 [setit] := 0;
  End;
  Showmouse;
End;


Procedure StopButtons;
Begin                              {Put the little Squeaker out of it's}
  Hidemouse;                       {              Misery               } End;


Function Leftpushed: Boolean;
Begin
  Leftpushed := False;
  If Leftpressed Then Leftpushed := True;
End;


Function Rightpushed: Boolean;
Begin
  Rightpushed := False;
  If Rightpressed Then Rightpushed := True;
End;



Begin
  If Not Mouseinstalled Then
  Begin
    TextColor (7);
    TextBackground (0);
    ClrScr;
    WriteLn (' This program reqires a mouse, please install your mouse driver ');
    WriteLn (' before running it... ');
    Halt;
  End;
End.

{ ---------------------------   MOUSER  UNIT  ------------------------ }

{This is some really GOOD stuff,  Bravo Bas! }
Unit mouser;
{ Mouseunit for textmode. by Bas van Gaalen, Holland. }
{      Slight Additions/Removals by CJ Cliffe         }

Interface

Const
  mtypes : Array [0..4] Of String [6] = ('bus', 'serial', 'inport', 'ps/2', 'hp');
  
Var
  buttons : Word;
  verhi, verlo, mousetype : Byte;
  driverinstalled : Boolean;
  
Function mouseinstalled : Boolean;
Procedure resetmouse;
Procedure getmouseversion;
Procedure showmouse;
Procedure hidemouse;
Function getmousex : Byte;
Function getmousey : Byte;
Function leftpressed : Boolean;
Function rightpressed : Boolean;
Procedure mousewindow (X1, Y1, X2, Y2 : Byte);


Implementation


Function mouseinstalled : Boolean; Assembler; Asm
  XOr AX, AX
  Int 33h
  cmp AX, - 1
  je @skip
  XOr AL, AL
  @skip:
End;

Procedure resetmouse; Assembler;
Asm
  XOr AX, AX
  Int 33h
  cmp AX, - 1
  jne @skip
  mov driverinstalled, True
  mov buttons, BX
  @skip:
End;

Procedure getmouseversion; Assembler;
Asm
  mov AX, 24h
  Int 33h
  mov verhi, BH
  mov verlo, BL
  mov mousetype, CH
End;

Procedure showmouse; Assembler;
Asm
  mov AX, 1
  Int 33h
End;

Procedure hidemouse; Assembler;
Asm
  mov AX, 2
  Int 33h
End;

Function getmousex : Byte; Assembler;
Asm
  mov AX, 3
  Int 33h
  ShR CX, 1
  ShR CX, 1
  ShR CX, 1
  mov AX, CX
End;

Function getmousey : Byte; Assembler;
Asm
  mov AX, 3
  Int 33h
  ShR DX, 1
  ShR DX, 1
  ShR DX, 1
  mov AX, DX
End;

Function leftpressed : Boolean; Assembler;
Asm
  mov AX, 3
  Int 33h
  And BX, 1
  mov AX, BX
End;

Function rightpressed : Boolean; Assembler;
Asm
  mov AX, 3
  Int 33h
  And BX, 2
  mov AX, BX
End;

Procedure mousewindow (X1, Y1, X2, Y2 : Byte); Assembler;
Asm
  mov AX, 7
  XOr CH, CH
  XOr DH, DH
  mov CL, X1
  ShL CX, 1
  ShL CX, 1
  ShL CX, 1
  mov DL, X2
  ShL DX, 1
  ShL DX, 1
  ShL DX, 1
  Int 33h
  mov AX, 8
  XOr CH, CH
  XOr DH, DH
  mov CL, Y1
  ShL CX, 1
  ShL CX, 1
  ShL CX, 1
  mov DL, Y2
  ShL DX, 1
  ShL DX, 1
  ShL DX, 1
  Int 33h
End;

End.


{ -----------------------   PROGRAM DEMO ---------------------------- }

Uses Crt, Buttunit;


Var Finished: Boolean;

Procedure DrawButts;
Begin
  ClrScr;
  Initbuttons;
  Addbutt ('mybutt1', 20, 20, 28, 20);              {Easy Button Set-Up}
  Addbutt ('mybutt2', 20, 21, 28, 21);
  Addbutt ('mybutt3', 20, 22, 28, 22);
  Addbutt ('quit',     1,  4,  8,  6);             {Buttons can be Any Size}
  TextColor (15);
  GotoXY (1, 1);
  Write ('[ ]  #1   [ ] #2    [ ] #3    ');
  GotoXY (20, 20);
  TextBackground (1); TextColor (15);
  Write (#221, 'Button1', #222);
  GotoXY (20, 21);
  TextBackground (2); TextColor (15);
  Write (#221, 'Button2', #222);
  GotoXY (20, 22);
  TextBackground (3); TextColor (15);
  Write (#221, 'Button3', #222);
  TextBackground (1); TextColor (15);
  GotoXY (1, 4);
  WriteLn (#219, #223, #223, #223, #223, #223, #223, #219);
  WriteLn (#221, ' Quit ', #222);
  WriteLn (#219, #220, #220, #220, #220, #220, #220, #219);
  TextBackground (0);
End;



Procedure Checkbutts;
Begin
  If Checkbutt ('mybutt1') Then
  Begin
    GotoXY (2, 1);
    TextColor (Random (8) + 8);
    Write (#254);
  End;
  If Checkbutt ('mybutt2') Then
  Begin
    GotoXY (12, 1);
    TextColor (Random (8) + 8);
    Write (#254);
  End;
  If Checkbutt ('mybutt3') Then
  Begin
    GotoXY (22, 1);
    TextColor (Random (8) + 8);
    Write (#254);
  End;
  If Checkbutt ('quit') Then Finished := True;
  Delay (200);
End;


Begin
  Drawbutts;
  Repeat
    Repeat
    Until LeftPushed;
    Checkbutts;
  Until Finished;
End.

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