X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Futil.cxx;h=8dd2bd54d92566778e3d456fc754663ce33a998b;hb=52e5a9abe83882ca946429f7d8e71894d5852d8f;hp=0986e91ea47a71c93b9595c25affa837743abc22;hpb=667e64e1ebc86a0c53112b92b53475898f315c36;p=flightgear.git diff --git a/src/Main/util.cxx b/src/Main/util.cxx index 0986e91ea..8dd2bd54d 100644 --- a/src/Main/util.cxx +++ b/src/Main/util.cxx @@ -17,6 +17,9 @@ // // $Id$ +#ifdef HAVE_CONFIG_H +# include +#endif #include @@ -25,9 +28,10 @@ #include #include -using std::vector; #include +#include +#include #include "fg_io.hxx" #include "fg_props.hxx" @@ -38,85 +42,7 @@ using std::vector; #include "osgDB/Registry" #endif -void -fgDefaultWeatherValue (const char * propname, double value) -{ - unsigned int i; - - SGPropertyNode * branch = fgGetNode("/environment/config/boundary", true); - vector entries = branch->getChildren("entry"); - for (i = 0; i < entries.size(); i++) { - entries[i]->setDoubleValue(propname, value); - } - - branch = fgGetNode("/environment/config/aloft", true); - entries = branch->getChildren("entry"); - for (i = 0; i < entries.size(); i++) { - entries[i]->setDoubleValue(propname, value); - } -} - - -void -fgSetupWind (double min_hdg, double max_hdg, double speed, double gust) -{ - // Initialize to a reasonable state - fgDefaultWeatherValue("wind-from-heading-deg", min_hdg); - fgDefaultWeatherValue("wind-speed-kt", speed); - - SG_LOG(SG_GENERAL, SG_INFO, "WIND: " << min_hdg << '@' << - speed << " knots" << endl); - - // Now, add some variety to the layers - min_hdg += 10; - if (min_hdg > 360) - min_hdg -= 360; - speed *= 1.1; - fgSetDouble("/environment/config/boundary/entry[1]/wind-from-heading-deg", - min_hdg); - fgSetDouble("/environment/config/boundary/entry[1]/wind-speed-kt", - speed); - - min_hdg += 20; - if (min_hdg > 360) - min_hdg -= 360; - speed *= 1.1; - fgSetDouble("/environment/config/aloft/entry[0]/wind-from-heading-deg", - min_hdg); - fgSetDouble("/environment/config/aloft/entry[0]/wind-speed-kt", - speed); - - min_hdg += 10; - if (min_hdg > 360) - min_hdg -= 360; - speed *= 1.1; - fgSetDouble("/environment/config/aloft/entry[1]/wind-from-heading-deg", - min_hdg); - fgSetDouble("/environment/config/aloft/entry[1]/wind-speed-kt", - speed); - - min_hdg += 10; - if (min_hdg > 360) - min_hdg -= 360; - speed *= 1.1; - fgSetDouble("/environment/config/aloft/entry[2]/wind-from-heading-deg", - min_hdg); - fgSetDouble("/environment/config/aloft/entry[2]/wind-speed-kt", - speed); -} - - -void -fgExit (int status) -{ -#ifdef OSG_LIBRARY_STATIC - osgDB::Registry::instance( true); -#endif - - SG_LOG(SG_GENERAL, SG_INFO, "Exiting FlightGear with status " << status); - std::exit(status); -} - +using std::vector; // Originally written by Alex Perry. double @@ -145,74 +71,20 @@ fgGetLowPass (double current, double target, double timeratio) return current; } - -string -fgUnescape (const char *s) -{ - string r; - while (*s) { - if (*s != '\\') { - r += *s++; - continue; - } - if (!*++s) - break; - if (*s == '\\') { - r += '\\'; - } else if (*s == 'n') { - r += '\n'; - } else if (*s == 'r') { - r += '\r'; - } else if (*s == 't') { - r += '\t'; - } else if (*s == 'v') { - r += '\v'; - } else if (*s == 'f') { - r += '\f'; - } else if (*s == 'a') { - r += '\a'; - } else if (*s == 'b') { - r += '\b'; - } else if (*s == 'x') { - if (!*++s) - break; - int v = 0; - for (int i = 0; i < 2 && isxdigit(*s); i++, s++) - v = v * 16 + (isdigit(*s) ? *s - '0' : 10 + tolower(*s) - 'a'); - r += v; - continue; - - } else if (*s >= '0' && *s <= '7') { - int v = *s++ - '0'; - for (int i = 0; i < 3 && *s >= '0' && *s <= '7'; i++, s++) - v = v * 8 + *s - '0'; - r += v; - continue; - - } else { - r += *s; - } - s++; - } - return r; -} - - // Write out path to validation node and read it back in. A Nasal // listener is supposed to replace the path with a validated version // or an empty string otherwise. const char *fgValidatePath (const char *str, bool write) { - static SGPropertyNode_ptr r, w; - if (!r) { - r = fgGetNode("/sim/paths/validate/read", true); - r->setAttribute(SGPropertyNode::READ, true); - r->setAttribute(SGPropertyNode::WRITE, true); - - w = fgGetNode("/sim/paths/validate/write", true); - w->setAttribute(SGPropertyNode::READ, true); - w->setAttribute(SGPropertyNode::WRITE, true); - } + SGPropertyNode_ptr r, w; + r = fgGetNode("/sim/paths/validate/read", true); + r->setAttribute(SGPropertyNode::READ, true); + r->setAttribute(SGPropertyNode::WRITE, true); + + w = fgGetNode("/sim/paths/validate/write", true); + w->setAttribute(SGPropertyNode::READ, true); + w->setAttribute(SGPropertyNode::WRITE, true); + SGPropertyNode *prop = write ? w : r; prop->setStringValue(str); const char *result = prop->getStringValue();