Benutzer-Werkzeuge

Webseiten-Werkzeuge


dateiformat

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

dateiformat [05.04.2015 23:13]
martin
dateiformat [11.08.2021 10:15]
Zeile 1: Zeile 1:
  
-====== Buchformat ====== 
- 
-Ein Ting-Buch besteht mindestens 3 Datein: 
- 
-| ''<Buch ID>_en.txt'' | Meta-Daten | 
-| ''<Buch ID>_en.png'' | Coverbild | 
-| ''<Buch ID>_en.ouf'' | Daten (MP3s / Binärcode) | 
- 
-Ting-Bücher die Skripte enthalten (z.B. Spiele) eine weitere Datei: 
- 
-| ''<Buch ID>_en.src'' | Skripte (Assembler-Sourcecode) und Infos | 
- 
-Für die Funktion eines Buches ist allein die ''ouf''-Datei auf dem Ting-Stift (im Unterverzeichniss ''$ting'') nötig. 
- 
-====== Die txt-Datei ====== 
-<code> 
-Name: <Titel> 
-Publisher: <Herausgeber> 
-Author: <Autor> 
-Book Version: <Buchversion> 
-URL: <URL> 
-ThumbMD5: <MD5 Summe der png-Datei> 
-FileMD5: <MD5 Summe der ouf-Datei> 
-ScriptMD5: <MD5 Summe der src-Datei> 
-Book Area Code: en 
-</code> 
- 
-Für Bücher ohne Skripte entfällt die Zeile 
-<code> 
-ScriptMD5: <MD5 Summe der src-Datei> 
-</code> 
- 
-Beispiel: ''txt''-Datei für das Buch mit der Buch-ID ''05045'' (Bauernhof Rätsel): 
-<code> 
-Name: Bauernhof Rätsel 
-Publisher: arsEdition 
-Author: Corina Beurenmeister 
-Book Version: 255 
-URL:  
-ThumbMD5: 963091a6d6854ddb7c89cd9b532ba22a 
-FileMD5: 66287f1f855aa1dbd53a56f5155a91fe 
-ScriptMD5: 9b28c79405e513dabad4094a1869aa21 
-Book Area Code: en 
-</code> 
- 
-====== Die png Datei ====== 
- 
-Ein png-Bild der Größe 140px × 193px. (???) 
- 
-====== Die ouf Datei ====== 
- 
-Dateistruktur 
-^ Bereich ^ Größe ^ 
-| Dateikopf | 40 bytes (10 x 32 bit) | 
-| Padding | 64 bytes | 
-| Index-Tabelle | n x 12 byte = n x 3 x 32 bit | 
-| Padding || 
-| MP3 / Binärscode || 
-| Padding || 
-| MP3 / Binärscode || 
-| ... || 
-| MP3 / Binärscode || 
- 
- 
-===== Dateikopf ===== 
- 
-| 0 | Startposition der Index-Tabelle | 0x0068 | 
-| 4 | unbekannt | 2 | 
-| 8 | erste Ting-ID | 15001 (15000 gefunden; laut "Doku" aber fehlerhaft) | 
-| 12 | letzte Ting-ID | 
-| 16 | Anzahl der genutzten Ting-IDs | Entspricht nicht immer letzte Ting-ID – erste Ting-ID + 1 (???) | 
-| 20 | Buch-ID || 
-| 24 | unbekannt | Werte im Bereich 1 bis 20 gefunden (häufig gefunden: 2, 5, 7 und 11) | 
-| 28 | Erstellungszeitpunkt (???) | UNIX-Timestamp | 
-| 32 | unbekannt | 0 | 
-| 36 | unbekannt | 0x0000ffff | 
- 
-===== Index-Tabelle ===== 
- 
-Jeder Eintrag besteht jeweils aus drei 32bit unsigned integer-Werten 
- 
-| 0 | Kodierte Position des MP3 innerhalb der ouf-Datei (siehe Funktion: ''getCodeFromPositionInFile'') || 
-| 4 | Größe des MP3s oder des Skript-Kompilats in Bytes || 
-| 8 | 0 | leerer Eintrag | 
-| 8 | 1 | MP3 | 
-| 8 | 2 | Skript | 
- 
-Bei einigen Büchern muss zu der Funktion ''getPositionInFileFromCode'' immer noch ein konstanter Wert hinzuaddiert werden. Dieser Wert kann bestimmt werden in dem man 
- 
-<code> 
-<Position des ersten Eintrags im File> - getPositionInFileFromCode(<Code des ersten Eintrags>, 0) 
-</code> 
- 
-berechnet. Die Position des ersten Eintrags wird wahrscheinlich wie folgt ermittelt: 
- 
-<code> 
-pos = 12 * <Anzahl der Eintrage im Index> + <Startposition der Indextabelle> 
-pos += (0x100 - (pos % 0x100)) % 0x100 
-while(<Die 12 (???) Bytes an der Stelle pos sind 0>) { 
- pos += 0x100; 
-} 
-</code> 
- 
-Die Funktion ''getCodeFromPositionInFile'' liefert aus der Position in der ouf-Datei und der 
-Position in der Indextablelle den Positionscode in der Indextabelle. Die Funktion ''getPositionInFileFromCode'' 
-liefert aus dem Positionscode in der Indextabelle und der Position in der Indextablelle 
-die Position in der ouf-Datei. 
- 
-<code> 
- 
-     private final static int[] E = { 578, 562, 546, 530, 514, 498, 482, 466, 
-                                     322, 306, 290, 274, 258, 242, 226, 210, -446, 
-                                     -462, -478, -494, -510, -526, -542, -558, -702, 
-                                     -718, -734, -750, -766, -782, -798, -814}; 
-    /** 
-     * Errechnet aus der Position in der ouf-Datei und der Position in der Indextablelle 
-     * den Positionscode in der Indextabelle 
-     * @param position Position in der Datei 
-     * @param n Position in der Indextablelle (startet bei 0) 
-     * @return Positionscode in der Indextabelle (1. Feld). Im Fehlerfall -1 
-     */ 
-     private static int getCodeFromPositionInFile(int position, int n) { 
-          if(((position & 0xFF) != 0x0) | (n < 0)) { 
-               return(-1); 
-          } 
-          n--; 
-          int b = (position >> 8) + n * 0x1A; 
-          for(int k = 0; k < E.length; k++) { 
-               int v = (b - E[k]) << 8; 
-               if(getPositionInFileFromCode(v, n + 1) == position) { 
-                    return(v); 
-               } 
-          } 
-          return(-1); 
-     } 
- 
-    /** 
-     * Errechnet aus dem Positionscode in der Indextabelle und der Position in der Indextablelle 
-     * die Position in der ouf-Datei 
-     * @param code Positionscode in der Indextabelle (1. Feld) 
-     * @param n Position in der Indextablelle (startet bei 0) 
-     * @return Position in der Datei. Im Fehlerfall -1 
-     */ 
-     public static int getPositionInFileFromCode(int code, int n) { 
-          if(((code & 0xFF) != 0x0) | (n < 0)) { 
-               return(-1); 
-          } 
-          n--; 
-          code = code >> 8; 
-          int c = ((code >> 3) & 0x1) | (((code >> 4) & 0x1) << 1) | 
-                  (((code >> 5) & 0x1) << 2) | (((code >> 7) & 0x1) << 3) | 
-                  (((code >> 9) & 0x1) << 4); 
-          code -= n * 0x1A - E[c]; 
-          return(code << 8); 
-     } 
-</code> 
dateiformat.txt · Zuletzt geändert: 11.08.2021 10:15 (Externe Bearbeitung)