GFA-BASIC nach C Konverter Version 3.1 Professional - Verwandlungskünstler

Vielen GFA-BASIC-Programmierern droht der Anschluß an aktuelle Entwicklungen wie MultiTOS, MINT, FSM-GDOS, Grafikkarten und neue ATARI-Modelle durch prinzipielle Einschränkungen von BASIC sowie mangelnde Pflege von GFA-BASIC für den ATARI verlorenzugehen. Auch die Umsetzung auf andere Rechnersysteme gestaltet sich schwierig.

Neben den Fehlern in GFA-BASIC selbst wird auch durch die gegenüber anderen prozeduralen Sprachen wie C, Pascal oder Modula fehlenden Sprachelemente wie abstrakte Datentypen und Modulkonzepte mit zunehmender Programmgröße die Entwicklung schwieriger. Um hier einen Ausweg zu bieten und eine zeitraubende Neuentwicklung in C zu ersparen, dient der „GFA-BASIC nach C Konverter“ von Cicero.

Lieferumfang

Der Konverter selbst läuft im GEM-Gewand in beliebigen Auflösungen ab ST mittel auf allen ST/STE/TT-Modellen und benötigt einen RAM-Ausbau von 1 MB, bei größeren Projekten besser mehr.

Neben Programm- und Bibliotheksdiskette wird ein fast 500 Seiten starkes Handbuch im DIN-A5-Ringordner mitgeliefert, das über einen ausführlichen Referenzteil und Index verfügt. Zwar ist die Schrift zum Teil recht klein geraten, es fehlen Grafiken, und an manchen Stellen wäre eine klarere Strukturierung im sehr technisch formulierten Handbuch wünschenswert, doch werden Problembereiche bei der Konvertierung sowie Funktionen des Konverters meist klar und umfassend dargestellt.

Anwendung

Es gibt zwei Zielsetzungen des Konverters, zum einen die Weiterentwicklung von Programmen in BASIC, wobei die Konvertierung aus Gründen der besseren Codeerzeugung und Fehlerprüfung von C-Compilern, ggf. Ausnutzung einer FPU sowie Portierbarkeit, erfolgt, zum anderen die endgültige Umsetzung, bei der der C-Quelltext die Grundlage für die weitere Entwicklung sein soll.

Um das erste Ziel zu erreichen, existieren derzeit Bibliotheken im Turbo- bzw. Pure-C Format (für Lattice C in Vorbereitung), die den Befehlssatz von GFA-BASIC in C auf dem ATARI nachbilden sowie entsprechende für MS-DOS und Windows. Weitere sind für den NeXT und Apple Macintosh in Arbeit. So lassen sich auf der Grundlage eines GFA-BASIC-Ausgangsquelltextes Programme für verschiedene Rechnerfamilien pflegen, wobei neben der Programmstruktur auch einheitliche Grafikbefehle und Menüs zur Verfügung stehen und man weiterhin Gebrauch von der einfachen und mächtigen Sprache GFA-BASIC machen kann.Mehr dazu im zweiten Teil des Testberichtes.

Unterstützt wird dieses Ziel noch durch die Konstruktion abstrakter Datentypen, die in GFA-BASIC als einzelne Felder definiert, markiert und vom Konverter im C-Source zu echten Datenstrukturen zusammengefaßt werden (s. Beispiel).

Die zweite Einsatzmöglichkeit zur Erzeugung eines weiter zu pflegenden C-Quelltextes erfordert einige Nacharbeit, denn auf das spätere Aussehen kann bis auf den Klammerungsstil bei Anweisungsblöcken kaum Einfluß genommen werden. Bei der Beeinflußbarkeit solcher stilistischen Dinge, die durch die bessere Lesbarkeit eine einfachere Wartung er möglichen würden, will Cicero aber einen Schwerpunkt zukünftiger Versionen setzen.Unterstützung bei der Vielzahl an Bibliotheksfunktionen erhält man durch die in Pure C einzubindende Online-Hilfe.

Modularisierung

Der Konverter bietet eine automatische Modularisierung an, die den BASIC-Source in einzelne Module mit den entsprechenden Schnittstellen für Variablen und Funktionen unterteilt. Noch erfolgt die Trennung anhand der einstellbaren Zeilenanzahl, es soll jedoch einmal die Möglichkeit geben, im GFA-Source Trennstellen anzugeben.

Wie schon bei kompletten Programmen werden sämtliche Module und Bibliotheken in eine Turbo-/Pure-C-Projektdatei eingetragen, so daß einem sofortigen Compiler-Lauf nichts im Wege steht.

Aufwand

Nun die entscheidende Fragestellung, nämlich nach dem notwendigen Aufwand, um aus dem BASIC-Quelltext ein lauffähiges Äquivalent in C zu erhalten. Der Konverter unterstützt, von wenigen Ausnahmen wie z.B. EVERY/AFTER und RESUME abgesehen, sämtliche Befehle von GFA-BASIC 3.0.

Zunächst einmal gilt es, einige sprachbedingte Unterschiede zu erkennen und den Source ggf. anzupassen, wobei das Handbuch sehr gute Hilfestellung bietet. Bei der Vielzahl an Befehlen und zum Teil im GFA-BASIC Handbuch nicht dokumentierten Optionen und Parametern kam es vor, daß der Konverter einige nicht korrekt übersetzen konnte. In diesen Fällen konnte Cicero innerhalb kurzer Zeit eine angepaßte Version bereitstellen. Generell erleichtert eine strukturierte, saubere Programmierung in BASIC die Übersetzung erheblich, denn sowohl Konverter als auch ANSI-C-Compiler sind viel genauer in Syntaxprüfungen als GFA-BASIC. Trotzdem kommt es durchaus noch zu fehlerhaft übersetzten Stellen, die dann dem C-Compiler auffallen. Hier ist dann eine meist recht einfache Nachbearbeitung, die natürlich Kenntnisse in C voraussetzt, notwendig.

Wer erwartet, nach der Konvertierung ein auf Anhieb lauffähiges Programm zu bekommen, mag vielleicht enttäuscht sein, bei all dem darf der Hauptvorteil des Konverters jedoch nicht vergessen werden, nämlich dem Programmierer in kurzer Zeit zu einem C-Source zu verhelfen, ohne daß eine monatelange Neuentwicklung oder Übersetzung von Hand nötig wird. Neben den zu Anfang angeführten Vorteilen wird damit vor allem die weitere Pflege des Produktes nicht verzögert. Auf Anfrage werden dabei von Cicero auch Programmportierungen sowie Schulungen durchge-führt.

Strings

Ein von vielen BASIC-Programmierern geschätzter Vorteil von BASIC ist dessen dynamische String-Verwaltung, die in GFA-BASIC jedoch mit dem eklatanten Nachteil einer fehlerhaften und unflexiblen Speicherverwaltung verbunden ist, der die Nutzung von MiNT und MultiTOS sowie auf TTs erheblich erschwert.

Hier liegt ein Schwerpunkt der Bibliotheken. so werden sowohl eine statische String-Verwaltung, bei der jedem String ein Speicherbereich bestimmter Größe zugeordnet wird, als auch eine dynamische, die bei String-Vergrößerungen selbsttätig Speicher anfordert, angeboten, wobei sich auch Abweichungen bei bestimmten Strings angeben lassen. Bei Speichermangel erscheint eine Warnmeldung, so daß ein Programmabsturz in den meisten Fällen vermieden wird. Bei der maximalen String-Länge kann man noch zwischen 64 KB und 2 GB wählen, wichtig für Befehle wie BGET und BPUT bei höheren Grafikauflösungen.

Die Konvertierung

Der Konverter übersetzt auf einem 16-MHz-ST gut 200()Zeilen/min, wobei Fehlermeldungen und Warnungen optional in eine Datei geschrieben werden. Ärgerlich ist aber, daß jede Fehlermeldung von Hand zu quittieren ist, selbst wenn der Konvertierungsvorgang fortgesetzt werden kann. Erfreulicherweise sind die Bibliotheken frei von LineA-Aufrufen, selbst bei den Befehlen, in denen GFA-BASIC darauf zurückgreift. Diese Umstellung von LineA auf VDI kommt im Konvertat vor allem der Lauffähigkeit auf Grafikkarten zugute.

Lediglich die Initialisierungsfunktion ist aus Gründen der Kompatibilität zu GFA-BASIC etwas unsauber, was allerdings bei Programmen, die nicht davon abhängig sind, kein Problem darstellt, da der Quelltext erfreulicherweise mitgeliefert wird und Änderungen darin einfach sind.

Ergebnisse

Konvertierte Programme sind generell etwas größer als die entsprechenden GFA-BASIC-Pendants, vor allem bei kurzen Programmen. Die Geschwindigkeit ist je nach Einstellung des Konverters bei ganzzahligen Berechnungen und String-Verarbeitung meist doppelt, bei Fließkommaberechnungen unter Nutzung der FPU um ein Vielfaches schneller.

Testobjekte

Als größere Testobjekte kamen zum einen ein bekanntes Mailbox-Programm, zum anderen CatSieve, ein sauberes GEM-Programm von Uwe Ohse, mit einem Umfang von 450 bzw. 250 KB, zum Einsatz. Das Mail-Poxprogramm konnte innerhalb der Testzeit immerhin ansatzweise lauffähig gemacht werden, bis sich herausstellte, daß noch einige Anpassungen am GFA-Source nötig sind, während es beim GEM-Programm derzeit noch einige Konverter-Fehler gibt, allerdings handelt es sich dabei auch um einen mir wenig vertrauten Quelltext.

Kleinere Programme mit etwa 2500 Zeilen, Grafik und Assembler-Routinen waren innerhalb von etwa zwei Tagen weitgehend lauffähig. Den Aufwand für das Mailbox-Programm kann man auf etwa drei Wochen veranschlagen, während eine Neuentwicklung oder Konvertierung von Hand minimal sechs Monate bis ein Jahr in Anspruch nähme.

Resümee

Mit dem „GFA-BASIC nach C Konverter“ erhält man ein Paket, das sowohl aus der Software als auch dem Service dahinter besteht, wobei man das Gefühl hat, ein aktives, ständig weiterentwickeltes System vor sich zu haben und bei Fragen und Problemen schnell Hilfestellung erhält.

Cicero Innovative System - Software Ballweilerstraße 7 6676 Mandelbachtal

Preise:

BASIC nach C Pionier 189.-
BASIC nach C Professional 449,-
BASIC nach C MS- Windows 549,-

Literaturhinweise:

Christoph Conrad - LineA-freie GFA-BASIC-Library

Uwe Ohse

Frank Baumgart - Setscreen-Fix: GFA-BASIC auf Großbildschirmen

zumindest die beiden ersten Texte sind in vielen Mailboxen des Mausnets zu finden (z.B QUARK-Paderborn).

$SA
DIM struct.person.vorname$(10)
DIM struct.person.nachname${10) 
DIM struct.person.alter&(10)
DIM struct.person.groesse$(10)
$SE

Listing 1: Datenstrukturen in GFA-BASIC...

struct { Feld vorname$_f; Feld nachname$_f; int alterI[10+1]; double groesseD[10+1]; } person;

Listing 2: ...und deren Konvertierung in C

Gegenüberstellung von BASIC- und C-Source im Konverter

Frank Baumgart
Aus: ST-Computer 09 / 1992, Seite 40

Links

Copyright-Bestimmungen: siehe Über diese Seite