File: sbf2psf

package info (click to toggle)
fonty 1.0-22
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,924 kB
  • ctags: 124
  • sloc: cpp: 1,114; perl: 767; makefile: 133; sh: 80
file content (91 lines) | stat: -rwxr-xr-x 1,265 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/perl

$_ = <>; s/\s+$//;
while (1)
{
	if (/^\[(.*)\]$/)
	{
		push @znaki, $1;
	}
	elsif (/^$/)
	{
		if (@znaki)
		{
			if (@znak)
			{
				if (@font)
				{
					die "Different character heights in line $.\n"
						if @znak != $wysokosc
				}
				else
				{
					$wysokosc = @znak;
				}
				push @font,
				{
					ZNAKI => [@znaki],
					ZNAK => [@znak],
				};
				@znak = ();
			}
			@znaki = ();
		}
	}
	else
	{
		if (@znaki)
		{
			if (/^[.0]+$/)
			{
				@linia = split //;
				die "Character width must be 8 or 9 in line $.\n"
					if @linia != 8 && @linia != 9;
				$linia = 0;
				for (0 .. 7) {$linia <<= 1; $linia++ if $linia[$_] eq "0"}
				push @znak, $linia;
			}
		}
	}
	last unless defined;
	$_ = <>; s/\s+$//;
}

if (@font == 0)
{
	die "No characters found\n";
}
if (@font <= 256)
{
	$typpsf = "\2";
	$znakow = 256;
}
elsif (@font <= 512)
{
	$typpsf = "\3";
	$znakow = 512;
}
else
{
	die "Too many characters (", scalar @font, " > 512)\n";
}

print "6\4$typpsf", chr $wysokosc;

foreach (@font)
{
	foreach (@{$$_{ZNAK}}) {print chr $_}
}

print "\0" x (($znakow - @font) * $wysokosc);

foreach (@font)
{
	foreach (@{$$_{ZNAKI}})
	{
		s/^U\+// and print pack "S", hex;
	}
	print pack "s", -1;
}

print +(pack "s", -1) x ($znakow - @font);