1 #Utility to convert from xfig to C
3 # 1. In xfig, export as metafont (hey, it works, don't knock it)
4 # 2. Run perl <icons.mf >icons.h
8 $min = 1000000000000.0;
11 $minY = 100000000000000.0;
15 if (/\(([0-9.]*), ([0-9.]*)\)/) {
16 @
{$list} = (@
{$list}, [$1,$2]);
17 if ($1 < $min) { $min = $1 }
18 if ($1 > $max) { $max = $1 }
19 if ($2 < $minY) { $minY = $2 }
20 if ($2 > $maxY) { $maxY = $2 }
23 @all = (@all, [$min, $max, $list]);
26 $min = 1000000000000.0;
30 $scale = 1.0 / ($maxY - $minY);
32 @all = sort { $a->[0] <=> $b->[0] } @all;
34 @all = (@all, [1e10
,1e10
,[]]);
42 if ($i->[0] > $lastEnd and @lines) {
43 print "double Icon".$numIcon."[][4] = {\n";
48 foreach $line (@lines) {
50 $xx = ($line->[0]+$line->[2]) / 2.0;
51 $yy = ($line->[1]+$line->[3]) / 2.0;
52 foreach $line2 (@lines) {
53 if ($line != $line2 and
54 $line2->[1] <= $yy and
58 ($line2->[2]-$line2->[0])/($line2->[3]-$line2->[1])
59 * ($yy - $line2->[1]);
68 ($line->[0])*$scale .",".
69 (1.0-($line->[1]-$minY)*$scale) .",".
70 ($line->[2])*$scale .",".
71 (1.0-($line->[3]-$minY)*$scale) ."},\n";
74 ($line->[2])*$scale .",".
75 (1.0-($line->[3]-$minY)*$scale) .",".
76 ($line->[0])*$scale .",".
77 (1.0-($line->[1]-$minY)*$scale) ."},\n";
81 print " {0,0,0,0}\n};\n\n";
85 @widths = (@widths, ($lastEnd-$offset)*$scale);
86 $offset = 1000000000.0;
89 if ($lastEnd < $i->[1]) {
92 if ($offset > $i->[0]) {
96 for($j=1;$j<(@
{$i->[2]});$j++) {
97 $list = [$i->[2]->[$j-1]->[0] - $offset , $i->[2]->[$j-1]->[1] ,
98 $i->[2]->[$j]->[0] - $offset , $i->[2]->[$j]->[1]];
99 if ($list->[1] > $list->[3]) {
100 $list = [$list->[2],$list->[3],$list->[0],$list->[1]];
102 #print join(",",@{$list}) . "\n";
103 if ($list->[1] != $list->[3]) {
104 @lines = (@lines, $list);
109 print "typedef double LineType[4];\n";
110 print "typedef LineType *IconType;\n";
111 print "IconType Icons[] = {\n";
112 for($i = 0;$i < $numIcon;$i++) {
117 print "double IconWidths[] = {\n";
118 foreach $i (@widths) { print " $i,\n"; }