Inhaltsverzeichnis

4.2.5 Die line-commands

Viele Kommandos bei der Texteditierung beziehen sich auf spezielle Zeilen des Textes. Daher werden in diesem Editor solche Befehle im Zeilennummernbereich direkt vor der betreffenden Zeile eingegeben. Jeder Befehl wird durch einen Buchstaben oder ein Zeichen beschrieben. Die Buchstaben lehnen sich dabei an die englischen Namen für die auszuführende Operation an.

Beispiel: Um die fünfte Zeile des Textes zu löschen, bewegen Sie den Cursor in den Zeilennummernbereich der Zeile 5. Dort geben Sie (»über« die Zahlen 0005) den Buchstaben »D« (für delete) ein.

Wie die primary-commands werden auch die line-commands erst bei der Eingabe der Tastenkombination SHIFT-RETURN oder beim Blättern ausgeführt. Es dürfen mehrere verschiedene Kommandos in verschiedenen Zeilen eingegeben werden. Sie können also z.B. gleichzeitig eine Zeile einfügen und an einer anderen Stelle Zeilen löschen.

Einige Befehle können sich auch auf einen Block von Zeilen beziehen. In diesem Fall wird die erste und die letzte Zeile des Blockes mit einem doppelten Buchstaben im Zeilennummernbereich markiert. Ein Blockkommando wird erst ausgeführt, wenn der Anfang und das Ende des Blockes markiert wurden.

Beispiel: Um die Zeilen 5, 6, 7 und 8 zu löschen, schreiben Sie zunächst in den Zeilennummernbereich der Zeile 5 das Kommando »DD«. Anschließend markieren Sie die letzte Zeile des Blockes (Zeile 8) im Zeilennummernbereich mit dem Kommando »DD«. Wenn Sie nun die SHIFT-RETURN-Taste betätigen, werden alle Zeilen zwischen 5 und 8 (einschließlich) gelöscht.

Bei einigen line-commands kann auch ein Zahl n angegeben werden, die angibt, wie oft eine Operation wiederholt werden soll.

Beispiel: Der Befehl I5 im Zeilennummernbereich der Zeile 8 fügt hinter der Zeile 8 fünf Leerzeilen ein.

Der Befehl RR in Zeile 1 und RR8 in Zeile 2 wiederholt den Block bestehend aus Zeile 1 und 2 insgesamt achtmal.

Ein Block darf nicht mehr als 256 Zeilen umfassen. Ohne Angabe eines Wiederholungsfaktors wird die Operation nur einmal ausgeführt. Es folgt eine Liste aller line-commands.

I n (Insert)

Nach der markierten Zeile werden n Zeilen eingefügt. Diese Zeilen werden mit dem Inhalt der Statuszeile nach »MSK=« (s. Abschnitt 4.2.2.3) vorbelegt. Die nachfolgenden Textzeilen werden nach unten geschoben und neu numeriert.

Das line-command I ist auch in der Zeile TOP (links von den Sternen) erlaubt. An dieser Stelle bewirkt es das Einfügen vor der ersten Textzeile (mit der Nummer 0000).

D (Delete)

Die markierte Zeile wird gelöscht. Die nachfolgenden Zeilen werden nach oben geschoben und neu numeriert.

DD (Delete)

Der Block zwischen der ersten und der zweiten mit »DD« gekennzeichneten Zeile (einschließlich) wird gelöscht.

R n (Repeat)

Die markierte Zeile wird n-mal wiederholt.

RR n (Repeat)

Der durch zwei »RR« Kommandos gekennzeichnete Block wird n-mal wiederholt.

> n (Shift right)

Der Inhalt der markierten Zeile wird um n Spalten nach rechts verschoben. Dabei gelten folgende Regeln: Es werden nur Texte zwischen den Markierungen < und > in der »BND=« Statuszeile verschoben. Die restlichen Spalten bleiben unverändert. Eine Zeile wird nicht verschoben, falls dadurch Zeichen am rechten Textrand (Markierung > in der Zeile »BND=«) herausgeschoben würden. In diesem Fall wird die Meldung »MOVE ERROR« angezeigt.

>> n (Shift right)

Die Funktionsweise entspricht dem line-command > für einen Block von Zeilen. Konnte eine Zeile des Blockes nicht verschoben werden, so wird ebenfalls die Meldung »MOVE ERROR« ausgegeben.

< n (Shift left)

Der Inhalt der markierten Zeile wird um n Spalten nach links verschoben. Es werden nur Texte zwischen den Markierungen < und > in der »BND=« Statuszeile verschoben. Die restlichen Spalten bleiben unverändert. Eine Zeile wird nicht verschoben, falls dadurch Zeichen am linken Textrand (Markierung < in der Zeile »BND=«) herausgeschoben würden. In diesem Fall wird die Meldung »MOVE ERROR« angezeigt.

<< n (Shift left)

Dieser Befehl bewirkt eine Verschiebung wie das line-command < nur für einen Zeilenblock.

) n (Push right)

Der Inhalt der markierten Zeile wird um n Spalten nach rechts verschoben. Der Spaltenbereich wird ebenfalls durch die Einträge < und > in der Statuszeile nach »BND=« begrenzt. Jedoch werden unter Umständen Zeichen am rechten Ende der Zeile herausgeschoben.

)) n (Push right)

Dieses line-command verschiebt den Inhalt eines Blockes von Zeilen zwischen den aktuellen Textgrenzen um n Spalten nach rechts. Dabei gehen jedoch im Unterschied zum Kommando >> eventuell Zeichen am rechten Textrand verloren.

( n (Push left)
(( n (Push left)

Diese Kommandos arbeiten analog wie ) und )) und bewirken eine Verschiebung nach links.

M (Move)

Mit diesem line-command wird eine Zeile gekennzeichnet, die an eine andere Position im Text verschoben werden soll.

MM (Move)

Um einen Block zum Verschieben zu kennzeichen, werden die Kommandos MM in der ersten und letzten Zeile des Blockes eingetragen.

C (Copy)

Hiermit kennzeichnen Sie Zeilen, die Sie an eine andere Position im Text kopieren wollen. Der Unterschied zwischen Kopieren und Verschieben besteht darin, daß beim line-command M die ursprüngliche Zeile gelöscht wird, während sie bei C erhalten bleibt (der Text wird also länger).

CC (Copy)

Durch zwei CC Zeilenkommandos wird ein Block zum Kopieren gekennzeichnet.

Bei den Kopier- und Verschiebebefehlen muß noch eine Zielposition angegeben werden. Dabei gibt es die folgenden drei Zielangaben:

A (After)

Der Block wird hinter diese Zeile kopiert.

B (Before)

Der Block wird vor diese Zeile kopiert.

O (Overlay)

Die Zeile wird über diese Zeile kopiert. Das bedeutet, daß Leerzeichen in der mit O gekennzeichneten Zeile durch die Zeichen der selben Spalte in der mit C oder M gekennzeichneten Zeile ersetzt werden.

OO (Overlay)

Der Quellblock (markiert mit M, C, MM oder CC) wird über den mit OO markierten Block kopiert, wie dies beim line-command O be- schrieben wurde. Ist der Quellblock kürzer als der Zielblock, so werden die Zeilen des Quellblockes zyklisch wiederholt.

Eine Verschiebung oder Kopieroperation wird erst dann ausgeführt, wenn sowohl der Zeilenbereich als auch die Zielposition bekannt ist. Die Reihenfolge der Markierung ist unerheblich, sie können also auch zunächst die Zielposition definieren, und erst anschließend den Quellblock (z.B. mit MM) festlegen. Einige Beispiele sollen die zahlreichen Möglichkeiten zum Verschieben von Textblöcken erläutern.

Beispiele: Markieren Sie Zeile 5 mit dem line-command C und Zeile 8 mit dem Kommando A. Dadurch wird eine Kopie von Zeile 5 hinter Zeile 8 gestellt.

Markieren Sie Zeile 3 und Zeile 5 jeweils mit dem line-command MM und Zeile 0 mit dem Kommando B. Dadurch werden Zeile 3,4 und 5 direkt an den Textanfang (vor Zeile 0) kopiert. Außerdem wird der Bereich zwischen Zeile 3 und 5 gelöscht.

Füllen Sie Zeile 0 vollständig mit dem Zeichen »*«. Kennzeichnen Sie Zeile 0 mit dem Kommando C. Anschließend markieren Sie Zeile 4 und Zeile 8 jeweils mit dem line-command OO. Nach der Ausführung dieser Kopieroperation ist jedes Leerzeichen in den Zeilen 4 bis 8 durch einen Stern ersetzt worden.

Nachdem Sie schon einige Zeit mit dem Editor gearbeitet haben, sollten Sie die obigen Beschreibungen noch einmal studieren. Sie werden sicher einige interessante neue Anwendungsmöglichkeiten der Befehle finden, indem Sie z.B. die Textgrenzen in der Statuszeile »BND=« variieren.

4.2.6 Der Textmodus

Um für die verschiedenen Aufgaben bei der Texteditierung eine optimale Cursorsteuerung zu ermöglichen, kennt der Editor zwei verschiedene Eingabemodi.

Beim Start des Editors ist der sogenannte Textmodus aktiviert. In ihm kann man »blind« Texte eingeben, da das Textfenster ständig dem Cursor bei der Eingabe folgt, und der Cursor das Textfenster bei der Eingabe nicht verläßt. Außerdem sind die Tabulatoren aktiviert.

Zum Beispiel bei der Eingabe von Tabellen ist es jedoch sinnvoller, daß das Textfenster explizit mit den Funktionstasten bewegt wird. Um ein automatisches scrolling bei Eingaben im Textfenster zu vermeiden, läßt sich der Textmodus deshalb mit dem primary-command RESET ausschalten. Bei Bedarf kann er wieder mit dem primary-command TEXT eingeschaltet werden.

Im Textmodus gelten folgende Regeln für die Texteingabe: Erreicht der Cursor bei der Eingabe von Zeichen im Textfenster den rechten Bildrand, folgt das Textfenster automatisch (um den gewählten Scroll-Betrag) dem Cursor. Beim Erreichen des rechten Textrandes (Markierung > in der Statuszeile »BND=«) springt der Cursor in die erste Textspalte der Folgezeile (Markierung < in der Statuszeile »BND=«). Wird dabei der untere Rand des Bildschirmes erreicht, so wird das Textfenster automatisch um den gewählten Scroll-Betrag weitergeblättert.

Im Textmodus springt der Cursor bei der Betätigung der RETURN-Taste im Textfenster zum Zeilenanfang der Folgezeile. Durch die Eingabe von SHIFT-RETURN springt der Cursor auf die nächste vortabulierte Position in der Zeile (Markierung - in der Statuszeile »TAB=«).

4.2.7 FIND

Mit dem primary-command FIND (Kurzform: F) können Sie nach einer Zeichenfolge (string) suchen, die maximal 32 Zeichen lang sein darf. Durch eine Reihe von Parametern können Sie die Suche beeinflussen. Diese Parameter folgen dem Kommando und müssen voneinander durch mindestens ein Leerzeichen getrennt werden. Bei den Parametern muß folgende Reihenfolge eingehalten werden:

        String      ALL       CHARS
FIND    'String'    FIRST     WORD     nnnn
        #kkk        NEXT      PREFIX   nnnn-mmmm
        *                     SUFFIX

Übereinanderstehende Parameter (wie z.B. ALL und NEXT) stellen eine Auswahl dar, von der nur eine Variante pro Befehl angegeben werden darf. Nur der erste Parameter (String, 'String', #kkk bzw. *) muß angegeben werden. Beim Fehlen der übrigen Parameter werden Standardwerte angenommen.

Nachfolgend wird die Bedeutung aller Parameter aufgelistet:

String

bezeichnnet eine Zeichenfolge, deren Länge 32 Zeichen nicht übersteigen darf. Außerdem sind Leerzeichen innerhalb des Strings nicht erlaubt. Die Zeichenfolge darf nicht mit »*«, »#« oder »'« beginnen.

Beispiel: FIND INTEGER

sucht nach der Zeichenfolge INTEGER im Text

'String'

bezeichnet eine Zeichenfolge, die nicht länger als 32 Zeichen sein darf. Innerhalb der Zeichenfolge sind alle Zeichen außer dem Hochkomma »'« erlaubt.

Beispiel: FIND 'Ein String mit Leerzeichen'

sucht nach der obigen Zeichenfolge. Die Anzahl der Leerzeichen zwischen den Worten muß exakt mit dem Suchstring übereinstimmen.

»*«

Der Stern repräsentiert den Suchstring des letzten FIND- oder CHANGE-Befehls. Man erspart sich damit die wiederholte Eingabe der Zeichenfolge.

#kkk

Um auch nach Sonderzeichen innerhalb des Textes suchen zu können, die nicht von der Tastatur eingegeben werden können, läßt sich durch diesen Parameter der ASCII-Code eines Zeichens eingeben.

Beispiel: FIND #27

sucht nach dem Zeichen mit dem ASCII-CODE 27. Dies ist das Zeichen »ESC«, das am Bildschirm als eine invers gedruckte eckige Klammer auf dargestellt wird. Die Codes aller Zeichen des Commodore-Zeichensatzes sind im Anhang A des BASIC-Handbuches aufgelistet.

NEXT Kurzform: NEX

Dieser Parameter bewirkt, daß die Suche nach der Zeichenfolge ab der momentanen Cursorposition beginnt. Befindet sich der Cursor außerhalb des Textfensters, so beginnt die Suche am linken Textrand der ersten Bildschirmzeile. Ohne Angabe einer Startposition (NEXT, FIRST, ALL) wird der Parameter NEXT angenommen.

FIRST Kurzform: FIR

Die Suche beginnt bei der ersten Textspalte der Zeile 0000.

Beispiel: FIND (* FIR

sucht nach der ersten öffnenden Kommentarklammer im Text.

ALL

Es wird gezählt, wie oft der angegebene Suchstring im gesamten Text auftritt. Als Ergebnis wird entweder »STRING NOT FOUND« oder »nnnn TIMES FOUND« angezeigt. Der Cursor wird nicht bewegt.

Beispiel: FIND WRITE ALL

zählt, wie oft die Zeichenfolge »WRITE« im gesamten Text auftritt.

CHARS

Der Suchstring wird auch gefunden, falls er Bestandteil eines größeren Wortes ist.

Beispiel: FIND der CHARS

findet auch das Wort »jeder«, da es den String »der« enthält.

WORD Kurzform: WOR

Die Zeichenfolge wird nur gefunden, falls sie mit einem Trennzeichen beginnt und endet. Als Trennzeichen gelten alle Zeichen außer den Buchstaben »A« bis »Z« und »a« bis »z«.

Beispiel: FIND I WORD

findet die Variable »I«, nicht jedoch die Worte »SIN«, »INTEGER« oder »AI«.

PREFIX Kurzform: PRE

Die Zeichenfolge wird nur gefunden, falls sie mit einem Trenn- zeichen beginnt, also am Anfang eines Wortes steht.

SUFFIX Kurzform: SUF

Die Zeichenfolge muß mit einem Trennzeichen enden, um gefunden zu werden.

nnnn

Wird eine maximal vierstellige Zahl am Ende des Suchkommandos angegeben, so muß der Suchstring in der genannten Spalte beginnen. Hat man ein Programm konsequent nach einem festen Schema eingerückt, kann man mit diesem Befehl sehr schnell bestimmte Konstrukte im Quelltext suchen.

Beispiel: FIND BEGIN 2

sucht das nächste Schlüsselwort BEGIN im Text, das genau zwei Stellen eingerückt ist.

nnnn-mmmm

Um in einem begrenzten Spaltenbereich zu suchen, läßt sich für einen Suchbefehl der Spaltenbereich mit 2 Zahlen einschränken, die ohne Leerzeichen durch einen Bindestrich getrennt sind. Es werden nur Strings gefunden, die mindestens nnnn und maximal mmmm Stellen eingerückt wurden.

Beispiel: FIND VAR 0-13

sucht nach dem nächsten Schlüsselwort VAR, das maximal 13 Stellen eingerückt ist.

Wird weder der Parameter nnnn noch der Parameter nnnn-mmmm spezifiziert, so werden die Textgrenzen durch die momentan gültigen Textgrenzen aus der Statuszeile nach »BND=« ersetzt.

Beispiel: FIND PROCEDURE

sucht nach dem nächsten Prozedurkopf, der zwischen der Markierung < und der Markierung > in der Statuszeile nach »BND=« steht.

Bei der Ausführung des Suchbefehls mit der Tastenkombination SHIFT-RETURN wird der Cursor folgendermaßen bewegt: Wird bei der Suche vorwärts das Textende (dort steht die Zeile BOTTOM) erreicht, so bleibt der Cursor an seiner Position und in der Kopfzeile wird die Meldung »** BOTTOM REACHED **« ausgegeben. Begann die Suche bei der ersten Textzeile, wird jedoch die Meldung »STRING NOT FOUND« angezeigt.

Wurde der String jedoch gefunden, so wird der Cursor auf das erste Zeichen des Strings gesetzt und das Textfenster horizontal und vertikal entsprechend verschoben. In der Kopfzeile erscheint dann die Meldung »STRING FOUND«.

Im Anschluß an ein FIND-Kommando ist die Funktionstaste »F2« aktiviert (s. Abschnitt 4.2.9).

4.2.8 CHANGE

Das primary-command CHANGE erlaubt das automatische Ersetzten von Textteilen durch andere innerhalb des gesamten Textes. Der Aufbau des Befehls und die Regeln für die Reihenfolge der Parameter ent- sprechen weitgehend dem primary-command FIND:

        String1    String2     ALL       CHARS
CHANGE  'String1'  'String2'   FIRST     WORD     nnnn
        #kkk       #kkk        NEXTP     REFIX    nnnn-mmmm
        *          *                     SUFFIX

Es wird zunächst eine Suche nach dem ersten genannten String durchgeführt. Die Parameter (FIRST, NEXT, CHARS, WORD, PREFIX, SUFFIX und nnnn-mmmm) steuern den Ablauf der Suche.

Wird der String nicht gefunden oder das Textende erreicht, erscheinen ebenfalls die Meldungen »STRING NOT FOUND« oder »**BOTTOM REACHED**«. Wird der String1 jedoch gefunden, so wird er durch die zweite Zeichenfolge ersetzt. In diesem Fall erscheint die Meldung »0001 CHANGED«.

Ein Sonderfall liegt vor, falls String2 länger als String1 ist. In diesem Fall wird vor der Umwandlung geprüft, ob am Zeilenende (Markierung > in der Statuszeile nach »BND=«) noch genügend Platz zum Einfügen vorhanden ist. Ist dies nicht der Fall, so wird die Fehlermeldung »MOVE ERROR« angezeigt, ohne daß der String ersetzt wird. Außerdem ist als zweiter String auch ein Leerstring »''« möglich, so daß der Suchstring gelöscht wird.

Nach einem CHANGE-Befehl sind die Funktionstasten »F2« und »F4« aktiviert (s. Abschnitt 4.2.9).

Durch die Angabe des Parameters »ALL« werden alle Strings im gesamten Text umgewandelt. Es erscheint die Meldung »kkkk CHANGED«. Traten bei der Umwandlung Fehler auf, da nicht genügend Platz am Zeilenende vorhanden ist, wird am Ende der Umwandlungen die Meldung »nnnn/mmmm ERRORS« in der Kopfzeile ausgegeben. Das bedeutet, daß nnnn mal der Suchstring gefunden wurde, wobei mmmm Strings nicht umgewandelt werden konnten. Oft ist es jedoch sicherer, schrittweise mit den Funktionstasten »F2« und »F4« den Text zu durchlaufen (s. Beispiel in Abschnitt 4.2.9).

Beispiele: CHANGE INTEGER REAL FIRST

wandelt das erste Wort INTEGER in das Wort REAL um.

CHANGE PROCEDURE FUNCTION ALL

wandelt alle Prozeduren des Programmes in Funktionen um.

CHANGE '(*$R+ *)' '' löscht die nächste Zeichenfolge »(*$R+ *)« im Text.

4.2.9 Die Tasten »F2« und »F4«

Um die ständige Wiederholung der Eingabe der primary-commands FIND und CHANGE zu vermeiden, läßt sich der letzte FIND-Befehl mit der Funktionstaste »F2« und der letzte CHANGE-Befehl mit der Funktionstaste »F4« wiederholen. Dabei werden die Spezifikationen (CHARS/WORD/SUFFIX/PREFIX und die Textspalten nnnn-mmmm) des letzen primary-commands FIND bzw. CHANGE verwendet.

Bei der Betätigung der »F2« Funktionstaste beginnt die Suche ab der momentanen Cursorposition im Textfenster. Befindet sich der Cursor außerhalb des Textfensters, so beginnt die Suche in der ersten Textzeile, die im Textfenster sichtbar ist.

Wird bei dieser Suche das Textende erreicht, so erscheint die Meldung »** BOTTOM REACHED **«, ohne daß der Cursor bewegt wird. Wird nun die »F2« Funktionstaste erneut betätigt, beginnt die Suche in der Textzeile 0000. Sollte der Suchstring wiederum nicht gefunden werden, wird in der Kopfzeile die Meldung »STRING NOT FOUND« ausgegeben.

Wie bei dem primary-commands FIND und CHANGE springt der Cursor bei einer erfolgreichen Suche auf den ersten Buchstaben des Suchwortes, wobei das Textfenster eventuell horizontal oder vertikal verschoben wird. Des weiteren wird in der Kopfzeile »STRING FOUND« angezeigt.

Mit der Funktionstaste »F4« wird ebenfalls eine Suche wie oben beschrieben ausgeführt. Wird jedoch der Suchstring im Text gefunden, so wird eine Umwandlung in den String 2 des letzten primary-commands CHANGE vorgenommen. Außerdem wird die Meldung »0001 CHANGED« angezeigt. Dabei gelten die in Abschnitt 4.2.8 beschriebenen Regeln für die Umwandlung. Ist insbesondere nicht genügend Platz am Zeilenende, wird ebenfalls keine Umwandlung durchgeführt, sondern die Meldung »MOVE-ERROR« ausgegeben.

Wurde seit dem Aufruf des Editors oder dem letzten RESET-Befehl noch kein FIND bzw. CHANGE-Befehl verwendet, erscheint bei der Betätigung von »F2« oder »F4« die Fehlermeldung »KEY NOT ACTIVE«.

Beispiel: CHANGE ( [ FIRST

Mit diesem primary-command starten Sie die Umwandlung von runden in eckige Klammern bei der Textzeile 0000. Der Cursor steht nach der Ausführung auf der ersten umgewandelten Klammer

»F2« Taste betätigen

Der Cursor springt auf die nächste runde Klammer im Text.

»F4« Taste betätigen

Der Cursor bleibt auf der alten Textposition. Es wird die runde in eine eckige Klammer umgewandelt.

»F4« Taste betätigen

Der Cursor springt zur nächsten runden Klammer und wandelt sie direkt in eine eckige Klammer um.

»F2« Taste betätigen

Der Cursor springt zur nächsten runden Klammer

»F2« Taste betätigen

Die runde Klammer wird nicht umgewandelt. Der Cursor springt zur nächsten runden Klammer.

Dises Beispiel zeigt, wie man eine Umwandlung eines Zeichens in ein anderes innerhalb des gesamten Textes vornimmt, wobei man an jeder Stelle entscheiden kann, ob das Zeichen wirklich umgewandelt werden soll. Diese Methode ist oft sicherer als der Befehl

CHANGE ( [ ALL

Inhaltsverzeichnis