ECheck   V 3.5.0

ECheck ist ein Syntax-Checker für das PBeM Eressea. Er testet eine Zugdatei auf Rechtschreibfehler und meldet Fehler.

Das Programm läuft auch auf dem Spiel-Server und verschickt für alle eingehenden Züge das Testergebnis.

ECheck benötigt die Datei items.txt, in der alle Gegestände aufgelistet sind. Ebenso wird die Datei zauber.txt gelesen, wenn sie vorhanden ist. Sie enthält die Zauber. Das Format der Dateien ist in den Dateien selbst erklärt.

Was ECheck kann

ECheck macht hauptsächlich eine "Rechtschreibprüfung", es werden also falsch geschriebene Befehle und Talente angemerkt.

In der Zugvorlage des Servers stehen aber auch Informationen über Anzahl und Silbervorrat der Einheiten drin. Dies versucht ECheck auch zu berücksichtigen, wenn Silber für die Ernährung, das Rekrutieren von neuen Personen, den Gebäudeunterhalt oder teure Talente benötigt wird.
Trotzdem kann ECheck dabei natürlich nicht (bzw. nur eher mangelhaft) berücksichtigen, daß Einheiten Geld verdienen können oder gar Silber von Einheiten anderer Parteien bekommen.

Ebenso kann ECheck aus der Zugvorlage entnehmen, ob eine Einheit auf einem Schiff ist (in den [ ] im Kommentar steht sowas wie "s124", wenn die Einheit auf Schiff 124 ist, bzw. "S124", wenn sie das Kommando über Schiff 124 hat), ein Gebäude unterhalten muß (Markierung "U200" heißt, daß für ein Gebäude 200 Silber bezahlt werden muß, "U250+" sind 250 Silber und noch etwas anderes, wie z.B. Holz bei der Schmiede) und Untote oder Illusionen sind mit einem "I" markiert.

ECheck macht folgende Tests:

Was ECheck nicht kann

ECheck hat nur wenige Daten über die Einheiten und die Partei. Daraus ergibt sich, daß folgende Tests in der Regel nicht möglich sind:

Dadurch, daß ECheck keine wirklichen Einheiten-Daten hat, kann es also zu Fehlermeldungen kommen, die letztlich keine sind.

Der Silberpool-Modus (Option -l) ist nur bedingt anwendbar: Einheiten auf Schiffen, die von einer anderen Partei gesteuert werden, werden nicht aus der Region bewegt (weil deren Ziel nicht bekannt ist), ebenso passiert dies z.B. bei magischer Bewegung oder Bewegung in besondere Richtungen.

Von Spenden (HELFE SILBER) und Silber-Übergaben (GIB xxx yyy SILBER) anderer Parteien hat ECheck natürlich nicht die blasseste Ahnung. Daher sind hier Warnungen vorprogrammiert.

Auch der DEFAULT-Befehl kann zu Effekten führen, die als Fehler angemerkt werden, obwohl sie keine sind.

Einige der oben genannten Effekte lassen sich aber mit den Meta-Befehlen eingrenzen.

Aufruf

      ECheck [-<Optionen>] Zugdatei

Optionen:

-
Verwendet stdin anstelle einer Eingabedatei.
-b
unterdrückt Warnungen und Fehler (brief)
-q
unterdrückt sonstige Ausgaben (quiet)
-rnnn
Legt Rekrutierungskosten auf nnn Silber fest
-c
schreibt die Warnungen und Fehler in einer Compiler-ähnlichen Form
-e
schreibt die geprüfte Datei auf stdout (echo), Fehler nach stderr
-E
schreibt die geprüfte Datei auf stdout (echo), Fehler auch nach stdout
-h
zeigt diese kleine Hilfe an (help)
-s
verwendet stderr für Warnungen, Fehler etc., kein stdout
-p
(zusammen mit -e) generiert eine "Piping-taugliche" Ausgabe: von Gegenständen, Tränken und Kräutern wird nur der erste Teil des Namens ausgegeben.
Dies ist für den DEFAULT-Befehl notwendig, wenn die Ausgabe von ECheck als Eingabe eines weiteren ECheck-Laufes benutzt wird. Dies geht nicht bei Zaubern, da dort das erste Wort nicht eindeutig ist!
-n
zählt Zeilen mit NameMe-Kommentaren (;;) nicht mit
-m
Empiria-Checking
Vorsicht Im Empiria-Modus akzeptiert ECheck trotzdem Umlaute! Dies ist technisch nicht ohne erheblichen Aufwand zu ändern.
-l
Silberpool-Modus: fehlendes Silber wird aus der Region geholt (nicht im Empiria-Modus)
-noship
Keine Warnungen "Einheit will Schiff bewegen und hat evlt. kein Kommando"
-nolost
Keine Warnungen "Einheit verliert Silber und evtl. Gegenstände
-noroute
Keine Warnungen "ROUTE ist kein Kreis"
-w[n]
Warnung der Stufe n (default: 4)
Die Warning-Levels:
  1. - es werden keine Warnungen ausgegeben
  2. - Syntaktische Fehler
  3. - fehlende Texte, Anzahl/Nummer fehlt, langer Befehl fehlt, logische Fehler (LEHRE ohne LERNE usw.)
  4. - zu wenig Geld/Silber/Personen bei Einheiten, zu wenig Silber in Regionen, kein Kommando usw.
  5. - "Vorsichtshalber"; Warnungen, bei denen auch ECheck nicht sicher sein kann
  6. Lehrer/Schüler-Check
-x
Normalerweise beginnt ECheck die Zeilenzählung am Anfang der Datei. Benutzt man -x, so beginnt ECheck bei PARTEI.
-Ppfad
Pfadangabe für die Dateien items.txt und zauber.txt.
Normalerweise sucht ECheck im aktuellen Verzeichnis. Endet der Pfad nicht auf /, \ oder :, wird ein / angehängt.
-vMainversion.Level
Da viele Spieler zum Teil völlig veraltete ECheck-Versionen benutzen, wurde hier ein Mechanismus entwickelt, der die Spieler darauf hinweist.
In der Zugvorlage des Servers wird immer die aktuelle ECheck-Version benutzt.

Beispiele:

echeck -r80 Zug
Testet die Datei Zug. Die Rekrutierungskosten sind auf 80 Silber festgelegt.
echeck -c -e Zug >mailzug
Testet die Datei "Zug". Die Fehlermeldungen werden Compiler-ähnlich ausgegeben, und die getestete Datei wird nach mailzug geschrieben.

Umgebungsvariablen

ECheck liest direkt nach dem Start die Umgebungsvariable ECHECKOPTS, in der alle Optionen angegeben werden können. Beispiel:

  setenv ECHECKOPTS "-P/usr/local/echeck -l -r75" 

Eingaben in der Zugdatei

Die meisten Optionen können auch in der Zugdatei angegeben werden. Dazu muß vor dem ersten REGION der Zugdatei eine Kommentarzeile stehen, die die Optionen enthält. Zur Erkennung muß diese Zeile mit dem Wort ECHECK beginnen:

  ; ECHECK -r80 -w2
Gesperrt sind die Optionen -e, -E, -P, -s, -h und -?.

Man kann außerdem direkt nach dieser Zeile eine "Version" der Züge angeben. Diese Zeile wird komplett auf den Bildschirm ausgegeben und ist somit auch in der Zugbestätigung vom Server:

  ; VERSION .....
oder
  ; ECHECK VERSION .....

In Eressea beendet das Ende der Zeile einen Befehl. Damit man längere Befehlszeilen eingeben kann ohne daß z.B. das Mailprogramm falsch Umbrüche einbaut, erkennt ECheck den Backslash \ als "Zeilenverlängerer".
Dies funktioniert auch im Empiria-Modus, doch nicht in Empiria selbst!
Ebenso erkennt ECheck nicht-eindeutige Abkürzungen nicht "korrekt" bzw. wie der Empiria-Server. Es sei jedem Spieler empfohlen, seine Befehle nur eindeutig abzukürzen, zumal ich BEN E "Lehrer" und G 76 7 J deutlich schwieriger zu lesen finde als Benenne Einheit "Lehrer" und Gib 76 7 Juwelen...

Zu guter letzt gibt es einige "Meta-Kommandos" für ECheck. Diese Kommandos werden hinter dem Kommentar-Befehl // oder einem ; am Zeilenanfang gegeben.

ECHECK NACH x y
Hier kann man angeben, wohin eine Einheit z.B. auf einem Schiff einer anderen Partei befördert wird. ECheck berücksichtigt dies.
ECHECK ROUTE
Hiermit wird das "noroute"-Flag gewechselt. Hat ECheck also nicht-zyklische ROUTEn zuvor angemerkt, tut es das nach ECHECK ROUTE nicht mehr. Ein weiteres ECHECK ROUTE schaltet die Warnungen dann wieder an.
ECHECK KOMMANDO [nummer]
Die Einheit bekommt das Kommando über das Schiff, auf dem sie ist oder Schiff nummer. Dadurch unterbleibt die "hat kein Kommando"-Warnung.
ECHECK EMPTY
Der Einheit wird alles Silber genommen. Dadurch unterbleibt die "verliert Silber"-Warnung, wenn die Einheit alle Personen abgibt.
ECHECK silberbetrag
Der Region der Einheit wird der entsprechende Betrag als zum Silbervorrat addiert. So kann man z.B. für Botschafter, die von einer anderen Partei mit HELFE SILBER ernährt werden, die Warnung vermeiden.
ECHECK LOHN silberbetrag
Hiermit kann man festlegen, wieviel Silber in einer Region mit ARBEITE verdient werden kann. Die Zugvorlage des Servers enthält dies automatisch. Dieses Meta-Kommando muß zwischen REGION und dem ersten EINHEIT stehen.
ECHECK NOWARN
schaltet direkte Warnungen für die kommende Zeile ab. "Indiirekte Warnungen" wie z.B. zu wenig Silber, Lehrer/Schüler-Check werden hiervon nich beeinflußt.

Ein "Testergebnis"

Folgende Befehle werden z.B. eingeschickt. Ich habe die Fehler darin einmal mit einem Kommentar versehen.

PARTEI 123 "EinsZweiDrei"

 ; ECHECK -l -w4 -r100

 REGION 9,10 ; Ger Mani

 EINHEIT 9234;         Herr Müller [1,0$]
    Unterhalte
    Gib 4800 1 Person
 EINHEIT 7530;          Frau Müller und Sohn [2,60$]
    Lerne Unterhaltung
 EINHEIT 1886;          Alfred E. Neumann [1,0$]
    Unterhalte
 EINHEIT 1359;          Ein Bauer [1,0$]
    Lere 1234 5678 Temp 77              ; Tippfehler: LEHRE
    Betrete Burg 444
 EINHEIT 5045;         Handelsvertreter [1,110$]
    Lerne Uterhaltung                   ; Tippfehler: UNTERHALTUNG
    Gib 3651 1000 Silber                ; Soviel Silber hat die Einheit nicht
    Betrete Burg 444

 REGION 6,10 ; Schubidu

 EINHEIT 4306;         Wanderer [1,110$]
    Nach Westen

 REGION 1,10 ; Irgendwo

 EINHEIT 3219;         Kräuterfrau [1,0$]     ; Einheit hat kein Silber
    Mache Kräuter
 EINHEIT 9347;        Bote [1,$30]      ; Einheit hat genug Silber für beide,
    Nach Süedosten                      ; doch sie verläßt die Region

 NAECHSTER

So sähe die Rückmeldung des Serves aus:

ECHECK (Version 3.3.0, Apr 12 2000), Zug-Checker für Eressea - Freeware!

Verarbeite Datei `name@email.de,0'.
Der Dateiname ist die eMail-Adresse des Absenders, die Zahl hinter dem Komma gibt an, wieviele Züge von der Adresse schon eingetroffen sind.
Rekrutierungskosten auf 100 Silber gesetzt, Warning Level 4.
Silberpool aktiviert.
Fehler in Zeile 17: Befehl nicht erkannt.
        `Lere 1234 5678 Temp 77'
Warnung zur Zeile 16: Einheit 1359 hat keinen langen Befehl bekommen.
        `EINHEIT 1359; Ein Bauer [1,0$]'
Dies ist ein Folgefehler. Der falsche Befehl Lere, der natürlich Lehre sein sollte, ist so kein langer Befehl. Darum diese Meldung.
Fehler in Zeile 20: Talent nicht erkannt.
        `Lerne Uterhaltung'
Hier stimmt zwar das Talent nicht, aber der Befehl Lerne ist richtig geschrieben und wird als langer Befehl vermerkt.
Warnung zur Zeile 21: Einheit 5045 hat evtl. zu wenig Silber.
        `Gib 3651 1000 Silber'
Man beachte das evtl.. Es könnte ja sein, daß die Einheit von einer anderen Partei Silber bekommt (wobei auch das schiefgehen könnte, wenn diese fremde Einheit später als die eigene Einheit drankommt...). Bekommt die Einheit von einer anderen Partei z.B. 800 Silber, kann man dies mit dem Meta-Befehl ; ECHECK: 800 "vermerken".
Warnung zur Zeile 30: Das Silber in Irgendwo (1,10) reicht evtl. nicht zum
Leben; es fehlen 10 Silber.
Auch hier evtl., denn eine fremde Partei könnte auch hier mit Silber aushelfen oder man verdient selber mehr Geld, als ECheck annimmt.

ECheck versucht nach bestem Wissen, die Einheiten auf Schiffen zu bewegen. Dies geht natürlich nur, wenn eine eigene Einheit das Schiff bewegt.

Einheiten, die auf fremden Schiffen sind, bleiben für ECheck an Ort und Stelle, so auch deren Silber.
Man kann aber mit dem Meta-Befehl ; ECHECK NACH x y dafür sorgen, daß die Einheit in die Region x,y verschoben wird und so ECheck ggf. genug Silber in der Region vorfindet.

Warnung zur Zeile 19: Einheit 5045 hat -900 Silber
Dies ist eine weitere Meldung zum Gib 36512 1000 Silber. Die Einheit hat 110 Silber, davon braucht sie 10 Silber zur Ernährung, kann also 100 Silber weggeben. Es fehlen also besagte 900 Silber.
Es wurden Befehle für 1 Partei und 7 Einheiten gelesen.
Es wurden 2 Fehler und 4 Warnungen entdeckt.
Meldet ECheck eine Region als Region (also kein Name), so ist keine Einheit dort vertreten, reist aber dorthin (NACH-Befehl). Da ECheck die Namen der Region aus der Zugvorlage liest, kennt es den Namen der Region darum nicht.

Sonstiges

Wer Fehler in ECheck findet, schicke mir bitte eine Mail mit Versionsnummer und die Befehlsdatei (zumindest die Ausschnitte, die den Fehler hervorriefen) oder einer möglichst genauen Beschreibung, wo der Fehler auftrat.

ECheck sollte auf allen Systemen ohne Probleme zu compilieren sein. Beispielaufruf mit dem gcc:

      gcc -s -O2 -o echeck echeck.c

Probleme mit Umlauten können ggf. durch -DUMLAUTE umgangen werden, da dann eigene Routinen benutzt werden.

ECheck kann hier per Download oder eMail-Versand in verschiedenen Formaten bekommen werden.