Tips und Tricks für GfA-Basic

Gibt es eine GFA-Interpreter-/Compilerversion, die auf dem Mega STE lauffähig ist ? Kann ich diese als Update beziehen und vor allem wo? Man liest, GFA unterstützt den Atari nicht mehr.

Diese Frage erreicht uns sehr häufig. Deshalb hier eine generelle Situationsbeschreibung. Die aktuelle Version des GFA-Basic ist die 3.6TT. Für die Arbeit auf dem Mega STE ist die Version 3.5E erhältlich. Die Firma GFA-Systemtechnik hat den Vertrieb von GFA-Basic an die Firma Richter Distributor, Gevelsberg, abgegeben.

H.Richter Distributor, Hagener Straße 65, 5820 Gevelsberg

Ich schreibe ein Programm, bei dem der Anwender verschiedene Farbbilder (niedrige Auflösung) laden kann. Beim Wechsel zwischen mehreren Bildern ist immer die Farbpalette des zuletzt geladenen Bildes aktiv. Wie kann ich das umgehen ?

Um die verschiedenen Farbregister der einzelnen Bilder anzuwenden, müssen Sie diese vor dem Bildwechsel retten. Hier hilft die Prozedur »get_register«. Sie liest die aktuelle Palette und speichert diese in dem String »sav_reg$«. Benötigen Sie die Farben, setzen Sie diese mit der Prozedur »put_register« zurück. Natürlich lassen sich mit diesen Routinen auch mehrere Farbregister zwischenspeichern und auf Wunsch wieder aktivieren.

PROCEDURE get_register
	LOCAL z&
	LET save-reg$=SPACE$(32)
	FOR M=0 TO 15
		CARD {V:save_reg$ + z&*2 } = XBIOS (7, z&, -1)
	NEXT z&
RETURN
!
PROCEDURE put_register
	XBIOS (6, L:V:save_reg$)
RETURN

Ich habe ein Accessory geschrieben, bei dem ich den Zwischenspeicher für Bildausschnitte mittels »MALLOC(...)« reserviere. Ich benutze »RC_COPY« zum Retten und Restaurieren des Bildausschnitts. Bis auf ein Problem funktioniert alles: Der reservierte Speicherbereich ist nach dem Verlassen eines Programms einfach weg. Wie läßt sich dieser Fehler beseitigen?

Im Grunde läßt sich dieser »Fehler« nicht beheben. Das Betriebssystem ordnet angeforderten Speicher immer der aktiven Anwendung zu. Ein Accessory gilt nun wiederum als Teil der Hauptapplikation. Somit hat die gerade laufende Anwendung Zugriff auf den Speicher. Bei Programmende gibt GEMDOS alle belegten Speicherblöcke frei, auch den des Accessories. Generell kann ein Accessory deshalb keinen dynamischen Speicher verwalten. Die einzige Möglichkeit besteht darin, noch vor der Endlosschleife des Accessories den Speicher fest zu belegen.

Ich möchte unter GFA-BASIC 3.0 den gesamten Bildschirm - unabhängig von dessen Auflösung - invertieren. Wie muß ich vorgehen?

Um Probleme mit verschiedenen Rechnerkonfigurationen zu umgehen, verwenden wir in unserem Listing den Befehl PBOX. Beim Aufrufen der Prozedur übergeben Sie die x- und y-Koordinate sowie Höhe und Breite der zu invertierenden Fläche. Mit »WORK_OUT(0)« und »WORK_OUT(1)« erhalten wir die Bildschirmgröße in Pixel. Beim ersten Aufruf invertiert die Prozedur den Bildschirm. Ein zweiter Aufruf invertiert erneut, der Bildschirm erhält also wieder sein altes Aussehen.

@reverse (0,0, WORK_OUT(0), WORK_OUT(1))
DELAY 5
@reverse (0,0, WORK_OUT(0), WORK_OUT(1))
PROCEDURE reverse (x%, y%, w%,h%, status!)
	BOUNDARY 0
	GRAPHMODE 3
	PBOX x%, y%, ADD (x%, w%), ADD (y%, h%)
	GRAPHMODE1
RETURN

In immer mehr Programmen ist die Verwendung von FlyDials zu sehen. Besonders interessiere ich mich für das freie Verschieben einer Dialogbox auf dem Bildschirm. Wie funktioniert das?

Zunächst müssen Sie Ihren Dialog mit einem »Move_Button« ausstatten. Dieser findet seinen Platz rechts oben in der Box und ähnelt in der Regel einem »Eselsohr«. Wir nehmen hierfür als Objekt ein Image mit dem Objektstatus »Touchexit«. Stellen Sie bei gedrückter Maustaste fest, daß der Move-Button angeklickt ist, verzweigen Sie in die Procedure »fly_dial« und übergeben die Adresse des zu bewegenden Objekt-Baums. Nachdem wir dem Betriebssystern die Mausüberwachung abgenommen und die Maus in eine Hand verwandelt haben, ermitteln wir zunächst die Koordinaten und Ausmaße der Dialogbox. Danach benötigen wir noch die maximale Größe des Desktops (WIND 0). Innerhalb der berechneten Grenzen darf der Anwender jetzt ein Rechteck mit den Ausmaßen der Dialogbox verschieben, solange die linke Maustaste gedrückt bleibt.

Dann wird der alte Dialog gelöscht und die neue x- und y-Koordinate zurückgegeben. Zum Schluß lassen wir den Dialog an der neuen Stelle zeichnen und verwandeln den Mauszeiger wieder in einen Pfeil.

(Sandro Lucifora/ah)

PROCEDURE fly_dial (tree_adr%)
	LOCAL dx%, dy%, dw%, dh%
	!
	WIND_UPDATE(1)
	WIND_UPDATE(3)
	DEFMOUSE 4
	!
	dx% = OB_X (tree_adr%, 0)
	dy% = OB_Y (tree_adr%, 0)
	dw% = OB_W (tree_adr%, 0)
	dh% = OB_H (tree_adr%, 0)
	!
	WIND_GET (0, 4, desk_x%, desk_y%, desk_w%, desk_h%)
	GRAF_DRAGBOX (dw%, dh%, dx%, dy%, desk_x%, desk_y%, desk_w%, desk_h%, lx%, ly%)
	FORM_DIAL (3, 0, 0, 0, 0, dx%, dy%, dw%, dh%)
	OB_X (tree_adr%‚ 0) = lx%
	OB_Y (tree_adr%, 0) = ly%
	!
	OBJC_DRAW (tree_adr%, 0, 7, lx%, ly%, dw%, dh%)
	!
	WIND_UPDATE (2)
	WIND_UPDATE (0)
	!
	DEFMOUSE 0
RETURN


Aus: TOS 12 / 1992, Seite 56

Links

Copyright-Bestimmungen: siehe Über diese Seite