#include <simgear/misc/sg_path.hxx>
#include <simgear/scene/material/mat.hxx>
#include <simgear/sound/soundmgr_openal.hxx>
+#include <simgear/misc/strutils.hxx>
#include <Autopilot/route_mgr.hxx>
#include <GUI/gui.h>
#include "util.hxx"
#include "viewmgr.hxx"
#include <Main/viewer.hxx>
+#include <Environment/presets.hxx>
+
#include <simgear/version.h>
+#include <osg/Version>
using std::string;
using std::sort;
using std::cerr;
using std::endl;
-#ifndef VERSION
-#define VERSION "CVS "__DATE__
+#if defined( HAVE_VERSION_H ) && HAVE_VERSION_H
+# include <Include/version.h>
+#else
+# include <Include/no_version.h>
#endif
#define NEW_DEFAULT_MODEL_HZ 120
return ::atoi( str.c_str() );
}
+static int fgSetupProxy( const char *arg );
+
/**
* Set a few fail-safe default property values.
*
// Otherwise, default to Scenery being in $FG_ROOT/Scenery
globals->set_fg_scenery("");
}
-
+
// Position (deliberately out of range)
fgSetDouble("/position/longitude-deg", 9999.0);
fgSetDouble("/position/latitude-deg", 9999.0);
// Features
fgSetBool("/sim/hud/color/antialiased", false);
- fgSetBool("/sim/hud/enable3d", true);
- fgSetBool("/sim/hud/visibility", false);
+ fgSetBool("/sim/hud/enable3d[1]", true);
+ fgSetBool("/sim/hud/visibility[1]", false);
fgSetBool("/sim/panel/visibility", true);
fgSetBool("/sim/sound/enabled", true);
fgSetBool("/sim/sound/working", true);
// HUD options
fgSetString("/sim/startup/units", "feet");
fgSetString("/sim/hud/frame-stat-type", "tris");
-
+
// Time options
fgSetInt("/sim/startup/time-offset", 0);
fgSetString("/sim/startup/time-offset-type", "system-offset");
fgSetString("/sim/multiplay/txhost", "0");
fgSetInt("/sim/multiplay/rxport", 0);
fgSetInt("/sim/multiplay/txport", 0);
+
+ fgSetString("/sim/version/flightgear", FLIGHTGEAR_VERSION);
+ fgSetString("/sim/version/simgear", SG_STRINGIZE(SIMGEAR_VERSION));
+ fgSetString("/sim/version/openscenegraph", osgGetVersion());
+ fgSetString("/sim/version/revision", REVISION);
+ fgSetInt("/sim/version/build-number", HUDSON_BUILD_NUMBER);
+ fgSetString("/sim/version/build-id", HUDSON_BUILD_ID);
+ if( (envp = ::getenv( "http_proxy" )) != NULL )
+ fgSetupProxy( envp );
}
static bool
// parse a date string (yyyy:mm:dd:hh:mm:ss) into a time_t (seconds)
-static long int
+static long int
parse_date( const string& date)
{
struct tm gmt;
}
-// Parse --fov=x.xx type option
+// Parse --fov=x.xx type option
static double
parse_fov( const string& arg ) {
double fov = atof(arg);
// point values are ok.
//
// Serial example "--nmea=serial,dir,hz,device,baud" where
-//
+//
// device = OS device name of serial line to be open()'ed
// baud = {300, 1200, 2400, ..., 230400}
//
static int
fgSetupProxy( const char *arg )
{
- string options = arg;
+ string options = simgear::strutils::strip( arg );
string host, port, auth;
string::size_type pos;
+ // this is NURLP - NURLP is not an url parser
+ if( simgear::strutils::starts_with( options, "http://" ) )
+ options = options.substr( 7 );
+ if( simgear::strutils::ends_with( options, "/" ) )
+ options = options.substr( 0, options.length() - 1 );
+
host = port = auth = "";
- if ((pos = options.find("@")) != string::npos)
+ if ((pos = options.find("@")) != string::npos)
auth = options.substr(0, pos++);
else
pos = 0;
} else {
default_view_offset = atof( woffset.c_str() ) * SGD_DEGREES_TO_RADIANS;
}
- /* apparently not used (CLO, 11 Jun 2002)
+ /* apparently not used (CLO, 11 Jun 2002)
FGViewer *pilot_view =
(FGViewer *)globals->get_viewmgr()->get_view( 0 ); */
// this will work without calls to the viewer...
static int
fgOptVisibilityMeters( const char *arg )
{
- double visibility = atof( arg );
- fgDefaultWeatherValue("visibility-m", visibility);
+ Environment::Presets::VisibilitySingleton::instance()->preset( atof( arg ) );
return FG_OPTIONS_OK;
}
static int
fgOptVisibilityMiles( const char *arg )
{
- double visibility = atof( arg ) * 5280.0 * SG_FEET_TO_METER;
- fgDefaultWeatherValue("visibility-m", visibility);
+ Environment::Presets::VisibilitySingleton::instance()->preset( atof( arg ) * 5280.0 * SG_FEET_TO_METER );
return FG_OPTIONS_OK;
}
double max_hdg = min_hdg + (20 - sqrt(sg_random() * 400));
double speed = sg_random() * sg_random() * 40;
double gust = speed + (10 - sqrt(sg_random() * 100));
- fgSetupWind(min_hdg, max_hdg, speed, gust);
+ Environment::Presets::WindSingleton::instance()->preset(min_hdg, max_hdg, speed, gust);
return FG_OPTIONS_OK;
}
SG_LOG( SG_GENERAL, SG_ALERT, "bad wind value " << arg );
return FG_OPTIONS_ERROR;
}
- fgSetupWind(min_hdg, max_hdg, speed, gust);
+ Environment::Presets::WindSingleton::instance()->preset(min_hdg, max_hdg, speed, gust);
return FG_OPTIONS_OK;
}
static int
fgOptTurbulence( const char *arg )
{
- fgDefaultWeatherValue("turbulence/magnitude-norm", atof(arg));
+ Environment::Presets::TurbulenceSingleton::instance()->preset( atof(arg) );
return FG_OPTIONS_OK;
}
elevation = atof(spec.substr(0, pos).c_str());
thickness = atof(spec.substr(pos + 1).c_str());
}
- fgSetDouble("/environment/clouds/layer[0]/elevation-ft", elevation);
- fgSetDouble("/environment/clouds/layer[0]/thickness-ft", thickness);
- fgSetString("/environment/clouds/layer[0]/coverage", "overcast");
+ Environment::Presets::CeilingSingleton::instance()->preset( elevation, thickness );
return FG_OPTIONS_OK;
}
static int
fgOptVersion( const char *arg )
{
- cerr << "FlightGear version: " << VERSION << endl;
+ cerr << "FlightGear version: " << FLIGHTGEAR_VERSION << endl;
+ cerr << "Revision: " << REVISION << endl;
+ cerr << "Build-Id: " << HUDSON_BUILD_ID << endl;
cerr << "FG_ROOT=" << globals->get_fg_root() << endl;
cerr << "FG_HOME=" << fgGetString("/sim/fg-home") << endl;
cerr << "FG_SCENERY=";
return FG_OPTIONS_OK;
}
+static int
+fgOptCallSign(const char * arg)
+{
+ int i;
+ char callsign[11];
+ strncpy(callsign,arg,10);
+ callsign[10]=0;
+ for (i=0;callsign[i];i++)
+ {
+ char c = callsign[i];
+ if (c >= 'A' && c <= 'Z') continue;
+ if (c >= 'a' && c <= 'z') continue;
+ if (c >= '0' && c <= '9') continue;
+ if (c == '-' || c == '_') continue;
+ // convert any other illegal characters
+ callsign[i]='-';
+ }
+ fgSetString("sim/multiplay/callsign", callsign );
+ return FG_OPTIONS_OK;
+}
static map<string,size_t> fgOptionMap;
const char *s_param;
int (*func)( const char * );
} fgOptionArray[] = {
-
+
{"language", true, OPTION_FUNC, "", false, "", fgOptLanguage },
{"disable-game-mode", false, OPTION_BOOL, "/sim/startup/game-mode", false, "", 0 },
{"enable-game-mode", false, OPTION_BOOL, "/sim/startup/game-mode", true, "", 0 },
{"enable-mouse-pointer", false, OPTION_STRING, "/sim/startup/mouse-pointer", false, "enabled", 0 },
{"disable-random-objects", false, OPTION_BOOL, "/sim/rendering/random-objects", false, "", 0 },
{"enable-random-objects", false, OPTION_BOOL, "/sim/rendering/random-objects", true, "", 0 },
- {"disable-real-weather-fetch", false, OPTION_BOOL, "/environment/params/real-world-weather-fetch", false, "", 0 },
- {"enable-real-weather-fetch", false, OPTION_BOOL, "/environment/params/real-world-weather-fetch", true, "", 0 },
+ {"disable-real-weather-fetch", false, OPTION_BOOL, "/environment/realwx/enabled", false, "", 0 },
+ {"enable-real-weather-fetch", false, OPTION_BOOL, "/environment/realwx/enabled", true, "", 0 },
{"metar", true, OPTION_STRING, "/environment/metar/data", false, "", 0 },
{"disable-ai-models", false, OPTION_BOOL, "/sim/ai/enabled", false, "", 0 },
{"enable-ai-models", false, OPTION_BOOL, "/sim/ai/enabled", true, "", 0 },
+ {"disable-ai-traffic", false, OPTION_BOOL, "/sim/traffic-manager/enabled", false, "", 0 },
+ {"enable-ai-traffic", false, OPTION_BOOL, "/sim/traffic-manager/enabled", true, "", 0 },
{"disable-freeze", false, OPTION_BOOL, "/sim/freeze/master", false, "", 0 },
{"enable-freeze", false, OPTION_BOOL, "/sim/freeze/master", true, "", 0 },
{"disable-fuel-freeze", false, OPTION_BOOL, "/sim/freeze/fuel", false, "", 0 },
{"enable-fuel-freeze", false, OPTION_BOOL, "/sim/freeze/fuel", true, "", 0 },
{"disable-clock-freeze", false, OPTION_BOOL, "/sim/freeze/clock", false, "", 0 },
{"enable-clock-freeze", false, OPTION_BOOL, "/sim/freeze/clock", true, "", 0 },
- {"disable-hud-3d", false, OPTION_BOOL, "/sim/hud/enable3d", false, "", 0 },
- {"enable-hud-3d", false, OPTION_BOOL, "/sim/hud/enable3d", true, "", 0 },
+ {"disable-hud-3d", false, OPTION_BOOL, "/sim/hud/enable3d[1]", false, "", 0 },
+ {"enable-hud-3d", false, OPTION_BOOL, "/sim/hud/enable3d[1]", true, "", 0 },
{"disable-anti-alias-hud", false, OPTION_BOOL, "/sim/hud/color/antialiased", false, "", 0 },
{"enable-anti-alias-hud", false, OPTION_BOOL, "/sim/hud/color/antialiased", true, "", 0 },
{"control", true, OPTION_STRING, "/sim/control-mode", false, "", 0 },
{"disable-auto-coordination", false, OPTION_BOOL, "/sim/auto-coordination", false, "", 0 },
{"enable-auto-coordination", false, OPTION_BOOL, "/sim/auto-coordination", true, "", 0 },
{"browser-app", true, OPTION_STRING, "/sim/startup/browser-app", false, "", 0 },
- {"disable-hud", false, OPTION_BOOL, "/sim/hud/visibility", false, "", 0 },
- {"enable-hud", false, OPTION_BOOL, "/sim/hud/visibility", true, "", 0 },
+ {"disable-hud", false, OPTION_BOOL, "/sim/hud/visibility[1]", false, "", 0 },
+ {"enable-hud", false, OPTION_BOOL, "/sim/hud/visibility[1]", true, "", 0 },
{"disable-panel", false, OPTION_BOOL, "/sim/panel/visibility", false, "", 0 },
{"enable-panel", false, OPTION_BOOL, "/sim/panel/visibility", true, "", 0 },
{"disable-sound", false, OPTION_BOOL, "/sim/sound/working", false, "", 0 },
{"enable-skyblend", false, OPTION_BOOL, "/sim/rendering/skyblend", true, "", 0 },
{"disable-textures", false, OPTION_BOOL, "/sim/rendering/textures", false, "", 0 },
{"enable-textures", false, OPTION_BOOL, "/sim/rendering/textures", true, "", 0 },
- {"texture-filtering", false, OPTION_INT, "/sim/rendering/filtering", 1, "", 0 },
+ {"texture-filtering", false, OPTION_INT, "/sim/rendering/filtering", 1, "", 0 },
{"disable-wireframe", false, OPTION_BOOL, "/sim/rendering/wireframe", false, "", 0 },
{"enable-wireframe", false, OPTION_BOOL, "/sim/rendering/wireframe", true, "", 0 },
{"geometry", true, OPTION_FUNC, "", false, "", fgOptGeometry },
{"joyclient", true, OPTION_CHANNEL, "", false, "", 0 },
{"jsclient", true, OPTION_CHANNEL, "", false, "", 0 },
{"proxy", true, OPTION_FUNC, "", false, "", fgSetupProxy },
- {"callsign", true, OPTION_STRING, "sim/multiplay/callsign", false, "", 0 },
+ {"callsign", true, OPTION_FUNC, "", false, "", fgOptCallSign},
{"multiplay", true, OPTION_CHANNEL, "", false, "", 0 },
+#ifdef FG_HAVE_HLA
+ {"hla", true, OPTION_CHANNEL, "", false, "", 0 },
+#endif
{"trace-read", true, OPTION_FUNC, "", false, "", fgOptTraceRead },
{"trace-write", true, OPTION_FUNC, "", false, "", fgOptTraceWrite },
{"log-level", true, OPTION_FUNC, "", false, "", fgOptLogLevel },
{"ai-scenario", true, OPTION_FUNC, "", false, "", fgOptScenario },
{"parking-id", true, OPTION_FUNC, "", false, "", fgOptParking },
{"version", false, OPTION_FUNC, "", false, "", fgOptVersion },
- {"enable-fpe", false, OPTION_FUNC, "", false, "", fgOptFpe},
- {"fgviewer", false, OPTION_FUNC, "", false, "", fgOptFgviewer},
+ {"enable-fpe", false, OPTION_FUNC, "", false, "", fgOptFpe},
+ {"fgviewer", false, OPTION_FUNC, "", false, "", fgOptFgviewer},
{0}
};
SG_LOG( SG_GENERAL, SG_ALERT, "Bad property assignment: " << arg );
return FG_OPTIONS_ERROR;
}
+ } else if ( arg.find("-psn_") == 0) {
+ // on Mac, when launched from the GUI, we are passed the ProcessSerialNumber
+ // as an argument (and no others). Silently ignore the argument here.
+ return FG_OPTIONS_OK;
} else if ( arg.find( "--" ) == 0 ) {
size_t pos = arg.find( '=' );
string arg_name, arg_value;
line = line.substr( 0, i );
if ( parse_option( line ) == FG_OPTIONS_ERROR ) {
- cerr << endl << "Config file parse error: " << path << " '"
+ cerr << endl << "Config file parse error: " << path << " '"
<< line << "'" << endl;
fgUsage();
exit(-1);
// Print usage message
-void
+void
fgUsage (bool verbose)
{
SGPropertyNode *locale = globals->get_locale();
cout << "Make sure the file options.xml is located in the FlightGear base directory," << endl;
cout << "and the location of the base directory is specified by setting $FG_ROOT or" << endl;
cout << "by adding --fg-root=path as a program argument." << endl;
-
+
exit(-1);
}
tmp.append(", -");
tmp.append(short_name->getStringValue());
}
-
+
if (tmp.size() <= 25) {
msg+= " --";
msg += tmp;