Malprogramm TT Paint 256, Teil 1

Seit die ersten Meldungen über den Falcon 030 in der Szene herumgeistern, ist der TT seinen Flaggschifftitel los. Dafür ist er wenigstens verfügbar und die Preise sinken. Leider gibt es derzeit so gut wie keine Grafiksoftware.

Die zusätzlichen Grafikmodi, die der Atari TT neben den drei Auflösungen der »Kleinen« beherrscht, eröffnen dem Anwender vielfältige Möglichkeiten: Die hohe TT-Auflösung mit ihren 1280 x 960 Bildpunkten eignet sich hervorragend für DTP und CAD, aber auch für zukünftige Multitasking-Fähigkeiten unter MultiTOS bzw. unter Unix System V mit X-Windows oder OSF/Motif. Die mittlere TT-Auflösung mit ihren 640 x 480 Bildpunkten bei 16 Farben ist ideal für all jene Anwendungen, die sich auch in der hohen ST-Auflösung am wohlsten fühlten: Textverarbeitung, Datenbanken, MIDI, 3-D-Grafik, Softwareentwicklung etc. Die besonders farbenprächtige TT-Low-Auflösung 320 x 480 Bildpunkte (bei 256 Farben) dagegen lassen die meisten Anwendungen links liegen, obwohl sie sich für pixelorientierte Malprogramme ja geradezu aufdrängt.

Wir haben ein Rastergrafikprogramm entworfen, das alle 256 Farben der niedrigen TT-Auflösung voll nutzt. In den kommenden Folgen wird mit »TT Paint 256« ein einfaches aber brauchbares Werkzeug entstehen, das folgende Malfunktionen beherrscht: Freihandzeichnen, Linien, Rechtecke, Ellipsen, Polygon, Text, Füllfunktionen und eine Sprühdose. Zum Bearbeiten von Ausschnitten wird das Programm einen Zoom besitzen, Farbpalettenmanipulation, es wird Farbverläufe berechnen, variable Pinselgrößen und einen variablen Sprühradius besitzen. Logischerweise kann es auch Dateien laden und speichern.

TT Paint 256 läßt sich komplett mit der Maus bedienen, einzelne Menüpunkte lassen sich mit der linken Maustaste selektieren. Das Programm trennt Zeichen- und Verwaltungsfunktionen: Speichern oder Laden führt es sofort aus, während die Malfunktionen erst nach Umschalten zum Arbeitsblatt zur Verfügung stehen.

Der Wechsel zwischen Arbeitsblatt und Toolbox geschieht stets mit der rechten Maustaste. Die Trennung von Toolbox und Arbeitsblatt gestattet eine große Arbeitsfläche bei übersichtlichem Menüaufbau. Die Farben werden in einem Farbkasten dargestellt und können mittels Schieberegler gemischt werden. Die Berechnung von Farbverläufen ist ebenfalls vorgesehen.

Im Lauf des Kurses werden wir den Funktionsumfang des Malprogramms Schritt für Schritt erweitern, so daß Sie von Folge zu Folge neue Funktionen strukturiert und übersichtlich ins Gesamtlisting einfügen können. Um so vorgehen zu können, empfiehlt sich natürlich ein Gerüst, ein Programmskelett, in dem bereits alle Funktionen deklariert und hülsenhaft implementiert sind.

So erklärt sich auch das Listing der Folge 1, das aus Platzgründen lediglich den Programmnamen und die Funktionsköpfe enthält (durch die hohe Programmlänge von insgesamt rund 2500 Zeilen mußten wir besonders in Folge 1 auf vieles verzichten). Später hinzukommende Features können Sie ja ganz einfach integrieren. So erhalten Sie am Ende jedes Kursteils ein lauffähiges Programm.

1,6 MByte (vier Bildschirmseiten mit jeweils 150 KByte und 1 MByte Stack für den Füll-Algorithmus) werden zur Funktionsfähigkeit des Programms benötigt. Der hohe Speicherbedarf ist -, einmal davon abgesehen, daß der ST nicht die TT-Low-Resolution beherrscht - der Grund dafür, daß sich TT Paint 256 ohne wesentliche Konzept-Änderungen nicht für die »normalen« STs eignet.

Die Leistungsfähigkeit des Prozessorgespanns 68030/ 68882 läßt eine hardwarenahe Programmierung (Assembler) zu einem Erlebnis werden, für normale Applikationen bietet sich jedoch der Einsatz einer Hochsprache an. Besonders die umfangreichen, im Betriebssystem verankerten und leicht verwendbaren Funktionsbibliotheken gestatten ein schnelles und bequemes Programmieren leistungsfähiger und eleganter Software.

Aus diesem Grund haben wir die moderne Hochsprache »C« als Programmiersprache verwendet, als Entwicklungssystem kam »Pure C« zum Einsatz, das eine sinnvolle und leistungsfähige Neuauflage des bekannten »Turbo C 2.0« darstellt. Die Merkmale des Atari TT wurden bei »Pure C« voll berücksichtigt.

Der Schwerpunkt des Kurses liegt in der Programmierung typischer Malfunktionen, auf eine eingehende Beschreibung der GEM-Funktionen verzichten wir, in dieses Themengebiet können Sie sich leicht einlesen. Außerdem setzen wir voraus, daß Sie bereits mit den Strukturen und der Syntax von C vertraut sind. Folgende Hard- und Softwarekonfiguration sollte vorhanden sein: Atari TT030/4 mit Festplatte und Farbmonitor. Außerdem ein C-Compiler mit 68030/68882-Optimierung, GEM-Library (z.B. PURE C). Empfehlenswert ist außerdem der Softwarebeschleuniger NVDI 2.0 von Bela.

Obwohl sich unsere Ausführungen auf Pure C beziehen, sollte es kein Problem bereiten, einen anderen C-Compiler zu verwenden. Die Bedienung des Compilers können Sie in den jeweiligen Handbüchern nachlesen. Die Pure-C-spezifische Projektdatei drucken wir nicht mit ab, die notwendigen Libraries entnehmen Sie den Includes.

Das Listing des ersten Teils wird den Compiler veranlassen, einige Warnings auszugeben. Dies ist völlig einleuchtend, da z. B. alle Variablen deklariert, aber nicht verwendet werden. Solche Warnungen können aufgrund des gewählten Kursaufbaus nicht vermieden, aber ignoriert werden. Nach Beendigung des gesamten Kurses sollte ein fehlerfreies Programm entstanden sein.

Einige Erklärungen zum Programmskelett, dem Listing des ersten Teils: Zunächst erfolgt die Vereinbarung aller globalen Variablen und Funktionen. Dann folgen zwei GEM-Routinen zur Verwaltung der Applikation, »open_work()« und »close_work()«. Die Routine »set_clipping_rect()« setzt das sog. Clipping-Fenster auf die maximal zulässigen Bildschirmkoordinaten. Clipping bedeutet, daß grafische Primitive pixelgenau an den Rändern des Clipping-Fensters gekappt werden. Dies ist notwendig, weil sonst eine Grafikfunktion wie z. B. Kreiszeichnen unerlaubte Koordinaten annehmen kann und so ganze Speicherbereiche außerhalb des Bildschirmspeichers zerstören würde. Interessanter ist die Funktion »Memory«, die bei Erfolg einen Pointer auf einen reservierten Speicherbereich liefert. Sie ist speziell zur Anforderung von Bildschirmseiten konzipiert, da die Startadresse des Bildschirmspeichers leider an einer 256-Byte-Grenze liegen muß.

Dies wird folgendermaßen bewerkstelligt: Zur Länge des zu reservierenden Speicherbereichs wird 256 addiert. Dieser Bereich wird durch die C-Funktion »malloc« reserviert. Der zurückgelieferte Pointer wird abgespeichert, weil er später zur Freigabe des Bereichs benötigt wird. Nun werden die unteren 8 Bit des Pointers ausmaskiert, dadurch verringert sich die effektive Adresse um 0 bis 255 Byte. Deshalb wird anschließend 256 addiert, um mit Sicherheit innerhalb des reservierten Bereichs zu liegen. Die korrekte Begrenzung des Speicherbereichs ist durch die Addition von 256 zu der gewünschten Länge vor malloc immer garantiert.

Die Funktion TT-Paint ist im ersten Teil nur mit einer Meldung bestückt. Die Hauptfunktion »main()« überprüft zuerst den aktuellen Bildschirmmodus, um ggf. eine Fehlermeldung auszugeben und das Programm zu beenden. Anschließend versucht die Routine, die Applikation anzumelden. Gelingt das nicht, wird das Programm ebenfalls terminiert. Dann fordert das Programm Speicher für den Stack des Füll-Algorithmus an. Ein ganzes Megabyte ist für den einfachen pixelorientierten (aber interessanten) Algorithmus notwendig. Nun werden drei Bildschirmseiten reserviert, wobei je eine für Arbeitsblatt, Zoom und Pufferung nötig ist. Sollte eine Speicheranforderung mißlingen, bricht das Programm ab und kehrt zum Desktop zurück.

Die aktuelle Farbtabelle wird gesichert, Log- und PhysBase erfragt und in die Hauptroutine TT-Paint verzweigt. Diese Funktion wird nur bei Ende des Programms verlassen. Die Terminierung erfolgt durch die ordnungsgemäße Freigabe des Speichers, der Restauration der Farbpalette und der Abmeldung der Applikation.

Jetzt können Sie loslegen. Zugegeben, das Listing des ersten Teils verlangt viel Tipparbeit mit wenig sichtbaren Resultaten, es bietet aber einen Vorgeschmack auf die folgenden Kursteile und ermöglicht sinnvolle, einfache Erweiterung. Übrigens: Wer weder Zeit noch Lust hat, den ganzen Quellcode runterzuhämmern, schickt eine formatierte Leerdiskette in einem adressierten und frankierten Rückumschlag an die Redaktion und erhält postwendend den Original-Quellcode - Stück für Stück.

TT Paint Source

Carsten und Hendrik Behrens/hu



Aus: ST-Magazin 08 / 1992, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite