AMIGA-Magazin · Ausgabe 01/05 OS4-Programmierung: Application-Library

Aktuelles Heft 01/05

Der Vermittler

In »AmigaOS 4« wurde eine lange überfällige Schnittstelle implementiert, die Kommunikationen zwischen der Anwendung und AmigaOS ermöglichen. Diese Aufgabe übernimmt die neue application.library.

von Michael Christoph

Auch die application.library muss zuerst geöffnet werden und dann muss das Interface ermittelt werden. Dabei weicht die application.library vom bisherigen Schema ab. Sie stellt zwei Interfaces bereit, wobei das eine mit application bezeichnet wird und das andere mit prefsobjects (Mehrzahl). Ein main-Interface gibt es dagegen nicht (Listing 1).

Damit die eigene Applikation überhaupt im System bekannt ist, muss sie zuerst dort registriert werden. Diese Aufgabe übernimmt die Funktion RegisterApplicationA(). Das Gegenstück dazu heißt UnregisterApplicationA(). Diese Funktion sorgt beim Beenden des Programms für die Abmeldung vom System.

Wer jetzt neugierig ist und wissen möchte, welche anderen Applikationen sich bereits im System angemeldet haben, findet in GetApplicationList() die passenden Daten. Die Liste geben Sie mit FreeApplicationList() wieder frei. Die Liste selber ist eine einfache MinList mit Einträgen vom Typ struct ApplicationNode *. In den Nodes ist die interne Verwaltungs-ID sowie der Registrationsname zu finden (s. Listing 3).

Der Name setzt sich dabei aus

<Application>[_counter][.URLIdentifier]

zusammen. Somit wird aus dem Programm »TestApp« mit der Domain »myprog.de« die interne Programmbezeichnung

TestApp.myprog.de

Das zweite gestartete Programm würde

TestApp_1.myprog.de

lauten. Das geht analog so weiter, falls ein Mehrfachstart zugelassen wird. Die Domainangabe ist dazu gedacht, ggf. gleichlautende Programmnamen wieder eindeutig zu machen. Die Domain hat bisher nichts mit den bekannten Internet-Domains gemeinsam und kann frei vergeben werden. Sie ist nicht Pflicht und kann daher auch ganz weggelassen werden.

Nach dem Registrieren muss noch über GetApplicationAttrs() und dem Tag APPATTR_Port der Nachrichtenport erfragt werden. Dieser ist regelmäßig abzufragen, ob Nachrichten eingetroffen sind (Wait, WaitPort). Die dort vorliegenden Nachrichten sind vom Typ struct ApplicationMsg * und im Feld type´ APPLIBMT_xxx Defines enthalten. Eine Übersicht der möglichen Nachrichten finden Sie im Kasten »Nachrichtentypen«.

Die erste Anwendung
Nachdem nun alle Teilbereiche kurz erläutert wurden, kann das erste Programm in Angriff genommen werden. Das Listing »DemoApp.c« zeigt ein Beispiel. Zuerst werden die benötigten Libraries geöffnet und die Interfaces ermittelt.

Danach wird die Anwendung registriert und wartet in der Nachrichtenschleife auf eintreffende Nachrichten. Diese werden ausgegeben und ggf. auch gleich behandelt.

Mit der Tastenkombination »CTRL-C« lässt sich das Programm beenden, wobei es sich zuerst noch beim System abmeldet bzw. deregistriert. Das Programm lässt sich leicht erweitern und so auch die unterschiedlichen Tags und deren Bedeutung erforschen. Starten Sie das Programm auch mehrfach und kontrollieren dabei die registrierten Namen mit dem oben vorgestellten Programm »printapps.c«. Auch der Praxisteil im nächsten Heft wird sich der application.library widmen. Dann geht es um das zweite Interface in der Application-Bibliothek. Mit diesem Interface lassen sich Prefs-Dateien einfach erzeugen und die Vorgaben später nutzen.
Die Beispiele und kompletten Quelltexte zu diesem Kursteil finden Sie auf der nächsten Heft-CD bzw. auf der Internetseite des Amiga-Magazins.

lb

 

Registriert
AmiDock und unsere Demo-Application sind angemeldet.

 

Listingübersicht

Listing 1: Die Definition eines Application-Library-
Interaces

Listing 2: Die Registrierung einer Application
Listing 3: Ermittelung existierender Applications im System
Listing 4: Der Einsatz von ApplicationMsg
Listing 5: Registrierte Programme ermitteln - printapps.c

 

Nachrichtentypen
Direkte Nachrichten
APPLIBMT_Quit Das Programm soll sich beenden. Ggf. sind Rückfragen an den Benutzer zu stellen, z.B. bei veränderten Dokumenten.
APPLIBMT_ForceQuit Das Programm soll sich sofort ­ ohne Benutzerrückfrage ­ beenden.
APPLIBMT_Hide Die Anwendung soll alle Fenster schließen (Iconify).
APPLIBMT_Unhide Die Anwendung soll wieder alle Fenster anzeigen (Uniconify).
APPLIBMT_ToFront Die Anwendung soll aktiviert werden. Es ist sicherzustellen, dass der Bildschirm im Vordergrund ist und auch das Fenster im Vordergrund liegt (ScreenToFront, WindowToFront, ActivateWindow).
APPLIBMT_OpenPrefs Das Einstellungsfenster ist zu öffnen.
APPLIBMT_NewBlankDoc Ein neues Dokument soll begonnen werden; z.B. ein neuer Brief.
APPLIBMT_OpenDoc Das angegebene Dokument (aus der Last-Document-Liste) soll geöffnet werden.
APPLIBMT_PrintDoc Das angegebene Dokument soll direkt gedruckt werden. Eine Benutzerrückfrage soll nicht erfolgen.
Nachrichten an alle  
APPLIBMT_GameModeEntered Es dürfen keine Ausgaben durch das Programm erfolgen, z.B. Samples abspielen oder Fenster öffnen etc. Ein Präsentationsprogramm kann z.B. diesen Modus aktivieren, um ungestört und ununterbrochen die eigene Ausgabe vorzunehmen. Auch ein Bildschirmschoner darf sich jetzt nicht aktivieren.
APPLIBMT_GameModeLeft Programmaktionen werden wieder zugelassen.
Benachrichtigung über Anwendungen
APPLIBMT_AppRegister Eine Anwendung hat sich registriert.
APPLIBMT_AppUnregister Eine Anwendung hat sich abgemeldet.
APPLIBMT_AppWantsChangeIconType Eine Anwendung möchte ihren Piktogramm-Typ verändern.
APPLIBMT_AppDidChangeIconType Eine Anwendung hat ihren Piktogramm-Typ verändert.
APPLIBMT_AppDidChangeHidden Eine Anwendung wurde versteckt oder angezeigt (_Hide/_Unhide).
PPLIBMT_LastAppDocChange Die Liste der zuletzt benutzten Dokumente wurde verändert.
Benachrichtigungen über Bildschirmschoner
APPLIBMT_BlankerAllow Der Bildschirmschoner wird aktiviert und kann bei Zeiten in Aktion treten. Allerdings ist weiterhin APPLIBMT_GameModeEntered zu beachten.
APPLIBMT_BlankerDisallow Der Bildschirmschoner wird bis auf weiteres deaktiviert und darf nicht mehr in Aktion treten.
APPLIBMT_BlankerBlank Wenn ein Bildschirmschoner diese Nachricht erhält, soll er in Aktion treten.
APPLIBMT_BlankerMonitorOff Falls der Monitor den Energiesparmodus unterstützt, ist dieser zu aktivieren.
APPLIBMT_BlankerUnBlank Der Bildschirmschoner ist zu unterbrechen/stoppen.

 


Download:enthält:
Download DemoApp.c : Die erste Anwendung
printapps.c : Registrierte Applicationen anzeigen
OeffneInterface.c : Interface öffnen
os4prog-6-application-src.lha,
62.040 bytes


Hauptseite © 2005 All Rights Reserved. Alle Rechte vorbehalten Franzis' Verlag GmbH
Veröffentlichung und Vervielfältigung nur mit schriftlicher Genehmigung des Verlags

Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster AMIGA schicken.
Zuletzt aktualisiert am 18. Februar 2005, Michael Christoph.