Alexander (HH): Alte Library gesucht

Beitrag lesen

Moin Moin!

Ich schlag mich gerade mit ein paar Dateien rum, in denen Eingabemasken für ein Windows-Programm abgelegt sind. Die Inhalte hab ich mittlerweile einigermaßen identifiziert, und das Format kann ich mittlerweile auch lesen und in XML übersetzen.

Das Besondere: Die Daten sind nicht als Binärmüll gespeichert, sondern als codierter Text. Und ich bin mir 100% sicher, dass ich dieses bekloppte Dateiformat schonmal irgendwo anders gesehen habe, ich weiß nur nicht mehr wo. Ich vermute, dass sich die Programmierer eine alte (oder vor 10 oder 20 Jahren neue) C- oder C++-Library geschnappt haben, die ihre Daten einigermaßen sicher serialisieren und deserialisieren konnte.

Die Dateien sehen ungefähr so aus:

  
:23013  
\[38  
1  
1\.930853127233340e+014  
:23058  
\[1  
:23016  
\[0  
\]\]:32808  
\[0  
\]0  
0  
"":32808  
\[0  
\]:23026  
\[0  
\]1  
92  
1  
:23032  
\[0  
1  
\]:23044  
\[0  
1  
\]11  
"default.MEN"11  
"default.tbb"1  
1  
10  
10  
1  
1  
50331903  
33488896  
0  
1  
"\x20"1  
"\x20"1  
9  
"M  
oin\x20Moin"1  
"\x20"1  
"\x20"0  
:23056  
\[0  
1  
\]1  
"\x20"1  
1  
0  
:23060  
\[1  
0\.000000000000000e+000  
1  
\]:23060  
\[1  
0\.000000000000000e+000  
1  
\]1  
:32808  
\[0  
\]:32808  
\[0  
\]@0  
:32842  
\[0  
\]0  
0  
0  
""5  
"7.6.4"5  
"7.6.4":23016  
\[1  
1031  
  
\]:32808  
\[0  
\]1023  
:32808  
\[6  
:30623  
\[3  
42  
"WIN01/-13/0/0/0/400/0/0/0/0/3/2/1/34/Arial"117440512  
13  
201326591  
201326591  
201326591  
117440256  
1  
50331903  
0  
0  
16777215  
0  
\]:30623  
\[3  
42  
"WIN01/-13/0/0/0/4  
00/0/0/0/0/3/2/1/34/Arial"117440512  
13  
201326591  
67174399  
201326591  
117440256  
1  
65535  
0  
0  
16777215  
0  
\]:30623  
\[3  
42  
"WIN01/-13/0/0/0/400/0/0/0/0/3/2/1/34/Arial"117440512  
13  
201326591  
201326591  
201326591  
117440256  
1  
33488896  
0  
0  
16777215  
0  
\]:30623  
\[3  
42  
  
"WIN01/-13/0/0/0/400/0/0/0/0/3/2/1/34/Arial"117440512  
13  
201326591  
201326591  
201326591  
117440256  
0  
117440256  
0  
0  
16777215  
0  
\]:30623  
\[3  
42  
"WIN01/-13/0/0/0/400/0/0/0/0/3/  
2/1/34/Arial"117440512  
13  
201326591  
201326591  
201326591  
117440256  
0  
100598015  
0  
0  
16777215  
0  
\]:30623  
\[3  
42  
"WIN01/-13/0/0/0/400/0/0/0/0/3/2/1/34/Arial"117440512  
13  
201326591  
201326591  
201326591  
117440256  
0  
65280  
0  
0  
16777215  
0  
\]\]:23016  
\[6  
1  
1  
1  
1  
1  
1  
\]2147483663  
2147483663  
0  
""0  
0  
1  
0  
0  
\]  

Zeilenumbrüche (im DOS-Format) trennen Werte voneinander, außer in Strings. Dort werden sie vollkommen ignoriert.

Vor jedem String steht ein Integer mit dessen Länge, der String selbst ist in "" verpackt und zudem noch mit ein paar Escape-Sequenzen versehen: \r \n \t \ " wie von C gewohnt, ebenso \x und zwei Hex-Ziffern. Zusätzlich steht [ für { und ] für }. Nach dem Ende eines Strings steht kein Zeilenumbruch, der nächste Wert folgt ohne jedes Trennzeichen auf das abschließende ". String und Länge müssen zusammenpassen, sonst verabschiedet sich die Entwicklungsumgebung (Blome Designer) mit einem fürchterlichen Absturz, obwohl ein ordentlicher Parser das String-Ende auch ohne die Längenangabe finden können müßte -- meiner kann das jedenfalls. ;-) Die Umbrüche in den Strings sind scheinbar vollkommen willkürlich.

Floats werden grundsätzlich in Exponenzial-Notation gespeichert, mit einer wahnwitzigen Stellenanzahl.
gefolgt von einem Integer ist eine Klassen-ID, die Attribute der Klasse sind in eine Liste eingepackt. Die Liste beginnt nach einem Zeilenumbruch mit den ZWEI Zeichen [ und endet ], wie am Stringende auch jeweils ohne folgenden Zeilenumbruch. (Das sieht so aus, als hätte jemand ursprünglich { und } schreiben wollen, aber das Escapen dieser Zeichen in Strings etwas zu doll getrieben).

Dann gibt es noch @ gefolgt von einem Integer, dessen Bedeutung mir im Moment noch nicht klar ist.

Booleans werden als Integer 0 und 1 gespeichert.

Die Entwicklungsumgebung hat ihre Ursprünge in den finsteren DOS-Zeiten, wurde über 16-bittiges Windows bis zum 32-Bit-Windows geschleppt, die Library dürfte ähnlich alt sein.

So, die große Frage: Kennt jemand das Format und insbesondere die Library, die dieses Format ausspuckt und wieder einliest?

Anschlußfragen: Was bedeutet das @ in diesem Format? Gibt es eine Regel, wann Umbrüche in Strings eingefügt werden?

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".