#!/usr/local/bin/perl

$name = $ARGV[0];
$dpi = $ARGV[1];
$bdpi = $ARGV[2];
$mag = $ARGV[3];
$reqmode = $ARGV[4];

$texfontmap = "/usr/local/tex/fonts/texfonts.map";
$psfontmap = "/usr/local/tex/config/dvips/psfonts.map";
$tempdir = "/tmp/mktp.$$";

# is this a PostScript-Font? Then we have to use gsftopk instead of mf

if (open(PSFONT,$psfontmap)) {
	while ($line=<PSFONT>) {
		if (($line !=~ /^%/) && ($line =~ $name)) { 
			$mode = "gsftopk";
		}
	}
}

# if no mode is given or defined yet, guess one according to $bdpi

if (! $mode) {
	MODE: {	if ($bdpi == 300) { $mode = "cx"; last MODE; }
			if ($bdpi == 400) { $mode = "nexthi"; last MODE; }
			if ($bdpi == 600) { $mode = "ljfour"; last MODE; }
			if ($bdpi == 1270) { $mode = "linoone"; last MODE; }
			$mode = "cx"; last MODE;
		}

	if (($reqmode) && ($mode ne $reqmode)) {
		print STDERR "requested mode $reqmode and required mode $mode differ, will use $mode\n";
	}
}

$fontdir = "/usr/local/tex/fonts/pk/$mode";
$tfmdir = "/usr/local/tex/fonts/tfm";
$gfname = "$name.$dpi"."gf";
$pkname = "$name.$dpi"."pk";

if (-e "$fontdir/$pkname") {
	die "font $fontdir/$pkname already exists, exiting\n";
}

if (! -d $fontdir) {
	print STDERR "$fontdir missing, created\n";
	if (!(mkdir($fontdir,01777))) {
		die "couldn't create $fontdir, exiting\n";
	}
}

mkdir($tempdir,0700);
chdir($tempdir);

if ($mode eq "gsftopk") {
	print STDERR "gsftopk $name $dpi\n";
	system("gsftopk $name $dpi >&2");
	print STDERR "mv $pkname $fontdir\n";
	system("mv $pkname $fontdir >&2");
} else {
	print STDERR "mf \"\\mode:=$mode; mag:=$mag; scrollmode; input $name\"\n";
	system("mf \"\\mode:=$mode; mag:=$mag; scrollmode; input $name\" >&2");
	print STDERR "gftopk $gfname $pkname\n";
	system("gftopk $gfname $pkname >&2");
	print STDERR "mv $pkname $fontdir\n";
	system("mv $pkname $fontdir >&2");
	if (! -f "$tfmdir/$name.tfm") {
		print STDERR "mv $name.tfm $tfmdir\n";
		system("mv $name.tfm $tfmdir >&2");
	}
}

chdir("$tempdir/..");
# print STDERR "rm -rf $tempdir\n";
system("rm -rf $tempdir >&2");

print "$fontdir/$pkname";
