]> git.mxchange.org Git - simgear.git/commitdiff
Melchior FRANZ:
authorehofman <ehofman>
Sun, 19 Feb 2006 17:13:37 +0000 (17:13 +0000)
committerehofman <ehofman>
Sun, 19 Feb 2006 17:13:37 +0000 (17:13 +0000)
- change SG back to FG (this was accidently changed in three wrong
  places when I prepared the file for SG)
- correct length for the proxy id detection
- set (guessed) deposit depth < 1mm correctly
- set deposit type string
- formatting

simgear/environment/metar.cxx

index a23565989b633fccf936e95b1fac8721e8e1bd73..c6da78de6ebc1395b1f544510fadf3b5791014e2 100644 (file)
@@ -218,7 +218,7 @@ char *SGMetar::loadData(const char *id, const string& proxy, const string& port,
        while ((i = sock->readline(buf, buflen))) {
                if (i <= 2 && isspace(buf[0]) && (!buf[1] || isspace(buf[1])))
                        break;
-               if (!strncmp(buf, "X-MetarProxy: ", 9))
+               if (!strncmp(buf, "X-MetarProxy: ", 13))
                        _x_proxy = true;
        }
        if (i) {
@@ -617,48 +617,48 @@ static const struct Token special[] = {
 
 
 static const struct Token description[] = {
-       { "SH", "showers of" },
-       { "TS", "thunderstorm with" },
-       { "BC", "patches of" },
-       { "BL", "blowing" },
-       { "DR", "low drifting" },
-       { "FZ", "freezing" },
-       { "MI", "shallow" },
-       { "PR", "partial" },
+       { "SH", "showers of" },
+       { "TS", "thunderstorm with" },
+       { "BC", "patches of" },
+       { "BL", "blowing" },
+       { "DR", "low drifting" },
+       { "FZ", "freezing" },
+       { "MI", "shallow" },
+       { "PR", "partial" },
        { 0, 0 }
 };
 
 
 static const struct Token phenomenon[] = {
-       { "DZ", "drizzle" },
-       { "GR", "hail" },
-       { "GS", "small hail and/or snow pellets" },
-       { "IC", "ice crystals" },
-       { "PE", "ice pellets" },
-       { "RA", "rain" },
-       { "SG", "snow grains" },
-       { "SN", "snow" },
-       { "UP", "unknown precipitation" },
-       { "BR", "mist" },
-       { "DU", "widespread dust" },
-       { "SG", "fog" },
-       { "SGBR",       "fog bank" },
-       { "FU", "smoke" },
-       { "HZ", "haze" },
-       { "PY", "spray" },
-       { "SA", "sand" },
-       { "VA", "volcanic ash" },
-       { "DS", "duststorm" },
-       { "FC", "funnel cloud/tornado waterspout" },
-       { "PO", "well-developed dust/sand whirls" },
-       { "SQ", "squalls" },
-       { "SS", "sandstorm" },
-       { "UP", "unknown" },    // ... due to failed automatic acquisition
+       { "DZ",   "drizzle" },
+       { "GR",   "hail" },
+       { "GS",   "small hail and/or snow pellets" },
+       { "IC",   "ice crystals" },
+       { "PE",   "ice pellets" },
+       { "RA",   "rain" },
+       { "SG",   "snow grains" },
+       { "SN",   "snow" },
+       { "UP",   "unknown precipitation" },
+       { "BR",   "mist" },
+       { "DU",   "widespread dust" },
+       { "FG",   "fog" },
+       { "FGBR", "fog bank" },
+       { "FU",   "smoke" },
+       { "HZ",   "haze" },
+       { "PY",   "spray" },
+       { "SA",   "sand" },
+       { "VA",   "volcanic ash" },
+       { "DS",   "duststorm" },
+       { "FC",   "funnel cloud/tornado waterspout" },
+       { "PO",   "well-developed dust/sand whirls" },
+       { "SQ",   "squalls" },
+       { "SS",   "sandstorm" },
+       { "UP",   "unknown" },  // ... due to failed automatic acquisition
        { 0, 0 }
 };
 
 
-// (+|-|VC)?(NSW|MI|PR|BC|DR|BL|SH|TS|FZ)?((DZ|RA|SN|SG|IC|PE|GR|GS|UP){0,3})(BR|SG|FU|VA|DU|SA|HZ|PY|PO|SQ|FC|SS|DS){0,3}
+// (+|-|VC)?(NSW|MI|PR|BC|DR|BL|SH|TS|FZ)?((DZ|RA|SN|SG|IC|PE|GR|GS|UP){0,3})(BR|FG|FU|VA|DU|SA|HZ|PY|PO|SQ|FC|SS|DS){0,3}
 bool SGMetar::scanWeather()
 {
        char *m = _m;
@@ -714,23 +714,23 @@ bool SGMetar::scanWeather()
 
 
 static const struct Token cloud_types[] = {
-       { "AC",   "altocumulus" },
-       { "ACC",  "altocumulus castellanus" },
-       { "ACSL", "altocumulus standing lenticular" },
-       { "AS",   "altostratus" },
-       { "CB",   "cumulonimbus" },
+       { "AC",    "altocumulus" },
+       { "ACC",   "altocumulus castellanus" },
+       { "ACSL",  "altocumulus standing lenticular" },
+       { "AS",    "altostratus" },
+       { "CB",    "cumulonimbus" },
        { "CBMAM", "cumulonimbus mammatus" },
-       { "CC",   "cirrocumulus" },
-       { "CCSL", "cirrocumulus standing lenticular" },
-       { "CI",   "cirrus" },
-       { "CS",   "cirrostratus" },
-       { "CU",   "cumulus" },
+       { "CC",    "cirrocumulus" },
+       { "CCSL",  "cirrocumulus standing lenticular" },
+       { "CI",    "cirrus" },
+       { "CS",    "cirrostratus" },
+       { "CU",    "cumulus" },
        { "CUFRA", "cumulus fractus" },
-       { "NS",   "nimbostratus" },
-       { "SAC",  "stratoaltocumulus" },                // guessed
-       { "SC",   "stratocumulus" },
-       { "SCSL", "stratocumulus standing lenticular" },
-       { "ST",   "stratus" },
+       { "NS",    "nimbostratus" },
+       { "SAC",   "stratoaltocumulus" },               // guessed
+       { "SC",    "stratocumulus" },
+       { "SCSL",  "stratocumulus standing lenticular" },
+       { "ST",    "stratus" },
        { "STFRA", "stratus fractus" },
        { "TCU",   "towering cumulus" },
        { 0, 0 }
@@ -958,11 +958,13 @@ bool SGMetar::scanRunwayReport()
                        m++;
                else
                        return false;
+
                if (*m == '1' || *m == '2' || *m == '5' || *m == '9') { // extent of deposit
                        r._extent = *m - '0';
                        r._extent_string = runway_deposit_extent[*m - '0'];
                } else if (*m != '/')
                        return false;
+
                m++;
                i = -1;
                if (!strncmp(m, "//", 2))
@@ -971,7 +973,7 @@ bool SGMetar::scanRunwayReport()
                        return false;
 
                if (i == 0)
-                       r._depth = 0.5;                                 // < 1 mm deep (let's say 0.5 :-)
+                       r._depth = 0.0005;                              // < 1 mm deep (let's say 0.5 :-)
                else if (i > 0 && i <= 90)
                        r._depth = i / 1000.0;                          // i mm deep
                else if (i >= 92 && i <= 98)
@@ -997,6 +999,7 @@ bool SGMetar::scanRunwayReport()
                return false;
 
        _runways[id]._deposit = r._deposit;
+       _runways[id]._deposit_string = r._deposit_string;
        _runways[id]._extent = r._extent;
        _runways[id]._extent_string = r._extent_string;
        _runways[id]._depth = r._depth;