//
// Written by Curtis Olson, started April 1998.
//
-// Copyright (C) 1998 Curtis L. Olson - curt@me.umn.edu
+// Copyright (C) 1998 Curtis L. Olson - http://www.flightgear.org/~curt
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// #include <Airports/simple.hxx>
// #include <Cockpit/cockpit.hxx>
// #include <FDM/flight.hxx>
-// #include <FDM/UIUCModel/uiuc_aircraftdir.h>
#include <Autopilot/route_mgr.hxx>
#include <GUI/gui.h>
// fgSetString("/sim/startup/mouse-pointer", "disabled");
fgSetString("/sim/control-mode", "joystick");
fgSetBool("/sim/auto-coordination", false);
-#if !defined(WIN32)
- fgSetString("/sim/startup/browser-app", "netscape");
-#else
+#if defined(WIN32)
fgSetString("/sim/startup/browser-app", "webrun.bat");
+#elif defined(__APPLE__)
+ fgSetString("/sim/startup/browser-app", "open");
+#elif defined(sgi)
+ fgSetString("/sim/startup/browser-app", "launchWebJumper");
+#else
+ char *envp = ::getenv( "WEBBROWSER" );
+ if (!envp) envp = "netscape";
+ fgSetString("/sim/startup/browser-app", envp);
#endif
fgSetString("/sim/logging/priority", "alert");
fgSetBool("/sim/hud/enable3d", true);
fgSetBool("/sim/hud/visibility", false);
fgSetBool("/sim/panel/visibility", true);
- fgSetBool("/sim/sound/audible", true);
+ fgSetBool("/sim/sound/pause", false);
// Flight Model options
fgSetString("/sim/flight-model", "jsb");
// at this stage.
// Parse --wp=ID[@alt]
-static bool
+static void
parse_wp( const string& arg ) {
- string_list *waypoints = globals->get_initial_waypoints();
- if (!waypoints)
- waypoints = new string_list;
- waypoints->push_back(arg);
- globals->set_initial_waypoints(waypoints);
+ string_list *waypoints = globals->get_initial_waypoints();
+ if (!waypoints) {
+ waypoints = new string_list;
+ }
+ waypoints->push_back(arg);
+ globals->set_initial_waypoints(waypoints);
}
fgSetString("/sim/presets/airport-id", "");
fgSetString("/sim/presets/vor-id", "");
fgSetString("/sim/presets/ndb-id", "");
+ fgSetString("/sim/presets/carrier", "");
+ fgSetString("/sim/presets/parkpos", "");
fgSetString("/sim/presets/fix", "");
}
return FG_OPTIONS_OK;
}
+static int
+fgOptCarrier( const char * arg )
+{
+ clearLocation();
+ fgSetString("/sim/presets/carrier", arg);
+ return FG_OPTIONS_OK;
+}
+
+static int
+fgOptParkpos( const char * arg )
+{
+ fgSetString("/sim/presets/parkpos", arg);
+ return FG_OPTIONS_OK;
+}
+
static int
fgOptFIX( const char * arg )
{
{
double radial, freq;
if (parse_colon(arg, &radial, &freq))
- fgSetDouble("/radios/nav[0]/radials/selected-deg", radial);
- fgSetDouble("/radios/nav[0]/frequencies/selected-mhz", freq);
+ fgSetDouble("/instrumentation/nav[0]/radials/selected-deg", radial);
+ fgSetDouble("/instrumentation/nav[0]/frequencies/selected-mhz", freq);
return FG_OPTIONS_OK;
}
{
double radial, freq;
if (parse_colon(arg, &radial, &freq))
- fgSetDouble("/radios/nav[1]/radials/selected-deg", radial);
- fgSetDouble("/radios/nav[1]/frequencies/selected-mhz", freq);
+ fgSetDouble("/instrumentation/nav[1]/radials/selected-deg", radial);
+ fgSetDouble("/instrumentation/nav[1]/frequencies/selected-mhz", freq);
return FG_OPTIONS_OK;
}
if (opt == "nav1") {
fgSetInt("/instrumentation/dme/switch-position", 1);
fgSetString("/instrumentation/dme/frequencies/source",
- "/radios/nav[0]/frequencies/selected-mhz");
+ "/instrumentation/nav[0]/frequencies/selected-mhz");
} else if (opt == "nav2") {
fgSetInt("/instrumentation/dme/switch-position", 3);
fgSetString("/instrumentation/dme/frequencies/source",
- "/radios/nav[1]/frequencies/selected-mhz");
+ "/instrumentation/nav[1]/frequencies/selected-mhz");
} else {
fgSetInt("/instrumentation/dme/switch-position", 2);
fgSetString("/instrumentation/dme/frequencies/source",
return FG_OPTIONS_OK;
}
+static int
+fgOptLivery( const char *arg )
+{
+ string opt = arg;
+ string livery_path = "livery/" + opt;
+ fgSetString("/sim/model/texture-path", livery_path.c_str() );
+ return FG_OPTIONS_OK;
+}
+
static map<string,size_t> fgOptionMap;
/*
{"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-ai-models", false, OPTION_BOOL, "/sim/ai/enabled", false, "", 0 },
+ {"enable-ai-models", false, OPTION_BOOL, "/sim/ai/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-hud", false, OPTION_BOOL, "/sim/hud/visibility", 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/audible", false, "", 0 },
- {"enable-sound", false, OPTION_BOOL, "/sim/sound/audible", true, "", 0 },
+ {"disable-sound", false, OPTION_BOOL, "/sim/sound/pause", true, "", 0 },
+ {"enable-sound", false, OPTION_BOOL, "/sim/sound/pause", false, "", 0 },
{"airport", true, OPTION_STRING, "/sim/presets/airport-id", false, "", 0 },
{"airport-id", true, OPTION_STRING, "/sim/presets/airport-id", false, "", 0 },
{"runway", true, OPTION_STRING, "/sim/presets/runway", false, "", 0 },
{"vor", true, OPTION_FUNC, "", false, "", fgOptVOR },
{"ndb", true, OPTION_FUNC, "", false, "", fgOptNDB },
+ {"carrier", true, OPTION_FUNC, "", false, "", fgOptCarrier },
+ {"parkpos", true, OPTION_FUNC, "", false, "", fgOptParkpos },
{"fix", true, OPTION_FUNC, "", false, "", fgOptFIX },
{"offset-distance", true, OPTION_DOUBLE, "/sim/presets/offset-distance", false, "", 0 },
{"offset-azimuth", true, OPTION_DOUBLE, "/sim/presets/offset-azimuth", false, "", 0 },
{"enable-specular-highlight", false, OPTION_BOOL, "/sim/rendering/specular-highlight", true, "", 0 },
{"disable-clouds", false, OPTION_BOOL, "/environment/clouds/status", false, "", 0 },
{"enable-clouds", false, OPTION_BOOL, "/environment/clouds/status", true, "", 0 },
-#ifdef FG_USE_CLOUDS_3D
- {"disable-clouds3d", false, OPTION_BOOL, "/sim/rendering/clouds3d", false, "", 0 },
- {"enable-clouds3d", false, OPTION_BOOL, "/sim/rendering/clouds3d", true, "", 0 },
-#endif
+ {"disable-clouds3d", false, OPTION_BOOL, "/sim/rendering/clouds3d-enable", false, "", 0 },
+ {"enable-clouds3d", false, OPTION_BOOL, "/sim/rendering/clouds3d-enable", true, "", 0 },
{"fov", true, OPTION_FUNC, "", false, "", fgOptFov },
+ {"aspect-ratio-multiplier", true, OPTION_DOUBLE, "/sim/current-view/aspect-ratio-multiplier", false, "", 0 },
{"disable-fullscreen", false, OPTION_BOOL, "/sim/startup/fullscreen", false, "", 0 },
{"enable-fullscreen", false, OPTION_BOOL, "/sim/startup/fullscreen", true, "", 0 },
{"shading-flat", false, OPTION_BOOL, "/sim/rendering/shading", false, "", 0 },
{"start-date-gmt", true, OPTION_FUNC, "", false, "", fgOptStartDateGmt },
{"hud-tris", false, OPTION_STRING, "/sim/hud/frame-stat-type", false, "tris", 0 },
{"hud-culled", false, OPTION_STRING, "/sim/hud/frame-stat-type", false, "culled", 0 },
- {"atc610x", true, OPTION_CHANNEL, "", false, "dummy", 0 },
+ {"atcsim", true, OPTION_CHANNEL, "", false, "dummy", 0 },
{"atlas", true, OPTION_CHANNEL, "", false, "", 0 },
{"httpd", true, OPTION_CHANNEL, "", false, "", 0 },
#ifdef FG_JPEG_SERVER
{"config", true, OPTION_FUNC, "", false, "", fgOptConfig },
{"aircraft", true, OPTION_STRING, "/sim/aircraft", false, "", 0 },
{"failure", true, OPTION_FUNC, "", false, "", fgOptFailure },
- {"com1", true, OPTION_DOUBLE, "/radios/comm[0]/frequencies/selected-mhz", false, "", 0 },
- {"com2", true, OPTION_DOUBLE, "/radios/comm[1]/frequencies/selected-mhz", false, "", 0 },
+ {"com1", true, OPTION_DOUBLE, "/instrumentation/comm[0]/frequencies/selected-mhz", false, "", 0 },
+ {"com2", true, OPTION_DOUBLE, "/instrumentation/comm[1]/frequencies/selected-mhz", false, "", 0 },
{"nav1", true, OPTION_FUNC, "", false, "", fgOptNAV1 },
{"nav2", true, OPTION_FUNC, "", false, "", fgOptNAV2 },
{"adf", true, OPTION_FUNC, "", false, "", fgOptADF },
{"dme", true, OPTION_FUNC, "", false, "", fgOptDME },
+ {"min-status", true, OPTION_STRING, "/sim/aircraft-min-status", false, "all", 0 },
+ {"livery", true, OPTION_FUNC, "", false, "", fgOptLivery },
{0}
};
#endif
// catch extraneous (DOS) line ending character
- if ( line[line.length() - 1] < 32 ) {
- line = line.substr( 0, line.length()-1 );
- }
+ int i;
+ for (i = line.length(); i > 0; i--)
+ if (line[i - 1] > 32)
+ break;
+ line = line.substr( 0, i );
if ( parse_option( line ) == FG_OPTIONS_ERROR ) {
cerr << endl << "Config file parse error: " << path << " '"
#endif
}
+// A simple function to return an integer depending on the position
+// of the status string within the array in order to determine the hierarchy.
+unsigned int getNumMaturity(const char * str)
+{
+ // changes should also be reflected in $FG_ROOT/data/options.xml &
+ // $FG_ROOT/data/Translations/string-default.xml
+ const char levels[][20]= {"alpha","beta","early-production","production",0};
+
+ for (unsigned int i=0; i<(sizeof(levels)/sizeof(levels[0])-1);i++)
+ if (strcmp(str,levels[i])==0)
+ return i;
+
+ return 0;
+};
+
+
static void fgSearchAircraft(const SGPath &path, string_list &aircraft,
bool recursive)
-{
+{
+
ulDirEnt* dire;
ulDir *dirp = ulOpenDir(path.str().c_str());
if (dirp == NULL) {
- cerr << "Unable to open aircraft directory." << endl;
+ cerr << "Unable to open aircraft directory '" << path.str() << '\'' << endl;
exit(-1);
}
}
SGPropertyNode *desc = NULL;
+ SGPropertyNode *status = NULL;
+
SGPropertyNode *node = root.getNode("sim");
if (node) {
desc = node->getNode("description");
+ // if a status tag is found, read it in
+ if (node->hasValue("status"))
+ status = node->getNode("status");
}
char cstr[96];
+ //additionally display status information where it is available
+
if (strlen(dire->d_name) <= 27) {
snprintf(cstr, 96, " %-27s %s", dire->d_name,
- (desc) ? desc->getStringValue() : "" );
+ (desc) ? desc->getStringValue() : "");
} else {
snprintf(cstr, 96, " %-27s\n%32c%s", dire->d_name, ' ',
- (desc) ? desc->getStringValue() : "" );
+ (desc) ? desc->getStringValue() : "");
}
- aircraft.push_back(cstr);
- }
+ SGPropertyNode * required_status
+ = fgGetNode ("/sim/aircraft-min-status", true);
+
+ // If the node holds the value "all", then there wasn't any status
+ // level specified, so we simply go ahead and output ALL aircraft
+ if (strcmp(required_status->getStringValue(),"all")==0) {
+ aircraft.push_back(cstr);
+ }
+ else
+ {
+ // If the node doesn't hold "all" as its value, then we are supposed
+ // to show only aircraft meeting specific status (development status)
+ // requirements:
+
+ if (node->hasValue("status")) {
+ //Compare (minimally) required status level with actual aircraft status:
+ if ( getNumMaturity(status->getStringValue() ) >=
+ getNumMaturity(required_status->getStringValue() ) )
+ aircraft.push_back(cstr); }
+
+ }
+
+
+ }
}
ulCloseDir(dirp);
}
-
/*
* Search in the current directory, and in on directory deeper
* for <aircraft>-set.xml configuration files and show the aircaft name