\magnification=\magstep1
\input nice
%%\input amiga	% amiga.tex is in the formatfile
\hsize = 5 in
\vsize = 7.7 in
\voffset = 0.4in

\def\mynum#1{\ifnum #1<10 0\the#1\else \the#1\fi}
\def\mymonth#1{\ifcase#1 \or Januar \or Februar \or M\"arz \or April
   \or Mai \or Juni \or Juli \or August
   \or September \or Oktober
   \or November \or Dezember \fi}

\def \Flib {Flib}
\def \DVIprint {DVIprint}
\def \ShowDVI {ShowDVI}

\def\tbw {\hskip 10pt \it to be written $\ldots$}

\book
\contentslevel=1
\contfill={\dotfill}
\contskip=6pt
\font\subsubsectiontitlefont=cmr10 scaled \magstep1


\titlepage
\vskip 1in
\title{\Flib{}, das Fontlibrary-Programm}
\removelastskip
\smallskip
\title{f\"ur den AMIGA}
\bigskip
\release{Version 1.03}
\smallskip
\release{vom}
\release {\mynum{\day}. \mymonth{\month}\mynum{\year}}
\bigskip
\author{von}
\author{Georg He\ss{}mann}
\vfill
\abstract{
  \Flib{} ist ein Programm zum Erstellen und Verwalten von
  Fontlibraries. Dies sind Libraries, in denen viele PK-Fonts
  zusammengefa\ss{}t werden. Der Vorteil von Libraries gegen\"uber
  einzelnen Files ist die Platzeinsparung auf Diskette oder Festplatte,
  die bessere \"Ubersicht und der schnellere Zugriff auf einzelne
  Elemente. Diese Libraries werden von den \TeX{}-Treibern \ShowDVI{}
  und \DVIprint{} verwendet.
}
\vskip 1.2in
\endtitlepage



\medskip
\plainsection{Inhaltsverzeichnis:}
\medskip
\makecontents
\bigskip

\section{Copyright und \"ahnliches}

Das Programm \Flib{} ist ``copyrighted Public Domain''. Das hei\ss{}t
jeder kann das Programm verbreiten und ver\"andern unter Beachtung einiger
Einschr\"ankungen. Zum einen beh\"alt das Programm mein (Georg Heßmann) Copyright.
Das Copyright darf nicht aus dem Programmtext gel\"oscht werden,
und die Copyright-Meldung mu\ss{} auch weiterhin wenigstens per Option
angezeigt werden k\"onnen. Alle \"Anderungen, die am
Programm gemacht werden, m\"ussen mir mitgeteilt werden, damit ich die
Versionen nach M\"oglichkeit angleichen kann.
Diese Copyright-Bestimmungen steht auch am Anfang des Files ``flib.c''
und d\"urfen auch nicht von dort entfernt werden. Auch m\"ussen die
Files flib.c, flib.tex sowie das dazugeh\"orige README-File immer
zusammen vertrieben werden.
Daf\"ur kann jeder das Programm verwenden wie er m\"ochte und
kommerziell oder nicht-kommerziell vertreiben\footnote{Dies gilt
nur f\"ur das \Flib{} Programm und {\it nicht} f\"ur die anderen Programme}.

F\"ur weitere Erkl\"arungen siehe das README-File.

\section{Allgemeines \"uber \Flib{}}
\Flib{} ist ein Hilfsprogramm f\"ur die \TeX-Treiber \ShowDVI{} und
\DVIprint{}. Es ist dazu da, die PK-Fonts einer Aufl\"osungsstufe in einem
File zusammenzufassen, da dies einige \"uberzeugende Vorteile hat.

Als erstes w\"are da die Speicherersparnis zu nennen. Da jedes einzelne
File immer aus einem Vielfachen der Blockgr\"o\ss{}e des jeweiligen FileSystems
besteht, wird auch bei jedem File durchschnittlich ein halber Block
verschenkt. Bei manchen Betriebssystemen wird auch noch f\"ur jeden
Directory-Eintrag ein ganzer Block ben\"otigt. Das hei\ss{}t, pro File ist
grob ein Verschnitt von eineinhalb Bl\"ocken zu erwarten. Bei etwa 100
Modulen pro Library werden so knapp 150 Bl\"ocke gespart.

Aber es gibt noch andere Vorteile. Da w\"aren noch die bessere \"Ubersicht
und auch der schnellere Zugriff zu nennen. Da man meistens mehrere Fonts
einer Aufl\"osungsstufe ben\"otigt, braucht man nur ein File zu
\"offnen und dort das Directory einzulesen. Danach ist jeder Zugriff auf
einen Font nur noch ein ``fseek''-Kommando. Da so nur f\"ur jede
Aufl\"osung ein File zu \"offnen ist, kann man diese den ganzen
Programmlauf offen halten. So vermeidet man auch ein st\"andiges
\"Offnen und Schlie\ss{}en von Files.

Das \Flib{}-Programm ist aber nicht nur auf PK-Fonts spezialisiert. Im
Prinzip kann man damit jeden beliebigen Typ von Files in einer Library
archivieren. Da der Programmtext zum \Flib-Programm verf\"ugbar ist,
k\"onnte man auch andere Programme, die viele Hilfs-Files ben\"otigen,
daran anpassen.

\section{Der Aufruf}

Der Syntax des Aufrufes ist folgenderma\ss{}en:

\hskip 1cm {\tt usage: flib c$|$a$|$x$|$d$|$z$|$p$|$l$|$t[v] library [-$|$[modules]*]}
\smallskip

\staggered{\quad\tt c,a}
\key{\quad\tt c\rm ,\tt a}
 h\"angt ein Modul an eine Library an. Existiert die Library noch
 nicht, so wird sie neu erzeugt. Falls das Modul schon in
 der Library ist, so wird es ersetzt.
\key{\quad\tt x}
 kopiert das Modul aus der Library in ein eigenes File mit dem Namen
 des Moduls. Wird kein Modul angegeben, so werden alle Module
 aus der Library kopiert.
\key{\quad\tt d}
 l\"oscht ein Modul aus einer Library. Falls das Modul das letzte
 der Library war, so wird die Library gel\"oscht.
\key{\quad\tt t}
 gibt die Liste aller Module der Library aus.
\key{\quad\tt r}
 benennt alle angegebenen Module um. Dazu wird der neue Name
 von der Console (stdin) erwartet.
\key{\quad\tt z}
 transformiert Fontlibraries des alten Typs in die aktuelle
 Version. Alle neu angelegten Libraries sind automatisch
 vom neuen Typ.
\key{\quad\tt p}
 testet alle Module, ob sie noch korrekt sind. Dazu wird beim
 Einf\"ugen in die Library eine Testsumme erzeugt und im
 Directory der Library gespeichert.
\key{\quad\tt l}
 erzeugt einen Library-Link. Der Aufruf sieht hier
 folgenderma\ss{}en aus:\parwithoutskip
 \centerline{flib l \it link-name dest-name}
 Dabei wird eine Library {\it link-name} erzeugt, die lediglich ein Verweis
 auf eine Library mit dem Namen {\it dest-name} ist.
 Dies verwendet man zum Beispiel in dem Fall, wo man Fontlibraries
 der Aufl\"osungen 109 dpi und 110 dpi ben\"otigt, aus
 Speicherplatzgr\"unden aber nur eine von ihnen auf Platte halten
 m\"ochte. Da der Unterschied der beiden Fontlibraries nicht so
 gro\ss{} ist, kann man sich daf\"ur entscheiden, lediglich eine
 von beiden auf Platte zu halten und die andere nur als Link
 zu erzeugen.
\key{\quad\tt v}
 schaltet den Verbose-Modus ein. Dieses Flag kann zu jedem der
 obigen Optionen eingeschaltet werden. Normalerweise werden nur
 Fehlermeldungen ausgegeben. Mit der {\tt v} Option wird jede
 Aktion mitprotokolliert. Dies ist vor allem bei komplizierteren
 Aufgaben sinnvoll.
\endstaggered

Bei allen Kommandos k\"onnen hinter dem Library-Namen beliebig viele Module
angegeben werden. Es gibt aber auch die M\"oglichkeit nur ein Minus (--)
anzugeben. Dann werden die Modulnamen von der Console (stdin)
eingelesen (ein Modul pro Zeile), bis ein File-Endezeichen kommt.

\section{Der Aufbau der Libraries}
Bei den Libraries m\"ussen zwei verschiedene Typen unterschieden werden:
Einmal die Library, in der tats\"achlich Module gespeichert sind, und zum
anderen die Libraries, die lediglich ein Link auf eine andere Library sind.

\subsection{Richtige Libraries}
Die Fontlibraries bestehen aus drei Teilen. Am Anfang der Library steht
der Library-Kopf, dann kommt das Library-Directory und am Schlu\ss{}
die einzelnen Module.

Der Library-Kopf besteht aus zwei 32-Bit-Worten (Langworten). Das erste ist
die ``magic number'', die aus den vier Buchstaben ``FLIB'' besteht.
Danach kommt die Directory-Gr\"o\ss{}e. Sie mu\ss{} nicht unbedingt gleich
der Anzahl der Module der Library sein. Es k\"onnen auch
Directory-Eintr\"age als unbelegt gekennzeichnet werden.

Das Directory der Library besteht aus den einzelnen Directory-Eintr\"agen.
Die Anzahl wurde im zweiten Langwort festgelegt. Ein Directory-Eintrag sieht
folgenderma\ss{}en aus:
\beginverbatim
   struct new_flib_dirent {
           char  mname[22];          /* module name   */
           unsigned short checksum;  /* checksum      */
           long  size;               /* size in bytes */
           long  where;              /* position      */
   };
\endverbatim
Wobei {\tt mname} der Modulname, {\tt checksum} die Pr\"ufsumme,
{\tt size} die Gr\"o\ss{}e des Moduls und {\tt where} die Position des
Moduls innerhalb der Library ist. Wenn {\tt where} gleich Null ist, so
ist der Directory-Eintrag unbelegt.

Bei all diese Zahlangaben ist die Byte-Reihenfolge zu beachten.
Verwendet wird das Format der 680x0 Prozessoren. Also zuerst immer
das ``low significant byte'' und dann das ``high significant byte''.
Die Ausgaberoutinen des \Flib{}-Programms sind so geschrieben,
da\ss{} sie auch auf anderen Prozessoren das geforderte Format
erzeugen und lesen.

Der dritte und letzte (gr\"o\ss{}te) Teil der Library sind die einzelnen
Module, die einfach hintereinandergelegt sind.

\subsection{Library-Links}
Library-Links haben einen sehr einfachen Aufbau, der sich im Prinzip auch
mit einem Texteditor erzeugen l\"a\ss{}t. Zum Beispiel:
$$\hbox{``{\tt FLNK<\it PK0110\tt >}''}$$
Dies ist ein Library-Link auf eine Library mit dem Namen {\it PK0110}.

Das Magic-Word ist hier also {\tt FLNK}. Danach kommt lediglich der
Name der Library, auf die der Link zeigen soll, eingerahmt in ein
Kleiner- und ein Gr\"o\ss{}erzeichen.


\section{Portierbarkeit}
Das Programm ist in ANSI-C geschrieben, l\"a\ss{}t sich aber auch durch
\"Anderung eines Defines mit einem normalen C-Compiler \"ubersetzen.
\"Ubersetzt und getestet wurde das Programm auf AMIGA, ATARI, Sun 3, Sun
SPARC und einer DECstation unter den Betriebssystemen AMIGA DOS, ATARI TOS
und UNIX (SunOS/ULTRIX).

\bye
