home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB BasicInt (IntType AS INTEGER)
- '
- ' Demonstration of Mouse-controlled Buttons
- '
- '++++++++++++++++++++++++
- ' NEW CODE
- DECLARE SUB InPath (Field$)
- DIM SHARED BAD$
- ON ERROR GOTO RESUMENEXT
- RESUMENEXT:
- IF ERR = 255 THEN
- CLS
- BEEP
- PRINT "Cannot find BASICINT.OVL"
- SLEEP
- SYSTEM
- END IF
- IF ERR THEN
- BAD$ = "X"
- RESUME NEXT
- END IF
- ' END NEW CODE
- '++++++++++++++++++++++++
- TYPE REGISTERS
- AX AS INTEGER
- BX AS INTEGER
- CX AS INTEGER
- DX AS INTEGER
- DS AS INTEGER
- SI AS INTEGER
- ES AS INTEGER
- DI AS INTEGER
- FL AS INTEGER
- END TYPE
- DIM SHARED REGS AS REGISTERS
-
- '*************************************
- SCREEN 9
- COLOR 8, 7
- CLS
- '************************
-
- Choice% = 1
- GOSUB PaintButtons
-
-
-
-
- ' test for presence of a mouse
-
- REGS.AX = 0
- CALL BasicInt(&H33)
- IF REGS.AX THEN
- Mouse% = 1
- REGS.AX = 4
- REGS.CX = 315
- REGS.DX = 35
- CALL BasicInt(&H33)
- REGS.AX = 1
- CALL BasicInt(&H33)
- END IF
-
- ' handle both keys and mouse clicks
-
- WHILE Choice% <> 7
- x$ = ""
- WHILE LEN(x$) = 0
- Counter! = TIMER
- WHILE LEN(x$) = 0
- x$ = INKEY$
- IF Mouse% THEN
- REGS.AX = 3
- CALL BasicInt(&H33)
- IF (REGS.BX AND 1) THEN
- IF REGS.CX > 300 AND REGS.CX < 331 THEN
- IF (REGS.DX MOD 42) > 21 THEN
- OldChoice% = Choice%
- Choice% = 1 + INT(REGS.DX / 42)
- IF Choice% = OldChoice% THEN
- IF TIMER - Counter! < .3 THEN
- IF NoGap% = 0 THEN
- x$ = CHR$(13)
- END IF
- END IF
- ELSE
- GOSUB PaintButtons
- END IF
- Counter! = TIMER
- NoGap% = 1
- END IF
- END IF
- ELSE
- NoGap% = 0
- END IF
- END IF
- WEND
- IF LEN(x$) = 2 THEN
- IF RIGHT$(x$, 1) = "H" THEN
- Choice% = Choice% - 1
- END IF
- IF RIGHT$(x$, 1) = "P" THEN
- Choice% = Choice% + 1
- END IF
- IF Choice% = 0 THEN Choice% = 1
- IF Choice% = 8 THEN Choice% = 7
- GOSUB PaintButtons
- END IF
- IF x$ <> CHR$(13) THEN x$ = ""
- WEND
- LINE (150, 0)-(250, 349), 0, BF
- LINE (150, 42 * Choice% - 18)-(250, 42 * Choice% + 4), 12, BF
- WEND
-
- IF Mouse% THEN
- REGS.AX = 2
- CALL BasicInt(&H33)
- END IF
-
- TimeStart! = TIMER
- WHILE TIMER - TimeStart! < 2
- WEND
-
-
-
- STOP
-
-
-
-
- '************************
- ' Subroutine to paint the buttons
- '
- PaintButtons:
- IF Mouse% THEN
- REGS.AX = 2
- CALL BasicInt(&H33)
- END IF
- FOR i% = 1 TO 7
- LOCATE 3 * i%, 39
- IF i% = Choice% THEN Hue% = 15 ELSE Hue% = 8
-
- ' Sculpted buttons:
- ' OFF = grey on north and west, +white on south and east
- ' ON = grey on south and east, +white on north and west
-
- COLOR 8
- PRINT i%
- LINE (300, 42 * i% - 18)-(329, 42 * i% - 18), (Hue% XOR 7)
- LINE (300, 42 * i% - 18)-(300, 42 * i% + 4), (Hue% XOR 7)
- LINE (330, 42 * i% - 18)-(330, 42 * i% + 4), Hue%
- LINE (301, 42 * i% + 4)-(330, 42 * i% + 4), Hue%
-
- NEXT
- IF Mouse% THEN
- REGS.AX = 1
- CALL BasicInt(&H33)
- END IF
-
-
-
- RETURN
-
- SUB BasicInt (IntType AS INTEGER) STATIC
-
-
- DIM ASM%(54)
- DEF SEG = VARSEG(ASM%(0))
-
- IF ASM%(1) = 0 THEN
- '++++++++++++++++++++++++
- ' NEW CODE
-
- Field$ = "BASICINT.OVL"
- CALL InPath(Field$)
- IF Field$ = "" THEN ERROR 255
- BLOAD Field$, VARPTR(ASM%(0))
-
- ' END NEW CODE
- '++++++++++++++++++++++++
- END IF
-
- CALL ABSOLUTE(REGS, IntType, VARPTR(ASM%(0)))
-
- DEF SEG
-
- END SUB
-
- SUB InPath (Field$)
-
- x$ = ".;" + ENVIRON$("PATH")
- IF RIGHT$(x$, 1) <> ";" THEN x$ = x$ + ";"
- i% = 1
- DO
- J% = INSTR(i%, x$, ";")
- IF J% THEN
- Y$ = UCASE$(MID$(x$, i%, J% - i%))
- i% = J% + 1
- IF RIGHT$(Y$, 1) <> "\" THEN Y$ = Y$ + "\"
- F$ = Y$ + Field$
- BAD$ = ""
- OPEN "I", 1, F$
- IF BAD$ = "" THEN
- CLOSE 1
- EXIT DO
- END IF
- F$ = ""
- END IF
- LOOP WHILE J%
- BAD$ = ""
- Field$ = F$
-
-
- END SUB
-
-