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