MAL-Homepage Inhaltsverzeichnis



MAL Dokumentation: Ein- Ausgabe




Inhalt:

1. ALLGEMEINES
1.1. Ausgabeumleitung
1.2. Formatieren
2. EINLESEN VON MAL-CODE
3. TEXTDATEIEN
3.1. Ausgabe von Tabellen
3.2. Einlesen von ASCII-Daten
4. BINÄRDATEIEN
4.1. Lesen und Schreiben
4.2. Interpretieren von Binärdaten


1. ALLGEMEINES

Ein Überblick über alle Ein/Ausgabe-Worte kann unter Topic
input/output gefunden werden. Hier werden nur einige wichtige Worte und die grundsätzliche Ein/Ausgabe-Strategie beschrieben.

MAL-Homepage Inhaltsverzeichnis


1.1. Ausgabeumleitung

Mit dem Wort
output können alle Ausgaben (ausgenommen Meldungen des Interpreters) auf Datei umgeleitet werden. Beim Aufruf von output wird die angegebene Datei neu eingerichtet (eine bestehende gleichlautende Datei wird dabei ohne Warnung gelöscht). Mit dem nächsten Aufruf von output wird die zuletzt verwendete Datei geschlossen und eine neue eingerichtet.

Das Wort con übergibt einen Dateinamen am Stack, der für das Zurückstellen der Ausgabe auf den Bildschirm verwendet werden kann.

Beispiel:

"rampe.dat" output
17 ramp . cr
con output


Die Ausgabe der Rampe erfolgt dabei auf die Datei ´rampe.dat´.

Mit dem Wort prn_open wird die Ausgabe auf den Drucker umgeleitet. Da bei manchen Systemen der Drucker über einen Druckerspooler betrieben wird erfolgt die effektive Ausgabe meist erst beim Beenden der Ausgabeumleitung mit prn_close.

Hinweis:

Bei Windows Betriebssystemen ist die direkte Ausgabe auf die Datei "prn" nicht mehr wie unter MS-DOS möglich. Ich gebe daher die Daten auf eine Hilfsdatei aus und drucke diese anschließend mit dem Programm Printfile, das als Freeware heruntergeladen werden kann. Die Definition des Wortes prn_close (in der Datei 'auto.cpu') muss dann folgendermaßen aussehen:
: prn_close
"con" output "\Programme\PrintFile\prfile32 /q print.txt" system ;

MAL-Homepage Inhaltsverzeichnis


1.2. Formatieren

Das Format für die Ausgabe von Gleitkommazahlen (das ist der einzige in MAL verwendete Zahlentyp) kann durch Einrichten einer Variablen mit dem Namen format eingestellt werden.

Dieser Variable muß ein Formatstring zugewiesen werden. Die Möglichen Formatangaben entsprechen den in der Programmiersprache C üblichen.

Beispiele:

"%0.0f" >> format
3.1415 .
3


"%7.2f" >> format 3.1415 . 3.14
Das voreingestellte Ausgabeformat entspricht

"%g" >> format

Das Wort
cr (Abkürzung für Carriadge Return) führt einen Zeilenwechsel durch.

MAL-Homepage Inhaltsverzeichnis


2. EINLESEN VON MAL-CODE

Eine Datei, die exekutierbaren MAL-Code enthält, kann mit dem Wort
include interpretiert werden. Selbstverständlich kann diese Datei ebenfalls ´include´-Anweisungen enthalten.

Syntax:

dateiname ->

Definitionen, die in der Datei gemacht wurden bleiben auch nach dem Abarbeiten der Datei bestehen. Das heißt, die Datei stellt im Gegensatz zu einer Doppelpunktdefinition keine Black-Box dar.

Der Weg, MAL-Programme in Dateien zu editieren und diese mit include auszuführen ist für den Anfang die einfachste Methode der Entwicklung von MAL-Programmen. Man kann die Dateien auch editieren, ohne den MAL-Interpreter zu verlassen, indem man das Wort med verwendet. Es empfiehlt es sich aber, die Programmcodes in sogenannten Foldern unterzubringen, wie das im Kapitel Programmentwicklung erläutert ist.

Mit include können auch Schnittstellen (vor allem zu selbstentwickelten) Fremdprogrammen verwirklicht werden. Das Fremdprogramm muß in diesem Fall die Daten in Form von exekutierbarem MAL-Code (in der Regel Zahlen mit Verbundklammern) auf Datei schreiben, die in der Folge mit inlcude gelesen werden kann.

Anstatt das Wort include zu verwenden kann man den MAL-Interpreter auch mit in der Kommandozeile angegebenen Dateinamen starten. Die Dateien werden dann in der angegebenen Reihenfolge interpretiert.

Beispiel:

Das Fremdprogramm hätte eine Datei ´daten´ mit folgendem Inhalt erstellt:

[ 1 2 3 3.4 3 ] 
draw screen bye


so bewirkt der Aufruf von

mal daten

auf Betriebssystemebene, daß die Zahlenfolge am Bildschirm graphisch dargestellt wird. Nach dem Drücken der Eingabetaste wird der MAL-Interpreter wieder beendet.

MAL-Homepage Inhaltsverzeichnis


3. TEXTDATEIEN

Eine Textdatei wird am MAL-Stack als Verbund von Strings (oder kurz ´Stringverbund´) dargestellt. Das Wort
read dient zum Einlesen einer Textdatei.

Syntax:

dateiname -> [ zeile1 zeile2 ... ]

Das Wort write gibt einen Stringverbund am Bildschirm aus. Will man mit write auf eine Datei ausgeben, so kann man mit output die Ausgabe umleiten. write gibt im Gegensatz zu ´. ´ (Punkt) keine Klammern am Anfang und am Ende des Verbundes aus.

MAL-Homepage Inhaltsverzeichnis


3.1. Ausgabe von Tabellen

Die Worte
table und html_table bauen Tabellen auf. Beide Worte legen die Tabelle in Form eines Verbunds von Strings am Stack ab (kann mit write ausgegeben werden). Das Ergebnis von table ist direkt im Textformat und jenes von html_table kann mit einem HTML-Browser gelesen werden.

Syntax:

[ [ a11 a12 a13 ...]
[ a21 a22 a23 ...]
[ a31 a32 a33 ... ]
.
.
]
[ kopf1 kopf2 kopf3 ... ] ->
Die Parameter ´aIJ´ können Strings oder Zahlen sein.

Beispiel:
[ 
[ "Müller" 87.5 45 ]
[ "Huber" 55.7 39 ]
[ "Meier" 105 46 ] ]
[ "Name" "Gewicht" "Schuhgröße" ] table write


+------------------------------+ | Name | Gewicht | Schuhgröße| +------------------------------+ | Müller | 87.5 | 45 | | Huber | 55.7 | 39 | | Meier | 105 | 46 | +------------------------------+
Benötigt man keine Kopfzeile, so kann man einen leeren Verbund als Kopfzeilendefinition übergeben.

MAL-Homepage Inhaltsverzeichnis


3.2. Einlesen von ASCII-Daten

Mit dem Wort
field> können numerische Daten im ASCII-Format von einer Datei gelesen werden. Voraussetzung ist, dass die Daten spaltenweise durch Blank getrennt abgelegt sind und alle Spalten gleich viele Zeilen haben.

Syntax:

dateiname -> [ spalte1 spalte2 ... ]

Das gelesene Ergebnis ist ein Verbund von Realverbunden, von denen jeder die Daten einer Spalte enthält.

MAL-Homepage Inhaltsverzeichnis


4. BINÄRDATEIEN

4.1. Lesen und Schreiben

Dateien mit Binärdaten können mit dem Wort
read_binary gelesen und mit dem Wort write_binary geschrieben werden. Die Stackeinträge, die von read_binary erzeugt werden, sind vom Typ "ungültig" und können vom MAL-Interpreter zwar gespeichert, aber nicht weiter verarbeitet werden (ausser mit write_binary und analyze_binary).

MAL-Homepage Inhaltsverzeichnis


4.2. Interpretieren von Binärdaten

Das Wort
analyze_binary kann für die Umwandlung von Binärdaten (Stackeinträge vom Typ "ungültig") auf MAL-Daten verwendet werden. Es hat folgende Syntax:

binär code -> mal_daten

wobei 'binär' den Stackeintrag vom Typ "ungültig" darstellt und 'code' einen String mit MAL-Code zum Analysieren des Binärdaten enthalten muss. Bei der Ausührung dieses Codes sind folgende zusätzliche Worte für die Konvertierung von Binärdaten in MAL-Daten verfügbar:



Bei jeder Ausführung einer der angeführten Worte wird die entsprechende Anzahl von Bytes aus den Binärdaten gelesen und der Lesezeiger weiter gestellt. Mit remaining_bytes kann die Anzahl der noch verfügbaren Bytes bestimmt werden.

Beispiel:

: hex_dump
   : ein_byte_umwandeln drop
   byte>hex ;
[ remaining_bytes do ein_byte_umwandeln ] ;


1234 "hex_dump" analyze_binary .

[
0
40
9a
44 ]


Selbstverständlich kann der binäre Datenstatz auch ein gültiger MAL-Datensatz (wie im obigen Beispiel die Zahl 1234) sein.

MAL-Homepage Inhaltsverzeichnis