shithub: choc

Download patch

ref: c736059090d59a4eda2c15f924c1a4dfbdd9e61d
parent: bfccd6699e16e5287b67621eec3fe7ed33add1d4
author: Simon Howard <fraggle@gmail.com>
date: Sun Sep 11 16:25:56 EDT 2005

Second configuration file to allow chocolate doom-specific settings.
Adjust some existing command line logic (for graphics settings and
novert) to adjust for this.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 98

--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: d_main.c 94 2005-09-08 22:05:17Z fraggle $
+// $Id: d_main.c 98 2005-09-11 20:25:56Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,11 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.14  2005/09/11 20:25:56  fraggle
+// Second configuration file to allow chocolate doom-specific settings.
+// Adjust some existing command line logic (for graphics settings and
+// novert) to adjust for this.
+//
 // Revision 1.13  2005/09/08 22:05:17  fraggle
 // Allow alt-tab away while running fullscreen
 //
@@ -77,7 +82,7 @@
 //-----------------------------------------------------------------------------
 
 
-static const char rcsid[] = "$Id: d_main.c 94 2005-09-08 22:05:17Z fraggle $";
+static const char rcsid[] = "$Id: d_main.c 98 2005-09-11 20:25:56Z fraggle $";
 
 #define	BGCOLOR		7
 #define	FGCOLOR		8
@@ -179,7 +184,6 @@
 
 char		wadfile[1024];		// primary wad file
 char		mapdir[1024];           // directory of development maps
-char		basedefault[1024];      // default file
 
 
 void D_CheckNetGame (void);
@@ -897,24 +901,6 @@
     puts(msg);
 }
 
-// Set the default location for the configuration file
-
-void SetBaseDefault(void)
-{
-    char *homedir;
-
-    homedir = getenv("HOME");
-
-    if (homedir != NULL)
-    {
-        sprintf(basedefault, "%s/.doomrc", homedir);
-    }
-    else
-    {
-        strcpy(basedefault, "default.cfg");
-    }
-}
-
 //
 // D_DoomMain
 //
@@ -939,13 +925,6 @@
     else if (M_CheckParm ("-deathmatch"))
 	deathmatch = 1;
 
-    if (M_CheckParm("-novert"))
-        novert = 1;
-
-    // set the location for default.cfg
-
-    SetBaseDefault();
-
     // print banner
 
     PrintBanner(PACKAGE_STRING);
@@ -953,6 +932,8 @@
     if (devparm)
 	printf(D_DEVSTR);
     
+#if 0
+    // BROKEN: -cdrom option
     if (M_CheckParm("-cdrom"))
     {
 	printf(D_CDROM);
@@ -962,7 +943,8 @@
 	mkdir("c:\\doomdata",0);
 #endif
 	strcpy (basedefault,"c:/doomdata/default.cfg");
-    }	
+    }
+#endif     
     
     // turbo option
     if ( (p=M_CheckParm ("-turbo")) )
@@ -1129,6 +1111,11 @@
 	}
 	autostart = true;
     }
+
+    if (M_CheckParm("-novert"))
+        novert = true;
+    else if (M_CheckParm("-nonovert"))
+        novert = false;
 
     printf ("===========================================================================\n");
 
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: doomstat.h 69 2005-09-04 15:59:45Z fraggle $
+// $Id: doomstat.h 98 2005-09-11 20:25:56Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -86,7 +86,7 @@
 extern  int		gamemap;
 
 // vertical movement from mouse/joystick disabled
-extern  boolean         novert;
+extern  int             novert;
 
 // Nightmare mode flag, single player.
 extern  boolean         respawnmonsters;
@@ -295,6 +295,11 @@
 //-----------------------------------------------------------------------------
 //
 // $Log$
+// Revision 1.7  2005/09/11 20:25:56  fraggle
+// Second configuration file to allow chocolate doom-specific settings.
+// Adjust some existing command line logic (for graphics settings and
+// novert) to adjust for this.
+//
 // Revision 1.6  2005/09/04 15:59:45  fraggle
 // 'novert' command line option to disable vertical mouse movement
 //
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: g_game.c 71 2005-09-04 18:44:23Z fraggle $
+// $Id: g_game.c 98 2005-09-11 20:25:56Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,11 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.9  2005/09/11 20:25:56  fraggle
+// Second configuration file to allow chocolate doom-specific settings.
+// Adjust some existing command line logic (for graphics settings and
+// novert) to adjust for this.
+//
 // Revision 1.8  2005/09/04 18:44:23  fraggle
 // shut up compiler warnings
 //
@@ -56,7 +61,7 @@
 
 
 static const char
-rcsid[] = "$Id: g_game.c 71 2005-09-04 18:44:23Z fraggle $";
+rcsid[] = "$Id: g_game.c 98 2005-09-11 20:25:56Z fraggle $";
 
 #include <string.h>
 #include <stdlib.h>
@@ -203,8 +208,9 @@
 
 // fraggle: Disallow mouse and joystick movement to cause forward/backward
 // motion.  Specified with the '-novert' command line parameter.
+// This is an int to allow saving to config file
 
-boolean         novert;
+int             novert;
  
  
  
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: i_video.c 94 2005-09-08 22:05:17Z fraggle $
+// $Id: i_video.c 98 2005-09-11 20:25:56Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,11 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.25  2005/09/11 20:25:56  fraggle
+// Second configuration file to allow chocolate doom-specific settings.
+// Adjust some existing command line logic (for graphics settings and
+// novert) to adjust for this.
+//
 // Revision 1.24  2005/09/08 22:05:17  fraggle
 // Allow alt-tab away while running fullscreen
 //
@@ -110,7 +115,7 @@
 //-----------------------------------------------------------------------------
 
 static const char
-rcsid[] = "$Id: i_video.c 94 2005-09-08 22:05:17Z fraggle $";
+rcsid[] = "$Id: i_video.c 98 2005-09-11 20:25:56Z fraggle $";
 
 #include <ctype.h>
 #include <SDL.h>
@@ -145,15 +150,21 @@
 
 static boolean native_surface;
 
-boolean fullscreen = true;
-boolean grabmouse = true;
+// Run in full screen mode?  (int type for config code)
+int fullscreen = true;
+
+// Grab the mouse? (int type for config code)
+int grabmouse = true;
+
+// Flag indicating whether the screen is currently visible:
+// when the screen isnt visible, don't render the screen
 boolean screenvisible;
 
 // Blocky mode,
-// replace each 320x200 pixel with multiply*multiply pixels.
+// replace each 320x200 pixel with screenmultiply*screenmultiply pixels.
 // According to Dave Taylor, it still is a bonehead thing
 // to use ....
-static int	multiply=1;
+int screenmultiply = 1;
 
 // disk image data and background overwritten by the disk to be
 // restored by EndRead
@@ -548,7 +559,7 @@
     
     }
 
-    if (multiply == 1 && !native_surface)
+    if (screenmultiply == 1 && !native_surface)
     {
         byte *bufp, *screenp;
         int y;
@@ -572,7 +583,7 @@
 
     // scales the screen size before blitting it
 
-    if (multiply == 2)
+    if (screenmultiply == 2)
     {
         byte *bufp, *screenp, *screenp2;
         int x, y;
@@ -680,14 +691,28 @@
 
     flags |= SDL_SWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF;
 
-    // mouse grabbing, defaults to on
+    // mouse grabbing
 
-    grabmouse = !M_CheckParm("-nograbmouse");
+    if (M_CheckParm("-grabmouse"))
+    {
+        grabmouse = true;
+    }
+    else if (M_CheckParm("-nograbmouse"))
+    {
+        grabmouse = false;
+    }
 
     // default to fullscreen mode, allow override with command line
     // nofullscreen because we love prboom
 
-    fullscreen = !M_CheckParm("-window") && !M_CheckParm("-nofullscreen");
+    if (M_CheckParm("-window") || M_CheckParm("-nofullscreen"))
+    {
+        fullscreen = false;
+    }
+    else if (M_CheckParm("-fullscreen"))
+    {
+        fullscreen = true;
+    }
 
     if (fullscreen)
     {
@@ -696,13 +721,17 @@
 
     // scale-by-2 mode
  
-    if (M_CheckParm("-2"))
+    if (M_CheckParm("-1"))
     {
-        multiply = 2;
+        screenmultiply = 1;
     }
+    else if (M_CheckParm("-2"))
+    {
+        screenmultiply = 2;
+    }
 
-    windowwidth = SCREENWIDTH * multiply;
-    windowheight = SCREENHEIGHT * multiply;
+    windowwidth = SCREENWIDTH * screenmultiply;
+    windowheight = SCREENHEIGHT * screenmultiply;
 
     screen = SDL_SetVideoMode(windowwidth, windowheight, 8, flags);
 
@@ -718,7 +747,7 @@
 
     // Check if we have a native surface we can use
 
-    native_surface = multiply == 1 && screen->pitch == SCREENWIDTH;
+    native_surface = screenmultiply == 1 && screen->pitch == SCREENWIDTH;
 
     // If not, allocate a buffer and copy from that buffer to the 
     // screen when we do an update
--- a/src/i_video.h
+++ b/src/i_video.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: i_video.h 97 2005-09-11 16:39:29Z fraggle $
+// $Id: i_video.h 98 2005-09-11 20:25:56Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -58,6 +58,7 @@
 void I_EndRead (void);
 
 extern boolean screenvisible;
+extern int screenmultiply;
 extern boolean fullscreen;
 extern boolean grabmouse;
 
@@ -66,6 +67,11 @@
 //-----------------------------------------------------------------------------
 //
 // $Log$
+// Revision 1.6  2005/09/11 20:25:56  fraggle
+// Second configuration file to allow chocolate doom-specific settings.
+// Adjust some existing command line logic (for graphics settings and
+// novert) to adjust for this.
+//
 // Revision 1.5  2005/09/11 16:39:29  fraggle
 // Fix declaration of I_Sleep (not I_Delay) and move to right header
 //
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: m_misc.c 85 2005-09-07 21:40:11Z fraggle $
+// $Id: m_misc.c 98 2005-09-11 20:25:56Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -23,6 +23,11 @@
 //
 //
 // $Log$
+// Revision 1.9  2005/09/11 20:25:56  fraggle
+// Second configuration file to allow chocolate doom-specific settings.
+// Adjust some existing command line logic (for graphics settings and
+// novert) to adjust for this.
+//
 // Revision 1.8  2005/09/07 21:40:11  fraggle
 // Remove non-ANSI C headers and functions
 //
@@ -60,13 +65,24 @@
 //-----------------------------------------------------------------------------
 
 static const char
-rcsid[] = "$Id: m_misc.c 85 2005-09-07 21:40:11Z fraggle $";
+rcsid[] = "$Id: m_misc.c 98 2005-09-11 20:25:56Z fraggle $";
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
 
+// for mkdir:
 
+#ifdef _WIN32
+#include <io.h>
+#else
+#include <sys/stat.h>
+#include <sys/types.h>
+#endif
+
+
+
+#include "config.h"
 #include "doomdef.h"
 
 #include "z_zone.h"
@@ -136,10 +152,6 @@
 //
 // M_WriteFile
 //
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
 boolean M_WriteFile(char const *name, void *source, int	length)
 {
     FILE *handle;
@@ -195,6 +207,9 @@
 //
 // DEFAULTS
 //
+
+// locations of config files
+
 int		usemouse;
 int		usejoystick;
 
@@ -258,8 +273,15 @@
     int         untranslated;
 } default_t;
 
-default_t	defaults[] =
+typedef struct
 {
+    default_t *defaults;
+    int        numdefaults;
+    char      *filename;
+} default_collection_t;
+
+static default_t	doom_defaults_list[] =
+{
     {"mouse_sensitivity",&mouseSensitivity, 5},
     {"sfx_volume",&snd_SfxVolume, 8},
     {"music_volume",&snd_MusicVolume, 8},
@@ -316,9 +338,26 @@
 
 };
 
-int	numdefaults;
-char*	defaultfile;
+static default_collection_t doom_defaults = 
+{
+    doom_defaults_list,
+    sizeof(doom_defaults_list) / sizeof(*doom_defaults_list),
+};
 
+static default_t extra_defaults_list[] = 
+{
+    {"grabmouse",   &grabmouse,      true},
+    {"fullscreen",  &fullscreen,     true},
+    {"screenmultiply", &screenmultiply, 1},
+    {"novert",      &novert,         false},
+};
+
+static default_collection_t extra_defaults =
+{
+    extra_defaults_list,
+    sizeof(extra_defaults_list) / sizeof(*extra_defaults_list),
+};
+
 static int scantokey[128] =
 {
     0  ,    27,     '1',    '2',    '3',    '4',    '5',    '6',
@@ -340,22 +379,20 @@
 };
 
 
-
-//
-// M_SaveDefaults
-//
-
-void M_SaveDefaults (void)
+static void SaveDefaultCollection(default_collection_t *collection)
 {
-    int		i;
-    int		v;
-    FILE*	f;
+    default_t *defaults;
+    int i;
+    int v;
+    FILE *f;
 	
-    f = fopen (defaultfile, "w");
+    f = fopen (collection->filename, "w");
     if (!f)
 	return; // can't write the file, but don't complain
+
+    defaults = collection->defaults;
 		
-    for (i=0 ; i<numdefaults ; i++)
+    for (i=0 ; i<collection->numdefaults ; i++)
     {
 	if (defaults[i].defaultvalue > -0xfff
 	    && defaults[i].defaultvalue < 0xfff)
@@ -401,13 +438,9 @@
     fclose (f);
 }
 
-
-//
-// M_LoadDefaults
-//
-
-void M_LoadDefaults (void)
+static void LoadDefaultCollection(default_collection_t *collection)
 {
+    default_t  *defaults = collection->defaults;
     int		i;
     int		len;
     FILE*	f;
@@ -416,26 +449,18 @@
     char*	newstring = "";
     int		parm;
     boolean	isstring;
-    
+
     // set everything to base values
-    numdefaults = sizeof(defaults)/sizeof(defaults[0]);
-    for (i=0 ; i<numdefaults ; i++)
+ 
+    for (i=0 ; i<collection->numdefaults ; i++)
     {
 	*((int *) defaults[i].location) = defaults[i].defaultvalue;
         defaults[i].untranslated = 0;
     }
-    // check for a custom default file
-    i = M_CheckParm ("-config");
-    if (i && i<myargc-1)
-    {
-	defaultfile = myargv[i+1];
-	printf ("	default file: %s\n",defaultfile);
-    }
-    else
-	defaultfile = basedefault;
-    
+
     // read the file in, overriding any set defaults
-    f = fopen (defaultfile, "r");
+    f = fopen(collection->filename, "r");
+
     if (f)
     {
 	while (!feof(f))
@@ -456,7 +481,7 @@
 		    sscanf(strparm+2, "%x", &parm);
 		else
 		    sscanf(strparm, "%i", &parm);
-		for (i=0 ; i<numdefaults ; i++)
+		for (i=0 ; i<collection->numdefaults ; i++)
 		    if (!strcmp(def, defaults[i].name))
 		    {
                         if (defaults[i].scantranslate)
@@ -479,6 +504,88 @@
 		
 	fclose (f);
     }
+}
+
+//
+// M_SaveDefaults
+//
+
+void M_SaveDefaults (void)
+{
+    SaveDefaultCollection(&doom_defaults);
+    SaveDefaultCollection(&extra_defaults);
+}
+
+
+//
+// M_LoadDefaults
+//
+
+void M_LoadDefaults (void)
+{
+    char *config_dir;
+    char *homedir;
+    int i;
+
+    homedir = getenv("HOME");
+
+    if (homedir != NULL)
+    {
+        // put all configuration in a config directory off the
+        // homedir
+
+        config_dir = malloc(strlen(homedir) + strlen(PACKAGE_TARNAME) + 5);
+
+        sprintf(config_dir, "%s/.%s/", homedir, PACKAGE_TARNAME);
+
+        // make the directory if it doesnt already exist
+#ifdef _WIN32
+        mkdir(config_dir);
+#else
+        mkdir(config_dir, 0755);
+#endif
+    }
+    else
+    {
+        config_dir = strdup("");
+    }
+
+    // check for a custom default file
+    i = M_CheckParm ("-config");
+
+    if (i && i<myargc-1)
+    {
+	doom_defaults.filename = myargv[i+1];
+	printf ("	default file: %s\n",doom_defaults.filename);
+    }
+    else
+    {
+        doom_defaults.filename = malloc(strlen(config_dir) + 10);
+        sprintf(doom_defaults.filename, "%sdefault.cfg", config_dir);
+    }
+
+    printf("saving config in %s\n", doom_defaults.filename);
+
+    i = M_CheckParm("-extraconfig");
+
+    if (i && i<myargc-1)
+    {
+        extra_defaults.filename = myargv[i+1];
+        printf("        extra configuration file: %s\n", 
+               extra_defaults.filename);
+    }
+    else
+    {
+        extra_defaults.filename 
+            = malloc(strlen(config_dir) + strlen(PACKAGE_TARNAME) + 10);
+        sprintf(extra_defaults.filename, "%s%s.cfg", 
+                config_dir, PACKAGE_TARNAME);
+    }
+
+    LoadDefaultCollection(&doom_defaults);
+    LoadDefaultCollection(&extra_defaults);
+
+    free(config_dir);
 }