Dokumentation vom File2Obj-Programm

©2007, Jeffrey Albert Evans
Übersetzt von ytwinky, MD
[A.d.Ü: Das Programm kann hier gedownloadet werden]

Der Zweck des Programmes File2Obj ist es, einem FreeBASIC-Programmierer zu erlauben, jede Datei in ein Objekt-Modul zu konvertieren, das dann statisch mit anderen in ein ausführbares Programm gelinkt werden kann.
Daurch entfällt die Notwendigkeit für ein Programm, auch noch Grafik- und Audio-Dateien einzulesen und erst recht die Notwendigkeit, diese Dateien mit der ausführbaren Datei mitzuliefern.
Das Beispiel ist für einfache Text-Dateien, aber den Möglichkeiten sind keine Grenzen gesetzt.
Auch im Bündel enthalten ist ein anderes Programm, PrintObj, zur Ausgabe von Objekt-Dateien im ’Common Object File Format’(COFF).

1.Demonstration des Programms

File2Obj.exe ausführen. (Befehlszeilenparameter werden nicht ausgewertet). Das Programm läuft im Konsol-Modus.
Nachfolgend der erscheinende Dialog(Die roten Angaben müssen eingegeben werden; die EXTERNal-Namen müssen in Großbuchstaben eingetippt werden und mit einem ’_’ beginnen):

Target Object File Name: myobj.o[Zielobjekt-Dateiname]

Input File No. 1 (* to terminate): myext.txt[Eingabe-Datei-Nr.(* zum Beenden)]

External Name: _MYEXT

Input File No. 2: yourext.txt

External Name: _YOUREXT

Input File No. 3: *

Run Successful [Ausführung erfolgreich]

Press enter to exit: [Enter drücken zum Beenden]

Jetzt sollte in dem Ordner eine Datei myobj.o entstanden sein.
Nun die FreeBASIC-IDE(WelcheAuchImmer) starten und die TestObj.Bas öffnen.
Diese Datei mit der Befehlszeile “fbc TestObj.Bas myobj.o” kompilieren.
TestObj.exe ausführen; eine Ausgabe ähnlich der folgenden sollte erscheinen:
00407000     00405090
Content of myext.txt

Content of yourext.txt

Die zwei Hex-Werte sind die Speicher-Adressen der Extern-Variablen und die Textzeilen stellen den Inhalt der Originaldateien dar.

2.Programmier-Hinweise

Im Beispiel werden die EXTERNs als UBYTE gedim'd. Sie können natürlich auch als beliebiger ’user defined type’(UDT) definiert sein, der dafür zweckmäßig ist, z.B., Bitmap File Header.
Wenn der Datei-Inhalt Offset-Daten enthält zu anderen Positionen in der Datei, wäre es der beste Weg, einen Pointer zu setzen gemäß folgendem Ausdruck:
(cptr(ubyte ptr,@external_name)+offset)
FreeBASIC konvertiert die Extern-Deklaration in Großbuchstaben und setzt ein ’_’ davor. Diese sind dann in diesem Format für File2Obj anzugeben.

3.Grenzen

Das Programm erlaubt bis zu 99 Dateien als Einbindung in eine Objekt-Datei. Jede Datei wird in ihren eigenen Assembler-Abschnitt geladen. Der reservierte Platz für die EXTERNen Symbole ist ausreichend für einen normale EXTERNal-Namenslänge von 63 bytes – das sollte mehr als genug sein.
Wenn das Programm eine Eingabedatei nicht öffnen oder lesen kann, wird eine Fehlermeldung angezeigt und diese Datei erscheint nicht in der Ausgabe.
Eine Fehlerüberprüfung findet beim Schreiben der Ausgabedatei statt und bei Fehlern wird das Schreiben abgebrochen. Wenn die Meldung “Successful” nicht erscheint, ist der Inhalt der Zieldatei (falls vorhanden) unvorhersagbar.

4.PrintObj

Dies ist ein ziemlich primitives Programm zur Anzeige des Inhalts einer COFF-Datei auf der Konsole.
Eine Datei kann bei jeder Ausführung angezeigt werden und deren Name sollte dann in der Befehlszeile angegeben werden.
Das Programm pausiert nach dem Datei-Header und jedem Abschnitts-Header, ebenso nach den Relokations-Tabellen-Einträgen jedes Abschnitts und nach der Symbol-Tabelle. Ein beliebiger Tastendruck führt dann weiter.
In der Symbol-Tabelle warden nicht alle Hilfseinträge ausgewertet; die nicht erkannten werden einfach als Hex-Werte angezeigt.
Die Abschnitts-Daten (d.h, die aktuellen Programmcode-Bytes werden nicht angezeigt, nur diverse Tabellen.
Die Meldung “Completed” zeigt an, daß alles, was ausgegeben werden konnte, auch ausgegeben wurde.
Mit einer beliebigen Taste geht's zurück zum System.

5.Literaturverzeichnis

Die einzige Stelle, an der ich Dokumentation von COFF finden konnte, war bei:
http://www.delorie.com/djgpp/doc/coff
Vielen Dank an den Autor dafür.

6.Reklamationen

Der Autor bietet keine Garantie, daß dies Programm für jeden Zweck wieauchimmer geeignet ist und übernimmt keine Verantwortung für irgendwelche Verluste, die durch dessen Verwendung entstehen sollten.
Wer irgendwelche Fehler in der Ausführung findet, schreibe eine EMail an jevans4949@aol.com .
..und nicht an ytwinky, der diese Übersetzung zwar nach bestem Wissen und Gewissen und mit OpenOffice-Writer erstellt hat, aber leider auch nicht immer fehlerfrei ist..