Next: Datenräume
Up: L3 Referenzhandbuch
Previous: Einfache Datentypen
Textdateien sind Datenräume, deren innere Struktur als Folge von Sätzen aufgefaßt
wird. Beispielsweise können das die einzelnen Zeilen eines Textdokuments, das am
Bildschirm angezeigt werden kann, sein. Der Zugriff auf solche Objekte erfolgt durch
Assoziierung eines solchen Datenobjekts mit dem Datentyp FILE.
Ein FILE ist ein Datenobjekt des Typs sequentielle Datei. Eine solche Datei besteht
aus einer Folge von records (Sätzen oder Zeilen). Die Assoziierungsprozedur
sequential file hat die Aufgabe, eine in einem Programm deklarierte FILE VAR mit
einem bereits vorhandenen oder noch einzurichtenden Datenraum, der die geforderte
innere Struktur »Reihe von Sätzen« hat, zu koppeln. Bei der Koppelung muß angegeben werden, in welcher Weise auf die Datei zugegriffen werden soll.
Der erste Parameter der Prozedur sequential file gibt stets die »Betriebsrichtung«
(TRANSPUTDIRECTION) der folgenden Operationen an. Es gibt deren drei:
- input
-
Die Datei kann vom Programm nur sequentiell gelesen werden. Durch input wird bei
der Assoziierung automatisch auf den ersten Satz der Datei positioniert. Ist die zu
lesende Datei nicht vorhanden, wird ein Fehler gemeldet.
- output
-
Die Datei kann vom Programm nur sequentiell beschrieben werden. Durch output
wird bei der Assoziierung automatisch hinter den letzten Satz der Datei positioniert
(bei einer leeren Datei also auf den ersten Satz). Ist die Datei vor der Assoziierung
nicht vorhanden, wird sie automatisch eingerichtet.
- modify
-
Die Datei kann vom Programm in beliebiger Weise gelesen und beschrieben werden.
Im Gegensatz zu den Betriebsrichtungen input und output, bei denen ausschließlich ein rein sequentielles Lesen oder Schreiben erlaubt ist, kann bei modify beliebig
positioniert, gelöscht, eingefügt und neu geschrieben werden.
Bei Assoziierung mit modify ist bei einer existierenden Datei die Position zunächst
undefiniert. Eine Positionierung muß explizit vorgenommen werden. Die Datei wird
automatisch eingerichtet, wenn sie vor der Assoziierung nicht vorhanden war.
Der zweite Parameter der Assoziierungsprozedur sequential file gibt an, unter
welchem Namen die Datei in der Task existiert oder eingerichtet werden soll.
- Beispiel:
FILE VAR meine datei :: sequential file (output, "xyz");
Folgendes Beispiel zeigt ein Programm, welches eine Datei liest und auf dem Ausgabemedium ausgibt:
- Beispiel:
FILE VAR f :: sequential file (input, "datei1");
TEXT VAR satz;
WHILE NOT eof (f) REP
getline (f, satz);
putline (satz);
END REP.
Das Festlegen einer Betriebsrichtung impliziert eine Kontrolle der Benutzung der
betreffenden Datei und hilft somit Programmierfehler zu vermeiden.
ACHTUNG: Alle Prozeduren, die auf FILEs zugreifen, verlangen Objekte vom Typ
FILE VAR, da auch die Leseoperationen als ändernd betrachtet werden.
sequential file
FILE PROC sequential file(TRANSPUTDIRECTION CONST mode,
DATASPACE CONST ds)
- Wirkung: Assoziierung einer sequentiellen Datei mit dem Dataspace 'ds'
und der Betriebsrichtung 'mode' (vergl. modify, input bzw.
output). Diese Prozedur dient zur Assoziierung eines temporären
Datenraums in der Benutzer-Task, auf den nach der Beendigung
des Programmlaufs nicht mehr zugegriffen werden kann.
- Bemerkung: Da der Name des Datenraums nach Beendigung des Programmlaufs nicht mehr ansprechbar ist, muß der Datenraum explizit
vom Programm gelöscht werden, da sonst eine »Datenraumleiche« entsteht!
FILE PROC sequential file(TRANSPUTDIRECTION CONST mode,
TEXT CONST name)
- Wirkung: Assoziierung einer sequentiellen Datei mit dem Namen 'name'
und der Betriebsrichtung 'mode'. Existiert der FILE bereits, dann
wird mit input auf den Anfang des FILEs, bei output hinter den
letzten Satz der Datei positioniert. Existiert dagagen der FILE noch
nicht und ist die TRANSPUTDIRECTION output oder modify, wird
ein neuer FILE eingerichtet.
- Fehler: "name" gibt es nicht
Es wurde versucht, einen nicht vorhandenen FILE mit input zu
assoziieren.
input
PROC input (FILE VAR file)
- Wirkung: Ändern der Verarbeitungsart von modify oder output in input.
Dabei wird auf den ersten Satz der Datei positioniert.
TRANSPUTDIRECTION CONST input
- Wirkung: Assoziierung - in Zusammenhang mit der Prozedur sequential
file -einer sequentiellen Datei mit der TRANSPUTDIRECTION
input (nur lesen).
output
PROC output (FILE VAR file)
- Wirkung: Ändern der Verarbeitungsart von input oder modify in output.
Dabei wird hinter den letzten Satz der Datei positioniert.
TRANSPUTDIRECTION CONST output
- Wirkung: In Verbindung mit der Prozedur sequential file kann eine Datei
assoziiert werden mit der Betriebsrichtung output (nur
schreiben).
modify
PROC modify (FILE VAR file)
- Wirkung: Ändern der Betriebsrichtung von input oder output in die
Betriebsrichtung modify.
TRANSPUTDIRECTION CONST modify
- Wirkung: Diese Betriebsrichtung erlaubt das Vorwärts- und Rückwärts-
Positionieren und das beliebige Einfügen und Löschen von Sätzen.
eof
BOOL PROC eof (FILE CONST file)
- Wirkung: Informationsprozedur auf das Ende eines FILEs. Liefert den Wert
TRUE, sofern hinter den letzten Satz eines FILEs positioniert
wurde, sonst FALSE.
line no
INT PROC line no (FILE CONST file)
- Wirkung: Liefert die aktuelle Zeilennummer.
lines
PROC lines (FILE VAR file)
- Wirkung: Liefert die Anzahl der Zeilen der Datei 'file'.
In der Betriebsrichtung input sind nur Leseoperationen auf der Datei zugelassen. Die
Assoziierungsprozedur sequential file bewirkt folgendes:
-
Falls die Eingabedatei noch nicht existiert, wird eine Fehlermeldung ausgegeben.
-
Falls es eine Datei des angegebenen Namens gibt, wird auf das erste Zeichen des
ersten Satzes positioniert.
Mit »Wort« ist im folgenden eine nicht leere Zeichenkette aus Zeichen, die ungleich
dem Leerzeichen sind, gemeint.
get
PROC get (FILE VAR file, INT VAR number)
- Wirkung: Lesen des nächsten Wortes aus der Datei 'file' und Konvertierung
des Wortes zu einem Integer-Objekt.
PROC get (FILE VAR file, REAL VAR number)
- Wirkung: Lesen des nächsten Wortes aus der Datei 'file' und Konvertierung
des Wortes zu einem Real-Objekt.
PROC get (FILE VAR file, TEXT VAR text)
- Wirkung: Lesen des nächsten Wortes aus der Datei 'file'.
PROC get (FILE VAR file, TEXT VAR text, TEXT CONST delimiter)
- Wirkung: Lesen eines TEXT-Wertes 'text' von der Datei 'file', bis das Zeichen
'delimiter' angetroffen wird. Ein eventueller Zeilenwechsel in der
Datei wird dabei übergangen.
PROC get (FILE VAR file, TEXT VAR text, INT CONST maxlength)
- Wirkung: Lesen eines TEXT-Wertes 'text' von der Datei 'file' mit 'maxlength'
Zeichen. Ein eventueller Zeilenwechsel in der Datei wird dabei
nicht übergangen.
getline
PROC get line (FILE VAR file, TEXT VAR record)
- Wirkung: Lesen der nächsten Zeile aus der sequentiellen Datei 'file'.
- Fehler: "Datei zu!"
Die Datei 'file' ist gegenwärtig nicht assoziiert.
"Leseversuch nach Dateiende"
Es wurde versucht, über die letzte Zeile einer Datei hinaus zu
lesen.
"Leseversuch auf output file"
Es wurde versucht, von einem mit output assoziierten FILE zu
lesen.
"Unzulässiger Zugriff auf modify-FILE"
Es wurde versucht, aus einer mit modify assoziierten Datei zu
lesen. Bei getline muß die Datei mit input assoziiert sein.
In der Betriebsrichtung modify sind Lese- und Schreiboperationen auf der Datei
zugelassen. Desweiteren ist beliebiges Positionieren in der Datei erlaubt. Neue Sätze
können an beliebiger Stelle in die Datei eingefügt werden, die sequentielle Struktur
der Datei bleibt erhalten. Die Assoziierungsprozedur sequential file bewirkt
folgendes:
-
Falls die Ausgabedatei noch nicht existiert, wird sie angelegt.
-
Falls es bereits eine Datei des angegebenen Namens gibt, ist undefiniert, wo positioniert ist. Die erste Positionierung muß explizit vorgenommen werden!
col
PROC col (FILE VAR file, INT CONST position)
- Wirkung: Positionierung auf die Spalte 'position' innerhalb der aktuellen
Zeile.
INT PROC col (FILE CONST file)
- Wirkung: Liefert die aktuelle Position innerhalb der aktuellen Zeile.
down
PROC down (FILE VAR file)
- Wirkung: Positionieren um eine Zeile vorwärts.
PROC down (FILE VAR file, INT CONST lines)
- Wirkung: Positionieren um 'lines' Zeilen vorwärts.
to line
PROC to line (FILE VAR file, INT CONST number)
- Wirkung: Positionierung auf die Zeile 'number'.
to eof
PROC to eof (FILE VAR file)
- Wirkung: Positionierung auf die letzte Zeile der Datei.
up
PROC up (FILE VAR file)
- Wirkung: Positionieren um eine Zeile rückwärts.
PROC up (FILE VAR file, INT CONST number)
- Wirkung: Positionieren um 'number' Zeilen rückwärts.
delete record
PROC delete record (FILE VAR file)
- Wirkung: Der aktuelle Satz der Datei 'file' wird gelöscht. Der folgende Satz
wird der aktuelle Satz.
insert record
PROC insert record (FILE VAR file)
- Wirkung: Es wird ein leerer Satz in die Datei 'file' vor die aktuelle Position
eingefügt. Dieser Satz kann anschließend mit write record
beschrieben werden (d.h. der neue Satz ist jetzt der aktuelle Satz).
read record
PROC read record (FILE CONST file, TEXT VAR record)
- Wirkung: Liest den aktuellen Satz der Datei 'file' in die TEXT-Variable
'record'. Die Position wird dabei nicht verändert.
write record
PROC write record (FILE VAR file, TEXT CONST record)
- Wirkung: Schreibt einen Satz in die Datei 'file' an die aktuelle Position.
Dieser Satz muß bereits vorhanden sein, d.h. mit write record
kann keine leere Datei beschrieben werden, sondern es wird der
Satz an der aktuellen Position überschrieben. Die Position in der
Datei wird nicht verändert.
In der Betriebsrichtung output sind nur Schreiboperationen auf der Datei zugelassen.
Die Assoziierungsprozedur sequential file bewirkt folgendes:
-
Falls die Ausgabedatei noch nicht existiert, wird sie angelegt und auf den ersten
Satz positioniert.
-
Falls es bereits eine Datei des angegebenen Namens gibt, wird hinter den letzten
Satz positioniert. Die Datei kann fortgeschrieben werden.
line
PROC line (FILE VAR file)
- Wirkung: Positionierung auf die nächste Zeile der Datei 'file'.
PROC line (FILE VAR file, INT CONST lines)
- Wirkung: Positionierung mit 'lines' Zeilen Vorschub in der Datei 'file'.
- Fehler: "Datei zu!"
Die Datei 'file' ist gegenwärtig nicht assoziiert.
"Schreibversuch auf input-File"
Es wurde versucht, auf einen mit 'input' assoziierten FILE zu
schreiben.
put
PROC put (FILE VAR file, INT CONST number)
- Wirkung: Ausgabe eines INT-Wertes 'number' in die Datei 'file'. Dabei wird
ein Leerzeichen an die Ausgabe angefügt.
PROC put (FILE VAR file, REAL CONST number)
- Wirkung: Ausgabe eines REAL-Wertes 'number' in die Datei 'file'. Dabei wird
ein Leerzeichen an die Ausgabe angefügt.
PROC put (FILE VAR file, TEXT CONST text)
- Wirkung: Ausgabe eines TEXT-Wertes 'text' in die Datei 'file'. Dabei wird ein
Leerzeichen an die Ausgabe angefügt.
- Bemerkung: Bei Textdateien, die mit dem Editor weiterbearbeitet werden
sollen, ist also zu beachten: eine Ausgabe mit 'put' setzt ein
'blank' hinter die Ausgabe. Falls dieses Leerzeichen das letzte
Zeichen in der Zeile ist, wird eine Absatzmarke in der Zeile
gesetzt. Wird mit write oder putline ausgegeben, steht kein Leerzeichen und somit keine Absatzmarke am Zeilenende.
putline
PROC putline (FILE VAR file, TEXT CONST record)
- Wirkung: Ausgabe eines TEXTes 'record' in die Datei 'file'. Danach wird auf
die nächste Zeile positioniert. 'file' muß mit 'output' assoziiert
sein.
write
PROC write (FILE VAR file, TEXT CONST text)
- Wirkung: Schreibt 'text' in die Datei 'file' (analog put (f, text)), aber
ohne Trennblank.
Textdateien können zeilenweise sortiert werden. Die Sortierung kann nach ASCII oder
lexikographisch erfolgen. Die ASCII Sortierung ordnet zeilenweise durch »text
(zeile[i]) <= text (zeile[j])«. Insbesondere werden Kleinbuchstaben hinter
Großbuchstaben geordnet.
Die lexikographischen Sortierung ordnet zeilenweise durch »text (zeile[i])
LEXGREATEREQUAL text (zeile[j])«, also nach Art des Telefonbuchs.
lexsort
PROC lexsort (TEXT CONST filename)
- Wirkung: Die Datei 'filename' wird zeilenweise in lexikographischer
Ordnung sortiert.
PROC lexsort (TEXT CONST filename, INT CONST firstpos)
- Wirkung: Die Datei 'filename' wird zeilenweise in lexikographischer
Ordnung, beginnend ab Spalte 'firstpos', sortiert.
sort
PROC sort (TEXT CONST filename)
- Wirkung: Die Datei 'filename' wird zeilenweise in lexikographischer
Ordnung sortiert.
PROC sort (TEXT CONST filename, INT CONST firstpos)
- Wirkung: Die Datei 'filename' wird zeilenweise in lexikographischer
Ordnung, beginnend ab Spalte 'firstpos', sortiert.
Der L3 Editor arbeitet auf Datenräumen des Typs FILE. Er bildet ein
Eingabefenster auf einen Datenraum des Typs Textdatei. Der Editor stellt die üblichen
Editorfunktionen bereit. Desweiteren verfügt der Editor über einen Kommandointerpreter. Dieser interpretiert Tastenfolgen der Art ESC key als Kommandos.
Diese Tastenkombinationen und die Handhabung des Editors ist im L3
Benutzerhandbuch in Kapitel 14 beschrieben. Im weiteren sind »fortgeschrittene«
Operatoren und Prozeduren erklärt. Sie können insbesonders dazu benutzt werden,
Aktionen, die normalerweiser per Hand ausgeführt werden, auf Textdateien per
Programm ablaufen zu lassen.
at
BOOL PROC at (TEXT CONST pattern)
- Wirkung: Liefert TRUE, wenn ab der aktuellen Dateiposition 'pattern' steht.
CA
OP CA (TEXT CONST old, new)
- Wirkung: Zwischen aktueller Dateiposition und Dateiende wird jedes Auftreten von 'old' durch 'new' ersetzt.
PROC change all (TEXT CONST old, new)
- Wirkung: s.o.
C
OP C (TEXT CONST old, new)
- Wirkung: Zwischen aktueller Dateiposition und Dateiende wird das erste
Auftreten von 'old' durch 'new' ersetzt.
PROC change to (TEXT CONST old, new)
- Wirkung: s.o.
col
INT PROC col (FILE CONST file)
- Wirkung: Liefert die aktuelle Spaltenposition in 'file'.
INT PROC col
- Wirkung: Liefert die aktuelle Spaltenposition in editfile.
D
OP D (INT CONST lines)
- Wirkung: Positioniert in der gerade edierten Datei (editfile) 'lines' Zeilen
weiter in Richtung Dateiende , ggf. in die letzte Zeile.
OP D (TEXT CONST pattern)
- Wirkung: siehe down.
PROC down (INT CONST lines)
- Wirkung: siehe D.
PROC down (TEXT CONST pattern)
PROC down (TEXT CONST pattern, INT CONST lines)
PROC down (FILE VAR file, TEXT CONST pattern)
PROC down (FILE VAR file, TEXT CONST pattern, INT CONST lines)
- Wirkung: Positioniert auf das erste Auftreten von 'pattern' zwischen aktueller Position und Dateiende. Die Suche beginnt ein Zeichen hinter
der aktuellen Position. Falls 'pattern' nicht gefunden wird, ist die
aktuelle Position das Dateiende.
Die Suche kann durch Angabe von 'lines' auf die nächsten 'lines'
Zeilen beschränkt werden.
PROC downety (TEXT CONST pattern)
PROC downety (TEXT CONST pattern, INT CONST lines)
PROC downety (FILE VAR file, TEXT CONST pattern)
PROC downety (FILE VAR file, TEXT CONST pattern, INT CONST lines)
- Wirkung: Wie down, die Suche beginnt auf der aktuellen Position. Falls
mehrfach nach dem gleichen 'pattern' gesucht wird, bleibt die
Position unverändert.
edit
PROC edit
PROC edit (TEXT CONST pathname)
PROC edit (THESAURUS CONST thes)
PROC edit (FILE VAR file)
PROC edit (TEXT CONST pathname, INT CONST x, y, xsize, ysize)
PROC edit (FILE VAR file, INT CONST x, y, xsize, ysize)
- Wirkung: Editoraufruf.
- Parameter: 'pathname': Dateiname, wird falls nötig expandiert.
'file': assoziierte Datei.
'thes': do (PROC (TEXT CONST) edit, thes)
'x', 'y': linke, obere Ecke des Editorfenster auf dem Bildschirm.
'xsize', 'ysize': Fenstergröße.
editfile
FILE PROC editfile
- Wirkung: Liefert einen FILE Wert um die aktuell edierte Datei zu
assoziieren.
- Beispiel: FILE VAR f := editfile; put (len(f));
G
OP G (TEXT CONST filename)
- Wirkung: Vor der aktuellen Position wird die Datei 'filename' einkopiert. Ist
in dieser Datei ein Bereich markiert, so wird nur dieser Bereich
kopiert.
len
INT PROC len (FILE CONST file)
- Wirkung: Liefert die Länge des aktuellen Satzes der Datei.
INT PROC len
- Wirkung: Liefert die Länge des aktuellen Satzes von editfile.
limit
PROC limit (INT CONST new limit)
- Wirkung: Stellt die maximal zulässige Zeilenlänge der aktuelle Datei auf
'new limit' Zeichen ein.
INT PROC limit
- Wirkung: Liefert die eingestellte zulässige Zeilenlänge.
line no
INT PROC line no
- Wirkung: Liefert die aktuelle Zeilennummer der edierten Datei.
lines
INT PROC lines
- Wirkung: Zeilenzahl der aktuell edierten Datei.
mark
PROC mark (FILE VAR file, INT CONST line no, col)
- Wirkung: In der Datei 'file' wird ein Ausschnitt markiert. Der Ausschnitt
wird beschrieben durch den Start 'line no', 'col' und das Ende
»aktuelle Position« (line no, col). Falls die Startposition der
Markierung hinter dem Ende liegt, passiert nichts.
BOOL PROC mark (FILE CONST file)
- Wirkung: Liefert TRUE, wenn in 'file' ein Abschnitt markiert ist.
mark col
INT PROC mark col (FILE CONST file)
- Wirkung: Liefert die Spaltennummer des Markierungsanfangs in 'file'.
mark line no
INT PROC mark line no (FILE CONST file)
- Wirkung: Liefert die Zeilennummer des Markierungsanfangs in 'file'.
margin
PROC margin (INT CONST col)
- Wirkung: Stellt den linken Rand für die Darstellung der aktuellen Datei im
aktuellen Editorfenster ein. Die Position des Editorfenster auf dem
Bildschirm bleibt unverändert.
P
OP P (TEXT CONST filename)
- Wirkung: Kopie des markierten Textes aus dem Editorfenster. Die Datei
'filename' wird sofort erzeugt. Falls 'filename' schon existiert, wird
erfragt ob gelöscht werden soll. Falls 'filename' nicht gelöscht
wird, wird der markierte Text aus der aktuell edierten Datei an
'filename' angehängt, sonst wird gelöscht und direkt neu erzeugt.
push
PROC push (TEXT CONST string)
- Wirkung: Fügt die Zeichen 'string' in Editoreingabe ein.
- Beispiel: push (""27"q")
quit
PROC quit
- Wirkung: Das aktuelle Editorfenster wird geschlossen.
show
PROC show (TEXT CONST filename)
PROC show (FILE VAR file)
PROC show (THESAURUS CONST thes)
PROC show
- Wirkung: Öffnet ein Editorfenster auf der (den) Datei(en). In diesem
Fenster sind keine Schreibaktionen zulässig. Es ist aber möglich
Text zu markieren und den markierten Text zu duplizieren (ESC
d).
T
OP T (INT CONST line no)
PROC to line (INT CONST line no)
- Wirkung: Positioniert auf Zeile 'line no' der aktuellen Datei ohne die
Spaltenposition zu ändern. Falls die Datei weniger als 'line no'
Zeilen hat, ist die aktuelle Position hinter dem letzten Zeichen der
Datei.
U
up
uppety
- Bemerkung: Wirkung und Parametrisierung sind analog zu D, down,
downety. Die Suchrichtung ist jedoch von der aktuellen Position in
Richtung Dateianfang.
wordwrap
PROC wordwrap (BOOL CONST bool)
- Wirkung: Bei 'TRUE' wird der automatische Zeilenumbruch des Editors
eingeschaltet, bei FALSE ausgeschaltet. Wenn das Kommando
während des Edirens gegeben wird, wird die Einstellung als Dateiattribut gespeichert, wird die Einstellung im Monitor vorgenommen, so gilt sie als Voreinstellung für neue Dateien.
Das Notizbuch ist ein unbenannte Datei, auf die ein zweites Editorfenster gesetzt
werden kann, um z.B. Zwischenergebnisse oder besondere Meldungen anzuzeigen.
Meldungen des ELAN Compilers etwa werden ins Notizbuch geschrieben.
anything noted
BOOL PROC anything noted
- Wirkung: Liefert TRUE nachdem die erste Schreiboperation im Notizbuch
vorgenommen wurde und FALSE nachdem das Notizbuch mit
note edit angezeigt wurde.
note
PROC note (TEXT CONST text)
- Wirkung: Schreibt 'text' ins Notizbuch.
PROC note (INT CONST number)
- Wirkung: Schreibt text (number) + " " ins Notizbuch.
note edit
PROC note edit
- Wirkung: Zeigt das Notizbuch an.
notefile
FILE PROC notefile
- Wirkung: Liefert einen FILE Wert, um das Notizbuch zu assoziieren.
noteline
PROC noteline
- Wirkung: Zeilenvorschub im Notizbuch.
In den Eingabeprozeduren edit und editget ist es möglich, Tastenkombinationen
aus »ESC« und einer weiteren Taste zu definieren, die dann als Kommando oder
Macro (Lernsequenz) interpretiert werden. Die Tasten werden also mit beliebigen
Zeichenfolgen »belegt«. Auf diese Weise ist es möglich, häufig auftretende Eingaben
auf Tasten zu legen.
Einige Tastenkombinationen sind in L3 vorbelegt, sie können jedoch tasklokal geändert werden. Falls in einer Task die Tastenbelegungen geändert waren,
kann durch std keys die Normaleinstellung jederzeit wiederhergestellt werden.
Der Unterschied zwischen Macros und Kommandos besteht darin, daß ein Text, der
als Macro auf eine Taste gelegt wurde, ausgegeben wird und dann weiter ediert
werden kann. Natürlich kann ein Macro nicht nur druckbare Zeichen sondern auch
Cursorpositionierungen etc. enthalten. Ein Kommando hingegen wird direkt an den
ELAN Compiler übergeben.
Ein Taste kann entweder mit einem Macro oder einem Kommando belegt werden.
load key command
PROC load key command (TEXT CONST key, string)
- Wirkung: Die Taste 'key' wird mit der Zeichenfolge 'string' belegt. Falls
'string' ein korrektes ELAN Programm darstellt, wird dieses
Programm direkt übersetzt und ausgeführt, sobald ESC key
hintereinander gedrückt werden. Falls das Programm nicht
korrekt ist, erfolgt keine Reaktion. Es wird keine Fehlermeldung
ausgegeben, um den Bildschirm nicht zu zerstören.
- Beispiel: load key command ("l", "list")
load key macro
PROC load key macro (TEXT CONST key, string)
- Wirkung: Die Taste 'key' wird mit der Zeichenfolge 'string' belegt. Sobald
ESC key hintereinander gedrückt werden, wird die Zeichenfolge 'string' an der aktuellen Cursorposition ausgegeben.
- Beispiel:
(* Editoraufruf auf Dateinamen aus 'list' *)
(* Alle Dateien werden angezeigt, der Cursor *)
(* steht auf der Datei, die mit dem Makro *)
(* ediert werden soll. *)
load key macro ("E", edit from list).
edit from list :
esc + "p" (* Zeile in Zwischenspeicher *)
+ esc + "q" (* 'list' verlassen *)
+ esc + "g" (* Zeile aus Zwischenspeicher holen *)
+ ")" + hop + left
+ "edit (" + (13 * entf)+ return. (* Kommandozeile aufbauen *)
esc : ""27"". (* Codes der benutzten Tasten *)
hop : ""1"".
left : ""8"".
entf : ""12"".
return : ""13"".
key command
TEXT PROC key command (TEXT CONST key)
- Wirkung: Liefert den Quelltext des auf die Taste 'key' gelegten ELAN
Programms. Falls kein Kommando auf der Taste liegt, wird
niltext geliefert.
key macro
TEXT PROC key macro (TEXT CONST key)
- Wirkung: Liefert die Tastenfolge, die auf die Taste 'key' gelegt wurde. Falls
keine Folge auf der Taste liegt, wird niltext geliefert.
key contains command
BOOL PROC key contains command (TEXT CONST key)
- Wirkung: Liefert TRUE, wenn auf die Taste 'key' ein Kommando gelegt ist.
std keys
PROC std keys
- Wirkung: Setzt die Belegung der systemseitig mit Macros voreingestellten
Tasten auf die Standardbelegung zurück.
Der Scanner kann benutzt werden, um festzustellen, welche Art von Symbolen in
einem TEXT enthalten sind. Die Analyse des Textes folgt den Regeln von ELAN: die
Repräsentation der Symbole muß der ELAN-Syntax entsprechen. Folgende Symbole
werden vom Scanner erkannt:
- tags:
- Namen. Zeichenketten, die ausschließlich aus Kleinbuchstaben
oder Ziffern bestehen. Leerzeichen innerhalb von Namen sind
zulässig, werden jedoch überlesen.
- bolds:
- Schlüsselworte. Zeichenketten, die ausschließlich aus Großbuchstaben bestehen. Leerzeichen innerhalb von Schlüsselworten sind
nicht zulässig.
- number:
- INT oder REAL Zahlen. Zeichenketten, die aus den Ziffern 0 bis 9
bestehen und ggf. ein Vorzeichen, einen Dezimalpunkt oder ein e
enthalten (siehe REALs). Leerzeichen innerhalb von Zahlen sind
zulässig, werden jedoch überlesen.
- operator:
- Alle Einzelzeichen, die nicht als Delimiter klassifiziert sind, sowie
::, :=, **, <=, >=.
- delimiter:
- Begrenzer. Gültige Delimiter sind ", (, ), [, ], ., , und ;. und das
Ende des Scan-Textes.
Der Scanner überliest Kommentare und Leerzeichen zwischen den Symbolen. Der
(erste) zu verarbeitende Text muß mit der Prozedur
scan
an den Scanner übergeben werden. Mit der Prozedur
next symbol
wird das jeweils nächste Symbol des TEXTes geholt. Am Ende wird end of scan und
als Symbol niltext geliefert. Falls innerhalb eines TEXT-Denoters oder eines
Kommentars end of scan auftritt, wird within text bzw. within comment gemeldet. Der Scan-Prozeß kann dann mit dem nächsten zu scannenden TEXT (der
nächsten Zeile) fortgesetzt werden. Dafür wird nicht die Prozedur scan, sondern
continue scan
verwendet. Sie setzt im letzten Scan-Zustand (z.B. Kommentar oder TEXT-Denoter)
wieder auf, so daß auch Folgen von TEXTen (Zeilen) - wie z.B. Dateien - leicht
gescannt werden können.
Mit den Prozeduren
scan (* meldet eine Datei zum scannen an *)
next symbol (* holt die Symbole *)
kann man auch eine Datei nach ELAN-Symbolen untersuchen.
continue scan
PROC continue scan (TEXT CONST string)
- Wirkung: Das Scanning soll mit 'string' fortgesetzt werden. Falls der Scan-
Vorgang beim vorigen 'string' innerhalb eines TEXT-Denoters oder
eines Kommentars abgebrochen wurde, wird er jetzt entsprechend
mit dem nächsten next symbol fortgesetzt. Der erste Teil-Scan
einer Folge muß aber stets mit scan eingeleitet werden!
next symbol
PROC next symbol (TEXT VAR symbol, INT VAR type)
- Wirkung: Holt das nächste Symbol. In 'symbol' steht der TEXT des Symbols,
so z.B. die Ziffern eines INT-Denoters. Bei TEXT-Denotern werden
die führenden und abschließenden Anführungsstriche
die führenden und abschließenden Anführungsstriche abgeschnitten. Leerzeichen
oder Kommentare spielen in tags und numbers keine Rolle.
Zwischen Symbolen spielen Leerzeichen und Kommentare keine
Rolle.
Der Type des Symbols wird in der Variablen 'type' - wie unter
Parameter beschrieben - geliefert.
- Bemerkung: Wird Scan-Ende innerhalb eines Kommentars gefunden, so wird
niltext und within comment geliefert. Wird Scan-Ende innerhalb eines TEXT-Denoters gefunden, so wird der schon analysierte
Teil des Denoters und within text geliefert.
- Parameter: In 'type' steht eine Kennzeichung für den Typ des Symbols.
tag = 1 ,
bold = 2 ,
number = 3 ,
text = 4 ,
operator = 5 ,
delimiter = 6 ,
end of file = 7 ,
within comment = 8 ,
within text = 9 .
PROC next symbol (TEXT VAR symbol)
- Wirkung: Wie oben. Es wird aber nur der Text des Symbols (ohne Typ)
geliefert.
PROC next symbol (FILE VAR file, TEXT VAR symbol, INT VAR type)
- Wirkung: Wie oben. Jedoch wird auf einem FILE gearbeitet.
PROC next symbol (FILE VAR file, TEXT VAR symbol)
- Wirkung: Wie oben. Jedoch wird auf einem FILE gearbeitet.
scan
PROC scan (TEXT CONST string)
- Wirkung: Meldet einen 'string' für den Scanner zur Verarbeitung an. Die
Prozedur scan muß vor dem ersten Aufruf von next symbol gegeben werden. Im Gegensatz zu continue scan normiert scan den
inneren Zustand des Scanners, d.h. vorherige Scan-Vorgänge
haben keinen Einfluß mehr auf das Scanning.
PROC scan (FILE VAR file)
- Wirkung: Wie oben. Jedoch wird auf einen FILE gearbeitet. Die zu untersuchende Zeile ist die nächste Zeile im FILE 'f' (scan macht
zuerst ein getline).
- Beispiel:
FILE VAR file := sequential file (input, filename);
TEXT VAR symbol := "",
bedeutung := "";
INT VAR type;
scan (file);
WHILE NOT eof (file)
REP
next symbol (file, symbol, type);
analyse ;
IF type = 8 COR type = 9
THEN continue scan (symbol) FI;
PER
.analyse:
put(symbol) ; line ;
put("Typ: ");put(type);
SELECT type OF
CASE 1 : bedeutung := "tag"
CASE 2 : bedeutung := "bold"
CASE 3 : bedeutung := "number"
CASE 4 : bedeutung := "text"
CASE 5 : bedeutung := "operator"
CASE 6 : bedeutung := "delimiter"
CASE 7 : bedeutung := "End of File"
CASE 8 : bedeutung := "within comment"
CASE 9 : bedeutung := "within text"
OTHERWISE
errorstop("Unmöglicher Wert vom Scanner");
END SELECT;
put (bedeutung);
line;
pause(10).
Next: Datenräume
Up: L3 Referenzhandbuch
Previous: Einfache Datentypen
Michael Hohmuth
Sun Mar 31 04:49:53 MET DST 1996