#page nr ("%",97)# #head# EUMEL-BASIC-Compiler 9. Anpassung von Programmen an den EUMEL-BASIC-Compiler % #end# 9. Anpassung von Programmen an den EUMEL-BASIC-Compiler 9.1. Unterschiede zwischen BASIC-Inter­ pretern und dem EUMEL-BASIC- Compiler Bei der Anpassung von Programmen für BASIC-Interpreter an den EUMEL- BASIC-Compiler gibt es einige Besonderheiten zu beachten, die auf den unterschied­ lichen Arbeitsweisen von Compilern gegenüber Interpretern beruhen. Bei Interpretern fällt die Übersetzung und Ausführung des Quellprogramms zeitlich zusammen (genau genommen gibt es ja gar keine Übersetzung, sondern das Quell­ programm wird #on("i")#interpretiert#off("i")#). Dies hat zur Folge, daß auch nicht zur Ausführung bestimmte Anweisungen (z.B. Dimensionierungen, Typfestlegungen etc.) erst während der Ausführung des Programms erkannt und ausgewertet werden. Bei Compilern hingegen muß deutlich zwischen der Übersetzungszeit (Compiletime) und der Laufzeit (Runtime) eines Programms unterschieden werden. Der wesentliche Unterschied zwischen Compilern und Interpretern liegt nun in der Reihenfolge der Kenntnisnahme von den Anweisungen. Während der Interpreter von den Anweisungen in der Reihenfolge ihres Auftretens entlang des Programmablaufs Kenntnis nimmt, werden die Anweisungen vom Compiler in der Reihenfolge ihres textuellen Auftretens zur Kenntnis genommen. Da es sich bei dem EUMEL-BASIC-Compiler um einen One-Pass-Compiler handelt, ist es zwingend notwendig, daß - DIM-Anweisungen vor dem ersten Zugriff auf das zu dimensionierende Feld stehen. - OPTION BASE-Anweisungen vor den betreffenden Dimensionierungen stehen. - DEF FN-Anweisungen vor dem ersten Aufruf der zu definierenden Funktion ste­ hen. - DEFINT- beziehungsweise DEFSTR-Anweisungen vor der ersten Verwendung der betreffenden Variablen erscheinen. Einige Interpreter lassen sogar den Abschluß von FOR-NEXT- und WHILE- WEND-Schleifen an mehreren Stellen im Programm zu (z.B. mehrere NEXT- Anweisungen zu einer FOR-Anweisung). Auch solche "Kunstgriffe" gestattet der EUMEL-BASIC-Compiler (aus den oben geschilderten Gründen) nicht. 9.2. Abweichungen von ISO 6373-1984 (Minimal-BASIC) Der EUMEL-BASIC-Compiler weicht in folgenden Punkten von der ISO-Norm 6373-1984 für Minimal-BASIC ab: - Treten bei der Auswertung von numerischen Ausdrücken Überläufe auf, so wird nicht, wie im Standard vorgesehen, eine Warnung ausgegeben und mit bestimmten Höchstwerten weitergerechnet, sondern die Ausführung des BASIC-Programms wird mit einer entsprechenden Fehlermeldung abgebrochen. - Nimmt die Sprungziel-Nummer bei der ON-Anweisung einen fehlerhaften Wert an (Nummer < 1 oder Nummer > Anzahl Sprungziele), dann wird nicht, wie im Standard empfohlen, mit einer Fehlermeldung abgebrochen, sondern es wird (wie auch in Microsoft-BASIC üblich) das Programm mit der der ON-Anweisung fol­ genden Anweisung fortgesetzt. - Bei der DATA-Anweisung müssen nicht unbedingt Zeichenfolgen angegeben werden. Werden sie weggelassen, dann wird bei Ausführung der READ- Anweisung null beziehungsweise Leertext geliefert (vergleiche Kapitel 8, DATA- Anweisung). - Bei den Eingaben für eine INPUT-Anweisung können ebenfalls die Daten wegge­ lassen werden. Auch hier wird null beziehungsweise Leertext geliefert (vergleiche Kapitel 8, INPUT-Anweisung) Die Erweiterungen gegenüber ISO 6373 sollen hier nicht im einzelnen aufgeführt werden. Bitte vergleichen Sie in Zweifelsfällen die Normungsschrift mit dieser Doku­ mentation! 9.3. Anpassung von Microsoft-BASIC Pro­ grammen an den EUMEL-BASIC- Compiler Bei der Entwicklung des EUMEL-BASIC-Compilers wurde zwar auf Übereinstim­ mung mit Microsoft-BASIC Wert gelegt, von einer echten Kompatibilität kann aber aufgrund einer ganzen Reihe fehlender Anweisungen und Funktionen nicht gespro­ chen werden. Gegenüber Microsoft-BASIC fehlen vor allem: - alle "Direkt-Kommandos" (RUN, LIST, LOAD, SAVE, MERGE usw.). Die Aufgaben dieser Anweisungen werden von den Prozeduren des EUMEL-Systems über­ nommen. - im weiteren Sinne "hardware-nahe" oder an Maschinensprache orientierte Anwei­ sungen und Funktionen (CALL, PEEK, POKE, USR, WAIT usw.) - die ERROR-Handling Anweisungen (ON ERROR, RESUME) - die Dateiverarbeitungs-Anweisungen und -Funktion (INPUT\#, PRINT\# u.a.; die INPUT- und PRINT-Anweisungen wurden aber auf Zusammenarbeit mit 'sysin' und 'sysout' abgestimmt.) - die Single-Precision-Variablen (Single- und Double-Precision-Variablen wer­ den beide auf den Datentyp REAL abgebildet.) - die hexadezimalen und oktalen Konstanten Anweisungen und Funktionen, die sich abweichend vom Microsoft-Standard verhal­ ten, sind vor allem: - CALL, CHAIN, USR - ERROR, ERR, ERL - LSET, RSET Wichtige Erweiterungen gegenüber Microsoft-BASIC sind: - Möglichkeit des Aufrufs von ELAN-Prozeduren - Maximale Anzahl von Zeichen pro Zeile: 32000 - Maximale Anzahl von Zeichen pro TEXT-Objekt: 32000 - OPTION BASE wirkt auf einzelne Felder (und nicht unbedingt auf ein ganzes Programm) #on ("b")# Hinweis zur Verwendung von MS-BASIC-Programmen im EUMEL-System#off ("b")# Sollen Microsoft-BASIC-Programme in das EUMEL-Systemm übernommen wer­ den, so ist dabei so vorzugehen: 1. Speichern Sie das Programm von MS-BASIC aus mit der ASCII-SAVE-Option ab. Beispiel: SAVE "PROGRAMM.BAS",A 2. Lesen Sie das Programm mittels "DOSDAT" (Programm zum Lesen von MS- DOS-Dateien) im "file ascii"-Modus ein: reserve ("file ascii", /"DOS"); fetch ("PROGRAMM.BAS", /"DOS") Danach steht ihnen das BASIC-Program in der EUMEL-Textdatei "PROGRAMM.BAS" zur Verfügung. #page# #head# EUMEL-BASIC-Compiler Anhang A: Reservierte Wörter % #end# Anhang A: #ib(4)#Reservierte Wörter#ie(4)# Dieser Anhang enthält eine Übersicht über alle vom EUMEL-BASIC-Compiler erkannten reservierten Wörter. ABS Funktion AND Operator AS Anweisungsbestandteil ASC Funktion ATN Funktion BASE Anweisungsbestandteil CALL Anweisung CDBL Funktion CHAIN Anweisung CHR$ Funktion CINT Funktion CLEAR nicht implementiert CLOSE nicht implementiert CLS Anweisung COMMON nicht implementiert FIELD nicht implementiert COS Funktion CSRLIN Funktion CVD Funktion CVI Funktion DATA Anweisung DATE$ Funktion DEF Anweisung DEFDBL Anweisung DEFINT Anweisung DEFSNG Anweisung DEFSTR Anweisung DIM Anweisung ELSE Anweisungsbestandteil END Anweisung EOF Anweisungsbestandteil EQV Operator ERL Funktion ERM$ Funktion ERR Funktion ERROR Anweisung EXP Funktion FIX Funktion FOR Anweisung FRE Funktion GET nicht implementiert GO Anweisungsbestandteil GOSUB Anweisung GOTO Anweisung HEX$ Funktion IF Anweisung IMP Operator INKEY$ Funktion INPUT Anweisung INPUT$ Funktion INSTR Funktion INT Funktion KILL Anweisung LEFT$ Funktion LEN Funktion LET Anweisung LINE Anweisungsbestandteil LOC nicht implementiert LOG Funktion LPOS Funktion LPRINT Anweisung LSET Anweisung MID$ Anweisung/Funktion MKD$ Funktion MKI$ Funktion MOD Operator NAME Anweisung NEXT Anweisung NOT Operator OCT$ Funktion ON Anweisung OPEN nicht implementiert OPTION Anweisung OR Operator OUT nicht implementiert POS Funktion PRINT Anweisung PUT nicht implementiert RANDOMIZE Anweisung READ Anweisung REM Anweisung RESTORE Anweisung RESUME nicht implementiert RETURN Anweisung RIGHT$ Funktion RND Funktion RSET Anweisung SGN Funktion SIN Funktion SPACE$ Funktion SPC Funktion SQR Funktion STEP Anweisungsbestandteil STOP Anweisung STR$ Funktion STRING$ Funktion SUB Anweisungsbestandteil SWAP Anweisung TAB Anweisungsbestandteil TAN Funktion THEN Anweisungsbestandteil TIME$ Funktion TIMER Funktion TO Anweisungsbestandteil TROFF Anweisung TRON Anweisung USING Anweisungsbestandteil USR Funktion VAL Funktion WAIT nicht implementiert WEND Anweisung WHILE Anweisung WIDTH Anweisung WRITE Anweisung XOR Operator #page# #head# EUMEL-BASIC-Compiler Anhang B: Vom Scanner erkannte Symboltypen % #end# Anhang B: Vom #ib(3)#Scanner#ie(3)# erkannte #ib(3)#Symbol­ typen#ie(3)# Der Scanner (ein Paket des EUMEL-BASIC-Systems) hat die Aufgabe, den Pro­ grammtext Zeichen für Zeichen durchzugehen und auszulesen ('scannen'). Dabei werden die Zeichen immer zu logischen Gruppen, sogenannten #on("i")#Symbolen#off("i")# zusammen­ gefaßt. Diese Symbole werden dann dem eigentlichen Compilerprogramm geliefert. Der Scanner entscheidet nach recht komplizierten Regeln, welche Zeichen aus der Quelldatei zu einem Symbol zusammengefaßt werden. Dennoch soll in diesem An­ hang der Begriff des Symbols etwas näher erklärt werden, da der Anwender (vor allem bei den Fehlermeldungen) mit Symboltypen konfrontiert wird. Reservierte Wörter #on ("b")# Anfangszeichen:#off ("b")# Buchstaben #on ("b")# Folgezeichen:#off ("b")# Buchstaben #on ("b")# Beispiele:#off ("b")# PRINT, VAL, TAB, SUB, TO #on ("b")# Vergleiche:#off ("b")# Anhang A Operatoren + - * / \ ^ MOD NOT AND OR XOR EQV IMP < > = <= >= <> #on ("b")# Vergleiche:#off ("b")# Kapitel 4.4. numerische Konstanten #on ("b")# Anfangszeichen:#off ("b")# Ziffern 0 bis 9, Dezimalpunkt '.' #on ("b")# Folgezeichen:#off ("b")# zusätzlich: 'd', 'D', 'e' oder 'E', am Schluß auch '%', '!' oder '\#' #on ("b")# Beispiele:#off ("b")# 1.0, 1.256d123, 12! #on ("b")# Vergleiche:#off ("b")# Kapitel 4.2. TEXT-Konstanten #on ("b")# Anfangszeichen:#off ("b")# Anführungszeichen #on ("b")# Folgezeichen:#off ("b")# Alle Zeichen, sogar Doppelpunkte, Apostrophe und Steuerzei­ chen. Anführungszeichen dürfen #on("i")#innerhalb#off("i")# von TEXT-Konstanten nicht vorkommen. Eine TEXT-Konstante #on("i")#muß#off("i")# aber mit einem Anfüh­ rungszeichen enden. #on ("b")# Beispiele:#off ("b")# "tadellos", "!?': alles mögliche" #on ("b")# Vergleiche:#off ("b")# Kapitel 4.2. Variablen #on ("b")# Anfangszeichen:#off ("b")# Buchstaben #on ("b")# Folgezeichen:#off ("b")# zusätzlich: Punkt '.', Ziffern 0 bis 9, Zeichen '$', '%', '!' und '\#' #on ("b")# Beispiele:#off ("b")# zeiger, A$, Zahl!, n%, var\#4.3% #on ("b")# Vergleiche:#off ("b")# Kapitel 4.3. Felder/Feldelemente wie Variablen, jedoch gefolgt von '(', den Indexangaben und ')' #on ("b")# Beispiele:#off ("b")# zeiger (3), A$ (pointer), Zahl! (7), n% (a, b, c + d) #on ("b")# Vergleiche:#off ("b")# Kapitel 4.3. Benutzer-definierte Funktionen #on ("b")# Anfangszeichen:#off ("b")# FN #on ("b")# Folgezeichen:#off ("b")# Buchstaben, Punkt '.', Ziffern 0 bis 9, Zeichen '$', '%', '!' und '\#' #on ("b")# Beispiele:#off ("b")# FNfunct, FNgauss%, FNf!4.5.6d\# #on ("b")# Vergleiche:#off ("b")# Kapitel 4.5. EOS (End of Statement, Anweisungsende) Doppelpunkt ':' #on ("b")# Vergleiche:#off ("b")# Kapitel 4.1. EOL (End of Line, Zeilenende) Apostrophzeichen ' oder Ende der Dateizeile EOL bedeutet gleichzeitig auch EOS #on ("b")# Vergleiche:#off ("b")# Kapitel 4.1. EOF (End of File, Dateiende) Ende der Quelldatei EOF bedeutet gleichzeitig auch EOL (und somit auch EOS) #on ("b")# Vergleiche:#off ("b")# Kapitel 4.1. Trennzeichen Alle bisher nicht genannten Zeichen werden vom Scanner als Trennzeichen behan­ delt. In BASIC benötigte Trennzeichen sind das Komma (','), das Semikolon (';') sowie die beiden runden Klammern '(' und ')'. Zeichen mit Codes kleiner als 32 (Steuerzeichen) werden vom Scanner überlesen. #page# #head# EUMEL-BASIC-Compiler Anhang C: Übersicht über die Fehlermeldungen % #end# Anhang C: Übersicht über die Fehlermeldungen Übersicht über die verwendeten Fehlermeldungen zur Übersetzungszeit Diese Übersicht enthält alle zur Übersetzungszeit möglichen Fehler, mit Ausnahme der internen Fehler. Die Erläuterungen geben die üblichen Ursachen für die Fehlermeldung an. Es wird empfohlen, sich im Falle eines Fehlers außerdem in Kapitel 8 über die genaue Syntax der betreffenden Anweisung beziehungsweise Funktion zu informieren. #on ("b")#AS ohne NAME#off ("b")# AS darf nur in NAME-Anweisungen vorkommen. #on ("b")#Accessrecht VAR erwartet, CONST gefunden#off ("b")# Beim Aufruf einer ELAN-Prozedur (CALL, CHAIN oder USR) wurde ein VAR-Para­ meter verlangt. Angegeben wurde aber ein CONST-Parameter (zum Beispiel ein Ausdruck). #on ("b")#Ausdruck erwartet#off ("b")# Es wurde ein numerischer oder TEXT-Ausdruck erwartet. Diese Fehlermeldung erscheint zum Beispiel, wenn nach einem Operator kein Ausdruck mehr gefunden wird. #on ("b")#BASE ohne OPTION#off ("b")# BASE darf nur in OPTION BASE-Anweisungen vorkommen. #on ("b")#Bei SWAP nur gleiche Variablentypen erlaubt#off ("b")# Mit SWAP können nur Variablen von genau dem gleichen Typ bearbeitet werden. #on ("b")#Das Feld ist bereits dimensioniert#off ("b")# Diese Fehlermeldung erscheint bei DIM-Anweisungen, wenn das Feld vorher schon explizit oder automatisch dimensioniert wurde. #on ("b")#ELSE ohne IF#off ("b")# ELSE darf nur in IF-Anweisungen vorkommen. ELSE muß in der gleichen Zeile stehen wie die zugehörige IF-Anweisung. #on ("b")#Falsche Felddimension: Dimensioniert in ... Dimensionen, gefundene Anzahl Indizes: ...#off ("b")# Beim Zugriff auf ein Feldelement wurden zu viele oder zu wenig Indizes angegeben. #on ("b")#FOR ohne NEXT#off ("b")# Diese Fehlermeldung erscheint, wenn am Programmende für eine FOR-Anweisung kein korrespondierendes NEXT gefunden wurde. #on ("b")#Falsche Reihenfolge der Zeilennummern#off ("b")# Die Zeilennummern wurden nicht in aufsteigender Reihenfolge angegeben. #on ("b")#Falscher Typ#off ("b")# Es wurde ein anderer Datentyp erwartet als angegeben, und es konnte keine automa­ tische Konvertierung vorgenommen werden. #on ("b")#Falscher Typ der Operanden#off ("b")# Bei einem dyadischen Operator wurden Operanden angegeben, für deren Typen dieser Operator nicht definiert ist (vergleiche Kapitel 4.4.). #on ("b")#Falscher Typ des Operanden#off ("b")# Bei einem monadischen Operator wurde ein Operand angegeben, für dessen Typ dieser Operator nicht definiert ist (vergleiche Kapitel 4.4.). #on ("b")#Fehlerhafte Bereichsangabe#off ("b")# Diese Fehlermeldung kann bei den Anweisungen DEFDBL, DEFINT, DEFSNG und DEFSTR auftreten, wenn bei einer Bereichsangabe der Buchstabe vor dem Binde­ strich im Alphabet nach dem Buchstaben hinter dem Bindestrich steht. #on ("b")#Fehlerhafte Dimensionierung: Die Obergrenze muß >= 1 sein#off ("b")# Es wurde versucht, ein Feld mit dem größten Index null in einer Dimension zu dimensionieren, obwohl die Index-Untergrenze mit OPTION BASE auf eins einge­ stellt war. #on ("b")#Fehlerhafte Laufvariable#off ("b")# Nach einer NEXT-Anweisung wurde eine Laufvariable gefunden, die nicht zur letzten anhängigen FOR-Anweisung gehört. Der Fehler tritt auf, wenn Schleifen geschachtelt wurden. #on ("b")#Fehlerhafte Zeilennummer#off ("b")# Die Zeilennumer entspricht nicht der Syntax für Zeilennumern. #on ("b")#Fehlerhafter Funktionsaufruf#off ("b")# - Die Prozedur liefert keinen Wert Es wurde versucht, eine Prozedur mit USR aufzurufen, die keinen Wert liefert. - Der Typ des Resultats ist nicht erlaubt, gefunden: ... Es wurde versucht, eine Prozedur mit USR aufzurufen, die ein Objekt liefert, dessen Datentyp in BASIC nicht bekannt ist. - Kein Argument erwartet Es wurde versucht, eine benutzer-definierte Funktion, die ohne Parameter definiert wurde, mit Argument(en) aufzurufen. - ... Argument(e) erwartet Die Anzahl der angegebenen Argumente ist kleiner als die Anzahl der bei der Funktionsdefinition angegebenen Parameter. - Nur ... Argument(e) erwartet Die Anzahl der angegebenen Argumente ist größer als die Anzahl der bei der Funk­ tionsdefinition angegebenen Parameter. - Kein Resultat erlaubt (gefunden: ...) Bei CALL oder CHAIN wurde versucht, eine wertliefernde Prozedur aufzurufen. #on ("b")#Funktionsaufruf ohne Zusammenhang#off ("b")# Es wurde ein Funktionsaufruf angegeben, wo eine Anweisung erwartet wurde. #on ("b")#GO ohne TO oder SUB#off ("b")# Das reservierte Wort GO kann nur in GO SUB oder GO TO auftreten. #on ("b")#Interner Fehler#off ("b")# Bei der Übersetzung wurde innerhalb des Compilerprogramms ein interner Fehler ausgelöst. (vergleiche Kapitel 7.1.) #on ("b")#Nach OPTION BASE ist nur 0 oder 1 erlaubt#off ("b")# Es wurde versucht, eine Zahl > 1 nach OPTION BASE anzugeben. #on ("b")#NEXT ohne FOR#off ("b")# Es wurde eine NEXT-Anweisung gefunden, die keiner FOR-Anweisung zuzuordnen ist, da keine "offenen" FOR-Schleifen mehr anhängig sind. #on ("b")#Nicht implementiert#off ("b")# Einige reservierte Wörter werden vom BASIC-Compiler erkannt, obwohl die zugehö­ rigen Anweisungen oder Funktionen nicht implementiert sind (vgl. Anhang A). #on ("b")#Parametervariable kommt mehrmals vor#off ("b")# Bei der Definition einer "user function" kommt ein Parameter in der Parameterliste mehr als einmal vor. #on ("b")#Rekursive Funktionsdefinition#off ("b")# Es wurde versucht, in der Definition einer "user function" die zu definierende Funk­ tion aufzurufen. #on ("b")#STEP ohne FOR#off ("b")# STEP darf nur in FOR-Anweisungen vorkommen. #on ("b")#SUB ohne GO#off ("b")# SUB darf nur in GOSUB vorkommen. #on ("b")#Syntaxfehler: #off ("b")# Wenn dieser Fehler erscheint, wurde vom Compiler eine Angabe gefunden, die nach den Syntaxregeln dort nicht erwartet wurde oder fehlerhaft ist. #on ("b")#TAB ohne (L)PRINT#off ("b")# TAB darf nur in PRINT- und LPRINT-Anweisungen vorkommen. #on ("b")#THEN ohne IF#off ("b")# THEN darf nur in IF-Anweisungen vorkommen. THEN muß in der gleichen Zeile stehen wie die zugehörige IF-Anweisung. #on ("b")#TO ohne Zusammenhang#off ("b")# TO darf nur in FOR-Anweisungen oder in GO TO vorkommen. #on ("b")#Text zu lang#off ("b")# Dieser Fehler erscheint, wenn ein Anführungszeichen fehlt beziehungsweise ein Anführungszeichen zu viel gefunden wird. #on ("b")#Unbekannte Funktion, Argument(e) angegeben: ...#off ("b")# Es wurde versucht, eine Funktion mit einem Argument aufzurufen, für dessen Typ die Funktion nicht definiert ist. #on ("b")#Unbekannte Prozedur, Parameter angegeben: ...#off ("b")# Die angegebene Prozedur konnte mit den angegebenen Parametertypen nicht gefun­ den werden. #on ("b")#Undefinierte 'user function'#off ("b")# Es wurde versucht, eine benutzer-definierte Funktion aufzurufen, die (noch) nicht definiert wurde. #on ("b")#USING ohne (L)PRINT#off ("b")# USING darf nur in PRINT- und LPRINT-Anweisungen vorkommen. #on ("b")#WEND ohne WHILE#off ("b")# Es wurde eine WEND-Anweisung gefunden, die keiner WHILE-Anweisung zuzuord­ nen ist, da keine "offenen" WHILE-Schleifen mehr anhängig sind. #on ("b")#WHILE ohne WEND#off ("b")# Diese Fehlermeldung erscheint, wenn am Programmende für eine WHILE-Anweisung kein korrespondierendes WEND gefunden wurde. #on ("b")#Zeile mit dieser Nummer existiert nicht#off ("b")# Es wurde versucht, mit GOTO oder GOSUB zu einer Zeilennumer zu verzweigen, die im Programm nicht angegeben wurde. Übersicht über die innerhalb des BASIC-Systems ausgelösten Laufzeitfehler Die meisten Laufzeitfehler werden auch bei BASIC-Programmen im EUMEL-System erzeugt (vergleiche Kapitel 7.2.). Einige werden aber innerhalb des BASIC-Systems erzeugt. Die nachfolgende Übersicht enthält die innerhalb des BASIC-Systems aus­ gelösten Fehler mit Angabe des gelieferten Fehlercodes und der Fehlermeldung. #on ("b")#Fehlercode:#off ("b")# 1003 #on ("b")#Fehlermeldung:#off ("b")# RETURN ohne GOSUB Eine RETURN-Anweisung wurde gefunden, obwohl keine GOSUB-Anweisung mehr anhängig war. #on ("b")#Fehlercode:#off ("b")# 1004 #on ("b")#Fehlermeldung:#off ("b")# RESTORE: Keine DATA-Anweisung in oder nach #right#Zeile ... gefunden Eine RESTORE-Anweisung konnte nicht ausgeführt werden, weil in oder nach der in der Anweisung angegebenen Zeilennummer keine DATA-Anweisung mehr steht. #on ("b")#Fehlercode:#off ("b")# 1005 #on ("b")#Fehlermeldung:#off ("b")# bei ^: negative Basis, gebrochener Exponent: ... Es wurde versucht, eine negative Zahl mit einer gebrochenen Zahl zu potenzieren. #on ("b")#Fehlercode:#off ("b")# 1005 #on ("b")#Fehlermeldung:#off ("b")# USING: kein Format gefunden Bei einer PRINT USING-Anweisung wurde kein Format für die Ausgabe angegeben oder die Formatzeichenkette enthält keine Formatzeichen. #on ("b")#Fehlercode:#off ("b")# 1005 #on ("b")#Fehlermeldung:#off ("b")# USING-Format fehlerhaft: ... Bei einer PRINT USING-Anweisung wurde ein fehlerhaftes Format angegeben. #on ("b")#Fehlercode:#off ("b")# 1004 #on ("b")#Fehlermeldung:#off ("b")# Keine Daten mehr für READ Es stehen keine Daten mehr für die READ-Anweisung zur Verfügung; der READ- DATA-Zeiger zeigt hinter das Ende der letzten DATA-Anweisung. #on ("b")#Fehlercode:#off ("b")# 1005 #on ("b")#Fehlermeldung:#off ("b")# WIDTH: negative Angabe: ... Nach WIDTH wurde eine negative Zahl gefunden. #on ("b")#Fehlercode:#off ("b")# 1013 #on ("b")#Fehlermeldung:#off ("b")# READ: Falscher Datentyp, ... ist kein INT Einer INT-Variablen konnte kein Wert zugewiesen werden, da das aktuelle Objekt aus der DATA-Liste keine gültige Darstellung eines INT-Wertes war oder ein "quoted string" gefunden wurde. #on ("b")#Fehlercode:#off ("b")# 1013 #on ("b")#Fehlermeldung:#off ("b")# READ: Falscher Datentyp, ... ist kein REAL Einer REAL-Variablen konnte kein Wert zugewiesen werden, da das aktuelle Objekt aus der DATA-Liste keine gültige Darstellung eines REAL-Wertes war oder ein "quoted string" gefunden wurde. #on ("b")#Fehlercode:#off ("b")# 1051 (interner Fehler) #on ("b")#Fehlermeldung:#off ("b")# variierend Bei der Ausführung des Programms trat in einer Prozedur des BASIC-Systems ein interner Fehler auf. (Vergleiche Kapitel 7.) #on ("b")#Fehlercode:#off ("b")# 1080 #on ("b")#Fehlermeldung:#off ("b")# INPUT-Fehler ( Fehlerart ) : > Eingabezeile < Bei einer INPUT-Anweisung, die auf eine mit 'sysin' eingestellte Datei wirken sollte, kam es zu einem Fehler der angegebenen Fehlerart. Nach dem Doppelpunkt wird die Eingabezeile aus der Eingabedatei ausgegeben. #page# #head# EUMEL-BASIC-Compiler Anhang D: ELAN-Prozeduren des Compilers % #end# Anhang D: ELAN-Prozeduren des Compilers #on ("b")#PROC #ib(3)#basic#ie(3)# (TEXT CONST dateiname)#off ("b")# Das in der Datei 'dateiname' enthaltene BASIC-Programm wird dem BASIC- Compiler zur Übersetzung übergeben. Werden keine Fehler gefunden, so wird das Programm direkt nach der Übersetzung ausgeführt. Beispiel: basic ("Mein liebstes BASIC-Programm")#off ("b")# #on ("b")#PROC basic (TEXT CONST dateiname, prozedurname)#off ("b")# Das in der Datei 'dateiname' enthaltene BASIC-Programm wird dem BASIC- Compiler zur Übersetzung übergeben. Werden keine Fehler gefunden, dann wird das Programm unter dem Namen 'prozedurname' dauerhaft eingetragen (inser­ tiert). Das Programm wird nicht ausgeführt. Beachten Sie, daß der Prozedurname den Vorschriften für ELAN-Prozedurnamen entsprechen muß und außerdem #on ("b")#keine Leerzeichen#off ("b")# enthalten darf. (Zur Namenswahl siehe auch Kapitel 3.) Beispiel: basic ("Mein liebstes BASIC-Programm", "liebstesprogramm")#off ("b")# #on ("b")#PROC #ib(3)#basic list#ie(3)# (BOOL CONST status)#off ("b")# Mit der Prozedur 'basic list' kann eingestellt werden, ob die gerade vom Compiler übersetzten Programmzeilen angezeigt werden sollen oder nicht (vergleiche Kapitel 3.). basic list (TRUE)#off ("b")#: Die übersetzten Zeile werden angezeigt basic list (FALSE)#off ("b")#: Die übersetzten Zeile werden nicht angezeigt #on ("b")#PROC #ib(3)#basic page#ie(3)# (BOOL CONST status)#off ("b")# Mit der Prozedur 'basic page' kann eingestellt werden, wie die Ausgaben von BASIC-Programmen behandelt werden, wenn der Bildschirm voll ist (vergleiche Kapitel 5, Steuerung der Bildschirmausgaben). basic page (TRUE): Beim Erreichen des Bildschirmendes wird auf einen Tastendruck gewartet (vgl. Kap. 5.) basic page (FALSE): Beim Erreichen des Bildschirmendes wird 'gescrollt'.