Allow -g, -x, -h, -j, and for the game, -d, to take their file name after a space. This allows quotes to be used with them properly.

I updated the help windows to prefer these variants because they are superior to the -xSquished versions.
Also, factor out the command-line processing code for the above, plus con/def modules and clipmaps.

git-svn-id: https://svn.eduke32.com/eduke32@4128 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2013-11-03 04:02:23 +00:00
parent 837c5c6b84
commit ccf7d2d470
6 changed files with 194 additions and 98 deletions

View file

@ -51,6 +51,11 @@ extern struct strllist *CommandPaths, *CommandGrps;
//// FUNCTIONS
void G_AddGroup(const char *buffer);
void G_AddPath(const char *buffer);
void G_AddDef(const char *buffer);
void G_AddDefModule(const char *buffer);
#ifdef HAVE_CLIPSHAPE_FEATURE
void G_AddClipMap(const char *buffer);
#endif
int32_t getatoken(scriptfile *sf, const tokenlist *tl, int32_t ntokens);

View file

@ -90,16 +90,6 @@ static int32_t spnoclip=1;
static char *default_tiles_cfg = "tiles.cfg";
static int32_t pathsearchmode_oninit;
char **g_scriptModules = NULL;
int32_t g_scriptModulesNum = 0;
char **g_defModules = NULL;
int32_t g_defModulesNum = 0;
#ifdef HAVE_CLIPSHAPE_FEATURE
char **g_clipMapFiles = NULL;
int32_t g_clipMapFilesNum = 0;
#endif
#ifdef LUNATIC
static L_State g_EmState;
#endif
@ -8449,12 +8439,12 @@ int32_t ExtPreSaveMap(void)
static void G_ShowParameterHelp(void)
{
const char *s = "Usage: mapster32 [files] [options]\n\n"
"-g[file.grp], -grp [file.grp]\tLoad extra group file\n"
"-h[file.def]\t\tLoad an alternate definitions file\n"
"-x[game.con]\t\tLoad a custom CON script for getting sound definitions\n"
"-g [file.grp], -grp [file.grp]\tLoad extra group file\n"
"-h [file.def]\t\tLoad an alternate definitions file\n"
"-x [game.con]\t\tLoad a custom CON script for getting sound definitions\n"
"-mh [file.def]\t\tInclude additional definitions module\n"
"-mx [file.con]\t\tInclude additional CON module for getting sound definitions\n"
"-j[dir], -game_dir [dir]\n"
"-j [dir], -game_dir [dir]\n"
"\t\t\tAdds a directory to the file path stack\n"
"-cachesize #\t\tSets cache size, in Kb\n"
"-check\t\t\tEnables map pointer checking when saving\n"
@ -8622,13 +8612,37 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
i++;
continue;
}
if (!Bstrcasecmp(c+1,"x"))
{
if (argc > i+1)
{
G_AddCon(argv[i+1]);
COPYARG(i);
COPYARG(i+1);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"mx"))
{
if (argc > i+1)
{
g_scriptModules = (char **) Brealloc (g_scriptModules, (g_scriptModulesNum+1) * sizeof(char *));
g_scriptModules[g_scriptModulesNum] = Bstrdup(argv[i+1]);
++g_scriptModulesNum;
G_AddConModule(argv[i+1]);
COPYARG(i);
COPYARG(i+1);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"h"))
{
if (argc > i+1)
{
G_AddDef(argv[i+1]);
COPYARG(i);
COPYARG(i+1);
i++;
}
i++;
@ -8638,9 +8652,21 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
{
if (argc > i+1)
{
g_defModules = (char **) Brealloc (g_defModules, (g_defModulesNum+1) * sizeof(char *));
g_defModules[g_defModulesNum] = Bstrdup(argv[i+1]);
++g_defModulesNum;
G_AddDefModule(argv[i+1]);
COPYARG(i);
COPYARG(i+1);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"j"))
{
if (argc > i+1)
{
G_AddPath(argv[i+1]);
COPYARG(i);
COPYARG(i+1);
i++;
}
i++;
@ -8651,9 +8677,9 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
{
if (argc > i+1)
{
g_clipMapFiles = (char **) Brealloc (g_clipMapFiles, (g_clipMapFilesNum+1) * sizeof(char *));
g_clipMapFiles[g_clipMapFilesNum] = Bstrdup(argv[i+1]);
++g_clipMapFilesNum;
G_AddClipMap(argv[i+1]);
COPYARG(i);
COPYARG(i+1);
i++;
}
i++;
@ -8743,10 +8769,8 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
c++;
if (*c)
{
clearDefNamePtr();
g_defNamePtr = dup_filename(c);
G_AddDef(c);
COPYARG(i);
initprintf("Using DEF file \"%s\".\n",g_defNamePtr);
}
break;
case 'j':
@ -8768,9 +8792,8 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
c++;
if (*c)
{
clearScriptNamePtr();
g_scriptNamePtr = dup_filename(c);
initprintf("Using CON file \"%s\".\n",g_scriptNamePtr);
G_AddCon(c);
COPYARG(i);
}
break;
}
@ -8794,17 +8817,13 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
else if (!Bstrcasecmp(k,".def"))
{
COPYARG(i);
clearDefNamePtr();
g_defNamePtr = dup_filename(argv[i++]);
initprintf("Using DEF file \"%s\".\n",g_defNamePtr);
G_AddDef(argv[i++]);
continue;
}
else if (!Bstrcasecmp(k,".con"))
{
COPYARG(i);
clearScriptNamePtr();
g_scriptNamePtr = dup_filename(argv[i++]);
initprintf("Using CON file \"%s\".\n",g_scriptNamePtr);
G_AddCon(argv[i++]);
continue;
}
}

View file

@ -359,6 +359,16 @@ void G_CleanupSearchPaths(void)
struct strllist *CommandPaths, *CommandGrps;
char **g_scriptModules = NULL;
int32_t g_scriptModulesNum = 0;
char **g_defModules = NULL;
int32_t g_defModulesNum = 0;
#ifdef HAVE_CLIPSHAPE_FEATURE
char **g_clipMapFiles = NULL;
int32_t g_clipMapFilesNum = 0;
#endif
void G_AddGroup(const char *buffer)
{
char buf[BMAX_PATH];
@ -397,6 +407,43 @@ void G_AddPath(const char *buffer)
CommandPaths = s;
}
void G_AddDef(const char *buffer)
{
clearDefNamePtr();
g_defNamePtr = dup_filename(buffer);
initprintf("Using DEF file \"%s\".\n",g_defNamePtr);
}
void G_AddDefModule(const char *buffer)
{
g_defModules = (char **) Brealloc (g_defModules, (g_defModulesNum+1) * sizeof(char *));
g_defModules[g_defModulesNum] = Bstrdup(buffer);
++g_defModulesNum;
}
#ifdef HAVE_CLIPSHAPE_FEATURE
void G_AddClipMap(const char *buffer)
{
g_clipMapFiles = (char **) Brealloc (g_clipMapFiles, (g_clipMapFilesNum+1) * sizeof(char *));
g_clipMapFiles[g_clipMapFilesNum] = Bstrdup(buffer);
++g_clipMapFilesNum;
}
#endif
void G_AddCon(const char *buffer)
{
clearScriptNamePtr();
g_scriptNamePtr = dup_filename(buffer);
initprintf("Using CON file \"%s\".\n",g_scriptNamePtr);
}
void G_AddConModule(const char *buffer)
{
g_scriptModules = (char **) Brealloc (g_scriptModules, (g_scriptModulesNum+1) * sizeof(char *));
g_scriptModules[g_scriptModulesNum] = Bstrdup(buffer);
++g_scriptModulesNum;
}
//////////
int32_t getatoken(scriptfile *sf, const tokenlist *tl, int32_t ntokens)

View file

@ -52,6 +52,12 @@ extern const char *G_GrpFile(void);
extern const char *G_DefaultConFile(void);
extern const char *G_ConFile(void);
extern char **g_scriptModules;
extern int32_t g_scriptModulesNum;
extern void G_AddCon(const char *buffer);
extern void G_AddConModule(const char *buffer);
extern void clearGrpNamePtr(void);
extern void clearDefNamePtr(void);
extern void clearScriptNamePtr(void);

View file

@ -138,18 +138,9 @@ const char *g_gameNamePtr = NULL;
// g_rtsNamePtr can point to an argv[] element
const char *g_rtsNamePtr = NULL;
char **g_scriptModules = NULL;
int32_t g_scriptModulesNum = 0;
char **g_defModules = NULL;
int32_t g_defModulesNum = 0;
int32_t g_dependencyCRC = 0;
int32_t g_usingAddon = 0;
#ifdef HAVE_CLIPSHAPE_FEATURE
char **g_clipMapFiles = NULL;
int32_t g_clipMapFilesNum = 0;
#endif
int32_t g_Shareware = 0;
#define MAXUSERQUOTES 6
@ -9009,10 +9000,10 @@ static void G_ShowParameterHelp(void)
#endif
"-connect [host]\tConnect to a multiplayer game\n"
"-c#\t\tUse MP mode #, 1 = Dukematch, 2 = Coop, 3 = Dukematch(no spawn)\n"
"-d[file.edm or demonum]\tPlay a demo\n"
"-g[file.grp]\tLoad additional game data\n"
"-h[file.def]\tLoad an alternate definitions file\n"
"-j[dir]\t\tAdds a directory to EDuke32's search list\n"
"-d [file.edm or demonum]\tPlay a demo\n"
"-g [file.grp]\tLoad additional game data\n"
"-h [file.def]\tLoad an alternate definitions file\n"
"-j [dir]\t\tAdds a directory to EDuke32's search list\n"
"-l#\t\tWarp to level #, see -v\n"
"-map [file.map]\tLoads a map\n"
"-mh [file.def]\tInclude an additional definitions module\n"
@ -9032,7 +9023,7 @@ static void G_ShowParameterHelp(void)
"-u#########\tUser's favorite weapon order (default: 3425689071)\n"
"-v#\t\tWarp to volume #, see -l\n"
"-ww2gi\t\tRun in WWII GI compatibility mode\n"
"-x[game.con]\tLoad custom CON script\n"
"-x [game.con]\tLoad custom CON script\n"
"-#\t\tLoad and run a game from slot # (0-9)\n"
// "\n-?/--help\tDisplay this help message and exit\n"
"\nSee eduke32 -debughelp for debug parameters"
@ -9531,6 +9522,36 @@ static int32_t G_CheckCmdSwitch(int32_t argc, const char **argv, const char *str
return 0;
}
static void G_AddDemo(const char* param)
{
char * colon = (char *)Bstrchr(param, ':');
int32_t framespertic=-1, numrepeats=1;
if (colon && colon != param)
{
// -d<filename>:<num>[,<num>]
// profiling options
*(colon++) = 0;
Bsscanf(colon, "%u,%u", &framespertic, &numrepeats);
}
Demo_SetFirst(param);
if (framespertic < 0)
{
initprintf("Play demo %s.\n", g_firstDemoFile);
}
else
{
framespertic = clamp(framespertic, 0, 8)+1;
// TODO: repeat count and gathering statistics.
initprintf("Profile demo %s, %d frames/gametic, repeated 1x.\n", g_firstDemoFile,
framespertic-1);
Demo_PlayFirst(framespertic, 1);
g_noLogo = 1;
}
}
static void G_CheckCommandLine(int32_t argc, const char **argv)
{
int16_t i = 1, j;
@ -9799,13 +9820,31 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
i++;
continue;
}
if (!Bstrcasecmp(c+1,"x"))
{
if (argc > i+1)
{
G_AddCon(argv[i+1]);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"mx"))
{
if (argc > i+1)
{
g_scriptModules = (char **) Brealloc (g_scriptModules, (g_scriptModulesNum+1) * sizeof(char *));
g_scriptModules[g_scriptModulesNum] = Bstrdup(argv[i+1]);
++g_scriptModulesNum;
G_AddConModule(argv[i+1]);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"h"))
{
if (argc > i+1)
{
G_AddDef(argv[i+1]);
i++;
}
i++;
@ -9815,9 +9854,27 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
{
if (argc > i+1)
{
g_defModules = (char **) Brealloc (g_defModules, (g_defModulesNum+1) * sizeof(char *));
g_defModules[g_defModulesNum] = Bstrdup(argv[i+1]);
++g_defModulesNum;
G_AddDefModule(argv[i+1]);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"j"))
{
if (argc > i+1)
{
G_AddPath(argv[i+1]);
i++;
}
i++;
continue;
}
if (!Bstrcasecmp(c+1,"d"))
{
if (argc > i+1)
{
G_AddDemo(argv[i+1]);
i++;
}
i++;
@ -9828,9 +9885,7 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
{
if (argc > i+1)
{
g_clipMapFiles = (char **) Brealloc (g_clipMapFiles, (g_clipMapFilesNum+1) * sizeof(char *));
g_clipMapFiles[g_clipMapFilesNum] = Bstrdup(argv[i+1]);
++g_clipMapFilesNum;
G_AddClipMap(argv[i+1]);
i++;
}
i++;
@ -9933,34 +9988,9 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
break;
case 'd':
{
char * colon = (char *)Bstrchr(c, ':');
int32_t framespertic=-1, numrepeats=1;
c++;
if (colon && colon != c)
{
// -d<filename>:<num>[,<num>]
// profiling options
*(colon++) = 0;
Bsscanf(colon, "%u,%u", &framespertic, &numrepeats);
}
Demo_SetFirst(c);
if (framespertic < 0)
{
initprintf("Play demo %s.\n", g_firstDemoFile);
}
else
{
framespertic = clamp(framespertic, 0, 8)+1;
// TODO: repeat count and gathering statistics.
initprintf("Profile demo %s, %d frames/gametic, repeated 1x.\n", g_firstDemoFile,
framespertic-1);
Demo_PlayFirst(framespertic, 1);
g_noLogo = 1;
}
if (*c)
G_AddDemo(c);
break;
}
#ifdef LUNATIC
@ -9975,11 +10005,7 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
case 'h':
c++;
if (*c)
{
clearDefNamePtr();
g_defNamePtr = dup_filename(c);
initprintf("Using DEF file \"%s\".\n",g_defNamePtr);
}
G_AddDef(c);
break;
case 'j':
c++;
@ -10127,11 +10153,7 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
case 'x':
c++;
if (*c)
{
clearScriptNamePtr();
g_scriptNamePtr = dup_filename(c);
initprintf("Using CON file \"%s\".\n",g_scriptNamePtr);
}
G_AddCon(c);
break;
case '0':
case '1':

View file

@ -245,9 +245,6 @@ extern const char *s_buildDate;
extern const char *g_gameNamePtr;
extern const char *g_rtsNamePtr;
extern char **g_scriptModules;
extern int32_t g_scriptModulesNum;
extern char CheatStrings[][MAXCHEATLEN];
extern char boardfilename[BMAX_PATH], currentboardfilename[BMAX_PATH];
extern char boardfilename[BMAX_PATH];