Tips und Tricks für GFA-Basic

Im Icon-Editor des Resource-Construction-Set Interface besteht die Möglichkeit, die Grafikdaten eines Icons als Quelltext zu sichern. Kann man diese Datei in eigene GFA-BASIC-Programme einbinden?

Da die von Interface gespeicherte »ICN«-Datei für die Sprache »C« gedacht ist, kann sie nicht ohne Veränderungen in ein GFA-BASIC- Listing eingebunden werden. In solch einer Datei stehen zum einen Informationen über die Ausmaße des Icons und der daraus resultierenden Datenmenge, zum anderen sind in ihr die eigentlichen Grafikdaten enthalten. Um nun das Icon in eigene GFA-BASIC-Programme einzubinden, müssen diese Daten konvertiert werden, um sie anschließend direkt in den Quelltext einzubinden. Diese Aufgabe übernimmt der Icon- Konverter auf der TOS-Diskette. Er konvertiert eine ausgewählte »ICN«-Datei in eine GFA-freundliche Datei, die Sie mit »MERGE« einfach zuladen. Der Quelltext enthält dann alle Icon-Informationen als Kommentar, die Grafikdaten des Icons hingegen liegen als DATA- Zeilen vor.

In einer Anwendung möchte ich nähere Informationen über die verfügbare Hardware erfahren. Gibt es eine Möglichkeit, während des Programmablaufes zu ermitteln, auf welchem Modell die Software installiert ist?

Um dem Programmierer eine einfache Möglichkeit zu bieten, die installierte Hardware zu erfragen, trägt das BIOS ab TOS 1.06 die sogenannten System-Cookies ein. Diese Cookies (zu deutsch »Kekse«) sind hintereinanderliegend im Cookie Jar zusammengefaßt. Ein Zeiger bei Adresse $5A0 markiert den Anfang des Jars. Falls der Zeiger gleich Null ist, wurde noch kein Cookie Jar installiert. Der Aufbau eines Cookies besteht stets aus einer vier Byte langen Bezeichnung (z.B. »- CPU«) und einem ebenfalls vier Byte langen Wert. Das Ende der Cookie-Liste kennzeichnet ein NULLCookie. Der zugehörige Wert dieses Cookies entspricht der maximalen Aufnahmemenge des Cookie Jars in Byte. Alle Cookie-Namen, die mit einem Unterstrich beginnen, sind für Atari reserviert und enthalten meist genaue Informationen über die installierte Hardware. Mit der Funktion »getcookie« auf der TOS- Diskette ist es möglich, den Wert eines vorgegebenen Cookies zu ermitteln.

Die gängigen C-Compiler bieten dem Programmierer die Möglichkeit, zur Laufzeit mittels einer Variable zu entscheiden, ob das Programm als Accessory oder vom Desktop gestartet wurde. Ist es auch in GFABASIC-Programmen möglich, solch eine Unterscheidung zu treffen?

Um zu unterscheiden, ob ein Programm vom Desktop oder als Accessory gestartet wurde, fragen C-Compilate gleich zu Beginn des Programms das Adressregister A0 ab. Bei einem Accessory enthält dieses Register einen Zeiger auf die Basepage des Programms, bei einem Aufruf aus dem Desktop hingegen liegt dieser Zeiger auf dem Stack. Auf diese Weise ist es problemlos möglich, auf die jeweilige Aufrufart zu reagieren. Da innerhalb von BASIC-Compilaten diese Unterscheidungsart nicht gegeben ist, muß ein anderer Weg gefunden werden, um einen Programmaufruf genauer zu analysieren. Eine von Atari nicht dokumentierte Möglichkeit, die auch innerhalb GFA-BASIC problemlos funktioniert, ist die Abfrage der Adresse der Basepage des »parent process«. Sie ist 32 Bytes oberhalb des eigenen Basepage- Anfangs zu finden. Falls diese Adresse existiert, also ungleich Null ist, folgt daraus, daß das Programm kein Accessory sein kann. Ein Rahmen für ein Accessory unter GFA-BASIC befindet sich auf der TOS- Diskette.

Innerhalb einiger Windows- bzw. Macintosh-Applikationen wird dem Anwender die Dauer komplizierter Berechnungen durch eine animierte Sanduhr verkürzt. Ist es auch mit GFA-BASIC möglich, den Mauszeiger während des Programmlaufes zu animieren?

Eine Animation innerhalb eigener Anwendungen beruht auf dem zyklischen Verändern des Mauszeigers. Diese Veränderung übernimmt die AES-Funktion »GRAF-MOUSE«, die neben acht festdefinierten Zeigerformen auch eine selbstdefinierte zuläßt. Der Funktion übergeben Sie einen Zeiger auf eine Struktur, die neben den Masken- und Grafikdaten auch Informationen über die Lage des Hotspot und die Farbe der Maske bzw. des Zeigers enthält. Die eigentliche Ani- mationsroutine wird mit Hilfe des Befehls »EVERY x GOSUB« fortwährend nach x/200 Sekunden aufgerufen. Da dieser Befehl aber innerhalb von Compilaten nicht korrekt funktioniert, muß man in diesem Fall selbständig darauf achten, daß die Animationsroutine immer nach festen Zeitabständen aufgerufen wird. Der Quelltext auf der TOS- Diskette zeigt eine kleine Animation. Ist das letzte Bild erreicht, beginnt sie wieder mit dem ersten.

Viele Programme stellen beim Öffnen einer Datei eine Dialogbox dar, die mittels eines Balkens die Menge der bereits geladenen Daten prozentual anzeigt. Wie ist es möglich, solch einen Dialog innerhalb eines GFA-BASIC-Programms anzuzeigen?

GFA-BASIC stellt leider keinen Befehl zu Verfügung, der eine Prozentanzeige als GEM-Dialog realisiert. Doch mit Hilfe einiger AES- Aufrufe läßt sich diese problemlos selbst programmieren. Unser Dialog besteht aus einer maximal 30 Zeichen langen Überschrift, die dem Anwender mitteilt, warum oder auf was er im Moment wartet. Außerdem enthält sie zwei Prozentanzeigen, die die schon gelesene Datenmenge veranschaulichen. Dies geschieht zum einen grafisch mit Hilfe eines stetig wachsenden Balkens, zum anderen durch einen ebenfalls stetig größer werdenden Zahlenwert. Zur besseren Flexibilität binden wir den Dialog nicht wie üblich als externe Resource ein, sondern direkt im Quelltext als DATA-Zeilen. Die Daten werden in ein Feld eingelesen, wobei die beiden Stringobjekte eine feste Adresse erhalten, die auf die Überschrift beziehungsweise auf die Dezimalzahl zeigen. Anschließend rettet die Routine den Hintergrund und zeichnet den Dialog zentriert. Während des fortschreitenden Vorgangs zeichnen wir nicht mehr den kompletten Dialog, sondern nur noch den wachsenden Balken sowie den neuen Zahlwert. Wenn der Wert 100% erreicht worden ist, wird die Box wieder gelöscht und der Anwender kann mit seiner Tätigkeit fortfahren.


Manuel Hermann/ah
Aus: TOS 05 / 1993, Seite 59

Links

Copyright-Bestimmungen: siehe Über diese Seite