'=========================================================================== ' Subject: MOUSE POINTER FOR SCREEN 13 Date: 03-17-98 (13:44) ' Author: Warren Seyle Code: QBasic ' Origin: wseyle@awod.com Packet: MOUSE.ABC '=========================================================================== DECLARE SUB PutMouse (mx%, my%) DECLARE SUB About () DECLARE SUB AboutPal () DECLARE SUB Background () DECLARE SUB DrawButton (Text$, Col%, Row%, DrawFlag%) DECLARE SUB DrawPanel (W.X%, W.Y%, W.W%, W.H%, Border%) DECLARE SUB GetMouseCord (Btn%, M3%, M4%) DECLARE SUB GPRINT (Text$, x%, Y%, StepX%, StepY%, Colr%, BckGround%, Shadow%) DECLARE SUB HideMouse () DECLARE SUB Interrupt (IntNum AS INTEGER, Regs AS ANY) DECLARE SUB LoadImages () DECLARE SUB MainPal () DECLARE SUB Qbasic (x AS INTEGER, Y AS INTEGER) DECLARE SUB ShowMouse () DECLARE FUNCTION MouseInstalled% () CONST False = 0, True = NOT False CONST Down = 0, Up = 1 CONST LightGray = 26, DarkGray = 39, White = 255 CONST Red = 254, Blue = 253, Yellow = 252, Green = 211 CONST NoBorder = 0, Border = 1 CONST NoShadow = 0, Shadow = 1 DIM SHARED AboutClick AS INTEGER, QuitClick AS INTEGER DIM SHARED EndCol AS INTEGER, EndRow AS INTEGER DIM SHARED Pointer(163) AS INTEGER DIM SHARED PointerMask(163) AS INTEGER DIM SHARED PointerBack(201) AS INTEGER DIM SHARED GrayBall(910) AS INTEGER DIM SHARED MouseOk AS INTEGER DEFINT A-Z TYPE RegType Ax AS INTEGER bx AS INTEGER Cx AS INTEGER Dx AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER FLAGS AS INTEGER DS AS INTEGER ES AS INTEGER END TYPE DIM SHARED Regs AS RegType REDIM SHARED Intrpt(1 TO 50) AS INTEGER RESTORE InterruptData DEF SEG = VARSEG(Intrpt(1)) Address = VARPTR(Intrpt(1)) FOR I = 0 TO 99 READ OpCode POKE Address + I, OpCode NEXT MouseOk = MouseInstalled% IF MouseOk THEN PRINT "Mouse installed ok" ELSE PRINT "No mouse.": END END IF AbotuClick = False: QuitClick = False SCREEN 13 CLS HideMouse MainPal LoadImages InputLoop: Background 'Draw panel with border DrawPanel 60, 50, 140, 100, Border 'draw two buttons DrawButton "Quit", 30, 51, Up DrawButton "About", 30, 80, Up GPRINT "LONG LIVE", 73, 63, 13, 0, Red, Black, Shadow Qbasic 83, 75 GPRINT "Freeware mouse", 73, 95, 8, 0, Blue, Black, Shadow GPRINT "routines for", 80, 105, 8, 0, Blue, Black, Shadow GPRINT "SCREEN 13!", 90, 120, 8, 0, Yellow, Black, Shadow 'Mouse input loop Mouse.X% = 320 / 2: Mouse.Y% = 100 PutMouse Mouse.X%, Mouse.Y% ShowMouse DO 'set mouse boundaries so the pointer 'won't wander off screen IF Mouse.Y% > 181 THEN Mouse.Y% = 181 IF Mouse.X% > 302 THEN Mouse.X% = 302 IF Mouse.Y% < 3 THEN Mouse.Y% = 3 IF Mouse.X% < 3 THEN Mouse.X% = 3 'Get temp background GET ((Mouse.X% - 1), Mouse.Y%)-((Mouse.X% - 1) + 18, Mouse.Y% + 18), PointerBack 'Lay down the mask PUT ((Mouse.X% - 1), Mouse.Y%), PointerMask, AND 'Overlap with pointer PUT ((Mouse.X% - 1), Mouse.Y%), Pointer, OR 'wait for Vertical retrace WAIT &H3DA, 8 'Restore BackGround PUT ((Mouse.X% - 1), Mouse.Y%), PointerBack, PSET 'get mouse location and status 'if Btn% = 1 then left button is pushed 'if Btn% = 2 then right button is pushed 'if Btn% = 3 then both buttons have been pushed GetMouseCord Btn%, Mouse.X%, Mouse.Y% 'convert x to screen 13 coordinates Mouse.X% = Mouse.X% \ 2 'Left mouse button pressed... IF Btn% = 1 THEN 'check to see if Quit is clicked IF Mouse.X% > 233 AND Mouse.Y% > 52 THEN IF Mouse.X% < 278 AND Mouse.Y% < 68 THEN DrawButton "Quit", 30, 51, Down QuitClick = True END IF END IF 'check to if About was clicked IF Mouse.X% > 233 AND Mouse.Y% > 81 THEN IF Mouse.X% < 288 AND Mouse.Y% < 98 THEN DrawButton "About", 30, 80, Down AboutClick = True END IF END IF END IF LOOP UNTIL QuitClick OR AboutClick IF QuitClick THEN HideMouse SCREEN 0 CLS END ELSEIF AboutClick THEN HideMouse About END IF InterruptData: DATA 85,139,236,86,87,30,139,118,6,139,4,139,92,2 DATA 139,76,4,139,84,6,139,108,8,139,124,12,142,68,18 DATA 255,116,10,131,124,18,255,117,2,30,7,131,124,16,255 DATA 116,3,142,92,16,94,205,33,85,139,236,30,86,142,94,2,139,118,14 DATA 137,4,137,92,2,137,76,4,137,84,6,143,68,10,143,68,16 DATA 143,68,8,137,124,12,140,68,18,156,143,68,14 DATA 95,95,94,93,202,2,0 PointerImage: DATA 184,184,184,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 DATA 184,168,134,184,184,000,000,000,000,000,000,000,000,000,000,000,000,000 DATA 184,255,051,157,143,184,184,184,000,000,000,000,000,000,000,000,000,000 DATA 184,060,051,051,157,157,143,060,184,184,000,000,000,000,000,000,000,000 DATA 000,184,051,051,051,157,051,168,157,047,184,184,000,000,000,000,000,000 DATA 000,184,077,051,051,051,051,051,034,051,146,174,184,184,000,000,000,000 DATA 000,000,184,051,051,051,051,051,027,034,143,145,174,174,184,184,000,000 DATA 000,000,184,051,051,051,051,051,146,113,151,132,132,132,132,132,184,000 DATA 000,000,184,040,051,124,124,123,174,134,132,132,132,132,132,132,047,184 DATA 000,000,000,184,124,034,062,174,174,132,132,132,132,132,132,132,132,184 DATA 000,000,000,184,142,143,174,134,174,132,047,047,022,132,132,132,132,184 DATA 000,000,000,000,184,054,112,174,132,132,047,060,113,113,132,132,075,184 DATA 000,000,000,000,184,113,113,132,132,132,132,022,157,157,113,047,184,000 DATA 000,000,000,000,184,132,132,132,132,132,132,132,174,157,157,002,184,000 DATA 000,000,000,000,000,184,047,132,132,132,132,132,060,174,051,076,075,184 DATA 000,000,000,000,000,000,184,074,132,132,075,184,184,184,047,132,132,184 DATA 000,000,000,000,000,000,000,184,184,184,184,000,000,000,184,184,184,000 DATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 BackgroundImage: DATA 233,231,231,231,233,216,232,230,230,231,231,233,233,231,232,232,231,232,231,233,232,231,230,232,231,231,233,231,232,230,231,231,233,232,230,231,232,231,231,215,215,232,230,231,232,232,233,232,232,232,231,233,215,233,231,232,233,233,233,215,232,231,207,207 DATA 233,232,221,221,223,224,223,216,218,216,219,218,219,221,223,223,221,218,218,239,219,216,216,218,220,224,223,223,216,233,216,218,220,219,218,223,218,215,219,223,218,215,219,215,220,219,216,221,233,216,216,216,221,223,221,239,221,221,239,239,221,219,207,205 DATA 232,233,240,221,240,239,218,218,216,219,218,218,218,219,221,239,218,221,221,239,218,216,218,223,221,223,223,233,218,207,231,231,231,207,218,221,221,221,218,224,218,219,216,219,218,215,218,221,215,233,233,215,218,219,219,223,216,223,218,221,221,223,205,205 DATA 232,215,239,223,221,220,224,240,239,215,218,223,221,239,218,239,224,221,218,239,221,239,223,239,239,221,218,218,215,221,220,224,223,232,210,207,216,218,221,221,219,219,216,223,218,218,218,239,233,233,215,233,218,219,219,223,224,219,233,215,221,216,207,205 DATA 233,218,239,223,223,220,223,221,219,218,221,225,239,223,221,240,218,218,218,224,219,239,219,218,221,218,218,215,218,239,239,224,218,233,231,231,205,203,239,219,221,218,218,219,219,219,218,218,216,233,233,233,221,218,218,218,218,215,233,215,218,216,207,203 DATA 233,215,221,216,218,221,221,223,219,218,223,240,239,239,221,224,218,219,218,220,223,221,218,232,215,215,233,218,221,225,223,221,239,221,218,232,230,207,230,203,215,215,219,219,215,215,218,223,218,218,233,215,224,218,215,215,218,215,215,218,221,224,205,207 DATA 233,231,218,215,219,233,221,224,221,218,218,221,219,221,218,240,215,218,220,218,218,218,231,232,233,216,220,239,239,225,239,221,221,218,219,233,233,230,207,205,203,215,218,223,215,218,224,239,216,233,232,218,218,219,218,218,218,218,221,223,223,218,203,205 DATA 232,230,221,218,218,219,218,219,216,221,221,216,219,218,218,240,221,218,216,221,219,218,231,221,232,221,223,219,225,226,225,239,218,219,221,216,231,232,207,207,205,218,221,216,239,223,219,223,215,218,218,221,221,218,221,219,219,223,223,218,218,218,205,205 DATA 232,230,221,221,223,240,239,223,220,223,239,216,218,219,224,221,218,223,218,215,223,233,233,233,216,224,216,218,241,225,221,224,219,219,226,218,215,232,207,207,205,230,218,220,221,216,216,219,216,218,219,223,218,219,220,218,219,216,215,215,233,233,203,207 DATA 231,231,218,223,239,221,219,224,239,223,221,218,218,223,239,216,219,223,216,215,231,218,215,232,218,221,216,215,218,240,224,216,233,215,216,232,232,232,230,207,205,205,205,216,216,216,233,218,218,218,218,221,216,223,216,239,218,218,215,232,218,221,205,205 DATA 231,231,221,224,219,218,218,239,239,216,239,218,221,218,219,218,220,218,232,215,231,216,233,232,221,215,233,233,223,219,221,218,218,218,233,232,231,230,207,207,205,203,207,218,218,233,219,219,221,220,219,219,221,218,216,218,215,215,216,219,219,240,207,207 DATA 233,233,219,219,218,216,215,218,218,218,239,218,215,219,215,221,239,218,216,216,233,233,232,215,218,232,233,218,216,233,215,219,215,216,232,232,230,207,205,205,205,205,207,216,215,223,221,223,219,218,220,223,219,221,223,218,218,218,221,221,239,221,205,230 DATA 215,232,224,239,239,216,218,220,224,220,215,233,216,215,218,221,219,216,221,223,232,230,232,218,232,231,231,231,232,231,215,216,215,215,232,230,203,205,202,207,205,207,207,215,233,221,218,239,218,216,233,215,221,216,218,221,221,223,221,239,223,216,207,207 DATA 232,231,223,223,221,215,221,223,221,224,216,215,215,216,221,240,239,239,219,221,232,231,215,233,205,230,230,230,230,230,232,232,231,231,207,203,202,203,203,205,205,207,205,218,218,216,218,218,219,215,215,221,220,218,223,239,239,221,221,218,215,216,205,205 DATA 215,233,219,215,221,218,221,219,218,221,218,219,218,218,216,223,224,221,221,218,221,231,233,232,232,205,230,207,207,207,230,230,207,205,229,202,229,202,205,205,205,205,216,216,218,215,220,221,215,223,215,218,220,218,221,224,223,223,221,215,215,215,207,205 DATA 215,215,215,218,239,218,215,219,218,215,218,221,223,239,221,220,223,219,216,224,224,221,232,231,233,232,232,203,203,203,205,205,202,229,229,201,207,207,207,205,207,218,215,215,215,218,218,221,220,219,221,219,218,216,218,223,221,223,221,233,232,218,205,203 DATA 233,218,216,223,224,233,233,219,220,221,223,223,223,221,223,216,215,233,215,216,224,223,221,221,233,232,232,233,233,201,201,228,201,228,205,205,205,205,205,219,218,216,216,216,215,216,221,219,221,219,239,220,216,215,218,219,221,221,221,215,216,233,205,203 DATA 215,216,215,223,219,215,216,223,219,223,221,219,221,223,233,219,215,215,219,221,223,221,223,223,223,239,216,216,218,224,223,218,233,218,223,224,223,218,223,221,218,218,218,218,218,216,219,223,223,221,224,223,218,223,223,223,240,220,218,216,216,216,205,203 DATA 233,232,228,201,201,228,228,228,229,201,228,228,228,228,228,228,228,228,228,201,228,228,228,228,228,228,228,228,201,228,228,228,228,228,201,201,201,228,201,228,201,201,228,228,228,228,228,228,228,229,229,228,228,228,228,201,201,201,201,228,201,201,207,203 DATA 233,201,228,228,201,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,201,201,201,228,228,228,228,201,201,201,201,228,228,228,228,201,228,228,228,201,228,228,201,201,228,228,228,228,228,201,228,201,228,228,228,228,228,201,201,203 SUB About DIM OkClick AS INTEGER OkClick = False HideMouse CLS AboutPal Background DrawPanel 60, 30, 195, 130, Border GPRINT "I wanted to create a", 73, 43, 8, 0, Yellow, Black, Shadow GPRINT "mouse pointer that", 73, 53, 8, 0, Yellow, Black, Shadow GPRINT "would not corrupt the", 73, 63, 8, 0, Yellow, Black, Shadow GPRINT "background in", 100, 73, 8, 0, Yellow, Black, Shadow GPRINT "SCREEN 13", 100, 83, 13, 0, Green, Black, Shadow GPRINT "This is the result.", 73, 93, 8, 0, Blue, Black, Shadow GPRINT "Please use and modify", 73, 103, 8, 0, Blue, Black, Shadow GPRINT "any way you wish", 93, 113, 8, 0, Blue, Black, Shadow GPRINT "and use in your", 93, 123, 8, 0, Blue, Black, Shadow GPRINT "own QBASIC programs.", 73, 133, 8, 0, Blue, Black, Shadow DrawButton "OK", 19, 160, Up Mouse.X% = 160: Mouse.Y% = 100 PutMouse Mouse.X%, Mouse.Y% ShowMouse DO 'set mouse boundaries so the pointer 'won't wander off screen IF Mouse.Y% > 181 THEN Mouse.Y% = 181 IF Mouse.X% > 302 THEN Mouse.X% = 302 IF Mouse.Y% < 3 THEN Mouse.Y% = 3 IF Mouse.X% < 3 THEN Mouse.X% = 3 'Get temp background GET ((Mouse.X% - 1), Mouse.Y%)-((Mouse.X% - 1) + 18, Mouse.Y% + 18), PointerBack 'Lay down the mask PUT ((Mouse.X% - 1), Mouse.Y%), PointerMask, AND 'Overlap with pointer PUT ((Mouse.X% - 1), Mouse.Y%), Pointer, OR 'wait for Vertical retrace WAIT &H3DA, 8 'Restore BackGround PUT ((Mouse.X% - 1), Mouse.Y%), PointerBack, PSET 'get mouse location and status 'if Btn% = 1 then left button is pushed 'if Btn% = 2 then right button is pushed 'if Btn% = 3 then both buttons have been pushed GetMouseCord Btn%, Mouse.X%, Mouse.Y% 'convert x to screen 13 coordinates Mouse.X% = Mouse.X% \ 2 'Left mouse button pressed... IF Btn% = 1 THEN 'check to see if Ok is clicked IF Mouse.X% > 145 AND Mouse.Y% > 151 THEN IF Mouse.X% < 170 AND Mouse.Y% < 176 THEN DrawButton "OK", 19, 160, Down OkClick = True END IF END IF END IF LOOP UNTIL OkClick END SUB SUB AboutPal PALETTE 201, 16128 'colors used PALETTE 228, 15 PALETTE 201, 16 PALETTE 229, 17 PALETTE 243, 18 PALETTE 202, 19 PALETTE 203, 20 PALETTE 205, 22 PALETTE 207, 24 PALETTE 234, 25 PALETTE 210, 26 PALETTE 230, 27 PALETTE 231, 29 PALETTE 232, 31 PALETTE 233, 33 PALETTE 215, 35 PALETTE 216, 37 PALETTE 218, 38 PALETTE 219, 39 PALETTE 220, 40 PALETTE 221, 42 PALETTE 223, 43 PALETTE 224, 45 PALETTE 239, 47 PALETTE 240, 49 PALETTE 225, 51 PALETTE 226, 58 PALETTE 241, 63 END SUB DEFSNG A-Z SUB Background FOR Col% = 0 TO 319 STEP 64 FOR Row% = 0 TO 199 STEP 20 PUT (Col%, Row%), GrayBall, PSET NEXT NEXT END SUB DEFINT A-Z SUB DrawButton (Text$, Col%, Row%, DrawFlag%) HideMouse StartCol% = (Col% - 1) * 8 EndCol% = StartCol% + (LEN(Text$) * 10) + 5 StartRow% = Row% EndRow% = Row% + 19 LINE (StartCol%, StartRow% + 2)-(EndCol%, EndRow% - 2), LightGray, BF IF DrawFlag% THEN Color1% = White: Color2% = DarkGray ELSE Color1% = DarkGray: Color2% = White END IF yb = (EndCol% - StartCol%) + 1 DRAW "C" + STR$(Color1%) + "BM" + STR$(StartCol%) + "," + STR$(StartRow% + 1) + "d15u15R" + STR$(yb) DRAW "C" + STR$(Color2%) + "BM" + STR$(StartCol%) + "," + STR$(EndRow% - 2) + "R" + STR$(yb) + "U15" GPRINT Text$, StartCol% + 3, StartRow% + 5, 10, 0, White, LightGray, 1 ShowMouse END SUB SUB DrawPanel (W.X%, W.Y%, W.W%, W.H%, Border%) STATIC COLOR White LINE (W.X% + W.W%, W.Y%)-(W.X%, W.Y%): LINE -(W.X%, W.Y% + W.H%) LINE (W.X% + W.W% - 1, W.Y% + 1)-(W.X% + 1, W.Y% + 1) LINE -(W.X% + 1, W.Y% + W.H% - 1) COLOR DarkGray LINE (W.X% + 1, W.Y% + W.H%)-(W.X% + W.W%, W.Y% + W.H%) LINE -(W.X% + W.W%, W.Y%) LINE (W.X% + 2, W.Y% + W.H% - 1)-(W.X% + W.W% - 1, W.Y% + W.H% - 1) LINE -(W.X% + W.W% - 1, W.Y% + 1) LINE (W.X% + 2, W.Y% + 2)-(W.X% + W.W% - 2, W.Y% + W.H% - 2), LightGray, BF IF Border% THEN COLOR DarkGray LINE (W.X% + W.W% - 10, W.Y% + 10)-(W.X% + 10, W.Y% + 10) LINE -(W.X% + 10, W.Y% + W.H% - 10) COLOR White LINE -(W.X% + W.W% - 10, W.Y% + W.H% - 10) LINE -(W.X% + W.W% - 10, W.Y% + 10) END IF END SUB SUB GetMouseCord (Btn%, M3%, M4%) Regs.Ax% = 3 CALL Interrupt(&H33, Regs) M3% = Regs.Cx% M4% = Regs.Dx% Btn% = Regs.bx% END SUB SUB GPRINT (Text$, x%, Y%, StepX%, StepY%, Colr%, BckGround%, Shadow%) 'Don't destroy StepX and StepY. ExtX% = StepX%: ExtY% = StepY% DEF SEG = &HFFA6 'ROM segment for character shape tables FOR I% = 1 TO LEN(Text$) Addr% = 8 * ASC(MID$(Text$, I%)) + 14 'Address character shape table IF BckGround% THEN 'Color background '---- Backgrounds equal to 256 are really color zero. IF BckGround% = 256 THEN Bg% = False ELSE Bg% = BckGround% END IF '---- Prevent coloring background beyond range of string. IF I% = LEN(Text$) THEN ExtX% = False: ExtY% = False END IF 'Box and paint a background for the character. LINE (x%, Y%)-(x% + 7 + ExtX%, Y% + 7 + ExtY%), Bg%, BF END IF FOR J% = 0 TO 7 'Peek 1 scan line from the table at a time, 'then shift bits left 8 places Mask% = PEEK(Addr% + J%) * 128 'If shadow then displace line by 2 pixels and draw with black style mask IF Shadow% THEN LINE (x% + 9, Y% + J% + 2)-(x% + 2, Y% + J% + 2), 0, , Mask% END IF 'Draw the masked line with the assigned color attribute LINE (x% + 7, Y% + J%)-(x%, Y% + J%), Colr%, , Mask% NEXT 'INC x% and y% by values ExtX% and ExtY% x% = x% + ExtX% Y% = Y% + ExtY% NEXT DEF SEG END SUB SUB HideMouse Regs.Ax% = 2 CALL Interrupt(&H33, Regs) END SUB SUB Interrupt (IntNum AS INTEGER, Regs AS RegType) DEF SEG = VARSEG(Intrpt(1)) Address = VARPTR(Intrpt(1)) POKE Address + 51, IntNum CALL ABSOLUTE(Regs, Address) END SUB DEFSNG A-Z SUB LoadImages RESTORE PointerImage FOR R% = 0 TO 17 FOR C% = 0 TO 17 READ p% PSET (C%, R%), p% NEXT: NEXT GET (0, 0)-(17, 17), Pointer LINE (0, 0)-(17, 17), 255, BF RESTORE PointerImage FOR R% = 0 TO 17 FOR C% = 0 TO 17 READ p% IF p% <> 210 AND p% <> 0 THEN PSET (C%, R%), 0 END IF NEXT: NEXT GET (0, 0)-(17, 17), PointerMask CLS RESTORE BackgroundImage FOR R% = 0 TO 19 FOR C% = 0 TO 63 READ p% PSET (C%, R%), p% NEXT: NEXT GET (0, 0)-(63, 19), GrayBall CLS END SUB SUB MainPal PALETTE 0, 0 PALETTE 1, 197380 PALETTE 2, 1049092 PALETTE 3, 1114886 PALETTE 4, 1180680 PALETTE 5, 1246474 PALETTE 6, 1312268 PALETTE 7, 1378062 PALETTE 8, 1443856 PALETTE 9, 1509650 PALETTE 10, 2582 PALETTE 11, 2839 PALETTE 12, 3096 PALETTE 13, 3353 PALETTE 14, 3610 PALETTE 15, 3867 PALETTE 16, 4124 PALETTE 17, 4381 PALETTE 18, 4638 PALETTE 19, 4895 PALETTE 20, 855587 PALETTE 21, 1315864 PALETTE 22, 2691603 PALETTE 23, 3546909 PALETTE 24, 921106 PALETTE 25, 657956 PALETTE 26, 2368553 PALETTE 27, 4143668 PALETTE 28, 3151390 PALETTE 29, 2822686 PALETTE 30, 3613477 PALETTE 31, 3217442 PALETTE 32, 1969687 PALETTE 33, 3616815 PALETTE 34, 4142642 PALETTE 35, 2691613 PALETTE 36, 1579550 PALETTE 37, 263173 PALETTE 38, 4006931 PALETTE 39, 1184278 PALETTE 40, 2495006 PALETTE 41, 4011313 PALETTE 42, 723478 PALETTE 43, 1908021 PALETTE 44, 3283730 PALETTE 45, 4143650 PALETTE 46, 4007451 PALETTE 47, 2560016 PALETTE 48, 921104 PALETTE 49, 2888738 PALETTE 50, 657961 PALETTE 51, 3941156 PALETTE 52, 3152422 PALETTE 53, 1973553 PALETTE 54, 3616045 PALETTE 55, 1513500 PALETTE 56, 2236982 PALETTE 57, 657932 PALETTE 58, 3216932 PALETTE 59, 3546918 PALETTE 60, 2757911 PALETTE 61, 789551 PALETTE 62, 3415070 PALETTE 63, 1315622 PALETTE 64, 1775400 PALETTE 65, 3813938 PALETTE 66, 2428944 PALETTE 67, 2560790 PALETTE 68, 1710878 PALETTE 69, 921620 PALETTE 70, 1578789 PALETTE 71, 3810066 PALETTE 72, 4075051 PALETTE 73, 3546145 PALETTE 74, 1050630 PALETTE 75, 1445129 PALETTE 76, 1973798 PALETTE 77, 3151898 PALETTE 78, 1970193 PALETTE 79, 2828075 PALETTE 80, 10812 '237 PALETTE 81, 10300 '238 PALETTE 82, 9788 '239 PALETTE 83, 9276 '240 PALETTE 84, 8764 '241 PALETTE 85, 8252 '242 PALETTE 86, 7740 '243 PALETTE 87, 7228 '244 PALETTE 88, 6716 '245 PALETTE 89, 6204 '246 PALETTE 90, 5692 '247 PALETTE 91, 5180 '248 PALETTE 92, 4668 '249 PALETTE 93, 4156 '250 PALETTE 94, 3644 '251 PALETTE 95, 3132 '252 PALETTE 96, 2620 '253 PALETTE 116, 4883 PALETTE 117, 6168 PALETTE 118, 9252 PALETTE 119, 12336 PALETTE 120, 15420 PALETTE 101, 3486776 PALETTE 102, 2560028 PALETTE 103, 3881788 PALETTE 104, 460572 PALETTE 105, 2823952 PALETTE 106, 4076066 PALETTE 107, 2102282 PALETTE 108, 2560530 PALETTE 109, 4076335 PALETTE 110, 1905941 PALETTE 111, 4141357 PALETTE 112, 3284006 PALETTE 113, 3151640 PALETTE 114, 3677973 PALETTE 115, 3546923 PALETTE 121, 657959 PALETTE 122, 1053206 PALETTE 123, 2954775 PALETTE 124, 4073509 PALETTE 125, 1579058 PALETTE 126, 2499634 PALETTE 127, 2954272 PALETTE 128, 66050 PALETTE 129, 3480359 PALETTE 130, 1447967 PALETTE 131, 2428955 PALETTE 132, 2757652 PALETTE 133, 2563082 PALETTE 134, 2889755 PALETTE 135, 1050891 PALETTE 136, 3879727 PALETTE 137, 3745324 PALETTE 138, 1184790 PALETTE 139, 2627113 PALETTE 140, 2236202 PALETTE 141, 2888741 PALETTE 142, 4139290 PALETTE 143, 3743778 PALETTE 144, 3151399 PALETTE 145, 3349270 PALETTE 146, 3611678 PALETTE 147, 1379599 PALETTE 148, 3419698 PALETTE 149, 1316376 PALETTE 150, 657963 PALETTE 151, 3152412 PALETTE 152, 657947 PALETTE 153, 394778 PALETTE 154, 4144184 PALETTE 155, 4138260 PALETTE 156, 3349028 PALETTE 157, 3743773 PALETTE 158, 2697527 PALETTE 159, 526859 PALETTE 160, 4141351 PALETTE 161, 4144956 PALETTE 162, 2232091 PALETTE 163, 2894640 PALETTE 164, 1052456 PALETTE 165, 4139802 PALETTE 166, 2233109 PALETTE 167, 3679529 PALETTE 168, 4009261 PALETTE 169, 2231822 PALETTE 170, 1444631 PALETTE 171, 3875613 PALETTE 172, 2232593 PALETTE 173, 3282982 PALETTE 174, 3085846 PALETTE 175, 1184302 PALETTE 176, 2297903 PALETTE 177, 2429744 PALETTE 178, 2496050 PALETTE 179, 2627891 PALETTE 180, 3156013 PALETTE 181, 3287599 PALETTE 182, 3353905 PALETTE 183, 3485491 PALETTE 184, 0 PALETTE 185, 24 PALETTE 186, 32 PALETTE 187, 2088 PALETTE 188, 4136 PALETTE 189, 6192 PALETTE 190, 7220 PALETTE 191, 7992 PALETTE 192, 1321771 PALETTE 193, 995376 PALETTE 194, 603702 PALETTE 195, 277307 PALETTE 196, 3544876 PALETTE 197, 3743281 PALETTE 198, 3941685 PALETTE 199, 4140090 PALETTE 200, 0 PALETTE 211, 16128 'colors used PALETTE 228, 15 * 256 + 15 PALETTE 201, 16 * 256 + 16 PALETTE 229, 17 * 256 + 17 PALETTE 243, 18 * 256 + 18 PALETTE 202, 19 * 256 + 19 PALETTE 203, 20 * 256 + 20 PALETTE 205, 22 * 256 + 22 PALETTE 207, 24 * 256 + 24 PALETTE 234, 25 * 256 + 25 PALETTE 210, 26 * 256 + 25 PALETTE 230, 27 * 256 + 27 PALETTE 231, 29 * 256 + 29 PALETTE 232, 31 * 256 + 31 PALETTE 233, 33 * 256 + 33 PALETTE 215, 35 * 256 + 35 PALETTE 216, 37 * 256 + 37 PALETTE 218, 38 * 256 + 38 PALETTE 219, 39 * 256 + 39 PALETTE 220, 40 * 256 + 40 PALETTE 221, 42 * 256 + 42 PALETTE 223, 43 * 256 + 43 PALETTE 224, 45 * 256 + 45 PALETTE 239, 47 * 256 + 47 PALETTE 240, 49 * 256 + 49 PALETTE 225, 51 * 256 + 51 PALETTE 226, 58 * 256 + 58 PALETTE 241, 63 * 256 + 63 PALETTE 252, 16191 PALETTE 253, 4128768 PALETTE 254, 63 PALETTE 255, 4144959 END SUB DEFINT A-Z FUNCTION MouseInstalled% 'returns -1 if mouse installed, 0 if not Regs.Ax = 0 CALL Interrupt(51, Regs) MouseInstalled% = Regs.Ax END FUNCTION SUB PutMouse (mx%, my%) Regs.Ax% = 4 Regs.Cx% = mx% Regs.Dx% = my% CALL Interrupt(&H33, Regs) END SUB SUB Qbasic (x AS INTEGER, Y AS INTEGER) 'Q PSET (x + 2, Y), 120: PSET (x + 3, Y), 119 LINE (x + 4, Y)-(x + 14, Y), 118 LINE (x + 3, Y + 1)-(x + 13, Y + 1), 95 PSET (x + 2, Y + 1), 119: PSET (x, Y + 2), 120: PSET (x + 1, Y + 2), 119 PSET (x + 2, Y + 2), 118: LINE (x + 3, Y + 2)-(x + 13, Y + 2), 94 PSET (x, Y + 3), 119: LINE (x + 1, Y + 3)-(x + 15, Y + 3), 93 LINE (x, Y + 4)-(x, Y + 12), 118 LINE (x + 1, Y + 4)-(x + 5, Y + 4), 92: LINE (x + 11, Y + 4)-(x + 15, Y + 4), 92 LINE (x + 1, Y + 5)-(x + 5, Y + 5), 91: LINE (x + 11, Y + 5)-(x + 15, Y + 5), 91 LINE (x + 1, Y + 6)-(x + 5, Y + 6), 90: LINE (x + 11, Y + 6)-(x + 15, Y + 6), 90 LINE (x + 1, Y + 7)-(x + 5, Y + 7), 89: LINE (x + 11, Y + 7)-(x + 15, Y + 7), 89 LINE (x + 1, Y + 8)-(x + 5, Y + 8), 88: LINE (x + 11, Y + 8)-(x + 15, Y + 8), 88 LINE (x + 1, Y + 9)-(x + 15, Y + 9), 87 LINE (x + 1, Y + 10)-(x + 15, Y + 10), 86 LINE (x + 1, Y + 11)-(x + 15, Y + 11), 85 LINE (x + 3, Y + 12)-(x + 13, Y + 12), 84 LINE (x + 3, Y + 13)-(x + 15, Y + 13), 83 LINE (x + 9, Y + 14)-(x + 15, Y + 14), 82 LINE (x + 9, Y + 15)-(x + 15, Y + 15), 81 PSET (x + 1, Y + 12), 117: PSET (x + 2, Y + 12), 116 LINE (x + 2, Y + 13)-(x + 2, Y + 14), 118: PSET (x + 3, Y + 14), 117 LINE (x + 4, Y + 14)-(x + 8, Y + 14), 116 LINE (x + 8, Y + 15)-(x + 8, Y + 16), 118 PSET (x + 9, Y + 16), 117: LINE (x + 10, Y + 16)-(x + 16, Y + 16), 116 LINE -(x + 16, Y + 4), 116: PSET (x + 16, Y + 13), 117 LINE (x + 14, Y + 12)-(x + 15, Y + 12), 116 PSET (x + 16, Y + 3), 117: LINE (x + 15, Y + 2)-(x + 16, Y + 2), 118 PSET (x + 14, Y + 2), 116: PSET (x + 14, Y + 1), 117 LINE (x + 6, Y + 10)-(x + 6, Y + 4), 116: LINE -(x + 10, Y + 4), 116 LINE (x + 10, Y + 5)-(x + 10, Y + 8), 118: LINE -(x + 8, Y + 8), 118 PSET (x + 7, Y + 8), 119: PSET (x + 10, Y + 9), 117 PSET (x + 10, Y + 10), 116 'B x = x + 18 LINE (x + 1, Y + 1)-(x + 13, Y + 1), 95 LINE (x + 1, Y + 2)-(x + 13, Y + 2), 94 LINE (x + 1, Y + 3)-(x + 15, Y + 3), 93 LINE (x + 3, Y + 4)-(x + 15, Y + 4), 92 LINE (x + 3, Y + 5)-(x + 15, Y + 5), 91 LINE (x + 3, Y + 6)-(x + 15, Y + 6), 90 LINE (x + 3, Y + 7)-(x + 15, Y + 7), 89 LINE (x + 3, Y + 8)-(x + 15, Y + 8), 88 LINE (x + 3, Y + 9)-(x + 15, Y + 9), 87 LINE (x + 3, Y + 10)-(x + 15, Y + 10), 86 LINE (x + 3, Y + 11)-(x + 15, Y + 11), 85 LINE (x + 3, Y + 12)-(x + 15, Y + 12), 84 LINE (x + 1, Y + 13)-(x + 15, Y + 13), 83 LINE (x + 1, Y + 14)-(x + 13, Y + 14), 82 LINE (x + 1, Y + 15)-(x + 13, Y + 15), 81 PSET (x, Y), 120: PSET (x + 1, Y), 119: LINE (x + 2, Y)-(x + 14, Y), 118 PSET (x, Y + 1), 119: LINE (x, Y + 2)-(x, Y + 4), 118 PSET (x + 1, Y + 4), 117: PSET (x + 2, Y + 4), 116 LINE (x + 2, Y + 5)-(x + 2, Y + 12), 118: PSET (x + 1, Y + 12), 119 PSET (x, Y + 12), 120: PSET (x, Y + 13), 119 LINE (x, Y + 14)-(x, Y + 16), 118: PSET (x + 1, Y + 16), 117 LINE (x + 2, Y + 16)-(x + 14, Y + 16), 116: LINE -(x + 14, Y + 14), 116 LINE -(x + 16, Y + 14), 116: LINE -(x + 16, Y + 4), 116 LINE (x + 14, Y + 8)-(x + 15, Y + 8), 116: PSET (x + 16, Y + 9), 117 PSET (x + 16, Y + 3), 117: LINE (x + 16, Y + 2)-(x + 15, Y + 2), 118 PSET (x + 14, Y + 2), 116: PSET (x + 14, Y + 1), 117 LINE (x + 8, Y + 6)-(x + 8, Y + 4), 116: LINE -(x + 10, Y + 4), 116 LINE (x + 8, Y + 12)-(x + 8, Y + 10), 116: LINE -(x + 10, Y + 10), 116 LINE (x + 10, Y + 5)-(x + 10, Y + 6), 118: LINE -(x + 9, Y + 6), 118 LINE (x + 10, Y + 11)-(x + 10, Y + 12), 118: LINE -(x + 9, Y + 12), 118 PSET (x + 9, Y + 5), 0: PSET (x + 9, Y + 11), 0 'a x = x + 18: Y = Y + 4 PSET (x + 2, Y), 120: PSET (x + 3, Y), 119 LINE (x + 4, Y)-(x + 12, Y), 118: PSET (x + 2, Y + 1), 119 LINE (x + 3, Y + 1)-(x + 11, Y + 1), 91: PSET (x + 12, Y + 1), 117 LINE (x + 2, Y + 2)-(x + 2, Y + 6), 118: PSET (x + 2, Y + 5), 119 LINE (x + 3, Y + 2)-(x + 11, Y + 2), 90: PSET (x + 3, Y + 4), 117 LINE (x + 3, Y + 3)-(x + 13, Y + 3), 89 LINE (x + 9, Y + 4)-(x + 13, Y + 4), 88 LINE (x + 3, Y + 5)-(x + 13, Y + 5), 87 LINE (x + 3, Y + 6)-(x + 13, Y + 6), 86 LINE (x + 1, Y + 7)-(x + 13, Y + 7), 85 LINE (x + 1, Y + 8)-(x + 13, Y + 8), 84 LINE (x + 1, Y + 9)-(x + 15, Y + 9), 83 LINE (x + 3, Y + 10)-(x + 15, Y + 10), 82 LINE (x + 3, Y + 11)-(x + 15, Y + 11), 81 LINE (x + 4, Y + 4)-(x + 8, Y + 4), 116 PSET (x + 2, Y + 5), 119: PSET (x + 1, Y + 6), 119 PSET (x, Y + 6), 120: PSET (x, Y + 7), 119 LINE (x, Y + 8)-(x, Y + 10), 118: PSET (x + 1, Y + 10), 117 PSET (x + 2, Y + 10), 116: LINE (x + 2, Y + 11)-(x + 2, Y + 12), 118 PSET (x + 3, Y + 12), 117: LINE (x + 4, Y + 12)-(x + 16, Y + 12), 116 LINE -(x + 16, Y + 10), 116: PSET (x + 11, Y + 12), 117 PSET (x + 16, Y + 9), 117: LINE (x + 16, Y + 8)-(x + 15, Y + 8), 118 LINE (x + 14, Y + 8)-(x + 14, Y + 4), 116: PSET (x + 14, Y + 3), 117 LINE (x + 14, Y + 2)-(x + 13, Y + 2), 118 PSET (x + 12, Y + 2), 116: LINE (x + 6, Y + 8)-(x + 8, Y + 8), 116 LINE (x + 10, Y + 11)-(x + 10, Y + 10), 116 's x = x + 18 LINE (x + 3, Y + 1)-(x + 13, Y + 1), 91 LINE (x + 3, Y + 2)-(x + 13, Y + 2), 90 LINE (x + 1, Y + 3)-(x + 13, Y + 3), 89 LINE (x + 1, Y + 4)-(x + 5, Y + 4), 88 LINE (x + 1, Y + 5)-(x + 9, Y + 5), 87 LINE (x + 3, Y + 6)-(x + 9, Y + 6), 86 LINE (x + 3, Y + 7)-(x + 13, Y + 7), 85 LINE (x + 7, Y + 8)-(x + 13, Y + 8), 84 LINE (x + 1, Y + 9)-(x + 13, Y + 9), 83 LINE (x + 1, Y + 10)-(x + 11, Y + 10), 82 LINE (x + 1, Y + 11)-(x + 11, Y + 11), 81 PSET (x + 2, Y), 120: PSET (x + 3, Y), 119 LINE (x + 4, Y)-(x + 14, Y), 118: PSET (x + 2, Y + 1), 119 PSET (x + 2, Y + 2), 118: PSET (x + 1, Y + 2), 119: PSET (x, Y + 2), 120 LINE (x, Y + 4)-(x, Y + 6), 118: PSET (x, Y + 3), 119 PSET (x + 1, Y + 6), 117: PSET (x + 2, Y + 6), 116 LINE (x + 2, Y + 7)-(x + 2, Y + 8), 118 LINE (x + 4, Y + 8)-(x + 6, Y + 8), 116 PSET (x + 3, Y + 8), 117: PSET (x + 1, Y + 8), 119 PSET (x, Y + 8), 120: PSET (x, Y + 9), 119 LINE (x, Y + 10)-(x, Y + 12), 118: PSET (x + 1, Y + 12), 117 LINE (x + 2, Y + 12)-(x + 12, Y + 12), 116: LINE -(x + 12, Y + 10), 116 LINE -(x + 14, Y + 10), 116: LINE -(x + 14, Y + 8), 116 PSET (x + 14, Y + 7), 117: LINE (x + 14, Y + 6)-(x + 11, Y + 6), 118 PSET (x + 10, Y + 6), 116: PSET (x + 10, Y + 5), 117 LINE (x + 6, Y + 4)-(x + 14, Y + 4), 116 LINE -(x + 14, Y + 2), 116: PSET (x + 14, Y + 1), 117 x = x + 14: Y = Y - 4 LINE (x + 5, Y + 1)-(x + 9, Y + 1), 95 LINE (x + 5, Y + 2)-(x + 9, Y + 2), 94 LINE (x + 5, Y + 3)-(x + 9, Y + 3), 93 LINE (x + 3, Y + 5)-(x + 9, Y + 5), 91 LINE (x + 3, Y + 6)-(x + 9, Y + 6), 90 LINE (x + 3, Y + 7)-(x + 9, Y + 7), 89 LINE (x + 5, Y + 8)-(x + 9, Y + 8), 88 LINE (x + 5, Y + 9)-(x + 9, Y + 9), 87 LINE (x + 5, Y + 10)-(x + 9, Y + 10), 86 LINE (x + 5, Y + 11)-(x + 9, Y + 11), 85 LINE (x + 5, Y + 12)-(x + 9, Y + 12), 84 LINE (x + 3, Y + 13)-(x + 11, Y + 13), 83 LINE (x + 3, Y + 14)-(x + 11, Y + 14), 82 LINE (x + 3, Y + 15)-(x + 11, Y + 15), 81 PSET (x + 4, Y), 120: PSET (x + 5, Y), 119 LINE (x + 6, Y)-(x + 10, Y), 118: PSET (x + 4, Y + 1), 119 LINE (x + 4, Y + 2)-(x + 4, Y + 4), 118: PSET (x + 5, Y + 4), 117 LINE (x + 6, Y + 4)-(x + 10, Y + 4), 116 PSET (x + 2, Y + 4), 120: PSET (x + 3, Y + 4), 119: PSET (x + 2, Y + 5), 119 LINE (x + 2, Y + 6)-(x + 2, Y + 8), 118: PSET (x + 3, Y + 8), 117 PSET (x + 4, Y + 8), 116: LINE (x + 4, Y + 9)-(x + 4, Y + 12), 118 PSET (x + 2, Y + 12), 120: PSET (x + 3, Y + 12), 119 PSET (x + 2, Y + 13), 119: LINE (x + 2, Y + 14)-(x + 2, Y + 16), 118 PSET (x + 3, Y + 16), 117: LINE (x + 4, Y + 16)-(x + 12, Y + 16), 116 LINE -(x + 12, Y + 14), 116: PSET (x + 12, Y + 13), 117 LINE (x + 12, Y + 12)-(x + 11, Y + 12), 118 LINE (x + 10, Y + 12)-(x + 10, Y + 6), 116 PSET (x + 10, Y + 5), 117 'c x = x + 14: Y = Y + 4 LINE (x + 3, Y + 1)-(x + 11, Y + 1), 91 LINE (x + 3, Y + 2)-(x + 11, Y + 2), 90 LINE (x + 1, Y + 3)-(x + 13, Y + 3), 89 LINE (x + 1, Y + 4)-(x + 13, Y + 4), 88 LINE (x + 1, Y + 5)-(x + 13, Y + 5), 87 LINE (x + 1, Y + 6)-(x + 5, Y + 6), 86 LINE (x + 1, Y + 7)-(x + 13, Y + 7), 85 LINE (x + 1, Y + 8)-(x + 13, Y + 8), 84 LINE (x + 1, Y + 9)-(x + 13, Y + 9), 83 LINE (x + 3, Y + 10)-(x + 11, Y + 10), 82 LINE (x + 3, Y + 11)-(x + 11, Y + 11), 81 PSET (x + 2, Y), 120: PSET (x + 3, Y), 119 LINE (x + 4, Y)-(x + 12, Y), 118: PSET (x + 2, Y + 1), 119 PSET (x + 2, Y + 2), 118: PSET (x + 1, Y + 2), 119 PSET (x, Y + 2), 120: PSET (x, Y + 3), 119 LINE (x, Y + 4)-(x, Y + 10), 118 PSET (x + 1, Y + 10), 117: PSET (x + 2, Y + 10), 116 LINE (x + 2, Y + 11)-(x + 2, Y + 12), 118: PSET (x + 3, Y + 12), 117 LINE (x + 4, Y + 12)-(x + 12, Y + 12), 116: LINE -(x + 12, Y + 10), 116 LINE -(x + 14, Y + 10), 116: LINE -(x + 14, Y + 4), 116 PSET (x + 14, Y + 7), 117: LINE (x + 13, Y + 6)-(x + 10, Y + 6), 116 PSET (x + 9, Y + 6), 117: LINE (x + 6, Y + 8)-(x + 6, Y + 4), 116 LINE -(x + 8, Y + 4), 116: LINE (x + 8, Y + 5)-(x + 8, Y + 8), 118 LINE -(x + 7, Y + 8), 118: PSET (x + 8, Y + 7), 119 LINE (x + 7, Y + 7)-(x + 7, Y + 5), 0: PSET (x + 14, Y + 3), 117 LINE (x + 14, Y + 2)-(x + 13, Y + 2), 118: PSET (x + 12, Y + 2), 116 PSET (x + 12, Y + 1), 117 END SUB SUB ShowMouse Regs.Ax% = 1 CALL Interrupt(&H33, Regs) END SUB