Das Meldungssystem von UNITED/XY

(Michael Schröpl, 1992-09-20)

  1. Anwendung für den Normalbenutzer
  2. Neue Möglichkeiten durch die Meldungsdatei
  3. Änderungen an der Meldungsdatei
  4. Aufbau der Meldungsdatei
  5. Einfügungen in Meldungen
  6. Formatierung von Einfügungen
  7. Singular/Plural-Problematik
  8. Diagnose-Ausgaben

1. Anwendung für den Normalbenutzer

Seit der Version 1.70 verfügt UNITED/XY über eine Textdatei, in der sämtliche Meldungstexte des Programms enthalten sind. Diese Datei hat den Namen UNITED.MSG und muß sich im selben Verzeichnis wie die Auswertungsprogrammdatei (UNITED.EXE bzw. UNITED.TOS) befinden.

Die Meldungsdatei wird vom Programm nur gelesen, nicht verändert; sie darf (und sollte, ebenso wie die Programmdatei selbst) schreibgeschützt werden.

2. Neue Möglichkeiten durch die Meldungsdatei

Unter Meldungen sind alle Ausgaben zu verstehen, die nicht reine Daten im Sinne von United darstellen (also z. B. nicht Namen und Daten von Vereinen bzw. Spielern). Es sind nicht nur Ausgaben auf den Bildschirm damit gemeint, sondern ebenso Ausgaben in die vom Programm erstellten Auswertungsdateien!

Sinn dieser Änderung war es, Versionen von UNITED/XY in fremden Sprachen zu ermöglichen, ohne dafür mehrere Versionen des Programm-Quelltextes warten zu müssen.

Ein Programmbenutzer kann den Inhalt der mitgelieferten deutschen Meldungsdatei gegen Meldungen der von ihm gewünschten Sprache austauschen. Dies gilt natürlich auch, wenn ein Programmbenutzer eine Meldung des Programms durch eine aussagekräftigere Meldung ersetzen möchte. (Dabei ist jedoch zu beachten, daß in manchen Fällen die Länge der Meldungstexte auch von Layout-Kriterien auf dem Bildschirm abhängig ist!) In solchen Fällen bitte ich jedoch um Zusendung der geänderten Meldungsdatei; war die Änderung in meinen Augen wirklich eine Verbesserung, dann werde ich sie gerne in die nächste Version der an alle Benutzer ausgelieferten Meldungsdatei aufnehmen.

Natürlich wird sich der Inhalt der Meldungsdatei bei späteren Programmversionen ändern können und ggf. müssen. Anders als bei der Parameterdatei wird es nicht möglich sein, die bisherige Meldungsdatei ohne Probleme weiter zu verwenden. Ich werde mich allerdings bemühen, existierende Meldungsschlüssel beizubehalten.

Da im Zuge von Programmänderungen auch Meldungen gestrichen werden können, kann die dann jeweils neu mitgelieferte Meldungsdatei nicht immer eine Obermenge der vorherigen Meldungsdatei sein. Die Anpassung einer neuen Version von UNITED/XY an eine fremde Sprache wird aber immer eine überschaubare Arbeit bleiben, insbesondere wenn man sich die alte deutsche Meldungsdatei aufhebt und diese per Editor mit der neuen Meldungsdatei vergleichen kann.

Für die Sprache Englisch werde ich die Wartung der Meldungsdatei voraussichtlich selbst übernehmen.

3. Änderungen an der Meldungsdatei

Wer Änderungen in der Meldungsdatei vornehmen will, sollte sich die folgenden Ausführungen sehr genau durchlesen und unbedingt eine Kopie der Datei erstellen, bevor er loslegt.

Zur Beruhigung sei gesagt, daß UNITED/XY auch mit einer fehlerhaften Meldungsdatei noch einigermaßen funktioniert und bei jedem fehlerhaften Verarbeitungsschritt eine ('fest eingebrannte') Diagnose-Ausgabe erzeugt, in der der Index der fehlerhaft verwendeten Meldung und die Art des Fehlers enthalten sein sollte. Dies gilt auch, falls eine Meldung in der Meldungsdatei fehlt oder gar die gesamte Meldungsdatei nicht gefunden wird.

Die derzeit möglichen Diagnose-Ausgaben sind in Kapitel 8. beschrieben.

4. Aufbau der Meldungsdatei

Die Meldungsdatei ist - genau wie die Parameterdatei von UNITED/XY - eine Textdatei, die in Zeilen eingeteilt ist. Sie kann also mit jedem normalen ASCII-Editor bearbeitet werden.

Jede Zeile ist entweder eine Kommentarzeile oder eine Meldungsdefinition. Kommentarzeilen sind gekennzeichnet durch das Zeichen * in Spalte 1, dürfen an jeder beliebigen Stelle der Datei auftreten und werden vom Programm nicht ausgewertet.

Eine Meldungsdefinition besteht aus drei Teilen:

4.1 Der Meldungsindex

Ein Meldungsindex ist ein 8 Zeichen langes, vom Programm reserviertes Wort. Der Meldungsindex darf niemals vom Benutzer verändert werden, sonst kann die Meldung vom Programm nicht mehr gefunden werden.

4.2 Die Trennzeichen

Hinter dem Meldungsindex folgen drei (beliebige) Zeichen, die als Trennung zwischen den beiden übrigen Definitionsteilen dienen und von den Meldungsroutinen nicht ausgewertet werden.

Für UNITED/XY wurden diese Zeichen dazu benutzt, um nähere Informationen über den Mechanismus, mit dem die betreffende Meldung ausgegeben wird, anzugeben. (Dies gibt dem Benutzer einen Hinweis, welche Änderungen an der Meldung erlaubt sind und welche nicht.) Nähere Einzelheiten sind der Datei UNITED.MSG zu entnehmen.

4.3 Der Meldungstext

Der Rest der Definitionszeile enthält den kompletten Text der Meldung. Hierbei ist jedes Zeichen von Bedeutung. Auch Leerzeichen am Anfang und Ende des Meldungstextes (falls vorhanden) haben einen Sinn und sollten nicht einfach weggelassen werden!

Die Anpassung einer Meldungsdatei an eine fremde Sprache besteht also zunächst darin, den Inhalt der Meldungstexte zu übersetzen.

5. Einfügungen in Meldungen

In einigen Fällen werden Meldungen verwendet, die Teile mit variablem Inhalt enthalten. Ein Beispiel:

ALTLI004: Alterung für alle Vereine der [&1]

Diese Meldung enthält eine Einfügungsstelle, für die vom Programm ein aktueller Wert eingesetzt werden wird (in diesem Falle der Name der betroffenen Liga).

Jede Meldung kann folgende Arten von Einfügungsstellen enthalten:

Durch den Wert von <nr> (eine Ziffer) wird eine Einfügungsstelle innerhalb ihrer Gruppe eindeutig gekennzeichnet. Es ist erlaubt, dieselbe Einfügungsstelle innerhalb einer Meldung mehrfach zu verwenden; dies wird bei der Ersetzung von den Meldungsroutinen korrekt behandelt (für jedes Auftreten wird derselbe Wert eingesetzt).

UNITED/XY 'weiß', welche Einfügungsstellen jede Meldung besitzt, und versucht, bei der Verwendung einer Meldung die entsprechenden Ersetzungen vorzunehmen. Wird eine Einfügungsstelle innerhalb der Meldung nicht gefunden, dann führt dies zur Ausgabe einer entsprechenden Warnung; wurde in einer Meldung eine Einfügungsstelle definiert, die von UNITED/XY nicht vorgesehen war, dann kann die entsprechende Markierung der Stelle natürlich nicht durch einen Wert ersetzt werden.

Die Position innerhalb der Meldung, an der die Einfügungsstelle auftritt, ist frei wählbar. Durch die Verwendung solcher Einfügungsstellen ist es also möglich, den Satzbau einer Meldung bei der Übersetzung den Konventionen der neuen Sprache in beliebiger Weise anzupassen.

Innerhalb der Meldung ist nicht zusätzlich gekennzeichnet, welche Bedeutung eine Einfügungsstelle hat, d. h. welcher Wert an dieser Stelle eingesetzt wird; dies sollte aber jeweils aus dem restlichen Text der Meldung eindeutig zu erkennen sein.

6. Formatierung von Einfügungen

Werte für eine Einfügung sind Zahlen bzw. Zeichenketten. Beide Typen von Werten haben normalerweise eine variable Länge, was für Tabellen eine entsprechende Formatierung erfordert.

Jede Einfügung in einem Meldungstext kann eine Formatierungsanweisung enthalten (direkt hinter der Nummer, die die Einfügung innerhalb ihrer Gruppe identifiziert).

Eine Formatierungsanweisung besteht immer aus genau drei Zeichen:

Wurde eine solche Formatierungsanweisung spezifiziert, dann wird der an dieser Stelle in die Meldung einzusetzende Wert zunächst mit Leerzeichen auf die gewünschte Form gebracht und anschließend in die Meldung eingefügt.

Dieses Verfahren hat mehrere Vorteile:

Als Anwendungsbeispiel die Beschreibung einer Zeile aus der Tabelle der wertvollsten Spieler des Ligasystems:

HILF0101:@:[#1<03]) [&1>30] [&2>12] ([#2<04])

Die Meldung enthält

Ohne die Funktionsfähigkeit des Programms zu beeinflussen, kann der Benutzer sowohl das Aussehen der einzelnen Tabellenspalten wie auch ihre Anordnung innerhalb der Zeile beliebig ändern.

7. Singular/Plural-Problematik

Wer hat nicht schon ein Programm benutzt, das die Meldung

1 Sätze verarbeitet

(oder so ähnlich) ausgegeben hat? In UNITED/XY sind (hoffentlich!) keine solchen sprachlichen Patzer mehr enthalten.

Genau dies aber stellte sich als Problem bei der Anpassung an fremde Sprachen heraus - denn die Entscheidung, welches Wort an einer bestimmten Stelle einer Meldung einzusetzen ist, ist in diesem Fall sowohl von den aktuellen Daten des Programms als auch von der verwendeten Sprache abhängig. Oder eben auch unabhängig, wenn in der entsprechenden Sprache die Singular- und die Pluralform des Wortes gleich sind.

Um dieses Problem in den Griff zu bekommen, wurde neben den verschiedenen Typen der Einfügungen eine weitere Struktur innerhalb von Meldungstexten definiert: Die Anpassungsstelle.

Eine Anpassung hat das Aussehen

[$ <nr> <singular> | <plural> ]

und enthält also ein Paar von Worten, nämlich die Singular- und die Pluralform eines Begriffs.

UNITED/XY kann aufgrund der aktuell vorliegenden Daten entscheiden, ob in einem Meldungstext jeweils die Singular- oder die Pluralform des Paares verwendet werden soll, und wendet die entsprechende Ersetzungsvorschrift auf den Meldungstext an.

Wie Einfügungsstellen dürfen auch Anpassungsstellen in beliebiger Anzahl und an beliebigen Stellen innerhalb eines Meldungstextes auftreten.

Sind bei der verwendeten Sprache die Singular- und Pluralform eines Wortes identisch, dann darf die Anpassung durch das entsprechende Wort ersetzt werden; es führt nicht zu einem Fehler, wenn die Meldungsroutine beim Ersetzungsvorgang keine Anpassungsstelle finden kann.

Erwähnenswert ist noch, daß sowohl für <singular> als auch für <plural> auch die leere Zeichenkette zulässig ist, wie etwa in der Meldung

Folgende[$1s|] Talent[$1|e] wurde[$1|n] entdeckt:.

8. Diagnose-Ausgaben

Ausgaben, die die Meldungsroutinen über ihren eigenen Ablauf erzeugen, werden in Englisch erzeugt. Dies halte ich für die universelle Sprache, die hoffentlich jeder Programmbenutzer wenigstens rudimentär verstehen sollte. In jeder dieser Ausgaben ist der Index der aktuell bearbeiteten Meldung enthalten.

Die Liste der möglichen Diagnose-Meldungen soll eine Hilfe bei der Suche nach eigenen Fehlern in der Meldungsdatei darstellen, aber auch dem Benutzer ein Gefühl dafür vermitteln, wie die Meldungsroutinen arbeiten, welche Prüfungen vorgenommen werden und welche Datenmenge verarbeitet werden kann.

In jedem Fall wird das Programm nach der Ausgabe weiterlaufen.

Normalerweise betrifft eine Meldung jeweils nur die Erzeugung einer einzelnen Meldung; Störungen in anderen Teilen des Programms sind in den meisten Fällen nicht zu erwarten.

Sollte eine entsprechende Warnung ausgegeben werden, dann liegt ein Fehler vor, der nach Möglichkeit sofort behoben werden sollte. Hierbei sind zwei Möglichkeiten zu unterscheiden:

Folgende Meldungen können von der aktuellen Version erzeugt werden:

DUPLICATE INDEX M Die angegebene Meldung ist in der Meldungsdatei mehrfach definiert worden. Eine eindeutige Zuordnung zwischen Meldungsindex und Meldungstext ist in diesem Fall nicht möglich; der Meldungstext für diese Meldung ist undefiniert (was Folgefehler bei Ersetzungen auslösen kann).
LINE TOO SHORT M Eine Zeile der Meldungsdatei mit dem angegebenen Meldungsindex ist kürzer als 11 Zeichen. In dieser Zeile kann keine korrekte Meldung enthalten sein. Die Zeile wird ignoriert.
BAD INDEX P Der vom Programm verwendete Meldungsindex ist nicht 8 Zeichen lang. Der Meldungstext ist undefiniert.
TOO MANY MESSAGE LINES M Die Meldungsdatei enthält mehr Meldungen, als die Meldungsroutinen verarbeiten können (derzeit 1000). Der Rest der Meldungsdatei wird nicht mehr verarbeitet.
TOO MANY MESSAGE CHARACTERS M Die Meldungen der Meldungsdatei enthalten mehr Zeichen, als die Meldungsroutinen verarbeiten können (derzeit 35000).
Der Rest der Meldungsdatei wird nicht mehr verarbeitet.
MESSAGE COLLISION P Während der Bearbeitung einer Meldung soll die Bearbeitung einer anderen Meldung eingeleitet werden.
Für beide Meldungen wird der Text der 1. Meldung (ggf. mit falschen Inserts) verwendet.
INDEX NOT FOUND M Die genannte Meldung ist in der Meldungsdatei nicht enthalten.
Der Text der Meldung ist undefiniert.
FORMAT ERROR M Im Text der angegebenen Meldung wird eine Einfügungsstelle fehlerhaft abgeschlossen. Nur die Formatierungszeichen < und > sowie das Endezeichen ] sind an dieser Stelle zulässig.
Die Ersetzung wird nicht durchgeführt.
FORMAT_DIGIT_1 EXPECTED M Bei einer Formatierungsbeschreibung ist das erste Zeichen der Längenangabe keine Ziffer.
Die Ersetzung wird nicht durchgeführt.
FORMAT_DIGIT_2 EXPECTED M Bei einer Formatierungsbeschreibung ist das zweite Zeichen der Längenangabe keine Ziffer.
Die Ersetzung wird nicht durchgeführt.
CLOSING ']' NOT FOUND M Bei einer Formatierungsbeschreibung wurde die abschließende Klammer nicht gefunden.
Die Ersetzung wird nicht durchgeführt.
INSERT NOT FOUND M Die vom Programm erwartete Einfügungsstelle wurde im Text der Meldung nicht gefunden.
Die Ersetzung wird nicht durchgeführt.
SEPARATOR NOT FOUND M Innerhalb einer Anpassungsstelle wurde das Trennzeichen | zwischen der Singular- und der Pluralform nicht gefunden.
Die Ersetzung wird nicht durchgeführt.
NO MESSAGE IN PREPARATION P Das Programm fordert den Text einer Meldung an, obwohl derzeit kein Meldungstext bearbeitet wird bzw. der Text der zuletzt bearbeiteten Meldung bereits abgerufen wurde.
Der Meldungstext ist undefiniert.
ENDLESS LOOP IN REPLACEMENT OF "<text>" P/M Das Programm versucht, eine Zeichenkette durch dieselbe Zeichenkette zu ersetzen.
Die Ersetzung wird nicht durchgeführt.