1 #include "Local.h" /* standard header file */
4 #pragma subtitle("subtitle - description ")
5 /********************************************************************/
8 /* Organization: W/OSO242 - GRAPHICS AND DISPLAY SECTION */
9 /* Date: 15 Sep 1994 */
10 /* Programmer: CARL MCCALLA */
13 /* Abstract: prtDMETR prints, in order of the ASOS METAR */
14 /* format, all non-initialized members of the structure */
15 /* addressed by the Decoded_METAR pointer. */
17 /* External Functions Called: */
20 /* Input: Mptr - ptr to a decoded_METAR structure. */
24 /* Modification History: */
27 /********************************************************************/
29 void prtDMETR( Decoded_METAR *Mptr )
32 /***************************/
33 /* DECLARE LOCAL VARIABLES */
34 /***************************/
38 /*************************/
39 /* START BODY OF ROUTINE */
40 /*************************/
42 printf("\n\n\n/*******************************************/\n");
43 printf("/* THE DECODED METAR REPORT FOLLOWS */\n");
44 printf("/*******************************************/\n\n");
46 if( Mptr->codeName[ 0 ] != '\0' )
47 printf("REPORT CODE NAME : %s\n",Mptr->codeName);
49 if( Mptr->stnid[ 0 ] != '\0' )
50 printf("STATION ID : %s\n",Mptr->stnid);
52 if( Mptr->ob_date != MAXINT )
53 printf("OBSERVATION DAY : %d\n",Mptr->ob_date);
55 if( Mptr->ob_hour != MAXINT )
56 printf("OBSERVATION HOUR : %d\n",Mptr->ob_hour);
58 if( Mptr->ob_minute != MAXINT )
59 printf("OBSERVATION MINUTE : %d\n",Mptr->ob_minute);
62 printf("NIL REPORT : TRUE\n");
65 printf("AUTO REPORT : TRUE\n");
68 printf("CORRECTED REPORT : TRUE\n");
70 if( Mptr->winData.windVRB )
71 printf("WIND DIRECTION VRB : TRUE\n");
73 if( Mptr->winData.windDir != MAXINT )
74 printf("WIND DIRECTION : %d\n",Mptr->winData.windDir);
76 if( Mptr->winData.windSpeed != MAXINT )
77 printf("WIND SPEED : %d\n",Mptr->winData.windSpeed);
79 if( Mptr->winData.windGust != MAXINT )
80 printf("WIND GUST : %d\n",Mptr->winData.windGust);
82 if( Mptr->winData.windUnits[ 0 ] != '\0' )
83 printf("WIND UNITS : %s\n",Mptr->winData.windUnits);
85 if( Mptr->minWnDir != MAXINT )
86 printf("MIN WIND DIRECTION : %d\n",Mptr->minWnDir);
88 if( Mptr->maxWnDir != MAXINT )
89 printf("MAX WIND DIRECTION : %d\n",Mptr->maxWnDir);
91 if( Mptr->prevail_vsbyM != (float) MAXINT )
92 printf("PREVAIL VSBY (M) : %f\n",Mptr->prevail_vsbyM);
94 if( Mptr->prevail_vsbyKM != (float) MAXINT )
95 printf("PREVAIL VSBY (KM) : %f\n",Mptr->prevail_vsbyKM);
97 if( Mptr->prevail_vsbySM != (float) MAXINT )
98 printf("PREVAIL VSBY (SM) : %.3f\n",Mptr->prevail_vsbySM);
100 if( Mptr->charPrevailVsby[0] != '\0' )
101 printf("PREVAIL VSBY (CHAR) : %s\n",Mptr->charPrevailVsby);
103 if( Mptr->vsby_Dir[ 0 ] != '\0' )
104 printf("VISIBILITY DIRECTION: %s\n",Mptr->vsby_Dir);
107 printf("RVRNO : TRUE\n");
109 for ( i = 0; i < 12; i++ )
111 if( Mptr->RRVR[i].runway_designator[0] != '\0' )
112 printf("RUNWAY DESIGNATOR : %s\n",
113 Mptr->RRVR[i].runway_designator);
115 if( Mptr->RRVR[i].visRange != MAXINT )
116 printf("R_WAY VIS RANGE (FT): %d\n",
117 Mptr->RRVR[i].visRange);
119 if( Mptr->RRVR[i].vrbl_visRange )
120 printf("VRBL VISUAL RANGE : TRUE\n");
122 if( Mptr->RRVR[i].below_min_RVR )
123 printf("BELOW MIN RVR : TRUE\n");
125 if( Mptr->RRVR[i].above_max_RVR )
126 printf("ABOVE MAX RVR : TRUE\n");
128 if( Mptr->RRVR[i].Max_visRange != MAXINT )
129 printf("MX R_WAY VISRNG (FT): %d\n",
130 Mptr->RRVR[i].Max_visRange);
132 if( Mptr->RRVR[i].Min_visRange != MAXINT )
133 printf("MN R_WAY VISRNG (FT): %d\n",
134 Mptr->RRVR[i].Min_visRange);
139 if( Mptr->DVR.visRange != MAXINT )
140 printf("DISPATCH VIS RANGE : %d\n",
143 if( Mptr->DVR.vrbl_visRange )
144 printf("VRBL DISPATCH VISRNG: TRUE\n");
146 if( Mptr->DVR.below_min_DVR )
147 printf("BELOW MIN DVR : TRUE\n");
149 if( Mptr->DVR.above_max_DVR )
150 printf("ABOVE MAX DVR : TRUE\n");
152 if( Mptr->DVR.Max_visRange != MAXINT )
153 printf("MX DSPAT VISRNG (FT): %d\n",
154 Mptr->DVR.Max_visRange);
156 if( Mptr->DVR.Min_visRange != MAXINT )
157 printf("MN DSPAT VISRNG (FT): %d\n",
158 Mptr->DVR.Min_visRange);
162 while ( Mptr->WxObstruct[i][0] != '\0' && i < MAXWXSYMBOLS )
164 printf("WX/OBSTRUCT VISION : %s\n",
165 Mptr->WxObstruct[i] );
169 if( Mptr->PartialObscurationAmt[0][0] != '\0' )
170 printf("OBSCURATION AMOUNT : %s\n",
171 &(Mptr->PartialObscurationAmt[0][0]));
173 if( Mptr->PartialObscurationPhenom[0][0] != '\0' )
174 printf("OBSCURATION PHENOM : %s\n",
175 &(Mptr->PartialObscurationPhenom[0][0]));
178 if( Mptr->PartialObscurationAmt[1][0] != '\0' )
179 printf("OBSCURATION AMOUNT : %s\n",
180 &(Mptr->PartialObscurationAmt[1][0]));
182 if( Mptr->PartialObscurationPhenom[1][0] != '\0' )
183 printf("OBSCURATION PHENOM : %s\n",
184 &(Mptr->PartialObscurationPhenom[1][0]));
187 while ( Mptr->cldTypHgt[ i ].cloud_type[0] != '\0' &&
190 if( Mptr->cldTypHgt[ i ].cloud_type[0] != '\0' )
191 printf("CLOUD COVER : %s\n",
192 Mptr->cldTypHgt[ i ].cloud_type);
194 if( Mptr->cldTypHgt[ i ].cloud_hgt_char[0] != '\0' )
195 printf("CLOUD HGT (CHARAC.) : %s\n",
196 Mptr->cldTypHgt[ i ].cloud_hgt_char);
198 if( Mptr->cldTypHgt[ i ].cloud_hgt_meters != MAXINT)
199 printf("CLOUD HGT (METERS) : %d\n",
200 Mptr->cldTypHgt[ i ].cloud_hgt_meters);
202 if( Mptr->cldTypHgt[ i ].other_cld_phenom[0] != '\0' )
203 printf("OTHER CLOUD PHENOM : %s\n",
204 Mptr->cldTypHgt[ i ].other_cld_phenom);
210 if( Mptr->temp != MAXINT )
211 printf("TEMP. (CELSIUS) : %d\n", Mptr->temp);
213 if( Mptr->dew_pt_temp != MAXINT )
214 printf("D.P. TEMP. (CELSIUS): %d\n", Mptr->dew_pt_temp);
216 if( Mptr->A_altstng )
217 printf("ALTIMETER (INCHES) : %.2f\n",
218 Mptr->inches_altstng );
220 if( Mptr->Q_altstng )
221 printf("ALTIMETER (PASCALS) : %d\n",
222 Mptr->hectoPasc_altstng );
224 if( Mptr->TornadicType[0] != '\0' )
225 printf("TORNADIC ACTVTY TYPE: %s\n",
226 Mptr->TornadicType );
228 if( Mptr->BTornadicHour != MAXINT )
229 printf("TORN. ACTVTY BEGHOUR: %d\n",
230 Mptr->BTornadicHour );
232 if( Mptr->BTornadicMinute != MAXINT )
233 printf("TORN. ACTVTY BEGMIN : %d\n",
234 Mptr->BTornadicMinute );
236 if( Mptr->ETornadicHour != MAXINT )
237 printf("TORN. ACTVTY ENDHOUR: %d\n",
238 Mptr->ETornadicHour );
240 if( Mptr->ETornadicMinute != MAXINT )
241 printf("TORN. ACTVTY ENDMIN : %d\n",
242 Mptr->ETornadicMinute );
244 if( Mptr->TornadicDistance != MAXINT )
245 printf("TORN. DIST. FROM STN: %d\n",
246 Mptr->TornadicDistance );
248 if( Mptr->TornadicLOC[0] != '\0' )
249 printf("TORNADIC LOCATION : %s\n",
252 if( Mptr->TornadicDIR[0] != '\0' )
253 printf("TORNAD. DIR FROM STN: %s\n",
256 if( Mptr->TornadicMovDir[0] != '\0' )
257 printf("TORNADO DIR OF MOVM.: %s\n",
258 Mptr->TornadicMovDir );
261 if( Mptr->autoIndicator[0] != '\0' )
262 printf("AUTO INDICATOR : %s\n",
263 Mptr->autoIndicator);
265 if( Mptr->PKWND_dir != MAXINT )
266 printf("PEAK WIND DIRECTION : %d\n",Mptr->PKWND_dir);
267 if( Mptr->PKWND_speed != MAXINT )
268 printf("PEAK WIND SPEED : %d\n",Mptr->PKWND_speed);
269 if( Mptr->PKWND_hour != MAXINT )
270 printf("PEAK WIND HOUR : %d\n",Mptr->PKWND_hour);
271 if( Mptr->PKWND_minute != MAXINT )
272 printf("PEAK WIND MINUTE : %d\n",Mptr->PKWND_minute);
274 if( Mptr->WshfTime_hour != MAXINT )
275 printf("HOUR OF WIND SHIFT : %d\n",Mptr->WshfTime_hour);
276 if( Mptr->WshfTime_minute != MAXINT )
277 printf("MINUTE OF WIND SHIFT: %d\n",Mptr->WshfTime_minute);
278 if( Mptr->Wshft_FROPA != FALSE )
279 printf("FROPA ASSOC. W/WSHFT: TRUE\n");
281 if( Mptr->TWR_VSBY != (float) MAXINT )
282 printf("TOWER VISIBILITY : %.2f\n",Mptr->TWR_VSBY);
283 if( Mptr->SFC_VSBY != (float) MAXINT )
284 printf("SURFACE VISIBILITY : %.2f\n",Mptr->SFC_VSBY);
286 if( Mptr->minVsby != (float) MAXINT )
287 printf("MIN VRBL_VIS (SM) : %.4f\n",Mptr->minVsby);
288 if( Mptr->maxVsby != (float) MAXINT )
289 printf("MAX VRBL_VIS (SM) : %.4f\n",Mptr->maxVsby);
291 if( Mptr->VSBY_2ndSite != (float) MAXINT )
292 printf("VSBY_2ndSite (SM) : %.4f\n",Mptr->VSBY_2ndSite);
293 if( Mptr->VSBY_2ndSite_LOC[0] != '\0' )
294 printf("VSBY_2ndSite LOC. : %s\n",
295 Mptr->VSBY_2ndSite_LOC);
299 printf("OCCASSIONAL LTG : TRUE\n");
302 printf("FREQUENT LIGHTNING : TRUE\n");
305 printf("CONTINUOUS LTG : TRUE\n");
308 printf("CLOUD-GROUND LTG : TRUE\n");
311 printf("IN-CLOUD LIGHTNING : TRUE\n");
314 printf("CLD-CLD LIGHTNING : TRUE\n");
317 printf("CLOUD-AIR LIGHTNING : TRUE\n");
320 printf("LIGHTNING AT AIRPORT: TRUE\n");
323 printf("LIGHTNING OVERHEAD : TRUE\n");
326 printf("DISTANT LIGHTNING : TRUE\n");
328 if( Mptr->LightningVCTS )
329 printf("L'NING W/I 5-10(ALP): TRUE\n");
331 if( Mptr->LightningTS )
332 printf("L'NING W/I 5 (ALP) : TRUE\n");
334 if( Mptr->VcyStn_LTG )
335 printf("VCY STN LIGHTNING : TRUE\n");
337 if( Mptr->LTG_DIR[0] != '\0' )
338 printf("DIREC. OF LIGHTNING : %s\n", Mptr->LTG_DIR);
343 while( i < 3 && Mptr->ReWx[ i ].Recent_weather[0] != '\0' )
345 printf("RECENT WEATHER : %s",
346 Mptr->ReWx[i].Recent_weather);
348 if( Mptr->ReWx[i].Bhh != MAXINT )
349 printf(" BEG_hh = %d",Mptr->ReWx[i].Bhh);
350 if( Mptr->ReWx[i].Bmm != MAXINT )
351 printf(" BEG_mm = %d",Mptr->ReWx[i].Bmm);
353 if( Mptr->ReWx[i].Ehh != MAXINT )
354 printf(" END_hh = %d",Mptr->ReWx[i].Ehh);
355 if( Mptr->ReWx[i].Emm != MAXINT )
356 printf(" END_mm = %d",Mptr->ReWx[i].Emm);
363 if( Mptr->minCeiling != MAXINT )
364 printf("MIN VRBL_CIG (FT) : %d\n",Mptr->minCeiling);
365 if( Mptr->maxCeiling != MAXINT )
366 printf("MAX VRBL_CIG (FT)) : %d\n",Mptr->maxCeiling);
368 if( Mptr->CIG_2ndSite_Meters != MAXINT )
369 printf("CIG2ndSite (FT) : %d\n",Mptr->CIG_2ndSite_Meters);
370 if( Mptr->CIG_2ndSite_LOC[0] != '\0' )
371 printf("CIG @ 2nd Site LOC. : %s\n",Mptr->CIG_2ndSite_LOC);
374 printf("PRESFR : TRUE\n");
376 printf("PRESRR : TRUE\n");
379 printf("SLPNO : TRUE\n");
381 if( Mptr->SLP != (float) MAXINT )
382 printf("SLP (hPa) : %.1f\n", Mptr->SLP);
384 if( Mptr->SectorVsby != (float) MAXINT )
385 printf("SECTOR VSBY (MILES) : %.2f\n", Mptr->SectorVsby );
387 if( Mptr->SectorVsby_Dir[ 0 ] != '\0' )
388 printf("SECTOR VSBY OCTANT : %s\n", Mptr->SectorVsby_Dir );
390 if( Mptr->TS_LOC[ 0 ] != '\0' )
391 printf("THUNDERSTORM LOCAT. : %s\n", Mptr->TS_LOC );
393 if( Mptr->TS_MOVMNT[ 0 ] != '\0' )
394 printf("THUNDERSTORM MOVMNT.: %s\n", Mptr->TS_MOVMNT);
397 printf("GR (HAILSTONES) : TRUE\n");
399 if( Mptr->GR_Size != (float) MAXINT )
400 printf("HLSTO SIZE (INCHES) : %.3f\n",Mptr->GR_Size);
403 printf("VIRGA : TRUE\n");
405 if( Mptr->VIRGA_DIR[0] != '\0' )
406 printf("DIR OF VIRGA FRM STN: %s\n", Mptr->VIRGA_DIR);
408 for( i = 0; i < 6; i++ ) {
409 if( Mptr->SfcObscuration[i][0] != '\0' )
410 printf("SfcObscuration : %s\n",
411 &(Mptr->SfcObscuration[i][0]) );
414 if( Mptr->Num8thsSkyObscured != MAXINT )
415 printf("8ths of SkyObscured : %d\n",Mptr->Num8thsSkyObscured);
418 printf("CIGNO : TRUE\n");
420 if( Mptr->Ceiling != MAXINT )
421 printf("Ceiling (ft) : %d\n",Mptr->Ceiling);
423 if( Mptr->Estimated_Ceiling != MAXINT )
424 printf("Estimated CIG (ft) : %d\n",Mptr->Estimated_Ceiling);
426 if( Mptr->VrbSkyBelow[0] != '\0' )
427 printf("VRB SKY COND BELOW : %s\n",Mptr->VrbSkyBelow);
429 if( Mptr->VrbSkyAbove[0] != '\0' )
430 printf("VRB SKY COND ABOVE : %s\n",Mptr->VrbSkyAbove);
432 if( Mptr->VrbSkyLayerHgt != MAXINT )
433 printf("VRBSKY COND HGT (FT): %d\n",Mptr->VrbSkyLayerHgt);
435 if( Mptr->ObscurAloftHgt != MAXINT )
436 printf("Hgt Obscur Aloft(ft): %d\n",Mptr->ObscurAloftHgt);
438 if( Mptr->ObscurAloft[0] != '\0' )
439 printf("Obscur Phenom Aloft : %s\n",Mptr->ObscurAloft);
441 if( Mptr->ObscurAloftSkyCond[0] != '\0' )
442 printf("Obscur ALOFT SKYCOND: %s\n",Mptr->ObscurAloftSkyCond);
446 printf("NOSPECI : TRUE\n");
449 printf("LAST : TRUE\n");
451 if( Mptr->synoptic_cloud_type[ 0 ] != '\0' )
452 printf("SYNOPTIC CLOUD GROUP: %s\n",Mptr->synoptic_cloud_type);
454 if( Mptr->CloudLow != '\0' )
455 printf("LOW CLOUD CODE : %c\n",Mptr->CloudLow);
457 if( Mptr->CloudMedium != '\0' )
458 printf("MEDIUM CLOUD CODE : %c\n",Mptr->CloudMedium);
460 if( Mptr->CloudHigh != '\0' )
461 printf("HIGH CLOUD CODE : %c\n",Mptr->CloudHigh);
463 if( Mptr->SNINCR != MAXINT )
464 printf("SNINCR (INCHES) : %d\n",Mptr->SNINCR);
466 if( Mptr->SNINCR_TotalDepth != MAXINT )
467 printf("SNINCR(TOT. INCHES) : %d\n",Mptr->SNINCR_TotalDepth);
469 if( Mptr->snow_depth_group[ 0 ] != '\0' )
470 printf("SNOW DEPTH GROUP : %s\n",Mptr->snow_depth_group);
472 if( Mptr->snow_depth != MAXINT )
473 printf("SNOW DEPTH (INCHES) : %d\n",Mptr->snow_depth);
475 if( Mptr->WaterEquivSnow != (float) MAXINT )
476 printf("H2O EquivSno(inches): %.2f\n",Mptr->WaterEquivSnow);
478 if( Mptr->SunshineDur != MAXINT )
479 printf("SUNSHINE (MINUTES) : %d\n",Mptr->SunshineDur);
481 if( Mptr->SunSensorOut )
482 printf("SUN SENSOR OUT : TRUE\n");
484 if( Mptr->hourlyPrecip != (float) MAXINT )
485 printf("HRLY PRECIP (INCHES): %.2f\n",Mptr->hourlyPrecip);
487 if( Mptr->precip_amt != (float) MAXINT)
488 printf("3/6HR PRCIP (INCHES): %.2f\n",
491 if( Mptr->Indeterminant3_6HrPrecip )
492 printf("INDTRMN 3/6HR PRECIP: TRUE\n");
494 if( Mptr->precip_24_amt != (float) MAXINT)
495 printf("24HR PRECIP (INCHES): %.2f\n",
496 Mptr->precip_24_amt);
498 if( Mptr->Temp_2_tenths != (float) MAXINT )
499 printf("TMP2TENTHS (CELSIUS): %.1f\n",Mptr->Temp_2_tenths);
501 if( Mptr->DP_Temp_2_tenths != (float) MAXINT )
502 printf("DPT2TENTHS (CELSIUS): %.1f\n",Mptr->DP_Temp_2_tenths);
504 if( Mptr->maxtemp != (float) MAXINT)
505 printf("MAX TEMP (CELSIUS) : %.1f\n",
508 if( Mptr->mintemp != (float) MAXINT)
509 printf("MIN TEMP (CELSIUS) : %.1f\n",
512 if( Mptr->max24temp != (float) MAXINT)
513 printf("24HrMAXTMP (CELSIUS): %.1f\n",
516 if( Mptr->min24temp != (float) MAXINT)
517 printf("24HrMINTMP (CELSIUS): %.1f\n",
520 if( Mptr->char_prestndcy != MAXINT)
521 printf("CHAR PRESS TENDENCY : %d\n",
522 Mptr->char_prestndcy );
524 if( Mptr->prestndcy != (float) MAXINT)
525 printf("PRES. TENDENCY (hPa): %.1f\n",
529 printf("PWINO : TRUE\n");
532 printf("PNO : TRUE\n");
535 printf("CHINO : TRUE\n");
537 if( Mptr->CHINO_LOC[0] != '\0' )
538 printf("CHINO_LOC : %s\n",Mptr->CHINO_LOC);
541 printf("VISNO : TRUE\n");
543 if( Mptr->VISNO_LOC[0] != '\0' )
544 printf("VISNO_LOC : %s\n",Mptr->VISNO_LOC);
547 printf("FZRANO : TRUE\n");
550 printf("TSNO : TRUE\n");
552 if( Mptr->DollarSign)
553 printf("DOLLAR $IGN INDCATR : TRUE\n");
555 if( Mptr->horiz_vsby[ 0 ] != '\0' )
556 printf("HORIZ VISIBILITY : %s\n",Mptr->horiz_vsby);
558 if( Mptr->dir_min_horiz_vsby[ 0 ] != '\0' )
559 printf("DIR MIN HORIZ VSBY : %s\n",Mptr->dir_min_horiz_vsby);
562 printf("CAVOK : TRUE\n");
565 if( Mptr->VertVsby != MAXINT )
566 printf("Vert. Vsby (meters) : %d\n",
569 if( Mptr->charVertVsby[0] != '\0' )
570 printf("Vert. Vsby (CHAR) : %s\n",
571 Mptr->charVertVsby );
573 if( Mptr->QFE != MAXINT )
574 printf("QFE : %d\n", Mptr->QFE);
577 printf("VOLCANIC ASH : TRUE\n");
579 if( Mptr->min_vrbl_wind_dir != MAXINT )
580 printf("MIN VRBL WIND DIR : %d\n",Mptr->min_vrbl_wind_dir);
581 if( Mptr->max_vrbl_wind_dir != MAXINT )
582 printf("MAX VRBL WIND DIR : %d\n",Mptr->max_vrbl_wind_dir);