QUICK ECKE Teil 18 von Harald Schönfeld steht für das Semikolon. BASIC und QUICK Teil I Fast jeder ATARI User hat schon einmal ein Programm in BASIC geschrieben, denn diese Programmiersprache ist recht einfach zu erlernen. Es gibt deswegen eine Fülle von fertigen BASIC Programmen, die für fast jede Aufgabe etwas zu bieten haben. Aber fast alle Programme haben einen Nachteil gemeinsam: Sie sind ziemlich langsam. Deshalb liegt es nahe zu versuchen diese BASIC-Programme in QUICK umzuschreiben. Der Hintergedanke ist dabei natürlich, daß die Programme dann schneller arbeiten. In letzter Zeit wurde auch tatsächlich schon öfters die Frage gestellt, ob das Umschreiben von BASIC nach QUICK möglich sei. In dieser und den folgenden QUICK Ecken werde ich versuchen darauf eine Antwort zu geben. Typisch BASIC! Bevor man eine Sprache in die andere konvertieren kann, sollte man deren Eigenheiten, bzw. Unterschiede kennen. Deshalb möchte ich zunächst auf einige typische BASIC-Gegebenheiten hinweisen: - Alle BASIC-Variablen sind Fließkomma- Variablen. - Es gibt zweidimensionale Variablen- Felder - Strings können beliebig lang sein - Es gibt verschiedene Schleifenarten: FOR/NEXT und eventuell WHILE/DO, DO/LOOP. - Der INPUT und der PRINT-Befehl kann auf beliebigen Kanälen ausgeführt werden. - INPUT kann mehrere Variablen auf einmal einlesen - Maschinenprogramme können aufgerufen werden. - DATA-Zeilen dienen zum Speichern fester Werte. Mit RESTORE kann auf beliebige Werte daraus zugegriffen werden. - Alle OS-Grafik-Routinen werden bereitgestellt. - Komplexe numerische Ausdrücke werden mit der Algebralogik ausgewertet. - In einer Zeile können mehrere Befehle verwendet werden. - Unterprogramme können mit ihrer Zeile im Programm aufgerufen werden. - GOTO zu bestimmten Programmzeilen. Vielleicht ist es schon deutlich geworden, daß diese Liste mit Rücksicht auf die Fähigkeiten von QUICK erstellt wurde: Typisch QUICK! - Es gibt zunächst nur BYTE und WORD Variablen. Fließkommavariablen können nur mit etwas Mühe verwendet werden. - Es gibt nur eindimensionale Felder. - Strings können nur 255 Zeichen lang sein. Die STRING-Befehle befinden sich in der STRING.LIB und ähneln denen von C, aber nicht denen von BASIC. - Es gibt zwei Schleifenarten: WHILE/WEND, REPEAT/UNTIL. - PRINT kann nur auf Kanal 6 oder 5 ausgeführt werden. INPUT benutzt immer die Tastatur. - Maschinenprogramme können aufgerufen werden, aber die freien Speicherbereiche, in denen sie liegen dürfen sind anders als in BASIC. - DATA-Werte werden immer in den Speicher geschrieben. Von dort sind sie beliebig zugänglich. - Die XIO-Befehle werden nicht direkt unterstützt. - Es können keine numerischen Ausdrücke berechnet werden. Pro Zeile können nur 2 Variablen miteinander verküpft werden. - In einer Zeile darf nur ein Befehl stehen. - Unterprogramme werden nur mit ihrem Namen aufgerufen. - Sprünge zu bestimmten Stellen im Programmtext sind möglich. Aus dieser Auflistung wird schon ersichtlich, daß das Umschreiben von BASIC nach QUICK kein Kinderspiel ist. Um komplexe Programme zu konvertieren, muß man sich in beiden Sprache genausogut auskennen, als wenn man das Programm in einer der Sprachen neu schreiben wollte! Ein weiteres Hindernis bei der Umsetzung ist die unterschiedliche Belegung des Speichers. Das bedeutet, daß Zeichensatzdaten, Playerdaten, MC-Routinendaten usw. oft nicht an den selben Positionen gehalten werden können. Das auf den ersten Blick wesentlichste Hindernis ist, daß QUICK keine Fließkommavariablen kennt. Mit Hilfe der Mathe-Library kann zwar Abhilfe geschaffen werden, aber die Benutzung bleibt doch kompliziert. Auf der anderen Seite muß man sich eben fragen, ob das BASIC Programm das zur Debatte steht, wirklich Fließkomma- Variablen benötigt! Ich kann mir eigentlich nur wenige Spiele, Grafikprogramme, Editoren, Datenbanken usw. vorstellen, die ohne Fließkomma nicht auskommen. Wie man in einfachen Fällen auf Fließkomma verzichten kann werden wir später noch sehen. Aber wer unbedingt ein Programm zur dreidimensionale Darstellung von Drahtlgittermodellen von BASIC nach QUICK konvertieren will ist selber schuld!!! Deshalb mein Rat: Finger weg von mathematisch-physikalischen Programmen. Die wären ja auch in QUICK nicht schneller. (Im Gegenteil: Die Fließkommaroutinen in TurboBASIC sind schneller als die von QUICK (d.h. die des Betriebssystems). Ein einfaches Beispiel Am folgenden Beispiel will ich ein paar grundlegende Regeln zeigen: 10 GRAPHICS 15 20 PRINT "Bitte X1,Y1,X2,Y2 eingeben" 30 INPUT X1,Y1,X2,Y2 40 PLOT X1,Y1:DRAWTO X2,Y2 50 GOTO 50 Nun, ein so kurzes Programm sollte man wohl auch in QUICK schaffen können. Was gilt es zu beachten: - Müssen X1,Y1,X2,Y2 Fließkomma- Variablen sein? Nein, denn sie dienen nur als Position auf dem Grafikbildschirm und Positionen sind sowieso ganzzahlig. Aber Achtung! Müssen die Variablen als BYTE oder WORD deklariert werden? Im Zweifelsfall soltte man natürlich WORD verwenden, weil das den größeren Wertebereich zuläßt. Auf der anderen Seite sind BYTE- Variablen "schneller". In unserem Fall kann man getrost BYTEs verwenden, da Grafik 15 nur Koordinaten von 0 bis 191 zuläßt. In Grafik 8 dagegen müßte man WORDs verwenden. Hier muß man also genau auf den Verwendungszweck der Variablen achten! - PLOT und DRAWTO können direkt nach QUICK übersetzt werden. Der GRAPHIS- Befehl befindet sich als Unterprogramm in der GRAPH.LIB Library. - Die Endlosschleife am Programmende erzeugt QUICK immer automatisch. - Der INPUT-Befehl muß in 4 einzelne Befehle aufgespalten werden. Folglich sollte man auch den dazugehörigen PRINT-Befehl aufsplitten. Vorsicht! In QUICK sind zusätzlich zu den Anführungszeichen Klammern nötig! Außerdem muß natürlich die allgemeine QUICK-Syntax beachtet werden: Also Variablendeklaration, MAIN/ENDMAIN usw. Das umgesetzte Programm sieht dann also so aus: INCLUDE (+ D:GRAPH.LIB )- BYTE (+ X1,X2,Y1,Y2 )- MAIN .GRAPHICS(15) PRINT("Bitte X1 eingeben ") INPUT(X1) PRINT("Bitte Y1 eingeben ") INPUT(Y1) PRINT("Bitte X2 eingeben ") INPUT(X2) PRINT("Bitte Y2 eingeben ") INPUT(Y2) PLOT(X1,Y1) DRAW(X2,Y2) ENDMAIN Wie man sieht ist das Programm durchaus noch zu erkennen. Allerdings tritt ein typisches Phänomen auf: Das QUICK Programm hat viel mehr Zeilen! Soviel für heute. Für's nächste Mal könnt' Ihr ja schon mal die alten BASIC-Programme rauskramen...