#!/usr/bin/perl

# psf2sbf (c) Marcin Kowalczyk <qrczak@knm.org.pl>
# This software is under GPL

open PLIK, @ARGV ? shift : "-";
open WYJSCIE, @ARGV ? ">".shift : ">-";

read PLIK, $_, 4;
/^6\004([\000-\003])([\001-\377])$/s or die "Not a psf file\n";
$znakow = (256, 512)[ord ($1) & 1];
$unikod = ord ($1) & 2;
$wysokosc = ord $2;

foreach (0 .. $znakow - 1)
{
	read PLIK, $znak[$_]{ZNAK}, $wysokosc;
}

if ($unikod)
{
	foreach $znak (0 .. $znakow - 1)
	{
		while (! eof PLIK)
		{
			read PLIK, $_, 2;
			$n = unpack "S", $_;
			last if $n == 0xFFFF;
			push @{$znak[$znak]{ZNAKI}}, sprintf "U+%04X", $n;
		}
		@{$znak[$znak]{ZNAKI}} = "dummy"
			unless (@{$znak[$znak]{ZNAKI}});
	}
}
else
{
	foreach (0 .. $znakow - 1)
	{
		@{$znak[$_]{ZNAKI}} = sprintf "%02X", $_;
	}
}

foreach $znak (0 .. $znakow - 1)
{
	foreach (@{$znak[$znak]{ZNAKI}})
	{
		print WYJSCIE "[$_]\n";
	}
	foreach (split //, $znak[$znak]{ZNAK})
	{
		$linia = ord $_;
		print WYJSCIE +(map {(".", "0")[($linia & 0x80 >> $_) != 0]} 0..7),
			(".", "0")[($znak & 0xE0) == 0xC0 ? $linia & 1 : 0], "\n";
	}
	print WYJSCIE "\n";
}
