★ APPLICATIONS ★ PROGRAMMATION ★ Sprünge ohne Umwege|CPC Amstrad International) ★ |
RSX Bexec (CPC Amstrad International) | Applications Programmation |
Ausführung von Programmteilen ohne Umstand Wie Sie sicherlich wissen, ist ein Sprungbefehl wie GOTO nur in der Lage, Programmabschnitte anzuspringen, wenn Sie eine Zeilennummer mitangeben. Das es auch komfortabler und einfacher geht, können Sie hier erfahren. Beschreibung zu BEXEC: BEXEC steht für BASIC-EXEC. Gemeint ist damit in erster Linie ein RSX namens |EXEC. Es ermöglicht das Ausfuhren von BASIC-Befehlen aus Stringvariablen heraus, hier einige Anwendungsbeispiele: — berechneter Sprung: 10 INPUT “Wohin soll ich springen“ ;sprungziel — Auswertung von per INPUT eingegebenen Ausdrücken: 10 INPUT “Bitte arithmetischen Ausdruck eingeben: “a$ 20 |EXEC,“wert = “+a$ 30 PRINT wert — Eingabe von Funktionen für beispielsweise grafische Darstellung: 10 INPUT “Welche Funktion? f(x) = “,a$ Bei der Eingabe von z.B. “sin(x)*exp(x) "wird an |EXEC der String “DEF FN f(x) = sin(x)*exp(x)" übergeben. Dieser wird dann über BASIC-Routinen tokenisiert und in einen reservierten Speicherbereich geschrieben. Anschließend wird der BASIC-Programmzeiger auf diesen Bereich umgelenkt, so daß die Programmausführung nach Beendigung der RSX |EXEC hier fortsetzt. Für den Rücksprung ins laufende Programm sorgt dann die RSX IEXIX, die allerdings automatisch eingesetzt wird, so daß sich der Anwender hierum nicht zu kümmern braucht. Wird der EXEC-String vorzeitig verlassen, wie im ersten Beispiel durch GOTO, dann wird der angehängte |EXIX-Befehl natürlich nicht mehr ausgeführt. Die weiteren RSXe bieten noch mehr Möglichkeiten, die mit |EXEC selbst nicht unbedingt in direktem Zusammenhang stehen müssen. Hier eine Erläuterung der einzelnen Befehle (allgemein gilt: Bei falscher Parameteranzahl wird SYNTAX ERROR ausgelöst): |EXEC oder |EXEC,@a$ Führt den angegebenen String aus. Bei Angabe keiner Variablen wird der alte String ausgeführt, der durch ein vorhergehendes |EXEC,@a$ oder |PUTX,@a$ noch im Speicher steht. Bei TRON wird [EXEC] ausgegeben. Fehlermeldung: OPERAND MISSING wenn |EXEC ohne Variable aufgerufen wird und noch kein String initialisiert ist. |EXIX Dieser Befehl wird durch |EXEC und |PUTX standardmäßig an den Schluß des Strings gehängt, um den Rücksprung ins laufende Programm zu bewirken. Bei TRON wird ù nach einem [0], da das Kommando quasi in einer neuen Zeile mit der Nummer 0 steht - [EXIX] ausgegeben. Fehlermeldung: INVALID DIRECT COMMAND bei unberechtigter Anwendung. |PUTX,@a$ Übernimmt einen String für |EXEC. ohne ihn auszuführen, damit bei wiederholter Anwendung (z.B. in Schleifen) der String nicht jedesmal neu tokenisiert werden muß. |LSTX oder |LSTX,@a$ Dieser Befehl enttokenisiert die aktuell initialisierte EXEC-Befehlssequenz und schreibt sie auf den Bildschirm oder in eine Stringvariable. Fehlermeldung nur bei Angabe einer Variablen: TYPE MISMATCH falls die Variable nicht vom Typ String ist (kein Feldelement!). Achtung: Die Stringvariable kann verkürzt, aber nicht verlängert werden, sie muß daher vorher auf ausreichende Länge gebracht werden, z.B. durch a$=SPACE$(255). |LSTERR oder |LSTERR,@a$ Schreibt den Teil einer Befehlszeile, in der ein Fehler aufgetreten ist, ab dem Fehlerstatement auf den Bildschirm oder in eine Stringvariable. Sonst wie |LSTX. |GETLNR,@a oder |GETLNR.v,@a (a = INT- oder REAL-Variable) Schreibt die Nummer der aktuell bearbeiteten Programmzeile bzw. die Nummer der v-ten Zeile nach der aktuellen in eine Variable. Dadurch bleiben berechnete Sprünge und ähnliches auch über RENUM-Befehle hinweg möglich. Fehlermeldungen: LINE DOES NOT EXIST, falls Zeile nicht gefunden; TYPE MISMATCH, falls Zielvariable nicht vom Typ Integer oder Real (kein Feldelement!); INVALID DIRECT COMMAND bei Aufruf außerhalb Programms. Installation Das BASIC-Programm "BEXEC.DAT“ erzeugt ein Maschinenprogramm als Binärdatei "BEXEC.RSX“. Zum Initialisieren der beschriebenen RSXe muß die Binärdatei mit LOAD“BEXEC.RSX“ geladen und mit CALL &C000 gestartet werden. Der Bildschirm dient hierbei als Zwischenspeicher, damit aufwendige MEMORY-Reservierungspro-zeduren entfallen. Der für die RSXe nötige Speicher wird direkt unter HIMEM vom Maschinenprogramm selbständig durch Benutzung der entsprechenden Routine im BASIC-ROM reserviert. Ebenso erfolgt automatisch eine Anpassung der Adressen an die Lage im Speicher und an die CPC-Version. CPCAI 89/10
|