Microsoft Small Basic

Program Listing: MXV150
' Colors v0.1 - (C) 2011 Nonki Takahashi
' shows 142 named colors
'
' History
' 2011/04/04 Created (280 lines)
'
' Reference
' [1] "Microsoft Small Basic - An Introduction to Programming"
' [2] James D. Foley, Andries Van Dam "Fundamentals of Interactive Computer Graphics" 1982
'
GraphicsWindow.Height = 600
GraphicsWindow.Width = 360
GraphicsWindow.Show()
ColorName_Init()
For iFamily = 1 To 10
GraphicsWindow.Clear()
GraphicsWindow.BrushColor = "Black"
oNextButton = Controls.AddButton("Next", 310, 20)
GraphicsWindow.BrushColor = "#4F81BD"
GraphicsWindow.DrawText(10, 10, sColorFamily[iFamily])
iLine = 1
For iColor = iColorFast[iFamily] To iColorLast[iFamily]
GraphicsWindow.BrushColor = sColorName[iColor]
GraphicsWindow.FillRectangle(10, 20 * iLine + 10, 250, 20)
sColor = GraphicsWindow.BrushColor
Color_GetLightness()
Color_GrayFromLightness()
GraphicsWindow.BrushColor = sGray
GraphicsWindow.FillRectangle(260, 20 * iLine + 10, 40, 20)
If iLightness > 120 Then
GraphicsWindow.BrushColor = "Black"
Else
GraphicsWindow.BrushColor = "White"
EndIf
GraphicsWindow.DrawText(20, 20 * iLine + 10, sColorName[iColor])
GraphicsWindow.DrawText(180, 20 * iLine + 10, sColor)
GraphicsWindow.DrawText(268, 20 * iLine + 10, iLightness)
iLine = iLine + 1
EndFor
bButtonNotClicked = "True"
Controls.ButtonClicked = Console_OnButtonClicked
While bButtonNotClicked
Program.Delay(200)
EndWhile
If iFamily = 10 Then
iFamily = 0
EndIf
EndFor

' Console | On button clicked
Sub Console_OnButtonClicked
bButtonNotClicked = "False"
EndSub

' Color | Get ligntness from color
' in: sColor - "#rrggbb"
' out: iLightness - 0..255
Sub Color_GetLightness
sR = Text.GetSubText(sColor, 2, 2)
sG = Text.GetSubText(sColor, 4, 2)
sB = Text.GetSubText(sColor, 6, 2)
sHex = sR
Math_Hex2Dec()
iR = iDec
sHex = sG
Math_Hex2Dec()
iG = iDec
sHex = sB
Math_Hex2Dec()
iB = iDec
iMax = Math.Max(iR, iG)
iMax = Math.Max(iMax, iB)
iMin = Math.Min(iR, iG)
iMin = Math.Min(iMin, iB)
iLightness = Math.Floor((iMax + iMin) / 2)
EndSub

' Color | Gray from lightness
' in: iLightness - 0..255
' out: sGray - "#rrggbb"
Sub Color_GrayFromLightness
iGray = Math.Floor(iLightness)
sGray = GraphicsWindow.GetColorFromRGB(iGray, iGray, iGray)
EndSub

' Color name | Initialization
Sub ColorName_Init
sColorFamily[1] = "Red Colors"
iColorFast[1] = 1
iColorLast[1] = 9
sColorName[1] = "IndianRed"
sColorName[2] = "LightCoral"
sColorName[3] = "Salmon"
sColorName[4] = "DarkSalmon"
sColorName[5] = "LightSalmon"
sColorName[6] = "Crimson"
sColorName[7] = "Red"
sColorName[8] = "FireBrick"
sColorName[9] = "DarkRed"

sColorFamily[2] = "Pink Colors"
iColorFast[2] = 10
iColorLast[2] = 15
sColorName[10] = "Pink"
sColorName[11] = "LightPink"
sColorName[12] = "HotPink"
sColorName[13] = "DeepPink"
sColorName[14] = "MediumVioletRed"
sColorName[15] = "PaleVioletRed"

sColorFamily[3] = "Orange Colors"
iColorFast[3] = 16
iColorLast[3] = 21
sColorName[16] = "LightSalmon"
sColorName[17] = "Coral"
sColorName[18] = "Tomato"
sColorName[19] = "OrangeRed"
sColorName[20] = "DarkOrange"
sColorName[21] = "Orange"

sColorFamily[4] = "Yellow Colors"
iColorFast[4] = 22
iColorLast[4] = 32
sColorName[22] = "Gold"
sColorName[23] = "Yellow"
sColorName[24] = "LightYellow"
sColorName[25] = "LemonChiffon"
sColorName[26] = "LightGoldenrodYellow"
sColorName[27] = "PapayaWhip"
sColorName[28] = "Moccasin"
sColorName[29] = "PeachPuff"
sColorName[30] = "PaleGoldenrod"
sColorName[31] = "Khaki"
sColorName[32] = "DarkKhaki"

sColorFamily[5] = "Purple Colors"
iColorFast[5] = 33
iColorLast[5] = 50
sColorName[33] = "Lavender"
sColorName[34] = "Thistle"
sColorName[35] = "Plum"
sColorName[36] = "Violet"
sColorName[37] = "Orchid"
sColorName[38] = "Fuchsia"
sColorName[39] = "Magenta"
sColorName[40] = "MediumOrchid"
sColorName[41] = "MediumPurple"
sColorName[42] = "BlueViolet"
sColorName[43] = "DarkViolet"
sColorName[44] = "DarkOrchid"
sColorName[45] = "DarkMagenta"
sColorName[46] = "Purple"
sColorName[47] = "Indigo"
sColorName[48] = "SlateBlue"
sColorName[49] = "DarkSlateBlue"
sColorName[50] = "MediumSlateBlue"

sColorFamily[6] = "Green Colors"
iColorFast[6] = 51
iColorLast[6] = 73
sColorName[51] = "GreenYellow"
sColorName[52] = "Chartreuse"
sColorName[53] = "LawnGreen"
sColorName[54] = "Lime"
sColorName[55] = "LimeGreen"
sColorName[56] = "PaleGreen"
sColorName[57] = "LightGreen"
sColorName[58] = "MediumSpringGreen"
sColorName[59] = "SpringGreen"
sColorName[60] = "MediumSeaGreen"
sColorName[61] = "SeaGreen"
sColorName[62] = "ForestGreen"
sColorName[63] = "Green"
sColorName[64] = "DarkGreen"
sColorName[65] = "YellowGreen"
sColorName[66] = "OliveDrab"
sColorName[67] = "Olive"
sColorName[68] = "DarkOliveGreen"
sColorName[69] = "MediumAquamarine"
sColorName[70] = "DarkSeaGreen"
sColorName[71] = "LightSeaGreen"
sColorName[72] = "DarkCyan"
sColorName[73] = "Teal"

sColorFamily[7] = "Blue Colors"
iColorFast[7] = 74
iColorLast[7] = 98
sColorName[74] = "Aqua"
sColorName[75] = "Cyan"
sColorName[76] = "LightCyan"
sColorName[77] = "PaleTurquoise"
sColorName[78] = "Aquamarine"
sColorName[79] = "Turquoise"
sColorName[80] = "MediumTurquoise"
sColorName[81] = "DarkTurquoise"
sColorName[82] = "CadetBlue"
sColorName[83] = "SteelBlue"
sColorName[84] = "LightSteelBlue"
sColorName[85] = "PowderBlue"
sColorName[86] = "LightBlue"
sColorName[87] = "SkyBlue"
sColorName[88] = "LightSkyBlue"
sColorName[89] = "DeepSkyBlue"
sColorName[90] = "DodgerBlue"
sColorName[91] = "CornflowerBlue"
sColorName[92] = "MediumSlateBlue"
sColorName[93] = "RoyalBlue"
sColorName[94] = "Blue"
sColorName[95] = "MediumBlue"
sColorName[96] = "DarkBlue"
sColorName[97] = "Navy"
sColorName[98] = "MidnightBlue"

sColorFamily[8] = "Brown Colors"
iColorFast[8] = 99
iColorLast[8] = 115
sColorName[99] = "Cornsilk"
sColorName[100] = "BlanchedAlmond"
sColorName[101] = "Bisque"
sColorName[102] = "NavajoWhite"
sColorName[103] = "Wheat"
sColorName[104] = "BurlyWood"
sColorName[105] = "Tan"
sColorName[106] = "RosyBrown"
sColorName[107] = "SandyBrown"
sColorName[108] = "Goldenrod"
sColorName[109] = "DarkGoldenrod"
sColorName[110] = "Peru"
sColorName[111] = "Chocolate"
sColorName[112] = "SaddleBrown"
sColorName[113] = "Sienna"
sColorName[114] = "Brown"
sColorName[115] = "Maroon"

sColorFamily[9] = "White Colors"
iColorFast[9] = 116
iColorLast[9] = 132
sColorName[116] = "White"
sColorName[117] = "Snow"
sColorName[118] = "Honeydew"
sColorName[119] = "MintCream"
sColorName[120] = "Azure"
sColorName[121] = "AliceBlue"
sColorName[122] = "GhostWhite"
sColorName[123] = "WhiteSmoke"
sColorName[124] = "Seashell"
sColorName[125] = "Beige"
sColorName[126] = "OldLace"
sColorName[127] = "FloralWhite"
sColorName[128] = "Ivory"
sColorName[129] = "AntiqueWhite"
sColorName[130] = "Linen"
sColorName[131] = "LavenderBlush"
sColorName[132] = "MistyRose"

sColorFamily[10] = "Gray Colors"
iColorFast[10] = 133
iColorLast[10] = 142
sColorName[133] = "Gainsboro"
sColorName[134] = "LightGray"
sColorName[135] = "Silver"
sColorName[136] = "DarkGray"
sColorName[137] = "Gray"
sColorName[138] = "DimGray"
sColorName[139] = "LightSlateGray"
sColorName[140] = "SlateGray"
sColorName[141] = "DarkSlateGray"
sColorName[142] = "Black"
EndSub

' Math | Convert hexadecimal to decimal
' in: sHex
' out: iDec
Sub Math_Hex2Dec
iDec = 0
iLen = Text.GetLength(sHex)
For iPtr = 1 To iLen
iDec = iDec * 16 + Text.GetIndexOf("0123456789ABCDEF", Text.GetSubText(sHex, iPtr, 1)) - 1
EndFor
EndSub