[metview] 12/20: New upstream 4.7.0
Alastair McKinstry
mckinstry at moszumanska.debian.org
Sat Oct 29 13:50:48 UTC 2016
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to tag debian/4.7.2-1
in repository metview.
commit f5a6c8413df3a62cfec809b9f9bb8e0f9395f851
Author: Alastair McKinstry <mckinstry at debian.org>
Date: Wed Sep 14 20:13:26 2016 +0100
New upstream 4.7.0
---
CMakeLists.txt | 9 +
LICENSE | 2 +-
NOTICE | 2 +-
VERSION.cmake | 4 +-
project_summary.cmake | 5 +
share/metview/etc/AnnotationViewDef | 4 +-
share/metview/etc/AxisDef | 2 +-
share/metview/etc/BinningObjectDef | 2 +-
share/metview/etc/CMakeLists.txt | 2 +-
share/metview/etc/CoastDef | 2 +-
share/metview/etc/ContDef | 2 +-
share/metview/etc/EPSOutputDef | 14 --
share/metview/etc/GeoToGribDef | 3 +
share/metview/etc/GeoToGribRules | 3 +
share/metview/etc/GraphDef | 2 +-
share/metview/etc/KMLOutputDef | 14 --
share/metview/etc/MAXISDef | 2 +-
share/metview/etc/MBOXPLOTDef | 2 +-
share/metview/etc/MCOASTDef | 2 +-
share/metview/etc/MCONTDef | 2 +-
share/metview/etc/MGRAPHDef | 2 +-
share/metview/etc/MLEGENDDef | 2 +-
share/metview/etc/MSYMBDef | 2 +-
share/metview/etc/MTAYLORDef | 2 +-
share/metview/etc/MTEXTDef | 2 +-
share/metview/etc/MTHERMOGRIDDef | 2 +-
share/metview/etc/MWINDDef | 2 +-
.../etc/{MagicsColors.h => MagicsColours.txt} | 0
share/metview/etc/ObjectList | 2 +-
share/metview/etc/ObsPlottingDef | 2 +-
share/metview/etc/PDFOutputDef | 14 --
share/metview/etc/PNGOutputDef | 14 --
share/metview/etc/PSOutputDef | 14 --
share/metview/etc/PageFrameDef | 4 +-
share/metview/etc/PlotPageDef | 2 +-
share/metview/etc/SVGOutputDef | 14 --
share/metview/etc/SubpageFrameDef | 4 +-
share/metview/etc/SymbDef | 2 +-
share/metview/etc/TextDef | 2 +-
share/metview/etc/WindDef | 2 +-
share/metview/etc/licence_for_about_box.txt | 2 +-
share/metview/icons/FLEXTRA_FILE.xpm | 0
share/metview/icons/FLEXTRA_PREPARE.xpm | 0
share/metview/icons/FLEXTRA_RUN.xpm | 0
share/metview/icons/FLEXTRA_VISUALISER.xpm | 0
share/metview/icons/INPUTVISUALISER.xpm | 0
share/metview/icons/NETCDFPLUS.xpm | 0
share/metview/icons/ODB_DB.xpm | 0
share/metview/icons/ODB_VISUALISER.xpm | 0
share/metview/icons/TABLEVISUALISER.xpm | 0
share/metview/icons/help_area.xpm | 0
share/metview/icons/help_line.xpm | 0
share/metview/icons/help_map.xpm | 0
share/metview/icons/help_point.xpm | 0
share/metview/icons/help_station.xpm | 0
share/metview/icons_mv5/AVERAGE.xpm | 0
share/metview/icons_mv5/AVERAGEVIEW.xpm | 0
share/metview/icons_mv5/GRIBVECTORS.xpm | 0
share/metview/icons_mv5/GeoToKML.xpm | 0
share/metview/icons_mv5/HOVMOELLERDATA.xpm | 0
share/metview/icons_mv5/INPUTVISUALISER.svg | 0
share/metview/icons_mv5/Interpolation.svg | 0
share/metview/icons_mv5/MAGML.xpm | 0
share/metview/icons_mv5/MHOVMOELLERDATA.xpm | 0
share/metview/icons_mv5/MHOVMOELLERVIEW.xpm | 0
share/metview/icons_mv5/MTHERMO.xpm | 0
share/metview/icons_mv5/MVPROFILE.xpm | 0
share/metview/icons_mv5/MVPROFILEVIEW.xpm | 0
share/metview/icons_mv5/MXAVERAGE.xpm | 0
share/metview/icons_mv5/MXAVERAGEVIEW.xpm | 0
share/metview/icons_mv5/MXSECTION.xpm | 0
share/metview/icons_mv5/MXSECTIONVIEW.xpm | 0
share/metview/icons_mv5/MetPlus.xpm | 0
share/metview/icons_mv5/NETCDFPLUS.svg | 0
share/metview/icons_mv5/OBSTAT.xpm | 0
share/metview/icons_mv5/OBSTAT_CURVE.xpm | 0
share/metview/icons_mv5/OBSTAT_SCATTER.xpm | 0
share/metview/icons_mv5/ODB_MARS.xpm | 0
share/metview/icons_mv5/REPROJECTION.xpm | 0
share/metview/icons_mv5/TABLEVISUALISER.svg | 0
share/metview/icons_mv5/THERMODATA.xpm | 0
share/metview/icons_mv5/VPROF.xpm | 0
share/metview/icons_mv5/VPROFILE.xpm | 0
share/metview/icons_mv5/VPROFVIEW.xpm | 0
share/metview/icons_mv5/WEBACCESS.xpm | 0
share/metview/icons_mv5/XAVERAGE.xpm | 0
share/metview/icons_mv5/XSECT.xpm | 0
share/metview/icons_mv5/XSECTION.xpm | 0
share/metview/icons_mv5/XSECTVIEW.xpm | 0
src/BufrExaminer/BufrMetaData.cc | 67 +++---
src/CMakeLists.txt | 5 +-
src/Desktop/EditTransaction.cc | 3 +-
src/Desktop/FolderInfo.cc | 1 -
src/Desktop/MvQColourLine.cc | 4 +-
src/Desktop/MvQDetailedFolderView.cc | 5 +-
src/Desktop/MvQFolderItemProperty.cc | 7 +-
src/Desktop/MvQFolderItemProperty.h | 5 +-
src/Desktop/MvQFolderViewBase.cc | 3 -
src/Desktop/MvQIconFolderView.cc | 5 +-
src/Desktop/MvQPageView.cc | 25 +--
src/Desktop/MvQRequestPanelLine.cc | 6 +-
src/Download/CMakeLists.txt | 12 +
src/Download/DOWNLOAD.svg | 226 +++++++++++++++++++
src/Download/Download.cc | 208 +++++++++++++++++
src/Download/DownloadDef | 12 +
src/Download/ObjectSpec.Download | 29 +++
src/Hovmoeller/HovToolkit.cc | 4 +-
src/Macro/grib.cc | 54 ++++-
src/Macro/include/macro.h | 2 -
src/Macro/mlist.cc | 2 +-
src/Macro/request.cc | 3 +
src/Macro/value.cc | 4 +-
src/MacroEditor/FindTextDialog.cc | 9 +
src/MacroEditor/FindTextDialog.h | 1 +
src/MacroEditor/FindTextDialog.ui | 2 +-
src/MacroEditor/MacroEdit.cc | 31 ++-
src/MacroEditor/MacroEdit.h | 5 +
src/MvApp/geo_to_grib.cc | 154 ++++++++++++-
src/ObsFilter/BufrPicker.cc | 2 +-
src/ObsFilter/ObsFilter.cc | 2 +-
src/OgcClient/MvQOgcParam.h | 2 +
src/OgcClient/MvQOgcRequest.h | 2 +
src/OgcClient/MvQWmsClient.cc | 10 +-
src/Percentile/Percentile.cc | 2 +-
src/Scm/ObjectSpec.Scm | 3 +-
src/Stations/stat.fmt | 247 ++++++++++----------
src/Thermo/MTHERMOGRIDDef | 2 +-
src/Thermo/MThermoDef | 2 +-
src/libMetview/MvObs.cc | 1 +
src/libMetview/MvRequest.cc | 29 ++-
src/libMetview/MvScanFileType.cc | 4 +-
src/libMvQtGui/MvQCheckBoxCombo.cc | 2 +-
src/libMvQtGui/MvQKeyDialog.cc | 4 -
src/libMvQtGui/MvQKeyProfileTree.cc | 2 +-
src/libUtil/CMakeLists.txt | 5 +
src/libUtil/Grib.cc | 4 +-
src/libUtil/MvAlmostObsoleteRequest.cc | 10 +-
src/libUtil/MvNetwork.cc | 249 +++++++++++++++++++++
src/libUtil/MvNetwork.h | 69 ++++++
src/libUtil/MvOdb.cc | 1 -
src/libUtil/TableReader.cc | 23 +-
src/libUtil/TableReader.h | 22 +-
src/libUtil/proj_braz.cc | 46 ++--
src/libUtil/proj_braz.hpp | 2 +-
src/uPlot/MagPlusBatchService.cc | 2 +-
test/data/fc_data.grib | Bin 0 -> 480 bytes
test/data/gpt_to_grib_exp_mean_reference.grb | Bin 0 -> 3240 bytes
test/data/gpt_to_grib_exp_sum_reference.grb | Bin 0 -> 3240 bytes
test/data/gpt_to_grib_nearest_count_reference.grb | Bin 0 -> 3240 bytes
test/data/gpt_to_grib_nearest_mean_reference.grb | Bin 0 -> 360 bytes
test/data/gpt_to_grib_nearest_sum_reference.grb | Bin 0 -> 360 bytes
test/data/gpt_to_grib_reciprocal_reference.grb | Bin 0 -> 3240 bytes
test/data/t1000_LL_7x7.grb | Bin 0 -> 1560 bytes
test/macros/CMakeLists.txt | 17 ++
test/macros/HelloWorld.mv | 3 +-
test/macros/gpt_to_grib_core.mv | 59 +++++
test/macros/gpt_to_grib_nearest.mv | 74 ++++++
test/macros/grib_dates.mv | 54 +++++
test/macros/layoutx3.mv | 7 +-
test/macros/plot_coast_order.mv | 1 +
test/macros/set_output.mv | 4 +-
161 files changed, 1601 insertions(+), 433 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e9b0765..6adf3c5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,6 +62,7 @@ option( ENABLE_USAGE_LOG "enable usage logging (only at ECMWF)"
option( ENABLE_QT_DEBUG "enable Qt debugging messages" OFF )
option( ENABLE_QT5 "enable Qt5" OFF )
option( ENABLE_INPE "enable INPE modules" ON )
+option( ENABLE_URL_DOWNLOAD "enable downloading of files from URLs" ON )
option( ENABLE_WEATHER_ROOM "enable Weather Room plot export (only at ECMWF)" OFF )
option( ENABLE_NETWORK_PROXY "enable network proxy settings for WMS" OFF )
option( ENABLE_EXPERIMENTAL "enable experimental modules" OFF )
@@ -219,6 +220,14 @@ else()
endif()
+# Network access (download via URLs)
+if(ENABLE_URL_DOWNLOAD)
+ if(NOT CURL_FOUND)
+ ecbuild_critical("URL_DOWNLOAD was enabled, but the 'curl' development package was not found.")
+ endif()
+endif()
+
+
###############################################################################
diff --git a/LICENSE b/LICENSE
index 99a1252..cddea2c 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright 2007-2012 European Centre for Medium-Range Weather Forecasts (ECMWF)
+ Copyright 2007-2016 European Centre for Medium-Range Weather Forecasts (ECMWF)
and Brazil's Instituto Nacional de Pesquisas Espaciais (INPE)
Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/NOTICE b/NOTICE
index 352227e..df7294e 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,7 +1,7 @@
Metview
=======
-Copyright 2007-2015 ECMWF and INPE
+Copyright 2007-2016 ECMWF and INPE
This product mainly includes software developed by the
Development Section at the
diff --git a/VERSION.cmake b/VERSION.cmake
index c7fb432..8fadc4b 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1,5 +1,5 @@
set(${PROJECT_NAME}_MAJOR_VERSION_STR "4")
-set(${PROJECT_NAME}_MINOR_VERSION_STR "6")
-set(${PROJECT_NAME}_REVISION_VERSION_STR "7")
+set(${PROJECT_NAME}_MINOR_VERSION_STR "7")
+set(${PROJECT_NAME}_REVISION_VERSION_STR "0")
set(${PROJECT_NAME}_VERSION_STR "${${PROJECT_NAME}_MAJOR_VERSION_STR}.${${PROJECT_NAME}_MINOR_VERSION_STR}.${${PROJECT_NAME}_REVISION_VERSION_STR}")
diff --git a/project_summary.cmake b/project_summary.cmake
index 622a472..e661835 100644
--- a/project_summary.cmake
+++ b/project_summary.cmake
@@ -32,9 +32,14 @@ ecbuild_info(" Usage log : ${ENABLE_USAGE_LOG}")
ecbuild_info(" Log dir : ${LOG_DIR}")
ecbuild_info(" INPE access : ${ENABLE_INPE}")
ecbuild_info(" Weather Room : ${ENABLE_WEATHER_ROOM}")
+ecbuild_info(" URL download : ${ENABLE_URL_DOWNLOAD}")
ecbuild_info(" Experimental : ${ENABLE_EXPERIMENTAL}")
ecbuild_info(" Contrib : ${ENABLE_CONTRIB}")
+if(NOT CURL_FOUND)
+ecbuild_warn(" If you would like to use the Download module or the MARS Web API, please install the 'curl' development package")
+endif()
+
ecbuild_info("")
ecbuild_info(" Built ${PROJECT_NAME} version ${${PROJECT_NAME}_VERSION_STR}")
diff --git a/share/metview/etc/AnnotationViewDef b/share/metview/etc/AnnotationViewDef
index fd80dd9..989131e 100644
--- a/share/metview/etc/AnnotationViewDef
+++ b/share/metview/etc/AnnotationViewDef
@@ -36,7 +36,7 @@ SUBPAGE_FRAME
SUBPAGE_FRAME_COLOUR [interface=colour]
{
- %include MagicsColors.h
+ %include MagicsColours.txt
} = BLACK
SUBPAGE_FRAME_LINE_STYLE
@@ -64,7 +64,7 @@ SUBPAGE_FRAME_THICKNESS
SUBPAGE_BACKGROUND_COLOUR [interface=colour]
{
- %include MagicsColors.h
+ %include MagicsColours.txt
} = WHITE
}
diff --git a/share/metview/etc/AxisDef b/share/metview/etc/AxisDef
index 5bfc501..eeac5f2 100755
--- a/share/metview/etc/AxisDef
+++ b/share/metview/etc/AxisDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/BinningObjectDef b/share/metview/etc/BinningObjectDef
index 520a081..43cd33a 100644
--- a/share/metview/etc/BinningObjectDef
+++ b/share/metview/etc/BinningObjectDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/CMakeLists.txt b/share/metview/etc/CMakeLists.txt
index 336c165..99b23a7 100644
--- a/share/metview/etc/CMakeLists.txt
+++ b/share/metview/etc/CMakeLists.txt
@@ -51,7 +51,7 @@ set(files
MacroParamDef
MacroParamRules
MacroRules
- MagicsColors.h
+ MagicsColours.txt
MapViewDef
MapViewRules
MarsDef
diff --git a/share/metview/etc/CoastDef b/share/metview/etc/CoastDef
index 6929531..e4a9bb7 100755
--- a/share/metview/etc/CoastDef
+++ b/share/metview/etc/CoastDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/ContDef b/share/metview/etc/ContDef
index 3c867fa..d8f4e44 100755
--- a/share/metview/etc/ContDef
+++ b/share/metview/etc/ContDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/EPSOutputDef b/share/metview/etc/EPSOutputDef
index e065e3f..16a4871 100644
--- a/share/metview/etc/EPSOutputDef
+++ b/share/metview/etc/EPSOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- COLOUR {
- %include MagicsColors.h
- }
- STYLE {
- SOLID; SOLID
- DASH; DASH
- DOT; DOT
- CHAIN_DOT; CHAIN_DOT
- CHAIN_DASH; CHAIN_DASH
- }
-}
-
EPSOUTPUT; Magics; Automatically generated
{
OUTPUT_TITLE
diff --git a/share/metview/etc/GeoToGribDef b/share/metview/etc/GeoToGribDef
index 16cd08c..f7993f7 100644
--- a/share/metview/etc/GeoToGribDef
+++ b/share/metview/etc/GeoToGribDef
@@ -60,6 +60,9 @@ GEO_TO_GRIB; Transform Geopoints to regular grid; metview
RECIPROCAL
EXPONENTIAL_MEAN
EXPONENTIAL_SUM
+ NEAREST_GRIDPOINT_MEAN
+ NEAREST_GRIDPOINT_SUM
+ NEAREST_GRIDPOINT_COUNT
} = RECIPROCAL
PARAMETER
diff --git a/share/metview/etc/GeoToGribRules b/share/metview/etc/GeoToGribRules
index ab8fff2..bd77917 100644
--- a/share/metview/etc/GeoToGribRules
+++ b/share/metview/etc/GeoToGribRules
@@ -5,3 +5,6 @@
%if GRID_DEFINITION_MODE <> GRIB %then
%unset TEMPLATE_GRIB
+
+%if INTERPOLATION_METHOD = NEAREST_GRIDPOINT_MEAN %or INTERPOLATION_METHOD = NEAREST_GRIDPOINT_SUM %or INTERPOLATION_METHOD = NEAREST_GRIDPOINT_COUNT %then
+ %unset TOLERANCE
diff --git a/share/metview/etc/GraphDef b/share/metview/etc/GraphDef
index 833aa47..431c4fe 100755
--- a/share/metview/etc/GraphDef
+++ b/share/metview/etc/GraphDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/KMLOutputDef b/share/metview/etc/KMLOutputDef
index 9707841..2323eb5 100644
--- a/share/metview/etc/KMLOutputDef
+++ b/share/metview/etc/KMLOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- COLOUR {
- %include MagicsColors.h
- }
- STYLE {
- SOLID; SOLID
- DASH; DASH
- DOT; DOT
- CHAIN_DOT; CHAIN_DOT
- CHAIN_DASH; CHAIN_DASH
- }
-}
-
KMLOUTPUT; Magics; Automatically generated
{
OUTPUT_TITLE
diff --git a/share/metview/etc/MAXISDef b/share/metview/etc/MAXISDef
index ff6ffd6..6b61eda 100755
--- a/share/metview/etc/MAXISDef
+++ b/share/metview/etc/MAXISDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MBOXPLOTDef b/share/metview/etc/MBOXPLOTDef
index 8d9d5dd..1c87a96 100644
--- a/share/metview/etc/MBOXPLOTDef
+++ b/share/metview/etc/MBOXPLOTDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MCOASTDef b/share/metview/etc/MCOASTDef
index 80db4b4..61dcf23 100644
--- a/share/metview/etc/MCOASTDef
+++ b/share/metview/etc/MCOASTDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MCONTDef b/share/metview/etc/MCONTDef
index e767d67..01efde4 100644
--- a/share/metview/etc/MCONTDef
+++ b/share/metview/etc/MCONTDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MGRAPHDef b/share/metview/etc/MGRAPHDef
index a558a5c..20ef508 100755
--- a/share/metview/etc/MGRAPHDef
+++ b/share/metview/etc/MGRAPHDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MLEGENDDef b/share/metview/etc/MLEGENDDef
index 60f56ea..d2ca98b 100755
--- a/share/metview/etc/MLEGENDDef
+++ b/share/metview/etc/MLEGENDDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MSYMBDef b/share/metview/etc/MSYMBDef
index fb8b0e3..ef0898e 100644
--- a/share/metview/etc/MSYMBDef
+++ b/share/metview/etc/MSYMBDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MTAYLORDef b/share/metview/etc/MTAYLORDef
index d748a1e..601943c 100644
--- a/share/metview/etc/MTAYLORDef
+++ b/share/metview/etc/MTAYLORDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MTEXTDef b/share/metview/etc/MTEXTDef
index 629564f..561a853 100755
--- a/share/metview/etc/MTEXTDef
+++ b/share/metview/etc/MTEXTDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MTHERMOGRIDDef b/share/metview/etc/MTHERMOGRIDDef
index 511fe49..90ae603 100644
--- a/share/metview/etc/MTHERMOGRIDDef
+++ b/share/metview/etc/MTHERMOGRIDDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MWINDDef b/share/metview/etc/MWINDDef
index d16df4d..359ec3c 100644
--- a/share/metview/etc/MWINDDef
+++ b/share/metview/etc/MWINDDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/MagicsColors.h b/share/metview/etc/MagicsColours.txt
similarity index 100%
rename from share/metview/etc/MagicsColors.h
rename to share/metview/etc/MagicsColours.txt
diff --git a/share/metview/etc/ObjectList b/share/metview/etc/ObjectList
index 618e790..9976d85 100644
--- a/share/metview/etc/ObjectList
+++ b/share/metview/etc/ObjectList
@@ -59,7 +59,7 @@ resources,
devices/all_printers/
coastlines/macros/hidden/general/
templates/system_templates/retrieve,
- colour_file = '$METVIEW_DIR_SHARE/etc/MagicsColors.h',
+ colour_file = '$METVIEW_DIR_SHARE/etc/MagicsColours.txt',
help_file = 'Metview_UI_Help',
# vismod_help_file = 'Visualisation_Help',
# printer_list_file = '$METVIEW_DIR_SHARE/etc/PrinterList',
diff --git a/share/metview/etc/ObsPlottingDef b/share/metview/etc/ObsPlottingDef
index a011027..950eae9 100644
--- a/share/metview/etc/ObsPlottingDef
+++ b/share/metview/etc/ObsPlottingDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/share/metview/etc/PDFOutputDef b/share/metview/etc/PDFOutputDef
index e0e0d6e..090f921 100644
--- a/share/metview/etc/PDFOutputDef
+++ b/share/metview/etc/PDFOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- COLOUR {
- %include MagicsColors.h
- }
- STYLE {
- SOLID; SOLID
- DASH; DASH
- DOT; DOT
- CHAIN_DOT; CHAIN_DOT
- CHAIN_DASH; CHAIN_DASH
- }
-}
-
PDFOUTPUT; Magics; Automatically generated
{
OUTPUT_TITLE
diff --git a/share/metview/etc/PNGOutputDef b/share/metview/etc/PNGOutputDef
index 5f4b81b..3a9d1ae 100644
--- a/share/metview/etc/PNGOutputDef
+++ b/share/metview/etc/PNGOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- COLOUR {
- %include MagicsColors.h
- }
- STYLE {
- SOLID; SOLID
- DASH; DASH
- DOT; DOT
- CHAIN_DOT; CHAIN_DOT
- CHAIN_DASH; CHAIN_DASH
- }
-}
-
PNGOUTPUT; Magics; Automatically generated
{
OUTPUT_TITLE
diff --git a/share/metview/etc/PSOutputDef b/share/metview/etc/PSOutputDef
index a5e29aa..6e7a68a 100644
--- a/share/metview/etc/PSOutputDef
+++ b/share/metview/etc/PSOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- COLOUR {
- %include MagicsColors.h
- }
- STYLE {
- SOLID; SOLID
- DASH; DASH
- DOT; DOT
- CHAIN_DOT; CHAIN_DOT
- CHAIN_DASH; CHAIN_DASH
- }
-}
-
PSOUTPUT; Magics; Automatically generated
{
OUTPUT_TITLE
diff --git a/share/metview/etc/PageFrameDef b/share/metview/etc/PageFrameDef
index bf6700f..4990744 100644
--- a/share/metview/etc/PageFrameDef
+++ b/share/metview/etc/PageFrameDef
@@ -6,7 +6,7 @@ PAGE_FRAME
PAGE_FRAME_COLOUR [interface = colour]
{
- %include MagicsColors.h
+ %include MagicsColours.txt
} = CHARCOAL
PAGE_FRAME_LINE_STYLE
@@ -56,7 +56,7 @@ PAGE_FRAME_THICKNESS
PAGE_ID_LINE_COLOUR [ visible = false, interface = colour]
{
- %include MagicsColors.h
+ %include MagicsColours.txt
} = ECMWF_BLUE
PAGE_ID_LINE_SYSTEM_PLOT [ visible = false ]
diff --git a/share/metview/etc/PlotPageDef b/share/metview/etc/PlotPageDef
index 27bea30..8c8e4da 100644
--- a/share/metview/etc/PlotPageDef
+++ b/share/metview/etc/PlotPageDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/SVGOutputDef b/share/metview/etc/SVGOutputDef
index ba8451c..e0bf972 100644
--- a/share/metview/etc/SVGOutputDef
+++ b/share/metview/etc/SVGOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- COLOUR {
- %include MagicsColors.h
- }
- STYLE {
- SOLID; SOLID
- DASH; DASH
- DOT; DOT
- CHAIN_DOT; CHAIN_DOT
- CHAIN_DASH; CHAIN_DASH
- }
-}
-
SVGOUTPUT; Magics; Automatically generated
{
OUTPUT_TITLE
diff --git a/share/metview/etc/SubpageFrameDef b/share/metview/etc/SubpageFrameDef
index 5bba56a..784ecad 100644
--- a/share/metview/etc/SubpageFrameDef
+++ b/share/metview/etc/SubpageFrameDef
@@ -6,7 +6,7 @@ SUBPAGE_FRAME
SUBPAGE_FRAME_COLOUR [interface = colour]
{
- %include MagicsColors.h
+ %include MagicsColours.txt
} = BLACK
SUBPAGE_FRAME_LINE_STYLE
@@ -34,5 +34,5 @@ SUBPAGE_FRAME_THICKNESS
SUBPAGE_BACKGROUND_COLOUR [interface = colour]
{
- %include MagicsColors.h
+ %include MagicsColours.txt
} = WHITE
diff --git a/share/metview/etc/SymbDef b/share/metview/etc/SymbDef
index 0e03ec1..e1a6512 100755
--- a/share/metview/etc/SymbDef
+++ b/share/metview/etc/SymbDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/TextDef b/share/metview/etc/TextDef
index 5067d26..7f23afb 100755
--- a/share/metview/etc/TextDef
+++ b/share/metview/etc/TextDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/WindDef b/share/metview/etc/WindDef
index e53f43c..dff9331 100755
--- a/share/metview/etc/WindDef
+++ b/share/metview/etc/WindDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
}
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
LINE_STYLE {
diff --git a/share/metview/etc/licence_for_about_box.txt b/share/metview/etc/licence_for_about_box.txt
index 77221a0..8b9a1dd 100644
--- a/share/metview/etc/licence_for_about_box.txt
+++ b/share/metview/etc/licence_for_about_box.txt
@@ -1,4 +1,4 @@
-Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+Copyright 2016 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
diff --git a/share/metview/icons/FLEXTRA_FILE.xpm b/share/metview/icons/FLEXTRA_FILE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/FLEXTRA_PREPARE.xpm b/share/metview/icons/FLEXTRA_PREPARE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/FLEXTRA_RUN.xpm b/share/metview/icons/FLEXTRA_RUN.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/FLEXTRA_VISUALISER.xpm b/share/metview/icons/FLEXTRA_VISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/INPUTVISUALISER.xpm b/share/metview/icons/INPUTVISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/NETCDFPLUS.xpm b/share/metview/icons/NETCDFPLUS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/ODB_DB.xpm b/share/metview/icons/ODB_DB.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/ODB_VISUALISER.xpm b/share/metview/icons/ODB_VISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/TABLEVISUALISER.xpm b/share/metview/icons/TABLEVISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_area.xpm b/share/metview/icons/help_area.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_line.xpm b/share/metview/icons/help_line.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_map.xpm b/share/metview/icons/help_map.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_point.xpm b/share/metview/icons/help_point.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_station.xpm b/share/metview/icons/help_station.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/AVERAGE.xpm b/share/metview/icons_mv5/AVERAGE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/AVERAGEVIEW.xpm b/share/metview/icons_mv5/AVERAGEVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/GRIBVECTORS.xpm b/share/metview/icons_mv5/GRIBVECTORS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/GeoToKML.xpm b/share/metview/icons_mv5/GeoToKML.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/HOVMOELLERDATA.xpm b/share/metview/icons_mv5/HOVMOELLERDATA.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/INPUTVISUALISER.svg b/share/metview/icons_mv5/INPUTVISUALISER.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/Interpolation.svg b/share/metview/icons_mv5/Interpolation.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MAGML.xpm b/share/metview/icons_mv5/MAGML.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MHOVMOELLERDATA.xpm b/share/metview/icons_mv5/MHOVMOELLERDATA.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm b/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MTHERMO.xpm b/share/metview/icons_mv5/MTHERMO.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MVPROFILE.xpm b/share/metview/icons_mv5/MVPROFILE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MVPROFILEVIEW.xpm b/share/metview/icons_mv5/MVPROFILEVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXAVERAGE.xpm b/share/metview/icons_mv5/MXAVERAGE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXAVERAGEVIEW.xpm b/share/metview/icons_mv5/MXAVERAGEVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXSECTION.xpm b/share/metview/icons_mv5/MXSECTION.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXSECTIONVIEW.xpm b/share/metview/icons_mv5/MXSECTIONVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MetPlus.xpm b/share/metview/icons_mv5/MetPlus.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/NETCDFPLUS.svg b/share/metview/icons_mv5/NETCDFPLUS.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/OBSTAT.xpm b/share/metview/icons_mv5/OBSTAT.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/OBSTAT_CURVE.xpm b/share/metview/icons_mv5/OBSTAT_CURVE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/OBSTAT_SCATTER.xpm b/share/metview/icons_mv5/OBSTAT_SCATTER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/ODB_MARS.xpm b/share/metview/icons_mv5/ODB_MARS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/REPROJECTION.xpm b/share/metview/icons_mv5/REPROJECTION.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/TABLEVISUALISER.svg b/share/metview/icons_mv5/TABLEVISUALISER.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/THERMODATA.xpm b/share/metview/icons_mv5/THERMODATA.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/VPROF.xpm b/share/metview/icons_mv5/VPROF.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/VPROFILE.xpm b/share/metview/icons_mv5/VPROFILE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/VPROFVIEW.xpm b/share/metview/icons_mv5/VPROFVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/WEBACCESS.xpm b/share/metview/icons_mv5/WEBACCESS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XAVERAGE.xpm b/share/metview/icons_mv5/XAVERAGE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XSECT.xpm b/share/metview/icons_mv5/XSECT.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XSECTION.xpm b/share/metview/icons_mv5/XSECTION.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XSECTVIEW.xpm b/share/metview/icons_mv5/XSECTVIEW.xpm
old mode 100755
new mode 100644
diff --git a/src/BufrExaminer/BufrMetaData.cc b/src/BufrExaminer/BufrMetaData.cc
index f1c06da..39825e4 100644
--- a/src/BufrExaminer/BufrMetaData.cc
+++ b/src/BufrExaminer/BufrMetaData.cc
@@ -65,21 +65,21 @@ bool BufrSectionDump::read(const string& fname, int msgCnt)
MvObsSet oset(fname.c_str());
MvObsSetIterator iter(oset);
- MvObs obs;
+ MvObs obs;
- bool found=false;
- while(obs = iter())
+ bool found=false;
+ while( (obs = iter()) )
{
if(iter.msgNumber() == msgCnt)
- {
+ {
found=true;
break;
}
- }
+ }
- if(!found)
+ if(!found)
{
- log->error("Message not found!");
+ log->error("Message not found!");
return false;
}
@@ -204,20 +204,20 @@ void BufrDataDump::read(const string& fname, int msgCnt,int subsetCnt)
MvObsSet oset(fname.c_str());
MvObsSetIterator iter(oset);
- MvObs obs;
+ MvObs obs;
- bool found=false;
- while(obs = iter())
+ bool found=false;
+ while( (obs = iter()) )
{
if(iter.msgNumber() == msgCnt)
- {
+ {
found=true;
break;
}
- }
+ }
- if(!found)
- {
+ if(!found)
+ {
log->error("Message not found!");
return;
}
@@ -288,21 +288,21 @@ void BufrBitmapDump::read(const string& fname, int msgCnt,int subsetCnt)
MvObsSet oset(fname.c_str());
MvObsSetIterator iter(oset);
- MvObs obs;
+ MvObs obs;
bool found=false;
- while(obs = iter())
+ while( (obs = iter()) )
{
if(iter.msgNumber() == msgCnt)
- {
+ {
found=true;
break;
}
- }
+ }
- if(!found)
+ if(!found)
{
- log->error("Message not found!");
+ log->error("Message not found!");
return;
}
@@ -394,23 +394,22 @@ int BufrMetaData::subsetNum(int msgCnt)
{
MvObsSet oset(fileName_.c_str());
MvObsSetIterator iter(oset);
- MvObs obs;
+ MvObs obs;
bool found=false;
- while(obs = iter())
+ while( (obs = iter()) )
{
if(iter.msgNumber() == msgCnt)
- {
+ {
found=true;
break;
}
- }
+ }
- if(!found)
- return 0;
+ if(!found)
+ return 0;
return obs.msgSubsetCount();
-
}
void BufrMetaData::readMessages(MvKeyProfile *prof)
@@ -426,12 +425,12 @@ void BufrMetaData::readMessages(MvKeyProfile *prof)
//int index=1;
- messageNum_=0;
+ messageNum_=0;
totalMessageNum_=0;
int bytesRead=0;
- while(obs = iter())
- {
+ while( (obs = iter()) )
+ {
if(iter.subsetNumber() != 1)
{
continue;
@@ -621,14 +620,12 @@ void BufrMetaData::readMessages(MvKeyProfile *prof)
}
}
}
-
- messageNum_++;
+ messageNum_++;
//observer_->messageScanStepChanged(messageNum_);
bytesRead+=obs.messageTotalLen();
observer_->messageScanStepChanged(bytesRead);
}
-
totalMessageNum_=messageNum_;
}
@@ -647,9 +644,9 @@ string BufrSection::itemValue(string itemName)
void BufrSection::setText(const string& txt)
{
- text_=txt;
+ text_=txt;
- istringstream in(text_);
+ istringstream in(text_);
string c;
while(getline(in,c))
{
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9632f6a..a3c072f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,7 +9,6 @@ add_subdirectory( Datacoverage )
add_subdirectory( Divrot )
add_subdirectory( Ecfile )
add_subdirectory( Event )
-
add_subdirectory( Macro )
add_subdirectory( MvApp )
add_subdirectory( Flextra )
@@ -38,6 +37,10 @@ if(ENABLE_OPERA_RADAR)
add_subdirectory(OperaRadar)
endif()
+if(ENABLE_URL_DOWNLOAD)
+ add_subdirectory(Download)
+endif()
+
if(ENABLE_UI)
if(ENABLE_MOTIF)
add_subdirectory(libMvMotif)
diff --git a/src/Desktop/EditTransaction.cc b/src/Desktop/EditTransaction.cc
index 5710b0a..b119d55 100644
--- a/src/Desktop/EditTransaction.cc
+++ b/src/Desktop/EditTransaction.cc
@@ -82,7 +82,8 @@ void EditTransaction::callback(MvRequest& r)
const char* name = def("_NAME");
if(name)
{
- if(const char* mode = def("_DEFAULT"))
+ const char* mode = def("_DEFAULT");
+ if(mode)
{
const IconClass& kind=IconClass::find(def.getVerb());
current_=kind.defaultObject();
diff --git a/src/Desktop/FolderInfo.cc b/src/Desktop/FolderInfo.cc
index 0e98d66..98d0ffe 100644
--- a/src/Desktop/FolderInfo.cc
+++ b/src/Desktop/FolderInfo.cc
@@ -183,7 +183,6 @@ bool FolderInfo::read(const Path& folderPath,std::map<std::string,std::string>&
Tokenizer parse(",");
vector<string> n;
- int cnt=0;
std::size_t pos;
while(getline(in,line))
diff --git a/src/Desktop/MvQColourLine.cc b/src/Desktop/MvQColourLine.cc
index 47c2233..f5a2654 100644
--- a/src/Desktop/MvQColourLine.cc
+++ b/src/Desktop/MvQColourLine.cc
@@ -228,9 +228,7 @@ void MvQColourLine::slotHelperEdited(const vector<string>& values)
return;
}
}
-
- int currentPrev=colCb_->currentIndex();
-
+
QString name=QString::fromStdString(values[0]);
//This sets the current index as well
setCustomColour(MvQPalette::magics(values[0]),name,name,true);
diff --git a/src/Desktop/MvQDetailedFolderView.cc b/src/Desktop/MvQDetailedFolderView.cc
index bbbbd17..7f3cc3c 100644
--- a/src/Desktop/MvQDetailedFolderView.cc
+++ b/src/Desktop/MvQDetailedFolderView.cc
@@ -566,10 +566,7 @@ void MvQDetailedFolderView::dropEvent(QDropEvent *event)
event->ignore();
return;
}
-
- QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
- QPoint pos=event->pos()+scrollOffset;
-
+
//--------------------------------------
// Drag and drop from another folder
//--------------------------------------
diff --git a/src/Desktop/MvQFolderItemProperty.cc b/src/Desktop/MvQFolderItemProperty.cc
index 9a4f16a..b2e3a83 100644
--- a/src/Desktop/MvQFolderItemProperty.cc
+++ b/src/Desktop/MvQFolderItemProperty.cc
@@ -196,8 +196,7 @@ QRect MvQClassicIconItemProperty::iconRect(QString name)
QRect MvQClassicIconItemProperty::textRect(QString name)
-{
- QSize s=size(name);
+{
return QRect(paddingX_,
paddingY_+iconSize_+textOffset_,
textWidth(name),
@@ -295,7 +294,6 @@ QPoint MvQSimpleIconItemProperty::position(QString, QPoint refPos)
QPoint MvQSimpleIconItemProperty::positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)
{
//hotSpotAtPos is the relative position inside the icon pixmap
- QSize s=size(name);
QPoint d(iconSize_*hotSpotAtPos.x(),iconSize_*hotSpotAtPos.y());
return QPoint(pos.x()-d.x()-paddingX_,pos.y()-d.y()-paddingY_);
}
@@ -326,9 +324,8 @@ QPoint MvQSimpleIconItemProperty::adjsutReferencePosition(QString /*name*/,QStri
return QPoint();
}
-QRect MvQSimpleIconItemProperty::iconRect(QString name)
+QRect MvQSimpleIconItemProperty::iconRect(QString /*name*/)
{
- QSize s=size(name);
return QRect(paddingX_,
paddingY_,
iconSize_,
diff --git a/src/Desktop/MvQFolderItemProperty.h b/src/Desktop/MvQFolderItemProperty.h
index f76a78b..8e6602c 100644
--- a/src/Desktop/MvQFolderItemProperty.h
+++ b/src/Desktop/MvQFolderItemProperty.h
@@ -22,7 +22,8 @@ class MvQAbstractIconItemProperty
{
public:
MvQAbstractIconItemProperty();
-
+ virtual ~MvQAbstractIconItemProperty() {}
+
int iconSize() const {return iconSize_;}
QFont font() const {return font_;}
float scaling() const {return scaling_;}
@@ -160,4 +161,4 @@ protected:
};
-#endif
\ No newline at end of file
+#endif
diff --git a/src/Desktop/MvQFolderViewBase.cc b/src/Desktop/MvQFolderViewBase.cc
index e1b3fd3..ba56269 100644
--- a/src/Desktop/MvQFolderViewBase.cc
+++ b/src/Desktop/MvQFolderViewBase.cc
@@ -635,9 +635,6 @@ MvQIconMimeData *MvQFolderViewBase::buildClipboardData(IconObject *dragObj,QList
//Pixmap rect of the drag object
QRect rect=pixmapRect(dragObj);
- //Find bounding box for selected pixmap rects
- QRect bbox=pixmapRect(objLst);
-
for(int i=0; i < objLst.count(); i++)
{
QRect vr=pixmapRect(objLst[i]);
diff --git a/src/Desktop/MvQIconFolderView.cc b/src/Desktop/MvQIconFolderView.cc
index 1ab7c0a..d83a148 100644
--- a/src/Desktop/MvQIconFolderView.cc
+++ b/src/Desktop/MvQIconFolderView.cc
@@ -1727,8 +1727,7 @@ QGraphicsItem *MvQIconFolderView::findByKey(int key)
if(sLst.size()>0) current=sLst.at(0);
QRectF rect=current->boundingRect();
- rect.moveTo(current->pos());
- QRectF initialRect = rect;
+ rect.moveTo(current->pos());
QSizeF contents = sceneRect().size();
QList<QGraphicsItem*> intersectVector;
@@ -1917,4 +1916,4 @@ void MvQIconFolderView::showIcon(const QModelIndex& index)
ensureVisible(item);
selectOnlyOneItem(item);
}
-}
\ No newline at end of file
+}
diff --git a/src/Desktop/MvQPageView.cc b/src/Desktop/MvQPageView.cc
index e75df1d..6a72169 100644
--- a/src/Desktop/MvQPageView.cc
+++ b/src/Desktop/MvQPageView.cc
@@ -1496,11 +1496,10 @@ void MvQPageView::pagesResized(QList<MvQPageItem*> pages,QList<QRectF> oriPaperR
{
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("resize");
-
- MvQPageResizeCommand *cmd;
+
for(int i=0; i < pages.count(); i++)
{
- cmd = new MvQPageResizeCommand(this,pages[i],oriPaperRects[i],pages.at(i)->paperRect(),cmdParent);
+ new MvQPageResizeCommand(this,pages[i],oriPaperRects[i],pages.at(i)->paperRect(),cmdParent);
}
undoStack_->push(cmdParent);
@@ -1513,10 +1512,9 @@ void MvQPageView::pagesMoved(QList<MvQPageItem*> pages,const QPointF& delta)
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("move");
- MvQPageMoveCommand *cmd;
foreach(MvQPageItem *item,pages)
{
- cmd = new MvQPageMoveCommand(this,item,delta,cmdParent);
+ new MvQPageMoveCommand(this,item,delta,cmdParent);
}
undoStack_->push(cmdParent);
@@ -1532,10 +1530,9 @@ void MvQPageView::duplicateSelection()
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("duplicate");
- MvQPageAddCommand *cmd;
foreach(MvQPageItem* item,selector_->pages())
{
- cmd = new MvQPageAddCommand(this,item,cmdParent);
+ new MvQPageAddCommand(this,item,cmdParent);
}
undoStack_->push(cmdParent);
@@ -1549,10 +1546,9 @@ void MvQPageView::deleteSelection()
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("delete");
- MvQPageDeleteCommand *cmd;
foreach(MvQPageItem* item,selector_->pages())
{
- cmd = new MvQPageDeleteCommand(this,item,cmdParent);
+ new MvQPageDeleteCommand(this,item,cmdParent);
}
undoStack_->push(cmdParent);
@@ -1575,10 +1571,9 @@ void MvQPageView::splitSelection(int row, int column)
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("split");
- MvQPageSplitCommand *cmd;
foreach(MvQPageItem* item,selector_->pages())
{
- cmd = new MvQPageSplitCommand(this,item,row,column,cmdParent);
+ new MvQPageSplitCommand(this,item,row,column,cmdParent);
}
undoStack_->push(cmdParent);
@@ -1592,7 +1587,6 @@ void MvQPageView::expandSelection()
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("expand");
- MvQPageExpandCommand *cmd;
QRectF selRect=selector_->mapToParent(selector_->boundingRect()).boundingRect();
QRectF expandRect=superPage_->boundingRect();
@@ -1603,7 +1597,7 @@ void MvQPageView::expandSelection()
QRectF r=superPage_->itemToPercentage(item->rectToSelector(expandRect,selRect));
qDebug() << " item" << item->paperRect() << r;
- cmd = new MvQPageExpandCommand(this,item,r,cmdParent);
+ new MvQPageExpandCommand(this,item,r,cmdParent);
}
undoStack_->push(cmdParent);
@@ -1638,13 +1632,12 @@ void MvQPageView::disconnectSelection()
MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
cmdParent->setText("disconnect");
-
- MvQPageDisconnectCommand *cmd;
+
foreach(MvQPageItem* item,selector_->pages())
{
if(item->hasSubPaperRect())
{
- cmd = new MvQPageDisconnectCommand(this,item,cmdParent);
+ new MvQPageDisconnectCommand(this,item,cmdParent);
}
}
diff --git a/src/Desktop/MvQRequestPanelLine.cc b/src/Desktop/MvQRequestPanelLine.cc
index f521d9b..de2e5b9 100644
--- a/src/Desktop/MvQRequestPanelLine.cc
+++ b/src/Desktop/MvQRequestPanelLine.cc
@@ -25,10 +25,10 @@
MvQRequestPanelLine::MvQRequestPanelLine(RequestPanel& owner,const Parameter& param, bool buildLine) :
RequestPanelItem(owner,param),
defaultTb_(0),
- gray_(false),
- helper_(0),
helpTb_(0),
- parentWidget_(owner.parentWidget())
+ gray_(false),
+ helper_(0),
+ parentWidget_(owner.parentWidget())
{
if(!buildLine)
return;
diff --git a/src/Download/CMakeLists.txt b/src/Download/CMakeLists.txt
new file mode 100644
index 0000000..68dc1bb
--- /dev/null
+++ b/src/Download/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+ecbuild_add_executable( TARGET Download
+ SOURCES Download.cc
+ DEFINITIONS ${METVIEW_EXTRA_DEFINITIONS}
+ INCLUDES ${METVIEW_STANDARD_INCLUDES}
+ LIBS ${STANDARD_METVIEW_LIBS}
+ )
+
+
+metview_module_files(ETC_FILES ObjectSpec.Download
+ DownloadDef
+ SVG_FILES DOWNLOAD.svg)
diff --git a/src/Download/DOWNLOAD.svg b/src/Download/DOWNLOAD.svg
new file mode 100644
index 0000000..5b27857
--- /dev/null
+++ b/src/Download/DOWNLOAD.svg
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="DOWNLOAD.svg"
+ style="display:inline"
+ inkscape:export-xdpi="180"
+ inkscape:export-ydpi="180"
+ sodipodi:version="0.32"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/var/tmp/cgi/git/metview/src/Download/DOWNLOAD.png">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient5324">
+ <stop
+ id="stop5326"
+ offset="0"
+ style="stop-color:#2270c7;stop-opacity:1;" />
+ <stop
+ id="stop5328"
+ offset="1"
+ style="stop-color:#bec0f6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5268">
+ <stop
+ style="stop-color:#2270c7;stop-opacity:1;"
+ offset="0"
+ id="stop5270" />
+ <stop
+ style="stop-color:#bec0f6;stop-opacity:1"
+ offset="1"
+ id="stop5272" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5246"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#668000;stop-opacity:1;"
+ offset="0"
+ id="stop5248" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3622-8">
+ <stop
+ style="stop-color:#c6cee3;stop-opacity:1;"
+ offset="0"
+ id="stop3624-3" />
+ <stop
+ style="stop-color:#eaeef9;stop-opacity:0;"
+ offset="1"
+ id="stop3626-2" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4749">
+ <stop
+ id="stop4751"
+ offset="0"
+ style="stop-color:#2c936f;stop-opacity:1;" />
+ <stop
+ id="stop4753"
+ offset="1"
+ style="stop-color:#d0e0d1;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5324"
+ id="linearGradient5274"
+ x1="7.2826061"
+ y1="16.28569"
+ x2="24.329329"
+ y2="16.28569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-31.898305,28.400855)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5324"
+ id="linearGradient5336"
+ x1="5.2868624"
+ y1="48.438992"
+ x2="26.258589"
+ y2="48.438992"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85370838,0,0,0.92184449,2.6249888,4.3150578)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.170032"
+ inkscape:cx="-5.9536924"
+ inkscape:cy="17.54612"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer6"
+ showgrid="true"
+ width="64px"
+ inkscape:snap-grids="true"
+ inkscape:window-width="1620"
+ inkscape:window-height="1096"
+ inkscape:window-x="1968"
+ inkscape:window-y="81"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="frame"
+ style="display:inline"
+ transform="translate(0,-32)" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="item"
+ transform="translate(0,-32)"
+ style="display:inline">
+ <path
+ sodipodi:type="arc"
+ style="fill:none;stroke:#7c9ee2;stroke-width:0.91649183000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
+ id="path5322"
+ sodipodi:cx="18"
+ sodipodi:cy="17"
+ sodipodi:rx="14"
+ sodipodi:ry="14"
+ d="M 32,17 A 14,14 0 1 1 4,17 14,14 0 1 1 32,17 z"
+ transform="matrix(1.0911172,0,0,1.0911172,-3.5808243,29.498293)" />
+ <path
+ style="fill:url(#linearGradient5336);fill-opacity:1;stroke:#0b274c;stroke-width:0.88712257px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 11.782602,38.39669 8.770263,0.02662 -0.275369,13.635127 4.337816,0.06505 -8.494891,7.416375 -8.5551388,-7.286263 4.1570738,-0.130112 z"
+ id="path3028"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/var/tmp/cgi/git/metview/src/Download/DOWNLOAD_64.png"
+ inkscape:export-xdpi="180"
+ inkscape:export-ydpi="180"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="box"
+ style="display:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ id="rect3195"
+ width="31.226377"
+ height="31.261541"
+ x="0.47710654"
+ y="0.4906483"
+ inkscape:export-filename="/var/tmp/cgi/git/metview/src/Download/DOWNLOAD_64.png"
+ inkscape:export-xdpi="180"
+ inkscape:export-ydpi="180" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="text"
+ style="display:inline"
+ transform="translate(0,-32)">
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4691"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none"
+ transform="translate(0,32)"><flowRegion
+ id="flowRegion4693"><rect
+ id="rect4695"
+ width="10.360623"
+ height="14.985902"
+ x="-0.074004449"
+ y="-5.8902793" /></flowRegion><flowPara
+ id="flowPara4697" /></flowRoot> </g>
+</svg>
diff --git a/src/Download/Download.cc b/src/Download/Download.cc
new file mode 100755
index 0000000..b17a721
--- /dev/null
+++ b/src/Download/Download.cc
@@ -0,0 +1,208 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <fstream>
+#include <sstream>
+#include <Metview.h>
+#include <MvScanFileType.h>
+#include <MvNetwork.h>
+#include <MvPath.hpp>
+
+
+class Download : public MvService {
+public:
+ Download(char *name) : MvService(name) {};
+ void serve(MvRequest&,MvRequest&);
+ bool sanitiseUrl(std::string &url);
+};
+
+
+// --------------------------------------------------------
+// filetoString
+// utility function to read a text file into a std::string
+// --------------------------------------------------------
+
+std::string filetoString(std::string filename)
+{
+ // open the file
+ std::ifstream ifStream;
+ ifStream.open(filename.c_str());
+
+ // get the text stream and convert into a string
+ std::stringstream stream;
+ stream << ifStream.rdbuf();
+ string str = stream.str();
+ return str;
+}
+
+
+// --------------------------------------------------------------------
+// replace_all
+// utility function to replace all occurences of a string with another.
+// Code taken from ECMWF's ecFlow.
+// --------------------------------------------------------------------
+
+bool replace_all(std::string& subject, const std::string& search, const std::string& replace)
+{
+ bool replaced = false;
+ size_t pos = 0;
+ while ((pos = subject.find(search, pos)) != std::string::npos)
+ {
+ subject.replace(pos, search.length(), replace);
+ pos += replace.length();
+ replaced = true;
+ }
+ return replaced;
+}
+
+
+// --------------------------------------------------------------------
+// Download::sanitiseUrl
+// Utility function to remove/replace unwanted characters from the URL.
+// Returns true if any strings were replaced.
+// --------------------------------------------------------------------
+
+bool Download::sanitiseUrl(std::string &url)
+{
+ bool replaced = replace_all(url, " ", "%20");
+ return replaced;
+}
+
+
+
+// ------------------------------------
+// Download::serve
+// Main function, performs the download
+// ------------------------------------
+
+void Download::serve(MvRequest& in,MvRequest& out)
+{
+
+ cout << "Entry Download::serve..." << endl;
+ in.print();
+
+
+ // if the URL is not supplied, abort immediately
+ const char *url = in("URL");
+ if (!url)
+ {
+ setError(1, "URL has not been supplied");
+ return;
+ }
+
+
+ // get the target path (optional parameter)
+ string target;
+ string errText;
+ if (!in.getPath("TARGET", target, true, errText))
+ {
+ marslog(LOG_EROR, "%s", errText.c_str());
+ setError(1);
+ return;
+ }
+
+
+ string urlStr(url);
+ bool urlChanged = sanitiseUrl(urlStr);
+
+ if (urlChanged)
+ {
+ cout << "URL sanitised to this:" << endl;
+ cout << urlStr << endl;
+ }
+
+
+ // perform the network transfer
+ string outname(marstmp());
+
+ MvNetwork *net=new MvNetwork();
+ bool ok = net->get(urlStr, outname, "", errText);
+
+ if (!ok)
+ {
+ marslog(LOG_EROR, "Failed to download data: %s", errText.c_str());
+ setError(1);
+ return;
+ }
+
+
+ string h=net->header();
+ long responseCode = net->responseCode();
+ cout << "header " << h << endl;
+ cout << "response code: " << responseCode << endl;
+ char responseCodeString[32];
+ sprintf(responseCodeString, "%ld", responseCode);
+
+
+ // decide whether we got the right thing back or not
+ bool gotData = responseCode/100 == 2; // code is 2xx
+
+ if (!gotData)
+ {
+ if (FileHasValidSize(outname.c_str()))
+ {
+ // in this case, we got an error, but also a file
+ // - ASSUME that this file contains error information,
+ // and therefore print it out
+ std::string logtext = filetoString(outname);
+ cout << "Log text:" << endl;
+ cout << logtext;
+ replace_all(logtext, "\n", " "); // remove newlines for the error reporting
+ string errorMsg = "Error code returned; message from server:";
+ marslog(LOG_EROR, "%s", errorMsg.c_str());
+ marslog(LOG_EROR, "%s", logtext.c_str());
+ setError(1);
+ return;
+ }
+ else
+ {
+ marslog(LOG_EROR, "Got error response code from server: %s", responseCodeString);
+ setError(1);
+ return;
+ }
+ }
+
+
+ // if we got to here, the download seems to have been ok
+ // if the user specified a TARGET, we should copy the file there
+ if (!target.empty())
+ {
+ string copyCommand = "cp " + outname + " \"" + target + "\"";
+ cout << "Copy: " << copyCommand << endl;
+ int ret2 = system(copyCommand.c_str());
+
+ if (ret2 != 0)
+ {
+ marslog(LOG_EROR,"Failed to copy file to TARGET destination. Command was: ");
+ marslog(LOG_EROR," %s", copyCommand.c_str());
+ setError(1, "Failed to copy file to TARGET location.");
+ return;
+ }
+ }
+
+
+ // Create output request
+ string iconType = ScanFileType(outname.c_str()); // dynamically find the type
+ out.setVerb(iconType.c_str());
+ out("PATH") = outname.c_str();
+ out("_RESPONSE_CODE") = responseCodeString;
+
+ out.print();
+
+ return;
+}
+
+
+int main(int argc,char **argv)
+{
+ MvApplication theApp(argc,argv);
+ Download data("DOWNLOAD");
+
+ theApp.run();
+}
diff --git a/src/Download/DownloadDef b/src/Download/DownloadDef
new file mode 100644
index 0000000..dd68f82
--- /dev/null
+++ b/src/Download/DownloadDef
@@ -0,0 +1,12 @@
+DOWNLOAD; Metview; Specific Application
+{
+ URL [interface = scrolled_text]
+ {
+ @
+ } = ''
+
+ TARGET
+ {
+ @
+ } = ''
+}
diff --git a/src/Download/ObjectSpec.Download b/src/Download/ObjectSpec.Download
new file mode 100644
index 0000000..cb8b992
--- /dev/null
+++ b/src/Download/ObjectSpec.Download
@@ -0,0 +1,29 @@
+################################################################################
+#
+# ObjectSpec.Download
+#
+
+object,
+ class = DOWNLOAD,
+ icon_box = Data Access,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR/share/metview/etc/DownloadDef',
+ #rules_file = '$METVIEW_DIR/share/metview/etc/DownloadRules',
+ default_name = Download,
+ help_page = Download,
+ type = Data,
+ expand = 0,
+ macro = download,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR/share/metview/icons/DOWNLOAD.icon'
+
+state,
+ class = DOWNLOAD,
+ output_class= GRIB/BUFR/GEOPOINTS/NETCDF/TABLE,
+ service = Download
+
+service,
+ cmd = '$METVIEW_CMD $METVIEW_BIN/Download',
+ name = Download,
+ fullname = Download
+
diff --git a/src/Hovmoeller/HovToolkit.cc b/src/Hovmoeller/HovToolkit.cc
index c99ae34..42314f0 100644
--- a/src/Hovmoeller/HovToolkit.cc
+++ b/src/Hovmoeller/HovToolkit.cc
@@ -394,7 +394,7 @@ bool HovToolkit::CreateParamInfo(MvRequest& data)
// iter.sort("DATE");
iter.sort("EXPVER");
iter.sort("PARAM");
- while( field = iter() )
+ while( (field = iter()) )
{
// MvFieldExpander x(field);
MvRequest rq=field.getRequest();
@@ -596,7 +596,7 @@ bool HovToolkit::GenerateData(MvRequest& data)
string lastKey = "FIRSTFIELD";
MvField field, lastField;
ParamIterator paramIter;
- while( field = iter() )
+ while( (field = iter()) )
{
currentGenerated++;
diff --git a/src/Macro/grib.cc b/src/Macro/grib.cc
index 4ade188..5b00308 100644
--- a/src/Macro/grib.cc
+++ b/src/Macro/grib.cc
@@ -39,6 +39,13 @@ enum eGridLatLonsType
GLL_LONS
};
+// used in function GribDateFunction
+enum eGribDateType
+{
+ GDT_BASE = 0,
+ GDT_VALID
+};
+
double CovarFunc( field*, field*, const MvGeoBox& );
@@ -2161,6 +2168,44 @@ Value SetGridValsFunction::Execute(int /*arity*/,Value *arg)
}
+//=============================================================================
+
+class GribDateFunction : public Function {
+ eGribDateType type;
+public:
+ GribDateFunction(const char *n, eGribDateType t) : Function(n,1,tgrib), type(t)
+ {info = "Returns a single or list of base/valid dates for the given fieldset.";}
+ virtual Value Execute(int arity,Value *arg);
+};
+
+
+Value GribDateFunction::Execute(int, Value *arg)
+{
+ fieldset *fs;
+ arg[0].GetValue(fs); // get the fieldset variable
+
+ CList *l = new CList(fs->count); // initialise the resulting list
+
+ for(int i = 0; i < fs->count; i++)
+ {
+ field *h = GetIndexedFieldWithAtLeastPackedMem(fs,i);
+ MvField *mvfield = new MvField(h);
+ double baseDate = mvfield->yyyymmddFoh();
+ double dateAsNumber = baseDate;
+ if (type == GDT_VALID) // valid_date requested? then add the step
+ dateAsNumber += mvfield->stepFoh();
+
+ Date d(dateAsNumber);
+ (*l)[i] = d;
+ }
+
+
+ // if only one field, then just return a single date, otherwise return the list
+ if (l->Count() > 1)
+ return Value(l);
+ else
+ return Value((*l)[0]);
+}
//=============================================================================
@@ -5785,10 +5830,15 @@ static void install(Context *c)
c->AddFunction(new GridLatLonsFunction("longitudes", GLL_LONS, false)); // new version
c->AddFunction(new GridLatLonsFunction("gridlons", GLL_LONS, true, "longitudes")); // deprecated version
-
c->AddFunction(new SetGridValsFunction("set_values", false)); // new version
c->AddFunction(new SetGridValsFunction("set_gridvals", true, "set_values")); // deprecated version
+
+ c->AddFunction(new GribDateFunction("base_date", GDT_BASE));
+ c->AddFunction(new GribDateFunction("valid_date", GDT_VALID));
+
+
+
#if 0
c->AddFunction(new SpectrumFunction("spectrum"));
#endif
@@ -5819,7 +5869,7 @@ static void install(Context *c)
c->AddFunction(new GribHeaderFunctionW("grib_set_string", GRIB_STRING));
c->AddFunction(new GribHeaderFunctionWGeneric("grib_set"));
- c->AddFunction(new FillMVEWFunction("fill_missing_values_ew"));
+ c->AddFunction(new FillMVEWFunction("fill_missing_values_ew"));
}
static Linkage linkage(install);
diff --git a/src/Macro/include/macro.h b/src/Macro/include/macro.h
index d33a936..4688b8f 100644
--- a/src/Macro/include/macro.h
+++ b/src/Macro/include/macro.h
@@ -17,8 +17,6 @@
#include "value.h"
#include "node.h"
-static const char* M_UPLOT = "uPlotManager";
-
class Context;
class CObject;
diff --git a/src/Macro/mlist.cc b/src/Macro/mlist.cc
index e178934..e458c52 100644
--- a/src/Macro/mlist.cc
+++ b/src/Macro/mlist.cc
@@ -363,7 +363,7 @@ Value ListFindFunction::Execute(int arity,Value *arg)
{
CList *outlist = new CList(results.size());
- for(int i=0; i < results.size(); i++)
+ for(unsigned int i=0; i < results.size(); i++)
{
(*outlist)[i] = results[i];
}
diff --git a/src/Macro/request.cc b/src/Macro/request.cc
index 34529ba..da31e34 100644
--- a/src/Macro/request.cc
+++ b/src/Macro/request.cc
@@ -22,6 +22,9 @@ static Cache LangCache;
static Cache TestCache;
static Cache ObjsCache;
+static const char* M_UPLOT = "uPlotManager";
+
+
static const char *find_service(const char *verb,const char *mode)
{
char *state = strcache("state");
diff --git a/src/Macro/value.cc b/src/Macro/value.cc
index f81fc65..c719ffe 100644
--- a/src/Macro/value.cc
+++ b/src/Macro/value.cc
@@ -525,7 +525,7 @@ Value::~Value()
const char *Value::TypeName(vtype t)
{
- for(int i = 0;i<NUMBER(types);i++)
+ for(unsigned int i = 0;i<NUMBER(types);i++)
if(types[i].t == t)
return types[i].n;
return "unknown";
@@ -534,7 +534,7 @@ const char *Value::TypeName(vtype t)
vtype Value::NameType(const char *n)
{
if(n == 0) return tany;
- for(int i = 0;i<NUMBER(types);i++)
+ for(unsigned int i = 0;i<NUMBER(types);i++)
if(strcmp(types[i].n,n) == 0)
return types[i].t;
return tnone;
diff --git a/src/MacroEditor/FindTextDialog.cc b/src/MacroEditor/FindTextDialog.cc
index ee3af33..3d50e28 100644
--- a/src/MacroEditor/FindTextDialog.cc
+++ b/src/MacroEditor/FindTextDialog.cc
@@ -140,6 +140,15 @@ void FindTextDialog::onReplaceAllButtonClicked()
emit replaceAll(findComboBox->currentText(), replaceComboBox->currentText(), findFlags());
}
+// ---------------------------------------------------------------------------
+// FindTextDialog::onSelectionChanged
+// triggered when the selection in the main editor is changed
+// ---------------------------------------------------------------------------
+
+void FindTextDialog::onSelectionChanged(bool isSelection)
+{
+ replaceButton->setEnabled(isSelection); // only enable this button if there is a selection
+}
// ---------------------------------------------------------------------------
diff --git a/src/MacroEditor/FindTextDialog.h b/src/MacroEditor/FindTextDialog.h
index 26d787e..676565e 100644
--- a/src/MacroEditor/FindTextDialog.h
+++ b/src/MacroEditor/FindTextDialog.h
@@ -44,6 +44,7 @@ public slots:
void onReplaceButtonClicked();
void onReplaceSelectedButtonClicked();
void onReplaceAllButtonClicked();
+ void onSelectionChanged(bool);
private:
diff --git a/src/MacroEditor/FindTextDialog.ui b/src/MacroEditor/FindTextDialog.ui
index 776d04d..3c4e0cc 100644
--- a/src/MacroEditor/FindTextDialog.ui
+++ b/src/MacroEditor/FindTextDialog.ui
@@ -140,7 +140,7 @@
<item>
<widget class="QPushButton" name="replaceButton">
<property name="text">
- <string>&Replace Next</string>
+ <string>&Replace Selection</string>
</property>
</widget>
</item>
diff --git a/src/MacroEditor/MacroEdit.cc b/src/MacroEditor/MacroEdit.cc
index e05966e..d1189e8 100644
--- a/src/MacroEditor/MacroEdit.cc
+++ b/src/MacroEditor/MacroEdit.cc
@@ -1028,6 +1028,10 @@ void MacroEdit::showFindDialog(bool showReplaceOptions)
this, SLOT(replaceStringInFile(const QString &,const QString &,QTextDocument::FindFlags)));
connect(findDialog_, SIGNAL(rejected()), this, SLOT(findClosed()));
+
+ connect(textEditor, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
+
+ connect(this, SIGNAL(selectionChanged(bool)), findDialog_, SLOT(onSelectionChanged(bool)));
}
@@ -1171,7 +1175,15 @@ void MacroEdit::findString(const QString &s,QTextDocument::FindFlags flags, bool
void MacroEdit::replaceString(const QString &s,const QString &r,QTextDocument::FindFlags flags)
{
- findString(s, flags, true, r);
+ // perform the 'replace'
+ textEditor->insertPlainText (r);
+
+ // highlight the replaced text - the current text cursor will be
+ // at the end of the replaced text, so we move it back to the start
+ // (anchored so that the text is selected)
+ QTextCursor cursor = textEditor->textCursor(); // get the document's cursor
+ cursor.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, r.length());
+ textEditor->setTextCursor(cursor); // send the cursor back to the document
}
@@ -1584,6 +1596,23 @@ void MacroEdit::onRunOptionsChanged (MacroRunOptions options)
+// ---------------------------------------------------------------------------
+// MacroEdit::onSelectionChanged
+// triggered when the user changes the text selection
+// ---------------------------------------------------------------------------
+
+void MacroEdit::onSelectionChanged()
+{
+ // if the find/replace dialogue is open, it needs to know about the change
+
+ if (findDialog_)
+ {
+ bool isSelection = textEditor->textCursor().hasSelection();
+ emit selectionChanged(isSelection);
+ }
+}
+
+
// ---------------------------------------------------------------------------
// MacroEdit::onReadOnlyStatusChanged
diff --git a/src/MacroEditor/MacroEdit.h b/src/MacroEditor/MacroEdit.h
index cd2b8cd..ae400b5 100644
--- a/src/MacroEditor/MacroEdit.h
+++ b/src/MacroEditor/MacroEdit.h
@@ -242,6 +242,7 @@ public slots:
void gotoLine();
void gotoLine(int line);
void onIndentLines();
+ void onSelectionChanged();
void onCommentLines();
void tabsDialog();
void runDialog();
@@ -286,6 +287,10 @@ public slots:
void setAutoInsertLicenceOn() {setAutoInsertLicence(true);};
void setAutoInsertLicenceOff() {setAutoInsertLicence(false);};
+signals:
+ void selectionChanged(bool);
+
+
private:
void setupEditor();
bool AskToSave();
diff --git a/src/MvApp/geo_to_grib.cc b/src/MvApp/geo_to_grib.cc
index 84ededa..7f68440 100644
--- a/src/MvApp/geo_to_grib.cc
+++ b/src/MvApp/geo_to_grib.cc
@@ -29,6 +29,9 @@ const int cLatBandCount = (int)( 180.0 / cLatBandSize ) + 1;
const int G2G_RECIPROCAL = 0;
const int G2G_EXPONENTIAL_MEAN = 1;
const int G2G_EXPONENTIAL_SUM = 2;
+const int G2G_NEAREST_MEAN = 3;
+const int G2G_NEAREST_SUM = 4;
+const int G2G_NEAREST_COUNT = 5;
double makeDateNumber( long date, long time );
@@ -65,6 +68,9 @@ public:
bool estimate();
bool estimateToUserGrid();
bool estimateToTemplateGrid();
+ bool estimateNearestToTemplateGrid();
+ void setupUserMatrix(bool zero);
+ bool convertUserToTemplateGrid();
double value(float lat, float lon);
void sortPoints();
string &errorMessage() {return errorMessage_;};
@@ -170,8 +176,14 @@ ToMatrix::ToMatrix(MvRequest& def)
Weight_ = G2G_RECIPROCAL;
else if ( st == "EXPONENTIAL_MEAN" )
Weight_ = G2G_EXPONENTIAL_MEAN;
- else
+ else if ( st == "EXPONENTIAL_SUM" )
Weight_ = G2G_EXPONENTIAL_SUM;
+ else if ( st == "NEAREST_GRIDPOINT_MEAN" )
+ Weight_ = G2G_NEAREST_MEAN;
+ else if ( st == "NEAREST_GRIDPOINT_SUM" )
+ Weight_ = G2G_NEAREST_SUM;
+ else
+ Weight_ = G2G_NEAREST_COUNT;
MvRequest data;
@@ -294,17 +306,30 @@ void ToMatrix::sortPoints()
bool ToMatrix::estimate()
{
- if (gribDefMode == User)
- return estimateToUserGrid();
+ if (Weight_ == G2G_NEAREST_MEAN || Weight_ == G2G_NEAREST_SUM || Weight_ == G2G_NEAREST_COUNT)
+ {
+ // if User, convert to Template, because we need that on order to use these modes
+
+ if (gribDefMode == User)
+ if (!convertUserToTemplateGrid())
+ return false;
+
+ return estimateNearestToTemplateGrid();
+ }
else
- return estimateToTemplateGrid();
+ {
+ if (gribDefMode == User)
+ return estimateToUserGrid();
+ else
+ return estimateToTemplateGrid();
+ }
}
+
+
//_____________________________________________________________________
-bool ToMatrix::estimateToUserGrid()
+void ToMatrix::setupUserMatrix(bool zero)
{
- int i, j;
- float lat,lon;
double epsilon=0.001;
double oriEast=East;
@@ -340,6 +365,19 @@ bool ToMatrix::estimateToUserGrid()
#endif
Matrix = new double[NbLon*NbLat];
+
+ if (zero)
+ memset(Matrix, 0, NbLon*NbLat*sizeof(double)); // set all values to zero
+}
+
+//_____________________________________________________________________
+
+bool ToMatrix::estimateToUserGrid()
+{
+ int i, j;
+ float lat,lon;
+
+ setupUserMatrix(false);
lat = North;
for (j = 0; j < NbLat; j++)
@@ -392,6 +430,106 @@ bool ToMatrix::estimateToTemplateGrid()
return true;
}
+
+//_____________________________________________________________________
+
+bool ToMatrix::estimateNearestToTemplateGrid()
+{
+ unsigned int *numClosest;
+ templateField->setShape(expand_mem);
+ MvGridBase *grid = templateField->mvGrid(); // be careful with this pointer because MvField is in charge!
+
+ if (!grid->hasLocationInfo()) //-- check that it is ok
+ {
+ errorMessage_ = "Template GRIB field grid locations cannot be read by Metview.";
+ return false;
+ }
+
+ numValsInTemplateGrib = templateField->countValues();
+
+
+ Matrix = new double[numValsInTemplateGrib]; // create the matrix to hold the result
+ memset(Matrix, 0, numValsInTemplateGrib*sizeof(double)); // set all values to zero
+
+
+ if (Weight_ == G2G_NEAREST_MEAN)
+ {
+ // create matrix (zeroed) to store how many gpts are assinged to each grid point
+ numClosest = new unsigned int[numValsInTemplateGrib];
+ memset(numClosest, 0, numValsInTemplateGrib*sizeof(unsigned int));
+ }
+
+
+ // for each geopoint, find the nearest gridpoint and add the geopoint's value to that gridpoint
+ long ngeo = GPoints.count();
+ for (long i = 0; i < ngeo; i++)
+ {
+ MvGeoP1 gp = GPoints[i];
+ MvGridPoint gridpt = grid->nearestGridpoint(gp.lat_y(), gp.lon_x());
+ if (Weight_ == G2G_NEAREST_COUNT)
+ Matrix[gridpt.index_]++; // G2G_NEAREST_COUNT
+ else
+ Matrix[gridpt.index_] += gp.value(); // G2G_NEAREST_MEAN or G2G_NEAREST_SUM
+
+
+ if (Weight_ == G2G_NEAREST_MEAN)
+ numClosest[gridpt.index_]++;
+ }
+
+
+ // mean? then divide by the number of points
+ if (Weight_ == G2G_NEAREST_MEAN)
+ {
+ for (long j=0; j<numValsInTemplateGrib; j++)
+ if (numClosest[j] != 0)
+ Matrix[j] /= numClosest[j];
+
+ delete[] numClosest;
+ }
+
+
+ return true;
+}
+
+//_____________________________________________________________________
+
+bool ToMatrix::convertUserToTemplateGrid()
+{
+ // the user has supplied grid parameters, but we want to convert this into
+ // an actual GRIB file so that we can use it as a template
+
+ setupUserMatrix(true);
+
+ string llmatrixpath;
+ if (save(llmatrixpath))
+ {
+ marslog( LOG_INFO, "geo_to_grib: can not write matrix into file %s", llmatrixpath.c_str());
+ return false;
+ }
+
+ string tmpGribFile = marstmp();
+
+ if( LLMatrixToGRIB( llmatrixpath.c_str(), tmpGribFile.c_str() ) )
+ {
+ marslog( LOG_INFO, "geo_to_grib: conversion from geo/LLMatrix to GRIB failed");
+ return false;
+ }
+
+ unlink(llmatrixpath.c_str()); // remove the temporary LLMATRIX file
+
+
+
+
+ MvFieldSet fieldset(tmpGribFile.c_str()) ; // load it up
+ templateField = new MvField(fieldset[0].libmars_field());
+
+ gribDefMode = Grib;
+
+ return true;
+}
+
+
+
//_____________________________________________________________________
int ToMatrix::save(string &path) // returns path to caller
@@ -490,7 +628,7 @@ void GeoToGRIB::serve( MvRequest& in, MvRequest& out )
if( LLMatrixToGRIB( path.c_str(), tmpGribFile.c_str() ) )
{
- setError( 1, "geo_to_grib: convertion from geo/LLMatrix to GRIB failed" );
+ setError( 1, "geo_to_grib: conversion from geo/LLMatrix to GRIB failed" );
return;
}
diff --git a/src/ObsFilter/BufrPicker.cc b/src/ObsFilter/BufrPicker.cc
index d7a3507..7b83b45 100644
--- a/src/ObsFilter/BufrPicker.cc
+++ b/src/ObsFilter/BufrPicker.cc
@@ -414,7 +414,7 @@ BufrPicker::serve( MvRequest& in, MvRequest& out )
counter_ = 0; //-- m a i n l o o p
try
{
- while( myObs = (*iter_)( obsOrMsg_ ) )
+ while( (myObs = (*iter_)(obsOrMsg_) ) )
{
pickValue( myObs );
}
diff --git a/src/ObsFilter/ObsFilter.cc b/src/ObsFilter/ObsFilter.cc
index c208d12..28f3d5d 100644
--- a/src/ObsFilter/ObsFilter.cc
+++ b/src/ObsFilter/ObsFilter.cc
@@ -744,7 +744,7 @@ ObsFilter :: serve( MvRequest& in, MvRequest& out )
_counter = 0; //-- m a i n l o o p
try
{
- while( obs_ = (*_iter)( _obsOrMsg ) )
+ while( (obs_ = (*_iter)(_obsOrMsg) ) )
{
add();
}
diff --git a/src/OgcClient/MvQOgcParam.h b/src/OgcClient/MvQOgcParam.h
index 9fca707..d9750d2 100644
--- a/src/OgcClient/MvQOgcParam.h
+++ b/src/OgcClient/MvQOgcParam.h
@@ -30,6 +30,8 @@ public:
MvQOgcName(QString requestName, QString displayName) :
requestName_(requestName), displayName_(displayName) {};
+ virtual ~MvQOgcName() {}
+
QString requestName() {return requestName_;}
void setRequestName(QString s) {requestName_=s;}
diff --git a/src/OgcClient/MvQOgcRequest.h b/src/OgcClient/MvQOgcRequest.h
index 01c4011..6671a52 100644
--- a/src/OgcClient/MvQOgcRequest.h
+++ b/src/OgcClient/MvQOgcRequest.h
@@ -18,6 +18,8 @@ class MvQOgcRequest
{
public:
MvQOgcRequest() {};
+ virtual ~MvQOgcRequest() {}
+
const QString& request() const {return request_;}
void setRequest(QString);
virtual QString item(QString) const;
diff --git a/src/OgcClient/MvQWmsClient.cc b/src/OgcClient/MvQWmsClient.cc
index bab814f..130b02a 100644
--- a/src/OgcClient/MvQWmsClient.cc
+++ b/src/OgcClient/MvQWmsClient.cc
@@ -1545,7 +1545,11 @@ void MvQWmsUiClient::slotReplyPreview(QNetworkReply* reply)
void MvQWmsUiClient::slotReplyLegend(QNetworkReply* reply)
{
- QNetworkRequest r=reply->request();
+ Q_ASSERT(reply == legendReply_);
+
+ qDebug() << "MvQWmsUiClient::slotReplyLegend -->";
+
+ QNetworkRequest r=reply->request();
QUrl url=r.url();
//qDebug() << url.toString();
@@ -1702,7 +1706,9 @@ bool MvQWmsUiClient::legendDownloadActive()
void MvQWmsUiClient::slotAbortDownloadProcess()
{
- if(getCapReply_ && getCapReply_->isRunning())
+ qDebug() << "MvQWmsUiClient::slotAbortDownloadProcess -->";
+
+ if(getCapReply_ && getCapReply_->isRunning())
{
LogItem *log=new LogItem;
LogHandler::instance()->add(log);
diff --git a/src/Percentile/Percentile.cc b/src/Percentile/Percentile.cc
index 478ef86..557625d 100644
--- a/src/Percentile/Percentile.cc
+++ b/src/Percentile/Percentile.cc
@@ -137,7 +137,7 @@ bool Percentile::ComputePercentile(MvRequest& out)
bool first = true;
vfield.reserve(nfsin);
vfieldExp.reserve(nfsin);
- while( field = iter() )
+ while( (field = iter()) )
{
vfield.push_back(field);
MvFieldExpander* vex = new MvFieldExpander(field);
diff --git a/src/Scm/ObjectSpec.Scm b/src/Scm/ObjectSpec.Scm
index 9d9ca6b..d856e23 100644
--- a/src/Scm/ObjectSpec.Scm
+++ b/src/Scm/ObjectSpec.Scm
@@ -29,7 +29,8 @@ object,
type = File,
default_name = 'Scm Output Data',
pixmap = '$METVIEW_DIR_SHARE/icons/SCM_OUTPUT_DATA.icon',
- editor_type = QtScmDataEditor
+ default_method = Examine,
+ editor_type = NoEditor
diff --git a/src/Stations/stat.fmt b/src/Stations/stat.fmt
index df3eaeb..2fe6bba 100644
--- a/src/Stations/stat.fmt
+++ b/src/Stations/stat.fmt
@@ -629,6 +629,7 @@
02746 5981 2292 28 11 0 ---- HANKO TULLINIEMI
02747 6038 2210 6 4 0 ---- TURKU RAJAKARI
02748 6217 2786 83 87 0 ---- JOROINEN VARKAUS AIRPORT
+02749 6631 2940 0 298 0 ---- KUUSAMO OULANKA
02750 5984 2325 0 3 0 ---- HANKO TVARMINNE
02751 6163 2138 5 3 0 ---- PORI TAHKOLUOTO HARBOUR
02752 6220 2117 22 0 0 ---- KRISTIINANKAUPUNKI LIGHTHOUSE
@@ -802,6 +803,7 @@
02991 6020 2563 27 20 0 ---- PORVOO EMASALO
02992 6028 2644 4 5 0 ---- LOVIISA ORRENGRUND
02993 6030 1913 15 3 0 ---- HAMMARLAND MARKET
+02994 6030 2555 0 2 0 ---- PORVOO KILPILAHTI
02996 6040 2195 7 5 0 ---- RYMATTYLA RAULA
02997 6009 1993 0 3 0 ---- MARIEHAMN WEST HARBOUR
02998 6020 2496 25 24 0 ---- HELSINKI KUMPULA
@@ -997,6 +999,7 @@
03837 5040 -348 0 8 0 ---- BRIXHAM
03839 5074 -341 0 31 0 ---- EXETER AIRPORT
03840 5086 -324 252 256 0 PPPP DUNKESWELL AERODROME
+03844 5074 -340 27 31 0 ---- EXETER AIRPORT NO. 2
03853 5101 -264 20 23 0 ---- YEOVILTON
03857 5052 -246 52 52 0 ---- ISLE OF PORTLAND
03862 5078 -184 10 12 0 ---- HURN
@@ -1290,6 +1293,7 @@
06210 5217 443 1 0 0 ---- VALKENBURG AWS
06211 5382 295 34 46 0 ---- J6-A
06212 5292 415 41 51 0 ---- HOORN-A
+06214 5404 604 37 42 0 ---- BUITENGAATS/BG-OHVS2
06215 5214 444 0 -1 0 ---- VOORSCHOTEN AWS
06225 5246 455 0 4 0 ---- IJMUIDEN WP
06229 5300 472 0 1 0 ---- TEXELHORS WP
@@ -1398,7 +1402,7 @@
06610 4681 694 490 490 0 T-T- PAYERNE
06611 4689 701 0 435 0 ---- AVENCHES
06612 4708 679 1018 1018 2 ---- LA CHAUX-DE-FONDS
-06613 4660 766 0 753 0 ---- FRUTIGEN
+06613 4660 766 0 756 0 ---- FRUTIGEN
06614 4612 702 0 990 0 ---- LES MARECOTTES
06616 4742 694 598 596 0 ---- FAHY
06617 4698 661 1050 1050 2 ---- LA BREVINE
@@ -1449,8 +1453,9 @@
06662 4708 864 0 790 0 ---- SATTEL-AEGERI
06663 4663 919 0 1242 0 ---- VALS
06664 4743 852 444 444 0 ---- ZUERICH / AFFOLTERN
+06665 4718 886 0 468 0 ---- LACHEN/GALGENEN
06666 4760 819 342 341 0 ---- LEIBSTADT
-06668 4667 859 0 1099 0 ---- GOESCHENEN
+06668 4669 860 952 950 2 ---- GOESCHENEN
06669 4748 840 846 845 2 ---- LAEGERN
06670 4748 853 427 426 0 ---- ZUERICH / KLOTEN
06671 4767 898 399 398 0 ---- STECKBORN
@@ -1540,6 +1545,7 @@
06771 4584 893 352 353 0 ---- STABIO
06774 4646 967 0 1856 0 ---- BIVIO
06775 4600 891 0 279 0 ---- LUGANO-AGNO
+06776 4684 978 0 2840 0 ---- WEISSFLUHGIPFEL
06777 4593 902 1601 1600 2 ---- MONTE GENEROSO
06778 4665 1027 1969 1968 2 ---- BUFFALORA
06779 4643 976 1804 1804 2 ---- SEGL-MARIA
@@ -1548,7 +1554,7 @@
06782 4671 885 1198 1197 2 ---- DISENTIS / SEDRUN
06783 4646 918 1640 1639 2 ---- S. BERNARDINO
06784 4681 984 1595 1594 2 ---- DAVOS
-06785 4678 967 1846 1840 2 ---- AROSA
+06785 4679 968 1878 1878 2 ---- AROSA
06786 4687 952 558 556 0 ---- CHUR
06787 4661 943 989 987 0 ---- ANDEER
06788 4635 963 1089 1089 2 ---- VICOSOPRANO
@@ -1570,7 +1576,7 @@
06805 4708 830 0 426 0 ---- EMMEN
06806 4698 839 0 442 0 ---- BUOCHS
06807 4740 863 0 435 0 ---- DUEBENDORF
-06808 4617 888 0 196 0 ---- MAGADINO
+06808 4617 888 0 198 0 ---- MAGADINO
06809 4630 899 0 259 0 ---- LODRINO
06810 4708 907 0 447 0 ---- MOLLIS
06842 4751 926 0 506 0 TPTP SITTERDORF
@@ -1579,7 +1585,7 @@
06845 4743 788 0 611 0 TPTP RUENENBERG MIL
06846 4672 951 0 2323 0 ---- SCALOTTAS
06847 4679 803 0 2280 0 ---- BRIENZER ROTHORN
-06848 4695 960 0 1120 0 ---- VALZEINA
+06848 4697 950 0 1490 0 ---- PFAEFERS
06849 4723 949 0 436 0 TPTP SALEZ
06850 4729 889 0 1115 0 ---- BACHTEL
06851 4724 877 0 496 0 ---- HOMBRECHTIKON
@@ -1602,7 +1608,7 @@
06990 4713 952 458 457 0 ---- VADUZ
07002 5073 160 68 73 0 ---- BOULOGNE
07003 5051 162 20 6 0 ---- LE TOUQUET
-07005 5014 183 74 67 0 ---- ABBEVILLE
+07005 5014 183 72 67 0 ---- ABBEVILLE
07010 5106 234 16 11 0 ---- DUNKERQUE
07015 5057 310 47 48 0 ---- LILLE-LESQUIN
07017 5022 315 77 78 0 ---- CAMBRAI-EPINOY
@@ -1633,16 +1639,16 @@
07103 4804 -473 81 67 0 ---- POINTE DU RAZ
07107 4868 -433 18 9 0 ---- BRIGNOGAN
07108 4846 -443 0 96 0 ---- PLABENNEC-RADAR
-07109 4828 -444 83 51 0 ---- LANVEOC
+07109 4828 -444 83 87 0 ---- LANVEOC
07110 4844 -441 95 99 0 T-T- BREST-GUIPAVAS
07112 4862 88 0 245 0 ---- LA FERTE VIDAME PROFILEUR
07117 4883 -347 58 55 0 ---- PLOUMANAC'H
07118 4876 -347 87 88 0 ---- LANNION
07119 4823 -330 0 262 0 ---- ROSTRENEN
-07120 4853 -285 135 130 0 ---- TREMUSON-ST-BRIEUC
+07120 4853 -285 135 138 0 ---- TREMUSON-ST-BRIEUC
07125 4859 -208 59 67 0 ---- DINARD
07129 4893 -15 0 155 0 ---- FALAISE-RADAR
-07130 4807 -173 43 38 0 ---- RENNES-SAINT JACQUES
+07130 4807 -173 37 38 0 ---- RENNES-SAINT JACQUES
07134 4803 -75 100 101 0 ---- LAVAL-ETRONNIER
07139 4845 11 145 145 0 ---- ALENCON
07140 4806 138 127 132 0 ---- CHATEAUDUN
@@ -1692,7 +1698,7 @@
07270 4707 393 0 598 0 ---- CHATEAU-CHINON
07274 4736 478 0 592 0 ---- BLAISY HAUT RADAR
07276 4785 458 0 263 0 ---- CHATILLON/SEINE
-07280 4727 509 227 221 0 ---- DIJON-LONGVIC
+07280 4727 509 227 222 0 ---- DIJON-LONGVIC
07283 4784 534 467 466 0 ---- LANGRES
07288 4725 599 310 307 0 ---- BESANCON
07291 4737 702 0 913 0 ---- MONTANCY-RADAR
@@ -1701,18 +1707,18 @@
07296 4759 684 402 401 0 ---- DORANS
07299 4761 751 273 270 0 ---- BALE-MULHOUSE
07300 4669 -233 32 32 0 ---- L ILE D YEU
-07306 4670 -138 91 91 0 ---- LA ROCHE-SUR-YON
+07306 4671 -138 91 91 0 ---- LA ROCHE-SUR-YON
07314 4605 -141 23 11 0 ---- POINTE DE CHASSIRON
07315 4615 -114 10 4 0 ---- LA ROCHELLE
07316 4618 -119 18 23 0 ---- LA ROCHELLE AEROPORT ILE DE RE
07330 4632 -40 61 61 0 ---- NIORT
-07335 4659 31 120 128 0 ---- POITIERS-BIARD
+07335 4659 31 120 129 0 ---- POITIERS-BIARD
07336 4670 7 0 159 0 ---- CHERVES RADAR
07354 4687 174 157 161 0 ---- CHATEAUROUX DEOLS
07360 4615 187 553 546 0 ---- GUERET-GRANCHER
07361 4618 195 366 365 0 ---- GUERET ST LAURENT
07374 4617 340 251 249 0 ---- VICHY-CHARMEIL
-07379 4641 401 244 243 0 ---- SAINT-YAN
+07379 4641 401 242 243 0 ---- SAINT-YAN
07381 4607 445 0 908 0 ---- SAINT NIZIER-RADAR
07385 4630 480 217 222 0 ---- MACON
07386 4704 543 195 197 0 ---- DOLE-TAVAUX
@@ -1724,6 +1730,7 @@
07438 4515 147 117 112 0 ---- BRIVE
07460 4579 315 326 333 0 ---- CLERMONT-FERRAND
07461 4529 371 0 1115 0 ---- SEMBADEL-RADAR
+07468 4515 564 0 1895 0 ---- MOUCHEROTTE RADAR
07469 4593 688 1037 1042 2 ---- CHAMONIX
07471 4507 376 833 832 2 ---- LE PUY-LOUDES
07475 4553 429 402 404 0 ---- ST-ETIENNE BOUTHEON
@@ -1740,7 +1747,7 @@
07500 4463 -125 28 9 0 ---- LEGE-CAP FERRET
07502 4453 -112 24 23 0 ---- CAZAUX
07503 4443 -125 39 35 0 ---- BISCAROSSE
-07510 4483 -69 54 51 0 T-T- BORDEAUX MERIGNAC
+07510 4483 -69 48 51 0 T-T- BORDEAUX MERIGNAC
07524 4417 59 69 62 0 ---- AGEN
07530 4482 52 52 52 0 ---- BERGERAC
07535 4474 140 261 260 0 ---- GOURDON
@@ -1754,7 +1761,9 @@
07563 4391 490 48 38 0 ---- AVIGNON
07569 4432 476 0 309 0 ---- BOLLENE-RADAR
07570 4454 437 280 281 0 ---- LANAS SYN
+07572 4401 653 0 1772 0 ---- MONT-MAUREL RADAR
07577 4458 473 74 73 0 ---- MONTELIMAR
+07578 4450 622 0 1736 0 ---- MONT-COLOMBIS RADAR
07579 4414 486 55 60 0 ---- ORANGE
07586 4408 505 106 99 0 ---- CARPENTRAS
07587 4468 572 0 1069 0 ---- LUS-LA-CROIX-HAUTE
@@ -1766,6 +1775,7 @@
07606 4362 -61 0 126 0 ---- MOMUY RADAR
07607 4391 -50 59 62 0 ---- MONT-DE-MARSAN
07610 4338 -42 183 188 0 ---- PAU-UZEIN
+07618 4358 137 158 158 0 -TT- TOULOUSE RW
07621 4319 0 364 384 0 ---- TARBES-OSSUN
07622 4369 60 128 125 0 ---- AUCH
07627 4301 111 415 419 0 ---- SAINT GIRONS
@@ -1774,13 +1784,13 @@
07630 4362 138 150 152 0 ---- TOULOUSE BLAGNAC
07631 4353 137 166 164 0 ---- TOULOUSE FRANCAZAL
07632 4391 212 171 172 0 ---- ALBI
-07635 4322 229 130 132 0 ---- CARCASSONNE
+07635 4322 229 127 132 0 ---- CARCASSONNE
07637 4399 261 0 667 0 ---- MONTCLAR RADAR
07638 4332 335 16 17 0 ---- BEZIERS-VIAS
-07641 4340 369 77 80 0 ---- SETE
+07641 4340 369 81 80 0 ---- SETE
07643 4358 396 8 5 0 ---- MONTPELLIER
07645 4386 441 62 60 0 T-T- NIMES-COURBESSAC
-07646 4376 441 105 94 0 ---- NIMES GARONS
+07646 4376 442 105 94 0 ---- NIMES GARONS
07647 4352 492 24 25 0 ---- ISTRES
07648 4360 509 59 60 0 ---- SALON DE PROVENCE
07650 4344 522 32 21 0 ---- MARIGNANE
@@ -1794,8 +1804,9 @@
07675 4338 639 82 81 0 ---- LE LUC
07680 4342 675 6 2 0 ---- SAINT-RAPHAEL
07684 4356 695 4 4 0 ---- CANNES
-07690 4365 721 28 4 0 ---- NICE
+07690 4365 721 26 4 0 ---- NICE
07695 4368 733 144 138 0 ---- CAP FERRAT
+07714 4459 665 0 2575 0 ---- VARS-MAYT RADAR
07745 4292 286 0 702 0 ---- OPOUL-RADAR
07747 4274 287 44 44 0 ---- PERPIGNAN
07749 4252 314 87 82 0 ---- CAP BEAR
@@ -1807,7 +1818,7 @@
07774 4213 950 0 50 0 ---- ALERIA RADAR
07775 4226 953 74 65 0 ---- ALISTRO
07780 4151 910 23 27 0 ---- FIGARI
-07785 4300 936 113 104 0 ---- CAP CORSE
+07785 4300 936 113 72 0 ---- CAP CORSE
07790 4254 949 12 8 0 ---- BASTIA
08001 4337 -842 67 58 0 T-T- LA CORUNA
08002 4331 -836 103 98 0 ---- LA CORUNA/ALVEDRO
@@ -1998,7 +2009,7 @@
10006 5468 675 5 5 0 ---- NORDSEEBOJE III
10007 5418 743 0 0 0 ---- UFS DEUTSCHE BUCHT
10008 5500 633 3 3 0 ---- NORDSEEBOJE II
-10015 5418 789 8 4 0 ---- HELGOLAND
+10015 5418 789 3 4 0 ---- HELGOLAND
10018 5492 835 19 16 0 ---- WESTERLAND/SYLT
10020 5501 841 26 26 0 ---- LIST/SYLT
10022 5479 894 8 7 0 ---- LECK
@@ -2015,7 +2026,7 @@
10044 5450 1027 26 5 0 ---- LEUCHTTURM KIEL
10046 5438 1014 28 0 0 ---- KIEL-HOLTENAU
10055 5453 1106 9 3 0 ---- FEHMARN
-10067 5449 1124 11 5 0 ---- MARIENLEUCHTE
+10067 5449 1124 12 5 0 ---- MARIENLEUCHTE
10089 5417 1211 0 2 0 ---- ROSTOCK (RADAR)
10091 5468 1344 42 42 0 ---- ARKONA
10093 5436 1348 41 40 0 ---- PUTBUS
@@ -2040,7 +2051,7 @@
10149 5353 983 13 5 0 ---- HAMBURG-FINKENWERDER
10150 5417 1035 28 26 0 ---- DOERNICK
10152 5409 1088 2 1 0 ---- PELZERHAKEN
-10156 5380 1070 16 17 0 ---- LUEBECK-BLANKENSEE
+10156 5380 1070 17 16 0 ---- LUEBECK-BLANKENSEE
10157 5380 1072 21 18 0 ---- LUEBECK-BLANKENSEE
10161 5400 1119 16 15 0 ---- BOLTENHAGEN
10162 5364 1139 60 59 0 ---- SCHWERIN
@@ -2061,8 +2072,8 @@
10222 5315 861 30 6 0 ---- LEMWERDER
10224 5305 880 5 4 0 ---- BREMEN
10235 5296 978 77 76 0 ---- SOLTAU
-10238 5282 993 78 70 0 TTTP BERGEN
-10246 5292 1018 88 73 0 ---- FASSBERG
+10238 5282 992 78 70 0 TTTT BERGEN
+10246 5292 1019 88 73 0 ---- FASSBERG
10249 5339 1069 46 45 0 ---- BOIZENBURG
10253 5297 1114 18 17 0 ---- LUECHOW
10261 5289 1173 23 21 0 ---- SEEHAUSEN
@@ -2076,7 +2087,7 @@
10282 5332 1342 116 115 0 ---- FELDBERG/MECKLENBURG
10289 5332 1393 57 56 0 ---- GRUENOW
10291 5303 1399 55 54 0 ---- ANGERMUENDE
-10304 5273 733 41 0 0 -TT- MEPPEN
+10304 5272 732 41 19 0 -TT- MEPPEN
10305 5252 731 23 22 0 ---- LINGEN
10306 5229 739 49 40 0 ---- RHEINE-BENTLAGE
10309 5208 694 47 46 0 ---- AHAUS
@@ -2189,7 +2200,7 @@
10552 5065 1077 939 937 2 ---- SCHMUECKE
10554 5098 1096 322 316 0 ---- ERFURT-WEIMAR
10555 5098 1132 268 264 0 ---- WEIMAR
-10557 5050 1114 851 845 2 ---- NEUHAUS A.R.
+10557 5050 1113 851 845 2 ---- NEUHAUS A.R.
10558 5038 1118 630 626 0 ---- SONNEBERG-NEUFANG
10564 5057 1180 502 501 0 ---- SCHLEIZ
10565 5109 1193 246 246 0 ---- OSTERFELD
@@ -2211,7 +2222,7 @@
10615 4976 705 482 481 0 ---- DEUSELBACH
10616 4995 726 503 497 0 ---- HAHN
10617 4997 712 0 257 0 ---- TRABEN-TRARBACH
-10618 4970 733 377 376 0 TTTP IDAR-OBERSTEIN
+10618 4969 733 377 376 0 TTTT IDAR-OBERSTEIN
10628 4998 795 111 110 0 ---- GEISENHEIM
10629 4999 871 0 198 0 ---- OFFENTHAL (RADAR)
10630 5002 855 144 0 0 ---- FRANKFURT-WALLDORF (RADAR)
@@ -2228,7 +2239,7 @@
10648 4972 910 455 453 0 ---- MICHELSTADT-VIELBRUNN
10653 4965 997 298 298 0 ---- GIEBELSTADT
10655 4977 996 272 268 0 ---- WUERZBURG
-10658 5022 1008 282 282 0 ---- BAD KISSINGEN
+10658 5022 1008 281 282 0 ---- BAD KISSINGEN
10671 5031 1097 345 345 0 ---- LAUTERTAL-OBERLAUTER
10675 4988 1092 241 240 0 ---- BAMBERG
10677 4998 1163 498 488 0 ---- BAYREUTH
@@ -2255,7 +2266,7 @@
10739 4883 919 318 314 0 ---- STUTTGART/SCHNARRENBERG
10739 4883 919 315 314 0 T-T- STUTTGART/SCHNARRENBERG
10742 4921 952 274 276 0 ---- OEHRINGEN
-10743 4940 997 473 473 0 ---- NIEDERSTETTEN
+10743 4939 997 473 473 0 ---- NIEDERSTETTEN
10747 4892 969 490 489 0 ---- KAISERSBACH-CRONHUETTE
10752 4947 1038 347 325 0 ---- ILLESHEIM
10755 4932 1063 476 467 0 ---- ANSBACH/KATTERBACH
@@ -2263,7 +2274,7 @@
10761 4901 1093 441 439 0 ---- WEISSENBURG-EMETZHEIM
10763 4950 1106 318 314 0 ---- NUERNBERG
10765 4922 1110 394 385 0 ---- ROTH
-10771 4943 1190 418 417 0 ---- KUEMMERSBRUCK
+10771 4943 1190 418 417 0 TTTT KUEMMERSBRUCK
10771 4943 1190 0 417 0 TTTT KUEMMERSBRUCK
10775 4922 1183 442 442 0 ---- HOHENFELS
10776 4904 1210 370 365 0 ---- REGENSBURG
@@ -2287,14 +2298,14 @@
10850 4879 1071 503 502 0 ---- HARBURG
10852 4843 1094 477 461 0 ---- AUGSBURG
10853 4871 1121 387 380 0 ---- NEUBURG/DONAU (FLUGPLATZ)
-10856 4819 1085 562 550 0 ---- LECHFELD
+10856 4818 1085 562 550 0 ---- LECHFELD
10857 4808 1091 628 621 0 ---- LANDSBERG (FLUGPLATZ)
10859 4808 1128 600 593 0 ---- OBERPFAFFENHOFEN
-10860 4872 1153 366 364 0 ---- INGOLSTADT (FLUGPLATZ)
+10860 4871 1154 366 364 0 ---- INGOLSTADT (FLUGPLATZ)
10863 4840 1170 479 477 0 ---- WEIHENSTEPHAN-DURNAST
10865 4816 1154 526 515 0 ---- MUENCHEN-STADT
10868 4824 1155 489 484 0 T-T- MUENCHEN-OBERSCHLEISSHEIM
-10869 4832 1195 468 460 0 ---- ERDING
+10869 4832 1194 468 460 0 ---- ERDING
10870 4835 1181 447 446 0 ---- MUENCHEN-FLUGHAFEN
10871 4834 1161 0 489 0 ---- FUERHOLZEN (RADAR)
10872 4866 1254 351 350 0 ---- GOTTFRIEDING
@@ -2311,7 +2322,7 @@
10946 4772 1033 702 705 0 ---- KEMPTEN
10948 4740 1028 807 806 2 ---- OBERSTDORF
10950 4804 1022 0 667 0 ---- MEMMINGEN (RADAR)
-10954 4784 1087 757 756 0 -PP- ALTENSTADT
+10954 4783 1087 757 756 0 -TTT ALTENSTADT
10961 4742 1099 2960 2964 3 ---- ZUGSPITZE
10962 4780 1101 986 977 2 -T-- HOHENPEISSENBERG
10963 4748 1106 720 719 0 ---- GARMISCH-PARTENKIRCHEN
@@ -2745,7 +2756,7 @@
13383 4357 2135 167 166 0 ---- KRUSEVAC
13384 4393 2138 125 123 0 ---- CUPRIJA
13386 4339 2144 0 1482 0 ---- JASTREBAC
-13388 4333 2190 202 202 0 ---- NIS
+13388 4333 2190 203 203 0 T-T- NIS
13389 4298 2195 232 230 0 ---- LESKOVAC
13397 4302 2275 450 448 0 ---- DIMITROVGRAD
13455 4245 1855 10 10 0 ---- HERCEG NOVI-IGALO
@@ -3092,6 +3103,7 @@
16044 4603 1318 94 93 0 TTTT UDINE/CAMPOFORMIDO
16044 4604 1319 94 93 0 TTTT CAMPOFORMIDO RDS
16045 4598 1305 53 51 0 ---- UDINE/RIVOLTO
+16045 4598 1306 51 50 0 TTTT UDINE/RIVOLTO RDS
16046 4598 1305 54 52 0 ---- UDINE/RIVOLTO
16052 4594 771 3488 3480 3 ---- PIAN ROSA
16054 4573 735 552 550 0 ---- AOSTA POLLEIN
@@ -3407,6 +3419,7 @@
17098 4054 4308 1795 1794 2 ---- KARS
17099 3972 4305 1632 1632 2 ---- AGRI
17100 3992 4405 858 858 0 ---- IGDIR
+17109 4020 2588 19 0 0 ---- GOKCEADA
17110 4018 2590 72 42 0 ---- GOKCEADA
17111 3983 2607 30 30 0 ---- BOZCAADA
17112 4013 2640 6 6 0 ---- CANAKKALE
@@ -3443,6 +3456,7 @@
17193 3861 3470 1260 1260 2 ---- NEVSEHIR
17194 3877 3453 945 947 0 ---- KAPODOKYA
17195 3882 3543 1054 1055 2 ---- KAYSERI/ERKILET
+17196 3868 3547 1096 1096 0 T-T- KAYSERI BOLGE
17197 3835 3825 931 920 0 ---- TULGA MEYDAN
17199 3835 3832 948 948 0 ---- MALATYA/BOLGE
17200 3843 3808 849 862 0 ---- MALATYA/ERHAC
@@ -3506,7 +3520,7 @@
17609 3486 3361 10 10 0 ---- LARNACA AIRPORT
20046 8063 5806 25 21 0 T--- POLARGMO IM. E.T. KRENKELJA
20069 7948 7698 10 10 0 ---- OSTROV VIZE
-20087 7955 9057 8 7 0 ---- OSTROV GOLOMJANNYJ
+20087 7955 9057 8 7 0 ---- MGMS IM. G.F. USHAKOVA
20094 7928 10162 26 24 0 T--- MYS BARANOVA
20107 7806 1422 76 73 0 ---- BARENTSBURG
20274 7750 8220 23 0 0 ---- OSTROV UEDINENIJA
@@ -4205,7 +4219,7 @@
28409 5643 5220 169 170 0 ---- MOZGA
28411 5683 5345 156 155 0 ---- IZHEVSK
28418 5647 5373 133 135 0 ---- SARAPUL
-28419 5628 5497 102 98 0 ---- JANAUL
+28419 5628 5497 99 98 0 ---- JANAUL
28428 5650 5613 148 148 0 ---- CHERNUSKA
28434 5665 5778 206 205 0 ---- KRASNOUFIMSK
28440 5683 6063 281 280 0 ---- EKATERINBURG
@@ -4956,7 +4970,7 @@
35188 5113 7137 350 0 0 ---- ASTANA
35217 5025 5257 32 0 0 ---- DZHAMBEJTY
35229 5028 5715 219 0 0 T--- AKTOBE
-35235 5072 5867 243 0 0 ---- STEPNOE
+35235 5072 5867 276 0 0 ---- STEPNOE
35302 5020 5117 17 0 0 ---- CHAPAEVO
35334 4980 5798 368 0 0 ---- TOKMANSAY
35357 4968 6952 349 0 0 ---- BARSHINO
@@ -4966,18 +4980,18 @@
35406 4905 5187 2 0 0 ---- TAIPAK
35416 4907 5468 95 0 0 ---- UIL
35426 4915 5712 234 0 0 ---- TEMIR
-35475 4901 6866 490 0 0 ---- SHUBARKUL
+35475 4900 6865 490 0 0 ---- SHUBARKUL
35497 4885 7287 656 0 0 ---- ZHARYK
35532 4863 5850 398 0 0 ---- MUGODZARSKAJA
35576 4830 6965 0 0 0 ---- KYZYLZHAR
-35615 4763 5332 -22 0 0 ---- MAKAT
-35662 4783 6673 488 0 0 ---- KARSAKBAY
+35615 4763 5332 -21 0 0 ---- MAKAT
+35662 4783 6672 488 0 0 ---- KARSAKBAY
35671 4780 6772 346 0 0 T--- ZHEZKAZGAN
35699 4745 7481 620 0 0 ---- BEKTAUATA
35700 4712 5192 -22 0 0 T--- ATYRAU
-35701 4722 5098 -27 0 0 ---- ISATAI
+35701 4720 5098 -27 0 0 ---- ISATAI
35746 4678 6165 62 0 0 ---- ARAL TENIZI
-35793 4722 7336 582 0 0 ---- MOIYNTY
+35793 4722 7334 585 0 0 ---- MOIYNTY
35796 4680 7508 350 0 0 ---- BALHASH
35849 4577 6212 68 0 0 ---- KAZALY
35925 4540 5612 88 0 0 ---- SAM
@@ -5012,21 +5026,21 @@
36278 5038 9043 1850 1850 0 ---- MUGUR-AKSY
36307 5026 9517 1101 1100 2 ---- ERZIN
36325 5060 9752 1315 1314 2 ---- KUNGUR-TUK
-36341 4978 7638 776 0 0 ---- EGINDYBULAK
+36341 4978 7637 776 0 0 ---- EGINDYBULAK
36397 4922 8122 455 0 0 ---- ZHALGYZTOBE
36428 4920 8452 401 0 0 ---- ULKEN NARYN
36535 4875 8237 512 0 0 ---- KOKPEKTY
36639 4712 8162 491 0 0 ---- URZHAR
36686 4655 7687 349 0 0 ---- ALGAZY OSTROV
-36785 4539 7950 628 0 0 ---- ZHANSUGUROV
+36785 4538 7948 628 0 0 ---- ZHANSUGUROV
36821 4483 7627 396 0 0 ---- BAKANAS
-36856 4427 7931 1224 0 0 ---- KONYROLEN
+36856 4427 7930 1224 0 0 ---- KONYROLEN
36859 4417 8006 645 0 0 ---- ZHARKENT
36864 4353 7525 743 0 0 ---- OTAR
36870 4323 7693 851 0 0 ---- ALMATY
-36871 4319 7675 810 0 0 ---- KARASAYSKY
+36871 4318 7675 810 0 0 ---- KARASAYSKY
36872 4336 7700 663 0 0 T-T- ALMATY
-36883 4348 7698 614 0 0 ---- ILIYSKY
+36883 4348 7698 613 0 0 ---- ILIYSKY
36911 4283 7528 817 816 0 ---- TOKMAK
36944 4235 7834 1769 1768 0 ---- KYZYL-SUU
36974 4143 7600 2041 2039 0 ---- NARYN
@@ -5258,8 +5272,8 @@
38262 4295 5980 93 95 0 ---- CHIMBAJ
38264 4248 5962 75 77 0 ---- NUKUS
38267 4230 5913 71 0 0 ---- KENEURGENCH
-38313 4272 6900 406 0 0 ---- BUGUN
-38318 4210 6812 184 0 0 ---- BAYYRKUM
+38313 4372 6900 405 0 0 ---- BUGUN
+38318 4210 6812 183 0 0 ---- BAYYRKUM
38328 4232 6970 604 0 0 ---- SHYMKENT
38334 4248 7030 808 0 0 ---- AUL TURARA RYSKULOVA
38339 4217 7088 2162 2150 2 ---- OLGAING
@@ -6568,6 +6582,7 @@
44474 2735 8767 1732 1732 2 ---- TAPLEJUNG
44477 2698 8735 1210 1210 2 ---- DHANKUTA
44478 2648 8727 72 72 0 ---- BIRATNAGAR AIRPORT
+44517 2786 9066 3708 0 255 ---- TSAMPA
45004 2231 11417 66 65 0 T-T- KOWLOON
45004 2233 11417 0 24 0 -P-P KOWLOON
45005 2230 11417 40 32 0 ---- HONG KONG OBSERVATORY
@@ -6629,7 +6644,7 @@
47086 3622 12653 0 4 0 P--- UNGCHEON
47087 3657 12728 0 33 0 ---- JOCHIWON
47088 3640 12828 0 90 0 P--- SANGJU RANGE
-47090 3825 12856 19 19 0 T-T- SOKCHO
+47090 3825 12856 19 19 0 ---- SOKCHO
47091 3813 12860 13 11 0 ---- SOKCHO AIRPORT
47092 3804 12866 74 73 0 ---- YANGYANG INT'L AIRPORT
47094 3811 12743 0 1064 0 ---- GWANGDEOKSAN
@@ -6641,7 +6656,7 @@
47101 3790 12774 79 78 0 ---- CHUNCHEON
47102 3797 12463 146 145 0 T-T- BAENGNYEONGDO
47103 3793 12463 0 169 0 ---- BAENGNYEONGDO AB
-47104 3779 12886 80 79 0 ---- BUKGANGNEUNG
+47104 3779 12886 80 79 0 T-T- BUKGANGNEUNG
47105 3775 12888 27 27 0 ---- GANGNEUNG
47106 3751 12912 41 41 0 ---- DONGHAE
47107 3772 12893 0 6 0 ---- GANGNEUNG AB
@@ -6692,7 +6707,7 @@
47152 3556 12932 36 35 0 ---- ULSAN
47153 3517 12893 0 3 0 ---- GIMHAE AB
47154 3613 12832 50 49 0 ---- GUMI
-47155 3517 12857 38 38 0 ---- CHANGWON
+47155 3517 12857 38 38 0 TTTT CHANGWON
47156 3517 12689 74 73 0 ---- GWANGJU
47157 3567 12791 227 226 0 ---- GEOCHANG
47158 3511 12680 13 13 0 TTTT GWANGJU AB
@@ -6726,22 +6741,22 @@
47402 4494 14258 8 7 0 ---- KITAMIESASHI
47404 4436 14169 10 8 0 ---- HABORO
47405 4458 14296 16 14 0 ---- OMU
-47406 4395 14163 24 24 0 ---- RUMOI
+47406 4395 14163 24 24 0 PPPP RUMOI
47407 4376 14237 140 120 0 ---- ASAHIKAWA
47409 4402 14428 44 38 0 ---- ABASHIRI
47411 4318 14102 26 25 0 ---- OTARU
47412 4306 14133 26 17 0 T-T- SAPPORO
47413 4321 14179 52 42 0 ---- IWAMIZAWA
47415 4314 14101 0 700 0 ---- SAPPORO/KENASHIYAMA
-47417 4292 14321 44 38 0 ---- OBIHIRO
+47417 4292 14321 44 38 0 PPPP OBIHIRO
47418 4299 14438 40 5 0 ---- KUSHIRO
-47418 4295 14444 16 14 0 T-T- KUSHIRO
+47418 4295 14444 15 14 0 T-T- KUSHIRO
47419 4296 14452 0 98 0 ---- KUSHIRO/KOMBUMORI
47420 4333 14559 27 25 0 ---- NEMURO
47421 4280 14022 35 33 0 ---- SUTTSU
47422 4180 14007 0 32 0 ---- KAMINOKUNI
47423 4231 14097 50 40 0 ---- MURORAN
-47423 4232 14097 0 3 0 ---- MURORAN
+47423 4232 14097 0 3 0 PPPP MURORAN
47424 4262 14155 8 6 0 ---- TOMAKOMAI
47425 4279 14166 30 27 0 ---- CHITOSE AB
47426 4216 14278 38 37 0 ---- URAKAWA
@@ -6776,7 +6791,7 @@
47557 3722 14043 375 372 0 ---- FUKUSHIMA AIRPORT
47567 3824 14091 10 7 0 ---- KASUMINOME AB
47569 3814 14091 5 2 0 ---- SENDAI AIRPORT
-47570 3749 13991 214 212 0 ---- WAKAMATSU
+47570 3749 13991 214 212 0 PPPP WAKAMATSU
47572 3772 13882 0 633 0 ---- NIIGATA/YAHIKOYAMA
47573 3796 13911 4 1 0 ---- NIIGATA AIRPORT
47574 4065 13993 68 66 0 ---- FUKAURA
@@ -6788,10 +6803,10 @@
47582 3972 14010 22 6 0 T-T- AKITA
47583 4019 14037 87 84 0 ---- ODATE-NOSHIRO AIRPORT
47584 3970 14116 155 155 0 ---- MORIOKA
-47585 3965 14197 47 42 0 ---- MIYAKO
-47587 3890 13984 5 3 0 ---- SAKATA
+47585 3965 14197 47 42 0 PPPP MIYAKO
+47587 3890 13984 5 3 0 PPPP SAKATA
47588 3826 14035 154 153 0 ---- YAMAGATA
-47590 3826 14090 44 39 0 ---- SENDAI
+47590 3826 14090 44 39 0 PPPP SENDAI
47590 3826 14090 0 38 0 ---- SENDAI
47591 3840 14121 5 2 0 ---- MATSUSHIMA AB
47592 3843 14130 43 43 0 ---- ISHINOMAKI
@@ -6807,28 +6822,28 @@
47607 3671 13719 17 9 0 ---- TOYAMA
47610 3665 13819 420 418 0 ---- NAGANO
47611 3610 13819 0 1925 0 ---- NAGANO/KURUMAYAMA
-47612 3711 13825 19 13 0 ---- TAKADA
+47612 3711 13825 15 13 0 PPPP TAKADA
47615 3654 13987 140 119 0 ---- UTSUNOMIYA
-47616 3606 13622 17 9 0 ---- FUKUI
+47616 3606 13622 17 9 0 PPPP FUKUI
47617 3615 13725 562 560 0 ---- TAKAYAMA
47618 3625 13797 612 610 0 ---- MATSUMOTO
47620 3604 13811 763 760 0 ---- SUWA
47622 3634 13855 1005 999 2 ---- KARUIZAWA
47624 3640 13906 114 112 0 ---- MAEBASHI
47625 3629 13908 92 0 1 ---- TAKASAKI
-47626 3615 13938 32 30 0 ---- KUMAGAYA
+47626 3615 13938 32 30 0 PPPP KUMAGAYA
47628 3622 14019 0 36 0 ---- KAKIOKA
-47629 3638 14047 31 29 0 ---- MITO
+47629 3638 14047 31 29 0 PPPP MITO
47631 3565 13606 12 2 0 ---- TSURUGA
47632 3540 13676 17 13 0 ---- GIFU
47634 3539 13687 42 39 0 ---- GIFU AB
47635 3525 13691 17 14 0 ---- NAGOYA AIRPORT
-47636 3517 13697 56 51 0 ---- NAGOYA
+47636 3517 13697 56 51 0 PPPP NAGOYA
47636 3517 13696 0 51 0 ---- NAGOYA
47637 3552 13782 529 516 0 ---- IIDA
47638 3567 13855 282 273 0 ---- KOFU
47639 3536 13872 3778 3775 1 ---- FUJISAN
-47640 3550 13876 861 860 2 ---- KAWAGUCHIKO
+47640 3550 13876 861 860 2 PPPP KAWAGUCHIKO
47641 3599 13907 234 232 0 ---- CHICHIBU
47642 3575 13935 144 141 0 ---- YOKOTA
47643 3584 13941 93 90 0 ---- IRUMA AB
@@ -6841,23 +6856,23 @@
47653 3463 13709 8 6 0 ---- IRAKO
47654 3475 13771 48 46 0 ---- HAMAMATSU
47655 3460 13821 47 45 0 ---- OMAEZAKI
-47656 3497 13840 16 14 0 ---- SHIZUOKA
+47656 3497 13840 16 14 0 PPPP SHIZUOKA
47657 3511 13893 22 21 0 ---- MISHIMA
47658 3481 13830 10 7 0 ---- SHIZUHAMA AB
47659 3474 13813 0 156 0 ---- SHIZUOKA/MAKINOHARA
47660 3571 13940 98 95 0 ---- TACHIKAWA AB
47661 3540 13991 6 3 0 ---- KISARAZU AB
47662 3569 13975 24 25 0 ---- TOKYO
-47663 3407 13619 17 15 0 ---- OWASE
+47663 3407 13619 17 15 0 PPPP OWASE
47666 3460 13884 53 52 0 ---- IROZAKI
47668 3504 13909 68 67 0 ---- AJIRO
47670 3544 13965 43 39 0 ---- YOKOHAMA
47671 3554 13978 9 6 0 ---- TOKYO INTERNATIONAL AIRPORT
47672 3499 13987 7 6 0 ---- TATEYAMA
-47674 3515 14031 14 12 0 ---- KATSUURA
+47674 3515 14031 14 12 0 PPPP KATSUURA
47675 3475 13936 76 74 0 ---- OSHIMA
-47677 3411 13952 38 36 0 ---- MIYAKEJIMA
-47678 3311 13978 153 151 0 T-T- HACHIJOJIMA
+47677 3411 13952 40 38 0 ---- MIYAKEJIMA
+47678 3311 13978 153 151 0 PPPP HACHIJOJIMA
47678 3311 13978 153 152 0 TPTP HACHIJOJIMA/OMURE
47679 3545 13944 65 62 0 ---- ATSUGI NAS
47680 3551 13938 115 112 0 ---- ZAMA/KASTNER
@@ -6894,12 +6909,12 @@
47743 3549 13324 7 4 0 ---- MIHO AB
47744 3543 13334 8 7 0 ---- YONAGO
47746 3549 13424 16 7 0 ---- TOTTORI
-47746 3553 13419 0 6 0 ---- TOTTORI
+47746 3553 13419 0 6 0 PPPP TOTTORI
47747 3554 13482 6 3 0 ---- TOYOOKA
47749 3549 13538 9 6 0 -P-- MAIZURU AB
-47750 3545 13532 23 2 0 ---- MAIZURU
+47750 3545 13532 4 2 0 ---- MAIZURU
47754 3440 13141 4 2 0 ---- HAGI
-47755 3490 13207 21 19 0 ---- HAMADA
+47755 3490 13207 21 19 0 PPPP HAMADA
47756 3506 13401 148 146 0 ---- TSUYAMA
47759 3501 13572 53 41 0 ---- KYOTO
47761 3528 13624 93 87 0 ---- HIKONE
@@ -6907,8 +6922,8 @@
47764 3415 13225 6 3 0 ---- IWAKUNI
47765 3440 13246 54 4 0 ---- HIROSHIMA
47766 3424 13255 5 4 0 ---- KURE
-47767 3445 13325 3 2 0 ---- FUKUYAMA
-47768 3465 13391 19 3 0 ---- OKAYAMA
+47767 3445 13325 4 2 0 ---- FUKUYAMA
+47768 3469 13393 7 5 0 ---- OKAYAMA
47769 3484 13466 40 38 0 ---- HIMEJI
47770 3470 13521 31 5 0 ---- KOBE
47771 3478 13544 15 12 0 ---- OSAKA INTERNATIONAL AIRPORT
@@ -6918,7 +6933,7 @@
47776 3434 13490 112 109 0 ---- SUMOTO
47777 3422 13516 18 14 0 ---- WAKAYAMA
47778 3345 13576 69 68 0 ---- SHIONOMISAKI
-47778 3345 13576 76 68 0 T-T- SHIONOMISAKI
+47778 3345 13576 69 68 0 T-T- SHIONOMISAKI
47779 3460 13560 13 10 0 ---- YAO AIRPORT
47780 3469 13583 109 104 0 ---- NARA
47782 3365 13536 92 89 0 ---- NANKISHIRAHAMA AIRPORT
@@ -6933,13 +6948,13 @@
47792 3427 13259 0 726 0 ---- HIROSHIMA/HAIGAMINE
47793 3476 13386 242 239 0 ---- OKAYAMA AIRPORT
47794 3553 13416 18 15 0 ---- TOTTORI AIRPORT
-47795 3390 13513 0 9 0 ---- WAKAYAMA/MIHAMA
-47796 3463 13522 10 7 0 ---- KOBE AIRPORT
+47795 3389 13512 0 9 0 PPPP WAKAYAMA/MIHAMA
+47796 3463 13522 8 5 0 ---- KOBE AIRPORT
47799 3428 12933 66 63 0 ---- TSUSHIMA AIRPORT
47800 3420 12929 4 4 0 ---- IZUHARA
-47800 3415 12922 0 130 0 ---- IZUHARA
+47800 3415 12922 0 130 0 PPPP IZUHARA
47803 3388 13065 33 30 0 ---- ASHIYA AB
-47805 3336 12955 59 58 0 ---- HIRADO
+47805 3336 12955 59 58 0 PPPP HIRADO
47806 3343 13036 0 970 0 ---- FUKUOKA/SEFURISAN
47807 3358 13038 15 3 0 T-T- FUKUOKA
47808 3358 13044 12 9 0 ---- FUKUOKA AIRPORT
@@ -6949,13 +6964,13 @@
47812 3315 12972 6 4 0 ---- SASEBO
47813 3327 13031 33 5 0 ---- SAGA
47814 3332 13093 84 83 0 ---- HITA
-47815 3324 13162 13 5 0 ---- OITA
+47815 3324 13162 13 5 0 PPPP OITA
47816 3344 12943 0 85 0 ---- IKITSUKIJIMA
47817 3272 12987 36 27 0 ---- NAGASAKI
47818 3274 13026 680 678 0 ---- UNZENDAKE
-47819 3281 13071 39 38 0 ---- KUMAMOTO
+47819 3281 13071 39 38 0 PPPP KUMAMOTO
47821 3288 13107 1144 1142 2 ---- ASOSAN
-47822 3258 13166 21 19 0 ---- NOBEOKA
+47822 3258 13166 21 19 0 PPPP NOBEOKA
47823 3203 13019 42 40 0 ---- AKUNE
47824 3222 13076 148 146 0 ---- HITOYOSHI
47827 3156 13055 32 4 0 T-T- KAGOSHIMA
@@ -6965,14 +6980,14 @@
47833 3142 13088 0 107 0 ---- KANOYA
47835 3158 13141 15 3 0 ---- ABURATSU
47836 3039 13066 38 37 0 ---- YAKUSHIMA
-47836 3038 13066 0 36 0 ---- YAKUSHIMA
+47836 3038 13066 0 36 0 PPPP YAKUSHIMA
47837 3072 13097 38 25 0 ---- TANEGASHIMA
47838 3220 13003 15 3 0 ---- USHIBUKA
47840 3368 13104 20 17 0 ---- TSUIKI AB
47842 3198 12835 110 109 0 ---- MESHIMA
47843 3269 12883 27 25 0 ---- FUKUE
47844 3267 12883 80 77 0 ---- FUKUE AIRPORT
-47848 3172 13032 0 25 0 ---- KAGOSHIMA/ICHIKI
+47848 3171 13032 0 25 0 PPPP KAGOSHIMA/ICHIKI
47850 3137 13084 68 65 0 ---- KANOYA AB
47851 3180 13072 275 272 0 ---- KAGOSHIMA AIRPORT
47852 3347 13174 8 5 0 ---- OITA AIRPORT
@@ -6994,20 +7009,20 @@
47884 3401 13463 6 3 0 ---- KOMATSUSHIMA AB
47887 3384 13278 34 32 0 ---- MATSUYAMA
47890 3428 13375 5 4 0 ---- TADOTSU
-47891 3432 13405 14 9 0 ---- TAKAMATSU
+47891 3432 13405 14 9 0 PPPP TAKAMATSU
47892 3322 13255 15 2 0 ---- UWAJIMA
47893 3357 13355 5 1 0 ---- KOCHI
-47893 3357 13355 0 3 0 ---- KOCHI
+47893 3357 13355 0 3 0 PPPP KOCHI
47895 3407 13457 6 2 0 ---- TOKUSHIMA
47897 3292 13269 11 2 0 ---- SUKUMO
-47898 3272 13301 34 31 0 ---- SHIMIZU
+47898 3272 13301 34 31 0 PPPP SHIMIZU
47899 3325 13418 187 185 0 ---- MUROTOMISAKI
47899 3325 13418 0 185 0 ---- MUROTOMISAKI
47907 2783 12888 5 2 0 ---- TOKUNOSHIMA AIRPORT
-47909 2838 12950 8 3 0 ---- NAZE
+47909 2838 12950 8 3 0 PPPP NAZE
47909 2839 12955 295 294 0 T-T- NAZE/FUNCHATOGE
47911 2447 12298 19 16 0 ---- YONAGUNI AIRPORT
-47912 2447 12301 36 30 0 ---- YONAGUNIJIMA
+47912 2447 12301 36 30 0 PPPP YONAGUNIJIMA
47917 2443 12377 11 10 0 ---- IRIOMOTEJIMA
47918 2434 12416 15 6 0 T-T- ISHIGAKIJIMA
47919 2440 12424 34 31 0 ---- NEW ISHIGAKI AIRPORT
@@ -7026,7 +7041,7 @@
47938 2672 12778 76 73 0 ---- IEJIMA (US BASE)
47940 2659 12797 7 6 0 ---- NAGO
47942 2743 12871 30 27 0 ---- OKINOERABU
-47945 2583 13122 21 15 0 T-T- MINAMIDAITOJIMA
+47945 2583 13122 21 15 0 TPTP MINAMIDAITOJIMA
47946 2650 12790 106 0 1 ---- OKINAWA
47971 2709 14219 8 3 0 T-T- CHICHIJIMA
47981 2478 14132 120 117 0 T--- IWOTO
@@ -7370,9 +7385,9 @@
51467 4267 8633 1733 0 0 ---- BALGUNTAY
51495 4322 9173 732 0 0 ---- SHISANJIANFANG
51542 4303 8415 2459 0 0 ---- BAYANBULAK
-51573 4293 8920 37 0 0 ---- TURPAN
+51573 4295 8923 39 0 0 ---- TURPAN
51644 4172 8295 1084 0 0 T-T- KUQA
-51656 4175 8613 933 0 0 ---- KORLA
+51656 4173 8582 903 0 0 ---- KORLA
51709 3947 7575 1387 0 0 T-T- KASHI
51711 4093 7845 1986 0 0 ---- AKQI
51716 3979 7856 1117 0 0 ---- BACHU
@@ -7415,7 +7430,7 @@
53068 4363 11195 966 0 0 T-T- ERENHOT
53083 4462 11415 1183 0 0 ---- NARAN BULAG
53149 4253 11013 1223 0 0 ---- MANDAL
-53192 4402 11495 1127 0 0 ---- ABAG QI
+53192 4402 11500 1148 0 0 ---- ABAG QI
53231 4145 10638 1510 0 0 ---- HAILS
53276 4240 11290 1152 0 0 ---- JURH
53336 4157 10852 1290 0 0 ---- HALIUT
@@ -7583,7 +7598,7 @@
56966 2360 10198 398 0 0 ---- YUANJIANG
56969 2150 10158 633 0 0 ---- MENGLA
56977 2262 10182 1121 0 0 ---- JIANGCHENG
-56985 2338 10338 1302 0 0 T-T- MENGZI
+56985 2344 10333 1314 0 0 T-T- MENGZI
57006 3458 10575 1143 0 0 ---- TIANSHUI
57014 3457 10587 1085 0 0 ---- BEIDAO
57016 3435 10713 610 0 0 ---- BAOJI
@@ -7609,7 +7624,7 @@
57348 3102 10953 303 0 0 ---- FENGJIE
57378 3117 11257 66 0 0 ---- ZHONGXIANG
57399 3113 11495 75 0 0 ---- MACHENG
-57411 3080 10608 310 0 0 ---- NANCHONG
+57411 3075 10613 347 0 0 ---- GAOPING
57426 3068 10780 455 0 0 ---- LIANGPING
57447 3028 10947 458 0 0 T-T- ENSHI
57461 3073 11137 258 0 0 T-T- YICHANG
@@ -7649,7 +7664,7 @@
57922 2583 10755 1016 0 0 ---- DUSHAN
57932 2597 10853 287 0 0 ---- RONGJIANG
57957 2533 11030 166 0 0 T-T- GUILIN
-57972 2580 11303 185 185 0 T-T- CHENZHOU
+57972 2574 11297 369 0 0 T-T- CHENZHOU
57993 2587 11500 138 0 0 ---- GANZHOU
57993 2587 11500 134 0 0 T-T- GANZHOU
58027 3428 11715 42 0 0 T-T- XUZHOU
@@ -8035,7 +8050,7 @@
61698 1288 -1497 0 8 0 ---- KOLDA
61699 1257 -1222 0 165 0 ---- KEDOUGOU
61701 1320 -1663 33 36 0 --P- BANJUL/YUNDUM
-61705 1322 -1620 0 0 0 ---- SIBANOR
+61705 1322 -1620 21 0 0 ---- SIBANOR
61707 1348 -1557 11 11 0 ---- JENOI
61711 1345 -1645 2 1 0 ---- BANJUL/HALF-DIE
61712 1348 -1618 15 15 0 ---- KEREWAN
@@ -8044,7 +8059,7 @@
61721 1353 -1477 1 1 0 ---- GEORGETOWN
61722 1357 -1593 2 2 0 ---- SAPU
61731 1332 -1422 4 4 0 --P- BASSE
-61733 1388 -1340 0 0 0 ---- FATOTO
+61733 1367 -1447 18 0 0 ---- FATOTO
61766 1188 -1565 36 39 0 ---- BISSAU AEROPORTO
61769 1158 -1548 20 18 0 ---- BOLAMA
61770 1222 -1567 10 0 0 ---- BISSORA
@@ -8085,8 +8100,8 @@
61972 -2234 4034 6 6 0 ---- ILE EUROPA
61974 -1038 5660 4 3 4 ---- AGALEGA
61976 -1589 5452 13 7 0 ---- SERGE-FROLOW (ILE TROMELIN)
-61978 -2119 5557 0 1712 0 ---- PITON VILLERS
-61979 -2091 5542 0 742 0 ---- LE COLORADO
+61978 -2119 5557 0 1712 0 ---- PITON VILLERS RADAR
+61979 -2091 5542 0 742 0 ---- LE COLORADO RADAR
61980 -2089 5553 13 20 0 --T- SAINT-DENIS/GILLOT (REUNION)
61982 -2091 5559 75 0 1 ---- ST. DENIS, REUNION
61986 -1645 5962 4 2 4 ---- ST. BRANDON (RAPHAEL ISLAND)
@@ -8097,7 +8112,7 @@
61996 -3779 7756 29 27 0 ---- MARTIN DE VIVIES (ILE AMSTERDAM)
61997 -4643 5186 146 146 0 ---- ALFRED FAURE (ILES CROZET)
61998 -4935 7023 30 29 0 --T- PORT-AUX-FRANCAIS (ILES KERGUELEN)
-62002 3187 1098 621 620 2 ---- NALUT
+62002 3187 1098 621 0 2 ---- NALUT
62007 3288 1208 3 3 0 ---- ZUARA
62008 3208 1255 691 691 2 ---- YEFREN
62010 3270 1308 0 63 0 ---- TRIPOLI INTERNATIONAL AIRPORT
@@ -8105,7 +8120,7 @@
62011 3215 1301 0 729 0 ---- GARIAN
62012 3263 1430 22 21 0 ---- EL KHOMS
62014 3173 1402 259 0 0 ---- BENWLID
-62016 3242 1505 32 32 0 ---- MISURATA
+62016 3242 1522 32 32 0 ---- MISURATA
62018 3057 1572 90 0 0 ---- ABU NJAYM
62019 3120 1657 14 13 0 ---- SIRTE
62053 3210 2027 132 131 0 T-T- BENINA
@@ -9082,6 +9097,7 @@
68994 -4688 3786 24 0 0 T-T- MARION ISLAND
68999 -3396 1860 46 46 0 ---- CT-AWS
70026 7129 -15678 12 12 0 T-T- BARROW/W. POST W. ROGERS
+70027 0 0 0 7 0 TTTT BARROW ARM,NSA
70086 7013 -14363 15 2 0 ---- BARTER ISLAND
70104 6888 -16613 0 3 0 ---- CAPE LISBURNE AFS
70116 6562 -16805 5 9 0 ---- WALES
@@ -10231,6 +10247,7 @@
72384 3543 -11905 150 149 0 ---- BAKERSFIELD/MEADOWS, CA.
72386 3608 -11517 664 662 0 ---- LAS VEGAS/MCCARRAN, NV.
72387 3661 -11602 1006 1006 0 T-T- MERCURY/DESERT ROCK, NV.
+72388 3604 -11518 0 697 0 TTTT LAS VEGAS,NV
72389 3677 -11972 100 101 0 ---- FRESNO/AIR TERM., CA.
72390 3567 -12128 21 0 0 ---- SAN SIMEON/PT. PIEDRAS BLANCAS CGLS, CA.
72391 3411 -11912 0 0 0 ---- POINT MUGU/NAS, CA.
@@ -10478,7 +10495,7 @@
74001 3460 -8663 175 0 0 ---- REDSTONE ARSENAL, AL.
74002 3950 -7617 5 0 0 ---- ABERDEEN PROVING GROUNDS, MD.
74003 4017 -11293 1325 0 0 ---- DUGWAY PROVING GROUNDS, UT.
-74004 3286 -11433 131 0 0 TTTT YUMA PG, tower 3555
+74004 3286 -11433 0 131 0 TTTT YUMA PG, TOWER 3555
74005 3286 -11403 0 231 0 TTTT YUMA PG,TOWER 31
74006 3292 -11380 0 145 0 TTTT YUMA PG,TOWER M
74201 4813 -12340 9 5 0 ---- PORT ANGELES/CGAS, WA.
@@ -10913,16 +10930,17 @@
78861 1712 -6178 10 0 0 --TP COOLIDGE FIELD, ANTIGUA (AUX.AFB)
78862 1712 -6178 10 8 0 ---- VC BIRD INT'L AIRPORT ANTIGUA
78866 1803 -6312 4 3 0 T-T- JULIANA AIRPORT, ST. MAARTEN
-78873 1748 -6298 40 39 0 ---- ROOSEVELT AIRPORT ST. EUSTATIUS
+78871 1764 -6322 32 42 0 ---- JUANCHO E. YRAUSQUIN AIRPORT, SABA
+78873 1750 -6298 37 40 0 ---- F.D. ROOSEVELT AIRPORT ST. EUSTATIUS
78890 1634 -6100 27 27 0 ---- LA DESIRADE METEO
-78891 1630 -6135 0 25 0 ---- LE MOULE
+78891 1630 -6135 0 25 0 ---- LE MOULE RADAR
78894 1789 -6285 45 44 0 ---- ST. BARTHELEMY METEO
78896 1626 -6153 9 0 1 ---- POINTE-A-PITRE
78897 1626 -6152 8 11 0 T-T- LE RAIZET AERO
78905 1553 -6130 16 14 0 ---- MELVILLE HALL AIRPORT
78906 1533 -6138 5 5 0 ---- CANEFIELD AIRPORT
78922 1477 -6088 39 26 0 ---- TRINITE-CARAVELLE
-78924 1450 -6102 0 377 0 ---- LE DIAMANT
+78924 1450 -6102 0 377 0 ---- LE DIAMANT RADAR
78925 1460 -6100 8 5 0 ---- LAMENTIN-AERO
78947 1402 -6100 2 2 0 ---- GEORGE F.L. CHARLES AIRPORT
78948 1375 -6095 10 3 0 ---- HEWANORRA INT'L AIRPORT
@@ -11028,6 +11046,7 @@
80479 1030 -6823 0 1000 0 ---- PALMICHAL
81001 680 -5815 2 1 0 ---- GEORGETOWN
81002 650 -5825 30 28 0 ---- TIMEHRI/CHEDDI JAGAN INTERNATIONAL
+81003 657 -5813 1 0 0 ---- OGLE INTERNATIONAL AIRPORT
81005 588 -6050 495 494 0 ---- KAMARANG
81006 337 -5980 82 82 0 ---- LETHEM
81010 557 -5778 29 28 0 ---- EBINI
@@ -11046,7 +11065,7 @@
81403 521 -5275 17 12 0 ---- KOUROU CSG
81405 482 -5237 9 8 0 T-T- CAYENNE MATOURY
81406 517 -5269 9 0 1 ---- CAYENNE
-81408 389 -5180 7 6 0 ---- SAINT GEORGES
+81408 389 -5180 7 11 0 ---- SAINT GEORGES
81415 364 -5403 107 106 0 ---- MARIPASOULA
81609 381 -5186 21 19 0 ---- OIAPOQUE
81615 280 -6065 96 94 0 ---- BOA VISTA
@@ -12341,6 +12360,7 @@
89004 -7170 -280 817 815 0 ---- S.A.N.A.E. AWS
89005 -7420 -975 1440 0 0 ---- KOTTAS ARGOS ID 3314
89009 -9000 0 2835 0 0 T-T- AMUNDSEN-SCOTT
+89011 -7136 -1002 574 572 0 ---- SOERASEN
89013 -8277 -1305 1968 0 0 ---- BALDRICK AWS
89014 -7305 -1338 497 0 0 ---- NORDENSKIOLD BASE
89016 -7309 -1315 363 0 0 ---- WASA EP5
@@ -12349,6 +12369,7 @@
89022 -7544 -2622 0 30 0 --T- HALLEY
89034 -7787 -3461 256 0 0 ---- BASE BELGRANO II
89042 -6072 -4560 6 0 0 ---- SIGNY ISLAND
+89047 -8044 -4443 105 103 0 ---- FILCHNER
89049 -8567 -4638 1860 0 0 ---- AGO-2
89050 -6220 -5889 15 14 0 ---- BELLINGSHAUSEN
89052 -6217 -5847 2 3 0 ---- ARCTOWSKI
@@ -12612,11 +12633,11 @@
91565 -1945 16922 8 0 0 ---- WHITE GRASS AIRPORT
91568 -2023 16977 7 6 0 ---- ANEITYUM
91570 -1848 16309 4 4 0 ---- ILE SURPRISE
-91571 -2046 16422 0 595 0 ---- THIEBAGI RADAR
+91571 -2046 16422 0 595 0 ---- TIEBAGHI RADAR
91573 -1972 16366 84 93 0 ---- ILE ART (BELEP)
91574 -1997 15847 6 4 0 ---- ILE LOOP (CHESTERFIELD)
91577 -2056 16428 19 25 0 ---- KOUMAC (NLLE-CALEDONIE)
-91579 -2064 16657 9 16 0 ---- OULOUP (ILE OUVEA)
+91579 -2064 16657 9 7 0 ---- OULOUP (ILE OUVEA)
91582 -2078 16724 32 29 0 ---- OUANAHAM (ILE LIFOU)
91583 -2093 16533 14 14 0 ---- POINDIMIE (NLLE-CALEDONIE)
91587 -2148 16804 48 42 0 ---- LA ROCHE (ILE MARE)
@@ -12727,7 +12748,7 @@
91945 -1991 -14494 3 2 0 ---- HEREHERETUE
91948 -2313 -13497 89 91 0 T--- MANGAREVA
91952 -2182 -13880 3 2 0 ---- MURUROA *
-91954 -2337 -14953 4 3 0 ---- TUBUAI AERO
+91954 -2337 -14953 6 5 0 ---- TUBUAI AERO
91958 -2762 -14433 2 2 0 ---T RAPA
91960 -2507 -13010 265 264 0 ---- PITCAIRN
91961 -2507 -13010 265 264 0 ---- PITCAIRN ISLAND AWS A
diff --git a/src/Thermo/MTHERMOGRIDDef b/src/Thermo/MTHERMOGRIDDef
index 511fe49..90ae603 100644
--- a/src/Thermo/MTHERMOGRIDDef
+++ b/src/Thermo/MTHERMOGRIDDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
SOLID; SOLID
diff --git a/src/Thermo/MThermoDef b/src/Thermo/MThermoDef
index 173fc07..a83c9a3 100644
--- a/src/Thermo/MThermoDef
+++ b/src/Thermo/MThermoDef
@@ -1,7 +1,7 @@
PARAMSHARE ; ParamShare; PARAMSHARE
{
COLOUR {
- %include MagicsColors.h
+ %include MagicsColours.txt
}
STYLE {
diff --git a/src/libMetview/MvObs.cc b/src/libMetview/MvObs.cc
index e4a3f05..f093c97 100644
--- a/src/libMetview/MvObs.cc
+++ b/src/libMetview/MvObs.cc
@@ -2876,6 +2876,7 @@ MvObs::OperaRadarImage( )
throw MvException( "MvObs::OperaRadarImage: unable to get Row Number element!" );
}
//-- "FortranIndex": 0,1,2,...
+ // the following line assigns an unused variable, but the line is still essential
int rowRepeatCount = (*this)[firstRowStartIndex]; //-- operator[i], i=1,2,3,...
long currentDescr = currentDescriptor();
if( currentDescr != 31002 )
diff --git a/src/libMetview/MvRequest.cc b/src/libMetview/MvRequest.cc
index 891d661..f73568d 100644
--- a/src/libMetview/MvRequest.cc
+++ b/src/libMetview/MvRequest.cc
@@ -940,15 +940,30 @@ bool MvRequest::getPath(const char* par,string &resPath,bool canBeEmpty,string &
if(callerIcon)
{
string callerDir(callerIcon);
- char *mvudir=getenv("METVIEW_USER_DIRECTORY");
- if(mvudir)
+
+ // special case: if callerDir is a path with "Process@" in it, then it
+ // very probably means that this was run from a macro - in this case, we can't
+ // use the returned path (because it's invalid) and instead a relative path should be
+ // considred relative to where the macro is run from; so in this case we would simply
+ // remove the path.
+
+ if(callerDir.find("Process@") != string::npos)
{
- callerDir=string(mvudir) + "/" + callerDir;
- }
- string::size_type pos=callerDir.find_last_of("/");
- if(pos != string::npos)
+ // yes, it's called from Macro - files are relative to current dir
+ callerDir = ".";
+ }
+ else
{
- callerDir=callerDir.substr(0,pos);
+ char *mvudir=getenv("METVIEW_USER_DIRECTORY");
+ if(mvudir)
+ {
+ callerDir=string(mvudir) + "/" + callerDir;
+ }
+ string::size_type pos=callerDir.find_last_of("/");
+ if(pos != string::npos)
+ {
+ callerDir=callerDir.substr(0,pos);
+ }
}
resPath=callerDir + "/" + resPath;
diff --git a/src/libMetview/MvScanFileType.cc b/src/libMetview/MvScanFileType.cc
index a18b511..845c0f9 100644
--- a/src/libMetview/MvScanFileType.cc
+++ b/src/libMetview/MvScanFileType.cc
@@ -94,7 +94,7 @@ static eFileType SearchMarsParserBreakers( const char* fileName )
char buf;
int chr;
- int readCount = fread(&buf, 1, 1, f.f_);
+ fread(&buf, 1, 1, f.f_);
chr = (int) buf;
for( int ci=0; ci<CHECKLEN; ++ci ) //-- look for "binary" chars
@@ -111,7 +111,7 @@ static eFileType SearchMarsParserBreakers( const char* fileName )
if( isNumbersOnly )
isNumbersOnly = isNumbersOnly && isValidForNumbersOnly(chr);
- readCount = fread(&buf, 1, 1, f.f_);
+ fread(&buf, 1, 1, f.f_);
chr = (int) buf;
}
diff --git a/src/libMvQtGui/MvQCheckBoxCombo.cc b/src/libMvQtGui/MvQCheckBoxCombo.cc
index 167eb6c..46e0f35 100644
--- a/src/libMvQtGui/MvQCheckBoxCombo.cc
+++ b/src/libMvQtGui/MvQCheckBoxCombo.cc
@@ -66,7 +66,7 @@ QWidget* MvQCheckBoxComboDelegate::createEditor(QWidget *parent,
void MvQCheckBoxComboDelegate::slotCheckBoxStateChanged(int checked)
{
- bool b=checked;
+// bool b=checked;
// qDebug() << b;
commmitAndCloseEditor();
diff --git a/src/libMvQtGui/MvQKeyDialog.cc b/src/libMvQtGui/MvQKeyDialog.cc
index 81b66a9..bd0ffe8 100644
--- a/src/libMvQtGui/MvQKeyDialog.cc
+++ b/src/libMvQtGui/MvQKeyDialog.cc
@@ -41,8 +41,6 @@
MvQKeyProfileDialog::MvQKeyProfileDialog(QString title,MvQKeyManager *manager,int currentRow,QWidget *parent) : QWidget(parent), manager_(manager)
{
- QLabel *label;
-
QVBoxLayout *layout=new QVBoxLayout;
setLayout(layout);
@@ -853,8 +851,6 @@ void MvQKeyImportPage::slotImport()
MvQKeyEditDialog::MvQKeyEditDialog(MvKey *key,QWidget *parent) : QDialog(parent), key_(key)
{
- QLabel *label;
-
setWindowTitle(tr("Edit key"));
QVBoxLayout *layout=new QVBoxLayout;
diff --git a/src/libMvQtGui/MvQKeyProfileTree.cc b/src/libMvQtGui/MvQKeyProfileTree.cc
index a3258f1..f8778c2 100644
--- a/src/libMvQtGui/MvQKeyProfileTree.cc
+++ b/src/libMvQtGui/MvQKeyProfileTree.cc
@@ -104,7 +104,6 @@ void MvQKeyProfileTree::slotMessageTreeContextMenu(const QPoint &position)
if(prof==0 || section >= static_cast<int>(prof->size()))
return;
- bool keyEditable=prof->at(section)->editable();
QList<QAction*> actions;
@@ -124,6 +123,7 @@ void MvQKeyProfileTree::slotMessageTreeContextMenu(const QPoint &position)
//Edit
#ifdef METVIEW_EXPERIMENTAL
+ bool keyEditable=prof->at(section)->editable();
QAction *actionEdit;
if(keyEditable)
{
diff --git a/src/libUtil/CMakeLists.txt b/src/libUtil/CMakeLists.txt
index 92983b4..16a4940 100644
--- a/src/libUtil/CMakeLists.txt
+++ b/src/libUtil/CMakeLists.txt
@@ -43,6 +43,11 @@ Types.hpp griddoc.hpp imagedoc.hpp proj_braz.hpp stypes.hpp
TableReader.h
Tokenizer.h)
+if (ENABLE_URL_DOWNLOAD)
+ list (APPEND libUtil_srcs MvNetwork.cc)
+endif()
+
+
#foreach( file ${_libUtil_srcs} )
# list( APPEND libUtil_srcs libUtil/${file} )
diff --git a/src/libUtil/Grib.cc b/src/libUtil/Grib.cc
index ef4a35c..243b919 100644
--- a/src/libUtil/Grib.cc
+++ b/src/libUtil/Grib.cc
@@ -1908,9 +1908,9 @@ void
GribData :: SetScale ( double vmin, double vmax, int nbits)
{
long scale;
- double x;
+ //double x;
- x = log10((vmax - vmin) / (pow(2.,(double)(nbits+1.))-1.)) / log10(2.);
+ //x = log10((vmax - vmin) / (pow(2.,(double)(nbits+1.))-1.)) / log10(2.);
scale = (long) floor((log10(((double)vmax-(double)vmin) / (pow(2.,(double)nbits+1.) -1.)) / log10(2.)) +2);
diff --git a/src/libUtil/MvAlmostObsoleteRequest.cc b/src/libUtil/MvAlmostObsoleteRequest.cc
index 8093f14..e4c5ef5 100644
--- a/src/libUtil/MvAlmostObsoleteRequest.cc
+++ b/src/libUtil/MvAlmostObsoleteRequest.cc
@@ -39,7 +39,7 @@ MvDataGen :: MvDataGen (svcid *i,request* r, const char* typ)
set_value (req,"PATH","%s", datafile);
const char* tmp;
- if (tmp = get_value (req, "_NAME", 0))
+ if ((tmp = get_value (req, "_NAME", 0)))
setElemName (tmp);
else
setElemName (datafile);
@@ -99,10 +99,10 @@ MvDataGen :: SendStatus (const char* st)
const char* tmp;
set_value (status, "STATUS", "%s", st);
- if (tmp = get_value (req, "_NAME", 0))
+ if ((tmp = get_value (req, "_NAME", 0)))
set_value (status, "NAME", "%s", tmp);
- if (tmp = get_value (req, "_ICON_CLASS", 0))
+ if ((tmp = get_value (req, "_ICON_CLASS", 0)))
set_value (status, "ICON_CLASS", "%s", tmp);
send_message (id->s, status);
@@ -150,12 +150,12 @@ MvDataVis :: MvDataVis (svcid *i,request* r)
unlink (tmpfile);
const char* tmp;
- if (tmp = get_value (req, "_LOT_NAME", 0))
+ if ((tmp = get_value (req, "_LOT_NAME", 0)))
setElemName (tmp);
else
setElemName (tmpfile);
- if (tmp = get_value (req, "_LOT_COUNT", 0))
+ if ((tmp = get_value (req, "_LOT_COUNT", 0)))
tasks = atoi (tmp);
// Build the reply request.
diff --git a/src/libUtil/MvNetwork.cc b/src/libUtil/MvNetwork.cc
new file mode 100644
index 0000000..d6f527b
--- /dev/null
+++ b/src/libUtil/MvNetwork.cc
@@ -0,0 +1,249 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <stdlib.h>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+#include "MvApplication.h"
+#include "MvNetwork.h"
+
+
+using std::cout;
+using std::endl;
+
+// 7.21.0
+#define MINCURLVERSIONFORWILDCARD 0x071500
+
+// 7.14.1
+#define MINCURLVERSIONFORPROXY 0x070E01
+
+// 7.19.4
+#define MINCURLVERSIONFORNOPROXY 0x071304
+
+
+// ----------------------------------------------------------------------------
+// MvNetworkData
+// Holds and manages the buffer to store data resulting from a network transfer
+// ----------------------------------------------------------------------------
+
+MvNetworkData::~MvNetworkData()
+{
+ if(buffer_)
+ free(buffer_);
+}
+
+void MvNetworkData::clear()
+{
+ buffer_=0;
+ pos_=0;
+ len_=0;
+}
+
+size_t MvNetworkData::add(char *ptr,size_t size)
+{
+ if(buffer_ == NULL)
+ {
+ pos_=0;
+ len_ = initialSize_;
+ buffer_ = static_cast<char*>(malloc(len_));
+ }
+
+ if(pos_ + size > len_)
+ {
+ while(pos_ + size > len_) {
+ len_ *= 2;
+ }
+
+ buffer_ =static_cast<char*>(realloc(buffer_,len_));
+ if(!buffer_)
+ {
+ //error_++;
+ return 0;
+ }
+ }
+
+ memcpy(buffer_ + pos_, ptr, size);
+ pos_ += size;
+
+ return size;
+}
+
+string MvNetworkData::toString()
+{
+ if(buffer_ && len_ >0 )
+ {
+ return string(buffer_ + '\0');
+ }
+ return string();
+}
+
+
+
+// ----------------------------------------------------------------------
+// MvNetwork
+// Handles the data request and writes the data to the requested location
+// ----------------------------------------------------------------------
+
+MvNetwork::MvNetwork()
+{
+ ch_=curl_easy_init();
+// curl_version_info_data *cvi = curl_version_info(CURLVERSION_NOW);
+
+ curl_easy_setopt(ch_,CURLOPT_HEADER,1);
+
+ curl_easy_setopt(ch_,CURLOPT_WRITEFUNCTION,MvNetwork::writeCb);
+ curl_easy_setopt(ch_,CURLOPT_WRITEDATA,this);
+
+ curl_easy_setopt(ch_,CURLOPT_HEADER,0);
+ curl_easy_setopt(ch_,CURLOPT_HEADERFUNCTION,MvNetwork::headerCb);
+ curl_easy_setopt(ch_,CURLOPT_HEADERDATA,this);
+
+ curl_easy_setopt(ch_,CURLOPT_FOLLOWLOCATION,1); // some WMS servers redirect URLs
+ curl_easy_setopt(ch_,CURLOPT_VERBOSE,1);
+
+
+ // long minVersionForWildcard = (7 << 16) | (21 << 8) | 0;
+// if (cvi->version_num >= minVersionForWildcard)
+ #if LIBCURL_VERSION_NUM >= MINCURLVERSIONFORWILDCARD
+ curl_easy_setopt(ch_,CURLOPT_WILDCARDMATCH,0); // don't try to match wildcard chars
+ #endif
+
+ setupProxy();
+}
+
+
+void MvNetwork::setupProxy()
+{
+
+ // get the Metview user preferences
+ MvRequest myPref = MvApplication::getExpandedPreferences();
+
+ bool use = false;
+ const char* useProxy = myPref("USE_NETWORK_PROXY");
+ if((useProxy != NULL))
+ use = ( strcmp(useProxy, "Yes") == 0 ||
+ strcmp(useProxy, "YES") == 0 ||
+ strcmp(useProxy, "yes") == 0 ) ? true : false;
+
+ if(use)
+ {
+#if LIBCURL_VERSION_NUM >= MINCURLVERSIONFORPROXY
+ const char* proxyUrl = myPref("PROXY_URL");
+ if (proxyUrl)
+ {
+ curl_easy_setopt(ch_, CURLOPT_PROXY, proxyUrl);
+ cout << "Using user proxy URL: " << proxyUrl << std::endl;
+ }
+#else
+ cout << "Curl version is not new enough to support CURLOPT_PROXY - proxy setting not applied." << std::endl;
+#endif
+
+ const char* proxyPort = myPref("PROXY_PORT");
+ if(proxyPort)
+ {
+ curl_easy_setopt(ch_, CURLOPT_PROXYPORT, atoi(proxyPort));
+ cout << "Using user proxy port: " << proxyPort << std::endl;
+ }
+
+
+#if LIBCURL_VERSION_NUM >= MINCURLVERSIONFORNOPROXY
+ const char* noProxy = myPref("NO_PROXY_FOR"); // comma-separated list
+ if(noProxy)
+ {
+ curl_easy_setopt(ch_, CURLOPT_NOPROXY, noProxy);
+ cout << "Using user no_proxy: " << noProxy << std::endl;
+ }
+#else
+ cout << "Curl version is not new enough to support CURLOPT_NOPROXY - no_proxy setting not applied." << std::endl;
+#endif
+ }
+}
+
+
+bool MvNetwork::get(const string& req, const string& outfile, const string mimeType, string &errorMsg)
+{
+ curl_easy_setopt(ch_,CURLOPT_URL,req.c_str());
+ outFile_=outFile_;
+
+ // perform the actual network transfer
+ CURLcode ret=curl_easy_perform(ch_);
+
+ if (ret != CURLE_OK)
+ {
+ errorMsg = curl_easy_strerror(ret);
+ return false;
+ }
+
+ cout << "data size " << data_.len_ << endl;
+
+ if (data_.len_ == 0)
+ {
+ errorMsg = "No bytes received.";
+ return false;
+ }
+
+ // get the response code
+ curl_easy_getinfo(ch_, CURLINFO_RESPONSE_CODE, &responseCode_);
+
+
+ // write the data buffer to a file
+ std::ofstream out;
+ out.open(outfile.c_str());
+
+ if(out.good())
+ {
+ out.write(data_.buffer_, data_.pos_);
+ out.close();
+ cout << "outfile " << outfile << endl;
+ }
+ else
+ {
+ errorMsg = "Could not open file for writing: " + outfile;
+ return false;
+ }
+
+
+ // in case CURL did anything to change the URL...
+ const char *usedUrl;
+ curl_easy_getinfo(ch_, CURLINFO_EFFECTIVE_URL, &usedUrl);
+ cout << "Used URL: " << usedUrl << endl;
+
+ data_.clear(); // clear the data buffer
+ return true;
+}
+
+size_t MvNetwork::writeCb(char *ptr,size_t size,size_t nmemb,void *userdata)
+{
+ //cout << "writeCB " << size*nmemb << endl;
+ if(!userdata)
+ return 0;
+
+ if(MvNetwork* obj=static_cast<MvNetwork*>(userdata))
+ {
+ return obj->data_.add(ptr,size*nmemb);
+ }
+
+ return 0;
+}
+
+size_t MvNetwork::headerCb(char *ptr,size_t size,size_t nmemb,void *userdata)
+{
+ if(!userdata)
+ return 0;
+
+ if(MvNetwork* obj=static_cast<MvNetwork*>(userdata))
+ {
+ return obj->header_.add(ptr,size*nmemb);
+ }
+
+ return 0;
+}
+
diff --git a/src/libUtil/MvNetwork.h b/src/libUtil/MvNetwork.h
new file mode 100644
index 0000000..f562b7c
--- /dev/null
+++ b/src/libUtil/MvNetwork.h
@@ -0,0 +1,69 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MVNETWORK_H
+#define MVNETWORK_H
+
+
+#include <string.h>
+#include <curl/curl.h> // needed because we use the CURL type in MvNetwork
+using std::string;
+
+
+// ----------------------------------------------------------------------------
+// MvNetworkData
+// Holds and manages the buffer to store data resulting from a network transfer
+// ----------------------------------------------------------------------------
+
+class MvNetworkData
+{
+public:
+ MvNetworkData() : buffer_(0),pos_(0),len_(0), initialSize_(10240) {}
+ ~MvNetworkData();
+
+ void clear();
+
+ size_t add(char *ptr,size_t size);
+ string toString();
+
+ char* buffer_;
+ size_t pos_;
+ size_t len_;
+ const size_t initialSize_;
+};
+
+
+
+// ----------------------------------------------------------------------
+// MvNetwork
+// Handles the data request and writes the data to the requested location
+// ----------------------------------------------------------------------
+
+class MvNetwork
+{
+public:
+ MvNetwork();
+ bool get(const string&, const string&, const string, string&);
+ string header() {return header_.toString();}
+ long responseCode() {return responseCode_;}
+
+protected:
+ void setupProxy();
+ static size_t writeCb(char *ptr,size_t size,size_t nmemb,void *userdata);
+ static size_t headerCb(char *ptr,size_t size,size_t nmemb,void *userdata);
+
+ CURL *ch_;
+ string outFile_;
+ MvNetworkData data_;
+ MvNetworkData header_;
+ long responseCode_;
+};
+
+
+#endif //MVNETWORK_H
diff --git a/src/libUtil/MvOdb.cc b/src/libUtil/MvOdb.cc
index b3e280f..af0ec5e 100644
--- a/src/libUtil/MvOdb.cc
+++ b/src/libUtil/MvOdb.cc
@@ -1033,7 +1033,6 @@ int MvOldOdb::findColumn(string cname)
{
readMetaData();
- int colPos=-1;
for(int i=0; i < static_cast<int>(column_.size()) ; i++)
{
if(cname == column_[i]->name())
diff --git a/src/libUtil/TableReader.cc b/src/libUtil/TableReader.cc
index 48e2e11..ad27966 100644
--- a/src/libUtil/TableReader.cc
+++ b/src/libUtil/TableReader.cc
@@ -1,33 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-/******************************* LICENSE *******************************
-
-
- Copyright 2011 European Centre for Medium-Range Weather Forecasts (ECMWF)
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
- ******************************* LICENSE *******************************/
-
-
#include "TableReader.h"
diff --git a/src/libUtil/TableReader.h b/src/libUtil/TableReader.h
index 002c232..f999c10 100644
--- a/src/libUtil/TableReader.h
+++ b/src/libUtil/TableReader.h
@@ -1,32 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-/******************************* LICENSE *******************************
-
-
- Copyright 2011 European Centre for Medium-Range Weather Forecasts (ECMWF)
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
- ******************************* LICENSE *******************************/
-
#ifndef TableReader_H
#define TableReader_H
diff --git a/src/libUtil/proj_braz.cc b/src/libUtil/proj_braz.cc
index 8a1b358..9dec7ec 100644
--- a/src/libUtil/proj_braz.cc
+++ b/src/libUtil/proj_braz.cc
@@ -23,14 +23,15 @@
static Datum *D;
static SProjection *Sp1,*Sp2;
static GeneralProjection *Gp1,*Gp2;
-static CylindEquid *Ce1,*Ce2;
-static PolarStereo *Ps1,*Ps2;
+//static CylindEquid *Ce1,*Ce2;
+//static PolarStereo *Ps1,*Ps2;
static Satellite *Sat1,*Sat2;
static SImage *Imi,*Imo;
static BBox *B1,*B2;
static CPoint *P1,*P2,*P3,*P4;
+static int XXX = 0;
-static char *txd,*tx1,*tx2,*tx3,*tx4,tmp1[M_NAME_MAX],tmp2[M_NAME_MAX];
+static char *tx1,*tx2,*tx3,*tx4;
Real pWidth(BBox *b)
{
@@ -482,7 +483,6 @@ void pimin1_()
void pimind_(int i1, char *tx, Real Pdx, Real Pdy, Real Pdz, double Prd, double Pflt)
{
- int i;
short Pcode;
/* Define and Initialize Datum and Projection */
@@ -895,7 +895,7 @@ void ChangeLL(SProjection *Sp, double *lon1, double *lat1)
z2,
d,lat2, /* Ancillary variable */
lon2;
- Real Pdx,Pdy,Pdz,tmp;
+ Real Pdx,Pdy,Pdz;
double Prd,Pflt;
Pdx = Sp->Pdx;
@@ -1199,17 +1199,17 @@ CPoint pPolLL2PC (SProjection *Sp, CPoint ptll)
t,ro,aux1,aux2,aux3,ptllx,ptlly;
short GPhemis;
double Pflt,Prd;
- double GPlat0,GPlon0,GPstlat1,GPstlat2;
+ double GPlon0;
CPoint ppc;
ptllx = (double)ptll.X;
ptlly = (double)ptll.Y;
GPhemis = Sp->Proj.Gp->GPhemis;
- GPlat0 = Sp->Proj.Gp->GPlat0;
+ //GPlat0 = Sp->Proj.Gp->GPlat0;
GPlon0 = Sp->Proj.Gp->GPlon0;
- GPstlat1 = Sp->Proj.Gp->GPstlat1;
- GPstlat2 = Sp->Proj.Gp->GPstlat2;
+ //GPstlat1 = Sp->Proj.Gp->GPstlat1;
+ //GPstlat2 = Sp->Proj.Gp->GPstlat2;
Pflt = Sp->Pflt;
Prd = Sp->Prd;
@@ -1255,7 +1255,7 @@ CPoint pPolPC2LL (SProjection *Sp, CPoint ptpc)
lon0, /* auxilliary origin longitude */
ro,t,xx,aux1,aux2,aux3,aux4,aux5,ptpcx,ptpcy,px,py;
short GPhemis;
- double GPlat0,GPlon0,GPstlat1,GPstlat2;
+ double GPlon0;
double Pflt,Prd;
CPoint ppc;
@@ -1263,10 +1263,10 @@ CPoint pPolPC2LL (SProjection *Sp, CPoint ptpc)
py = (double)ptpc.Y;
GPhemis = Sp->Proj.Gp->GPhemis;
- GPlat0 = Sp->Proj.Gp->GPlat0;
+ //GPlat0 = Sp->Proj.Gp->GPlat0;
GPlon0 = Sp->Proj.Gp->GPlon0;
- GPstlat1 = Sp->Proj.Gp->GPstlat1;
- GPstlat2 = Sp->Proj.Gp->GPstlat2;
+ //GPstlat1 = Sp->Proj.Gp->GPstlat1;
+ //GPstlat2 = Sp->Proj.Gp->GPstlat2;
Pflt = Sp->Pflt;
Prd = Sp->Prd;
@@ -1347,19 +1347,19 @@ CPoint pMerLL2PC (SProjection *Sp, CPoint ptll)
double equad, /*Squared eccentricity */
aux1, /* Ancillary variables */
aux2,aux3,aux4,aux5,aux6,ptllx,ptlly;
- short GPhemis;
+ //short GPhemis;
double Pflt,Prd;
- double GPlat0,GPlon0,GPstlat1,GPstlat2;
+ double GPlon0,GPstlat1;
CPoint ppc;
ptllx = (double)ptll.X;
ptlly = (double)ptll.Y;
- GPhemis = Sp->Proj.Gp->GPhemis;
- GPlat0 = Sp->Proj.Gp->GPlat0;
+ //GPhemis = Sp->Proj.Gp->GPhemis;
+ //GPlat0 = Sp->Proj.Gp->GPlat0;
GPlon0 = Sp->Proj.Gp->GPlon0;
GPstlat1 = Sp->Proj.Gp->GPstlat1;
- GPstlat2 = Sp->Proj.Gp->GPstlat2;
+ //GPstlat2 = Sp->Proj.Gp->GPstlat2;
Pflt = Sp->Pflt;
Prd = Sp->Prd;
@@ -1390,19 +1390,19 @@ CPoint pMerPC2LL (SProjection *Sp, CPoint ptpc)
double equad, /*Squared eccentricity */
t, /* Ancillary variables */
xx,aux1,aux2,aux3,aux4,aux5,ptpcx,ptpcy;
- short GPhemis;
- double GPlat0,GPlon0,GPstlat1,GPstlat2;
+ //short GPhemis;
+ double GPlon0,GPstlat1;
double Pflt,Prd;
CPoint ppc;
ptpcx = (double)ptpc.X;
ptpcy = (double)ptpc.Y;
- GPhemis = Sp->Proj.Gp->GPhemis;
- GPlat0 = Sp->Proj.Gp->GPlat0;
+ //GPhemis = Sp->Proj.Gp->GPhemis;
+ //GPlat0 = Sp->Proj.Gp->GPlat0;
GPlon0 = Sp->Proj.Gp->GPlon0;
GPstlat1 = Sp->Proj.Gp->GPstlat1;
- GPstlat2 = Sp->Proj.Gp->GPstlat2;
+ //GPstlat2 = Sp->Proj.Gp->GPstlat2;
Pflt = Sp->Pflt;
Prd = Sp->Prd;
diff --git a/src/libUtil/proj_braz.hpp b/src/libUtil/proj_braz.hpp
index 5f78d0d..8fb05f2 100644
--- a/src/libUtil/proj_braz.hpp
+++ b/src/libUtil/proj_braz.hpp
@@ -254,7 +254,7 @@ typedef struct SProjection
rx, /* / horizontal resolution in meters */
ry; /* vertical resolution in meters */
} ImageDoc;
- static int XXX = 0;
+
typedef struct
{
SProjection* IProj; /* pointer to projection */
diff --git a/src/uPlot/MagPlusBatchService.cc b/src/uPlot/MagPlusBatchService.cc
index a479422..47e9d68 100644
--- a/src/uPlot/MagPlusBatchService.cc
+++ b/src/uPlot/MagPlusBatchService.cc
@@ -26,7 +26,7 @@ MagPlusBatchService::CallMagPlus ( MvRequest& in )
{
std::string errorMsg("Could not produce plot: ");
errorMsg += e.what();
- PlotMod::Instance().MetviewError ("errorMsg","Error");
+ PlotMod::Instance().MetviewError (errorMsg, "Error");
}
//thread_.render(in,magplus_);
diff --git a/test/data/fc_data.grib b/test/data/fc_data.grib
new file mode 100644
index 0000000..5354bae
Binary files /dev/null and b/test/data/fc_data.grib differ
diff --git a/test/data/gpt_to_grib_exp_mean_reference.grb b/test/data/gpt_to_grib_exp_mean_reference.grb
new file mode 100644
index 0000000..b7967df
Binary files /dev/null and b/test/data/gpt_to_grib_exp_mean_reference.grb differ
diff --git a/test/data/gpt_to_grib_exp_sum_reference.grb b/test/data/gpt_to_grib_exp_sum_reference.grb
new file mode 100644
index 0000000..8e45d5a
Binary files /dev/null and b/test/data/gpt_to_grib_exp_sum_reference.grb differ
diff --git a/test/data/gpt_to_grib_nearest_count_reference.grb b/test/data/gpt_to_grib_nearest_count_reference.grb
new file mode 100644
index 0000000..fe54020
Binary files /dev/null and b/test/data/gpt_to_grib_nearest_count_reference.grb differ
diff --git a/test/data/gpt_to_grib_nearest_mean_reference.grb b/test/data/gpt_to_grib_nearest_mean_reference.grb
new file mode 100644
index 0000000..649d715
Binary files /dev/null and b/test/data/gpt_to_grib_nearest_mean_reference.grb differ
diff --git a/test/data/gpt_to_grib_nearest_sum_reference.grb b/test/data/gpt_to_grib_nearest_sum_reference.grb
new file mode 100644
index 0000000..2b8d368
Binary files /dev/null and b/test/data/gpt_to_grib_nearest_sum_reference.grb differ
diff --git a/test/data/gpt_to_grib_reciprocal_reference.grb b/test/data/gpt_to_grib_reciprocal_reference.grb
new file mode 100644
index 0000000..1a1e8e3
Binary files /dev/null and b/test/data/gpt_to_grib_reciprocal_reference.grb differ
diff --git a/test/data/t1000_LL_7x7.grb b/test/data/t1000_LL_7x7.grb
new file mode 100644
index 0000000..bbda7ab
Binary files /dev/null and b/test/data/t1000_LL_7x7.grb differ
diff --git a/test/macros/CMakeLists.txt b/test/macros/CMakeLists.txt
index 1b8c6d6..d7c2e76 100644
--- a/test/macros/CMakeLists.txt
+++ b/test/macros/CMakeLists.txt
@@ -34,6 +34,10 @@ if(ENABLE_PLOTTING)
RESOURCES set_output.mv ../data/z500.grb)
endif()
+
+metview_macro_test(MACRO grib_dates.mv
+ RESOURCES ../data/fc_data.grib)
+
metview_macro_test(MACRO grib_nearest_gridpoint.mv
RESOURCES ../data/t1000_LL_1x1.grb
../data/t1000_LL_1x1_subarea.grb
@@ -51,9 +55,22 @@ metview_macro_test(MACRO interpolation_rgg_to_ll.mv
metview_macro_test(MACRO grib_to_gpt.mv
RESOURCES ../data/t1000_LL_2x2.grb)
+metview_macro_test(MACRO gpt_to_grib_core.mv
+ RESOURCES ../data/bufr_obs_filter_reference.gpt
+ ../data/gpt_to_grib_reciprocal_reference.grb
+ ../data/gpt_to_grib_exp_mean_reference.grb
+ ../data/gpt_to_grib_exp_sum_reference.grb)
+
metview_macro_test(MACRO gpt_to_grib_with_template.mv
RESOURCES ../data/t1000_LL_2x2.grb ../data/10U_GG.grb)
+metview_macro_test(MACRO gpt_to_grib_nearest.mv
+ RESOURCES ../data/t1000_LL_7x7.grb
+ ../data/example_XYLDTZ.geo
+ ../data/gpt_to_grib_nearest_sum_reference.grb
+ ../data/gpt_to_grib_nearest_mean_reference.grb
+ ../data/gpt_to_grib_nearest_count_reference.grb)
+
#metview_macro_test(MACRO interpolation_gg_to_subarea.mv
# RESOURCES ../data/10U_GG.grb)
diff --git a/test/macros/HelloWorld.mv b/test/macros/HelloWorld.mv
index 02e41d6..7602120 100644
--- a/test/macros/HelloWorld.mv
+++ b/test/macros/HelloWorld.mv
@@ -17,7 +17,8 @@ data = read("z500.grb")
set_output("HelloWorld")
-plot(data)
+# we add an empty mcont() definition to bypass any custom defaults the user has
+plot(data, mcont())
wait_for_output()
check_if_expected_output_files_exist()
diff --git a/test/macros/gpt_to_grib_core.mv b/test/macros/gpt_to_grib_core.mv
new file mode 100644
index 0000000..9548681
--- /dev/null
+++ b/test/macros/gpt_to_grib_core.mv
@@ -0,0 +1,59 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2016 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+
+# read the source geopoints
+gpt = read('bufr_obs_filter_reference.gpt')
+
+
+# test the 'core' gpt-grib modes
+check_gpt_to_grib(gpt, "reciprocal", "gpt_to_grib_reciprocal_reference.grb")
+check_gpt_to_grib(gpt, "exponential_mean", "gpt_to_grib_exp_mean_reference.grb")
+check_gpt_to_grib(gpt, "exponential_sum", "gpt_to_grib_exp_sum_reference.grb")
+
+
+function check_gpt_to_grib(gpt:geopoints, method:string, ref_result:string)
+
+ grib = geo_to_grib
+ (
+ interpolation_method : method,
+ grid : [1.8,1.8],
+ tolerance : 1,
+ geopoints : gpt
+ )
+
+ ref = read(ref_result)
+
+ compare_vectors("latitudes", latitudes(ref), latitudes(grib))
+ compare_vectors("longitudes", longitudes(ref), longitudes(grib))
+ compare_vectors("values", values(ref), values(grib))
+
+end check_gpt_to_grib
+
+
+
+
+# compare a pair of vectors (e.g. 'values') and fail if the difference is
+# a large enough proportion of the max value of the original data
+
+function compare_vectors(vname: string, v1:vector, v2:vector)
+
+ maxdiff = maxvalue(abs(v1-v2))
+ maxdiff_as_proportion_of_max = maxdiff / maxvalue(abs(v1))
+ print(vname, ' maxdiff: ', maxdiff, ' prop: ', maxdiff_as_proportion_of_max)
+
+ if maxdiff > 0.001 then # more then 0.1 percent difference
+ msg = vname & " has proportional max difference of " & maxdiff_as_proportion_of_max
+ fail(msg)
+ end if
+
+end compare_vectors
+
diff --git a/test/macros/gpt_to_grib_nearest.mv b/test/macros/gpt_to_grib_nearest.mv
new file mode 100644
index 0000000..309352e
--- /dev/null
+++ b/test/macros/gpt_to_grib_nearest.mv
@@ -0,0 +1,74 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2016 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+
+# read the source geopoints
+gpt = read('example_XYLDTZ.geo')
+
+
+# read the GRIB whose grid we will use as a template for the result
+template_grib = read('t1000_LL_7x7.grb')
+
+
+check_gpt_to_grib(gpt, template_grib, "nearest_gridpoint_sum", "gpt_to_grib_nearest_sum_reference.grb")
+check_gpt_to_grib(gpt, template_grib, "nearest_gridpoint_mean", "gpt_to_grib_nearest_mean_reference.grb")
+
+
+gpt_c = read('bufr_obs_filter_reference.gpt')
+template_c = read('gpt_to_grib_exp_mean_reference.grb')
+check_gpt_to_grib(gpt_c, template_c, "nearest_gridpoint_count", "gpt_to_grib_nearest_count_reference.grb")
+
+
+
+function check_gpt_to_grib(gpt:geopoints, template_grib:fieldset, method:string, ref_result:string)
+
+ print('Checking interpolation method ', method)
+
+ grib = geo_to_grib
+ (
+ interpolation_method : method,
+ geopoints : gpt,
+ grid_definition_mode : "grib",
+ template_grib : template_grib
+ )
+
+ # space-saving - bitmap out all the zero values
+ #grib = bitmap(grib, 0)
+ #write(ref_result, grib)
+
+
+ ref = read(ref_result)
+ ref = nobitmap(ref, 0)
+
+ compare_vectors("latitudes", latitudes(ref), latitudes(grib))
+ compare_vectors("longitudes", longitudes(ref), longitudes(grib))
+ compare_vectors("values", values(ref), values(grib))
+
+end check_gpt_to_grib
+
+
+
+# compare a pair of vectors (e.g. 'values') and fail if the difference is
+# a large enough proportion of the max value of the original data
+
+function compare_vectors(vname: string, v1:vector, v2:vector)
+
+ maxdiff = maxvalue(abs(v1-v2))
+ maxdiff_as_proportion_of_max = maxdiff / maxvalue(abs(v1))
+ print(vname, ' maxdiff: ', maxdiff, ' prop: ', maxdiff_as_proportion_of_max)
+
+ if maxdiff > 0.001 then # more then 0.1 percent difference
+ msg = vname & " has proportional max difference of " & maxdiff_as_proportion_of_max
+ fail(msg)
+ end if
+
+end compare_vectors
+
diff --git a/test/macros/grib_dates.mv b/test/macros/grib_dates.mv
new file mode 100644
index 0000000..56f7035
--- /dev/null
+++ b/test/macros/grib_dates.mv
@@ -0,0 +1,54 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2016 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+
+# read the original data file
+data = read('fc_data.grib')
+bdate = base_date(data)
+vdate = valid_date(data)
+
+# these are what the results should be
+correct_bdate = [2016-04-15 12:00:00, 2016-04-15 12:00:00, 2016-04-15 12:00:00, 2016-04-15 12:00:00]
+correct_vdate = [2016-04-15 12:00:00, 2016-04-15 18:00:00, 2016-04-16 00:00:00, 2016-04-20 12:00:00]
+
+# check whether the computed results are correct - note that we can't just say
+# "if bdate <>correct_bdate" because of how these operators work on lists
+if 0 in (bdate = correct_bdate) then
+ print('base dates are not the same:')
+ print('reference: ', correct_bdate)
+ print('computed : ', bdate)
+ fail()
+end if
+
+if 0 in (vdate = correct_vdate) then
+ print('valid dates are not the same:')
+ print('reference: ', correct_vdate)
+ print('computed : ', vdate)
+ fail()
+end if
+
+
+# quick check to make sure that we return single dates if given single fields
+bdate1 = base_date(data[1])
+if (type(bdate1) <> 'date' or (bdate1 <> correct_bdate[1])) then
+ print('single base date is not the same:')
+ print('reference: ', correct_bdate[1])
+ print('computed : ', bdate1)
+ fail()
+end if
+
+vdate1 = valid_date(data[1])
+if (type(vdate1) <> 'date' or (vdate1 <> correct_vdate[1])) then
+ print('single valid date is not the same:')
+ print('reference: ', correct_vdate[1])
+ print('computed : ', vdate1)
+ fail()
+end if
diff --git a/test/macros/layoutx3.mv b/test/macros/layoutx3.mv
index c965bbf..e79eefb 100644
--- a/test/macros/layoutx3.mv
+++ b/test/macros/layoutx3.mv
@@ -56,9 +56,10 @@ dw = plot_superpage
)
-plot (dw[1], data)
-plot (dw[2], data*10)
-plot (dw[3], data*20)
+# we add an empty mcont() definition to bypass any custom defaults the user has
+plot (dw[1], data, mcont())
+plot (dw[2], data*10, mcont())
+plot (dw[3], data*20, mcont())
wait_for_output()
check_if_expected_output_files_exist()
diff --git a/test/macros/plot_coast_order.mv b/test/macros/plot_coast_order.mv
new file mode 100644
index 0000000..810e2cc
--- /dev/null
+++ b/test/macros/plot_coast_order.mv
@@ -0,0 +1 @@
+#Metview Macro
\ No newline at end of file
diff --git a/test/macros/set_output.mv b/test/macros/set_output.mv
index 8fc24dd..d95c484 100644
--- a/test/macros/set_output.mv
+++ b/test/macros/set_output.mv
@@ -22,9 +22,7 @@ function set_output(namex)
if mode = "batch" then
out = ps_output(
- output_name : namex,
- output_ps_scale : 0.5,
- OUTPUT_PS_COLOUR_MODEL : "RGB"
+ output_name : namex
)
svg = svg_output(
output_name : namex
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/metview.git
More information about the debian-science-commits
mailing list