conv2vid.pl 2.60 KiB
#!/usr/bin/perl
use MIME::Decoder;
my @fontfiles=glob("/usr/share/syscons/fonts/*.fnt");
$decoder = new MIME::Decoder 'x-uuencode' or die "unsupported";
my $fonts=0;
open COUT, "> allfonts.c";
print COUT "#include <stdio.h> /* NULL */\n\n";
print COUT "#include \"allfonts.h\"\n\n";
my $started;
my %fontdata;
foreach my $fontfile (@fontfiles) {
my $width,$height;
my $decoded=`uudecode -o /dev/stdout $fontfile`;
my $bytes=length($decoded);
my $fname=$fontfile;
$fname =~ s/\.fnt$//;
$fname =~ s/^.*\///;
$fname =~ s/-/_/g;
if($fname =~ /([0-9]+)x([0-9]+)/) {
$width=$1;
$height=$2;
}
my $lines=0;
$started=0;
$fontdata{$fname}="\"";
while(length($decoded)) {
my $ch=substr($decoded,0,1);
$decoded=substr($decoded,1);
$fontdata{$fname}.='\x'.unpack("H2",$ch);
$lines++;
if($height && !($lines % $height)) {
if(length($decoded)) {
$fontdata{$fname}.="\"\n\t\t\"";
}
}
}
$fontdata{$fname}.="\"\n\t";
$fonts++;
}
open IN, "< /usr/share/syscons/fonts/INDEX.fonts";
my %fonts;
my %fontsizes;
while (<IN>) {
next if(/^\s*#/);
chomp;
my ($filename, $lang, $desc) = split(/:/);
next unless ($lang eq 'en');
next if ($filename !~ /\.fnt$/);
$filename =~ s/\..*?$//;
$filename =~ s/-/_/g;
$filename =~ s/_(8x[0-9]*)$//;
if($1 eq '8x16') {
$fontsizes{$filename} |=1;
}
elsif($1 eq '8x14') {
$fontsizes{$filename} |=2;
}
elsif($1 eq '8x8') {
$fontsizes{$filename} |=4;
}
else {
print STDERR "Unknown font size: $1\n";
}
$desc =~ s/"/\\"/g;