]> git.mxchange.org Git - simgear.git/blobdiff - simgear/environment/metar.cxx
Merge branch 'maint'
[simgear.git] / simgear / environment / metar.cxx
index d0dd28c16ecd34ab123880543c539d3d4ce8039f..79401e39419d3680ae0495f1d68b34da42cfb987 100644 (file)
@@ -24,6 +24,9 @@
  * @file metar.cxx
  * Interface for encoded Meteorological Aerodrome Reports (METAR).
  */
+#ifdef HAVE_CONFIG_H
+#  include <simgear_config.h>
+#endif
 
 #include <string>
 #include <time.h>
@@ -156,7 +159,7 @@ void SGMetar::useCurrentDate()
 {
        struct tm now;
        time_t now_sec = time(0);
-#if defined( _MSC_VER ) || defined ( __MINGW32__ )
+#ifdef _WIN32
        now = *gmtime(&now_sec);
 #else
        gmtime_r(&now_sec, &now);
@@ -490,7 +493,6 @@ bool SGMetar::scanVisibility()
                distance = i;
        } else {
 // M?(\d{1,2}|\d{1,2}/\d{1,2}|\d{1,2} \d{1,2}/\d{1,2})(SM|KM)
-               modifier = 0;
                if (*m == 'M')
                        m++, modifier = SGMetarVisibility::LESS_THAN;
 
@@ -744,6 +746,14 @@ bool SGMetar::scanSkyCondition()
        int i;
        SGMetarCloud cl;
 
+       if (!strncmp(m, "//////", 6)) {
+               m += 6;
+               if (!scanBoundary(&m))
+                       return false;
+               _m = m;
+               return true;
+       }
+
        if (!strncmp(m, "CLR", i = 3)                           // clear
                        || !strncmp(m, "SKC", i = 3)            // sky clear
                        || !strncmp(m, "NSC", i = 3)            // no significant clouds
@@ -833,7 +843,7 @@ bool SGMetar::scanTemperature()
                return false;
        if (!scanBoundary(&m)) {
                if (!strncmp(m, "XX", 2))       // not spec compliant!
-                       m += 2, sign = 0;
+                       m += 2, sign = 0, dew = temp;
                else {
                        sign = 1;
                        if (*m == 'M')
@@ -1171,7 +1181,7 @@ const struct Token *SGMetar::scanToken(char **str, const struct Token *list)
 {
        const struct Token *longest = 0;
        int maxlen = 0, len;
-       char *s;
+       const char *s;
        for (int i = 0; (s = list[i].id); i++) {
                len = strlen(s);
                if (!strncmp(s, *str, len) && len > maxlen) {