550
edits
m (Zimlib -> libzim) |
|||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Box|'''Please note:''' This page only exists for historical reasons, therefore it has not been translated to English. | |||
The Zeno file format has been obsoleted by the ZIM (Zeno IMproved) file format. The ZIM library is not compatible to Zeno anymore as there are major differences between Zeno and ZIM concerning features and compression. Zeno was never widespread and is not used anymore. | |||
The successor of Zeno is the [[ZIM File Format]] which is used in many [[ZIM Readers|reader applications on different platforms]] and offers an easy to use [[libzim]].}} | |||
Documentation by Erwin Jurschitza (DirectMedia Verlagsgesellschaft Berlin, http://www.directmedia.de/). | |||
= ZenoReader/Library = | = ZenoReader/Library = | ||
Die Dokumentation wurde für das Zeno-2.0-Format aktualisiert! | Die Dokumentation wurde für das Zeno-2.0-Format aktualisiert! | ||
Line 30: | Line 38: | ||
=== Inhaltsverzeichnis === | === Inhaltsverzeichnis === | ||
Um den Code erstmal einfach zu halten, wird das ganze Inhaltsverzeichnis auf einen Schlag eingelesen (kann mit dem Parameter /f erzwungen werden, bringt Geschwindigkeitsgewinn auf Kosten von RAM). | Um den Code erstmal einfach zu halten, wird das ganze Inhaltsverzeichnis auf einen Schlag eingelesen (kann mit dem Parameter /f erzwungen werden, bringt Geschwindigkeitsgewinn auf Kosten von RAM). | ||
<pre> | |||
TWPVLibrary = class (TObject) | TWPVLibrary = class (TObject) | ||
private | private | ||
FBuffer: array of byte; // das Inhaltsverzeichnis als Byte-Stream mit Records variabler Länge | FBuffer: array of byte; // das Inhaltsverzeichnis als Byte-Stream mit Records variabler Länge | ||
FBufferSize: integer; | FBufferSize: integer; | ||
</pre> | |||
Auf jeden Fall ganz eingelesen werden muss die Zeigerliste auf das Inhaltsverzeichnis. Sie wird in einer Listenstruktur gehalten, könnte aber auch ein array of integer sein. Die Liste ist vorsortiert, siehe ZenoReader/Qunicode. | Auf jeden Fall ganz eingelesen werden muss die Zeigerliste auf das Inhaltsverzeichnis. Sie wird in einer Listenstruktur gehalten, könnte aber auch ein array of integer sein. Die Liste ist vorsortiert, siehe ZenoReader/Qunicode. | ||
<pre> | |||
FList: TList; | FList: TList; | ||
</pre> | |||
Beispiel: Das nullte Element der Liste hat den Wert 0 und zeigt auf Nullte Byte in FBuffer. Das erste Element hat z.B. den Wert 56 und zeigt auf das 56. Byte in FBuffer, was einem Zeiger auf den zweiten Eintrag des Inhaltsverzeichnisses entspricht, usw. Dabei ist der Inhalt von FBuffer folgendermaßen zu interpretieren: | Beispiel: Das nullte Element der Liste hat den Wert 0 und zeigt auf Nullte Byte in FBuffer. Das erste Element hat z.B. den Wert 56 und zeigt auf das 56. Byte in FBuffer, was einem Zeiger auf den zweiten Eintrag des Inhaltsverzeichnisses entspricht, usw. Dabei ist der Inhalt von FBuffer folgendermaßen zu interpretieren: | ||
<pre> | |||
TZenoLibraryCompressionType = (zenocompDefault, zenocompNone, zenocompZip); | TZenoLibraryCompressionType = (zenocompDefault, zenocompNone, zenocompZip); | ||
TZenoLibraryMimeType = (ZenomimeTextHtml, ZenomimeTextPlain, ZenomimeImageJpeg, ZenoMimeImagePng, | TZenoLibraryMimeType = (ZenomimeTextHtml, ZenomimeTextPlain, ZenomimeImageJpeg, ZenoMimeImagePng, | ||
Line 56: | Line 72: | ||
rExtra: array [0..$FFF] of char; // Artikeltitel, Nullbyte, evtl. Parameter wie h=200, durch Nullbyte getrennt | rExtra: array [0..$FFF] of char; // Artikeltitel, Nullbyte, evtl. Parameter wie h=200, durch Nullbyte getrennt | ||
end; | end; | ||
</pre> | |||
Es ist zu beachten, dass der Record auf Bytegrenzen gepackt ist, d.h. ohne rExtra genau 26 Byte groß ist. Durch das zwingene Nullbyte in rExtra auch bei einem leeren Artikeltitel ist somit jeder Eintrag mindestens 27 Byte groß. | Es ist zu beachten, dass der Record auf Bytegrenzen gepackt ist, d.h. ohne rExtra genau 26 Byte groß ist. Durch das zwingene Nullbyte in rExtra auch bei einem leeren Artikeltitel ist somit jeder Eintrag mindestens 27 Byte groß. | ||
=== Zusatzdaten bei Indexdateien === | === Zusatzdaten bei Indexdateien === |