Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ exstr(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

gettxt(1)

mkmsgs(1)

printf(1)

srchtxt(1)

gettxt(3C)

setlocale(3C)

printf(3S)

environ(5)

exstr(1)                                                           exstr(1)

NAME
     exstr - Zeichenketten in Quellprogrammen suchen und ersetzen (extract
     strings)

SYNTAX
     exstr [-e] datei ...                                          Format 1

     exstr -r [-d] datei ...                                       Format 2

BESCHREIBUNG
     Mit exstr können Sie aus C-Quellprogramm-Dateien Zeichenketten heraus-
     ziehen (Format 1) und diese durch Aufrufe einer Funktion ersetzen
     (Format 2), die zur Laufzeit des Programms passende Zeichenketten
     sucht und dazubindet [siehe gettxt(3C)]. Als Zeichenketten gelten alle
     Folgen von einem oder mehreren druckbaren Zeichen, die in Anführungs-
     zeichen "..." eingeschlossen sind, also nicht nur Argumente von
     printf.

   Format 1: Zeichenketten aus C-Quellprogramm-Dateien herausziehen

     exstr [-e] datei ...

     Keine Option angegeben:
        exstr sucht alle Zeichenketten in datei und schreibt sie auf die
        Standardausgabe, wobei jeder Zeichenkette der Name von datei und
        ein Doppelpunkt vorangestellt wird.

     -e exstr gibt zusätzlich zu den gefundenen Zeichenketten Informationen
        über ihre Position in datei aus. Die Ausgabe erfolgt in einer
        Liste, deren Zeilen aus folgenden Feldern bestehen:

        datei:zeile:spalte:meldungsdatei:meldungsnummer:zeichenkette

        datei
             Name der C-Quellprogramm-Datei

        zeile
             Zeilennummer der Zeile in datei, in der zeichenkette steht

        spalte
             Spaltennummer, in der zeichenkette beginnt

        meldungsdatei
             leeres Feld

        meldungsnummer
             leeres Feld

        zeichenkette
             gefundene Zeichenkette





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

exstr(1)                                                           exstr(1)

        Um die Felder meldungsdatei und meldungsnummer zu füllen, leiten
        Sie die Ausgabe in eine Datei um, die sie dann editieren können. In
        der Datei tragen Sie in die beiden Felder eine Meldungsdatei und
        eine Meldungsnummer ein:

        meldungsdatei
             Name der Meldungsdatei, die die Zeichenketten enthält, die
             später an die Stelle der ursprünglich in der C-Quellprogramm-
             Datei enthaltenen Zeichenketten geschrieben werden sollen.
             meldungsdatei muß mit dem Kommando mkmsgs an geeigneter Stelle
             im Dateibaum angelegt werden [siehe mkmsg(1)].

        meldungsnummer
             Nummer, die zeichenkette in meldungsdatei hat.

        Um Zeichenketten in der Quellprogramm-Datei zu ersetzen, verwenden
        Sie das zweite Format von exstr.

     datei
        Name der C-Quellprogramm-Datei, die exstr nach Zeichenketten durch-
        suchen soll. Sie können mehrere Dateien angeben.

   Format 2: Zeichenketten in C-Quellprogramm-Dateien ersetzen

     exstr -r [-d] datei ...

     -r exstr ersetzt jede Zeichenkette in datei durch den Funktionsaufruf
        der Funktion gettxt(3C), die zur Laufzeit des Programms eine ent-
        sprechende Zeichenkette sucht und dazubindet.

     -d Nur zusammen mit Option -r! Wenn der Funktionsaufruf gettxt(3C) zur
        Laufzeit des Programms scheitert, wird die ursprüngliche Zeichen-
        kette ausgegeben. Diese Option standardmäßig immer gesetzt. Sie ist
        aus Kompatibilitätsgründen zu anderen Systemen vorhanden.

     datei
        Name der C-Quellprogramm-Datei, die exstr nach Zeichenketten durch-
        suchen soll. Sie können mehrere Dateien angeben.

   Anwendung

     exstr ist nützlich für Anwenderprogramme, die in einer internationalen
     Umgebung ablauffähig sind und Meldungstexte in verschiedenen Landes-
     sprachen ausgeben können sollen. exstr ersetzt Zeichenketten in C-
     Quellprogramm-Dateien durch Funktionsaufrufe, die auf Zeichenketten in
     einer Datenbasis zeigen. Auf welche Datenbasis zugegriffen wird, hängt
     vom zur Laufzeit des Programms aktuellen Wert der Umgebungsvariablen
     LCMESSAGES ab [siehe environ(5)].






Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

exstr(1)                                                           exstr(1)

   Arbeitsschritte mit exstr

     -  Als erstes holen Sie mit exstr -e datei.c > ausdatei die Zeichen-
        ketten aus einer C-Quellprogramm-Datei datei.c heraus und schreiben
        sie mit ihrer Positionsangabe in eine Datei ausdatei.

     -  Dann überprüfen Sie die Liste der Zeichenketten in ausdatei und
        bestimmen, welche Zeichenketten in eine andere Landessprache über-
        setzt und durch die Meldungstext-Suchfunktion gettxt(3C) ersetzt
        werden können.

     -  Die Zeilen mit Zeichenketten, die nicht übersetzt werden können,
        löschen Sie in ausdatei. In den Zeilen mit Zeichenketten, die
        übersetzt werden können, füllen Sie das Feld meldungsdatei mit dem
        Namen der Meldungsdatei und das Feld meldungsnummer mit der Nummer,
        die die entsprechende Zeichenkette in meldungsdatei hat. Die Mel-
        dungsdateien, die Sie angeben, müssen mit mkmsgs angelegt worden
        sein und sich im Verzeichnis /usr/lib/locale/Locale/LCMESSAGES
        befinden. Der einfache Name des Verzeichnisses
        /usr/lib/locale/Locale, also Locale, entspricht der Landessprache,
        in der die Zeichenketten in den darunter liegenden Meldungsdateien
        geschrieben sind [siehe setlocale(3C)]. Die Meldungsnummern müssen
        den jeweiligen Nummern entsprechen, die die Zeichenketten in der
        angegebenen Meldungsdatei haben.

     -  Die von Ihnen veränderte Datei ausdatei übergeben Sie an den Kom-
        mandoaufruf exstr -r als Eingabe, um von der ursprünglichen C-
        Quellprogramm-Datei datei.c eine neue Fassung neudatei.c zu
        erstellen, in der Zeichenketten durch Aufrufe der Meldungstext-
        Suchfunktion gettxt(3C) ersetzt sind. Der Aufruf sieht wie folgt
        aus:

        exstr -r datei.c < ausdatei > neudatei.c

        An die Funktion gettxt(3C) werden zwei Argumente übergeben. Das
        erste Argument wird aus den beiden Feldern meldungsdatei und
        meldungsnummer in ausdatei gebildet, das zweite Argument besteht
        aus der Zeichenkette, die im Fehlerfall ausgegeben werden soll,
        also falls der Aufruf von gettxt(3C) zur Laufzeit des Programms
        scheitert. Das zweite Argument ist die ursprüngliche Zeichenkette
        (siehe oben).

   Einschränkungen

     exstr kann nicht alle Arten von Zeichenketten in C-Quellprogramm-
     Dateien ersetzen, z.B:

     -  Zeichenketten, die Variablen der Speicherklasse static zugewiessen
        sind, dürfen durch exstr nicht ersetzt werden.





Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

exstr(1)                                                           exstr(1)

     -  Zeichenketten, die aus Escape-Folgen bestehen, können nicht in eine
        andere Landessprache übersetzt und sollen folglich nicht durch
        exstr ersetzt werden. Um zu verhindern, daß ungültiger Code produ-
        ziert wird, müssen Sie also die von exstr -e erzeugte Ausgabe über-
        prüfen und Zeilen löschen oder ändern, die durch Aufrufe von
        gettxt(3C) nicht unmittelbar ersetzbare Zeichenketten enthalten.

FEHLERMELDUNGEN
     Die wichtigsten Fehlermeldungen sind:

     ERROR: cannot replace string '%s' in line (%d) of file (%s)

     Fehler: die Zeichenkette '%s' in Zeile (%d) der Datei (%s) kann nicht
     ersetzt werden.

     ERROR: stdin: invalid message number '%s'

     Fehler: Standardeingabe: ungültige Meldungsnummer '%s'

     ERROR: stdin: invalid message file name '%s'

     Fehler: Standardeingabe: ungültiger Name der Meldungsdatei '%s'

     ERROR: stdin: badly formed replacement string

     Fehler: Ersetzungs-Zeichenkette hat ein ungültiges Format

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 Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
     bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
     Bereich der Internationalisierung.

BEISPIELE
     Das folgende Beispiel zeigt, wie Sie exstr anwenden können.

     Wir nehmen an, die C-Quellprogramm-Datei datei.c enthalte zwei Zei-
     chenketten.

     main()
     {
        printf("Erste Zeichenkette\n");
        printf("Zweite Zeichenkette\n");
     }





Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

exstr(1)                                                           exstr(1)

     Der Aufruf von exstr ohne Option zieht aus der Datei datei.c die in
     "..." eingeschlossenen Zeichenketten heraus und schreibt sie auf die
     Standardausgabe.

     $ exstr datei.c
     datei.c:Erste Zeichenkette\n
     datei.c:Zweite Zeichenkette\n

     Die Zeichenketten selbst und zusätzliche Informationen über ihre Posi-
     tion in der Datei erhalten Sie mit der Option -e. Um die herausgezoge-
     nen Zeichenketten zu überprüfen und gegebenenfalls zu löschen oder zu
     ändern, lenken Sie die Standardausgabe in eine Datei ausdatei um.

     $ exstr -e datei.c > ausdatei
     $ cat ausdatei
     datei.c:3:8:::Erste Zeichenkette\n
     datei.c:4:8:::Zweite Zeichenkette\n

     Jede Ausgabezeile besteht aus sechs durch Doppelpunkt voneinander
     getrennten Feldern. Im 1. Feld steht der Name der C-Quellprogramm-
     Datei, im 2. Feld die Zeilennummer der Zeichenkette (hier 3 und 4), im
     3. Feld die Spaltennummer des 1. Zeichens der Zeichenkette (hier 8),
     im 6. Feld die Zeichenkette selbst ohne Anführungsstriche. Im 4. Feld
     tragen Sie mit Hilfe eines Editors die Meldungsdatei ein, aus der
     gettxt(3C) später die neue Zeichenkette holen soll und im 5. Feld die
     Nummer, die die Zeichenkette in der Meldungsdatei hat. Angenommen, UX
     ist der Name der Meldungsdatei und die entsprechenden Zeichenketten
     hätten die Meldungsnummern 1 und 2, dann müßte ausdatei wie folgt
     aussehen, nachdem Sie sie bearbeitet haben:

     datei.c:3:8:UX:1:Erste Zeichenkette\n
     datei.c:4:8:UX:2:Zweite Zeichenkette\n

     Nun können Sie exstr -r aufrufen, um in der C-Quellprogramm-Datei alle
     Zeichenketten durch den Funktionsaufruf gettxt(3C) zu ersetzen. Sie
     übergeben dabei die von Ihnen geänderte Datei ausdatei als Eingabe an
     exstr und lenken die Ausgabe in die Datei neudatei.c um, die dann
     folgenden neuen Quellcode enthält:

     $ exstr -r datei.c < ausdatei > neudatei.c
     $ cat neudatei.c
     extern char *gettxt();
     main()
     {
        printf(gettxt("UX:1","Erste Zeichenkette\n"));
        printf(gettxt("UX:2","Zweite Zeichenkette\n"));
     }







Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

exstr(1)                                                           exstr(1)

DATEIEN
     /usr/lib/locale/Locale/LCMESSAGES
          Verzeichnis mit den Meldungsdateien, wobei der einfache Name des
          Verzeichnisses /usr/lib/locale/Locale, also Locale, der Landes-
          sprache entspricht, in der die Zeichenketten in den darunter
          befindlichen Dateien geschrieben sind.

SIEHE AUCH
     gettxt(1), mkmsgs(1), printf(1), srchtxt(1), gettxt(3C),
     setlocale(3C), printf(3S), environ(5).

     Leitfaden für Programmierer, Internationalisierung - Lokalisierung.










































Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

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