X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Foptions.cxx;h=b4a3bc830f01596d1678689f0b6c07bc48456a3e;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=1b5d7325b1f0010b2b0edc80d3cd5d560af0a697;hpb=20b58fd9ab33329fa31216207253d32688e65f02;p=flightgear.git diff --git a/src/Main/options.cxx b/src/Main/options.cxx index 1b5d7325b..b4a3bc830 100644 --- a/src/Main/options.cxx +++ b/src/Main/options.cxx @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -56,6 +57,7 @@ #include "util.hxx" #include "viewmgr.hxx" #include
+#include #include #include @@ -97,6 +99,8 @@ atoi( const string& str ) return ::atoi( str.c_str() ); } +static int fgSetupProxy( const char *arg ); + /** * Set a few fail-safe default property values. * @@ -118,7 +122,7 @@ fgSetDefaults () // 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); @@ -185,8 +189,8 @@ fgSetDefaults () // 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); @@ -220,7 +224,7 @@ fgSetDefaults () // 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"); @@ -244,6 +248,8 @@ fgSetDefaults () 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 @@ -355,7 +361,7 @@ parse_time(const string& time_in) { // 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; @@ -493,7 +499,7 @@ parse_time_offset( const string& time_str) { } -// Parse --fov=x.xx type option +// Parse --fov=x.xx type option static double parse_fov( const string& arg ) { double fov = atof(arg); @@ -520,7 +526,7 @@ parse_fov( const string& 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} // @@ -895,12 +901,18 @@ fgOptStartDateGmt( const char *arg ) 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; @@ -981,7 +993,7 @@ fgOptViewOffset( const char *arg ) } 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... @@ -994,18 +1006,14 @@ fgOptViewOffset( const char *arg ) static int fgOptVisibilityMeters( const char *arg ) { - double visibility = atof( arg ); - fgDefaultWeatherValue("visibility-m", visibility); - fgSetDouble("/environment/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); - fgSetDouble("/environment/visibility-m", visibility); + Environment::Presets::VisibilitySingleton::instance()->preset( atof( arg ) * 5280.0 * SG_FEET_TO_METER ); return FG_OPTIONS_OK; } @@ -1016,7 +1024,7 @@ fgOptRandomWind( const char *arg ) 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; } @@ -1028,14 +1036,14 @@ fgOptWind( const char *arg ) 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; } @@ -1052,9 +1060,7 @@ fgOptCeiling( const char *arg ) 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; } @@ -1256,6 +1262,26 @@ fgOptFgviewer(const char* arg) 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 fgOptionMap; @@ -1297,7 +1323,7 @@ struct OptionDesc { 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 }, @@ -1314,22 +1340,24 @@ struct OptionDesc { {"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 }, @@ -1399,7 +1427,7 @@ struct OptionDesc { {"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 }, @@ -1440,8 +1468,11 @@ struct OptionDesc { {"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 }, @@ -1469,8 +1500,8 @@ struct OptionDesc { {"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} }; @@ -1552,6 +1583,10 @@ parse_option (const string& arg) 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; @@ -1730,7 +1765,7 @@ fgParseOptions (const string& path) { 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); @@ -1741,7 +1776,7 @@ fgParseOptions (const string& path) { // Print usage message -void +void fgUsage (bool verbose) { SGPropertyNode *locale = globals->get_locale(); @@ -1758,7 +1793,7 @@ fgUsage (bool verbose) 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); } @@ -1802,7 +1837,7 @@ fgUsage (bool verbose) tmp.append(", -"); tmp.append(short_name->getStringValue()); } - + if (tmp.size() <= 25) { msg+= " --"; msg += tmp;