]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/options.cxx
Moved sky code over to simgear.
[flightgear.git] / src / Main / options.cxx
index da93926dbcac000062d3ab130d28a36b2a78b28e..e3c8eeec7ff52269ab2933f5460a7dadb7c4aabe 100644 (file)
@@ -29,7 +29,7 @@
 bool global_fullscreen = true;
 #endif
 
-#include <Include/compiler.h>
+#include <simgear/compiler.h>
 
 #include <math.h>            // rint()
 #include <stdio.h>
@@ -38,16 +38,22 @@ bool global_fullscreen = true;
 
 #include STL_STRING
 
-#include <Include/fg_constants.h>
+#include <simgear/constants.h>
+#include <simgear/debug/logstream.hxx>
+#include <simgear/misc/fgstream.hxx>
+#include <simgear/misc/props.hxx>
+
 #include <Include/general.hxx>
 #include <Cockpit/cockpit.hxx>
-#include <Debug/logstream.hxx>
 #include <FDM/flight.hxx>
-#include <Misc/fgstream.hxx>
+#include <FDM/UIUCModel/uiuc_aircraftdir.h>
+#ifdef FG_NETWORK_OLK
+#  include <NetworkOLK/network.h>
+#endif
 #include <Time/fg_time.hxx>
 
+#include "views.hxx"
 #include "options.hxx"
-#include "fg_serial.hxx"
 
 FG_USING_STD(string);
 FG_USING_NAMESPACE(std);
@@ -78,6 +84,7 @@ atoi( const string& str )
 #endif
 }
 
+
 // Defined the shared options class here
 fgOPTIONS current_options;
 
@@ -140,23 +147,35 @@ fgOPTIONS::fgOPTIONS() :
     roll(0.0),           // roll angle in degrees (Phi)
     pitch(0.424),        // pitch angle in degrees (Theta)
 
+    // Initialize current options velocities to 0.0
+    uBody(0.0), vBody(0.0), wBody(0.0), vkcas(0.0), mach(0.0),
+
     // Miscellaneous
     game_mode(0),
     splash_screen(1),
     intro_music(1),
     mouse_pointer(0),
     pause(0),
+    control_mode(FG_JOYSTICK),
+    auto_coordination(FG_AUTO_COORD_NOT_SPECIFIED),
 
     // Features
     hud_status(1),
     panel_status(0),
     sound(1),
+    anti_alias_hud(0),
 
     // Flight Model options
-    flight_model(FGInterface::FG_LARCSIM),
+    flight_model( FGInterface::FG_LARCSIM ),
+    aircraft( "c172" ),
+    model_hz( NEW_DEFAULT_MODEL_HZ ),
+    speed_up( 1 ),
+    trim(0),
 
     // Rendering options
     fog(FG_FOG_NICEST),  // nicest
+    clouds(false),
+    clouds_asl(5000*FEET_TO_METER),
     fov(55.0),
     fullscreen(0),
     shading(1),
@@ -165,6 +184,8 @@ fgOPTIONS::fgOPTIONS() :
     wireframe(0),
     xsize(640),
     ysize(480),
+    bpp(16),
+    view_mode(FG_VIEW_PILOT),
 
     // Scenery options
     tile_diameter(5),
@@ -175,11 +196,11 @@ fgOPTIONS::fgOPTIONS() :
        
     // Time options
     time_offset(0),
-    start_gst(0),
-    start_lst(0)
 
+    network_olk(false)
 {
     // set initial values/defaults
+    time_offset_type=FG_TIME_SYS_OFFSET;
     char* envp = ::getenv( "FG_ROOT" );
 
     if ( envp != NULL ) {
@@ -200,11 +221,11 @@ fgOPTIONS::fgOPTIONS() :
 #endif
     }
 
-    airport_id = "";  // default airport id
+    airport_id = "";           // default airport id
+    net_id = "Johnney";                // default pilot's name
 
     // initialize port config string list
-    port_options_list.erase ( port_options_list.begin(), 
-                             port_options_list.end() );
+    channel_options_list.clear();
 }
 
 void 
@@ -219,18 +240,21 @@ fgOPTIONS::toggle_panel() {
     
     if( panel_status ) {
        panel_status = false;
+       if ( current_panel != NULL )
+         current_panel->setVisibility(false);
     } else {
        panel_status = true;
+       if ( current_panel != NULL )
+         current_panel->setVisibility(true);
     }
     if ( panel_status ) {
-       if( FGPanel::OurPanel == 0)
-           new FGPanel;
        fov *= 0.4232;
     } else {
        fov *= (1.0 / 0.4232);
     }
-    fgReshape( xsize, ysize);
-    
+    // fgReshape( xsize, ysize);
+    fgReshape( current_view.get_winWidth(), current_view.get_winHeight() );
+
     if( !toggle_pause )
         t->togglePauseMode();
 }
@@ -326,7 +350,7 @@ long int fgOPTIONS::parse_date( const string& date)
     gmt.tm_mday = 0;
     gmt.tm_mon = 0;
     gmt.tm_year = 0;
-    gmt.tm_isdst = 0; // ignore daylight savingtime for the moment
+    gmt.tm_isdst = 0; // ignore daylight savingtime for the moment
     date_str = (char *)date.c_str();
     // get year
     if ( strlen(date_str) ) {
@@ -426,6 +450,18 @@ long int fgOPTIONS::parse_date( const string& date)
 
 
 // parse degree in the form of [+/-]hhh:mm:ss
+void fgOPTIONS::parse_control( const string& mode ) {
+    if ( mode == "joystick" ) {
+       control_mode = FG_JOYSTICK;
+    } else if ( mode == "mouse" ) {
+       control_mode = FG_MOUSE;
+    } else {
+       control_mode = FG_KEYBOARD;
+    }
+}
+
+
+/// parse degree in the form of [+/-]hhh:mm:ss
 double
 fgOPTIONS::parse_degree( const string& degree_str) {
     double result = parse_time( degree_str );
@@ -473,16 +509,18 @@ fgOPTIONS::parse_tile_radius( const string& arg ) {
 // Parse --fdm=abcdefg type option 
 int
 fgOPTIONS::parse_fdm( const string& fm ) {
-    // printf("fdm = %s\n", fm);
+    // cout << "fdm = " << fm << endl;
 
-    if ( fm == "slew" ) {
-       return FGInterface::FG_SLEW;
+    if ( fm == "balloon" ) {
+       return FGInterface::FG_BALLOONSIM;
+    } else if ( fm == "external" ) {
+       return FGInterface::FG_EXTERNAL;
     } else if ( fm == "jsb" ) {
        return FGInterface::FG_JSBSIM;
     } else if ( (fm == "larcsim") || (fm == "LaRCsim") ) {
        return FGInterface::FG_LARCSIM;
-    } else if ( fm == "external" ) {
-       return FGInterface::FG_EXTERNAL;
+    } else if ( fm == "magic" ) {
+       return FGInterface::FG_MAGICCARPET;
     } else {
        FG_LOG( FG_GENERAL, FG_ALERT, "Unknown fdm = " << fm );
        exit(-1);
@@ -507,31 +545,35 @@ fgOPTIONS::parse_fov( const string& arg ) {
 }
 
 
-// Parse serial port option --serial=/dev/ttyS1,nmea,4800,out
+// Parse I/O channel option
+//
+// Format is "--protocol=medium,direction,hz,medium_options,..."
 //
-// Format is "--serial=device,format,baud,direction" where
+//   protocol = { native, nmea, garmin, fgfs, rul, pve, etc. }
+//   medium = { serial, socket, file, etc. }
+//   direction = { in, out, bi }
+//   hz = number of times to process channel per second (floating
+//        point values are ok.
+//
+// Serial example "--nmea=serial,dir,hz,device,baud" where
 // 
-//  device = OS device name to be open()'ed
-//  format = {nmea, garmin,fgfs,rul}
+//  device = OS device name of serial line to be open()'ed
 //  baud = {300, 1200, 2400, ..., 230400}
-//  direction = {in, out, bi}
+//
+// Socket exacmple "--native=socket,dir,hz,machine,port" where
+// 
+//  machine = machine name or ip address if client (leave empty if server)
+//  port = port, leave empty to let system choose
+//
+// File example "--garmin=file,dir,hz,filename" where
+// 
+//  filename = file system file name
 
 bool 
-fgOPTIONS::parse_serial( const string& serial_str ) {
-    string::size_type pos;
-
-    // cout << "Serial string = " << serial_str << endl;
-
-    // a flailing attempt to see if the port config string has a
-    // chance at being valid
-    pos = serial_str.find(",");
-    if ( pos == string::npos ) {
-       FG_LOG( FG_GENERAL, FG_ALERT, 
-               "Malformed serial port configure string" );
-       return false;
-    }
-    
-    port_options_list.push_back( serial_str );
+fgOPTIONS::parse_channel( const string& type, const string& channel_str ) {
+    // cout << "Channel string = " << channel_str << endl;
+
+    channel_options_list.push_back( type + "," + channel_str );
 
     return true;
 }
@@ -563,14 +605,28 @@ int fgOPTIONS::parse_option( const string& arg ) {
        pause = false;  
     } else if ( arg == "--enable-pause" ) {
        pause = true;   
+    } else if ( arg == "--disable-anti-alias-hud" ) {
+       anti_alias_hud = false; 
+    } else if ( arg == "--enable-anti-alias-hud" ) {
+       anti_alias_hud = true;  
+    } else if ( arg.find( "--control=") != string::npos ) {
+       parse_control( arg.substr(10) );
+    } else if ( arg == "--disable-auto-coordination" ) {
+       auto_coordination = FG_AUTO_COORD_DISABLED;     
+    } else if ( arg == "--enable-auto-coordination" ) {
+       auto_coordination = FG_AUTO_COORD_ENABLED;      
     } else if ( arg == "--disable-hud" ) {
        hud_status = false;     
     } else if ( arg == "--enable-hud" ) {
        hud_status = true;      
     } else if ( arg == "--disable-panel" ) {
        panel_status = false;
+       if ( current_panel != NULL )
+         current_panel->setVisibility(false);
     } else if ( arg == "--enable-panel" ) {
        panel_status = true;
+       if ( current_panel != NULL )
+         current_panel->setVisibility(true);
        fov *= 0.4232;
     } else if ( arg == "--disable-sound" ) {
        sound = false;
@@ -588,6 +644,34 @@ int fgOPTIONS::parse_option( const string& arg ) {
        } else {
            altitude = atof( arg.substr(11) );
        }
+    } else if ( arg.find( "--uBody=" ) != string::npos ) {
+       vkcas=mach=-1;
+       if ( units == FG_UNITS_FEET ) {
+           uBody = atof( arg.substr(8) );
+       } else {
+           uBody = atof( arg.substr(8) ) * FEET_TO_METER;
+       }
+    } else if ( arg.find( "--vBody=" ) != string::npos ) {
+       vkcas=mach=-1;
+       if ( units == FG_UNITS_FEET ) {
+           vBody = atof( arg.substr(8) );
+       } else {
+           vBody = atof( arg.substr(8) ) * FEET_TO_METER;
+       }
+    } else if ( arg.find( "--wBody=" ) != string::npos ) {
+       vkcas=mach=-1;
+       if ( units == FG_UNITS_FEET ) {
+           wBody = atof( arg.substr(8) );
+       } else {
+           wBody = atof( arg.substr(8) ) * FEET_TO_METER;
+       }
+    } else if ( arg.find( "--vc=" ) != string::npos) {
+       mach=-1;
+       vkcas=atof( arg.substr(5) );
+       cout << "Got vc: " << vkcas << endl;
+    } else if ( arg.find( "--mach=" ) != string::npos) {
+       vkcas=-1;
+       mach=atof( arg.substr(7) );
     } else if ( arg.find( "--heading=" ) != string::npos ) {
        heading = atof( arg.substr(10) );
     } else if ( arg.find( "--roll=" ) != string::npos ) {
@@ -598,12 +682,37 @@ int fgOPTIONS::parse_option( const string& arg ) {
        fg_root = arg.substr( 10 );
     } else if ( arg.find( "--fdm=" ) != string::npos ) {
        flight_model = parse_fdm( arg.substr(6) );
+    if((flight_model == FGInterface::FG_JSBSIM) && (get_trim_mode() == 0)) {
+       set_trim_mode(1);
+    } else {
+       set_trim_mode(0);
+    }        
+    } else if ( arg.find( "--aircraft=" ) != string::npos ) {
+       aircraft = arg.substr(11);
+    } else if ( arg.find( "--aircraft-dir=" ) != string::npos ) {
+       aircraft_dir =  arg.substr(15); //  (UIUC)
+    } else if ( arg.find( "--model-hz=" ) != string::npos ) {
+       model_hz = atoi( arg.substr(11) );
+    } else if ( arg.find( "--speed=" ) != string::npos ) {
+       speed_up = atoi( arg.substr(8) );
+    } else if ( arg.find( "--notrim") != string::npos) {
+       trim=-1;
     } else if ( arg == "--fog-disable" ) {
        fog = FG_FOG_DISABLED;  
     } else if ( arg == "--fog-fastest" ) {
        fog = FG_FOG_FASTEST;   
     } else if ( arg == "--fog-nicest" ) {
        fog = FG_FOG_NICEST;    
+    } else if ( arg == "--disable-clouds" ) {
+       clouds = false; 
+    } else if ( arg == "--enable-clouds" ) {
+       clouds = true;  
+    } else if ( arg.find( "--clouds-asl=" ) != string::npos ) {
+       if ( units == FG_UNITS_FEET ) {
+           clouds_asl = atof( arg.substr(13) ) * FEET_TO_METER;
+       } else {
+           clouds_asl = atof( arg.substr(13) );
+       }
     } else if ( arg.find( "--fov=" ) != string::npos ) {
        fov = parse_fov( arg.substr(6) );
     } else if ( arg == "--disable-fullscreen" ) {
@@ -627,19 +736,37 @@ int fgOPTIONS::parse_option( const string& arg ) {
     } else if ( arg == "--enable-wireframe" ) {
        wireframe = true;
     } else if ( arg.find( "--geometry=" ) != string::npos ) {
+       bool geometry_ok = true;
        string geometry = arg.substr( 11 );
-       if ( geometry == "640x480" ) {
+       string::size_type i = geometry.find('x');
+
+       if (i != string::npos) {
+           xsize = atoi(geometry.substr(0, i));
+           ysize = atoi(geometry.substr(i+1));
+           // cout << "Geometry is " << xsize << 'x' << ysize << '\n';
+       } else {
+           geometry_ok = false;
+       }
+
+       if ( xsize <= 0 || ysize <= 0 ) {
            xsize = 640;
            ysize = 480;
-       } else if ( geometry == "800x600" ) {
-           xsize = 800;
-           ysize = 600;
-       } else if ( geometry == "1024x768" ) {
-           xsize = 1024;
-           ysize = 768;
-       } else {
-           FG_LOG( FG_GENERAL, FG_ALERT, "Unknown geometry: " << geometry );
-           exit(-1);
+           geometry_ok = false;
+       }
+
+       if ( !geometry_ok ) {
+           FG_LOG( FG_GENERAL, FG_ALERT, "Unknown geometry: " << geometry );
+           FG_LOG( FG_GENERAL, FG_ALERT,
+                   "Setting geometry to " << xsize << 'x' << ysize << '\n');
+       }
+    } else if ( arg.find( "--bpp=" ) != string::npos ) {
+       string bits_per_pix = arg.substr( 6 );
+       if ( bits_per_pix == "16" ) {
+           bpp = 16;
+       } else if ( bits_per_pix == "24" ) {
+           bpp = 24;
+       } else if ( bits_per_pix == "32" ) {
+           bpp = 32;
        }
     } else if ( arg == "--units-feet" ) {
        units = FG_UNITS_FEET;  
@@ -648,18 +775,65 @@ int fgOPTIONS::parse_option( const string& arg ) {
     } else if ( arg.find( "--tile-radius=" ) != string::npos ) {
        tile_radius = parse_tile_radius( arg.substr(14) );
        tile_diameter = tile_radius * 2 + 1;
-    } else if ( arg.find( "--time-offset=" ) != string::npos ) {
+    } else if ( arg.find( "--time-offset" ) != string::npos ) {
        time_offset = parse_time_offset( (arg.substr(14)) );
-    } else if (arg.find( "--start-date-gmt=") != string::npos ) {
-        start_gst = parse_date( (arg.substr(17)) );
-    } else if (arg.find( "--start-data-lst=") != string::npos ) {
-        start_lst = parse_date( (arg.substr(17)) );
+       //time_offset_type = FG_TIME_SYS_OFFSET;
+    } else if ( arg.find( "--time-match-real") != string::npos ) {
+      //time_offset = parse_time_offset(arg.substr(18));
+       time_offset_type = FG_TIME_SYS_OFFSET;
+    } else if ( arg.find( "--time-match-local") != string::npos ) {
+      //time_offset = parse_time_offset(arg.substr(18));
+       time_offset_type = FG_TIME_LAT_OFFSET;
+    } else if ( arg.find( "--start-date-sys=") != string::npos ) {
+        time_offset = parse_date( (arg.substr(17)) );
+       time_offset_type = FG_TIME_SYS_ABSOLUTE;
+    } else if ( arg.find( "--start-date-lat=") != string::npos ) {
+        time_offset = parse_date( (arg.substr(17)) );
+       time_offset_type = FG_TIME_LAT_ABSOLUTE;
+    } else if ( arg.find( "--start-date-gmt=") != string::npos ) {
+        time_offset = parse_date( (arg.substr(17)) );
+       time_offset_type = FG_TIME_GMT_ABSOLUTE;
+
     } else if ( arg == "--hud-tris" ) {
        tris_or_culled = 0;     
     } else if ( arg == "--hud-culled" ) {
        tris_or_culled = 1;
-    } else if ( arg.find( "--serial=" ) != string::npos ) {
-       parse_serial( arg.substr(9) );
+    } else if ( arg.find( "--native=" ) != string::npos ) {
+       parse_channel( "native", arg.substr(9) );
+    } else if ( arg.find( "--garmin=" ) != 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( "--pve=" ) != string::npos ) {
+       parse_channel( "pve", arg.substr(6) );
+    } else if ( arg.find( "--ray=" ) != string::npos ) {
+       parse_channel( "ray", arg.substr(6) );
+    } else if ( arg.find( "--rul=" ) != string::npos ) {
+       parse_channel( "rul", arg.substr(6) );
+    } else if ( arg.find( "--joyclient=" ) != string::npos ) {
+       parse_channel( "joyclient", arg.substr(12) );
+#ifdef FG_NETWORK_OLK
+    } else if ( arg == "--disable-network-olk" ) {
+       network_olk = false;    
+    } else if ( arg== "--enable-network-olk") {
+       network_olk = true;     
+    } else if ( arg == "--net-hud" ) {
+       net_hud_display = 1;    
+    } else if ( arg.find( "--net-id=") != string::npos ) {
+       net_id = arg.substr( 9 );
+#endif
+    } else if ( arg.find( "--prop:" ) == 0 ) {
+        string assign = arg.substr(7);
+       int pos = assign.find('=');
+       if (pos == arg.npos || pos == 0) {
+           FG_LOG(FG_GENERAL, FG_ALERT, "Bad property assignment: " << arg);
+           return FG_OPTIONS_ERROR;
+       }
+       string name = assign.substr(0, pos);
+       string value = assign.substr(pos + 1);
+       current_properties.setStringValue(name.c_str(), value);
+       FG_LOG(FG_GENERAL, FG_INFO, "Setting default value of property "
+              << name << " to \"" << value << '"');
     } else {
        FG_LOG( FG_GENERAL, FG_ALERT, "Unknown option '" << arg << "'" );
        return FG_OPTIONS_ERROR;
@@ -694,19 +868,27 @@ int fgOPTIONS::parse_command_line( int argc, char **argv ) {
 // Parse config file options
 int fgOPTIONS::parse_config_file( const string& path ) {
     fg_gzifstream in( path );
-    if ( !in )
+    if ( !in.is_open() )
        return(FG_OPTIONS_ERROR);
 
     FG_LOG( FG_GENERAL, FG_INFO, "Processing config file: " << path );
 
     in >> skipcomment;
-    while ( !in.eof() ) {
+#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' );
+        getline( in, line, '\n' );
+#elif defined (MACOS)
+       getline( in, line, '\r' );
 #else
-       getline( in, line );
+        getline( in, line );
 #endif
 
        if ( parse_option( line ) == FG_OPTIONS_ERROR ) {
@@ -724,87 +906,135 @@ int fgOPTIONS::parse_config_file( const string& path ) {
 
 // Print usage message
 void fgOPTIONS::usage ( void ) {
-    printf("Usage: fg [ options ... ]\n");
-    printf("\n");
-
-    printf("General Options:\n");
-    printf("\t--help -h:  print usage\n");
-    printf("\t--fg-root=path:  specify the root path for all the data files\n");
-    printf("\t--disable-game-mode:  disable full-screen game mode\n");
-    printf("\t--enable-game-mode:  enable full-screen game mode\n");
-    printf("\t--disable-splash-screen:  disable splash screen\n");
-    printf("\t--enable-splash-screen:  enable splash screen\n");
-    printf("\t--disable-intro-music:  disable introduction music\n");
-    printf("\t--enable-intro-music:  enable introduction music\n");
-    printf("\t--disable-mouse-pointer:  disable extra mouse pointer\n");
-    printf("\t--enable-mouse-pointer:  enable extra mouse pointer (i.e. for\n");
-    printf("\t\tfull screen voodoo/voodoo-II based cards.)\n");
-    printf("\t--disable-pause:  start out in an active state\n");
-    printf("\t--enable-pause:  start out in a paused state\n");
-    printf("\n");
-
-    printf("Features:\n");
-    printf("\t--disable-hud:  disable heads up display\n");
-    printf("\t--enable-hud:  enable heads up display\n");
-    printf("\t--disable-panel:  disable instrument panel\n");
-    printf("\t--enable-panel:  enable instrumetn panel\n");
-    printf("\t--disable-sound:  disable sound effects\n");
-    printf("\t--enable-sound:  enable sound effects\n");
-    printf("\n");
+    cout << "Usage: fg [ options ... ]" << endl;
+    cout << endl;
+
+    cout << "General Options:" << endl;
+    cout << "\t--help -h:  print usage" << endl;
+    cout << "\t--fg-root=path:  specify the root path for all the data files"
+        << endl;
+    cout << "\t--disable-game-mode:  disable full-screen game mode" << endl;
+    cout << "\t--enable-game-mode:  enable full-screen game mode" << endl;
+    cout << "\t--disable-splash-screen:  disable splash screen" << endl;
+    cout << "\t--enable-splash-screen:  enable splash screen" << endl;
+    cout << "\t--disable-intro-music:  disable introduction music" << endl;
+    cout << "\t--enable-intro-music:  enable introduction music" << endl;
+    cout << "\t--disable-mouse-pointer:  disable extra mouse pointer" << endl;
+    cout << "\t--enable-mouse-pointer:  enable extra mouse pointer (i.e. for"
+        << endl;
+    cout << "\t\tfull screen voodoo/voodoo-II based cards.)" << endl;
+    cout << "\t--disable-pause:  start out in an active state" << endl;
+    cout << "\t--enable-pause:  start out in a paused state" << endl;
+    cout << "\t--control=mode:  primary control mode " 
+        << "(joystick, keyboard, mouse)" << endl;
+    cout << endl;
+
+    cout << "Features:" << endl;
+    cout << "\t--disable-hud:  disable heads up display" << endl;
+    cout << "\t--enable-hud:  enable heads up display" << endl;
+    cout << "\t--disable-panel:  disable instrument panel" << endl;
+    cout << "\t--enable-panel:  enable instrumetn panel" << endl;
+    cout << "\t--disable-sound:  disable sound effects" << endl;
+    cout << "\t--enable-sound:  enable sound effects" << endl;
+    cout << "\t--disable-anti-alias-hud:  disable anti aliased hud" << endl;
+    cout << "\t--enable-anti-alias-hud:  enable anti aliased hud" << endl;
+    cout << endl;
  
-    printf("Flight Model:\n");
-    printf("\t--fdm=abcd:  one of slew, jsb, larcsim, or external\n");
-    printf("\n");
-
-    printf("Initial Position and Orientation:\n");
-    printf("\t--airport-id=ABCD:  specify starting postion by airport id\n");
-    printf("\t--lon=degrees:  starting longitude in degrees (west = -)\n");
-    printf("\t--lat=degrees:  starting latitude in degrees (south = -)\n");
-    printf("\t--altitude=feet:  starting altitude in feet\n");
-    printf("\t\t(unless --units-meters specified\n");
-    printf("\t--heading=degrees:  heading (yaw) angle in degress (Psi)\n");
-    printf("\t--roll=degrees:  roll angle in degrees (Phi)\n");
-    printf("\t--pitch=degrees:  pitch angle in degrees (Theta)\n");
-    printf("\n");
-
-    printf("Rendering Options:\n");
-    printf("\t--fog-disable:  disable fog/haze\n");
-    printf("\t--fog-fastest:  enable fastest fog/haze\n");
-    printf("\t--fog-nicest:  enable nicest fog/haze\n");
-    printf("\t--fov=xx.x:  specify initial field of view angle in degrees\n");
-    printf("\t--disable-fullscreen:  disable fullscreen mode\n");
-    printf("\t--enable-fullscreen:  enable fullscreen mode\n");
-    printf("\t--shading-flat:  enable flat shading\n");
-    printf("\t--shading-smooth:  enable smooth shading\n");
-    printf("\t--disable-skyblend:  disable sky blending\n");
-    printf("\t--enable-skyblend:  enable sky blending\n");
-    printf("\t--disable-textures:  disable textures\n");
-    printf("\t--enable-textures:  enable textures\n");
-    printf("\t--disable-wireframe:  disable wireframe drawing mode\n");
-    printf("\t--enable-wireframe:  enable wireframe drawing mode\n");
-    printf("\t--geometry=WWWxHHH:  window geometry: 640x480, 800x600, etc.\n");
-    printf("\n");
-
-    printf("Scenery Options:\n");
-    printf("\t--tile-radius=n:  specify tile radius, must be 1 - 4\n");
-    printf("\n");
-
-    printf("Hud Options:\n");
-    printf("\t--units-feet:  Hud displays units in feet\n");
-    printf("\t--units-meters:  Hud displays units in meters\n");
-    printf("\t--hud-tris:  Hud displays number of triangles rendered\n");
-    printf("\t--hud-culled:  Hud displays percentage of triangles culled\n");
-    printf("\n");
+    cout << "Flight Model:" << endl;
+    cout << "\t--fdm=abcd:  selects the core flight model code." << endl;
+    cout << "\t\tcan be one of jsb, larcsim, magic, or external" << endl;
+    cout << "\t--aircraft=abcd:  aircraft model to load" << endl;
+    cout << "\t--model-hz=n:  run the FDM this rate (iterations per second)" 
+        << endl;
+    cout << "\t--speed=n:  run the FDM this much faster than real time" << endl;
+    cout << "\t--notrim:  Do NOT attempt to trim the model when initializing JSBsim" << endl;
+    cout << endl;
+    //(UIUC)
+    cout <<"Aircraft model directory" << endl;
+    cout <<"\t--aircraft-dir=<path> path is relative to the path of the executable" << endl;
+    cout << endl;
+
+    cout << "Initial Position and Orientation:" << endl;
+    cout << "\t--airport-id=ABCD:  specify starting postion by airport id" 
+        << endl;
+    cout << "\t--lon=degrees:  starting longitude in degrees (west = -)" 
+        << endl;
+    cout << "\t--lat=degrees:  starting latitude in degrees (south = -)"
+        << endl;
+    cout << "\t--altitude=feet:  starting altitude in feet" << endl;
+    cout << "\t\t(unless --units-meters specified" << endl;
+    cout << "\t--heading=degrees:  heading (yaw) angle in degress (Psi)"
+        << endl;
+    cout << "\t--roll=degrees:  roll angle in degrees (Phi)" << endl;
+    cout << "\t--pitch=degrees:  pitch angle in degrees (Theta)" << endl;
+    cout << "\t--uBody=feet per second:  velocity along the body X axis"
+        << endl;
+    cout << "\t--vBody=feet per second:  velocity along the body Y axis"
+        << endl;
+    cout << "\t--wBody=feet per second:  velocity along the body Z axis"
+        << endl;
+    cout << "\t\t(unless --units-meters specified" << endl;
+    cout << "\t--vc= initial airspeed in knots (--fdm=jsb only)" << endl;
+    cout << "\t--mach= initial mach number (--fdm=jsb only)" << endl;
+    cout << endl;
+
+    cout << "Rendering Options:" << endl;
+    cout << "\t--fog-disable:  disable fog/haze" << endl;
+    cout << "\t--fog-fastest:  enable fastest fog/haze" << endl;
+    cout << "\t--fog-nicest:  enable nicest fog/haze" << endl;
+    cout << "\t--enable-clouds:  enable demo cloud layer" << endl;
+    cout << "\t--disable-clouds:  disable demo cloud layer" << endl;
+    cout << "\t--clouds-asl=xxx:  specify altitude of cloud layer above sea level" << endl;
+    cout << "\t--fov=xx.x:  specify initial field of view angle in degrees"
+        << endl;
+    cout << "\t--disable-fullscreen:  disable fullscreen mode" << endl;
+    cout << "\t--enable-fullscreen:  enable fullscreen mode" << endl;
+    cout << "\t--shading-flat:  enable flat shading" << endl;
+    cout << "\t--shading-smooth:  enable smooth shading" << endl;
+    cout << "\t--disable-skyblend:  disable sky blending" << endl;
+    cout << "\t--enable-skyblend:  enable sky blending" << endl;
+    cout << "\t--disable-textures:  disable textures" << endl;
+    cout << "\t--enable-textures:  enable textures" << endl;
+    cout << "\t--disable-wireframe:  disable wireframe drawing mode" << endl;
+    cout << "\t--enable-wireframe:  enable wireframe drawing mode" << endl;
+    cout << "\t--geometry=WWWxHHH:  window geometry: 640x480, 800x600, etc."
+        << endl;
+    cout << endl;
+
+    cout << "Scenery Options:" << endl;
+    cout << "\t--tile-radius=n:  specify tile radius, must be 1 - 4" << endl;
+    cout << endl;
+
+    cout << "Hud Options:" << endl;
+    cout << "\t--units-feet:  Hud displays units in feet" << endl;
+    cout << "\t--units-meters:  Hud displays units in meters" << endl;
+    cout << "\t--hud-tris:  Hud displays number of triangles rendered" << endl;
+    cout << "\t--hud-culled:  Hud displays percentage of triangles culled"
+        << endl;
+    cout << endl;
        
-    printf("Time Options:\n");
-    printf("\t--time-offset=[+-]hh:mm:ss:  offset local time by this amount\n");
-    printf("\t--start-date-gmt=yyyy:mm:dd:hh:mm:ss: specify a starting date/time. Time is Greenwich Mean Time\n");
-    printf("\t--start-date-lst=yyyy:mm:dd:hh:mm:ss: specify a starting date/time. Uses local sidereal time\n");
+    cout << "Time Options:" << endl;
+    cout << "\t--time-offset=[+-]hh:mm:ss: add this time offset" << endl;
+    cout << "\t--time-match-real: Synchronize real-world and FlightGear" << endl
+        << "\t\ttime. Can be used in combination with --time-offset." << endl;
+    cout << "\t--time-match-local:Synchronize local real-world and " << endl
+        << "\t\tFlightGear time" << endl;   
+    cout << "\t--start-date-sys=yyyy:mm:dd:hh:mm:ss: specify a starting" << endl
+        << "\t\tdate/time. Uses your system time " << endl;
+    cout << "\t--start-date-gmt=yyyy:mm:dd:hh:mm:ss: specify a starting" << endl
+        << "\t\tdate/time. Uses Greenwich Mean Time" << 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 << "Network Options:" << endl;
+    cout << "\t--net-hud:  Hud displays network info" << endl;
+    cout << "\t--net-id=name:  specify your own callsign" << endl;
+#endif
 }
 
 
 // Destructor
 fgOPTIONS::~fgOPTIONS( void ) {
 }
-
-