'=========================================================================== ' Subject: MOUSE PAINT Date: Unknown Date ' Author: Chad Beck Code: QB, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: MOUSE.ABC '=========================================================================== DEFINT A-Z '$INCLUDE: 'qb.bi' DIM SHARED Registers AS RegType CONST GridSize = 8, BoxSize = GridSize - 2 CONST GridColr = 8 DrawingColr = 4 'Selected drawing color # Colr = DrawingColr 'Toggles black & DrawingColr 'Initialize the mouse Registers.AX = 0 CALL Interrupt(&H33, Registers, Registers) 'Drawing grid SCREEN 12 FOR X = 110 TO 500 STEP GridSize LINE (X, 2)-(X, 386), GridColr LINE (110, X - 108)-(494, X - 108), GridColr NEXT 'Set horizontal boundaries Registers.AX = 7 Registers.CX = 0 'Registers.CX = 112 Registers.DX = 620 'Registers.DX = 495 CALL Interrupt(&H33, Registers, Registers) 'Set vertical boundaries Registers.AX = 8 Registers.CX = 1 Registers.DX = 452 'Registers.DX = 382 CALL Interrupt(&H33, Registers, Registers) DO 'Show the mouse cursor Registers.AX = 1 CALL Interrupt(&H33, Registers, Registers) Top: DO 'Get mouse location and status: 'If Registers.BX=1 then left button is pushed 'If Registers.BX=2 then right button is pushed 'If Registers.BX=3 then both buttons have been pushed Registers.AX = 3 CALL Interrupt(&H33, Registers, Registers) OldButtons = Buttons 'Save previous button state Buttons = Registers.BX LOOP UNTIL Buttons = 1 'Wait for left button OldX = Xo: OldY = Yo 'Save previous coordinates X = Registers.CX Y = Registers.DX Xo = (X \ GridSize) * GridSize - 1 'Adjust for odd grid placement Yo = (Y \ GridSize) * GridSize + 3 'If the cursor or buttons haven't changed then do nothing IF (OldX - Xo) + (OldY - Yo) + (OldButtons - Buttons) = 0 THEN GOTO Top: END IF IF POINT(Xo, Yo) = Colr THEN Colr = Colr XOR DrawingColr 'Painting routine Registers.AX = 2 'Hide the mouse cursor CALL Interrupt(&H33, Registers, Registers) LINE (Xo, Yo)-STEP(BoxSize, BoxSize), Colr, BF PSET ((Xo \ GridSize), (Yo \ GridSize)), Colr LOOP