'===========================================================================
' Subject: MOUSE PROGRAMMING                  Date: 08-03-97 (15:04)       
'  Author: Hiep Quang Luong                   Code: QB, QBasic, PDS        
'  Origin: hiep.luong@glo.be                Packet: MOUSE.ABC
'===========================================================================
REM Mouse programming by Hiep Quang Luong (hiep.luong@glo.be)
DECLARE SUB MuisInit ()
DECLARE SUB MuisReset ()
DECLARE SUB Muis (AanUit%)
DECLARE SUB MuisForm (Bmasker%, Cmasker%)
DECLARE SUB MuisRange (X%, B%, Y%, H%)
DECLARE SUB MuisSet (X%, Y%)
DECLARE SUB MuisTempo (tempo%)

DECLARE SUB GetMuis ()
DECLARE SUB WachtKnopLos ()
DECLARE SUB WachtBeweging ()

DECLARE SUB absolute (functie%, par1%, par2%, par3%, adr%)

DIM SHARED Muis.Offset%
DIM SHARED muisX%, muisY%, MuisK%

MuisInit
MuisReset

IF Muis.Offset% = -1 THEN
        PRINT "No Mousedriver !"
        END
END IF

SCREEN 12
CLS
LINE (0, 0)-(640, 480), 7, BF
Muis 1
DO
 GetMuis
  MuisTempo 4
  MuisForm &HFF00, &HC000 + ASC("h")
 IF MuisK% = 1 THEN
   DO
   PSET (muisX% - 1, muisY% - 1), 10
   REM WachtKnopLos
    GetMuis
   LOOP UNTIL MuisK% = 0
   LOCATE 1, 1
   PRINT "Klik at "; muisX%; muisY%
   WachtBeweging
 END IF
 X% = muisX%: Y% = muisY%
 DO
  key$ = INKEY$
  GetMuis
  LOCATE 2, 1
  PRINT muisX%; muisY%
 LOOP UNTIL X% <> muisX% OR Y% <> muisY% OR MuisK%
LOOP UNTIL MuisK% = 2 OR key$ = CHR$(27)
REM Muis 0

SUB GetMuis
IF Muis.Offset% = -1 THEN EXIT SUB
absolute 3, MuisK%, muisX%, muisY%, Muis.Offset%
END SUB

SUB Muis (AanUit%)

IF Muis.Offset% = -1 THEN EXIT SUB
IF AanUit% = 0 THEN AanUit% = 2 ELSE AanUit% = 1
absolute AanUit%, 0, 0, 0, Muis.Offset%

END SUB

SUB MuisForm (Bmasker%, Cmasker%)
IF Muis.Offset% = -1 THEN EXIT SUB

absolute 10, 0, Bmasker%, Cmasker%, Muis.Offset%

END SUB

SUB MuisInit
DEF SEG = 0
Muis.Segment% = 256 * PEEK(&HCC + 3) + PEEK(&HCC + 2)
Muis.Offset% = 256 * PEEK(&HCC + 1) + PEEK(&HCC + 0) + 2

DEF SEG = Muis.Segment%
IF Muis.Offset% + Muis.Segment% = 0 OR PEEK(Muis.Offset%) = 88 THEN
 Muis.Offset% = -1
END IF

END SUB

SUB MuisRange (X%, B%, Y%, H%)
IF Muis.Offset% = -1 THEN EXIT SUB
X% = X% * 8 - 8: B% = B% * 8
Y% = Y% * 8 - 8: H% = H% * 8

absolute 7, 0, X%, X% + B%, Muis.Offset%
absolute 8, 0, Y%, Y% + H%, Muis.Offset%

END SUB

SUB MuisReset

IF Muis.Offset% = -1 THEN EXIT SUB
SHARED buttons%
NoMuis% = 0
absolute NoMuis%, buttons%, 0, 0, Muis.Offset%
IF NoMuis% = 0 THEN Muis.Offset% = -1

END SUB

SUB MuisSet (X%, Y%)
IF Muis.Offset% = -1 THEN EXIT SUB
X1% = X% * 8 - 8: Y1% = Y% * 8 - 8
absolute 4, 0, X1%, Y1%, Muis.Offset%

END SUB

SUB MuisTempo (tempo%)
IF Muis.Offset% = -1 THEN EXIT SUB
absolute 15, 0, tempo%, tempo% * 2, Muis.Offset%
END SUB

SUB WachtBeweging
IF Muis.Offset% = -1 THEN EXIT SUB
GetMuis
X% = muisX%: Y% = muisY%: K% = MuisK%
DO
 GetMuis
LOOP UNTIL muisX% <> X% OR muisY% <> Y% OR MuisK% <> K%
END SUB

SUB WachtKnopLos
IF Muis.Offset% = -1 THEN EXIT SUB
DO
 GetMuis
LOOP UNTIL MuisK% = 0
END SUB
