|
|
1.1 root 1: #!/usr/bin/perl
2:
3: use MIME::Decoder;
4:
5: my @fontfiles=glob("/usr/share/syscons/fonts/*.fnt");
6: $decoder = new MIME::Decoder 'x-uuencode' or die "unsupported";
7:
8: my $fonts=0;
9:
10: open COUT, "> allfonts.c";
11: print COUT "#include <stdio.h> /* NULL */\n\n";
12: print COUT "#include \"allfonts.h\"\n\n";
13: my $started;
14: my %fontdata;
15: foreach my $fontfile (@fontfiles) {
16: my $width,$height;
17: my $decoded=`uudecode -o /dev/stdout $fontfile`;
18: my $bytes=length($decoded);
19: my $fname=$fontfile;
20: $fname =~ s/\.fnt$//;
21: $fname =~ s/^.*\///;
22: $fname =~ s/-/_/g;
23: if($fname =~ /([0-9]+)x([0-9]+)/) {
24: $width=$1;
25: $height=$2;
26: }
27:
28: my $lines=0;
29: $started=0;
30: $fontdata{$fname}="\"";
31: while(length($decoded)) {
32: my $ch=substr($decoded,0,1);
33: $decoded=substr($decoded,1);
34: $fontdata{$fname}.='\x'.unpack("H2",$ch);
35: $lines++;
36: if($height && !($lines % $height)) {
37: if(length($decoded)) {
38: $fontdata{$fname}.="\"\n\t\t\"";
39: }
40: }
41: }
42: $fontdata{$fname}.="\"\n\t";
43: $fonts++;
44: }
45:
46: open IN, "< /usr/share/syscons/fonts/INDEX.fonts";
47: my %fonts;
48: my %fontsizes;
49: while (<IN>) {
50: next if(/^\s*#/);
51: chomp;
52: my ($filename, $lang, $desc) = split(/:/);
53: next unless ($lang eq 'en');
54: next if ($filename !~ /\.fnt$/);
55: $filename =~ s/\..*?$//;
56: $filename =~ s/-/_/g;
57: $filename =~ s/_(8x[0-9]*)$//;
58: if($1 eq '8x16') {
59: $fontsizes{$filename} |=1;
60: }
61: elsif($1 eq '8x14') {
62: $fontsizes{$filename} |=2;
63: }
64: elsif($1 eq '8x8') {
65: $fontsizes{$filename} |=4;
66: }
67: else {
68: print STDERR "Unknown font size: $1\n";
69: }
70: $desc =~ s/"/\\"/g;
71: $desc =~ s/\s+8x[0-9]*//g;
72: $desc =~ s/,\s*$//g;
73: $fonts{$filename}=$desc;
74: }
75: close IN;
76: my $arraysize=(scalar keys %fonts)+1;
77: print COUT "struct conio_font_data_struct conio_fontdata[".$arraysize."] = {\n";
78: $started=0;
79: foreach my $font (keys %fonts) {
80: if($started) {
81: print COUT "\t,{";
82: }
83: else {
84: print COUT "\t {";
85: $started=1;
86: }
87: if($fontsizes{$font} & 1) {
88: print COUT $fontdata{"$font\_8x16"};
89: print COUT ", ";
90: }
91: else {
92: print COUT "NULL, ";
93: }
94: if($fontsizes{$font} & 2) {
95: print COUT $fontdata{"$font\_8x14"};
96: print COUT ", ";
97: }
98: else {
99: print COUT "NULL, ";
100: }
101: if($fontsizes{$font} & 4) {
102: print COUT $fontdata{"$font\_8x8"};
103: print COUT ", ";
104: }
105: else {
106: print COUT "NULL, ";
107: }
108: print COUT "\"$fonts{$font}\"}\n";
109: }
110: print COUT "\t,{NULL, NULL, NULL, NULL}\n";
111: print COUT "};\n";
112:
113: close COUT;
114:
115: open HOUT,"> allfonts.h";
116: print HOUT <<ENDOFHEADER;
117: #ifndef _ALLFONTS_H_
118: #define _ALLFONTS_H_
119:
120: struct conio_font_data_struct {
121: char *eight_by_sixteen;
122: char *eight_by_fourteen;
123: char *eight_by_eight;
124: char *desc;
125: };
126:
127: extern struct conio_font_data_struct conio_fontdata[$arraysize];
128:
129: #endif
130: ENDOFHEADER
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.