# (C) Copyright 2005- 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.
#
include "parameters_version.def";
constant definitionFilesVersion="2.0.0.0" : hidden;
constant internalVersion=30 : hidden;
meta checkInternalVersion check_internal_version(internalVersion) : hidden;

# ECC-806: Local concepts precedence order
preferLocalConceptsEnvVar = getenv("ECCODES_GRIB_PREFER_LOCAL_CONCEPTS","0") : hidden;
transient preferLocalConcepts = preferLocalConceptsEnvVar : hidden;

constant defaultTypeOfLevel="unknown" : hidden;

gribDataQualityChecks = getenv("ECCODES_GRIB_DATA_QUALITY_CHECKS","0") : hidden;
if (gribDataQualityChecks) {
  template LIMITS "param_limits.def";
}

# GRIBEX special boustrophedonic mode. See GRIB-472
# If the environment variable is not defined, the key will be 0
GRIBEX_boustrophedonic = getenv("ECCODES_GRIBEX_BOUSTROPHEDONIC","0") :hidden;

constant zero=0 : hidden;
constant one=1 : hidden;
constant hundred=100 : hidden;
transient truncateLaplacian=0 : hidden;
constant marsDir="mars" : no_copy,hidden;
constant present=1 : hidden;
# alias epsStatistics=zero : hidden;

constant defaultParameter = 0 : hidden;
constant defaultName="unknown" :hidden;
constant defaultShortName="unknown" : hidden;
transient truncateDegrees=0 : hidden;
transient dummy = 1 :hidden;
constant unknown="unknown" : hidden;
constant oneConstant=1 : hidden;
constant thousand=1000 :hidden;
constant oneMillionConstant=1000000 : hidden;
constant grib1divider = 1000 : hidden;
meta offset offset_file() : hidden;
meta count count_file() : hidden;
meta countTotal count_total() : hidden;
transient file="unknown" : hidden;
transient changingPrecision=0 : hidden;
transient unitsFactor=1 : hidden;
transient unitsBias=0 : hidden;
constant globalDomain = "g";
transient timeRangeIndicatorFromStepRange=-1 : hidden;
# Format specifiers for converting a number (float or int) into a string
transient formatForDoubles = "%g"  : no_copy,hidden;
transient formatForLongs   = "%ld" : no_copy,hidden;

# ECC-868
transient produceLargeConstantFields = 0 : hidden;

meta libraryVersion library_version() : hidden;

lookup[4] kindOfProduct (0,identifier) : hidden;
# grib templates
# `ABCD` is a number, each letter being a byte

if(kindOfProduct == `GRIB`){
 lookup[1] GRIBEditionNumber (7,editionNumber) : edition_specific;
 template  GRIB "grib[GRIBEditionNumber:l]/boot.def" ;
}

if(kindOfProduct == `BUDG` ){
 template BUDG "budg/boot.def" ;
}

if(kindOfProduct == `DIAG`){
 template DIAG "diag/boot.def" ;
}

if(kindOfProduct == `TIDE`){
 template TIDE "tide/boot.def" ;
}

if(kindOfProduct == `BUFR`){
 template BUFR "bufr/boot.def" ;
 #constant BUFRstr="BUFR"; #ECC-742
 #alias identifier=BUFRstr;
}

if(kindOfProduct == `CDFX`){
 template CDF "cdf/boot.def" ;
 constant CDFstr="netCDF";
 alias ls.identifier=CDFstr;
}

if(kindOfProduct == 17632522 ){
 template GTS "gts/boot.def" ;
 constant GTSstr="GTS";
 alias ls.identifier=GTSstr;
}

if(kindOfProduct == `META` ){
 template METAR "metar/boot.def" ;
 constant METARstr="METAR";
 alias identifier=METARstr;
}

if(kindOfProduct == `TAF ` ){
 template TAF "taf/boot.def" ;
 constant TAFstr="TAF";
 alias ls.identifier=TAFstr;
}

if(kindOfProduct == 2303214662){
 template HDF5 "hdf5/boot.def" ;
 constant HDF5str="HDF5";
 alias ls.identifier=HDF5str;
}

if(kindOfProduct == `WRAP`){
 template WRAP "wrap/boot.def" ;
 constant WRAPstr="WRAP";
 alias ls.identifier=WRAPstr;
}

meta isMessageValid message_is_valid(kindOfProduct) : hidden;
