Application Construction System: Die Revolution der Programmentwicklung

Unter dem Application Construction System, kurz ACS, darf man eine konsequente Weiterentwicklung der berühmt berüchtigten Resource Construction Sets verstehen. Das Ziel des Entwicklers war, GEM- Programmierung auf dem Atari so stark zu vereinfachen, daß selbst Programmieranfänger ohne Probleme diese komplexe Oberfläche beherrschen können und Profis nicht mehr dieser ständig sich wiederholenden Aufgabe Rechnung tragen müssen. Wie dieses Ziel erreicht werden soll, berichtet unser Artikel.

Einer der wichtigsten Aspekte der Programmierung ist die Einbeziehung des Benutzers in den Programmablauf. Es gibt auch Programme, die diese Interaktion nicht benötigen. Das sind beispielsweise Compiler, Textformatierprogramme und die meisten Kommandos einer textorientierten Shell. Der weit aus größte Anteil lebt aber von der Kommunikation mit dem Benutzer. Beispiele dafür wären Textverarbeitungen, CAD und eigentlich alle GEM-Programme, die Sie vom ST her kennen.

Im Laufe der Jahre hat sich die Art der Benutzerführung grundlegend verändert: weg von der Tastatureingabe hin zur Bedienung mit der Maus mit Hilfe einer grafischen Oberfläche. Während sich bei den PCs dieser Wandel sehr langsam vollzog, forcierten neue Computer, wie der Macintosh und kurz danach der Atari ST, die eine grafische Benutzeroberfläche bereits vom Betriebssystem aus anboten, diese Entwicklung. Was beim Macintosh dank der guten Dokumentation und der fast aus schließlich professionellen Entwickler sofort geklappt hat, ließ auf dem Atari auf sich warten: Viele Programme benutzten das eingebaute GEM nicht. Der Grund war mitunter, und damit wären wir schon beim ACS, die zu komplexe Behandlung der Fenster, Icons oder Menüs. Dabei unter scheiden sich diese von Programm zu Programm nur durch ihren Inhalt, nicht aber durch ihre Form. Genau hier setzt ACS an.

Geliefert wird es auf einer Diskette mit gebundenem, 148seitigen Buch für DM 198,-. Das Programm läuft unter Umständen zwar auch auf einem Atari mit 512 KB und einem Laufwerk, dies ist aber selten sinnvoll, da Programmentwicklung ohne Festplatte und 1MB Speicher nahezu unmöglich ist. Ferner benötigt man eine Auflösung von mindestens 640x200 Pixeln und einen Turbo- oder Pure-C-Compiler. Anpassungen an weitere C-Compiler sind im Gange, und was vor allem Pascal-Anhänger freuen dürfte, ist die Überlegung, ACS an MAXON Pascal an zupassen. Selbstverständlich läuft das Programm auch auf einem TT und unter Farbe.

Das Konzept

Der Weg von einer Idee bis zum fertigen Programm unter ACS ist folgender: In einem Editor erstellt man visuell die Benutzeroberfläche wie in einem RCS (ACS liest übrigens RCS-Dateien, die dann weiter bearbeitet werden können). Der er zeugt als Ausgabe eine C-Datei, die zusammen mit dem restlichen Programm übersetzt werden muß. Das neue ist, daß das Hauptprogramm, also die Ereignis schleife, vom ACS bereitgestellt und der Programmierer erst belästigt wird, wenn ein Ereignis aufgetreten ist, das auch wirklich besonderer Behandlung würdig ist. Der Rest wird von einer mitgelieferten Bibliothek erledigt. Diese enthält sowohl ACS-interne Funktionen als auch welche, die vom Benutzer verwendet werden können.

Welche Vereinfachung das als Folge hat, wird erst deutlich, wenn man sich das mitgelieferte Beispiel ‘Hello World' (Listing 1) anschaut. Sicher, auf den ersten Blick ist dieses Programm etwas verwirrend. Wenn man aber bedenkt, daß es nach der Übersetzung ein vollständiges GEM- Programm (Bild 1) mit eigenem Desktop, Menüleiste mit Tastenkürzeln, Icons und vollwertigen Fenstern erzeugt, ist der Auf wand verschwindend gering.

Um zu verstehen, wie solch ein „komplexes“ Programm aus nicht einmal 50 Zeilen Code entstanden ist, muß man das Konzept hinter ACS kennen. Es bietet ein generisches Desktop an, das bei jeder Applikation identisch ist und bei Bedarf gegen ein eigenes ausgetauscht werden kann. Der Vorteil ist enorm: das Desktop verwaltet selbständig eine Menüleiste, mit der man solch notwendige und wiederkehrende Operationen wie Löschen, Beenden oder Fensterwechseln erledigen kann. Außerdem ist die Verwaltung der Icons die Sache des Desktops.

Die Fenster bekommen mit ACS wieder etwas von ihrem alten Glanz zurück. Wie einige wissen, waren Fenster ursprünglich dazu bestimmt, GEM-Objekte zu enthalten. Das bekannteste Beispiel dieser Artist das Datei-Desktop. Man kann damit nicht nur einzelne Objekte darstellen, sondern auch komplexe Applikationen wie Textverarbeitungen oder Zeichenprogramme in Fenstern unterbringen. Zudem sind damit problemlos unmodale Dialoge zu verwirklichen. Unmodale Dialoge sind Dialogboxen, die in ein Fenster ausgegeben werden und nicht erst beendet werden müssen, bevor man andere Dinge erledigen kann. Das bedeutet im Klartext, daß zum Beispiel die Menüleiste weiterhin zur Verfügung steht. ACS verwaltet dabei alles (zum Beispiel Redraw, Scrollen, Toppen) selbständig. Doch auch hier kann auf Wunsch eingegriffen und das Fenster auf eigene Bedürfnisse angepaßt werden.

Ansonsten unterstützt ACS die vom Macintosh bekannten Check- und Radio-Buttons, Menüleisten in Fenstern, hierarchische Pop-Up-Menüs und noch viel mehr. Die wichtigste Neuerung allerdings ist die Möglichkeit jedem Objekt direkt eine Routine zuzuweisen, die ausgeführt wird, wenn der Benutzer einen Mausklick auf das Objekt ausübt. Dies ist auch bei Ziehen von Objekten vorgesehen.

Der Editor

Das eigentliche Programm des Pakets ist der ACS-Editor. Wie bereits gesagt, ist es das Gegenstück zum RCS. Man sollte außerdem nicht verschweigen, daß der Editor mit sich selbst geschrieben ist, so daß man gleich ein Gefühl für das Aussehen eigener Programme bekommt. Eine Konsequenz daraus ist, daß ACS durch einfaches Umbenennen in ein Accessory gewandelt und daher zum Beispiel aus dem C-Compiler benutzt werden kann. Lästiges Speichern, Verlassen, Laden ... entfällt also. Nach dem Erzeugen einer neuen Datei öffnet sich das ‘Generelles’-Fenster (Bild 2). In diesem befinden sich Icons, die einzelne Editoren repräsentieren. Fangen wir vorne an. Ein Klick auf das ‘Verhalten’-Icon bringt eine Dialogbox (hier sind immer unmodale Dialoge gemeint) her vor, in der man zum Beispiel einstellen kann, wie der Eintrag des Programms lauten soll, falls es als Accessory gestartet werden soll, ob Dialoge zentriert oder relativ zur Mausposition ausgegeben wer den oder wie weit ein Fenster außerhalb des Bildschirms verschoben werden kann. Da es ob des modularen Konzepts durch aus Vorkommen kann, daß man mehrere ACS-Dateien gleichzeitig in ein Programm integriert, kann die Ausgabe dieser globalen Daten unterdrückt werden, um nicht in Konfliktsituationen zu gelangen.

Bild 2: Alle Editoren im Generelles-Fenster

Das zweite Icon öffnet den Fenster-Editor (Bild 3). Hier kann man angeben, auf welche Koordinaten das Fenster beim öffnen ausgegeben werden soll, ob und wie groß ein eventuelles Raster sein soll (wichtig für alle Ausgabeoperationen, die ab einer Wortgrenze schneller getätigt werden) und mit welchen Attributen (zum Beispiel ‘Name’, ‘Füller’ oder ‘Vslide’) das Fenster gezeichnet wird. Zusätzlich zu den bekannten Attributen existieren welche, die speziell an ACS-Fenster angepaßt sind. Da GEM von Haus aus nur sieben Fenster zuläßt, im ACS durchaus aber bis zu 128 geöffnet sein könnten - was mit WINX auch geht - werden zuletzt benötigte geschlossen und durch ein Icon auf dem Desktop ersetzt. Ein Doppelklick auf dieses läßt das zugehörige Fenster erscheinen und stellt das Icon hell (Geist-Icon) dar. So verhalten sich ‘normale’ ACS-Fenster.

Dies ist jedoch nicht immer erwünscht, und so erlaubt ACS auch Fenster, die nicht automatisch geschlossen werden dürfen, und welche, die kein Icon besitzen. Da ACS auch Nachrichten versenden kann, muß man hier einstellen, ob das Fenster Objekte überhaupt annimmt oder sie gleich verweigert.

Hat man eine Menüleiste erstellt und möchte nun diese innerhalb des Fensters benutzen können, so zieht man einfach ihr Symbol aus dem Menü- in den Fenster- Editor, und der entsprechende Eintrag wird automatisch korrekt ausgefüllt. Dieser sehr bequeme Vorgang kann auch genutzt wer den, um anzugeben, was denn der Fensterinhalt sein soll und welches Icon das Fenster repräsentiert, falls dieses geschlossen ist. Der Fensterinhalt ist, wie oben schon bemerkt, in den meisten Fällen ein GEM-Objekt, das nun nicht direkt auf den Bildschirm, sondern in das Fenster gezeichnet wird. Hier erlaubt ACS eine sehr schöne Option: hat das Objekt Kinder, können diese als Elemente einer Liste auf gefaßt und dann automatisch so im Fenster plaziert werden, daß sie möglichst wenig Platz einnehmen. Diese Möglichkeit werden die Benutzer von Gemini kennen und zu schätzen wissen.Jedes Fenster besitzt andere Eigenschaften und muß auch entsprechend behandelt werden. ACS kann dies nicht immer selbst erledigen, und so kann man im Fenster-Editor auch eigene Funktionen angeben, die Standardfunktionen wie zum Beispiel ‘open’, ‘create’ oder ‘topped’ ersetzen oder ergänzen. Die einzige Routine, die immer vom Benutzer geschrieben werden muß, ist die ‘create’-Routine. Sie erzeugt das Fenster und plaziert gegebenenfalls ein Icon auf dem Desktop (siehe ‘hello_make\ Listing 1).

Mit den nächsten beiden Editoren kann man alles erstellen, das nur in entfernter Weise etwas mit Menüs zu tun hat. Das sind zum einen die ganz normalen Menü leisten, wie man sie aus jedem GEM- Programm kennt. Da diese aber gegen das Multitasking- Prinzip verstoßen, wurden auch Menüleisten in Fenstern ermöglicht. Zwischen diesen beiden Typen existieren keine Unterschiede, so daß sie mit einem Editor, der dem des RCS gleicht, bearbeitet werden können.

Die dritte Art sind die Pop-Up-Menüs. Sie sind hierarchisch aufgebaut, d.h. daß sie auch Untermenüs, die eingeblendet werden, sobald sich der Mauszeiger über einem Titel befindet, enthalten können. Sie können auf Wunsch des Programmierers sowohl relativ zu den Mauskoordinaten als auch an jede beliebige Stelle auf dem Bildschirm gezeichnet werden. Der entsprechende Editor funktioniert ähnlich wie der Menüleisten-Editor. Zu den Editoren ist noch zu sagen, daß sie sehr flexibel sind, d.h. es können zum Beispiel auch Bilder (Icons) in einem Menüeintrag stehen.

Bild 5: Fensterroutinen und die entsprechenden Referenzen

Bild 4: Die Toolbox im Objekteditor

Der Objekt-Editor entspricht dem Dialog-Editor des RCS. Alles was mit einem RCS gemacht werden kann, kann man hier auch tun, und mehr. Klickt man auf das passende Icon und erzeugt ein neues Objekt, öffnet sich neben einer leeren Dialogbox auch ein Teilefenster (Bild 4). In diesem befinden sich alle Objekttypen, die benutzt werden können. Neben den schon bekannten treffen wir auf vier neue: es sind der Radio- und Check-Button vom Macintosh, ein sogenannter Innerframe, das ist ein Rahmen, der um zusammengehörige Elemente gezogen werden kann und eine Überschrift enthält, und das ‘USERDEF’-Objekt.

Durch einfaches Herüberziehen aus dem Teilefenster werden neue Objekte kreiert, wobei dieses Fenster nicht erst selektiert werden muß. Ist es erst einmal plaziert, kann dieses Objekt nun vergrößert, kopiert oder genauer bestimmt werden. Zu bestimmen sind hier zum Beispiel die üblichen Flags und Stati, die allerdings in erweiterter Form auftreten - entsprechend den neuen Objekten. Diese können nun auch verschiebbar sein, andere Objekte annehmen oder defaultbar sein, d.h. daß man den Default-Button selbst, während der Ausführung des Programms auswählen kann.

Ganz neu hinzugekommen ist der sogenannte "Refs’-Bereich. Hier gibt man die Funktionen an, die ausgeführt werden sollen, falls das Objekt angeklickt oder gezogen wurde. Weiterhin finden drei benutzerdefinierte Werte hier Platz zur Angabe, die später notwendig sein mögen, und ein Tastencode, der beim Drücken der Tastenkombination einen Klick auf das Objekt auslöst. Objekte können auch automatisch zentriert, rechts-, linksbündig oder füllend ausgerichtet werden. Und neben den bekannten Funktionen wie Verstecken oder Nach-oben-holen, gibt es auch das Ver- und Entriegeln. Dieses Feature ist besonders für modular aufgebaute ACS-Dateien wichtig, denn es ermöglicht, daß einmal fertiggestellte komplexe Objekte als ein Ganzes betrachtet werden können.

Es besteht also keine Gefahr, daß innerhalb des Objekts etwas verschoben wird. Falls das Objekt doch noch verändert werden soll, kann es selbstverständlich entriegelt werden.

Es ist fast schon überflüssig zu sagen, daß auch das Sortieren von Objekten in horizontaler oder vertikaler Ordnung möglich ist.

Der Alertbox-Editor erlaubt die Eingabe von fünf Strings, die im Endergebnis den Zeilen entsprechen und dem passenden Icon. Die Alarmboxen werden im Gegensatz zu anderen Dialogen modal ausgegeben und können sofort in ihrer endgültigen Form betrachtet werden.

Die nächsten großen Editoren, die Ähnlichkeiten aufweisen, sind die Piktogramm-Editoren. Dazu gehören der Icon-, der Image- und der Maus-Editor. Sie unterscheiden sich nur in Kleinigkeiten; so kann man im Image- und Mauseditor zum Beispiel keinen dazugehörenden Text oder Buchstaben angeben, und im letzteren ist die Bildgröße konstant. Dort kann man aber den Aktionspunkt der Maus angeben. Die Funktionen beschränken sich zwar auf punktweises Zeichnen, es ist aber möglich, IMG-Dateien nachzuladen und somit auf komfortablere Eigenschaften eines Zeichenprogramms zuzugreifen. Die erstellten Mausformen können in eine Liste eingetragen werden, die schon die üblichen 8 Formen (Pfeil, Bienen ...) enthält. Sie können sehr schön eingesetzt werden, indem sie sich über verschiedenen Objekten ändern, sobald die Maus in ihren Bereich eintritt.

Der letzte Editor im Bunde ist der Text-Editor. Mit ihm ist es möglich, freie Strings zu erzeugen, die später vielleicht gebraucht werden.

Neben den aufgezählten, enthält das ‘GENERELLES’-Fenster noch drei read-only-’Editoren’. Sie geben Auskunft über die verwendeten Tedinfos, Userdefs und die Referenzen. Referenzen sind alle Benutzerfunktionen, die in den Editoren angegeben wurden (Bild 5). Es ist somit ein leichtes, nachzuschauen, welche Routine noch nicht geschrieben wurde.

Die C-Bibliothek

Die zur Realisierung des ACS-Konzepts benötigten Funktionen werden in Form einer Bibliothek dem Benutzer angeboten. Diese sind teilweise unverzichtbar, da eigene Objekttypen auch speziell behandelt werden wollen und teilweise einfach nur praktisch. Der Entwickler des ACS hat sie hinzugefügt, damit Programmierer das Rad nicht von neuem erfinden müssen. Die fast 80 Routinen sind die Lösung für fast jedes Problem, das bei der Entwicklung entstehen kann: Fenster öffnen, toppen, Nachrichten versenden, Mäuse verstecken, Objekte zeichnen, neue erzeugen und noch viel mehr.

Das Handbuch

Das Handbuch gliedert sich in sechs Kapitel. In einer Einführung wird kurz erklärt, was ACS ist, wie es installiert wird, und es wird gleich ein kleines Programmbeispiel angegeben, das zeigen soll, wie einfach sich GEM-Programme damit erstellen lassen. Da nach wird das Konzept hinter ACS erklärt und gezeigt, wie die einzelnen Editoren funktionieren und wie sich das Entwickeln eigener Programme gestaltet. Den Rest des Buches bildet ein Referenzkapitel, das alle wichtigen Daten über die Programmstruktur und die C-Bibliothek enthält.

Ganz nach dem Prinzip: „Ein Bild sagt mehr als tausend Worte“, hat man das Handbuch sehr gut illustriert. Es ist also oft gar nicht nötig, das Programm nebenher auf dem Computer laufen zu lassen. Leider weist das Buch manchmal Schwachstellen auf, wenn es um die Übersichtlichkeit geht: Die Überschriften werden einfach zu oft gesetzt; man weiß dann nicht, ob es sich um ein übergeordnetes Thema oder nur um eine Erklärung handelt.

Auch inhaltlich gibt es hier und da Probleme. Einige Sachen sind nicht gut genug erklärt oder in einer Sprache, die manchmal sogar Kryptographen zu denken gibt. Abseits dieser kleinen Schwächen ist das Handbuch durchaus brauchbar. Einen Ersatz für ein gutes GEM-Buch bildet es freilich nicht.

Lobeshymne

Es ist sicher so, daß ein Tool wie ACS, das die Programmierung so grundsätzlich umkrempelt, erst einmal kritisch unter praktischen Gesichtspunkten untersucht werden muß. Aber ich für meinen Teil muß zugeben, daß ich sofort von diesem Programm begeistert worden bin. Es ersetzt die völlig veralteten RCS- Programme, die sich gegenseitig ergänzen und preislich nicht weit unter dem ACS liegen, durch ein (für den Atari) völlig neues, durchdachtes und erweiterbares Konzept. Es gibt nun absolut keinen Grund mehr, an GEM vorbeizuprogrammieren. In Bild 6 sehen Sie ein Beispiel für einen Prototyp eines Programms, daß innerhalb kürzester Zeit erstellt wurde. Wir werden in den nächsten Ausgaben eine Artikelreihe veröffentlichen, die sich mit der Entwicklung unter ACS beschäftigt.

Fazit

Lohnt sich ACS auch für Sie? Wenn Sie Hobbyprogrammierer sind oder werden möchten und es satt haben, Programme immer nur ohne grafische Benutzeroberfläche zu schreiben, sollten Sie sich ACS beim Händler anschauen. Programme, die Sie mit ACS schreiben, bekommen einen voll professionellen Anstrich und sind vor allem von jedermann zu bedienen. Es ist dadurch viel einfacher, Ihr Werk vielleicht auch zu verkaufen, womit die Unkosten für das ACS wieder wettgemacht werden können. Die Profis aber, die sowieso schon immer unter GEM programmiert haben, werden wissen wollen, ob sich der Umstieg lohnt.

Programme, die konventionell unter GEM laufen, sollten meiner Meinung nach nicht extra umgeschrieben werden. Der Produktivitätszuwachs bei neuen Werken aber ist so groß, daß es sich kaum noch lohnen dürfte, ohne ACS zu arbeiten.

Aus presserechtlichen Gründen sind wir zu folgendem Hinweis verpflichtet: MAXON Computer als Herausgeber dieser Zeitschrift ist gleichzeitig Co-Vertrieb des beschriebenen Programms ACS.

/*
#include <acs.h> 
#include <hello.h>

static Awindow *hello_make(void *not_used); 

#include <hello.ah>

static Awindow *hello_make(void *not_used)
/*
* Erzeuge Hello World Fenster
*/ 
{
	Awindow *wi;

	wi = Awi_create(&HELLO); 
	if(wi == NULL)
		return(NULL);
	(wi->open)(wi);
	/* öffne gleich, auch als accessory */ 
	return(wi);
}
int ACSinit(void)
/*
* Doppelklick auf NEU erzeugt ein neues Fenster
*/
{
	Awindow *window;

	window = Awi_root(); /* root window */

	if(window == NULL)
		return(FAIL); /* lege NEU Icon an */

	(window->service)(window, AS_NEWCALL, &HELLO, create); 
	window = &HELLO;
	(window->create)(NULL); /* sofort ein Fenster erzeugen */
	return(OK);
}

So einfach erstellt man GEM-Programme mit ACS.



Aus: ST-Computer 02 / 1992, Seite 41

Links

Copyright-Bestimmungen: siehe Über diese Seite