Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ extract(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ed(1)

gencat(1)

extract(1)                                                       extract(1)

NAME
     extract, strextract - Zeichenketten in Quellprogrammen interaktiv
     suchen und ersetzen

SYNTAX
     extract [option ...] datei ...

BESCHREIBUNG
     Mit extract können Sie interaktiv aus Quellprogramm-Dateien Zeichen-
     ketten herausziehen und diese durch Aufrufe von Funktionen ersetzen,
     die zur Laufzeit des Programms aus einem Meldungskatalog passende Zei-
     chenketten holen und dazubinden. Dieser Prozeß wird mit zwei Dateien
     gesteuert:

     -  Musterdatei

     -  Ignoredatei

     Die Musterdatei enthält

     1. Textmuster, mit denen Zeichenketten aus der angegebenen Quellpro-
        gramm-Datei verglichen werden und

     2. Regeln, nach denen zu den Mustern passende Zeichenketten ausgewählt
        und ersetzt werden.

     Die Ignoredatei enthält Zeichenketten, die nicht ersetzt werden sol-
     len.

OPTIONEN
     -i ignoredatei
          Die Datei ignoredatei wird als Ignoredatei verwendet.

          -i ignoredatei nicht angegeben:

          Standardmäßig ist die Datei ignore die Ignoredatei. Sie wird
          zuerst im aktuellen Verzeichnis, dann im HOME-Verzeichnis und
          zuletzt in usr/lib/nls/extract gesucht.

     -m präfix
          Für präfix können Sie Zeichen oder Zeichenfolgen angeben, die
          allen Meldungsnummern in der nl-Datei und in der .msf-Datei vor-
          angestellt werden sollen.

          -m präfix nicht angegeben:

          Die Meldungsnummern bekommen keine Zeichen vorangestellt.

     -n   Für jede angegebene Quellprogramm-Datei wird eine eigene Mel-
          dungstext-Datei erstellt. Die Meldungsnummern beginnen in jeder
          Meldungsdatei mit 1.




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

extract(1)                                                       extract(1)

          -n nicht angegeben:

          Es wird eine Meldungstext-Datei erzeugt. Die Meldungsnummern wer-
          den fortlaufend numeriert.

     -p musterdatei
          Die Datei musterdatei wird als Musterdatei verwendet.

          -p musterdatei nicht angegeben:

          Standardmäßig ist die Datei pattern die Musterdatei. Sie wird
          zuerst im aktuellen Verzeichnis, dann im HOME-Verzeichnis und
          zuletzt in usr/lib/nls/extract gesucht.

     -s zeichenkette
          Für zeichenkette können Sie Zeichen angeben, die am Anfang der
          .msf-Datei ausgegeben werden sollen.

          -s zeichenkette nicht angegeben:

          Standardmäßig wird die Zeichenkette $quote " ausgegeben oder die
          CATHEAD-Anweisung aus der Musterdatei, sofern sie dort definiert
          ist.

     -u   Es wird eine Meldungsdatei verwendet, die durch einen früheren
          Lauf von strextract erstellt wurde. Für jede angegebene Quellpro-
          gramm-Datei wird im aktuellen Verzeichnis nach einer entsprechen-
          den Datei mit dem Suffix .msg gesucht. Diese Datei enthält genaue
          Informationen über alle Zeichenketten, die zu Mustern in der
          Musterdatei passen, u. a. ihre Position und Zeilennummer in der
          Datei. extract ruft strextract auf und interpretiert das Ergeb-
          nis.

     datei
          Name der Quellprogramm-Datei, die extract bearbeiten soll. Sie
          können auch mehrere Dateien angegeben.

   Die Musterdatei

     Die Musterdatei /usr/lib/nls/extract/pattern enthält Textmuster, mit
     denen die Zeichenketten in der angegebenen Quellprogramm-Datei vergli-
     chen werden, und die Regeln, nach denen die Zeichenketten ausgewählt
     und ersetzt werden. Sie ermöglicht, Zeichenketten zu extrahieren und
     durch Aufrufe der Funktion catgets(3C) zu ersetzen. Außerdem können
     Sie Textmuster angeben für Zeichenketten, die nicht ersetzt werden
     sollen. Dies ist nötig, um zu verhindern, daß Zeichenketten unzulässi-
     gerweise verändert werden und dadurch ungültiger Code produziert wird.

     Die Syntax von Textmustern stimmt mit der Syntax von regulären Aus-
     drücken bei ed überein. Im Beispiel wird gezeigt, wie eine Musterdatei
     für die Anwendung auf C-Quellprogramme aussehen kann.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

extract(1)                                                       extract(1)

     Die Musterdatei ist in mehrere Abschnitte unterteilt, wobei jeder
     Abschnitt durch den Eintrag $SCHLÜSSELWORT eindeutig identifiziert
     werden kann.

     $SCHLÜSSELWORT kann sein:

     $SRCHEAD1
          Include-Datei, die am Anfang oder in die erste neue
          Quellprogramm-Datei eingefügt wird.

     $SRCHEAD2
          Include-Datei, die an den Beginn der zweiten neuen
          Quellprogramm-Datei eingefügt wird.

     $CATHEAD
          Header, der an den Anfang des zu erstellenden Meldungskatalogs
          eingefügt wird. Sie könnten hier beispielsweise die SCCS-ID, die
          Definition des aktuellen Zeichensatzes o. ä. einfügen. Unter
          Umständen wird dies jedoch überschrieben, wenn Sie extract mit
          der Option -s aufrufen.

     $REWRITE
          Regel, nach der ausgewählte passende Zeichenketten ersetzt wer-
          den.

     $MATCH
          Liste der Muster der gesuchten Zeichenketten. Die Syntax der
          regulären Ausdrücke basiert auf ed. Beachten Sie: [^xyz]* bedeu-
          tet, daß bis auf xyz jedes Zeichen als passend gilt.

     $REJECT
          Bestimmte C-Konstrukte sollen nicht berücksichtigt werden.

     $ERROR warnung
          Für initialisierte Zeichenketten wird eine Warnung ausgegeben.

   Die Ignoredatei

     Die Ignoredatei enthält wörtlich die Zeichenketten (also keine Muster
     in der Form regulärer Ausdrücke), die in der neuen Quellprogramm-Datei
     (der nl-Datei) unverändert bleiben. Die Ignoredatei wird, falls vor-
     handen, zu Beginn des Ablaufs von extract gelesen. Sie sorgt dafür,
     daß bestimmte Zeichenketten in der Eingabedatei ignoriert werden. Wäh-
     rend des Laufs können mit dem ADD-Kommando (siehe unten) weitere Zei-
     chenketten, die ignoriert werden sollen, in die Datei eingefügt wer-
     den. Sie können die Ignoredatei mit einem normalen Editor erstellen
     und ändern, wobei in jeder Zeile genau eine Zeichenkette stehen darf,
     die in der Eingabedatei ignoriert werden soll.






Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

extract(1)                                                       extract(1)

   Arbeitsweise von extract

     Beim Aufruf von extract wird eine neue Version der Quellprogramm-Datei
     erstellt, wobei dem ursprünglichen Dateinamen die Zeichen nl vorange-
     stellt werden. Außerdem wird eine Meldungstext-Datei erstellt. Ihr
     Name ergibt sich aus dem Namen der ersten angegebenen Datei ohne die
     Endung .c und den Zeichen .msf, die als Suffix angehängt werden. Diese
     Datei kann direkt als Eingabe für gencat dienen oder ihr Inhalt kann
     vor der Übergabe an gencat in eine andere Landessprache übersetzt wer-
     den.

     Während des Laufs von extract erscheinen am Bildschirm drei Fenster.
     Das erste enthält den Quellcode mit der Zeichenkette, die herausgezo-
     gen und umgewandelt werden soll. Sie wird auf dem Bildschirm invers
     dargestellt.

     Das zweite Fenster enthält eine Liste der bisher herausgezogenen Zei-
     chenketten mit jeweils einer Meldungsnummer.

     Das dritte Fenster enthält eine Liste der verfügbaren Kommandos. Das
     sind:

     EXTRACT
          Aus der Quelldatei wird die passende Zeichenkette herausgezogen
          und in die Katalog-Quelldatei geschrieben. In der Musterdatei
          wird nach der REWRITE-Regel festgelegt, welcher Text den heraus-
          gezogenen Text in der nl-Datei ersetzen soll.

     DUPLICATE
          Wenn dieselbe Zeichenkette bereits früher herausgezogen wurde,
          hebt extract diese am Bildschirm in inverser Darstellung hervor.

          Wenn Sie dann das Kommando DUPLICATE eingeben, verwendet extract
          beim Neuschreiben des Quellprogramms dieselbe Meldungsnummer wie
          beim letztenmal. Dadurch kann in Meldungskatalogen Speicherplatz
          gespart werden.

     IGNORE
          Die Zeichenkette soll hier und bei jedem nachfolgenden Auftreten
          ignoriert werden.

     PASS Die Zeichenkette soll hier ignoriert werden. Bei jedem nachfol-
          genden Auftreten derselben Zeichenkette wird sie dem Benutzer
          jedesmal neu zur Entscheidung angeboten.

     ADD  Wie IGNORE, aber zusätzlich wird die Zeichenkette an den Inhalt
          der Ignoredatei angefügt.

     COMMENT
          Sie können einen Kommentar angeben, der dann in die Meldungs-
          text-Datei (Endung .msf) eingetragen wird. Dies ist nützlich für
          gencat.


Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

extract(1)                                                       extract(1)

     QUIT Sie verlassen das Programm, werden aber vorher gefragt, ob Sie es
          wirklich verlassen wollen. Die Ausgabedateien enthalten das bis
          zum Zeitpunkt des Verlassens erreichte Ergebnis von extract. Es
          ist nicht möglich, das Kommando extract erneut über eine bereits
          teilweise mit extract bearbeitete Quelldatei laufen zu lassen.

     HELP Eine Beschreibung der möglichen Kommandos wird ausgegeben. Die
          Hilfstexte stehen in /usr/lib/nls/extract/help.

     Das aktuelle Kommando wird am Bildschirm invers dargestellt und durch
     das Drücken der Returntaste <RETURN> gestartet. Ein neues Kommando
     wählen Sie aus, indem Sie den ersten Buchstaben des Kommandos einge-
     ben, z. B. i oder I für IGNORE.

     Einschränkungen

     -  Bei der aktuell gültigen Syntax für die Musterdatei ist es nicht
        möglich, Zeichenketten in mehrzeiligen Kommentaren zu ignorieren.

     -  Für alle Klassen von passenden Mustern kann nur eine Zeichenkette
        zum Ersetzen definiert werden.

     -  Das Programm arbeitet nicht rekursiv alle Include-Dateien ab. Diese
        müssen eigens bearbeitet werden.

     -  Mehrzeilige Zeichenketten werden nicht erkannt.

INTERNATIONALE UMGEBUNG
     Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
     texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
     ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
     LANG nicht oder als leere Zeichenkette definiert, verhält sich das
     System so, als wäre es nicht internationalisiert.

     Die Antwort auf Ja/Nein-Abfragen muß in der jeweils definierten Spra-
     chumgebung erfolgen.

     Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
     bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
     Bereich der Internationalisierung.

BEISPIELE
     Beispiel 1

     Bearbeitung des Quellprogramms datei1.c mit extract, wobei neuignore
     als Ignoredatei und cmuster als Musterdatei verwendet werden sollen.

     $ extract -i neuignore -p cmuster datei1.c

     Es werden folgende Dateien erstellt:

     Neue Version der Quellprogramm-Datei: nldatei1.c


Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

extract(1)                                                       extract(1)

     Meldungstext-Datei: datei1.msf

     $ ls *datei1*
     datei1.c
     datei1.msf
     nldatei1.c

     Beispiel 2

     Erzeugen des Meldungskatalogs datei1.cat für datei1.c aus der Mel-
     dungstext-Datei datei1.msf mit gencat.

     $ gencat datei1.cat datei1.msf

     Beispiel 3

     Kompilieren der mit extract neu erstellten Quelldatei nldatei1.c.

     $ cc nldatei1.c

     Beispiel 4

     Beispiel einer Musterdatei für ein C-Quellprogramm:

     # Kommentarzeilen beginnen mit dem Nummernzeichen #, entwerten kann
     # man das Nummernzeichen mit einem Gegenschrägstrich davor \#
     #
     # Zuerst müssen einige Abschnitte in jede neu zu erstellende
     # Quelldatei eingebunden werden.
     #
     # Include-Datei, die an den Anfang der ersten neuen
     # Quellprogramm-Datei eingefügt wird.
     $SRCHEAD1
     \#include <nltypes.h>
     nlcatd catd;            /* Definition des Katalog-Deskriptors */
     # Include-Datei, die an den Anfang der zweiten neuen
     # Quellprogramm-Datei eingefügt wird.
     $SRCHEAD2
     \#include <nltypes.h>
     extern nlcatd catd;     /* Katalog-Deskriptor */
     #
     # Header, der an den Anfang des zu erstellenden Meldungskatalogs
     # eingefügt werden muß. Sie könnten hier beispielsweise die
     # SCCS-ID, die Definition des aktuellen Zeichensatzes o. ä.
     # einfügen. Unter Umständen wird dies jedoch überschrieben,
     # wenn Sie extract mit der Option -s aufrufen.
     #
     $CATHEAD
     \$quote "
     \$set 1
     #
     # Regel, nach der ausgewählte passende Zeichenketten ersetzt werden.


Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

extract(1)                                                       extract(1)

     $REWRITE
     catgets(catd, 1, %n, %t)
     # Die %-Deskriptoren werden wie folgt ersetzt:
     # %  - a %
     # n  - Meldungsnummer (aus der cat-Datei)
     # t  - eigentlicher Text
     # l  - Länge der Zeichenkette %t
     # r  - roher Text ohne Quotier-Zeichen
     # N  - ein Neue-Zeile-Zeichen wird eingefügt
     # T  - ein Tabulatorzeichen wird eingefügt
     #
     # Liste der Muster der gesuchten Zeichenketten.
     # Die Syntax der regulären Ausdrücke basiert auf ed.
     # Beachten Sie: [^xyz]* bedeutet, daß jedes Zeichen als
     # passend gilt außer xyz.
     #
     $MATCH
     #
     "[^"]*"
     # Bestimmte C-Konstrukte sollen nicht berücksichtigt werden:
     $REJECT
     # Die leere Zeichenkette
     ""
     # Zeichen zur Ausgabesteuerung
     "\\."
     # Präprozessor-Anweisungen sollen ignoriert werden
     \#.*
     # SCCS-ID-Zeilen sollen ignoriert werden
     [sS][cC][cC][sS][iI][dD]\[\][       ]*=[    ]*".*"
     # Einige Bibliotheksfunktionen, die Dateinamen verwenden, sollen
     # ignoriert werden
     fopen[  ]*([^,]*,[^)]*)
     creat[  ]*([^,]",[^)]*)
     #
     # Für initialisierte Zeichenketten soll eine Warnung ausgegeben werden.
     #
     $ERROR initialisierte Zeichenketten können nicht ersetzt werden.
     # Die auf ERROR folgende Meldung soll ausgegeben werden, wenn folgende
     # Zeichenketten gefunden werden:
     ^char[^=]*=[     ]*"[^"]*"
     char[    ]*[A-Za-z][A-Za-z0-9]*\[[^\]*\][  ]*=[   ]*"[^"]*"

SIEHE AUCH
     ed(1), gencat(1).

     Leitfaden für Programmierer, Internationalisierung - Lokalisierung.








Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026