★ APPLICATIONS ★ PROGRAMMATION ★ Variablen-Kompaß ★ |
RSX Varlist (Computer Technik) | Applications Programmation |
Variablen listen, suchen und verändern beim CPC Welchem BASIC-Programmierer ist es noch nicht so ergangen: Beim Umgang mit längeren Programmen verliert man den Überblick über die verwendeten Variablennamen. Oder man möchte gar nachträglich eine Variable umbenennen, was manchmal beim MERGE von Unterprogrammen zwingend notwendig wird. Eine mühevolle Arbeit, die eh besser dem Computer überlassen werden sollte. Die hier vorgestellten drei RSX-Befehle bieten dem Programmierer hierfür ihre Dienste an. Man kann sich eine alphabetisch sortierte Tabelle aller Variablen anzeigen oder aus-drucken lassen, dazu die Zeilen, in denen eine Variable verwendet wurde, und schließlich hat man auch die Möglichkeit, einen Variablennamen zu ändern. Um die Funktionsweise dieser RSX-Befehle zu verstehen, muß man zunächst wissen, wie Variablen im CPC-BASIC dargestellt und behandelt werden. Jede eingegebene BASIC-Zeile wird tokenisiert. das heißt, daß den Befehlen und Funktionen (den Schlüsselwörtern) platzsparend ein einziges Byte zugeordnet wird, so daß der Interpreter dann nicht mehr mit langen Wörtern arbeiten muß. Variablennamen dürfen maximal 40 Zeichen lang sein, sie erkennt der Interpreter aus dem Zusammenhang (Syntax). Beim letzten Buchstaben des Namens wird das höchste Bit gesetzt, um das Ende des Namens zu signa- Erkannt Die CPCs unterscheiden drei Grundtypen von Variablen: REAL (Gleitkommazahl), INTEGER (ganze Zahl) und STRING (Zeichenkette). Der Standardtyp ist REAL mit dem Kenn-Byte 0Dh. den normalerweise jede nicht weiter spezifizierte Variable erhält. Man kann diesen Typ auch mit einem angehängten T am Namen erzwingen. Bei einem angehängten "%' (für INTEGER) ist das Kenn-Byte 0Bh und OCh bei 'S" (STRING). Falls der Interpreter auf den Befehl DEF. . . trifft, so wird das Kenn-Byte einer Variablen ohne speziellen Typ bei DEFREAL auf 04h. bei DEFINT auf 02h und bei DEFSTR auf 03h geändert. Wie schon in c't 7/85 (Wie schnell ist der CPC?) ausgeführt, besitzt das CPC-BASIC eine compiler-ähnliche Eigenschaft. Es vermerkt nämlich bei Sprüngen die Adresse des Sprungzieles in der BASIC-Zeile. Genauso verhält es sich mit den Variablenadressen. Das BASIC reserviert für die jeweilige Variable hinter dem Programm einen Tabellenplatz und trägt die Adresse dieses Platzes in die beiden erwähnten Bytes vor dem Variablennamen ein. Dann muß es nicht jedesmal, wie es etwa beim Sinclair Spectrum oder C64 der Fall ist. die Variablentabelle nach einem Eintrag durchsuchen. Strukturiert Die drei RSX-Befehle VARLIST , VARSEARCH und VARCHANGE benutzen diverse Unterprogramme des BASIC-Interpreters, die entweder im ROM ablaufen oder ins RAM kopiert werden, um das Programm möglichst schnell zu machen. Der Ablauf der drei Programme ist aus den zugehörigen Struktogrammen ersichtlich. Wie man der Länge des BASIC-Laders entnehmen kann, würde das vollständige Assembler-Listing mit über 1200 Zeilen doch den Rahmen dieses Heftes sprengen. Interessierte Leser können es aber vom Verlag anfordern (DIN-A4-Freiumschlag nicht vergessen).
Wenn man den BASIC-Lader eintippt, kann man sich die längere Tipporgie mit einem kleinen Hilfsprogramm etwas vereinfachen, das die Zehnertastatur auf der Shift-Ebene zweckmäßig für Hex-Daten belegt: Shift 0 erhält 'A\ Shift 1 demnach B' und so weiter. Der Punkt wird als Komma umdefiniert, so daß die DATA-Zeilen wesentlich einfacher mit einer Hand einzugeben sind. Nach RUN steht das Programm anschließend ab 9D00h im Speicher. Man kann es dann mit CALL &9D00 initialisieren oder aber binär abspeichern. Sortiert Der Befehl |VARLIST erstellt die komplette Variablenliste eines BASIC-Programms im Speicher. Die Variablen werden im Mode 2 angezeigt, damit ein schneller Überblick über möglichst viele Variablen möglich ist. Um den Speicherplatz der Tabelle zu begrenzen und andererseits das Programm möglichst schnell zu machen, wird mit der festen Variablenlänge von maximal 15 Zeichen gearbeitet. Falls doch einmal ein Variablenname länger ist, bricht das Programm mit der Meldung ‘Name too long in* und der Zeilennummer ab. Eine Statuszeile am unteren Bildrand gibt Aufschluß über die möglichen Bedienfunktionen:
Gesucht Der RSX-Befehl |VARSEARCH. Stream-Nummer listet auf dem angegebenen Ausgabekanal alle Zeilennummem in runden Klammern auf, in denen die gesuchte Variable verwendet wird. Die Stream-Nummer darf zwischen 0 und 8 liegen oder ganz weggelassen werden. Eine Ausgabe auf Kassette/Disc ist also nicht möglich. Um den Ärger mit dem Klammeraffen und den String-Variablen beim Übergeben des Variablennamens zu vermeiden, wird der Name im Dialog abgefragt. Wie im BASIC sind maximal 40 Buchstaben zugelassen, wobei nicht zwischen Groß-und Kleinschreibung unterschieden wird. Zusätzlich kann man auch den Variablentyp angeben, zum Beispiel a%. Geändert Mit |VARCHANGE kann man den Namen und. falls gewünscht, auch den Typ einer Variablen ändern. Nach Aufruf des RSX-Befehls fragt das Programm wiederum im Dialog nach dem alten und dem neuen Namen. Für die Variablennamen sind ebenfalls maximal 40 Zeichen zulässig. Falls der neue Name schon im Programm verwendet wird, erscheint die Meldung ‘New Name found', woraufhin man die Befehlsausführung fortsetzen oder abbrechen kann. Falls eine BASIC-Zeile durch den neuen Namen zu lang würde, bricht das Programm mit der Angabe der ersten zu langen Zeile ab. Falls gar der Platz für das gesamte BASIC-Programm zu knapp wird, erscheit die Meldung ‘Memory füll'. Mit ESC läßt sich der Befehl bei der Eingabe der Namen jederzeit abbrechen. Angepaßt Bekanntlich haben die Entwickler des CPC-BASIC bei den beiden 464-Nachfolgemodellen einige wichtige Systemadressen verschoben. Damit nun 664-und 6128-Besitzer nicht die Haare raufen müssen (schon wieder ein Programm nur für den 464. . .), wurden die nötigen Systemadressen für jeden Rechner aufgelistet und die betroffenen DATA-Zeilen sowohl für den 664 als auch für den 6128 am Ende des Programms mit-aufgeführt. Literatur
|