★ APPLICATIONS ★ DIVERS ★ Schneider CPC 464: Das Speichern von Programmausschnitten ★ |
Super-Save (Compute Mit) | Applications Divers |
In der Praxis kann es immer wieder Vorkommen, daß man nicht ein ganzes BASIC-Programm, sondern nur einen Ausschnitt davon abspeichern möchte. Bisher hat man diese Möglichkeit nicht gehabt, aber die folgende Routine ermöglicht jeden Anwender, daß Abspeichern einzelner Programmabschnitte. Mit diesem Programm läßt sich das bewerkstelligen. Beim Schneider CPC 464 gibt es keinen Befehl, mit dem man aus einem längeren Programm einen Teil, etwa eine Subroutine, getrennt speichern kann, sowie umgekehrt der MERGE-Befehl funktioniert. Wenn man eine Subroutine von einem Programm in ein anderes kopieren möchte, müssen die nicht benötigten Programmzeilen manuell gelöscht werden. Das Utility, löst das Problem, denn beliebige Teile eines Programmes können auf Cassette oder Diskette abgespeichert werden! Das heißt, bereits in anderen Programmen geprüfte Subroutinen können ohne weiteres in ein neues Programm übernommen werden. Wer einen Assembler hat, kann das Programm direkt eingeben, sonst muß man das BASIC-Programm abtippen und laufen lassen. Nachdem dann das BINÄR-File abgespeichert ist, wird das BASIC-Programm nicht mehr benötigt. Jetzt kann man den Zeilenbereich mit dem Befehl ↑(erste Zei len nummer), (zweite Zeilennummer),,,(Name)" ‘ abspeichern. Programmbeschreihung: Da die Art der RSX-Erweiterung nicht sonderlich übersichtlich ist und sie sich durch die umständliche Stringübergabe auszeichnet, bauen wir den Befehl ein, indem wir den ' Patch für Befehl ausführen1 auf diese Routine umbiegen. Dort wird getestet, ob der Hochpfeil eingegeben wurde. Wenn nicht, erfolgt der Rücksprung. (Bei dem Text in Zeile 70 kann an der Stelle von &F8 auch jeder andere Tokenwert über &DD eingetragen werden.) In Zeile 90 wird die letzte Rücksprungadresse vom Stack geholt. Der Programmzeiger wird erhöht und die erste Zeilennummer geholt. Der Zeiger wird gerettet und in 130 wird versucht, die Zeilenadresse der Zeilennummer zu holen. Existiert die Zeile nicht so wird 'LINE DOES NOT EXIST4 ausgegeben und ins BASIC zurückgekehrt. Ansonsten wird die Zeilenadresse abgespeichert und getestet ob ein Komma folgt. Ist die Bedingung nicht erfüllt, wird wieder zur Fehlerausgabe verzweigt. Ab 210 wird die zweite Zeilennummer geholt und ebenfalls umgerechnet Dann wird noch die Zeilenlänge (in BC) addiert und in 250 abgespeichert Ab Zeile 260 beginnt der wichtigste Teil des Programmes. Zunächst werden die Pointer auf Programmanfang und -ende gesichert und dann die vorher berechneten Werte eingetragen. Nun wird die ROM-Routine für 'SAVE' angesprungen und ganz normal ausgeführt, abgespeichert wird aber nur der von uns gewünschte Programmteil. Im folgenden werden dann die alten Werte wieder hergestellt, der Programmzeiger vom Stack geholt und ins BASIC zurückgesprungen. Bemerkenswert ist noch, daß zu dieser Zeit das obere ROM freigeschaltet ist.
|