#!/usr/local/bin/perl
#
# xfonts2pbm -  Create a large pbm file (all.pbm) for X fonts in a directory
#
# Needs: ImageMagick (convert) and pbm+ toolkit (pnmcat, pnm2ps).
#        bash as default shell!
# The fonts must have been registered with the X server with:
#        mkfontdir . ; xset fp+ `pwd` ; xset fp rehash
# Do not expect print quality from fixed X fonts
# This is a quick way to do it.
#
# (c) 1995 Angelo Haritsis <ah@doc.ic.ac.uk>
#

$xfdCMD = "xfd -columns 32 -fn";
$xgrabCMD = "xgrabsc -nobell -id";
$OUT = "all.pbm";
$tmp_sep = "sep.$$.pbm";
$tmp_all = "111.$$.pbm";

# The text to print per font
$Text = "AQWٶ   
 
";
$Textless = "ABCٶ  
abc  
";

#$pbmSEPcmd = "pbmmake -black 600 1";
# separator pbm: a black and white line
$pbmSEPcmd = "pnmcat -tb <(pbmmake -black 600 1) <(pbmmake -white 600 1)";

`$pbmSEPcmd > $tmp_sep; cp $tmp_sep $OUT`;

open (FNTDIR, "sort fonts.dir|");
<FNTDIR>;

$fontnum = 1;
while (<FNTDIR>) {
	($file, $font) = split;
	print "Font[$fontnum]: $font\n";
	&do_font($file, $font, $fontnum);
	$fontnum++;
}
close FNTDIR;
unlink $tmp_sep, $tmp_all;
exit 0;


sub do_font
{
	local($file, $font, $fontnum) = @_;
	
	$tfont = $font;
	$tfont =~ s/-iso8859-7//;
	if ($tfont =~ /normal--2[2-9]-17[0-9]-/) {
		$text = "$tfont\n" . $Textless . "\n";
	} else {
		$text = "-> $tfont\n" . $Text . "\n";
	}
	$fontnum = sprintf("%02d", $fontnum);
	$lcmd = " <(echo \"$text\" |convert -normalize -crop 0x0 -font $font text:- pbm:-) $tmp_sep";
	system "mv $OUT $tmp_all ; pnmcat -tb -jleft -white $tmp_all $lcmd > $OUT";
}

# old way: use an xfd screen per ps file...
sub do_font1
{
	local($file, $font, $fontnum) = @_;

	if ($child = fork) {
		sleep 1;
		$res = `xwininfo -name xfd`;
		$res =~ /Window id: (.*) /;
		$id = $1;
		`$xgrabCMD $id > prfnt$fontnum.ps`;
		kill 9,$child if $child;
	} else {
		exec "$xfdCMD $font";
	}
}
