Benutzer-Werkzeuge

Webseiten-Werkzeuge


dateiformat

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dateiformat [05.04.2015 23:22]
martin [Funktionen]
dateiformat [11.08.2021 10:15] (aktuell)
Zeile 27: Zeile 27:
 </code> </code>
  
-Für Bücher ohne Skripte entfällt die Zeile+Für Bücher ohne Skript-Datei entfällt die Zeile
 <code> <code>
 ScriptMD5: <MD5 Summe der src-Datei> ScriptMD5: <MD5 Summe der src-Datei>
 </code> </code>
 +Ein Buch ohne Skript-Datei bedeutet nicht, dass das Buch keine Skripte enthält. Die binären Skripte befinden
 +ich immer noch einmal (ohne Kommentare) in der ouf-Datei.
 +
  
 Beispiel: ''txt''-Datei für das Buch mit der Buch-ID ''05045'' (Bauernhof Rätsel): Beispiel: ''txt''-Datei für das Buch mit der Buch-ID ''05045'' (Bauernhof Rätsel):
Zeile 47: Zeile 50:
 ====== Die png Datei ====== ====== Die png Datei ======
  
-Ein png-Bild der Größe 140px × 193px(???)+Ein png-Bild mit der Breite 140 Pixel. Die Höhe beträgt maximal 193 Pixel.
  
 ====== Die ouf Datei ====== ====== Die ouf Datei ======
Zeile 57: Zeile 60:
 | Index-Tabelle | n x 12 byte = n x 3 x 32 bit | | Index-Tabelle | n x 12 byte = n x 3 x 32 bit |
 | Padding || | Padding ||
-| MP3 / Binärscode ||+| MP3 (incl. optionalem ID3-Tag ) Binärcode ||
 | Padding || | Padding ||
-| MP3 / Binärscode ||+| MP3 (incl. optionalem ID3-Tag ) Binärcode ||
 | ... || | ... ||
-| MP3 / Binärscode ||+| MP3 (incl. optionalem ID3-Tag ) Binärcode ||
  
  
 ===== Dateikopf ===== ===== Dateikopf =====
  
-| 0 | Startposition der Index-Tabelle | 0x0068 | +| 0 (0x00) | Startposition der Index-Tabelle | 0x0068 | 
-| 4 | unbekannt | 2 | +| 4 (0x04) | unbekannt | 2 | 
-| 8 | erste Ting-ID | 15001 (15000 gefunden; laut "Doku" aber fehlerhaft) | +| 8 (0x08) | erste Ting-ID | 15001 (15000 gefunden; laut "Doku" aber fehlerhaft) | 
-| 12 | letzte Ting-ID | +| 12 (0x0c) | letzte Ting-ID | 
-| 16 | Anzahl der genutzten Ting-IDs | Entspricht nicht immer letzte Ting-ID – erste Ting-ID + 1 (???) +| 16 (0x10) | Anzahl der genutzten Ting-IDs | ''"letzte Ting-ID– "erste Ting-ID+ 1'' 
-| 20 | Buch-ID || +| 20 (0x14) | Buch-ID || 
-| 24 | unbekannt | Werte im Bereich 1 bis 20 gefunden (häufig gefunden: 2, 5, 7 und 11) | +| 24 (0x18) | unbekannt | Werte im Bereich 1 bis 20 gefunden (häufig gefunden: 2, 5, 7 und 11) | 
-| 28 | Erstellungszeitpunkt (???) | UNIX-Timestamp | +| 28 (0x1c| Erstellungszeitpunkt | UNIX-Timestamp | 
-| 32 | unbekannt | 0 | +| 32 (0x20) | unbekannt | 0 | 
-| 36 | unbekannt | 0x0000ffff |+| 36 (0x24) | unbekannt | 0x0000ffff |
  
 ===== Index-Tabelle ===== ===== Index-Tabelle =====
Zeile 89: Zeile 92:
 ===== Padding ===== ===== Padding =====
  
-Die einzelnen Einträge (MP3 oder Binärcode) fangen immer an einer Adresse der Form 0x......00 an. Das Padding erfolgt mit Nullen+Die einzelnen Einträge (MP3 oder Binärcode) fangen immer an einer Adresse ''X'' an, mit ''(X mod 0x200) == 0''. Das Padding erfolgt mit beliebigen Zeichen (meist nullen).
  
 ===== Funktionen ===== ===== Funktionen =====
Zeile 102: Zeile 105:
  
 <code> <code>
 +
 +
 +private static int getNextAddress(int x) {
 +  x += 0x100 - (x & 0xff);
 +    while(x % 0x200 != 0) {
 +      x += 0x100;
 +    }
 +  return(x);
 +}
 +
 pos = 12 * <Anzahl der Eintrage im Index> + <Startposition der Indextabelle> pos = 12 * <Anzahl der Eintrage im Index> + <Startposition der Indextabelle>
-pos += (0x100 - (pos % 0x100)% 0x100 +pos = getNextAddress(12 * <Anzahl der Einträge im Index> + <Startposition der Indextabelle>); 
-while(<Die 12 (???Bytes an der Stelle pos sind 0>) { +while(!isMp3(<daten ab pos>&& !isScript(<daten ab pos>)) { 
- pos += 0x100;+ pos += 0x200;
 } }
 </code> </code>
Zeile 129: Zeile 142:
 private static int getCodeFromPositionInFile(int position, int n) { private static int getCodeFromPositionInFile(int position, int n) {
   if(((position & 0xFF) != 0x0) | (n < 0)) {   if(((position & 0xFF) != 0x0) | (n < 0)) {
-    return(-1);+    return -1;
   }   }
   n--;   n--;
Zeile 136: Zeile 149:
     int v = (b - E[k]) << 8;     int v = (b - E[k]) << 8;
     if(getPositionInFileFromCode(v, n + 1) == position) {     if(getPositionInFileFromCode(v, n + 1) == position) {
-      return(v);+      return v;
     }     }
   }   }
-  return(-1);+  return -1;
 } }
  
Zeile 151: Zeile 164:
 public static int getPositionInFileFromCode(int code, int n) { public static int getPositionInFileFromCode(int code, int n) {
   if(((code & 0xFF) != 0x0) | (n < 0)) {   if(((code & 0xFF) != 0x0) | (n < 0)) {
-    return(-1);+    return -1;
   }   }
   n--;   n--;
Zeile 159: Zeile 172:
           (((code >> 9) & 0x1) << 4);           (((code >> 9) & 0x1) << 4);
   code -= n * 0x1A - E[c];   code -= n * 0x1A - E[c];
-  return(code << 8);+  return code << 8;
 } }
 </code> </code>
 +
dateiformat.1428276126.txt.gz · Zuletzt geändert: 11.08.2021 10:15 (Externe Bearbeitung)