summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/d_iwad.c66
-rw-r--r--src/d_iwad.h10
-rw-r--r--src/doom/d_main.c21
-rw-r--r--src/heretic/d_main.c8
-rw-r--r--src/hexen/h2_main.c7
5 files changed, 43 insertions, 69 deletions
diff --git a/src/d_iwad.c b/src/d_iwad.c
index a67a6d4f..e6ee2cf8 100644
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -39,6 +39,19 @@
#include "w_wad.h"
#include "z_zone.h"
+static iwad_t iwads[] =
+{
+ { "doom2.wad", doom2 },
+ { "plutonia.wad", pack_plut },
+ { "tnt.wad", pack_tnt },
+ { "doom.wad", doom },
+ { "doom1.wad", doom },
+ { "chex.wad", doom },
+ { "heretic.wad", heretic },
+ { "heretic1.wad", heretic },
+ { "hexen.wad", hexen },
+};
+
// Array of locations to search for IWAD files
//
// "128 IWAD search directories should be enough for anybody".
@@ -320,16 +333,20 @@ static void CheckDOSDefaults(void)
// Search a directory to try to find an IWAD
// Returns the location of the IWAD if found, otherwise NULL.
-static char *SearchDirectoryForIWAD(char *dir, iwad_t *iwads,
- GameMission_t *mission)
+static char *SearchDirectoryForIWAD(char *dir, int mask, GameMission_t *mission)
{
size_t i;
- for (i=0; iwads[i].name != NULL; ++i)
+ for (i=0; i<arrlen(iwads); ++i)
{
char *filename;
char *iwadname;
+ if ((iwads[i].mission & mask) == 0)
+ {
+ continue;
+ }
+
iwadname = DEH_String(iwads[i].name);
filename = malloc(strlen(dir) + strlen(iwadname) + 3);
@@ -359,17 +376,22 @@ static char *SearchDirectoryForIWAD(char *dir, iwad_t *iwads,
// When given an IWAD with the '-iwad' parameter,
// attempt to identify it by its name.
-static GameMission_t IdentifyIWADByName(char *name, iwad_t *iwads)
+static GameMission_t IdentifyIWADByName(char *name, int mask)
{
size_t i;
GameMission_t mission;
mission = none;
-
- for (i=0; iwads[i].name != NULL; ++i)
+
+ for (i=0; i<arrlen(iwads); ++i)
{
char *iwadname;
+ // Only use supported missions:
+
+ if ((iwads[i].mission & mask) == 0)
+ continue;
+
iwadname = DEH_String(iwads[i].name);
if (strlen(name) < strlen(iwadname))
@@ -390,7 +412,7 @@ static GameMission_t IdentifyIWADByName(char *name, iwad_t *iwads)
//
// Add directories from the list in the DOOMWADPATH environment variable.
-//
+//
static void AddDoomWadPath(void)
{
@@ -564,7 +586,7 @@ char *D_TryFindWADByName(char *filename)
// should be executed (notably loading PWADs).
//
-char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission)
+char *D_FindIWAD(int mask, GameMission_t *mission)
{
char *result;
char *iwadfile;
@@ -594,7 +616,7 @@ char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission)
I_Error("IWAD file '%s' not found!", iwadfile);
}
- *mission = IdentifyIWADByName(result, iwads);
+ *mission = IdentifyIWADByName(result, mask);
}
else
{
@@ -606,34 +628,10 @@ char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission)
for (i=0; result == NULL && i<num_iwad_dirs; ++i)
{
- result = SearchDirectoryForIWAD(iwad_dirs[i], iwads, mission);
+ result = SearchDirectoryForIWAD(iwad_dirs[i], mask, mission);
}
}
return result;
}
-// Clever hack: Setup can invoke Doom to determine which IWADs are installed.
-// Doom searches install paths and exits with the return code being a
-// bitmask of the installed IWAD files.
-
-void D_FindInstalledIWADs(iwad_t *iwads)
-{
- unsigned int i;
- int result;
-
- BuildIWADDirList();
-
- result = 0;
-
- for (i=0; i<arrlen(iwads); ++i)
- {
- if (D_FindWADByName(iwads[i].name) != NULL)
- {
- result |= 1 << i;
- }
- }
-
- exit(result);
-}
-
diff --git a/src/d_iwad.h b/src/d_iwad.h
index 456f52ac..d55a9660 100644
--- a/src/d_iwad.h
+++ b/src/d_iwad.h
@@ -29,6 +29,13 @@
#include "d_mode.h"
+#define IWAD_MASK_DOOM ((1 << doom) \
+ | (1 << doom2) \
+ | (1 << pack_tnt) \
+ | (1 << pack_plut))
+#define IWAD_MASK_HERETIC (1 << heretic)
+#define IWAD_MASK_HEXEN (1 << hexen)
+
typedef struct
{
char *name;
@@ -37,8 +44,7 @@ typedef struct
char *D_FindWADByName(char *filename);
char *D_TryFindWADByName(char *filename);
-char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission);
-void D_FindInstalledIWADs(iwad_t *iwads);
+char *D_FindIWAD(int mask, GameMission_t *mission);
#endif
diff --git a/src/doom/d_main.c b/src/doom/d_main.c
index 91224e88..c8a91e74 100644
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -591,17 +591,6 @@ void D_StartTitle (void)
D_AdvanceDemo ();
}
-static iwad_t iwads[] =
-{
- {"doom2.wad", doom2},
- {"plutonia.wad", pack_plut},
- {"tnt.wad", pack_tnt},
- {"doom.wad", doom},
- {"doom1.wad", doom},
- {"chex.wad", doom},
- {NULL, none},
-};
-
// Strings for dehacked replacements of the startup banner
//
// These are from the original source: some of them are perhaps
@@ -1061,14 +1050,6 @@ void D_DoomMain (void)
M_FindResponseFile ();
- // Undocumented "search for IWADs" parameter used by the setup
- // tool.
-
- if (M_CheckParm("-findiwads") > 0)
- {
- D_FindInstalledIWADs(iwads);
- }
-
// print banner
I_PrintBanner(PACKAGE_STRING);
@@ -1123,7 +1104,7 @@ void D_DoomMain (void)
DEH_Init();
#endif
- iwadfile = D_FindIWAD(iwads, &gamemission);
+ iwadfile = D_FindIWAD(IWAD_MASK_DOOM, &gamemission);
// None found?
diff --git a/src/heretic/d_main.c b/src/heretic/d_main.c
index b8edd430..bba09e65 100644
--- a/src/heretic/d_main.c
+++ b/src/heretic/d_main.c
@@ -455,12 +455,6 @@ void D_CheckRecordFrom(void)
#define SHAREWAREWADNAME "heretic1.wad"
-static iwad_t iwads[] = {
- { "heretic.wad", heretic },
- { "heretic1.wad", heretic },
- { NULL, none },
-};
-
char *iwadfile;
char *basedefault = "heretic.cfg";
@@ -880,7 +874,7 @@ void D_DoomMain(void)
printf("W_Init: Init WADfiles.\n");
- iwadfile = D_FindIWAD(iwads, &gamemission);
+ iwadfile = D_FindIWAD(IWAD_MASK_HERETIC, &gamemission);
if (iwadfile == NULL)
{
diff --git a/src/hexen/h2_main.c b/src/hexen/h2_main.c
index f7bc665e..72e323c5 100644
--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -136,11 +136,6 @@ static int demosequence;
static int pagetic;
static char *pagename;
-static iwad_t iwads[] = {
- { "hexen.wad", hexen },
- { NULL, none },
-};
-
static execOpt_t ExecOptions[] = {
{"-file", ExecOptionFILE, 1, 0},
{"-scripts", ExecOptionSCRIPTS, 1, 0},
@@ -272,7 +267,7 @@ void D_DoomMain(void)
ST_Message("W_Init: Init WADfiles.\n");
- iwadfile = D_FindIWAD(iwads, &gamemission);
+ iwadfile = D_FindIWAD(IWAD_MASK_HEXEN, &gamemission);
if (iwadfile == NULL)
{