'=========================================================================== ' Subject: VGA PALETTE EDITOR Date: 07-19-97 (16:17) ' Author: Andrew Below Code: QB, PDS ' Origin: bel@obninsk.ru Packet: EGAVGA.ABC '=========================================================================== ' Hi! ' ' Here is a simple palette creation and viewing program written 'in Microsoft QuickBASIC 4.5. It is very easy to use. In the top 'of the screen there are three boxes. Each box is for setting one 'of main VGA palette colors - Red, Green and Blue. For increasing 'or decreasing any of these colors, just push "+" and "-" buttons 'under the color box. In the little windows in each boxes there 'are color values in decimal and hexadecimal format. ' Under these boxes there is color attribute number scrolling 'bar. You can change the attribute number for current color 'by clicking on the "+" and "-" buttons on the scrolling bar. You 'can edit 255 (256 from 1) colors. ' Under this bar there is one big box. Here you can see the mix 'color created by Red, Green and Blue values. In the two little 'windows within this box there are actual color numbers used in 'palette statement in decimal and hexadecimal format. This number 'can be calculated by following formula: ' ' red + (256 * green) + (65536 * blue) ' ' And under this big box there is little menu string. "Save" 'item saves current palette to EDITPAL.PAL file. "Load" item 'loads palette from this file. "Reset" item resets ALL colors in 'current palette. "Make PalShow program" item makes the PalShow 'QB program that displays current palette in SCREEN 13 mode. '"RND Generate" item generates palette using RND statement. 'Click on "Quit" item to exit this program. ' That's all, I think. Enjoy!!! ' 'NOTE: I reccomend compile this program before running. ' 'PS: If somebody can add to this program scrolling bars with the 'identificators, like in Windows, please E-mail me your updated 'version of this program. I'll put you into the credits! ' 'PPS: When you increase or decrease RGB values in top three 'boxes, palette don't updates quickly - it updates only after 'you release mouse button. I do so, because I have problems with 'quick palette updates - I press the mouse button, wait for 'needed color intensity, release button, BUT color scrolling DO 'NOT STOP. If you can solve this problem, please E-mail me. 'Thanx. ' 'PPPS: If you run this program under DOS, you'll must be wait 'short time until the letters and numbers loads into arrays. If 'somebody know, how to quick load data from DATA to arrays, 'please E-mail me. I'll put you too into the credits! Thanx. ' 'Andrew Below, H.A.S. 'E-mail: bel@obninsk.ru ' DECLARE SUB MakePalShow () DECLARE SUB Load () DECLARE SUB PalGenerate () DECLARE SUB Save () DECLARE SUB ClearOneColor (Flag!) DECLARE SUB FillBoxes () DECLARE SUB UpdateColors (Flag!) DECLARE SUB PrintValues (Flag!) DECLARE SUB ClearAllPalette () DECLARE SUB Delay (Lenght&) DECLARE SUB PutFocus (BoxNum!) DECLARE SUB XPrint (PixX%, PixY%, Decimal$) DECLARE SUB FillNumArrays () DECLARE SUB InitializeMouse () DECLARE SUB DrawMainScreen () DECLARE SUB WaitForOther (Button!) DECLARE SUB ShowMouse () DECLARE SUB HideMouse () DECLARE SUB SetMousePos (x%, y%) DECLARE SUB SetMouseSpeed (xSpd%, ySpd%) DECLARE SUB GetMouseStatus (Button!, CurX!, CurY!) DECLARE SUB SetMouseWindow (x1%, x2%, y1%, y2%) DECLARE SUB Quit () DECLARE FUNCTION Trim$ (Txt$) DECLARE FUNCTION IsMouse% () '$INCLUDE: 'qb.bi' DIM SHARED Num0(1 TO 25) AS DOUBLE, Num1(1 TO 25) AS DOUBLE DIM SHARED Num2(1 TO 25) AS DOUBLE, Num3(1 TO 25) AS DOUBLE DIM SHARED Num4(1 TO 25) AS DOUBLE, Num5(1 TO 25) AS DOUBLE DIM SHARED Num6(1 TO 25) AS DOUBLE, Num7(1 TO 25) AS DOUBLE DIM SHARED Num8(1 TO 25) AS DOUBLE, Num9(1 TO 25) AS DOUBLE DIM SHARED ChrA(1 TO 25) AS DOUBLE, ChrB(1 TO 25) AS DOUBLE DIM SHARED ChrC(1 TO 25) AS DOUBLE, ChrD(1 TO 25) AS DOUBLE DIM SHARED ChrE(1 TO 25) AS DOUBLE, ChrF(1 TO 25) AS DOUBLE DIM SHARED RedVal(0 TO 255) AS INTEGER DIM SHARED GreenVal(0 TO 255) AS INTEGER DIM SHARED BlueVal(0 TO 255) AS INTEGER DIM SHARED InRegs AS RegType, OutRegs AS RegType DIM SHARED MouseOK AS SINGLE, ActiveBox AS SINGLE DIM SHARED CurColor AS INTEGER CONST TempFile = "PALEDIT.TMP" 'Please DO NOT MODIFY CONST SaveLoadFile = "PALEDIT.PAL" 'Please DO NOT MODIFY CONST LClr = 10, DClr = 2 'Light and Dark menu colors CONST ABClr = 15, NBClr = 7 'Active and Non-active box colors CONST MPClr = 15 'Minus and Plus chars color CONST RapidDelay = 4000 'Delay while rapid color change CONST RClr = 3, GClr = 4, BClr = 5 'Attributes colors. DO NOT MODIFY CONST MClr = 6 'Bottom Main attribute '*********************** 'The Program Starts HERE '*********************** SCREEN 0 CLS PRINT "Loading chars into arrays..." PRINT "If you can do it faster, please E-mail me." FillNumArrays SCREEN 12 Load Start: DrawMainScreen FillBoxes InitializeMouse PutFocus 1 1 GetMouseStatus B, x, y SELECT CASE y CASE 3 TO 189 IF B <> 0 THEN SELECT CASE x CASE 3 TO 202 IF B = 1 THEN WaitForOther B GOSUB FirstActive ELSEIF B = 2 THEN WaitForOther B ClearOneColor 1 PrintValues 5 UpdateColors 1 UpdateColors 4 END IF CASE 220 TO 420 IF B = 1 THEN WaitForOther B GOSUB SecondActive ELSEIF B = 2 THEN WaitForOther B ClearOneColor 2 PrintValues 5 UpdateColors 2 UpdateColors 4 END IF CASE 438 TO 638 IF B = 1 THEN WaitForOther B GOSUB ThirdActive ELSEIF B = 2 THEN WaitForOther B ClearOneColor 3 PrintValues 5 UpdateColors 3 UpdateColors 4 END IF END SELECT END IF CASE 272 TO 288 IF B = 2 THEN SELECT CASE x CASE 65 TO 576 ClearOneColor 4 PrintValues 5 UpdateColors 5 END SELECT END IF CASE 289 TO 459 IF B = 2 THEN SELECT CASE x CASE 3 TO 638 ClearOneColor 4 PrintValues 5 UpdateColors 5 END SELECT END IF CASE 192 TO 206 IF B <> 0 THEN SELECT CASE x CASE 25 TO 44 IF B = 1 THEN GOSUB DecRedRapid IF B = 2 THEN GOSUB DecRedSlow CASE 161 TO 180 IF B = 1 THEN GOSUB IncRedRapid IF B = 2 THEN GOSUB IncRedSlow CASE 242 TO 261 IF B = 1 THEN GOSUB DecGreenRapid IF B = 2 THEN GOSUB DecGreenSlow CASE 379 TO 398 IF B = 1 THEN GOSUB IncGreenRapid IF B = 2 THEN GOSUB IncGreenSlow CASE 460 TO 479 IF B = 1 THEN GOSUB DecBlueRapid IF B = 2 THEN GOSUB DecBlueSlow CASE 597 TO 617 IF B = 1 THEN GOSUB IncBlueRapid IF B = 2 THEN GOSUB IncBlueSlow END SELECT END IF CASE 241 TO 255 IF B <> 0 THEN SELECT CASE x CASE 169 TO 586 IF B = 1 THEN WaitForOther B: GOSUB ClrBoxActive CASE 147 TO 166 IF B = 1 THEN GOSUB DecColorRapid IF B = 2 THEN GOSUB DecColorSlow CASE 589 TO 608 IF B = 1 THEN GOSUB IncColorRapid IF B = 2 THEN GOSUB IncColorSlow END SELECT END IF CASE 462 TO 478 IF B = 1 THEN SELECT CASE x CASE 3 TO 46 WaitForOther B CALL Save CASE 49 TO 94 WaitForOther B CALL Load CASE 97 TO 150 WaitForOther B ClearAllPalette CASE 153 TO 326 WaitForOther B CALL MakePalShow CASE 329 TO 438 WaitForOther B CALL PalGenerate CASE 441 TO 486 WaitForOther B CALL Quit END SELECT END IF END SELECT SELECT CASE UCASE$(INKEY$) CASE "R": GOSUB FirstActive CASE "G": GOSUB SecondActive CASE "B": GOSUB ThirdActive CASE "C": GOSUB ClrBoxActive CASE "E": CALL ClearAllPalette CASE "Q": CALL Quit CASE "S": CALL Save CASE "L": CALL Load CASE "N": CALL PalGenerate CASE "M": CALL MakePalShow CASE CHR$(0) + "K" SELECT CASE ActiveBox CASE 1: GOSUB DecRedSlow CASE 2: GOSUB DecGreenSlow CASE 3: GOSUB DecBlueSlow CASE 4: GOSUB DecColorSlow END SELECT CASE CHR$(0) + "M" SELECT CASE ActiveBox CASE 1: GOSUB IncRedSlow CASE 2: GOSUB IncGreenSlow CASE 3: GOSUB IncBlueSlow CASE 4: GOSUB IncColorSlow END SELECT END SELECT GOTO 1 FirstActive: 'Choosed Red window PutFocus 1 RETURN SecondActive: 'Choosed Green window PutFocus 2 RETURN ThirdActive: 'Choosed Blue window PutFocus 3 RETURN ClrBoxActive: 'Choosed Color change window PutFocus 4 RETURN DecRedRapid: 'Quick decrease Red value IF RedVal(CurColor) = 0 THEN RETURN HideMouse DO IF RedVal(CurColor) = 0 THEN EXIT DO GetMouseStatus B, x, y RedVal(CurColor) = RedVal(CurColor) - 1 PrintValues 1 GetMouseStatus B, x, y Delay RapidDelay LOOP WHILE B <> 0 UpdateColors 1 UpdateColors 4 ShowMouse RETURN DecRedSlow: 'Slow decrease Red value IF RedVal(CurColor) = 0 THEN RETURN DO IF RedVal(CurColor) = 0 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 RedVal(CurColor) = RedVal(CurColor) - 1 HideMouse PrintValues 1 UpdateColors 1 UpdateColors 4 ShowMouse RETURN IncRedRapid: 'Quick increase Red value IF RedVal(CurColor) = 63 THEN RETURN HideMouse DO IF RedVal(CurColor) = 63 THEN EXIT DO GetMouseStatus B, x, y RedVal(CurColor) = RedVal(CurColor) + 1 PrintValues 1 Delay RapidDelay LOOP WHILE B <> 0 UpdateColors 1 UpdateColors 4 ShowMouse RETURN IncRedSlow: 'Slow increase Red value IF RedVal(CurColor) = 63 THEN RETURN DO IF RedVal(CurColor) = 63 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 RedVal(CurColor) = RedVal(CurColor) + 1 HideMouse PrintValues 1 UpdateColors 1 UpdateColors 4 ShowMouse RETURN DecGreenRapid: 'Quick decrease Green value IF GreenVal(CurColor) = 0 THEN RETURN HideMouse DO IF GreenVal(CurColor) = 0 THEN EXIT DO GetMouseStatus B, x, y GreenVal(CurColor) = GreenVal(CurColor) - 1 PrintValues 2 Delay RapidDelay LOOP WHILE B <> 0 UpdateColors 2 UpdateColors 4 ShowMouse RETURN DecGreenSlow: 'Slow decrease Green value IF GreenVal(CurColor) = 0 THEN RETURN DO IF GreenVal(CurColor) = 0 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 GreenVal(CurColor) = GreenVal(CurColor) - 1 HideMouse PrintValues 2 UpdateColors 2 UpdateColors 4 ShowMouse RETURN IncGreenRapid: 'Quick increase Green value IF GreenVal(CurColor) = 63 THEN RETURN HideMouse DO IF GreenVal(CurColor) = 63 THEN EXIT DO GetMouseStatus B, x, y GreenVal(CurColor) = GreenVal(CurColor) + 1 PrintValues 2 Delay RapidDelay LOOP WHILE B <> 0 UpdateColors 2 UpdateColors 4 ShowMouse RETURN IncGreenSlow: 'Slow increase Green value IF GreenVal(CurColor) = 63 THEN RETURN DO IF GreenVal(CurColor) = 63 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 GreenVal(CurColor) = GreenVal(CurColor) + 1 HideMouse PrintValues 2 UpdateColors 2 UpdateColors 4 ShowMouse RETURN DecBlueRapid: 'Quick decrease Blue value IF BlueVal(CurColor) = 0 THEN RETURN HideMouse DO IF BlueVal(CurColor) = 0 THEN EXIT DO GetMouseStatus B, x, y BlueVal(CurColor) = BlueVal(CurColor) - 1 PrintValues 3 Delay RapidDelay LOOP WHILE B <> 0 UpdateColors 3 UpdateColors 4 ShowMouse RETURN DecBlueSlow: 'Slow decrease Blue value IF BlueVal(CurColor) = 0 THEN RETURN DO IF BlueVal(CurColor) = 0 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 BlueVal(CurColor) = BlueVal(CurColor) - 1 HideMouse PrintValues 3 UpdateColors 3 UpdateColors 4 ShowMouse RETURN IncBlueRapid: 'Quick increase Blue value IF BlueVal(CurColor) = 63 THEN RETURN HideMouse DO IF BlueVal(CurColor) = 63 THEN EXIT DO GetMouseStatus B, x, y BlueVal(CurColor) = BlueVal(CurColor) + 1 PrintValues 3 Delay RapidDelay LOOP WHILE B <> 0 UpdateColors 3 UpdateColors 4 ShowMouse RETURN IncBlueSlow: 'Slow increase Blue value IF BlueVal(CurColor) = 63 THEN RETURN DO IF BlueVal(CurColor) = 63 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 BlueVal(CurColor) = BlueVal(CurColor) + 1 HideMouse PrintValues 3 UpdateColors 3 UpdateColors 4 ShowMouse RETURN DecColorRapid: 'Quick decrease Color # IF CurColor = 0 THEN RETURN HideMouse DO IF CurColor = 0 THEN EXIT DO GetMouseStatus B, x, y CurColor = CurColor - 1 Clr$ = Trim$(STR$(CurColor)) IF LEN(Clr$) < 3 THEN Clr$ = STRING$((3 - LEN(Clr$)), "0") + Clr$ HxClr$ = Trim$(HEX$(CurColor)) IF LEN(HxClr$) < 3 THEN HxClr$ = STRING$((3 - LEN(HxClr$)), "0") + HxClr$ XPrint 118, 242, Clr$: XPrint 612, 242, HxClr$ Delay RapidDelay LOOP WHILE B <> 0 PrintValues 1 PrintValues 2 PrintValues 3 UpdateColors 5 ShowMouse RETURN DecColorSlow: 'Slow decrease Color # IF CurColor = 0 THEN RETURN DO IF CurColor = 0 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 CurColor = CurColor - 1 Clr$ = Trim$(STR$(CurColor)) IF LEN(Clr$) < 3 THEN Clr$ = STRING$((3 - LEN(Clr$)), "0") + Clr$ HxClr$ = Trim$(HEX$(CurColor)) IF LEN(HxClr$) < 3 THEN HxClr$ = STRING$((3 - LEN(HxClr$)), "0") + HxClr$ HideMouse XPrint 118, 242, Clr$: XPrint 612, 242, HxClr$ PrintValues 1 PrintValues 2 PrintValues 3 UpdateColors 5 ShowMouse RETURN IncColorRapid: 'Quick increase Color # IF CurColor = 255 THEN RETURN HideMouse DO IF CurColor = 255 THEN EXIT DO GetMouseStatus B, x, y CurColor = CurColor + 1 Clr$ = Trim$(STR$(CurColor)) IF LEN(Clr$) < 3 THEN Clr$ = STRING$((3 - LEN(Clr$)), "0") + Clr$ HxClr$ = Trim$(HEX$(CurColor)) IF LEN(HxClr$) < 3 THEN HxClr$ = STRING$((3 - LEN(HxClr$)), "0") + HxClr$ XPrint 118, 242, Clr$: XPrint 612, 242, HxClr$ Delay RapidDelay LOOP WHILE B <> 0 PrintValues 1 PrintValues 2 PrintValues 3 UpdateColors 5 ShowMouse RETURN IncColorSlow: 'Slow increase Color # IF CurColor = 255 THEN RETURN DO IF CurColor = 255 THEN EXIT DO GetMouseStatus B, x, y LOOP WHILE B <> 0 CurColor = CurColor + 1 Clr$ = Trim$(STR$(CurColor)) IF LEN(Clr$) < 3 THEN Clr$ = STRING$((3 - LEN(Clr$)), "0") + Clr$ HxClr$ = Trim$(HEX$(CurColor)) IF LEN(HxClr$) < 3 THEN HxClr$ = STRING$((3 - LEN(HxClr$)), "0") + HxClr$ HideMouse XPrint 118, 242, Clr$: XPrint 612, 242, HxClr$ PrintValues 1 PrintValues 2 PrintValues 3 UpdateColors 5 ShowMouse RETURN NotExist: OPEN SaveLoadFile FOR OUTPUT AS #1 FOR i = 1 TO 768 PRINT #1, CHR$(0); NEXT i CLOSE ClearAllPalette PrintValues 5 UpdateColors 5 GOTO Start 'Arrays data for chars. Each two strings is one char. 'They should be content from 107 bytes. Please DO NOT MODIFY. DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,3E,0,3E,0,3E,0,3E,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,67,0,67,0,67,0,67,0,6B,0,6B,0,6B,0,6B,0,73,0,73,0,73,0,73,0,63,0,63,0,63,0,63,0,63 DATA 0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,3E,0,3E,0,3E,0,3E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,C,0,C,0,C,0,C,0,1C,0,1C,0,1C,0,1C,0,3C,0,3C,0,3C,0,3C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0,C,0 DATA C,0,C,0,C,0,3F,0,3F,0,3F,0,3F,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,3E,0,3E,0,3E,0,3E,0,63,0,63,0,63,0,63,0,3,0,3,0,3,0,3,0,6,0,6,0,6,0,6,0,C,0,C,0,C,0,C,0,18,0,18,0,18,0,18,0,30,0,30,0,30,0,30,0,60,0,60,0 DATA 60,0,60,0,63,0,63,0,63,0,63,0,7F,0,7F,0,7F,0,7F,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,3E,0,3E,0,3E,0,3E,0,63,0,63,0,63,0,63,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,1E,0,1E,0,1E,0,1E,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,63,0,63,0 DATA 63,0,63,0,3E,0,3E,0,3E,0,3E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,6,0,6,0,6,0,6,0,E,0,E,0,E,0,E,0,1E,0,1E,0,1E,0,1E,0,36,0,36,0,36,0,36,0,66,0,66,0,66,0,66,0,7F,0,7F,0,7F,0,7F,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6 DATA 0,6,0,6,0,6,0,F,0,F,0,F,0,F,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,7F,0,7F,0,7F,0,7F,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,7E,0,7E,0,7E,0,7E,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0 DATA 63,0,63,0,63,0,63,0,3E,0,3E,0,3E,0,3E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,1C,0,1C,0,1C,0,1C,0,30,0,30,0,30,0,30,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,7E,0,7E,0,7E,0,7E,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63 DATA 0,63,0,63,0,63,0,63,0,63,0,63,0,3E,0,3E,0,3E,0,3E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,7F,0,7F,0,7F,0,7F,0,63,0,63,0,63,0,63,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,6,0,6,0,6,0,6,0,C,0,C,0,C,0,C,0,18,0,18,0,18,0,18,0,18,0,18,0,18,0,18,0,18 DATA 0,18,0,18,0,18,0,18,0,18,0,18,0,18,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,3E,0,3E,0,3E,0,3E,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,3E,0,3E,0,3E,0,3E,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63 DATA 0,63,0,63,0,63,0,63,0,63,0,63,0,3E,0,3E,0,3E,0,3E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,3E,0,3E,0,3E,0,3E,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,3F,0,3F,0,3F,0,3F,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3 DATA 0,6,0,6,0,6,0,6,0,3C,0,3C,0,3C,0,3C,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,8,0,8,0,8,0,8,0,1C,0,1C,0,1C,0,1C,0,36,0,36,0,36,0,36,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,7F,0,7F,0,7F,0,7F,0,63,0,63,0,63,0,63,0,63,0,63,0 DATA 63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,63,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,7E,0,7E,0,7E,0,7E,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,3E,0,3E,0,3E,0,3E,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33 DATA 0,33,0,33,0,33,0,33,0,33,0,33,0,7E,0,7E,0,7E,0,7E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,1E,0,1E,0,1E,0,1E,0,33,0,33,0,33,0,33,0,61,0,61,0,61,0,61,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,60,0,61,0,61 DATA 0,61,0,61,0,33,0,33,0,33,0,33,0,1E,0,1E,0,1E,0,1E,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,7C,0,7C,0,7C,0,7C,0,36,0,36,0,36,0,36,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0,33,0 DATA 33,0,33,0,33,0,36,0,36,0,36,0,36,0,7C,0,7C,0,7C,0,7C,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,7F,0,7F,0,7F,0,7F,0,33,0,33,0,33,0,33,0,31,0,31,0,31,0,31,0,34,0,34,0,34,0,34,0,3C,0,3C,0,3C,0,3C,0,34,0,34,0,34,0,34,0,30,0,30,0,30,0,30,0,31,0 DATA 31,0,31,0,31,0,33,0,33,0,33,0,33,0,7F,0,7F,0,7F,0,7F,0,0,0,0,0,0,0,0,0 DATA FD,28,9B,0,0,64,0,9,0,C,0,0,0,0,0,0,0,0,0,7F,0,7F,0,7F,0,7F,0,33,0,33,0,33,0,33,0,31,0,31,0,31,0,31,0,34,0,34,0,34,0,34,0,3C,0,3C,0,3C,0,3C,0,34,0,34,0,34,0,34,0,30,0,30,0,30,0,30,0,30,0 DATA 30,0,30,0,30,0,30,0,30,0,30,0,30,0,78,0,78,0,78,0,78,0,0,0,0,0,0,0,0,0 SUB ClearAllPalette SOUND 880, 1 SOUND 440, 1 SOUND 880, 1 FOR i = 0 TO 255 RedVal(i) = 0 BlueVal(i) = 0 GreenVal(i) = 0 NEXT i CurColor = 0 PrintValues 5 UpdateColors 5 END SUB SUB ClearOneColor (Flag) SELECT CASE Flag CASE 1: RedVal(CurColor) = 0 CASE 2: GreenVal(CurColor) = 0 CASE 3: BlueVal(CurColor) = 0 CASE 4: RedVal(CurColor) = 0: GreenVal(CurColor) = 0: BlueVal(CurColor) = 0 END SELECT END SUB SUB Delay (Lenght&) FOR t = 1 TO Lenght& NEXT t END SUB SUB DrawMainScreen ' 'Draw three top boxes LINE (1, 1)-(203, 207), NBClr, B LINE (218, 1)-(421, 207), NBClr, B LINE (436, 1)-(639, 207), NBClr, B ' 'Fill each of top boxes LINE (1, 190)-(203, 207), NBClr, B 'First box LINE (23, 190)-(23, 207), NBClr LINE (181, 190)-(181, 207), NBClr PAINT (25, 192), 8, NBClr LINE (45, 190)-(45, 207), NBClr LINE (159, 190)-(159, 207), NBClr LINE (218, 190)-(421, 207), NBClr, B 'Second box LINE (240, 190)-(240, 207), NBClr LINE (399, 190)-(399, 207), NBClr PAINT (242, 192), 8, NBClr LINE (262, 190)-(262, 207), NBClr LINE (377, 190)-(377, 207), NBClr LINE (436, 190)-(639, 207), NBClr, B 'Third box LINE (458, 190)-(458, 207), NBClr LINE (617, 190)-(617, 207), NBClr PAINT (460, 192), 8, NBClr LINE (480, 190)-(480, 207), NBClr LINE (595, 190)-(595, 207), NBClr ' 'Draw "-"... LINE (30, 198)-(38, 199), MPClr, B LINE (247, 198)-(255, 199), MPClr, B LINE (465, 198)-(473, 199), MPClr, B 'And "+" chars LINE (167, 198)-(174, 199), MPClr, B: LINE (170, 195)-(171, 202), MPClr, B LINE (385, 198)-(392, 199), MPClr, B: LINE (388, 195)-(389, 202), MPClr, B LINE (603, 198)-(610, 199), MPClr, B: LINE (606, 195)-(607, 202), MPClr, B ' 'Draw color change bar and fill it LINE (115, 239)-(639, 256), NBClr, B LINE (145, 240)-(145, 255), NBClr LINE (609, 240)-(609, 255), NBClr PAINT (147, 241), 8, NBClr LINE (167, 240)-(167, 255), NBClr LINE (587, 240)-(587, 255), NBClr LINE (152, 247)-(160, 248), MPClr, B LINE (595, 247)-(602, 248), MPClr, B LINE (598, 244)-(599, 251), MPClr, B ' 'Draw one big bottom box and two windows in it LINE (1, 270)-(639, 460), NBClr, B LINE (1, 287)-(63, 270), NBClr, B LINE (577, 287)-(639, 270), NBClr, B ' 'Print bottom menu COLOR DClr: LOCATE 30, 1 PRINT " Save "; " Load "; " Reset "; " Make PalShow Program "; " RND Generate "; " Quit "; COLOR 10: PRINT " -=PalEdit, v1.0=-"; COLOR 2 LOCATE 14, 12: PRINT "Red" LOCATE 14, 38: PRINT "Green" LOCATE 14, 66: PRINT "Blue" LOCATE 16, 1: PRINT "Current color:" COLOR LClr LOCATE 14, 12: PRINT "R" LOCATE 14, 38: PRINT "G" LOCATE 14, 66: PRINT "B" LOCATE 16, 1: PRINT "C" LOCATE 30, 2: PRINT "S"; LOCATE 30, 8: PRINT "L"; LOCATE 30, 15: PRINT "e"; LOCATE 30, 21: PRINT "M"; LOCATE 30, 44: PRINT "N"; LOCATE 30, 57: PRINT "Q"; LINE (1, 479)-(640, 479), NBClr ' 'Draw menu separators LINE (1, 460)-(1, 480), NBClr LINE (47, 460)-(47, 480), NBClr LINE (95, 460)-(95, 480), NBClr LINE (151, 460)-(151, 480), NBClr LINE (327, 460)-(327, 480), NBClr LINE (439, 460)-(439, 480), NBClr LINE (487, 460)-(487, 480), NBClr LINE (639, 460)-(639, 480), NBClr END SUB 'Fill top three boxes and one bottom SUB FillBoxes PAINT (4, 4), RClr, NBClr PAINT (221, 4), GClr, NBClr PAINT (439, 4), BClr, NBClr PAINT (4, 300), MClr, NBClr END SUB 'Fill arrays for chars 0-9 and A-F (used in XPrint) SUB FillNumArrays FOR n = 0 TO 15 OPEN TempFile$ FOR OUTPUT AS #1 FOR i = 1 TO 107 READ Byte$ Byte$ = CHR$(VAL("&H" + Byte$)) PRINT #1, Byte$; NEXT i CLOSE SELECT CASE n CASE 0: DEF SEG = VARSEG(Num0(1)): BLOAD TempFile$, VARPTR(Num0(1)) CASE 1: DEF SEG = VARSEG(Num1(1)): BLOAD TempFile$, VARPTR(Num1(1)) CASE 2: DEF SEG = VARSEG(Num2(1)): BLOAD TempFile$, VARPTR(Num2(1)) CASE 3: DEF SEG = VARSEG(Num3(1)): BLOAD TempFile$, VARPTR(Num3(1)) CASE 4: DEF SEG = VARSEG(Num4(1)): BLOAD TempFile$, VARPTR(Num4(1)) CASE 5: DEF SEG = VARSEG(Num5(1)): BLOAD TempFile$, VARPTR(Num5(1)) CASE 6: DEF SEG = VARSEG(Num6(1)): BLOAD TempFile$, VARPTR(Num6(1)) CASE 7: DEF SEG = VARSEG(Num7(1)): BLOAD TempFile$, VARPTR(Num7(1)) CASE 8: DEF SEG = VARSEG(Num8(1)): BLOAD TempFile$, VARPTR(Num8(1)) CASE 9: DEF SEG = VARSEG(Num9(1)): BLOAD TempFile$, VARPTR(Num9(1)) CASE 10: DEF SEG = VARSEG(ChrA(1)): BLOAD TempFile$, VARPTR(ChrA(1)) CASE 11: DEF SEG = VARSEG(ChrB(1)): BLOAD TempFile$, VARPTR(ChrB(1)) CASE 12: DEF SEG = VARSEG(ChrC(1)): BLOAD TempFile$, VARPTR(ChrC(1)) CASE 13: DEF SEG = VARSEG(ChrD(1)): BLOAD TempFile$, VARPTR(ChrD(1)) CASE 14: DEF SEG = VARSEG(ChrE(1)): BLOAD TempFile$, VARPTR(ChrE(1)) CASE 15: DEF SEG = VARSEG(ChrF(1)): BLOAD TempFile$, VARPTR(ChrF(1)) END SELECT DEF SEG KILL TempFile$ NEXT n END SUB 'Returns the mouse coordinates and pressed button number '(1-Left, 2-Right, 3-Both) SUB GetMouseStatus (Button, CurX, CurY) IF MouseOK = 1 THEN InRegs.ax = 3 CALL INTERRUPT(&H33, InRegs, OutRegs) Button = OutRegs.bx CurX = OutRegs.cx CurY = OutRegs.dx CurX = CurX + 1 CurY = CurY + 1 END IF END SUB 'Remove the mouse cursor from the screen SUB HideMouse IF MouseOK = 1 THEN InRegs.ax = 2 CALL INTERRUPT(&H33, InRegs, OutRegs) END IF END SUB 'Initialize mouse functions SUB InitializeMouse MouseOK = IsMouse% 'Get mouse driver flag CALL SetMouseWindow(1, 640, 1, 480) 'Set mouse border as screen limits CALL SetMouseSpeed(20, 20) 'Set mouse speed CALL SetMousePos(320, 240) 'Set start mouse positions CALL ShowMouse 'Show mouse cursor END SUB 'Check the mouse driver (1-Present, 0-Absent) FUNCTION IsMouse% InRegs.ax = 0 CALL INTERRUPT(&H33, InRegs, OutRegs) IF OutRegs.ax = -1 THEN IsMouse% = 1 ELSE IsMouse% = 0 END IF END FUNCTION 'Load palette from file, if one exist SUB Load FOR i = 500 TO 750 STEP 10: SOUND i, .1: NEXT i FOR i = 650 TO 880 STEP 5: SOUND i, .1: NEXT i ON ERROR GOTO NotExist OPEN SaveLoadFile FOR INPUT AS #1: CLOSE DIM RGB AS STRING * 3 OPEN SaveLoadFile FOR RANDOM AS #1 LEN = 3 FOR i = 0 TO 255 GET #1, i + 1, RGB$ RedVal(i) = ASC(MID$(RGB$, 1, 1)) GreenVal(i) = ASC(MID$(RGB$, 2, 1)) BlueVal(i) = ASC(MID$(RGB$, 3, 1)) NEXT i CLOSE PrintValues 5 UpdateColors 5 END SUB 'Create the PALSHOW.BAS program SUB MakePalShow DIM RGB AS STRING * 3 SOUND 600, 1: SOUND 440, 1 FOR i = 440 TO 880 STEP 10: SOUND i, .1: NEXT i SOUND 440, 1 OPEN "PALSHOW.PAL" FOR RANDOM AS #1 LEN = 3 FOR i = 0 TO 255 RGB = CHR$(RedVal(i)) + CHR$(GreenVal(i)) + CHR$(BlueVal(i)) PUT #1, i + 1, RGB$ NEXT i CLOSE OPEN "PALSHOW.BAS" FOR OUTPUT AS #1 PRINT #1, "'Palette Show - Part of PalEdit, written by Andrew Below." PRINT #1, "'This program load palette that has been saved in EditPalette" PRINT #1, "'module, in array and shows it in SCREEN 13 mode." PRINT #1, "'Created " + DATE$ + " at " + TIME$ PRINT #1, "'" + STRING$(40, "Ä") PRINT #1, "DIM RGB AS STRING * 3, Clr(0 TO 255) AS LONG" PRINT #1, "OPEN " + CHR$(34) + "PALSHOW.PAL" + CHR$(34) + " FOR RANDOM AS #1 LEN = 3" PRINT #1, "FOR I = 0 TO 255" PRINT #1, " GET #1, I + 1, RGB$" PRINT #1, " Clr(I) = ASC(MID$(RGB$, 1, 1)) + ASC(MID$(RGB$, 2, 1)) * 256 + ASC(MID$(RGB$, 3, 1)) * 65536" PRINT #1, "NEXT I" PRINT #1, "SCREEN 13" PRINT #1, "PALETTE USING Clr(0)" PRINT #1, "FOR I = 0 TO 255" PRINT #1, " COLOR I" PRINT #1, " PRINT CHR$(219);" PRINT #1, " LINE (I + 1, 100)-(I + 1, 320)" PRINT #1, "NEXT I" PRINT #1, "DO: LOOP WHILE INKEY$ = " + CHR$(34) + CHR$(34) PRINT #1, "SCREEN 0" PRINT #1, "COLOR 7, 0" PRINT #1, "CLS" PRINT #1, "WIDTH 80, 25" PRINT #1, "SYSTEM" CLOSE OPEN "PALSHOW.BAT" FOR OUTPUT AS #1 PRINT #1, "@QB /RUN PALSHOW.BAS" CLOSE END SUB 'Generate RND Palette SUB PalGenerate FOR i = 1 TO 10 RANDOMIZE TIMER Freq = INT(RND * 500) + 100 SOUND Freq, .2 NEXT i FOR i = 0 TO 255 RANDOMIZE TIMER RedVal(i) = INT(RND * 63) + 1 RANDOMIZE TIMER GreenVal(i) = INT(RND * 63) + 1 RANDOMIZE TIMER BlueVal(i) = INT(RND * 63) + 1 NEXT i PrintValues 5 UpdateColors 5 END SUB SUB PrintValues (Flag) SELECT CASE Flag CASE 1: GOSUB PrintRed CASE 2: GOSUB PrintGreen CASE 3: GOSUB PrintBlue CASE 4: GOSUB PrintColor CASE 5: GOSUB PrintRed: GOSUB PrintGreen: GOSUB PrintBlue: GOSUB PrintColor END SELECT Main$ = Trim$(STR$(RedVal(CurColor) + (GreenVal(CurColor) * 256) + (BlueVal(CurColor) * 65536))) IF LEN(Main$) < 7 THEN Main$ = STRING$((7 - LEN(Main$)), "0") + Main$ HxMain$ = Trim$(HEX$(VAL(Main$))) IF LEN(HxMain$) < 7 THEN HxMain$ = STRING$((7 - LEN(HxMain$)), "0") + HxMain$ XPrint 4, 273, Main$ XPrint 580, 273, HxMain$ EXIT SUB PrintRed: Red$ = Trim$(STR$(RedVal(CurColor))) IF LEN(Red$) < 2 THEN Red$ = "0" + Red$ HxRed$ = Trim$(HEX$(RedVal(CurColor))) IF LEN(HxRed$) < 2 THEN HxRed$ = "0" + HxRed$ XPrint 4, 193, Red$: XPrint 184, 193, HxRed$ RETURN PrintGreen: Green$ = Trim$(STR$(GreenVal(CurColor))) IF LEN(Green$) < 2 THEN Green$ = "0" + Green$ HxGreen$ = Trim$(HEX$(GreenVal(CurColor))) IF LEN(HxGreen$) < 2 THEN HxGreen$ = "0" + HxGreen$ XPrint 221, 193, Green$: XPrint 402, 193, HxGreen$ RETURN PrintBlue: Blue$ = Trim$(STR$(BlueVal(CurColor))) IF LEN(Blue$) < 2 THEN Blue$ = "0" + Blue$ HxBlue$ = Trim$(HEX$(BlueVal(CurColor))) IF LEN(HxBlue$) < 2 THEN HxBlue$ = "0" + HxBlue$ XPrint 439, 193, Blue$: XPrint 620, 193, HxBlue$ RETURN PrintColor: Clr$ = Trim$(STR$(CurColor)) IF LEN(Clr$) < 3 THEN Clr$ = STRING$((3 - LEN(Clr$)), "0") + Clr$ HxClr$ = Trim$(HEX$(CurColor)) IF LEN(HxClr$) < 3 THEN HxClr$ = STRING$((3 - LEN(HxClr$)), "0") + HxClr$ XPrint 118, 242, Clr$: XPrint 612, 242, HxClr$ RETURN END SUB SUB PutFocus (BoxNum) IF BoxNum = ActiveBox THEN EXIT SUB 'Check for current active box HideMouse SOUND 140, .1 SELECT CASE ActiveBox 'Hide previous active box CASE 1 LINE (1, 1)-(203, 207), NBClr, B LINE (1, 190)-(203, 207), NBClr, B LINE (23, 190)-(23, 207), NBClr LINE (181, 190)-(181, 207), NBClr LINE (45, 190)-(45, 207), NBClr LINE (159, 190)-(159, 207), NBClr CASE 2 LINE (218, 1)-(421, 207), NBClr, B LINE (218, 190)-(421, 207), NBClr, B LINE (240, 190)-(240, 207), NBClr LINE (399, 190)-(399, 207), NBClr LINE (262, 190)-(262, 207), NBClr LINE (377, 190)-(377, 207), NBClr CASE 3 LINE (436, 1)-(639, 207), NBClr, B LINE (436, 190)-(639, 207), NBClr, B LINE (458, 190)-(458, 207), NBClr LINE (480, 190)-(480, 207), NBClr LINE (595, 190)-(595, 207), NBClr CASE 4 LINE (115, 239)-(639, 256), NBClr, B LINE (145, 240)-(145, 255), NBClr LINE (609, 240)-(609, 255), NBClr LINE (617, 190)-(617, 207), NBClr LINE (167, 240)-(167, 255), NBClr LINE (587, 240)-(587, 255), NBClr END SELECT SELECT CASE BoxNum 'Highlite new active box CASE 1 LINE (1, 1)-(203, 207), ABClr, B LINE (1, 190)-(203, 207), ABClr, B LINE (23, 190)-(23, 207), ABClr LINE (181, 190)-(181, 207), ABClr LINE (45, 190)-(45, 207), ABClr LINE (159, 190)-(159, 207), ABClr CASE 2 LINE (218, 1)-(421, 207), ABClr, B LINE (218, 190)-(421, 207), ABClr, B LINE (240, 190)-(240, 207), ABClr LINE (399, 190)-(399, 207), ABClr LINE (262, 190)-(262, 207), ABClr LINE (377, 190)-(377, 207), ABClr CASE 3 LINE (436, 1)-(639, 207), ABClr, B LINE (436, 190)-(639, 207), ABClr, B LINE (458, 190)-(458, 207), ABClr LINE (617, 190)-(617, 207), ABClr LINE (480, 190)-(480, 207), ABClr LINE (595, 190)-(595, 207), ABClr CASE 4 LINE (115, 239)-(639, 256), ABClr, B LINE (145, 240)-(145, 255), ABClr LINE (609, 240)-(609, 255), ABClr LINE (167, 240)-(167, 255), ABClr LINE (587, 240)-(587, 255), ABClr END SELECT ActiveBox = BoxNum ShowMouse END SUB 'Quit sequence SUB Quit FOR i = 440 TO 100 STEP -10: SOUND i, .1: NEXT i SCREEN 0 COLOR 7, 0 CLS PRINT "PalEdit, Version 1.0 by Andrew Below. Last updated July 19, 1997." PRINT PRINT "E-mail: bel@obninsk.ru, onxman@geocities.com" PRINT " WWW: http://www.geocities.com/SiliconValley/Vista/4318" PRINT PRINT "Please send all your suggestions and wishes" PRINT "about this program to my E-mail address." SYSTEM END SUB 'Save palette to file SUB Save DIM RGB AS STRING * 3 FOR i = 880 TO 650 STEP -10: SOUND i, .1: NEXT i FOR i = 750 TO 500 STEP -5: SOUND i, .1: NEXT i OPEN SaveLoadFile FOR RANDOM AS #1 LEN = 3 FOR i = 0 TO 255 RGB = CHR$(RedVal(i)) + CHR$(GreenVal(i)) + CHR$(BlueVal(i)) PUT #1, i + 1, RGB$ NEXT i CLOSE END SUB 'Set the mouse coordinates SUB SetMousePos (x%, y%) IF MouseOK = 1 THEN x% = x% - 1 y% = y% - 1 InRegs.ax = 4 InRegs.cx = x% InRegs.dx = y% CALL INTERRUPT(&H33, InRegs, OutRegs) END IF END SUB 'Set the mouse horizontal and vertical speed SUB SetMouseSpeed (xSpd%, ySpd%) IF MouseOK = 1 THEN InRegs.ax = 15 InRegs.cx = xSpd% InRegs.dx = ySpd% CALL INTERRUPT(&H33, InRegs, OutRegs) END IF END SUB 'Set the mouse active window SUB SetMouseWindow (x1%, x2%, y1%, y2%) IF MouseOK = 1 THEN x1% = x1% - 1 x2% = x2% - 1 y1% = y1% - 1 y2% = y2% - 1 InRegs.ax = 7 InRegs.dx = x1% InRegs.cx = x2% CALL INTERRUPT(&H33, InRegs, OutRegs) InRegs.ax = 8 InRegs.dx = y1% InRegs.cx = y2% CALL INTERRUPT(&H33, InRegs, OutRegs) END IF END SUB 'Shows the mouse cursor on the screen SUB ShowMouse IF MouseOK = 1 THEN InRegs.ax = 1 CALL INTERRUPT(&H33, InRegs, OutRegs) END IF END SUB FUNCTION Trim$ (Txt$) Trim$ = LTRIM$(RTRIM$(Txt$)) END FUNCTION SUB UpdateColors (Flag) SELECT CASE Flag CASE 1: GOSUB UpdateRed CASE 2: GOSUB UpdateGreen CASE 3: GOSUB UpdateBlue CASE 4: GOSUB UpdateMain CASE 5: GOSUB UpdateRed: GOSUB UpdateGreen: GOSUB UpdateBlue: GOSUB UpdateMain END SELECT EXIT SUB UpdateRed: RedClr = RedVal(CurColor) PALETTE RClr, RedClr RETURN UpdateGreen: GreenClr = GreenVal(CurColor) * 256 PALETTE GClr, GreenClr RETURN UpdateBlue: BlueClr = BlueVal(CurColor) * 65536 PALETTE BClr, BlueClr RETURN UpdateMain: MainClr = RedVal(CurColor) + (256 * GreenVal(CurColor)) + (65536 * BlueVal(CurColor)) PALETTE MClr, MainClr RETURN END SUB 'Wait until mouse button will different that in "Button" parameter SUB WaitForOther (Button) DO GetMouseStatus B, x, y LOOP WHILE B = Button END SUB 'Print string content 0-9/A-F chars at any place on the graphic screen SUB XPrint (PixX%, PixY%, Decimal$) Dec$ = LTRIM$(RTRIM$(Decimal$)) CurX = PixX%: CurY = PixY% FOR i = 1 TO LEN(Dec$) Char$ = Trim$(MID$(Dec$, i, 1)) SELECT CASE Char$ CASE "0": PUT (CurX, CurY), Num0, PSET CASE "1": PUT (CurX, CurY), Num1, PSET CASE "2": PUT (CurX, CurY), Num2, PSET CASE "3": PUT (CurX, CurY), Num3, PSET CASE "4": PUT (CurX, CurY), Num4, PSET CASE "5": PUT (CurX, CurY), Num5, PSET CASE "6": PUT (CurX, CurY), Num6, PSET CASE "7": PUT (CurX, CurY), Num7, PSET CASE "8": PUT (CurX, CurY), Num8, PSET CASE "9": PUT (CurX, CurY), Num9, PSET CASE "A": PUT (CurX, CurY), ChrA, PSET CASE "B": PUT (CurX, CurY), ChrB, PSET CASE "C": PUT (CurX, CurY), ChrC, PSET CASE "D": PUT (CurX, CurY), ChrD, PSET CASE "E": PUT (CurX, CurY), ChrE, PSET CASE "F": PUT (CurX, CurY), ChrF, PSET END SELECT CurX = CurX + 8 NEXT i END SUB