home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0400
/
CCE_0417.ZIP
/
CCE_0417.PD
/
ASCREEN.ZOO
/
fontstuf
/
flip
next >
Wrap
Text File
|
1992-03-19
|
3KB
|
87 lines
#!/usr/local/bin/perl
# flip --- generiert FLIB-Zeichensatzbibliothek aus Dateihierarchie
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Copyright (C) 1992 by Anselm Lingnau. Alle Rechte vorbehalten.
#
# Sie d"urfen dieses Skript frei benutzen und weitergeben, solange Sie dadurch
# kein Geld verdienen oder behaupten, Sie h"atten es geschrieben.
#
# Achtung: Dieses Skript macht diverse unangebrachte Annahmen "uber das
# TeX-System, auf dem die Zeichens"atze generiert werden. Insbesondere geht
# es davon aus, dass die Zeichens"atze eine Aufl"osung von 101dpi haben
# (siehe Definition von %mag), dass keine Zeichens"atze auftreten, deren
# Vergr"osserung anders ist als 0.8, 0.9, 1.0, magstephalf und magstep1..5
# (siehe ebenfalls Definition von %mag), und dass die zu packenden Zeichens"atze
# in Unterverzeichnissen der Form `pk<dpi>' des `Grundverzeichnisses' stehen.
# Es funktioniert f"ur mich auf einem IBM RISC System/6000. Your mileage may
# vary.
#
($dir, $res, $flib, $pat) = @ARGV;
unless (defined $dir) {
print "Verzeichnis, das die pk-Verzeichnisse enth\"alt: ";
chop($dir = <STDIN>);
}
unless (defined $res) {
print "Aufl\"osung des Ger\"ats in dpi: ";
chop($res = <STDIN>);
}
unless (defined $flib) {
print "Name der zu erzeugenden FLIB-Datei: ";
chop($flib = <STDIN>);
}
unless (defined $pat) {
print "Perl-Regexp f\"ur die zu packenden Dateien (oder <Enter>): ";
chop($pat = <STDIN>);
$pat = '.*' if $pat eq '';
}
opendir(THISDIR, $dir);
@allfiles = readdir(THISDIR);
closedir(THISDIR);
open(FLIB, ">$flib") || die "couldn't open $flib\n";
# Diese Tabelle "ubersetzt DPI-Werte in Scaled-Werte. Grausig, aber wahr.
%mag = ( 81, 0.8, 91, 0.9, 101, 1.0, 111, 1.095, 121, 1.2,
145, 1.44, 175, 1.44*1.2, 209, 1.44*1.44, 251, 1.2 ** 5);
@sizes = sort { $a <=> $b; } grep(s/^pk//, @allfiles);
$total_names = $total_fonts = 0;
chop($cwd = `pwd`);
for $d (@sizes) {
print "pk$d\n";
chdir "$cwd", chdir "$dir/pk$d";
opendir(FONTDIR, ".");
@ffs = grep(($_) = /^(\w+)\.\d+pk$/, readdir(FONTDIR));
closedir(FONTDIR);
$sfonts{$d} = @ffs, $dpi{$d} = int($res * $mag{$d} * 65536 + .5);
$sn = 0;
for (sort @ffs) {
next unless /$pat/;
$name = "$_.${d}pk";
$size = -s $name;
print "$name ($size bytes)\n";
$sn += length($_); $total_fonts++;
push(@fonts, $_, length($files), $size);
open(F, "$name") || die "couldn't open $dir/pk$d/$name\n";
read(F, $f, $size) || die "couldn't read $dir/pk$d/$name\n";
$files .= $f;
}
$snames{$d} = $sn; $total_names += $sn;
}
$dirlen = 8 * @sizes + 9 * $total_fonts + $total_names;
print FLIB "FLIB\002\000" . pack("S3", $dirlen, scalar(@sizes),
$total_fonts) . "\000\000";
for (@sizes) {
$sizlen = 9 * $sfonts{$_} + $snames{$_};
print FLIB pack("S2I", $sizlen, $sfonts{$_}, $dpi{$_});
for (1 .. $sfonts{$_}) {
($name, $off, $size) = splice(@fonts, 0, 3);
printf "%8u %8u %s\n", $off, $size, $name;
print FLIB pack("I2C", $size, $off + $dirlen + 14,
length($name)), $name;
}
}
print FLIB $files;