From 88d781b19e842d53856a2b7bac01acde702c821f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 13 Mar 2012 10:14:45 +0000 Subject: rfe-3503317: XParseColor speedup --- xlib/xcolors.c | 725 ++++++++++++++++++++++++--------------------------------- 1 file changed, 308 insertions(+), 417 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 984797f..e0e7f6e 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -14,12 +14,6 @@ #include /* - * Forward declarations for functions used only in this file. - */ - -static int FindColor(const char *name, XColor *colorPtr); - -/* * Define an array that defines the mapping from color names to RGB values. * Note that this array must be kept sorted alphabetically so that the binary * search used in XParseColor will succeed. @@ -31,14 +25,12 @@ typedef struct { } XColorEntry; static const XColorEntry xColors[] = { - { "alice blue", 240, 248, 255 }, - { "AliceBlue", 240, 248, 255 }, - { "antique white", 250, 235, 215 }, - { "AntiqueWhite", 250, 235, 215 }, - { "AntiqueWhite1", 255, 239, 219 }, - { "AntiqueWhite2", 238, 223, 204 }, - { "AntiqueWhite3", 205, 192, 176 }, - { "AntiqueWhite4", 139, 131, 120 }, + { "aliceBlue", 240, 248, 255 }, + { "antiqueWhite", 250, 235, 215 }, + { "antiquewhite1", 255, 239, 219 }, + { "antiquewhite2", 238, 223, 204 }, + { "antiquewhite3", 205, 192, 176 }, + { "antiquewhite4", 139, 131, 120 }, { "aquamarine", 127, 255, 212 }, { "aquamarine1", 127, 255, 212 }, { "aquamarine2", 118, 238, 198 }, @@ -56,15 +48,13 @@ static const XColorEntry xColors[] = { { "bisque3", 205, 183, 158 }, { "bisque4", 139, 125, 107 }, { "black", 0, 0, 0 }, - { "blanched almond", 255, 235, 205 }, - { "BlanchedAlmond", 255, 235, 205 }, + { "blanchedAlmond", 255, 235, 205 }, { "blue", 0, 0, 255 }, - { "blue violet", 138, 43, 226 }, { "blue1", 0, 0, 255 }, { "blue2", 0, 0, 238 }, { "blue3", 0, 0, 205 }, { "blue4", 0, 0, 139 }, - { "BlueViolet", 138, 43, 226 }, + { "blueViolet", 138, 43, 226 }, { "brown", 165, 42, 42 }, { "brown1", 255, 64, 64 }, { "brown2", 238, 59, 59 }, @@ -75,12 +65,11 @@ static const XColorEntry xColors[] = { { "burlywood2", 238, 197, 145 }, { "burlywood3", 205, 170, 125 }, { "burlywood4", 139, 115, 85 }, - { "cadet blue", 95, 158, 160 }, - { "CadetBlue", 95, 158, 160 }, - { "CadetBlue1", 152, 245, 255 }, - { "CadetBlue2", 142, 229, 238 }, - { "CadetBlue3", 122, 197, 205 }, - { "CadetBlue4", 83, 134, 139 }, + { "cadetBlue", 95, 158, 160 }, + { "cadetblue1", 152, 245, 255 }, + { "cadetblue2", 142, 229, 238 }, + { "cadetblue3", 122, 197, 205 }, + { "cadetblue4", 83, 134, 139 }, { "chartreuse", 127, 255, 0 }, { "chartreuse1", 127, 255, 0 }, { "chartreuse2", 118, 238, 0 }, @@ -96,8 +85,7 @@ static const XColorEntry xColors[] = { { "coral2", 238, 106, 80 }, { "coral3", 205, 91, 69 }, { "coral4", 139, 62, 47 }, - { "cornflower blue", 100, 149, 237 }, - { "CornflowerBlue", 100, 149, 237 }, + { "cornflowerBlue", 100, 149, 237 }, { "cornsilk", 255, 248, 220 }, { "cornsilk1", 255, 248, 220 }, { "cornsilk2", 238, 232, 205 }, @@ -108,102 +96,75 @@ static const XColorEntry xColors[] = { { "cyan2", 0, 238, 238 }, { "cyan3", 0, 205, 205 }, { "cyan4", 0, 139, 139 }, - { "dark blue", 0, 0, 139 }, - { "dark cyan", 0, 139, 139 }, - { "dark goldenrod", 184, 134, 11 }, - { "dark gray", 169, 169, 169 }, - { "dark green", 0, 100, 0 }, - { "dark grey", 169, 169, 169 }, - { "dark khaki", 189, 183, 107 }, - { "dark magenta", 139, 0, 139 }, - { "dark olive green", 85, 107, 47 }, - { "dark orange", 255, 140, 0 }, - { "dark orchid", 153, 50, 204 }, - { "dark red", 139, 0, 0 }, - { "dark salmon", 233, 150, 122 }, - { "dark sea green", 143, 188, 143 }, - { "dark slate blue", 72, 61, 139 }, - { "dark slate gray", 47, 79, 79 }, - { "dark slate grey", 47, 79, 79 }, - { "dark turquoise", 0, 206, 209 }, - { "dark violet", 148, 0, 211 }, - { "DarkBlue", 0, 0, 139 }, - { "DarkCyan", 0, 139, 139 }, - { "DarkGoldenrod", 184, 134, 11 }, - { "DarkGoldenrod1", 255, 185, 15 }, - { "DarkGoldenrod2", 238, 173, 14 }, - { "DarkGoldenrod3", 205, 149, 12 }, - { "DarkGoldenrod4", 139, 101, 8 }, - { "DarkGray", 169, 169, 169 }, - { "DarkGreen", 0, 100, 0 }, - { "DarkGrey", 169, 169, 169 }, - { "DarkKhaki", 189, 183, 107 }, - { "DarkMagenta", 139, 0, 139 }, - { "DarkOliveGreen", 85, 107, 47 }, - { "DarkOliveGreen1", 202, 255, 112 }, - { "DarkOliveGreen2", 188, 238, 104 }, - { "DarkOliveGreen3", 162, 205, 90 }, - { "DarkOliveGreen4", 110, 139, 61 }, - { "DarkOrange", 255, 140, 0 }, - { "DarkOrange1", 255, 127, 0 }, - { "DarkOrange2", 238, 118, 0 }, - { "DarkOrange3", 205, 102, 0 }, - { "DarkOrange4", 139, 69, 0 }, - { "DarkOrchid", 153, 50, 204 }, - { "DarkOrchid1", 191, 62, 255 }, - { "DarkOrchid2", 178, 58, 238 }, - { "DarkOrchid3", 154, 50, 205 }, - { "DarkOrchid4", 104, 34, 139 }, - { "DarkRed", 139, 0, 0 }, - { "DarkSalmon", 233, 150, 122 }, - { "DarkSeaGreen", 143, 188, 143 }, - { "DarkSeaGreen1", 193, 255, 193 }, - { "DarkSeaGreen2", 180, 238, 180 }, - { "DarkSeaGreen3", 155, 205, 155 }, - { "DarkSeaGreen4", 105, 139, 105 }, - { "DarkSlateBlue", 72, 61, 139 }, - { "DarkSlateGray", 47, 79, 79 }, - { "DarkSlateGray1", 151, 255, 255 }, - { "DarkSlateGray2", 141, 238, 238 }, - { "DarkSlateGray3", 121, 205, 205 }, - { "DarkSlateGray4", 82, 139, 139 }, - { "DarkSlateGrey", 47, 79, 79 }, - { "DarkTurquoise", 0, 206, 209 }, - { "DarkViolet", 148, 0, 211 }, - { "deep pink", 255, 20, 147 }, - { "deep sky blue", 0, 191, 255 }, - { "DeepPink", 255, 20, 147 }, - { "DeepPink1", 255, 20, 147 }, - { "DeepPink2", 238, 18, 137 }, - { "DeepPink3", 205, 16, 118 }, - { "DeepPink4", 139, 10, 80 }, - { "DeepSkyBlue", 0, 191, 255 }, - { "DeepSkyBlue1", 0, 191, 255 }, - { "DeepSkyBlue2", 0, 178, 238 }, - { "DeepSkyBlue3", 0, 154, 205 }, - { "DeepSkyBlue4", 0, 104, 139 }, - { "dim gray", 105, 105, 105 }, - { "dim grey", 105, 105, 105 }, - { "DimGray", 105, 105, 105 }, - { "DimGrey", 105, 105, 105 }, - { "dodger blue", 30, 144, 255 }, - { "DodgerBlue", 30, 144, 255 }, - { "DodgerBlue1", 30, 144, 255 }, - { "DodgerBlue2", 28, 134, 238 }, - { "DodgerBlue3", 24, 116, 205 }, - { "DodgerBlue4", 16, 78, 139 }, + { "darkBlue", 0, 0, 139 }, + { "darkCyan", 0, 139, 139 }, + { "darkGoldenrod", 184, 134, 11 }, + { "darkgoldenrod1", 255, 185, 15 }, + { "darkgoldenrod2", 238, 173, 14 }, + { "darkgoldenrod3", 205, 149, 12 }, + { "darkgoldenrod4", 139, 101, 8 }, + { "darkGray", 169, 169, 169 }, + { "darkGreen", 0, 100, 0 }, + { "darkGrey", 169, 169, 169 }, + { "darkKhaki", 189, 183, 107 }, + { "darkMagenta", 139, 0, 139 }, + { "darkOliveGreen", 85, 107, 47 }, + { "darkolivegreen1", 202, 255, 112 }, + { "darkolivegreen2", 188, 238, 104 }, + { "darkolivegreen3", 162, 205, 90 }, + { "darkolivegreen4", 110, 139, 61 }, + { "darkOrange", 255, 140, 0 }, + { "darkorange1", 255, 127, 0 }, + { "darkorange2", 238, 118, 0 }, + { "darkorange3", 205, 102, 0 }, + { "darkorange4", 139, 69, 0 }, + { "darkOrchid", 153, 50, 204 }, + { "darkorchid1", 191, 62, 255 }, + { "darkorchid2", 178, 58, 238 }, + { "darkorchid3", 154, 50, 205 }, + { "darkorchid4", 104, 34, 139 }, + { "darkRed", 139, 0, 0 }, + { "darkSalmon", 233, 150, 122 }, + { "darkSeaGreen", 143, 188, 143 }, + { "darkseagreen1", 193, 255, 193 }, + { "darkseagreen2", 180, 238, 180 }, + { "darkseagreen3", 155, 205, 155 }, + { "darkseagreen4", 105, 139, 105 }, + { "darkSlateBlue", 72, 61, 139 }, + { "darkSlateGray", 47, 79, 79 }, + { "darkslategray1", 151, 255, 255 }, + { "darkslategray2", 141, 238, 238 }, + { "darkslategray3", 121, 205, 205 }, + { "darkslategray4", 82, 139, 139 }, + { "darkSlateGrey", 47, 79, 79 }, + { "darkTurquoise", 0, 206, 209 }, + { "darkViolet", 148, 0, 211 }, + { "deepPink", 255, 20, 147 }, + { "deeppink1", 255, 20, 147 }, + { "deeppink2", 238, 18, 137 }, + { "deeppink3", 205, 16, 118 }, + { "deeppink4", 139, 10, 80 }, + { "deepSkyBlue", 0, 191, 255 }, + { "deepskyblue1", 0, 191, 255 }, + { "deepskyblue2", 0, 178, 238 }, + { "deepskyblue3", 0, 154, 205 }, + { "deepskyblue4", 0, 104, 139 }, + { "dimGray", 105, 105, 105 }, + { "dimGrey", 105, 105, 105 }, + { "dodgerBlue", 30, 144, 255 }, + { "dodgerblue1", 30, 144, 255 }, + { "dodgerblue2", 28, 134, 238 }, + { "dodgerblue3", 24, 116, 205 }, + { "dodgerblue4", 16, 78, 139 }, { "firebrick", 178, 34, 34 }, { "firebrick1", 255, 48, 48 }, { "firebrick2", 238, 44, 44 }, { "firebrick3", 205, 38, 38 }, { "firebrick4", 139, 26, 26 }, - { "floral white", 255, 250, 240 }, - { "FloralWhite", 255, 250, 240 }, - { "forest green", 34, 139, 34 }, - { "ForestGreen", 34, 139, 34 }, + { "floralWhite", 255, 250, 240 }, + { "forestGreen", 34, 139, 34 }, { "gainsboro", 220, 220, 220 }, - { "ghost white", 248, 248, 255 }, - { "GhostWhite", 248, 248, 255 }, + { "ghostWhite", 248, 248, 255 }, { "gold", 255, 215, 0 }, { "gold1", 255, 215, 0 }, { "gold2", 238, 201, 0 }, @@ -317,12 +278,11 @@ static const XColorEntry xColors[] = { { "gray98", 250, 250, 250 }, { "gray99", 252, 252, 252 }, { "green", 0, 255, 0 }, - { "green yellow", 173, 255, 47 }, { "green1", 0, 255, 0 }, { "green2", 0, 238, 0 }, { "green3", 0, 205, 0 }, { "green4", 0, 139, 0 }, - { "GreenYellow", 173, 255, 47 }, + { "greenYellow", 173, 255, 47 }, { "grey", 190, 190, 190 }, { "grey0", 0, 0, 0 }, { "grey1", 3, 3, 3 }, @@ -430,18 +390,16 @@ static const XColorEntry xColors[] = { { "honeydew2", 224, 238, 224 }, { "honeydew3", 193, 205, 193 }, { "honeydew4", 131, 139, 131 }, - { "hot pink", 255, 105, 180 }, - { "HotPink", 255, 105, 180 }, - { "HotPink1", 255, 110, 180 }, - { "HotPink2", 238, 106, 167 }, - { "HotPink3", 205, 96, 144 }, - { "HotPink4", 139, 58, 98 }, - { "indian red", 205, 92, 92 }, - { "IndianRed", 205, 92, 92 }, - { "IndianRed1", 255, 106, 106 }, - { "IndianRed2", 238, 99, 99 }, - { "IndianRed3", 205, 85, 85 }, - { "IndianRed4", 139, 58, 58 }, + { "hotPink", 255, 105, 180 }, + { "hotpink1", 255, 110, 180 }, + { "hotpink2", 238, 106, 167 }, + { "hotpink3", 205, 96, 144 }, + { "hotpink4", 139, 58, 98 }, + { "indianRed", 205, 92, 92 }, + { "indianred1", 255, 106, 106 }, + { "indianred2", 238, 99, 99 }, + { "indianred3", 205, 85, 85 }, + { "indianred4", 139, 58, 58 }, { "ivory", 255, 255, 240 }, { "ivory1", 255, 255, 240 }, { "ivory2", 238, 238, 224 }, @@ -453,88 +411,67 @@ static const XColorEntry xColors[] = { { "khaki3", 205, 198, 115 }, { "khaki4", 139, 134, 78 }, { "lavender", 230, 230, 250 }, - { "lavender blush", 255, 240, 245 }, - { "LavenderBlush", 255, 240, 245 }, - { "LavenderBlush1", 255, 240, 245 }, - { "LavenderBlush2", 238, 224, 229 }, - { "LavenderBlush3", 205, 193, 197 }, - { "LavenderBlush4", 139, 131, 134 }, - { "lawn green", 124, 252, 0 }, - { "LawnGreen", 124, 252, 0 }, - { "lemon chiffon", 255, 250, 205 }, - { "LemonChiffon", 255, 250, 205 }, - { "LemonChiffon1", 255, 250, 205 }, - { "LemonChiffon2", 238, 233, 191 }, - { "LemonChiffon3", 205, 201, 165 }, - { "LemonChiffon4", 139, 137, 112 }, - { "light blue", 173, 216, 230 }, - { "light coral", 240, 128, 128 }, - { "light cyan", 224, 255, 255 }, - { "light goldenrod", 238, 221, 130 }, - { "light goldenrod yellow", 250, 250, 210 }, - { "light gray", 211, 211, 211 }, - { "light green", 144, 238, 144 }, - { "light grey", 211, 211, 211 }, - { "light pink", 255, 182, 193 }, - { "light salmon", 255, 160, 122 }, - { "light sea green", 32, 178, 170 }, - { "light sky blue", 135, 206, 250 }, - { "light slate blue", 132, 112, 255 }, - { "light slate gray", 119, 136, 153 }, - { "light slate grey", 119, 136, 153 }, - { "light steel blue", 176, 196, 222 }, - { "light yellow", 255, 255, 224 }, - { "LightBlue", 173, 216, 230 }, - { "LightBlue1", 191, 239, 255 }, - { "LightBlue2", 178, 223, 238 }, - { "LightBlue3", 154, 192, 205 }, - { "LightBlue4", 104, 131, 139 }, - { "LightCoral", 240, 128, 128 }, - { "LightCyan", 224, 255, 255 }, - { "LightCyan1", 224, 255, 255 }, - { "LightCyan2", 209, 238, 238 }, - { "LightCyan3", 180, 205, 205 }, - { "LightCyan4", 122, 139, 139 }, - { "LightGoldenrod", 238, 221, 130 }, - { "LightGoldenrod1", 255, 236, 139 }, - { "LightGoldenrod2", 238, 220, 130 }, - { "LightGoldenrod3", 205, 190, 112 }, - { "LightGoldenrod4", 139, 129, 76 }, - { "LightGoldenrodYellow", 250, 250, 210 }, - { "LightGray", 211, 211, 211 }, - { "LightGreen", 144, 238, 144 }, - { "LightGrey", 211, 211, 211 }, - { "LightPink", 255, 182, 193 }, - { "LightPink1", 255, 174, 185 }, - { "LightPink2", 238, 162, 173 }, - { "LightPink3", 205, 140, 149 }, - { "LightPink4", 139, 95, 101 }, - { "LightSalmon", 255, 160, 122 }, - { "LightSalmon1", 255, 160, 122 }, - { "LightSalmon2", 238, 149, 114 }, - { "LightSalmon3", 205, 129, 98 }, - { "LightSalmon4", 139, 87, 66 }, - { "LightSeaGreen", 32, 178, 170 }, - { "LightSkyBlue", 135, 206, 250 }, - { "LightSkyBlue1", 176, 226, 255 }, - { "LightSkyBlue2", 164, 211, 238 }, - { "LightSkyBlue3", 141, 182, 205 }, - { "LightSkyBlue4", 96, 123, 139 }, - { "LightSlateBlue", 132, 112, 255 }, - { "LightSlateGray", 119, 136, 153 }, - { "LightSlateGrey", 119, 136, 153 }, - { "LightSteelBlue", 176, 196, 222 }, - { "LightSteelBlue1", 202, 225, 255 }, - { "LightSteelBlue2", 188, 210, 238 }, - { "LightSteelBlue3", 162, 181, 205 }, - { "LightSteelBlue4", 110, 123, 139 }, - { "LightYellow", 255, 255, 224 }, - { "LightYellow1", 255, 255, 224 }, - { "LightYellow2", 238, 238, 209 }, - { "LightYellow3", 205, 205, 180 }, - { "LightYellow4", 139, 139, 122 }, - { "lime green", 50, 205, 50 }, - { "LimeGreen", 50, 205, 50 }, + { "lavenderBlush", 255, 240, 245 }, + { "lavenderblush1", 255, 240, 245 }, + { "lavenderblush2", 238, 224, 229 }, + { "lavenderblush3", 205, 193, 197 }, + { "lavenderblush4", 139, 131, 134 }, + { "lawnGreen", 124, 252, 0 }, + { "lemonChiffon", 255, 250, 205 }, + { "lemonchiffon1", 255, 250, 205 }, + { "lemonchiffon2", 238, 233, 191 }, + { "lemonchiffon3", 205, 201, 165 }, + { "lemonchiffon4", 139, 137, 112 }, + { "lightBlue", 173, 216, 230 }, + { "lightblue1", 191, 239, 255 }, + { "lightblue2", 178, 223, 238 }, + { "lightblue3", 154, 192, 205 }, + { "lightblue4", 104, 131, 139 }, + { "lightCoral", 240, 128, 128 }, + { "lightCyan", 224, 255, 255 }, + { "lightcyan1", 224, 255, 255 }, + { "lightcyan2", 209, 238, 238 }, + { "lightcyan3", 180, 205, 205 }, + { "lightcyan4", 122, 139, 139 }, + { "lightGoldenrod", 238, 221, 130 }, + { "lightgoldenrod1", 255, 236, 139 }, + { "lightgoldenrod2", 238, 220, 130 }, + { "lightgoldenrod3", 205, 190, 112 }, + { "lightgoldenrod4", 139, 129, 76 }, + { "lightGoldenrodYellow", 250, 250, 210 }, + { "lightGray", 211, 211, 211 }, + { "lightGreen", 144, 238, 144 }, + { "lightGrey", 211, 211, 211 }, + { "lightPink", 255, 182, 193 }, + { "lightpink1", 255, 174, 185 }, + { "lightpink2", 238, 162, 173 }, + { "lightpink3", 205, 140, 149 }, + { "lightpink4", 139, 95, 101 }, + { "lightSalmon", 255, 160, 122 }, + { "lightsalmon1", 255, 160, 122 }, + { "lightsalmon2", 238, 149, 114 }, + { "lightsalmon3", 205, 129, 98 }, + { "lightsalmon4", 139, 87, 66 }, + { "lightSeaGreen", 32, 178, 170 }, + { "lightSkyBlue", 135, 206, 250 }, + { "lightskyblue1", 176, 226, 255 }, + { "lightskyblue2", 164, 211, 238 }, + { "lightskyblue3", 141, 182, 205 }, + { "lightskyblue4", 96, 123, 139 }, + { "lightSlateBlue", 132, 112, 255 }, + { "lightSlateGray", 119, 136, 153 }, + { "lightSlateGrey", 119, 136, 153 }, + { "lightSteelBlue", 176, 196, 222 }, + { "lightsteelblue1", 202, 225, 255 }, + { "lightsteelblue2", 188, 210, 238 }, + { "lightsteelblue3", 162, 181, 205 }, + { "lightsteelblue4", 110, 123, 139 }, + { "lightYellow", 255, 255, 224 }, + { "lightyellow1", 255, 255, 224 }, + { "lightyellow2", 238, 238, 209 }, + { "lightyellow3", 205, 205, 180 }, + { "lightyellow4", 139, 139, 122 }, + { "limeGreen", 50, 205, 50 }, { "linen", 250, 240, 230 }, { "magenta", 255, 0, 255 }, { "magenta1", 255, 0, 255 }, @@ -546,104 +483,81 @@ static const XColorEntry xColors[] = { { "maroon2", 238, 48, 167 }, { "maroon3", 205, 41, 144 }, { "maroon4", 139, 28, 98 }, - { "medium aquamarine", 102, 205, 170 }, - { "medium blue", 0, 0, 205 }, - { "medium orchid", 186, 85, 211 }, - { "medium purple", 147, 112, 219 }, - { "medium sea green", 60, 179, 113 }, - { "medium slate blue", 123, 104, 238 }, - { "medium spring green", 0, 250, 154 }, - { "medium turquoise", 72, 209, 204 }, - { "medium violet red", 199, 21, 133 }, - { "MediumAquamarine", 102, 205, 170 }, - { "MediumBlue", 0, 0, 205 }, - { "MediumOrchid", 186, 85, 211 }, - { "MediumOrchid1", 224, 102, 255 }, - { "MediumOrchid2", 209, 95, 238 }, - { "MediumOrchid3", 180, 82, 205 }, - { "MediumOrchid4", 122, 55, 139 }, - { "MediumPurple", 147, 112, 219 }, - { "MediumPurple1", 171, 130, 255 }, - { "MediumPurple2", 159, 121, 238 }, - { "MediumPurple3", 137, 104, 205 }, - { "MediumPurple4", 93, 71, 139 }, - { "MediumSeaGreen", 60, 179, 113 }, - { "MediumSlateBlue", 123, 104, 238 }, - { "MediumSpringGreen", 0, 250, 154 }, - { "MediumTurquoise", 72, 209, 204 }, - { "MediumVioletRed", 199, 21, 133 }, - { "midnight blue", 25, 25, 112 }, - { "MidnightBlue", 25, 25, 112 }, - { "mint cream", 245, 255, 250 }, - { "MintCream", 245, 255, 250 }, - { "misty rose", 255, 228, 225 }, - { "MistyRose", 255, 228, 225 }, - { "MistyRose1", 255, 228, 225 }, - { "MistyRose2", 238, 213, 210 }, - { "MistyRose3", 205, 183, 181 }, - { "MistyRose4", 139, 125, 123 }, + { "mediumAquamarine", 102, 205, 170 }, + { "mediumBlue", 0, 0, 205 }, + { "mediumOrchid", 186, 85, 211 }, + { "mediumorchid1", 224, 102, 255 }, + { "mediumorchid2", 209, 95, 238 }, + { "mediumorchid3", 180, 82, 205 }, + { "mediumorchid4", 122, 55, 139 }, + { "mediumPurple", 147, 112, 219 }, + { "mediumpurple1", 171, 130, 255 }, + { "mediumpurple2", 159, 121, 238 }, + { "mediumpurple3", 137, 104, 205 }, + { "mediumpurple4", 93, 71, 139 }, + { "mediumSeaGreen", 60, 179, 113 }, + { "mediumSlateBlue", 123, 104, 238 }, + { "mediumSpringGreen", 0, 250, 154 }, + { "mediumTurquoise", 72, 209, 204 }, + { "mediumVioletRed", 199, 21, 133 }, + { "midnightBlue", 25, 25, 112 }, + { "mintCream", 245, 255, 250 }, + { "mistyRose", 255, 228, 225 }, + { "mistyrose1", 255, 228, 225 }, + { "mistyrose2", 238, 213, 210 }, + { "mistyrose3", 205, 183, 181 }, + { "mistyrose4", 139, 125, 123 }, { "moccasin", 255, 228, 181 }, - { "navajo white", 255, 222, 173 }, - { "NavajoWhite", 255, 222, 173 }, - { "NavajoWhite1", 255, 222, 173 }, - { "NavajoWhite2", 238, 207, 161 }, - { "NavajoWhite3", 205, 179, 139 }, - { "NavajoWhite4", 139, 121, 94 }, + { "navajoWhite", 255, 222, 173 }, + { "navajowhite1", 255, 222, 173 }, + { "navajowhite2", 238, 207, 161 }, + { "navajowhite3", 205, 179, 139 }, + { "navajowhite4", 139, 121, 94 }, { "navy", 0, 0, 128 }, - { "navy blue", 0, 0, 128 }, - { "NavyBlue", 0, 0, 128 }, - { "old lace", 253, 245, 230 }, - { "OldLace", 253, 245, 230 }, - { "olive drab", 107, 142, 35 }, - { "OliveDrab", 107, 142, 35 }, - { "OliveDrab1", 192, 255, 62 }, - { "OliveDrab2", 179, 238, 58 }, - { "OliveDrab3", 154, 205, 50 }, - { "OliveDrab4", 105, 139, 34 }, + { "navyBlue", 0, 0, 128 }, + { "oldLace", 253, 245, 230 }, + { "oliveDrab", 107, 142, 35 }, + { "olivedrab1", 192, 255, 62 }, + { "olivedrab2", 179, 238, 58 }, + { "olivedrab3", 154, 205, 50 }, + { "olivedrab4", 105, 139, 34 }, { "orange", 255, 165, 0 }, - { "orange red", 255, 69, 0 }, { "orange1", 255, 165, 0 }, { "orange2", 238, 154, 0 }, { "orange3", 205, 133, 0 }, { "orange4", 139, 90, 0 }, - { "OrangeRed", 255, 69, 0 }, - { "OrangeRed1", 255, 69, 0 }, - { "OrangeRed2", 238, 64, 0 }, - { "OrangeRed3", 205, 55, 0 }, - { "OrangeRed4", 139, 37, 0 }, + { "orangeRed", 255, 69, 0 }, + { "orangered1", 255, 69, 0 }, + { "orangered2", 238, 64, 0 }, + { "orangered3", 205, 55, 0 }, + { "orangered4", 139, 37, 0 }, { "orchid", 218, 112, 214 }, { "orchid1", 255, 131, 250 }, { "orchid2", 238, 122, 233 }, { "orchid3", 205, 105, 201 }, { "orchid4", 139, 71, 137 }, - { "pale goldenrod", 238, 232, 170 }, - { "pale green", 152, 251, 152 }, - { "pale turquoise", 175, 238, 238 }, - { "pale violet red", 219, 112, 147 }, - { "PaleGoldenrod", 238, 232, 170 }, - { "PaleGreen", 152, 251, 152 }, - { "PaleGreen1", 154, 255, 154 }, - { "PaleGreen2", 144, 238, 144 }, - { "PaleGreen3", 124, 205, 124 }, - { "PaleGreen4", 84, 139, 84 }, - { "PaleTurquoise", 175, 238, 238 }, - { "PaleTurquoise1", 187, 255, 255 }, - { "PaleTurquoise2", 174, 238, 238 }, - { "PaleTurquoise3", 150, 205, 205 }, - { "PaleTurquoise4", 102, 139, 139 }, - { "PaleVioletRed", 219, 112, 147 }, - { "PaleVioletRed1", 255, 130, 171 }, - { "PaleVioletRed2", 238, 121, 159 }, - { "PaleVioletRed3", 205, 104, 137 }, - { "PaleVioletRed4", 139, 71, 93 }, - { "papaya whip", 255, 239, 213 }, - { "PapayaWhip", 255, 239, 213 }, - { "peach puff", 255, 218, 185 }, - { "PeachPuff", 255, 218, 185 }, - { "PeachPuff1", 255, 218, 185 }, - { "PeachPuff2", 238, 203, 173 }, - { "PeachPuff3", 205, 175, 149 }, - { "PeachPuff4", 139, 119, 101 }, + { "paleGoldenrod", 238, 232, 170 }, + { "paleGreen", 152, 251, 152 }, + { "palegreen1", 154, 255, 154 }, + { "palegreen2", 144, 238, 144 }, + { "palegreen3", 124, 205, 124 }, + { "palegreen4", 84, 139, 84 }, + { "paleTurquoise", 175, 238, 238 }, + { "paleturquoise1", 187, 255, 255 }, + { "paleturquoise2", 174, 238, 238 }, + { "paleturquoise3", 150, 205, 205 }, + { "paleturquoise4", 102, 139, 139 }, + { "paleVioletRed", 219, 112, 147 }, + { "palevioletred1", 255, 130, 171 }, + { "palevioletred2", 238, 121, 159 }, + { "palevioletred3", 205, 104, 137 }, + { "palevioletred4", 139, 71, 93 }, + { "papayaWhip", 255, 239, 213 }, + { "peachPuff", 255, 218, 185 }, + { "peachpuff1", 255, 218, 185 }, + { "peachpuff2", 238, 203, 173 }, + { "peachpuff3", 205, 175, 149 }, + { "peachpuff4", 139, 119, 101 }, { "peru", 205, 133, 63 }, { "pink", 255, 192, 203 }, { "pink1", 255, 181, 197 }, @@ -655,8 +569,7 @@ static const XColorEntry xColors[] = { { "plum2", 238, 174, 238 }, { "plum3", 205, 150, 205 }, { "plum4", 139, 102, 139 }, - { "powder blue", 176, 224, 230 }, - { "PowderBlue", 176, 224, 230 }, + { "powderBlue", 176, 224, 230 }, { "purple", 160, 32, 240 }, { "purple1", 155, 48, 255 }, { "purple2", 145, 44, 238 }, @@ -667,33 +580,28 @@ static const XColorEntry xColors[] = { { "red2", 238, 0, 0 }, { "red3", 205, 0, 0 }, { "red4", 139, 0, 0 }, - { "rosy brown", 188, 143, 143 }, - { "RosyBrown", 188, 143, 143 }, - { "RosyBrown1", 255, 193, 193 }, - { "RosyBrown2", 238, 180, 180 }, - { "RosyBrown3", 205, 155, 155 }, - { "RosyBrown4", 139, 105, 105 }, - { "royal blue", 65, 105, 225 }, - { "RoyalBlue", 65, 105, 225 }, - { "RoyalBlue1", 72, 118, 255 }, - { "RoyalBlue2", 67, 110, 238 }, - { "RoyalBlue3", 58, 95, 205 }, - { "RoyalBlue4", 39, 64, 139 }, - { "saddle brown", 139, 69, 19 }, - { "SaddleBrown", 139, 69, 19 }, + { "rosyBrown", 188, 143, 143 }, + { "rosybrown1", 255, 193, 193 }, + { "rosybrown2", 238, 180, 180 }, + { "rosybrown3", 205, 155, 155 }, + { "rosybrown4", 139, 105, 105 }, + { "royalBlue", 65, 105, 225 }, + { "royalblue1", 72, 118, 255 }, + { "royalblue2", 67, 110, 238 }, + { "royalblue3", 58, 95, 205 }, + { "royalblue4", 39, 64, 139 }, + { "saddleBrown", 139, 69, 19 }, { "salmon", 250, 128, 114 }, { "salmon1", 255, 140, 105 }, { "salmon2", 238, 130, 98 }, { "salmon3", 205, 112, 84 }, { "salmon4", 139, 76, 57 }, - { "sandy brown", 244, 164, 96 }, - { "SandyBrown", 244, 164, 96 }, - { "sea green", 46, 139, 87 }, - { "SeaGreen", 46, 139, 87 }, - { "SeaGreen1", 84, 255, 159 }, - { "SeaGreen2", 78, 238, 148 }, - { "SeaGreen3", 67, 205, 128 }, - { "SeaGreen4", 46, 139, 87 }, + { "sandyBrown", 244, 164, 96 }, + { "seaGreen", 46, 139, 87 }, + { "seagreen1", 84, 255, 159 }, + { "seagreen2", 78, 238, 148 }, + { "seagreen3", 67, 205, 128 }, + { "seagreen4", 46, 139, 87 }, { "seashell", 255, 245, 238 }, { "seashell1", 255, 245, 238 }, { "seashell2", 238, 229, 222 }, @@ -704,43 +612,37 @@ static const XColorEntry xColors[] = { { "sienna2", 238, 121, 66 }, { "sienna3", 205, 104, 57 }, { "sienna4", 139, 71, 38 }, - { "sky blue", 135, 206, 235 }, - { "SkyBlue", 135, 206, 235 }, - { "SkyBlue1", 135, 206, 255 }, - { "SkyBlue2", 126, 192, 238 }, - { "SkyBlue3", 108, 166, 205 }, - { "SkyBlue4", 74, 112, 139 }, - { "slate blue", 106, 90, 205 }, - { "slate gray", 112, 128, 144 }, - { "slate grey", 112, 128, 144 }, - { "SlateBlue", 106, 90, 205 }, - { "SlateBlue1", 131, 111, 255 }, - { "SlateBlue2", 122, 103, 238 }, - { "SlateBlue3", 105, 89, 205 }, - { "SlateBlue4", 71, 60, 139 }, - { "SlateGray", 112, 128, 144 }, - { "SlateGray1", 198, 226, 255 }, - { "SlateGray2", 185, 211, 238 }, - { "SlateGray3", 159, 182, 205 }, - { "SlateGray4", 108, 123, 139 }, - { "SlateGrey", 112, 128, 144 }, + { "skyBlue", 135, 206, 235 }, + { "skyblue1", 135, 206, 255 }, + { "skyblue2", 126, 192, 238 }, + { "skyblue3", 108, 166, 205 }, + { "skyblue4", 74, 112, 139 }, + { "slateBlue", 106, 90, 205 }, + { "slateblue1", 131, 111, 255 }, + { "slateblue2", 122, 103, 238 }, + { "slateblue3", 105, 89, 205 }, + { "slateblue4", 71, 60, 139 }, + { "slateGray", 112, 128, 144 }, + { "slategray1", 198, 226, 255 }, + { "slategray2", 185, 211, 238 }, + { "slategray3", 159, 182, 205 }, + { "slategray4", 108, 123, 139 }, + { "slateGrey", 112, 128, 144 }, { "snow", 255, 250, 250 }, { "snow1", 255, 250, 250 }, { "snow2", 238, 233, 233 }, { "snow3", 205, 201, 201 }, { "snow4", 139, 137, 137 }, - { "spring green", 0, 255, 127 }, - { "SpringGreen", 0, 255, 127 }, - { "SpringGreen1", 0, 255, 127 }, - { "SpringGreen2", 0, 238, 118 }, - { "SpringGreen3", 0, 205, 102 }, - { "SpringGreen4", 0, 139, 69 }, - { "steel blue", 70, 130, 180 }, - { "SteelBlue", 70, 130, 180 }, - { "SteelBlue1", 99, 184, 255 }, - { "SteelBlue2", 92, 172, 238 }, - { "SteelBlue3", 79, 148, 205 }, - { "SteelBlue4", 54, 100, 139 }, + { "springGreen", 0, 255, 127 }, + { "springgreen1", 0, 255, 127 }, + { "springgreen2", 0, 238, 118 }, + { "springgreen3", 0, 205, 102 }, + { "springgreen4", 0, 139, 69 }, + { "steelBlue", 70, 130, 180 }, + { "steelblue1", 99, 184, 255 }, + { "steelblue2", 92, 172, 238 }, + { "steelblue3", 79, 148, 205 }, + { "steelblue4", 54, 100, 139 }, { "tan", 210, 180, 140 }, { "tan1", 255, 165, 79 }, { "tan2", 238, 154, 73 }, @@ -762,83 +664,29 @@ static const XColorEntry xColors[] = { { "turquoise3", 0, 197, 205 }, { "turquoise4", 0, 134, 139 }, { "violet", 238, 130, 238 }, - { "violet red", 208, 32, 144 }, - { "VioletRed", 208, 32, 144 }, - { "VioletRed1", 255, 62, 150 }, - { "VioletRed2", 238, 58, 140 }, - { "VioletRed3", 205, 50, 120 }, - { "VioletRed4", 139, 34, 82 }, + { "violetRed", 208, 32, 144 }, + { "violetred1", 255, 62, 150 }, + { "violetred2", 238, 58, 140 }, + { "violetred3", 205, 50, 120 }, + { "violetred4", 139, 34, 82 }, { "wheat", 245, 222, 179 }, { "wheat1", 255, 231, 186 }, { "wheat2", 238, 216, 174 }, { "wheat3", 205, 186, 150 }, { "wheat4", 139, 126, 102 }, { "white", 255, 255, 255 }, - { "white smoke", 245, 245, 245 }, - { "WhiteSmoke", 245, 245, 245 }, + { "whiteSmoke", 245, 245, 245 }, { "yellow", 255, 255, 0 }, - { "yellow green", 154, 205, 50 }, { "yellow1", 255, 255, 0 }, { "yellow2", 238, 238, 0 }, { "yellow3", 205, 205, 0 }, { "yellow4", 139, 139, 0 }, - { "YellowGreen", 154, 205, 50 }, + { "yellowGreen", 154, 205, 50 } }; /* *---------------------------------------------------------------------- * - * FindColor -- - * - * This routine finds the color entry that corresponds to the specified - * color. - * - * Results: - * Returns non-zero on success. The RGB values of the XColor will be - * initialized to the proper values on success. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -static int -FindColor( - const char *name, - XColor *colorPtr) -{ - int l, u, r, i = 0; - - /* - * Perform a binary search on the sorted array of colors. - */ - - l = 0; - u = sizeof(xColors)/sizeof(xColors[0]) - 1; - while (l <= u) { - i = (l + u) / 2; - r = strcasecmp(name, xColors[i].name); - if (r == 0) { - break; - } else if (r < 0) { - u = i-1; - } else { - l = i+1; - } - } - if (l > u) { - return 0; - } - colorPtr->red = ((xColors[i].red << 8) | xColors[i].red); - colorPtr->green = ((xColors[i].green << 8) | xColors[i].green); - colorPtr->blue = ((xColors[i].blue << 8) | xColors[i].blue); - return 1; -} - -/* - *---------------------------------------------------------------------- - * * XParseColor -- * * Partial implementation of X color name parsing interface. @@ -881,6 +729,26 @@ _strtoi64(const char *spec, char **p, int base) # define _strtoi64 strtoll #endif +static int colorcmp(const char *spec, const char *pname) { + int r; + int c, d; + do { + d = *pname++; + if ((d >= 'A') && (d <= 'Z')) { + d += 'a' - 'A'; + if (*spec == ' ') { + spec++; + } + } + c = *spec++; + if ((c >= 'A') && (c <= 'Z')) { + c += 'a' - 'A'; + } + r = c - d; + } while(!r && c); + return r; +} + Status XParseColor( Display *display, @@ -917,9 +785,32 @@ XParseColor( return 0; } } else { - if (!FindColor(spec, colorPtr)) { - return 0; + /* + * Perform a binary search on the sorted array of colors. + * size = current size of search range + * p = pointer to current element being considered. + */ + int size = sizeof(xColors)/sizeof(xColors[0]); + const XColorEntry *p = &xColors[size >> 1]; + int r = colorcmp(spec, p->name); + + while (r != 0) { + if (r < 0) { + size = (size >> 1); + p -= ((size + 1) >> 1); + } else { + --size; + size = (size >> 1); + p += ((size + 2) >> 1); + } + if (!size) { + return 0; + } + r = colorcmp(spec, p->name); } + colorPtr->red = ((p->red << 8) | p->red); + colorPtr->green = ((p->green << 8) | p->green); + colorPtr->blue = ((p->blue << 8) | p->blue); } colorPtr->pixel = TkpGetPixel(colorPtr); colorPtr->flags = DoRed|DoGreen|DoBlue; -- cgit v0.12 From 351670ca0e9f135b473dce52ff9e1ae76d55f787 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 13 Mar 2012 15:05:36 +0000 Subject: make sure that "burly wood" is not a valid color --- xlib/xcolors.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index e0e7f6e..cc5ad69 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -732,13 +732,20 @@ _strtoi64(const char *spec, char **p, int base) static int colorcmp(const char *spec, const char *pname) { int r; int c, d; + int notequal = 0; do { d = *pname++; + c = (*spec == ' '); + if (c) { + spec++; + } if ((d >= 'A') && (d <= 'Z')) { d += 'a' - 'A'; - if (*spec == ' ') { - spec++; - } + } else if (c) { + /* A space doesn't match a lowercase, but we don't know + * yet whether we should return a negative or positive + * number. That depends on what follows. */ + notequal = 1; } c = *spec++; if ((c >= 'A') && (c <= 'Z')) { @@ -746,6 +753,11 @@ static int colorcmp(const char *spec, const char *pname) { } r = c - d; } while(!r && c); + if (!r && notequal) { + /* Strings are equal, but difference in spacings only. We should still + * report not-equal, so "burly wood" is not a valid color */ + r = 1; + } return r; } -- cgit v0.12 From 995953339ac39e45eb6f5fa4dce37a6f0d5e3bf6 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 15 Mar 2012 20:45:42 +0000 Subject: workaround for _strtoi64 determination on win64 (autoconf-2.13 issue) --- win/configure | 22 ++++++++++++---------- win/configure.in | 2 ++ xlib/xcolors.c | 2 -- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/win/configure b/win/configure index 2dc6186..31fe393 100755 --- a/win/configure +++ b/win/configure @@ -1752,21 +1752,22 @@ fi # Check for _strtoi64 #------------------------------------------- +if test "${MACHINE}" = "X86" ; then echo $ac_n "checking availability of _strtoi64""... $ac_c" 1>&6 -echo "configure:1757: checking availability of _strtoi64" >&5 +echo "configure:1758: checking availability of _strtoi64" >&5 if eval "test \"`echo '$''{'tcl_have_strtoi64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { _strtoi64(0,0,0) ; return 0; } EOF -if { (eval echo configure:1770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* tcl_have_strtoi64=yes else @@ -1785,6 +1786,7 @@ if test $tcl_have_strtoi64 = no; then EOF fi +fi #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols @@ -1794,7 +1796,7 @@ fi echo $ac_n "checking for build with symbols""... $ac_c" 1>&6 -echo "configure:1798: checking for build with symbols" >&5 +echo "configure:1800: checking for build with symbols" >&5 # Check whether --enable-symbols or --disable-symbols was given. if test "${enable_symbols+set}" = set; then enableval="$enable_symbols" @@ -1855,7 +1857,7 @@ TK_DBGX=${DBGX} echo $ac_n "checking whether to embed manifest""... $ac_c" 1>&6 -echo "configure:1859: checking whether to embed manifest" >&5 +echo "configure:1861: checking whether to embed manifest" >&5 # Check whether --enable-embedded-manifest or --disable-embedded-manifest was given. if test "${enable_embedded_manifest+set}" = set; then enableval="$enable_embedded_manifest" @@ -1872,7 +1874,7 @@ fi -a "$GCC" != "yes" ; then # Add the magic to embed the manifest into the dll/exe cat > conftest.$ac_ext <= 1400 @@ -1909,7 +1911,7 @@ rm -f conftest* echo $ac_n "checking the location of tclConfig.sh""... $ac_c" 1>&6 -echo "configure:1913: checking the location of tclConfig.sh" >&5 +echo "configure:1915: checking the location of tclConfig.sh" >&5 if test -d ../../tcl8.4$TK_PATCH_LEVEL/win; then TCL_BIN_DIR_DEFAULT=../../tcl8.4$TK_PATCH_LEVEL/win @@ -1937,7 +1939,7 @@ fi echo $ac_n "checking for existence of $TCL_BIN_DIR/tclConfig.sh""... $ac_c" 1>&6 -echo "configure:1941: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 +echo "configure:1943: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then echo "$ac_t""loading" 1>&6 @@ -1990,14 +1992,14 @@ echo "configure:1941: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 echo $ac_n "checking for tclsh in Tcl build directory""... $ac_c" 1>&6 -echo "configure:1994: checking for tclsh in Tcl build directory" >&5 +echo "configure:1996: checking for tclsh in Tcl build directory" >&5 BUILD_TCLSH=${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT} echo "$ac_t""$BUILD_TCLSH" 1>&6 echo $ac_n "checking for tclsh""... $ac_c" 1>&6 -echo "configure:2001: checking for tclsh" >&5 +echo "configure:2003: checking for tclsh" >&5 if eval "test \"`echo '$''{'ac_cv_path_tclsh'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 diff --git a/win/configure.in b/win/configure.in index f6f71ca..ffad2c0 100644 --- a/win/configure.in +++ b/win/configure.in @@ -114,6 +114,7 @@ AC_SUBST(MAN2TCLFLAGS) # Check for _strtoi64 #------------------------------------------- +if test "${MACHINE}" = "X86" ; then AC_CACHE_CHECK([availability of _strtoi64], tcl_have_strtoi64, [ AC_TRY_LINK([#include ], [_strtoi64(0,0,0)], @@ -121,6 +122,7 @@ AC_CACHE_CHECK([availability of _strtoi64], tcl_have_strtoi64, [ if test $tcl_have_strtoi64 = no; then AC_DEFINE(NO_STRTOI64, 1, [Is _strtoi64 function available?]) fi +fi #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 224d38e..3a48faa 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -11,7 +11,6 @@ */ #include "tkInt.h" -#include /* * Forward declarations for functions used only in this file. @@ -855,7 +854,6 @@ FindColor( #ifdef __WIN32__ # ifdef NO_STRTOI64 /* This version only handles hex-strings without 0x prefix */ -#define _strtoi64 something_out_of_the_way /* workaround for win64 problem ??? */ static __int64 _strtoi64(const char *spec, char **p, int base) { -- cgit v0.12 From b367046865af35de744bab180f0fcc3399ff816d Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 17 Mar 2012 00:18:41 +0000 Subject: implementation complete, todo: more testing --- xlib/xcolors.c | 58 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 399c1c4..65f61ae 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -281,17 +281,18 @@ _strtoi64(const char *spec, char **p, int base) # define _strtoi64 strtoll #endif -static int colorcmp(const char *spec, const char *pname) { +static int colorcmp(const char *spec, const char *pname, int *special) { int r; int c, d; int notequal = 0; + int num = 0; do { d = *pname++; c = (*spec == ' '); if (c) { spec++; } - if ((d >= 'A') && (d <= 'Z')) { + if ((unsigned)(d - 'A') <= (unsigned)('Z' - 'A')) { d += 'a' - 'A'; } else if (c) { /* A space doesn't match a lowercase, but we don't know @@ -300,22 +301,32 @@ static int colorcmp(const char *spec, const char *pname) { notequal = 1; } c = *spec++; - if ((c >= 'A') && (c <= 'Z')) { + if ((unsigned)(c - 'A') <= (unsigned)('Z' - 'A')) { c += 'a' - 'A'; + } else if (((unsigned)(c - '1') <= (unsigned)('9' - '1'))) { + if (d == '0') { + d += 10; + } else if (!d) { + num = c - '0'; + while ((unsigned)((c = *spec++) - '0') <= (unsigned)('9' - '0')) { + num = num * 10 + c - '0'; + } + } } r = c - d; - } while(!r && c); + } while(!r && d); if (!r && notequal) { /* Strings are equal, but difference in spacings only. We should still * report not-equal, so "burly wood" is not a valid color */ r = 1; } + *special = num; return r; } -#define RED(p) ((unsigned char)(p)[28]) -#define GREEN(p) ((unsigned char)(p)[29]) -#define BLUE(p) ((unsigned char)(p)[30]) +#define RED(p) ((unsigned char)(p)[0]) +#define GREEN(p) ((unsigned char)(p)[1]) +#define BLUE(p) ((unsigned char)(p)[2]) Status XParseColor( @@ -353,8 +364,9 @@ XParseColor( return 0; } } else { - int size; + int size, num; const elem *p; + const char *q; /* * Perform a binary search on the sorted array of colors. * size = current size of search range @@ -366,7 +378,7 @@ XParseColor( } size = az[r + 1] - az[r]; p = &xColors[(az[r + 1] + az[r]) >> 1]; - r = colorcmp(spec + 1, *p); + r = colorcmp(spec + 1, *p, &num); while (r != 0) { if (r < 0) { @@ -380,11 +392,18 @@ XParseColor( if (!size) { return 0; } - r = colorcmp(spec + 1, *p); + r = colorcmp(spec + 1, *p, &num); + } + if (num > (*p)[31]) { + if (((*p)[31] != 8) || num > 100) + return 0; + q = graymap + 300 - num * 3; + } else { + q = *p + 28 - num * 3; } - colorPtr->red = ((RED(*p) << 8) | RED(*p)); - colorPtr->green = ((GREEN(*p) << 8) | GREEN(*p)); - colorPtr->blue = ((BLUE(*p) << 8) | BLUE(*p)); + colorPtr->red = ((RED(q) << 8) | RED(q)); + colorPtr->green = ((GREEN(q) << 8) | GREEN(q)); + colorPtr->blue = ((BLUE(q) << 8) | BLUE(q)); } colorPtr->pixel = TkpGetPixel(colorPtr); colorPtr->flags = DoRed|DoGreen|DoBlue; @@ -400,6 +419,8 @@ int main() { int charindex; int i, result; int repeat = 1; + int num, maxnum; + char *end; while (repeat--) { buf[0] = 'a'; @@ -410,11 +431,20 @@ int main() { ++(buf[0]); } strcpy(buf + 1, xColors[i]); + end = buf + strlen(buf); + num = 0; result = XParseColor(0, 0, buf, &color); + printf("%s %d %d %d\n", buf, color.red >> 8, color.green >> 8, color.blue >> 8); + maxnum = xColors[i][31]; + if (maxnum == 8) maxnum = 100; + while (result && ++num <= maxnum) { + sprintf(end, "%d", num); + result = XParseColor(0, 0, buf, &color); + printf("%s %d %d %d\n", buf, color.red >> 8, color.green >> 8, color.blue >> 8); + } if (!result) { break; } - printf("color %d: %s %d %d %d %d\n", i, buf, result, color.red >> 8, color.green >> 8, color.blue >> 8); } } if (!result) { -- cgit v0.12 From 70b257fa25b849bcc319365a2757cc430f40f2c8 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 17 Mar 2012 00:33:15 +0000 Subject: elimination of gray table by using calculations in stead --- xlib/xcolors.c | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 65f61ae..572f092 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -14,28 +14,6 @@ #include "tkInt.h" /* - * Special array for the colors gray9-gray100 (and grey9-grey100, which are - * identical). (TODO: to be removed, because the values can be calculated) - */ - -static const char graymap[] = "\377\377\377\374\374\374\372\372\372\367\367\367" - "\365\365\365\362\362\362\360\360\360\355\355\355\353\353\353\350\350\350" - "\345\345\345\343\343\343\340\340\340\336\336\336\333\333\333\331\331\331" - "\326\326\326\324\324\324\321\321\321\317\317\317\314\314\314\311\311\311" - "\307\307\307\304\304\304\302\302\302\277\277\277\275\275\275\272\272\272" - "\270\270\270\265\265\265\263\263\263\260\260\260\255\255\255\253\253\253" - "\250\250\250\246\246\246\243\243\243\241\241\241\236\236\236\234\234\234" - "\231\231\231\226\226\226\224\224\224\221\221\221\217\217\217\214\214\214" - "\212\212\212\207\207\207\205\205\205\202\202\202\177\177\177\175\175\175" - "\172\172\172\170\170\170\165\165\165\163\163\163\160\160\160\156\156\156" - "\153\153\153\151\151\151\146\146\146\143\143\143\141\141\141\136\136\136" - "\134\134\134\131\131\131\127\127\127\124\124\124\122\122\122\117\117\117" - "\115\115\115\112\112\112\107\107\107\105\105\105\102\102\102\100\100\100" - "\075\075\075\073\073\073\070\070\070\066\066\066\063\063\063\060\060\060" - "\056\056\056\053\053\053\051\051\051\046\046\046\044\044\044\041\041\041" - "\037\037\037\034\034\034\032\032\032\027\027\027"; - -/* * Index array. For each of the characters 'a'-'y', this table gives the first color * starting with that character in the xColors table. */ @@ -397,13 +375,19 @@ XParseColor( if (num > (*p)[31]) { if (((*p)[31] != 8) || num > 100) return 0; - q = graymap + 300 - num * 3; + num = (num * 255 + 50) / 100; + if ((num == 230) || (num == 128)) { + /* Those two entries have a deviation i.r.t the table */ + num--; + } + num |= (num << 8); + colorPtr->red = colorPtr->green = colorPtr->blue = num; } else { q = *p + 28 - num * 3; + colorPtr->red = ((RED(q) << 8) | RED(q)); + colorPtr->green = ((GREEN(q) << 8) | GREEN(q)); + colorPtr->blue = ((BLUE(q) << 8) | BLUE(q)); } - colorPtr->red = ((RED(q) << 8) | RED(q)); - colorPtr->green = ((GREEN(q) << 8) | GREEN(q)); - colorPtr->blue = ((BLUE(q) << 8) | BLUE(q)); } colorPtr->pixel = TkpGetPixel(colorPtr); colorPtr->flags = DoRed|DoGreen|DoBlue; -- cgit v0.12 From 3dcd8fde2d4e9a6bc85ac198433cc06952332c5f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sun, 18 Mar 2012 16:45:53 +0000 Subject: test output in Xorg rgb.txt format --- xlib/xcolors.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 572f092..7a83146 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -418,13 +418,13 @@ int main() { end = buf + strlen(buf); num = 0; result = XParseColor(0, 0, buf, &color); - printf("%s %d %d %d\n", buf, color.red >> 8, color.green >> 8, color.blue >> 8); + printf("%3d %3d %3d\t\t%s\n", color.red >> 8, color.green >> 8, color.blue >> 8, buf); maxnum = xColors[i][31]; if (maxnum == 8) maxnum = 100; while (result && ++num <= maxnum) { sprintf(end, "%d", num); result = XParseColor(0, 0, buf, &color); - printf("%s %d %d %d\n", buf, color.red >> 8, color.green >> 8, color.blue >> 8); + printf("%3d %3d %3d\t\t%s\n", color.red >> 8, color.green >> 8, color.blue >> 8, buf); } if (!result) { break; -- cgit v0.12