'===========================================================================
' Subject: BASIC MOUSE DRIVEN CALCULATOR      Date: 07-25-99 (12:02)       
'  Author: Marc Santa                         Code: QB, QBasic, PDS        
'  Origin: santa@tir.com                    Packet: MISC.ABC
'===========================================================================
DECLARE SUB MouseHide ()
DECLARE SUB CheckPos ()
DECLARE SUB DrawCalc ()
DECLARE SUB MouseDriver (AX%, bx%, CX%, DX%)
DECLARE FUNCTION MouseInit% ()
DECLARE SUB Mouseshow ()
DECLARE SUB mousestatus (LB%, RB%, Xmouse%, Ymouse%)
DECLARE SUB STICKS (Joyx%, JOYY%, BUT1%, BUt2%, BUT3%)
DIM SHARED mouse$
RESTORE
mouse$ = SPACE$(57)
FOR I% = 1 TO 57
  READ A$
  H$ = CHR$(VAL("&H" + A$))
  MID$(mouse$, I%, 1) = H$
NEXT I%
DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B
DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
DATA 8B,5E,06,89,17,5D,CA,08,00
CLS

MS% = MouseInit%
IF NOT MS% THEN
  PRINT "Mouse not found": LET AMOUSE$ = "NO":


END IF
PRINT "Mouse found and initialized": LET AMOUSE$ = "YES"
Mouseshow
SCREEN 12
DIM SHARED TemNum$
DIM SHARED LB%
DIM SHARED RB%
DIM SHARED Xmouse%
DIM SHARED Ymouse%
Mouseshow

DrawCalc

DO
mousestatus LB%, RB%, Xmouse%, Ymouse%
REM LOCATE 21, 1: PRINT "Mouse STUFF:  LB:"; LB%, "RB:"; RB%, "X:"; Xmouse%, "Y:"; Ymouse%
REM LOCATE 22, 1: PRINT "Main1: "; Main1, "Main2: "; Main2, "Main1$: "; Main1$, "Main2$: "; Main2$
IF LB% = -1 AND Mdown = 0 THEN CALL CheckPos: LET Mdown = 1
IF Mdown = 1 AND LB% = 0 THEN LET Mdown = 0
IF TemNum$ <> "" THEN GOSUB Numbers
LOOP


Numbers:
IF TemNum$ = "/" THEN GOTO Way
IF TemNum$ = "*" THEN GOTO Way
IF TemNum$ = "-" THEN GOTO Way
IF TemNum$ = "+" THEN GOTO Way
IF TemNum$ = "=" THEN GOTO Equate
IF TemNum$ = "C" THEN GOTO Clearing

IF Way = 0 AND LEN(Main1$) >= 12 THEN LET TemNum$ = "": RETURN
IF Way = 1 AND LEN(Main2$) >= 12 THEN LET TemNum$ = "": RETURN

IF Way = 0 THEN LET Main1$ = Main1$ + TemNum$
IF Way >= 1 THEN LET Main2$ = Main2$ + TemNum$
IF Way = 0 THEN LOCATE 3, (13 - LEN(Main1$)): PRINT Main1$
IF Way >= 1 THEN LOCATE 3, (13 - LEN(Main2$)): PRINT Main2$


LET TemNum$ = ""
RETURN

Way:
IF Way = 1 THEN GOTO Clearing
LOCATE 3, 1: PRINT STRING$(20, 32)
IF TemNum$ = "/" THEN LET Way = 1: LOCATE 3, 12: PRINT "ö"
IF TemNum$ = "*" THEN LET Way = 2: LOCATE 3, 12: PRINT "X"
IF TemNum$ = "-" THEN LET Way = 3: LOCATE 3, 12: PRINT "-"
IF TemNum$ = "+" THEN LET Way = 4: LOCATE 3, 12: PRINT "+"
LET TemNum$ = ""
RETURN

Equate:
LET Main1 = VAL(Main1$)
LET Main2 = VAL(Main2$)
IF Way = 1 THEN LET Answer = Main1 / Main2
IF Way = 2 THEN LET Answer = Main1 * Main2
IF Way = 3 THEN LET Answer = Main1 - Main2
IF Way = 4 THEN LET Answer = Main1 + Main2
LET Main2$ = ""
LET Main2 = 0
LET Way = 0
LET Answer$ = STR$(Answer)
LET Plen = LEN(Answer$)
LET Main1$ = Answer$
LET Main1 = Answer
IF LEN(Answer$) > 12 THEN LET Plen = 12
LOCATE 3, (13 - Plen): PRINT Answer$
LET Answer = 0
LET Answer$ = ""
LET TemNum$ = ""
RETURN

Clearing:
MouseHide
LET Answer$ = ""
LET Answer = 0
LET Main1$ = ""
LET Main2$ = ""
LET Main1 = 0
LET Main2 = 0
LET Way = 0
LOCATE 3, 1: PRINT STRING$(20, 32)
LET TemNum$ = ""
Mouseshow
RETURN

SUB CheckPos
IF Xmouse% > 25 AND Xmouse% < 50 AND Ymouse% > 50 AND Ymouse% < 75 THEN LET TemNum$ = "1"
IF Xmouse% > 50 AND Xmouse% < 75 AND Ymouse% > 50 AND Ymouse% < 75 THEN LET TemNum$ = "2"
IF Xmouse% > 75 AND Xmouse% < 100 AND Ymouse% > 50 AND Ymouse% < 75 THEN LET TemNum$ = "3"
IF Xmouse% > 25 AND Xmouse% < 50 AND Ymouse% > 75 AND Ymouse% < 100 THEN LET TemNum$ = "4"
IF Xmouse% > 50 AND Xmouse% < 75 AND Ymouse% > 75 AND Ymouse% < 100 THEN LET TemNum$ = "5"
IF Xmouse% > 75 AND Xmouse% < 100 AND Ymouse% > 75 AND Ymouse% < 100 THEN LET TemNum$ = "6"
IF Xmouse% > 25 AND Xmouse% < 50 AND Ymouse% > 100 AND Ymouse% < 125 THEN LET TemNum$ = "7"
IF Xmouse% > 50 AND Xmouse% < 75 AND Ymouse% > 100 AND Ymouse% < 125 THEN LET TemNum$ = "8"
IF Xmouse% > 75 AND Xmouse% < 100 AND Ymouse% > 100 AND Ymouse% < 125 THEN LET TemNum$ = "9"
IF Xmouse% > 25 AND Xmouse% < 50 AND Ymouse% > 125 AND Ymouse% < 150 THEN LET TemNum$ = "+"
IF Xmouse% > 50 AND Xmouse% < 75 AND Ymouse% > 125 AND Ymouse% < 150 THEN LET TemNum$ = "0"
IF Xmouse% > 75 AND Xmouse% < 100 AND Ymouse% > 125 AND Ymouse% < 150 THEN LET TemNum$ = "-"
IF Xmouse% > 25 AND Xmouse% < 50 AND Ymouse% > 150 AND Ymouse% < 175 THEN LET TemNum$ = "/"
IF Xmouse% > 50 AND Xmouse% < 75 AND Ymouse% > 150 AND Ymouse% < 175 THEN LET TemNum$ = "="
IF Xmouse% > 75 AND Xmouse% < 100 AND Ymouse% > 150 AND Ymouse% < 175 THEN LET TemNum$ = "*"
IF Xmouse% > 50 AND Xmouse% < 75 AND Ymouse% > 175 AND Ymouse% < 200 THEN LET TemNum$ = "C"
EOS:

END SUB

SUB DrawCalc
LINE (25, 50)-(100, 50)
LINE (25, 75)-(100, 75)
LINE (25, 100)-(100, 100)
LINE (25, 125)-(100, 125)
LINE (25, 150)-(100, 150)
LINE (25, 175)-(100, 175)

LINE (25, 50)-(25, 175)
LINE (50, 50)-(50, 200)
LINE (75, 50)-(75, 200)
LINE (100, 50)-(100, 175)
LINE (50, 200)-(75, 200)

'1
LINE (37, 55)-(37, 70)
'2
LINE (55, 55)-(70, 55)
LINE (70, 55)-(70, 62)
LINE (70, 62)-(55, 62)
LINE (55, 62)-(55, 70)
LINE (55, 70)-(70, 70)
'3
LINE (95, 55)-(95, 70)
LINE (80, 55)-(95, 55)
LINE (80, 62)-(95, 62)
LINE (80, 70)-(95, 70)
'4
LINE (30, 80)-(30, 87)
LINE (30, 87)-(45, 87)
LINE (45, 80)-(45, 95)
'5
LINE (55, 80)-(70, 80)
LINE (70, 87)-(70, 95)
LINE (70, 87)-(55, 87)
LINE (55, 80)-(55, 87)
LINE (55, 95)-(70, 95)
'6
LINE (80, 80)-(80, 95)
LINE (80, 95)-(95, 95)
LINE (95, 95)-(95, 87)
LINE (95, 87)-(80, 87)
'7
LINE (30, 108)-(30, 105)
LINE (30, 105)-(45, 105)
LINE (45, 105)-(35, 120)
'8
LINE (55, 105)-(70, 105)
LINE (70, 105)-(70, 120)
LINE (70, 120)-(55, 120)
LINE (55, 120)-(55, 105)
LINE (55, 112)-(70, 112)
'9
LINE (80, 105)-(95, 105)
LINE (95, 105)-(95, 120)
LINE (80, 105)-(80, 112)
LINE (80, 112)-(95, 112)
'+
LINE (37, 130)-(37, 145)
LINE (30, 137)-(45, 137)
'0
LINE (55, 130)-(70, 130)
LINE (70, 130)-(70, 145)
LINE (70, 145)-(55, 145)
LINE (55, 145)-(55, 130)
'-
LINE (80, 137)-(95, 137)
'Divided
LINE (30, 162)-(45, 162)
PSET (37, 157)
PSET (37, 167)
'=
LINE (55, 160)-(70, 160)
LINE (55, 165)-(70, 165)
'X
LINE (80, 155)-(95, 170)
LINE (95, 155)-(80, 170)
'CE
LINE (53, 179)-(59, 179)
LINE (53, 179)-(53, 187)
LINE (53, 187)-(59, 187)
LINE (64, 187)-(64, 195)
LINE (64, 187)-(70, 187)
LINE (64, 191)-(70, 191)
LINE (64, 195)-(70, 195)
END SUB

SUB MouseDriver (AX%, bx%, CX%, DX%)
  DEF SEG = VARSEG(mouse$)
  mouse% = SADD(mouse$)
  CALL Absolute(AX%, bx%, CX%, DX%, mouse%)
END SUB

SUB MouseHide
 AX% = 2
 MouseDriver AX%, 0, 0, 0
END SUB

FUNCTION MouseInit%
  AX% = 0
  MouseDriver AX%, 0, 0, 0
  MouseInit% = AX%

END FUNCTION

SUB MousePut
  AX% = 4
  CX% = X%
  DX% = Y%
  MouseDriver AX%, 0, CX%, DX%
END SUB

SUB Mouseshow
  AX% = 1
  MouseDriver AX%, 0, 0, 0
END SUB

SUB mousestatus (LB%, RB%, Xmouse%, Ymouse%)
  AX% = 3
  MouseDriver AX%, bx%, CX%, DX%
  LB% = ((bx% AND 1) <> 0)
  RB% = ((bx% AND 2) <> 0)
  Xmouse% = CX%
  Ymouse% = DX%
END SUB

SUB STICKS (Joyx%, JOYY%, BUT1%, BUt2%, BUT3%)
Joyx% = STICK(0)
JOYY% = STICK(1)

BUT1% = STRIG(1)
BUt2% = STRIG(5)
BUT3% = STRIG(7)
END SUB
