From db13b7a220342c6a2028686c814c04f652ace326 Mon Sep 17 00:00:00 2001 From: Christian Schlittchen Date: Fri, 2 Feb 2001 22:00:15 +0000 Subject: [PATCH] =?UTF-8?q?-=20F=C3=BCr=20externe=20Dateien=20kann=20jetzt?= =?UTF-8?q?=20ein=20Suchpfad=20festgelegt=20werden:=20=20=20setenv=20ECHEC?= =?UTF-8?q?KPATH=20"/usr/local/lib/echeck:."=20=20=20o.=20=20=20echeck=20-?= =?UTF-8?q?P/usr/local/lib/echeck:.=20=20=20Pfadhandling=20generell=20etwa?= =?UTF-8?q?s=20weniger=20'hackig'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/echeck.c | 111 +++++++++++++++++++++++++-------------------- 1 file changed, 63 insertions(+), 48 deletions(-) diff --git a/src/tools/echeck.c b/src/tools/echeck.c index b71896f39..80769a75e 100644 --- a/src/tools/echeck.c +++ b/src/tools/echeck.c @@ -1,6 +1,6 @@ /* vi: set ts=2 ai sw=2: * - * $Id: echeck.c,v 1.2 2001/01/30 15:22:49 corwin Exp $ + * $Id: echeck.c,v 1.3 2001/02/02 22:00:15 corwin Exp $ * * Eressea PB(E)M host Copyright (C) 1997-2000 * Enno Rehling (rehling@usa.net) @@ -25,7 +25,18 @@ #define MAINVERSION "3" #define MINVERSION "10" -#define PATCHLEVEL "3" +#define PATCHLEVEL "4" + +#ifndef DEFAULT_PATH +#if defined(unix) +#define DEFAULT_PATH "/usr/local/lib/echeck:." +#define PATH_DELIM ":" +#else +#define DEFAULT_PATH NULL +#define PATH_DELIM ":" +#endif +#endif + #define VERSION MAINVERSION"."MINVERSION"."PATCHLEVEL @@ -190,12 +201,12 @@ char order_buf[BUFSIZE], /* current order line */ indent, next_indent, /* indent index */ does_default=0, /* Ist DEFAULT aktiv? */ befehle_ende, /* EOF der Befehlsdatei */ - *path=NULL, *filename; int rec_cost=RECRUIT_COST, this_command, this_unit, /* wird von getaunit gesetzt */ Rx, Ry; /* Koordinaten der aktuellen Region */ +const char *path; FILE *F; /* ------------------------------------------------------------- */ @@ -917,6 +928,29 @@ ItemName(int i, int plural) { return item->name->txt; } +FILE * +path_fopen(const char *path, const char *file, const char *mode) +{ + FILE *f; + char *pathw = strdup(path); + char *token; + char buf[4096]; + + token = strtok(pathw, PATH_DELIM); + while(token) { + sprintf(buf, "%s/%s", token, file); + f = fopen(buf, mode); + if(f) { + free(pathw); + return f; + } + token = strtok(NULL, PATH_DELIM); + } + + free(pathw); + return NULL; +} + void readspells(void) { @@ -924,21 +958,13 @@ readspells(void) { t_spell *it, *in; char *file; - if (path) { - char *x; - file=cmalloc(strlen(path)+12); - x=(char *)(path+strlen(path)-1); - if (*x=='/' || *x=='\\' || *x==':') /* endet path auf /, \ oder : ? */ - sprintf(file,"%szauber.txt",path); - else - sprintf(file,"%s/zauber.txt",path); - } else - file=strdup("zauber.txt"); - F=fopen(file, "r"); - if (!F) { - fprintf(ERR, "Kann Datei '%s' nicht lesen.\n", file); + F = path_fopen(path, "zauber.txt", "r"); + if(!F) { + fprintf(ERR, "Kann Datei 'zauber.txt' nicht lesen.\n", file); + fprintf(ERR, "Suchpfad ist '%s'\n", path); return; } + it=in=spells; for (;;) { do { @@ -982,21 +1008,13 @@ readskills(void) { t_skills *it, *in; char *file; - if (path) { - char *x; - file=cmalloc(strlen(path)+12); - x=(char *)(path+strlen(path)-1); - if (*x=='/' || *x=='\\' || *x==':') /* endet path auf /, \ oder : ? */ - sprintf(file,"%stalente.txt",path); - else - sprintf(file,"%s/talente.txt",path); - } else - file=strdup("talente.txt"); - F=fopen(file, "r"); - if (!F) { - fprintf(ERR, "Kann Datei '%s' nicht lesen.\n", file); + F = path_fopen(path, "talente.txt", "r"); + if(!F) { + fprintf(ERR, "Kann Datei 'talente.txt' nicht lesen.\n", file); + fprintf(ERR, "Suchpfad ist '%s'\n", path); return; } + it=in=skilldata; for (;;) { do { @@ -1034,23 +1052,14 @@ readitems(void) { t_item *it, *in; t_names *n, *nn; char *file; - - if (path) { - char *x; - file=cmalloc(strlen(path)+12); - x=(char *)(path+strlen(path)-1); - if (*x=='/' || *x=='\\' || *x==':') /* endet path auf /, \ oder : ? */ - sprintf(file,"%sitems.txt",path); - else - sprintf(file,"%s/items.txt",path); - } else - file=strdup("items.txt"); - - F=fopen(file, "r"); - if (!F) { - fprintf(ERR,"Kann Datei '%s' nicht lesen.\n", file); - exit(100); + + F = path_fopen(path, "items.txt", "r"); + if(!F) { + fprintf(ERR, "Kann Datei 'items.txt' nicht lesen.\n", file); + fprintf(ERR, "Suchpfad ist '%s'\n", path); + return; } + it=in=itemdata; for (;;) { do { @@ -3947,7 +3956,7 @@ readaunit(void) { if (befehle_ende) return; - /* Erst wenn wir sicher sind, daß kein Befehl eingegeben wurde, checken + /* Erst wenn wir sicher sind, dass kein Befehl eingegeben wurde, checken * wir, ob nun eine neue Einheit oder ein neuer Spieler drankommt */ if (igetkeyword(order_buf)==-1) { @@ -4553,6 +4562,12 @@ main(int argc, char *argv[]) { added 15.6.00 chartus*/ #endif + /* Path-Handling */ + path = getenv("ECHECKPATH"); + if(path == NULL) { + path = DEFAULT_PATH; + } + ERR=stdout; if (argc <= 1) { @@ -4605,8 +4620,8 @@ main(int argc, char *argv[]) { if (unit_count==0) { fputs("\nBitte überprüfe, ob Du die Befehle korrekt eingesandt hast.\n" - "Beachte dabei besonders, daß die Befehle nicht als HTML, Word-Dokument\n" - "oder als Attachment (Anlage) eingeschickt werden dürfen.\n", ERR); + "Beachte dabei besonders, dass die Befehle nicht als HTML, Word-Dokument\n" + "oder als Attachment (Anlage) eingeschickt werden dürfen.\n", ERR); return -42; }