TTOOLS - Werkzeuge zur Textverarbeitung

(Copyright © 1984 Michael M. Rubenstein,
Übersetzung: Frank Dachselt)

Ich habe einige Programme gefunden, die ich als äußerst nützlich zur Bearbeitung verschiedener Textdateien ansehe. Textverarbeitung ist eine alltägliche Aufgabe für Kleincomputer und viele Programmierer haben daran gearbeitet. Darum hielt ich es für unnötig, von vorn anzufangen. Die meisten der folgenden Programme stammen von anderen Programmieren. Ich habe verschiedene Modifikationen vorgenommen, mal mehr - mal weniger, und mein eigenes Run-Time-System zur Compilierung genutzt.

Durch den verschiedenen Ursprung der Programme ist auch eine Vielzahl von Programmierstilen vertreten. Ich habe nicht den Versuch unternommen, das zu ändern, außer ich einigen wenigen Fällen, wo ich das Original nicht akzeptabel fand.

Ich habe einige Veränderungen vorgenommen, um ein konsistentes Nutzerinterface zu schaffen. Außer SORT (da hier der Speicherplatz besser für den Sortieralgorithmus benutzt werden sollte) erzeugen alle Programme eine Hilfeseite, wenn sie mit "?" als ersten Parameter aufgerufen werden. Zum Beispiel:

grep ?

Gemeinsame Eigenschaften

Das Run-Time-System, das zur Kompilierung genutzt wurde, bietet eine Reihe nützlicher Funktionen. Ein- und Ausgaben von der Konsole können in ein File oder zu einem Gerät umgeleitet werden. Die Umleitung der Eingabe ist in diesen Programmen wahrscheinlich nicht so wichtig, da sie meistens aus einen File kommen wird, umso nützlicher ist dafür die Umleitung der Ausgabe.

Die Umleitung der Eingabe erfolgt durch einen Parameter der Form

<filename

und die Umleitung der Ausgabe mit einem Parameter der Form

>filename

Anstelle eines Dateinamens (als Parameter oder Umleitung) kann auch eines der folgenden Geräte angegeben werden:

lst: CP/M-List-Gerät
rdr: CP/M-Reader-Gerät
pun: CP/M-Punch-Gerät
con: CP/M-Konsole
dum: ein Dummy-Gerät, Fileende bei Eingabe, Senke bei Ausgabe

Bei Diskettendateien können das Laufwerk und die User-Nummer im "DU"-Format von ZCRP2 angegeben werden. Zum Beispiel:

8:file Datei im Userbereich 8 auf aktuellem Laufwerk
b8:file Datei im Userbereich 8 auf Laufwerk B
b:file Datei im aktuellen Userbereich auf Laufwerk B

Dateinamen können Flags enthalten, die in eckigen Klammern anzugeben sind. Um eine solche Option auszuschalten, ist ein Minus voranzustellen. Das Einschalten geschieht mit einem Plus oder durch eine vorzeichenlose Angabe. Zum Beispiel:

lst:[e] oder lst:[+e]

file.txt[-b+e]

Die folgenden Flags können verwendet werden:

b
Erzeugen einer BAK-Datei, wenn die Ausgabedatei bereits existiert (nur bei Dateiausgabe auf Diskette);
d
Löschen der Datei beim Schließen (nur bei Diskettendateien, für die Ausgabe unüblich aber möglich);
e
Zusätzliches Echo zur Konsole (alle Dateien außer con: und dum:).

Für Ausgabedateien, die als Parameter angegeben sind, ist das b-Flag automatisch gesetzt, kann aber mit [-b] ausgeschaltet werden. Bei umgeleiteten Ausgaben ist dieses Flag nicht automatisch gesetzt.

In allen Fällen kann die Ausgabedatei den gleichen Namen wie die Eingabedatei besitzen. Die Ausgabedatei bekommt den Namen erst, wenn sie geschlossen wird, sodaß bei einem Fehler oder einer Unterbrechung während der Programmabarbeitung die ursprüngliche Version nicht zerstört wird.

Außer bei CHANGE, GREP und TR wird stets die Konsole benutzt, wenn keine Ausgabedatei angegeben wird. Die drei genannten verwenden dann zur Ausgabe die gleiche Datei wie zur Eingabe.

Vorsicht ist bei WordStar-Dateien geboten, da Bit 7 stets zurückgesetzt wird und so weiche Leerzeichen und Zeilenumbrüche in ihre harten Versionen geändert werden.

Beschreibung der Programme

Es folgt eine kurze Beschreibung der Programme. Die genaue Syntax kann mittels des "?"-Parameters erhalten werden.

CHANGE
Änderung eines Strings in einen anderen in der gesamten Datei. Die Strings sind die gleichen, wie sie auch in GREP genutzt werden (siehe unten). Im Normalfall wird im zu suchenden String nicht zwischen Groß- und Keinschreibung unterschieden und der String, in den dieser umgewandelt wird, in Kleinbuchstaben angenommen, solange nicht die \u-Option benutzt wird.
DETAB
Entfernen aller Tabulatoren aus einer Datei und Ersetzen durch Leerzeichen.
DF
Vergleich zweier Textdateien.
ENTAB
Einfügen von Tabulatoren in eine Datei an Stellen, wo dieses möglich ist.
GREP
Gereral Regular Expression Print.
Suchen eines Strings in einer Liste von Dateien. Das Programm akzeptiert Jokerzeichen in den Dateinamen. Leerzeichen im Suchstring müssen in Anführungszeichen oder Apostrophe eingeschlossen sein. Wegen der Komplexität des Programmes hier ein paar Beispiele:
Schreibe alle Zeilen, die mit einem Tabulator beginnen, von file1 nach file2:
grep -f ^\t file1 >file2
Schreibe alle Zeilen, die nicht mit einem "M" beginnen, von file1 nach file2:
grep -f -a ^[^\um] file1 >file2

Zeige jedes Auftreten von "fprintf" und "sprintf" (aber nicht von "printf") in allen C-Programmen im LW B: User 4:
grep -a [fs]printf b4:*.c
MPRINT
Drucken mehrerer Dateien in Spalten.
SORT
Ein allgemeines Sortierprogramm für lange Dateien.
Dieses komplexe Programm kann eine Menge leisten. In einigen Fällen wurde allerdings die Geschwindigkeit zugunsten der Funktionalität geopfert. Es sollte nicht erwartet werden, daß dieses Programm die "Sort Olympics" gewinnt.
SPLIT
Zerteilen einer Datei in mehrere andere. Das Programm ist nützlich in Verbindung mit MPRINT für den mehrspaltigen Ausdruck einer Datei.
TR
Übersetzen von Zeichen nach einer Übersetzungstabelle.
UNIQ
Entfernen doppelt auftretender Zeilen.
WC
Zählen von Worten, Zeilen und Zeichen. Es wird eine
sehr einfache Methode benutzt: Ein Wort ist ein String, der von Leerzeichen umschlossen ist. Es kann eine Liste von Dateien verwendet werden. Jokerzeichen sind erlaubt.

Ein Hinweis zur Nutzung der Programme unter MicroDOS

Alle beschriebenen Programme veranlassen bei ihrer Beendigung einen Warmstart des Systems. Sie sind daher nicht für automatisierte Abläufe innerhalb der normalen MicroDOS-SUB-Dateien geeignet (höchstens als letzte Kommandozeile in einer solchen Datei). Einen Ausweg bietet die Verwendung des SUBMIT-Kommados. Hierbei ist wiederum zu beachten, daß das Zeichen '^' nicht für die Parameternotation verwendet werden kann, da es SUBMIT als Kennzeichnung von Control-Codes interpretiert.