]> git.mxchange.org Git - flightgear.git/commitdiff
Erik Hofman:
authorcurt <curt>
Mon, 10 Jun 2002 23:30:23 +0000 (23:30 +0000)
committercurt <curt>
Mon, 10 Jun 2002 23:30:23 +0000 (23:30 +0000)
This is an enhanced version of the options patch.
It's more robust now, and gives some helpful information if something
goes wrong. Also the naming in the options.xml file has changed to the
syntax David suggested.

Since no one objected to the patch I think it is safe to included it.

src/Main/options.cxx

index 598ed460b77c4c76bfd2680ad5ee9a1675c8cfe7..6cb98fc5adb464704f089c1220e489e3b0f54893 100644 (file)
@@ -1125,195 +1125,83 @@ fgParseOptions (const string& path) {
 void 
 fgUsage ()
 {
-    cout << "Usage: fgfs [ option ... ]" << endl
-         << endl
-
-         << "General Options:" << endl
-         << "    --help, -h                    Print usage" << endl
-         << "    --fg-root=path                Specify the root data path" << endl
-         << "    --fg-scenery=path             Specify the base scenery path;" << endl
-        << "                                  Defaults to $FG_ROOT/Scenery" << endl
-         << "    --disable-game-mode           Disable full-screen game mode" << endl
-         << "    --enable-game-mode            Enable full-screen game mode" << endl
-         << "    --disable-splash-screen       Disable splash screen" << endl
-         << "    --enable-splash-screen        Enable splash screen" << endl
-         << "    --disable-intro-music         Disable introduction music" << endl
-         << "    --enable-intro-music          Enable introduction music" << endl
-         << "    --disable-mouse-pointer       Disable extra mouse pointer" << endl
-         << "    --enable-mouse-pointer        Enable extra mouse pointer (i.e. for full-" << endl
-         << "                                  screen Voodoo based cards)" << endl
-         << "    --disable-freeze              Start in a running state" << endl
-         << "    --enable-freeze               Start in a frozen state" << endl
-         << "    --disable-fuel-freeze         Fuel is consumed normally" << endl
-         << "    --enable-fuel-freeze          Fuel tank quantity forced to remain constant" << endl
-         << "    --disable-clock-freeze        Clock advances normally" << endl
-         << "    --enable-clock-freeze         Do not advance clock" << endl
-         << "    --control=mode                Primary control mode (joystick, keyboard," << endl
-         << "                                  mouse)" << endl
-         << "    --enable-auto-coordination    Enable auto coordination" << endl
-         << "    --disable-auto-coordination   Disable auto coordination" << endl
-         << "    --browser-app=path            Specify path to your web browser" << endl
-         << "    --prop:name=value             Set property <name> to <value>" << endl
-         << "    --config=path                 Load additional properties from path" << endl
-         << "    --units-feet                  Use feet for distances" << endl
-         << "    --units-meters                Use meters for distances" << endl
-         << endl
-
-         << "Features:" << endl
-         << "    --disable-hud                 Disable Heads Up Display (HUD)" << endl
-         << "    --enable-hud                  Enable Heads Up Display (HUD)" << endl
-         << "    --disable-panel               Disable instrument panel" << endl
-         << "    --enable-panel                Enable instrument panel" << endl
-         << "    --disable-sound               Disable sound effects" << endl
-         << "    --enable-sound                Enable sound effects" << endl
-         << "    --disable-anti-alias-hud      Disable anti-aliased HUD" << endl
-         << "    --enable-anti-alias-hud       Enable anti-aliased HUD" << endl
-         << endl
-
-         << "Aircraft:" <<endl
-         << "    --aircraft=name               Select an aircraft profile as defined by a" << endl
-         << "                                  top level <name>-set.xml" << endl
-         << endl
-
-         << "Flight Model:" << endl
-         << "    --fdm=name                    Select the core flight dynamics model" << endl
-         << "                                  Can be one of jsb, larcsim, yasim, magic," << endl
-         << "                                  balloon, ada, external, or null" << endl
-         << "    --aero=name                   Select aircraft aerodynamics model to load" << endl
-         << "    --model-hz=n                  Run the FDM this rate (iterations per" << endl
-         << "                                  second)" << endl
-         << "    --speed=n                     Run the FDM 'n' times faster than real time" << endl
-         << "    --notrim                      Do NOT attempt to trim the model (only with" << endl
-         << "                                  fdm=jsbsim)" << endl
-         << "    --on-ground                   Start at ground level (default)" << endl
-         << "    --in-air                      Start in air (implied when using --altitude)" << endl
-         << "    --wind=DIR@SPEED              Specify wind coming from DIR (degrees) at" << endl
-         << "                                  SPEED (knots); both DIR and SPEED can" << endl
-        << "                                  optionally contain a colon-separated range." << endl
-         << endl
-
-         << "Aircraft model directory (UIUC FDM ONLY):" << endl
-         << "    --aircraft-dir=path           Aircraft directory relative to the path of" << endl
-         << "                                  the executable" << endl
-         << endl
-
-         << "Initial Position and Orientation:" << endl
-         << "    --airport-id=ID               Specify starting position by airport ID" << endl
-         << "    --offset-distance=nm          Specify distance to threshold" << endl 
-         << "    --offset-azimuth=degrees      Specify heading to threshold" << endl    
-         << "    --lon=degrees                 Starting longitude (west = -)" << endl
-         << "    --lat=degrees                 Starting latitude (south = -)" << endl
-         << "    --altitude=value              Starting altitude (in feet unless" << endl
-         << "                                  --units-meters specified)" << endl
-         << "    --heading=degrees             Specify heading (yaw) angle (Psi)" << endl
-         << "    --roll=degrees                Specify roll angle (Phi)" << endl
-         << "    --pitch=degrees               Specify pitch angle (Theta)" << endl
-         << "    --uBody=units_per_sec         Specify velocity along the body X axis" << endl
-         << "                                  (in feet unless --units-meters specified)" << endl
-         << "    --vBody=units_per_sec         Specify velocity along the body Y axis" << endl
-         << "                                  (in feet unless --units-meters specified)" << endl
-         << "    --wBody=units_per_sec         Specify velocity along the body Z axis" << endl
-         << "                                  (in feet unless --units-meters specified)" << endl
-         << "    --vc=knots                    Specify initial airspeed" << endl
-         << "    --mach=num                    Specify initial mach number" << endl
-         << "    --glideslope=degreees         Specify flight path angle (can be positive)" << endl
-         << "    --roc=fpm                     Specify initial climb rate (can be negative)" << endl
-         << endl
-
-         << "Rendering Options:" << endl
-         << "    --bpp=depth                   Specify the bits per pixel" << endl
-         << "    --fog-disable                 Disable fog/haze" << endl
-         << "    --fog-fastest                 Enable fastest fog/haze" << endl
-         << "    --fog-nicest                  Enable nicest fog/haze" << endl
-         << "    --enable-clouds               Enable cloud layers" << endl
-         << "    --disable-clouds              Disable cloud layers" << endl
-         << "                                  level" << endl
-         << "    --fov=degrees                 Specify field of view angle" << endl
-         << "    --disable-fullscreen          Disable fullscreen mode" << endl
-         << "    --enable-fullscreen           Enable fullscreen mode" << endl
-         << "    --shading-flat                Enable flat shading" << endl
-         << "    --shading-smooth              Enable smooth shading" << endl
-         << "    --disable-skyblend            Disable sky blending" << endl
-         << "    --enable-skyblend             Enable sky blending" << endl
-         << "    --disable-textures            Disable textures" << endl
-         << "    --enable-textures             Enable textures" << endl
-         << "    --disable-wireframe           Disable wireframe drawing mode" << endl
-         << "    --enable-wireframe            Enable wireframe drawing mode" << endl
-         << "    --geometry=WxH                Specify window geometry (640x480, etc)" << endl
-         << "    --view-offset=value           Specify the default forward view direction" << endl
-         << "                                  as an offset from straight ahead.  Allowable" << endl
-         << "                                  values are LEFT, RIGHT, CENTER, or a specific" << endl
-         << "                                  number in degrees" << endl
-         << "    --visibility=meters           Specify initial visibility" << endl
-         << "    --visibility-miles=miles      Specify initial visibility in miles" << endl
-         << endl
-
-         << "Hud Options:" << endl
-         << "    --hud-tris                    Hud displays number of triangles rendered" << endl
-         << "    --hud-culled                  Hud displays percentage of triangles culled" << endl
-         << endl
-       
-         << "Time Options:" << endl
-         << "    --time-offset=[+-]hh:mm:ss    Add this time offset" << endl
-         << "    --time-match-real             Synchronize time with real-world time" << endl
-         << "    --time-match-local            Synchronize time with local real-world time" << endl
-         << "    --start-date-sys=yyyy:mm:dd:hh:mm:ss" << endl
-         << "                                  Specify a starting date/time with respect to" << endl
-         << "                                  system time" << endl
-         << "    --start-date-gmt=yyyy:mm:dd:hh:mm:ss" << endl
-         << "                                  Specify a starting date/time with respect to" << endl
-         << "                                  Greenwich Mean Time" << endl
-         << "    --start-date-lat=yyyy:mm:dd:hh:mm:ss" << endl
-         << "                                  Specify a starting date/time with respect to" << endl
-         << "                                  Local Aircraft Time" << endl
-         << endl
-
-         << "Network Options:" << endl
-         << "    --httpd=port                  Enable http server on the specified port" << endl
-        << "    --telnet=port                 Enable telnet server on the specified port" << endl
-#ifdef FG_JPEG_SERVER
-         << "    --jpg-httpd=port              Enable screen shot http server on the" << endl
-         << "                                  specified port" << endl
-#endif
-#ifdef FG_NETWORK_OLK
-         << "    --disable-network-olk         Disable Multipilot mode (default)" << endl
-         << "    --enable-network-olk          Enable Multipilot mode" << endl
-         << "    --net-hud                     Hud displays network info" << endl
-         << "    --net-id=name                 Specify your own callsign" << endl
-#endif
-         << endl
-
-         << "Route/Way Point Options:" << endl
-         << "    --wp=ID[@alt]                 Specify a waypoint for the GC autopilot;" << endl
-         << "                                  multiple instances can be used to create a" << endl
-         << "                                  route" << endl
-         << "    --flight-plan=file            Read all waypoints from a file" << endl
-         << endl
-
-         << "IO Options:" << endl
-         << "    --gamin=params                Open connection using the Garmin GPS protocol" << endl
-         << "    --joyclient=params            Open connection to an Agwagon joystick" << endl
-         << "    --native-ctrls=params         Open connection using the FG Native Controls" << endl
-         << "                                  protocol" << endl
-         << "    --native-fdm=params           Open connection using the FG Native FDM" << endl
-         << "                                  protocol" << endl
-         << "    --native=params               Open connection using the FG Native protocol" << endl
-         << "    --nmea=params                 Open connection using the NMEA protocol" << endl
-         << "    --opengc=params               Open connection using the OpenGC protocol" << endl
-         << "    --props=params                Open connection using the interactive" << endl
-         << "                                  property manager" << endl
-         << "    --pve=params                  Open connection using the PVE protocol" << endl
-         << "    --ray=params                  Open connection using the RayWoodworth" << endl
-         << "                                  motion chair protocol" << endl
-         << "    --rul=params                  Open connection using the RUL protocol" << endl
-         << endl
-         << "    --atc610x                     Enable atc610x interface." << endl
-         << endl
-
-         << "Debugging Options:" << endl
-         << "    --trace-read=property         Trace the reads for a property; multiple" << endl
-         << "                                  instances allowed." << endl
-         << "    --trace-write=property        Trace the writes for a property; multiple" << endl
-         << "                                  instances allowed." << endl
-         << endl;
+    // *** FIXME ***
+    // Began the process of converting output from printf() to
+    // SG_LOG() but this needs to be finished.
+
+    SGPropertyNode options_root;
+    SGPath opath( globals->get_fg_root() );
+    opath.append( "options.xml" );
+
+    try {
+        readProperties(opath.c_str(), &options_root);
+    } catch (const sg_exception &ex) {
+        SG_LOG( SG_GENERAL, SG_ALERT, endl << "Unable to read the help file." );
+        SG_LOG( SG_GENERAL, SG_ALERT, "Make sure the file options.xml is located in the FlightGear base directory." );
+        exit(-1);
+    }
+
+    SGPropertyNode *options = options_root.getNode("options");
+    if (!options) {
+        SG_LOG( SG_GENERAL, SG_ALERT,
+                "Error reading options.xml: <options> directive not found." );
+        exit(-1);
+    }
+
+    SGPropertyNode *usage = options->getNode("usage");
+    if (usage) {
+        SG_LOG( SG_GENERAL, SG_ALERT, "Usage: " << usage->getStringValue() );
+    }
+
+    vector<SGPropertyNode_ptr>section = options->getChildren("section");
+    for (unsigned int j = 0; j < section.size(); j++) {
+
+        SGPropertyNode *name = section[j]->getNode("name");
+        if (name) {
+            SG_LOG( SG_GENERAL, SG_ALERT, endl << name->getStringValue()
+                    << ":" );
+        }
+
+        vector<SGPropertyNode_ptr>option = section[j]->getChildren("option");
+        for (unsigned int k = 0; k < option.size(); k++) {
+
+            SGPropertyNode *name = option[k]->getNode("name");
+            SGPropertyNode *short_name = option[k]->getNode("short");
+            SGPropertyNode *arg = option[k]->getNode("arg");
+
+            if (name) {
+                string str = name->getStringValue();
+                if (short_name) {
+                    str.append(", -");
+                    str.append(short_name->getStringValue());
+                }
+                if (arg) {
+                    str.append("=");
+                    str.append(arg->getStringValue());
+                }
+
+                if (str.size() <= 25) {
+                    fprintf(stderr, "   --%-27s", str.c_str());
+                } else {
+                    fprintf(stderr, "\n   --%s\n%32c", str.c_str(), ' ');
+                }
+
+                str.erase();
+                SGPropertyNode *desc = option[k]->getNode("description");
+                if (desc) {
+                    SG_LOG( SG_GENERAL, SG_ALERT, desc->getStringValue() );
+
+                    for ( int l = 1;
+                          (desc = option[k]->getNode("desc", l, false));
+                          l++ )
+                    {
+                        fprintf(stderr, "%32c%s\n", ' ',
+                                desc->getStringValue());
+                    }
+                } else {
+                    SG_LOG( SG_GENERAL, SG_ALERT, "" );
+                }
+            }
+        }
+    }
 }