von Michael Christoph
Dieser Kurs baut auf den Grundlagenartikeln zur Programmierung unter "AmigaOS 4" aus dem Amiga Magazin ab Ausgabe 7/2004 auf. Er soll anhand des konkreten Projekts das Zusammenspiel einzelner Systemfunktionen genauer erläutern. Außerdem soll die Artikelreihe grundlegende Punkte zum Design und Aufbau eines Programms vorstellen. Darum wird nicht mehr im Einzelnen auf alle Funktionen eingegangen, sondern auf die bisherigen Teile verwiesen. Es wird also mehr Beschreibungen zum Sourcecode geben und weniger Aufzählungen der Betriebssystemfunktionen. Dieser Kurs richtet sich an Personen, die bereits Erfahrungen mit der Programmierung haben. Er stellt speziell die Benutzung der neuen "AmigaOS 4"-Funktionen in den Vordergrund. Als Beispiel soll ein Haushaltsbuch dienen. Dabei werden Benutzeroberflächen (per Reaction) erstellt und Listen zur Verwaltung von Einträgen erzeugt. Zusätzlich speichert das Beispiel die Programmeinstellungen über Prefs-Objekts und die Einbindung in die AmiDock-Leiste soll eine Rolle spielen. Für die Unterstützung des Beispiels benötigen Sie den SDK für "AmigaOS 4". Die Quelltexte zu den Artikeln finden Sie auf der CD zum Heft. In diesem Kurs stehen vor allem die neuen Möglichkeiten von "AmigaOS 4" im Vordergrund. Deshalb wird auf die Kompatibilität zu älteren Betriebssystemversionen verzichtet. Entweder müssten Sie dann auf alle neuen Funktionen verzichten oder diese aufwändig nachprogrammieren. Start
mit main Das Öffnen und Schließen der Libraries und OS4-Interfaces wollen wir uns an dieser Stelle sparen. Stattdessen kommt der AutoInit-Code zum Einsatz. Linken Sie mit der Option lauto. Auch die später noch benötigten Klassen für Reactionen lassen sich automatisch öffnen und schließen. Hier heißt die Linkoption -lraauto. Da das Programm in späteren Versionen auch mit Fließkommazahlen für Geldbeträge umgehen muss, wird noch die Mathematik-Bibliothek benötigt. Diese lässt sich mit dem Parameter -lm hinzulinken. Makefiles
machen das Leben leichter In Listing 2 finden Sie ein Beispiel für ein Makefile. Sie müssen es bei Bedarf anpassen. Beachten Sie: Das Makefile sollte mit einem Editor bearbeitet werden, der Tabulatoren speichern kann und diese nicht in Leerzeichen umwandelt. Besondere Bedeutung hat die Option -Wall. Damit werden alle Warnungen beim gcc aktiviert, sodass auch kleine Grenzüberschreitungen vom gcc angemahnt werden. Damit beugt man Fehlern im Programm vor - Beispiel: Mehrere Funktionen mit demselben Namen oder auch gleichlautende Variablen in unterschiedlichen Quellcode-Dateien. Man sollte also immer darum bemüht sein, dass vom Compiler keine Warnungen ausgegeben werden. Ganz Hartgesottene können auch -Werror benutzen. Dies bewirkt, dass Warnungen als Fehler bewertet werden und zum Abbruch des Compilierungsvorgangs führen. Eine vollständige Liste der Optionen ist in der gcc-Dokumentation im SDK zu finden. Benutzerrückmeldungen Intern ist allerdings keine Unterscheidung notwendig, da AmigaOS die Anzahl der Schalter dynamisch erweitern kann. Bisher wurden für derartige Fenster auf die Easy-Requester zurückgegriffen, da diese mit wenigen Zeilen Code zu erstellen waren. Ein Schattendasein führte daher bisher die requester.class, welche seit "AmigaOS 2.x" theoretisch verfügbar ist. Mit "AmigaOS 4" wurde sie aber nochmals aufgewertet und kann jetzt auch ein Symbol im Fenster mit anzeigen. Dazu stehen entweder die sechs internen Symbole zur Verfügung: REQIMAGE_xxx ist in classes/requester.h zu finden. Alternativ erstellen Sie selber ein Image über eine Bitmap-Klasse. Das hat auch den Vorteil, dass die Bilddaten extern auf der Platte vorliegen können und so einfach durch andere ersetzt werden können. Für eigene Bilder können alle Grafikformate zum Einsatz kommen, die durch Datatypes unterstützt werden. Kann das externe Image nicht gefunden werden, ist der entsprechende Zeiger Null. Das interpretiert die Requester-Klasse als "anzeigen des Default-Symbols". Das fertige Codegerüst ist als wiederverwendbare Funktion DisplayRequester() in der Datei myKassenbuchDocky.c zu finden. Hinweis: Die Requester-Funktion kann eine beliebige Anzahl an Argumenten verarbeiten. Das wird als Elipsen-Argument ausgedrückt.
Einen Timer nutzen?Eigentlich braucht ein Kassenbuch keine zeitgesteuerten Funktionen. Und sogar die Uhranzeige in der Dockleiste lässt sich vollständig ohne timer.device realisieren, wie der nächste Kursteil zeigen wird. Trotzdem wird oftmals ein Timer benötigt und so lässt sich dieses Grundgerüst auch für andere Projekte verwenden. Im Prinzip ist die Anwendung nicht sehr kompliziert. Es ist ein Nachrichtenport mit IExec->CreatePort zu erstellen. Die Verwaltungs-(Nachrichten)-Struktur legt man mit IExec->CreateIORequest an, um damit das timer.device zu öffnen. Unter "AmigaOS 4" muss zusätzlich noch das Interface geöffnet werden, falls die Library-Funktionen wie ITimer->GetSysTime benutzt werden sollen. Über den Aufruf IExec->SendIO() wird der Timer gestartet und kehrt nach Ablauf als Nachricht ins Programm zurück. Wirklich kompliziert wird es nur beim Schließen. Falls der Timer noch nicht abgelaufen ist, das Programm aber trotzdem beendet werden soll (oder auch einfach nur eine Warteaktion abgebrochen werden soll) muss zuerst der ausstehende Timer abgebrochen werden. Dazu nutzt man IExec->AbortIO und auf das Ende der Abbruchaktion wartet IExec->WaitIO. Die Funktionen an sich sind sicher, sodass auch bereits abgelaufene Timer abgebrochen werden können, was natürlich ohne weitere Aktion bleibt. Die vollständige Anwendung ist im dokumentierten Sourcecode auf der Heft-CD zu dieser Ausgabe zu finden. Er gibt Fehlermeldungen aus, wenn der Timer nicht erstellt werden kann. Damit ist der erste Teil auch schon abgeschlossen. In der nächsten Ausgabe wird dann endlich auch etwas zu sehen sein, da sich unser Programm in die AmiDock-Leiste einfügen wird. Zuständig dafür ist die neue application.library. lb
|
|
Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster
AMIGA schicken.
Zuletzt aktualisiert am 26.3. 2006.