#!/usr/bin/perl -w use bytes; open $in, "font.dat" or die $!; my $junk; read($in, $junk, 0x2000); # skip to the font read($in, $X2000, 256); # ASCII 32-63 read($in, $X2100, 256); # ASCII 64-95 read($in, $X2200, 256); # ASCII 0-31 read($in, $X2300, 256); # ASCII 96=127 # ASCII 0 is a blank glyph substr($X2200, 0, 8) = "\x00" x 8; # ASCII 1-26 are inverse letters instead of ATASCII control graphics. for($i = 1; $i < 27; $i++) { my $old = substr($X2100, $i * 8, 8); my $p = 0; for(split "", $old) { my $new = ~ord($_); substr($X2200, $i * 8 + $p++, 1) = chr($new); } } $font = $X2200 . $X2000 . $X2100 . $X2300; while() { chomp; if(/^(\d+)$/) { $offset = $1 * 8; next; } elsif(/^[-#]+$/) { s/-/0/g; s/#/1/g; my $byte = eval "0b$_"; substr($font, $offset++, 1) = chr $byte; } } print $out $font; close $in; close $out; __DATA__ 96 -------- --##---- --##---- ---##--- -------- -------- -------- -------- 123 ----###- ---##--- ---##--- --##---- ---##--- ---##--- ----###- -------- 125 -###---- ---##--- ---##--- ----##-- ---##--- ---##--- -###---- -------- 126 -------- -###--## ##-##-## ##--###- -------- -------- -------- --------