2006-03-20 16:43:15 +00:00
|
|
|
/*
|
|
|
|
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
|
|
|
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
|
|
|
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
|
|
|
|
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
|
|
|
|
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
|
|
|
|
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
|
|
|
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
|
|
|
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
2010-06-14 08:13:16 +00:00
|
|
|
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
2006-03-20 16:43:15 +00:00
|
|
|
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|
|
|
*/
|
2008-04-06 20:23:28 +00:00
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
/*
|
|
|
|
*
|
2007-07-14 20:33:42 +00:00
|
|
|
* Functions for accessing arguments.
|
2006-03-20 16:43:15 +00:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2010-10-10 10:42:53 +00:00
|
|
|
#include <SDL/SDL_stdinc.h>
|
|
|
|
#include "u_mem.h"
|
|
|
|
#include "physfsx.h"
|
|
|
|
#include "strio.h"
|
|
|
|
#include "strutil.h"
|
|
|
|
#include "args.h"
|
|
|
|
#include "game.h"
|
|
|
|
#include "gauges.h"
|
2011-06-30 23:01:06 +00:00
|
|
|
#ifdef USE_UDP
|
|
|
|
#include "net_udp.h"
|
|
|
|
#endif
|
2010-10-10 10:42:53 +00:00
|
|
|
|
2007-07-16 02:34:51 +00:00
|
|
|
#define MAX_ARGS 1000
|
2007-10-13 23:49:07 +00:00
|
|
|
#define INI_FILENAME "d1x.ini"
|
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
int Num_args=0;
|
2007-05-01 23:23:09 +00:00
|
|
|
char * Args[MAX_ARGS];
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2007-07-14 20:33:42 +00:00
|
|
|
struct Arg GameArg;
|
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
void ReadCmdArgs(void);
|
|
|
|
|
2012-09-02 22:48:08 +00:00
|
|
|
static int FindArg(const char *const s)
|
2008-01-23 17:25:09 +00:00
|
|
|
{
|
2006-03-20 16:43:15 +00:00
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i=0; i<Num_args; i++ )
|
2012-05-18 23:36:41 +00:00
|
|
|
if (! d_stricmp( Args[i], s))
|
2006-03-20 16:43:15 +00:00
|
|
|
return i;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-08-30 18:11:16 +00:00
|
|
|
int FindResArg(char *prefix, int *sw, int *sh)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
int w, h;
|
|
|
|
char *endptr;
|
|
|
|
int prefixlen = strlen(prefix);
|
|
|
|
|
|
|
|
for (i = 0; i < Num_args; ++i)
|
2012-05-18 23:36:41 +00:00
|
|
|
if (Args[i][0] == '-' && !d_strnicmp(Args[i] + 1, prefix, prefixlen))
|
2006-08-30 18:11:16 +00:00
|
|
|
{
|
|
|
|
w = strtol(Args[i] + 1 + prefixlen, &endptr, 10);
|
|
|
|
if (w > 0 && endptr && endptr[0] == 'x')
|
|
|
|
{
|
|
|
|
h = strtol(endptr + 1, &endptr, 10);
|
|
|
|
if (h > 0 && endptr[0] == '\0')
|
|
|
|
{
|
|
|
|
*sw = w;
|
|
|
|
*sh = h;
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2007-07-14 20:33:42 +00:00
|
|
|
void AppendIniArgs(void)
|
2007-05-01 23:23:09 +00:00
|
|
|
{
|
2008-01-23 17:25:09 +00:00
|
|
|
PHYSFS_file *f;
|
2008-06-01 12:53:03 +00:00
|
|
|
char *line, *token;
|
|
|
|
char separator[] = " ";
|
2007-07-14 20:33:42 +00:00
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
f = PHYSFSX_openReadBuffered(INI_FILENAME);
|
2010-06-14 08:13:16 +00:00
|
|
|
|
2007-05-01 23:23:09 +00:00
|
|
|
if(f) {
|
2008-01-23 17:25:09 +00:00
|
|
|
while(!PHYSFS_eof(f) && Num_args < MAX_ARGS)
|
2007-05-01 23:23:09 +00:00
|
|
|
{
|
2008-01-23 17:25:09 +00:00
|
|
|
line=fgets_unlimited(f);
|
2008-06-01 12:53:03 +00:00
|
|
|
|
|
|
|
token = strtok(line, separator); /* first token in current line */
|
|
|
|
if (token)
|
|
|
|
Args[Num_args++] = d_strdup(token);
|
|
|
|
while( token != NULL )
|
|
|
|
{
|
|
|
|
token = strtok(NULL, separator); /* next tokens in current line */
|
|
|
|
if (token)
|
|
|
|
Args[Num_args++] = d_strdup(token);
|
|
|
|
}
|
|
|
|
|
|
|
|
d_free(line);
|
2007-05-01 23:23:09 +00:00
|
|
|
}
|
2008-01-23 17:25:09 +00:00
|
|
|
PHYSFS_close(f);
|
2007-05-01 23:23:09 +00:00
|
|
|
}
|
2006-03-20 16:43:15 +00:00
|
|
|
}
|
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
// Utility function to get an integer provided as argument
|
|
|
|
int get_int_arg(char *arg_name, int default_value) {
|
|
|
|
int t;
|
|
|
|
return ((t = FindArg(arg_name)) ? atoi(Args[t+1]) : default_value);
|
|
|
|
|
|
|
|
}
|
|
|
|
// Utility function to get a string provided as argument
|
|
|
|
char *get_str_arg(char *arg_name, char *default_value) {
|
|
|
|
int t;
|
|
|
|
return ((t = FindArg(arg_name)) ? Args[t+1] : default_value);
|
|
|
|
}
|
|
|
|
|
2007-07-14 20:33:42 +00:00
|
|
|
// All FindArg calls should be here to keep the code clean
|
|
|
|
void ReadCmdArgs(void)
|
|
|
|
{
|
|
|
|
// System Options
|
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.SysShowCmdHelp = (FindArg( "-help" ) || FindArg( "-h" ) || FindArg( "-?" ) || FindArg( "?" ));
|
2008-04-21 18:39:49 +00:00
|
|
|
GameArg.SysUseNiceFPS = !FindArg("-nonicefps");
|
2007-07-14 20:33:42 +00:00
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.SysMaxFPS = get_int_arg("-maxfps", MAXIMUM_FPS);
|
|
|
|
if (GameArg.SysMaxFPS <= 0 || GameArg.SysMaxFPS > MAXIMUM_FPS)
|
|
|
|
GameArg.SysMaxFPS = MAXIMUM_FPS;
|
2007-07-14 20:33:42 +00:00
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
GameArg.SysHogDir = get_str_arg("-hogdir", NULL);
|
|
|
|
if (GameArg.SysHogDir == NULL)
|
|
|
|
GameArg.SysNoHogDir = FindArg("-nohogdir");
|
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.SysUsePlayersDir = FindArg("-use_players_dir");
|
|
|
|
GameArg.SysLowMem = FindArg("-lowmem");
|
|
|
|
GameArg.SysPilot = get_str_arg("-pilot", NULL);
|
|
|
|
GameArg.SysWindow = FindArg("-window");
|
2011-02-10 14:30:05 +00:00
|
|
|
GameArg.SysNoBorders = FindArg("-noborders");
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.SysNoTitles = FindArg("-notitles");
|
|
|
|
GameArg.SysAutoDemo = FindArg("-autodemo");
|
2007-07-15 21:22:07 +00:00
|
|
|
|
2007-07-14 20:33:42 +00:00
|
|
|
// Control Options
|
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.CtlNoMouse = FindArg("-nomouse");
|
|
|
|
GameArg.CtlNoJoystick = FindArg("-nojoystick");
|
2011-01-03 00:08:52 +00:00
|
|
|
GameArg.CtlNoStickyKeys = FindArg("-nostickykeys");
|
|
|
|
if (GameArg.CtlNoStickyKeys) // Must happen before SDL_Init!
|
2010-10-10 10:42:53 +00:00
|
|
|
SDL_putenv("SDL_DISABLE_LOCK_KEYS=1");
|
2010-02-14 18:48:02 +00:00
|
|
|
else
|
2010-10-10 10:42:53 +00:00
|
|
|
SDL_putenv("SDL_DISABLE_LOCK_KEYS=0");
|
2007-07-14 22:36:04 +00:00
|
|
|
|
|
|
|
// Sound Options
|
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.SndNoSound = FindArg("-nosound");
|
|
|
|
GameArg.SndNoMusic = FindArg("-nomusic");
|
2007-07-15 15:23:45 +00:00
|
|
|
|
2007-09-18 13:37:39 +00:00
|
|
|
#ifdef USE_SDLMIXER
|
2008-05-01 21:40:34 +00:00
|
|
|
GameArg.SndDisableSdlMixer = FindArg("-nosdlmixer");
|
2010-11-28 15:49:32 +00:00
|
|
|
#else
|
|
|
|
GameArg.SndDisableSdlMixer = 1;
|
2007-09-18 13:37:39 +00:00
|
|
|
#endif
|
|
|
|
|
2007-07-15 15:23:45 +00:00
|
|
|
// Graphics Options
|
|
|
|
|
2008-02-24 14:41:27 +00:00
|
|
|
GameArg.GfxHiresFNTAvailable = !FindArg("-lowresfont");
|
2007-08-29 23:21:13 +00:00
|
|
|
|
2007-07-15 21:22:07 +00:00
|
|
|
#ifdef OGL
|
|
|
|
// OpenGL Options
|
|
|
|
|
2007-10-18 14:44:02 +00:00
|
|
|
GameArg.OglFixedFont = FindArg("-gl_fixedfont");
|
2007-07-15 21:22:07 +00:00
|
|
|
#endif
|
2007-07-16 02:34:51 +00:00
|
|
|
|
|
|
|
// Multiplayer Options
|
|
|
|
|
2011-06-30 23:01:06 +00:00
|
|
|
#ifdef USE_UDP
|
|
|
|
GameArg.MplUdpHostAddr = get_str_arg("-udp_hostaddr", UDP_MANUAL_ADDR_DEFAULT);
|
2009-11-24 09:48:53 +00:00
|
|
|
GameArg.MplUdpHostPort = get_int_arg("-udp_hostport", 0);
|
|
|
|
GameArg.MplUdpMyPort = get_int_arg("-udp_myport", 0);
|
2011-04-05 00:24:30 +00:00
|
|
|
#ifdef USE_TRACKER
|
2011-06-30 23:01:06 +00:00
|
|
|
GameArg.MplTrackerAddr = get_str_arg("-tracker_hostaddr", TRACKER_ADDR_DEFAULT);
|
|
|
|
GameArg.MplTrackerPort = get_int_arg("-tracker_hostport", TRACKER_PORT_DEFAULT);
|
|
|
|
#endif
|
2011-04-05 00:24:30 +00:00
|
|
|
#endif
|
2007-07-18 20:13:17 +00:00
|
|
|
|
2007-07-18 22:23:06 +00:00
|
|
|
// Editor Options
|
|
|
|
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.EdiNoBm = FindArg("-nobm");
|
2007-07-18 22:23:06 +00:00
|
|
|
|
2007-07-18 20:13:17 +00:00
|
|
|
// Debug Options
|
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
if (FindArg("-debug")) GameArg.DbgVerbose = CON_DEBUG;
|
|
|
|
else if (FindArg("-verbose")) GameArg.DbgVerbose = CON_VERBOSE;
|
|
|
|
else GameArg.DbgVerbose = CON_NORMAL;
|
|
|
|
|
2012-01-09 14:19:12 +00:00
|
|
|
GameArg.DbgSafelog = FindArg("-safelog");
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.DbgNoRun = FindArg("-norun");
|
|
|
|
GameArg.DbgRenderStats = FindArg("-renderstats");
|
|
|
|
GameArg.DbgAltTex = get_str_arg("-text", NULL);
|
|
|
|
GameArg.DbgTexMap = get_str_arg("-tmap", NULL);
|
|
|
|
GameArg.DbgShowMemInfo = FindArg("-showmeminfo");
|
|
|
|
GameArg.DbgUseDoubleBuffer = !FindArg("-nodoublebuffer");
|
|
|
|
GameArg.DbgBigPig = !FindArg("-bigpig");
|
2010-01-29 21:53:17 +00:00
|
|
|
GameArg.DbgBpp = (FindArg("-16bpp") ? 16 : 32);
|
2007-07-22 20:40:39 +00:00
|
|
|
|
2007-07-22 01:34:00 +00:00
|
|
|
#ifdef OGL
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.DbgAltTexMerge = !FindArg("-gl_oldtexmerge");
|
|
|
|
GameArg.DbgGlIntensity4Ok = get_int_arg("-gl_intensity4_ok", 1);
|
|
|
|
GameArg.DbgGlLuminance4Alpha4Ok = get_int_arg("-gl_luminance4_alpha4_ok", 1);
|
|
|
|
GameArg.DbgGlRGBA2Ok = get_int_arg("-gl_rgba2_ok", 1);
|
|
|
|
GameArg.DbgGlReadPixelsOk = get_int_arg("-gl_readpixels_ok", 1);
|
|
|
|
GameArg.DbgGlGetTexLevelParamOk = get_int_arg("-gl_gettexlevelparam_ok", 1);
|
2007-07-23 18:13:49 +00:00
|
|
|
#else
|
2007-10-13 23:49:07 +00:00
|
|
|
GameArg.DbgSdlHWSurface = FindArg("-hwsurface");
|
2008-11-03 11:36:16 +00:00
|
|
|
GameArg.DbgSdlASyncBlit = FindArg("-asyncblit");
|
2007-07-22 01:34:00 +00:00
|
|
|
#endif
|
2007-07-14 20:33:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void args_exit(void)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
for (i=0; i< Num_args; i++ )
|
2008-01-23 17:25:09 +00:00
|
|
|
d_free(Args[i]);
|
2007-07-14 20:33:42 +00:00
|
|
|
}
|
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
void InitArgs( int argc,char **argv )
|
|
|
|
{
|
2007-05-01 23:23:09 +00:00
|
|
|
int i;
|
2010-06-14 08:13:16 +00:00
|
|
|
|
2007-05-01 23:23:09 +00:00
|
|
|
Num_args=0;
|
2010-06-14 08:13:16 +00:00
|
|
|
|
2007-05-01 23:23:09 +00:00
|
|
|
for (i=0; i<argc; i++ )
|
2008-01-23 17:25:09 +00:00
|
|
|
Args[Num_args++] = d_strdup( argv[i] );
|
|
|
|
|
2007-05-01 23:23:09 +00:00
|
|
|
|
|
|
|
for (i=0; i< Num_args; i++ ) {
|
|
|
|
if ( Args[i][0] == '-' )
|
2012-05-18 23:36:41 +00:00
|
|
|
d_strlwr( Args[i] ); // Convert all args to lowercase
|
2007-05-01 23:23:09 +00:00
|
|
|
}
|
2007-07-14 20:33:42 +00:00
|
|
|
|
|
|
|
AppendIniArgs();
|
|
|
|
ReadCmdArgs();
|
2006-03-20 16:43:15 +00:00
|
|
|
}
|