From 6b89b482b3866cd54332126483941c28a55ddbdc Mon Sep 17 00:00:00 2001 From: hendricks266 Date: Tue, 19 May 2015 22:07:18 +0000 Subject: [PATCH] SW: Some GRP/def infrastructure. git-svn-id: https://svn.eduke32.com/eduke32@5217 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/source/sw/src/common.c | 37 +++++++++++++++++++ polymer/eduke32/source/sw/src/common_game.h | 6 +++ polymer/eduke32/source/sw/src/game.c | 36 +++++++++++------- polymer/eduke32/source/sw/src/jnstub.c | 18 +++++---- polymer/eduke32/source/sw/src/startgtk.game.c | 9 +++-- polymer/eduke32/source/sw/src/startwin.game.c | 10 +++-- 6 files changed, 88 insertions(+), 28 deletions(-) diff --git a/polymer/eduke32/source/sw/src/common.c b/polymer/eduke32/source/sw/src/common.c index 636857cbd..147f6362a 100644 --- a/polymer/eduke32/source/sw/src/common.c +++ b/polymer/eduke32/source/sw/src/common.c @@ -3,6 +3,43 @@ #include "common_game.h" +static const char *defaultgrpfilename = "sw.grp"; +static const char *defaultdeffilename = "sw.def"; + +// g_grpNamePtr can ONLY point to a malloc'd block (length BMAX_PATH) +char *g_grpNamePtr = NULL; + +void clearGrpNamePtr(void) +{ + if (g_grpNamePtr != NULL) + Bfree(g_grpNamePtr); + // g_grpNamePtr assumed to be assigned to right after +} + +const char *G_DefaultGrpFile(void) +{ + return defaultgrpfilename; +} +const char *G_GrpFile(void) +{ + if (g_grpNamePtr == NULL) + return G_DefaultGrpFile(); + else + return g_grpNamePtr; +} + +const char *G_DefaultDefFile(void) +{ + return defaultdeffilename; +} +const char *G_DefFile(void) +{ + if (g_defNamePtr == NULL) + return G_DefaultDefFile(); + else + return g_defNamePtr; +} + #define NUMPSKYMULTIS 1 EDUKE32_STATIC_ASSERT(NUMPSKYMULTIS <= MAXPSKYMULTIS); EDUKE32_STATIC_ASSERT(PSKYOFF_MAX <= MAXPSKYTILES); diff --git a/polymer/eduke32/source/sw/src/common_game.h b/polymer/eduke32/source/sw/src/common_game.h index 44ab86e1a..5b275ee47 100644 --- a/polymer/eduke32/source/sw/src/common_game.h +++ b/polymer/eduke32/source/sw/src/common_game.h @@ -132,6 +132,12 @@ extern "C" { #define MACRO10 "ITTAIIIUUU!!!" +extern char *g_grpNamePtr; + +const char *G_DefaultGrpFile(void); +const char *G_GrpFile(void); + +void clearGrpNamePtr(void); void SW_InitMultiPsky(void); diff --git a/polymer/eduke32/source/sw/src/game.c b/polymer/eduke32/source/sw/src/game.c index 12fae548e..40d5db99d 100644 --- a/polymer/eduke32/source/sw/src/game.c +++ b/polymer/eduke32/source/sw/src/game.c @@ -89,6 +89,7 @@ Things required to make savegames work: #include "text.h" #include "music.h" +#include "common.h" #include "common_game.h" #include "crc32.h" @@ -929,7 +930,6 @@ void COVERsetbrightness(int bright, unsigned char *pal) static int firstnet = 0; // JBF int nextvoxid = 0; // JBF -static const char *deffile = "sw.def"; extern int startwin_run(void); @@ -951,7 +951,7 @@ InitGame(int32_t argc, const char **argv) exit(1); } - //initgroupfile("sw.grp"); // JBF: moving this close to start of program to detect shareware + //initgroupfile(G_GrpFile()); // JBF: moving this close to start of program to detect shareware InitSetup(); InitAutoNet(); @@ -1063,7 +1063,12 @@ InitGame(int32_t argc, const char **argv) if (!SW_SHAREWARE) LoadCustomInfoFromScript("swcustom.txt"); // Load user customisation information - if (!loaddefinitionsfile(deffile)) buildputs("Definitions file loaded.\n"); + if (!loaddefinitionsfile(G_DefFile())) buildputs("Definitions file loaded.\n"); + + for (i=0; i < g_defModulesNum; ++i) + Bfree(g_defModules[i]); + Bfree(g_defModules); + g_defModules = NULL; DemoModeMenuInit = TRUE; // precache as much stuff as you can @@ -3446,7 +3451,6 @@ void CommandLineHelp(const char **argv) #endif } -char *grpfile = "sw.grp"; int32_t app_main(int32_t argc, const char **argv) { int i; @@ -3567,13 +3571,15 @@ int32_t app_main(int32_t argc, const char **argv) } OSD_SetLogFile("sw.log"); + + if (g_grpNamePtr == NULL) { - char *newgrp; - newgrp = getenv("SWGRP"); - if (newgrp) + const char *cp = getenv("SWGRP"); + if (cp) { - grpfile = newgrp; - buildprintf("Using alternative GRP file: %s\n", newgrp); + clearGrpNamePtr(); + g_grpNamePtr = dup_filename(cp); + initprintf("Using \"%s\" as main GRP file\n", g_grpNamePtr); } } @@ -3598,7 +3604,7 @@ int32_t app_main(int32_t argc, const char **argv) } #endif - initgroupfile(grpfile); + initgroupfile(G_GrpFile()); if (!DetectShareware()) { if (SW_SHAREWARE) buildputs("Detected shareware GRP\n"); @@ -4088,10 +4094,12 @@ int32_t app_main(int32_t argc, const char **argv) else if (Bstrncasecmp(arg, "h", 1) == 0 && !SW_SHAREWARE) { if (strlen(arg) > 1) - { - deffile = (arg+1); - buildprintf("Using DEF file %s.\n", arg+1); - } + G_AddDef(arg+1); + } + else if (Bstrncasecmp(arg, "mh", 1) == 0 && !SW_SHAREWARE) + { + if (strlen(arg) > 1) + G_AddDefModule(arg+1); } } diff --git a/polymer/eduke32/source/sw/src/jnstub.c b/polymer/eduke32/source/sw/src/jnstub.c index d71bc06c9..7d77da27c 100644 --- a/polymer/eduke32/source/sw/src/jnstub.c +++ b/polymer/eduke32/source/sw/src/jnstub.c @@ -36,6 +36,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms #include "tags.h" #include "pal.h" +#include "common.h" #include "common_game.h" #define M_RED 102 @@ -76,7 +77,6 @@ SWBOOL bSpinBobVoxels = TRUE; // Do twizzly stuff to voxels SWBOOL bAutoSize = TRUE; // Autosizing on/off int nextvoxid = 0; -char *defsfilename = "sw.def"; // Globals used to hold current sprite type being searched for. short FindPicNum = 0; @@ -607,7 +607,7 @@ ExtInit(void) void InitPalette(void); int i, fil; - initgroupfile("sw.grp"); + initgroupfile(G_GrpFile()); if ((fil = open("setup.dat", O_BINARY | O_RDWR, S_IREAD)) != -1) { read(fil, &option[0], NUMOPTIONS); @@ -655,7 +655,6 @@ int ExtInit(void) { int rv = 0; - char *swgrp = "sw.grp"; #ifndef BUILD_DEV_VER char ch; @@ -729,12 +728,17 @@ ExtInit(void) } } - if (getenv("SWGRP")) + if (g_grpNamePtr == NULL) { - swgrp = getenv("SWGRP"); - buildprintf("Using %s as main GRP file\n", swgrp); + const char *cp = getenv("SWGRP"); + if (cp) + { + clearGrpNamePtr(); + g_grpNamePtr = dup_filename(cp); + initprintf("Using \"%s\" as main GRP file\n", g_grpNamePtr); + } } - initgroupfile(swgrp); + initgroupfile(G_GrpFile()); /* if ((fil = open("setup.dat", O_BINARY | O_RDWR, S_IREAD)) != -1) { diff --git a/polymer/eduke32/source/sw/src/startgtk.game.c b/polymer/eduke32/source/sw/src/startgtk.game.c index 9f76f8089..2c729919f 100644 --- a/polymer/eduke32/source/sw/src/startgtk.game.c +++ b/polymer/eduke32/source/sw/src/startgtk.game.c @@ -21,9 +21,13 @@ #include "types.h" #include "build.h" + #include "baselayer.h" #include "grpscan.h" +#include "common.h" +#include "common_game.h" + #define TAB_CONFIG 0 #define TAB_GAME 1 #define TAB_MESSAGES 2 @@ -715,7 +719,6 @@ int startwin_idle(void *s) } extern int32_t ScreenMode, ScreenWidth, ScreenHeight, ScreenBPP, ForceSetup, UseMouse, UseJoystick; -extern char *grpfile; // game.c int startwin_run(void) { @@ -733,7 +736,7 @@ int startwin_run(void) settings.forcesetup = ForceSetup; settings.usemouse = UseMouse; settings.usejoy = UseJoystick; - strncpy(settings.selectedgrp, grpfile, BMAX_PATH); + Bstrncpyz(settings.selectedgrp, G_GrpFile(), BMAX_PATH); PopulateForm(-1); gtk_main(); @@ -748,7 +751,7 @@ int startwin_run(void) ForceSetup = settings.forcesetup; UseMouse = settings.usemouse; UseJoystick = settings.usejoy; - grpfile = settings.selectedgrp; + g_grpNamePtr = dup_filename(settings.selectedgrp); } return retval; diff --git a/polymer/eduke32/source/sw/src/startwin.game.c b/polymer/eduke32/source/sw/src/startwin.game.c index ff580fd4c..67e519b86 100644 --- a/polymer/eduke32/source/sw/src/startwin.game.c +++ b/polymer/eduke32/source/sw/src/startwin.game.c @@ -5,6 +5,9 @@ #include "build.h" #include "renderlayer.h" +#include "common.h" +#include "common_game.h" + #include "gamedefs.h" #include "config.h" @@ -600,8 +603,6 @@ int startwin_idle(void *v) return 0; } -extern char *grpfile; // game.c - int startwin_run(void) { MSG msg; @@ -624,7 +625,7 @@ int startwin_run(void) settings.forcesetup = ForceSetup; settings.usemouse = UseMouse; settings.usejoy = UseJoystick; - strncpy(settings.selectedgrp, grpfile, BMAX_PATH); + Bstrncpyz(settings.selectedgrp, G_GrpFile(), BMAX_PATH); PopulateForm(-1); while (done < 0) @@ -655,7 +656,8 @@ int startwin_run(void) ForceSetup = settings.forcesetup; UseMouse = settings.usemouse; UseJoystick = settings.usejoy; - grpfile = settings.selectedgrp; + clearGrpNamePtr(); + g_grpNamePtr = dup_filename(settings.selectedgrp); } FreeGroups();