1#! /bin/sh --
2eval '(exit $?0)' && eval 'PERL_BADLANG=x;export PERL_BADLANG;: \
3;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;
4eval 'setenv PERL_BADLANG x;exec perl -x -S -- "$0" $argv:q;#'.q
5#!perl -w
6+($0=~/(.*)/s);do$1;die$@if$@;__END__+if 0;
7# Don't touch/remove lines 1--7: http://www.inf.bme.hu/~pts/Magic.Perl.Header
8
9#
10# cols2.pl -- create a read-only C hash table from hash function
11# by pts@fazekas.hu at Fri Mar  1 09:24:46 CET 2002
12# minor VC6.0 updates at Thu Dec 12 19:01:06 CET 2002
13#
14BEGIN{$^W=1}
15BEGIN { eval { require integer; import integer } }
16BEGIN { eval { require strict ; import strict  } }
17
18my @L=( # imagemagick's ColorList.h
19    [ "None", 3, 2, 1 ],
20    [ "AliceBlue", 240, 248, 255 ],
21    [ "AntiqueWhite", 250, 235, 215 ],
22    [ "Aquamarine", 50, 191, 193 ],
23    [ "Azure", 240, 255, 255 ],
24    [ "Beige", 245, 245, 220 ],
25    [ "Bisque", 255, 228, 196 ],
26    [ "Black", 0, 0, 0 ],
27    [ "BlanchedAlmond", 255, 235, 205 ],
28    [ "Blue", 0, 0, 255 ],
29    [ "BlueViolet", 138, 43, 226 ],
30    [ "Brown", 165, 42, 42 ],
31    [ "burlywood", 222, 184, 135 ],
32    [ "CadetBlue", 95, 146, 158 ],
33    [ "chartreuse", 127, 255, 0 ],
34    [ "chocolate", 210, 105, 30 ],
35    [ "Coral", 255, 114, 86 ],
36    [ "CornflowerBlue", 34, 34, 152 ],
37    [ "cornsilk", 255, 248, 220 ],
38    [ "Cyan", 0, 255, 255 ],
39    [ "DarkGoldenrod", 184, 134, 11 ],
40    [ "DarkGreen", 0, 86, 45 ],
41    [ "DarkKhaki", 189, 183, 107 ],
42    [ "DarkOliveGreen", 85, 86, 47 ],
43    [ "DarkOrange", 255, 140, 0 ],
44    [ "DarkOrchid", 139, 32, 139 ],
45    [ "DarkSalmon", 233, 150, 122 ],
46    [ "DarkSeaGreen", 143, 188, 143 ],
47    [ "DarkSlateBlue", 56, 75, 102 ],
48    [ "DarkSlateGray", 47, 79, 79 ],
49    [ "DarkTurquoise", 0, 166, 166 ],
50    [ "DarkViolet", 148, 0, 211 ],
51    [ "DeepPink", 255, 20, 147 ],
52    [ "DeepSkyBlue", 0, 191, 255 ],
53    [ "DimGray", 84, 84, 84 ],
54    [ "DodgerBlue", 30, 144, 255 ],
55    [ "Firebrick", 142, 35, 35 ],
56    [ "FloralWhite", 255, 250, 240 ],
57    [ "ForestGreen", 80, 159, 105 ],
58    [ "gainsboro", 220, 220, 220 ],
59    [ "GhostWhite", 248, 248, 255 ],
60    [ "Gold", 218, 170, 0 ],
61    [ "Goldenrod", 239, 223, 132 ],
62    [ "Gray", 126, 126, 126 ],
63    [ "Green", 0, 255, 0 ],
64    [ "GreenYellow", 173, 255, 47 ],
65    [ "honeydew", 240, 255, 240 ],
66    [ "HotPink", 255, 105, 180 ],
67    [ "IndianRed", 107, 57, 57 ],
68    [ "ivory", 255, 255, 240 ],
69    [ "Khaki", 179, 179, 126 ],
70    [ "lavender", 230, 230, 250 ],
71    [ "LavenderBlush", 255, 240, 245 ],
72    [ "LawnGreen", 124, 252, 0 ],
73    [ "LemonChiffon", 255, 250, 205 ],
74    [ "LightBlue", 176, 226, 255 ],
75    [ "LightCoral", 240, 128, 128 ],
76    [ "LightCyan", 224, 255, 255 ],
77    [ "LightGoldenrod", 238, 221, 130 ],
78    [ "LightGoldenrodYellow", 250, 250, 210 ],
79    [ "LightGray", 168, 168, 168 ],
80    [ "LightPink", 255, 182, 193 ],
81    [ "LightSalmon", 255, 160, 122 ],
82    [ "LightSeaGreen", 32, 178, 170 ],
83    [ "LightSkyBlue", 135, 206, 250 ],
84    [ "LightSlateBlue", 132, 112, 255 ],
85    [ "LightSlateGray", 119, 136, 153 ],
86    [ "LightSteelBlue", 124, 152, 211 ],
87    [ "LightYellow", 255, 255, 224 ],
88    [ "LimeGreen", 0, 175, 20 ],
89    [ "linen", 250, 240, 230 ],
90    [ "Magenta", 255, 0, 255 ],
91    [ "Maroon", 143, 0, 82 ],
92    [ "MediumAquamarine", 0, 147, 143 ],
93    [ "MediumBlue", 50, 50, 204 ],
94    [ "MediumForestGreen", 50, 129, 75 ],
95    [ "MediumGoldenrod", 209, 193, 102 ],
96    [ "MediumOrchid", 189, 82, 189 ],
97    [ "MediumPurple", 147, 112, 219 ],
98    [ "MediumSeaGreen", 52, 119, 102 ],
99    [ "MediumSlateBlue", 106, 106, 141 ],
100    [ "MediumSpringGreen", 35, 142, 35 ],
101    [ "MediumTurquoise", 0, 210, 210 ],
102    [ "MediumVioletRed", 213, 32, 121 ],
103    [ "MidnightBlue", 47, 47, 100 ],
104    [ "MintCream", 245, 255, 250 ],
105    [ "MistyRose", 255, 228, 225 ],
106    [ "moccasin", 255, 228, 181 ],
107    [ "NavajoWhite", 255, 222, 173 ],
108    [ "Navy", 35, 35, 117 ],
109    [ "NavyBlue", 35, 35, 117 ],
110    [ "OldLace", 253, 245, 230 ],
111    [ "OliveDrab", 107, 142, 35 ],
112    [ "Orange", 255, 135, 0 ],
113    [ "OrangeRed", 255, 69, 0 ],
114    [ "Orchid", 239, 132, 239 ],
115    [ "PaleGoldenrod", 238, 232, 170 ],
116    [ "PaleGreen", 115, 222, 120 ],
117    [ "PaleTurquoise", 175, 238, 238 ],
118    [ "PaleVioletRed", 219, 112, 147 ],
119    [ "PapayaWhip", 255, 239, 213 ],
120    [ "PeachPuff", 255, 218, 185 ],
121    [ "peru", 205, 133, 63 ],
122    [ "Pink", 255, 181, 197 ],
123    [ "Plum", 197, 72, 155 ],
124    [ "PowderBlue", 176, 224, 230 ],
125    [ "purple", 160, 32, 240 ],
126    [ "Red", 255, 0, 0 ],
127    [ "RosyBrown", 188, 143, 143 ],
128    [ "RoyalBlue", 65, 105, 225 ],
129    [ "SaddleBrown", 139, 69, 19 ],
130    [ "Salmon", 233, 150, 122 ],
131    [ "SandyBrown", 244, 164, 96 ],
132    [ "SeaGreen", 82, 149, 132 ],
133    [ "seashell", 255, 245, 238 ],
134    [ "Sienna", 150, 82, 45 ],
135    [ "SkyBlue", 114, 159, 255 ],
136    [ "SlateBlue", 126, 136, 171 ],
137    [ "SlateGray", 112, 128, 144 ],
138    [ "snow", 255, 250, 250 ],
139    [ "SpringGreen", 65, 172, 65 ],
140    [ "SteelBlue", 84, 112, 170 ],
141    [ "Tan", 222, 184, 135 ],
142    [ "Thistle", 216, 191, 216 ],
143    [ "tomato", 255, 99, 71 ],
144    [ "Transparent", 0, 0, 1 ],
145    [ "Turquoise", 25, 204, 223 ],
146    [ "Violet", 156, 62, 206 ],
147    [ "VioletRed", 243, 62, 150 ],
148    [ "Wheat", 245, 222, 179 ],
149    [ "White", 255, 255, 255 ],
150    [ "WhiteSmoke", 245, 245, 245 ],
151    [ "Yellow", 255, 255, 0 ],
152    [ "YellowGreen", 50, 216, 56 ],
153    [ "Gray0", 0, 0, 0 ],
154    [ "Gray1", 3, 3, 3 ],
155    [ "Gray10", 26, 26, 26 ],
156    [ "Gray100", 255, 255, 255 ],
157    [ "Gray11", 28, 28, 28 ],
158    [ "Gray12", 31, 31, 31 ],
159    [ "Gray13", 33, 33, 33 ],
160    [ "Gray14", 36, 36, 36 ],
161    [ "Gray15", 38, 38, 38 ],
162    [ "Gray16", 41, 41, 41 ],
163    [ "Gray17", 43, 43, 43 ],
164    [ "Gray18", 46, 46, 46 ],
165    [ "Gray19", 48, 48, 48 ],
166    [ "Gray2", 5, 5, 5 ],
167    [ "Gray20", 51, 51, 51 ],
168    [ "Gray21", 54, 54, 54 ],
169    [ "Gray22", 56, 56, 56 ],
170    [ "Gray23", 59, 59, 59 ],
171    [ "Gray24", 61, 61, 61 ],
172    [ "Gray25", 64, 64, 64 ],
173    [ "Gray26", 66, 66, 66 ],
174    [ "Gray27", 69, 69, 69 ],
175    [ "Gray28", 71, 71, 71 ],
176    [ "Gray29", 74, 74, 74 ],
177    [ "Gray3", 8, 8, 8 ],
178    [ "Gray30", 77, 77, 77 ],
179    [ "Gray31", 79, 79, 79 ],
180    [ "Gray32", 82, 82, 82 ],
181    [ "Gray33", 84, 84, 84 ],
182    [ "Gray34", 87, 87, 87 ],
183    [ "Gray35", 89, 89, 89 ],
184    [ "Gray36", 92, 92, 92 ],
185    [ "Gray37", 94, 94, 94 ],
186    [ "Gray38", 97, 97, 97 ],
187    [ "Gray39", 99, 99, 99 ],
188    [ "Gray4", 10, 10, 10 ],
189    [ "Gray40", 102, 102, 102 ],
190    [ "Gray41", 105, 105, 105 ],
191    [ "Gray42", 107, 107, 107 ],
192    [ "Gray43", 110, 110, 110 ],
193    [ "Gray44", 112, 112, 112 ],
194    [ "Gray45", 115, 115, 115 ],
195    [ "Gray46", 117, 117, 117 ],
196    [ "Gray47", 120, 120, 120 ],
197    [ "Gray48", 122, 122, 122 ],
198    [ "Gray49", 125, 125, 125 ],
199    [ "Gray5", 13, 13, 13 ],
200    [ "Gray50", 127, 127, 127 ],
201    [ "Gray51", 130, 130, 130 ],
202    [ "Gray52", 133, 133, 133 ],
203    [ "Gray53", 135, 135, 135 ],
204    [ "Gray54", 138, 138, 138 ],
205    [ "Gray55", 140, 140, 140 ],
206    [ "Gray56", 143, 143, 143 ],
207    [ "Gray57", 145, 145, 145 ],
208    [ "Gray58", 148, 148, 148 ],
209    [ "Gray59", 150, 150, 150 ],
210    [ "Gray6", 15, 15, 15 ],
211    [ "Gray60", 153, 153, 153 ],
212    [ "Gray61", 156, 156, 156 ],
213    [ "Gray62", 158, 158, 158 ],
214    [ "Gray63", 161, 161, 161 ],
215    [ "Gray64", 163, 163, 163 ],
216    [ "Gray65", 166, 166, 166 ],
217    [ "Gray66", 168, 168, 168 ],
218    [ "Gray67", 171, 171, 171 ],
219    [ "Gray68", 173, 173, 173 ],
220    [ "Gray69", 176, 176, 176 ],
221    [ "Gray7", 18, 18, 18 ],
222    [ "Gray70", 179, 179, 179 ],
223    [ "Gray71", 181, 181, 181 ],
224    [ "Gray72", 184, 184, 184 ],
225    [ "Gray73", 186, 186, 186 ],
226    [ "Gray74", 189, 189, 189 ],
227    [ "Gray75", 191, 191, 191 ],
228    [ "Gray76", 194, 194, 194 ],
229    [ "Gray77", 196, 196, 196 ],
230    [ "Gray78", 199, 199, 199 ],
231    [ "Gray79", 201, 201, 201 ],
232    [ "Gray8", 20, 20, 20 ],
233    [ "Gray80", 204, 204, 204 ],
234    [ "Gray81", 207, 207, 207 ],
235    [ "Gray82", 209, 209, 209 ],
236    [ "Gray83", 212, 212, 212 ],
237    [ "Gray84", 214, 214, 214 ],
238    [ "Gray85", 217, 217, 217 ],
239    [ "Gray86", 219, 219, 219 ],
240    [ "Gray87", 222, 222, 222 ],
241    [ "Gray88", 224, 224, 224 ],
242    [ "Gray89", 227, 227, 227 ],
243    [ "Gray9", 23, 23, 23 ],
244    [ "Gray90", 229, 229, 229 ],
245    [ "Gray91", 232, 232, 232 ],
246    [ "Gray92", 235, 235, 235 ],
247    [ "Gray93", 237, 237, 237 ],
248    [ "Gray94", 240, 240, 240 ],
249    [ "Gray95", 242, 242, 242 ],
250    [ "Gray96", 245, 245, 245 ],
251    [ "Gray97", 247, 247, 247 ],
252    [ "Gray98", 250, 250, 250 ],
253    [ "Gray99", 252, 252, 252 ],
254);
255
256# quote all [^!-~]|[^\\
257sub cq($) {
258  # @return param octal-quoted as a C source string
259  my $S=$_[0];
260  $S=~s@([\\"])@\\$1@g;
261  $S=~s@([^!-~])@sprintf"\\%03o",ord$1@ge;
262  $S=~s@\\([0-7][0-7][0-7])(?=[0-9])@\\$1""@g; # pacify VC6.0 warning
263  $S
264}
265
266my @P;
267sub hash0($) {
268  my $N=0;
269  for(split'',$_[0][0]) { $N=$N*95+(223&ord); }
270  $N&=65535;
271  $N%=1109;
272  push @{$P[$N]}, $_[0];
273}
274
275@P=(undef)x1109;
276for (@L) { hash0($_); }
277# my $S="";
278# die @P;
279print STDERR "Collisions:\n";
280for (@P) { print STDERR "X@$_.\n" if defined($_) and $#$_>=1 }
281print STDERR "---\n";
282
283my $S="\000"; # contains strings
284my $H=""; # contains the hash table indices, offsets to $S
285for (@P) {
286  if (defined($_)) {
287    $H.=length($S).",";
288    for (@$_) {
289      # $S.=$_->[0]."#".$_->[1].",".$_->[2].",".$_->[3].";"
290      $S.=$_->[0]."\000".chr($_->[1]).chr($_->[2]).chr($_->[3]);
291    }
292    # substr($S,-1,1)="\000";
293    $S.="\000";
294  } else { $H.="0,"; }
295# print STDERR "X@$_.\n" if defined($_) and $#$_>=1 }
296}
297$S=~s@\000\Z(?!\n)@@;
298print "#define xpmColors_mul 95\n";
299print "#define xpmColors_mod 1109\n";
300print "unsigned short xpmColors_ofs[]={$H};\n";
301print "char xpmColors_dat[]=\"".cq($S)."\";\n";
302
303# 357, 2048
304# 189, 3457
305# 175, 3823
306# 973 (222), 1993
307# 751 (22), 1997
308# 439 (2), 2053
309# 79 (222222), 1229
310# 539 (22222), 1201
311# 287 (222), 1163
312