eccodes/definitions/taf/boot.def

155 lines
3.5 KiB
Modula-2
Raw Normal View History

2015-01-05 15:45:46 +00:00
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
constant normal="NORMAL";
constant correction="CORRECTION";
#meta out sprintf("metar_%s.xml",count);
alias temperatureAndDewpointPresent=zero;
alias qnhPresent=zero;
alias qnhAPresent=zero;
alias qfePresent=zero;
alias status=normal;
alias isCorrection=zero;
alias presentTrend1=zero;
alias presentTrend2=zero;
alias presentTrend3=zero;
alias isAuto=false;
alias windPresent=zero;
alias nosigPresent=zero;
position startOfMessage;
message_copy theMessage :dump ;
group identifier; non_alpha na;
group g : dump; non_alpha na;
if ( g is "COR" ) {
rename(g,cor);
alias isCorrection=one;
alias status=correction;
group g : dump; non_alpha na;
}
if (length(g) == 4) {
include "cccc.def";
} else {
if (g is "METAR") {
rename(g,metarTwice);
group g : dump; non_alpha na;
if (length(g) == 4) { include "cccc.def"; }
else {
constant CCCC = "unknown";
constant coordinatesPresent = 0;
}
} else {
constant CCCC = "unknown";
constant coordinatesPresent = 0;
}
}
if (substr(g,6,1) is "Z" && is_integer(g,0,6) ) {
rename(g,YYGGgg);
modify YYGGgg : hidden;
group g : dump ; non_alpha na;
year=getenv("METAR_YEAR") : dump;
month=getenv("METAR_MONTH") : dump;
day = to_string(YYGGgg,0,2) : dump;
hour = to_string(YYGGgg,2,2) : dump;
minute = to_string(YYGGgg,4,2) : dump;
}
if ( ! isCorrection && g is "COR" ) {
rename(g,cor);
alias status=correction;
alias isCorrection=one;
group g : dump; non_alpha na;
}
include "wrong_delayed.def";
if ( g is "NIL" ) {
rename(g,nil); group g : dump;
} else {
if (g is "AUTO") {
rename(g,auto);
alias isAuto=true;
group g : dump; non_alpha na;
}
include "wind.def";
include "horizontalVisibility.def";
if ( ! isCavok ) {
include "present_weather.def";
include "clouds.def";
}
include "missing_field.def";
include "temperature.def";
include "qnh.def";
include "colour.def";
include "recent_weather.def";
include "wind_shear.def";
include "sea_state.def";
template runwayState "metar/runwayState.def";
include "trend1.def";
include "trend2.def";
include "trend3.def";
include "trend4.def";
}
include "remark.def";
if (length(g) == 0) {
modify g : hidden;
} else {
if ( ! remarkPresent) {
rename(g,skippedGroup);
group g : dump; non_alpha na;
include "colour.def";
include "recent_weather.def";
include "wind_shear.def";
include "sea_state.def";
template runwayState "metar/runwayState.def";
include "temperature.def";
include "qnh.def";
if (!presentTrend1) {
include "trend1.def";
include "trend2.def";
include "trend3.def";
include "trend4.def";
}
}
include "remark.def";
if ( ! remarkPresent) {
if ( length(g) == 0) {
modify g : hidden;
} else {
rename(g,unknownGroup) ;
}
}
group notDecoded("=") : dump;
if (remarkPresent) {
rename(notDecoded,remark);
}
}
ascii[1] endMark :read_only ;
position totalLength;
position endOfMessage;
meta lengthOfMessage evaluate( endOfMessage-startOfMessage);
meta md5Headers md5(startOfMessage,lengthOfMessage);
alias ls.totalLength=totalLength;