'=========================================================================== ' 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