static void DisplayParsedMETAR(const NOAAStore::Item &station) { if (!station.parsed_metar_available) { printf("METAR parsing failed!\n");; return; } const ParsedMETAR &parsed = station.parsed_metar; printf("Parsed Data:\n"); if (parsed.name_available) _tprintf(_T("Name: %s\n"), parsed.name.c_str()); if (parsed.location_available) { TCHAR buffer[256]; FormatGeoPoint(parsed.location, buffer, ARRAY_SIZE(buffer), CoordinateFormat::DDMMSS); _tprintf(_T("Location: %s\n"), buffer); } if (parsed.qnh_available) { TCHAR buffer[256]; FormatUserPressure(parsed.qnh, buffer, ARRAY_SIZE(buffer)); _tprintf(_T("QNH: %s\n"), buffer); } if (parsed.wind_available) { TCHAR buffer[256]; FormatUserWindSpeed(parsed.wind.norm, buffer, ARRAY_SIZE(buffer)); _tprintf(_T("Wind: %.0f" DEG " %s\n"), (double)parsed.wind.bearing.Degrees(), buffer); } if (parsed.temperatures_available) { TCHAR buffer[256]; FormatUserTemperature(parsed.temperature, buffer, ARRAY_SIZE(buffer)); _tprintf(_T("Temperature: %s\n"), buffer); FormatUserTemperature(parsed.dew_point, buffer, ARRAY_SIZE(buffer)); _tprintf(_T("Dew point: %s\n"), buffer); } if (parsed.visibility_available) { TCHAR buffer[256]; if (parsed.visibility >= 9999) _tcscpy(buffer, _T("unlimited")); else { fixed visibility(parsed.visibility); FormatUserDistanceSmart(visibility, buffer, ARRAY_SIZE(buffer)); } _tprintf(_T("Visibility: %s\n"), buffer); } printf("\n"); }
static bool FormatDecodedMETARLine(const TCHAR *line, unsigned length, const ParsedMETAR &parsed, tstring &output) { const TCHAR *end = line + length; const TCHAR *colon = (const TCHAR *)memchr(line, _T(':'), length); if (!colon) return false; unsigned title_length = colon - line; if (title_length == 0) return false; const TCHAR *value = colon + 1; while (*value == _T(' ')) value++; unsigned value_length = end - value; if (CheckTitle(line, title_length, _T("Wind"))) { StaticString<256> buffer; if (!parsed.wind_available) { buffer.Format(_T("%s: "), _("Wind")); buffer.append(value, value_length); } else { TCHAR wind_speed_buffer[16]; FormatUserWindSpeed(parsed.wind.norm, wind_speed_buffer, ARRAY_SIZE(wind_speed_buffer)); buffer.Format(_T("%s: %.0f" DEG " %s"), _("Wind"), (double)parsed.wind.bearing.Degrees(), wind_speed_buffer); } output += buffer; output += '\n'; return true; } if (CheckTitle(line, title_length, _T("Temperature"))) { StaticString<256> buffer; if (!parsed.temperatures_available) { buffer.Format(_T("%s: "), _("Temperature")); buffer.append(value, value_length); } else { TCHAR temperature_buffer[16]; FormatUserTemperature(parsed.temperature, temperature_buffer, ARRAY_SIZE(temperature_buffer)); buffer.Format(_T("%s: %s"), _("Temperature"), temperature_buffer); } output += buffer; output += '\n'; return true; } if (CheckTitle(line, title_length, _T("Dew Point"))) { StaticString<256> buffer; if (!parsed.temperatures_available) { buffer.Format(_T("%s: "), _("Dew Point")); buffer.append(value, value_length); } else { TCHAR temperature_buffer[16]; FormatUserTemperature(parsed.dew_point, temperature_buffer, ARRAY_SIZE(temperature_buffer)); buffer.Format(_T("%s: %s"), _("Dew Point"), temperature_buffer); } output += buffer; output += '\n'; return true; } if (CheckTitle(line, title_length, _T("Pressure (altimeter)"))) { StaticString<256> buffer; if (!parsed.qnh_available) { buffer.Format(_T("%s: "), _("Pressure")); buffer.append(value, value_length); } else { TCHAR qnh_buffer[16]; FormatUserPressure(parsed.qnh, qnh_buffer, ARRAY_SIZE(qnh_buffer)); buffer.Format(_T("%s: %s"), _("Pressure"), qnh_buffer); } output += buffer; output += '\n'; return true; } if (CheckTitle(line, title_length, _T("Visibility"))) { StaticString<256> buffer; buffer.Format(_T("%s: "), _("Visibility")); if (!parsed.qnh_available) { buffer.append(value, value_length); } else { TCHAR vis_buffer[32]; if (parsed.visibility >= 9999) { FormatUserDistanceSmart(fixed(10000), vis_buffer, ARRAY_SIZE(vis_buffer)); buffer.AppendFormat(_("more than %s"), vis_buffer); } else { FormatUserDistanceSmart(fixed(parsed.visibility), vis_buffer, ARRAY_SIZE(vis_buffer)); buffer += vis_buffer; } } output += buffer; output += '\n'; return true; } if (CheckTitle(line, title_length, _T("Sky conditions"))) { StaticString<256> buffer; buffer.Format(_T("%s: "), _("Sky Conditions")); StaticString<64> _value; _value.set(value, value_length); buffer += gettext(_value); output += buffer; output += '\n'; return true; } if (CheckTitle(line, title_length, _T("Weather"))) { StaticString<256> buffer; buffer.Format(_T("%s: "), _("Weather")); StaticString<64> _value; _value.set(value, value_length); buffer += gettext(_value); output += buffer; output += '\n'; return true; } StaticString<64> title; title.set(line, title_length); StaticString<256> buffer; buffer.Format(_T("%s: "), gettext(title.c_str())); buffer.append(value, value_length); output += buffer; output += '\n'; return true; }