ECheck: @-Kommando eingepflegt in neuen Tree

This commit is contained in:
Henning Peters 2001-02-05 21:17:14 +00:00
parent 1ffe82dfcd
commit 5c961e997c
2 changed files with 71 additions and 54 deletions

5
src/tools/Makefile Normal file
View File

@ -0,0 +1,5 @@
include $(ERESSEA)/Makefile.include
echeck:
$(CC) $(CFLAGS) $(LDFLAGS) -o echeck echeck.c

View File

@ -1,6 +1,6 @@
/* vi: set ts=2 ai sw=2: /* vi: set ts=2 ai sw=2:
* *
* $Id: echeck.c,v 1.4 2001/02/03 23:29:26 corwin Exp $ * $Id: echeck.c,v 1.5 2001/02/05 21:17:14 faroul Exp $
* *
* Eressea PB(E)M host Copyright (C) 1997-2000 * Eressea PB(E)M host Copyright (C) 1997-2000
* Enno Rehling (rehling@usa.net) * Enno Rehling (rehling@usa.net)
@ -24,17 +24,17 @@
#endif #endif
#define MAINVERSION "3" #define MAINVERSION "3"
#define MINVERSION "10" #define MINVERSION "11"
#define PATCHLEVEL "4" #define PATCHLEVEL "0"
#ifndef DEFAULT_PATH #ifndef DEFAULT_PATH
#if defined(unix) # if defined(unix)
#define DEFAULT_PATH "/usr/local/lib/echeck:." # define DEFAULT_PATH "/usr/local/lib/echeck:."
#define PATH_DELIM ":" # define PATH_DELIM ":"
#else # else
#define DEFAULT_PATH NULL # define DEFAULT_PATH NULL
#define PATH_DELIM ":" # define PATH_DELIM ";"
#endif # endif
#endif #endif
@ -191,6 +191,8 @@ char echo_it=0, /* option: echo input lines */
noroute=0, noroute=0,
nolost=0, nolost=0,
has_version=0, has_version=0,
at_cmd=0,
attack_warning=0,
compile=0; /* option: compiler-style warnings */ compile=0; /* option: compiler-style warnings */
int error_count=0, /* counter: errors */ int error_count=0, /* counter: errors */
warning_count=0; /* counter: warnings */ warning_count=0; /* counter: warnings */
@ -928,9 +930,9 @@ ItemName(int i, int plural) {
return item->name->txt; return item->name->txt;
} }
FILE * FILE *
path_fopen(const char *path, const char *file, const char *mode) path_fopen(const char *path, const char *file, const char *mode) {
{
FILE *f; FILE *f;
char *pathw = strdup(path); char *pathw = strdup(path);
char *token; char *token;
@ -946,7 +948,6 @@ path_fopen(const char *path, const char *file, const char *mode)
} }
token = strtok(NULL, PATH_DELIM); token = strtok(NULL, PATH_DELIM);
} }
free(pathw); free(pathw);
return NULL; return NULL;
} }
@ -959,9 +960,9 @@ readspells(void) {
char *file; char *file;
F = path_fopen(path, "zauber.txt", "r"); F = path_fopen(path, "zauber.txt", "r");
if(!F) { if (!F) {
fprintf(ERR, "Kann Datei 'zauber.txt' nicht lesen.\n", file); fprintf(ERR, "Kann Datei 'zauber.txt' nicht lesen.\n"
fprintf(ERR, "Suchpfad ist '%s'\n", path); "Suchpfad ist '%s'\n", file, path);
return; return;
} }
@ -1009,9 +1010,9 @@ readskills(void) {
char *file; char *file;
F = path_fopen(path, "talente.txt", "r"); F = path_fopen(path, "talente.txt", "r");
if(!F) { if (!F) {
fprintf(ERR, "Kann Datei 'talente.txt' nicht lesen.\n", file); fprintf(ERR, "Kann Datei 'talente.txt' nicht lesen.\n"
fprintf(ERR, "Suchpfad ist '%s'\n", path); "Suchpfad ist '%s'\n", file, path);
return; return;
} }
@ -1055,8 +1056,8 @@ readitems(void) {
F = path_fopen(path, "items.txt", "r"); F = path_fopen(path, "items.txt", "r");
if(!F) { if(!F) {
fprintf(ERR, "Kann Datei 'items.txt' nicht lesen.\n", file); fprintf(ERR, "Kann Datei 'items.txt' nicht lesen.\n"
fprintf(ERR, "Suchpfad ist '%s'\n", path); "Suchpfad ist '%s'\n", file, path);
return; return;
} }
@ -1106,7 +1107,10 @@ porder(void) {
for (i=0; i != indent; i++) for (i=0; i != indent; i++)
putc(' ',OUT); putc(' ',OUT);
if (does_default > 0) if (at_cmd)
putc('@',OUT);
at_cmd=0;
if (does_default>0)
fprintf(OUT,"%s%s",checked_buf, does_default==2 ? "\"\n" : ""); fprintf(OUT,"%s%s",checked_buf, does_default==2 ? "\"\n" : "");
else else
{ {
@ -1388,8 +1392,6 @@ newunit(int n, int t) {
} }
/* - In/Output ------------------------------------------------- */
int int
atoip(char *s) { atoip(char *s) {
int n; int n;
@ -1449,12 +1451,19 @@ findstr(char **v, const char *s, int max) {
int int
findtoken(const char *str, int type) { findtoken(const char *str, int type) {
tnode * tk = &tokens[type]; tnode *tk = &tokens[type];
if (*str=='@') {
str++;
at_cmd=1;
} else
at_cmd=0;
while (*str) { while (*str) {
char c = (char)tolower(*str); char c=(char)tolower(*str);
int index = ((unsigned char)c) % 32; int index=((unsigned char)c)%32;
tk = tk->next[index]; tk=tk->next[index];
while (tk && tk->c!=c) tk = tk->nexthash; while (tk && tk->c!=c) tk=tk->nexthash;
++str; ++str;
if (!tk) return -1; if (!tk) return -1;
} }
@ -2053,12 +2062,11 @@ long_order(void) {
if (q) *q=0; /* Den Befehl extrahieren */ if (q) *q=0; /* Den Befehl extrahieren */
i=findkeyword(s); i=findkeyword(s);
switch (i) { switch (i) {
case K_ATTACK:
case K_CAST: case K_CAST:
if (this_command==i) if (this_command==i)
return; return;
/* ATTACKIERE und ZAUBERE sind zwar keine langen Befehle, aber man darf /* ZAUBERE ist zwar kein langer Befehl, aber man darf auch
* auch keine anderen langen haben - darum ist bei denen long_order() */ * keine anderen langen haben - darum ist bei denen long_order() */
case K_SELL: case K_SELL:
case K_BUY: case K_BUY:
if (this_command==K_SELL || this_command==K_BUY) if (this_command==K_SELL || this_command==K_BUY)
@ -3338,10 +3346,11 @@ checkanorder(char *Orders) {
scat(keywords[K_ATTACK]); scat(keywords[K_ATTACK]);
if (getaunit(NECESSARY)==3) if (getaunit(NECESSARY)==3)
anerror("TEMP-Einheiten kann man nicht ATTACKIEREn"); anerror("TEMP-Einheiten kann man nicht ATTACKIEREn");
long_order(); if (!attack_warning) {
/* ATTACKIERE ist zwar kein langer Befehl, aber man darf auch keine /* damit längere Angriffe nicht in Warnungs-Tiraden ausarten */
anderen langen haben - darum ist bei ATTACKIERE long_order(); awarning("Längere Kämpfe schließen den langen Befehl aus",5);
Check in order_for_unit() */ attack_warning=1;
}
if (getaunit(42)==42) { if (getaunit(42)==42) {
strcpy(warn_buf,"Pro Einheit muß ein ATTACKIERE-Befehl gegeben werden"); strcpy(warn_buf,"Pro Einheit muß ein ATTACKIERE-Befehl gegeben werden");
anerror(warn_buf); anerror(warn_buf);
@ -3458,6 +3467,12 @@ checkanorder(char *Orders) {
case K_GIVE: case K_GIVE:
case K_LIEFERE: case K_LIEFERE:
if (this_command==K_LIEFERE && !empiria)
{
awarning("LIEFERE ist obsolet, bitte @GIB benutzen",3);
i=K_GIVE;
at_cmd=1;
}
checkgiving(i); checkgiving(i);
break; break;
@ -3956,7 +3971,7 @@ readaunit(void) {
if (befehle_ende) if (befehle_ende)
return; return;
/* Erst wenn wir sicher sind, dass kein Befehl eingegeben wurde, checken /* Erst wenn wir sicher sind, daß kein Befehl eingegeben wurde, checken
* wir, ob nun eine neue Einheit oder ein neuer Spieler drankommt */ * wir, ob nun eine neue Einheit oder ein neuer Spieler drankommt */
if (igetkeyword(order_buf)==-1) { if (igetkeyword(order_buf)==-1) {
@ -4015,7 +4030,7 @@ help(const char *s) {
fprintf(ERR, "ECheck (Version "VERSION", "__DATE__ fprintf(ERR, "ECheck (Version "VERSION", "__DATE__
"), Zug-Checker für Eressea - Freeware!\n\n" "), Zug-Checker für Eressea - Freeware!\n\n"
" Benutzung: %s [Optionen] Befehlsdatei\n" " Benutzung: %s [Optionen] Befehlsdatei\n"
/* Vorsicht, TABs! Neue Texte mit Tab-Width=8 rein */ /***** Vorsicht, TABs! Neue Texte mit Tab-Width=8 rein *****/
" - Verwendet stdin anstelle einer Eingabedatei.\n" " - Verwendet stdin anstelle einer Eingabedatei.\n"
" -b unterdrückt Warnungen und Fehler (brief)\n" " -b unterdrückt Warnungen und Fehler (brief)\n"
" -q erwartet keine Angaben zu Personen/Silber in [] bei EINHEIT\n" " -q erwartet keine Angaben zu Personen/Silber in [] bei EINHEIT\n"
@ -4037,7 +4052,7 @@ help(const char *s) {
" lost Einheit verliert Silber und Gegenstände\n" " lost Einheit verliert Silber und Gegenstände\n"
" -w[n] Warnungen der Stufe n (default: 4=alle Warnungen)\n" " -w[n] Warnungen der Stufe n (default: 4=alle Warnungen)\n"
" -x Zeilenzählung ab PARTEI statt Dateianfang\n" " -x Zeilenzählung ab PARTEI statt Dateianfang\n"
" -Ppfad Pfadangabe für items.txt und zauber.txt\n" " -Ppfad Pfadangabe für items.txt, talente.txt und zauber.txt\n"
" -vm.l Mainversion.Level - für Test, ob richtige ECheck-Version\n" " -vm.l Mainversion.Level - für Test, ob richtige ECheck-Version\n"
, s); , s);
} }
@ -4330,6 +4345,7 @@ process_order_file(int *faction_count, int *unit_count) {
case P_REGION: case P_REGION:
if (Regionen) if (Regionen)
remove_temp(); remove_temp();
attack_warning=0;
if (echo_it) if (echo_it)
{ {
fputs(order_buf,OUT); fputs(order_buf,OUT);
@ -4377,7 +4393,7 @@ process_order_file(int *faction_count, int *unit_count) {
befehle_ende=0; befehle_ende=0;
f=readafaction(); f=readafaction();
fprintf(ERR, "Befehle für Partei %s gefunden.\n", itob(f)); fprintf(ERR, "Befehle für Partei %s gefunden.\n", itob(f));
check_OPTION(); /* Nach PARTEI auf "; OPTION" / "; ECHECK" testen */ check_OPTION(); /* Nach PARTEI auf "; OPTION" bzw. "; ECHECK" testen */
if (befehle_ende) return; if (befehle_ende) return;
fprintf(ERR, "Rekrutierungskosten auf %d Silber gesetzt, " fprintf(ERR, "Rekrutierungskosten auf %d Silber gesetzt, "
"Warning Level %d.\n", rec_cost, show_warnings); "Warning Level %d.\n", rec_cost, show_warnings);
@ -4587,23 +4603,19 @@ main(int argc, char *argv[]) {
readitems(); readitems();
readspells(); readspells();
readskills(); readskills();
if (!skilldata || !spells) {
fputs("Die Dateien 'talente.txt' und 'items.txt' müssen vorhanden sein\n",ERR);
return 5;
}
inittokens(); inittokens();
F=stdin; F=stdin;
for (i=1; i < argc; i++) for (i=1; i<argc; i++)
if (argv[i][0] != '-' if (argv[i][0] != '-') {
#ifdef WIN32
&& argv[i][0] != '/'
#endif
) {
F=fopen(argv[i], "r"); F=fopen(argv[i], "r");
if (!F) { if (!F) {
fprintf(ERR, "Kann Datei `%s' nicht lesen.\n", argv[i]); fprintf(ERR, "Kann Datei `%s' nicht lesen.\n", argv[i]);
#ifdef AMIGA
return 10;
#else
return 2; return 2;
#endif
} else { } else {
filename=argv[i]; filename=argv[i];
fprintf(ERR, "Verarbeite Datei `%s'.\n", argv[i]); fprintf(ERR, "Verarbeite Datei `%s'.\n", argv[i]);
@ -4620,15 +4632,15 @@ main(int argc, char *argv[]) {
if (unit_count==0) { if (unit_count==0) {
fputs("\nBitte überprüfe, ob Du die Befehle korrekt eingesandt hast.\n" fputs("\nBitte überprüfe, ob Du die Befehle korrekt eingesandt hast.\n"
"Beachte dabei besonders, dass die Befehle nicht als HTML, Word-Dokument\n" "Beachte dabei besonders, daß die Befehle nicht als HTML, Word-Dokument\n"
"oder als Attachment (Anlage) eingeschickt werden dürfen.\n", ERR); "oder als Attachment (Anlage) eingeschickt werden dürfen.\n", ERR);
return -42; return -42;
} }
if (!error_count && !warning_count && faction_count && unit_count) if (!error_count && !warning_count && faction_count && unit_count)
fputs("Die Befehle scheinen in Ordnung zu sein.\n", ERR); fputs("Die Befehle scheinen in Ordnung zu sein.\n", ERR);
if (error_count > 1) if (error_count>1)
fprintf(ERR, "Es wurden %d Fehler", error_count); fprintf(ERR, "Es wurden %d Fehler", error_count);
else if (error_count==1) else if (error_count==1)
fputs("Es wurde ein Fehler", ERR); fputs("Es wurde ein Fehler", ERR);
@ -4640,7 +4652,7 @@ main(int argc, char *argv[]) {
fputs("Es wurde", ERR); fputs("Es wurde", ERR);
} }
if (warning_count > 1) { if (warning_count>1) {
if (!error_count) if (!error_count)
fputs("n", ERR); fputs("n", ERR);
fprintf(ERR," %d Warnungen", warning_count); fprintf(ERR," %d Warnungen", warning_count);