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