Alexander (HH): Alte Library gesucht

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".
  1. Hello,

    sieht aus, wie ANSI-Escape-Sequenzen.
    Das ist quasi ein Cooked-Filter für den Screen (gewesen).

    Es gibt auch eine C-Lib dafür... Ich suche schon :-)

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      sieht aus, wie ANSI-Escape-Sequenzen.
      Das ist quasi ein Cooked-Filter für den Screen (gewesen).

      Es gibt auch eine C-Lib dafür... Ich suche schon :-)

      Ich bin ganz sicher, dass es die noch gibt. Ich habe letztes Jahr im Oktober noch damit herumgespielt.

      Hinweise hier unter "Ansi-Steuersequenzen"
      http://cybop.berlios.de/tutorials/linux_console/ansi_steuersequenzen.pdf

      Beim guten alten DOS musste man die ANSI.Sys dafür laden. Die hat sich als Device-Treiber in den Screen geklemmt.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
    2. Moin Moin!

      sieht aus, wie ANSI-Escape-Sequenzen.
      Das ist quasi ein Cooked-Filter für den Screen (gewesen).

      Neee, definitiv nicht. Wir reden hier schon über ein GRAFISCHES User-Interface. ANSI-Sequenzen kenne ich aus DOS-Zeiten gut genug. Vor allem fehlen für ANSI-Sequenzen jede Menge <ESC>s vor den eckigen Klammern.

      Es gibt auch eine C-Lib dafür... Ich suche schon :-)

      ANSI ist die falsche Fährte, solltest Du danach suchen, lass es sein.

      Alexander

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