diff options
Diffstat (limited to 'src/w_main.c')
-rw-r--r-- | src/w_main.c | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/src/w_main.c b/src/w_main.c new file mode 100644 index 00000000..ed285498 --- /dev/null +++ b/src/w_main.c @@ -0,0 +1,206 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 1993-1996 Id Software, Inc. +// Copyright(C) 2005-2010 Simon Howard +// +// 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. +// +// DESCRIPTION: +// Common code to parse command line, identifying WAD files to load. +// +//----------------------------------------------------------------------------- + +#include "doomfeatures.h" +#include "d_iwad.h" +#include "m_argv.h" +#include "w_main.h" +#include "w_merge.h" +#include "w_wad.h" +#include "z_zone.h" + +// Parse the command line, merging WAD files that are sppecified. +// Returns true if at least one file was added. + +boolean W_ParseCommandLine(void) +{ + boolean modifiedgame = false; + int p; + +#ifdef FEATURE_WAD_MERGE + + // Merged PWADs are loaded first, because they are supposed to be + // modified IWADs. + + //! + // @arg <files> + // @category mod + // + // Simulates the behavior of deutex's -merge option, merging a PWAD + // into the main IWAD. Multiple files may be specified. + // + + p = M_CheckParmWithArgs("-merge", 1); + + if (p > 0) + { + for (p = p + 1; p<myargc && myargv[p][0] != '-'; ++p) + { + char *filename; + + modifiedgame = true; + + filename = D_TryFindWADByName(myargv[p]); + + printf(" merging %s\n", filename); + W_MergeFile(filename); + } + } + + // NWT-style merging: + + // NWT's -merge option: + + //! + // @arg <files> + // @category mod + // + // Simulates the behavior of NWT's -merge option. Multiple files + // may be specified. + + p = M_CheckParmWithArgs("-nwtmerge", 1); + + if (p > 0) + { + for (p = p + 1; p<myargc && myargv[p][0] != '-'; ++p) + { + char *filename; + + modifiedgame = true; + + filename = D_TryFindWADByName(myargv[p]); + + printf(" performing NWT-style merge of %s\n", filename); + W_NWTDashMerge(filename); + } + } + + // Add flats + + //! + // @arg <files> + // @category mod + // + // Simulates the behavior of NWT's -af option, merging flats into + // the main IWAD directory. Multiple files may be specified. + // + + p = M_CheckParmWithArgs("-af", 1); + + if (p > 0) + { + for (p = p + 1; p<myargc && myargv[p][0] != '-'; ++p) + { + char *filename; + + modifiedgame = true; + + filename = D_TryFindWADByName(myargv[p]); + + printf(" merging flats from %s\n", filename); + W_NWTMergeFile(filename, W_NWT_MERGE_FLATS); + } + } + + //! + // @arg <files> + // @category mod + // + // Simulates the behavior of NWT's -as option, merging sprites + // into the main IWAD directory. Multiple files may be specified. + // + + p = M_CheckParmWithArgs("-as", 1); + + if (p > 0) + { + for (p = p + 1; p<myargc && myargv[p][0] != '-'; ++p) + { + char *filename; + + modifiedgame = true; + filename = D_TryFindWADByName(myargv[p]); + + printf(" merging sprites from %s\n", filename); + W_NWTMergeFile(filename, W_NWT_MERGE_SPRITES); + } + } + + //! + // @arg <files> + // @category mod + // + // Equivalent to "-af <files> -as <files>". + // + + p = M_CheckParmWithArgs("-aa", 1); + + if (p > 0) + { + for (p = p + 1; p<myargc && myargv[p][0] != '-'; ++p) + { + char *filename; + + modifiedgame = true; + + filename = D_TryFindWADByName(myargv[p]); + + printf(" merging sprites and flats from %s\n", filename); + W_NWTMergeFile(filename, W_NWT_MERGE_SPRITES | W_NWT_MERGE_FLATS); + } + } + +#endif + + //! + // @arg <files> + // @vanilla + // + // Load the specified PWAD files. + // + + p = M_CheckParmWithArgs ("-file", 1); + if (p) + { + // the parms after p are wadfile/lump names, + // until end of parms or another - preceded parm + modifiedgame = true; // homebrew levels + while (++p != myargc && myargv[p][0] != '-') + { + char *filename; + + filename = D_TryFindWADByName(myargv[p]); + + printf(" adding %s\n", filename); + W_AddFile(filename); + } + } + +// W_PrintDirectory(); + + return modifiedgame; +} + |