#!/usr/bin/perl use strict; # This script converts "space-dot" fonts to binary "glyph rows". One byte for # each row. In a 5x7 font, each glyph thus use 7 bytes. my $fn = @ARGV[0]; unless ($fn =~ /.*(\d)x(\d)\.txt/) { die "$fn isn't a font filename" }; my ($width, $height) = ($1, $2); print STDERR "Reading a $width x $height font.\n"; my $handle; unless (open($handle, '<', $fn)) { die "Can't open $fn"; } # We start the binary data with our first char, space, which is not in our input # but needs to be in our output. print pack('C*', (0) x $height); while (<$handle>) { unless (/( |\.){${width}}\n/) { die "Invalid line format '$_'"; } my @line = split //, $_; my $num = 0; for (my $i=$width-1; $i>=0; $i--) { if (@line[$width-$i-1] eq '.') { $num += (1 << $i); } } print pack('C', $num); }