#!/usr/bin/perl use warnings; $|=1; my %chars; while (<>){ chomp; /^ENDCHAR/ && do { warn "Char $cchar has strange height?\n" if ($#char+1 != $height); for (1..$offy){ push @char,("0"x$width); }; for (@char){ $_=("0"x$offx).$_; }; $inchar=0; # print "Char: $cchar:\n",join("\n",@char),"\n"; $chars{$cchar}=[@char]; @char=(); }; if($inchar){ # print "_: $_\n"; print "H: ",pack("H*",$_),"\n"; $x=unpack("B*",pack("H*",$_)); $x=substr($x,0,$width); push @char,$x; # print $x,"\n"; next; }; /^BITMAP/ && do {$inchar=1;}; /^PIXEL_SIZE (.*)/ && do { $size=$1;$size+=0;}; /^ENCODING (.*)/ && do {$cchar=$1}; /^BBX (\d+) (\d+) (\d+) ([-\d]+)/ && do {$width=$1;$height=$2;$offx=$3;$offy=$4+$fontd;}; /^FONT_ASCENT (.*)/ && do {$fonta=$1}; /^FONT_DESCENT (\d+)/ && do {$fontd=$1;$byte=int(($fonta+$fontd-1)/8)+1;print "This will be a $byte byte font\n";}; /^DWIDTH (\d+) (\d+)/ && do {$width=$1;die "H-offset?" if $2!=0}; /^FACE_NAME "(.*)"/ && do {$font=$1;}; } # Beautify Font Name. $font.=" ${size}pt"; $fonts=$font; $fonts=~s/ //g; $fonts=~s/Bitstream//; $fonts=~s/Sans//; $file=$fonts; $file=~s/pt$//; $file=~y/A-Z/a-z/; # Fine. Now write it back out... open (F,">",$file.".c")||die; select(F); print <<EOF #include "$file.h" /* Font data for $font */ /* Bitmaps */ const uint8_t ${fonts}Bitmaps[] = { EOF ; my $offset=0; for (32..126){ warn "Char $_ not available" if !defined $chars{$_}; $char=$chars{$_}; @tchar=(); for $l (@$char){ # print "tt: $l\n"; for $y (1..length($l)){ # $tchar[$y-1].=substr($l,$y-1,1); $tchar[$y-1]="" if !defined $tchar[$y-1]; $tchar[$y-1]=substr($l,$y-1,1).$tchar[$y-1]; }; }; # print "Turn: $_:\n",join("\n",@tchar),"\n"; print "/* '",chr $_,"' at $offset */\n"; for (@tchar){ $h=unpack("H*",pack("B*",$_)); $h= pack("B*",$_).(chr(0).chr(0)); for $b (1..$byte){ printf "0x%02x,",ord(substr($h,$b-1,1)); }; # print map {"0x".$_.", "} grep {$_ ne ""} split(/(..)/,$h); ($ll=$_)=~y/01/ */; print " /* $ll */ \n"; }; push @offsets,sprintf " {%2d,%4d}, /* %c */\n",scalar(@tchar),$offset,$_; $offset+=$byte*scalar(@tchar); }; print <<EOF; }; /* Character descriptors */ const FONT_CHAR_INFO ${fonts}Descriptors[] = { EOF print @offsets; print <<EOF; }; /* Font info */ const struct FONT_DEF Font_$fonts = {0,$size,' ','~', ${fonts}Bitmaps, ${fonts}Descriptors, }; EOF open (F,">",$file.".h")||die; select(F); print <<EOF; #include "fonts.h" extern const struct FONT_DEF Font_$fonts; EOF close(F);