static inline void read_wind_speed (GWeatherInfo *info, xmlNodePtr node) { xmlChar *val; double mps; val = xmlGetProp (node, XC("mps")); if (val == NULL) return; mps = g_ascii_strtod ((char*) val, NULL); info->priv->windspeed = WINDSPEED_MS_TO_KNOTS (mps); }
static void metar_tok_wind (gchar *tokp, WeatherInfo *info) { gchar sdir[4], sspd[4], sgust[4]; gint dir, spd = -1; gchar *gustp; size_t glen; strncpy (sdir, tokp, 3); sdir[3] = 0; dir = (!strcmp (sdir, "VRB")) ? -1 : atoi (sdir); memset (sspd, 0, sizeof (sspd)); glen = strspn (tokp + 3, CONST_DIGITS); strncpy (sspd, tokp + 3, glen); spd = atoi (sspd); tokp += glen + 3; gustp = strchr (tokp, 'G'); if (gustp) { memset (sgust, 0, sizeof (sgust)); glen = strspn (gustp + 1, CONST_DIGITS); strncpy (sgust, gustp + 1, glen); tokp = gustp + 1 + glen; } if (!strcmp (tokp, "MPS")) info->windspeed = WINDSPEED_MS_TO_KNOTS ((WeatherWindSpeed)spd); else info->windspeed = (WeatherWindSpeed)spd; if ((349 <= dir) || (dir <= 11)) info->wind = WIND_N; else if ((12 <= dir) && (dir <= 33)) info->wind = WIND_NNE; else if ((34 <= dir) && (dir <= 56)) info->wind = WIND_NE; else if ((57 <= dir) && (dir <= 78)) info->wind = WIND_ENE; else if ((79 <= dir) && (dir <= 101)) info->wind = WIND_E; else if ((102 <= dir) && (dir <= 123)) info->wind = WIND_ESE; else if ((124 <= dir) && (dir <= 146)) info->wind = WIND_SE; else if ((147 <= dir) && (dir <= 168)) info->wind = WIND_SSE; else if ((169 <= dir) && (dir <= 191)) info->wind = WIND_S; else if ((192 <= dir) && (dir <= 213)) info->wind = WIND_SSW; else if ((214 <= dir) && (dir <= 236)) info->wind = WIND_SW; else if ((237 <= dir) && (dir <= 258)) info->wind = WIND_WSW; else if ((259 <= dir) && (dir <= 281)) info->wind = WIND_W; else if ((282 <= dir) && (dir <= 303)) info->wind = WIND_WNW; else if ((304 <= dir) && (dir <= 326)) info->wind = WIND_NW; else if ((327 <= dir) && (dir <= 348)) info->wind = WIND_NNW; }