Dolmetscher: GFAs neuester Basic-nach-C-Konverter

Die perfekte Übersetzung von GFA-Basic nach C - der Konverter von GFA macht's möglich.

GFA-Basic ist eine der verbreitetsten Programmiersprachen für den Atari ST. Wegen seiner einfachen Handhabung bei hoher Leistungsfähigkeit fand es in der Vergangenheit viele Freunde. Einsteiger benutzen GFA-Basic häufig als Sprungbrett zu einer anderen Programmiersprache wie Modula-2, Pascal oder C. Letztere gilt als die Muttersprache des ST. Viele Umsteiger von GFA-Basic nach C trauern noch ihren alten Routinen aus Basic-Zeiten nach, die entweder vermodern oder die sie in mühevoller Kleinarbeit in C übersetzen müssen. Andererseits veröffentlichen viele Zeitschriften häufig Tips und Tricks für GFA-Basic, die der C-Programmierer nicht nutzen kann.

Eine Lösung dieser Probleme bietet GFA Systemtechnik mit dem »Konverter nach C«. Bei diesem Produkt handelt es sich, wie der Name schon andeutet, um ein Programm, mit dem Sie aus GFA-Basic-Sourcen C-Quelltexte erzeugen. Zum Test lag die aktuelle Version 2.0 vor, die starke Verbesserungen gegenüber den älteren Versionen 1.x aufweist. Der Konverter wird in einem Ringordner geliefert, der ein 60-seitiges Handbuch und die Diskette mit Programm und Hilfsprogrammen enthält. Das Handbuch geht auf alle Probleme und Feinheiten ausführlich ein, die Sie bei der Konvertierung beachten sollten. Auf der Diskette befinden sich neben dem Konverter eine Bibliothek und eine Header-Datei für Turbo-C, die Sie zum Betrieb unter C benötigen. Diese Dateien sind, wie der ganze Konverter, vollkommen auf Turbo-C für den Atari zugeschnillen. Außerdem befinden sich noch einige Beispiele zur Veranschaulichung der Konvertierung auf der Diskette. Starten Sie den Konverter mit dem bezeichnenden Namen »B_NACH_C« erscheint eine schlichte GEM-lose Oberfläche (siehe Bild). B_NACH_C steuern Sie hauptsächlich über die Tastatur. Nur bei der Dateiauswahl greift das Programm auf die Dateiauswahlbox des GEM zurück. Da man aber nur einzelne Tastendrücke benötigt, um ans Ziel zu gelangen, ist das Menü durchaus als benutzerfreundlich bezeichnen.

Bei dem Test eines solchen Programms tauchen Fragen auf, wie »was läßt sich konvertieren?«, »wie optimiert sind die erzeugten C-Texte?« oder »was passiert mit speziellen Basic-Eigenschaften?«. Konvertieren kann B_NACH_C alles, was in C Sinn ergibt. Ausnahmen sind Befehle wie DEFLIST oder RESERVE - C reserviert nur den Speicher, den das Programm wirklich benötigt. Weitere spezielle Ba-sic-Befehle wie zum Beispiel DA-TA-Zeilen oder die FIELD-Anweisung übersetzt der Konverter problemlos in C. Noch spezieller sind GFA-Basic-Befehle, wie ABSOLUTE, MENU oder SELECT-CASE.

B_NACH_C schluckt sie ohne Murren. Der Konverter übersetzt 99 Prozent der GFA-Basic-3.0-Befehle. Was er nicht direkt in C umsetzen kann, erledigt er über die mitgelieferte Bibliothek B_NACH_C.LIB, die Befehle wie etwa PRINT oder INPUT als Funktionen enthält.

Der Konverter übersetzt nahezu jedes Programm

Was B_NACH_C aus Basic-Programmen erzeugt, versetzt jeden C-Freak in Staunen. Die C-Quelltexte sind sehr gut lesbar, entsprechen ANSI-C und sind problemlos zu compilieren. Selbst größere Programme mit Assembler-Einlagen in Data-Zeilen konvertiert B_NACH_C so, daß Turbo-C lauffähige Programme erzeugt. Auf Wunsch fertigt B_NACH_C kein C-Hauptprogramm, sondern lediglich ein separates Modul, in dem nur die Prozeduren und Funktionen stehen.

Die C-Programme sind häufig schneller als die Basic-Originale, vor allem dann, wenn sie Integer-Arithmetik verwenden. B_NACH_C optimiert sogar die C-Quelltexte. So lassen sich z. B. unnötige geschweifte Klammern »{}« wegoptimieren, wenn nur eine Anweisung zum Körper gehört. Eine bedingte Zuweisung wie »IF bedingung THEN a=1 ELSE a=2 ENDIF« (siehe Beispiel) verwandelt B_NACH_C in das C-Konstrukt »a = (bedingung) ? 1 : 2«. Die Arbeitsgeschwindigkeit des Basic-Konverters ist zufriedenstellend. Auch größere Listings übersetzt er so schnell, wie der GFA-Ba-sic-Compiler sie compiliert. Interessantes verbirgt sich hinter dem Menüpunkt OPTIONEN. Neben einigen Dateifunktionen stellen Sie dort u. a. ein, ob B_NACH_C ANSI- oder normalen C-Code erzeugen soll. Die Variabiennamen bekommen zur Unterscheidung ein Suffix, das vom Typ der Variablen abhängt. Wahlweise hängt der Konverter nur einen Buchstaben, z. B. »L« für long, oder die komplette Bezeichnung des Typs an die Variable an. Während die älteren Versionen von B_NACH_C sich nur zum Erlernen der Sprache C und zur Umsetzung einfacher Algorithmen eignen, ist die aktuelle Version 2.0 auch zur Umsetzung größerer Projekte geeignet. Der C-Text ist zwar übersichtlich, aber leider nicht immer optimal im nachhinein zu verändern. Besonders den bei Basic so beliebten Spaghetti-Code sollten Sie besser nicht konvertieren. Aber sauber strukturierte Programme, die Prozeduren und Funktionen einsetzen, ergeben auch nach der Übersetzung in C ein durchschaubares Programm.

(ba)

Bezugsquelle: GFA Systemtechnik GmbH, Heerdter Sandberg 30-32, 4000 Düsseldorf 11

WERTUNG

Name: GFA-Basic Konverter nach C
Preis: 498 Mark
Hersteller: GFA Systemtechnik Gmbh

Stärken: Schnell □ C-Text gut strukturiert und lesbar □ erzeugt ANSI-C □ C-Texte werden optimiert

Schwächen: TOS Oberfläche □ hoher Preis

Fazit: Mächtiges Hilfsprogramm für Programmierer, das den Umstieg von GFA-Basic nach C erleichtert.

PRINT @binom(49,6)
FUNCTION fak(n)
    LOCAL x 
    IF n=1 
        x=n
    ELSE
        x=n*@fak(n-1)
    ENDIF 
    RETURN x 
ENDFUNC
FUNCTION binom(n%,k%)
    RETURN (@fak(n%)/@fak(k%)/@fak(n%-k%)) 
ENDFUNC
/* GFA-BASIC -> C Übersetzung */
#include <b_nach_c.h>
/* Globale Variablen */ 
int CHAR;
unsigned long MAXSP;
double p_fak(double nD);
double p_binom(long nL,long kL);
PF F_eld[] =
{
dummy, dummy, dummy, dummy, dummy, dummy 
};
/* Variablen: */ 
double nD;

void main()
{
MO = 0;
MF = 1;
CHAR = C_HAR;
MAXSP = M_AXBP;
R_ein(1);
hidem();

mprintf(-1,-1,"%G\n",p_binom(49,6));
R_aus(0);
}

double p_fak( double nD)
{
double xD = 0.0;
xD = ((nD==1)) ? nD : nD*p_fak(nD-1); 
return(xD);
}

double p_binom(long nL,long kL)
{
return!(p_fak(NL)/(double)p_fak(kL)/(double)p_fak(nL-kL)));
}

Das Basic-Programm (oben) wandelt der B_TO_C-Konverter in ein optimiertes C-Programm (links)


Michael Bernards
Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]