Auf den folgenden Seiten wollen wir Ihnen zeigen, wie eigene Programme für »AmigaOS 4« mit dem neuen SDK zu kompilieren sind. Dieser kleine Artikel soll den Auftakt für weitere Artikel zur Programmierung unter AmigaOS 4 bilden.
|
Das SDK (Software Developer Kit) für AmigaOS 4 ist auf der Prerelease-CD von AmigaOS 4 enthalten. Diese sollten allen »AmigaOne Early Bird«-Besitzern bereits zugestellt sein. Wer noch nicht über einen AmigaOne verfügt, aber trotzdem schon mal seine Programme vorbereiten will oder auch einfach nur hineinschnuppern möchte, kann sich direkt mit Hyperion Entertainment in Verbindung setzen (http://www.hyperion-entertainment.biz).
Compiler-Installation
Die Frage müsste eigentlich lauten, mit welcher Umgebung soll das Programm
kompiliert werden. Zur Auswahl steht eine PPC-Version für die Verwendung
unter AmigaOS 4 und eine 68k-Version. Letztere ist für den Einsatz mit
AmigaOS 3.x gedacht und ist ein so genannter Cross-Compiler. Der PPC-, bzw.
Cross-Compiler erzeugt ein Programm, das nicht unter AmigaOS 3.x ausgeführt
werden kann. In unserem Fall ist das Ergebnis ein ELF-Binary, mit dem ein
68k-Prozessor nichts verarbeiten kann. Man sollte dem nativen Compiler für
AmigaOS 4 den Vorzug geben.
|
Die Installation von »Basic Documentation and Autodocs« enthält auch alle benötigten Amiga-Header-Dateien und die Autodocs (englischsprachige Beschreibungen für alle Funktionen). Nach der Installation sind diese unter »SDK:Documentation/AutoDocs« zu finden. Die meisten Dateien wurden schon auf den aktuellen Stand gebracht (V50), jedoch fehlen teilweise noch Informationen zu den neueren Bibliotheken. Die notwendigen Includes sind in SDK:Include/include_h zu finden. Der gcc sucht sie hier automatisch, bei Verwendung anderer Compiler ist der Include-Pfad anzupassen.
Hallo
Welt
Den Klassiker »Hello World« findet man garantiert in jedem Lehrbuch
für die Programmiersprache C. Er wird aber auch gerne für die ersten
Gehversuche mit einem neuen Compiler benutzt. Der folgende Sechszeiler ist
unsere Version:
#include <proto/dos.h>
int main()
{
IDOS->PutStr("Hello World\n");
return( 0 );
}
|
Tippen Sie den Quelltext in einem beliebigen Editor und speichern das Ergebnis unter HelloWorld.c ab. Danach geht`s in der Shell mit dem Compileraufruf weiter:
gcc HelloWorld.c -o HelloWorld
Wurde alles fehlerfrei eingegeben, steht nach wenigen Sekunden das ausführbare
Programm zur Verfügung, das über die Shell gestartet werden kann.
Wie auch schon früher, stehen alle Funktionen von Exec und Dos zur Verfügung.
Die entsprechenden Libraries/Interfaces werden bereits vom Startup-Code geöffnet.
Auffallend am Beispiel ist, dass die Dos-Funktion der Library-Interface-Zeiger
vorangestellt ist. Für Exec-Funktionen lautet er übrigends IExec.
Umsetzung
der eigenen Programme
Bevor Sie sich jetzt an die Umsetzung/Anpassung der eigenen Programme
machen, sollten Sie zuerst einen Blick auf die mitgelieferten Beispiele werfen
und mithilfe der Autodocs die neuen Funktionen erforschen. Damit bekommen
Sie dann ein Gefühl für die neuen Möglichkeiten.
Zum Kompilieren von Alt-Sourcen wird man sicher nicht zuerst sämtliche
Funktionsaufrufe (Calls) anpassen wollen. Auch daran haben die Entwickler
des SDK gedacht. Mit den Anweisungen
-d__USE_INLINE__
als Compileraufruf, kann weiterhin die alte Aufrufnotation verwendet werden.
Alternativ kann auch
#define __USE_INLINE__
im Quellcode eingefügt werden.
Der Preprozessor setzt dann intern die entsprechenden Basiszeiger. Gelinkt
werden muss dann allerdings mit der libauto.a- Bibliothek (-l auto), damit
auch die Interfaces bereitgestellt werden (z.B. für Intuition, Graphics,
ect.).
Das Neu-Kompilieren bestehender »Alt-Sourcen« sollte damit kein Problem mehr darstellen. Je nachdem welcher Compiler früher verwendet wurde, sind allerdings Anpassungen im Sourcecode vorzunehmen. Mögliche Gründe sind fehlende Includes oder fehlende Typcasts. Den Compilern beigelegten Include-Dateien entsprechen teilweise nicht den offiziellen Versionen (speziell: prama/ pramas/proto). Ältere C-Compiler interessierten sich auch nicht für die Typen von Zeigern.
Wurde also ein struct Window-Zeiger von OpenWindow() zurückgeliefert, konnte dieser einem struct Screen * zugewiesen werden. Speziell AllocVec() bzw. das ältere AllocMem() sind hier Kandidaten, da diese einen VOID-Zeiger liefern, die Variablen aber vom Typ UBYTE *, ULONG * etc. sind. Hier sind also am ehesten Nacharbeiten zu erwarten. Wer früher bereits mit »StormC« oder »MaxonC« Programme in C++ geschrieben hat, kennt die strengen Typprüfungen bereits und dürfte kaum Anpassungen zu erwarten haben. Bei Zuweisungen von char-Variablen unterscheidet der gcc außerdem sehr genau zwischen singned und unsigned (vorzeichenbehaftet und vorzeichenlos). Ein Mischen von UBYTE* und STRPTR in C++ Code nimmt der gcc-Compiler daher sehr übel.
In den nächsten Ausgaben des Amiga Magazins, gehen wir dann auf weitere Besonderheiten bei der Programmierung mit AmigaOS4 und bei der Nutzung des neuen SDKs ein.
|
lb
Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster
AMIGA schicken.
Zuletzt aktualisiert am 9. Juli 2004, Michael Christoph.