diff options
author | Simon Howard | 2008-12-03 18:54:36 +0000 |
---|---|---|
committer | Simon Howard | 2008-12-03 18:54:36 +0000 |
commit | 27f8ea9f5a210f055f443ef34017dd2412feb326 (patch) | |
tree | 86aa08b279f1295b19e30a9bd5cbe1163323351e | |
parent | 02f2b37c714aa44d82b7e311e03df39430706e69 (diff) | |
download | chocolate-doom-27f8ea9f5a210f055f443ef34017dd2412feb326.tar.gz chocolate-doom-27f8ea9f5a210f055f443ef34017dd2412feb326.tar.bz2 chocolate-doom-27f8ea9f5a210f055f443ef34017dd2412feb326.zip |
Centralise the list of IWAD files and use bitmasks to select which
mission types are valid.
Subversion-branch: /branches/raven-branch
Subversion-revision: 1405
-rw-r--r-- | src/d_iwad.c | 66 | ||||
-rw-r--r-- | src/d_iwad.h | 10 | ||||
-rw-r--r-- | src/doom/d_main.c | 21 | ||||
-rw-r--r-- | src/heretic/d_main.c | 8 | ||||
-rw-r--r-- | src/hexen/h2_main.c | 7 |
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) { |