'=========================================================================== ' Subject: VGA COLORS & PALETTES Date: 05-15-99 (18:33) ' Author: Dieter Folger Code: PB ' Origin: folger@bamberg.baynet.de Packet: PB.ABC '=========================================================================== '*********************************** '* VGA Colors & Palettes * '* Colors Demo Program * '* Developed by Ray Ligocki * '* Programmed in QuickBASIC 4.5 * '* F R E E W A R E ... enjoy * '* * '* Converted to Power Basic * '* by Dieter Folger 1997 * '*********************************** ON ERROR GOTO ErrorHandle SCREEN 12 ' VGA 640 X 480 X 16 colors ' Dimension and read draw character strings DIM ch$(0:42) FOR x = 0 TO 42: READ ch$(x): NEXT FirstScreen MainScreen 'Set preliminary colors for display Blue = 63: Green = 43: Red = 63 SetPalette 1, 0, 0, Blue SetPalette 2, 0, Green, 0 SetPalette 4, Red, 0, 0 SetPalette 13, Red, Green, Blue PrintValue Arrow$ = CHR$(25): Place = 19 LOCATE 18, Place: PRINT Arrow$ ' Main loop - forces user to use arrow keys or quit and monitor palette DO DO: a$ = INKEY$: LOOP UNTIL LEN(a$) IF LEN(a$) = 2 THEN a$ = RIGHT$(a$, 1) SELECT CASE a$ CASE CHR$(77) 'right LOCATE 18, Place: PRINT " " INCR Place, 19 IF Place > 57 THEN Place = 19 LOCATE 18, Place: PRINT Arrow$ CASE CHR$(75) 'left LOCATE 18, Place: PRINT " " DECR Place, 19 IF Place < 19 THEN Place = 57 LOCATE 18, Place: PRINT Arrow$ CASE CHR$(72) IF Place = 57 THEN INCR Blue IF Blue > 63 THEN Blue = 0 SetPalette 1, 0, 0, Blue PrintValue END IF IF Place = 38 THEN INCR Green IF Green > 63 THEN Green = 0 SetPalette 2, 0, Green, 0 PrintValue END IF IF Place = 19 THEN INCR Red IF Red > 63 THEN Red = 0 SetPalette 4, Red, 0, 0 PrintValue END IF CASE CHR$(80) IF Place = 57 THEN DECR Blue IF Blue < 0 THEN Blue = 63 PrintValue SetPalette 1, 0, 0, Blue END IF IF Place = 38 THEN DECR Green IF Green < 0 THEN Green = 63 SetPalette 2, 0, Green, 0 PrintValue END IF IF Place = 19 THEN DECR Red IF Red < 0 THEN Red = 63 SetPalette 4, Red, 0, 0 PrintValue END IF CASE "Q", "q", CHR$(27) END END SELECT SetPalette 13, Red, Green, Blue LOOP 'Data for characters DATA brhu4erfd4gnlbr2 DATA r2u6ngd6r2 DATA bu5er2fdgl2gd2r4 DATA bu5er2fdgnlfdgl2nhbr3 DATA br3u6g3r4bd3 DATA bufr2eu2hl3u2r4bd6 DATA bu3r3fdgl2hu4er2bd6br DATA bu6r4dg3d2br3 DATA brhuer2euhl2gdfr2fdgnl2br DATA brr2eu4hl2gdfr3bd3 DATA br4,br4,br4,br4,br4,br4,br4 DATA u5er2fd2nl4d3 DATA ru6nlr2fdgnl2fdgnl3br DATA br4bu5hl2gd4fr2ebd DATA ru6nlr2fd4gnl2br DATA u6nr4d3nr3d3r4 DATA u3nr3u3r4bd6 DATA buu4er3bd4nld2l3nhr3 DATA u3nu3r4nu3d3 DATA r2u6nl2nr2d6r2 DATA bunufr2enu5bd DATA u3nu3rne3f3 DATA nu6r4 DATA u6f2due2d6 DATA u6f4nu4d2 DATA brhu4er2fd4gnl2br DATA u6r3fdgl3d3br4 DATA brhu4er2fd4gnl2buhf2 DATA u6r3fdgl3rf3 DATA bufr2euhl2huer2fbd5 DATA bu6r4l2d6br2 DATA bunu5fr2enu5bd DATA bu6d4f2e2u4bd6 DATA nu6e2udf2nu6 DATA ue4nug2h2nuf4d DATA bu6df2e2nug2d3br2 DATA bu6r4dg4dr4 ErrorHandle: CLS : PRINT "This program is for VGA only !" PRINT "Sorry .............." END '--------------------------------- SUB SetPalette (BYVAL C?, r, g, b) '--------------------------------- LOCAL Col? ! mov ax,&h1007 ! mov bl,C? ! Int &h10 ! mov Col?,bh OUT &H3C8, Col? OUT &H3C9, r OUT &H3C9, g OUT &H3C9, b END SUB '------------- SUB PrintValue '------------- ' print values held in Blue, Green and Red variable SHARED Blue, Red, Green LOCATE 22, 62: PRINT Blue LOCATE 22, 43: PRINT Green LOCATE 22, 24: PRINT Red END SUB '-------------- SUB FirstScreen '-------------- LINE (130, 100)-(520, 200), 1, BF LINE (131, 101)-(519, 199), 14, B LINE (133, 103)-(517, 197), 14, B DRAW "bm162,145c0s20": m$ = "VGA COLORS": WriteChar m$ DRAW "bm163,145": WriteChar m$ DRAW "bm164,145": WriteChar m$ DRAW "bm155,148c14": WriteChar m$ DRAW "bm156,148": WriteChar m$ DRAW "bm157,148": WriteChar m$ DRAW "bm246,180s4c14": m$ = "DEVELOPED BY RAY LIGOCKI": WriteChar m$ DRAW "bm210,430s8c12": m$ = "THIS IS FREEWARE": WriteChar m$ LOCATE 15, 16 PRINT "Originally programmed in QuickBASIC 4.5 (April 1990)" LOCATE 16, 17 PRINT "Converted to Power Basic by D. Folger (April 1997)" LOCATE 24, 35: PRINT "Press a key" DO: K$ = INKEY$: LOOP UNTIL LEN(K$) END SUB '------------- SUB MainScreen '------------- CLS LINE (0, 0)-(639, 40), 15, BF LINE (2, 2)-(637, 38), 1, B m$ = "THE PALETTE SHOP" DRAW "bm80,35c12s16": WriteChar m$ v = 34 FOR x = 81 TO 86 DRAW "bm" + STR$(x) + "," + STR$(v): v = v - 1 WriteChar m$ NEXT x ' Draw paint cans CIRCLE (150, 360), 30, 7, 3, , .6 CIRCLE (150, 310), 30, 7, , , .6 CIRCLE (150, 310), 25, 7, , , .6 DRAW "bm120,310s4c7d50br60u50" PAINT (150, 310), 4, 7 PAINT (150, 330), 14, 7 CIRCLE (150, 350), 26, 4, , , .6 PAINT (150, 350), 15, 4 DRAW "bm137,346c0": m$ = "LIGO": WriteChar m$ DRAW "bm134,356": m$ = "PAINT": WriteChar m$ DRAW "bm148,359c4r4fl6gr8gl6fr4" CIRCLE (300, 360), 30, 7, 3, , .6 CIRCLE (300, 310), 30, 7, , , .6 CIRCLE (300, 310), 25, 7, , , .6 DRAW "bm270,310s4c7d50br60u50" PAINT (300, 310), 2, 7 PAINT (300, 330), 14, 7 CIRCLE (300, 350), 26, 4, , , .6 PAINT (300, 350), 15, 4 DRAW "bm287,346c0": m$ = "LIGO": WriteChar m$ DRAW "bm284,356": m$ = "PAINT": WriteChar m$ DRAW "bm298,359c2r4fl6gr8gl6fr4" CIRCLE (450, 360), 30, 7, 3, , .6 CIRCLE (450, 310), 30, 7, , , .6 CIRCLE (450, 310), 25, 7, , , .6 DRAW "bm420,310s4c7d50br60u50" PAINT (450, 310), 1, 7 PAINT (450, 330), 14, 7 CIRCLE (450, 350), 26, 4, , , .6 PAINT (450, 350), 15, 4 DRAW "bm437,346c0": m$ = "LIGO": WriteChar m$ DRAW "bm434,356": m$ = "PAINT": WriteChar m$ DRAW "bm448,359c1r4fl6gr8gl6fr4" ' User instructions LOCATE 16, 4 PRINT "Use " + CHR$(27) + CHR$(26) + " keys to select paint color & "; PRINT CHR$(18) + " keys for brightness control." 'Draw pipe from bottom of cans to top of test tile DRAW "bm146,380c1d30f10r420e10u330h10l270g10d20r10u15e5r260f5d318g5l116u29l10d29l140u29l10d29l134h5u24l10" PAINT (150, 382), 7, 1 ' Create a brown border around the test tile LINE (80, 100)-(560, 220), 15, B LINE (92, 122)-(548, 206), 15, B PAINT (90, 105), 6, 15 ' Draw boxes and fill with default colors DRAW "bm600,100c15d320r20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20nl20u20l20" v = 125: FOR x = 1 TO 15: PAINT (610, v), x, 15: v = v + 20: NEXT x v = 112: FOR x = 0 TO 15: DRAW "bm618," + STR$(v) + "c15s4": m$ = STR$(x): WriteChar m$: v = v + 20: NEXT DRAW "bm590,432s4c15": m$ = "DEFAULT" WriteChar m$: DRAW "bm594,442": m$ = "COLORS": WriteChar m$ ' Show off my handle DRAW "bm135,117s8c15" m$ = "LIGO PAINT COMPANY TEST TILE": WriteChar m$ DRAW "bm94,124c12s4r451d80l225nu80l226u80" PAINT (100, 130), 15, 12 ' put color for palette 13 on a white and black background LINE (116, 138)-(300, 190), 13, BF LINE (344, 138)-(524, 190), 13, BF ' More user information LOCATE 30, 29: PRINT "Press Q or Esc to quit"; LOCATE 28, 16 PRINT "64 X 64 X 64 = 262,144 possible color combinations !" LOCATE 4, 5 PRINT "Command: SetPalette 13, Red, Green, Blue (I am changing color 13)" END SUB '----------------- SUB WriteChar (m$) '----------------- ' Draw character subprogram SHARED ch$() FOR z = 1 TO LEN(m$) m = ASC(MID$(m$, z, 1)) - 48 IF m = -16 THEN DRAW "br4" ELSE DRAW ch$(m) DRAW "br3" NEXT z END SUB '=== eof =================================================================