Remove an unused library since FlightGear dropped support for WeatherCM. Users are highly encouraged to use environment/metar instead.

This commit is contained in:
ehofman 2004-03-17 10:45:32 +00:00
parent aadff33011
commit 4c77c1691b
24 changed files with 2 additions and 12554 deletions

View File

@ -376,7 +376,6 @@ AC_CONFIG_FILES([ \
simgear/io/Makefile \
simgear/magvar/Makefile \
simgear/math/Makefile \
simgear/metar/Makefile \
simgear/environment/Makefile \
simgear/misc/Makefile \
simgear/nasal/Makefile \

View File

@ -5,7 +5,7 @@ SGTHREAD_DIR =
endif
# METAR_DIRS =
METAR_DIRS = metar environment
METAR_DIRS = environment
EXTRA_DIST = simgear_config.h.vc5 version.h.in
@ -35,4 +35,4 @@ SUBDIRS = \
timing \
xgl
DIST_SUBDIRS = $(SUBDIRS) compatibility metar threads
DIST_SUBDIRS = $(SUBDIRS) compatibility threads

View File

@ -1,3 +0,0 @@
.deps
Makefile
Makefile.in

View File

@ -1,72 +0,0 @@
#include <stdlib.h>
/********************************************************************/
/* */
/* Title: antoi */
/* Date: Jan 28, 1991 */
/* Organization: W/OSO242 - Graphics and Display Section */
/* Programmer: Allan Darling */
/* Language: C/370 */
/* */
/* Abstract: This function will convert a character array */
/* (string) of length (len) into an integer. */
/* The integer is created via a call to the */
/* function atoi. This function extends the */
/* functionality of atoi by removing the */
/* requirement for a sentinal delimited string */
/* as input. */
/* */
/* Input: - Pointer to an array of characters. */
/* - Integer indicating the number of character to include */
/* in the conversion. */
/* */
/* Output:- An integer corresponding to the value in the character */
/* array or INT32_MIN (-2147483647-1) if the function is */
/* unable to acquire system storage. */
/* */
/* Modification History: */
/* None */
/* */
/********************************************************************/
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
#ifndef INT32_MIN
# define INT32_MIN (-2147483647-1)
#endif
int antoi(char * string, int len)
{
/*******************/
/* local variables */
/*******************/
char * tmpstr;
int i,
retval;
/*****************/
/* function body */
/*****************/
tmpstr = (char *)malloc((len+1) * sizeof(char));
if (tmpstr == NULL) return INT32_MIN;
for (i = 0; i < len; i++)
tmpstr[i] = string[i];
tmpstr[len] = '\0';
retval = atoi(tmpstr);
free(tmpstr);
return(retval);
} /* end antoi */

View File

@ -1,163 +0,0 @@
#include "Local.h" /* standard header file */
/********************************************************************/
/* */
/* Title: charcmp */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 12 Dec 1995 */
/* Programmer: CINDY L. CHONG */
/* Language: C/370 */
/* */
/* Abstract: This function will compare each character in the */
/* string match with each character in the pattern */
/* which is made up of characters. The str can */
/* be longer than the pattern. */
/* */
/* External Functions Called: */
/* None. */
/* */
/* Input: str is a pointer to char */
/* pattern is a pointer to char */
/* */
/* Output: Return true if str matches pattern, */
/* otherwise, return false */
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
bool charcmp(char *str, char *pattern)
{
/**********************************************************/
/* Loop while str and pattern is not equal to null, then */
/* inscreases str and pattern by one */
/**********************************************************/
for (; *pattern != '\0'; pattern++)
{
if (*str == '\0')
return FALSE;
/************************************************************/
/* If pattern match str, then increase str and jump out the */
/* case and read next char of the str and pattern */
/************************************************************/
if ( isspace(*pattern) )
pattern = nxtalpha(pattern);
switch( *pattern )
{
case 'c':
if ( !isalnum(*str++) )
{
return FALSE;
}
break;
case 'a':
if ( !isalpha(*str) )
{
return FALSE;
}
str++;
break;
case 'n':
if ( !iscntrl(*str++) )
{
return FALSE;
}
break;
case 'd':
if ( !isdigit(*str) )
{
return FALSE;
}
str++;
break;
case 'g':
if ( !isgraph(*str++) )
{
return FALSE;
}
break;
case 'i':
if ( !islower(*str++) )
{
return FALSE;
}
break;
case 'p':
if ( !isprint(*str++) )
{
return FALSE;
}
break;
case 't':
if ( !ispunct(*str++) )
{
return FALSE;
}
break;
case 'w':
if ( !isspace(*str++) )
{
return FALSE;
}
break;
case 'u':
if ( !isupper(*str++) )
{
return FALSE;
}
break;
case 's':
if (*str++ != ' ')
{
return FALSE;
}
break;
case 'm':
if ( !isspace(*str) )
{
return FALSE;
}
else
{
while ( isspace(*str) )
str++;
}
break;
case '\'':
pattern++;
if (*pattern != *str)
{
return FALSE;
}
pattern++;
str++;
break;
default:
return FALSE;
} /* end switch */
} /* end for */
return (TRUE);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,539 +0,0 @@
#include "Metar.h"
/********************************************************************/
/* */
/* Title: dRVMETAR */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 28 Oct 1994 */
/* Programmer: CARL MCCALLA */
/* Language: C/370 */
/* */
/* Abstract: DRVMETAR is a main routine that acts a driver */
/* for testing the METAR Decoder function. */
/* */
/* External Functions Called: */
/* None. */
/* DcdMETAR */
/* prtDcdMetar */
/* Sec0MTSm */
/* Sec1MTSm */
/* */
/* Input: None */
/* */
/* Output: None */
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
int main()
{
static char *string[] =
{
"KAST 221156Z COR 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KAST COR 221156Z 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KAST COR 221156Z 09005KT 1/SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KP88 COR 221156 09005KT 1/SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KP88 COR 221156 09005KT 1/SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 6//// 70109 T00890084 10100 20089 55005",
NULL,
"EPIT 1755 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1/2V3/4",
"KFAR 181154Z 10003KT 1/4SM HZ CLR 16/13 A2988 RMK AO2 "
"SLP117 56012 10345 20226 T01610133 $",
"KFAR 181154Z 10003KT 1/SM HZ CLR 16/13 A2988 RMK AO2 "
"SLP117 56012 10345 20226 T01610133 $",
"RKSS 21009KT 1400 RP2000 // ////// 21/20 1006/2972 NOSIG",
"RKSS 1200 21009KT 1400 RP2000 // ////// 21/20 1006/2972 NOSIG",
"RKSS 1130Z 23011KT 1100 R14R/P1500N R14L/P1500N BR SCT010 BKN030 "
"BKN080 21/21 Q1006 NOSIG",
"RKSS 1130Z 23011KT 1100 R14R/P1500 R14L/P1500 BR SCT010 BKN030 "
"BKN080 21/21 Q1006 NOSIG",
NULL,
"KFAR 181154Z 10003KT 4SM HZ CLR 16/13 A2988 RMK AO2 "
"SLP117 56012 1//// 2//// T01610133 $",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE DUE LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE DUE10 LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE DUE9 LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE FZDZE10 LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE FZDZE9 LO CLD SLP186",
"MKJP 1400Z 13011KT 9999 FEW022 30/XX Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 M30/XX Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 MM/XX Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 MM/30 Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 MM/M30 Q1015",
"EGPD 36016G26KT 320V030 9999 FEW015TCU SCT026 BKN045 OVC090 "
"SCT120 FEW250 RMK OCNL LTGICCG OHD",
"EGPD 36016G26KT 320V030 9999 FEW015TCU SCT026 07/01 Q1011 "
"RMK TEMPO 8000 -SHRA BKN015 FRQ LTG VC",
"EGPD 36016G26KT 320V030 9999 FEW015TCU SCT026 07/01 Q1011 "
"RMK TEMPO 8000 -SHRA BKN015 LTG DSNT W",
"METAR KLAX 281156Z AUTO VRB100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT FC "
"+TS BLPY FEW/// SCT000 BKN050 SCT150 OVC250 3/M1 A2991 RMK "
"TORNADO B13E45 6 NE MOV E A02 PK WND 18515/45 "
"WSHFT 1350 FROPA TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"VIS 2 1/2 RY11 "
"DVR/1000V1600FT "
"OCNL LTG VCY STN "
"RAB1030E1145 FZDZE56 BLPYE57 CIG 1000V1500 CIG 020 RY11 "
"PRESFR PRESRR SLP013 FG FEW/// HZ SCT000 VIS NW 2 1/2 GR 3/4 "
"VIRGA SE -XRAFG3 CIGE005 BKN014 V OVC "
"FU BKN020 NOSPECI LAST 8/365 SNINCR 2/10 4/178 "
"933125 98096 P 0125 60225 70565 "
"T00261015 10369 21026 "
"404800360 52101 VISNO RY05 CHINO RY27 PNO RVRNO "
"PWINO FZRANO TSNO $",
"KBOS 251356Z 26011KT 10SM CLR 12/02 A2995 RMK AO2 SC VCNTY "
"STN SSE-NNW SCT CI ABV SLP141 T01220023",
"EFHK 36009KT 340V060 CAVOK 12/M02 Q1013 NOSIG",
"EGKK 24011KT 210V300 9999 SCT020 BKN045 12/06 Q1007 NOSIG",
"EGPD 31018KT 8000 RA FEW013 BKN021 OVC045 06/04 Q0994 NOSIG",
"EKCH 16012KT CAVOK 20/07 Q1006 NOSIG",
"ESKN 10014KT 9000 BR SCT100 14/04 Q1010",
"LOWW 231450Z 14017KT CAVOK 23/07 Q1010 NOSIG",
"METAR CYCH 171500Z CCA 30017KT 2SM -SN BKN006",
"METAR CYOW 171500Z CCA 30017KT 2SM -SN BKN006 OVC020 00/M02 "
"A2957 RMK S35F4NS1 /S01/ SNW WET SNW MELTG ON GRND CIG 5-7 "
"SLP018",
"KAST 221156Z AUTO 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005"
" TSB0159E30 TS SE MOV NE",
"KAST 221156Z AUTO 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005"
" TSE0159 TS SE",
"KHVR 1756Z 31007KT 5SM -SN SCT011 BKN024 OVC030 M05/M08 A3056 "
"RMK AOA 933004 "
"BKN V SCT TNO PCPN 000 $ SLP389 4/015 60002 "
"T10501077 11050 21078 51010",
"SPECI KGFI 041420Z AUTO 18030KT 3 1/2SM RVRNO TS -RA BKN008 OVC060 "
"26/22 A2991 RMK A02 RA15TSB20 PRESFR SLP 101 P 0000 T02640218",
"METAR KCLE 281156Z 170100G135KT 110V180 M1/4SM "
"R01L/P6000FT +TSSHRA VCFG "
"BKN025 SCT100 OVC200 M26/ A2991 RMK PK WND 18515/45 A02 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"CIG 1000V1500 PRESFR FRQ LTG CG NW "
"RAB1030E1145 FZDZE56 PRESRR SLP135 GS "
"T1263 "
"VIRGA NW 8/365 4/178 P 0125 60225 7//// 70565 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"CYQR 161700Z 15015KT 15SM SCT045 SCT090 BKN250 10/03 A2955 "
"RMK SC1AC2C11 OB TAKEN H+ 5 DUE AWOS FAILURE SLP027",
"KPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2",
"SPECI KGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 199/182",
"SPECI KGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP701 P0254 199/182",
"KHLN 281156Z AUTO 27005KT 10SM OVC023 07/05 A3011 RMK AOA OVC V "
"BKN $ SLP202 60000 70001 T00670050 10122 20061 53003",
"KPHX 281156Z 12004KT 10SM CLR 15/05 A2996 RMK AOA SLP135 T01500050 "
"10250 20150 53006",
"KFCA 281156Z 30003KT 10SM CLR 06/02 A3009 RMK AO TNO $ SLP191 "
"T00610023 10167 20056 53003",
"KAST 281156Z 00000KT 10SM BKN095 09/08 A2997 RMK AOA SLP150 "
"T00940084 10161 20094 52005 ",
"KHVR 281156Z 03003KT 10SM OVC020 09/07 A3010 RMK AO TNO ZRNO "
"$ SLP194 T00940073 10156 20089 51005",
"KGGW 281156Z 35006KT 5SM BR OVC010 10/09 A3003 RMK AOA $ SLP177 "
"70003 T01000095 10156 20110 53008",
"KELY 1153Z AUTO 14004KT 10SM SCT075 01/M01 A3011 RMK AOA TNO ZRNO "
"SLP171 70001 T00061011 10139 21006 51005",
"KFLG 281156Z 29006KT 10SM CLR 04/M01 A3012 RMK AO TNO SLP147 "
"T00391011 21006 51004",
"KGTF 281156Z 27005KT 7SM BKN080 04/04 A3010 RMK AOA SLP205 "
"T00440045 10117 20039 51006",
"K13A 1918Z 20011KT 26/M06 RMK AO PKWND 020/RNO 644V264 T02611061",
"KP88 1919Z 09001KT 14/03 RMK AO / PKWND 002/RNO 158 Z T01440034",
"K40B 1924Z 29004KT 15/M07 RMK AO PKWND 011/RM MV263 T01501072",
"KGGW 1756Z 33018KT 10SM OVC015 M03/M06 A3041 RMK AOA SLP338 "
"4/007 60002 T10281055 11028 21072 51009",
"KPHX 1756Z 130004KT 10SM CLR 18/M03 A3001 RMK AOA SLP154 "
"T01781033 10178 20067 58007",
"KFCA 1756Z 29005KT 10SM CLR 05/M11 A3049 RMK AOA TNO SLP352 "
"T00501111 10050 21044 50004",
"KAST 1756Z 01006KT 10SM CLR 11/04 A3047 RMK AOA SLP316 "
"T01110045 10111 20000 50002",
"KELY 1753Z 34010KT 10SM CLR 01/M07 A3022 RMK AOA TNO ZRNO "
"SLP240 T00111066 10011 21078 58007",
"KFLG 1756Z 07006KT 10SM CLR 06/M12 A3009 RMK AO TNO ZRNO "
"SLP178 T00561122 10061 21100 58005",
"KGTF 1756Z 35010KT 1/2SM -SN FG VV09 M06/M08 A3051 RMK AOA "
"933004 SFC VSBY 3/4 "
"PCPN M SLP393 60010 T10611077 11044 21067 53013",
"KHLN 1756Z 35012KT 10SM SCT032 OVC060 M02/M09 A3048 RMK AOA "
"SLP369 60000 T10171094 11017 21061 53006",
"KAST 1756Z 01006KT 10SM CLR 11/04 A3047 RMK AOA SLP316 61104 "
"71235 T01110045 10111 20000 401720056 58002",
"METAR KLAX 04281156Z AUTO VRB100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT FC "
"+TS BLPY FEW000 BKN050 SCT150 OVC250 3/M1 A2991 RMK "
"TORNADO B13 DSNT NE A02 PK WND 18515/45 "
"WSHFT 1350 FROPA TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"VIS 2 1/2 RY11 OCNL LTG VCY STN "
"RAB1030E1145 FZDZE56 BLPYE57 CIG 1000V1500 CIG 020 RY11 "
"PRESFR PRESRR SLP013 FG FEW000 VIS NW2 1/2 GR 3/4 "
"VIRGA SE -XRAFG3 CIGE005 BKN014 V OVC "
"FU BKN020 NOSPECI LAST 8/365 SNINCR 2/10 4/178 "
"933125 98096 P 0125 60225 70565 "
"T00261015 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 17012KT 130V210 3 1/2SM R15L/0500FT -RA "
"SCT050 OVC110 26/18 A2991 RMK FUNNEL CLOUDS A02 RAB30 "
"SLP 101 GR M1/4 VIRGA SCT V BKN P 0010 T02640178",
"METAR KGFI 041356Z AUTO 05008KT 10SM R15L/P6000FT CLR A2991 "
"RMK WATERSPOUTS VCY STN NW A02 SLP 101 10288 20243 52021 $ ",
"SPECI KGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"A2900 RMK A02A PK WND 18056/28 OCNL LTG AP "
"RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 T01990182",
"KABE 281900Z NIL",
"METAR KPIT NIL",
"METAR KCLE 04281156Z 170100G135KT 110V180 M1/4SM "
"R01L/P6000FT +TSSHRA VCFG "
"BKN025 SCT100 OVC200 M26/ A2991 RMK PK WND 18515/45 A02 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"CIG 1000V1500 PRESFR FRQ LTG CG NW "
"RAB1030E1145 FZDZE56 PRESRR SLP135 GS "
"T1263 "
"VIRGA NW 8/365 4/178 P 0125 60225 7//// 70565 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KPHL 040256Z AUTO 170100G135KT 130V210 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 M26/ A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 LTG DSNT "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP037 GR 2 3/4 "
"VIRGA E 8/365 4/178 P 0125 70565 21026 T0263 10369 60225 "
"404800360 52101 PWINO FZRANO TSNO $",
"SPECI KGFI 041420Z AUTO 18030KT 2 1/2SM RVRNO TS -RA BKN008 "
"OVC060 25/22 A2991 RMK A02 LTG DSNT W "
"RAB15TSB20 PRESFR SLP101 P 0000 "
"254/218",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 M26/ A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR M1/4 "
"VIRGA SE 8/365 4/178 P 0125 6//// 60225 70565 T0263 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 M26/ A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR 25 "
"VIRGA 35 8/365 4/178 P 0125 6//// 60225 70565 T0263 10369 21026 "
"VIRGA 35 8/365 4/178 P 0125 21026 70565 10369 60225 T0263 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 3/M1 A2991 RMK A02 PK WND 18515/45 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR 25 "
"VIRGA 35 8/365 4/178 P 0125 60225 70565 T00261015 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 3/M1 A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR 25 "
"VIRGA 35 8/365 4/178 P 0125 60225 70565 T00261015 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO",
"METAR KGFI 041356Z AUTO 05008KT 10SM R15L/P6000FT CLR A2991 RMK "
"A02 SLP 101 10288 20243 52021",
"SPECI DGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"M20/M18 A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 M199/M182",
"SPECI DGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"M20/M18 A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 M199/182",
"SPECI DGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"M20/M18 A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 199/M182",
"METAR APIT 171755Z AUTO 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 4/369 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 8/563 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2 SLP875 SGB1213E1225",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK SLP056 "
"RAE0123",
"SPECI APIT 171755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 8/321 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 SLP875 FGB1713",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2 SLP875",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2 1/2 SLP875",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2 1/2 SLP875",
"EGPF 1720Z 00000KT 9999 -SHRA STC014 SCT020CB BNK024 12/09 "
"Q1003 NOSIG",
"NZAA 1700Z 03010KT 30KM 03 5CU022 7SC035 11/07 Q1006.5 NOSIG",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK KAUKAU 30050KT",
"DGAA 1800Z 22012KT 9999 SCT009 BKN120 25/21 Q1015",
"DAAT 1830Z 30010KT CAVOK 29/06 Q1019",
"GQPP 1800Z 34023KT 3000 DRSA SKC 24/20 Q1011 NSG",
"DAAG 1830Z 06006KT 9999 SCT020 25/22 Q1015",
"DABB 1830Z 04010KT 9999 SCT030TCU SCT033CB 27/18 Q1017",
"DABC 1830Z 00000KT 9999 SCT026TCU SCT036CB 22/18 Q1020 RETS",
"NZAA 1700Z 03010KT 30KM 03 5CU022 7SC035 11/07 Q1006.5 NOSIG",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK K",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK KAUKAU 30050KT",
"DGAA 1800Z 22012KT 9999 SCT009 BKN120 25/21 Q1015",
"GFLL 1900Z NIL",
"GOOY 1800Z 03006G17KT 340V080 6000 TSRA BKN016 BKN030CB "
"BKN133 26/23 Q1013 NOSIG",
"GCXO 1930Z 32018KT 8000 SCT003 SCT007 18/16 Q1019",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2",
"BPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2",
"CPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2 1/2",
"DPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2 1/2",
"FPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 3/4V2 1/2",
"GPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 3/4V3",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB M18/M16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB M18/16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/M16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB MM/M16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB MM/16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB M18/MM A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/MM A2992",
NULL};
/***************************/
/* DECLARE LOCAL VARIABLES */
/***************************/
Decoded_METAR Metar;
Decoded_METAR *Mptr = &Metar;
int j,
ErReturn;
/***************************************************/
/* START BODY OF MAIN ROUTINE FOR CALLING DcdMETAR */
/***************************************************/
j = 0;
while( string[j] != NULL)
{
/*-- PRINT INPUT METAR REPORT ----------------------------*/
printf("INPUT METAR REPORT: %s\n",string[j] );
/*-- DECODE INPUT REPORT ---------------------------------*/
if ( (ErReturn = DcdMETAR( string[ j ], Mptr )) != 0 )
printf("DcdMETAR: Error Return Number: %d\n",ErReturn);
/*-- PRINT DECODED METAR REPORT ELEMENTS -----------------*/
prtDMETR( Mptr );
j++;
}
return 0;
}

View File

@ -1,59 +0,0 @@
#include "Local.h" /* standard header file */
#include "Metar.h"
/********************************************************************/
/* */
/* Title: fracPart */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 13 Jun 1995 */
/* Programmer: CARL MCCALLA */
/* Language: C/370 */
/* */
/* Abstract: Convert a character string fraction into a */
/* decimal (floating point) number. */
/* */
/* External Functions Called: */
/* None. */
/* */
/* Input: string - a pointer to a character string frac- */
/* tion. */
/* Output: A decimal (floating point) number. */
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
float fracPart( char *string )
{
/***************************/
/* DECLARE LOCAL VARIABLES */
/***************************/
char buf[ 6 ],
*slash;
float numerator,
denominator;
/*************************/
/* START BODY OF ROUTINE */
/*************************/
slash = strchr(string, '/');
memset(buf , '\0', 6);
strncpy( buf, string, slash-string);
numerator = (float) atoi(buf);
memset(buf , '\0', 6);
strcpy( buf, slash+1);
denominator = (float) atoi(buf);
return (numerator/denominator);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
includedir = @includedir@/metar
lib_LIBRARIES = libsgmetar.a
include_HEADERS = MetarReport.h MetarStation.h
libsgmetar_a_SOURCES = \
Antoi.cpp Charcmp.cpp Dcdmetar.cpp Dcdmtrmk.cpp Drvmetar.c \
Fracpart.cpp Local.h Metar.h \
MetarReport.cpp \
MetarStation.cpp \
Prtdmetr.cpp Stspack2.cpp Stspack3.cpp
INCLUDES = -I$(top_srcdir)

View File

@ -1,149 +0,0 @@
# Microsoft Developer Studio Project File - Name="Metar" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=Metar - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Metar.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Metar.mak" CFG="Metar - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Metar - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "Metar - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "Metar - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /G6 /W3 /GX /Zi /O2 /I "..\..\..\lib" /I "..\lib" /I "..\..\lib" /I "..\..\..\..\lib" /I ".." /I "..\.." /I "..\..\.." /I "..\..\..\.." /I "..\include" /I "..\..\include" /I "..\..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "Metar - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /G6 /W3 /Gm /GX /Zi /Od /I "..\..\..\lib" /I "..\lib" /I "..\..\lib" /I "..\..\..\..\lib" /I ".." /I "..\.." /I "..\..\.." /I "..\..\..\.." /I "..\include" /I "..\..\include" /I "..\..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "Metar - Win32 Release"
# Name "Metar - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\Antoi.cpp
# End Source File
# Begin Source File
SOURCE=.\Charcmp.cpp
# End Source File
# Begin Source File
SOURCE=.\Dcdmetar.cpp
# End Source File
# Begin Source File
SOURCE=.\Dcdmtrmk.cpp
# End Source File
# Begin Source File
SOURCE=.\Fracpart.cpp
# End Source File
# Begin Source File
SOURCE=.\MetarReport.cpp
# End Source File
# Begin Source File
SOURCE=.\MetarStation.cpp
# End Source File
# Begin Source File
SOURCE=.\Prtdmetr.cpp
# End Source File
# Begin Source File
SOURCE=.\Stspack2.cpp
# End Source File
# Begin Source File
SOURCE=.\Stspack3.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\LOCAL.H
# End Source File
# Begin Source File
SOURCE=.\METAR.H
# End Source File
# Begin Source File
SOURCE=.\MetarReport.h
# End Source File
# Begin Source File
SOURCE=.\MetarStation.h
# End Source File
# End Group
# End Target
# End Project

View File

@ -1,265 +0,0 @@
#ifndef METARX
#define METARX
/********************************************************************/
/* */
/* Title: METAR H */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 19 Jan 1996 */
/* Programmer: CARL MCCALLA */
/* Language: C/370 */
/* */
/* Abstract: METAR Decoder Header File. */
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
#include "Local.h" /* standard header file */
/*********************************************/
/* */
/* RUNWAY VISUAL RANGE STRUCTURE DECLARATION */
/* AND VARIABLE TYPE DEFINITION */
/* */
/*********************************************/
typedef struct runway_VisRange {
char runway_designator[6];
bool vrbl_visRange;
bool below_min_RVR;
bool above_max_RVR;
int visRange;
int Max_visRange;
int Min_visRange;
} Runway_VisRange;
/***********************************************/
/* */
/* DISPATCH VISUAL RANGE STRUCTURE DECLARATION */
/* AND VARIABLE TYPE DEFINITION */
/* */
/***********************************************/
typedef struct dispatch_VisRange {
bool vrbl_visRange;
bool below_min_DVR;
bool above_max_DVR;
int visRange;
int Max_visRange;
int Min_visRange;
} Dispatch_VisRange;
/*****************************************/
/* */
/* CLOUD CONDITION STRUCTURE DECLARATION */
/* AND VARIABLE TYPE DEFINITION */
/* */
/*****************************************/
typedef struct cloud_Conditions {
char cloud_type[5];
char cloud_hgt_char[4];
char other_cld_phenom[4];
int cloud_hgt_meters;
} Cloud_Conditions;
/*****************************************/
/* */
/* WIND GROUP DATA STRUCTURE DECLARATION */
/* AND VARIABLE TYPE DEFINITION */
/* */
/*****************************************/
typedef struct windstruct {
char windUnits[ 4 ];
bool windVRB;
int windDir;
int windSpeed;
int windGust;
} WindStruct;
/*****************************************/
/* */
/* RECENT WX GROUP STRUCTURE DECLARATION */
/* AND VARIABLE TYPE DEFINITION */
/* */
/*****************************************/
typedef struct recent_wx {
char Recent_weather[ 5 ];
int Bhh;
int Bmm;
int Ehh;
int Emm;
} Recent_Wx;
/***************************************/
/* */
/* DECODED METAR STRUCTURE DECLARATION */
/* AND VARIABLE TYPE DEFINITION */
/* */
/***************************************/
typedef struct decoded_METAR {
char synoptic_cloud_type[ 6 ];
char snow_depth_group[ 6 ];
char codeName[ 6 ];
char stnid[5];
char horiz_vsby[5];
char dir_min_horiz_vsby[3];
char vsby_Dir[ 3 ];
char WxObstruct[10][8];
char autoIndicator[5];
char VSBY_2ndSite_LOC[10];
char SKY_2ndSite_LOC[10];
char SKY_2ndSite[10];
char SectorVsby_Dir[ 3 ];
char ObscurAloft[ 12 ];
char ObscurAloftSkyCond[ 12 ];
char VrbSkyBelow[ 4 ];
char VrbSkyAbove[ 4 ];
char LTG_DIR[ 3 ];
char CloudLow;
char CloudMedium;
char CloudHigh;
char CIG_2ndSite_LOC[10];
char VIRGA_DIR[3];
char TornadicType[15];
char TornadicLOC[10];
char TornadicDIR[4];
char TornadicMovDir[3];
char CHINO_LOC[6];
char VISNO_LOC[6];
char PartialObscurationAmt[2][7];
char PartialObscurationPhenom[2][12];
char SfcObscuration[6][10];
char charPrevailVsby[12];
char charVertVsby[10];
char TS_LOC[3];
char TS_MOVMNT[3];
bool Indeterminant3_6HrPrecip;
bool CIGNO;
bool SLPNO;
bool ACFTMSHP;
bool NOSPECI;
bool FIRST;
bool LAST;
bool SunSensorOut;
bool AUTO;
bool COR;
bool NIL_rpt;
bool CAVOK;
bool RVRNO;
bool A_altstng;
bool Q_altstng;
bool VIRGA;
bool VOLCASH;
bool GR;
bool CHINO;
bool VISNO;
bool PNO;
bool PWINO;
bool FZRANO;
bool TSNO;
bool DollarSign;
bool PRESRR;
bool PRESFR;
bool Wshft_FROPA;
bool OCNL_LTG;
bool FRQ_LTG;
bool CNS_LTG;
bool CG_LTG;
bool IC_LTG;
bool CC_LTG;
bool CA_LTG;
bool DSNT_LTG;
bool AP_LTG;
bool VcyStn_LTG;
bool OVHD_LTG;
bool LightningVCTS;
bool LightningTS;
int TornadicDistance;
int ob_hour;
int ob_minute;
int ob_date;
int minWnDir;
int maxWnDir;
int VertVsby;
int temp;
int dew_pt_temp;
int QFE;
int hectoPasc_altstng;
int char_prestndcy;
int minCeiling;
int maxCeiling;
int WshfTime_hour;
int WshfTime_minute;
int min_vrbl_wind_dir;
int max_vrbl_wind_dir;
int PKWND_dir;
int PKWND_speed;
int PKWND_hour;
int PKWND_minute;
int SKY_2ndSite_Meters;
int Ceiling;
int Estimated_Ceiling;
int SNINCR;
int SNINCR_TotalDepth;
int SunshineDur;
int ObscurAloftHgt;
int VrbSkyLayerHgt;
int Num8thsSkyObscured;
int CIG_2ndSite_Meters;
int snow_depth;
int BTornadicHour;
int BTornadicMinute;
int ETornadicHour;
int ETornadicMinute;
float SectorVsby;
float WaterEquivSnow;
float VSBY_2ndSite;
float prevail_vsbySM;
float prevail_vsbyM;
float prevail_vsbyKM;
float prestndcy;
float precip_amt;
float precip_24_amt;
float maxtemp;
float mintemp;
float max24temp;
float min24temp;
float minVsby;
float maxVsby;
float hourlyPrecip;
float TWR_VSBY;
float SFC_VSBY;
float Temp_2_tenths;
float DP_Temp_2_tenths;
float SLP;
float GR_Size;
double inches_altstng;
Runway_VisRange RRVR[12];
Dispatch_VisRange DVR;
Recent_Wx ReWx[3];
WindStruct winData;
Cloud_Conditions cldTypHgt[6];
} Decoded_METAR;
#define MAXWXSYMBOLS 10 /*-- NOT TO EXCEED 10 PRES. WX GRPS --*/
#define MAXTOKENS 500 /*-- RPT NOT TO EXCEED 500 GRPS --*/
void prtDMETR( Decoded_METAR *Mptr );
int DcdMETAR( char *string, Decoded_METAR *Mptr );
#endif

View File

@ -1,309 +0,0 @@
// Metar report implementation class code
#include <simgear/compiler.h>
#include STL_IOSTREAM
#include "MetarReport.h"
#include "Metar.h"
SG_USING_STD(endl);
SG_USING_STD(ostream);
CMetarReport::CMetarReport(
char *s ) :
m_DecodedReport( 0 )
{
m_DecodedReport = new Decoded_METAR;
DcdMETAR( s, (Decoded_METAR *)m_DecodedReport );
}
CMetarReport::~CMetarReport()
{
}
static int DecodeDirChars( char* c )
{
int r = 0;
if ( c[0] )
{
if ( c[0] == 'E' ) r = 90;
else if ( c[0] == 'S' ) r = 180;
else if ( c[0] == 'W' ) r = 270;
if ( r == 0 )
{
if ( c[1] == 'E' ) r = 45;
else if ( c[1] == 'W' ) r = 315;
}
else if ( r == 180 )
{
if ( c[1] == 'E' ) r = 135;
else if ( c[1] == 'W' ) r = 225;
}
}
return r;
}
char *CMetarReport::StationID()
{
return ((Decoded_METAR *)m_DecodedReport)->stnid;
}
int CMetarReport::Day()
{
return ((Decoded_METAR*)m_DecodedReport)->ob_date;
}
int CMetarReport::Hour()
{
return ((Decoded_METAR*)m_DecodedReport)->ob_hour;
}
int CMetarReport::Minutes()
{
return ((Decoded_METAR*)m_DecodedReport)->ob_minute;
}
int CMetarReport::WindDirection()
{
return ((Decoded_METAR *)m_DecodedReport)->winData.windDir;
}
int CMetarReport::WindSpeed()
{
return ((Decoded_METAR *)m_DecodedReport)->winData.windSpeed;
}
int CMetarReport::WindGustSpeed()
{
return ((Decoded_METAR *)m_DecodedReport)->winData.windGust;
}
int CMetarReport::LightningDirection()
{
return DecodeDirChars( ((Decoded_METAR *)m_DecodedReport)->LTG_DIR );
}
char CMetarReport::CloudLow()
{
return ((Decoded_METAR *)m_DecodedReport)->CloudLow;
}
char CMetarReport::CloudMedium()
{
return ((Decoded_METAR *)m_DecodedReport)->CloudMedium;
}
char CMetarReport::CloudHigh()
{
return ((Decoded_METAR *)m_DecodedReport)->CloudHigh;
}
int CMetarReport::VirgaDirection()
{
return DecodeDirChars( ((Decoded_METAR *)m_DecodedReport)->VIRGA_DIR );
}
int CMetarReport::TornadicDirection()
{
return DecodeDirChars( ((Decoded_METAR *)m_DecodedReport)->TornadicDIR );
}
int CMetarReport::TornadicMovementDirection()
{
return DecodeDirChars( ((Decoded_METAR *)m_DecodedReport)->TornadicMovDir );
}
int CMetarReport::ThunderStormDirection()
{
return DecodeDirChars( ((Decoded_METAR *)m_DecodedReport)->TS_LOC );
}
int CMetarReport::ThunderStormMovementDirection()
{
return DecodeDirChars( ((Decoded_METAR *)m_DecodedReport)->TS_MOVMNT );
}
bool CMetarReport::Virga()
{
return ((Decoded_METAR *)m_DecodedReport)->VIRGA;
}
bool CMetarReport::VolcanicAsh()
{
return ((Decoded_METAR *)m_DecodedReport)->VOLCASH;
}
bool CMetarReport::Hail()
{
return ((Decoded_METAR *)m_DecodedReport)->GR;
}
bool CMetarReport::OccationalLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->OCNL_LTG;
}
bool CMetarReport::FrequentLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->FRQ_LTG;
}
bool CMetarReport::ContinuousLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->CNS_LTG;
}
bool CMetarReport::CloudToGroundLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->CG_LTG;
}
bool CMetarReport::InterCloudLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->IC_LTG;
}
bool CMetarReport::CloudToCloudLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->CC_LTG;
}
bool CMetarReport::CloudToAirLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->CA_LTG;
}
bool CMetarReport::DistantLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->DSNT_LTG;
}
bool CMetarReport::AirportLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->AP_LTG;
}
bool CMetarReport::VicinityLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->VcyStn_LTG;
}
bool CMetarReport::OverheadLightning()
{
return ((Decoded_METAR *)m_DecodedReport)->OVHD_LTG;
}
int CMetarReport::Temperature()
{
return ((Decoded_METAR *)m_DecodedReport)->temp;
}
int CMetarReport::DewpointTemperature()
{
return ((Decoded_METAR *)m_DecodedReport)->dew_pt_temp;
}
int CMetarReport::VerticalVisibility() // Meters
{
return ((Decoded_METAR *)m_DecodedReport)->VertVsby;
}
int CMetarReport::Ceiling()
{
return
(int)(SG_FEET_TO_METER*((Decoded_METAR *)m_DecodedReport)->Ceiling);
}
int CMetarReport::EstimatedCeiling()
{
return
(int)(SG_FEET_TO_METER
* ((Decoded_METAR *)m_DecodedReport)->Estimated_Ceiling);
}
int CMetarReport::VariableSkyLayerHeight()
{
return
(int)(SG_FEET_TO_METER
* ((Decoded_METAR *)m_DecodedReport)->VrbSkyLayerHgt);
}
int CMetarReport::SnowDepthInches()
{
return ((Decoded_METAR *)m_DecodedReport)->snow_depth;
}
ostream&
operator << ( ostream& out, CMetarReport& p )
{
return out
<< "StationID " << p.StationID()
<< " WindDirection " << p.WindDirection()
<< " WindSpeed " << p.WindSpeed()
<< " WindGustSpeed " << p.WindGustSpeed() << endl
<< "CloudLow " << p.CloudLow()
<< " CloudMedium " << p.CloudMedium()
<< " CloudHigh " << p.CloudHigh() << endl
<< "TornadicDirection " << p.TornadicDirection()
<< " TornadicMovementDirection " << p.TornadicMovementDirection() << endl
<< "ThunderStormDirection " << p.ThunderStormDirection()
<< " ThunderStormMovementDirection " << p.ThunderStormMovementDirection() << endl
<< "Virga " << p.Virga()
<< " VirgaDirection " << p.VirgaDirection() << endl
<< "VolcanicAsh " << p.VolcanicAsh() << endl
<< "Hail " << p.Hail() << endl
<< "LightningDirection " << p.LightningDirection()
<< " OccationalLightning " << p.OccationalLightning()
<< " FrequentLightning " << p.FrequentLightning()
<< " ContinuousLightning " << p.ContinuousLightning() << endl
<< "CloudToGroundLightning " << p.CloudToGroundLightning()
<< " InterCloudLightning " << p.InterCloudLightning()
<< " CloudToCloudLightning " << p.CloudToCloudLightning()
<< " CloudToAirLightning " << p.CloudToAirLightning() << endl
<< "DistantLightning " << p.DistantLightning()
<< " AirportLightning " << p.AirportLightning()
<< " VicinityLightning " << p.VicinityLightning()
<< " OverheadLightning " << p.OverheadLightning() << endl
<< "VerticalVisibility " << p.VerticalVisibility() << endl // Meters
<< "Temperature " << p.Temperature()
<< " DewpointTemperature " << p.DewpointTemperature() << endl
<< "Ceiling " << p.Ceiling()
<< " EstimatedCeiling " << p.EstimatedCeiling()
<< " VariableSkyLayerHeight " << p.VariableSkyLayerHeight() << endl
<< "SnowDepthInches " << p.SnowDepthInches() << endl
;
}
double CMetarReport::AirPressure()
{
return ((Decoded_METAR *)m_DecodedReport)->inches_altstng;
}
void CMetarReport::dump()
{
prtDMETR( (Decoded_METAR *)m_DecodedReport );
}
double CMetarReport::PrevailVisibility()
{
//Values from each visibility field converted to meters.
double smiles;
double km;
double meters;
smiles = ((Decoded_METAR*) m_DecodedReport)->prevail_vsbySM * 1609.34;
km = ((Decoded_METAR*) m_DecodedReport)->prevail_vsbyKM * 1000;
meters = ((Decoded_METAR*) m_DecodedReport)->prevail_vsbyM;
/* Return the smallest one. If the field is specified it should have been
set to MAX_INT */
if(smiles < km && smiles < meters)
return smiles;
else
return km < meters ? km : meters;
}

View File

@ -1,122 +0,0 @@
// Class encapulating the metar report information
//
// Individual METAR reports are found in this directory:
// ftp://weather.noaa.gov/data/observations/metar/stations
//
#ifndef _MetarReport_
#define _MetarReport_
#include <simgear/compiler.h>
#include STL_IOSTREAM
#include STL_STRING
#include <vector>
#include <simgear/math/point3d.hxx>
#include <simgear/math/polar3d.hxx>
SG_USING_STD(string);
class CMetarReport
{
// Typedefs, enumerations
// Attributes
private:
void *m_DecodedReport;
// A void pointer which is cast to the correct type in the cpp file.
// I don't want the ugly metar structure and header files dragged into
// every report user program file.
// Probably should be a smart pointer if copy constructor and assignment
// is allowed.
// Operations
public:
CMetarReport(
char *s );
// Constructor
~CMetarReport();
// Destructor
char *StationID();
int Day(); // The day of month on which the report was issued.
int Hour(); // The hour of the day the report was issued.
int Minutes(); //Minutes past the hour of the report issue time.
// Directions in degrees
// Speed in knots
// Altitude in meters
// Temperature in centigrade
int WindDirection();
int WindSpeed();
int WindGustSpeed();
// Add cloud more cloud info...
// Cloud code characters...
char CloudLow();
char CloudMedium();
char CloudHigh();
bool Virga();
int VirgaDirection();
int TornadicDirection();
int TornadicMovementDirection();
int ThunderStormDirection();
int ThunderStormMovementDirection();
bool VolcanicAsh();
bool Hail();
int LightningDirection();
bool OccationalLightning();
bool FrequentLightning();
bool ContinuousLightning();
bool Lightning()
{
return OccationalLightning() || FrequentLightning() || ContinuousLightning();
}
bool CloudToGroundLightning();
bool InterCloudLightning();
bool CloudToCloudLightning();
bool CloudToAirLightning();
bool DistantLightning();
bool AirportLightning();
bool OverheadLightning();
bool VicinityLightning();
int Temperature();
int DewpointTemperature();
int VerticalVisibility();
int Ceiling();
int EstimatedCeiling();
int VariableSkyLayerHeight();
int SnowDepthInches();
double AirPressure(); //Return the air pressure in InchesHg.
double PrevailVisibility(); // Prevailing Visibility in meters.
void dump();
private:
CMetarReport(
const CMetarReport &rNewObj );
// Copy constructor. Not implemented.
CMetarReport &operator =(
const CMetarReport &rObj );
// Assignment operator. Not implemented.
};
ostream& operator << ( ostream&, CMetarReport& );
#endif

View File

@ -1,216 +0,0 @@
// Metar station implementation code
#include <simgear/compiler.h>
#include STL_IOSTREAM
#include <stdio.h>
#include "MetarStation.h"
#include <algorithm>
SG_USING_STD(ostream);
SG_USING_STD(cout);
SG_USING_STD(endl);
double CMetarStation::decodeDMS( char *b )
{
double r = 0;
double m = 0;
double s = 0;
if ( *b )
{
// Degrees
r = (*b - '0') * 10.0; b++;
r += (*b - '0'); b++;
if ( *b != '-' )
{
r *= 10;
r += (*b - '0'); b++;
}
b++;
// Minutes
m = (*b - '0') * 10.0; b++;
m += (*b - '0'); b++;
r += m/60.0;
if ( *b == '-' )
{
// Seconds
b++;
s = (*b - '0') * 10.0; b++;
s += (*b - '0'); b++;
}
r += s/3600.0;
// Direction (E W N S)
if ( *b == 'W' || *b == 'S' ) r = -r;
}
return r * SGD_DEGREES_TO_RADIANS;
}
// Constructor
// Decodes METAR station string of this format:
// KPUB;72;464;Pueblo, Pueblo Memorial Airport;CO;United States;4;38-17-24N;104-29-54W;38-17-03N;104-29-43W;1440;1420;P
CMetarStation::CMetarStation(
char *s )
{
char *t;
t = strchr( s, ';' ); *t = 0; t++;
m_ID = s;
s = t; t = strchr( s, ';' ); *t = 0; t++;
m_number = atoi( s ) * 1000;
s = t; t = strchr( s, ';' ); *t = 0; t++;
m_number += atoi( s );
s = t; t = strchr( s, ';' ); *t = 0; t++;
m_name = s;
s = t; t = strchr( s, ';' ); *t = 0; t++;
m_state = s;
s = t; t = strchr( s, ';' ); *t = 0; t++;
m_country = s;
s = t; t = strchr( s, ';' ); *t = 0; t++;
m_region = atoi( s );
s = t; t = strchr( s, ';' ); *t = 0; t++;
double latitude = decodeDMS( s );
s = t; t = strchr( s, ';' ); *t = 0; t++;
double longitude = decodeDMS( s );
s = t; t = strchr( s, ';' ); *t = 0; t++;
double ulatitude = decodeDMS( s );
s = t; t = strchr( s, ';' ); *t = 0; t++;
double ulongitude = decodeDMS( s );
s = t; t = strchr( s, ';' ); *t = 0; t++;
double altitude = atoi( s ) * SG_FEET_TO_METER;
m_altitude = (int)altitude;
s = t; t = strchr( s, ';' ); *t = 0; t++;
double ualtitude = atoi( s ) * SG_FEET_TO_METER;
Point3D p( longitude, latitude, altitude+SG_EQUATORIAL_RADIUS_M );
m_locationPolar = p;
m_locationCart = sgPolarToCart3d( p );
Point3D up( ulongitude, ulatitude, ualtitude+SG_EQUATORIAL_RADIUS_M );
m_upperLocationPolar = up;
m_upperLocationCart = sgPolarToCart3d( up );
s = t;
m_pFlag = s[0];
}
void CMetarStation::dump()
{
cout << "ID:" << ID();
cout << endl;
cout << "number:" << number();
cout << endl;
cout << "name:" << name();
cout << endl;
cout << "state:" << state();
cout << endl;
cout << "country:" << country();
cout << endl;
cout << "region:" << region();
cout << endl;
cout << "Location (cart):" << locationCart();
cout << endl;
cout << "Location (polar):" << locationPolar();
cout << endl;
cout << "Upper Location (cart):" << upperLocationCart();
cout << endl;
cout << "Upper Location (polar):" << upperLocationPolar();
cout << endl;
cout << "P flag:" << pFlag();
cout << endl;
}
CMetarStationDB::CMetarStationDB(const char * dbPath)
{
// Read the list of metar stations, decoding and adding to global list.
CMetarStation *m;
char buf[256];
// Open the metar station list
FILE *f = fopen( dbPath, "r" );
if ( f != NULL ) {
// Read each line, create an instance of a station, and add it to the vector
while ( fgets( buf, 256, f) != NULL && feof( f ) == 0 ) {
// cout << buf << endl;
m = new CMetarStation( buf );
//m->dump();
METAR_Stations[m->ID()]=( m );
}
// Close the list
fclose( f );
// cout << METAR_Stations.size() << " Metar stations" << endl;
} else {
// cout << "Could not open MetarStations file " << endl;
}
}
CMetarStation * CMetarStationDB::find( std::string stationID )
{
std::map<std::string,CMetarStation*>::iterator target;
target = METAR_Stations.find(stationID);
if(target!= METAR_Stations.end() )
return target->second;
else
return NULL;
}
CMetarStation * CMetarStationDB::find( Point3D locationCart )
{
std::map<std::string,CMetarStation*>::iterator itr;
double bestDist = 99999999;
CMetarStation *bestStation = NULL;
Point3D curLocation = locationCart;
itr = METAR_Stations.begin();
while(itr != METAR_Stations.end())
{
double dist = itr->second->locationCart().distance3Dsquared( curLocation );
if (dist < bestDist )
{
bestDist = dist;
bestStation = itr->second;
}
itr++;
}
return bestStation;
}
CMetarStationDB::~CMetarStationDB() {
std::map<std::string,CMetarStation*>::iterator itr;
for(itr = METAR_Stations.begin(); itr != METAR_Stations.end(); itr++)
{
delete itr->second;
}
}
ostream&
operator << ( ostream& out, const CMetarStation& p )
{
return out
<< "ID:" << p.m_ID << endl
<< "number:" << p.m_number << endl
<< "name:" << p.m_name << endl
<< "state:" << p.m_state << endl
<< "country:" << p.m_country << endl
<< "region:" << p.m_region << endl
<< "Location (cart):" << p.m_locationCart << endl
<< "Location (polar):" << p.m_locationCart << endl
<< "Upper Location (cart):" << p.m_upperLocationCart << endl
<< "Upper Location (polar):" << p.m_upperLocationPolar << endl
<< "P flag:" << p.m_pFlag << endl;
}

View File

@ -1,110 +0,0 @@
// Class encapulating the metar station information
//
// METAR station information is kept in this file:
// http://www.nws.noaa.gov/pub/stninfo/nsd_cccc.gz
// http://www.nws.noaa.gov/pub/stninfo/nsd_cccc.txt
#ifndef _MetarStation_
#define _MetarStation_
#include <simgear/compiler.h>
#include STL_IOSTREAM
#include STL_STRING
#include <vector>
#include <map>
#include <simgear/math/point3d.hxx>
#include <simgear/math/polar3d.hxx>
SG_USING_STD(string);
SG_USING_STD(vector);
SG_USING_STD(map);
class CMetarStationDB;
class CMetarStation
{
// Attributes
private:
std::string m_ID;
unsigned long m_number;
std::string m_name;
std::string m_state;
std::string m_country;
int m_region;
Point3D m_locationPolar;
Point3D m_upperLocationPolar;
Point3D m_locationCart;
Point3D m_upperLocationCart;
int m_altitude;
int m_upperAltitude;
char m_pFlag;
// Operations
private:
double decodeDMS( char *b );
CMetarStation(
char *s );
// Constructor
~CMetarStation()
{
}
// Destructor
public:
std::string &ID() { return m_ID; }
unsigned long number() { return m_number; }
std::string &name() { return m_name; }
std::string &state() { return m_state; }
std::string &country() { return m_country; }
int region() { return m_region; }
unsigned int Altitude() { //Returns the stations height above MSL in M.
return m_altitude;}
Point3D &locationPolar() { return m_locationPolar; }
Point3D &upperLocationPolar() { return m_upperLocationPolar; }
Point3D &locationCart() { return m_locationCart; }
Point3D &upperLocationCart() { return m_upperLocationCart; }
char pFlag() { return m_pFlag; }
// Get attributes
friend ostream& operator << ( ostream&, const CMetarStation& );
void dump();
private:
CMetarStation(
const CMetarStation &rNewObj );
// Copy constructor. Not implemented.
CMetarStation &operator =(
const CMetarStation &rObj );
// Assignment operator. Not implemented.
friend class CMetarStationDB;
};
class CMetarStationDB
{
private:
std::string databasePath; //The path of the database file.
std::map<std::string , CMetarStation *> METAR_Stations;
CMetarStation * bestStation;
public:
CMetarStation *find( std::string stationID );
CMetarStation * find( Point3D locationCart );
CMetarStationDB(const char * dbFile);
~CMetarStationDB();
};
#endif

View File

@ -1,558 +0,0 @@
// Metar Library test
#ifdef HAVE_CONFIG_H
# include <simgear_config.h>
#endif
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
#include GLUT_H
#include <iostream>
#include "../MetarReport.h"
#include "../MetarStation.h"
static char *report[] =
{
"KAST 221156Z COR 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KAST COR 221156Z 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KAST COR 221156Z 09005KT 1/SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KP88 COR 221156 09005KT 1/SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005",
"KP88 COR 221156 09005KT 1/SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 6//// 70109 T00890084 10100 20089 55005",
"EPIT 1755 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1/2V3/4",
"KFAR 181154Z 10003KT 1/4SM HZ CLR 16/13 A2988 RMK AO2 "
"SLP117 56012 10345 20226 T01610133 $",
"KFAR 181154Z 10003KT 1/SM HZ CLR 16/13 A2988 RMK AO2 "
"SLP117 56012 10345 20226 T01610133 $",
"RKSS 21009KT 1400 RP2000 // ////// 21/20 1006/2972 NOSIG",
"RKSS 1200 21009KT 1400 RP2000 // ////// 21/20 1006/2972 NOSIG",
"RKSS 1130Z 23011KT 1100 R14R/P1500N R14L/P1500N BR SCT010 BKN030 "
"BKN080 21/21 Q1006 NOSIG",
"RKSS 1130Z 23011KT 1100 R14R/P1500 R14L/P1500 BR SCT010 BKN030 "
"BKN080 21/21 Q1006 NOSIG",
"KFAR 181154Z 10003KT 4SM HZ CLR 16/13 A2988 RMK AO2 "
"SLP117 56012 1//// 2//// T01610133 $",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE DUE LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE DUE10 LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE DUE9 LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE FZDZE10 LO CLD SLP186",
"CYYE 061300Z 3500KT 15SM BKN005 OVC040 08/08 A3004 RMK "
"SF6SC1 VSBY RDCE FZDZE9 LO CLD SLP186",
"MKJP 1400Z 13011KT 9999 FEW022 30/XX Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 M30/XX Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 MM/XX Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 MM/30 Q1015",
"MKJP 1400Z 13011KT 9999 FEW022 MM/M30 Q1015",
"EGPD 36016G26KT 320V030 9999 FEW015TCU SCT026 BKN045 OVC090 "
"SCT120 FEW250 RMK OCNL LTGICCG OHD",
"EGPD 36016G26KT 320V030 9999 FEW015TCU SCT026 07/01 Q1011 "
"RMK TEMPO 8000 -SHRA BKN015 FRQ LTG VC",
"EGPD 36016G26KT 320V030 9999 FEW015TCU SCT026 07/01 Q1011 "
"RMK TEMPO 8000 -SHRA BKN015 LTG DSNT W",
"METAR KLAX 281156Z AUTO VRB100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT FC "
"+TS BLPY FEW/// SCT000 BKN050 SCT150 OVC250 3/M1 A2991 RMK "
"TORNADO B13E45 6 NE MOV E A02 PK WND 18515/45 "
"WSHFT 1350 FROPA TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"VIS 2 1/2 RY11 "
"DVR/1000V1600FT "
"OCNL LTG VCY STN "
"RAB1030E1145 FZDZE56 BLPYE57 CIG 1000V1500 CIG 020 RY11 "
"PRESFR PRESRR SLP013 FG FEW/// HZ SCT000 VIS NW 2 1/2 GR 3/4 "
"VIRGA SE -XRAFG3 CIGE005 BKN014 V OVC "
"FU BKN020 NOSPECI LAST 8/365 SNINCR 2/10 4/178 "
"933125 98096 P 0125 60225 70565 "
"T00261015 10369 21026 "
"404800360 52101 VISNO RY05 CHINO RY27 PNO RVRNO "
"PWINO FZRANO TSNO $",
"KBOS 251356Z 26011KT 10SM CLR 12/02 A2995 RMK AO2 SC VCNTY "
"STN SSE-NNW SCT CI ABV SLP141 T01220023",
"EFHK 36009KT 340V060 CAVOK 12/M02 Q1013 NOSIG",
"EGKK 24011KT 210V300 9999 SCT020 BKN045 12/06 Q1007 NOSIG",
"EGPD 31018KT 8000 RA FEW013 BKN021 OVC045 06/04 Q0994 NOSIG",
"EKCH 16012KT CAVOK 20/07 Q1006 NOSIG",
"ESKN 10014KT 9000 BR SCT100 14/04 Q1010",
"LOWW 231450Z 14017KT CAVOK 23/07 Q1010 NOSIG",
"METAR CYCH 171500Z CCA 30017KT 2SM -SN BKN006",
"METAR CYOW 171500Z CCA 30017KT 2SM -SN BKN006 OVC020 00/M02 "
"A2957 RMK S35F4NS1 /S01/ SNW WET SNW MELTG ON GRND CIG 5-7 "
"SLP018",
"KAST 221156Z AUTO 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005"
" TSB0159E30 TS SE MOV NE",
"KAST 221156Z AUTO 09005KT 7SM -RA OVC026 09/08 A2996 RMK "
"AO2 TNO SLP143 P0007 60047 70109 T00890084 10100 20089 55005"
" TSE0159 TS SE",
"KHVR 1756Z 31007KT 5SM -SN SCT011 BKN024 OVC030 M05/M08 A3056 "
"RMK AOA 933004 "
"BKN V SCT TNO PCPN 000 $ SLP389 4/015 60002 "
"T10501077 11050 21078 51010",
"SPECI KGFI 041420Z AUTO 18030KT 3 1/2SM RVRNO TS -RA BKN008 OVC060 "
"26/22 A2991 RMK A02 RA15TSB20 PRESFR SLP 101 P 0000 T02640218",
"METAR KCLE 281156Z 170100G135KT 110V180 M1/4SM "
"R01L/P6000FT +TSSHRA VCFG "
"BKN025 SCT100 OVC200 M26/ A2991 RMK PK WND 18515/45 A02 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"CIG 1000V1500 PRESFR FRQ LTG CG NW "
"RAB1030E1145 FZDZE56 PRESRR SLP135 GS "
"T1263 "
"VIRGA NW 8/365 4/178 P 0125 60225 7//// 70565 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"CYQR 161700Z 15015KT 15SM SCT045 SCT090 BKN250 10/03 A2955 "
"RMK SC1AC2C11 OB TAKEN H+ 5 DUE AWOS FAILURE SLP027",
"KPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2",
"SPECI KGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 199/182",
"SPECI KGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP701 P0254 199/182",
"KHLN 281156Z AUTO 27005KT 10SM OVC023 07/05 A3011 RMK AOA OVC V "
"BKN $ SLP202 60000 70001 T00670050 10122 20061 53003",
"KPHX 281156Z 12004KT 10SM CLR 15/05 A2996 RMK AOA SLP135 T01500050 "
"10250 20150 53006",
"KFCA 281156Z 30003KT 10SM CLR 06/02 A3009 RMK AO TNO $ SLP191 "
"T00610023 10167 20056 53003",
"KAST 281156Z 00000KT 10SM BKN095 09/08 A2997 RMK AOA SLP150 "
"T00940084 10161 20094 52005 ",
"KHVR 281156Z 03003KT 10SM OVC020 09/07 A3010 RMK AO TNO ZRNO "
"$ SLP194 T00940073 10156 20089 51005",
"KGGW 281156Z 35006KT 5SM BR OVC010 10/09 A3003 RMK AOA $ SLP177 "
"70003 T01000095 10156 20110 53008",
"KELY 1153Z AUTO 14004KT 10SM SCT075 01/M01 A3011 RMK AOA TNO ZRNO "
"SLP171 70001 T00061011 10139 21006 51005",
"KFLG 281156Z 29006KT 10SM CLR 04/M01 A3012 RMK AO TNO SLP147 "
"T00391011 21006 51004",
"KGTF 281156Z 27005KT 7SM BKN080 04/04 A3010 RMK AOA SLP205 "
"T00440045 10117 20039 51006",
"K13A 1918Z 20011KT 26/M06 RMK AO PKWND 020/RNO 644V264 T02611061",
"KP88 1919Z 09001KT 14/03 RMK AO / PKWND 002/RNO 158 Z T01440034",
"K40B 1924Z 29004KT 15/M07 RMK AO PKWND 011/RM MV263 T01501072",
"KGGW 1756Z 33018KT 10SM OVC015 M03/M06 A3041 RMK AOA SLP338 "
"4/007 60002 T10281055 11028 21072 51009",
"KPHX 1756Z 130004KT 10SM CLR 18/M03 A3001 RMK AOA SLP154 "
"T01781033 10178 20067 58007",
"KFCA 1756Z 29005KT 10SM CLR 05/M11 A3049 RMK AOA TNO SLP352 "
"T00501111 10050 21044 50004",
"KAST 1756Z 01006KT 10SM CLR 11/04 A3047 RMK AOA SLP316 "
"T01110045 10111 20000 50002",
"KELY 1753Z 34010KT 10SM CLR 01/M07 A3022 RMK AOA TNO ZRNO "
"SLP240 T00111066 10011 21078 58007",
"KFLG 1756Z 07006KT 10SM CLR 06/M12 A3009 RMK AO TNO ZRNO "
"SLP178 T00561122 10061 21100 58005",
"KGTF 1756Z 35010KT 1/2SM -SN FG VV09 M06/M08 A3051 RMK AOA "
"933004 SFC VSBY 3/4 "
"PCPN M SLP393 60010 T10611077 11044 21067 53013",
"KHLN 1756Z 35012KT 10SM SCT032 OVC060 M02/M09 A3048 RMK AOA "
"SLP369 60000 T10171094 11017 21061 53006",
"KAST 1756Z 01006KT 10SM CLR 11/04 A3047 RMK AOA SLP316 61104 "
"71235 T01110045 10111 20000 401720056 58002",
"METAR KLAX 04281156Z AUTO VRB100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT FC "
"+TS BLPY FEW000 BKN050 SCT150 OVC250 3/M1 A2991 RMK "
"TORNADO B13 DSNT NE A02 PK WND 18515/45 "
"WSHFT 1350 FROPA TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"VIS 2 1/2 RY11 OCNL LTG VCY STN "
"RAB1030E1145 FZDZE56 BLPYE57 CIG 1000V1500 CIG 020 RY11 "
"PRESFR PRESRR SLP013 FG FEW000 VIS NW2 1/2 GR 3/4 "
"VIRGA SE -XRAFG3 CIGE005 BKN014 V OVC "
"FU BKN020 NOSPECI LAST 8/365 SNINCR 2/10 4/178 "
"933125 98096 P 0125 60225 70565 "
"T00261015 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 17012KT 130V210 3 1/2SM R15L/0500FT -RA "
"SCT050 OVC110 26/18 A2991 RMK FUNNEL CLOUDS A02 RAB30 "
"SLP 101 GR M1/4 VIRGA SCT V BKN P 0010 T02640178",
"METAR KGFI 041356Z AUTO 05008KT 10SM R15L/P6000FT CLR A2991 "
"RMK WATERSPOUTS VCY STN NW A02 SLP 101 10288 20243 52021 $ ",
"SPECI KGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"A2900 RMK A02A PK WND 18056/28 OCNL LTG AP "
"RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 T01990182",
"KABE 281900Z NIL",
"METAR KPIT NIL",
"METAR KCLE 04281156Z 170100G135KT 110V180 M1/4SM "
"R01L/P6000FT +TSSHRA VCFG "
"BKN025 SCT100 OVC200 M26/ A2991 RMK PK WND 18515/45 A02 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"CIG 1000V1500 PRESFR FRQ LTG CG NW "
"RAB1030E1145 FZDZE56 PRESRR SLP135 GS "
"T1263 "
"VIRGA NW 8/365 4/178 P 0125 60225 7//// 70565 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KPHL 040256Z AUTO 170100G135KT 130V210 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 M26/ A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 LTG DSNT "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP037 GR 2 3/4 "
"VIRGA E 8/365 4/178 P 0125 70565 21026 T0263 10369 60225 "
"404800360 52101 PWINO FZRANO TSNO $",
"SPECI KGFI 041420Z AUTO 18030KT 2 1/2SM RVRNO TS -RA BKN008 "
"OVC060 25/22 A2991 RMK A02 LTG DSNT W "
"RAB15TSB20 PRESFR SLP101 P 0000 "
"254/218",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 M26/ A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR M1/4 "
"VIRGA SE 8/365 4/178 P 0125 6//// 60225 70565 T0263 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 M26/ A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR 25 "
"VIRGA 35 8/365 4/178 P 0125 6//// 60225 70565 T0263 10369 21026 "
"VIRGA 35 8/365 4/178 P 0125 21026 70565 10369 60225 T0263 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 3/M1 A2991 RMK A02 PK WND 18515/45 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR 25 "
"VIRGA 35 8/365 4/178 P 0125 60225 70565 T00261015 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO $",
"METAR KGFI 041356Z AUTO 170100G135KT 130V210 3 1/2SM "
"R15L/0500FT R22L/2700FT R16/1200FT R34/1000V1600FT R01L/P6000FT "
"FC +TS BKN050 SCT150 OVC250 3/M1 A2991 RMK A02 PK WND 185150/1345 "
"WSHFT 1350 TWR VIS 1 1/2 SFC VIS 1/4 VIS 1/4V1 1/4 "
"RAB1030E1145 FZDZE56 CIG 1000V1500 PRESFR PRESRR SLP997 GR 25 "
"VIRGA 35 8/365 4/178 P 0125 60225 70565 T00261015 10369 21026 "
"404800360 52101 PWINO FZRANO TSNO",
"METAR KGFI 041356Z AUTO 05008KT 10SM R15L/P6000FT CLR A2991 RMK "
"A02 SLP 101 10288 20243 52021",
"SPECI DGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"M20/M18 A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 M199/M182",
"SPECI DGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"M20/M18 A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 M199/182",
"SPECI DGFI 041430Z 18045G56KT M1/4SM R15/0200FT FC +TS VV010 20/18 "
"M20/M18 A2900 RMK A02A PK WND 18056/28 RAB15E25TSB20 FCB1430 PRESFR "
"SLP 701 P 0254 199/M182",
"METAR APIT 171755Z AUTO 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 4/369 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 8/563 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2 SLP875 SGB1213E1225",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK SLP056 "
"RAE0123",
"SPECI APIT 171755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 8/321 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 SLP875 FGB1713",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2 SLP875",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2 1/2 SLP875",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2 1/2 SLP875",
"EGPF 1720Z 00000KT 9999 -SHRA STC014 SCT020CB BNK024 12/09 "
"Q1003 NOSIG",
"NZAA 1700Z 03010KT 30KM 03 5CU022 7SC035 11/07 Q1006.5 NOSIG",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK KAUKAU 30050KT",
"DGAA 1800Z 22012KT 9999 SCT009 BKN120 25/21 Q1015",
"DAAT 1830Z 30010KT CAVOK 29/06 Q1019",
"GQPP 1800Z 34023KT 3000 DRSA SKC 24/20 Q1011 NSG",
"DAAG 1830Z 06006KT 9999 SCT020 25/22 Q1015",
"DABB 1830Z 04010KT 9999 SCT030TCU SCT033CB 27/18 Q1017",
"DABC 1830Z 00000KT 9999 SCT026TCU SCT036CB 22/18 Q1020 RETS",
"NZAA 1700Z 03010KT 30KM 03 5CU022 7SC035 11/07 Q1006.5 NOSIG",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK K",
"NZWN 1700Z 35030G49KT 320V030 20KM 02 5SC021 7SC046 12/08 "
" Q0994.2 TEMPO 6000 RA 5ST012 2CB015 RMK KAUKAU 30050KT",
"DGAA 1800Z 22012KT 9999 SCT009 BKN120 25/21 Q1015",
"GFLL 1900Z NIL",
"GOOY 1800Z 03006G17KT 340V080 6000 TSRA BKN016 BKN030CB "
"BKN133 26/23 Q1013 NOSIG",
"GCXO 1930Z 32018KT 8000 SCT003 SCT007 18/16 Q1019",
"APIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2",
"BPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2",
"CPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1V2 1/2",
"DPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 1 1/2V2 1/2",
"FPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 3/4V2 1/2",
"GPIT 1755Z 22015G25KT 1 3/4SM R22L/2700FT R16/1200FT "
"R34/1000V1600FT R01L/P6000FT R04RR/900FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/16 A2992 "
"RMK 58033 6003/ TWELVE 70125 10039 20029 410840112 "
"PCPN 0009 WSHFT 1715 PK WND 2032/1725 "
"CIG 20V25 WND 12V25 TWR VIS 2 1/2 "
"SFC VIS 1 1/2 VIS 3/4V3",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB M18/M16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB M18/16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/M16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB MM/M16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB MM/16 A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB M18/MM A2992",
"KPIT 1935Z 22015G25KT 1 3/4SM R22L/2700FT "
"TSRA -DZ FG +SNPE SCT005 BKN010 OVC250CB 18/MM A2992",
NULL};
void dispMetarStation( CMetarStation *s )
{
glPointSize( 2.0 );
glColor3d(1.0,1.0,0.0);
glVertex3d( s->locationCart().x()/1000.0, s->locationCart().y()/1000.0, s->locationCart().z()/1000.0 );
}
static int ii = 0;
void
display(void)
{
glPushMatrix();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glRotatef((ii%360), 1.0, 0.0, 0.0);
glRotatef((ii%360), 0.0, 1.0, 0.0);
glRotatef((ii%360), 0.0, 0.0, 1.0);
glBegin( GL_POINTS );
CMetarStation::for_each( dispMetarStation );
glEnd();
glColor3d(0.0, 0.0, 1.0);
glutWireSphere(SG_EARTH_RAD,32,16);
glutSwapBuffers();
ii++;
glPopMatrix();
}
void
idle(void)
{
// std::cout << "Idle" << std::endl;
glutPostRedisplay();
}
void
init(void)
{
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective( 50.0, 1.0, 1.0, 40000.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, -19000.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 1.0);
}
void testMetarStation(int argc,
char **argv )
{
std::cout << "Display all Metar Stations" << std::endl;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Metar Stations");
glutDisplayFunc(display);
glutIdleFunc(idle);
init();
glutMainLoop();
}
void testMetarReport()
{
std::cout << "Decode some Metar reports" << std::endl;
int i = 0;
while ( report[i] )
{
std::cout << i << ": " << report[i] << std::endl;
CMetarReport dr( report[i] );
//dr.dump();
std::cout << dr << std::endl;
CMetarStation *ms = CMetarStation::find( dr.StationID() );
if ( ms )
{
std::cout << *ms << std::endl;
}
else
{
std::cout << "No corresponding METAR station found" << std::endl;
}
i++;
}
}
int
main(
int argc,
char **argv )
{
std::cout << "Metar subsystem test" << std::endl;
testMetarReport();
testMetarStation( argc, argv );
return 0;
}

View File

@ -1,100 +0,0 @@
# Microsoft Developer Studio Project File - Name="MetarLibTest" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=MetarLibTest - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "MetarLibTest.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "MetarLibTest.mak" CFG="MetarLibTest - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "MetarLibTest - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "MetarLibTest - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "MetarLibTest - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /Zi /O2 /I "..\..\..\lib" /I "..\lib" /I "..\..\lib" /I "..\..\..\..\lib" /I ".." /I "..\.." /I "..\..\.." /I "..\..\..\.." /I "..\include" /I "..\..\include" /I "..\..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "MetarLibTest - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /GX /Zi /Od /I "..\..\..\lib" /I "..\lib" /I "..\..\lib" /I "..\..\..\..\lib" /I ".." /I "..\.." /I "..\..\.." /I "..\..\..\.." /I "..\include" /I "..\..\include" /I "..\..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "MetarLibTest - Win32 Release"
# Name "MetarLibTest - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\MetarLibTest.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -1,95 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "LibMisc"=..\..\..\..\Win32\Workspace\LibMisc\LibMisc.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "Metar"=..\Metar.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "MetarLibTest"=.\MetarLibTest.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name Metar
End Project Dependency
Begin Project Dependency
Project_Dep_Name MetarLib
End Project Dependency
Begin Project Dependency
Project_Dep_Name glut
End Project Dependency
Begin Project Dependency
Project_Dep_Name LibMisc
End Project Dependency
}}}
###############################################################################
Project: "MetarTest"=.\MetarTest.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name Metar
End Project Dependency
Begin Project Dependency
Project_Dep_Name MetarLib
End Project Dependency
}}}
###############################################################################
Project: "glut"=..\..\..\..\..\glut\glut.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@ -1,587 +0,0 @@
#include "Local.h" /* standard header file */
#include "Metar.h"
/********************************************************************/
/* */
/* Title: prtDMETR */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 15 Sep 1994 */
/* Programmer: CARL MCCALLA */
/* Language: C/370 */
/* */
/* Abstract: prtDMETR prints, in order of the ASOS METAR */
/* format, all non-initialized members of the structure */
/* addressed by the Decoded_METAR pointer. */
/* */
/* External Functions Called: */
/* None. */
/* */
/* Input: Mptr - ptr to a decoded_METAR structure. */
/* */
/* Output: NONE */
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
void prtDMETR( Decoded_METAR *Mptr )
{
/***************************/
/* DECLARE LOCAL VARIABLES */
/***************************/
int i;
/*************************/
/* START BODY OF ROUTINE */
/*************************/
printf("\n\n\n/*******************************************/\n");
printf("/* THE DECODED METAR REPORT FOLLOWS */\n");
printf("/*******************************************/\n\n");
if( Mptr->codeName[ 0 ] != '\0' )
printf("REPORT CODE NAME : %s\n",Mptr->codeName);
if( Mptr->stnid[ 0 ] != '\0' )
printf("STATION ID : %s\n",Mptr->stnid);
if( Mptr->ob_date != MAXINT )
printf("OBSERVATION DAY : %d\n",Mptr->ob_date);
if( Mptr->ob_hour != MAXINT )
printf("OBSERVATION HOUR : %d\n",Mptr->ob_hour);
if( Mptr->ob_minute != MAXINT )
printf("OBSERVATION MINUTE : %d\n",Mptr->ob_minute);
if( Mptr->NIL_rpt )
printf("NIL REPORT : TRUE\n");
if( Mptr->AUTO )
printf("AUTO REPORT : TRUE\n");
if( Mptr->COR )
printf("CORRECTED REPORT : TRUE\n");
if( Mptr->winData.windVRB )
printf("WIND DIRECTION VRB : TRUE\n");
if( Mptr->winData.windDir != MAXINT )
printf("WIND DIRECTION : %d\n",Mptr->winData.windDir);
if( Mptr->winData.windSpeed != MAXINT )
printf("WIND SPEED : %d\n",Mptr->winData.windSpeed);
if( Mptr->winData.windGust != MAXINT )
printf("WIND GUST : %d\n",Mptr->winData.windGust);
if( Mptr->winData.windUnits[ 0 ] != '\0' )
printf("WIND UNITS : %s\n",Mptr->winData.windUnits);
if( Mptr->minWnDir != MAXINT )
printf("MIN WIND DIRECTION : %d\n",Mptr->minWnDir);
if( Mptr->maxWnDir != MAXINT )
printf("MAX WIND DIRECTION : %d\n",Mptr->maxWnDir);
if( Mptr->prevail_vsbyM != (float) MAXINT )
printf("PREVAIL VSBY (M) : %f\n",Mptr->prevail_vsbyM);
if( Mptr->prevail_vsbyKM != (float) MAXINT )
printf("PREVAIL VSBY (KM) : %f\n",Mptr->prevail_vsbyKM);
if( Mptr->prevail_vsbySM != (float) MAXINT )
printf("PREVAIL VSBY (SM) : %.3f\n",Mptr->prevail_vsbySM);
if( Mptr->charPrevailVsby[0] != '\0' )
printf("PREVAIL VSBY (CHAR) : %s\n",Mptr->charPrevailVsby);
if( Mptr->vsby_Dir[ 0 ] != '\0' )
printf("VISIBILITY DIRECTION: %s\n",Mptr->vsby_Dir);
if( Mptr->RVRNO )
printf("RVRNO : TRUE\n");
for ( i = 0; i < 12; i++ )
{
if( Mptr->RRVR[i].runway_designator[0] != '\0' )
printf("RUNWAY DESIGNATOR : %s\n",
Mptr->RRVR[i].runway_designator);
if( Mptr->RRVR[i].visRange != MAXINT )
printf("R_WAY VIS RANGE (FT): %d\n",
Mptr->RRVR[i].visRange);
if( Mptr->RRVR[i].vrbl_visRange )
printf("VRBL VISUAL RANGE : TRUE\n");
if( Mptr->RRVR[i].below_min_RVR )
printf("BELOW MIN RVR : TRUE\n");
if( Mptr->RRVR[i].above_max_RVR )
printf("ABOVE MAX RVR : TRUE\n");
if( Mptr->RRVR[i].Max_visRange != MAXINT )
printf("MX R_WAY VISRNG (FT): %d\n",
Mptr->RRVR[i].Max_visRange);
if( Mptr->RRVR[i].Min_visRange != MAXINT )
printf("MN R_WAY VISRNG (FT): %d\n",
Mptr->RRVR[i].Min_visRange);
}
if( Mptr->DVR.visRange != MAXINT )
printf("DISPATCH VIS RANGE : %d\n",
Mptr->DVR.visRange);
if( Mptr->DVR.vrbl_visRange )
printf("VRBL DISPATCH VISRNG: TRUE\n");
if( Mptr->DVR.below_min_DVR )
printf("BELOW MIN DVR : TRUE\n");
if( Mptr->DVR.above_max_DVR )
printf("ABOVE MAX DVR : TRUE\n");
if( Mptr->DVR.Max_visRange != MAXINT )
printf("MX DSPAT VISRNG (FT): %d\n",
Mptr->DVR.Max_visRange);
if( Mptr->DVR.Min_visRange != MAXINT )
printf("MN DSPAT VISRNG (FT): %d\n",
Mptr->DVR.Min_visRange);
i = 0;
while ( Mptr->WxObstruct[i][0] != '\0' && i < MAXWXSYMBOLS )
{
printf("WX/OBSTRUCT VISION : %s\n",
Mptr->WxObstruct[i] );
i++;
}
if( Mptr->PartialObscurationAmt[0][0] != '\0' )
printf("OBSCURATION AMOUNT : %s\n",
&(Mptr->PartialObscurationAmt[0][0]));
if( Mptr->PartialObscurationPhenom[0][0] != '\0' )
printf("OBSCURATION PHENOM : %s\n",
&(Mptr->PartialObscurationPhenom[0][0]));
if( Mptr->PartialObscurationAmt[1][0] != '\0' )
printf("OBSCURATION AMOUNT : %s\n",
&(Mptr->PartialObscurationAmt[1][0]));
if( Mptr->PartialObscurationPhenom[1][0] != '\0' )
printf("OBSCURATION PHENOM : %s\n",
&(Mptr->PartialObscurationPhenom[1][0]));
i = 0;
while ( Mptr->cldTypHgt[ i ].cloud_type[0] != '\0' &&
i < 6 )
{
if( Mptr->cldTypHgt[ i ].cloud_type[0] != '\0' )
printf("CLOUD COVER : %s\n",
Mptr->cldTypHgt[ i ].cloud_type);
if( Mptr->cldTypHgt[ i ].cloud_hgt_char[0] != '\0' )
printf("CLOUD HGT (CHARAC.) : %s\n",
Mptr->cldTypHgt[ i ].cloud_hgt_char);
if( Mptr->cldTypHgt[ i ].cloud_hgt_meters != MAXINT)
printf("CLOUD HGT (METERS) : %d\n",
Mptr->cldTypHgt[ i ].cloud_hgt_meters);
if( Mptr->cldTypHgt[ i ].other_cld_phenom[0] != '\0' )
printf("OTHER CLOUD PHENOM : %s\n",
Mptr->cldTypHgt[ i ].other_cld_phenom);
i++;
}
if( Mptr->temp != MAXINT )
printf("TEMP. (CELSIUS) : %d\n", Mptr->temp);
if( Mptr->dew_pt_temp != MAXINT )
printf("D.P. TEMP. (CELSIUS): %d\n", Mptr->dew_pt_temp);
if( Mptr->A_altstng )
printf("ALTIMETER (INCHES) : %.2f\n",
Mptr->inches_altstng );
if( Mptr->Q_altstng )
printf("ALTIMETER (PASCALS) : %d\n",
Mptr->hectoPasc_altstng );
if( Mptr->TornadicType[0] != '\0' )
printf("TORNADIC ACTVTY TYPE: %s\n",
Mptr->TornadicType );
if( Mptr->BTornadicHour != MAXINT )
printf("TORN. ACTVTY BEGHOUR: %d\n",
Mptr->BTornadicHour );
if( Mptr->BTornadicMinute != MAXINT )
printf("TORN. ACTVTY BEGMIN : %d\n",
Mptr->BTornadicMinute );
if( Mptr->ETornadicHour != MAXINT )
printf("TORN. ACTVTY ENDHOUR: %d\n",
Mptr->ETornadicHour );
if( Mptr->ETornadicMinute != MAXINT )
printf("TORN. ACTVTY ENDMIN : %d\n",
Mptr->ETornadicMinute );
if( Mptr->TornadicDistance != MAXINT )
printf("TORN. DIST. FROM STN: %d\n",
Mptr->TornadicDistance );
if( Mptr->TornadicLOC[0] != '\0' )
printf("TORNADIC LOCATION : %s\n",
Mptr->TornadicLOC );
if( Mptr->TornadicDIR[0] != '\0' )
printf("TORNAD. DIR FROM STN: %s\n",
Mptr->TornadicDIR );
if( Mptr->TornadicMovDir[0] != '\0' )
printf("TORNADO DIR OF MOVM.: %s\n",
Mptr->TornadicMovDir );
if( Mptr->autoIndicator[0] != '\0' )
printf("AUTO INDICATOR : %s\n",
Mptr->autoIndicator);
if( Mptr->PKWND_dir != MAXINT )
printf("PEAK WIND DIRECTION : %d\n",Mptr->PKWND_dir);
if( Mptr->PKWND_speed != MAXINT )
printf("PEAK WIND SPEED : %d\n",Mptr->PKWND_speed);
if( Mptr->PKWND_hour != MAXINT )
printf("PEAK WIND HOUR : %d\n",Mptr->PKWND_hour);
if( Mptr->PKWND_minute != MAXINT )
printf("PEAK WIND MINUTE : %d\n",Mptr->PKWND_minute);
if( Mptr->WshfTime_hour != MAXINT )
printf("HOUR OF WIND SHIFT : %d\n",Mptr->WshfTime_hour);
if( Mptr->WshfTime_minute != MAXINT )
printf("MINUTE OF WIND SHIFT: %d\n",Mptr->WshfTime_minute);
if( Mptr->Wshft_FROPA != FALSE )
printf("FROPA ASSOC. W/WSHFT: TRUE\n");
if( Mptr->TWR_VSBY != (float) MAXINT )
printf("TOWER VISIBILITY : %.2f\n",Mptr->TWR_VSBY);
if( Mptr->SFC_VSBY != (float) MAXINT )
printf("SURFACE VISIBILITY : %.2f\n",Mptr->SFC_VSBY);
if( Mptr->minVsby != (float) MAXINT )
printf("MIN VRBL_VIS (SM) : %.4f\n",Mptr->minVsby);
if( Mptr->maxVsby != (float) MAXINT )
printf("MAX VRBL_VIS (SM) : %.4f\n",Mptr->maxVsby);
if( Mptr->VSBY_2ndSite != (float) MAXINT )
printf("VSBY_2ndSite (SM) : %.4f\n",Mptr->VSBY_2ndSite);
if( Mptr->VSBY_2ndSite_LOC[0] != '\0' )
printf("VSBY_2ndSite LOC. : %s\n",
Mptr->VSBY_2ndSite_LOC);
if( Mptr->OCNL_LTG )
printf("OCCASSIONAL LTG : TRUE\n");
if( Mptr->FRQ_LTG )
printf("FREQUENT LIGHTNING : TRUE\n");
if( Mptr->CNS_LTG )
printf("CONTINUOUS LTG : TRUE\n");
if( Mptr->CG_LTG )
printf("CLOUD-GROUND LTG : TRUE\n");
if( Mptr->IC_LTG )
printf("IN-CLOUD LIGHTNING : TRUE\n");
if( Mptr->CC_LTG )
printf("CLD-CLD LIGHTNING : TRUE\n");
if( Mptr->CA_LTG )
printf("CLOUD-AIR LIGHTNING : TRUE\n");
if( Mptr->AP_LTG )
printf("LIGHTNING AT AIRPORT: TRUE\n");
if( Mptr->OVHD_LTG )
printf("LIGHTNING OVERHEAD : TRUE\n");
if( Mptr->DSNT_LTG )
printf("DISTANT LIGHTNING : TRUE\n");
if( Mptr->LightningVCTS )
printf("L'NING W/I 5-10(ALP): TRUE\n");
if( Mptr->LightningTS )
printf("L'NING W/I 5 (ALP) : TRUE\n");
if( Mptr->VcyStn_LTG )
printf("VCY STN LIGHTNING : TRUE\n");
if( Mptr->LTG_DIR[0] != '\0' )
printf("DIREC. OF LIGHTNING : %s\n", Mptr->LTG_DIR);
i = 0;
while( i < 3 && Mptr->ReWx[ i ].Recent_weather[0] != '\0' )
{
printf("RECENT WEATHER : %s",
Mptr->ReWx[i].Recent_weather);
if( Mptr->ReWx[i].Bhh != MAXINT )
printf(" BEG_hh = %d",Mptr->ReWx[i].Bhh);
if( Mptr->ReWx[i].Bmm != MAXINT )
printf(" BEG_mm = %d",Mptr->ReWx[i].Bmm);
if( Mptr->ReWx[i].Ehh != MAXINT )
printf(" END_hh = %d",Mptr->ReWx[i].Ehh);
if( Mptr->ReWx[i].Emm != MAXINT )
printf(" END_mm = %d",Mptr->ReWx[i].Emm);
printf("\n");
i++;
}
if( Mptr->minCeiling != MAXINT )
printf("MIN VRBL_CIG (FT) : %d\n",Mptr->minCeiling);
if( Mptr->maxCeiling != MAXINT )
printf("MAX VRBL_CIG (FT)) : %d\n",Mptr->maxCeiling);
if( Mptr->CIG_2ndSite_Meters != MAXINT )
printf("CIG2ndSite (FT) : %d\n",Mptr->CIG_2ndSite_Meters);
if( Mptr->CIG_2ndSite_LOC[0] != '\0' )
printf("CIG @ 2nd Site LOC. : %s\n",Mptr->CIG_2ndSite_LOC);
if( Mptr->PRESFR )
printf("PRESFR : TRUE\n");
if( Mptr->PRESRR )
printf("PRESRR : TRUE\n");
if( Mptr->SLPNO )
printf("SLPNO : TRUE\n");
if( Mptr->SLP != (float) MAXINT )
printf("SLP (hPa) : %.1f\n", Mptr->SLP);
if( Mptr->SectorVsby != (float) MAXINT )
printf("SECTOR VSBY (MILES) : %.2f\n", Mptr->SectorVsby );
if( Mptr->SectorVsby_Dir[ 0 ] != '\0' )
printf("SECTOR VSBY OCTANT : %s\n", Mptr->SectorVsby_Dir );
if( Mptr->TS_LOC[ 0 ] != '\0' )
printf("THUNDERSTORM LOCAT. : %s\n", Mptr->TS_LOC );
if( Mptr->TS_MOVMNT[ 0 ] != '\0' )
printf("THUNDERSTORM MOVMNT.: %s\n", Mptr->TS_MOVMNT);
if( Mptr->GR )
printf("GR (HAILSTONES) : TRUE\n");
if( Mptr->GR_Size != (float) MAXINT )
printf("HLSTO SIZE (INCHES) : %.3f\n",Mptr->GR_Size);
if( Mptr->VIRGA )
printf("VIRGA : TRUE\n");
if( Mptr->VIRGA_DIR[0] != '\0' )
printf("DIR OF VIRGA FRM STN: %s\n", Mptr->VIRGA_DIR);
for( i = 0; i < 6; i++ ) {
if( Mptr->SfcObscuration[i][0] != '\0' )
printf("SfcObscuration : %s\n",
&(Mptr->SfcObscuration[i][0]) );
}
if( Mptr->Num8thsSkyObscured != MAXINT )
printf("8ths of SkyObscured : %d\n",Mptr->Num8thsSkyObscured);
if( Mptr->CIGNO )
printf("CIGNO : TRUE\n");
if( Mptr->Ceiling != MAXINT )
printf("Ceiling (ft) : %d\n",Mptr->Ceiling);
if( Mptr->Estimated_Ceiling != MAXINT )
printf("Estimated CIG (ft) : %d\n",Mptr->Estimated_Ceiling);
if( Mptr->VrbSkyBelow[0] != '\0' )
printf("VRB SKY COND BELOW : %s\n",Mptr->VrbSkyBelow);
if( Mptr->VrbSkyAbove[0] != '\0' )
printf("VRB SKY COND ABOVE : %s\n",Mptr->VrbSkyAbove);
if( Mptr->VrbSkyLayerHgt != MAXINT )
printf("VRBSKY COND HGT (FT): %d\n",Mptr->VrbSkyLayerHgt);
if( Mptr->ObscurAloftHgt != MAXINT )
printf("Hgt Obscur Aloft(ft): %d\n",Mptr->ObscurAloftHgt);
if( Mptr->ObscurAloft[0] != '\0' )
printf("Obscur Phenom Aloft : %s\n",Mptr->ObscurAloft);
if( Mptr->ObscurAloftSkyCond[0] != '\0' )
printf("Obscur ALOFT SKYCOND: %s\n",Mptr->ObscurAloftSkyCond);
if( Mptr->NOSPECI )
printf("NOSPECI : TRUE\n");
if( Mptr->LAST )
printf("LAST : TRUE\n");
if( Mptr->synoptic_cloud_type[ 0 ] != '\0' )
printf("SYNOPTIC CLOUD GROUP: %s\n",Mptr->synoptic_cloud_type);
if( Mptr->CloudLow != '\0' )
printf("LOW CLOUD CODE : %c\n",Mptr->CloudLow);
if( Mptr->CloudMedium != '\0' )
printf("MEDIUM CLOUD CODE : %c\n",Mptr->CloudMedium);
if( Mptr->CloudHigh != '\0' )
printf("HIGH CLOUD CODE : %c\n",Mptr->CloudHigh);
if( Mptr->SNINCR != MAXINT )
printf("SNINCR (INCHES) : %d\n",Mptr->SNINCR);
if( Mptr->SNINCR_TotalDepth != MAXINT )
printf("SNINCR(TOT. INCHES) : %d\n",Mptr->SNINCR_TotalDepth);
if( Mptr->snow_depth_group[ 0 ] != '\0' )
printf("SNOW DEPTH GROUP : %s\n",Mptr->snow_depth_group);
if( Mptr->snow_depth != MAXINT )
printf("SNOW DEPTH (INCHES) : %d\n",Mptr->snow_depth);
if( Mptr->WaterEquivSnow != (float) MAXINT )
printf("H2O EquivSno(inches): %.2f\n",Mptr->WaterEquivSnow);
if( Mptr->SunshineDur != MAXINT )
printf("SUNSHINE (MINUTES) : %d\n",Mptr->SunshineDur);
if( Mptr->SunSensorOut )
printf("SUN SENSOR OUT : TRUE\n");
if( Mptr->hourlyPrecip != (float) MAXINT )
printf("HRLY PRECIP (INCHES): %.2f\n",Mptr->hourlyPrecip);
if( Mptr->precip_amt != (float) MAXINT)
printf("3/6HR PRCIP (INCHES): %.2f\n",
Mptr->precip_amt);
if( Mptr->Indeterminant3_6HrPrecip )
printf("INDTRMN 3/6HR PRECIP: TRUE\n");
if( Mptr->precip_24_amt != (float) MAXINT)
printf("24HR PRECIP (INCHES): %.2f\n",
Mptr->precip_24_amt);
if( Mptr->Temp_2_tenths != (float) MAXINT )
printf("TMP2TENTHS (CELSIUS): %.1f\n",Mptr->Temp_2_tenths);
if( Mptr->DP_Temp_2_tenths != (float) MAXINT )
printf("DPT2TENTHS (CELSIUS): %.1f\n",Mptr->DP_Temp_2_tenths);
if( Mptr->maxtemp != (float) MAXINT)
printf("MAX TEMP (CELSIUS) : %.1f\n",
Mptr->maxtemp);
if( Mptr->mintemp != (float) MAXINT)
printf("MIN TEMP (CELSIUS) : %.1f\n",
Mptr->mintemp);
if( Mptr->max24temp != (float) MAXINT)
printf("24HrMAXTMP (CELSIUS): %.1f\n",
Mptr->max24temp);
if( Mptr->min24temp != (float) MAXINT)
printf("24HrMINTMP (CELSIUS): %.1f\n",
Mptr->min24temp);
if( Mptr->char_prestndcy != MAXINT)
printf("CHAR PRESS TENDENCY : %d\n",
Mptr->char_prestndcy );
if( Mptr->prestndcy != (float) MAXINT)
printf("PRES. TENDENCY (hPa): %.1f\n",
Mptr->prestndcy );
if( Mptr->PWINO )
printf("PWINO : TRUE\n");
if( Mptr->PNO )
printf("PNO : TRUE\n");
if( Mptr->CHINO )
printf("CHINO : TRUE\n");
if( Mptr->CHINO_LOC[0] != '\0' )
printf("CHINO_LOC : %s\n",Mptr->CHINO_LOC);
if( Mptr->VISNO )
printf("VISNO : TRUE\n");
if( Mptr->VISNO_LOC[0] != '\0' )
printf("VISNO_LOC : %s\n",Mptr->VISNO_LOC);
if( Mptr->FZRANO )
printf("FZRANO : TRUE\n");
if( Mptr->TSNO )
printf("TSNO : TRUE\n");
if( Mptr->DollarSign)
printf("DOLLAR $IGN INDCATR : TRUE\n");
if( Mptr->horiz_vsby[ 0 ] != '\0' )
printf("HORIZ VISIBILITY : %s\n",Mptr->horiz_vsby);
if( Mptr->dir_min_horiz_vsby[ 0 ] != '\0' )
printf("DIR MIN HORIZ VSBY : %s\n",Mptr->dir_min_horiz_vsby);
if( Mptr->CAVOK )
printf("CAVOK : TRUE\n");
if( Mptr->VertVsby != MAXINT )
printf("Vert. Vsby (meters) : %d\n",
Mptr->VertVsby );
if( Mptr->charVertVsby[0] != '\0' )
printf("Vert. Vsby (CHAR) : %s\n",
Mptr->charVertVsby );
if( Mptr->QFE != MAXINT )
printf("QFE : %d\n", Mptr->QFE);
if( Mptr->VOLCASH )
printf("VOLCANIC ASH : TRUE\n");
if( Mptr->min_vrbl_wind_dir != MAXINT )
printf("MIN VRBL WIND DIR : %d\n",Mptr->min_vrbl_wind_dir);
if( Mptr->max_vrbl_wind_dir != MAXINT )
printf("MAX VRBL WIND DIR : %d\n",Mptr->max_vrbl_wind_dir);
printf("\n\n\n");
return;
}

View File

@ -1,69 +0,0 @@
There are 2 classes: CMetarStation (MetarStation.h) and CMetarReport
(MetarReport.h). These classes provide mechanisms to get information
about meteorological data reporting stations and about the reports
themselves. These stations and reports are known as METAR. See
http://tgsv5.nws.noaa.gov/oso/oso1/oso12/metar.htm for information
from the USA perspective. Quoting from that site:
On 1 July 1996, the international standard code for hourly and special
surface weather observations, METAR/SPECI, took effect.
The METAR acronym roughly translates from the French as Aviation
Routine Weather Report . A special report, SPECI, is merely a METAR
formatted report which is issued on a non-routine basis as dictated by
changing meteorological conditions. The SPECI acronym roughly translates as
Aviation Selected Special Weather Report . Meanwhile, the international
standard code format for terminal forecasts issued for airports, TAF,
also took effect. The acronym translates to Aerodrome Forecast.
This implementation ignores the SPECI and TAF acronyms, calling the
entire system METAR.
The class CMetarStation is implemented by MetarStation.h and
MetarStation.cpp. It decodes a text file containing information about
individual METAR reporting stations and builds a static database of that
information during static construction of the class. There are static
member methods to find individual stations, and member functions to
extract individual station attributes. The information about METAR
stations probably has some overlap with FGFS airport information. That
needs to be investigated. The METAR station information is kept in this
file:
http://www.nws.noaa.gov/pub/stninfo/nsd_cccc.gz
http://www.nws.noaa.gov/pub/stninfo/nsd_cccc.txt
This class looks for the file FG_ROOT/Weather/MetarStations instead of
nsd_cccc.
The current implementation does not look for updates to this file on the
internet.
The class CMetarReport is implemented by MetarReport.h and MetarReport.cpp.
It encapsulates the decoding software written by Carl McCalla at -
NOAA/National Weather Service
1325 East-West Highway
SSMC2, W/OSO242, Station 5114
Silver Spring, Maryland 20910
Work: (301) 713-0882, Ext 115
FAX: (301) 608-0911
E-Mail Address: cmccalla@smtpgate.ssmc.noaa.gov
http://www.nws.noaa.gov/software/
This software generally sucks and the CMetarReport class attempts to clean
up some of that suckiness. A CMetarReport object is created with an ASCII
string as a construction parameter. The string contains a METAR report.
There
are member methods to extract selected information from a report by calling
the McCalla software. Additional information can be selected by adding new
member methods as needed. Certainly the methods currently implemented are
not sufficient. METAR reports are available via the internet. In the USA,
NOAA provides individual METAR reports in this directory:
ftp://weather.noaa.gov/data/observations/metar/stations
Other sources are available as well. The current implementation does not
look for reports on the internet.
There is a test program in the MetarTest subdirectory. It requires that a
#define be changed in the MetarStation.cpp file. Add #define TESTPROG to
the code or -D TESTPROG to the compilation. This is necessary because the
FGFS options class is coupled tightly to code that shouldn't be pulled into
the test program. The test program will decode many METAR reports and
display
them to the screen, then it will plot all the METAR reporting stations on a
tumbling globe.

View File

@ -1,201 +0,0 @@
#include "Local.h" /* standard header file */
/********************************************************************/
/* */
/* Title: stspack2 */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 05 Oct 1992 */
/* Programmer: ALLAN DARLING */
/* Language: C/2 */
/* */
/* Abstract: The stspack2 package contains functions to */
/* perform the isalnum through isxdigit functions */
/* on strings. The functions come in four forms: */
/* those that test NULL delimited strings and are */
/* named in the form sxxxxxxx, those that test at */
/* most n characters and are named in the form */
/* nxxxxxxx, those that search forward in a string */
/* and are named in the form nxtyyyyy, and those */
/* that search backward in a string and are named */
/* in the form lstyyyyy. */
/* */
/* The xxxxxxx is the name of the test applied to */
/* each character in the string, such as isalpha, */
/* thus a function to test a NULL delimited string */
/* an return a nonzero value if all characters in */
/* the string are digits is named sisdigit. */
/* */
/* The yyyyy is the name of the test applied to */
/* characters in a string, minus the 'is' prefix. */
/* Thus a function to find the next digit in a NULL */
/* delimited string and return a pointer to it is */
/* named nxtdigit. */
/* */
/* The only exception to the naming rule is for the */
/* functions that test for hexadecimal digits. */
/* These are named sisxdigi, nisxdigi, nxtxdigi, */
/* and lstxdigi because of the eight character */
/* function name limitation. */
/* */
/* The nxxxxxxx class of functions will test up to */
/* n characters or the first NULL character */
/* encountered, whichever comes first. For all */
/* classes of functions, the string sentinal is */
/* not included in the test. */
/* */
/* External Functions Called: */
/* isalnum, isalpha, iscntrl, isdigit, isgraph, */
/* islower, isprint, ispunct, isspace, isupper, */
/* isxdigit. */
/* */
/* Input: For sxxxxxxx class functions, a pointer to a */
/* NULL delimited character string. */
/* */
/* For nxtyyyyy class functions, a pointer to a */
/* NULL delimited character string. */
/* */
/* for nxxxxxxx class functions, a pointer to a */
/* character array, and a positive, nonzero integer.*/
/* */
/* for lstyyyyy class functions, a pointer to a */
/* character array, and a positive, nonzero integer.*/
/* */
/* Output: A nonzero value if the test is true for all */
/* characters in the string, a zero value otherwise.*/
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
int nisalnum(char *s, int n) {
for (; *s && n; s++, n--)
if (!isalnum(*s))
return (0);
return (1);
} /* end nisalnum */
int nisalpha(char *s, int n) {
for (; *s && n; s++, n--)
if (!isalpha(*s))
return (0);
return (1);
} /* end nisalpha */
int niscntrl(char *s, int n) {
for (; *s && n; s++, n--)
if (!iscntrl(*s))
return (0);
return (1);
} /* end niscntrl */
int nisdigit(char *s, int n) {
for (; *s && n; s++, n--)
if (!isdigit(*s))
return (0);
return (1);
} /* end nisdigit */
int nisgraph(char *s, int n) {
for (; *s && n; s++, n--)
if (!isgraph(*s))
return (0);
return (1);
} /* end nisgraph */
int nislower(char *s, int n) {
for (; *s && n; s++, n--)
if (!islower(*s))
return (0);
return (1);
} /* end nislower */
int nisprint(char *s, int n) {
for (; *s && n; s++, n--)
if (!isprint(*s))
return (0);
return (1);
} /* end nisprint */
int nispunct(char *s, int n) {
for (; *s && n; s++, n--)
if (!ispunct(*s))
return (0);
return (1);
} /* end nispunct */
int nisspace(char *s, int n) {
for (; *s && n; s++, n--)
if (!isspace(*s))
return (0);
return (1);
} /* end nisspace */
int nisupper(char *s, int n) {
for (; *s && n; s++, n--)
if (!isupper(*s))
return (0);
return (1);
} /* end nisupper */
int nisxdigi(char *s, int n) {
for (; *s && n; s++, n--)
if (!isxdigit(*s))
return (0);
return (1);
} /* end nisxdigi */

View File

@ -1,201 +0,0 @@
#include "Local.h" /* standard header file */
/********************************************************************/
/* */
/* Title: stspack3 */
/* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
/* Date: 05 Oct 1992 */
/* Programmer: ALLAN DARLING */
/* Language: C/2 */
/* */
/* Abstract: The stspack3 package contains functions to */
/* perform the isalnum through isxdigit functions */
/* on strings. The functions come in four forms: */
/* those that test NULL delimited strings and are */
/* named in the form sxxxxxxx, those that test at */
/* most n characters and are named in the form */
/* nxxxxxxx, those that search forward in a string */
/* and are named in the form nxtyyyyy, and those */
/* that search backward in a string and are named */
/* in the form lstyyyyy. */
/* */
/* The xxxxxxx is the name of the test applied to */
/* each character in the string, such as isalpha, */
/* thus a function to test a NULL delimited string */
/* an return a nonzero value if all characters in */
/* the string are digits is named sisdigit. */
/* */
/* The yyyyy is the name of the test applied to */
/* characters in a string, minus the 'is' prefix. */
/* Thus a function to find the next digit in a NULL */
/* delimited string and return a pointer to it is */
/* named nxtdigit. */
/* */
/* The only exception to the naming rule is for the */
/* functions that test for hexadecimal digits. */
/* These are named sisxdigi, nisxdigi, nxtxdigi, */
/* and lstxdigi because of the eight character */
/* function name limitation. */
/* */
/* The nxxxxxxx class of functions will test up to */
/* n characters or the first NULL character */
/* encountered, whichever comes first. For all */
/* classes of functions, the string sentinal is */
/* not included in the test. */
/* */
/* External Functions Called: */
/* isalnum, isalpha, iscntrl, isdigit, isgraph, */
/* islower, isprint, ispunct, isspace, isupper, */
/* isxdigit. */
/* */
/* Input: For sxxxxxxx class functions, a pointer to a */
/* NULL delimited character string. */
/* */
/* For nxtyyyyy class functions, a pointer to a */
/* NULL delimited character string. */
/* */
/* for nxxxxxxx class functions, a pointer to a */
/* character array, and a positive, nonzero integer.*/
/* */
/* for lstyyyyy class functions, a pointer to a */
/* character array, and a positive, nonzero integer.*/
/* */
/* Output: A nonzero value if the test is true for all */
/* characters in the string, a zero value otherwise.*/
/* */
/* Modification History: */
/* None. */
/* */
/********************************************************************/
char *nxtalnum(char *s) {
for (; !isalnum(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtalnum */
char *nxtalpha(char *s) {
for (; !isalpha(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtalpha */
char *nxtcntrl(char *s) {
for (; !iscntrl(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtcntrl */
char *nxtdigit(char *s) {
for (; !isdigit(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtdigit */
char *nxtgraph(char *s) {
for (; !isgraph(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtgraph */
char *nxtlower(char *s) {
for (; !islower(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtlower */
char *nxtprint(char *s) {
for (; !isprint(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtprint */
char *nxtpunct(char *s) {
for (; !ispunct(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtpunct */
char *nxtspace(char *s) {
for (; !isspace(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtspace */
char *nxtupper(char *s) {
for (; !isupper(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtupper */
char *nxtxdigi(char *s) {
for (; !isxdigit(*s) && *s; s++) ;
if (*s)
return (s);
else
return (NULL);
} /* end nxtxdigi */