#include <simgear/timing/sg_time.hxx>
#include <Include/general.hxx>
+#include <Airports/simple.hxx>
#include <Cockpit/cockpit.hxx>
#include <FDM/flight.hxx>
#include <FDM/UIUCModel/uiuc_aircraftdir.h>
# include <NetworkOLK/network.h>
#endif
+#include "fg_init.hxx"
#include "globals.hxx"
#include "options.hxx"
#include "views.hxx"
#if defined( WIN32 )
fg_root = "\\FlightGear";
-#elif defined( MACOS )
+#elif defined( macintosh )
fg_root = "";
#else
fg_root = PKGLIBDIR;
fg_scenery = "";
}
- airport_id = "P13"; // default airport id
+ airport_id = "KPAO"; // default airport id
net_id = "Johnney"; // default pilot's name
// initialize port config string list
}
+// Parse --wp=ID[,alt]
+bool fgOPTIONS::parse_wp( const string& arg ) {
+ string id, alt_str;
+ double alt = 0.0;
+
+ int pos = arg.find( "@" );
+ if ( pos != string::npos ) {
+ id = arg.substr( 0, pos );
+ alt_str = arg.substr( pos + 1 );
+ // cout << "id str = " << id << " alt str = " << alt_str << endl;
+ alt = atof( alt_str.c_str() );
+ if ( units == FG_UNITS_FEET ) {
+ alt *= FEET_TO_METER;
+ }
+ } else {
+ id = arg;
+ }
+
+ FGAirport a;
+ if ( fgFindAirportID( id, &a ) ) {
+ SGWayPoint wp( a.longitude, a.latitude, alt, SGWayPoint::WGS84, id );
+ globals->get_route()->add_waypoint( wp );
+
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
// Parse a single option
int fgOPTIONS::parse_option( const string& arg ) {
// General Options
sound = true;
} else if ( arg.find( "--airport-id=") != string::npos ) {
airport_id = arg.substr( 13 );
+ current_properties.setStringValue("/position/airport-id", airport_id);
} else if ( arg.find( "--lon=" ) != string::npos ) {
lon = parse_degree( arg.substr(6) );
airport_id = "";
+ current_properties.setDoubleValue("/position/longitude", lon);
+ current_properties.setStringValue("/position/airport-id", airport_id);
} else if ( arg.find( "--lat=" ) != string::npos ) {
lat = parse_degree( arg.substr(6) );
airport_id = "";
+ current_properties.setDoubleValue("/position/latitude", lat);
+ current_properties.setStringValue("/position/airport-id", airport_id);
} else if ( arg.find( "--altitude=" ) != string::npos ) {
if ( units == FG_UNITS_FEET ) {
altitude = atof( arg.substr(11) ) * FEET_TO_METER;
} else {
altitude = atof( arg.substr(11) );
}
+ current_properties.setDoubleValue("/position/altitude", altitude);
} else if ( arg.find( "--uBody=" ) != string::npos ) {
vkcas=mach=-1;
if ( units == FG_UNITS_FEET ) {
} else {
uBody = atof( arg.substr(8) ) * FEET_TO_METER;
}
+ current_properties.setDoubleValue("/velocities/speed-north", uBody);
} else if ( arg.find( "--vBody=" ) != string::npos ) {
vkcas=mach=-1;
if ( units == FG_UNITS_FEET ) {
} else {
vBody = atof( arg.substr(8) ) * FEET_TO_METER;
}
+ current_properties.setDoubleValue("/velocities/speed-east", vBody);
} else if ( arg.find( "--wBody=" ) != string::npos ) {
vkcas=mach=-1;
if ( units == FG_UNITS_FEET ) {
} else {
wBody = atof( arg.substr(8) ) * FEET_TO_METER;
}
+ current_properties.setDoubleValue("/velocities/speed-down", wBody);
} else if ( arg.find( "--vc=" ) != string::npos) {
mach=-1;
vkcas=atof( arg.substr(5) );
mach=atof( arg.substr(7) );
} else if ( arg.find( "--heading=" ) != string::npos ) {
heading = atof( arg.substr(10) );
+ current_properties.setDoubleValue("/orientation/heading", heading);
} else if ( arg.find( "--roll=" ) != string::npos ) {
roll = atof( arg.substr(7) );
+ current_properties.setDoubleValue("/orientation/roll", roll);
} else if ( arg.find( "--pitch=" ) != string::npos ) {
pitch = atof( arg.substr(8) );
+ current_properties.setDoubleValue("/orientation/pitch", pitch);
} else if ( arg.find( "--fg-root=" ) != string::npos ) {
fg_root = arg.substr( 10 );
} else if ( arg.find( "--fg-scenery=" ) != string::npos ) {
fg_scenery = arg.substr( 13 );
} else if ( arg.find( "--fdm=" ) != string::npos ) {
flight_model = parse_fdm( arg.substr(6) );
+ current_properties.setIntValue("/sim/flight-model", flight_model);
if((flight_model == FGInterface::FG_JSBSIM) && (get_trim_mode() == 0)) {
set_trim_mode(1);
} else {
}
} else if ( arg.find( "--aircraft=" ) != string::npos ) {
aircraft = arg.substr(11);
+ current_properties.setStringValue("/sim/aircraft", aircraft);
} else if ( arg.find( "--aircraft-dir=" ) != string::npos ) {
aircraft_dir = arg.substr(15); // (UIUC)
} else if ( arg.find( "--model-hz=" ) != string::npos ) {
parse_channel( "garmin", arg.substr(9) );
} else if ( arg.find( "--nmea=" ) != string::npos ) {
parse_channel( "nmea", arg.substr(7) );
+ } else if ( arg.find( "--props=" ) != string::npos ) {
+ parse_channel( "props", arg.substr(8) );
} else if ( arg.find( "--pve=" ) != string::npos ) {
parse_channel( "pve", arg.substr(6) );
} else if ( arg.find( "--ray=" ) != string::npos ) {
current_properties.setStringValue(name.c_str(), value);
FG_LOG(FG_GENERAL, FG_INFO, "Setting default value of property "
<< name << " to \"" << value << '"');
+ } else if ( arg.find( "--wp=" ) != string::npos ) {
+ parse_wp( arg.substr( 5 ) );
} else {
FG_LOG( FG_GENERAL, FG_ALERT, "Unknown option '" << arg << "'" );
return FG_OPTIONS_ERROR;
}
+// Scan the command line options for an fg_root definition and set
+// just that.
+int fgOPTIONS::scan_command_line_for_root( int argc, char **argv ) {
+ int i = 1;
+ int result;
+
+ FG_LOG(FG_GENERAL, FG_INFO, "Processing command line arguments");
+
+ while ( i < argc ) {
+ FG_LOG( FG_GENERAL, FG_DEBUG, "argv[" << i << "] = " << argv[i] );
+
+ string arg = argv[i];
+ if ( arg.find( "--fg-root=" ) != string::npos ) {
+ fg_root = arg.substr( 10 );
+ }
+
+ i++;
+ }
+
+ return FG_OPTIONS_OK;
+}
+
+
+// Scan the config file for an fg_root definition and set just that.
+int fgOPTIONS::scan_config_file_for_root( const string& path ) {
+ fg_gzifstream in( path );
+ if ( !in.is_open() )
+ return(FG_OPTIONS_ERROR);
+
+ FG_LOG( FG_GENERAL, FG_INFO, "Processing config file: " << path );
+
+ in >> skipcomment;
+#ifndef __MWERKS__
+ while ( ! in.eof() ) {
+#else
+ char c = '\0';
+ while ( in.get(c) && c != '\0' ) {
+ in.putback(c);
+#endif
+ string line;
+
+#ifdef GETLINE_NEEDS_TERMINATOR
+ getline( in, line, '\n' );
+#elif defined( macintosh )
+ getline( in, line, '\r' );
+#else
+ getline( in, line );
+#endif
+
+ if ( line.find( "--fg-root=" ) != string::npos ) {
+ fg_root = line.substr( 10 );
+ }
+
+ in >> skipcomment;
+ }
+
+ return FG_OPTIONS_OK;
+}
+
+
// Parse the command line options
int fgOPTIONS::parse_command_line( int argc, char **argv ) {
int i = 1;
i++;
}
- return(FG_OPTIONS_OK);
+ return FG_OPTIONS_OK;
}
#ifdef GETLINE_NEEDS_TERMINATOR
getline( in, line, '\n' );
-#elif defined (MACOS)
+#elif defined( macintosh )
getline( in, line, '\r' );
#else
getline( in, line );
cout << "\t--notrim: Do NOT attempt to trim the model when initializing JSBsim" << endl;
cout << endl;
//(UIUC)
- cout <<"Aircraft model directory" << endl;
+ cout <<"Aircraft model directory:" << endl;
cout <<"\t--aircraft-dir=<path> path is relative to the path of the executable" << endl;
cout << endl;
cout << "\t--start-date-lat=yyyy:mm:dd:hh:mm:ss: specify a starting" << endl
<< "\t\tdate/time. Uses Local Aircraft Time" << endl;
#ifdef FG_NETWORK_OLK
- cout << "" << endl;
+ cout << endl;
cout << "Network Options:" << endl;
cout << "\t--enable-network-olk: enable Multipilot mode" << endl;
cout << "\t--net-hud: Hud displays network info" << endl;
cout << "\t--net-id=name: specify your own callsign" << endl;
#endif
+
+ cout << endl;
+ cout << "Route/Way Point Options:" << endl;
+ cout << "\t--wp=ID[@alt]: specify a waypoint for the GC autopilot" << endl;
+ cout << "\t\tYou can specify multiple waypoints (a route) with multiple"
+ << endl;
+ cout << "\t\tinstances of --wp=" << endl;
}