★ APPLICATIONS ★ PROGRAMMATION ★ BASIC-LOGO-TRANSLATOR MK1 (CPC MAGAZIN) ★ |
Basic-Logo-Translator MK1 (CPC Magazin) | Applications Programmation |
Um in Logo programmieren zu können, benötigt man entweder die Schneiderfloppy oder ein teures Programm. Logo und Basic zu mischen, war bisher unmöglich. Der Basic-Logo-Trans-lator-MK.1 macht diese Träume wahr. Das Programm funktioniert unter Verwendung einer kurzen Maschinenspracheroutine, die auf ROM-Routinen zurückgreift und deshalb nur auf dem CPC 464 läuft. Umgeht man diese Routine, läuft das Programm auf allen CPCs. Das Programm arbeitet nach folgendem Prinzip:
Der Editor Er kennt zwölf Befehle, die nur ihn betreffen, und führt außerdem einen einfachen Befehls-Check durch, ob die benutzten Logo-Befehle überhaupt im Befehlsvorrat enthalten sind. Ist das der Fall, wird der Befehl übernommen, ist er nicht vorhanden, erscheint eine Fehlermeldung. Hier die zusätzlichen Editor-Befehle: list n (220-240) listet alle Source-Zeilen ab Zeile n. Der Listvorgang kann durch einen beliebigen Tastendruck unterbrochen werden. delete n (270-280) löscht Source-Zeile n. new (290) löscht sämtliche Source-Zeilen und startet das Programm neu. bye (300) beendet das Programm. translate (430-540) überträgt das Source-Programm in ein Basic-Programm (wird noch näher erläutert). trun (550-560) startet das übersetzte Programm. Achtung: Dabei wird das Source-Programm vollständig gelöscht. Wer dies ändern will, muß den RUN- durch einen GOTO- Befehl ersetzen. ssave (570) speichert das Source-Programm ab. sioad (580) lädt ein Source-Programm zu einem eventuell schon im Speicher befindlichen hinzu. Damit können mehrere Source-Programme verknüpft werden. Ist keine Verknüpfung erwünscht, sollte zuvor new eingegeben werden, save (590-610) speichert den übersetzten Programmteil als ASCII-Datei ab. Hier muß zweimal die kleine ENTER-Taste gedrückt werden. comand (810) gibt alle vorhandenen Editor- und Logo-Befehle auf dem Bildschirm aus. Der letzte Befehl ist einfach ein der Eingabe vorangestelltes Leerzeichen. Dieses bewirkt, daß die Eingabe keinem Syntax-Check unterworfen und die eingegebene Zeile bei TRANSLATE direkt als Basic-Zeile übergeben wird. Es ist auf diese Weise möglich, Basic-Zeilen direkt in das Logo-Programm einzubauen. Der TRANSLATE-Befehl Zunächst wird erfragt, in welchem Zeilenbereich und mit welchem Zeilenabstand Basic-Zeilen generiert werden sollen. Als Untergrenze erlaubt das Programm keine Eingabe kleiner 2000, da es sich sonst selbst zerstören wurde (430-470). Dann wird eine Logo-Initialisierungszeile eingefügt (480-500). Diese befindet sich in DATA-Zeile 1160. Es sind auch mehrere solcher Initialisierungszeilen möglich. Dazu muß nur die 1 in Zeile 1160 in die neue Anzahl geändert und die neuen Zeilen in DATAs ab Zeile 1160 abgelegt werden. So könnte z.B. noch eine Routine zur Darstellung der Turtle eingefügt werden. In Zeile 510 beginnt dann die eigentliche Obersetzarbeit. Zunächst wird eine Source-Zeile eingelesen und, falls das erste Zeichen ein Leerzeichen sein sollte, direkt übergeben (520). Wenn nicht, wird die Nummer des Befehls gesucht (530). Dann wird die entsprechende Obersetzerroutine angesprungen (540). In den Übersetzerroutinen wird ein Syntax-Check durchgeführt und dem String bb$ die entsprechende Basic-Zeile übergeben. Weiter geht es mit Zeile 960. Hier wird sowohl die Source- als auch die Basic-Zeile auf dem Bildschirm ausgegeben und die Basic-Zeile mittels der Maschinencoderoutine erzeugt. Dann wird noch die Source-Zeilennummer um eins erhöht sowie die nächste Basic-Zeilennummer festgelegt und geprüft, ob eine der Nummern bereits das Ende überschreitet. Ist dies der Fall, so geht es zurück zum Editor, wenn nicht, wieder zu Zeile 520. Die Error-Routine Die Error-Routine befindet sich in den Zeilen 860-920. Um einen Error auszuführen, muß man nur der Variablen er-ro die Nummer des entsprechenden Errors übergeben und dann nach 860 springen. Will man einen zusätzlichen Error einbinden, so muß man hier nur ON erro GOTO um die Zeilennummer der neuen Error-Routine erweitern. Es empfiehlt sich, für den neuen Error entweder eine Zeile zwischen den vorhandenen Errors (z. B. 915) oder aber eine im freien Zeilenbereich von 1170-1199 zu wählen. Wie einfach es ist, einen neuen Befehl einzufügen, zeigt folgendes Beispiel: Es soll der Befehl ct eingefügt werden, der nur das Textfenster löscht. 1. In Zeile 840 wird an das Ende der DATA-Zeile ct (mit Komma abgetrennt) angehängt. 2. In Zeile 540 kommt an das Ende die neue Zeilennummer (in unserem Fall 802). 3. Die neue Routine wird ab der angegebenen Zeile (802) angefügt. Sie lautet in unserem Fall: 802 GOSUB 930: IF lan 2 THEN erro=1: GOTO 860 804 bb$=”CLS”: GOTO 960 In Zeile 802 wird zunächst die Routine bei 930 aufgerufen. Diese vernichtet unnötige Leerzeichen, stellt dann fest, wie viele Leerzeichen (und damit wie viele Wörter) die Befehlszeile noch besitzt und wie lang sie ist. In unserem Fall muß die Länge 2 betragen (nur ct), sonst ist der Befehl falsch eingegeben und kann nicht übersetzt werden, die Fehlerroutine wird angesprungen. In Zeile 804 wird der Befehl ct in den Basic-Befehl CLS übersetzt bzw. dem Basic-Befehlsstring bb$ übergeben und dann die Einbauroutine in Zeile 960 angesprungen. Sollte einmal eine Variable bzw. ein Wert übergeben werden - was ja beides möglich ist -, so schauen Sie bitte bei einem Befehl wie z.B. fd nach, wie dies zu realisieren ist. Sie werden feststellen, daß es ebenfalls sehr einfach geht. In der Variablenliste sind die Namen und die Verwendung der Variablen angegeben. 1000 'Funktionstastenpuffer auf 300 Zeichen erweitern |
|
|