Neues Werkzeug zum Finden von Chunks in BTL-Dateien

Unter https://github.com/bildschirmtext/btl_recovery/tree/master/src/tools gibt es jetzt display_chunks.c und split_chunks.c

display_chunks.c sucht in den Blöcken nach Zeiger-LĂ€ngen-Tupeln die auf nicht-ĂŒberlappende Bereiche zeichen und gibt diese, wenn man irgendeinen Parameter mitgibt, auf einer 256-Farbenkonsole bunt markiert aus. Die Position des Zeiger-LĂ€ngen-Tupel wird oben in der gleichne Farbkombination markiert. So hat man einen guten Eindruck davon welche Elemente die Datei enthĂ€lt.

split_chunks.c trennt einen Block in seine Chunks auf.

KurzerklÀrung tape_recovery

Hier auf github https://github.com/bildschirmtext/tape_recovery findet sich ein kleiner Satz an Programmen den ich hier mal vorstellen möchte.

Das Problem welches dieses Programm zu lösen versucht ist es V.23 modulierte Daten zu dekodieren. Die Daten werden dabei auch in Pakete aufgeteilt. Dies ist sehr praktisch um BTX-Daten von TonbÀndern zu bekommen. Die extern benötigten Pakete sind sox und zip.

Die „Installation“ ist relativ einfach. Man klont sich das Repository. Dort gibt es unter src/bin ein Verzeichnis mit den C-Programmen. Ein Aufruf von ./compile.sh ĂŒbersetzt diese. Um Dateien zu konvertieren wechselt man wieder in das src-Verzeichnis und fĂŒhrt dort process.sh aus. Der Parameter dafĂŒr ist die WAV-Datei des Bandes. Es sollten alle von sox unterstĂŒtzen Dateiformate verwendet werden können.

Als Ausgabe wird ein ZIP-Archiv erzeugt welches alle erkannten Blöcke sowie ein wenig textuelle Info ĂŒber den Prozess gespeichert werden. Die Datenblöcke werden im Format Stunde-Minute-Sekunde.Millisekunde benannt. Das ermöglich eine einfach Zuordnung zu der Position in der WAV-Datei.

Die Software soll im Sinne von Freier Software frei sein, deshalb ist wie hoffentlich so gut verstĂ€ndlich, dass Nutzer selbst sinnvolle Änderungen daran durchfĂŒhren können.

Mehrere CEPT-Blöcke in Datei

Die mir vorliegenden Dateien scheinen mehrere CEPT-Blöcke zu haben. Diese werden ĂŒber Zeiger an den Offsets 0x92, 0x9a und 0xa2 referenziert. (Update: wohl auch 0xae)

Gleichzeitig scheint der ASCII-Block auch zweigeteilt zu sein und ĂŒber 0x88 und 0x8e referenziert zu sein.

Die Zeiger sind jeweils 16 Bit in Intel Byteorder (least significant byte first) fĂŒr die Position und die LĂ€nge.

braun: 0x88
grau: 0x8e
grĂŒn: 0x92
rot: 0x9a
blau: 0xa2

CEPT-Block nicht 0-terminiert, LĂ€ngenfeld hinter Zeigern

Scheibar ist der CEPT-Block nicht 0-terminiert. Einige Daten, besonders die „Rasterfahndung“ haben 0-en in den CEPT-Daten drin. Im Offset 0x10-0x11 des Blocks ist ein Zeiger auf ein Ende der CEPT-Daten, welcher aber zumindest manchmal viel weiter nach hinten zeigt.

Scheinbar enthĂ€lt aber der Anfang eines Blockes nicht nur den Zeiger auf die folgenden Daten, sondern auch noch ihre LĂ€nge. Ist in 0x92-0x93 der Zeiger zum CEPT-Block gespeichert, so enthĂ€lt 0x94-0x95 seine LĂ€nge. Ist der Zeiger in 0x9a-0x9b, so ist die LĂ€nge in 0x9c-0x9d. Dies könnte ein SchlĂŒssel zum VerstĂ€ndnis der Daten sein.

kleiner Durchbruch

Es stellt sich heraus, dass das Offset zum ASCII-Text immer an Stelle 0x88-0x89 steht. Das Offset zum CEPT-Block findet sich entweder an Stelle 0x92-0x93 oder, falls da Nullen drin sind, and Stelle 0x9A-0x9B. Warum das so ist, ist mir im Moment noch nicht klar.

Erste Beobachtungen beim InfoCept03 Dateiformat

Wir haben einige Dateien bekommen welche wohl aus dem Programm BTX-Infotool 3 stammen. Dieses Programm diente wohl zur Erstellung von Bildschirmtextseiten und stammt von einer inzwischen nicht mehr existierenden Firma namens InfoTeSys in DĂŒsseldorf.

Das Dateiformat scheint Blöcke von 2048 Bytes aufzuweisen und jeder dieser Blöcke (bis auf die ersten 3) wird mit 0-Bytes aufgefĂŒllt. Davor befinden sich die CEPT Daten. Allerdings sind diese immer an unterschiedlicher Position innerhalb des Blockes.

Ein einfaches Programm welches versucht den Anfang des CEPT Teils zu erkennen findet sich hier:
https://github.com/bildschirmtext/btl_recovery

Ein exemplarischer Block. Man sieht am Ende das Padding mit 0-Bytes und ab Stelle 0x126 den CEPT Text. Ob der ASCII-Text davor dazu gehört ist noch unklar.