X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FMain%2Foptions.cxx;h=e572ebf84c660b2c1e1a7913506270e7bb052655;hb=fdbfd6fd0b789eecf2c532d048a75d15f8d35ad8;hp=dae9342aab23c8182be2c7992e90dfbac27f280d;hpb=a89a28c4e62a63e05b6b889274fa848ea2bda007;p=flightgear.git diff --git a/src/Main/options.cxx b/src/Main/options.cxx index dae9342aa..e572ebf84 100644 --- a/src/Main/options.cxx +++ b/src/Main/options.cxx @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include // rint() #include @@ -38,20 +40,12 @@ #include #include -#include - #include #include #include #include #include #include - -// #include -// #include -// #include -// #include - #include #include @@ -120,6 +114,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); @@ -530,6 +525,14 @@ parse_fov( const string& arg ) { static bool add_channel( const string& type, const string& channel_str ) { + // This check is neccessary to prevent fgviewer from segfaulting when given + // weird options. (It doesn't run the full initailization) + if(!globals->get_channel_options_list()) + { + SG_LOG(SG_GENERAL, SG_ALERT, "Option " << type << "=" << channel_str + << " ignored."); + return false; + } SG_LOG(SG_GENERAL, SG_INFO, "Channel string = " << channel_str ); globals->get_channel_options_list()->push_back( type + "," + channel_str ); return true; @@ -770,7 +773,7 @@ fgOptRoc( const char *arg ) static int fgOptFgRoot( const char *arg ) { - globals->set_fg_root(arg); + // this option is dealt with by fgInitFGRoot return FG_OPTIONS_OK; } @@ -781,6 +784,13 @@ fgOptFgScenery( const char *arg ) return FG_OPTIONS_OK; } +static int +fgOptFgAircraft(const char* arg) +{ + // this option is dealt with by fgInitFGAircraft + return FG_OPTIONS_OK; +} + static int fgOptFov( const char *arg ) { @@ -1337,6 +1347,7 @@ struct OptionDesc { {"roc", true, OPTION_FUNC, "", false, "", fgOptRoc }, {"fg-root", true, OPTION_FUNC, "", false, "", fgOptFgRoot }, {"fg-scenery", true, OPTION_FUNC, "", false, "", fgOptFgScenery }, + {"fg-aircraft", true, OPTION_FUNC, "", false, "", fgOptFgAircraft }, {"fdm", true, OPTION_STRING, "/sim/flight-model", false, "", 0 }, {"aero", true, OPTION_STRING, "/sim/aero", false, "", 0 }, {"aircraft-dir", true, OPTION_STRING, "/sim/aircraft-dir", false, "", 0 }, @@ -1572,6 +1583,7 @@ parse_option (const string& arg) } break; case OPTION_CHANNEL: + // XXX return value of add_channel should be checked? if ( pt->has_param && !arg_value.empty() ) { add_channel( pt->option, arg_value ); } else if ( !pt->has_param && arg_value.empty() ) { @@ -1619,7 +1631,7 @@ fgParseArgs (int argc, char **argv) bool verbose = false; bool help = false; - SG_LOG(SG_GENERAL, SG_INFO, "Processing command line arguments"); + SG_LOG(SG_GENERAL, SG_ALERT, "Processing command line arguments"); for (int i = 1; i < argc; i++) { string arg = argv[i]; @@ -1639,14 +1651,21 @@ fgParseArgs (int argc, char **argv) fgOptLogLevel( "alert" ); SGPath path( globals->get_fg_root() ); path.append("Aircraft"); - fgShowAircraft(path, true); + fgShowAircraft(path); exit(0); } else if (result == FG_OPTIONS_SHOW_SOUND_DEVICES) { SGSoundMgr smgr; + + smgr.init(); + string vendor = smgr.get_vendor(); + string renderer = smgr.get_renderer(); + cout << renderer << " provided by " << vendor << endl; + cout << endl << "No. Device" << endl; + vector devices = smgr.get_available_devices(); - for (int i=0; i::size_type i=0; id_isdir) { - if (recursive && strcmp("CVS", dire->d_name) - && strcmp(".", dire->d_name) && strcmp("..", dire->d_name)) - { - SGPath next = path; - next.append(dire->d_name); - - fgSearchAircraft(next, aircraft, true); - } - } else if ((ptr = strstr(dire->d_name, "-set.xml")) && (ptr[8] == '\0')) { - - SGPath afile = path; - afile.append(dire->d_name); - - *ptr = '\0'; - - SGPropertyNode root; - try { - readProperties(afile.str(), &root); - } catch (...) { - continue; - } - - 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"); - } - - //additionally display status information where it is available - - string descStr(" "); - descStr += dire->d_name; - if (desc) { - if (descStr.size() <= 27+3) { - descStr.append(29+3-descStr.size(), ' '); - } else { - descStr += '\n'; - descStr.append( 32, ' '); - } - descStr += desc->getStringValue(); - } - - 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(descStr); - } - 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(descStr); } - - } - - - } - } - - ulCloseDir(dirp); -} - -/* - * Search in the current directory, and in on directory deeper - * for -set.xml configuration files and show the aircaft name - * and the contents of the tag in a sorted manner. - * - * @parampath the directory to search for configuration files - * @param recursive defines whether the directory should be searched recursively - */ -void fgShowAircraft(const SGPath &path, bool recursive) { - string_list aircraft; - - fgSearchAircraft( path, aircraft, recursive ); - - sort(aircraft.begin(), aircraft.end()); - SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on Windows - cout << "Available aircraft:" << endl; - for ( unsigned int i = 0; i < aircraft.size(); i++ ) { - cout << aircraft[i] << endl; - } -#ifdef _MSC_VER - cout << "Hit a key to continue..." << endl; - cin.get(); -#endif -}