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..