tWin32 client now reads both global and local config. files - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 23abfd8c3bbd968cce0cd856c32f238e6dc38af9
 (DIR) parent 419b37f2853f268ae5a516fbf750b859dfe7ad09
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Mon, 26 Nov 2001 17:51:05 +0000
       
       Win32 client now reads both global and local config. files
       
       
       Diffstat:
         M TODO                                |       3 +++
         M src/dopewars.c                      |      37 +++++++++++++++++++++----------
         M src/winmain.c                       |      36 ++++++++++++++++++++++++++------
         A src/winmain.h                       |      31 +++++++++++++++++++++++++++++++
       
       4 files changed, 89 insertions(+), 18 deletions(-)
       ---
 (DIR) diff --git a/TODO b/TODO
       t@@ -1,3 +1,6 @@
       +- Win32 install for current user/all users
       +- Test code under Win98
       +- Document new server interface
        - Admin of running NT Service servers
        - Configuration file editor thingy in the client?
        - GSS_API SOCKS support?
 (DIR) diff --git a/src/dopewars.c b/src/dopewars.c
       t@@ -49,6 +49,7 @@
        #include "serverside.h"
        #include "tstring.h"
        #include "AIPlayer.h"
       +#include "winmain.h"
        
        #ifdef GUI_SERVER
        #include "gtkport.h"
       t@@ -1849,22 +1850,34 @@ void SetupParameters(void) {
              AssignName(&StoppedTo[i],_(DefaultStoppedTo[i]));
           }
        
       +#ifdef CYGWIN
       +
       +/* Read the global configuration from the directory the binary is
       +   installed in */
       +  pt=GetBinaryDir();
       +  if (pt) {
       +    ConfigFile=g_strdup_printf("%s/dopewars-config.txt",pt);
       +    ReadConfigFile(ConfigFile);
       +    g_free(ConfigFile); g_free(pt);
       +  }
       +
       +/* Now read the local configuration from the current directory */
       +  ReadConfigFile("dopewars-config.txt");
       +
       +#else /* CYGWIN */
       +
        /* Now read in the global configuration file */
       -   ReadConfigFile("/etc/dopewars");
       +  ReadConfigFile("/etc/dopewars");
        
        /* Next, try to read in the .dopewars file in the user's home directory */
       -   pt=getenv("HOME");
       -   if (pt) {
       -      ConfigFile=g_strdup_printf("%s/.dopewars",pt);
       -      ReadConfigFile(ConfigFile);
       -      g_free(ConfigFile);
       -   }
       +  pt=getenv("HOME");
       +  if (pt) {
       +    ConfigFile=g_strdup_printf("%s/.dopewars",pt);
       +    ReadConfigFile(ConfigFile);
       +    g_free(ConfigFile);
       +  }
        
       -#ifdef CYGWIN
       -/* Finally, try dopewars-config.txt in the current directory (Windows
       -   systems only) */
       -   ReadConfigFile("dopewars-config.txt");
       -#endif
       +#endif /* CYGWIN */
        
        /* Save this configuration, so we can restore those elements that get
           overwritten when we connect to a dopewars server */
 (DIR) diff --git a/src/winmain.c b/src/winmain.c
       t@@ -1,4 +1,4 @@
       -/* winmain.c      Startup code for dopewars on the Win32 platform       */
       +/* winmain.c      Startup code and support for the Win32 platform       */
        /* Copyright (C)  1998-2001  Ben Webb                                   */
        /*                Email: ben@bellatrix.pcl.ox.ac.uk                     */
        /*                WWW: http://dopewars.sourceforge.net/                 */
       t@@ -39,6 +39,7 @@
        #include "message.h"
        #include "serverside.h"
        #include "gtkport.h"
       +#include "winmain.h"
        
        static void ServerLogMessage(const gchar *log_domain,GLogLevelFlags log_level,
                                     const gchar *message,gpointer user_data) {
       t@@ -98,6 +99,31 @@ static void LogFileEnd(void) {
          if (LogFile) fclose(LogFile);
        }
        
       +gchar *GetBinaryDir(void) {
       +  gchar *filename=NULL,*lastslash;
       +  gint filelen=80;
       +  DWORD retval;
       +
       +  while(1) {
       +    filename = g_realloc(filename,filelen);
       +    filename[filelen-1]='\0';
       +    retval = GetModuleFileName(NULL,filename,filelen);
       +
       +    if (retval==0) {
       +      g_free(filename); filename=NULL; break;
       +    } else if (filename[filelen-1]) {
       +      filelen*=2;
       +    } else break;
       +  }
       +
       +  if (filename) {
       +    lastslash=strrchr(filename,'\\');
       +    if (lastslash) *lastslash='\0';
       +  }
       +
       +  return filename;
       +}
       +
        #ifdef ENABLE_NLS
        static gchar *GetWindowsLocale(void) {
          LCID userID;
       t@@ -148,7 +174,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
          gchar **split;
          int argc;
          gboolean is_service;
       -  gchar modpath[300],*lastslash;
       +  gchar *modpath;
        #ifdef ENABLE_NLS
          gchar *winlocale;
        #endif
       t@@ -157,11 +183,9 @@ int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
          is_service = (lpszCmdParam && strncmp(lpszCmdParam,"-N",2)==0);
        
          if (is_service) {
       -    modpath[0]='\0';
       -    GetModuleFileName(NULL,modpath,300);
       -    lastslash=strrchr(modpath,'\\');
       -    if (lastslash) *lastslash='\0';
       +    modpath=GetBinaryDir();
            SetCurrentDirectory(modpath);
       +    g_free(modpath);
          }
        
          LogFileStart();
 (DIR) diff --git a/src/winmain.h b/src/winmain.h
       t@@ -0,0 +1,31 @@
       +/* winmain.h      Startup code and support for the Win32 platform       */
       +/* Copyright (C)  1998-2001  Ben Webb                                   */
       +/*                Email: ben@bellatrix.pcl.ox.ac.uk                     */
       +/*                WWW: http://dopewars.sourceforge.net/                 */
       +
       +/* This program is free software; you can redistribute it and/or        */
       +/* modify it under the terms of the GNU General Public License          */
       +/* as published by the Free Software Foundation; either version 2       */
       +/* of the License, or (at your option) any later version.               */
       +
       +/* This program is distributed in the hope that it will be useful,      */
       +/* but WITHOUT ANY WARRANTY; without even the implied warranty of       */
       +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        */
       +/* GNU General Public License for more details.                         */
       +
       +/* You should have received a copy of the GNU General Public License    */
       +/* along with this program; if not, write to the Free Software          */
       +/* Foundation, Inc., 59 Temple Place - Suite 330, Boston,               */
       +/*                   MA  02111-1307, USA.                               */
       +
       +
       +#ifndef __WINMAIN_H__
       +#define __WINMAIN_H__
       +
       +#ifdef CYGWIN
       +
       +gchar *GetBinaryDir(void);
       +
       +#endif /* CYGWIN */
       +
       +#endif /* __WINMAIN_H__ */