|
|
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.