[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]