#!/usr/bin/perl use strict; use DBI; use DBD::SQLite; use Data::Dumper; $|++; die "Usage: $0 fonts.db\n" unless @ARGV >= 1 or -e 'fonts.db'; my $input = shift || 'fonts.db'; my $dbh = DBI->connect("dbi:SQLite:dbname=$input") or die $DBI::errstr; my $fonts = $dbh->selectall_arrayref("SELECT FontName, FixedWidth, FixedHeight, Resolution FROM Fonts") or die $dbh->errstr; while (1) { for (1 .. @$fonts) { my ($name, $width, $height, $resolution) = @{$fonts->[$_-1]}; my $dimension = ($width ? "$width * $height" : 'variable width'); print "$_: $name - $resolution - $dimension\n"; } print "Choose a font to display: "; my $choice = int() or exit; my $name = $fonts->[$choice-1][0] or next; my $sth = $dbh->prepare("SELECT * FROM $name ORDER BY Character"); $sth->execute; while ( my $row = $sth->fetchrow_hashref ) { my $map = unpack('B*', $row->{Bitmap}); while (my $x = substr($map, 0, int(($row->{Width} + 7)/8)*8, '')) { $x =~ s/0/./g; $x =~ s/1/@/g; print "$x\n"; } printf "[0x%s] %s*%s Inc/Asc/Desc:%s/%s/%s A/B/C:%s/%s/%s Offset:%s | Stop? ", ( uc(unpack('H*', $row->{Character})), @{$row}{qw( Width Height Increment Ascend Descend ASpace BSpace CSpace BaseOffset )} ); $row->{Bitmap} or next; last if =~ /^\z|[yq!]/i; } }