[metview] 75/97: Metview-4.5.6-Source
Alastair McKinstry
mckinstry at moszumanska.debian.org
Tue Sep 1 09:18:55 UTC 2015
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to branch master
in repository metview.
commit bab47077e2562cb33189e341459892697ccd6f0a
Author: Alastair McKinstry <mckinstry at debian.org>
Date: Mon Jul 20 02:09:34 2015 +0100
Metview-4.5.6-Source
---
CMakeLists.txt | 40 +-
VERSION.cmake | 2 +-
cmake/VERSION.cmake | 4 +-
cmake/contrib/FindFFTW.cmake | 124 +
cmake/ecbuild_add_library.cmake | 7 -
cmake/ecbuild_add_option.cmake | 1 +
cmake/ecbuild_add_test.cmake | 53 +-
cmake/ecbuild_check_compiler.cmake | 16 +
cmake/ecbuild_declare_project.cmake | 38 +-
cmake/ecbuild_define_options.cmake | 2 +-
cmake/ecbuild_get_test_data.cmake | 160 +-
cmake/ecbuild_install_package.cmake | 2 +-
cmake/ecbuild_list_macros.cmake | 57 +-
cmake/ecbuild_system.cmake | 2 +-
cmake/ecbuild_use_package.cmake | 5 +-
cmake/project-config.cmake.in | 9 +
contrib/CMakeLists.txt | 17 +-
contrib/ExampleDataAccess/CMakeLists.txt | 41 +-
scripts/CMakeLists.txt | 50 +-
scripts/CONFIG.site.in | 2 +-
scripts/metview_base | 30 +-
scripts/metview_help | 2 +-
scripts/mv_scm_run | 5 +
.../Drawers/Data Access/.EcRegrid Mars Retrieval | 5 -
.../Drawers/Data Access/EcRegrid Mars Retrieval | 3 -
.../Drawers/Filters/.EcRegrid GRIB Filter | 5 -
.../Drawers/Filters/EcRegrid GRIB Filter | 2 -
share/metview/etc/CMakeLists.txt | 3 +-
share/metview/etc/ContRules | 2 +
share/metview/etc/MARS_webapi | 6 +-
share/metview/etc/MBOXPLOTDef | 205 ++
share/metview/etc/MBOXPLOTRules | 96 +
share/metview/etc/MCONTDef | 5 +
share/metview/etc/MCONTRules | 5 +-
share/metview/etc/MLEGENDDef | 6 +
share/metview/etc/MLEGENDRules | 3 +
share/metview/etc/MarsRules | 5 +-
share/metview/etc/ObjectList | 68 +-
share/metview/etc/PageFrameDef | 4 +-
share/metview/etc/PageFrameRules | 9 +
share/metview/etc/StationDef | 6 +
share/metview/etc/ecmwf.def | 34 +-
share/metview/etc/mars.chk | 5 +-
share/metview/etc/marsdb.webapi.cfg | 14 +
share/metview/etc/obsgroups.def | 2 +-
share/metview/etc/reportypes.def | 4 +
share/metview/etc/rt_by_obsgroup.chk | 8 +-
share/metview/etc/tigge.def | 27 +
share/metview/etc/uPlotTable | 102 +-
share/metview/icons/CMakeLists.txt | 2 +-
share/metview/icons/MBOXPLOT.xpm | 204 ++
share/metview/icons/MTHERMOGRID.xpm | 41 -
share/metview/icons_mv5/CMakeLists.txt | 2 +-
share/metview/icons_mv5/MBOXPLOT.svg | 528 ++++
share/metview/icons_mv5/MTHERMOGRID.xpm | 41 -
src/DebugTools/MvProcNode.cc | 2 +-
src/Desktop/MvQRequestPanelWidget.cc | 12 +-
src/Desktop/RequestPanel.cc | 14 +
src/Macro/compute.cc | 6 +-
src/Macro/value.cc | 25 +-
src/Reprojection/ReprojectService.cc | 175 +-
src/Stations/Station.cc | 176 +-
src/Stations/stat.fmt | 2925 ++++++++++----------
src/StdAppManager/InputVisualiserDef | 7 +
src/StdAppManager/InputVisualiserRules | 18 +
src/StdAppManager/NetcdfPlusDef | 6 +
src/StdAppManager/ObjectSpec.StdAppManager | 2 +-
src/XSection/Average.cc | 6 +-
src/XSection/Average.h | 2 +-
src/XSection/CrossS.cc | 51 +-
src/XSection/CrossS.h | 2 +-
src/XSection/MXSectionCommonDef | 6 +
src/XSection/MXSectionViewDef | 4 +-
src/XSection/MvXsectFrame.cc | 97 +-
src/XSection/MvXsectFrame.h | 24 +-
src/XSection/Vprofile.cc | 2 +-
src/XSection/Vprofile.h | 2 +-
src/XSection/Xsect.cc | 11 +-
src/XSection/Xsect.h | 4 +-
src/libMars/CMakeLists.txt | 6 +-
src/libMars/MARS/cachebase.c | 815 ------
src/libMars/MARS/cacheserver.c | 32 -
src/libMars/MARS/event.c | 1206 --------
src/libMars/MARS/llmatrix.c | 274 --
src/libMars/MARS/marssvc.c | 312 ---
src/libMars/MARS/odb-iain.cc | 294 --
src/libMars/MARS/webbase.c | 613 ----
src/libMars/MARS/xdropsvc.c | 60 -
src/libMars/account.c | 1 -
src/libMars/api.c | 1 -
src/libMars/api.h | 1 -
src/libMars/apibase.c | 1 -
src/libMars/archive.c | 1 -
src/libMars/authenticate.c | 1 -
src/libMars/base.c | 1 -
src/libMars/base.h | 1 -
src/libMars/bufr.c | 1 -
src/libMars/bufr.h | 1 -
src/libMars/calc.c | 1 -
src/libMars/check.c | 1 -
src/libMars/control.c | 1 -
src/libMars/control.h | 1 -
src/libMars/cos.c | 1 -
src/libMars/cos.h | 1 -
src/libMars/dhsbase.c | 1 -
src/libMars/ecaccess.c | 1 -
src/libMars/ecaccess.h | 1 -
src/libMars/environ.c | 1 -
src/libMars/expand.c | 1 -
src/libMars/externf.c | 1 -
src/libMars/field.c | 1 -
src/libMars/field.h | 1 -
src/libMars/filebase.c | 1 -
src/libMars/files.c | 1 -
src/libMars/flatfilebase.c | 1 -
src/libMars/free.c | 1 -
src/libMars/globals.h | 1 -
src/libMars/grib.c | 1 -
src/libMars/grib.h | 1 -
src/libMars/gribbase.c | 1 -
src/libMars/guess.c | 1 -
src/libMars/handler.c | 1 -
src/libMars/hash.c | 1 -
src/libMars/hidden.c | 1 -
src/libMars/hypercube.c | 1 -
src/libMars/hypercube.h | 1 -
src/libMars/ibmblk.c | 1 -
src/libMars/ibmblk.h | 1 -
src/libMars/index.c | 1 -
src/libMars/index.h | 1 -
src/libMars/json.c | 1 -
src/libMars/json.h | 1 -
src/libMars/lang.h | 1 -
src/libMars/langl.l | 1 -
src/libMars/langy.y | 1 -
src/libMars/list.c | 1 -
src/libMars/lock.c | 1 -
src/libMars/logfile.c | 1 -
src/libMars/macro_api.c | 3 +-
src/libMars/mars.h | 1 -
src/libMars/mcs.h | 1 -
src/libMars/memory.c | 1 -
src/libMars/metadata.c | 1 -
src/libMars/multibase.c | 1 -
src/libMars/netbase.c | 1 -
src/libMars/netbase.h | 1 -
src/libMars/nfdbbase.c | 1 -
src/libMars/nullbase.c | 1 -
src/libMars/odb.cc | 1 -
src/libMars/odb.h | 1 -
src/libMars/odbbase.c | 1 -
src/libMars/options.c | 1 -
src/libMars/pproc.c | 1 -
src/libMars/proto.h | 1 -
src/libMars/queue.c | 1 -
src/libMars/queue.h | 1 -
src/libMars/remove.c | 1 -
src/libMars/request.c | 1 -
src/libMars/restricted.c | 1 -
src/libMars/restricted.h | 1 -
src/libMars/retrieve.c | 1 -
src/libMars/rpcmars.x | 1 -
src/libMars/schedule.c | 1 -
src/libMars/server.c | 1 -
src/libMars/service.c | 1 -
src/libMars/sh2ll.c | 1 -
src/libMars/statistics.c | 1 -
src/libMars/stream.c | 1 -
src/libMars/target.c | 1 -
src/libMars/tcp.c | 1 -
src/libMars/time.c | 1 -
src/libMars/timer.c | 1 -
src/libMars/tools.c | 1 -
src/libMars/tools.h | 1 -
src/libMars/udp.c | 1 -
src/libMars/variable.c | 1 -
src/libMars/variable.h | 1 -
src/libMars/version.c | 1 -
src/libMars/wind.c | 1 -
src/libMars/xservice.c | 1 -
src/{libMars/MARS => libMarsClient}/account.c | 0
src/{libMars/MARS => libMarsClient}/api.c | 0
src/{libMars/MARS => libMarsClient}/api.h | 0
src/{libMars/MARS => libMarsClient}/apibase.c | 2 +-
src/{libMars/MARS => libMarsClient}/archive.c | 0
src/{libMars/MARS => libMarsClient}/authenticate.c | 0
src/{libMars/MARS => libMarsClient}/base.c | 0
src/{libMars/MARS => libMarsClient}/base.h | 0
src/{libMars/MARS => libMarsClient}/bufr.c | 0
src/{libMars/MARS => libMarsClient}/bufr.h | 0
src/{libMars/MARS => libMarsClient}/calc.c | 0
src/{libMars/MARS => libMarsClient}/check.c | 0
src/{libMars/MARS => libMarsClient}/control.c | 0
src/{libMars/MARS => libMarsClient}/control.h | 0
src/{libMars/MARS => libMarsClient}/cos.c | 0
src/{libMars/MARS => libMarsClient}/cos.h | 0
src/{libMars/MARS => libMarsClient}/dhsbase.c | 119 +-
src/{libMars/MARS => libMarsClient}/ecaccess.c | 0
src/{libMars/MARS => libMarsClient}/ecaccess.h | 0
src/{libMars/MARS => libMarsClient}/environ.c | 2 +-
src/{libMars/MARS => libMarsClient}/expand.c | 0
src/{libMars/MARS => libMarsClient}/externf.c | 0
src/{libMars/MARS => libMarsClient}/field.c | 16 +-
src/{libMars/MARS => libMarsClient}/field.h | 2 +-
src/{libMars/MARS => libMarsClient}/filebase.c | 0
src/{libMars/MARS => libMarsClient}/files.c | 0
src/{libMars/MARS => libMarsClient}/flatfilebase.c | 2 +-
src/{libMars/MARS => libMarsClient}/free.c | 0
src/{libMars/MARS => libMarsClient}/globals.h | 3 +
src/{libMars/MARS => libMarsClient}/grib.c | 0
src/{libMars/MARS => libMarsClient}/grib.h | 4 +-
src/{libMars/MARS => libMarsClient}/gribbase.c | 0
src/{libMars/MARS => libMarsClient}/guess.c | 0
src/{libMars/MARS => libMarsClient}/handler.c | 1 +
src/{libMars/MARS => libMarsClient}/hash.c | 0
src/{libMars/MARS => libMarsClient}/hidden.c | 0
src/{libMars/MARS => libMarsClient}/hypercube.c | 0
src/{libMars/MARS => libMarsClient}/hypercube.h | 0
src/{libMars/MARS => libMarsClient}/ibmblk.c | 0
src/{libMars/MARS => libMarsClient}/ibmblk.h | 0
src/{libMars/MARS => libMarsClient}/index.c | 2 +-
src/{libMars/MARS => libMarsClient}/index.h | 2 +-
src/{libMars/MARS => libMarsClient}/json.c | 0
src/{libMars/MARS => libMarsClient}/json.h | 0
src/{libMars/MARS => libMarsClient}/lang.h | 0
src/{libMars/MARS => libMarsClient}/langl.l | 0
src/{libMars/MARS => libMarsClient}/langy.y | 0
src/{libMars/MARS => libMarsClient}/list.c | 0
src/{libMars/MARS => libMarsClient}/lock.c | 0
src/{libMars/MARS => libMarsClient}/logfile.c | 12 +-
src/{libMars/MARS => libMarsClient}/mars.h | 76 +-
src/{libMars/MARS => libMarsClient}/mcs.h | 0
src/{libMars/MARS => libMarsClient}/memory.c | 0
src/{libMars/MARS => libMarsClient}/metadata.c | 0
src/{libMars/MARS => libMarsClient}/multibase.c | 0
src/{libMars/MARS => libMarsClient}/netbase.c | 0
src/{libMars/MARS => libMarsClient}/netbase.h | 0
src/{libMars/MARS => libMarsClient}/nfdbbase.c | 3 +-
src/{libMars/MARS => libMarsClient}/nullbase.c | 0
src/{libMars/MARS => libMarsClient}/odb.cc | 0
src/{libMars/MARS => libMarsClient}/odb.h | 0
src/{libMars/MARS => libMarsClient}/odbbase.c | 0
src/{libMars/MARS => libMarsClient}/options.c | 10 +-
src/{libMars/MARS => libMarsClient}/pproc.c | 2 +-
src/{libMars/MARS => libMarsClient}/proto.h | 4 +-
src/{libMars/MARS => libMarsClient}/queue.c | 0
src/{libMars/MARS => libMarsClient}/queue.h | 0
src/{libMars/MARS => libMarsClient}/remove.c | 0
src/{libMars/MARS => libMarsClient}/request.c | 2 +-
src/{libMars/MARS => libMarsClient}/restricted.c | 0
src/{libMars/MARS => libMarsClient}/restricted.h | 0
src/{libMars/MARS => libMarsClient}/retrieve.c | 47 +-
src/{libMars/MARS => libMarsClient}/rpcmars.x | 0
src/{libMars/MARS => libMarsClient}/schedule.c | 0
src/{libMars/MARS => libMarsClient}/server.c | 0
src/{libMars/MARS => libMarsClient}/service.c | 0
src/{libMars/MARS => libMarsClient}/sh2ll.c | 0
src/{libMars/MARS => libMarsClient}/statistics.c | 0
src/{libMars/MARS => libMarsClient}/stream.c | 0
src/{libMars/MARS => libMarsClient}/target.c | 6 +-
src/{libMars/MARS => libMarsClient}/tcp.c | 0
src/{libMars/MARS => libMarsClient}/time.c | 0
src/{libMars/MARS => libMarsClient}/timer.c | 0
src/{libMars/MARS => libMarsClient}/tools.c | 11 +-
src/{libMars/MARS => libMarsClient}/tools.h | 0
src/{libMars/MARS => libMarsClient}/udp.c | 0
src/{libMars/MARS => libMarsClient}/variable.c | 0
src/{libMars/MARS => libMarsClient}/variable.h | 0
src/{libMars/MARS => libMarsClient}/version.c | 6 +-
src/{libMars/MARS => libMarsClient}/wind.c | 0
src/{libMars/MARS => libMarsClient}/xservice.c | 0
src/libMetview/MvGrid.cc | 209 +-
src/libMetview/MvGrid.h | 4 +
src/libMetview/MvPrepBufrPrep.cc | 2 +-
src/libMetview/MvProtocol.cc | 1 +
src/libMetview/MvService.cc | 10 +-
src/libMvQtGui/MvQProfileView.cc | 23 +-
src/libMvQtGui/MvQProfileView.h | 6 +-
src/libMvQtGui/MvQService.cc | 3 +-
src/libUtil/GribMetaData.cc | 22 +-
src/libUtil/MvOdb.cc | 4 -
src/libUtil/MvProfileData.h | 6 +-
src/libUtil/MvScm.cc | 27 +-
src/libUtil/MvScm.h | 4 +-
src/libUtil/proj_braz.cc | 4 +-
src/uPlot/BufrDecoder.h | 2 +-
src/uPlot/CMakeLists.txt | 4 +-
src/uPlot/CartesianView.cc | 2 +-
src/uPlot/CommonXSectView.cc | 2 +-
src/uPlot/CreateAction.cc | 17 +-
src/uPlot/DataBuilder.cc | 2 +-
src/uPlot/GeoView.cc | 2 +-
src/uPlot/GeopointsDecoder.h | 2 +-
src/uPlot/MagicsTranslator.cc | 59 +-
src/uPlot/MagicsTranslator.h | 18 +
src/uPlot/MapView.cc | 184 +-
src/uPlot/MapView.h | 23 +-
src/uPlot/{Decoder.cc => MvDecoder.cc} | 2 +-
src/uPlot/{Decoder.h => MvDecoder.h} | 4 +-
src/uPlot/MvGribDecoder.h | 2 +-
src/uPlot/MvIconDataBase.cc | 55 +-
src/uPlot/ObjectList.cc | 12 +-
src/uPlot/ObjectList.h | 2 +
src/uPlot/OutputFormatAction.cc | 48 +-
src/uPlot/Page.cc | 54 +-
src/uPlot/Page.h | 3 +
src/uPlot/PlotPageBuilder.cc | 14 +-
src/uPlot/Presentable.cc | 2 +-
src/uPlot/Root.cc | 2 +-
src/uPlot/SimpleDecoder.h | 2 +-
src/uPlot/SuperPage.cc | 4 +-
src/uPlot/uPlotBase.cc | 2 +-
src/uPlot/uPlotManager.cc | 7 +
test/data/t1000_LL_1x1.grb | Bin 0 -> 65280 bytes
test/data/t1000_LL_1x1_subarea.grb | Bin 0 -> 14880 bytes
test/data/t1000_LL_2x2.grb | Bin 0 -> 16560 bytes
test/macros/CMakeLists.txt | 16 +-
test/macros/grib_nearest_gridpoint.mv | 142 +
test/macros/inline_c.mv | 63 +
test/macros/inline_fortran.mv | 58 +
test/macros/interpolation_gg_to_subarea.mv | 8 +-
test/macros/interpolation_rgg_to_ll.mv | 8 +-
test/macros/interpolation_sh_to_ll.mv | 8 +-
test/macros/interpolation_sh_to_rgg.mv | 8 +-
test/macros/plot_coast_order.mv | 1 +
test/macros/station.mv | 36 +
326 files changed, 4836 insertions(+), 6109 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e3fcddf..dfa1cd4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -31,7 +31,7 @@ set(MV_BIN_DIR bin/metview_bin) # all executables and scripts apart from the sta
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild/cmake")
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE OFF)
-set(INSTALL_BIN_DIR "${MV_BIN_DIR}" CACHE PATH "Metview installation directory for executable files")
+set(METVIEW_INSTALL_BIN_DIR "${MV_BIN_DIR}" CACHE PATH "Metview installation directory for executable files")
include( ecbuild_system )
@@ -60,7 +60,14 @@ option( ENABLE_EXPERIMENTAL "enable experimental modules"
option( ENABLE_CONTRIB "enable externally contributed modules" OFF )
###############################################################################
-# some options of this project
+
+
+# ensure we can add non-existent dependencies - required for generating icon files
+if( ${CMAKE_VERSION} VERSION_GREATER "2.9.9" )
+ cmake_policy(SET CMP0046 OLD)
+endif()
+
+
# if we don't explicitly state that we're at ECMWF, then assume we're not, and use the generic config
if(NOT METVIEW_SITE STREQUAL ecmwf)
@@ -193,7 +200,12 @@ else()
endif()
-find_package( FDB )
+if(AT_ECMWF)
+ find_package(FDB REQUIRED)
+else()
+ find_package(FDB)
+endif()
+
message(STATUS "FDB: ${FDB_LIBRARIES}" )
if( NOT FDB_FOUND )
@@ -207,12 +219,12 @@ endif()
# ecbuild_use_package( PROJECT eckit VERSION 0.3 REQUIRED )
-ecbuild_use_package( PROJECT grib_api VERSION 1.11.0 REQUIRED )
+ecbuild_use_package( PROJECT grib_api VERSION 1.13.0 REQUIRED )
list( APPEND METVIEW_TPLS grib_api )
if(ENABLE_ODB)
- ecbuild_use_package( PROJECT odb_api VERSION 0.9.31 ) # requires at least this version
+ ecbuild_use_package( PROJECT odb_api VERSION 0.10.1 ) # requires at least this version
if( ODB_API_FOUND )
# does this version use eckit?
@@ -223,8 +235,13 @@ if(ENABLE_ODB)
add_definitions(-DODB_ECKIT)
endif()
- set( METVIEW_ODB 1 )
- set(ODB_API_LIB_DIR ${ODB_API_PATH}/lib)
+ set(METVIEW_ODB 1)
+
+ if(ODB_API_PATH)
+ set(ODB_API_LIB_DIR ${ODB_API_PATH}/lib)
+ set(ODB_API_BIN_DIR ${ODB_API_PATH}/bin)
+ endif()
+
add_definitions(-DMETVIEW_ODB_NEW -DMETVIEW_ODB)
set(METVIEW_ODB_API_INCLUDE_DIRS ${ODB_API_INCLUDE_DIRS}
${ODB_API_INCLUDE_DIRS}/..
@@ -308,7 +325,7 @@ endmacro()
if(ENABLE_PLOTTING)
- ecbuild_use_package( PROJECT magics ) # version
+ ecbuild_use_package( PROJECT magics VERSION 2.24.3)
if( MAGICS_FOUND )
if(DEFINED MAGICS_PATH) # user supplied MAGICS_PATH
@@ -480,6 +497,7 @@ find_package(BISON REQUIRED)
# netCDF
# NEW system with ecBuild 1.6.0
+set( NETCDF_CXX 1 )
find_package( NetCDF 4 COMPONENTS CXX)
if( NETCDF_FOUND )
list( APPEND METVIEW_TPLS NetCDF )
@@ -839,7 +857,9 @@ ecbuild_dont_pack(REGEX "share/metview/icons/*.svg")
ecbuild_dont_pack(REGEX "configure*.sh")
ecbuild_dont_pack(REGEX "Makefile.am")
ecbuild_dont_pack(REGEX "Makefile.in")
-ecbuild_dont_pack(DIRS "rpms;metview-ecmwf-configs" )
+#ecbuild_dont_pack(DIRS "rpms;metview-ecmwf-configs" )
+#ecbuild_dont_pack(REGEX "metview-ecmwf-configs/*")
+ecbuild_dont_pack(FILES "rpms;metview-ecmwf-configs;bamboo" )
ecbuild_dont_pack(DIRS "m4/;src/libMars-Odb;src/libMars-old;src/MvApp/MARS")
ecbuild_dont_pack(DIRS "src/DataAccess;src/ForwardApp")
@@ -854,7 +874,7 @@ ecbuild_dont_pack(FILES "bootstrap;version.sh;ecmwf_setup.sh;configure.ecmwf;src
ecbuild_dont_pack(FILES "share/metview/etc_mv3;share/metview/icons_mv3;src/xd" )
ecbuild_dont_pack(FILES "lib;bin;config" )
-ecbuild_dont_pack(FILES "autom4te.cache;aux_build;docs" )
+ecbuild_dont_pack(FILES "metview.sublime-workspace;metview.sublime-project;autom4te.cache;aux_build;docs" )
ecbuild_dont_pack(FILES "MetviewFixLog" )
ecbuild_dont_pack(FILES "src/Traj" )
ecbuild_dont_pack(FILES "src/Budget" )
diff --git a/VERSION.cmake b/VERSION.cmake
index 7c717ae..c900703 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1,5 +1,5 @@
set(${PROJECT_NAME}_MAJOR_VERSION_STR "4")
set(${PROJECT_NAME}_MINOR_VERSION_STR "5")
-set(${PROJECT_NAME}_REVISION_VERSION_STR "3")
+set(${PROJECT_NAME}_REVISION_VERSION_STR "6")
set(${PROJECT_NAME}_VERSION_STR "${${PROJECT_NAME}_MAJOR_VERSION_STR}.${${PROJECT_NAME}_MINOR_VERSION_STR}.${${PROJECT_NAME}_REVISION_VERSION_STR}")
diff --git a/cmake/VERSION.cmake b/cmake/VERSION.cmake
index 0873335..40762d8 100644
--- a/cmake/VERSION.cmake
+++ b/cmake/VERSION.cmake
@@ -1,7 +1,7 @@
set( ECBUILD_MAJOR_VERSION "1" )
-set( ECBUILD_MINOR_VERSION "6" )
+set( ECBUILD_MINOR_VERSION "7" )
set( ECBUILD_PATCH_VERSION "0" )
-set( ECBUILD_VERSION_STR "1.6.0" )
+set( ECBUILD_VERSION_STR "1.7.0" )
set( ECBUILD_MACRO_VERSION "${ECBUILD_MAJOR_VERSION}.${ECBUILD_MINOR_VERSION}" )
diff --git a/cmake/contrib/FindFFTW.cmake b/cmake/contrib/FindFFTW.cmake
new file mode 100644
index 0000000..1ddaf4c
--- /dev/null
+++ b/cmake/contrib/FindFFTW.cmake
@@ -0,0 +1,124 @@
+# - Find the FFTW library
+#
+# Usage:
+# find_package(FFTW [REQUIRED] [QUIET] )
+#
+# It sets the following variables:
+# FFTW_FOUND ... true if fftw is found on the system
+# FFTW_LIBRARIES ... full path to fftw library
+# FFTW_INCLUDES ... fftw include directory
+#
+# The following variables will be checked by the function
+# FFTW_USE_STATIC_LIBS ... if true, only static libraries are found
+# FFTW_ROOT ... if set, the libraries are exclusively searched
+# under this path
+# FFTW_LIBRARY ... fftw library to use
+# FFTW_INCLUDE_DIR ... fftw include directory
+#
+
+#=======================#
+#
+# From Eigen3
+#
+#========================
+
+#If environment variable FFTWDIR is specified, it has same effect as FFTW_ROOT
+if( NOT FFTW_ROOT AND ENV{FFTWDIR} )
+ set( FFTW_ROOT $ENV{FFTWDIR} )
+endif()
+
+# Check if we can use PkgConfig
+find_package(PkgConfig)
+
+#Determine from PKG
+if( PKG_CONFIG_FOUND AND NOT FFTW_ROOT )
+ pkg_check_modules( PKG_FFTW QUIET "fftw3" )
+endif()
+
+#Check whether to search static or dynamic libs
+set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} )
+
+if( ${FFTW_USE_STATIC_LIBS} )
+ set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} )
+else()
+ set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX} )
+endif()
+
+if( FFTW_ROOT )
+
+ #find libs
+ find_library(
+ FFTW_LIB
+ NAMES "fftw3"
+ PATHS ${FFTW_ROOT}
+ PATH_SUFFIXES "lib" "lib64"
+ NO_DEFAULT_PATH
+ )
+
+ find_library(
+ FFTWF_LIB
+ NAMES "fftw3f"
+ PATHS ${FFTW_ROOT}
+ PATH_SUFFIXES "lib" "lib64"
+ NO_DEFAULT_PATH
+ )
+
+ find_library(
+ FFTWL_LIB
+ NAMES "fftw3l"
+ PATHS ${FFTW_ROOT}
+ PATH_SUFFIXES "lib" "lib64"
+ NO_DEFAULT_PATH
+ )
+
+ #find includes
+ find_path(
+ FFTW_INCLUDES
+ NAMES "fftw3.h"
+ PATHS ${FFTW_ROOT}
+ PATH_SUFFIXES "include"
+ NO_DEFAULT_PATH
+ )
+
+else()
+
+ find_library(
+ FFTW_LIB
+ NAMES "fftw3"
+ PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
+ )
+
+ find_library(
+ FFTWF_LIB
+ NAMES "fftw3f"
+ PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
+ )
+
+
+ find_library(
+ FFTWL_LIB
+ NAMES "fftw3l"
+ PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
+ )
+
+ find_path(
+ FFTW_INCLUDES
+ NAMES "fftw3.h"
+ PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR}
+ )
+
+endif( FFTW_ROOT )
+
+set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB})
+
+if(FFTWL_LIB)
+ set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWL_LIB})
+endif()
+
+set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} )
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(FFTW DEFAULT_MSG
+ FFTW_INCLUDES FFTW_LIBRARIES)
+
+mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB)
\ No newline at end of file
diff --git a/cmake/ecbuild_add_library.cmake b/cmake/ecbuild_add_library.cmake
index a7e3dd2..534807f 100644
--- a/cmake/ecbuild_add_library.cmake
+++ b/cmake/ecbuild_add_library.cmake
@@ -30,13 +30,6 @@ function( ecbuild_add_library_impl )
message(FATAL_ERROR "The call to ecbuild_add_library() doesn't specify the SOURCES.")
endif()
- # get_filename_component( currdir ${CMAKE_CURRENT_SOURCE_DIR} NAME )
-
- # file(RELATIVE_PATH reldir ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
-
- # debug_var( currdir )
- # debug_var( reldir )
-
### conditional build
if( DEFINED _PAR_CONDITION )
diff --git a/cmake/ecbuild_add_option.cmake b/cmake/ecbuild_add_option.cmake
index 85417fa..8f42550 100644
--- a/cmake/ecbuild_add_option.cmake
+++ b/cmake/ecbuild_add_option.cmake
@@ -189,6 +189,7 @@ macro( ecbuild_add_option )
string( TOUPPER PNAME ${PROJECT_NAME} )
set( ${PNAME}_HAVE_${_p_FEATURE} 1 )
set( ${PNAME}_FEATURES "${${PNAME}_FEATURES};${PNAME}_HAVE_${_p_FEATURE}" CACHE INTERNAL "" )
+ list( REMOVE_DUPLICATES ${PNAME}_FEATURES )
endif()
endmacro( ecbuild_add_option )
diff --git a/cmake/ecbuild_add_test.cmake b/cmake/ecbuild_add_test.cmake
index 274d452..44f850f 100644
--- a/cmake/ecbuild_add_test.cmake
+++ b/cmake/ecbuild_add_test.cmake
@@ -20,14 +20,15 @@
# SOURCES: sources to be compiled
# LIBS: Libraries needed for linking
# INCLUDES: Extra include directories
-# DEPENDS: Add explicit dependency to other targets
+# DEPENDS: Add explicit dependency to other targets (for building)
+# TEST_DEPENDS: add explicity dependency on another test running before
# ARGS: Command-line arguments to COMMAND OR TARGET
macro( ecbuild_add_test )
set( options BOOST )
set( single_value_args TARGET ENABLED COMMAND TYPE LINKER_LANGUAGE MPI WORKING_DIRECTORY )
- set( multi_value_args SOURCES LIBS INCLUDES DEPENDS ARGS PERSISTENT DEFINITIONS RESOURCES TEST_DATA CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION ENVIRONMENT )
+ set( multi_value_args SOURCES LIBS INCLUDES TEST_DEPENDS DEPENDS ARGS PERSISTENT DEFINITIONS RESOURCES TEST_DATA CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION ENVIRONMENT )
cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
@@ -132,28 +133,6 @@ macro( ecbuild_add_test )
endforeach()
endif()
- # get test data
-
- if( _PAR_TEST_DATA )
-
- foreach( _d ${_PAR_TEST_DATA} )
-
- string( REGEX MATCH "[^:]+" _name "${_d}" )
- string( REGEX MATCH ":.*" _md5 "${_d}" )
- string( REPLACE ":" "" _md5 "${_md5}" )
-
- if( _md5 )
- ecbuild_get_test_data( TARGET _test_data_${name} NAME ${_name} MD5 ${_md5} )
- else()
- ecbuild_get_test_data( TARGET _test_data_${name} NAME ${_name} )
- endif()
-
- list( APPEND _PAR_DEPENDS _test_data_${name} )
-
- endforeach()
-
- endif()
-
# build executable
if( DEFINED _PAR_SOURCES )
@@ -263,15 +242,13 @@ macro( ecbuild_add_test )
set( _PAR_TARGET ${_PAR_COMMAND} )
endif()
- # scripts dont have actual build targets so no data downloads are executed
- # we build a phony target to trigger the dependency downloads
- if( DEFINED _PAR_COMMAND )
+ # scripts dont have actual build targets
+ # we build a phony target to trigger the dependencies
+ if( DEFINED _PAR_COMMAND AND DEFINED _PAR_DEPENDS )
add_custom_target( ${_PAR_TARGET}.x ALL COMMAND ${CMAKE_COMMAND} -E touch ${_PAR_TARGET}.x )
- if( DEFINED _PAR_DEPENDS)
- add_dependencies( ${_PAR_TARGET}.x ${_PAR_DEPENDS} )
- endif()
+ add_dependencies( ${_PAR_TARGET}.x ${_PAR_DEPENDS} )
endif()
@@ -301,14 +278,28 @@ macro( ecbuild_add_test )
add_test( ${_PAR_TARGET} ${_PAR_TARGET} ${TEST_ARGS} ${_working_dir} ) # run the test that was generated
endif()
+ # get test data
+
+ if( _PAR_TEST_DATA )
+
+ ecbuild_get_test_multidata( TARGET ${_PAR_TARGET}_data NAMES ${_PAR_TEST_DATA} )
+
+ list( APPEND _PAR_TEST_DEPENDS ${_PAR_TARGET}_data )
+
+ endif()
+
if( DEFINED _PAR_ENVIRONMENT )
- set_tests_properties( ${_PAR_TARGET} PROPERTIES ENVIRONMENT "${_PAR_ENVIRONMENT}")
+ set_property( TEST ${_PAR_TARGET} APPEND PROPERTY ENVIRONMENT "${_PAR_ENVIRONMENT}" )
endif()
if( DEFINED _PAR_WORKING_DIRECTORY )
set_tests_properties( ${_PAR_TARGET} PROPERTIES WORKING_DIRECTORY "${_PAR_WORKING_DIRECTORY}")
endif()
+ if( DEFINED _PAR_TEST_DEPENDS )
+ set_property( TEST ${_PAR_TARGET} APPEND PROPERTY DEPENDS "${_PAR_TEST_DEPENDS}" )
+ endif()
+
endif()
# add to the overall list of tests
diff --git a/cmake/ecbuild_check_compiler.cmake b/cmake/ecbuild_check_compiler.cmake
index 7ac4ea0..406f1d2 100644
--- a/cmake/ecbuild_check_compiler.cmake
+++ b/cmake/ecbuild_check_compiler.cmake
@@ -123,3 +123,19 @@ if( CMAKE_COMPILER_IS_GNUCXX )
endif()
+############################################################################################
+# compiler dependent fixes
+
+# For Cray compilers add "-Wl,-Bdynamic" at very end of linker commands, in order to produce dynamic executables by default
+
+if( "${CMAKE_C_COMPILER_ID}" STREQUAL "Cray" )
+ set( CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Wl,-Bdynamic" )
+endif()
+
+if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Cray" )
+ set( CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Wl,-Bdynamic" )
+endif()
+
+if( "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Cray" )
+ set(CMAKE_Fortran_LINK_EXECUTABLE "<CMAKE_Fortran_COMPILER> <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Wl,-Bdynamic" )
+endif()
diff --git a/cmake/ecbuild_declare_project.cmake b/cmake/ecbuild_declare_project.cmake
index 57dd1b0..fa6286c 100644
--- a/cmake/ecbuild_declare_project.cmake
+++ b/cmake/ecbuild_declare_project.cmake
@@ -62,31 +62,25 @@ macro( ecbuild_declare_project )
# install dirs for this project
- if( NOT DEFINED INSTALL_BIN_DIR )
- set( INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables")
- endif()
-
- if( NOT DEFINED INSTALL_LIB_DIR )
- set( INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
- endif()
-
- if( NOT DEFINED INSTALL_INCLUDE_DIR )
- set( INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
- endif()
+ set( INSTALL_BIN_DIR bin )
+ set( INSTALL_LIB_DIR lib )
+ set( INSTALL_INCLUDE_DIR include )
+ set( INSTALL_DATA_DIR share/${PROJECT_NAME} )
+ set( INSTALL_CMAKE_DIR share/${PROJECT_NAME}/cmake )
- if( NOT DEFINED INSTALL_DATA_DIR )
- set( INSTALL_DATA_DIR share/${PROJECT_NAME} CACHE PATH "Installation directory for data files")
- endif()
+ mark_as_advanced( INSTALL_BIN_DIR )
+ mark_as_advanced( INSTALL_LIB_DIR )
+ mark_as_advanced( INSTALL_INCLUDE_DIR )
+ mark_as_advanced( INSTALL_DATA_DIR )
+ mark_as_advanced( INSTALL_CMAKE_DIR )
- if( NOT DEFINED INSTALL_CMAKE_DIR )
- set( INSTALL_CMAKE_DIR share/${PROJECT_NAME}/cmake CACHE PATH "Installation directory for CMake files")
- endif()
+ # overrides of install dirs
- mark_as_advanced( INSTALL_BIN_DIR )
- mark_as_advanced( INSTALL_LIB_DIR )
- mark_as_advanced( INSTALL_INCLUDE_DIR )
- mark_as_advanced( INSTALL_DATA_DIR )
- mark_as_advanced( INSTALL_CMAKE_DIR )
+ foreach( p LIB BIN INCLUDE DATA CMAKE )
+ if( ${PNAME}_INSTALL_${p}_DIR )
+ set( INSTALL_${p}_DIR ${${PNAME}_INSTALL_${p}_DIR} )
+ endif()
+ endforeach()
# warnings for non-relocatable projects
diff --git a/cmake/ecbuild_define_options.cmake b/cmake/ecbuild_define_options.cmake
index e4539ea..a79fcf3 100644
--- a/cmake/ecbuild_define_options.cmake
+++ b/cmake/ecbuild_define_options.cmake
@@ -22,7 +22,7 @@ option( ENABLE_OS_TESTS "Run all OS tests" ON )
mark_as_advanced( ENABLE_OS_TESTS )
-option ( ENABLE_FORTRAN_C_INTERFACE "Enable Fortran/C Interface" OFF )
+option( ENABLE_FORTRAN_C_INTERFACE "Enable Fortran/C Interface" OFF )
mark_as_advanced( ENABLE_FORTRAN_C_INTERFACE )
option( DEVELOPER_MODE "activates developer mode" OFF )
diff --git a/cmake/ecbuild_get_test_data.cmake b/cmake/ecbuild_get_test_data.cmake
index 3707211..d50ed6c 100644
--- a/cmake/ecbuild_get_test_data.cmake
+++ b/cmake/ecbuild_get_test_data.cmake
@@ -23,7 +23,7 @@ function( _download_test_data _p_NAME _p_DIRNAME )
if( CURL_PROGRAM )
add_custom_command( OUTPUT ${_p_NAME}
- COMMENT "downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}"
+ COMMENT "(curl) downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}"
COMMAND ${CURL_PROGRAM} --silent --show-error --fail --output ${_p_NAME} http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME} )
else()
@@ -32,9 +32,17 @@ function( _download_test_data _p_NAME _p_DIRNAME )
if( WGET_PROGRAM )
- add_custom_command( OUTPUT ${_p_NAME}
- COMMENT "downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}"
- COMMAND ${WGET_PROGRAM} -nv -O ${_p_NAME} http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME} )
+ add_custom_command( OUTPUT ${_p_NAME}
+ COMMENT "(wget) downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}"
+ COMMAND ${WGET_PROGRAM} -nv -O ${_p_NAME} http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME} )
+
+ else()
+
+ if( WARNING_CANNOT_DOWNLOAD_TEST_DATA )
+ message( WARNING "Couldn't find curl neither wget -- cannot download test data from server.\nPlease obtain the test data by other means and pleace it in the build directory." )
+ set( WARNING_CANNOT_DOWNLOAD_TEST_DATA 1 CACHE INTERNAL "Couldn't find curl neither wget -- cannot download test data from server" )
+ mark_as_advanced( WARNING_CANNOT_DOWNLOAD_TEST_DATA )
+ endif()
endif()
@@ -57,7 +65,7 @@ endfunction()
## checksum agains local md5
# ecbuild_get_test_data( NAME msl.grib MD5 f69ca0929d1122c7878d19f32401abe9 )
#
-## checksum agains local sha1
+## (DEPRECATED) checksum agains local sha1
# ecbuild_get_test_data( NAME msl.grib SHA1 5a8e8c57c510b64e31863ca47cfc3b65971089d9 )
function( ecbuild_get_test_data )
@@ -72,7 +80,7 @@ function( ecbuild_get_test_data )
message(FATAL_ERROR "Unknown keywords given to ecbuild_get_test_data(): \"${_p_UNPARSED_ARGUMENTS}\"")
endif()
- file( RELATIVE_PATH currdir ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
+ file( RELATIVE_PATH currdir ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
### check parameters
@@ -112,14 +120,16 @@ function( ecbuild_get_test_data )
# message( STATUS " --- getting MD5 sum " )
add_custom_command( OUTPUT ${_p_NAME}.localmd5
- COMMAND md5sum ${_p_NAME} > ${_p_NAME}.localmd5 )
-
- add_custom_command( OUTPUT ${_p_NAME}.ok
- COMMAND diff ${_p_NAME}.md5 ${_p_NAME}.localmd5 && touch ${_p_NAME}.ok )
+ COMMAND ${MD5SUM} -t ${_p_NAME} > ${_p_NAME}.localmd5
+ DEPENDS ${_p_NAME} )
_download_test_data( ${_p_NAME}.md5 ${_p_DIRNAME} )
- list( APPEND _deps ${_p_NAME}.md5 ${_p_NAME}.localmd5 ${_p_NAME}.ok )
+ add_custom_command( OUTPUT ${_p_NAME}.ok
+ COMMAND diff ${_p_NAME}.md5 ${_p_NAME}.localmd5 && touch ${_p_NAME}.ok
+ DEPENDS ${_p_NAME}.localmd5 ${_p_NAME}.md5 )
+
+ list( APPEND _deps ${_p_NAME}.localmd5 ${_p_NAME}.ok )
endif()
@@ -128,38 +138,134 @@ function( ecbuild_get_test_data )
# message( STATUS " --- computing MD5 sum [${_p_MD5}]" )
add_custom_command( OUTPUT ${_p_NAME}.localmd5
- COMMAND ${MD5SUM} ${_p_NAME} > ${_p_NAME}.localmd5 )
-
- add_custom_command( OUTPUT ${_p_NAME}.ok
- COMMAND diff ${_p_NAME}.md5 ${_p_NAME}.localmd5 && touch ${_p_NAME}.ok )
+ COMMAND ${MD5SUM} -t ${_p_NAME} > ${_p_NAME}.localmd5
+ DEPENDS ${_p_NAME} )
configure_file( "${ECBUILD_MACROS_DIR}/md5.in" ${_p_NAME}.md5 @ONLY )
+ add_custom_command( OUTPUT ${_p_NAME}.ok
+ COMMAND diff ${_p_NAME}.md5 ${_p_NAME}.localmd5 && touch ${_p_NAME}.ok
+ DEPENDS ${_p_NAME}.localmd5 )
+
list( APPEND _deps ${_p_NAME}.localmd5 ${_p_NAME}.ok )
endif()
- if( _p_SHA1 )
+# if( _p_SHA1 )
-# message( STATUS " --- computing SHA1 sum [${_p_SHA1}]" )
+## message( STATUS " --- computing SHA1 sum [${_p_SHA1}]" )
- find_program( SHASUM NAMES sha1sum shasum )
- if( SHASUM )
- add_custom_command( OUTPUT ${_p_NAME}.localsha1
- COMMAND ${SHASUM} ${_p_NAME} > ${_p_NAME}.localsha1 )
+# find_program( SHASUM NAMES sha1sum shasum )
+# if( SHASUM )
+# add_custom_command( OUTPUT ${_p_NAME}.localsha1
+# COMMAND ${SHASUM} ${_p_NAME} > ${_p_NAME}.localsha1 )
- add_custom_command( OUTPUT ${_p_NAME}.ok
- COMMAND diff ${_p_NAME}.sha1 ${_p_NAME}.localsha1 && touch ${_p_NAME}.ok )
+# add_custom_command( OUTPUT ${_p_NAME}.ok
+# COMMAND diff ${_p_NAME}.sha1 ${_p_NAME}.localsha1 && touch ${_p_NAME}.ok )
- configure_file( "${ECBUILD_MACROS_DIR}/sha1.in" ${_p_NAME}.sha1 @ONLY )
+# configure_file( "${ECBUILD_MACROS_DIR}/sha1.in" ${_p_NAME}.sha1 @ONLY )
- list( APPEND _deps ${_p_NAME}.localsha1 ${_p_NAME}.ok )
- endif()
+# list( APPEND _deps ${_p_NAME}.localsha1 ${_p_NAME}.ok )
+# endif()
- endif()
+# endif()
endif()
add_custom_target( ${_p_TARGET} DEPENDS ${_deps} )
endfunction(ecbuild_get_test_data)
+
+##############################################################################
+# function for getting test data
+#
+# examples:
+#
+## no check done
+# ecbuild_get_test_multidata( TARGET get_foobar_data NAMES foo.grib bar.grib DIRNAME test/data/dir NOCHECK )
+#
+## check for remote md5
+# ecbuild_get_test_multidata( TARGET get_foobar_data NAMES foo.grib bar.grib DIRNAME test/data/dir )
+#
+
+function( ecbuild_get_test_multidata )
+
+ set( options NOCHECK )
+ set( single_value_args TARGET DIRNAME )
+ set( multi_value_args NAMES )
+
+ cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
+
+ if(_p_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to ecbuild_get_test_data(): \"${_p_UNPARSED_ARGUMENTS}\"")
+ endif()
+
+ ### check parameters
+
+ if( NOT _p_NAMES )
+ message(FATAL_ERROR "ecbuild_get_test_data() expects a NAMES")
+ endif()
+
+ if( NOT _p_TARGET )
+ message(FATAL_ERROR "ecbuild_get_test_data() expects a TARGET")
+ endif()
+
+# debug_var( _p_TARGET )
+# debug_var( _p_NAME )
+# debug_var( _p_DIRNAME )
+
+ if( _p_NOCHECK )
+ set( _nocheck NOCHECK )
+ endif()
+
+ ### prepare file
+
+ set( _script ${CMAKE_CURRENT_BINARY_DIR}/get_data_${_p_TARGET}.cmake )
+
+ file( WRITE ${_script} "
+function(EXEC_CHECK)
+ execute_process(COMMAND \${ARGV} RESULT_VARIABLE CMD_RESULT)
+ if(CMD_RESULT)
+ message(FATAL_ERROR \"Error running ${CMD}\")
+ endif()
+endfunction()\n\n" )
+
+ foreach( _d ${_p_NAMES} )
+
+ string( REGEX MATCH "[^:]+" _f "${_d}" )
+
+ get_filename_component( _file ${_f} NAME )
+ get_filename_component( _dir ${_f} PATH )
+
+ list( APPEND _path_comps ${_p_DIRNAME} ${_dir} )
+
+ join( _path_comps "/" _dirname )
+
+ if( _dirname )
+ set( _dirname DIRNAME ${_dirname} )
+ endif()
+
+ string( REPLACE "." "_" _name "${_file}" )
+ string( REGEX MATCH ":.*" _md5 "${_d}" )
+ string( REPLACE ":" "" _md5 "${_md5}" )
+
+ if( _md5 )
+ set( _md5 MD5 ${_md5} )
+ endif()
+
+ #debug_var(_f)
+ #debug_var(_file)
+ #debug_var(_dirname)
+ #debug_var(_name)
+ #debug_var(_md5)
+
+ ecbuild_get_test_data( TARGET __get_data_${_p_TARGET}_${_name} NAME ${_file} ${_dirname} ${_md5} ${_nocheck} )
+
+ file( APPEND ${_script} "exec_check( ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target __get_data_${_p_TARGET}_${_name} )\n" )
+
+ endforeach()
+
+ add_test( NAME ${_p_TARGET} COMMAND ${CMAKE_COMMAND} -P ${_script} )
+
+endfunction(ecbuild_get_test_multidata)
+
diff --git a/cmake/ecbuild_install_package.cmake b/cmake/ecbuild_install_package.cmake
index d8b66eb..dec046f 100644
--- a/cmake/ecbuild_install_package.cmake
+++ b/cmake/ecbuild_install_package.cmake
@@ -156,7 +156,7 @@ macro( ecbuild_install_project )
configure_file( "${_template_config_version}" "${PROJECT_BINARY_DIR}/${LNAME}-config-version.cmake" @ONLY )
- install( FILES "${PROJECT_BINARY_DIR}/${LNAME}-config-version.cmake" DESTINATION "${INSTALL_CMAKE_DIR}" )
+ install( FILES "${PROJECT_BINARY_DIR}/${LNAME}-config-version.cmake" DESTINATION "${INSTALL_CMAKE_DIR}" )
# prepare imutable variables (don't depend on install path)
diff --git a/cmake/ecbuild_list_macros.cmake b/cmake/ecbuild_list_macros.cmake
index 4b7bcb0..5c10dd2 100644
--- a/cmake/ecbuild_list_macros.cmake
+++ b/cmake/ecbuild_list_macros.cmake
@@ -6,21 +6,52 @@
# granted to it by virtue of its status as an intergovernmental organisation nor
# does it submit to any jurisdiction.
-function(JOIN _listname _glue _output )
-
- set( _return "" )
-
- foreach( VAL ${${_listname}} )
- set(_return "${_return}${_glue}${VAL}")
+##############################################################################
+# function for concatenating list into a string
+#
+# examples:
+#
+# set( _paths "foo" "bar" )
+# join( _paths "/" _mypath )
+#
+# message( "${_mpath}" ) # produces "foo/bar"
+
+function( JOIN _listname _glue _output )
+
+ set( _ret "" )
+
+ foreach( _v ${${_listname}} )
+ if( _ret )
+ set(_ret "${_ret}${_glue}${_v}") # append
+ else()
+ set(_ret "${_v}") # init
+ endif()
endforeach()
- string(LENGTH "${_glue}" _glue_len)
- string(LENGTH "${_return}" _return_len)
-
- math(EXPR _return_len ${_return_len}-${_glue_len})
- string(SUBSTRING "${_return}" ${_glue_len} ${_return_len} _return)
-
- set(${_output} "${_return}" PARENT_SCOPE)
+ set(${_output} "${_ret}" PARENT_SCOPE)
endfunction()
+##############################################################################
+# function for inserting a key / value into a map
+#
+# examples:
+#
+# map_insert( "mymap" "foo" "bar" )
+#
+
+function( MAP_INSERT _map _key _value )
+ set( "_${_map}_${_key}" "${_value}" PARENT_SCOPE )
+endfunction(MAP_INSERT)
+
+##############################################################################
+# function for inserting a key / value into a map
+#
+# examples:
+#
+# map_get( "mymap" "foo" VAR )
+#
+
+function( MAP_GET _map _key _var )
+ set( ${_var} "${_${_map}_${_key}}" PARENT_SCOPE )
+endfunction(MAP_GET)
diff --git a/cmake/ecbuild_system.cmake b/cmake/ecbuild_system.cmake
index 6884345..939d92e 100644
--- a/cmake/ecbuild_system.cmake
+++ b/cmake/ecbuild_system.cmake
@@ -42,7 +42,7 @@ set( ecbuild_VERSION_STR "${ECBUILD_VERSION_STR}" )
########################################################################################################
# define cmake policies
-# Included scripts do automatic cmake_policy PUSH and POP
+# Included scripts don't automatic cmake_policy PUSH and POP
if( POLICY CMP0011 )
cmake_policy( SET CMP0011 OLD )
diff --git a/cmake/ecbuild_use_package.cmake b/cmake/ecbuild_use_package.cmake
index 3d77384..1c44894 100644
--- a/cmake/ecbuild_use_package.cmake
+++ b/cmake/ecbuild_use_package.cmake
@@ -106,7 +106,9 @@ macro( ecbuild_use_package )
add_subdirectory( ${${PNAME}_subproj_dir_} ${_p_PROJECT} )
- set( ${PNAME}_FOUND 1 )
+ set( ${_p_PROJECT}_BASE_DIR ${CMAKE_BINARY_DIR} )
+
+ set( ${PNAME}_FOUND 1 )
set( ${_p_PROJECT}_VERSION ${${PNAME}_VERSION} )
endif()
@@ -202,5 +204,6 @@ macro( ecbuild_use_package )
# set_parent_scope( ${_p_PROJECT}_FOUND )
# set_parent_scope( ${PNAME}_VERSION )
# set_parent_scope( ${_p_PROJECT}_VERSION )
+# set_parent_scope( ${_p_PROJECT}_BINARY_DIR )
endmacro()
diff --git a/cmake/project-config.cmake.in b/cmake/project-config.cmake.in
index dbb936f..9c1bdcb 100644
--- a/cmake/project-config.cmake.in
+++ b/cmake/project-config.cmake.in
@@ -78,3 +78,12 @@ include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
set( @PNAME at _IMPORT_FILE ${CMAKE_CURRENT_LIST_FILE} )
mark_as_advanced( @PNAME at _IMPORT_FILE )
+# set @PROJECT_NAME at _BASE_DIR for final installations or build directories
+
+if( NOT @PROJECT_NAME@ )
+ if( @_is_build_dir_export@ )
+ set( @PROJECT_NAME at _BASE_DIR @CMAKE_BINARY_DIR@ )
+ else()
+ set( @PROJECT_NAME at _BASE_DIR @CMAKE_INSTALL_PREFIX@ )
+ endif()
+endif()
diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
index 5e10dd7..49194d0 100644
--- a/contrib/CMakeLists.txt
+++ b/contrib/CMakeLists.txt
@@ -1,7 +1,18 @@
-# we comment this one out because it's only an example and
-# should not be available in Metview
-#add_subdirectory(ExampleDataAccess)
+# create a list of sub-directories
+file(GLOB subs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*)
+set(dirlist "")
+foreach(sub ${subs})
+ if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${sub})
+ list(APPEND dirlist ${sub})
+ endif()
+endforeach()
+
+
+# go into each sub-directory
+foreach(subdir ${dirlist})
+ add_subdirectory(${subdir})
+endforeach()
# propagate ModuleObjectSpecFiles to the parent scope so we can use it again
diff --git a/contrib/ExampleDataAccess/CMakeLists.txt b/contrib/ExampleDataAccess/CMakeLists.txt
index cabcc92..788d5eb 100644
--- a/contrib/ExampleDataAccess/CMakeLists.txt
+++ b/contrib/ExampleDataAccess/CMakeLists.txt
@@ -1,17 +1,24 @@
-
-ecbuild_add_executable( TARGET DataAccessBlackBox
- SOURCES DataAccessBlackBox.cc
- DEFINITIONS ${METVIEW_EXTRA_DEFINITIONS}
- INCLUDES ${METVIEW_STANDARD_INCLUDES}
- LIBS ${STANDARD_METVIEW_LIBS}
- )
-
-
-metview_module_files(ETC_FILES ObjectSpec.DataAccess
- DataAccessDef
- DataAccessRules
- XPM_FILES DATA_ACCESS.xpm
- SVG_FILES DATA_ACCESS.svg)
-
-
-metview_script_files(SCRIPT_FILES DataAccessScript)
+# -----------------------------------------------------------
+# This is an example CMakeLists.txt file for a contributed
+# module. The contents are commented out because it is an
+# example only, and we do not want the resulting icon to be
+# available from Metview!
+# -----------------------------------------------------------
+#
+#ecbuild_add_executable( TARGET DataAccessBlackBox
+# SOURCES DataAccessBlackBox.cc
+# DEFINITIONS ${METVIEW_EXTRA_DEFINITIONS}
+# INCLUDES ${METVIEW_STANDARD_INCLUDES}
+# LIBS ${STANDARD_METVIEW_LIBS}
+# )
+#
+#
+#metview_module_files(ETC_FILES ObjectSpec.DataAccess
+# DataAccessDef
+# DataAccessRules
+# XPM_FILES DATA_ACCESS.xpm
+# SVG_FILES DATA_ACCESS.svg)
+#
+#
+#metview_script_files(SCRIPT_FILES DataAccessScript)
+#
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index a14616a..e5ab3b5 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -36,12 +36,52 @@ metview_script_files(SCRIPT_FILES ${scripts})
#
# generate the 'compile' script for inline C/Fortran in Macro
-# only use the first library returned in GRIB_API_LIBRARIES
+# only use the first library returned in EMOS_LIBRARIES
# - this is because it can also return a list of shared libraries used by
# the PGI compiler which can then not be found at run-time.
list(GET EMOS_LIBRARIES 0 EMOS_FIRST_LIB)
-string (REPLACE ";" " " GRIB_API_LIBRARIES_STR "${GRIB_API_LIBRARIES}")
-string (REPLACE ";" " " EMOS_LIBRARIES_STR "${EMOS_FIRST_LIB}")
+
+
+# for GRIB_API, we *might* get something like
+# grib_api;grib_api_f77;grib_api_f90;/usr/lib64/libjasper.so;/usr/lib64/libjpeg.so;/usr/lib64/libm.so
+# which is not all that we need to link. So we convert 'grib_api' into '-lgrib_api'
+# and for the Fortran libraries.
+
+set(GRIB_API_LIBRARIES_STR " ${GRIB_API_LIBRARIES}") # add a space to the beginning
+
+string (REPLACE ";" " " GRIB_API_LIBRARIES_STR "${GRIB_API_LIBRARIES_STR}")
+string (REPLACE " grib_api" " -lgrib_api" GRIB_API_LIBRARIES_STR "${GRIB_API_LIBRARIES_STR}")
+string (REPLACE ";" " " EMOS_LIBRARIES_STR "${EMOS_FIRST_LIB}")
+
+
+set(GRIB_API_LIBRARIES_STR "${GRIB_API_LIBRARIES_STR} ${PTHREAD_LIB}") # add pthread in case needed
+
+# if we are linking with shared GRIB_API libraries, then in order to be able
+# to run compiled inline Fortran/C/Macro programs, we will need to set
+# LD_LIBRARY_PATH to where GRIB_API was installed (this should only be
+# needed if GRIB_API was installed in a non-default location).
+# GRIB_API_LIB_DIR will be added to METVIEW_LD_PATHS and used in compile.in.
+
+# first, if CMAKE_PREFIX_PATH is defined and GRIB_API_PATH is not, then
+# GRIB_API might be installed in CMAKE_PREFIX_PATH
+if(CMAKE_PREFIX_PATH)
+ if(NOT GRIB_API_PATH)
+ set(GRIB_API_PATH ${CMAKE_PREFIX_PATH})
+ endif()
+endif()
+
+if(GRIB_API_PATH)
+ if(EXISTS "${GRIB_API_PATH}/lib")
+ set(GRIB_API_LIB_DIR "${GRIB_API_PATH}/lib")
+ else()
+ endif()
+
+ if(EXISTS "${GRIB_API_PATH}/lib64")
+ set(GRIB_API_LIB_DIR "${GRIB_API_PATH}/lib64")
+ endif()
+
+ set(GRIB_API_LIBRARIES_STR "-L${GRIB_API_PATH}/lib -L${GRIB_API_PATH}/lib64 ${GRIB_API_LIBRARIES_STR}")
+endif()
foreach (inc ${GRIB_API_INCLUDE_DIRS})
set(GRIB_API_INCLUDE_DIRS_STR "${GRIB_API_INCLUDE_DIRS_STR} -I${inc}")
@@ -80,9 +120,9 @@ ecbuild_get_date(TODAYS_DATE)
set(SYS_LIBDIRS "/usr/lib64" "/usr/lib64/" "/usr/lib" "/usr/lib/" "")
set(METVIEW_LD_PATHS "")
-foreach(LIBPATH ${MAGICS_LIB_DIR} ${ODB_API_LIB_DIR})
+foreach(LIBPATH ${MAGICS_LIB_DIR} ${ODB_API_LIB_DIR} ${GRIB_API_LIB_DIR})
list(FIND SYS_LIBDIRS ${LIBPATH} IND)
- message(STATUS "IS ${IND}")
+ #message(STATUS "IS ${LIBPATH} ${IND}")
if(IND EQUAL -1) # path not in the list of system paths
set(METVIEW_LD_PATHS "${LIBPATH}:${METVIEW_LD_PATHS}")
endif()
diff --git a/scripts/CONFIG.site.in b/scripts/CONFIG.site.in
index 5f9515f..ef3a1d6 100644
--- a/scripts/CONFIG.site.in
+++ b/scripts/CONFIG.site.in
@@ -8,7 +8,7 @@ set -ea
#
WMO_SITE_NR=@SITE_WMO_CODE@
##QT_DIR_LIB=/usr/local/apps/qt/4.6.2-64/lib
-PATH=@NETCDF_BIN@:${PATH}
+PATH=@NETCDF_BIN@:@ODB_API_BIN_DIR@:${PATH}
INSTALLDIR=@CMAKE_INSTALL_PREFIX@
METVIEW_SCRIPT=@METVIEW_SCRIPT@
MV_MARS_ACCESS=@MARS_ACCESS@
diff --git a/scripts/metview_base b/scripts/metview_base
index 0381e89..08741bb 100755
--- a/scripts/metview_base
+++ b/scripts/metview_base
@@ -710,16 +710,26 @@ then
# set up the file viewers
-
- METVIEW_PS_VIEWER=${METVIEW_PS_VIEWER:=gv}
- METVIEW_PDF_VIEWER=${METVIEW_PDF_VIEWER:=xpdf}
- METVIEW_PNG_VIEWER=${METVIEW_PNG_VIEWER:=xv}
- METVIEW_JPEG_VIEWER=${METVIEW_JPEG_VIEWER:=xv}
- METVIEW_GIF_VIEWER=${METVIEW_GIF_VIEWER:=display}
- METVIEW_TIFF_VIEWER=${METVIEW_TIFF_VIEWER:=display}
- METVIEW_RASTER_EDITOR=${METVIEW_RASTER_EDITOR:=gimp}
- METVIEW_KML_VIEWER=${METVIEW_KML_VIEWER:=google-earth}
-
+ uname_=`uname`
+ if [[ "$uname_" == 'Darwin' ]]; then
+ METVIEW_PS_VIEWER=${METVIEW_PS_VIEWER:=open}
+ METVIEW_PDF_VIEWER=${METVIEW_PDF_VIEWER:=open}
+ METVIEW_PNG_VIEWER=${METVIEW_PNG_VIEWER:=open}
+ METVIEW_JPEG_VIEWER=${METVIEW_JPEG_VIEWER:=open}
+ METVIEW_GIF_VIEWER=${METVIEW_GIF_VIEWER:=open}
+ METVIEW_TIFF_VIEWER=${METVIEW_TIFF_VIEWER:=open}
+ METVIEW_RASTER_EDITOR=${METVIEW_RASTER_EDITOR:=open}
+ METVIEW_GRAPHICS_SYSTEM=${METVIEW_GRAPHICS_SYSTEM:="native"}
+ else
+ METVIEW_PS_VIEWER=${METVIEW_PS_VIEWER:=gv}
+ METVIEW_PDF_VIEWER=${METVIEW_PDF_VIEWER:=xpdf}
+ METVIEW_PNG_VIEWER=${METVIEW_PNG_VIEWER:=xv}
+ METVIEW_JPEG_VIEWER=${METVIEW_JPEG_VIEWER:=xv}
+ METVIEW_GIF_VIEWER=${METVIEW_GIF_VIEWER:=display}
+ METVIEW_TIFF_VIEWER=${METVIEW_TIFF_VIEWER:=display}
+ METVIEW_RASTER_EDITOR=${METVIEW_RASTER_EDITOR:=gimp}
+ METVIEW_KML_VIEWER=${METVIEW_KML_VIEWER:=google-earth}
+ fi
#########
# URLs
METVIEW_URL=${METVIEW_URL:=http://www.ecmwf.int/publications/manuals/metview}
diff --git a/scripts/metview_help b/scripts/metview_help
index 3106342..98d49ac 100755
--- a/scripts/metview_help
+++ b/scripts/metview_help
@@ -13,7 +13,7 @@
cat <<HEND
_________________________________________________________________________
- `cat $METVIEW_DIR_SHARE/app-defaults/MvTitleBarVersionText` @ `hostname`
+ $METVIEW_VERSION_TITLE @ `hostname`
_________________________________________________________________________
Environment variables that have an effect on Metview-Magics-MARS-Emoslib-GRIB_API:
diff --git a/scripts/mv_scm_run b/scripts/mv_scm_run
index ae0c0ab..c5f0bf8 100644
--- a/scripts/mv_scm_run
+++ b/scripts/mv_scm_run
@@ -154,6 +154,11 @@ done
#Run SCM
#-------------------------------
+# temporary fix (April 2015) until the classroom machines are upgraded
+if [ ${OS_VERSION} = "opensuse113" ] ; then
+ LD_LIBRARY_PATH="/home/rd/openifs/software/grib_api/1.11.0/grib_api-gcc-4.8.1-opt/lib:${LD_LIBRARY_PATH}"
+fi
+
$exe_SCM > "${f_LOG}" 2>&1
outCode=$?
diff --git a/share/metview/app-defaults/Drawers/Data Access/.EcRegrid Mars Retrieval b/share/metview/app-defaults/Drawers/Data Access/.EcRegrid Mars Retrieval
deleted file mode 100644
index f4a0e11..0000000
--- a/share/metview/app-defaults/Drawers/Data Access/.EcRegrid Mars Retrieval
+++ /dev/null
@@ -1,5 +0,0 @@
-USER_INTERFACE,
- ICON_CLASS = RETRIEVE_ECREGRID,
- X = 11,
- Y = 110
-
diff --git a/share/metview/app-defaults/Drawers/Data Access/EcRegrid Mars Retrieval b/share/metview/app-defaults/Drawers/Data Access/EcRegrid Mars Retrieval
deleted file mode 100644
index eb0ba90..0000000
--- a/share/metview/app-defaults/Drawers/Data Access/EcRegrid Mars Retrieval
+++ /dev/null
@@ -1,3 +0,0 @@
-RETRIEVE_ECREGRID,
- GRID = 1.5/1.5
-
diff --git a/share/metview/app-defaults/Drawers/Filters/.EcRegrid GRIB Filter b/share/metview/app-defaults/Drawers/Filters/.EcRegrid GRIB Filter
deleted file mode 100644
index c83b886..0000000
--- a/share/metview/app-defaults/Drawers/Filters/.EcRegrid GRIB Filter
+++ /dev/null
@@ -1,5 +0,0 @@
-USER_INTERFACE,
- ICON_CLASS = READ_ECREGRID,
- X = 27,
- Y = 146
-
diff --git a/share/metview/app-defaults/Drawers/Filters/EcRegrid GRIB Filter b/share/metview/app-defaults/Drawers/Filters/EcRegrid GRIB Filter
deleted file mode 100644
index b583da2..0000000
--- a/share/metview/app-defaults/Drawers/Filters/EcRegrid GRIB Filter
+++ /dev/null
@@ -1,2 +0,0 @@
-READ_ECREGRID
-
diff --git a/share/metview/etc/CMakeLists.txt b/share/metview/etc/CMakeLists.txt
index 870be6a..02edfb6 100644
--- a/share/metview/etc/CMakeLists.txt
+++ b/share/metview/etc/CMakeLists.txt
@@ -41,6 +41,7 @@ set(files
MARS_remote
MARS_webapi
MAXISDef MAXISRules
+ MBOXPLOTDef MBOXPLOTRules
MCOASTDef MCOASTRules
MCONTDef MCONTRules
MGRAPHDef MGRAPHRules
@@ -48,7 +49,6 @@ set(files
MIMPORTDef MIMPORTRules
MSYMBDef MSYMBRules
MTAYLORDef MTAYLORRules
- MTHERMOGRIDDef MTHERMOGRIDRules
MTEXTDef MTEXTRules
MWINDDef MWINDRules
MacroDef
@@ -123,6 +123,7 @@ set(files
rt_by_obsgroup.chk
reportypes.def
tigge.def
+ marsdb.webapi.cfg
ms_mars.cfg
ms_mars.cfg.INFO
macro_deprecated_functions.txt
diff --git a/share/metview/etc/ContRules b/share/metview/etc/ContRules
index 6da9004..1598df3 100755
--- a/share/metview/etc/ContRules
+++ b/share/metview/etc/ContRules
@@ -282,3 +282,5 @@
%unset GRIB_TEXT_PLOT_TYPE
%unset GRIB_TEXT_SPLIT
+%if CONTOUR_SHADE = ON %and CONTOUR_SHADE_TECHNIQUE = GRID_SHADING %then
+ %unset CONTOUR_METHOD
diff --git a/share/metview/etc/MARS_webapi b/share/metview/etc/MARS_webapi
index 4ad71a3..6a1a826 100644
--- a/share/metview/etc/MARS_webapi
+++ b/share/metview/etc/MARS_webapi
@@ -1,9 +1,11 @@
-cat <<END_OF_HERE_DOCUMENT
+
#---------------------------------------------------------- MARS_webapi
#
# Only MARS access through the Web API is configured
#
#--------------------------------------------------------------------
-END_OF_HERE_DOCUMENT
+cat $METVIEW_DIR_SHARE/etc/marsdb.webapi.cfg
+
+
diff --git a/share/metview/etc/MBOXPLOTDef b/share/metview/etc/MBOXPLOTDef
new file mode 100644
index 0000000..8d9d5dd
--- /dev/null
+++ b/share/metview/etc/MBOXPLOTDef
@@ -0,0 +1,205 @@
+PARAMSHARE ; ParamShare; PARAMSHARE
+{
+ COLOUR {
+ %include MagicsColors.h
+ }
+ STYLE {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DOT; CHAIN_DOT
+ CHAIN_DASH; CHAIN_DASH
+ }
+}
+MBOXPLOT; Magics; Automatically generated
+{
+ BOXPLOT_POSITIONS
+ [ help_text = 'Array containing the x-values ' ]
+ {
+ *
+ /
+ }
+ BOXPLOT_DATE_POSITIONS
+ [ help_text = 'Array containing the dates X-values ' ]
+ { @; @
+ /
+ }
+ BOXPLOT_MINIMUM_VALUES
+ [ help_text = 'Array containing minimum values ' ]
+ {
+ *
+ /
+ }
+ BOXPLOT_MAXIMUM_VALUES
+ [ help_text = 'Array containing maximum values ' ]
+ {
+ *
+ /
+ }
+ BOXPLOT_BOX_UPPER_VALUES
+ [ help_text = 'Array containing the upper box values ' ]
+ {
+ *
+ /
+ }
+ BOXPLOT_BOX_LOWER_VALUES
+ [ help_text = 'Array containing the lower box values ' ]
+ {
+ *
+ /
+ }
+ BOXPLOT_MEDIAN_VALUES
+ [ help_text = 'Array containing the median values ' ]
+ {
+ *
+ /
+ }
+ BOXPLOT_BOX
+ [ help_text = 'Turns the plotting of the box on or off ' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ BOXPLOT_BOX_COLOUR
+ [ help_text = 'Colour of the box ', help = help_colour,interface = colour]
+ {
+ &PARAMSHARE&COLOUR
+ } = SKY
+
+ BOXPLOT_BOX_WIDTH
+ [ help_text = 'Width of the box in centimeters ' ]
+ {
+ *
+ } = 1.0
+
+ BOXPLOT_BOX_BORDER
+ [ help_text = 'Determines whether the box border is drawn or not ' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ BOXPLOT_BOX_BORDER_COLOUR
+ [ help_text = 'Colour of the box border ', help = help_colour,interface = colour]
+ {
+ &PARAMSHARE&COLOUR
+ } = NAVY
+
+ BOXPLOT_BOX_BORDER_THICKNESS
+ [ help_text = 'Thickness of the box border ' ]
+ {
+ *
+ } = 1
+
+ BOXPLOT_BOX_BORDER_LINE_STYLE
+ [ help_text = 'Line style of the box border ' ]
+ {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DASH; CHAIN_DASH
+ CHAIN_DOT; CHAIN_DOT
+ } = SOLID
+
+ BOXPLOT_MEDIAN
+ [ help_text = 'Determines whether the median line is drawn or not ' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ BOXPLOT_MEDIAN_COLOUR
+ [ help_text = 'Colour of the median line ', help = help_colour,interface = colour]
+ {
+ &PARAMSHARE&COLOUR
+ } = NAVY
+
+ BOXPLOT_MEDIAN_THICKNESS
+ [ help_text = 'Thickness of the median line ' ]
+ {
+ *
+ } = 3
+
+ BOXPLOT_MEDIAN_LINE_STYLE
+ [ help_text = 'Line style of the median line ' ]
+ {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DASH; CHAIN_DASH
+ CHAIN_DOT; CHAIN_DOT
+ } = SOLID
+
+ BOXPLOT_WHISKER
+ [ help_text = 'Determines whether the whiskers are shown as lines, boxes or not at all ' ]
+ {
+ BOX; BOX
+ OFF; OFF
+ LINE; LINE
+ } = LINE
+
+ BOXPLOT_WHISKER_BOX_COLOUR
+ [ help_text = 'Colour of the whisker box ', help = help_colour,interface = colour]
+ {
+ &PARAMSHARE&COLOUR
+ } = SKY
+
+ BOXPLOT_WHISKER_BOX_WIDTH
+ [ help_text = 'Width of the whisker box in centimeters ' ]
+ {
+ *
+ } = 0.25
+
+ BOXPLOT_WHISKER_BOX_BORDER
+ [ help_text = 'Determines whether the whisker box border is drawn or not ' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ BOXPLOT_WHISKER_BOX_BORDER_COLOUR
+ [ help_text = 'Colour of the whisker box border ', help = help_colour,interface = colour]
+ {
+ &PARAMSHARE&COLOUR
+ } = NAVY
+
+ BOXPLOT_WHISKER_BOX_BORDER_THICKNESS
+ [ help_text = 'Thickness of the whisker box border ' ]
+ {
+ *
+ } = 1
+
+ BOXPLOT_WHISKER_BOX_BORDER_LINE_STYLE
+ [ help_text = 'Line style of the whisker box border ' ]
+ {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DASH; CHAIN_DASH
+ CHAIN_DOT; CHAIN_DOT
+ } = SOLID
+
+ BOXPLOT_WHISKER_LINE_COLOUR
+ [ help_text = 'Colour of the whisker line ', help = help_colour,interface = colour]
+ {
+ &PARAMSHARE&COLOUR
+ } = NAVY
+
+ BOXPLOT_WHISKER_LINE_THICKNESS
+ [ help_text = 'Thickness of the whisker line ' ]
+ {
+ *
+ } = 3
+
+ BOXPLOT_WHISKER_LINE_STYLE
+ [ help_text = 'Line style of the whisker line ' ]
+ {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DASH; CHAIN_DASH
+ CHAIN_DOT; CHAIN_DOT
+ } = SOLID
+
+}
diff --git a/share/metview/etc/MBOXPLOTRules b/share/metview/etc/MBOXPLOTRules
new file mode 100644
index 0000000..3b8dc20
--- /dev/null
+++ b/share/metview/etc/MBOXPLOTRules
@@ -0,0 +1,96 @@
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_BOX_BORDER_LINE_STYLE
+
+%if BOXPLOT_BOX_BORDER <> ON %then
+ %unset BOXPLOT_BOX_BORDER_LINE_STYLE
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_MEDIAN_LINE_STYLE
+
+%if BOXPLOT_MEDIAN <> ON %then
+ %unset BOXPLOT_MEDIAN_LINE_STYLE
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER_THICKNESS
+
+%if BOXPLOT_WHISKER_BOX_BORDER <> ON %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER_THICKNESS
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_BOX_COLOUR
+
+%if BOXPLOT_WHISKER <> OFF %then
+ %unset NOBOXPLOTWHISKER
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_BOX_WIDTH
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER_COLOUR
+
+%if BOXPLOT_WHISKER_BOX_BORDER <> ON %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER_COLOUR
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_BOX_BORDER_COLOUR
+
+%if BOXPLOT_BOX_BORDER <> ON %then
+ %unset BOXPLOT_BOX_BORDER_COLOUR
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset NOBOXPLOTWHISKERBORDER
+
+%if BOXPLOT_WHISKER_BOX_BORDER <> OFF %then
+ %unset NOBOXPLOTWHISKERBORDER
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_MEDIAN_COLOUR
+
+%if BOXPLOT_MEDIAN <> ON %then
+ %unset BOXPLOT_MEDIAN_COLOUR
+
+%if BOXPLOT_WHISKER <> LINE %then
+ %unset BOXPLOT_WHISKER_LINE_COLOUR
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_BOX_BORDER
+
+%if BOXPLOT_BOX <> OFF %then
+ %unset NOBOXPLOTBOX
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset BOXPLOT_WHISKER_BOX_WIDTH
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_MEDIAN
+
+%if BOXPLOT_WHISKER <> LINE %then
+ %unset BOXPLOT_WHISKER_LINE_STYLE
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset BOXPLOT_WHISKER_BOX_COLOUR
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_MEDIAN_THICKNESS
+
+%if BOXPLOT_MEDIAN <> ON %then
+ %unset BOXPLOT_MEDIAN_THICKNESS
+
+%if BOXPLOT_BOX <> ON %then
+ %unset BOXPLOT_BOX_BORDER_THICKNESS
+
+%if BOXPLOT_BOX_BORDER <> ON %then
+ %unset BOXPLOT_BOX_BORDER_THICKNESS
+
+%if BOXPLOT_WHISKER <> BOX %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER_LINE_STYLE
+
+%if BOXPLOT_WHISKER_BOX_BORDER <> ON %then
+ %unset BOXPLOT_WHISKER_BOX_BORDER_LINE_STYLE
+
+%if BOXPLOT_WHISKER <> LINE %then
+ %unset BOXPLOT_WHISKER_LINE_THICKNESS
+
diff --git a/share/metview/etc/MCONTDef b/share/metview/etc/MCONTDef
index aa64c9e..adc4993 100644
--- a/share/metview/etc/MCONTDef
+++ b/share/metview/etc/MCONTDef
@@ -414,6 +414,11 @@ MCONT; Magics; Automatically generated
ECCHART;ECCHART
} = OFF
+ CONTOUR_INTERNAL_REDUCTION_FACTOR
+ {
+ *
+ } = 4.0
+
CONTOUR_HILO
{
ON; ON
diff --git a/share/metview/etc/MCONTRules b/share/metview/etc/MCONTRules
index 8fa1923..e7b5f90 100644
--- a/share/metview/etc/MCONTRules
+++ b/share/metview/etc/MCONTRules
@@ -49,7 +49,7 @@
%if CONTOUR_LEVEL_SELECTION_TYPE <> INTERVAL %then
%unset CONTOUR_INTERVAL
-%if CONTOUR <> ON %or CONTOUR_HIGHLIGHT <> ON %or CONTOUR_LEVEL_SELECTION_TYPE <> COUNT %and CONTOUR_LEVEL_SELECTION_TYPE <> INTERVAL %then
+%if CONTOUR <> ON %or CONTOUR_HIGHLIGHT <> ON %and CONTOUR_LEVEL_SELECTION_TYPE <> COUNT %and CONTOUR_LEVEL_SELECTION_TYPE <> INTERVAL %then
%unset CONTOUR_REFERENCE_LEVEL
%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> BOTH %and CONTOUR_HILO_TYPE <> NUMBER %and CONTOUR_HILO_TYPE <> TEXT %then
@@ -161,6 +161,9 @@
%unset CONTOUR_AKIMA_X_RESOLUTION
%unset CONTOUR_AKIMA_Y_RESOLUTION
+%if CONTOUR_SHADE = ON %and CONTOUR_SHADE_TECHNIQUE = GRID_SHADING %then
+ %unset CONTOUR_METHOD
+
%if CONTOUR <> ON %or CONTOUR_HIGHLIGHT <> ON %then
%unset CONTOUR_HIGHLIGHT_COLOUR
%unset CONTOUR_HIGHLIGHT_FREQUENCY
diff --git a/share/metview/etc/MLEGENDDef b/share/metview/etc/MLEGENDDef
index 1c29537..60f56ea 100755
--- a/share/metview/etc/MLEGENDDef
+++ b/share/metview/etc/MLEGENDDef
@@ -106,6 +106,12 @@ MLEGEND; Magics; Automatically generated
POSITIONAL;POSITIONAL
} = AUTOMATIC
+ LEGEND_AUTOMATIC_POSITION
+ {
+ TOP;TOP
+ RIGHT;RIGHT
+ } = TOP
+
LEGEND_TEXT_FONT
{
ARIAL; ARIAL
diff --git a/share/metview/etc/MLEGENDRules b/share/metview/etc/MLEGENDRules
index f64951c..bf780f0 100644
--- a/share/metview/etc/MLEGENDRules
+++ b/share/metview/etc/MLEGENDRules
@@ -46,6 +46,9 @@
%unset LEGEND_BOX_X_LENGTH
%unset LEGEND_BOX_Y_LENGTH
+%if LEGEND_BOX_MODE <> AUTOMATIC %then
+ %unset LEGEND_AUTOMATIC_POSITION
+
%if LEGEND_DISPLAY_TYPE <> CONTINUOUS %and LEGEND_DISPLAY_TYPE <> HISTOGRAM %then
%unset LEGEND_LABEL_FREQUENCY
diff --git a/share/metview/etc/MarsRules b/share/metview/etc/MarsRules
index 7ce2301..32443da 100755
--- a/share/metview/etc/MarsRules
+++ b/share/metview/etc/MarsRules
@@ -502,9 +502,11 @@
CLASS=MC %or
CLASS=EM %or
CLASS=E2 %or
+ CLASS=EA %or
CLASS=NR %or
CLASS=J5 %or
CLASS=RM %or
+ CLASS=UR %or
CLASS=ME %or
CLASS=EN)
%and (%not DATABASE) %then
@@ -574,10 +576,11 @@
CLASS<>ME %and
CLASS<>EM %and
CLASS<>E2 %and
+ CLASS<>EA %and
+ CLASS<>UR %and
CLASS<>MC %and
CLASS<>NR %and
CLASS<>J5 %and
- CLASS<>RM %and
CLASS<>CS)
%and (%not DATABASE) %then
%set DATABASE = marsrd
diff --git a/share/metview/etc/ObjectList b/share/metview/etc/ObjectList
index 142b132..0736570 100644
--- a/share/metview/etc/ObjectList
+++ b/share/metview/etc/ObjectList
@@ -645,46 +645,32 @@ object,
######################################
object,
- class = PCOAST,
- icon_box = Visual definitions,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/CoastDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/CoastRules',
- default_name = MV3 Coastlines,
- help_page = Coastlines,
- type = Visdef,
- macro = pcoast,
- expand = 128, # EXPAND_NO_DEFAULT
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/PCOAST.icon'
-
-object,
- class = MCOAST,
- icon_box = Visual definitions,
- can_be_created = True,
- definition_file = '$METVIEW_DIR_SHARE/etc/MCOASTDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/MCOASTRules',
- default_name = Coastlines,
- help_page = Coastlines,
- type = Visdef,
- macro = mcoast,
- expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/MCOAST.icon'
-
+ class = PCOAST,
+ icon_box = Visual definitions,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/CoastDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/CoastRules',
+ default_name = MV3 Coastlines,
+ help_page = Coastlines,
+ type = Visdef,
+ macro = pcoast,
+ expand = 128, # EXPAND_NO_DEFAULT
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/PCOAST.icon'
+
object,
- class = MTHERMOGRID,
+ class = MCOAST,
icon_box = Visual definitions,
can_be_created = True,
- definition_file = '$METVIEW_DIR_SHARE/etc/MTHERMOGRIDDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/MTHERMOGRIDRules',
- default_name = Thermo Grid,
- help_page = Thermo_Grid,
+ definition_file = '$METVIEW_DIR_SHARE/etc/MCOASTDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/MCOASTRules',
+ default_name = Coastlines,
+ help_page = Coastlines,
type = Visdef,
- macro = mthermogrid,
+ macro = mcoast,
expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/MTHERMOGRID.icon'
+ pixmap = '$METVIEW_DIR_SHARE/icons/MCOAST.icon'
object,
class = MTAYLOR,
@@ -911,6 +897,20 @@ object,
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/MIMPORT.icon'
+object,
+ class = MBOXPLOT,
+ icon_box = Visual definitions,
+ type = Visdef,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR_SHARE/etc/MBOXPLOTDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/MBOXPLOTRules',
+ default_name = Box Plotting,
+ help_page = Box_Plotting,
+ macro = mboxplot,
+ expand = 128, # EXPAND_DEFAULT
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/MBOXPLOT.icon'
+
####################################################################
# Filter objects
####################################################################
diff --git a/share/metview/etc/PageFrameDef b/share/metview/etc/PageFrameDef
index 91894c6..96fa346 100644
--- a/share/metview/etc/PageFrameDef
+++ b/share/metview/etc/PageFrameDef
@@ -2,12 +2,12 @@ PAGE_FRAME
{
ON ; ON
OFF ; OFF
-} = ON
+} = OFF
PAGE_FRAME_COLOUR [interface = colour]
{
%include MagicsColors.h
-} = BLUE
+} = CHARCOAL
PAGE_FRAME_LINE_STYLE
{
diff --git a/share/metview/etc/PageFrameRules b/share/metview/etc/PageFrameRules
index 03a1513..3fea393 100644
--- a/share/metview/etc/PageFrameRules
+++ b/share/metview/etc/PageFrameRules
@@ -5,3 +5,12 @@
%if PAGE_ID_LINE = OFF %then
%unset PAGE_ID_LINE_USER_TEXT
+ %unset PAGE_ID_LINE_TYPE
+ %unset PAGE_ID_LINE_COLOUR
+ %unset PAGE_ID_LINE_SYSTEM_PLOT
+ %unset PAGE_ID_LINE_DATE_PLOT
+ %unset PAGE_ID_LINE_USER_TEXT_PLOT
+ %unset PAGE_ID_LINE_ERRORS_PLOT
+ %unset PAGE_ID_LINE_LOGO_PLOT
+ %unset PAGE_ID_LINE_HEIGHT
+ %unset PAGE_ID_LINE_QUALITY
diff --git a/share/metview/etc/StationDef b/share/metview/etc/StationDef
index 7b8809c..463219b 100755
--- a/share/metview/etc/StationDef
+++ b/share/metview/etc/StationDef
@@ -104,4 +104,10 @@ STATIONS ; dummy ; dummy2
*
/
} = 52/-1/51/0
+
+ FAIL_ON_ERROR
+ {
+ YES
+ NO
+ } = YES
}
diff --git a/share/metview/etc/ecmwf.def b/share/metview/etc/ecmwf.def
index 2f86a8f..3ebf2cc 100755
--- a/share/metview/etc/ecmwf.def
+++ b/share/metview/etc/ecmwf.def
@@ -683,10 +683,11 @@ TOTAL AEROSOL OPTICAL DEPTH AT 1240NM ; AOD1240 ; 216.210
PERMANENT EXPERIMENT ; PE
E20CM ; EM
E20C ; E2
- ESAT ; EA
+ ESAT ; ERA5 ; EA
EPST ; EP
EURO4M ; RM
+ UERRA ; UR
20CR ; NCEP 20CR ; NR
JRA55 ; J5
@@ -1082,7 +1083,7 @@ FBWINDSAT = (156)
# Type LSD (NSD)
- LAND SURFACE DATA ; LSD = (1/2/3/4/7/28/140/147/165)
+ LAND SURFACE DATA ; LSD = (1/2/3/4/7/28/140/147/165/170/172/176/178)
SYNOP LAND ; S ; 1
SYNOP RECORD 2 LAND ; S2 ; 2
@@ -1101,7 +1102,7 @@ FBWINDSAT = (156)
# Type SSD (NSD)
- SEA SURFACE DATA ; SSD = ( 9/11/12/13/14/19/21/22/23 )
+ SEA SURFACE DATA ; SSD = ( 9/11/12/13/14/19/21/22/23/180 )
SYNOP ABBREVIATED SHIP ; SAB ; 9
SYNOP SHIP ; SS ; 11
@@ -1119,7 +1120,7 @@ FBWINDSAT = (156)
# Type VSNS (NSD)
-VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107/109/111)
+VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107/109/111/112/113)
PILOT LAND ; P ; 91
PILOT SHIP ; PS ; 92
@@ -1223,7 +1224,7 @@ DERIVED DATA ; DD = (164/237)
# Type SDS, ERS1 (SD)
-SURFACE DATA SATELLITE ; ERS1; SDS = (121/122/123/124/210/212/213/214/216)
+SURFACE DATA SATELLITE ; ERS1; SDS = (121/122/123/124/210/212/213/214/216/217/218)
WAVE SCATTEROMETER ; WAS ; 121
WIND SCATTEROMETER ; WIS ; 122
@@ -1234,6 +1235,8 @@ SURFACE DATA SATELLITE ; ERS1; SDS = (121/122/123/124/210/212/213/214/216)
ENVISAT RADAR ALTIMETER ; ERA ; 213
JASON RADAR ALTIMETER ; JRA ; 214
JASON2 RADAR ALTIMETER ; J2RA ; 216
+ CRYOSAT-2 RADAR ALTIMETER ; CRYORA ; 217
+ SARAL RADAR ALTIMETER ; SARAL ; 218
# RADAR
REPROCESSED WIND ; RW ; NEXRAD ; 125
@@ -1251,16 +1254,21 @@ TRMM = (129/130)
TMI BRIGHTNESS TEMPERATURES ; TBT ; 129
TMI INSTANTANEOUS 3-D RAINFALL STRUCTURE ; TI3R ; 130
+# GPM
+GPM = (224)
+GMI BRIGHTNESS TEMPERATURES ; GBT ; 224
+
+
+
QSCAT = (137/138)
QUIKSCAT ; QSCA ; 137
QUIKSCAT SEAWINDS ; QSSW ; 138
-REO3 = (206/207/208/209/217)
+REO3 = (206/207/208/209)
RETRIEVED OZONE ; REO3 ; 206
MODIS AEROSOL ; MODIS ; 207
LAYER INTEGRATED MASS DENSITY ; LIMD ; 208
LAYER INTEGRATED MASS DENSITY WITH AVERAGING KERNELS ; LIMD_AK ; 209
-LAYER INTEGRATED MASS DENSITY WITH AVERAGING KERNELS AND A PRIORI PROFIL ; LIMD_AKPP ; 217
GBGPS = (110)
GROUND BASED GPS ; PGPS ; 110
@@ -1735,11 +1743,11 @@ ARCHIVE ; Archives data ; MARS
INTERPOLATION
{
- NEAREST NEIGHBOUR
- NEAREST LSM
+ NN ; NEAREST NEIGHBOUR
+ NLSM ; NEAREST LSM
BILINEAR
LINEAR
- LINEAR FIT
+ LFIT ; LINEAR FIT
CUBIC
AVERAGE WEIGHTED
AVERAGE
@@ -2353,6 +2361,7 @@ LIST ; LIST FDF ENTRIES AND CFS FILES ; MARS
{
REDUCED
REGULAR
+ OCTAHEDRAL
OFF ; OFF; OFF
} = OFF
@@ -2837,6 +2846,7 @@ STAGE ; STAGE FIELDS ; MARS
{
REDUCED
REGULAR
+ OCTAHEDRAL
OFF ; OFF; OFF
} = OFF
@@ -3880,6 +3890,7 @@ RETRIEVE ; Retrieval of data ; MARS
{
REDUCED
REGULAR
+ OCTAHEDRAL
OFF ; OFF
} = OFF
@@ -4363,6 +4374,7 @@ READ ; X; METVIEW
{
REDUCED
REGULAR
+ OCTAHEDRAL
OFF ; OFF; OFF
} = OFF
@@ -6258,6 +6270,7 @@ BROWSE ; LIST FDF ENTRIES AND CFS FILES ; MARS
{
REDUCED
REGULAR
+ OCTAHEDRAL
OFF ; OFF; OFF
} = OFF
@@ -7071,6 +7084,7 @@ ERASE ; Erase data ; MARS
{
REDUCED
REGULAR
+ OCTAHEDRAL
OFF ; OFF
} = OFF
diff --git a/share/metview/etc/mars.chk b/share/metview/etc/mars.chk
index 7ce2301..32443da 100755
--- a/share/metview/etc/mars.chk
+++ b/share/metview/etc/mars.chk
@@ -502,9 +502,11 @@
CLASS=MC %or
CLASS=EM %or
CLASS=E2 %or
+ CLASS=EA %or
CLASS=NR %or
CLASS=J5 %or
CLASS=RM %or
+ CLASS=UR %or
CLASS=ME %or
CLASS=EN)
%and (%not DATABASE) %then
@@ -574,10 +576,11 @@
CLASS<>ME %and
CLASS<>EM %and
CLASS<>E2 %and
+ CLASS<>EA %and
+ CLASS<>UR %and
CLASS<>MC %and
CLASS<>NR %and
CLASS<>J5 %and
- CLASS<>RM %and
CLASS<>CS)
%and (%not DATABASE) %then
%set DATABASE = marsrd
diff --git a/share/metview/etc/marsdb.webapi.cfg b/share/metview/etc/marsdb.webapi.cfg
new file mode 100644
index 0000000..2fc6863
--- /dev/null
+++ b/share/metview/etc/marsdb.webapi.cfg
@@ -0,0 +1,14 @@
+
+# Database definition for accessing MARS through the Web API
+
+database,
+ class = apibase,
+ name = Web API MARS/ECMWF REST API/ECMWF Web API/Web API,
+ visit = true
+
+database,
+ class = apibase,
+ name = Web API Datasets/Data Server,
+ datasets = "datasets",
+ visit = true
+
diff --git a/share/metview/etc/obsgroups.def b/share/metview/etc/obsgroups.def
index e49efc1..8e4db31 100755
--- a/share/metview/etc/obsgroups.def
+++ b/share/metview/etc/obsgroups.def
@@ -53,6 +53,6 @@
55 ; NON-SURFACE MULTISENSOR ; NON_SFC_MS
56 ; MWTS2 ; MWTS2
57 ; SSMI 1DVAR TCWV Cloudy-Sky ; SSMI_1D
-58 ; MWHS2 ; MWHS2
+58 ; MWHS2 All-sky ; MWHS2_AS
59 ; SSMT2 ; SSMT2
99 ; TEST ; TEST
diff --git a/share/metview/etc/reportypes.def b/share/metview/etc/reportypes.def
index a50b849..75cf328 100755
--- a/share/metview/etc/reportypes.def
+++ b/share/metview/etc/reportypes.def
@@ -144,6 +144,7 @@ CNOFS GPSRO ; 7011
SAC-C GPSRO ; 7012
METOP-B GPSRO ; 7013
GRACE B GPSRO ; 7014
+TanDEM-X GPSRO ; 7015
METEOSAT 2 AMV ; 8001
METEOSAT 3 AMV ; 8002
METEOSAT 4 AMV ; 8003
@@ -193,6 +194,7 @@ KALPANA-1 AMV ; 8046
Leo-Geo AMV ; 8047
Dual-Metop AMVs ; 8048
INSAT-3D AMVs ; 8049
+NPP AMV ; 8050
Old ERS 1 Scatterometer ; 9001
New ERS 1 Scatterometer ; 9002
ERS 2 Scatterometer ; 9003
@@ -200,6 +202,8 @@ QuickSCAT SeaWind ; 9004
METOP-A ASCAT ; 9005
OceanSat-2 Scatterometer ; 9006
METOP-B ASCAT ; 9007
+ISS RapidScat ; 9008
+HY-2A HSCAT ; 9009
DMSP 7 SSMI All-sky ; 10001
DMSP 8 SSMI All-sky ; 10002
DMSP 9 SSMI All-sky ; 10003
diff --git a/share/metview/etc/rt_by_obsgroup.chk b/share/metview/etc/rt_by_obsgroup.chk
index c09fd55..db0df06 100755
--- a/share/metview/etc/rt_by_obsgroup.chk
+++ b/share/metview/etc/rt_by_obsgroup.chk
@@ -20,13 +20,13 @@
%set REPORTYPE = 6001
%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = GPSRO ) %and %not REPORTYPE %then
- %set REPORTYPE = 7001/7002/7003/7004/7005/7006/7007/7008/7009/7010/7011/7012/7013/7014
+ %set REPORTYPE = 7001/7002/7003/7004/7005/7006/7007/7008/7009/7010/7011/7012/7013/7014/7015
%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = SATOB ) %and %not REPORTYPE %then
- %set REPORTYPE = 8001/8002/8003/8004/8005/8006/8007/8008/8009/8010/8011/8012/8013/8014/8015/8016/8017/8018/8019/8020/8021/8022/8023/8024/8025/8026/8027/8028/8029/8030/8031/8032/8033/8034/8035/8036/8037/8038/8039/8040/8041/8042/8043/8044/8045/8046/8047/8048/8049
+ %set REPORTYPE = 8001/8002/8003/8004/8005/8006/8007/8008/8009/8010/8011/8012/8013/8014/8015/8016/8017/8018/8019/8020/8021/8022/8023/8024/8025/8026/8027/8028/8029/8030/8031/8032/8033/8034/8035/8036/8037/8038/8039/8040/8041/8042/8043/8044/8045/8046/8047/8048/8049/8050
%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = SCATT ) %and %not REPORTYPE %then
- %set REPORTYPE = 9001/9002/9003/9004/9005/9006/9007
+ %set REPORTYPE = 9001/9002/9003/9004/9005/9006/9007/9008/9009
%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = SSMI_AS ) %and %not REPORTYPE %then
%set REPORTYPE = 10001/10002/10003/10004/10005/10006/10007/10008
@@ -160,7 +160,7 @@
%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = SSMI_1D ) %and %not REPORTYPE %then
%set REPORTYPE = 56001/56002/56003/56004/56005/56006
-%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = MWHS2 ) %and %not REPORTYPE %then
+%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = MWHS2_AS ) %and %not REPORTYPE %then
%set REPORTYPE = 57001
%if (TYPE = OFB %or TYPE = MFB %or TYPE = OAI) %and (OBSGROUP = SSMT2 ) %and %not REPORTYPE %then
diff --git a/share/metview/etc/tigge.def b/share/metview/etc/tigge.def
index dd1f23e..ed54429 100755
--- a/share/metview/etc/tigge.def
+++ b/share/metview/etc/tigge.def
@@ -161,6 +161,7 @@ TIME INTEGRATED SURFACE NET THERMAL RADIATION DOWNWARDS ; STRD ; 175
# S2S
RUMS
FAPR
+ ISAC
# TIGGE LAM
# old
@@ -587,6 +588,16 @@ LIST ; LIST FDF ENTRIES AND CFS FILES ; TIGGE
ALL
}
+ HDATEMONTH
+ {
+ &TIGGEDEF&DATE
+ }
+
+ HDATEYEAR
+ {
+ &TIGGEDEF&DATE
+ }
+
TIME
{
*
@@ -1329,6 +1340,22 @@ RETRIEVE ; Retrieval of data ; TIGGE
ALL
}
+ HDATEYEAR [
+ check = false,
+ visible = false
+ ]
+ {
+ &TIGGEDEF&DATE
+ }
+
+ HDATEMONTH [
+ check = false,
+ visible = false
+ ]
+ {
+ &TIGGEDEF&DATE
+ }
+
DATE [ java_control = CHOICE_TEXT_2,
java_section = DATE,
marsdoc = date/all,
diff --git a/share/metview/etc/uPlotTable b/share/metview/etc/uPlotTable
index f9e05e2..caecaeb 100644
--- a/share/metview/etc/uPlotTable
+++ b/share/metview/etc/uPlotTable
@@ -290,32 +290,32 @@ request,
view = GeoView
request,
- class = INPUT_XY_BOXES,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = CartesianView
-
-request,
- class = INPUT_GEO_BOXES,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = GeoView
-
-request,
- class = INPUT_HOR_BAR,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = CartesianView
-
-request,
- class = INPUT_VER_BAR,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = CartesianView
+ class = INPUT_XY_BOXPLOT,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = CartesianView
+
+#request,
+# class = INPUT_GEO_BOXES,
+# action = Create,
+# builder = DataBuilder,
+# decoder = SimpleDecoder,
+# view = GeoView
+
+#request,
+# class = INPUT_HOR_BAR,
+# action = Create,
+# builder = DataBuilder,
+# decoder = SimpleDecoder,
+# view = CartesianView
+
+#request,
+# class = INPUT_VER_BAR,
+# action = Create,
+# builder = DataBuilder,
+# decoder = SimpleDecoder,
+# view = CartesianView
request,
class = CLEAN,
@@ -462,7 +462,7 @@ dataunit,
dataunit,
class = NETCDF_XY_POINTS,
defaultVisDef = MGRAPH,
- listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
+ listVisDef = MSYMB/MGRAPH/MTHERMO/PSYMB/PGRAPH
dataunit,
class = ODB_DB,
@@ -595,24 +595,24 @@ dataunit,
listVisDef = MCONT
dataunit,
- class = INPUT_XY_BOXES,
+ class = INPUT_XY_BOXPLOT,
defaultVisDef = MBOXPLOT,
listVisDef = MBOXPLOT
-dataunit,
- class = INPUT_GEO_BOXES,
- defaultVisDef = MBOXPLOT,
- listVisDef = MBOXPLOT
+#dataunit,
+# class = INPUT_GEO_BOXES,
+# defaultVisDef = MBOXPLOT,
+# listVisDef = MBOXPLOT
-dataunit,
- class = INPUT_HOR_BAR,
- defaultVisDef = MGRAPH,
- listVisDef = MGRAPH
+#dataunit,
+# class = INPUT_HOR_BAR,
+# defaultVisDef = MGRAPH,
+# listVisDef = MGRAPH
-dataunit,
- class = INPUT_VER_BAR,
- defaultVisDef = MGRAPH,
- listVisDef = MGRAPH
+#dataunit,
+# class = INPUT_VER_BAR,
+# defaultVisDef = MGRAPH,
+# listVisDef = MGRAPH
dataunit,
class = GRIB_VECTORS,
@@ -639,29 +639,31 @@ visdef,
class = MWIND
visdef,
- class = PGRAPH
+ class = PGRAPH
visdef,
- class = MGRAPH
+ class = MGRAPH
visdef,
- class = PAXIS
+ class = PAXIS
visdef,
- class = MTEPHI
+ class = MTEPHI
visdef,
- class = PSYMB
+ class = PSYMB
visdef,
- class = MSYMB
+ class = MSYMB
visdef,
- class = MVALUE
+ class = MVALUE
visdef,
- class = MBOXPLOT
+ class = MBOXPLOT
+visdef,
+ class = MTHERMO
############################################
# Companion list
@@ -711,6 +713,10 @@ companion,
friend = mdts,
mode = sd
+companion,
+ class = MGRAPH,
+ friend = MTHERMO
+
############################################
# Graphics Engine list
############################################
diff --git a/share/metview/icons/CMakeLists.txt b/share/metview/icons/CMakeLists.txt
index bec5117..ee14314 100644
--- a/share/metview/icons/CMakeLists.txt
+++ b/share/metview/icons/CMakeLists.txt
@@ -38,6 +38,7 @@ set(icons
MACRO.xpm
MACROPARAM.xpm
MAPVIEW.xpm
+ MBOXPLOT.xpm
MCOAST.xpm
MCONT.xpm
MGRAPH.xpm
@@ -47,7 +48,6 @@ set(icons
MTAYLOR.xpm
MSYMB.xpm
MTEXT.xpm
- MTHERMOGRID.xpm
MWIND.xpm
NAMELIST.xpm
NETCDF.xpm NETCDF_RTTOV_INPUT.xpm
diff --git a/share/metview/icons/MBOXPLOT.xpm b/share/metview/icons/MBOXPLOT.xpm
new file mode 100644
index 0000000..9ce7bab
--- /dev/null
+++ b/share/metview/icons/MBOXPLOT.xpm
@@ -0,0 +1,204 @@
+/* XPM */
+static char *MLEGEND[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 166 2",
+" c #0D0B06",
+". c #151209",
+"X c #1A170B",
+"o c #211E17",
+"O c #2E2A13",
+"+ c #302C18",
+"@ c #3B3911",
+"# c #302D29",
+"$ c #353224",
+"% c #3E3722",
+"& c #35332E",
+"* c #39342A",
+"= c #3D3B36",
+"- c #3E3C39",
+"; c #423F0C",
+": c #433C2B",
+"> c #673E37",
+", c #713333",
+"< c #454211",
+"1 c #4C4913",
+"2 c #524E12",
+"3 c #5D5A14",
+"4 c #6A680C",
+"5 c #504624",
+"6 c #564A2D",
+"7 c #594D2E",
+"8 c #44413A",
+"9 c #4A4638",
+"0 c #4A483E",
+"q c #524531",
+"w c #5B4F35",
+"e c #544C3D",
+"r c #5A503E",
+"t c #645C24",
+"y c #6C5E24",
+"u c #67593B",
+"i c #506A37",
+"p c #726527",
+"a c #2D3469",
+"s c #3B6854",
+"d c #474646",
+"f c #494743",
+"g c #524F46",
+"h c #53514D",
+"j c #585652",
+"k c #5C5B54",
+"l c #5C5C5C",
+"z c #69514E",
+"x c #635A4A",
+"c c #715252",
+"v c #576647",
+"b c #4B704A",
+"n c #4E6657",
+"m c #71704A",
+"M c #6A6252",
+"N c #6A6858",
+"B c #706259",
+"V c #4A5167",
+"C c #525062",
+"Z c #504F70",
+"A c #586F6F",
+"S c #656360",
+"D c #6B6A67",
+"F c #6D6D6D",
+"G c #716F6E",
+"H c #737166",
+"J c #7A786E",
+"K c #747272",
+"L c #787673",
+"P c #7D7B76",
+"I c #7E7C7C",
+"U c #B90C0C",
+"Y c #8A3A2B",
+"T c #913B2B",
+"R c #8F3939",
+"E c #C20A0A",
+"W c #F10202",
+"Q c #FF0000",
+"! c #837F0C",
+"~ c #897033",
+"^ c #907534",
+"/ c #F17929",
+"( c #FF7F2A",
+") c #8F6144",
+"_ c #837253",
+"` c #8D7951",
+"' c #817E7E",
+"] c #9B7979",
+"[ c #378D35",
+"{ c #51872C",
+"} c #548E2C",
+"| c #02F102",
+" . c #00FF00",
+".. c #308766",
+"X. c #308E6A",
+"o. c #8D8A0C",
+"O. c #979209",
+"+. c #8D812D",
+"@. c #988D27",
+"#. c #91852C",
+"$. c #958A2A",
+"%. c #908E32",
+"&. c #DCD80F",
+"*. c #F1F102",
+"=. c #FFFF00",
+"-. c #EEEA16",
+";. c #E9E618",
+":. c #F2EE13",
+">. c #E5D729",
+",. c #97876A",
+"<. c #85847C",
+"1. c #968872",
+"2. c #9F8F71",
+"3. c #A48D62",
+"4. c #B39868",
+"5. c #AD9976",
+"6. c #B39F79",
+"7. c #BCA272",
+"8. c #C6AA4A",
+"9. c #C0A36B",
+"0. c #C6AA75",
+"q. c #C4A979",
+"w. c #CDB075",
+"e. c #D5B271",
+"r. c #D8B675",
+"t. c #DABA7C",
+"y. c #29278F",
+"u. c #212B89",
+"i. c #212C90",
+"p. c #0202F1",
+"a. c #0000FF",
+"s. c #348E8E",
+"d. c #02F1F1",
+"f. c #00FFFF",
+"g. c #828080",
+"h. c #87858F",
+"j. c #8A8A8A",
+"k. c #9B8484",
+"l. c #949494",
+"z. c #9B9B9A",
+"x. c #BEA981",
+"c. c #A3A3A3",
+"v. c #AAAAAA",
+"b. c #B2A4A4",
+"n. c #B3B3B3",
+"m. c #BABABA",
+"M. c #CAB183",
+"N. c #C9B288",
+"B. c #D0B382",
+"V. c #DFBF82",
+"C. c #D5C096",
+"Z. c #D6C19B",
+"A. c #E1C28A",
+"S. c #E7CA95",
+"D. c #EACF9C",
+"F. c #EDD19C",
+"G. c #F0D7AC",
+"H. c #F4DAAB",
+"J. c #F9DEAB",
+"K. c #C2C2C2",
+"L. c #CBCBCB",
+"P. c #D3D3D3",
+"I. c #D8D7D7",
+"U. c #DBDBDB",
+"Y. c #E5E5E5",
+"T. c #FFFFFF",
+/* pixels */
+"T.T.T.U.I ' ' ' g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.L ",
+"T.T.I.' I Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"T.I.g.I G Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"P.' ' K G Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.P.Y.Y.Y.Y.I ",
+"L I K K K Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.<.X k Y.Y.Y.I ",
+"I Y.Y.U.b.] ] ] ] k.U.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' 1 ;.t P Y.Y.I ",
+"' Y.Y.Y.c U E E E , K.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.J 2 ;.+.7 g Y.Y.' ",
+"' Y.Y.Y.c W Q Q Q R K.L.j.l.c.n.m.L.I.v.j.v.H 3 -.+.7 8 Y.Y.Y.I ",
+"I Y.Y.Y.c W Q Q Q R K.K.K g.l.c.n.K.D x 5.o ; -.#.6 0 Y.Y.Y.Y.' ",
+"' Y.Y.Y.z Y T T T > K.Y.Y.Y.Y.Y.U.h ,.t.3.@ :.#.7 0 Y.Y.Y.Y.Y.I ",
+"' Y.Y.Y.B / ( ( ( ) K.U.L.P.P.L.: x.t.4.@ :.$.% X L.Y.Y.Y.Y.Y.I ",
+"' Y.Y.Y.B / ( ( ( ) K.m.l F K # N.e.` < :.$.% r C.8 U.Y.Y.Y.Y.I ",
+"' Y.Y.Y.B / ( ( ( ) K.I.m.m.& B.e.w 4 :.$.6 q A.H.6.j U.Y.Y.Y.<.",
+"' Y.Y.Y.M ~ ^ ^ ~ u K.Y.Y.z.3.9.: ! :. at .6 g _ S.H.H.2.d I.Y.Y.I ",
+"' Y.Y.Y.m *.=.=.=.%.K.U.P.v.l $ o.&. at .6 8 - q.G.H.H.H.M.= l S L ",
+"' Y.Y.Y.m *.=.=.=.%.K.m.l F $ O.3 : * * M Z.G.H.H.H.J.J.6. G ",
+"' Y.Y.Y.m *.=.=.=.%.K.I.n.c.p >.+ 1.N.t.V.V.V.D.H.H.J.J.q. F ",
+"' Y.Y.Y.v { } } } i K.Y.Y.N y 8.5 & f f : 3.w.e.A.F.J.J.x. G ",
+"' Y.Y.Y.b | . . .[ K.U.P.. O 8 c.U.Y.Y.Y.z.9 7.e.e.e.e.e. G ",
+"' Y.Y.Y.b | . . .[ K.m.d - K l.c.m.L.Y.Y.Y.Y.P e 0.r.e.w. G ",
+"g.Y.Y.Y.b | . . .[ K.P.n.m.m.L.L.I.U.Y.Y.Y.Y.Y.I.L d g : K ",
+"' Y.Y.Y.n ..X.X.X.s K.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.& & K ",
+"g.Y.Y.Y.A d.f.f.f.s.K.U.P.P.P.U.U.U.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.I ",
+"g.Y.Y.Y.A d.f.f.f.s.L.m.l F g.l.v.m.L.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.I ",
+"g.Y.Y.Y.A d.f.f.f.s.K.I.m.K.L.L.P.U.U.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.g.",
+"g.Y.Y.Y.V u.i.i.i.a K.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"g.Y.Y.Y.Z p.a.a.a.y.K.P.l.z.v.n.m.L.U.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"g.Y.Y.Y.Z p.a.a.a.y.K.L.D P j.z.v.m.P.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.I ",
+"g.Y.Y.Y.Z p.a.a.a.y.K.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"g.Y.Y.Y.h.C C C C C L.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"g.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.' ",
+"L g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.h.g.g.g.g.g.g.g.g.g.g.g.K "
+};
diff --git a/share/metview/icons/MTHERMOGRID.xpm b/share/metview/icons/MTHERMOGRID.xpm
deleted file mode 100644
index 40b31d8..0000000
--- a/share/metview/icons/MTHERMOGRID.xpm
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */
-static char * TEPHIVIEW_xpm[] = {
-"32 32 6 1",
-" c #333333333333",
-". c #FFFFFFFFCCCC",
-"X c #7E7E7E7E7E7E",
-"o c #00000000FFFF",
-"O c #FFFF00000000",
-"+ c #000000006666",
-" ",
-" .............................. ",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
-" .Xo.................oO....+.X. ",
-" .X.o................OO.....+X. ",
-" .X..o..............OO.o.....X. ",
-" .X...o............OO...o....X. ",
-" .X....o...........O.....o...X. ",
-" .X.....o.........O.......o..X. ",
-" .X......o.......OO........o.X. ",
-" .X.......o......O..........oX. ",
-" .X........o....O............X. ",
-" .X.........o..OO............X. ",
-" .X..........o.O.............X. ",
-" .X...........O..............X. ",
-" .X..........OOo............OX. ",
-" .X..........O..o...........OX. ",
-" .X..........O...o.........O.X. ",
-" .X.........O.....o.......OO.X. ",
-" .X........OO......o......O..X. ",
-" .X........O........o....O...X. ",
-" .Xo.......O.........o..OO...X. ",
-" .X.o.....O...........o.O....X. ",
-" .X..o....O............OO....X. ",
-" .X...o..O.............Oo....X. ",
-" .X....o.O.............O.o...X. ",
-" .X.....O.............O...o..X. ",
-" .X.....Oo............O....o.X. ",
-" .X....OO.o...........O.....oX. ",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
-" .............................. ",
-" "};
diff --git a/share/metview/icons_mv5/CMakeLists.txt b/share/metview/icons_mv5/CMakeLists.txt
index cc8f30c..7033c46 100644
--- a/share/metview/icons_mv5/CMakeLists.txt
+++ b/share/metview/icons_mv5/CMakeLists.txt
@@ -18,6 +18,7 @@ set(svg_icons
Interpolation.svg
KML.svg
MACRO.svg
+ MBOXPLOT.svg
MCOAST.svg
MCONT.svg
MGRAPH.svg
@@ -90,7 +91,6 @@ set(xpm_icons
MetPlus.xpm
MTAYLOR.xpm
MTHERMO.xpm
- MTHERMOGRID.xpm
MVPROFILE.xpm
MVPROFILEVIEW.xpm
MVPROFVIEW.xpm
diff --git a/share/metview/icons_mv5/MBOXPLOT.svg b/share/metview/icons_mv5/MBOXPLOT.svg
new file mode 100644
index 0000000..1b8e74d
--- /dev/null
+++ b/share/metview/icons_mv5/MBOXPLOT.svg
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ 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"
+ inkscape:export-ydpi="180"
+ inkscape:export-xdpi="180"
+ width="32"
+ height="32"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="MLEGEND.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0"
+ style="display:inline">
+ <sodipodi:namedview
+ stroke="#3465a4"
+ fill="#729fcf"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="24.3125"
+ inkscape:cx="4.5216609"
+ inkscape:cy="15.260101"
+ inkscape:current-layer="layer10"
+ showgrid="true"
+ inkscape:grid-bbox="false"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="1789"
+ inkscape:window-height="1096"
+ inkscape:window-x="1956"
+ inkscape:window-y="57"
+ gridtolerance="50"
+ inkscape:grid-points="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ objecttolerance="0.4"
+ inkscape:object-paths="true"
+ width="32px"
+ height="32px"
+ inkscape:window-maximized="0"
+ inkscape:snap-grids="false"
+ inkscape:snap-to-guides="false">
+ <sodipodi:guide
+ orientation="horizontal"
+ position="50.977307"
+ id="guide9112" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid2849" />
+ </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 />
+ <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>
+ <defs
+ id="defs3">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3744">
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:1;"
+ offset="0"
+ id="stop3746" />
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:0;"
+ offset="1"
+ id="stop3748" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3736">
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:1;"
+ offset="0"
+ id="stop3738" />
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:0;"
+ offset="1"
+ id="stop3740" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3718">
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:1;"
+ offset="0"
+ id="stop3720" />
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:0;"
+ offset="1"
+ id="stop3722" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3710">
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:1;"
+ offset="0"
+ id="stop3712" />
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:0;"
+ offset="1"
+ id="stop3714" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3702">
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:1;"
+ offset="0"
+ id="stop3704" />
+ <stop
+ style="stop-color:#4d4d4d;stop-opacity:0;"
+ offset="1"
+ id="stop3706" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective48" />
+ <linearGradient
+ id="linearGradient3869">
+ <stop
+ style="stop-color:#fffa02;stop-opacity:1;"
+ offset="0"
+ id="stop3871" />
+ <stop
+ style="stop-color:#dddb31;stop-opacity:1;"
+ offset="1"
+ id="stop3873" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3869"
+ id="linearGradient3875"
+ x1="19.671978"
+ y1="7.6915169"
+ x2="22.446272"
+ y2="10.200515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,2.6735219)" />
+ <linearGradient
+ id="linearGradient3889-8-5">
+ <stop
+ style="stop-color:#cfc0af;stop-opacity:1;"
+ offset="0"
+ id="stop3891-0-0" />
+ <stop
+ style="stop-color:#ffe2ab;stop-opacity:1;"
+ offset="1"
+ id="stop3893-2-6" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3889-7-1-2">
+ <stop
+ style="stop-color:#cfc0af;stop-opacity:1;"
+ offset="0"
+ id="stop3891-7-1-5" />
+ <stop
+ style="stop-color:#ffe2ab;stop-opacity:1;"
+ offset="1"
+ id="stop3893-5-0-8" />
+ </linearGradient>
+ <linearGradient
+ y2="11.078368"
+ x2="22.297274"
+ y1="8.1580601"
+ x1="7.6711636"
+ gradientTransform="translate(-0.90317401,2.3529619)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4175"
+ xlink:href="#linearGradient3889-7-1-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3889-8-5"
+ id="linearGradient4197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.22485567,2.640781)"
+ x1="8.2786636"
+ y1="12.442157"
+ x2="29.438562"
+ y2="12.071977" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3702"
+ id="linearGradient3708"
+ x1="12.010284"
+ y1="7.5681234"
+ x2="20.154243"
+ y2="7.5681234"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.2799524,0.50093719)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3710"
+ id="linearGradient3716"
+ x1="11.969152"
+ y1="11.064269"
+ x2="20.030849"
+ y2="11.064269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.2799524,0.50093719)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3718"
+ id="linearGradient3726"
+ x1="12.00995"
+ y1="15.094787"
+ x2="20.071646"
+ y2="15.094787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.2799524,0.50093719)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3728"
+ id="linearGradient3734"
+ x1="12.00995"
+ y1="19.125635"
+ x2="20.071646"
+ y2="19.125635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.2799524,0.50093719)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3736"
+ id="linearGradient3742"
+ x1="12.00995"
+ y1="23.074222"
+ x2="20.071646"
+ y2="23.074222"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.2799524,0.50093719)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3744"
+ id="linearGradient3750"
+ x1="12.051081"
+ y1="26.652626"
+ x2="20.112777"
+ y2="26.652626"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.2799524,0.50093719)" />
+ </defs>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="frame"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <path
+ style="fill:#e6e6e6;fill-opacity:1;stroke:#747171;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+ id="rect2911"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)"
+ style="fill:#747171;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+ id="path4199"
+ sodipodi:nodetypes="cccc" />
+ <rect
+ style="fill:url(#linearGradient3708);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect3667"
+ width="8.1439581"
+ height="1.4807197"
+ x="11.730331"
+ y="7.3287001" />
+ <rect
+ y="10.824846"
+ x="11.689199"
+ height="1.4807198"
+ width="8.0616961"
+ id="rect3669"
+ style="fill:url(#linearGradient3716);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <rect
+ style="fill:url(#linearGradient3726);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect3694"
+ width="8.0616961"
+ height="1.4807198"
+ x="11.729997"
+ y="14.855365" />
+ <rect
+ y="18.886211"
+ x="11.729997"
+ height="1.4807198"
+ width="8.0616961"
+ id="rect3696"
+ style="fill:url(#linearGradient3734);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <rect
+ style="fill:url(#linearGradient3742);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect3698"
+ width="8.0616961"
+ height="1.4807198"
+ x="11.729997"
+ y="22.834799" />
+ <rect
+ y="26.413202"
+ x="11.771128"
+ height="1.4807198"
+ width="8.0616961"
+ id="rect3700"
+ style="fill:url(#linearGradient3750);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="text"
+ sodipodi:insensitive="true" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="cells"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ff0000;stroke:none"
+ id="rect3652"
+ width="4.9767642"
+ height="3.9806123"
+ x="4.6759219"
+ y="5.7748237" />
+ <rect
+ y="9.6320419"
+ x="4.7127423"
+ height="3.9897172"
+ width="4.9797902"
+ id="rect3654"
+ style="fill:#ff7f2a;stroke:none" />
+ <rect
+ style="fill:#ffff00;stroke:none"
+ id="rect3656"
+ width="5.1232882"
+ height="3.9485862"
+ x="4.6068211"
+ y="13.621759" />
+ <rect
+ y="17.529211"
+ x="4.6068211"
+ height="3.9897172"
+ width="5.0872245"
+ id="rect3658"
+ style="fill:#00ff00;stroke:none" />
+ <rect
+ style="fill:#00ffff;stroke:none"
+ id="rect3660"
+ width="4.9767642"
+ height="3.9485862"
+ x="4.7533445"
+ y="21.518929" />
+ <rect
+ style="fill:#0000ff;stroke:none"
+ id="rect3664"
+ width="5.1608644"
+ height="3.9897172"
+ x="4.6413732"
+ y="25.220726" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer17"
+ inkscape:label="legend"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:none;stroke:#272424;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3647"
+ width="5.1199708"
+ height="23.444733"
+ x="4.7183294"
+ y="5.9302435" />
+ <path
+ style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 4.8123393,9.6246787 C 4.9768638,9.6320419 9.748072,9.5835476 9.748072,9.5835476"
+ id="path3752" />
+ <path
+ id="path3754"
+ d="m 4.8123393,13.737789 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+ style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 4.7300771,17.611476 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+ id="path3756" />
+ <path
+ id="path3758"
+ d="m 4.7583128,21.518931 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+ style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 4.7533445,25.302993 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+ id="path3760" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer13"
+ inkscape:label="pencil"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <path
+ style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 26.447301,4.2365039 14.601542,15.712082 13.203084,19.167096 16.822622,17.727506 28.421594,6.2107969 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.342058,4.6376879 26.447301,4.2365039 26.447301,4.2365039 z"
+ id="path3867"
+ sodipodi:nodetypes="cccccsc" />
+ <path
+ style="fill:#483737;fill-opacity:1;stroke:none"
+ d="M 28.092546,6.0795626 16.492052,17.645244 15.958869,17.05799 27.594818,5.3059127 28.092546,6.0795626 z"
+ id="path3877"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#c8a656;fill-opacity:1;stroke:none"
+ d="M 14.848329,16 14.066838,18.262211 16.452443,17.562982 14.848329,16 z"
+ id="path3883"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 14.478149,15.712082 0,0 z"
+ id="path3885" />
+ <path
+ style="fill:#050505;fill-opacity:1;stroke:none"
+ d="M 14.1491,17.11054 13.737789,18.59126 15.095115,18.138818 14.1491,17.11054 z"
+ id="path3887"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer10"
+ inkscape:label="hand"
+ style="display:inline">
+ <rect
+ style="opacity:0.53603599;fill:none;stroke:none"
+ id="rect2939"
+ width="2.2622108"
+ height="7.7326479"
+ x="28.956299"
+ y="14.066838" />
+ <path
+ style="fill:url(#linearGradient4197);fill-opacity:1;stroke:#000000;stroke-width:0.7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 22.323384,12.381427 -0.01309,1.314107 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125 [...]
+ id="path3960-0-4"
+ sodipodi:nodetypes="ccscccssccccccccssccccsc" />
+ <path
+ style="fill:url(#linearGradient4175);fill-opacity:1;stroke:#000000;stroke-width:0.7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 21.10281,7.9392058 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589859 -2.635122,2.1909542 -2.635122,2.1909542 l -1.389702,1.256427 c 0,0 -1.104461,0.780354 -1.329048,1.292738 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.374999 1.269762,-0.741726 0.491726,-0.355238 0.278036,-0.217143 2.443099,-2.6426181 C 21.265106,7.977479 21.10281,7.9392058 21 [...]
+ id="path3983-4"
+ sodipodi:nodetypes="csccscsccccccc" />
+ <rect
+ style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4212"
+ width="2.1388175"
+ height="7.4035988"
+ x="28.997429"
+ y="14.395887" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 18.378759,15.800996 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+ id="path4268"
+ sodipodi:nodetypes="cccssscc" />
+ <path
+ style="fill:#d6b370;fill-opacity:1;stroke:none"
+ d="m 28.791774,19.660665 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+ id="path4270"
+ sodipodi:nodetypes="ccccsscccccccscsscsc" />
+ <path
+ style="fill:#d6b370;stroke:none"
+ d="M 15.012853,14.066839 C 14.724935,13.957156 14.437018,13.847473 14.1491,13.73779 c 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.627073 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.100871 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.2877824 0.660647,-0.7231253 1.092134,-0.9640169 0.186134,-0.1067083 0.365481,-0.2354848 0.555742,-0.3287765 0.268538,-0.013427 0.66047,0.014277 0.929008,8.501e-4 0.06855,0.082262 0.01371,-10e-8 0.08226,0.082262 -0.6753 [...]
+ id="path4274"
+ sodipodi:nodetypes="cccsssccccsscc" />
+ <path
+ style="fill:#d6b370;stroke:none"
+ d="m 22.99229,12.215938 0.658096,-0.699228 c 0,0 0.02532,1.169686 -0.123393,1.727506 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.11054 -0.08226,-1.11054 l 0.411311,-0.411311 z"
+ id="path3659"
+ sodipodi:nodetypes="ccscczcc" />
+ </g>
+</svg>
diff --git a/share/metview/icons_mv5/MTHERMOGRID.xpm b/share/metview/icons_mv5/MTHERMOGRID.xpm
deleted file mode 100755
index 40b31d8..0000000
--- a/share/metview/icons_mv5/MTHERMOGRID.xpm
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */
-static char * TEPHIVIEW_xpm[] = {
-"32 32 6 1",
-" c #333333333333",
-". c #FFFFFFFFCCCC",
-"X c #7E7E7E7E7E7E",
-"o c #00000000FFFF",
-"O c #FFFF00000000",
-"+ c #000000006666",
-" ",
-" .............................. ",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
-" .Xo.................oO....+.X. ",
-" .X.o................OO.....+X. ",
-" .X..o..............OO.o.....X. ",
-" .X...o............OO...o....X. ",
-" .X....o...........O.....o...X. ",
-" .X.....o.........O.......o..X. ",
-" .X......o.......OO........o.X. ",
-" .X.......o......O..........oX. ",
-" .X........o....O............X. ",
-" .X.........o..OO............X. ",
-" .X..........o.O.............X. ",
-" .X...........O..............X. ",
-" .X..........OOo............OX. ",
-" .X..........O..o...........OX. ",
-" .X..........O...o.........O.X. ",
-" .X.........O.....o.......OO.X. ",
-" .X........OO......o......O..X. ",
-" .X........O........o....O...X. ",
-" .Xo.......O.........o..OO...X. ",
-" .X.o.....O...........o.O....X. ",
-" .X..o....O............OO....X. ",
-" .X...o..O.............Oo....X. ",
-" .X....o.O.............O.o...X. ",
-" .X.....O.............O...o..X. ",
-" .X.....Oo............O....o.X. ",
-" .X....OO.o...........O.....oX. ",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
-" .............................. ",
-" "};
diff --git a/src/DebugTools/MvProcNode.cc b/src/DebugTools/MvProcNode.cc
index ae4fb71..589172e 100644
--- a/src/DebugTools/MvProcNode.cc
+++ b/src/DebugTools/MvProcNode.cc
@@ -362,7 +362,7 @@ void MvProcNode::add(long ref,request* r)
proc->setParent(root_);
//Reparent existing items if needed
- if(!proc->name().find("@") != string::npos)
+ if( !(proc->name().find("@") != string::npos))
{
for(vector<MvProcNode*>::iterator it=items_.begin(); it != items_.end(); it++)
{
diff --git a/src/Desktop/MvQRequestPanelWidget.cc b/src/Desktop/MvQRequestPanelWidget.cc
index 043ec78..4ea9444 100644
--- a/src/Desktop/MvQRequestPanelWidget.cc
+++ b/src/Desktop/MvQRequestPanelWidget.cc
@@ -121,16 +121,8 @@ void MvQRequestPanelWidget::paintEvent(QPaintEvent* event)
bool MvQRequestPanelWidget::isAccepted(const IconClass& kind) const
{
- if(classes_.size()>0)
- {
- for(vector<string>::const_iterator it = classes_.begin(); it != classes_.end(); ++it)
- {
- if(kind.canBecome(IconClass::find(*it)) )
- return true;
- }
- return false;
- }
-
+ // if the user drops an icon into the icon editor then we should
+ // always accept it and try to merge the requests
return true;
}
diff --git a/src/Desktop/RequestPanel.cc b/src/Desktop/RequestPanel.cc
index 5d32595..75f2974 100644
--- a/src/Desktop/RequestPanel.cc
+++ b/src/Desktop/RequestPanel.cc
@@ -104,6 +104,20 @@ void RequestPanel::merge(IconObject* o)
Request r = class_.language().expand(r1,EXPAND_DEFAULTS,false);
r.merge(o->request());
+
+ // special case: when converting a Map View into a Geographical View
+ // and we have a sub-area, then we also need to set
+ // MAP_AREA_DEFINITION=CORNERS.
+
+ if (!strcmp(r1.getVerb(), "GEOVIEW") && !strcmp(o->request().getVerb(), "MAPVIEW"))
+ {
+ if ((const char*)(o->request()("AREA")) != NULL)
+ {
+ r.setValue("MAP_AREA_DEFINITION", "CORNERS");
+ }
+ }
+
+
// Move back to the default those values that are no longer valid
Request rr = class_.language().expand(r,EXPAND_DONT_FAIL);
diff --git a/src/Macro/compute.cc b/src/Macro/compute.cc
index 1a0dc4a..f9f03f5 100644
--- a/src/Macro/compute.cc
+++ b/src/Macro/compute.cc
@@ -164,16 +164,16 @@ Formula::Formula(const char *name,request *r) : Script(name)
if(mars.debug) fprintf(f,"trace(1)\n");
fprintf(f,"x = arguments()\n");
fprintf(f,"x = x[1]\n");
- if(p = get_value(r,"FUNCTION",0))
+ if((p = get_value(r,"FUNCTION",0)))
{
fprintf(f,"return %s(",p);
- if(p = get_value(r,"PARAMETER_2",0))
+ if((p = get_value(r,"PARAMETER_2",0)))
fprintf(f,"x['PARAMETER_1'],x['PARAMETER_2']");
else
fprintf(f,"x['PARAMETER']");
fprintf(f,")");
}
- if(p = get_value(r,"OPERATOR",0))
+ if((p = get_value(r,"OPERATOR",0)))
fprintf(f,"return x['PARAMETER_1'] %s x['PARAMETER_2']\n",p);
fclose(f);
diff --git a/src/Macro/value.cc b/src/Macro/value.cc
index dbff6a8..f81fc65 100644
--- a/src/Macro/value.cc
+++ b/src/Macro/value.cc
@@ -305,16 +305,27 @@ void ASync::Reply(svcid* id,request *s,void*)
while((msg = get_svc_msg(id,n++)))
add_value(r,"MESSAGE","%s",msg);
- a->SetRequest(r);
+ a->SetRequest(r);
free_all_requests(r);
}
- else
- {
- const char *p = get_value(s,"_NOTIFY",0);
- if(p) set_value(s,"_FROM","%s",get_svc_target(id));
- a->SetRequest(s);
- }
+ else
+ {
+ const char *p = get_value(s,"_NOTIFY",0);
+ if(p) set_value(s,"_FROM","%s",get_svc_target(id));
+
+ // Print any information coming from the target module(s).
+ // If this is too many information send to the user,
+ // uncomment the line below.
+ // if(mars.debug)
+ {
+ const char *msg;
+ int n = 0;
+ while((msg = get_svc_msg(id,n++)))
+ marslog(LOG_INFO,"%s\n", msg);
+ }
+ a->SetRequest(s);
+ }
a->Ready = true;
a->Detach();
diff --git a/src/Reprojection/ReprojectService.cc b/src/Reprojection/ReprojectService.cc
index 73f7647..92ea651 100644
--- a/src/Reprojection/ReprojectService.cc
+++ b/src/Reprojection/ReprojectService.cc
@@ -78,95 +78,100 @@ int
ReprojectService::gribit(magics::Matrix& matrix, magics::GribDecoder& sourceGrib)
{
// copy from examples of the grib_api!
- int ret=0;
- grib_handle* h;
- double* values;
- long numberOfPointsAlongAParallel,numberOfPointsAlongAMeridian,numberOfPoints,i,j,k;
-
- //int option_flags = GRIB_DUMP_FLAG_VALUES |
- // //GRIB_DUMP_FLAG_OPTIONAL |
- // GRIB_DUMP_FLAG_READ_ONLY;
-
- double missingValueInGrib;
- const double missingValueInImage = 65535; // -1 as an unsigned short.
- // Set in TeDecoderMemory::resetMemory()
- // and TeRasterParams.h. Missing values in the
- // 'image' variable will be set to this.
- // NOTE: this could change if the data type
- // in ImagePlotting is changed from TeUNSIGNEDSHORT.
-
- h = grib_handle_new_from_samples(0,"GRIB1");
- if(!h) {
- printf("ERROR: Unable to create grib handle\n");
- return 1;
- }
-
-
- // set date, time, parameter, etc
- grib_set_long(h, "date", sourceGrib.getLong("date"));
- grib_set_long(h, "time", sourceGrib.getLong("time"));
- grib_set_long(h, "paramId", sourceGrib.getLong("paramId"));
- grib_set_long(h, "levelType", sourceGrib.getLong("levelType"));
- grib_set_long(h, "level", sourceGrib.getLong("level"));
- grib_set_long(h, "localDefinitionNumber", sourceGrib.getLong("localDefinitionNumber"));
- grib_set_long(h, "channelNumber", sourceGrib.getLong("channelNumber"));
- grib_set_long(h, "satelliteIdentifier", sourceGrib.getLong("satelliteIdentifier"));
- grib_set_long(h, "instrumentIdentifier", sourceGrib.getLong("instrumentIdentifier"));
- grib_set_long(h, "functionCode", sourceGrib.getLong("functionCode"));
-
-
- grib_get_double(h, "missingValue", &missingValueInGrib);
- grib_set_long (h, "bitmapPresent", 1); // tell the GRIB that it will contain missing values
-
- // Set bounding box
- grib_set_double(h,"latitudeOfFirstGridPointInDegrees", matrix.minY());//getUpperRightCorner().y());
- grib_set_double(h,"longitudeOfFirstGridPointInDegrees",matrix.minX());//getLowerLeftCorner().x());
-
- grib_set_double(h,"latitudeOfLastGridPointInDegrees", matrix.maxY());//getLowerLeftCorner().y());
- grib_set_double(h,"longitudeOfLastGridPointInDegrees",matrix.maxX());//getUpperRightCorner().x());
-
- grib_set_double(h,"jDirectionIncrementInDegrees", resX_);
- grib_set_double(h,"iDirectionIncrementInDegrees", resY_);
-
- //Set matrix size
- numberOfPointsAlongAParallel = matrix.columns();
- numberOfPointsAlongAMeridian = matrix.rows();
- grib_set_long( h,"numberOfPointsAlongAParallel",numberOfPointsAlongAParallel);
- grib_set_long( h,"numberOfPointsAlongAMeridian",numberOfPointsAlongAMeridian);
-
- numberOfPoints=numberOfPointsAlongAMeridian*numberOfPointsAlongAParallel;
- values=(double*)malloc(numberOfPoints*sizeof(double));
- for (j=0;j < numberOfPointsAlongAMeridian;j++) {
+ int ret=0;
+ double* values;
+ long numberOfPointsAlongAParallel,numberOfPointsAlongAMeridian,numberOfPoints,i,j,k;
+ grib_handle *hnew;
+
+ //int option_flags = GRIB_DUMP_FLAG_VALUES |
+ // //GRIB_DUMP_FLAG_OPTIONAL |
+ // GRIB_DUMP_FLAG_READ_ONLY;
+
+ double missingValueInGrib;
+ const double missingValueInImage = 65535; // -1 as an unsigned short.
+ // Set in TeDecoderMemory::resetMemory()
+ // and TeRasterParams.h. Missing values in the
+ // 'image' variable will be set to this.
+ // NOTE: this could change if the data type
+ // in ImagePlotting is changed from TeUNSIGNEDSHORT.
+ {
+ grib_handle* h;
+
+ h = grib_handle_new_from_samples(0,"GRIB1");
+ if(!h) {
+ printf("ERROR: Unable to create grib handle\n");
+ return 1;
+ }
+
+ // set date, time, parameter, etc
+ hnew = grib_util_sections_copy(sourceGrib.id(), h, GRIB_SECTION_PRODUCT, &ret);
+
+ if (ret)
+ {
+ perror("Error when copying GRIB product section.");
+ return 1;
+ }
+
+ grib_handle_delete(h);
+ }
+
+ grib_get_double(hnew, "missingValue", &missingValueInGrib);
+ grib_set_long (hnew, "bitmapPresent", 1); // tell the GRIB that it will contain missing values
+
+ // Set bounding box
+ grib_set_double(hnew,"latitudeOfFirstGridPointInDegrees", matrix.minY());//getUpperRightCorner().y());
+ grib_set_double(hnew,"longitudeOfFirstGridPointInDegrees",matrix.minX());//getLowerLeftCorner().x());
+
+ grib_set_double(hnew,"latitudeOfLastGridPointInDegrees", matrix.maxY());//getLowerLeftCorner().y());
+ grib_set_double(hnew,"longitudeOfLastGridPointInDegrees",matrix.maxX());//getUpperRightCorner().x());
+
+ grib_set_double(hnew,"jDirectionIncrementInDegrees", resX_);
+ grib_set_double(hnew,"iDirectionIncrementInDegrees", resY_);
+
+ //Set matrix size
+ numberOfPointsAlongAParallel = matrix.columns();
+ numberOfPointsAlongAMeridian = matrix.rows();
+ grib_set_long( hnew,"numberOfPointsAlongAParallel",numberOfPointsAlongAParallel);
+ grib_set_long( hnew,"numberOfPointsAlongAMeridian",numberOfPointsAlongAMeridian);
+
+ numberOfPoints=numberOfPointsAlongAMeridian*numberOfPointsAlongAParallel;
+ values=(double*)malloc(numberOfPoints*sizeof(double));
+ for (j=0;j < numberOfPointsAlongAMeridian;j++) {
for (i=0;i < numberOfPointsAlongAParallel;i++) {
k=i+numberOfPointsAlongAParallel*j;
if (matrix[k] != missingValueInImage)
values[k]=matrix[k];
else
values[k]=missingValueInGrib;
- }
- }
-
- grib_set_double_array( h,"values",values,numberOfPoints);
-
- if (h) {
- // grib_dump_content(h,stdout,"serialize",option_flags, 0);
- FILE* out = fopen(gribOut_.c_str(),"w");
- if(out){
- const void* mesg;
- size_t mesg_len;
- grib_get_message(h,&mesg,&mesg_len);
- fwrite(mesg,1,mesg_len,out);
- fclose(out);
- }
- else{
- perror(gribOut_.c_str());
- return 1;
- }
- }
- else {
- printf("Error: unable to create grib_handle\n");
- return 1;
- }
-
- return 0;
+ }
+ }
+
+ grib_set_double_array( hnew,"values",values,numberOfPoints);
+
+ if (hnew)
+ {
+ // grib_dump_content(h,stdout,"serialize",option_flags, 0);
+ FILE* out = fopen(gribOut_.c_str(),"w");
+ if(out)
+ {
+ const void* mesg;
+ size_t mesg_len;
+ grib_get_message(hnew,&mesg,&mesg_len);
+ fwrite(mesg,1,mesg_len,out);
+ fclose(out);
+ }
+ else
+ {
+ perror(gribOut_.c_str());
+ return 1;
+ }
+ grib_handle_delete(hnew);
+ }
+ else
+ {
+ printf("Error: unable to create grib_handle\n");
+ return 1;
+ }
+
+ return 0;
}
diff --git a/src/Stations/Station.cc b/src/Stations/Station.cc
index db43176..1ce8e39 100755
--- a/src/Stations/Station.cc
+++ b/src/Stations/Station.cc
@@ -22,32 +22,37 @@
#define MAX_LIST 150
class StationService : public MvService {
- int count;
- void AddToResult(MvRequest& out,datum& key);
- void AddToResult(MvRequest& out,station& st);
- void serve_WMO(MvRequest&,MvRequest&);
- void serve_EPS(MvRequest&,MvRequest&);
- void serve_location(MvRequest&,MvRequest&);
+
+ int count;
+ void AddToResult(MvRequest& out,datum& key);
+ void AddToResult(MvRequest& out,station& st);
+ void serve_WMO(MvRequest&,MvRequest&);
+ void serve_EPS(MvRequest&,MvRequest&);
+ void serve_location(MvRequest&,MvRequest&);
+
public:
- StationService();
- void serve(MvRequest&,MvRequest&);
+ StationService();
+ void serve(MvRequest&,MvRequest&);
+
private:
- char mode;
- position pos;
- station st;
- int ident;
- double north, west, south, east;
- double point_lat, point_lon, threshold;
+ bool bFailError_;
+ char mode;
+ position pos;
+ station st;
+ int ident;
+ double north, west, south, east;
+ double point_lat, point_lon, threshold;
};
-StationService::StationService() : MvService("STATIONS")
-{
- mode = 0;
- north = 90.0;
- west = -180.0;
- south = -90.0;
- east = 180.0;
-}
+StationService::StationService() :
+ MvService("STATIONS"),
+ bFailError_(true),
+ mode(0),
+ north(90.0),
+ west(-180.0),
+ south(-90.0),
+ east(180.0)
+{ }
void StationService::AddToResult(MvRequest& out,datum& key)
{
@@ -83,74 +88,74 @@ void StationService::AddToResult( MvRequest& out, station& st )
void StationService::serve(MvRequest& in,MvRequest& out)
{
- const char cIDENT = 'I';
-
- in.print();
-
- const char* p1 = in( "STATION_TYPE" );
- const char* p2 = in( "SEARCH_STATIONS_DATABASE" );
-
- if( ( p1 && *p1 == 'L' ) || ( p2 && *p2 == 'N' ) )
- {
- serve_location( in, out );
- }
- else
- {
- p1 = in( "SEARCH_KEY" );
- if( !p1 )
- p1 = &cIDENT;
-
- switch( *p1 )
- {
- case 'N':
- mode = 'n';
- break;
+ const char cIDENT = 'I';
- case 'I':
- mode = 'i';
- ident = in("IDENT");
- break;
+in.print();
- case 'W':
- mode = 'i';
- ident = in("WMO_BLOCK");
- break;
+ const char* cfail = (const char*)in("FAIL_ON_ERROR");
+ if ( cfail && strcmp(cfail,"NO") == 0 )
+ bFailError_ = false;
- case 'P':
- mode = 'l';
- threshold = in("THRESHOLD");
- north = in("POSITION",0); north += threshold;
- west = in("POSITION",1); west -= threshold;
- south = in("POSITION",0); south -= threshold;
- east = in("POSITION",1); east += threshold;
- break;
+ const char* p1 = in( "STATION_TYPE" );
+ const char* p2 = in( "SEARCH_STATIONS_DATABASE" );
- case 'A':
- mode = 'l';
- north = in("AREA",0);
- west = in("AREA",1);
- south = in("AREA",2);
- east = in("AREA",3);
- if(north < south)
- {
- double tmp = north;
- north = south;
- south = tmp;
- }
- break;
- }
+ if( ( p1 && *p1 == 'L' ) || ( p2 && *p2 == 'N' ) )
+ {
+ serve_location( in, out );
+ }
+ else
+ {
+ p1 = in( "SEARCH_KEY" );
+ if( !p1 )
+ p1 = &cIDENT;
+
+ switch( *p1 )
+ {
+ case 'N':
+ mode = 'n';
+ break;
+
+ case 'I':
+ mode = 'i';
+ ident = in("IDENT");
+ break;
+
+ case 'W':
+ mode = 'i';
+ ident = in("WMO_BLOCK");
+ break;
+
+ case 'P':
+ mode = 'l';
+ threshold = in("THRESHOLD");
+ north = in("POSITION",0); north += threshold;
+ west = in("POSITION",1); west -= threshold;
+ south = in("POSITION",0); south -= threshold;
+ east = in("POSITION",1); east += threshold;
+ break;
+
+ case 'A':
+ mode = 'l';
+ north = in("AREA",0);
+ west = in("AREA",1);
+ south = in("AREA",2);
+ east = in("AREA",3);
+ if(north < south)
+ {
+ double tmp = north;
+ north = south;
+ south = tmp;
+ }
+ break;
+ }
if( p2 && *p2 == 'E' )
- {
- serve_EPS( in, out );
- }
+ serve_EPS( in, out );
else
- {
- serve_WMO( in, out );
- }
+ serve_WMO( in, out );
}
- out.print();
+out.print();
}
void StationService::serve_WMO(MvRequest& in,MvRequest& out)
@@ -243,8 +248,13 @@ void StationService::serve_WMO(MvRequest& in,MvRequest& out)
if (ok) AddToResult(out,key);
}
- if(count == 0)
- setError(1,"No matching WMO station found");
+ if(count == 0)
+ {
+ if( bFailError_ )
+ setError(1,"No matching WMO station found");
+ else
+ setError(0,"No matching WMO station found");
+ }
if(count>MAX_LIST)
sendProgress("Too many stations, only %d out of %d were returned",MAX_LIST,count);
diff --git a/src/Stations/stat.fmt b/src/Stations/stat.fmt
index 246b63d..0dd7f8a 100644
--- a/src/Stations/stat.fmt
+++ b/src/Stations/stat.fmt
@@ -1,33 +1,35 @@
01001 7093 -867 9 10 0 ---- JAN MAYEN
-01001 7094 -867 9 9 0 T-T- JAN MAYEN
+01001 7094 -867 0 9 0 T-T- JAN MAYEN
01002 8006 1625 8 8 0 ---- VERLEGENHUKEN
01003 7700 1550 11 10 0 ---- HORNSUND
01004 7892 1193 8 8 0 --T- NY-ALESUND II
-01004 7892 1193 0 8 0 --T- NY-ALESUND II
+01004 7892 1192 0 16 0 --T- NY-ALESUND II
01006 7825 2282 14 14 0 ---- EDGEOYA
01007 7892 1193 8 8 0 ---- NY-ALESUND
01008 7825 1547 27 28 0 ---- SVALBARD AP
-01009 8065 2501 5 5 0 ---- KARL XII OYA
+01009 8065 2501 0 5 0 ---- KARL XII OYA
01010 6931 1613 13 10 0 ---- ANDOYA
+01010 6931 1613 0 10 0 T-T- ANDOYA
01011 8006 3150 0 10 0 ---- KVITOYA
01014 6923 1789 0 9 0 ---- SENJA-LAUKHELLA
01015 6959 1784 0 14 0 ---- HEKKINGEN LH
-01016 7893 2889 14 20 0 ---- KONGSOYA
+01016 7893 2889 0 20 0 ---- KONGSOYA
01017 7769 1478 6 6 0 ---- AKSELOYA
01018 6923 1600 0 436 0 ---- ANDOYA-TROLLTINDEN
01019 7752 2082 0 20 0 ---- SVARTTANGEN
-01020 7648 1655 10 10 0 ---- SORKAPPOYA
+01020 7648 1655 0 10 0 ---- SORKAPPOYA
01023 6906 1854 77 76 0 ---- BARDUFOSS
01024 7866 1636 0 20 0 ---- PYRAMIDEN
01025 6968 1891 9 8 0 ---- TROMSO/LANGNES
01026 6965 1894 115 100 0 ---- TROMSO
01027 6965 1891 20 10 0 ---- TROMSO-HOLT
-01028 7452 1900 16 18 0 ---- BJORNOYA
-01028 7450 1900 16 20 0 T-T- BJORNOYA
+01028 7452 1900 0 18 0 ---- BJORNOYA
+01028 7450 1900 0 20 0 T-T- BJORNOYA
+01030 6929 1813 0 982 0 ---- KISTEFJELL
01033 7025 1950 24 21 0 ---- TORSVAG LH
01034 7031 2014 38 37 0 ---- FUGLOYKALVEN FYR
01035 6956 2009 0 710 0 ---- LYNGEN GJERDVASSBU
-01036 6956 2043 5 700 0 ---- NORDNESFJELLET
+01036 6956 2043 0 700 0 ---- NORDNESFJELLET
01037 6939 2028 20 20 0 ---- SKIBOTN 2
01041 6973 2102 0 5 0 ---- NORDREISA-OYENG
01042 7061 2244 0 438 0 ---- HASVIK-SLUSKFJELLET
@@ -44,6 +46,7 @@
01058 6958 2353 381 381 0 ---- SUOLOVUOPMI LULIT
01059 7006 2499 8 5 0 ---- BANAK
01062 7651 2501 10 6 0 ---- HOPEN
+01064 6930 2535 0 591 0 ---- ISKORAS II
01065 6945 2550 131 131 0 ---- KARASJOK
01066 7106 2623 0 33 0 ---- HELNES FYR
01068 7101 2598 13 14 0 ---- HONNINGSVAG AP
@@ -57,6 +60,7 @@
01086 7059 2970 152 149 0 ---- BATSFJORD AP
01088 7006 2984 39 39 0 ---- VADSO AP
01089 6973 2990 86 89 0 ---- KIRKENES
+01091 6819 1779 0 740 0 ---- LOSISTUA
01092 7070 3007 0 9 0 ---- MAKKAUR LH
01098 7037 3110 15 14 0 ---- VARDO
01099 7034 3104 12 13 0 ---- VARDO AP
@@ -72,7 +76,7 @@
01114 6690 1365 8 9 0 ---- REIPA
01115 6676 1249 17 17 0 ---- MYKEN
01116 6595 1247 17 17 0 ---- SANDNESSJOEN AP
-01117 6583 1243 21 21 0 ---- TJOTTA
+01117 6583 1243 21 0 0 ---- TJOTTA
01121 6637 1261 10 10 0 ---- SOLVAER III
01122 6578 1322 72 72 0 ---- MOSJOEN AP
01124 6416 1247 0 195 0 ---- SNASA
@@ -81,8 +85,8 @@
01134 6518 1342 339 339 0 ---- MAJAVATN III
01135 6613 1359 124 126 0 ---- SELJELIA
01139 6765 1272 4 4 0 ---- VAEROY HELIPORT
-01141 6815 1362 26 26 0 ---- LEKNES
-01143 6805 1607 19 19 0 ---- DRAG-AJLUOKTA
+01141 6816 1362 26 25 0 ---- LEKNES AP
+01143 6805 1607 0 19 0 ---- DRAG-AJLUOKTA
01144 6740 1390 0 24 0 ---- HELLIGVAER II
01146 6623 1390 0 5 0 ---- SKAMDAL
01147 6583 1418 0 406 0 ---- VARNTRESK
@@ -91,7 +95,7 @@
01150 6650 1495 0 251 0 ---- HJARTASEN
01151 6636 1430 70 70 0 ---- MO I RANA AP
01152 6727 1436 13 11 0 ---- BODO VI
-01152 6728 1445 31 31 0 T-T- BODO
+01152 6728 1445 0 31 0 ---- BODO
01153 6729 1445 33 0 0 ---- BODO-VAGONES
01154 6858 1430 0 30 0 ---- LITLOY FYR
01156 6861 1443 8 7 0 ---- BO I VESTERALEN
@@ -112,7 +116,7 @@
01199 6876 2354 384 382 0 ---- SIHCCAJAVRI
01203 6203 499 40 75 0 ---- KRAKENES
01205 6233 527 37 38 0 ---- SVINOY LH
-01207 6210 558 41 41 0 ---- FISKABYGD
+01207 6210 558 0 41 0 ---- FISKABYGD
01209 6218 608 74 74 0 ---- ORSTA-VOLDA AP
01210 6256 612 21 22 0 ---- ALESUND/VIGRA
01212 6286 654 15 13 0 ---- ONA II
@@ -120,12 +124,12 @@
01215 6262 723 0 35 0 ---- HJELVIK-MYRBO
01217 6274 726 3 3 0 ---- MOLDE AP
01218 6223 742 17 11 0 ---- TAFJORD
-01220 6246 777 1294 1294 0 ---- MANNEN
+01220 6246 777 1294 0 0 ---- MANNEN
01221 6306 907 0 450 0 ---- TAGDALEN
01223 6311 782 62 62 0 ---- KRISTIANSUND AP
-01224 6247 621 13 15 0 ---- AALESUND
+01224 6247 621 0 15 0 ---- AALESUND
01225 6353 795 5 5 0 ---- VEIHOLMEN
-01227 6283 830 69 69 0 ---- TINGVOLL-HANEM
+01227 6272 877 0 405 0 ---- INNERDALEN
01228 6385 847 6 5 0 ---- SULA
01229 6252 687 0 625 0 ---- LEBERGSFJELLET
01230 6226 819 0 579 0 ---- BJORLI
@@ -139,11 +143,11 @@
01239 6222 953 0 1012 0 ---- HJERKINN II
01240 6417 941 16 16 0 ---- HALTEN LH
01241 6370 960 9 10 0 ---- ORLAND III
-01241 6371 961 10 10 0 T-T- ORLAND III
+01241 6371 961 0 10 0 T-T- ORLAND III
01242 6397 1022 0 20 0 ---- AFJORD II
01245 6260 967 599 604 0 ---- OPPDAL-SETER
01250 6213 999 694 0 0 ---- FOLLDAL-FREDHEIM
-01252 6282 1002 475 475 0 ---- BERKAK
+01252 6282 1002 475 0 0 ---- BERKAK
01253 6295 1018 0 299 0 ---- SOKNEDAL
01254 6298 1056 0 127 0 ---- KOTSOY
01257 6341 1045 132 127 0 ---- TRONDHEIM/VOLL
@@ -179,11 +183,11 @@
01314 6052 572 0 10 0 ---- FOSSMARK
01315 6065 611 0 17 0 ---- EVANGER
01317 6038 533 12 12 0 ---- BERGEN/FLORIDA
-01318 6179 619 51 51 0 ---- SANDANE
+01318 6179 619 0 51 0 ---- SANDANE
01319 6103 538 0 38 0 ---- TAKLE
01320 6183 610 60 60 0 ---- SANDANE AP
01321 6192 656 209 208 0 ---- STRYN
-01322 6146 593 64 64 0 ---- FORDE-TEFRE
+01322 6146 593 0 64 0 ---- FORDE-TEFRE
01323 6139 576 321 319 0 ---- FORDE AP
01325 6083 595 0 114 0 ---- MODALEN II
01326 6086 597 0 125 0 ---- MODALEN III
@@ -191,9 +195,9 @@
01328 6040 592 0 408 0 ---- KVAMSKOGEN
01329 6036 627 50 49 0 ---- KVAMSOY
01330 6022 598 6 1 0 ---- OMASTRAND
-01332 6142 676 3 3 0 ---- FJAERLAND-BREMUSEET
+01332 6142 676 0 3 0 ---- FJAERLAND-BREMUSEET
01334 6143 677 0 10 0 ---- FJERLAND SKARESTAD
-01336 6065 622 122 328 0 ---- BULKEN
+01336 6065 622 0 328 0 ---- BULKEN
01337 6062 643 55 54 0 ---- VOSSEVANGEN
01338 6117 665 54 49 0 ---- VANGSNES
01340 6041 728 736 735 0 ---- FET I EIDFJORD
@@ -210,14 +214,14 @@
01357 6087 852 804 807 0 ---- HOLLEKOLTEN
01358 6085 859 604 0 0 ---- HEMSEDAL II
01359 6053 819 774 772 0 ---- GEILO-OLDEBRATEN
-01360 6190 790 664 664 0 ---- BRATA-SLETTOM
+01360 6190 790 0 664 0 ---- BRATA-SLETTOM
01361 6202 766 872 872 0 ---- GROTLI III
-01362 6168 836 1894 1893 0 ---- JUVVASSHOE
+01362 6168 836 1894 0 0 ---- JUVVASSHOE
01363 6042 850 798 798 0 ---- DAGALI AP
01364 6118 811 955 956 0 ---- FILEFJELL
01365 6125 892 0 965 0 ---- BEITOSTOLEN II
01366 6156 800 1413 1413 0 ---- SOGNEFJELL
-01367 6099 924 365 365 0 ---- FAGERNES
+01367 6098 922 365 358 0 ---- FAGERNES
01368 6101 928 822 822 0 ---- FAGERNES AP
01369 6092 928 0 639 0 ---- ABJORSBRATEN
01370 6153 940 0 928 0 ---- SKABU
@@ -253,7 +257,7 @@
01413 5876 565 87 0 0 ---- SAERHEIM
01414 5944 508 0 25 0 ---- ROVER
01415 5888 564 9 7 0 ---- STAVANGER/SOLA
-01415 5887 566 37 37 0 T-T- STAVANGER/SOLA
+01415 5887 566 0 37 0 T-T- STAVANGER/SOLA
01416 5896 573 0 72 0 ---- STAVANGER VAALAND
01417 5948 575 65 64 0 ---- NEDRE VATS
01418 6002 521 0 32 0 ---- AUSTEVOLL
@@ -271,7 +275,8 @@
01432 5888 685 0 500 0 ---- SIRDAL-TJORHOM
01433 5983 699 1081 1079 0 ---- MIDTLAEGER
01434 5977 737 822 821 0 ---- VAAGSLI
-01436 5798 705 23 13 0 ---- LINDESNES LH
+01435 5981 721 990 990 0 ---- HAUKELISETER TESTFELT
+01436 5798 705 0 13 0 ---- LINDESNES LH
01439 5827 738 0 263 0 ---- KONSMO-HOYLAND
01440 5934 687 1105 1105 0 ---- BLASJO
01441 5960 741 836 841 0 ---- HOVDEN-LUNDANE
@@ -294,30 +299,30 @@
01465 5840 878 15 12 0 ---- TORUNGEN LH
01466 5997 1104 109 108 0 ---- KJELLER AP
01467 5863 915 5 4 0 ---- LYNGOR LH
-01468 6019 1201 148 148 0 ---- KONGSVINGER
+01468 6019 1201 0 148 0 ---- KONGSVINGER
01469 6017 1025 142 140 0 ---- HONEFOSS-HOYBY
01470 5938 919 93 93 0 ---- GVARV
-01471 6004 915 275 275 0 ---- VEGGLI II
-01473 5962 964 173 173 0 ---- KONGSBERG BRANNSTASJON
+01471 6004 915 0 275 0 ---- VEGGLI II
+01473 5962 964 0 173 0 ---- KONGSBERG BRANNSTASJON
01474 5990 952 294 288 0 ---- LYNGDAL I NUMEDAL
01475 5918 957 141 141 0 ---- SKIEN-GEITERYGGEN
01476 5886 958 5 5 0 ---- JOMFRULAND LH
01477 5971 1015 0 193 0 ---- KONNERUD
01478 5897 1015 0 15 0 ---- SVENNER LH
-01480 5975 1011 8 8 0 ---- DRAMMEN BERSKOG
-01481 5923 1035 26 26 0 ---- MELSOM
+01480 5975 1011 0 8 0 ---- DRAMMEN BERSKOG
+01481 5923 1035 0 26 0 ---- MELSOM
01482 5903 1052 8 6 0 ---- FERDER LH
01483 5918 1026 87 88 0 ---- TORP
01484 5991 1158 128 128 0 ---- AURSKOG
01485 5962 1022 60 0 0 ---- SANDE-GALLEBERG
-01486 5986 1043 163 163 0 ---- ASKER
-01487 5992 1083 59 90 0 ---- ALNA
+01486 5986 1043 0 163 0 ---- ASKER
+01487 5992 1083 0 90 0 ---- ALNA
01488 6012 1083 0 170 0 ---- HAKADAL
01489 6005 1069 360 0 0 ---- BJORNHOLT
-01490 5998 1067 514 514 0 ---- TRYVANNSHOGDA
+01490 5998 1067 0 514 0 ---- TRYVANNSHOGDA
01492 5994 1072 97 94 0 ---- OSLO-BLINDERN
-01492 5995 1072 97 0 0 ---- OSLO-BLINDERN
-01493 5929 1111 57 57 0 ---- SARPSBORG
+01492 5994 1072 96 95 0 ---- OSLO-BLINDERN
+01493 5929 1111 0 57 0 ---- SARPSBORG
01494 5938 1079 53 40 0 ---- RYGGE
01495 5915 1083 10 10 0 ---- STROMTANGEN LH
01496 5982 1148 154 152 0 ---- HOLAND-FOSSER
@@ -384,7 +389,7 @@
02197 6581 2411 15 13 0 ---- HAPARANDA
02199 6662 2347 0 132 0 ---- YLINENJARVI
02205 6330 1212 0 647 0 ---- STORLIEN SOL
-02206 6328 1213 644 583 0 ---- STORLIEN-STORVALLEN
+02206 6328 1213 0 583 0 ---- STORLIEN-STORVALLEN
02207 6328 1212 585 583 0 ---- STORLIEN-STORVALLEN A
02209 6304 1228 0 1030 0 ---- SYLARNA
02210 6319 1218 0 1090 0 ---- BLAHAMMAREN A
@@ -486,7 +491,7 @@
02484 5935 1807 0 44 0 ---- STOCKHOLM/OBSERVATORIET
02485 5935 1807 52 44 0 ---- STOCKHOLM
02486 5936 1752 0 6 0 ---- ADELSO
-02487 5930 1870 18 16 0 ---- STAVSNAS
+02487 5934 1873 22 20 0 ---- SKARPO A
02488 6053 1838 9 8 0 ---- ORSKAR
02489 5907 1811 6 4 0 ---- BERGA
02490 5983 1863 16 15 0 ---- SVANBERGA
@@ -579,81 +584,81 @@
02680 5692 1814 39 40 0 ---- HOBURG
02701 6905 2085 1009 1007 0 ---- KILPISJARVI SAANA
02702 6913 2727 0 156 0 ---- INARI KAAMANEN
-02703 6020 2475 32 31 0 ---- ESPOO SEPANKYLA
+02703 6021 2474 32 31 0 ---- ESPOO SEPANKYLA
02704 6112 2433 0 87 0 ---- HATTULA LEPAA AWS
-02705 6702 2722 493 491 0 ---- PELKOSENNIEMI PYHATUNTURI
+02705 6702 2722 488 491 0 ---- PELKOSENNIEMI PYHATUNTURI
02706 6025 2405 0 37 0 ---- LOHJA PORLA
02708 6218 2280 0 161 0 ---- KARVIA ALKKIA
02710 6295 2640 0 127 0 ---- VESANTO SONKARI
02711 6310 2162 13 15 0 ---- VAASA KESKUSTA
-02713 6122 2513 0 134 0 ---- HAMEENLINNA LAMMI EVO
-02714 6448 2647 0 115 0 ---- VAALA PELSO
+02713 6122 2513 136 134 0 ---- HAMEENLINNA LAMMI EVO
+02714 6450 2644 115 114 0 ---- VAALA PELSO
02715 6483 2823 0 320 0 ---- HYRYNSALMI KYTOMAKI
02716 6593 2652 0 154 0 ---- RANUA KK
02717 6817 2578 0 275 0 ---- KITTILA POKKA
02718 6152 2818 0 98 0 ---- PUUMALA KK URHEILUKENTTA
-02719 6781 2775 0 243 0 ---- SODANKYLA LOKKA
+02719 6781 2775 0 240 0 ---- SODANKYLA LOKKA
02720 6770 2486 191 196 0 ---- KITTILA AIRPORT
-02721 6395 2285 6 5 0 ---- KOKKOLA TANKAR
+02721 6395 2284 6 5 0 ---- KOKKOLA TANKAR
02722 6842 2742 0 320 0 ---- INARI SAARISELKA
-02723 6778 2485 200 524 0 ---- KITTILA LEVITUNTURI
-02724 6012 2030 0 16 0 ---- LUMPARLAND LANGNAS
+02723 6778 2485 200 522 0 ---- KITTILA LEVITUNTURI
+02724 6012 2030 13 11 0 ---- LUMPARLAND LANGNAS HARBOUR
02725 6345 2445 0 153 0 ---- HALSUA KANALA PUROLA
-02726 6859 2358 0 377 0 ---- ENONTEKIO NAKKALA
+02726 6859 2358 371 374 0 ---- ENONTEKIO NAKKALA
02727 6127 2552 76 80 0 ---- ASIKKALA PULKKILANHARJU
02728 6130 2818 88 86 0 ---- TAIPALSAARI KYLANIEMI
02729 6188 2533 0 205 0 ---- JAMSA HIMOS
02730 6183 2885 157 155 0 ---- SAVONLINNA RUUNAVUORI
02731 6153 2820 127 125 0 ---- PUUMALA KK
02732 6280 2790 87 86 0 ---- KUOPIO RITONIEMI
-02733 6103 2857 46 46 0 ---- LAPPEENRANTA KONNUNSUO
+02733 6104 2856 46 46 0 ---- LAPPEENRANTA KONNUNSUO
02734 6145 2947 75 74 0 ---- PARIKKALA KOITSANLAHTI
-02735 6233 2355 140 138 0 ---- VIRRAT AIJANNEVA
-02736 6190 2788 112 110 0 ---- JUVA PARTAALA
-02737 6382 2417 85 83 0 ---- TOHOLAMPI LAITALA
-02738 6373 2572 153 152 0 ---- PYHAJARVI OL OJAKYLA
-02739 6412 2835 163 161 0 ---- SOTKAMI KUOLANIEMI
+02735 6233 2354 140 138 0 ---- VIRRAT AIJANNEVA
+02736 6189 2789 112 110 0 ---- JUVA PARTALA
+02737 6382 2416 85 83 0 ---- TOHOLAMPI LAITALA
+02738 6374 2571 153 152 0 ---- PYHAJARVI OJAKYLA
+02739 6411 2834 163 161 0 ---- SOTKAMO KUOLANIEMI
02740 6588 2427 9 8 0 ---- TORNIO LIAKKA
02741 6018 1998 13 11 0 ---- JOMALA JOMALABY
02743 5987 2220 0 8 0 ---- KEMIONSAARI VANO
02744 6150 2376 0 92 0 ---- TAMPERE SATAKUNNANKATU
-02745 6717 2918 215 213 0 ---- SALLA NARUSKA
-02746 5982 2292 28 11 0 ---- HANKO TULLINIEMI
+02745 6716 2918 215 213 0 ---- SALLA NARUSKA
+02746 5981 2292 28 11 0 ---- HANKO TULLINIEMI
02747 6038 2210 6 4 0 ---- TURKU RAJAKARI
-02748 6217 2786 0 87 0 ---- JOROINEN VARKAUS AIRPORT
+02748 6217 2786 83 87 0 ---- JOROINEN VARKAUS AIRPORT
02750 5985 2325 0 3 0 ---- HANKO TVARMINNE
02751 6163 2138 5 3 0 ---- PORI TAHKOLUOTO
02752 6220 2117 22 0 0 ---- KRISTIINANKAUPUNKI LIGHTHOUSE
-02753 6183 2247 123 122 0 ---- KANKAANPAA NIINISALO AIRFIELD
+02753 6184 2246 123 122 0 ---- KANKAANPAA NIINISALO AIRFIELD
02754 6100 2450 85 87 0 ---- HAMEENLINNA KATINEN
-02755 6403 2472 76 0 0 ---- YLIVIESKA AIRPORT
+02755 6405 2472 76 76 0 ---- YLIVIESKA AIRFIELD
02756 6037 2312 0 3 0 ---- SALO KARKKA
02757 5982 2358 23 15 0 ---- RAASEPORI JUSSARO
02758 6042 2440 44 42 0 ---- VIHTI MAASOJA
-02759 6038 2562 24 22 0 ---- PORVOO HARABACKA
-02760 6617 2914 307 300 0 ---- KUUSAMO RUKA TALVIJARVI
+02759 6039 2561 24 22 0 ---- PORVOO HARABACKA
+02760 6617 2914 307 305 0 ---- KUUSAMO RUKA TALVIJARVI
02761 6115 2130 29 4 0 ---- RAUMA KYLMAPIHLAJA
02762 6127 2225 39 37 0 ---- KOKEMAKI PEIPOHJA HYRKOLA
02763 6147 2375 86 85 0 ---- TAMPERE HARMALA
02764 6800 2421 0 270 0 ---- KITTILA LOMPOLONVUOMA
-02765 6170 2552 83 81 0 ---- LUHANKA JUDINSALO
+02765 6170 2551 83 81 0 ---- LUHANKA JUDINSALO
02766 6315 3105 237 235 0 ---- ILOMANTSI POTSONVAARA
02767 6105 2505 0 125 0 ---- HAMEENLINNA LAMMI PAPPILA
02768 6122 2605 0 100 0 ---- HEINOLA ASEMANTAUS
-02769 6242 2218 95 93 0 ---- KAUHAJOKI KUJA-KOKKO
+02769 6241 2218 95 93 0 ---- KAUHAJOKI KUJA-KOKKO
02770 6185 2428 0 153 0 ---- JUUPAJOKI HYYTIALA
02771 6188 2610 0 146 0 ---- JOUTSA LEIVONMAKI SAVENAHO
02772 6207 2857 80 79 0 ---- RANTASALMI RUKKASLUOTO
-02773 6045 2218 7 8 0 ---- TURKU ARTUKAINEN
-02777 6045 2365 121 116 0 ---- SALO KIKALA AIRFIELD
-02778 6180 2932 80 78 0 ---- PUNKAHARJU LAUKANSAARI
-02780 6293 2118 3 2 0 ---- KORSNAS BREDSKARET
-02781 6298 2075 4 2 0 ---- STROMMINGSBADAN
+02773 6045 2218 9 8 0 ---- TURKU ARTUKAINEN
+02777 6046 2365 121 117 0 ---- SALO KIIKALA AIRFIELD
+02778 6180 2932 80 78 0 ---- SAVONLINNA PUNKAHARJU
+02780 6293 2119 3 1 0 ---- KORSNAS BREDSKARET
+02781 6298 2074 4 2 0 ---- STROMMINGSBADAN
02783 6118 2503 0 129 0 ---- LAMMI ISO-EVO
-02787 6308 2427 170 170 0 ---- ALAJARVI MOKSY
-02788 6315 2732 91 90 0 ---- MAANINKA HALOLA
-02789 6338 2867 166 166 0 ---- RAUTAVAARA YLA-LUOSTA
-02790 6025 2075 23 23 0 ---- KUMLINGE KK
+02787 6309 2426 171 171 0 ---- ALAJARVI MOKSY
+02788 6314 2731 91 90 0 ---- KUOPIO MAANINKA
+02789 6338 2866 166 166 0 ---- RAUTAVAARA YLA-LUOSTA
+02790 6026 2075 23 23 0 ---- KUMLINGE KK
02791 6323 2923 0 116 0 ---- JUUKA NIEMELA
02793 6255 2967 80 78 0 ---- LIPERI TUISKAVANLUOTO
02794 5992 2435 0 2 0 ---- KIRKKONUMMI MAKILUOTO
@@ -662,135 +667,139 @@
02797 6415 2543 0 112 0 ---- HAAPAVESI
02798 6367 2883 0 115 0 ---- VALTIMO KK
02799 6430 3017 198 197 0 ---- KUHMO KALLIOJOKI
-02800 6462 2390 24 0 0 ---- NAHKIAINEN
-02801 6905 2078 476 478 0 ---- ENONTEKIO KILPISJARVI
-02803 6468 2510 50 48 0 ---- SIIKAJOKI REVONLAHTI
+02800 6461 2390 24 0 0 ---- RAAHE NAHKIAINEN
+02801 6905 2079 483 480 0 ---- ENONTEKIO KILPISJARVI
+02803 6468 2509 50 48 0 ---- SIIKAJOKI REVONLAHTI
02804 6556 2825 0 197 0 ---- TAIVALKOSKI KK KAUPPATIE
-02805 6975 2703 101 107 0 ---- UTSJOKI KEVO
-02807 6862 2742 148 147 0 ---- INARI IVALO AIRPORT
+02805 6976 2701 106 107 0 ---- UTSJOKI KEVO
+02807 6861 2741 145 147 0 ---- INARI IVALO AIRPORT
02808 6958 2885 132 130 0 ---- INARI SEVETTIJARVI
02811 6637 2932 0 160 0 ---- KUUSAMO KIUTAKONGAS
02812 6653 2465 0 91 0 ---- YLITORNIO MELTOSJARVI
-02813 6658 2602 107 106 0 ---- ROVANIEMI APUKKA
-02814 6672 2717 209 208 0 ---- KEMIJARVI LENTOKENTTA
+02813 6658 2601 107 106 0 ---- ROVANIEMI APUKKA
+02814 6672 2716 209 208 0 ---- KEMIJARVI AIRFIELD
02815 6728 2818 0 180 0 ---- SAVUKOSKI KK
-02816 6808 2718 249 247 0 ---- SODANKYLA VUOTSO
-02817 6843 2745 432 430 0 ---- SAARISELKA KAUNISPAA
+02816 6808 2718 249 248 0 ---- SODANKYLA VUOTSO
+02817 6843 2744 438 437 0 ---- SAARISELKA KAUNISPAA
02818 6848 2830 255 253 0 ---- INARI RAJAJOOSEPPI
02819 6775 2962 0 370 0 ---- SALLA VARRIOTUNTURI
-02820 6806 2403 757 755 0 ---- MUONIO LAUKUKERO
+02820 6806 2403 762 760 0 ---- MUONIO LAUKUKERO
02821 6797 2412 566 565 0 ---- MUONIO SAMMALTUNTURI
-02823 6797 2368 253 253 0 ---- MUONIO ALAMUONIO
-02824 6798 2425 350 347 0 ---- KITTILA KENTTAROVA
+02823 6795 2368 253 236 0 ---- MUONIO ALAMUONIO
+02824 6798 2424 350 347 0 ---- KITTILA KENTTAROVA
02825 7008 2795 0 35 0 ---- UTSJOKI NUORGAM
02826 6737 2663 180 179 0 ---- SODANKYLA AWS
-02827 6906 2750 124 122 0 ---- INARI VAYLA
-02828 6038 2255 5 6 0 ---- KAARINA YLTOINEN
-02829 6060 2480 0 86 0 ---- HYVINKAA HYVINKAANKYLA
+02827 6906 2749 124 123 0 ---- INARI VAYLA
+02828 6039 2255 5 6 0 ---- KAARINA YLTOINEN
+02829 6060 2480 88 86 0 ---- HYVINKAA HYVINKAANKYLA
02830 6070 2682 0 33 0 ---- KOUVOLA ANJALA
02831 6053 2768 0 5 0 ---- VIROLAHTI KOIVUNIEMI
02832 6223 3035 0 90 0 ---- TOHMAJARVI KEMIE
-02833 6293 2248 32 26 0 ---- SEINAJOKI PELMAA
-02834 6383 2722 208 207 0 ---- VIEREMA KAARAKKALA
-02835 6884 2830 125 123 0 ---- INARI NELLIM
+02833 6294 2249 32 26 0 ---- SEINAJOKI PELMAA
+02834 6384 2722 208 207 0 ---- VIEREMA KAARAKKALA
+02835 6884 2830 123 121 0 ---- INARI NELLIM
02836 6737 2663 179 179 0 T-T- SODANKYLA ARCTIC RESEARCH CENTRE
-02844 6680 2400 84 84 0 ---- PELLO KK MUSEOTIE
-02845 6656 2583 201 197 0 ---- ROVANIEMI AIRPORT
-02847 6650 2572 82 85 0 ---- ROVANIEMI RAUTATIEASEMA
-02849 6683 2868 222 215 0 ---- SALLA KK MYLLYTIE
-02850 6232 2791 0 83 0 ---- VARKAUS KOLSUANNIEMI
+02844 6677 2396 86 85 0 ---- PELLO CENTRE
+02845 6656 2582 194 193 0 ---- ROVANIEMI AIRPORT
+02847 6650 2571 82 85 0 ---- ROVANIEMI RAUTATIEASEMA
+02849 6683 2867 222 215 0 ---- SALLA KK MYLLYTIE
+02850 6232 2791 84 83 0 ---- VARKAUS KOLSUANNIEMI
02851 6493 2538 12 10 0 ---- OULU OULUNSALO PELLONPAA
02852 6384 2312 8 6 0 ---- KOKKOLA HOLLIHAKA
02857 6890 2574 0 285 0 ---- INARI ANGELI LINTUPUOLISELKA
02858 6958 2889 0 106 0 ---- INARI KIRAKKAJARVI
02859 6466 2806 0 341 0 ---- PUOLANKA PALJAKKA
02860 6765 2490 0 181 0 ---- KITTILA KK
-02862 6573 2452 7 3 0 ---- KEMI AJOS
+02862 6567 2452 3 3 0 ---- KEMI AJOS
02863 6542 2413 19 19 0 ---- KEMI I LIGHTHOUSE
02864 6578 2458 15 19 0 ---- KEMI-TORNIO AIRPORT
-02866 6540 2697 123 121 0 ---- PUDASJARVI AIRFIELD
-02868 6617 2915 488 486 0 ---- KUUSAMO RUKATUNTURI
-02869 6597 2918 263 262 0 ---- KUUSAMO AIRPORT
-02872 6467 2442 2 2 0 ---- RAAHE LAPALUOTO
-02873 6503 2457 8 8 0 ---- HAILUOTO MARJANIEMI
-02874 6503 2473 7 8 0 ---- HAILUOTO OJAKYLA
+02866 6541 2696 120 120 0 ---- PUDASJARVI AIRFIELD
+02868 6617 2915 363 500 0 ---- KUUSAMO RUKATUNTURI
+02869 6600 2922 266 264 0 ---- KUUSAMO AIRPORT
+02872 6467 2441 2 2 0 ---- RAAHE LAPALUOTO
+02873 6504 2456 7 7 0 ---- HAILUOTO MARJANIEMI
+02874 6502 2473 7 7 0 ---- HAILUOTO KESKIKYLA
02875 6493 2537 15 12 0 ---- OULU AIRPORT
-02876 6500 2540 5 3 0 ---- OULU VIHREASAARI
+02876 6501 2539 4 3 0 ---- OULU VIHREASAARI HARBOUR
02880 6584 2417 9 8 0 ---- TORNIO TORPPI
02881 6598 2637 163 161 0 ---- RANUA AIRFIELD
-02882 6800 2424 0 340 0 ---- KITTILA MATOROVA
+02882 6800 2424 342 340 0 ---- KITTILA MATOROVA
02883 6422 2776 162 160 0 ---- KAJAANI PETAISENNISKA
02888 6905 2776 122 120 0 ---- INARI SEITALAASSA
02889 6493 2875 225 223 0 ---- SUOMUSSALMI PESIO
02890 6976 2701 0 76 0 ---- UTSJOKI KEVO KEVOJARVI
-02897 6428 2768 136 143 0 ---- KAJAANI AIRPORT
+02897 6428 2767 134 147 0 ---- KAJAANI AIRPORT
02901 6373 2258 13 11 0 ---- MASSKAR
02903 6372 2314 25 26 0 ---- KRUUNUPYY AIRPORT
-02906 6017 2276 0 13 0 ---- KEMIONSAARI KEMIO KK
-02907 6433 2360 5 3 0 ---- ULKOKALLA
-02910 6343 2107 11 4 0 ---- VALASSAARET
+02906 6017 2276 0 12 0 ---- KEMIONSAARI KEMIO
+02907 6433 2361 5 3 0 ---- KALAJOKI ULKOKALLA
+02910 6344 2106 11 4 0 ---- MUSTASAARI VALASSAARET
02911 6305 2177 8 4 0 ---- VAASA AIRPORT
-02913 6310 2303 44 42 0 ---- KAUHAVA AIRFIELD
+02913 6314 2305 46 44 0 ---- KAUHAVA AIRFIELD
02914 6312 2304 0 40 0 ---- KAUHAVA KK UUNIMAANTIE
-02915 6308 2587 132 132 0 ---- VIITASAARI HAAPANIEMI
-02917 6302 2780 102 98 0 ---- SIILINJARVI KUOPIO AIRPORT
-02919 6120 2847 0 77 0 ---- LAPPEENRANTA HIETAPAKKA
-02920 6375 2253 19 2 0 ---- PIETARSAARI KALLAN
+02915 6308 2586 132 130 0 ---- VIITASAARI HAAPANIEMI
+02917 6301 2780 97 96 0 ---- SIILINJARVI KUOPIO AIRPORT
+02919 6120 2847 80 77 0 ---- LAPPEENRANTA HIEKKAPAKKA
+02920 6375 2252 19 2 0 ---- PIETARSAARI KALLAN
02921 6288 2110 13 4 0 ---- MOIKIPAA
02923 6082 2350 105 104 0 ---- JOKIOINEN AWS
-02924 6253 2402 161 157 0 ---- AHTARI MYLLYMAKI
-02926 6148 2178 0 9 0 ---- PORI RAILWAY STATION
-02927 6251 2481 0 227 0 ---- MULTIA KARHILA
-02928 6260 2972 0 81 0 ---- JOENSUU LINNUNLAHTI
-02929 6267 2963 117 119 0 ---- LIPERI JOENSUU AIRPORT
+02924 6254 2422 160 159 0 ---- AHTARI MYLLYMAKI
+02926 6148 2178 10 9 0 ---- PORI RAILWAY STATION
+02927 6251 2481 228 227 0 ---- MULTIA KARHILA
+02928 6260 2972 82 81 0 ---- JOENSUU LINNUNLAHTI
+02929 6266 2961 119 121 0 ---- LIPERI JOENSUU AIRPORT
+02930 6012 2522 0 13 0 ---- SIPOO EESTILUOTO
02931 6233 2119 5 5 0 ---- KASKINEN SALGRUND
02934 6017 2495 0 3 0 ---- HELSINKI RAILWAY STATION SQUARE
-02935 6240 2568 145 141 0 T-T- JYVASKYLA AIRPORT
+02935 6240 2567 141 139 0 T-T- JYVASKYLA AIRPORT
02937 6125 2235 39 38 0 ---- KOKEMAKI TULKKILA
-02939 6277 3097 157 152 0 ---- ILOMANTSI MEKRIJARVI
-02942 6185 2247 136 134 0 ---- KANKAANPAA NIINISALO PUOLUSTUSVOIMAT
-02943 6152 2375 104 98 0 ---- TAMPERE SIILINKARI
-02944 6152 2375 112 112 0 ---- TAMPERE-PIRKKALA AIRPORT
-02945 6185 2480 145 143 0 ---- JAMSA HALLI AIRFIELD
+02939 6277 3098 157 155 0 ---- ILOMANTSI MEKRIJARVI
+02942 6184 2246 125 124 0 ---- KANKAANPAA NIINISALO PUOLVOIM
+02943 6152 2375 98 98 0 ---- TAMPERE SIILINKARI
+02944 6142 2362 109 122 0 ---- TAMPERE-PIRKKALA AIRPORT
+02945 6186 2480 145 143 0 ---- JAMSA HALLI AIRFIELD
02946 6187 2482 0 144 0 ---- JAMSA HALLI LENTOASEMANTIE
-02947 6173 2730 138 138 0 ---- MIKKELI AIRPORT
-02948 6195 2895 95 95 0 ---- SAVONLINNA AIRPORT
+02947 6169 2720 100 99 0 ---- MIKKELI AIRPORT
+02948 6195 2893 95 95 0 ---- SAVONLINNA AIRPORT
02949 6065 2381 0 143 0 ---- SOMERO SALKOLA
-02950 6012 2170 6 4 0 ---- FAGERHOLM
+02950 6011 2170 5 3 0 ---- PARAINEN FAGERHOLM
02952 6147 2180 17 13 0 ---- PORI AIRPORT
02955 6290 2763 88 87 0 ---- KUOPIO SAVILAHTI
-02956 6089 2694 99 99 0 ---- KOUVOLA UTTI LENTOPORTINTIE
+02956 6089 2694 100 99 0 ---- KOUVOLA UTTI LENTOPORTINTIE
02957 6310 2165 9 7 0 ---- VAASA KLEMETTILA
-02958 6105 2820 106 104 0 ---- LAPPEENRANTA AIRPORT
+02958 6104 2815 106 106 0 ---- LAPPEENRANTA AIRPORT
02959 6105 2822 115 103 0 ---- LAPPEENRANTA LEPOLA
02961 6113 2137 10 6 0 ---- KUUSKAJASKARI
02963 6082 2350 103 104 0 T-T- JOKIOINEN OBSERVATORY
-02964 6072 2102 4 4 0 ---- KUSTAVI ISOKARI
-02965 6097 2563 79 78 0 ---- LAHTI LAUNE
-02966 6090 2693 100 100 0 ---- KOUVOLA UTTI AIRFIELD
-02967 6028 2718 6 4 0 ---- KOTKA HAAPASAARI
+02964 6072 2103 4 4 0 ---- KUSTAVI ISOKARI
+02965 6096 2563 79 78 0 ---- LAHTI LAUNE
+02966 6089 2694 100 99 0 ---- KOUVOLA UTTI AIRFIELD
+02967 6029 2719 6 4 0 ---- KOTKA HAAPASAARI
02968 6038 2705 28 17 0 ---- KOTKA KIRKONMAA
02970 6012 1989 6 5 0 ---- JOMALA MARIEHAMN AIRPORT
02971 6015 1987 10 9 0 ---- JOMALA
02972 6052 2227 59 47 0 ---- TURKU AIRPORT
02973 6040 2377 86 84 0 ---- SUOMUSJARVI
-02974 6032 2497 56 51 0 ---- VANTAA HELSINKI-VANTAA AIRPORT
+02974 6033 2496 54 51 0 ---- VANTAA HELSINKI-VANTAA AIRPORT
02975 6025 2505 28 17 0 ---- HELSINKI-MALMI
-02976 6037 2697 12 11 0 ---- KOTKA RANKKI
+02976 6038 2696 13 11 0 ---- KOTKA RANKKI
02978 6018 2495 4 4 0 ---- HELSINKI KAISANIEMI
02979 5950 2035 16 4 0 ---- BOGSKAR
02980 5997 1997 10 8 0 ---- NYHAMN
-02981 5978 2138 7 9 0 ---- PARAINEN UTO
-02982 5977 2295 11 6 0 ---- RUSSARO
-02983 6052 2465 111 111 0 ---- NURMIJARVI GEOPHYSICAL OBSERVATORY
+02981 5978 2137 7 9 0 ---- PARAINEN UTO
+02982 5977 2295 7 5 0 ---- HANKO RUSSARO
+02983 6051 2465 113 111 0 ---- NURMIJARVI GEOPHYSICAL OBSERVATORY
02984 5993 2402 12 10 0 ---- BAGASKAR
-02987 5998 2560 23 23 0 ---- KALLBADAGRUND
+02985 6018 2479 8 6 0 ---- ESPOO TAPIOLA
+02986 6029 2457 92 90 0 ---- ESPOO NUUKSIO
+02987 5999 2560 23 0 0 ---- PORVOO KALLBADAGRUND
02988 6010 2507 7 4 0 ---- ISOSAARI
02989 5995 2493 20 0 0 ---- HELSINKI LIGHTHOUSE
02991 6020 2563 27 20 0 ---- PORVOO EMASALO
-02992 6027 2645 5 5 0 ---- PERNAJA ORRENGRUND
-02993 6030 1913 11 11 0 ---- MARKET
+02992 6028 2644 4 5 0 ---- LOVIISA ORRENGRUND
+02993 6030 1913 15 3 0 ---- HAMMARLAND MARKET
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
03002 6075 -86 15 15 0 ---- BALTASOUND NO.2
03005 6014 -118 82 82 0 T-T- LERWICK
@@ -821,7 +830,7 @@
03057 5727 -448 0 21 0 ---- FOYERS
03062 5782 -397 4 4 0 ---- TAIN RANGE
03063 5721 -383 228 228 0 ---- AVIEMORE
-03065 5712 -364 1245 1237 0 ---- CAIRNGORM SUMMIT
+03065 5712 -364 0 1237 0 ---- CAIRNGORM SUMMIT
03066 5765 -356 5 7 0 T--- KINLOSS
03068 5771 -332 7 13 0 ---- LOSSIEMOUTH
03070 5735 -335 0 213 0 ---- GLENLIVET
@@ -932,6 +941,7 @@
03529 5215 -204 35 35 0 ---- PERSHORE
03535 5248 -169 96 96 0 ---- COLESHILL
03544 5236 -133 107 107 0 ---- CHURCH LAWFORD
+03559 5210 -42 29 29 0 --T- CARDINGTON
03560 5223 -47 85 85 0 ---- BEDFORD
03590 5212 96 90 86 0 T--- WATTISHAM
03591 5212 97 89 87 0 PPPP WATTISHAM
@@ -1009,7 +1019,7 @@
03915 5487 -646 64 64 0 ---- PORTGLENONE
03916 5518 -615 156 156 0 ---- BALLYPATRICK FOREST
03917 5466 -623 63 82 0 ---- ALDERGROVE
-03918 5450 -633 18 18 0 T--- CASTOR BAY
+03918 5450 -633 18 0 0 T--- CASTOR BAY
03920 5448 -610 38 37 0 ---- HILLSBOROUGH
03923 5424 -650 161 161 0 ---- GLENANNE NO2
03927 5467 -567 0 11 0 ---- BANGOR HARBOUR
@@ -1139,7 +1149,7 @@
04260 6202 -4967 36 37 0 ---- MITTARFIK PAAMIUT (FREDERIKSHAAB LUFTHAVN)
04266 6076 -4845 33 31 0 ---- NUNARSSUIT
04270 6117 -4542 31 34 0 ---- MITTARFIK NARSARSUAQ
-04270 6117 -4542 5 4 0 T-T- MITTARFIK NARSARSUAQ
+04270 6117 -4542 0 0 0 T-T- MITTARFIK NARSARSUAQ
04272 6072 -4604 57 57 0 ---- QAQORTOQ (JULIANEHAAB)
04273 6072 -4603 21 16 0 ---- QAQORTOQ HELIPORT
04280 6092 -4606 6 25 0 ---- NARSAQ HELIPORT
@@ -1180,13 +1190,13 @@
06013 6222 -658 75 80 0 ---- KLAKSVIK HELIPORT
06016 5551 787 21 24 0 ---- HORNS REV A
06017 5560 762 10 26 0 ---- HORNS REV B
-06019 5693 864 41 41 0 ---- SILSTRUP
+06019 5693 864 0 41 0 ---- SILSTRUP
06021 5712 859 0 3 0 ---- HANSTHOLM
06022 5572 480 43 75 0 ---- TYRA OEST
06024 5707 871 8 7 0 ---- THISTED LUFTHAVN
06029 5705 1005 0 2 0 ---- GROENLANDSHAVNEN
06030 5710 985 13 3 0 ---- FLYVESTATION AALBORG
-06031 5719 994 13 13 0 ---- TYLSTRUP
+06031 5719 994 0 13 0 ---- TYLSTRUP
06032 5738 1034 56 55 0 ---- STENHOEJ
06033 5760 996 0 3 0 ---- HIRTSHALS
06034 5750 1022 28 28 0 ---- SINDAL FLYVEPLADS
@@ -1216,7 +1226,7 @@
06079 5672 1151 4 2 0 ---- ANHOLT HAVN
06080 5553 856 29 30 0 ---- ESBJERG LUFTHAVN
06081 5556 808 18 19 0 ---- BLAAVANDSHUK FYR
-06082 5596 861 25 25 0 ---- BORRIS
+06082 5596 861 0 25 0 ---- BORRIS
06088 5545 840 0 4 0 ---- NORDBY
06093 5529 865 5 3 0 ---- VESTER VEDSTED
06096 5519 856 9 6 0 ---- ROEMOE/JUVRE
@@ -1225,7 +1235,7 @@
06102 5587 978 24 22 0 ---- HORSENS/BYGHOLM
06104 5574 917 80 75 0 ---- BILLUND LUFTHAVN
06108 5544 933 45 44 0 ---- KOLDINGEGNENS LUFTHAVN
-06109 5547 911 62 62 0 ---- ASKOV
+06109 5547 911 0 62 0 ---- ASKOV
06110 5523 926 47 43 0 ---- FLYVESTATION SKRYDSTRUP
06111 5530 980 0 2 0 ---- BAAGOE
06116 5490 911 17 15 0 ---- STORE JYNDEVAD
@@ -1237,7 +1247,7 @@
06126 5531 1044 51 49 0 ---- AARSLEV
06132 5583 1062 0 16 0 ---- TRANEBJERG OEST
06135 5532 1139 34 33 0 ---- FLAKKEBJERG
-06136 5525 1133 12 12 0 ---- TYSTOFTE
+06136 5525 1133 0 12 0 ---- TYSTOFTE
06138 5482 1099 4 2 0 ---- LANGOE
06141 5483 1133 9 8 0 ---- ABED
06143 5470 1145 4 5 0 ---- MARIBO
@@ -1248,7 +1258,7 @@
06156 5574 1160 13 12 0 ---- HOLBAEK FLYVEPLADS
06158 5567 1110 0 2 0 ---- KALUNDBORG
06159 5574 1087 16 14 0 ---- ROESNAES FYR
-06160 5577 1233 31 17 0 ---- VAERLOESE
+06160 5577 1233 0 17 0 ---- VAERLOESE
06165 5620 1171 18 16 0 ---- HESSELOE
06168 5612 1234 43 37 0 ---- NAKKEHOVED FYR
06169 5601 1128 16 14 0 ---- GNIBEN
@@ -1260,7 +1270,7 @@
06183 5554 1271 14 7 0 ---- DROGDEN FYR
06184 5572 1256 10 8 0 ---- DMI
06186 5569 1254 0 7 0 ---- KOEBENHAVN/LANDBOHOEJSKOLEN
-06187 5569 1260 20 20 0 ---- KOEBENHAVNS TOLDBOD
+06187 5569 1260 0 20 0 ---- KOEBENHAVNS TOLDBOD
06188 5588 1241 41 40 0 ---- SJAELSMARK
06190 5507 1475 17 16 0 ---- BORNHOLMS LUFTHAVN
06193 5530 1477 9 8 0 ---- HAMMER ODDE FYR
@@ -1398,7 +1408,7 @@
06627 4648 714 1030 1029 2 ---- CHATEAU-D'OEX
06628 4675 727 1043 1042 2 ---- PLAFFEIEN
06629 4695 728 0 775 0 ---- MUEHLEBERG / STOCKEREN
-06630 4691 751 505 510 0 ---- BERN-BELPMOOS
+06630 4691 751 0 510 0 ---- BERN-BELPMOOS
06631 4699 746 555 553 0 ---- BERN / ZOLLIKOFEN
06632 4718 742 431 430 0 ---- GRENCHEN
06633 4738 808 388 387 0 ---- BUCHS / AARAU
@@ -1406,13 +1416,13 @@
06635 4712 761 485 484 0 ---- KOPPIGEN
06636 4697 728 481 480 0 ---- MUEHLEBERG
06637 4673 817 591 589 0 ---- MEIRINGEN
-06638 4694 781 747 745 2 ---- LANGNAU I.E.
+06638 4694 781 747 745 0 ---- LANGNAU I.E.
06639 4700 794 1405 1404 2 ---- NAPF
-06640 4666 707 280 715 0 ---- MARSENS
+06640 4666 707 0 715 0 ---- MARSENS
06641 4757 788 345 344 0 ---- MOEHLIN
06642 4735 777 0 735 0 ---- LANGENBRUCK
06643 4726 779 423 422 0 ---- WYNAU
-06644 4724 823 453 452 0 ---- MOSEN
+06644 4724 823 453 453 0 ---- MOSEN
06645 4743 788 613 611 2 ---- RUENENBERG
06646 4756 823 327 326 0 ---- BEZNAU
06647 4754 823 335 334 0 ---- WUERENLINGEN
@@ -1459,17 +1469,17 @@
06693 4727 911 625 623 2 ---- EBNAT-KAPPEL
06695 4663 858 1438 1438 0 ---- ANDERMATT
06699 4642 610 0 1680 0 ---- LA DOLE
-06700 4625 613 412 420 0 ---- GENEVE-COINTRIN
+06700 4625 613 413 412 0 ---- GENEVE-COINTRIN
06701 4659 622 0 1015 0 ---- LE CHENIT
06702 4642 610 1670 1670 2 ---- LA DOLE
06703 4667 631 1045 1045 2 ---- LES CHARBONNIERES
06704 4652 634 685 684 2 ---- BIERE
06705 4640 623 459 455 0 ---- NYON / CHANGINS
06706 4648 644 0 425 0 ---- ST-PREX
-06707 4662 671 408 859 0 ---- VILLARS-TIERCELIN
+06707 4662 671 0 859 0 ---- VILLARS-TIERCELIN
06708 4657 686 829 827 2 ---- ORON
06709 4639 686 375 374 0 ---- BOUVERET
-06710 4653 662 615 610 0 ---- LAUSANNE
+06710 4653 662 0 610 0 ---- LAUSANNE
06711 4651 667 456 456 0 ---- PULLY
06712 4633 692 382 381 0 ---- AIGLE
06714 4633 720 2964 2964 3 ---- LES DIABLERETS
@@ -1493,9 +1503,9 @@
06732 4673 758 0 638 0 ---- AMSOLDINGEN
06733 4662 738 821 820 0 ---- BOLTIGEN
06734 4667 787 579 577 0 ---- INTERLAKEN
-06735 4649 756 1326 1320 2 ---- ADELBODEN
+06735 4649 756 1328 1327 2 ---- ADELBODEN
06736 4658 796 0 2061 0 ---- KLEINE SCHEIDEGG
-06738 4647 728 1083 1045 2 ---- GSTAAD
+06738 4647 728 0 1045 2 ---- GSTAAD
06739 4643 809 2894 2893 3 ---- EGGISHORN
06740 4677 843 3094 3040 3 ---- TITLIS
06742 4623 802 0 2008 0 ---- SIMPLONPASS
@@ -1515,7 +1525,7 @@
06758 4626 916 324 324 0 ---- GRONO
06759 4620 878 1662 1661 2 ---- CIMETTA
06760 4617 878 374 367 0 ---- LOCARNO / MONTI
-06762 4616 888 204 197 0 ---- MAGADINO / CADENAZZO
+06762 4616 893 204 203 0 ---- MAGADINO / CADENAZZO
06768 4604 883 0 1625 0 ---- MONTE LEMA
06770 4600 896 301 273 0 ---- LUGANO
06771 4584 893 352 353 0 ---- STABIO
@@ -1532,7 +1542,7 @@
06786 4687 952 558 556 0 ---- CHUR
06787 4661 943 989 987 0 ---- ANDEER
06788 4635 963 1089 1089 2 ---- VICOSOPRANO
-06789 4678 922 1421 698 0 ---- ILANZ
+06789 4678 922 0 698 0 ---- ILANZ
06790 4698 967 0 626 0 ---- SCHIERS
06791 4642 982 3302 3302 3 ---- PIZ CORVATSCH
06792 4653 988 1709 1709 2 ---- SAMEDAN
@@ -1593,14 +1603,14 @@
07029 4935 -77 73 73 0 ---- PORT EN BESSIN
07031 4936 17 143 146 0 ---- ST GATIEN DES B
07037 4938 118 152 156 0 ---- ROUEN-BOOS
-07038 4902 122 138 132 0 ---- EVREUX-HUEST
+07038 4902 122 138 141 0 ---- EVREUX-HUEST
07039 4952 -150 61 61 0 ---- VALOGNES
07040 4993 109 40 38 0 ---- DIEPPE
07041 4952 -150 61 61 0 ---- VALOGNES
07046 4953 9 95 95 0 ---- LE HAVRE OCTEVILLE
07053 4908 202 88 87 0 ---- CORMEILLES
07055 4945 213 111 109 0 ---- BEAUVAIS-TILLE
-07057 4925 252 88 88 0 ---- CREIL
+07057 4925 252 88 89 0 ---- CREIL
07059 4997 270 112 111 0 ---- MEAULTE
07061 4982 321 98 99 0 ---- SAINT-QUENTIN
07070 4930 405 91 95 0 ---- REIMS-COURCY
@@ -1613,32 +1623,32 @@
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 87 0 ---- LANVEOC
+07109 4828 -444 83 51 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 4854 -285 135 130 0 ---- TREMUSON-ST-BRIEUC
+07120 4853 -285 135 130 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
07134 4803 -75 100 101 0 ---- LAVAL-ETRONNIER
-07139 4845 11 144 146 0 ---- ALENCON
+07139 4845 11 145 145 0 ---- ALENCON
07140 4806 138 127 132 0 ---- CHATEAUDUN
07143 4846 150 156 155 0 ---- CHARTRES
07145 4877 200 174 167 0 T-T- TRAPPES
07146 4875 211 161 164 0 ---- TOUSSUS LE NOBLE
07147 4877 220 176 178 0 ---- VILLACOUBLAY
07149 4872 238 90 89 0 ---- ORLY
-07150 4897 243 49 66 0 ---- LE BOURGET
-07153 4861 268 92 92 0 ---- MELUN
+07150 4897 243 49 67 0 ---- LE BOURGET
+07153 4861 268 92 93 0 ---- MELUN
07154 4880 250 0 50 0 ---- PARIS ST-MAUR
07156 4882 234 78 75 0 ---- PARIS-MONTSOURIS
07157 4902 252 112 119 0 ---- ROISSY
07166 4878 416 167 179 0 ---- VATRY-AERO
07167 4846 430 0 156 0 ---- ARCIS RADAR
-07168 4832 401 118 118 0 ---- TROYES-BARBEREY
+07168 4832 401 118 119 0 ---- TROYES-BARBEREY
07169 4863 490 139 140 0 ---- SAINT-DIZIER
07171 4877 515 0 279 0 ---- BAR LE DUC
07173 4822 645 320 317 0 ---- EPINAL-DOGNEVILLE
@@ -1649,7 +1659,7 @@
07190 4855 764 151 154 0 ---- STRASBOURG-ENTZHEIM
07197 4793 741 209 207 0 ---- COLMAR MEYENHEIM
07200 4780 -437 19 3 0 ---- PTE DE PENMARCH
-07201 4797 -417 94 91 0 ---- QUIMPER
+07201 4797 -416 83 89 0 ---- QUIMPER
07203 4765 -350 45 41 0 ---- ILE DE GROIX
07205 4776 -344 44 49 0 ---- LORIENT LANN BIHOUE
07207 4729 -322 43 34 0 ---- BELLE ILE-LE TALUT
@@ -1659,13 +1669,13 @@
07222 4715 -161 26 27 0 ---- NANTES-BOUGUENAIS
07223 4734 -166 0 69 0 ---- TREILLIERES-RADAR
07230 4748 -61 48 50 0 ---- BEAUCOUZE
-07235 4795 19 52 59 0 ---- LE MANS
+07235 4794 19 52 59 0 ---- LE MANS
07240 4744 73 112 109 0 ---- TOURS
-07245 4768 121 125 121 0 ---- BLOIS
-07247 4732 169 86 84 0 ---- ROMORANTIN
-07249 4798 178 125 125 0 ---- ORLEANS
+07245 4768 121 130 121 0 ---- BLOIS
+07247 4732 169 86 88 0 ---- ROMORANTIN
+07249 4799 178 125 126 0 ---- ORLEANS
07255 4706 236 166 161 0 ---- BOURGES
-07257 4706 264 177 176 0 ---- AVORD
+07257 4705 264 177 177 0 ---- AVORD
07260 4700 311 177 183 0 ---- NEVERS-MARZY
07265 4780 355 212 207 0 ---- AUXERRE
07266 4782 355 153 152 0 ---- AUXERRE PERRIGNY
@@ -1684,7 +1694,7 @@
07306 4670 -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 20 23 0 ---- LA ROCHELLE AEROPORT ILE DE RE
+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
07336 4670 7 0 159 0 ---- CHERVES RADAR
@@ -1692,7 +1702,7 @@
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 242 0 ---- SAINT-YAN
+07379 4641 401 244 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
@@ -1702,18 +1712,18 @@
07434 4586 118 403 396 0 ---- LIMOGES-BELLEGARDE
07436 4510 137 0 351 0 ---- GREZES-RADAR
07438 4515 147 117 112 0 ---- BRIVE
-07460 4579 315 326 331 0 ---- CLERMONT-FERRAND
+07460 4579 315 326 333 0 ---- CLERMONT-FERRAND
07461 4529 371 0 1115 0 ---- SEMBADEL-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
07477 4593 438 0 720 0 ---- LES SAUVAGES
-07480 4573 494 198 200 0 ---- LYON-BRON
+07480 4573 494 198 201 0 ---- LYON-BRON
07481 4573 508 240 250 0 ---- LYON-ST EXUPERY
07482 4598 533 252 251 0 ---- AMBERIEU
07486 4536 531 386 397 0 ---- GRENOBLE-ST-GEOIRS
07487 4522 585 220 220 0 ---- GRENOBLE-LVD
-07490 4593 611 459 458 0 ---- ANNECY-MEYTHET
+07490 4593 611 459 464 0 ---- ANNECY-MEYTHET
07491 4564 588 235 237 0 ---- CHAMBERY-AIX-LES-BAINS
07497 4561 676 868 865 2 ---- BOURG ST-MAURICE
07499 4592 687 0 1050 2 ---- CHAMONIX
@@ -1729,7 +1739,7 @@
07552 4441 248 579 582 0 ---- SALLES LA SOURCE
07554 4453 345 934 932 0 ---- MENDE
07555 4450 353 1020 1019 2 ---- MENDE-BRENOUX
-07558 4412 302 716 714 0 ---- MILLAU
+07558 4412 302 713 712 0 ---- MILLAU
07560 4412 358 1564 1567 2 ---- MONT AIGOUAL
07563 4391 490 48 38 0 ---- AVIGNON
07569 4432 476 0 309 0 ---- BOLLENE-RADAR
@@ -1738,7 +1748,7 @@
07579 4414 486 55 60 0 ---- ORANGE
07586 4408 505 106 99 0 ---- CARPENTRAS
07587 4468 572 0 1069 0 ---- LUS-LA-CROIX-HAUTE
-07588 4406 599 461 461 0 ---- ST-AUBAN-SUR-DURANCE
+07588 4406 599 461 459 0 ---- ST-AUBAN-SUR-DURANCE
07591 4457 650 877 871 2 ---- EMBRUN
07600 4339 -169 43 21 0 ---- POINTE DE SOCOA
07602 4347 -153 71 75 0 ---- BIARRITZ-ANGLET
@@ -1748,7 +1758,7 @@
07610 4338 -42 183 188 0 ---- PAU-UZEIN
07621 4319 0 364 384 0 ---- TARBES-OSSUN
07622 4369 60 128 125 0 ---- AUCH
-07627 4301 111 411 417 0 ---- SAINT GIRONS
+07627 4301 111 415 419 0 ---- SAINT GIRONS
07628 4345 126 190 190 0 ---- MURET-LHERM
07629 4357 138 0 158 0 ---- TOULOUSE RADAR
07630 4362 138 150 152 0 ---- TOULOUSE BLAGNAC
@@ -1761,19 +1771,19 @@
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
-07647 4352 492 24 23 0 ---- ISTRES
-07648 4360 509 59 58 0 ---- SALON DE PROVENCE
+07647 4352 492 24 25 0 ---- ISTRES
+07648 4360 509 59 60 0 ---- SALON DE PROVENCE
07650 4344 522 32 21 0 ---- MARIGNANE
07658 4381 450 0 71 0 ---- NIMES-RADAR
07660 4310 593 25 24 0 ---- TOULON
-07661 4308 594 134 118 0 ---- CAP CEPET
+07661 4308 594 134 115 0 ---- CAP CEPET
07666 4292 306 40 42 0 ---- LEUCATE
-07667 4309 615 4 2 0 ---- HYERES
+07667 4309 615 4 4 0 ---- HYERES
07670 4300 623 147 143 0 ---- PORQUEROLLES
07671 4322 637 0 641 0 ---- COLLOBRIERES-RADAR
07675 4338 639 82 81 0 ---- LE LUC
07680 4342 675 6 2 0 ---- SAINT-RAPHAEL
-07684 4356 695 4 3 0 ---- CANNES
+07684 4356 695 4 4 0 ---- CANNES
07690 4365 721 28 4 0 ---- NICE
07695 4368 733 144 138 0 ---- CAP FERRAT
07745 4292 286 0 702 0 ---- OPOUL-RADAR
@@ -1781,7 +1791,7 @@
07749 4252 314 87 82 0 ---- CAP BEAR
07753 4263 892 145 142 0 ---- ILE ROUSSE
07754 4253 878 58 64 0 ---- CALVI
-07761 4192 878 9 5 0 T-T- AJACCIO
+07761 4192 878 9 6 0 T-T- AJACCIO
07765 4192 940 17 9 0 ---- SOLENZARA
07770 4137 918 116 107 0 ---- CAP PERTUSATO
07774 4213 950 0 50 0 ---- ALERIA RADAR
@@ -1811,7 +1821,7 @@
08048 4233 -786 147 143 0 ---- ORENSE
08053 4256 -660 550 534 0 ---- PONFERRADA
08055 4259 -565 914 916 9 ---- LEON/VIRGEN DEL CAMINO
-08072 4200 -459 860 874 9 ---- PALENCIA-AUTILLA PINO
+08072 4200 -459 0 874 9 ---- PALENCIA-AUTILLA PINO
08075 4236 -362 892 891 9 ---- BURGOS/VILLAFRIA
08080 4287 -273 510 513 0 ---- VITORIA
08081 4340 -284 0 576 0 ---- BAQUIO
@@ -1942,6 +1952,7 @@
08570 3983 -748 384 386 0 ---- CASTELO BRANCO
08571 3928 -742 590 597 0 ---- PORTALEGRE
08575 4180 -673 692 691 0 ---- BRAGANCA
+08578 3872 -936 100 99 0 ---- LPCS (CASCAIS AERODROME)
08579 3877 -913 105 104 0 T-T- LISBOA/GAGO COUTINHO
08583 1682 -2505 18 20 0 ---- MINDELO
08589 1494 -2348 95 95 0 ---- PRAIA
@@ -1984,16 +1995,16 @@
10031 5478 938 43 41 0 ---- FLENSBURG-SCHAEFERHAUS
10033 5483 951 33 27 0 ---- GLUECKSBURG-MEIERWIK
10034 5463 935 19 20 0 ---- EGGEBEK
-10035 5453 955 48 43 0 ---- SCHLESWIG
+10035 5453 955 0 43 0 ---- SCHLESWIG
10035 5453 955 48 47 0 T-T- SCHLESWIG
10037 5446 952 26 21 0 ---- SCHLESWIG-JAGEL
10038 5431 953 18 10 0 ---- HOHN
10042 5464 1002 3 2 0 ---- SCHOENHAGEN (OSTSEEBAD)
-10043 5460 1115 2 8 0 ---- FEHMARNBELT
+10043 5460 1115 2 0 0 ---- FEHMARNBELT
10044 5450 1027 26 5 0 ---- LEUCHTTURM KIEL
-10046 5438 1014 28 27 0 ---- KIEL-HOLTENAU
+10046 5438 1014 28 0 0 ---- KIEL-HOLTENAU
10055 5453 1106 9 3 0 ---- FEHMARN
-10067 5450 1123 12 5 0 ---- MARIENLEUCHTE
+10067 5449 1124 11 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
@@ -2005,7 +2016,7 @@
10125 5350 805 0 5 0 ---- WILHELMSHAVEN-MARIENSIEL
10126 5355 767 12 8 0 ---- WITTMUNDHAVEN
10127 5353 817 10 6 0 ---- WILHELMSHAVEN (FLUGPLATZ)
-10129 5353 858 11 7 0 ---- BREMERHAVEN
+10129 5353 858 6 7 0 ---- BREMERHAVEN
10130 5407 901 5 3 0 ---- ELPERSBUETTEL
10131 5387 871 12 5 0 ---- CUXHAVEN
10132 5400 1005 92 0 0 ---- BOOSTEDT (RADAR)
@@ -2044,7 +2055,7 @@
10249 5339 1069 46 45 0 ---- BOIZENBURG
10253 5297 1114 18 17 0 ---- LUECHOW
10261 5289 1173 23 21 0 ---- SEEHAUSEN
-10264 5332 1194 87 81 0 ---- MARNITZ
+10264 5332 1193 87 81 0 ---- MARNITZ
10267 5294 1241 40 40 0 ---- KYRITZ
10268 5352 1267 65 73 0 ---- WAREN (MUERITZ)
10270 5291 1281 45 38 0 ---- NEURUPPIN
@@ -2054,16 +2065,16 @@
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 19 0 -TT- MEPPEN
-10305 5252 731 26 22 0 ---- LINGEN
+10304 5273 733 41 0 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
10312 5232 817 104 103 0 ---- BELM
10314 5233 753 52 39 0 ---- HOPSTEN
10315 5214 770 53 48 0 ---- MUENSTER/OSNABRUECK
-10317 5225 805 95 95 0 ---- OSNABRUECK
+10317 5225 805 95 0 0 ---- OSNABRUECK
10320 5193 830 72 72 0 ---- GUETERSLOH
-10321 5259 835 43 39 0 ---- DIEPHOLZ
+10321 5259 834 43 39 0 ---- DIEPHOLZ
10325 5210 875 137 135 0 ---- BAD SALZUFLEN
10334 5246 943 69 57 0 ---- WUNSTORF
10335 5228 909 77 68 0 ---- BUECKEBURG
@@ -2071,7 +2082,7 @@
10339 5246 969 0 51 0 ---- HANNOVER (RADAR)
10343 5260 1002 53 39 0 ---- CELLE
10346 5232 1055 100 84 0 ---- BRAUNSCHWEIG-WAGGUM
-10348 5229 1045 88 81 0 ---- BRAUNSCHWEIG
+10348 5229 1045 82 81 0 ---- BRAUNSCHWEIG
10356 5216 1118 163 162 0 ---- UMMENDORF
10359 5251 1139 48 47 0 ---- GARDELEGEN
10361 5210 1158 85 76 0 ---- MAGDEBURG
@@ -2120,25 +2131,25 @@
10444 5150 994 168 167 0 ---- GOETTINGEN
10449 5139 1031 353 356 0 ---- LEINEFELDE
10452 5172 1060 609 607 0 ---- BRAUNLAGE
-10453 5180 1062 1153 1142 2 ---- BROCKEN
+10453 5180 1062 1153 1134 2 ---- BROCKEN
10454 5185 1077 240 234 0 ---- WERNIGERODE
10458 5165 1114 405 404 0 ---- HARZGERODE
-10460 5138 1129 166 164 0 ---- ARTERN
+10460 5137 1129 166 164 0 ---- ARTERN
10466 5151 1195 96 93 0 ---- HALLE-KROELLWITZ
10468 5155 1207 106 106 0 T-T- OPPIN
10469 5144 1224 136 131 0 ---- LEIPZIG/HALLE
10471 5132 1245 138 138 0 ---- LEIPZIG-HOLZHAUSEN
-10474 5189 1265 106 105 0 ---- WITTENBERG
+10474 5189 1264 106 105 0 ---- WITTENBERG
10476 5177 1317 102 81 0 ---- HOLZDORF (FLUGPLATZ)
10480 5130 1309 150 150 0 ---- OSCHATZ
-10487 5112 1376 0 23 0 ---- DRESDEN (RADAR)
+10487 5112 1376 0 230 0 ---- DRESDEN (RADAR)
10488 5113 1376 232 227 0 ---- DRESDEN-KLOTZSCHE
10490 5164 1357 98 97 0 ---- DOBERLUG-KIRCHHAIN
10495 5145 1425 116 116 0 ---- HOYERSWERDA
10496 5178 1432 70 69 0 ---- COTTBUS
10499 5116 1495 240 238 0 ---- GOERLITZ
-10500 5096 604 76 90 0 ---- GEILENKIRCHEN
-10501 5078 608 202 202 0 ---- AACHEN
+10500 5096 604 76 0 0 ---- GEILENKIRCHEN
+10501 5078 608 202 0 0 ---- AACHEN
10502 5083 666 134 111 0 ---- NOERVENICH (FLUGPLATZ)
10504 5065 628 0 572 0 ---- EIFEL
10505 5080 602 233 231 0 ---- AACHEN-ORSBACH
@@ -2162,7 +2173,8 @@
10540 5100 1036 314 312 0 ---- EISENACH
10542 5085 974 271 272 0 ---- BAD HERSFELD
10544 5050 994 925 921 2 ---- WASSERKUPPE
-10548 5056 1038 453 450 0 T-T- MEININGEN
+10548 5056 1038 453 450 0 ---- MEININGEN
+10548 5056 1038 0 450 0 T-T- MEININGEN
10552 5065 1077 939 937 2 ---- SCHMUECKE
10554 5098 1096 322 316 0 ---- ERFURT-WEIMAR
10555 5098 1132 268 264 0 ---- WEIMAR
@@ -2194,9 +2206,9 @@
10630 5002 855 144 0 0 ---- FRANKFURT-WALLDORF (RADAR)
10633 5008 827 143 140 0 ---- WIESBADEN
10635 5022 844 826 826 2 ---- KLEINER FELDBERG/TAUNUS
-10637 5005 860 113 112 0 ---- FRANKFURT/MAIN
+10637 5003 852 104 100 0 ---- FRANKFURT/MAIN
10639 5002 867 135 125 0 ---- LANGEN
-10640 5010 873 112 100 0 ---- OFFENBACH/M (LABOR)
+10640 5010 873 0 100 0 ---- OFFENBACH/M (LABOR)
10641 5009 878 121 119 0 ---- OFFENBACH-WETTERPARK
10642 5017 897 114 112 0 ---- HANAU
10644 4993 907 0 125 0 ---- ASCHAFFENBURG/GROSSOSTHEIM
@@ -2237,10 +2249,11 @@
10752 4947 1038 347 325 0 ---- ILLESHEIM
10755 4932 1063 476 467 0 ---- ANSBACH/KATTERBACH
10756 4916 1037 477 475 0 ---- FEUCHTWANGEN-HEILBRONN
-10761 4902 1096 424 422 0 ---- WEISSENBURG
+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 TTTP KUEMMERSBRUCK
+10771 4943 1190 418 417 0 ---- KUEMMERSBRUCK
+10771 4943 1190 0 417 0 TTTT KUEMMERSBRUCK
10775 4922 1183 442 442 0 ---- HOHENFELS
10776 4904 1210 370 365 0 ---- REGENSBURG
10777 4895 1143 538 536 0 ---- GELBELSEE
@@ -2255,7 +2268,7 @@
10818 4811 875 975 973 2 ---- KLIPPENECK
10827 4819 899 933 920 2 ---- MESSSTETTEN
10828 4810 925 646 645 0 ---- SIGMARINGEN
-10832 4859 977 0 731 0 ---- TUERKHEIM (RADAR)
+10832 4859 977 0 736 0 ---- TUERKHEIM (RADAR)
10836 4867 986 739 734 0 ---- STOETTEN
10837 4822 991 550 539 0 ---- LAUPHEIM
10838 4838 994 571 567 0 ---- ULM
@@ -2275,8 +2288,8 @@
10871 4834 1161 0 489 0 ---- FUERHOLZEN (RADAR)
10872 4866 1254 351 350 0 ---- GOTTFRIEDING
10873 4817 1210 630 0 0 ---- ISEN (RADAR)
-10875 4828 1250 407 405 0 ---- MUEHLDORF
-10895 4855 1335 477 476 0 ---- FURSTENZELL
+10875 4828 1250 407 406 0 ---- MUEHLDORF
+10895 4855 1335 480 476 0 ---- FUERSTENZELL
10906 4791 791 1208 1205 1 ---- SCHAUINSLAND/FREIBURG
10907 4787 801 0 1484 0 ---- FELDBERG (RADAR)
10908 4787 800 1496 1490 2 ---- FELDBERG/SCHWARZWALD
@@ -2369,7 +2382,7 @@
11141 4741 1322 548 550 0 ---- BISCHOFSHOFEN
11142 4732 1318 647 634 0 ---- ST. JOHANN/PONGAU
11143 4730 1278 754 753 0 ---- ZELL AM SEE-FLUGFELD
-11144 4733 1280 767 770 0 ---- ZELL AM SEE
+11144 4733 1280 0 770 0 ---- ZELL AM SEE
11146 4705 1296 3114 3109 3 ---- SONNBLICK
11147 4739 1346 860 858 0 ---- RADSTADT
11148 4709 1362 1052 1052 0 ---- ST. MICHAEL/LUNGAU
@@ -2423,7 +2436,7 @@
11215 4681 1357 719 717 0 ---- MILLSTATT
11219 4712 1440 0 1125 0 ---- NEUMARKTER SATTEL
11220 4707 1442 871 869 0 ---- NEUMARKT
-11221 4707 1509 463 462 0 ---- KOEFLACH
+11221 4707 1509 463 0 0 ---- KOEFLACH
11225 4685 1419 712 704 0 ---- WEITENSFELD
11227 4672 1410 546 546 0 ---- FELDKIRCHEN
11228 4696 1441 641 640 0 ---- FRIESACH
@@ -2601,7 +2614,7 @@
12200 5392 1424 5 5 0 ---- SWINOUJSCIE
12205 5340 1462 7 1 0 ---- SZCZECIN
12206 5359 1489 38 46 0 ---- GOLENIOW
-12210 5377 1541 56 51 0 ---- RESKO
+12210 5376 1539 53 52 0 ---- RESKO-SMOLSKO
12215 5371 1675 142 139 0 ---- SZCZECINEK
12230 5313 1675 73 72 0 ---- PILA
12235 5372 1753 172 165 0 ---- CHOJNICE
@@ -2627,7 +2640,7 @@
12415 5119 1621 124 122 0 ---- LEGNICA
12418 5184 1653 93 91 0 ---- LESZNO
12424 5110 1689 121 121 0 ---- WROCLAW II
-12425 5111 1688 122 120 0 T-T- WROCLAW I
+12425 5111 1688 0 120 0 T-T- WROCLAW I
12435 5178 1807 138 137 0 ---- KALISZ
12455 5121 1855 201 199 0 ---- WIELUN
12465 5172 1939 190 180 0 ---- LODZ
@@ -2662,8 +2675,8 @@
12766 4848 2053 0 305 0 ---- JOSVAFO
12772 4809 2073 163 161 0 ---- MISKOLC
12786 4840 2217 104 103 0 ---- ZAHONY
-12805 4768 1660 239 233 0 ---- SOPRON
-12812 4727 1663 221 220 0 ---- SZOMBATHELY
+12805 4768 1660 119 0 0 ---- SOPRON
+12812 4727 1663 202 0 0 ---- SZOMBATHELY
12815 4788 1728 122 121 0 ---- MOSONMAGYAROVAR
12822 4772 1768 117 116 0 ---- GYOR
12825 4720 1750 146 145 0 ---- PAPA
@@ -2677,11 +2690,11 @@
12851 4787 2002 1015 1010 9 ---- KEKESTETO
12860 4712 2023 94 89 0 ---- SZOLNOK
12866 4765 2063 92 91 0 ---- POROSZLO
-12870 4790 2038 218 220 0 ---- EGER
+12870 4790 2038 226 0 0 ---- EGER
12882 4748 2160 109 108 0 ---- DEBRECEN
12892 4797 2188 142 141 0 ---- NYIREGYHAZA/NAPKOR
12910 4692 1632 313 312 0 ---- SZENTGOTTHARD/FARKASFA
-12915 4687 1680 180 179 0 ---- ZALAEGERSZEG/ANDRASHIDA
+12915 4687 1680 241 0 0 ---- ZALAEGERSZEG/ANDRASHIDA
12922 4668 1717 125 124 0 ---- SARMELLEK
12925 4645 1697 141 139 0 ---- NAGYKANIZSA
12932 4640 1792 156 156 0 ---- TASZAR
@@ -2898,7 +2911,7 @@
15143 4658 2379 428 427 1 ---- TURDA
15145 4653 2452 311 310 1 ---- TARGU-MURES
15148 4665 2530 1284 1282 2 ---- BUCIN
-15150 4656 2690 174 173 1 ---- BACAU
+15150 4656 2690 175 174 1 ---- BACAU
15154 4665 2771 117 116 1 ---- VASLUI
15160 4653 2247 279 278 1 ---- STEI
15162 4636 2304 592 591 9 ---- CAMPENI
@@ -3288,49 +3301,49 @@
16599 3585 1450 0 78 0 ---- GUDJA
16606 4107 2357 35 33 0 ---- SERRAI
16613 4078 2140 662 650 0 ---- FLORINA
-16614 4045 2128 0 604 0 ---- KASTORIA (AIRPORT)
-16622 4052 2297 4 8 0 -PTP THESSALONIKI (AIRPORT)
+16614 4045 2127 659 661 0 ---- KASTORIA (AIRPORT)
+16622 4053 2297 8 7 0 T--- THESSALONIKI (AIRPORT)
16624 4098 2460 5 5 0 ---- CHRYSOPOULI (AIRPORT)
-16627 4085 2592 3 7 0 ---- ALEXANDROUPOLI (AIRPORT)
+16627 4086 2595 5 7 0 ---- ALEXANDROUPOLI (AIRPORT)
16632 4029 2178 627 634 0 ---- KOZANI (AIRPORT)
-16641 3961 1992 4 2 0 ---- KERKYRA (AIRPORT)
+16641 3961 1991 2 2 0 ---- KERKYRA (AIRPORT)
16642 3970 2082 483 480 0 ---- IOANNINA (AIRPORT)
-16643 3861 2077 4 4 0 ---- AKTION (AIRPORT)
+16643 3892 2077 4 3 0 ---- AKTION (AIRPORT)
16645 3954 2177 116 112 0 ---- TRIKALA
-16648 3963 2242 74 73 0 ---- LARISSA (AIRPORT)
-16650 3992 2523 4 5 0 ---- LIMNOS (AIRPORT)
+16648 3965 2246 74 71 0 ---- LARISSA (AIRPORT)
+16650 3992 2523 3 4 0 ---- LIMNOS (AIRPORT)
16654 3917 2100 11 10 0 ---- ARTA (HALKIADES)
16665 3922 2280 15 25 0 ---- ANCHIALOS (AIRPORT)
-16667 3907 2660 5 3 0 ---- MYTILINI (AIRPORT)
+16667 3904 2660 5 18 0 ---- MYTILINI (AIRPORT)
16672 3860 2135 24 24 0 ---- AGRINION (AIRPORT)
16674 3838 2310 0 110 0 ---- ALIARTOS
-16675 3890 2240 144 144 0 ---- LAMIA
-16682 3792 2128 14 10 0 ---- ANDRAVIDA (AIRPORT)
-16684 3897 2448 28 27 0 ---- SKYROS (AIRPORT)
+16675 3888 2244 14 12 0 ---- LAMIA
+16682 3792 2129 15 17 0 ---- ANDRAVIDA (AIRPORT)
+16684 3896 2449 23 13 0 ---- SKYROS (AIRPORT)
16685 3811 2050 22 19 0 ---- KEFALHNIA (AIRPORT)
16687 3815 2142 12 11 0 ---- ARAXOS (AIRPORT)
16689 3825 2173 3 1 0 ---- PATRAI
16699 3832 2353 140 148 0 ---- TANAGRA (AIRPORT)
16701 3804 2367 138 136 0 ---- ATHINAI (FILADELFIA)
16706 3833 2613 4 5 0 ---- CHIOS (AIRPORT)
-16710 3753 2240 652 644 0 ---- TRIPOLIS (AIRPORT)
+16710 3752 2240 651 644 0 ---- TRIPOLIS (AIRPORT)
16715 3810 2378 235 239 0 ---- TATOI
-16716 3772 2373 10 28 0 TPTP ATHINAI AP HELLINIKON
+16716 3789 2374 45 43 0 --T- ATHINAI HELLINIKON
16717 3797 2357 2 2 0 ---- PIRAEUS
16718 3807 2355 31 44 0 ---- ELEFSIS (AIRPORT)
16719 3778 2090 4 0 0 ---- ZAKINTHOS
-16723 3770 2692 7 2 0 ---- SAMOS
+16723 3769 2692 11 6 0 ---- SAMOS
16726 3707 2202 8 6 0 ---- KALAMATA (AIRPORT)
-16732 3710 2538 9 9 0 ---- NAXOS
-16734 3683 2170 34 33 0 ---- METHONI
-16738 3672 2445 183 182 0 ---- MILOS
-16741 3792 2392 72 0 0 ---- EL VENIZELOS
+16732 3710 2537 10 9 0 ---- NAXOS
+16734 3683 2170 53 52 0 ---- METHONI
+16738 3674 2443 168 167 0 ---- MILOS
+16741 3792 2393 73 94 0 ---- EL VENIZELOS
16742 3678 2707 0 129 0 ---- KOS (AIRPORT)
-16743 3628 2302 167 167 0 ---- KYTHIRA
+16743 3615 2299 168 166 0 ---- KYTHIRA
16744 3642 2543 36 40 0 ---- THIRA (AIRPORT)
-16746 3547 2412 151 146 0 ---- SOUDA (AIRPORT)
-16749 3640 2808 11 4 0 ---- RHODES (AIRPORT)
-16754 3533 2518 39 37 0 TP-P HERAKLION (AIRPORT)
+16746 3553 2415 149 149 0 ---- SOUDA (AIRPORT)
+16749 3640 2809 11 6 0 ---- RHODES (AIRPORT)
+16754 3534 2518 40 35 0 T--- HERAKLEION (AIRPORT)
16756 3500 2573 0 13 0 ---- IERAPETRA
16757 3520 2610 28 25 0 ---- SITIA
16758 3535 2452 7 7 0 ---- RETHYMNON
@@ -3358,7 +3371,7 @@
17059 4125 2903 30 30 0 ---- KUMKOY
17060 4097 2882 33 48 0 ---- ISTANBUL/ATATURK
17061 4113 2907 58 30 0 ---- SARIYER
-17062 4090 2915 18 33 0 ---- ISTANBUL/GOZTEPE
+17062 4090 2915 18 0 0 ---- ISTANBUL/GOZTEPE
17063 4088 2930 99 95 0 ---- SABIHA GOKCEN
17064 4090 2915 18 18 0 T-T- ISTANBUL BOLGE (KARTAL)
17067 4067 2983 18 18 0 ---- GOLCUK/DUMLUPINAR
@@ -3404,10 +3417,11 @@
17160 3915 3417 1007 1000 2 ---- KIRSEHIR
17162 3918 3607 1171 1171 2 ---- GEMEREK
17165 3911 3954 981 981 0 ---- TUNCELI
-17170 3847 4335 1662 1671 2 ---- VAN/FERITMELEN
+17170 3847 4335 0 1671 2 ---- VAN/FERITMELEN
17175 3929 2670 4 4 0 ---- AYVALIK
17180 3907 2688 3 3 0 ---- DIKILI
17184 3892 2785 93 93 0 ---- AKHISAR
+17185 3867 2947 874 0 0 ---- USAK MEYDAN
17186 3861 2743 71 71 0 ---- MANISA
17188 3868 2940 919 919 0 ---- USAK
17189 3872 3060 1001 1012 2 ---- AFYONKARAHISAR/MEYDAN
@@ -3478,19 +3492,20 @@
17601 3459 3265 26 23 0 ---- AKROTIRI
17607 3514 3340 162 162 0 -TT- ATHALASSA
17609 3486 3361 10 10 0 ---- LARNACA AIRPORT
-20046 8063 5806 25 21 0 T-T- POLARGMO IM. E.T. KRENKELJA
+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
+20094 7928 10162 26 24 0 T--- MYS BARANOVA
20107 7806 1422 76 73 0 ---- BARENTSBURG
20274 7750 8220 23 0 0 ---- OSTROV UEDINENIJA
-20292 7770 10429 15 12 0 T-T- GMO IM.E.K. FEDOROVA
+20292 7770 10429 15 12 0 T--- GMO IM.E.K. FEDOROVA
20353 7695 6855 9 8 0 ---- MYS ZELANIYA
20471 7595 8295 12 11 0 ---- IZVESTIJ TSIK
20476 7540 8891 11 10 0 ---- MYS STERLEGOVA
20667 7333 7006 6 4 0 ---- IM. M.V. POPOVA
-20674 7351 8041 46 42 0 T-T- OSTROV DIKSON
+20674 7351 8041 46 42 0 T--- OSTROV DIKSON
20744 7237 5272 15 18 0 ---- MALYE KARMAKULY
-20744 7237 5270 18 0 0 T-T- MALYE KARMAKULY
+20744 7237 5270 18 0 0 T--- MALYE KARMAKULY
20871 7188 8271 5 4 0 ---- SOPOCHNAYA KARGA
20891 7198 10247 33 31 0 ---- HATANGA
20891 7200 10257 26 25 0 T-T- HATANGA
@@ -3499,7 +3514,7 @@
20967 7017 7251 18 18 0 ---- SEYAHA
20978 7008 8317 29 20 0 ---- KARAUL
20982 7097 9450 40 37 0 ---- VOLOCHANKA
-21432 7600 13787 15 12 0 T-T- OSTROV KOTEL'NYJ
+21432 7600 13787 15 12 0 --T- OSTROV KOTEL'NYJ
21504 7467 11293 57 0 0 T-T- OSTROV PREOBRAZENIJA
21535 7467 13890 15 16 0 ---- SANNIKOVA
21608 7322 11350 13 11 0 ---- ANABAR
@@ -3510,12 +3525,12 @@
21802 7197 11408 17 16 0 ---- SASKYLAH
21813 7192 12357 27 28 0 ---- TYUMYATI
21821 7200 12912 16 17 0 ---- BYKOV (MYS)
-21824 7158 12891 7 6 0 T-T- TIKSI
+21824 7158 12891 7 6 0 --T- TIKSI
21908 7013 11397 62 61 0 ---- DZALINDA
21921 7068 12740 33 30 0 ---- KJUSJUR
21931 7077 13622 24 23 0 ---- JUBILEJNAJA
21937 7003 13566 92 88 0 ---- KUJGA
-21946 7062 14788 61 44 0 T-T- CHOKURDAH
+21946 7062 14788 61 44 0 --T- CHOKURDAH
21965 7063 16247 41 0 0 ---- OSTROV CHETYREHSTOLBOVOY
21978 7008 17093 6 3 0 ---- VAL' KARKAJ
21982 7098 -17865 5 2 0 ---- OSTROV VRANGELJA
@@ -3528,7 +3543,7 @@
22105 6834 3072 90 98 0 ---- NIVANKYL'
22106 6861 3180 63 61 0 ---- PADUN
22113 6895 3304 51 57 0 ---- MURMANSK
-22113 6898 3311 121 121 0 T-T- MURMANSK
+22113 6898 3311 121 121 0 T--- MURMANSK
22119 6834 3329 143 0 0 ---- PULOZERO
22127 6800 3503 162 159 0 ---- LOVOZERO
22133 6881 3733 64 69 0 ---- OSTROV HARLOV
@@ -3537,11 +3552,11 @@
22193 6878 4930 7 9 0 ---- BUGRINO
22212 6794 3292 132 140 0 ---- MONCHEGORSK
22213 6755 3336 134 132 0 ---- APATITY
-22217 6717 3235 25 26 0 T-T- KANDALAKSHA
+22217 6717 3235 25 26 0 T--- KANDALAKSHA
22235 6734 3704 157 155 0 ---- KRASNOSCEL'E
22249 6713 3967 151 149 0 ---- KANEVKA
22269 6715 4390 13 0 0 ---- MYS KONUSIN
-22271 6788 4417 8 5 0 T-T- SHOJNA
+22271 6788 4417 8 5 0 T--- SHOJNA
22282 6781 4665 6 6 0 ---- MYS MIKULKIN
22292 6769 4868 4 3 0 ---- INDIGA
22305 6625 3112 119 122 0 ---- ZASHEEK
@@ -3568,11 +3583,11 @@
22518 6408 3278 159 0 0 ---- RUGOZERO
22520 6498 3479 8 7 0 ---- KEM' - PORT
22522 6498 3479 8 0 0 ---- KEM'-PORT
-22522 6495 3465 8 8 0 T-T- KEM'
+22522 6495 3465 8 8 0 T--- KEM'
22525 6456 3492 9 10 0 ---- RAZNAVOLOK
22529 6423 3588 5 4 0 ---- KOLEZMA
22541 6483 3840 5 2 0 ---- UNSKIJ MAJAK
-22543 6462 4051 6 4 0 T-T- ARHANGEL'SK
+22543 6462 4051 6 4 0 T--- ARHANGEL'SK
22546 6456 3977 8 3 0 ---- SEVERODVINSK
22550 6450 4072 8 8 0 ---- ARHANGEL'SK
22550 6455 4058 4 0 0 T-T- ARHANGEL'SK
@@ -3605,12 +3620,12 @@
22802 6172 3072 19 17 0 ---- SORTAVALA
22805 6137 3088 16 19 0 ---- VALAAM
22816 6168 3361 133 0 0 ---- PRIAZA
-22820 6182 3427 111 110 0 T-T- PETROZAVODSK
+22820 6182 3427 111 110 0 T--- PETROZAVODSK
22829 6102 3547 41 40 0 ---- VOSNESEN'E
22831 6180 3658 48 44 0 ---- PUDOZ
22833 6178 3775 116 0 0 ---- KOLODOZERO
22837 6102 3646 56 55 0 ---- VYTEGRA
-22845 6151 3893 126 124 0 T-T- KARGOPOL'
+22845 6151 3893 126 124 0 T--- KARGOPOL'
22854 6168 4020 233 232 0 ---- NJANDOMA
22867 6107 4207 91 89 0 ---- VEL'SK
22869 6113 4335 117 119 0 ---- SHANGALY
@@ -3638,12 +3653,12 @@
23058 6909 7686 3 2 0 ---- ANTIPAJUTA
23073 6940 8806 277 0 1 ---- NORILSK
23074 6940 8617 19 14 0 ---- DUDINKA
-23078 6934 8826 65 60 0 T-T- NORIL'SK
+23078 6934 8826 65 60 0 T--- NORIL'SK
23112 6880 5799 7 5 0 ---- VARANDEJ
23114 6854 5550 7 5 0 ---- MYS KONSTANTINOVSKIJ
23174 6867 8625 41 39 0 ---- POTAPOVO
23179 6809 8777 94 90 0 ---- SNEZHNOGORSK
-23205 6762 5302 12 5 0 T-T- NAR'JAN-MAR
+23205 6762 5302 12 5 0 T--- NAR'JAN-MAR
23207 6703 5114 18 17 0 ---- KOTKINO
23219 6704 5941 84 83 0 ---- HOSEDA-HARD
23226 6748 6397 172 0 0 ---- VORKUTA
@@ -3652,7 +3667,7 @@
23274 6747 8657 28 25 0 ---- IGARKA
23305 6626 5256 22 22 0 ---- OKUNEV NOS
23324 6647 6075 62 61 0 ---- PETRUN'
-23330 6653 6667 16 15 0 T-T- SALEHARD
+23330 6653 6667 16 15 0 T--- SALEHARD
23331 6690 6567 890 0 0 ---- RA-IZ
23339 6603 6868 36 27 0 ---- POLUJ
23345 6663 7293 7 5 0 ---- NYDA
@@ -3661,7 +3676,7 @@
23383 6692 9349 278 277 0 ---- AGATA
23405 6543 5227 79 70 0 ---- UST'-CIL'MA
23412 6598 5691 79 77 0 ---- UST'-USA
-23415 6512 5710 58 56 0 T-T- PECHORA
+23415 6512 5710 58 56 0 T--- PECHORA
23418 6513 5714 59 53 0 ---- PECHORA
23418 6512 5710 58 56 0 T-T- PECHORA
23426 6548 6472 19 18 0 ---- MUZI
@@ -3672,7 +3687,7 @@
23463 6598 8433 40 41 0 ---- YANOV-STAN
23465 6570 8245 25 23 0 ---- KRASNOSEL' KUPSK
23471 6092 7659 55 50 0 ---- NIZHNEVARTOVSK
-23472 6579 8799 38 38 0 T-T- TURUHANSK
+23472 6579 8799 38 38 0 T--- TURUHANSK
23499 6494 9887 203 202 0 ---- TEMBENCHI
23503 6503 5397 52 51 0 ---- IZHMA
23518 6427 5762 75 73 0 ---- UST'-SUGOR
@@ -3700,7 +3715,7 @@
23774 6248 8628 60 58 0 ---- KELLOG
23776 6246 8901 57 57 0 ---- BAHTA
23788 6231 9212 62 60 0 ---- KUZ'MOVKA
-23802 6168 5078 117 116 0 T-T- SYKTYVKAR
+23802 6168 5078 117 116 0 T--- SYKTYVKAR
23803 6168 5368 143 140 0 ---- UST'-KULOM
23804 6168 5078 119 117 0 ---- SYKTYVKAR
23804 6167 5077 116 0 0 T-T- SYKTYVKAR
@@ -3711,18 +3726,18 @@
23849 6125 7350 56 55 0 ---- SURGUT
23862 6154 8242 71 69 0 ---- KORLIKI
23867 6110 8025 57 55 0 ---- LAR' YAK
-23884 6158 9003 58 62 0 T-T- BOR
-23891 6167 9637 262 262 0 ---- BAJKIT
+23884 6158 9003 58 62 0 T--- BOR
+23891 6167 9637 0 262 0 ---- BAJKIT
23909 6028 5435 198 196 0 ---- GAJNY
23914 6040 5652 207 208 0 ---- CHERDYN'
-23921 6068 6045 94 93 0 T-T- IVDEL'
+23921 6068 6045 94 93 0 T--- IVDEL'
23929 6032 6422 53 51 0 ---- SAIM
-23933 6103 6912 44 44 0 T-T- HANTY-MANSIJSK
+23933 6103 6912 44 44 0 T--- HANTY-MANSIJSK
23939 6033 6897 32 31 0 ---- ALTAJ
23946 6050 7402 48 47 0 ---- UGUT
23947 6007 7148 55 53 0 ---- SALYM
-23955 6043 7787 49 47 0 T-T- ALEKSANDROVSKOE
-23966 6035 8408 99 0 0 ---- VANZIL'-KYNAK
+23955 6043 7787 49 47 0 T--- ALEKSANDROVSKOE
+23966 6035 8408 0 0 0 ---- VANZIL'-KYNAK
23973 6103 8961 49 45 0 ---- VOROGOVO
23975 6035 8836 86 85 0 ---- SYM
23982 6102 9343 122 121 0 ---- VEL' MO
@@ -3732,26 +3747,26 @@
24076 6933 13966 284 282 0 ---- DEPUTATSKIJ
24105 6847 10237 271 0 0 ---- ESSEJ
24125 6850 11243 220 217 0 ---- OLENEK
-24125 6850 11243 207 0 0 T-T- OLENEK
+24125 6850 11243 207 0 0 --T- OLENEK
24136 6862 11833 77 78 0 ---- SUHANA
24143 6873 12400 39 38 0 ---- DZARDZAN
24194 6855 14622 41 32 0 ---- BELAYA GORA
24219 6713 10853 236 236 0 ---- YAROL'IN
24261 6780 13038 491 490 0 ---- BATAGAJ-ALYTA
24263 6765 13468 214 214 0 ---- BATAGAJ
-24266 6756 13340 136 136 0 T-T- VERHOJANSK
+24266 6756 13340 136 136 0 --T- VERHOJANSK
24266 6756 13340 138 0 0 T-T- VERHOJANSK
24322 6673 11243 501 497 0 ---- POLYARNYJ
24329 6625 11428 236 233 0 ---- SHELAGONTSY
24338 6603 11740 304 304 0 ---- EJK
-24343 6677 12340 92 88 0 T-T- ZHIGANSK
+24343 6677 12340 92 88 0 --T- ZHIGANSK
24361 6677 13160 200 199 0 ---- EKYUCHCHYU
24371 6680 13668 274 274 0 ---- UST'-CHARKY
24382 6645 14322 196 195 0 ---- UST'-MOMA
24449 6530 12712 73 73 0 ---- BESTYAHSKAYA ZVEROFERMA
24462 6530 13000 777 777 0 ---- SEBYAN-KYUEL'
24477 6530 13580 675 675 0 ---- IEMA
-24507 6427 10022 191 188 0 T-T- TURA
+24507 6427 10022 191 188 0 T--- TURA
24525 6459 11252 251 244 0 ---- HABARDINO
24538 6423 11692 139 137 0 ---- CHUMPURUK
24557 6428 12645 85 84 0 ---- SOGO-HAYA
@@ -3759,7 +3774,7 @@
24588 6405 14188 590 589 0 ---- YURTY
24606 6359 10395 211 209 0 ---- KISLOKAN
24639 6328 11833 119 117 0 ---- NJURBA
-24641 6378 12162 111 111 0 T-T- VILJUJSK
+24641 6378 12162 111 111 0 --T- VILJUJSK
24643 6395 12483 77 76 0 ---- HATYRYK-HOMO
24644 6345 12032 115 114 0 ---- VERHNEVILYUJSK
24652 6397 12747 96 93 0 ---- SANGARY
@@ -3769,12 +3784,12 @@
24671 6395 13587 402 399 0 ---- TOMPO
24679 6322 13960 1288 1286 0 ---- VOSTOCHNAYA
24684 6333 14172 777 775 0 ---- AGAYAKAN
-24688 6325 14315 740 740 0 T-T- OJMJAKON
+24688 6325 14315 740 740 0 --T- OJMJAKON
24691 6383 14560 801 803 0 ---- DELYANKIR
24713 6288 10843 246 246 0 ---- NAKANNO
24724 6303 11248 422 418 0 ---- CHERNISHEVSKIJ
24725 6253 11123 260 259 0 ---- TUOJ-HAYA
-24726 6253 11387 357 351 0 T-T- MIRNVY
+24726 6253 11387 357 351 0 --T- MIRNVY
24737 6227 11615 139 140 0 ---- KRESTYAH
24738 6215 11765 138 131 0 ---- SUNTAR
24739 6228 11985 308 312 0 ---- CHAINGDA
@@ -3793,15 +3808,15 @@
24871 6187 13550 141 140 0 ---- OHOTSKIJ PEREVOZ
24894 6185 14766 839 849 0 ---- KOLYMSKAYA
24898 6112 14963 575 574 0 ---- UST'-OMCHUG
-24908 6034 10229 260 259 0 T-T- VANAVARA
+24908 6034 10229 260 259 0 T--- VANAVARA
24918 6005 10808 295 293 0 ---- PREOBRAZHENKA
24923 6072 11488 241 241 0 ---- LENSK
24928 6027 11173 299 301 0 ---- KOMAKA
24933 6095 11930 249 248 0 ---- KILEER
24944 6040 12042 230 225 0 ---- OLEKMINSK
-24944 6037 12042 134 0 0 T-T- OLEKMINSK
+24944 6037 12042 134 0 0 --T- OLEKMINSK
24951 6082 12532 131 123 0 ---- ISIT'
-24959 6202 12972 101 98 0 T-T- JAKUTSK
+24959 6202 12972 101 98 0 --T- JAKUTSK
24962 6090 13197 146 145 0 ---- AMGA
24966 6038 13444 170 169 0 ---- UST'-MAJYA
24967 6047 13000 171 173 0 ---- TEGYULTYA
@@ -3815,7 +3830,7 @@
25051 6970 17026 5 3 0 ---- PEVEK
25062 6988 17577 3 2 0 ---- MYS BILLINGSA
25121 6873 15872 12 9 0 ---- KOLYMSKAYA
-25123 6875 16128 28 32 0 T-T- CHERSKIJ
+25123 6875 16128 28 32 0 --T- CHERSKIJ
25129 6815 16116 8 6 0 ---- KONSTANTINOVSKAYA
25138 6812 16417 94 98 0 ---- OSTROVNOE
25147 6805 16645 280 290 0 ---- BILIBINO
@@ -3830,14 +3845,14 @@
25378 6636 -17912 26 21 0 ---- EGVEKINOT
25399 6616 -16983 7 5 0 ---- MYS UELEN
25400 6573 15090 43 41 0 ---- ZYRYANKA
-25400 6573 15090 47 0 0 T-T- ZYRYANKA
-25428 6523 16053 260 260 0 T-T- OMOLON
+25400 6573 15090 47 0 0 --T- ZYRYANKA
+25428 6523 16053 260 260 0 --T- OMOLON
25469 6518 17677 19 16 0 ---- KANCHALAN
25503 6475 15397 99 97 0 ---- KORKODON
25538 6422 16423 326 324 0 ---- VERHNEE PENZINO
25551 6468 17042 26 25 0 ---- MARKOVO
25561 6487 17442 8 4 0 ---- TANYURER
-25562 6473 17753 6 6 0 T--- ANADYR'
+25562 6473 17753 6 6 0 --T- ANADYR'
25563 6478 17757 61 64 0 ---- ANADYR'
25563 6473 17753 6 6 0 T-T- ANADYR'
25594 6438 -17323 40 25 0 ---- BUHTA PROVIDENJA
@@ -3846,7 +3861,7 @@
25648 6320 16785 44 44 0 ---- SLAUTNOE
25677 6302 17928 5 3 0 ---- BERINGOVSKAJA
25700 6280 15066 312 311 0 ---- EL' GEN (SOVHOZ)
-25703 6292 15241 210 206 0 T-T- SEJMCHAN
+25703 6292 15241 210 206 0 --T- SEJMCHAN
25705 6245 15232 260 0 0 ---- SREDNIKAN
25707 6210 15068 349 348 0 ---- BOHAPCHA
25715 6252 15580 500 499 0 ---- OMSUKCHAN
@@ -3858,7 +3873,7 @@
25820 6192 15922 12 8 0 ---- EVENSK
25902 6085 15177 901 0 0 ---- ATKA
25904 6060 15069 522 520 0 ---- MADAUN
-25913 5955 15078 116 115 0 T-T- MAGADAN
+25913 5955 15078 116 115 0 --T- MAGADAN
25916 5883 15135 65 64 0 ---- ALEVINA (MYS)
25919 5910 15333 13 15 0 ---- BRAT' EV (MYS)
25922 6072 15588 33 34 0 ---- SHELIHOVA
@@ -3874,7 +3889,7 @@
26058 5939 2811 30 28 0 ---- NARVA
26059 5937 2860 19 17 0 ---- KINGISEPP
26063 5997 3030 6 3 0 ---- ST.PETERSBURG (VOEJKOVO)
-26063 5995 3070 75 72 0 T-T- ST.PETERSBURG (VOEJKOVO)
+26063 5995 3070 75 72 0 T--- ST.PETERSBURG (VOEJKOVO)
26067 5943 2950 129 127 0 ---- VOLOSOVO
26069 5935 3013 90 88 0 ---- BELOGORKA
26072 5993 3100 16 14 0 ---- SHLISSEL'BURG
@@ -3917,7 +3932,7 @@
26285 5827 3253 63 62 0 ---- KRESTCY
26289 5797 3322 219 0 0 ---- VALDAJ
26291 5842 3390 89 87 0 ---- BOROVICI
-26298 5788 3403 187 186 0 T-T- BOLOGOE
+26298 5788 3403 187 186 0 T--- BOLOGOE
26313 5775 2259 6 4 0 ---- KOLKA
26314 5740 2154 3 2 0 ---- VENTSPILS
26318 5718 2255 81 80 0 ---- STENDE
@@ -3944,7 +3959,7 @@
26446 5654 2728 158 157 0 ---- REZEKNE
26447 5685 2624 133 132 0 ---- MADONA
26456 5672 2872 99 97 0 ---- OPOCHKA
-26477 5635 3062 103 97 0 T-T- VELIKIE LUKI
+26477 5635 3062 103 97 0 T--- VELIKIE LUKI
26479 5648 3163 187 187 0 ---- TOROPEC
26499 5648 3492 185 184 0 ---- STARITSA
26501 5635 2232 67 0 0 ---- MAZEIKIAI
@@ -3953,11 +3968,11 @@
26504 5625 2273 0 0 0 ---- N. AKMENE
26509 5573 2109 7 6 0 ---- KLAIPEDA
26515 5599 2226 152 153 0 ---- TELSIAI
-26517 5575 2147 0 0 0 ---- VEZAICAI
+26517 5572 2147 0 0 0 ---- VEZAICIAI
26518 5561 2224 166 165 0 ---- LAUKUVA
26524 5594 2333 107 106 0 ---- SIAULIAI
26528 5575 2374 0 0 0 ---- SEDUVA
-26529 5573 2442 58 57 0 ---- PANEVEZYS
+26529 5574 2442 58 57 0 ---- PANEVEZYS
26531 5619 2477 62 60 0 ---- BIRZAI
26539 5596 2559 139 138 0 ---- ROKISKIS
26544 5593 2666 125 124 0 ---- DAUGAVPILS
@@ -3968,14 +3983,14 @@
26585 5583 3293 222 220 0 ---- BELYJ
26600 5535 2145 5 3 0 ---- SILUTE
26603 5530 2101 3 2 0 ---- NIDA
-26615 5526 2229 35 33 0 ---- TAURAGE
+26615 5526 2228 35 33 0 ---- TAURAGE
26620 5540 2387 77 69 0 ---- DOTNUVA
-26621 5539 2313 110 111 0 ---- RASEINIAI
+26621 5539 2315 110 111 0 ---- RASEINIAI
26629 5488 2384 77 76 0 ---- KAUNAS
26629 5488 2384 77 76 0 T--- KAUNAS
26633 5552 2559 106 105 0 ---- UTENA
26634 5526 2476 73 72 0 ---- UKMERGE
-26636 5513 2617 222 221 0 ---- SVENCIONYS
+26636 5515 2617 222 221 0 ---- SVENCIONYS
26643 5536 2746 131 0 0 ---- SHARCOVSCHINA
26645 5505 2631 212 0 0 ---- LYNTUPY
26653 5547 2875 133 0 0 ---- POLOTSK
@@ -3984,9 +3999,9 @@
26666 5525 3025 176 0 0 ---- VITEBSK
26668 5480 2969 176 0 0 ---- SENNO
26695 5517 3440 251 243 0 ---- VJAZ'MA
-26702 5473 2056 21 19 0 T-T- KALININGRAD
+26702 5473 2056 21 19 0 T--- KALININGRAD
26711 5464 2179 31 32 0 ---- CHERNYAHOVSK
-26713 5463 2278 59 58 0 ---- KYBARTAI
+26713 5465 2280 59 58 0 ---- KYBARTAI
26714 5453 2335 0 0 0 ---- MARIJAMPOLE
26728 5423 2351 134 133 0 ---- LAZDIJAI
26729 5441 2406 0 0 0 ---- ALYTUS
@@ -3996,7 +4011,7 @@
26759 5427 2850 189 0 0 ---- BORISOV
26763 5450 3044 185 0 0 ---- ORSHA
26774 5430 3094 205 0 0 ---- GORKI
-26781 5475 3207 238 240 0 T-T- SMOLENSK
+26781 5475 3207 238 240 0 T--- SMOLENSK
26784 5442 3243 201 200 0 ---- POCHINOK
26795 5442 3402 238 238 0 ---- SPAS-DEMENSK
26825 5360 2406 149 0 0 ---- GRODNO
@@ -4022,7 +4037,7 @@
27026 5962 3917 133 132 0 ---- KOROBOVO
27037 5932 3993 130 125 0 ---- VOLOGDA
27037 5932 3992 126 0 0 T-T- VOLOGDA
-27038 5932 3993 133 125 0 T-T- VOLOGDA
+27038 5932 3993 133 125 0 T--- VOLOGDA
27051 5998 4277 135 134 0 ---- TOT'MA
27066 5953 4546 143 142 0 ---- NIKOL'SK
27083 5985 4828 180 179 0 ---- OPARINO
@@ -4033,7 +4048,7 @@
27164 5882 4432 151 150 0 ---- KOLOGRIV
27176 5893 4677 159 159 0 ---- VOHMA
27198 5859 4941 127 0 1 ---- KIROV
-27199 5857 4957 158 157 0 T-T- KIROV
+27199 5857 4957 158 157 0 T--- KIROV
27208 5780 3590 142 140 0 ---- MAKSATIKHA
27215 5803 3710 167 166 0 ---- KRASNYJ HOLM
27223 5848 3913 118 117 0 ---- POSHEHON'E
@@ -4064,7 +4079,7 @@
27428 5640 3875 185 185 0 ---- ALEKSANDROV
27441 5685 4140 99 99 0 ---- SHUYA
27453 5668 4343 103 101 0 ---- GORODEC
-27459 5627 4400 157 161 0 T-T- NIZHNIJ NOVGOROD
+27459 5627 4400 157 161 0 T--- NIZHNIJ NOVGOROD
27462 5673 4452 118 118 0 ---- SEMENOV
27479 5633 4658 107 108 0 ---- KOZ'MODEM'JANSK
27480 5698 4732 104 103 0 ---- SANCURSK
@@ -4083,11 +4098,11 @@
27587 5552 4747 183 182 0 ---- KANASH
27593 5609 4986 153 151 0 ---- ARSK
27595 5574 4920 119 116 0 ---- KAZAN'
-27595 5561 4929 116 116 0 T-T- KAZAN'
+27595 5561 4929 116 116 0 T--- KAZAN'
27606 5502 3647 197 195 0 ---- MALOJAROSLAVEC
27611 5538 3670 193 190 0 ---- NARO-FOMINSK
27612 5583 3761 157 147 0 ---- MOSKVA VDNH
-27612 5593 3752 190 187 0 T-T- MOSKVA (DOLGOPRUDNYJ)
+27612 5593 3752 190 187 0 T--- MOSKVA (DOLGOPRUDNYJ)
27618 5493 3747 166 164 0 ---- SERPUHOV
27625 5513 3872 114 112 0 ---- KOLOMNA
27627 5483 3815 221 221 0 ---- KASIRA
@@ -4099,10 +4114,10 @@
27679 5482 4658 180 179 0 ---- ALATYR'
27697 5495 4879 157 155 0 ---- TETJUSI
27703 5455 3636 199 198 0 ---- KALUGA
-27707 5410 3535 238 237 0 T-T- SUHINICHI
+27707 5410 3535 238 237 0 T--- SUHINICHI
27719 5423 3761 205 202 0 ---- TULA
27729 5423 3903 173 173 0 ---- MIHAJLOV
-27730 5463 3970 157 155 0 T-T- RYAZAN'
+27730 5463 3970 157 155 0 T--- RYAZAN'
27736 5430 4088 99 98 0 ---- SILOVO
27745 5437 4193 115 114 0 ---- SASOVO
27752 5463 4323 139 139 0 ---- TEMNIKOV
@@ -4132,12 +4147,12 @@
27947 5280 4133 128 127 0 ---- TAMBOV
27955 5297 4340 206 205 0 ---- BELINSKIJ
27957 5267 4272 169 169 0 ---- KIRSANOV
-27962 5312 4502 172 169 0 T-T- PENZA
+27962 5312 4502 172 169 0 T--- PENZA
27962 5312 4502 172 0 0 T-T- PENZA
27972 5305 4643 253 253 0 ---- RADISHCHEVO
27981 5315 4752 99 107 0 ---- KANADEJ
27983 5318 4840 103 104 0 ---- SYZRAN'
-27995 5298 4943 45 45 0 T-T- SAMARA (BEZENCHUK)
+27995 5298 4943 45 45 0 T--- SAMARA (BEZENCHUK)
28009 5935 5225 169 167 0 ---- KIRS
28028 5955 5683 223 0 0 ---- BEREZNIKI
28044 5960 6053 130 124 0 ---- SEROV
@@ -4155,14 +4170,14 @@
28216 5808 5468 226 238 0 ---- VERESCAGINO
28224 5800 5667 171 171 0 ---- PERM'
28225 5795 5620 170 0 0 ---- PERM'
-28225 5796 5620 170 170 0 T-T- PERM'
+28225 5796 5620 170 170 0 T--- PERM'
28234 5812 5778 226 223 0 ---- LYS'VA
28238 5783 5865 245 244 0 ---- KYN
28240 5788 6007 260 262 0 ---- NIZHNYJ TAGIL
28248 5787 6170 130 128 0 ---- ALAPAEVSK
28255 5805 6368 103 101 0 ---- TURINSK
28264 5805 6534 60 60 0 ---- TAVDA, BELYJYAR
-28275 5815 6825 47 55 0 T-T- TOBOL'SK
+28275 5815 6825 47 55 0 T--- TOBOL'SK
28302 5775 5150 183 179 0 ---- UNI
28307 5712 5000 117 115 0 ---- URZUM
28319 5708 5475 131 132 0 ---- NOZOVKA
@@ -4182,7 +4197,7 @@
28428 5650 5613 148 148 0 ---- CHERNUSKA
28434 5665 5778 206 205 0 ---- KRASNOUFIMSK
28440 5683 6063 281 280 0 ---- EKATERINBURG
-28445 5673 6107 288 286 0 T-T- EKATERINBURG (VERHNEE DUBROVO)
+28445 5673 6107 288 286 0 T--- EKATERINBURG (VERHNEE DUBROVO)
28445 5673 6107 290 0 0 T-T- VERHNEE DUBROVO
28449 5643 6187 173 170 0 ---- KAMENSK-URALSKIJ
28451 5685 6272 127 127 0 ---- KAMYSLOV
@@ -4218,7 +4233,7 @@
28655 5523 6332 178 176 0 ---- SUMIHA
28659 5492 6443 158 157 0 ---- KURTAMYSH
28661 5547 6542 74 73 0 ---- KURGAN (VORONOVKA)
-28661 5546 6540 72 0 0 T-T- KURGAN
+28661 5546 6540 72 71 0 T--- KURGAN
28666 5525 6730 140 0 0 ---- MAKUSINO
28668 5477 6600 152 150 0 ---- POLOVINNOE
28676 5479 6912 101 0 0 ---- PETROPAVLOVSK
@@ -4226,14 +4241,14 @@
28688 5493 7127 126 125 0 ---- ISIL'KUL'
28696 5503 7458 110 109 0 ---- KALACINSK
28698 5502 7338 122 121 0 ---- OMSK
-28698 5493 7340 90 0 0 T-T- OMSK
+28698 5493 7340 90 0 0 T--- OMSK
28704 5449 5041 77 76 0 ---- CULPANOVO
28705 5442 5110 158 157 0 ---- CELNO-VERSINY
28710 5406 5493 124 121 0 ---- RAEVSKY
28711 5463 5280 304 299 0 ---- BUGUL'MA
28712 5459 5371 134 132 0 ---- TUIMAZY
28719 5402 5415 356 358 0 ---- AKSAKOVO
-28722 5471 5582 104 104 0 T-T- UFA-DIOMA
+28722 5471 5582 104 104 0 T--- UFA-DIOMA
28741 5455 6030 319 321 0 ---- MIRNYJ
28748 5408 6162 192 192 0 ---- TROIZK
28756 5447 6487 117 0 0 ---- ZVERINOGOLOVSKOE
@@ -4269,16 +4284,16 @@
29111 5922 7823 69 68 0 ---- SREDNY VASJUGAN
29122 5907 8084 57 0 0 ---- KARGASOK
29128 5870 8148 58 59 0 ---- PARABEL'
-29149 5864 8673 105 0 0 ---- STEPANOVKA
+29149 5864 8673 0 0 0 ---- STEPANOVKA
29203 5858 7651 80 79 0 ---- NOVYJ VASYUGAN
29209 5781 7722 100 98 0 ---- MAJSK
-29231 5832 8295 75 73 0 T-T- KOLPASEVO
+29231 5832 8295 75 73 0 T--- KOLPASEVO
29253 5846 8947 134 136 0 ---- LOSINOBORSKOE
-29263 5845 9220 79 77 0 T-T- ENISEJSK
+29263 5845 9220 79 77 0 T--- ENISEJSK
29274 5808 9304 90 87 0 ---- STRELKA
29276 5818 9475 170 161 0 ---- MOTYGINO
-29282 5838 9745 134 131 0 T-T- BOGUCANY
-29313 5756 7943 97 95 0 ---- PUDINO
+29282 5838 9745 134 131 0 T--- BOGUCANY
+29313 5756 7943 0 95 0 ---- PUDINO
29328 5701 8206 110 109 0 ---- BAKCHAR
29332 5758 8376 112 112 0 ---- MOLCHANOVO
29348 5707 8622 114 114 0 ---- PERVOMAJSKOE
@@ -4287,7 +4302,7 @@
29374 5768 9327 93 92 0 ---- KAZACHINSKOE
29379 5720 9455 165 163 0 ---- TASEEVO
29393 5765 9953 221 219 0 ---- CHERVYANKA
-29405 5661 7656 116 0 0 ---- KYSTOVKA
+29405 5661 7656 0 0 0 ---- KYSTOVKA
29418 5634 7836 127 124 0 ---- SEVERNOE
29430 5650 8492 139 141 0 ---- TOMSK
29456 5654 8932 205 204 0 ---- TJUHTET
@@ -4313,7 +4328,7 @@
29566 5593 9228 275 278 0 ---- SHUMIHA
29570 5603 9275 276 277 0 ---- KRASNOJARSK OPYTNOE POLE
29571 5607 9273 235 234 0 ---- MININO
-29572 5618 9261 207 205 0 T-T- EMEL' YANOVO
+29572 5618 9261 207 205 0 T--- EMEL' YANOVO
29576 5582 9432 376 374 0 ---- UJAR
29578 5572 9375 399 403 0 ---- SHALINSKOE
29580 5617 9527 357 359 0 ---- SOLYANKA
@@ -4322,14 +4337,14 @@
29594 5595 9800 307 305 0 ---- TAJSHET
29602 5532 7675 111 110 0 ---- CHANY
29605 5522 7602 112 0 0 ---- TATARSK
-29612 5535 7831 120 119 0 T-T- BARABINSK
+29612 5535 7831 120 119 0 T--- BARABINSK
29613 5531 7963 140 0 0 ---- UBINSKOE
29625 5510 8097 142 140 0 ---- CULYM
29626 5503 8224 159 158 0 ---- KOCENEVO
29631 5532 8274 147 145 0 ---- KOLYVAN'
29632 5532 8360 203 199 0 ---- MOSKOVO
29634 5509 8290 176 173 0 ---- NOVOSIBIRSK
-29634 5497 8295 143 0 0 T-T- NOVOSIBIRSK
+29634 5497 8295 0 0 0 T--- NOVOSIBIRSK
29636 5522 8438 173 172 0 ---- TOGUCHIN
29638 5491 8296 131 131 0 ---- NOVOSIBIRSK (OGOURTSOVO)
29642 5523 8612 260 0 0 ---- KEMEROVO
@@ -4339,12 +4354,12 @@
29654 5521 8764 498 496 0 ---- CENTRAL'NYJ RUDNIK
29662 5538 9162 321 319 0 ---- BALAHTA
29664 5509 9085 325 326 0 ---- SVETLOLYUBOVO
-29674 5512 9338 456 458 0 ---- ANASTASINO
+29674 5512 9338 0 458 0 ---- ANASTASINO
29675 5508 9337 476 465 0 ---- KOLBA
29676 5527 9490 337 335 0 ---- AGINSKOE
-29698 5488 9903 411 411 0 T-T- NIZHNEUDINSK
+29698 5488 9903 411 411 0 T--- NIZHNEUDINSK
29706 5439 7731 116 0 0 ---- KUPINO
-29712 5472 7867 113 0 0 ---- ZDVINSK
+29712 5472 7867 0 0 0 ---- ZDVINSK
29724 5434 8047 161 160 0 ---- KOCHKI
29726 5437 8189 132 132 0 ---- ORDYNSKOE
29735 5430 8331 293 292 0 ---- POSEVNAJA
@@ -4360,19 +4375,19 @@
29789 5422 9697 984 983 0 ---- VERHNJAJA GUTARA
29802 5382 7653 114 0 0 ---- MIKHAILOVKA
29807 5335 7545 94 0 0 ---- ERTIS
-29813 5399 7925 144 0 0 ---- KRASNOOZERSK
-29814 5373 7802 115 0 0 ---- KARASUK
+29813 5399 7925 0 0 0 ---- KRASNOOZERSK
+29814 5373 7802 0 0 0 ---- KARASUK
29816 5362 7955 138 138 0 ---- HABARY
29822 5382 8127 129 127 0 ---- KAMEN'-NA-OBI
-29827 5328 8078 122 0 0 ---- BAEVO
+29827 5328 8078 0 0 0 ---- BAEVO
29832 5382 8358 144 144 0 ---- TALMENKA
29833 5394 8479 212 0 1 ---- ZALESOVO
29838 5343 8352 185 183 0 ---- BARNAUL
-29839 5350 8383 145 140 0 T-T- BARNAUL
+29839 5350 8383 145 140 0 T--- BARNAUL
29846 5382 8688 309 308 0 ---- NOVOKUZNETSK
29848 5346 8593 272 271 0 ---- TOGUL
29849 5334 8718 293 293 0 ---- KUZEDEEVO
-29862 5377 9132 256 254 0 T-T- ABAKAN
+29862 5377 9132 256 254 0 T--- ABAKAN
29864 5372 9037 525 524 0 ---- UYBAT
29866 5372 9170 254 254 0 ---- MINUSINSK
29869 5327 9240 298 300 0 ---- ERMAKOVSKOE
@@ -4389,7 +4404,7 @@
29974 5280 9324 1399 1404 0 ---- OLEN' YA RECHKA
29998 5250 9982 1375 1376 2 ---- ORLIK
30028 5928 10617 352 350 0 ---- IKA
-30054 5945 11258 190 186 0 T-T- VITIM
+30054 5945 11258 190 186 0 --T- VITIM
30074 5993 11760 164 162 0 ---- MACHA
30089 5902 12177 175 174 0 ---- DZHIKIMDA
30117 5820 10275 401 0 0 ---- UST'-ILIMSK
@@ -4402,16 +4417,16 @@
30173 5900 11980 198 199 0 ---- TYANYA
30198 5807 12372 417 413 0 ---- SUON-TIT
30229 5733 10707 272 271 0 ---- VERHNE-MARKOVO
-30230 5777 10807 259 256 0 T-T- KIRENSK
+30230 5777 10807 259 256 0 T--- KIRENSK
30252 5782 11402 249 244 0 ---- MAMAKAN
30253 5786 11424 281 278 0 ---- BODAJBO
30307 5637 10170 489 488 0 ---- BRATSK II
-30309 5628 10175 416 411 0 T-T- BRATSK
+30309 5628 10175 416 411 0 T--- BRATSK
30320 5686 10573 668 664 0 ---- UST'-KUT
30323 5680 10580 326 326 0 ---- UST' -KUT
30328 5605 10583 338 338 0 ---- ORLINGA
30337 5632 10762 357 355 0 ---- KAZACHINSK
-30372 5690 11827 711 709 0 T-T- CHARA
+30372 5690 11827 711 709 0 --T- CHARA
30385 5658 12150 426 430 0 ---- UST'-NJUKZHA
30393 5683 12487 858 855 0 ---- CUL'MAN
30405 5538 10103 423 421 0 ---- TANGUJ
@@ -4433,7 +4448,7 @@
30542 5485 11115 563 0 0 ---- TASSA
30549 5420 11195 1302 0 2 ---- KARAFTIT
30554 5444 11358 902 901 0 ---- BAGDARIN
-30554 5447 11358 995 995 0 T-T- BAGDARIN
+30554 5447 11358 995 995 0 --T- BAGDARIN
30555 5462 11313 1314 1315 2 ---- TROICKIJ PRIISK
30576 5443 11990 646 642 0 ---- TUPIK
30603 5393 10205 458 457 0 ---- ZIMA
@@ -4441,13 +4456,13 @@
30618 5313 10377 446 445 0 ---- BOHAN
30622 5397 10590 521 518 0 ---- KACHUG
30627 5310 10553 761 757 0 ---- BAJANDAJ
-30635 5342 10902 461 459 0 T-T- UST'-BARGUZIN
+30635 5342 10902 461 459 0 --T- UST'-BARGUZIN
30636 5362 10963 489 488 0 ---- BARGUZIN
30637 5332 10773 462 461 0 ---- UZUR
30650 5320 11278 923 920 0 ---- ROMANOVKA
30664 5353 11562 811 810 0 ---- TUNGOKOCEN
30669 5307 11748 708 700 0 ---- ZILOVO
-30673 5375 11973 625 624 0 T-T- MOGOCHA
+30673 5375 11973 625 624 0 --T- MOGOCHA
30675 5355 11872 582 583 0 ---- KSEN'EVSKAJA
30679 5310 11922 384 382 0 ---- GORBICA
30682 5387 12087 472 471 0 ---- AMAZAR
@@ -4461,14 +4476,14 @@
30712 5278 10368 437 438 0 ---- USOL' E-SIBIRSKOE
30713 5282 10477 526 524 0 ---- UST'ORDYNSKIJ
30714 5210 10270 756 755 0 ---- DABADY
-30715 5248 10385 437 436 0 T-T- ANGARSK
+30715 5248 10385 437 436 0 T--- ANGARSK
30726 5255 10711 461 458 0 ---- SUHAJA
30729 5205 10664 467 466 0 ---- KABANSK
30731 5299 10829 491 488 0 ---- GORJACINSK
30739 5217 10978 666 665 0 ---- HORINSK
30741 5277 10997 1286 1288 2 ---- ZAMAKTA
30745 5254 11156 951 952 0 ---- SOSNOVO-OZERSKOE
-30758 5208 11348 671 671 0 T-T- CHITA
+30758 5208 11348 671 671 0 --T- CHITA
30764 5265 11517 646 644 0 ---- USUGLI
30765 5255 11620 533 533 0 ---- ZJUL'ZJA
30766 5253 11700 539 538 0 ---- CHERNYSHEVSK
@@ -4496,18 +4511,18 @@
30879 5132 11962 619 621 0 ---- NERCHINSKIJ ZAVOD
30925 5036 10645 797 791 0 ---- KJAHTA
30934 5060 10758 638 636 0 ---- BICURA
-30935 5037 10875 771 770 0 T-T- KRASNYJ CHIKOJ
+30935 5037 10875 771 770 0 --T- KRASNYJ CHIKOJ
30947 5007 11015 1154 0 2 ---- SUMILOVKA
30949 4957 11197 908 907 0 ---- KYRA
30957 5027 11327 732 731 0 ---- AKSA
30961 5095 11558 640 642 0 ---- OLOVJANNAJA
-30965 5040 11652 676 675 0 T-T- BORZYA
+30965 5040 11652 676 675 0 --T- BORZYA
30967 4990 11575 623 620 0 ---- SOLOV'EVSK
30971 5092 11793 807 805 0 ---- ALEKSANDROVSKIJ ZAVOD
30972 5088 11858 694 694 0 ---- DONO
30975 5033 11907 521 521 0 ---- PRIARGUNSK
30978 4983 11838 550 547 0 ---- KAJLASTUJ
-31004 5862 12537 679 678 0 T-T- ALDAN
+31004 5862 12537 679 678 0 --T- ALDAN
31005 5897 12627 284 283 0 ---- TOMMOT
31011 5967 12705 278 277 0 ---- BUYAGA
31016 5863 12850 231 230 0 ---- UGINO
@@ -4517,13 +4532,13 @@
31062 5977 13766 384 380 0 ---- YUGORENOK
31083 5997 14478 121 0 0 ---- HEJDZHAN
31087 5882 14185 5 4 0 ---- UL' YA
-31088 5937 14319 6 5 0 T-T- OHOTSK
+31088 5937 14319 6 5 0 --T- OHOTSK
31096 5916 14904 52 0 0 ---- SPAFAR' EVA (OSTROV)
31102 5765 12597 1204 1204 0 ---- KANKU
31123 5777 13090 255 254 0 ---- CJUL'BJU
31137 5628 13113 850 849 0 ---- TOKO
31152 5765 13615 318 326 0 ---- NEL' KAN
-31168 5645 13815 8 6 0 T-T- AYAN
+31168 5645 13815 8 6 0 --T- AYAN
31174 5483 13753 9 9 0 ---- BOL'SHOJ SHANTAR
31199 5503 12680 448 0 0 ---- UNAHA
31253 5472 12887 364 365 0 ---- BOMNAK
@@ -4531,12 +4546,12 @@
31285 5450 13441 62 62 0 ---- UDSKOE
31295 5347 12582 363 362 0 ---- MAGDAGACI
31299 5310 12635 314 314 0 ---- TYGDA
-31300 5374 12728 230 228 0 T-T- ZEJA
+31300 5374 12728 230 228 0 --T- ZEJA
31311 5397 12907 405 0 0 ---- OGORON
31318 5335 13000 319 319 0 ---- DUGDA
31329 5308 13293 542 540 0 ---- EKIMCHAN
31348 5305 13603 153 153 0 ---- BURUKAN
-31369 5315 14069 46 45 0 T-T- NIKOLAEVSK-NA-AMURE
+31369 5315 14069 46 45 0 --T- NIKOLAEVSK-NA-AMURE
31371 5278 12600 209 208 0 ---- CHERNJAEVO
31373 5300 12865 332 332 0 ---- OKTJABR'SKIJ PRIISK
31384 5257 12907 246 0 0 ---- GAR'
@@ -4559,7 +4574,7 @@
31484 5142 13508 269 268 0 ---- HULARIN
31489 5120 13680 92 92 0 ---- GORIN
31509 5148 14078 36 0 0 ---- DE-KASTRI
-31510 5028 12748 169 168 0 T-T- BLAGOVESCENSK
+31510 5028 12748 169 168 0 --T- BLAGOVESCETNSK
31510 5053 12750 177 0 0 T-T- BLAGOVESCENSK
31512 5025 12756 132 130 0 ---- BLAGOVESCENSK
31513 5092 12847 178 178 0 ---- BELOGORSK
@@ -4567,7 +4582,7 @@
31527 5012 12947 240 238 0 ---- ZAVITAJA
31532 5087 13225 272 271 0 ---- CEKUNDA
31534 5043 13102 273 276 0 ---- SEKTAGLI
-31538 5007 13213 347 343 0 T-T- SUTUR
+31538 5007 13213 347 343 0 --T- SUTUR
31561 5053 13703 22 21 0 ---- KOMSOMOLSK-NA-AMURE
31583 4978 12991 116 114 0 ---- MALINOVKA
31587 4962 12865 115 115 0 ---- POJARKOVO
@@ -4580,15 +4595,15 @@
31683 4965 14008 58 58 0 ---- TUMNIN
31702 4900 13108 267 265 0 ---- OBLUC'E
31703 4900 13172 267 0 0 ---- BIRAKAN
-31707 4773 13097 73 72 0 ---- EKATERINO-NIKOL'SKOE
+31707 4774 13097 72 71 0 ---- EKATERINO-NIKOL'SKOE
31710 4795 13262 57 55 0 ---- LENINSKOE
31713 4873 13294 77 80 0 ---- BIROBIDZHAN
31725 4862 13383 52 50 0 ---- SMIDOVICH
31733 4882 13588 58 62 0 ---- ELABUGA
31735 4853 13519 76 75 0 ---- HABAROVSK
-31736 4853 13522 72 72 0 T-T- HABAROVSK
+31736 4853 13522 72 72 0 --T- HABAROVSK
31754 4860 13705 403 405 0 ---- TIVJAKU
-31770 4900 14030 24 21 0 T-T- SOVETSKAYA GAVAN'
+31770 4900 14030 24 21 0 --T- SOVETSKAYA GAVAN'
31786 4755 13482 89 86 0 ---- VJAZEMSKAJA
31788 4715 13433 76 75 0 ---- LERMONTOVKA
31792 4777 13563 105 104 0 ---- BICEVAJA
@@ -4599,7 +4614,7 @@
31832 4680 13427 68 70 0 ---- BIKIN
31845 4653 13532 130 128 0 ---- KRASNYJ JAR
31866 4653 13833 4 2 0 ---- SOSUNOVO
-31873 4587 13372 105 100 0 T-T- DAL'NERECHENSK
+31873 4587 13372 105 100 0 --T- DAL'NERECHENSK
31878 4510 13350 98 97 0 ---- KIROVSKIJ
31884 4542 13427 139 138 0 ---- MALINOVO
31909 4500 13660 62 51 0 ---- TERNEJ
@@ -4617,7 +4632,7 @@
31960 4312 13191 189 187 0 ---- VLADIVOSTOK
31961 4388 13197 36 34 0 ---- TIMIRYAZEVSKIJ
31969 4265 13080 39 41 0 ---- POS'ET
-31977 4327 13205 87 77 0 T-T- VLADIVOSTOK (SAD GOROD)
+31977 4327 13205 87 77 0 --T- VLADIVOSTOK (SAD GOROD)
31981 4397 13307 188 186 0 ---- ANUCINO
31987 4315 13302 208 221 0 ---- PARTIZANSK
31989 4290 13390 43 44 0 ---- PREOBRAZHENIE
@@ -4626,40 +4641,40 @@
32027 5222 14163 6 6 0 ---- POGIBI
32053 5192 14313 34 29 0 ---- NOGLIKI
32057 5113 14266 66 0 0 ---- ADO-TYMOVO
-32061 5090 14216 31 30 0 T-T- ALEKSANDROVSK-SAHALINSKIJ
+32061 5090 14216 31 30 0 --T- ALEKSANDROVSK-SAHALINSKIJ
32069 5005 14216 4 3 0 ---- PIL'VO
32071 5073 14272 95 94 0 ---- TYMOVSKOE
32076 5040 14377 8 6 0 ---- POGRANICHNOE
32077 5023 14258 181 180 0 ---- ONOR
32088 4907 14203 43 39 0 ---- UGLEGORSK
-32098 4922 14310 8 7 0 T-T- PORONAJSK
+32098 4922 14310 8 7 0 --T- PORONAJSK
32099 4865 14472 6 33 0 ---- MYS TERPENIYA
32121 4798 14219 17 17 0 ---- ILYINSKIY
32128 4705 14205 44 40 0 ---- HOLMSK
32133 4733 14280 11 10 0 ---- DOLINSK
-32150 4695 14272 24 22 0 T-T- JUZHNO-SAHALINSK
+32150 4695 14272 24 22 0 --T- JUZHNO-SAHALINSK
32165 4402 14587 45 44 0 ---- JUZHNO-KURIL'SK
32186 4620 15050 76 0 0 ---- URUP
32195 4685 15187 25 0 0 ---- SIMUSIR
32207 4807 15322 58 0 0 ---- MATUA
32213 5087 15668 50 48 0 ---- MYS LOPATKA
-32215 5068 15613 23 24 0 T-T- SEVERO-KURIL'SK
+32215 5068 15613 23 24 0 --T- SEVERO-KURIL'SK
32222 5960 16072 19 31 0 ---- TEVI
32252 5850 15916 7 4 0 ---- UST'-VOYAMPOLKA
32287 5710 15674 8 3 0 ---- UST'- HAJRJUZOVO
32333 5765 16322 9 8 0 ---- OZERNOJ (MYS)
-32389 5632 16083 29 28 0 T-T- KLJUCHI
+32389 5632 16083 29 28 0 --T- KLJUCHI
32408 5624 16269 30 19 0 ---- UST'-KAMCHATSK
32411 5558 15558 6 5 0 ---- ICA
-32477 5430 15591 25 25 0 T-T- SOBOLEVO
+32477 5430 15591 25 25 0 --T- SOBOLEVO
32509 5412 15997 27 28 0 ---- SEMYACHIK
32519 5462 16119 16 9 0 ---- KRONOKI
-32540 5308 15858 84 78 0 T-T- PETROPAVLOVSK-KAMCHATSKIJ
+32540 5308 15858 84 78 0 --T- PETROPAVLOVSK-KAMCHATSKIJ
32562 5283 15630 30 30 0 ---- BOL' SHERETZK
32580 5306 15879 65 0 1 ---- PETROPAVLOVSK
32583 5287 15865 24 32 0 ---- PETROPAVLOVSK-KAMCHATSKIJ
32594 5148 15647 28 36 0 ---- OZERNAJA
-32618 5520 16598 18 16 0 T-T- OSTROV BERINGA
+32618 5520 16598 18 16 0 --T- OSTROV BERINGA
33008 5212 2369 146 0 0 ---- BREST
33008 5212 2369 146 0 0 T-T- BREST
33019 5212 2611 142 0 0 ---- PINSK
@@ -4777,7 +4792,7 @@
33990 4448 3417 72 66 0 ---- YALTA
33998 4443 3408 1180 1180 2 ---- AI-PETRI
34003 5232 3629 251 274 0 ---- PONYRI
-34009 5177 3617 247 246 0 T-T- KURSK
+34009 5177 3617 247 246 0 T--- KURSK
34013 5243 3760 179 178 0 ---- LIVNY
34027 5178 3813 191 0 0 ---- NOVO-KASTORNOE
34047 5183 4148 147 145 0 ---- ZERDEVKA
@@ -4790,7 +4805,7 @@
34109 5120 3632 192 190 0 ---- OBOJAN'
34110 5117 3735 226 223 0 ---- BOGORODITSKOE-FENINO
34116 5130 3788 217 216 0 ---- STARYJ OSKOL
-34122 5165 3925 104 100 0 T-T- VORONEZ
+34122 5165 3925 104 100 0 T--- VORONEZ
34123 5170 3922 149 147 0 ---- VORONEZ
34139 5105 4070 194 193 0 ---- KAMENNAJA STEP'
34146 5137 4208 106 104 0 ---- BORISOGLEBSK
@@ -4798,7 +4813,7 @@
34163 5163 4545 201 202 0 ---- OKTYABRSKY GORODOK
34171 5157 4604 156 0 0 ---- SARATOV
34172 5157 4603 156 0 0 ---- SARATOV
-34172 5156 4604 167 0 0 T-T- SARATOV
+34172 5156 4604 167 0 0 T--- SARATOV
34186 5137 4830 111 110 0 ---- ERSHOV
34199 5120 4973 104 104 0 ---- OZINKI
34202 5080 3577 226 225 0 ---- GOTNJA
@@ -4807,7 +4822,7 @@
34231 5100 3950 115 114 0 ---- LISKI
34238 5148 4042 154 152 0 ---- ANNA
34240 5080 4200 106 106 0 ---- URJUPINSK
-34247 5042 4105 92 90 0 T-T- KALACH
+34247 5042 4105 92 90 0 T--- KALACH
34253 5095 4373 133 132 0 ---- ELAN'
34254 5053 4268 98 96 0 ---- NOVOANNENSKIJ
34262 5083 4457 115 115 0 ---- RUDNYA
@@ -4836,7 +4851,7 @@
34438 4893 4038 155 153 0 ---- MILLEROVO
34445 4922 4183 91 90 0 ---- BOKOVSKAJA
34461 4930 4400 44 43 0 ---- ILOVLYA
-34467 4878 4433 141 0 0 T-T- VOLGOGRAD
+34467 4878 4433 141 0 0 T--- VOLGOGRAD
34476 4913 4685 6 5 0 ---- EL'TON
34504 4860 3497 143 141 0 ---- DNIPROPETROVS'K
34509 4813 3622 175 173 0 ---- CHAPLYNE
@@ -4871,7 +4886,7 @@
34723 4712 3942 4 0 0 ---- AZOV
34727 4680 3827 3 2 0 ---- EJSK
34730 4727 3982 75 74 0 ---- ROSTOV-NA-DONU
-34731 4725 3982 78 0 0 T-T- ROSTOV-NA-DONU
+34731 4725 3982 78 0 0 T--- ROSTOV-NA-DONU
34737 4653 3961 22 21 0 ---- KUSHCHEVSKAJA
34740 4652 4135 79 79 0 ---- GIGANT
34743 4715 4248 72 71 0 ---- ZIMOVNIKI
@@ -4886,14 +4901,14 @@
34825 4607 3897 17 17 0 ---- KANEVSKAJA
34838 4585 4008 78 77 0 ---- TIHORECK
34845 4607 4197 87 87 0 ---- GORODOVIKOVSK
-34858 4592 4335 86 86 0 T-T- DIVNOE
+34858 4592 4335 86 86 0 T--- DIVNOE
34861 4630 4418 197 196 0 ---- ELISTA
34866 4618 4535 -7 -7 0 ---- YASHKUL'
34868 4580 4463 113 112 0 ---- IKI-BURUL
34871 4637 4602 -7 -8 0 ---- UTTA
34880 4628 4798 -21 -22 0 ---- ASTRAHAN'
34880 4628 4798 -21 0 0 T-T- ASTRAHAN'
-34882 4628 4798 -17 0 0 T-T- ASTRAHAN'
+34882 4628 4798 -17 0 0 T--- ASTRAHAN'
34887 4580 4722 -18 -17 0 ---- LIMAN
34915 4532 3738 3 2 0 ---- KUBANSKAYA (TEMRYUK)
34922 4563 3893 22 20 0 ---- TIMASEVSKAJA
@@ -4920,7 +4935,7 @@
35085 5200 7095 384 0 0 ---- AKKOL'
35092 5250 7309 168 0 0 ---- BESTOBE
35108 5125 5128 37 0 0 ---- URALSK
-35121 5169 5508 118 115 0 T-T- ORENBURG
+35121 5169 5508 118 115 0 T--- ORENBURG
35125 5142 5642 131 131 0 ---- BELJAEVKA
35127 5102 5563 144 143 0 ---- AK-BULAK
35138 5107 5860 285 268 0 ---- ORSK
@@ -4972,7 +4987,7 @@
36090 5113 9368 1043 1042 0 ---- HOVU-AKSY
36091 5226 9301 662 660 0 ---- NIZHNEUSINSKOE
36092 5214 9392 852 861 0 ---- TURAN
-36096 5171 9449 632 626 0 T-T- KYZYL
+36096 5171 9449 632 626 0 T--- KYZYL
36103 5247 9612 920 919 0 ---- TOORA-HEM
36104 5148 9558 706 706 0 ---- SARYG-SEP
36152 5087 7834 149 0 0 ---- SEMIJARKA
@@ -5008,7 +5023,7 @@
37004 4457 3808 15 15 0 ---- GELENDZHIK
37006 4472 3784 3 10 0 ---- NOVOROSSIJSK
37009 4433 3872 23 20 0 ---- DZHUBGA
-37011 4410 3903 95 0 0 T-T- TUAPSE
+37011 4410 3903 95 0 0 T--- TUAPSE
37013 4475 3990 139 133 0 ---- BELORECENSK
37014 4463 3910 62 61 0 ---- GORJACIJ KLJUC
37017 4428 3927 323 325 0 ---- GORNYIJ
@@ -5020,7 +5035,7 @@
37050 4405 4303 538 0 0 ---- PJATIGORSK
37054 4423 4307 328 323 0 ---- MINERAL'NYE VODY
37054 4422 4310 313 0 0 T-T- MINERAL'NYE VODY
-37055 4422 4310 313 0 0 T-T- MINERAL'NYE VODY
+37055 4422 4310 313 0 0 T--- MINERAL'NYE VODY
37058 4413 4345 288 287 0 ---- GEORGIEVSK
37061 4478 4413 136 134 0 ---- BUDENNOVSK
37085 4440 4655 -21 -23 0 ---- KOCHUBEJ
@@ -5041,7 +5056,7 @@
37244 4335 4612 75 74 0 ---- GUDERMES
37248 4325 4658 117 115 0 ---- HASAVJURT
37259 4302 4748 -19 0 0 T-T- MAHACHKALA
-37259 4300 4750 -19 -20 0 T-T- MAHACHKALA
+37259 4300 4750 -19 -20 0 T--- MAHACHKALA
37260 4287 4113 13 0 0 T-T- SUHUMI
37267 4270 4147 5 0 0 ---- OCEMCIRI
37279 4252 4188 118 119 4 ---- ZUGDIDI
@@ -5078,7 +5093,7 @@
37537 4160 4408 1458 0 0 ---- TSALKA
37541 4193 4458 551 0 0 ---- MUHRANI
37545 4175 4477 428 427 4 ---- TBILISI
-37549 4168 4495 462 457 0 T--- TBILISI-AMC
+37549 4168 4495 462 0 0 T--- TBILISI-AMC
37553 4193 4551 566 568 4 ---- TELAVI
37556 4173 4533 806 0 0 ---- SAGAREDZO
37563 4197 4583 449 0 0 ---- KVARELI
@@ -5121,7 +5136,7 @@
37708 4065 4490 2104 0 2 ---- SEMYONOVKA
37711 4086 4515 732 0 0 ---- IDJEVAN
37713 4092 4547 697 0 0 ---- BERD
-37717 4057 4501 1917 850 2 ---- SEVAN OZERO
+37717 4057 4501 1917 0 2 ---- SEVAN OZERO
37719 4059 4536 1853 0 2 ---- TCHAMBARAK
37729 4068 4582 1476 1480 2 ---- GADABAY
37734 4083 4603 410 404 0 ---- SHAMKIR
@@ -5179,7 +5194,7 @@
37876 3977 4533 1317 0 2 ---- EHGNADZOR
37877 3954 4497 813 813 0 ---- SHARUR
37878 4095 4507 2122 0 2 ---- ANANUN CANYON
-37880 3970 4573 2387 850 3 ---- VOROTANI CANYON
+37880 3970 4573 2387 0 3 ---- VOROTANI CANYON
37882 3983 4567 2064 0 2 ---- JERMUK
37883 3993 4597 2257 2294 2 ---- ISTISU
37893 3997 4675 252 250 0 ---- AGDAM
@@ -5389,7 +5404,7 @@
40190 3125 3479 280 280 0 ---- BEER SHEVA CITY
40191 3123 3478 280 275 0 ---- BEER-SHEVA
40198 3000 3483 445 0 0 ---- OVDA
-40199 2955 3495 20 20 0 ---- EILAT
+40199 2955 3495 20 0 0 ---- EILAT
40215 3232 3502 0 0 0 ---- TULKARM
40223 3222 3525 0 0 0 ---- NABLUS
40224 3235 3527 0 0 0 ---- MEITHLOUN
@@ -5403,7 +5418,7 @@
40255 3254 3585 616 0 0 ---- IRBED
40256 3240 3558 -200 0 0 ---- WADI RAYAN
40257 3236 3575 1150 0 0 ---- RAS MUNEEF
-40260 3220 3713 674 674 0 ---- H-5 'SAFAWI'
+40260 3215 3715 674 674 0 ---- H-5 'SAFAWI'
40265 3236 3625 683 683 0 T--- MAFRAQ
40267 3215 3628 580 0 0 ---- WADI DHULAIL
40268 3203 3572 915 0 0 ---- SALT
@@ -5572,33 +5587,33 @@
40706 3808 4628 1361 1367 2 T--- TABRIZ
40708 3822 4832 1335 0 0 ---- ARDEBIL
40710 3793 4753 1682 0 0 ---- SARAB
-40712 3765 4505 1328 1297 2 ---- ORUMIEH
+40712 3765 4505 1328 0 2 ---- ORUMIEH
40713 3735 4617 1478 0 2 ---- MARAGHEH
40716 3745 4770 1110 0 0 ---- MEYANEH
40718 3747 4945 -24 0 0 ---- ANZALI
40719 3732 4962 -9 0 0 ---- RASHT
40721 3790 5595 460 0 0 ---- MARAVEH-TAPPEH
40723 3747 5733 1091 0 0 ---- BOJNOURD
-40726 3675 4570 1352 1384 2 ---- MOHABAD
+40726 3675 4570 1352 0 2 ---- MOHABAD
40727 3625 4627 1523 0 2 ---- SAGHEZ
40729 3668 4848 1663 0 2 ---- ZANJAN
40731 3622 5003 1279 0 2 ---- GHAZVIN
40732 3690 5067 -20 -23 0 ---- RAMSAR
40734 3665 5150 -21 -25 0 ---- NOSHAHR
40736 3672 5265 -21 0 0 ---- BABULSAR
-40737 3645 5277 15 12 0 ---- GHARAKHIL
+40737 3645 5277 15 0 0 ---- GHARAKHIL
40738 3685 5427 13 0 0 ---- GORGAN
40739 3642 5495 1349 0 2 ---- SHAHRUD
40740 3707 5850 1287 1286 2 ---- GHUCHAN
40741 3653 6117 235 0 0 ---- SARAKHS
40743 3622 5767 978 0 0 ---- SABZEVAR
-40745 3627 5963 999 989 2 T-T- MASHHAD
+40745 3627 5963 999 0 2 T-T- MASHHAD
40747 3533 4700 1373 0 2 ---- SANANDAJ
40754 3568 5132 1191 1204 2 T-T- TEHRAN-MEHRABAD
40757 3558 5342 1127 0 2 ---- SEMNAN
40762 3527 5922 1451 0 2 ---- TORBAT-HEYDARIEH
40763 3520 5847 1110 0 0 ---- KASHMAR
-40766 3435 4715 1319 1320 2 T-T- KERMANSHAH
+40766 3435 4715 1319 0 2 T-T- KERMANSHAH
40768 3486 4853 1741 0 0 ---- HAMEDAN
40769 3407 4978 1703 0 2 ---- ARAK
40780 3363 4643 1337 0 2 ---- ILAM
@@ -5624,7 +5639,7 @@
40836 3083 5168 1831 0 0 ---- YASOGE
40841 3025 5697 1754 1748 2 T-P- KERMAN
40845 2927 5027 3 0 0 ---- KHARG
-40848 2953 5260 1484 1481 2 T-P- SHIRAZ
+40848 2953 5260 1484 0 2 T-P- SHIRAZ
40851 2947 5572 1739 1737 2 ---- SIRJAN
40853 2923 5657 2280 0 0 ---- BAFT
40854 2908 5845 940 0 2 ---- BAM
@@ -5697,6 +5712,7 @@
41024 2170 3918 17 15 0 T-T- JEDDAH (KING ABDUL AZIZ INT. AIRPORT)
41030 2143 3977 240 0 0 ---- MAKKAH
41031 2142 3986 394 0 0 ---- MINA
+41032 2133 3997 0 308 0 ---- ARAFAT
41033 2138 3986 300 0 0 ---- MUZDALIFAH
41035 2133 4027 2089 0 0 ---- AL-HADA
41036 2148 4054 1453 1478 0 ---- AL-TAIF
@@ -5723,19 +5739,20 @@
41154 2603 5053 0 135 0 ---- JABAL AL DUKHAN
41155 2602 5050 0 5 0 ---- F1 (FORMULA 1)
41156 2585 5055 0 2 0 ---- RAS AL BAR
-41160 2615 5120 6 4 0 ---- AI RUWAIS
+41160 2615 5120 5 3 0 ---- AI RUWAIS
41161 2562 5152 11 10 0 ---- ALKHOR AIRPORT
41162 2585 5097 3 2 0 ---- ALSHEHAIMIYA
-41164 2583 5127 19 18 0 ---- ALGUWAYRIYAH
+41164 2583 5127 18 17 0 ---- ALGUWAYRIYAH
41167 2540 5075 5 4 0 ---- DUKHAN
41168 2530 5155 4 3 0 ---- DOHA PORT
-41170 2525 5157 10 11 0 -T-- DOHA INTERNATIONAL AIRPORT
-41171 2538 5148 12 11 0 ---- QATAR UNIVERSITY
+41169 2527 5161 4 0 0 T--- HAMAD INTERNATIONAL AIRPORT
+41170 2525 5157 10 11 0 ---- DOHA INTERNATIONAL AIRPORT
+41171 2538 5148 24 23 0 ---- QATAR UNIVERSITY
41173 2518 5162 6 5 0 ---- ALWAKRAH
-41175 2500 5103 49 48 0 ---- ALKARANAA
+41175 2500 5103 48 47 0 ---- ALKARANAA
41176 2495 5157 10 5 0 ---- UMM SAID
-41177 2472 5122 42 41 0 ---- TURAYNA
-41178 2475 5082 8 7 0 ---- ABU SAMRA
+41177 2472 5122 46 45 0 ---- TURAYNA
+41178 2475 5082 7 5 0 ---- ABU SAMRA
41184 2562 5593 31 31 0 ---- RAS AL KHAIMAH INTERNATIONAL AIRPORT
41194 2525 5533 5 8 0 ---- DUBAI INTERNATIONAL AIRPORT
41196 2533 5552 33 35 0 ---- SHARJAH INTERNATIONAL AIRPORT
@@ -5745,45 +5762,45 @@
41217 2443 5465 27 16 0 TPTP ABU DHABI INTERNATIONAL AIRPORT
41218 2427 5560 262 265 0 ---- AL AIN INTERNATIONAL AIRPORT
41226 2363 5363 130 0 0 ---- MEDINA ZAYED
-41240 2621 5624 4 3 0 ---- KHASAB PORT
-41241 2616 5624 29 3 0 ---- KHASAB AIRPORT
-41242 2562 5625 10 20 0 ---- DIBA
-41244 2423 5592 372 299 0 ---- BURAIMI
-41246 2447 5664 2 4 0 ---- SOHAR MAJIS
+41240 2621 5624 4 0 0 ---- KHASAB PORT
+41241 2616 5624 29 0 0 ---- KHASAB AIRPORT
+41242 2562 5625 10 0 0 ---- DIBA
+41244 2423 5592 372 0 0 ---- BURAIMI
+41246 2447 5664 2 0 0 ---- SOHAR MAJIS
41249 2393 5620 633 0 0 ---- QUMAIRA
41250 2372 5591 257 0 0 ---- SUNAYNAH
-41252 2323 5643 327 244 0 ---- IBRI
-41253 2341 5743 322 322 0 ---- RUSTAQ
-41254 2307 5765 1986 1755 0 ---- SAIQ
-41255 2286 5755 462 460 0 ---- NIZWA
-41256 2360 5830 8 15 0 T--- MUSCAT INT'L AIRPORT
-41257 2331 5795 417 414 0 ---- SAMAIL
-41258 2363 5857 3 4 0 ---- MINA SULTAN QABOOS
-41259 2324 5726 2764 3009 0 ---- JABAL SHAMS
-41262 2235 5649 168 170 0 ---- FAHUD
-41263 2299 5732 592 589 0 ---- BAHLA
-41264 2250 5737 328 285 0 ---- ADAM AIRPORT
-41265 2274 5851 469 469 0 ---- IBRA
-41267 2267 5940 11 12 0 ---- QALHAT
-41268 2254 5948 13 14 0 ---- SUR
-41270 2230 5982 43 10 0 ---- RAS AL HADD
+41252 2323 5643 327 0 0 ---- IBRI
+41253 2341 5743 322 0 0 ---- RUSTAQ
+41254 2307 5765 1986 0 0 ---- SAIQ
+41255 2286 5755 462 0 0 ---- NIZWA
+41256 2360 5830 8 0 0 T--- MUSCAT INT'L AIRPORT
+41257 2331 5795 417 0 0 ---- SAMAIL
+41258 2363 5857 3 0 0 ---- MINA SULTAN QABOOS
+41259 2324 5726 2764 0 0 ---- JABAL SHAMS
+41262 2235 5649 168 0 0 ---- FAHUD
+41263 2299 5732 592 0 0 ---- BAHLA
+41264 2250 5737 328 0 0 ---- ADAM AIRPORT
+41265 2274 5851 469 0 0 ---- IBRA
+41267 2267 5940 11 0 0 ---- QALHAT
+41268 2254 5948 13 0 0 ---- SUR
+41270 2230 5982 43 0 0 ---- RAS AL HADD
41272 2382 5728 39 0 0 ---- SUWAIQ
-41275 2138 5705 133 139 0 ---- QARN ALAM
+41275 2138 5705 133 0 0 ---- QARN ALAM
41276 2079 5712 126 0 0 ---- UMZAMAIM
41280 2350 5848 105 0 0 ---- AL AMERAT
-41287 2087 5825 34 46 0 ---- JOBA
-41288 2067 5889 19 19 0 ---- MASIRAH
+41287 2087 5825 34 0 0 ---- JOBA
+41288 2067 5889 19 0 0 ---- MASIRAH
41290 1962 5763 0 40 0 ---- DUQM
41292 2251 5812 378 0 0 ---- AL MUDHAIBI
41293 2246 5885 316 0 0 ---- BIDIYA
-41295 1994 5710 156 153 0 ---- YAALONI
+41295 1994 5710 156 0 0 ---- YAALONI
41301 2005 5638 146 0 0 ---- HAIMA
-41304 1814 5518 273 269 0 ---- MARMUL
-41312 1693 5401 25 33 0 ---- MINA SALALAH
+41304 1814 5518 273 0 0 ---- MARMUL
+41312 1693 5401 25 0 0 ---- MINA SALALAH
41313 1725 5523 706 0 0 ---- JABAL NOOS
-41314 1768 5402 448 467 0 ---- THUMRAIT
-41315 1725 5409 881 878 0 ---- QAIROON HAIRITI
-41316 1704 5410 23 22 0 T--- SALALAH AIRPORT
+41314 1768 5402 448 0 0 ---- THUMRAIT
+41315 1725 5409 881 0 0 ---- QAIROON HAIRITI
+41316 1704 5410 23 0 0 T--- SALALAH AIRPORT
41363 1732 4460 1154 0 0 ---- AL-BOUQE
41367 1737 4995 610 0 0 ---- THAMUD
41372 1703 4377 1890 0 0 ---- SAADA
@@ -5891,17 +5908,24 @@
41781 2490 6693 16 11 0 ---- KARACHI MASROOR
41782 2480 6698 4 2 0 ---- KARACHI MANORA
41785 2463 6890 11 10 0 ---- BADIN
+41850 2634 8861 0 0 0 ---- TETULIA, PANCHAGOR
+41851 2609 8856 54 0 0 ---- DIMLA, NILPHAMARI
41852 2602 8840 0 0 0 ---- THAKURGAON
+41856 2580 8954 31 0 0 ---- RAJARHAT, KURIGRAM
41858 2575 8892 44 39 0 ---- SAIDPUR
41859 2573 8923 34 33 0 PPPP RANGPUR
41863 2565 8868 37 36 0 ---- DINAJPUR
+41881 2458 8854 18 0 0 ---- BADALGACHHI, NAOGAON
41883 2485 8937 20 18 0 TPPP BOGRA
41884 2493 8995 20 18 0 ---- JAMALPUR
41886 2472 9043 19 18 0 ---- MYMENSINGH
+41888 2489 9073 13 0 0 ---- NETROKONA SADAR
41890 2497 9188 0 0 0 ---- SYLHET A.P.
41891 2490 9188 35 34 0 PPPP SYLHET
41895 2437 8870 20 17 0 ---- RAJSHAHI
+41897 2426 8923 16 0 0 ---- TARASH, SIRAJGANI
41898 2445 8970 16 13 0 ---- SERAJGONJ
+41902 2433 9094 0 0 0 ---- NIKLI, KISHORGANJ
41907 2413 8905 14 13 0 PPPP ISHWARDI
41909 2425 8993 0 0 0 ---- TANGAIL
41915 2430 9173 23 22 0 ---- SRIMANGAL
@@ -5909,17 +5933,21 @@
41922 2385 9040 10 9 0 ---- KURMITOLA, DIA
41923 2377 9038 9 8 0 T--- DHAKA
41926 2365 8882 12 0 0 ---- CHUADANGA
+41927 2352 8915 12 0 0 ---- KUMARKHALI, KUSHTIA
41929 2360 8985 9 8 0 ---- FARIDPUR
41933 2343 9118 10 9 0 ---- COMILLA
41936 2318 8917 7 6 0 PPPP JESSORE
+41938 2301 8982 9 0 0 ---- GOPALGANJ SADAR
41939 2317 9018 13 7 0 ---- MADARIPUR
41941 2327 9070 7 6 0 ---- CHANDPUR
41943 2303 9142 8 6 0 PPPP FENI
+41944 2324 9206 0 0 0 ---- DIGHINALA, KHAGRACHHORI
41946 2272 8908 6 4 0 ---- SATKHIRA
41947 2278 8953 4 3 0 ---- KHULNA
41950 2275 9037 4 3 0 PPPP BARISAL
41951 2268 9065 5 4 0 ---- BHOLA
41953 2287 9110 6 5 0 ---- MAIJDICOURT
+41955 2060 9233 0 0 0 ---- SAINT MARTIN, COX'S BAZAR
41958 2260 8950 0 0 0 ---- MONGLA
41960 2233 9033 3 2 0 ---- PATUAKHALI
41963 2243 9110 4 2 0 ---- HATIA
@@ -5929,6 +5957,7 @@
41967 2248 9223 31 26 0 ---- KAPTAI
41977 2235 9182 34 33 0 TPPP CHITTAGONG (AMBAGAN)
41978 2227 9182 6 4 0 ---- CHITTAGONG (PATENGA)
+41980 2220 9222 0 0 0 ---- BANDARBAN SADAR
41984 2198 9023 9 2 0 ---- KHEPUPARA
41989 2182 9185 7 2 0 ---- KUTUBDIA
41992 2143 9193 4 2 0 PPPP COX'S BAZAR
@@ -5945,7 +5974,7 @@
42060 3233 7550 381 380 0 ---- KATHUA
42062 3227 7638 1211 1211 2 ---- DHARMSALA
42063 3258 7706 0 3166 0 ---- KYELONG
-42065 3227 7717 2039 2039 0 ---- MANALI
+42065 3227 7717 0 2039 0 ---- MANALI
42071 3163 7487 234 229 0 P-P- AMRITSAR
42074 3133 7533 0 229 0 ---- KAPURTHALA
42075 3147 7558 0 0 0 ---- JULLUNDUR
@@ -5994,7 +6023,7 @@
42182 2858 7720 216 211 0 TPTP NEW DELHI/SAFDARJUNG
42183 2840 7787 0 218 0 ---- BULANDSHAHR
42187 2883 7875 202 202 0 ---- MORADABAD
-42188 2875 7900 191 191 0 ---- RAMPUR
+42188 2875 7900 0 191 0 ---- RAMPUR
42189 2837 7940 169 167 0 P-P- BAREILLY
42190 2863 7980 188 187 0 ---- PILIBHIT
42191 2805 7912 0 0 0 ---- BUDAUN
@@ -6008,7 +6037,7 @@
42255 2750 7658 271 270 0 ---- ALWAR
42257 2750 7768 172 172 0 ---- MATHURA
42258 2722 7750 176 175 0 ---- BHARATPUR
-42260 2715 7797 169 168 0 P-P- AGRA
+42260 2715 7797 0 168 0 P-P- AGRA
42261 2717 7803 169 168 0 ---- AGRA
42262 2788 7806 191 186 0 ---- ALIGARH
42265 2723 7905 157 156 0 ---- MAINPURI
@@ -6037,7 +6066,7 @@
42354 2667 7783 176 175 0 ---- DHOLPUR
42358 2657 7880 168 168 0 ---- BHIND
42361 2623 7825 207 205 0 TPTP GWALIOR
-42364 2645 7902 151 151 0 ---- ETAWAH
+42364 2673 7898 151 151 0 ---- ETAWAH
42366 2643 8037 126 125 0 ---- KANPUR
42367 2640 8040 126 123 0 P--- KANPUR/CHAKERI
42368 2687 8093 111 111 0 ---- LUCKNOW
@@ -6066,10 +6095,10 @@
42413 2675 9235 120 120 0 ---- MAJBAT
42414 2620 9252 66 66 0 ---- CHAPARMUKH
42415 2662 9278 91 79 0 ---- TEZPUR
-42416 2672 9280 75 71 0 P-P- TEZPUR/BINDUKURI
+42416 2672 9280 0 71 0 P-P- TEZPUR/BINDUKURI
42419 2683 9358 83 81 0 ---- GOHPUR
42420 2652 9398 72 95 0 ---- GOLAGHAT
-42423 2607 9017 87 880 0 ---- PET JORHAT
+42423 2607 9017 0 880 0 ---- PET JORHAT
42426 2627 9482 0 1608 0 ---- TUENSANG
42435 2575 7138 193 193 0 P-P- BARMER
42439 2535 7262 168 167 0 ---- JALORE
@@ -6112,7 +6141,7 @@
42539 2420 7220 136 135 0 P-P- DEESA
42540 2460 7272 1171 1196 2 ---- MOUNT ABU
42542 2462 7388 514 509 0 P-PP UDAIPUR DABOK
-42543 2458 7370 586 581 0 ---- UDAIPUR
+42543 2458 7370 586 0 0 ---- UDAIPUR
42546 2488 7463 404 403 0 ---- CHITTORGARH
42547 2447 7490 496 494 0 ---- NIMACH
42552 2492 7558 364 350 0 ---- CHAMBAL/RAWAT BHATA
@@ -6201,14 +6230,14 @@
42807 2253 8833 6 6 0 ---- KOLKATA/ALIPORE
42809 2265 8845 6 6 0 TPTP KOLKATA/DUM DUM
42810 2265 8887 6 4 0 ---- BASIRHAT
-42811 2218 8820 7 4 0 ---- DIAMOND HARBOUR
+42811 2218 8820 7 0 0 ---- DIAMOND HARBOUR
42812 2225 8867 4 4 0 ---- CANNING
42830 2165 6967 7 5 0 ---- PORBANDAR
42832 2132 7031 51 50 0 ---- KESHOD
42834 2160 7122 115 0 0 ---- AMRELI
42837 2108 7178 9 8 0 ---- MAHUVA
42838 2175 7220 9 5 0 ---- BHAUNAGAR
-42840 2120 7283 12 10 0 P-PP SURAT
+42840 2120 7283 0 10 0 P-PP SURAT
42841 2173 7300 20 19 0 ---- BROACH
42846 2133 7425 205 204 0 ---- NANDURBAR
42849 2182 7562 252 250 0 ---- KHARGONE
@@ -6219,14 +6248,14 @@
42867 2110 7905 310 310 0 TPTP NAGPUR SONEGAON
42871 2147 8020 313 312 0 ---- GONDIA
42872 2123 8165 318 313 0 ---- MANA
-42874 2123 8165 298 296 4 T-TP PBO RAIPUR
+42874 2123 8165 0 296 4 T-TP PBO RAIPUR
42875 2122 8167 295 294 0 ---- RAIPUR
42876 2118 8128 301 281 0 ---- DURG
42883 2147 8397 149 0 0 ---- SAMBALPUR
42884 2188 8338 222 214 0 ---- RAIGARH
42886 2192 8408 230 228 0 PPPP JHARSIGUDA
42891 2162 8552 486 462 0 ---- KEONGJHARGARH
-42894 2193 8677 54 54 0 ---- BARIPADA
+42894 2193 8677 0 54 0 ---- BARIPADA
42895 2152 8693 18 19 0 PPPP BALASORE
42900 2178 8775 11 10 0 ---- CONTAI
42901 2162 8750 5 6 0 ---- DIGHA
@@ -6234,7 +6263,7 @@
42909 2090 7037 12 6 0 P-PP VERAVAL
42914 2072 7092 15 10 0 ---- DIU
42915 2062 7293 15 0 0 ---- BULSAR
-42916 2042 7284 12 0 0 ---- DAMAN
+42916 2042 7284 0 0 0 ---- DAMAN
42920 2013 7392 609 599 0 ---- NASIK OZAR
42921 1997 7381 601 598 0 ---- NASIK CITY
42925 2055 7453 437 436 0 ---- MALEGAON
@@ -6308,7 +6337,7 @@
43137 1725 8015 112 110 0 ---- KHAMMAM
43147 1735 8255 19 18 0 ---- TUNI
43149 1772 8330 4 3 0 ---- VISHAKHAPATNAM
-43150 1768 8330 70 45 0 TPTP VISHAKHAPATNAM/WALTAIR
+43150 1768 8330 70 0 0 TPTP VISHAKHAPATNAM/WALTAIR
43153 1638 7334 36 35 0 ---- DEVGARH
43157 1670 7423 570 568 0 ---- KOLHAPUR
43158 1685 7459 549 549 0 ---- SANGLI
@@ -6359,7 +6388,7 @@
43268 1333 7708 822 0 0 ---- TUMKUR
43271 1353 7850 701 696 0 ---- AROGYAVARAM
43272 1320 7806 858 857 0 ---- CHINTAMANI
-43275 1367 7958 105 103 0 ---- TIRUPATHI
+43275 1367 7958 0 103 0 ---- TIRUPATHI
43277 1315 7953 88 87 0 ---- TIRUTTANI
43278 1307 8020 6 6 0 ---- NUMGAMBAKKAM
43279 1300 8018 16 14 0 TPTP CHENNAI/MINAMBAKKAM
@@ -6419,7 +6448,7 @@
43359 992 7812 133 133 0 ---- MADURAI
43360 983 7808 141 131 0 ---- MADURAI
43361 973 7903 5 5 0 ---- TONDI
-43363 927 7922 11 11 0 ---- PAMBAN
+43363 927 7922 0 11 0 ---- PAMBAN
43364 1058 9255 7 7 0 ---- HUT BAY
43367 917 9283 10 9 0 ---- CAR NICOBAR
43368 915 9282 14 10 0 P-P- CAR NICOBAR
@@ -6484,7 +6513,7 @@
44285 4690 10277 1662 1662 0 ---- HUJIRT
44287 4613 10068 1859 1860 0 ---- BAYANHONGOR
44288 4627 10278 1813 1813 0 -T-- ARVAIHEER
-44292 4792 10687 1729 1307 1 -T-T ULAANBAATAR
+44292 4792 10687 1729 0 1 -T-T ULAANBAATAR
44294 4730 10748 1430 1429 0 ---- MAANTI
44298 4645 10822 1286 1287 0 ---- CHOIR
44302 4778 11212 926 926 0 ---- BAYAN-OVOO
@@ -6503,7 +6532,7 @@
44404 2930 8058 1848 1848 2 ---- DADELDHURA
44406 2925 8095 617 617 0 ---- DIPAYAL
44409 2880 8055 187 187 0 ---- DHANGADHI (ATARIYA)
-44416 2860 8162 670 720 0 ---- SURKHET
+44416 2860 8162 670 0 0 ---- SURKHET
44418 2810 8167 165 165 0 ---- NEPALGUNJ AIRPORT
44424 2928 8217 2300 2300 3 ---- JUMLA
44429 2805 8250 634 634 0 ---- DANG
@@ -6519,7 +6548,7 @@
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
-45007 2231 11392 7 6 0 ---- HONG KONG INTERNATIONAL AIRPORT
+45007 2231 11392 7 9 0 ---- HONG KONG INTERNATIONAL AIRPORT
45009 2241 11412 0 968 0 ---- TAI MO SHAN
45010 2236 11422 0 582 0 ---- TATE'S CAIRN
45011 2216 11356 114 110 0 ---- TAIPA GRANDE
@@ -6533,10 +6562,10 @@
45035 2247 11398 36 31 0 ---- LAU FAU SHAN
45036 2247 11436 0 15 0 ---- TAP MUN
45037 2245 11418 16 15 0 ---- TAI PO
-45038 2239 11396 0 29 0 ---- TUEN MUN
+45038 2239 11396 0 28 0 ---- TUEN MUN CHILDREN AND JUVENILE HOME
45039 2240 11421 13 6 0 ---- SHA TIN
45040 2238 11427 0 4 0 ---- SAI KUNG
-45041 2232 11426 0 38 0 ---- JUNK BAY
+45041 2232 11426 0 38 0 ---- TSUENG KWAN O
45042 2229 11391 52 61 0 ---- SHA LO WAN
45043 2225 11417 0 5 0 ---- WONG CHUK HANG
45044 2220 11403 79 72 0 ---- CHEUNG CHAU
@@ -6611,9 +6640,9 @@
47123 3710 12887 0 704 0 P--- SANGDONG
47124 3654 12750 79 79 0 ---- SEONGMU AB
47125 3702 12788 12 83 0 ---- JUNGWON AB
-47126 3693 12643 84 277 0 ---- MANGILSAN
+47126 3693 12643 0 277 0 ---- MANGILSAN
47127 3697 12795 117 116 0 ---- CHUNGJU
-47128 3672 12750 60 53 0 ---- CHEONGJU AB
+47128 3672 12750 0 53 0 ---- CHEONGJU AB
47129 3678 12649 30 29 0 ---- SEOSAN
47130 3699 12941 51 51 0 ---- ULJIN
47131 3664 12744 59 58 0 ---- CHEONGJU
@@ -6627,7 +6656,7 @@
47139 3597 12941 20 21 0 ---- POHANG AB
47140 3601 12676 25 24 0 ---- GUNSAN
47141 3590 12662 10 9 0 ---- GUNSAN AB
-47142 3588 12866 35 36 0 ---- DAEGU AB
+47142 3588 12866 0 36 0 ---- DAEGU AB
47143 3589 12862 65 65 0 ---- DAEGU
47144 3601 12678 0 232 0 ---- OSUNGSAN
47145 3678 12712 26 25 0 ---- CHEONAN
@@ -6638,7 +6667,7 @@
47150 3633 12656 17 16 0 ---- BORYEONG
47151 3560 12935 9 13 0 ---- ULSAN AIRPORT
47152 3556 12932 36 35 0 ---- ULSAN
-47153 3517 12893 5 3 0 ---- GIMHAE AB
+47153 3517 12893 0 3 0 ---- GIMHAE AB
47154 3613 12832 50 49 0 ---- GUMI
47155 3517 12857 38 38 0 ---- CHANGWON
47156 3517 12689 74 73 0 ---- GWANGJU
@@ -6673,7 +6702,7 @@
47401 4542 14168 12 3 0 T-T- WAKKANAI
47402 4494 14258 8 7 0 ---- KITAMIESASHI
47404 4436 14169 10 8 0 ---- HABORO
-47405 4460 14296 16 14 0 ---- OMU
+47405 4458 14296 16 14 0 ---- OMU
47406 4395 14163 24 24 0 ---- RUMOI
47407 4376 14237 140 120 0 ---- ASAHIKAWA
47409 4402 14428 44 38 0 ---- ABASHIRI
@@ -6687,12 +6716,12 @@
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 40 0 ---- KAMINOKUNI
+47422 4180 14007 0 32 0 ---- KAMINOKUNI
47423 4231 14097 50 40 0 ---- MURORAN
47423 4232 14097 0 3 0 ---- MURORAN
47424 4262 14155 8 6 0 ---- TOMAKOMAI
47425 4279 14166 30 27 0 ---- CHITOSE AB
-47426 4216 14278 39 37 0 ---- URAKAWA
+47426 4216 14278 38 37 0 ---- URAKAWA
47428 4187 14012 12 4 0 ---- ESASHI
47430 4182 14075 44 35 0 ---- HAKODATE
47432 4193 14078 0 1111 0 ---- HAKODATE/YOKOTSUDAKE
@@ -6795,9 +6824,9 @@
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 13976 37 6 0 ---- TOKYO
+47662 3569 13975 24 25 0 ---- TOKYO
47663 3407 13619 17 15 0 ---- OWASE
-47666 3460 13884 56 55 0 ---- IROZAKI
+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
@@ -6805,10 +6834,10 @@
47674 3515 14031 14 12 0 ---- KATSUURA
47675 3475 13936 76 74 0 ---- OSHIMA
47677 3411 13952 38 36 0 ---- MIYAKEJIMA
-47678 3311 13978 156 151 0 T-T- HACHIJOJIMA
+47678 3311 13978 153 151 0 T-T- HACHIJOJIMA
47678 3311 13978 153 152 0 TPTP HACHIJOJIMA/OMURE
47679 3545 13944 65 62 0 ---- ATSUGI NAS
-47680 3552 13940 112 109 0 ---- ZAMA/KASTNER
+47680 3551 13938 115 112 0 ---- ZAMA/KASTNER
47681 3475 13769 49 46 0 T-T- HAMAMATSU AB
47682 3560 14010 6 3 0 ---- CHIBA
47683 3567 13953 45 42 0 ---- CHOFU AIRPORT
@@ -6840,7 +6869,7 @@
47741 3546 13307 22 17 0 T-T- MATSUE
47742 3554 13324 4 2 0 ---- SAKAI
47743 3549 13324 7 4 0 ---- MIHO AB
-47744 3543 13334 9 6 0 ---- YONAGO
+47744 3543 13334 8 7 0 ---- YONAGO
47746 3549 13424 16 7 0 ---- TOTTORI
47746 3553 13419 0 6 0 ---- TOTTORI
47747 3554 13482 6 3 0 ---- TOYOOKA
@@ -6849,10 +6878,10 @@
47754 3440 13141 4 2 0 ---- HAGI
47755 3490 13207 21 19 0 ---- HAMADA
47756 3506 13401 148 146 0 ---- TSUYAMA
-47759 3501 13572 47 41 0 ---- KYOTO
+47759 3501 13572 53 41 0 ---- KYOTO
47761 3528 13624 93 87 0 ---- HIKONE
47762 3395 13093 20 3 0 ---- SHIMONOSEKI
-47764 3415 13222 5 2 0 ---- IWAKUNI
+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
@@ -6955,7 +6984,7 @@
47909 2838 12950 8 3 0 ---- NAZE
47909 2839 12955 295 294 0 T-T- NAZE/FUNCHATOGE
47911 2447 12298 19 16 0 ---- YONAGUNI AIRPORT
-47912 2447 12301 37 30 0 ---- YONAGUNIJIMA
+47912 2447 12301 36 30 0 ---- 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
@@ -6966,13 +6995,13 @@
47928 2636 12671 10 7 0 ---- KUMEJIMA AIRPORT
47929 2634 12680 6 5 0 ---- KUMEJIMA
47930 2620 12765 6 3 0 ---- NAHA AIRPORT
-47931 2635 12777 48 45 0 ---- KADENA
-47933 2627 12775 78 75 0 ---- FUTENMA
+47931 2636 12777 47 44 0 ---- KADENA
+47933 2627 12776 78 75 0 ---- FUTENMA
47936 2621 12769 50 28 0 ---- NAHA
47936 2620 12768 27 28 0 T-T- NAHA
47937 2615 12776 0 186 0 ---- NAHA/ITOKAZU
47938 2672 12778 76 73 0 ---- IEJIMA (US BASE)
-47940 2659 12796 7 6 0 ---- NAGO
+47940 2659 12797 7 6 0 ---- NAGO
47942 2743 12871 30 27 0 ---- OKINOERABU
47945 2583 13122 21 15 0 T-T- MINAMIDAITOJIMA
47946 2650 12790 106 0 1 ---- OKINAWA
@@ -7226,7 +7255,7 @@
48924 2105 10147 552 0 2 ---- LUANG NAMTHA (M.SING)
48925 2068 10200 636 0 0 ---- OUDOMXAY
48926 2025 10043 0 0 0 ---- HOUEI-SAI *
-48927 2042 10423 913 0 2 ---- VIENGSAY
+48927 2042 10423 0 0 2 ---- VIENGSAY
48928 2042 10407 0 0 0 ---- SAMNEUA
48930 1988 10213 305 0 0 ---- LUANG-PRABANG
48935 1947 10313 1094 0 2 ---- PLAINE DES JARRES (XIENGKHOUANG)
@@ -7240,7 +7269,7 @@
48943 1827 10295 172 0 0 ---- NAPHENG (PAKCHENG)
48944 1828 10263 185 0 0 ---- THANGONE
48945 1837 10365 0 0 0 ---- PARKXANH
-48946 1738 10465 152 0 0 ---- THAKHEK
+48946 1738 10485 152 0 0 ---- THAKHEK
48947 1655 10465 145 0 0 ---- SAVANNAKHET
48948 1667 10500 185 0 0 ---- SENO
48952 1568 10643 180 0 0 ---- SARAVANE
@@ -7257,11 +7286,11 @@
48969 1362 10297 31 0 0 ---- BANTEAY MEANCHEY
48970 1248 10617 23 0 0 ---- KRATIE
48971 1245 10718 690 0 0 ---- MONDOL KIRI
-48972 1352 10597 54 183 0 ---- STUNG TRENG
+48972 1352 10597 54 0 0 ---- STUNG TRENG
48973 1373 10698 330 0 0 ---- RATTANAKIRI
48978 1242 10717 0 0 0 ---- SEN MONOROM
48982 1162 10300 4 4 0 ---- KOS KONG
-48983 1063 10348 13 16 0 ---- SIHANOUK VILLE
+48983 1063 10348 13 0 0 ---- SIHANOUK VILLE
48985 1060 10418 4 4 0 P-P- KAMPOT
48986 1163 10298 13 0 0 ---- KOH KONG
48990 1160 10482 8 0 0 ---- KANDAL
@@ -7280,12 +7309,12 @@
50548 4920 12372 288 0 0 ---- XIAO'ERGOU
50557 4917 12523 243 0 0 T-T- NENJIANG
50564 4943 12735 235 0 0 ---- SUNWU
-50603 4867 11682 556 0 0 ---- XIN BARAG YOUQI
+50603 4868 11681 557 0 0 ---- XIN BARAG YOUQI
50632 4877 12192 739 0 0 ---- BUGT
50658 4805 12588 237 0 0 ---- KESHAN
50727 4717 11993 997 0 0 ---- ARXAN
50745 4738 12392 148 0 0 ---- QIQIHAR
-50756 4743 12697 240 0 0 ---- HAILUN
+50756 4745 12687 240 0 0 ---- HAILUN
50774 4770 12883 259 0 0 ---- YICHUN
50774 4772 12883 265 0 0 T-T- YICHUN
50788 4723 13197 65 0 0 ---- FUJIN
@@ -7304,7 +7333,7 @@
51076 4773 8808 737 0 0 T-T- ALTAY
51087 4698 8952 810 0 0 ---- FUYUN
51133 4673 8300 535 0 0 ---- TACHENG
-51156 4678 8572 1294 0 0 ---- HOBOKSAR
+51156 4681 8575 1323 0 0 ---- HOBOKSAR
51243 4562 8485 457 0 0 ---- KARAMAY
51288 4537 9053 1651 0 0 ---- BAYTIK SHAN
51334 4457 8282 330 0 0 ---- JINGHE
@@ -7375,7 +7404,7 @@
53513 4077 10740 1041 0 0 T-T- LINHE
53529 3910 10798 1381 0 0 ---- OTOG QI
53543 3983 10998 1459 0 0 ---- DONGSHENG
-53564 3938 11115 861 0 0 ---- HEQU
+53564 3936 11121 1037 0 0 ---- HEQU
53588 3895 11352 2210 0 0 ---- WUTAI SHAN
53593 3983 11457 910 0 0 ---- YU XIAN
53614 3847 10620 1112 0 0 T-T- YINCHUAN
@@ -7386,16 +7415,16 @@
53723 3779 10738 1356 0 0 ---- YANCHI
53764 3750 11110 951 0 0 ---- LISHI
53772 3761 11258 777 0 0 ---- TAIYUAN
-53772 3778 11255 779 0 0 T-T- TAIYUAN
+53772 3761 11258 776 0 0 T-T- TAIYUAN
53787 3707 11298 1042 0 0 ---- YUSHE
-53798 3707 11450 78 0 0 ---- XINGTAI
+53798 3718 11436 184 0 0 ---- XINGTAI
53845 3658 10945 1181 0 0 ---- YAN AN
53845 3657 10945 1180 0 0 T-T- YAN AN
53863 3703 11192 745 0 0 ---- JIEXIU
53898 3604 11413 196 0 0 ---- ANYANG
53915 3554 10667 1348 0 0 T-T- PINGLIANG
53923 3572 10763 1423 0 0 ---- XIFENGZHEN
-53959 3504 11105 365 0 0 ---- YUNCHENG
+53959 3511 11107 377 0 0 ---- YUNCHENG
53975 3547 11240 659 0 0 ---- YANGCHENG
54012 4458 11760 997 0 0 ---- XI UJIMQIN QI
54026 4457 12090 266 0 0 ---- JARUD QI
@@ -7510,7 +7539,8 @@
56671 2665 10225 1788 0 0 ---- HUILI
56684 2640 10325 2189 0 0 ---- HUIZE
56691 2687 10428 2236 0 0 T-T- WEINING
-56739 2498 9850 1697 0 0 T-T- TENGCHONG
+56739 2498 9850 1697 0 0 ---- TENGCHONG
+56739 2498 9851 1697 0 0 T-T- TENGCHONG
56748 2512 9918 1649 0 0 ---- BAOSHAN
56751 2570 10018 1992 0 0 ---- DALI
56763 2573 10187 1120 0 0 ---- YUANMOU
@@ -7534,7 +7564,7 @@
57025 3452 10738 781 0 0 ---- FENGXIANG
57036 3429 10893 398 0 0 T-T- XI'AN
57046 3447 11008 2063 0 0 ---- HUA SHAN
-57067 3404 11103 570 0 0 ---- LUSHI
+57067 3408 11107 660 0 0 ---- LUSHI
57071 3482 11243 333 0 0 ---- MENGJIN
57083 3472 11365 111 0 0 T-T- ZHENGZHOU
57127 3307 10703 509 0 0 T-T- HANZHONG
@@ -7571,7 +7601,7 @@
57655 2847 11040 143 143 0 ---- YUANLING
57662 2905 11168 151 0 0 ---- CHANGDE
57679 2820 11308 46 0 0 T-T- CHANGSHA
-57687 2823 11287 68 0 0 ---- CHANGSHA
+57687 2811 11279 120 0 0 ---- CHANGSHA
57707 2730 10523 1511 0 0 ---- BIJIE
57712 2773 10695 984 0 0 ---- HUICHUAN
57713 2770 10688 845 0 0 ---- ZUNYI
@@ -7598,8 +7628,8 @@
57993 2587 11500 134 0 0 T-T- GANZHOU
58027 3428 11715 42 0 0 T-T- XUZHOU
58040 3485 11913 10 0 0 ---- GANYU
-58102 3388 11577 42 0 0 ---- BOXIAN
-58141 3363 11893 14 14 0 ---- HUAIYIN
+58102 3379 11574 40 0 0 ---- BOXIAN
+58141 3363 11893 14 0 0 ---- HUAIYIN
58144 3360 11903 19 0 0 ---- QINGJIANG
58150 3375 12030 3 0 0 T-T- SHEYANG
58203 3286 11573 33 0 0 T-T- FUYANG
@@ -7613,7 +7643,7 @@
58321 3178 11730 27 0 0 ---- HEFEI
58338 3115 11858 18 0 0 ---- WUHUXIAN
58345 3143 11948 8 0 0 ---- LIYANG
-58362 3142 12145 9 8 0 T-T- SHANGHAI (BAOSHAN)
+58362 3142 12145 9 0 0 T-T- SHANGHAI (BAOSHAN)
58424 3062 11697 62 0 0 T-T- ANQING
58424 3053 11705 20 0 0 T-T- ANQING
58437 3013 11815 1836 0 0 ---- HUANG SHAN
@@ -7719,15 +7749,15 @@
60033 2717 -1322 64 63 0 ---- LAAYOUNE
60035 2844 -1386 30 25 0 ---- FUERTEVENTURA/AEROPUERTO
60040 2895 -1360 21 14 0 ---- LANZAROTE/AEROPUERTO
-60060 2937 -1018 66 50 0 ---- SIDI IFNI
-60096 2371 -1593 9 12 0 --T- DAKHLA
+60060 2937 -1018 0 50 0 ---- SIDI IFNI
+60096 2371 -1593 9 0 0 --T- DAKHLA
60100 3579 -581 0 11 0 ---- TANGER-PORT
-60101 3572 -591 21 14 0 ---- TANGER (AERODROME)
-60105 3515 -612 49 66 0 ---- LARACHE
-60106 3517 -531 305 287 0 ---- CHEFCHAOUEN
+60101 3572 -591 0 14 0 ---- TANGER (AERODROME)
+60105 3515 -612 0 66 0 ---- LARACHE
+60106 3517 -531 0 287 0 ---- CHEFCHAOUEN
60107 3518 -385 14 27 0 ---- AL HOCEIMA
60115 3478 -193 470 468 0 --P- OUJDA
-60120 3429 -659 14 4 0 ---- KENITRA
+60120 3429 -659 0 4 0 ---- KENITRA
60127 3422 -400 510 509 0 ---- TAZA
60128 3440 -290 0 415 0 ---- TAOURIRT
60135 3404 -676 79 74 0 ---- RABAT-SALE
@@ -7742,7 +7772,7 @@
60177 3295 -762 0 408 0 ---- SETTAT
60178 3286 -697 781 771 0 ---- KHOURIBGA
60185 3228 -923 45 43 0 ---- SAFI
-60190 3253 -628 518 507 0 ---- KASBA-TADLA
+60190 3253 -628 0 507 0 ---- KASBA-TADLA
60191 3236 -640 472 468 0 T--- BENI-MELLAL
60195 3268 -473 1515 1508 2 ---- MIDELT
60200 3257 -195 1143 1142 2 ---- BOUARFA
@@ -7751,91 +7781,140 @@
60223 3103 -848 0 667 0 ---- TAKERKOUSTE
60230 3162 -802 466 464 0 ---- MARRAKECH
60237 3122 -792 0 2680 0 ---- OUKAIMDEN
-60250 3038 -957 23 18 0 ---- AGADIR INEZGANNE
-60252 3033 -940 23 74 0 T--- AGADIR AL MASSIRA
+60250 3038 -957 0 18 0 ---- AGADIR INEZGANNE
+60252 3033 -940 0 74 0 T--- AGADIR AL MASSIRA
60253 3050 -882 266 264 0 ---- TAROUDANT
60265 3093 -690 1140 1136 2 ---- OUARZAZATE
60270 2968 -973 261 260 0 ---- TIZNIT
60280 2902 -1005 301 300 0 ---- GUELMIN
60285 2845 -1116 204 199 0 ---- TAN-TAN
-60318 3559 -533 10 4 0 ---- TETUAN
+60318 3559 -533 0 4 0 ---- TETUAN
60320 3590 -534 88 87 0 ---- CEUTA
60335 2673 -1168 0 110 0 ---- SMARA
60338 3528 -296 55 47 0 ---- MELILLA
-60340 3497 -302 177 178 0 ---- NADOR-AROUI
-60351 3679 588 10 8 0 ---- JIJEL- ACHOUAT
+60340 3497 -302 0 178 0 ---- NADOR-AROUI
+60351 3679 588 10 11 0 ---- JIJEL- ACHOUAT
60353 3682 588 6 2 0 ---- JIJEL-PORT
60355 3688 690 3 2 0 ---- SKIKDA
-60360 3683 782 4 3 0 P-P- ANNABA
+60360 3683 782 8 5 0 ---- ANNABA
60367 3690 844 13 11 0 ---- EL-KALA
+60368 3675 808 4 3 0 ---- TARF
60369 3677 310 12 9 0 ---- ALGER-PORT
+60370 3672 310 0 0 0 ---- KOUBA
+60371 3678 303 0 0 0 ---- OUED KORICHE
+60372 3678 300 0 0 0 ---- BOUZAREAH
+60374 3678 288 0 0 0 ---- AIN BENAIN
+60376 3678 325 0 0 0 ---- BORDJ EL BAHRI
+60379 3677 333 0 0 0 ---- REGHAIA
+60380 3661 292 0 0 0 ---- TESSALA EL MERDJA
+60381 3672 305 0 0 0 ---- EL HARRACH
60387 3692 395 8 5 0 ---- DELLYS
-60390 3668 322 29 25 0 TPTP DAR-EL-BEIDA
-60395 3670 405 189 188 0 ---- TIZI-OUZOU
+60390 3668 322 29 25 0 T-T- DAR-EL-BEIDA
+60393 3670 320 0 0 0 ---- DAR EL BEIDA VILLE
+60394 3668 310 0 0 0 ---- BARAKI
+60395 3670 413 154 153 0 ---- TIZI-OUZOU
60401 3675 509 4 3 0 ---- BEJAIA-PORT
-60402 3672 507 3 2 0 ---- BEJAIA-AEROPORT
+60402 3672 507 7 6 0 ---- BEJAIA-AEROPORT
60403 3647 747 228 227 0 ---- GUELMA
60405 3650 772 111 110 0 ---- BOUCHEGOUF
60410 3650 133 18 17 0 ---- TENES
-60415 3632 353 0 748 0 ---- AIN-BESSAM
+60415 3628 367 752 748 2 ---- AIN-BESSAM
60417 3638 388 560 555 0 ---- BOUIRA
-60419 3628 662 694 693 0 --P- CONSTANTINE
+60419 3628 662 692 706 2 ---- CONSTANTINE
60421 3586 712 891 889 2 ---- OUM EL BOUAGHI
-60423 3628 797 680 0 0 ---- SOUK AHRAS
-60425 3622 133 144 143 0 ---- CHLEF
+60423 3625 795 831 820 2 ---- SOUK AHRAS
+60425 3622 133 163 153 0 ---- CHLEF
60430 3629 223 721 715 0 ---- MILIANA
-60437 3628 273 1036 1030 0 ---- MEDEA
-60444 3607 476 930 928 0 ---- BORDJ-BOU-ARRERIDJ
-60445 3618 525 1040 1033 0 ---- SETIF
+60437 3628 273 1036 1030 2 ---- MEDEA
+60444 3607 467 957 955 2 ---- BORDJ-BOU-ARRERIDJ
+60445 3617 532 1015 1009 2 ---- SETIF/AIN ARNAT
60452 3582 -27 4 3 0 ---- ARZEW
-60457 3588 12 138 137 0 ---- MOSTAGANEM
+60457 3588 12 141 137 0 ---- MOSTAGANEM
60461 3570 -65 22 0 0 ---- ORAN-PORT
60467 3567 450 442 441 0 ---- M'SILA
-60468 3575 632 826 822 2 ---- BATNA
+60468 3575 632 826 821 2 ---- BATNA
60471 3533 533 461 460 0 ---- BARIKA
-60475 3542 811 823 821 0 ---- TEBESSA
-60476 3547 708 987 983 0 ---- KHENCHELLA
+60475 3547 811 820 814 0 ---- TEBESSA
+60476 3547 708 987 983 2 ---- KHENCHELLA
60481 3547 -52 111 110 0 ---- ORAN-TAFARAOUI
-60490 3563 -60 91 90 0 PPPP ORAN-SENIA
+60490 3563 -60 91 91 0 ---- ORAN-SENIA
+60492 3575 62 96 94 0 ---- RELIZANE
60506 3560 30 476 474 0 ---- MASCARA-MATEMORE
-60507 3522 15 513 511 0 ---- MASCARA-GHRISS
-60511 3535 147 978 977 2 ---- TIARET
-60514 3517 231 801 800 2 ---- KSAR CHELLALA
+60507 3522 23 513 516 0 ---- MASCARA-GHRISS
+60511 3535 147 978 989 2 ---- TIARET
+60514 3517 231 800 801 2 ---- KSAR CHELLALA
60515 3533 420 461 459 0 ---- BOU-SAADA
60517 3510 -187 5 4 0 ---- GHAZAOUET
60518 3529 -135 70 68 0 ---- BENI-SAF
60520 3520 -62 476 475 0 ---- SIDI-BEL-ABBES
60522 3482 -178 428 427 0 ---- MAGHNIA
-60525 3479 573 89 82 0 ---- BISKRA
-60531 3502 -147 247 246 0 ---- TLEMCEN-ZENATA
-60535 3468 325 1185 1180 2 ---- DJELFA
+60525 3479 573 89 88 0 ---- BISKRA
+60531 3502 -147 247 248 0 ---- TLEMCEN-ZENATA
+60535 3315 338 1185 1180 2 ---- DJELFA
60536 3486 15 752 750 2 ---- SAIDA
-60540 3415 7 1001 1000 2 ---- EL-KHEITER
+60540 3353 7 1001 1000 2 ---- EL-KHEITER
60545 3377 293 763 762 2 ---- LAGHOUAT
-60549 3358 -28 1150 1149 2 ---- MECHERIA
+60549 3353 -28 1124 1123 2 ---- MECHERIA
60550 3367 100 1347 1341 2 ---- EL-BAYADH
-60555 3311 613 92 87 0 ---- TOUGGOURT
-60557 3327 -30 1166 0 2 ---- NAAMA
-60559 3350 678 69 64 0 P-P- EL-OUED
-60560 3277 -60 1059 1058 2 ---- AIN-SEFRA
-60563 3293 328 764 763 2 ---- HASSIR'MEL
-60566 3240 380 469 468 0 P-P- GHARDAIA
-60571 3150 -225 816 809 2 TPTP BECHAR
-60580 3193 540 148 144 0 ---- OUARGLA
-60581 3167 615 144 142 0 ---- HASSI-MESSAOUD
-60590 3057 287 403 397 0 P-P- EL-GOLEA
+60555 3307 608 92 85 0 ---- TOUGGOURT
+60557 3327 -30 1167 1166 2 ---- NAAMA
+60559 3350 678 69 62 0 ---- EL-OUED
+60560 3277 -60 1065 1064 2 ---- AIN-SEFRA
+60563 3293 330 769 764 2 ---- HASSIR'MEL
+60566 3240 380 469 461 0 ---- GHARDAIA
+60571 3150 -225 816 811 2 T-T- BECHAR
+60580 3193 540 148 152 0 ---- OUARGLA
+60581 3167 615 146 140 0 ---- HASSI-MESSAOUD
+60590 3057 287 403 398 0 ---- EL-GOLEA
+60593 2917 -523 0 565 0 ---- HASSI KHEBBI
+60595 2917 -30 0 0 0 ---- TALMINIE
60602 3013 -217 505 500 0 ---- BENI-ABBES
60603 2972 670 252 253 0 ---- RHOURD NOUSS
-60607 2925 28 317 312 0 ---- TIMIMOUN
-60611 2805 963 562 561 0 ---- IN-AMENAS
-60620 2788 -18 283 279 0 P-P- ADRAR
-60630 2723 250 269 268 0 PPTP IN-SALAH
-60640 2650 842 544 543 0 ---- ILLIZI
-60656 2770 -817 439 443 0 --T- TINDOUF
-60670 2427 947 970 968 2 ---- DJANET
-60680 2280 543 1364 1362 2 TPTP TAMANRASSET
+60605 2942 -325 550 0 0 ---- TABELBALA
+60607 2925 28 317 313 0 ---- TIMIMOUN
+60611 2805 963 562 563 0 ---- IN-AMENAS
+60612 2205 858 0 770 0 ---- TIRIRINE
+60613 2870 893 0 610 0 ---- OUHANET
+60617 2732 372 0 354 0 ---- TAMAZGUIDA
+60619 2847 252 0 636 0 ---- TAGUENTOUR
+60620 2782 -18 283 280 0 ---- ADRAR
+60621 2787 117 0 390 0 ---- MATRIOUENE
+60623 2740 883 0 0 0 ---- ADEB LERRACH
+60624 2675 -725 0 400 0 ---- GARADJEBILET
+60630 2723 250 269 273 0 --T- IN-SALAH
+60633 2322 258 0 443 0 ---- IN ZIZA
+60639 2843 755 0 471 0 ---- TINFOUYE
+60640 2650 842 541 542 0 ---- ILLIZI
+60645 2672 -18 0 214 0 ---- REGGANE
+60650 2642 537 0 614 0 ---- AMGUID
+60656 2770 -817 449 443 0 --T- TINDOUF
+60660 2527 373 0 556 0 ---- ARAK
+60661 2522 512 0 800 0 ---- ABDENNIZI
+60662 2582 818 0 1291 0 ---- FADNOUNE
+60663 2472 465 0 1054 0 ---- MOULAY LAHCEN
+60664 2483 832 0 1104 0 ---- BORDJ HAOUS
+60667 2460 1022 0 719 0 ---- TINALKOUN
+60670 2427 947 970 966 2 ---- DJANET
+60672 2422 553 0 1343 0 ---- MERTOUTEK
+60673 2303 787 0 1179 0 ---- TADANTE
+60674 2038 247 0 677 0 ---- TAOUNDART
+60675 2340 100 0 358 0 ---- OUALLEN
+60676 2348 1123 0 912 0 ---- IN AZZANE
+60677 2533 780 0 1240 0 ---- AFARA
+60679 2327 563 0 2710 0 ---- ASSEKREM
+60680 2280 543 1377 1377 2 T-T- TAMANRASSET
+60681 2168 713 0 573 0 ---- OUED TAHAGGARET
+60682 2318 677 0 1105 0 ---- TINTARABINE
+60685 2232 112 0 392 0 ---- BIDON 5
60686 2133 95 399 398 0 ---- BORDJ-BADJ-MOKHTAR
-60690 1957 577 401 400 0 ---- IN-GUEZZAM
+60688 2157 258 0 561 0 ---- TIREK
+60689 2042 180 0 0 0 ---- TIMIAOUINI
+60690 1957 577 403 404 0 ---- IN-GUEZZAM
+60691 1943 465 0 477 0 ---- ANESBARAKA
+60692 1957 575 0 401 0 ---- IN GUEZZAM
+60693 2057 612 0 471 0 ---- IN ATEI
+60694 2097 745 0 517 0 ---- IN AZAOUA
+60695 1997 298 0 0 0 ---- TIN ZAOUATENE
60710 3695 875 21 20 0 ---- TABARKA
60714 3725 980 3 5 0 PPP- BIZERTE
60715 3683 1023 4 4 0 TPP- TUNIS-CARTHAGE
@@ -7858,6 +7937,7 @@
60760 3392 817 86 86 0 PPT- TOZEUR
60764 3370 897 46 44 0 ---- KEBILI
60765 3388 1010 5 4 0 ---- GABES
+60767 3372 992 0 0 0 ---- GABES MATMATA
60769 3386 1077 4 3 0 PPP- DJERBA MELLITA
60770 3335 1048 117 116 0 ---- MEDENINE
60772 3292 1045 0 215 0 ---- TATAOUINE
@@ -7916,18 +7996,18 @@
61499 1670 -960 223 0 0 ---- AIOUN EL ATROUSS
61510 1523 -1217 0 60 0 ---- SELIBABY
61520 1587 -593 0 261 0 ---- BASSIKOUNOU
-61600 1605 -1645 4 2 0 ---- SAINT-LOUIS
-61612 1664 -1493 7 6 0 ---- PODOR
-61627 1538 -1512 21 20 0 ---- LINGUERE
-61630 1563 -1325 17 15 0 ---- MATAM
-61641 1473 -1750 24 24 0 TPTP DAKAR/YOFF
-61666 1465 -1623 9 7 0 ---- DIOURBEL
-61679 1413 -1607 7 6 0 ---- KAOLACK
-61687 1377 -1368 50 49 0 PPTP TAMBACOUNDA
-61695 1255 -1627 23 19 0 ---- ZIGUINCHOR
-61697 1204 -1675 13 49 0 ---- CAP-SKIRRING
-61698 1288 -1497 10 8 0 ---- KOLDA
-61699 1257 -1222 167 165 0 ---- KEDOUGOU
+61600 1605 -1645 0 2 0 ---- SAINT-LOUIS
+61612 1664 -1493 0 6 0 ---- PODOR
+61627 1538 -1512 0 20 0 ---- LINGUERE
+61630 1563 -1325 0 15 0 ---- MATAM
+61641 1473 -1750 0 24 0 TPTP DAKAR/YOFF
+61666 1465 -1623 0 7 0 ---- DIOURBEL
+61679 1413 -1607 0 6 0 ---- KAOLACK
+61687 1377 -1368 0 49 0 PPTP TAMBACOUNDA
+61695 1255 -1627 0 19 0 ---- ZIGUINCHOR
+61697 1204 -1675 0 49 0 ---- CAP-SKIRRING
+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
61707 1348 -1557 11 11 0 ---- JENOI
@@ -7939,25 +8019,25 @@
61722 1357 -1593 2 2 0 ---- SAPU
61731 1332 -1422 4 4 0 --P- BASSE
61733 1388 -1340 0 0 0 ---- FATOTO
-61766 1188 -1565 36 39 0 ---- BISSAU (AEROPORTO INT. OSVALDO VIEIRA)
+61766 1188 -1565 36 39 0 ---- BISSAU AEROPORTO
61769 1158 -1548 20 18 0 ---- BOLAMA
61770 1222 -1567 10 0 0 ---- BISSORA
61777 1222 -1565 0 39 0 ---- BISSORA
61781 1217 -1467 43 42 0 ---- BAFATA
61797 1113 -1502 0 6 0 ---- CACINE
-61802 1257 -1352 90 90 0 ---- KOUNDARA
-61809 1132 -1230 1026 1025 0 ---- LABE
-61811 1143 -917 366 364 0 ---- SIGUIRI
-61816 1093 -1482 69 69 0 ---- BOKE
-61818 1005 -1287 459 458 0 ---- KINDIA
-61820 1037 -1208 784 785 0 ---- MAMOU
-61829 1038 -930 384 376 0 ---- KANKAN
-61831 957 -1362 49 49 0 --T- CONAKRY
-61832 957 -1362 26 26 0 ---- CONAKRY/GBESSIA
-61833 1002 -1075 459 463 0 ---- FARANAH/BADALA
-61834 942 -1008 525 412 0 ---- KISSIDOUGOU
-61847 852 -950 544 559 0 ---- MACENTA
-61849 775 -827 470 475 0 ---- N'ZEREKORE
+61802 1257 -1352 0 90 0 ---- KOUNDARA
+61809 1132 -1230 0 1025 0 ---- LABE
+61811 1143 -917 0 364 0 ---- SIGUIRI
+61816 1093 -1482 0 69 0 ---- BOKE
+61818 1005 -1287 0 458 0 ---- KINDIA
+61820 1037 -1208 0 785 0 ---- MAMOU
+61829 1038 -930 0 376 0 ---- KANKAN
+61831 957 -1362 0 49 0 --T- CONAKRY
+61832 957 -1362 0 26 0 ---- CONAKRY/GBESSIA
+61833 1002 -1075 0 463 0 ---- FARANAH/BADALA
+61834 922 -1022 0 412 0 ---- KISSIDOUGOU
+61847 852 -950 0 559 0 ---- MACENTA
+61849 775 -827 0 475 0 ---- N'ZEREKORE
61856 861 -1320 27 25 0 PPPP LUNGI
61866 753 -1250 8 7 0 ---- BONTHE
61873 855 -1205 84 0 0 ---- MAKENI
@@ -7980,7 +8060,7 @@
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 746 0 ---- LE COLORADO
+61979 -2091 5542 0 742 0 ---- LE COLORADO
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)
@@ -7994,13 +8074,13 @@
62002 3187 1098 621 620 2 ---- NALUT
62007 3288 1208 3 3 0 ---- ZUARA
62008 3208 1255 691 691 2 ---- YEFREN
-62010 3270 1308 82 63 0 ---- TRIPOLI INTERNATIONAL AIRPORT
+62010 3270 1308 0 63 0 ---- TRIPOLI INTERNATIONAL AIRPORT
62010 3274 1308 0 64 0 T--- SWANI
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
-62018 3057 1572 90 78 0 ---- ABU NJAYM
+62018 3057 1572 90 0 0 ---- ABU NJAYM
62019 3120 1657 14 13 0 ---- SIRTE
62053 3210 2027 132 131 0 T-T- BENINA
62054 3252 2088 335 334 0 ---- AL-MARJ
@@ -8013,6 +8093,7 @@
62121 2952 1293 623 0 0 ---- EL HAMADA
62124 2702 1445 432 435 0 T-T- SEBHA
62131 2912 1595 267 0 0 ---- HON
+62140 2859 1730 336 0 0 ---- ZALLA
62161 2903 2157 60 59 0 ---- JALO
62176 2975 2453 -1 -2 0 ---- GIGHBUB
62200 2660 1278 463 463 0 ---- OBARI
@@ -8020,11 +8101,11 @@
62259 2580 2113 261 260 0 ---- TAZERBO
62271 2422 2330 436 417 0 ---- KUFRA
62301 3162 2590 25 24 0 ---- SIDI BARRANI
-62305 3157 2513 6 180 0 ---- SALLUM PLATEAU
+62305 3157 2513 6 0 0 ---- SALLUM PLATEAU
62306 3133 2722 30 29 0 T--- MERSA MATRUH
62309 3103 2844 18 17 0 ---- DABAA
62315 3118 2987 14 17 0 ---- PORT ALEXANDRIA
-62318 3118 2995 7 -2 0 ---- NOUZHA
+62318 3118 2995 7 0 0 ---- NOUZHA
62324 3145 3037 3 2 0 ---- ROSETTA
62325 3155 3108 2 1 0 ---- BALTIM
62329 3147 3177 4 0 0 ---- PORT DAMIETTA
@@ -8036,7 +8117,7 @@
62339 3103 3047 0 2 0 ---- DAMANHOUR
62345 3065 3070 16 16 0 ---- TAHRIR
62354 3058 3150 13 8 0 ---- ZAGAZIG
-62357 3040 3036 1 49 0 ---- WADI EL NATROON AGRIMET
+62357 3040 3036 1 0 0 ---- WADI EL NATROON AGRIMET
62360 3060 3102 14 12 0 ---- SHEBIN EL KOM
62366 3011 3141 75 116 0 ---- CAIRO
62369 3014 3126 17 17 0 ---- BAHTIM AGRIMET
@@ -8165,54 +8246,54 @@
63500 608 3763 1290 0 2 ---- ARBA MINCH
63533 533 3957 1544 0 0 ---- NEGHELLE
63602 305 3092 1211 1204 2 ---- ARUA
-63612 312 3564 515 506 2 ---- LODWAR
+63612 312 3564 0 506 2 ---- LODWAR
63619 360 3904 0 1113 2 ---- MOYALE
-63624 394 4185 231 331 4 ---- MANDERA
+63624 394 4185 0 331 4 ---- MANDERA
63628 229 3158 0 693 0 ---- PARAA
63630 275 3233 1105 1104 2 ---- GULU
-63641 233 3799 1345 1345 2 ---- MARSABIT
+63641 233 3799 0 1345 2 ---- MARSABIT
63654 168 3172 1147 1146 2 ---- MASINDI
63658 172 3361 1123 1132 2 ---- SOROTI
-63661 102 3501 1875 561 2 ---- KITALE
+63661 102 3501 0 561 2 ---- KITALE
63671 174 4009 0 244 4 ---- WAJIR
63674 18 3010 961 959 2 ---- KASESE
63680 32 3261 1140 1144 2 ---- KAMPALA
63682 45 3318 1173 1175 2 ---- JINJA
63684 68 3417 1171 1170 2 ---- TORORO
-63686 50 3531 2133 646 2 ---- ELDORET
+63686 50 3531 0 646 2 ---- ELDORET
63687 28 3476 0 483 2 ---- KAKAMEGA
-63688 40 3522 2104 1941 2 ---- ELDORET INTERNATIONAL AIRPORT
-63695 5 3765 1554 1524 2 ---- MERU
+63688 40 3522 0 1941 2 ---- ELDORET INTERNATIONAL AIRPORT
+63695 5 3765 0 1524 2 ---- MERU
63702 -62 3065 1413 1412 2 ---- MBARARA
63705 5 3245 1155 1155 2 ---- ENTEBBE AIRPORT
-63708 -9 3472 1146 1149 2 ---- KISUMU
+63708 -9 3472 0 1149 2 ---- KISUMU
63709 -68 3479 0 1771 2 ---- KISII
-63710 -37 3527 2184 1976 2 ---- KERICHO
+63710 -37 3527 0 1976 2 ---- KERICHO
63711 -40 3415 0 1143 2 ---- SUBA
-63714 -27 3610 1901 1901 2 ---- NAKURU
-63717 -44 3697 1759 1798 2 ---- NYERI
-63720 -49 3746 1493 1494 2 ---- EMBU
-63723 -48 3965 147 128 4 ---- GARISSA
+63714 -27 3610 0 1901 2 ---- NAKURU
+63717 -44 3697 0 1798 2 ---- NYERI
+63720 -49 3746 0 1494 2 ---- EMBU
+63723 -48 3965 0 128 4 ---- GARISSA
63726 -125 2998 1869 1867 2 ---- KABALE
-63729 -133 3182 1143 1137 2 -P-- BUKOBA
+63729 -133 3182 0 1137 2 -P-- BUKOBA
63733 -150 3379 1147 1147 2 ---- MUSOMA
-63737 -108 3586 1890 1585 2 ---- NAROK
-63740 -133 3692 1624 1624 2 ---- JOMO KENYATTA NTERNATIONAL AIRPORT
-63741 -130 3676 1798 1798 2 T-T- DAGORETTI CORNER
-63742 -132 3681 1679 1676 2 ---- WILSON
+63737 -108 3586 0 1585 2 ---- NAROK
+63740 -133 3692 0 1624 2 ---- JOMO KENYATTA NTERNATIONAL AIRPORT
+63741 -130 3676 0 1798 2 T-T- DAGORETTI CORNER
+63742 -132 3681 0 1676 2 ---- WILSON
63756 -247 3292 1140 1139 2 -PP- MWANZA
-63766 -229 3782 1000 1000 2 ---- MAKINDU
-63772 -220 4084 30 2 4 ---- LAMU
+63766 -229 3782 0 1000 2 ---- MAKINDU
+63772 -220 4084 0 2 4 ---- LAMU
63784 -365 3335 1000 0 2 ---- SHINYANGA
63789 -333 3661 1387 1387 2 ---- ARUSHA
63790 -335 3733 831 854 2 ---- MOSHI
63791 -342 3707 896 891 2 -PP- KILIMANJARO INT
63793 -340 3856 0 560 2 ---- VOI
-63799 -323 3856 23 20 4 ---- MALINDI
+63799 -323 4010 0 20 4 ---- MALINDI
63801 -488 2963 885 882 2 -PT- KIGOMA
63810 -480 3472 1307 0 2 ---- SINGIDA
63816 -408 3772 872 872 2 ---- SAME
-63820 -401 3961 55 5 4 ---- MOMBASA INTERNATIONAL AIRPORT
+63820 -401 3961 0 5 4 ---- MOMBASA INTERNATIONAL AIRPORT
63832 -508 3283 1190 1181 2 -PP- TABORA AIRPORT
63840 -543 3803 756 0 0 ---- HANDENI
63844 -508 3907 35 39 0 ---- TANGA
@@ -8300,35 +8381,35 @@
64390 -332 2932 783 782 2 -P-- BUJUMBURA
64397 -283 3033 1755 1755 2 ---- MUYINGA
64400 -482 1190 17 17 0 TPTP POINTE-NOIRE
-64401 -420 1270 331 329 0 -PP- DOLISIE
+64401 -420 1270 331 329 0 ---- DOLISIE
64402 -400 1395 512 509 0 ---- MOUYONDZI
64403 -348 1262 161 160 0 ---- MAKABANA
64405 -368 1335 530 530 0 ---- SIBITI
64450 -425 1525 316 319 0 PPPP BRAZZAVILLE /MAYA-MAYA
64451 -382 1525 750 0 0 ---- BOULANKIO
64452 -262 1622 313 311 0 ---- M'POUYA
-64453 -252 1477 790 791 0 -PP- DJAMBALA
+64453 -252 1477 790 791 0 ---- DJAMBALA
64454 -190 1585 377 476 0 ---- GAMBOMA
64456 -2 1565 380 394 0 ---- MAKOUA
64458 162 1605 352 352 0 TPTP OUESSO
-64459 162 1807 327 335 0 -PP- IMPFONDO
+64459 162 1807 327 335 0 ---- IMPFONDO
64460 206 1403 550 549 0 ---- SOUANKE
64462 10 1355 408 0 0 ---- KELLE
64463 -558 1482 438 0 0 ---- EWO
64500 45 942 15 12 0 ---- LIBREVILLE
64501 -70 875 4 4 0 ---- PORT-GENTIL
64503 -342 1065 34 31 0 ---- MAYUMBA
-64504 100 960 13 16 0 ---- COCOBEACH
+64504 100 960 0 16 0 ---- COCOBEACH
64507 -285 1102 79 83 0 ---- TCHIBANGA
64510 208 1148 599 600 0 P-P- BITAM
64512 158 1157 0 590 0 ---- OYEM
64518 -112 1250 0 355 0 ---- KOULAMOUTOU
-64545 102 1393 501 501 0 ---- MEKAMBO
-64550 -187 1102 89 89 0 ---- MOUILA
+64545 102 1393 0 501 0 ---- MEKAMBO
+64550 -187 1102 0 89 0 ---- MOUILA
64551 -72 1023 26 27 0 ---- LAMBARENE
64552 78 1153 583 583 0 ---- MITZIC
64556 56 1287 515 513 0 ---- MAKOKOU
-64560 -83 1272 485 483 0 ---- LASTOURVILLE
+64560 -83 1272 0 483 0 ---- LASTOURVILLE
64565 -153 1327 573 572 0 P-P- MOANDA
64570 -165 1343 0 444 0 ---- MVENGUE
64580 -70 1378 0 335 0 ---- OKONDJA
@@ -8384,53 +8465,53 @@
64960 397 1320 0 693 0 ---- ABONG-MBANG
64961 315 1362 0 624 0 ---- LOMIE
64971 295 990 16 10 0 ---- KRIBI
-65001 1088 475 244 244 0 ---- YELWA
+65001 1088 475 0 244 0 ---- YELWA
65003 1247 422 0 220 0 ---- BIRNIN KEBBI
-65010 1302 525 351 351 0 ---- SOKOTO
-65015 1217 670 469 464 0 ---- GUSAU
-65019 1060 745 645 645 0 ---- KADUNA
-65028 1302 768 518 427 0 ---- KATSINA
-65030 1110 768 111 664 0 ---- ZARIA
-65046 1205 852 473 476 0 --T- KANO
-65055 1028 982 609 610 0 ---- BAUCHI
-65064 1288 1047 344 343 0 ---- NGURU
-65073 1170 1103 414 415 0 ---- POTISKUM
+65010 1302 525 351 0 0 ---- SOKOTO
+65015 1217 670 0 464 0 ---- GUSAU
+65019 1060 745 645 0 0 ---- KADUNA
+65028 1302 768 518 0 0 ---- KATSINA
+65030 1110 768 111 0 0 ---- ZARIA
+65046 1205 852 473 0 0 --T- KANO
+65055 1028 982 0 610 0 ---- BAUCHI
+65064 1288 1047 0 343 0 ---- NGURU
+65073 1170 1103 0 415 0 ---- POTISKUM
65075 1028 1115 505 0 0 ---- GOMBE
-65082 1185 1308 354 354 0 --T- MAIDUGURI
-65101 848 458 307 308 0 ---- ILORIN
+65082 1185 1308 354 0 0 --T- MAIDUGURI
+65101 848 458 307 0 0 ---- ILORIN
65108 867 338 0 456 0 ---- SHAKI
-65112 910 602 143 144 0 ---- BIDA
-65123 961 653 256 262 0 ---- MINNA
+65112 910 602 0 144 0 ---- BIDA
+65123 961 653 256 0 0 ---- MINNA
65124 855 852 0 182 0 ---- LAFIA
65125 925 700 343 0 0 --T- ABUJA
-65134 986 890 1290 1295 1 ---- JOS
-65145 818 975 111 111 0 ---- IBI
-65167 923 1247 186 191 0 --T- YOLA
+65134 986 890 1290 0 1 ---- JOS
+65145 818 975 0 111 0 ---- IBI
+65167 923 1247 186 0 0 --T- YOLA
65200 797 360 0 330 0 ---- ISEYIN
-65201 658 333 39 40 0 ---- LAGOS/IKEJA
-65202 650 338 19 19 0 --T- LAGOS/OSHODI
+65201 658 333 39 0 0 ---- LAGOS/IKEJA
+65202 650 338 0 19 0 --T- LAGOS/OSHODI
65203 645 340 0 14 0 ---- LAGOS ROOF
-65208 743 390 227 234 0 ---- IBADAN
+65208 743 390 227 0 0 ---- IBADAN
65210 683 393 0 77 0 ---- IJEBU ODE
65213 717 333 0 104 0 ---- ABEOKUTA
-65215 778 448 304 302 0 ---- OSHOGBO
-65222 710 483 287 287 0 ---- ONDO
+65215 778 448 0 302 0 ---- OSHOGBO
+65222 710 483 0 287 0 ---- ONDO
65224 765 520 0 454 0 ---- ADO EKITI
-65229 632 509 79 78 0 ---- BENIN CITY
+65229 632 509 0 78 0 ---- BENIN CITY
65232 728 530 375 0 0 ---- AKURE
-65236 552 573 4 6 0 ---- WARRI
-65243 778 673 44 63 0 ---- LOKOJA
-65245 615 678 86 67 0 ---- ONITSHA
+65236 552 573 0 6 0 ---- WARRI
+65243 778 673 0 63 0 ---- LOKOJA
+65245 615 678 0 67 0 ---- ONITSHA
65246 620 705 0 325 0 ---- AWKA
-65250 484 702 20 18 0 ---- PORT HARCOURT
+65250 484 702 20 0 0 ---- PORT HARCOURT
65252 548 700 0 91 0 ---- OWERRI
65254 548 755 0 122 0 ---- UMUAHIA
-65257 647 755 142 140 0 --T- ENUGU
+65257 647 755 142 0 0 --T- ENUGU
65260 550 792 38 0 0 ---- UYO
-65264 497 835 63 62 0 ---- CALABAR
-65271 773 852 113 113 0 ---- MAKURDI
+65264 497 835 0 62 0 ---- CALABAR
+65271 773 852 113 0 0 ---- MAKURDI
65272 667 880 117 0 0 ---- OGOJA
-65273 597 869 93 119 0 ---- IKOM
+65273 597 869 0 119 0 ---- IKOM
65274 660 932 0 285 0 ---- OBUDU
65275 667 880 0 117 0 ---- OGOJA
65306 1113 293 292 290 0 PPPP KANDI
@@ -8448,37 +8529,37 @@
65378 695 57 641 643 0 ---- KOUMA-KONDA
65380 658 150 44 44 0 ---- TABLIGBO
65387 617 125 25 20 0 P-P- LOME
-65401 1090 -110 203 213 0 ---- NAVRONGO
-65404 1005 -250 323 323 0 ---- WA
-65416 902 -248 301 300 0 PPPP BOLE
-65418 955 -85 173 169 0 --T- TAMALE
-65420 944 -2 197 195 0 ---- YENDI
-65432 775 -210 340 339 0 ---- WENCHI
-65437 782 -3 122 122 0 PPPP KETE-KRACHI
-65439 733 -233 307 309 0 ---- SUNYANI
-65442 672 -160 293 286 0 PPPP KUMASI
-65445 620 -233 172 171 0 ---- SEFWI BEKWAI
+65401 1090 -110 0 213 0 ---- NAVRONGO
+65404 1005 -250 0 323 0 ---- WA
+65416 902 -248 0 300 0 PPPP BOLE
+65418 955 -85 0 169 0 --T- TAMALE
+65420 944 -2 0 195 0 ---- YENDI
+65432 775 -210 0 339 0 ---- WENCHI
+65437 782 -3 0 122 0 PPPP KETE-KRACHI
+65439 733 -233 307 0 0 ---- SUNYANI
+65442 672 -160 0 286 0 PPPP KUMASI
+65445 620 -233 0 171 0 ---- SEFWI BEKWAI
65450 667 -75 0 595 0 ---- ABETIFI
-65453 660 47 158 158 0 ---- HO
-65457 593 -98 140 139 0 ---- AKIM ODA
-65459 608 -25 167 167 0 ---- KOFORIDUA
-65460 610 12 19 17 0 ---- AKUSE
-65462 612 80 178 54 0 ---- AKATSI
-65465 487 -223 40 38 0 ---- AXIM
-65467 488 -177 5 5 0 PPPP TAKORADI
-65469 520 -107 47 439 0 ---- SALTPOND
-65472 560 -17 68 68 0 PPPP ACCRA
-65473 562 0 18 14 0 ---- TEMA
-65475 578 63 7 5 0 ---- ADA
+65453 660 47 0 158 0 ---- HO
+65457 593 -98 0 139 0 ---- AKIM ODA
+65459 608 -25 0 167 0 ---- KOFORIDUA
+65460 610 12 0 17 0 ---- AKUSE
+65462 612 80 0 54 0 ---- AKATSI
+65465 487 -223 0 38 0 ---- AXIM
+65467 488 -177 5 0 0 PPPP TAKORADI
+65469 520 -107 0 439 0 ---- SALTPOND
+65472 560 -17 68 0 0 PPPP ACCRA
+65473 562 0 0 14 0 ---- TEMA
+65475 578 63 0 5 0 ---- ADA
65500 1463 -7 0 295 0 ---- MARKOYE
65501 1403 -3 277 276 0 ---- DORI
-65502 1358 -243 336 329 0 ---- OUAHIGOUYA
+65502 1358 -243 0 329 0 ---- OUAHIGOUYA
65503 1235 -152 306 303 0 PPPP OUAGADOUGOU
65505 1247 -348 300 299 0 ---- DEDOUGOU
-65507 1207 35 309 292 0 ---- FADA N'GOURMA
-65510 1117 -430 460 432 0 PPPP BOBO-DIOULASSO
-65516 1173 -292 271 264 0 ---- BOROMO
-65518 1117 -114 322 326 0 ---- PO
+65507 1207 35 0 292 0 ---- FADA N'GOURMA
+65510 1117 -430 0 432 0 PPPP BOBO-DIOULASSO
+65516 1173 -292 0 264 0 ---- BOROMO
+65518 1117 -114 0 326 0 ---- PO
65522 1033 -318 335 333 0 ---- GAOUA
65523 990 -434 0 260 0 ---- MANGODARA
65528 950 -757 421 434 0 ---- ODIENNE
@@ -8532,7 +8613,7 @@
67001 -1170 4323 6 6 0 ---- MORONI AIRPORT (GRANDE-COMORE)
67002 -1153 4327 29 29 0 -P-- HAHAYA INT. AIRPORT
67004 -1212 4443 12 19 0 -PP- OUANI (ANJOUAN)
-67005 -1281 4528 7 7 0 -P-- PAMANDZI (MAYOTTE)
+67005 -1281 4528 0 7 0 ---- PAMANDZI (MAYOTTE)
67009 -1235 4930 105 114 0 -P-- ANTSIRANANA
67012 -1332 4832 9 10 0 ---- FASCENE (NOSSI-BE)
67017 -1337 5000 5 6 0 ---- VOHEMAR
@@ -8571,6 +8652,7 @@
67229 -1473 3435 1311 1270 2 ---- ULONGUE
67231 -1483 3652 607 606 2 ---- CUAMBA
67237 -1510 3928 441 438 0 --T- NAMPULA
+67240 -1448 4072 0 87 0 ---- NACALA AIRPORT
67241 -1503 4067 11 10 0 ---- LUMBO
67243 -1562 3043 340 343 0 ---- ZUMBO
67250 -1560 3443 0 966 0 ---- SONGO
@@ -8705,7 +8787,7 @@
68010 -1918 1592 1100 1102 2 ---- OKAUKUEJO
68014 -1960 1812 1400 1406 2 ---- GROOTFONTEIN
68016 -1932 1272 0 16 0 ---- MOWE BAY
-68018 -1792 1977 1100 1102 2 ---- RUNDU
+68018 -1792 1977 0 1102 2 ---- RUNDU
68024 -2170 2165 1100 1131 2 ---- GHANZI
68026 -1837 2185 1000 1032 2 ---- SHAKAWE
68029 -1782 2515 1000 968 2 ---- KASANE
@@ -8715,7 +8797,7 @@
68034 -2025 2508 0 927 0 ---- GWETA
68038 -2056 2622 904 903 2 -PP- SUA-PAN
68040 -2142 2560 985 986 2 ---- LETLHAKANE
-68054 -2132 2747 1000 1009 2 ---- FRANCISTOWN
+68054 -2132 2747 0 1009 2 ---- FRANCISTOWN
68070 -2205 2782 892 0 0 ---- SELEBI-PHIKWE
68098 -2298 1465 88 88 0 ---- WALVIS BAY AIRPORT
68102 -2011 1614 0 1250 2 ---- OUTJO
@@ -8724,9 +8806,9 @@
68108 -2123 1485 800 835 2 ---- UIS
68109 -2261 1707 0 1699 0 ---- EROS
68110 -2257 1710 1700 1725 2 T-T- WINDHOEK
-68112 -2248 1747 1700 1719 2 ---- HOSEA KUTAKO INTERNATIONAL AIRPORT
+68112 -2248 1747 0 1719 2 ---- HOSEA KUTAKO INTERNATIONAL AIRPORT
68114 -2142 1593 1217 1217 2 ---- OMARURU
-68116 -2247 1897 1400 1445 2 ---- GOBABIS
+68116 -2247 1897 0 1445 2 ---- GOBABIS
68148 -2308 2680 1006 991 2 ---- MAHALAPYE
68151 -2336 2585 0 1020 0 ---- LEPHEPE
68155 -2368 2770 839 839 2 ---- LEPHALALE
@@ -8742,7 +8824,7 @@
68183 -2309 3038 614 614 2 ---- THOHOYANDOU
68185 -2511 3048 1433 1433 2 ---- LYDENBURG
68188 -2377 3007 892 892 2 ---- TZANEEN-GRENSHOEK
-68191 -2394 3115 432 407 0 ---- PHALABORWA
+68191 -2394 3115 432 0 0 ---- PHALABORWA
68194 -2245 3132 202 202 0 ---- PAFURI
68196 -2268 3102 457 0 0 ---- PUNDA MARIA
68212 -2450 1787 1100 1108 2 ---- MARIENTAL
@@ -8802,8 +8884,8 @@
68361 -2615 2800 1624 1624 2 ---- JOHANNESBURG BOT. TUINE
68362 -2727 2849 1507 1507 2 ---- FRANKFORT-TNK
68363 -2620 2843 1592 1592 2 ---- SPRINGS
-68368 -2615 2823 1695 1694 2 ---- JOHANNESBURG INTNL. AIRPORT
-68370 -2646 2946 1650 1640 2 ---- BETHAL
+68368 -2615 2823 1695 0 2 ---- JOHANNESBURG INTNL. AIRPORT
+68370 -2646 2946 1650 0 2 ---- BETHAL
68372 -2693 2923 1562 1562 2 ---- STANDERTON
68375 -2742 2917 1670 1670 2 ---- VREDE
68377 -2777 2998 1241 1238 2 ---- NEWCASTLE
@@ -8814,6 +8896,7 @@
68391 -2633 3113 0 1193 0 ---- MBABANE
68392 -2705 3110 0 1102 0 ---- NHLANGANO
68393 -2727 3182 0 315 0 ---- LAVUMISA
+68394 -2674 3170 0 265 0 ---- LUBOVANE
68395 -2697 3132 0 1190 0 ---- HLATHIKHULU
68396 -2653 3130 0 641 1 ---- MANZINI/MATSAPA AIRPORT
68397 -2748 3260 82 82 0 ---- MBAZWANA AIRFIELD
@@ -8821,9 +8904,9 @@
68399 -2685 3192 0 94 0 ---- BIG BEND
68400 -2739 3218 63 63 0 ---- MAKATINI
68403 -2857 1654 28 21 0 ---- ALEXANDER BAY
-68408 -2925 1687 7 4 0 ---- PORT NOLLOTH
+68408 -2925 1687 7 0 0 ---- PORT NOLLOTH
68411 -2877 1762 174 174 0 ---- VIOOLSDRIF
-68416 -2913 1939 982 989 2 ---- POFADDER
+68416 -2913 1939 982 0 2 ---- POFADDER
68424 -2841 2126 835 835 2 T--- UPINGTON
68425 -2860 2034 635 635 0 ---- AUGRABIES FALLS
68429 -2835 2308 1321 1321 2 ---- POSTMASBURG
@@ -8876,7 +8959,7 @@
68581 -2963 3040 673 673 2 ---- PIETERMARITZBURG
68582 -2965 3040 721 739 0 ---- ORIBI AIRPORT
68583 -2970 3105 94 94 0 ---- MOUNT EDGECOMBE
-68585 -3039 3069 15 107 0 ---- PENNINGTON SOUTH
+68585 -3039 3069 15 0 0 ---- PENNINGTON SOUTH
68587 -3107 3023 11 11 0 ---- PORT EDWARD
68588 -2996 3095 14 8 0 ---- DURBAN INTNL. AIRPORT
68589 -2927 2952 1762 1762 2 ---- GIANTS CASTLE
@@ -8925,8 +9008,8 @@
68821 -3365 1942 199 199 0 ---- WORCESTER
68823 -3318 2202 544 543 2 ---- PRINS ALBERT
68825 -3350 2128 538 537 0 ---- LADISMITH
-68826 -3360 2219 328 314 0 ---- OUDTSHOORN
-68828 -3402 2238 191 191 0 ---- GEORGE AIRPORT
+68826 -3360 2219 328 0 0 ---- OUDTSHOORN
+68828 -3402 2238 191 0 0 ---- GEORGE AIRPORT
68832 -3329 2348 840 840 2 ---- WILLOWMORE
68833 -3384 2386 546 545 2 ---- JOUBERTINA
68835 -3377 2482 97 97 0 ---- PATENSIE
@@ -8934,13 +9017,13 @@
68839 -3371 2544 157 158 0 ---- UITENHAGE
68840 -3304 2572 506 506 0 ---- SOMERSET EAST
68841 -3344 2575 143 0 0 ---- ADDO ELEPHANT PARK
-68842 -3397 2561 63 69 0 T--- PORT ELIZABETH
+68842 -3397 2561 63 0 0 T--- PORT ELIZABETH
68843 -3356 2688 84 85 0 ---- PORT ALFRED ARPORT
68845 -3384 2629 3 0 0 ---- BIRD ISLAND
68847 -3360 2688 37 36 0 ---- PORT ALFRED
68849 -3329 2650 642 642 2 ---- GRAHAMSTOWN
-68858 -3303 2783 116 131 0 ---- EAST LONDON
-68906 -4035 -988 54 54 0 T-T- GOUGH ISLAND
+68858 -3303 2783 116 0 0 ---- EAST LONDON
+68906 -4035 -988 54 0 0 T-T- GOUGH ISLAND
68911 -3414 1885 7 7 0 ---- STRAND
68912 -3415 1832 7 7 0 ---- SLANGKOP
68915 -3435 1848 231 224 0 ---- CAPE POINT
@@ -8949,88 +9032,88 @@
68920 -3483 2001 4 11 0 ---- CAPE AGULHAS
68921 -3479 2005 3 3 0 ---- STRUISBAAI
68923 -3415 1989 151 151 0 ---- TYGERHOEK
-68925 -3414 1902 311 312 0 ---- ELGIN EXP FARM
-68926 -3410 2125 152 117 0 ---- RIVERSDALE
+68925 -3414 1902 311 0 0 ---- ELGIN EXP FARM
+68926 -3410 2125 152 0 0 ---- RIVERSDALE
68927 -3436 2140 103 102 0 ---- STILBAAI
-68928 -3419 2213 136 62 0 ---- CAPE ST. BLAIZE
+68928 -3419 2213 136 0 0 ---- CAPE ST. BLAIZE
68931 -3409 2333 139 137 0 ---- PLETTENBERG BAY
68933 -3403 2391 5 6 0 ---- TSITSIKAMMA
68935 -3406 2309 54 54 0 ---- KNYSNA
68938 -3420 2483 7 7 0 ---- CAPE ST. FRANCIS
68939 -3421 2486 7 0 0 ---- CAPE ST FRANCIS
68992 -5440 328 42 42 0 ---- BOUVET ISLAND
-68994 -4688 3786 24 22 0 T-T- MARION ISLAND
+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
+70026 7129 -15676 16 15 0 T-T- BARROW/W. POST W. ROGERS, AK
70086 7013 -14363 15 2 0 ---- BARTER ISLAND
70104 6888 -16613 0 3 0 ---- CAPE LISBURNE AFS
70116 6562 -16805 5 9 0 ---- WALES
70117 6556 -16792 0 83 0 ---- TIN CITY AFS
70119 6525 -16687 5 3 0 ---- PORT CLARENCE
70121 6981 -16291 0 0 0 ---- POINT LAY
-70133 6689 -16261 5 5 0 T-T- KOTZEBUE, RALPH WIEN
+70133 6689 -16260 5 5 0 T-T- KOTZEBUE, RALPH WIEN
70162 6937 -15213 85 81 0 ---- UMIAT
70173 6600 -15369 0 389 0 ---- INDIAN MOUNTAIN AFS
70174 6692 -15152 196 196 0 ---- BETTLES
-70178 6517 -15210 67 69 0 ---- TANANA
-70194 6656 -14527 135 431 0 ---- FORT YUKON
+70178 6518 -15211 67 69 0 ---- TANANA
+70194 6656 -14527 135 0 0 ---- FORT YUKON
70197 6548 -14466 252 0 0 PPPP CENTRAL, AK
70200 6451 -16544 12 7 0 T-T- NOME, AK
70207 6388 -16080 6 6 0 ---- UNALAKLEET
70212 6178 -16603 0 146 0 ---- CAPE ROMANZOFF AFS
70218 6000 -16600 0 0 0 ---- NUNIVAK
-70219 6078 -16184 44 34 0 T-T- BETHEL/BETHEL AIRPORT, AK
+70219 6078 -16184 42 33 0 T-T- BETHEL/BETHEL AIRPORT, AK
70222 6473 -15693 49 46 0 ---- GALENA A.
-70231 6296 -15560 103 103 0 T-T- MCGRATH, AK
+70231 6295 -15560 103 103 0 T-T- MCGRATH, AK
70232 6158 -15953 26 26 0 ---- ANIAK
70235 6110 -15557 0 484 0 ---- SPARREVOHN AFS
70246 6390 -15227 214 208 0 ---- MINCHUMINA
70248 6252 -15388 458 468 0 ---- FAREWELL/INTERMEDIATE FIELD
70249 6210 -15275 0 560 0 ---- PUNTILLA
-70251 6230 -15010 109 109 0 ---- TALKEETNA
+70251 6232 -15009 109 109 0 ---- TALKEETNA
70252 6230 -15041 151 0 0 PPPP TALKEETNA, AK
-70259 6057 -15125 29 28 0 ---- KENAI
-70260 6455 -14908 0 110 0 ---- NENANA/MUN.
-70261 6481 -14788 135 134 0 T-T- FAIRBANKS/INT., AK
+70259 6057 -15124 29 28 0 ---- KENAI, AK
+70260 6455 -14907 0 110 0 T-T- NENANA/MUN.
+70261 6481 -14786 135 134 0 T-T- FAIRBANKS/INT., AK
70264 6333 -14913 0 734 0 ---- SUMMIT
70265 6465 -14707 167 0 0 ---- FAIRBANKS/EIELSON AFB
70266 6397 -14569 398 0 0 T-TT FORT GREELY, AK
-70267 6400 -14572 391 0 0 ---- FORT GREELY/ALLEN AAF, AK
+70267 6399 -14572 391 0 0 ---- FORT GREELY/ALLEN AAF, AK
70268 6210 -14597 573 0 0 PPPP GLENNALLEN, AK
70270 6127 -14965 115 0 0 ---- FT. RICHARDSON/BRYANT AHP, AK
-70271 6215 -14544 481 481 0 ---- GULKANA/INTL. FLD.
+70271 6215 -14546 481 481 0 ---- GULKANA/INTL. FLD, AK
70272 6125 -14980 59 0 0 ---- ANCHORAGE/ELMENDORF AFB
-70273 6116 -14997 44 52 0 T-T- ANCHORAGE/INT., AK
-70274 6160 -14908 0 71 0 ---- PALMER
+70273 6118 -14999 44 52 0 T-T- ANCHORAGE/INT., AK
+70274 6160 -14909 0 71 0 ---- PALMER
70275 6113 -14635 10 11 0 ---- VALDEZ
70277 6012 -14944 18 9 0 ---- SEWARD
70279 6023 -14665 56 56 0 ---- CAPE HINCHINBROOK
-70291 6297 -14193 525 523 0 ---- NORTHWAY
-70296 6050 -14550 13 12 0 ---- CORDOVA/MILE 13
+70291 6296 -14193 525 523 0 ---- NORTHWAY
+70296 6049 -14547 13 12 0 ---- CORDOVA/MILE 13
70298 6008 -14250 11 4 0 ---- YAKATAGA
70305 5865 -16207 0 161 0 ---- CAPE NEWENHAM AFS
-70308 5715 -17022 9 10 0 T-T- ST. PAUL ISLANDS, AK
-70316 5520 -16272 32 25 0 T-T- COLD BAY, AK
+70308 5717 -17022 10 6 0 T-T- ST. PAUL ISLANDS, AK
+70316 5521 -16272 32 25 0 T-T- COLD BAY, AK
70321 5905 -15852 29 26 0 ---- DILLINGHAM MUNI, AK
70326 5868 -15665 16 8 0 T-T- KING SALMON, AK
70333 5695 -15862 0 29 0 ---- PORT HEIDEN
-70340 5975 -15491 49 63 0 ---- ILIAMNA/ILIAMNA AIRPORT
-70341 5963 -15150 22 24 0 ---- HOMER/MUNICIPAL
+70340 5975 -15491 49 63 0 ---- ILIAMNA/ILIAMNA AIRPORT, AK
+70341 5965 -15147 22 24 0 ---- HOMER/MUNICIPAL, AK
70343 5943 -14633 14 27 0 ---- MIDDLETON ISLAND, AK
70350 5775 -15249 34 6 0 T-T- KODIAK, AK
-70361 5952 -13966 13 11 0 T-T- YAKUTAT, AK
-70362 5947 -13530 5 16 0 ---- SKAGWAY
+70361 5950 -13966 14 12 0 T-T- YAKUTAT, AK
+70362 5946 -13531 5 16 0 ---- SKAGWAY
70367 5842 -13572 9 11 0 ---- GUSTAVUS
-70371 5707 -13535 20 6 0 ---- SITKA
-70381 5837 -13458 7 5 0 ---- JUNEAU
+70371 5705 -13536 20 6 0 ---- SITKA
+70381 5836 -13457 7 5 0 ---- JUNEAU
70383 5750 -13458 11 0 0 ---- ANGOON
70385 5727 -13362 11 0 0 ---- FIVE FINGER LIGHT
70386 5682 -13297 0 0 0 ---- PETERSBURG
70387 5648 -13237 13 13 0 ---- WRANGELL
-70395 5535 -13169 29 29 0 ---- KETCHIKAN, INTL.
-70398 5504 -13158 35 35 0 T-T- ANNETTE ISLAND, AK
+70395 5535 -13171 29 29 0 ---- KETCHIKAN, INTL.
+70398 5504 -13157 34 35 0 T-T- ANNETTE ISLAND, AK
70409 5283 17318 0 21 0 ---- ATTU
-70414 5272 17410 31 29 0 T-T- SHEMYA AFB
+70414 5271 17411 31 29 0 T-T- SHEMYA AFB
70482 5295 -16885 0 21 0 ---- NIKOLSKI
71001 6137 -13904 0 805 0 ---- BURWASH A, YT
71002 5356 -6411 0 440 0 ---- CHURCHILL FALLS A, NFLD
@@ -9048,136 +9131,136 @@
71014 5218 -11318 0 889 0 ---- DELBURNE AGCM, ALTA
71015 4928 -11254 0 1305 0 ---- MILK RIVER RIDGE RESERVOIR, ALTA
71016 4915 -11355 0 1326 0 ---- BULLHORN HEADWATERS, ALTA
-71017 7377 -10530 11 11 0 ---- STEFANSSON ISLAND, NU
+71017 7377 -10530 0 11 0 ---- STEFANSSON ISLAND, NU
71018 7472 -9498 0 30 0 ---- RESOLUTE CS, NU
-71019 4716 -6783 245 245 0 ---- ST LEONARD CS, NB
+71019 4716 -6783 0 245 0 ---- ST LEONARD CS, NB
71020 6124 -12374 0 204 0 ---- YOHIN, NWT
71021 6126 -12447 0 283 0 ---- DEADMEN VALLEY, NWT
71022 5429 -13044 0 35 0 ---- PRINCE RUPERT, BC
71023 5491 -10996 0 637 0 ---- JIMMY LAKE AWOS, SASK
71024 5838 -11604 0 289 0 ---- FORT VERMILION, ALTA
71026 5002 -11072 717 715 0 ---- MEDICINE HAT RCS, ALTA
-71027 4667 -6040 10 8 0 ---- INGONISH BEACH CS, NS
+71027 4666 -6041 11 10 0 ---- INGONISH BEACH CS, NS
71028 5167 -12440 877 875 0 ---- TATLAYOKO LAKE RCS, BC
71029 7076 -11780 0 30 0 ---- HOLMAN CS, NWT
-71030 4471 -6680 78 78 0 ---- GRAND MANAN SAR CS, NB
+71030 4471 -6680 0 78 0 ---- GRAND MANAN SAR CS, NB
71031 4842 -12323 28 19 0 ---- DISCOVERY ISLAND, BC
-71032 4947 -12051 0 700 0 ---- PRINCETON CS, BC
+71032 4946 -12051 698 697 0 ---- PRINCETON CS, BC
71033 5725 -10560 0 514 0 ---- KEY LAKE, SK, SASK
71035 5162 -11366 0 914 0 ---- LINDEN AGCM, ALTA
71036 5110 -10005 0 305 0 ---- DAUPHIN, MAN
-71037 4933 -12326 0 35 0 ---- POINT ATKINSON, BC
+71037 4933 -12326 13 14 0 ---- POINT ATKINSON, BC
71038 4658 -6601 45 43 0 ---- DOAKTOWN AUTO RCS, NB
71039 6212 -13619 0 543 0 ---- CARMACKS CS, YT
71040 4831 -7113 0 163 0 ---- LATERRIERE, QUE
71041 4566 -6137 0 115 0 ---- PORT HAWKESBURY, NS
71042 4923 -12310 0 83 0 ---- VANCOUVER HILLCREST, BC
-71043 6528 -12680 78 73 0 ---- NORMAN WELLS A, NWT
+71043 6528 -12680 0 73 0 ---- NORMAN WELLS A, NWT
71043 6528 -12675 95 94 0 T-T- NORMAN WELLS UA, NWT
71044 6756 -13984 0 251 0 ---- OLD CROW RCS, YT
-71045 6017 -13272 705 705 0 ---- TESLIN (AUT), YT
-71046 6961 -14019 13 13 0 ---- KOMAKUK BEACH, YT
+71045 6017 -13272 712 705 0 ---- TESLIN (AUT), YT
+71046 6961 -14019 0 13 0 ---- KOMAKUK BEACH, YT
71047 5346 -11126 0 656 0 ---- MANNVILLE AGCM, ALTA
71048 5107 -11032 0 735 0 ---- ACADIA VALLEY, ALTA
71049 6588 -8945 0 18 0 ---- WAGER BAY (AUT), NU
-71050 5211 -12414 910 910 0 ---- PUNTZI MOUNTAIN (AUT), BC
+71050 5211 -12414 0 910 0 ---- PUNTZI MOUNTAIN (AUT), BC
71051 4936 -11068 0 927 0 ---- MANYBERRIES AGCM, ALTA
-71055 6704 -12608 259 259 0 ---- COLVILLE LAKE, NWT
+71055 6702 -12612 259 271 0 ---- COLVILLE LAKE, NWT
71056 5877 -11112 0 238 0 ---- FORT CHIPEWYAN RCS, ALTA
71057 5067 -11335 0 965 0 ---- MOSSLEIGH AGCM, ALTA
71058 6967 -12167 0 330 0 ---- KEATS POINT, NWT
71059 6928 -11922 0 69 0 ---- CROKER RIVER, NU
-71060 5247 -11608 0 1362 0 ---- NORDEGG CS, ALTA
-71061 5409 -11445 648 648 0 ---- BARRHEAD CS, ALTA
+71060 5249 -11604 0 1332 0 ---- NORDEGG CS, ALTA
+71061 5409 -11445 0 648 0 ---- BARRHEAD CS, ALTA
71062 5314 -11513 0 903 0 ---- VIOLET GROVE CS, ALTA
71063 4538 -7572 0 79 0 ---- OTTAWA CDA RCS, ONT
71064 6904 -10782 0 165 0 ---- CAPE PEEL WEST, NU
71065 5372 -11111 0 580 0 ---- MYRNAM AGCM, ALTA
-71066 5862 -11716 338 338 0 ---- HIGH LEVEL, ALTA
+71066 5862 -11716 0 338 0 ---- HIGH LEVEL, ALTA
71067 5326 -11316 0 765 0 ---- NEW SEREPTA AGCM, ALTA
-71068 5623 -11745 580 571 0 ---- PEACE RIVER A, ALTA
-71069 5529 -11478 581 583 0 ---- SLAVE LAKE AWOS A, ALTA
+71068 5623 -11745 0 571 0 ---- PEACE RIVER A, ALTA
+71069 5529 -11478 0 583 0 ---- SLAVE LAKE AWOS A, ALTA
71070 4922 -11113 0 915 0 ---- PAKOWKI LAKE AGCM, ALTA
-71072 4837 -8932 12 199 0 ---- THUNDER BAY, ONT
+71072 4837 -8932 0 199 0 ---- THUNDER BAY, ONT
71072 7625 -11935 0 58 0 T-T- MOULD BAY, UA, NWT
71073 5060 -11280 0 941 0 ---- QUEENSTOWN, ALTA
71074 7879 -10355 0 58 0 ---- ISACHSEN (AUT), NU
-71075 5818 -10370 0 492 0 ---- COLLINS BAY, SASK
+71075 5823 -10368 413 411 0 ---- COLLINS BAY, SASK
71076 5957 -10848 321 318 0 ---- URANIUM CITY (AUT), SASK
-71077 5584 -10842 434 440 0 ---- BUFFALO NARROWS (AUT), SASK
-71078 5686 -10108 354 357 0 ---- LYNN LAKE, MAN
-71079 5580 -9786 216 223 0 ---- THOMPSON A, MAN
-71081 6878 -8123 7 9 0 ---- HALL BEACH A, NU
-71081 6877 -8122 6 6 0 T-T- HALL BEACH UA, NU
+71077 5584 -10842 0 440 0 ---- BUFFALO NARROWS (AUT), SASK
+71078 5686 -10108 0 357 0 ---- LYNN LAKE, MAN
+71079 5580 -9786 0 224 0 ---- THOMPSON A, MAN
+71081 6878 -8123 0 9 0 ---- HALL BEACH A, NU
+71081 6877 -8122 0 6 0 T-T- HALL BEACH UA, NU
71082 8252 -6227 28 30 0 ---- ALERT, NU
71082 8250 -6233 76 65 0 T-T- ALERT UA, NU
-71083 6282 -9212 31 32 0 ---- RANKIN INLET A, NU
+71083 6282 -9212 0 32 0 ---- RANKIN INLET A, NU
71084 6831 -10009 0 36 0 ---- HAT ISLAND, NU
71085 4952 -11400 0 1190 0 ---- PINCHER CREEK, ALTA
71086 6167 -11725 0 159 0 --T- FT. PROVIDENCE, NWT
71087 6132 -11760 0 162 0 ---- FORT PROVIDENCE, NWT
-71088 6908 -7903 41 41 0 ---- ROWLEY ISLAND, NU
+71088 6908 -7903 0 41 0 ---- ROWLEY ISLAND, NU
71089 5259 -11034 0 644 0 ---- RIBSTONE SOUTH AGCM, ALTA
-71090 7048 -6852 26 27 0 ---- CLYDE RIVER A, NU
-71091 6890 -7514 162 161 0 ---- LONGSTAFF BLUFF, NU
-71092 6865 -7117 488 527 0 ---- DEWAR LAKES, NU
-71093 6847 -6681 393 390 0 ---- CAPE HOOPER, NU
-71094 6665 -6138 393 725 0 ---- CAPE DYER, NU
-71095 7269 -7797 55 62 0 ---- POND INLET A, NU
-71096 6754 -6379 581 584 0 ---- FOX FIVE, NU
-71097 6334 -6415 376 376 0 ---- BREVOORT ISLAND, NU
-71098 5306 -9334 291 290 0 ---- SANDY LAKE, ONT
+71090 7048 -6852 0 27 0 ---- CLYDE RIVER A, NU
+71091 6890 -7514 0 161 0 ---- LONGSTAFF BLUFF, NU
+71092 6865 -7117 0 527 0 ---- DEWAR LAKES, NU
+71093 6847 -6681 0 390 0 ---- CAPE HOOPER, NU
+71094 6665 -6138 0 725 0 ---- CAPE DYER, NU
+71095 7269 -7797 0 62 0 ---- POND INLET A, NU
+71096 6754 -6379 0 584 0 ---- FOX FIVE, NU
+71097 6334 -6415 0 376 0 ---- BREVOORT ISLAND, NU
+71098 5306 -9334 0 290 0 ---- SANDY LAKE, ONT
71099 5602 -8768 0 16 0 ---- FORT SEVERN A, ONT
-71101 5325 -13181 6 6 0 ---- SANDSPIT AIRPORT AUTO, BC
+71101 5325 -13181 0 6 0 ---- SANDSPIT AIRPORT AUTO, BC
71102 5302 -11010 0 669 0 ---- RIVERCOURSE AGCM, ALTA
-71103 5303 -12251 543 545 0 ---- QUESNEL AWOS, BC
-71104 5218 -12205 942 940 0 ---- WILLIAMS LAKE A, BC
+71103 5303 -12251 0 545 0 ---- QUESNEL AWOS, BC
+71104 5218 -12205 0 940 0 ---- WILLIAMS LAKE A, BC
71105 5026 -11170 0 645 0 ---- ROLLING HILLS AGCM, ALTA
-71107 5194 -13102 92 92 0 ---- CAPE ST JAMES CS, BC
-71108 4903 -12236 58 59 0 ---- ABBOTSFORD A, BC
-71109 5068 -12737 22 22 0 ---- PORT HARDY A, BC
-71109 5068 -12737 17 17 0 T-T- PORT HARDY UA, BC
-71110 4692 -5538 49 49 0 ---- ST LAWRENCE, NFLD
+71107 5194 -13102 89 88 0 ---- CAPE ST JAMES CS, BC
+71108 4903 -12236 0 59 0 ---- ABBOTSFORD A, BC
+71109 5068 -12737 0 22 0 ---- PORT HARDY A, BC
+71109 5068 -12738 0 17 0 T-T- PORT HARDY UA, BC
+71110 4692 -5538 0 49 0 ---- ST LAWRENCE, NFLD
71111 5325 -13181 0 6 0 ---- SANDSPIT, BC
71112 4918 -12308 0 16 0 ---- RICHMOND OPERATIONS CENTRE, BC
-71113 4924 -12176 23 19 0 ---- AGASSIZ CS, BC
-71114 4937 -12150 39 39 0 ---- HOPE (AUT), BC
-71115 5022 -11919 482 482 0 ---- VERNON AUTO, BC
+71113 4924 -12176 21 19 0 ---- AGASSIZ CS, BC
+71114 4937 -12150 0 39 0 ---- HOPE (AUT), BC
+71115 5022 -11919 0 482 0 ---- VERNON AUTO, BC
71116 4912 -11047 0 935 0 ---- ONEFOUR CDA, ALTA
71117 4000 -5000 0 0 0 ---- MOBILE UPPER AIR STATION-ONTARIO, ONT
71118 5283 -11110 0 686 0 ---- WAINWRIGHT CFB AIRFIELD 21, ALTA
-71119 5355 -11411 766 766 0 T-T- EDMONTON STONY PLAIN, ALTA
-71120 5442 -11028 541 541 0 --PP COLD LAKE A, ALTA
-71121 5367 -11347 685 688 0 ---- EDMONTON NAMAO AWOS A, ALTA
+71119 5355 -11411 0 766 0 T-T- EDMONTON STONY PLAIN, ALTA
+71120 5442 -11028 0 541 0 --PP COLD LAKE A, ALTA
+71121 5367 -11347 0 688 0 ---- EDMONTON NAMAO AWOS A, ALTA
71121 5367 -11347 0 688 0 ---P EDMONTON NAMAO A, ALTA
71122 5119 -11555 0 1397 0 ---- BANFF CS, ALTA
-71123 5332 -11358 707 723 0 ---- EDMONTON INT'L A, ALTA
+71123 5332 -11358 0 723 0 ---- EDMONTON INT'L A, ALTA
71124 5355 -11410 0 766 0 ---- EDMONTON STONY PLAIN CS, ALTA
-71125 5413 -10852 480 480 0 ---- MEADOW LAKE A, SASK
+71125 5413 -10852 0 481 0 ---- MEADOW LAKE A, SASK
71127 5355 -11411 0 766 0 ---- EDMONTON STONY PLAIN CS, ALTA
-71129 5152 -10918 698 694 0 ---- KINDERSLEY A, SASK
-71130 5333 -10401 373 372 0 ---- NIPAWIN, SASK
-71131 4944 -10899 1080 1080 0 ---- EASTEND CYPRESS (AUT), SASK
-71132 5925 -10584 248 245 0 ---- STONY RAPIDS, SASK
-71133 5337 -10755 590 584 0 ---- SPIRITWOOD WEST, SASK
+71129 5152 -10918 0 694 0 ---- KINDERSLEY A, SASK
+71130 5333 -10401 0 372 0 ---- NIPAWIN, SASK
+71131 4944 -10899 0 1080 0 ---- EASTEND CYPRESS (AUT), SASK
+71132 5925 -10584 0 244 0 ---- STONY RAPIDS, SASK
+71133 5337 -10755 0 584 0 ---- SPIRITWOOD WEST, SASK
71134 5922 -10970 0 238 0 ---- BEARTOOTH, SASK
-71135 4917 -10598 917 917 0 ---- ROCKGLEN (AUT), SASK
-71136 4990 -9995 510 409 0 ---- BRANDON RCS, MAN
+71135 4917 -10598 0 917 0 ---- ROCKGLEN (AUT), SASK
+71136 4990 -9995 0 409 0 ---- BRANDON RCS, MAN
71137 4906 -10759 798 796 0 ---- VAL MARIE SOUTHEAST, SASK
-71138 5127 -10247 497 498 0 ---- YORKTON, SASK
-71139 4964 -10951 1271 1271 0 ---- CYPRESS HILLS PARK, SASK
-71140 4991 -9995 416 409 0 ---- BRANDON A, MAN
-71141 7063 -10027 224 20 0 ---- GATESHEAD ISLAND, NU
-71142 5029 -10769 0 820 0 ---- SWIFT CURRENT, SASK
+71138 5126 -10246 0 498 0 ---- YORKTON, SASK
+71139 4964 -10951 0 1271 0 ---- CYPRESS HILLS PARK, SASK
+71140 4991 -9995 0 409 0 ---- BRANDON A, MAN
+71141 7063 -10027 0 20 0 ---- GATESHEAD ISLAND, NU
+71142 5029 -10769 0 817 0 ---- SWIFT CURRENT, SASK
71143 5175 -9990 0 256 0 ---- BACHELORS ISLAND MARINE, MAN
71144 5050 -9804 0 250 0 ---- OAKPOINT MARINE, MAN
-71145 5385 -9465 235 236 0 ---- ISLAND LAKE A, MAN
+71145 5385 -9465 0 236 0 ---- ISLAND LAKE A, MAN
71147 4950 -9803 0 268 0 ---- CARMAN U OF M CS, MAN
71148 4919 -9890 475 470 0 ---- PILOT MOUND (AUT), MAN
71149 5071 -9953 0 351 0 ---- MCCREARY, MAN
71150 5046 -10060 0 561 0 ---- SHOAL LAKE CS, MAN
-71151 4979 -9438 413 413 0 ---- KENORA RCS, ONT
-71152 4762 -5762 11 11 0 ---- BURGEO NL, NFLD
+71151 4979 -9438 0 413 0 ---- KENORA RCS, ONT
+71152 4762 -5762 0 11 0 ---- BURGEO NL, NFLD
71153 4920 -11329 0 1136 0 ---- CARDSTON, ALTA
71154 4913 -11381 0 1289 0 ---- WATERTON PARK GATE, ALTA
71155 5331 -11361 0 715 0 ---- EDMONTON INTERNATIONAL CS, ALTA
@@ -9198,47 +9281,47 @@
71171 4318 -7940 0 79 0 ---- VINELAND STATION RCS, ONT
71172 4534 -8004 0 176 0 ---- PARRY SOUND CCG, ONT
71174 6109 -9407 0 10 0 ---- ARVIAT A, NU
-71176 5998 -6417 551 551 0 ---- CAPE KAKKIVIAK, NFLD
-71177 5714 -6148 834 834 0 ---- CAPE KIGLAPAIT, NFLD
+71176 5998 -6417 0 551 0 ---- CAPE KAKKIVIAK, NFLD
+71177 5714 -6148 0 834 0 ---- CAPE KIGLAPAIT, NFLD
71178 4867 -5311 30 26 0 ---- BONAVISTA, NFLD
-71179 5472 -5836 683 683 0 ---- TUKIALIK BAY, NFLD
+71179 5472 -5836 0 683 0 ---- TUKIALIK BAY, NFLD
71180 4771 -5931 33 32 0 ---- WRECKHOUSE, NFLD
71181 4714 -5533 0 29 0 ---- WINTERLAND, NFLD
-71182 5355 -6408 435 439 0 ---- CHURCHILL FALLS, NFLD
+71182 5355 -6408 0 439 0 ---- CHURCHILL FALLS, NFLD
71183 4547 -7373 0 32 0 ---- MONTREAL/PIERRE ELLIOTT TRUDEAU INTL, QUE
71184 4572 -7338 0 18 0 ---- VARENNES, QUE
-71185 5024 -5758 19 19 0 ---- DANIELS HARBOUR, NFLD
+71185 5024 -5758 0 19 0 ---- DANIELS HARBOUR, NFLD
71186 4837 -7054 0 7 0 ---- CAP-ROUGE, QUE
-71187 4937 -12150 23 39 0 ---- HOPE A, BC
-71188 4878 -6448 35 34 0 ---- GASPE A, QUE
+71187 4937 -12150 0 39 0 ---- HOPE A, BC
+71188 4878 -6448 0 34 0 ---- GASPE A, QUE
71189 4826 -7011 0 4 0 ---- POINTE CLAVEAU, QUE
71190 4814 -6972 0 7 0 ---- POINTE DE L'ISLET, QUE
71191 4560 -6495 0 43 0 ---- FUNDY PARK (ALMA) CS, NB
71192 5303 -12251 0 545 0 ---- QUESNEL, BC
-71193 4856 -8139 99 294 0 ---- TIMMINS CLIMATE, ONT
-71194 4000 -5000 12 11 0 ---- MOBILE UPPER AIR STATION-ATLANTIC, NS
+71193 4856 -8139 0 294 0 ---- TIMMINS CLIMATE, ONT
+71194 4000 -5000 0 0 0 ---- MOBILE UPPER AIR STATION-ATLANTIC, NS
71196 4586 -7725 162 161 0 ---- PEMBROKE CLIMATE, ONT
-71197 4757 -5915 40 40 0 ---- PORT AUX BASQUES, NFLD
+71197 4757 -5915 0 40 0 ---- PORT AUX BASQUES, NFLD
71198 4618 -7292 0 16 0 ---- LAC SAINT-PIERRE, QUE
71199 6012 -12882 0 690 0 ---- WATSON LAKE (AUT), YT
-71200 4841 -12333 0 70 0 ---- VICTORIA GONZALES CS, BC
+71200 4841 -12332 69 61 0 ---- VICTORIA GONZALES CS, BC
71201 4930 -12312 0 3 0 ---- VANCOUVER HARBOUR CS, BC
71202 5278 -11243 0 712 0 ---- ROSALIND AGCM, ALTA
-71203 4996 -11938 430 433 0 ---- KELOWNA, BC
-71203 4994 -11940 456 456 0 T-T- KELOWNA UA, BC
-71207 4978 -12316 52 52 0 ---- SQUAMISH AIRPORT, BC
+71203 4996 -11938 0 433 0 ---- KELOWNA, BC
+71203 4994 -11940 0 456 0 T-T- KELOWNA UA, BC
+71207 4978 -12316 0 54 0 ---- SQUAMISH AIRPORT, BC
71208 5382 -8989 224 223 0 ---- BIG TROUT LAKE, ONT
-71209 4911 -12330 0 15 0 ---- SANDHEADS CS, BC
-71211 4949 -12330 10 5 0 ---- HOWE SOUND - PAM ROCKS, BC
+71209 4911 -12330 0 11 0 ---- SANDHEADS CS, BC
+71211 4949 -12330 5 7 0 ---- HOWE SOUND - PAM ROCKS, BC
71212 4732 -7115 673 673 0 ---- FORET MONTMORENCY RCS, QUE
-71213 4770 -7984 243 0 0 ---- EARLTON CLIMATE, ONT
+71213 4770 -7984 0 243 0 ---- EARLTON CLIMATE, ONT
71214 5212 -11010 0 687 0 ---- BODO AGDM, ALTA
-71215 4903 -11944 293 283 0 ---- OSOYOOS CS, BC
-71216 5027 -11781 512 512 0 ---- NAKUSP CS, BC
+71215 4903 -11944 285 283 0 ---- OSOYOOS CS, BC
+71216 5027 -11782 0 512 0 ---- NAKUSP CS, BC
71217 5028 -11335 0 1006 0 ---- CHAMPION AGDM, ALTA
-71218 5070 -11929 351 351 0 ---- SALMON ARM CS, BC
-71219 5417 -13036 0 5 0 ---- HOLLAND ROCK, BC
-71220 5436 -13072 0 26 0 ---- LUCY ISLAND LIGHTSTATION, BC
+71218 5070 -11929 0 351 0 ---- SALMON ARM CS, BC
+71219 5417 -13036 7 6 0 ---- HOLLAND ROCK, BC
+71220 5430 -13061 0 23 0 ---- LUCY ISLAND LIGHTSTATION, BC
71221 5631 -11974 0 630 0 ---- CLEARDALE AGDM, ALTA
71222 5843 -13003 0 802 0 ---- DEASE LAKE (AUT), BC
71223 5194 -11071 0 772 0 ---- CONSORT AGDM, ALTA
@@ -9248,7 +9331,7 @@
71227 5318 -11225 0 688 0 ---- HOLDEN AGDM, ALTA
71228 5285 -11187 0 675 0 ---- KILLAM AGDM, ALTA
71229 5697 -11745 0 457 0 ---- MANNING AGDM, ALTA
-71230 5520 -11940 745 745 0 ---- BEAVERLODGE RCS, ALTA
+71230 5520 -11940 0 745 0 ---- BEAVERLODGE RCS, ALTA
71231 4973 -11145 0 817 0 ---- BOW ISLAND, ALTA
71232 5108 -11507 0 1298 0 ---- BOW VALLEY, ALTA
71233 5309 -11444 0 852 0 ---- BRETON PLOTS, ALTA
@@ -9264,13 +9347,13 @@
71243 4970 -11277 921 910 0 ---- LETHBRIDGE CDA, ALTA
71244 4913 -11205 0 1050 0 ---- MILK RIVER, ALTA
71245 5094 -11519 0 2543 0 ---- NAKISKA RIDGETOP, ALTA
-71246 5655 -11528 546 546 0 ---- RED EARTH, ALTA
+71246 5655 -11528 0 546 0 ---- RED EARTH, ALTA
71247 5002 -11072 0 717 0 ---- MEDICINE HAT, ALTA
71248 5178 -11468 0 1114 0 ---- SUNDRE A, ALTA
-71249 5170 -11323 0 915 0 ---- THREE HILLS, ALTA
+71249 5177 -11321 0 857 0 ---- THREE HILLS, ALTA
71250 4751 -5278 0 110 0 ---- ST JOHNS WEST CLIMATE, NFLD
71251 5005 -11213 0 779 0 ---- VAUXHALL CDA CS, ALTA
-71252 5339 -11835 0 1402 0 ---- WILLOW CREEK 1, ALTA
+71252 5339 -11835 0 1370 0 ---- WILLOW CREEK 1, ALTA
71253 5871 -11387 0 241 0 ---- GARDEN RIVER, ALTA
71254 5303 -11281 0 739 0 ---- CAMROSE, ALTA
71255 5704 -11156 0 310 0 ---- MILDRED LAKE, ALTA
@@ -9278,18 +9361,18 @@
71257 5166 -11268 0 836 0 ---- MORRIN AGDM, ALTA
71258 5176 -11408 0 1046 0 ---- OLDS AGDM, ALTA
71259 5113 -11171 0 750 0 ---- POLLOCKVILLE AGDM, ALTA
-71260 4648 -8451 192 192 0 ---- SAULT STE MARIE A, ONT
-71261 4377 -8172 216 214 0 ---- GODERICH, ONT
-71263 4317 -7993 238 238 0 ---- HAMILTON A, ONT
-71264 4463 -6351 24 24 0 ---- SHEARWATER RCS, NS
-71265 4363 -7940 77 77 0 ---- TORONTO CITY CENTRE, ONT
+71260 4648 -8451 0 192 0 ---- SAULT STE MARIE A, ONT
+71261 4377 -8172 0 214 0 ---- GODERICH, ONT
+71263 4317 -7993 0 238 0 ---- HAMILTON A, ONT
+71264 4463 -6351 26 24 0 ---- SHEARWATER RCS, NS
+71265 4363 -7940 0 77 0 ---- TORONTO CITY CENTRE, ONT
71267 4963 -11280 0 929 0 ---- LETHBRIDGE, ALTA
-71268 5482 -12719 330 518 0 ---- SMITHERS AIRPORT AUTO, BC
+71268 5482 -12719 0 518 0 ---- SMITHERS AIRPORT AUTO, BC
71269 5031 -11009 0 800 0 ---- SCHULER AGDM, ALTA
71270 4450 -8022 0 180 0 ---- COLLINGWOOD, ONT
71271 5463 -11338 0 635 0 ---- ATHABASCA AGCM, ALTA
71272 5871 -9851 0 281 0 ---- TADOULE LAKE, MAN
-71273 5402 -10914 546 546 0 ---- LOON LAKE RCS, SASK
+71273 5402 -10914 0 546 0 ---- LOON LAKE RCS, SASK
71274 5428 -11250 0 680 0 ---- SMOKY LAKE AGDM, ALTA
71275 5401 -11127 0 649 0 ---- ST. PAUL AGCM, ALTA
71276 5363 -11168 0 678 0 ---- TWO HILLS AGDM, ALTA
@@ -9297,7 +9380,7 @@
71278 5334 -11088 0 623 0 ---- VERMILION AGDM, ALTA
71279 5022 -6625 0 53 0 ---- SEPT-ILES, QUE
71281 4442 -7584 0 82 0 ---- GRENADIER ISLAND, ONT
-71282 4455 -7922 221 221 0 ---- LAGOON CITY, ONT
+71282 4455 -7922 0 221 0 ---- LAGOON CITY, ONT
71283 5612 -11789 0 748 0 ---- BROWNVALE AGCM, ALTA
71284 5393 -11392 0 714 0 ---- BUSBY AGCM, ALTA
71285 5428 -11297 0 664 0 ---- ABEE AGDM, ALTA
@@ -9306,12 +9389,12 @@
71288 6911 -10514 0 19 0 ---- CAMBRIDGE BAY GSN, NU
71289 5235 -11260 0 795 0 ---- STETTLER AGDM, ALTA
71290 5530 -12313 0 690 0 ---- MACKENZIE, BC
-71291 4915 -8834 233 233 0 ---- CAMERON FALLS (AUT), ONT
+71291 4915 -8834 0 233 0 ---- CAMERON FALLS (AUT), ONT
71292 5126 -10246 0 498 0 ---- YORKTON, SASK
71293 6878 -8123 0 9 0 ---- HALL BEACH A, NU
-71294 4507 -7788 331 331 0 ---- BANCROFT AUTO, ONT
-71295 5063 -9322 363 363 0 ---- EAR FALLS (AUT), ONT
-71296 4423 -7978 251 251 0 ---- EGBERT CS, ONT
+71294 4507 -7788 0 331 0 ---- BANCROFT AUTO, ONT
+71295 5063 -9322 0 363 0 ---- EAR FALLS (AUT), ONT
+71296 4423 -7978 0 251 0 ---- EGBERT CS, ONT
71297 4329 -7991 0 102 0 ---- HAMILTON RBG CS, ONT
71298 4203 -8290 192 191 0 ---- HARROW CDA AUTO, ONT
71299 4941 -8244 0 218 0 ---- KAPUSKASING CDA ON, ONT
@@ -9324,13 +9407,13 @@
71306 5847 -7808 0 25 0 ---- INUKJUAK, QUE
71307 4245 -8188 0 206 0 ---- RIDGETOWN RCS, ONT
71308 4561 -6168 68 67 0 ---- TRACADIE, NS
-71309 5129 -8062 9 9 0 ---- MOOSONEE RCS, ONT
+71309 5129 -8062 0 9 0 ---- MOOSONEE RCS, ONT
71310 4645 -6258 30 30 0 ---- ST. PETERS, PEI
71311 4576 -6423 21 20 0 ---- NAPPAN AUTO, NS
71312 5333 -10400 0 372 0 ---- NIPAWIN, SASK
-71313 5028 -6360 34 38 0 ---- HAVRE-SAINT-PIERRE A, QUE
+71313 5028 -6360 0 38 0 ---- HAVRE-SAINT-PIERRE A, QUE
71314 4448 -7955 0 289 0 ---- BARRIE-ORO, ONT
-71315 4799 -6633 42 42 0 ---- CHARLO AUTO, NB
+71315 4799 -6633 0 42 0 ---- CHARLO AUTO, NB
71316 5477 -11202 0 567 0 ---- LAC LA BICHE CLIMATE, ALTA
71317 4542 -6347 39 38 0 ---- DEBERT, NS
71318 5207 -11145 0 791 0 ---- CORONATION CLIMATE, ALTA
@@ -9339,14 +9422,14 @@
71321 6375 -6854 0 34 0 ---- IQALUIT CLIMATE, NU
71322 6110 -9407 0 10 0 ---- ARVIAT CLIMATE, NU
71323 4620 -7078 0 229 0 ---- BEAUCEVILLE, QUE
-71326 4459 -6355 52 52 0 ---- HALIFAX KOOTENAY, NS
+71326 4459 -6355 0 52 0 ---- HALIFAX KOOTENAY, NS
71331 5553 -10235 0 297 0 ---- ISLAND FALLS (AUT), SASK
71332 6781 -11514 24 23 0 ---- KUGLUKTUK CLIMATE, NU
71334 5872 -9850 0 262 0 ---- TADOULE LAKE CS, MAN
-71335 5833 -6259 516 501 0 ---- SAGLEK, NFLD
-71337 4992 -5567 194 194 0 ---- LA SCIE, NFLD
+71335 5833 -6259 0 501 0 ---- SAGLEK, NFLD
+71337 4992 -5567 0 194 0 ---- LA SCIE, NFLD
71338 6755 -6403 0 6 0 ---- QIKIQTARJUAQ A, NU
-71339 5230 -5583 11 12 0 ---- MARY'S HARBOUR, NFLD
+71339 5230 -5583 0 12 0 ---- MARY'S HARBOUR, NFLD
71340 5432 -11395 0 614 0 ---- DAPP AGDM, ALTA
71341 4962 -11382 0 1073 0 ---- BROCKET AGDM, ALTA
71342 5138 -11035 0 767 0 ---- OYEN AGDM, ALTA
@@ -9364,7 +9447,7 @@
71354 5357 -11230 0 683 0 ---- MUNDARE AGDM, ALTA
71355 8250 -6233 0 65 0 ---- ALERT CLIMATE, NU
71356 6431 -9600 0 51 0 ---- BAKER LAKE CLIMATE, NU
-71357 6755 -6403 6 6 0 ---- QIKIQTARJUAQ CLIMATE, NU
+71357 6755 -6403 0 6 0 ---- QIKIQTARJUAQ CLIMATE, NU
71358 7048 -6852 0 27 0 ---- CLYDE RIVER CLIMATE, NU
71359 5366 -11059 0 616 0 ---- DEWBERRY AGCM, ALTA
71360 5278 -11043 0 649 0 ---- EDGERTON AGCM, ALTA
@@ -9375,12 +9458,12 @@
71365 6176 -12124 0 168 0 ---- FORT SIMPSON CLIMATE, NWT
71366 6423 -7653 0 48 0 ---- CAPE DORSET A, NU
71367 5010 -12293 0 817 0 ---- BLACKCOMB BASE SLIDING CENTRE BOTTOM, BC
-71368 4346 -8038 315 322 0 ---- KITCHEN/WATERLOO, ONT
+71368 4346 -8038 0 322 0 ---- KITCHEN/WATERLOO, ONT
71369 5529 -11478 0 583 0 ---- SLAVE LAKE, ALTA
71370 4656 -7273 0 110 0 ---- SHAWINIGAN, QUE
-71371 4552 -7342 28 27 0 ---- MONTREAL/ST-HUBERT A, QUE
+71371 4552 -7342 0 27 0 ---- MONTREAL/ST-HUBERT A, QUE
71372 4529 -7334 0 44 0 ---- L'ACADIE, QUE
-71373 4505 -7286 0 152 0 ---- FRELIGHSBURG, QUE
+71373 4503 -7284 0 224 0 ---- FRELIGHSBURG, QUE
71374 5016 -6006 0 7 0 ---- CAPE WHITTLE, QUE
71375 5022 -6420 0 9 0 ---- ILE AUX PERROQUETS, QUE
71376 4608 -7456 0 239 0 ---- ST-JOVITE, QUE
@@ -9400,33 +9483,33 @@
71390 5016 -6643 0 24 0 ---- POINTE NOIRE CS, QUE
71391 4584 -7565 0 195 0 ---- HIGH FALLS, QUE
71392 4678 -7129 0 91 0 ---- STE-FOY (U. LAVAL), QUE
-71393 5111 -11401 1081 1081 0 ---- CALGARY INT'L CS, ALTA
-71395 4488 -6350 145 145 0 ---- HALIFAX STANFIELD INT'L A, NS
+71393 5111 -11401 0 1081 0 ---- CALGARY INT'L CS, ALTA
+71395 4488 -6350 0 145 0 ---- HALIFAX STANFIELD INT'L A, NS
71396 4467 -6358 10 0 0 --T- HALIFAX METOC, NS
-71397 4498 -6492 28 28 0 ---- GREENWOOD A, NS
-71398 5129 -8061 40 9 0 ---- MOOSONEE, ONT
+71397 4498 -6492 0 28 0 ---- GREENWOOD A, NS
+71398 5129 -8061 0 9 0 ---- MOOSONEE, ONT
71399 5159 -11075 0 755 0 ---- SEDALIA AGCM, ALTA
-71400 4897 -5607 103 103 0 ---- BADGER (AUT), NFLD
+71400 4897 -5607 0 103 0 ---- BADGER (AUT), NFLD
71401 4911 -11774 0 567 0 ---- WARFIELD RCS
-71402 4968 -5480 92 92 0 ---- TWILLINGATE (AUT), NFLD
-71403 4482 -6233 16 16 0 ---- BEAVER ISLAND (AUT), NS
+71402 4968 -5480 0 92 0 ---- TWILLINGATE (AUT), NFLD
+71403 4482 -6233 0 16 0 ---- BEAVER ISLAND (AUT), NS
71404 5898 -11044 0 215 0 ---- EGG ISLAND, ALTA
71405 5333 -11254 0 679 0 ---- SHONTS AGCM, ALTA
71406 5102 -5710 0 6 0 ---- FEROLLE POINT (AUT), NFLD
71407 6854 -8980 17 16 0 ---- KUGAARUK CLIMATE, NU
71408 4737 -5579 0 60 0 ---- SAGONA ISLAND, NFLD
71409 4955 -11105 0 845 0 ---- ETZICOM AGCM, ALTA
-71410 5396 -9784 23 224 0 ---- NORWAY HOUSE, MAN
-71411 4399 -6466 10 10 0 ---- WESTERN HEAD, NS
-71412 4646 -6199 8 8 0 ---- EAST POINT (AUT), PEI
+71410 5396 -9784 0 224 0 ---- NORWAY HOUSE, MAN
+71411 4399 -6466 0 10 0 ---- WESTERN HEAD, NS
+71412 4646 -6199 0 8 0 ---- EAST POINT (AUT), PEI
71413 5182 -11168 0 804 0 ---- SPONDIN AGCM, ALTA
-71414 5437 -11087 4 556 0 ---- DUPRE AGCM, ALTA
-71415 4577 -6268 2 2 0 ---- CARIBOU POINT (AUT), NS
+71414 5437 -11087 0 556 0 ---- DUPRE AGCM, ALTA
+71415 4577 -6268 0 2 0 ---- CARIBOU POINT (AUT), NS
71417 5072 -5611 0 30 0 ---- ENGLEE (AUT), NFLD
-71418 4723 -6014 27 27 0 ---- ST PAUL ISLAND (AUT), NS
-71419 4535 -6098 8 8 0 ---- HART ISLAND (AUT), NS
-71421 5187 -6328 561 589 0 ---- LAC EON, QUE
-71423 4909 -6170 4 7 0 ---- HEATH POINT, QUE
+71418 4723 -6014 0 27 0 ---- ST PAUL ISLAND (AUT), NS
+71419 4535 -6098 0 8 0 ---- HART ISLAND (AUT), NS
+71421 5187 -6328 0 589 0 ---- LAC EON, QUE
+71423 4909 -6170 0 7 0 ---- HEATH POINT, QUE
71424 4700 -7081 0 4 0 ---- ILE D'ORLEANS, QUE
71425 4925 -6531 0 29 0 ---- CAP-MADELEINE, QUE
71426 4807 -6956 0 6 0 ---- ILE ROUGE, QUE
@@ -9434,68 +9517,68 @@
71428 4911 -6665 0 5 0 ---- CAP-CHAT, QUE
71429 4842 -6431 0 15 0 ---- CAP-D'ESPOIR, QUE
71430 4383 -7715 79 79 0 ---- POINT PETRE (AUT), ONT
-71431 4395 -7817 78 78 0 ---- COBOURG (AUT), ONT
+71431 4395 -7817 0 78 0 ---- COBOURG (AUT), ONT
71432 4325 -7922 0 79 0 ---- PORT WELLER (AUT), ONT
71433 4733 -8583 189 187 0 ---- CARIBOU ISLAND (AUT), ONT
71434 5498 -8543 54 53 0 ---- PEAWANUCK (AUT), ONT
-71435 4903 -9047 489 489 0 ---- UPSALA (AUT), ONT
-71436 4423 -7836 295 191 0 ---- PETERBOROUGH, ONT
+71435 4903 -9047 0 489 0 ---- UPSALA (AUT), ONT
+71436 4423 -7836 0 191 0 ---- PETERBOROUGH, ONT
71437 4330 -7980 0 77 0 ---- BURLINGTON PIERS (AUT), ONT
71438 4503 -8037 0 191 0 ---- WESTERN ISLAND (AUT), ONT
-71439 4533 -8173 181 181 0 ---- COVE ISLAND (AUT), ONT
+71439 4533 -8173 0 181 0 ---- COVE ISLAND (AUT), ONT
71440 5123 -11298 0 901 0 ---- STANDARD AGCM, ALTA
-71441 4903 -9756 253 253 0 ---- GRETNA (AUT), MAN
-71442 5108 -9755 253 253 0 ---- FISHER BRANCH (AUT), MAN
-71443 5212 -10123 335 335 0 ---- SWAN RIVER RCS, MAN
+71441 4903 -9756 0 253 0 ---- GRETNA (AUT), MAN
+71442 5108 -9755 0 253 0 ---- FISHER BRANCH (AUT), MAN
+71443 5212 -10123 0 335 0 ---- SWAN RIVER RCS, MAN
71444 5066 -9994 627 627 0 ---- WASAGAMING, MAN
71445 5282 -9762 0 223 0 ---- GEORGE ISLAND (AUT), MAN
-71446 5027 -10773 825 825 0 ---- SWIFT CURRENT CDA, SASK
-71447 4928 -10099 446 446 0 ---- MELITA, MAN
+71446 5027 -10773 0 825 0 ---- SWIFT CURRENT CDA, SASK
+71447 4928 -10099 0 446 0 ---- MELITA, MAN
71448 5018 -9606 0 268 0 ---- PINAWA, MAN
71449 4902 -9560 0 329 0 ---- SPRAGUE, MAN
71450 5113 -10658 595 595 0 ---- ELBOW CS, SASK
71451 5633 -10328 0 344 0 ---- SOUTHEND, SASK
71452 4970 -10380 0 589 0 ---- WEYBURN, SASK
-71453 4990 -10947 767 767 0 ---- MAPLE CREEK, SASK
+71453 4990 -10947 0 767 0 ---- MAPLE CREEK, SASK
71454 5392 -10607 0 569 0 ---- WASKESIU LAKE, SASK
71455 5095 -10715 0 665 0 ---- LUCKY LAKE, SASK
71456 5282 -10460 0 490 0 ---- MELFORT, SASK
71457 5056 -11185 0 747 0 ---- BROOKS, ALTA
71458 5351 -11210 0 639 0 ---- VEGREVILLE, ALTA
71459 5091 -10950 0 676 0 ---- LEADER AIRPORT, SASK
-71460 4597 -8148 196 196 0 ---- KILLARNEY (AUT), ONT
-71461 5581 -11789 218 563 0 ---- EAGLESHAM AGCM, ALTA
+71460 4597 -8148 0 196 0 ---- KILLARNEY (AUT), ONT
+71461 5581 -11789 0 563 0 ---- EAGLESHAM AGCM, ALTA
71462 4563 -8295 183 183 0 ---- GREAT DUCK ISLAND (AUT), ONT
-71463 4287 -7925 184 184 0 ---- PORT COLBORNE (AUT), ONT
+71463 4287 -7925 0 184 0 ---- PORT COLBORNE (AUT), ONT
71464 4257 -8005 170 175 0 ---- LONG POINT (AUT), ONT
-71465 4225 -8190 178 178 0 ---- ERIEAU (AUT), ONT
+71465 4225 -8190 0 178 0 ---- ERIEAU (AUT), ONT
71466 4183 -8247 0 195 0 ---- SOUTHEAST SHOAL (AUT), ONT
71467 7198 -12525 88 88 0 ---- SACHS HARBOUR CLIMATE, NWT
71468 4970 -8832 0 261 0 ---- KATATOTA ISLAND (AUT), ONT
71470 6576 -11125 497 488 0 ---- LUPIN CS, NU
-71471 5574 -12018 657 655 0 ---- DAWSON CREEK A, BC
-71472 5332 -13277 14 14 0 ---- KINDAKUN ROCKS (AUT), BC
+71471 5574 -12018 0 655 0 ---- DAWSON CREEK A, BC
+71472 5332 -13277 16 14 0 ---- KINDAKUN ROCKS (AUT), BC
71473 4878 -12304 0 24 0 ---- SATURNA ISLAND CS, BC
-71474 5114 -12150 1057 1057 0 ---- CLINTON (AUT), BC
-71475 4932 -12493 2 76 0 ---- PORT ALBERNI (AUT), BC
-71476 5458 -13069 0 8 0 ---- GREY ISLET (AUT), BC
-71477 5416 -13166 7 7 0 ---- ROSE SPIT (AUT), BC
+71474 5114 -12150 0 1057 0 ---- CLINTON (AUT), BC
+71475 4932 -12493 0 76 0 ---- PORT ALBERNI (AUT), BC
+71476 5458 -13069 0 10 0 ---- GREY ISLET (AUT), BC
+71477 5416 -13166 0 7 0 ---- ROSE SPIT (AUT), BC
71478 5082 -12891 111 112 0 ---- SARTINE ISLAND (AUT), BC
-71479 5011 -12794 99 99 0 ---- SOLANDER ISLAND (AUT), BC
-71480 6529 -12675 94 94 0 ---- NORMAN WELLS CLIMATE, NWT
+71479 5011 -12794 94 92 0 ---- SOLANDER ISLAND (AUT), BC
+71480 6529 -12675 0 94 0 ---- NORMAN WELLS CLIMATE, NWT
71481 5357 -11512 0 819 0 ---- EVANSBURG AGCM, ALTA
-71482 5219 -12747 0 31 0 ---- CATHEDRAL POINT (AUT), BC
+71482 5219 -12747 26 26 0 ---- CATHEDRAL POINT (AUT), BC
71483 5441 -11477 0 676 0 ---- FORT ASSINIBOINE AGCM, ALTA
-71484 5350 -13063 0 15 0 ---- BONILLA ISLAND (AUT), BC
-71485 5094 -12765 0 17 0 ---- HERBERT ISLAND (AUT), BC
-71486 5293 -11803 1020 1020 0 ---- JASPER WARDEN, ALTA
+71484 5349 -13063 14 13 0 ---- BONILLA ISLAND (AUT), BC
+71485 5094 -12763 13 14 0 ---- HERBERT ISLAND (AUT), BC
+71486 5293 -11803 0 1020 0 ---- JASPER WARDEN, ALTA
71487 4973 -10595 0 726 0 ---- ASSINIBOIA AIRPORT, SASK
-71488 4900 -11338 509 1354 0 ---- CARWAY, ALTA
-71489 5236 -10883 660 660 0 ---- SCOTT CDA, SASK
-71490 6509 -10243 244 244 0 ---- ROBERTSON LAKE (AUT), NU
+71488 4900 -11338 0 1354 0 ---- CARWAY, ALTA
+71489 5236 -10883 0 660 0 ---- SCOTT CDA, SASK
+71490 6509 -10243 0 244 0 ---- ROBERTSON LAKE (AUT), NU
71491 6623 -12863 0 82 0 ---- FORT GOOD HOPE CS, NWT
71492 6920 -12236 0 552 0 ---- TUKTUT NOGAIT, NWT
-71493 4541 -6434 31 31 0 ---- PARRSBORO, NS
+71493 4541 -6434 0 31 0 ---- PARRSBORO, NS
71494 4605 -7127 0 430 0 ---- THETFORD MINES RCS, QUE
71495 5137 -11410 0 1145 0 ---- NEIR AGDM, ALTA
71496 5217 -10672 506 504 0 ---- SASKATOON RCS, SASK
@@ -9503,12 +9586,12 @@
71498 5093 -11294 0 907 0 ---- GLEICHEN AGCM, ALTA
71499 5726 -10562 0 514 0 ---- KEY LAKE, SASK
71500 5383 -11454 0 670 0 ---- GLENEVIS AGCM, ALTA
-71501 6956 -13891 1 1 0 ---- HERSCHEL ISLAND, YT
-71502 6963 -13544 17 17 0 ---- PELLY ISLAND, NWT
+71501 6956 -13891 0 1 0 ---- HERSCHEL ISLAND, YT
+71502 6963 -13544 0 17 0 ---- PELLY ISLAND, NWT
71503 6520 -12343 0 213 0 ---- DELINE CS, NWT
71504 5322 -11389 0 754 0 ---- THORSBY AGCM, ALTA
-71505 6077 -13758 595 595 0 ---- HAINES JUNCTION, YT
-71506 6698 -13622 731 731 0 ---- ROCK RIVER, YT
+71505 6077 -13758 0 595 0 ---- HAINES JUNCTION, YT
+71506 6698 -13622 0 731 0 ---- ROCK RIVER, YT
71507 5726 -11730 0 455 0 ---- HAWK HILLS AGCM, ALTA
71508 4367 -7940 0 113 0 ---- TORONTO CITY, ONT
71509 4968 -11275 0 903 0 ---- LETHBRIDGE DEMO FARM AGDM, ALTA
@@ -9516,7 +9599,7 @@
71511 5167 -10540 0 526 0 ---- WATROUS EAST, SASK
71512 5027 -6423 0 11 0 ---- LONGUE-POINTE-DE-MINGAN, QUE
71513 5019 -6179 0 12 0 ---- NATASHQUAN, QUE
-71514 5043 -10467 577 577 0 ---- REGINA RCS, SASK
+71514 5043 -10467 0 577 0 ---- REGINA RCS, SASK
71515 5055 -10365 580 579 0 ---- INDIAN HEAD CDA, SASK
71516 4905 -10548 0 756 0 ---- CORONACH SPC, SASK
71517 4957 -11305 0 980 0 ---- BLOOD TRIBE AGDM, ALTA
@@ -9526,20 +9609,20 @@
71521 5066 -7053 0 497 0 ---- MANOUANE EST, QUE
71522 4984 -7117 0 398 0 ---- CHUTE-DES-PASSES, QUE
71523 4928 -7336 0 304 0 ---- CHAMOUCHOUANE, QUE
-71524 4581 -7343 21 21 0 ---- L'ASSOMPTION, QUE
+71524 4581 -7343 0 21 0 ---- L'ASSOMPTION, QUE
71525 4992 -11092 0 766 0 ---- SEVEN PERSONS AGDM, ALTA
71526 5103 -11328 0 967 0 ---- STRATHMORE AGDM, ALTA
71527 4983 -9274 0 413 0 ---- DRYDEN REGIONAL, ONT
71528 4990 -11273 0 858 0 ---- IRON SPRINGS AGDM, ALTA
71529 6242 -11069 0 179 0 ---- LUTSELK'E CS, NWT
-71531 4592 -7730 131 130 0 ---- PETAWAWA AWOS, ONT
+71531 4592 -7730 0 130 0 ---- PETAWAWA AWOS, ONT
71532 4497 -7930 0 282 0 ---- MUSKOKA, ONT
71533 4768 -7983 0 243 0 ---- EARLTON AWOS, ONT
-71534 4427 -7991 224 223 0 ---- BORDEN AWOS, ONT
+71534 4427 -7991 0 223 0 ---- BORDEN AWOS, ONT
71535 4980 -11203 0 833 0 ---- FINCASTLE AGDM, ALTA
71536 4948 -11268 0 937 0 ---- RAYMOND AGDM, ALTA
71537 5083 -11205 0 714 0 ---- ROSEMARY AGDM, ALTA
-71538 4228 -8296 190 190 0 ---- WINDSOR A, ONT
+71538 4228 -8296 0 190 0 ---- WINDSOR A, ONT
71539 5033 -10554 0 577 0 ---- MOOSE JAW CS, SASK
71540 5231 -11449 0 965 0 ---- HESPERO AGCM, ALTA
71541 5591 -11712 0 638 0 ---- JEAN COTE AGCM, ALTA
@@ -9558,10 +9641,10 @@
71554 4851 -6847 0 5 0 ---- POINTE-AU-PERE (INRS), QUE
71555 5018 -11388 0 1364 0 ---- STAVELY AAFC, ALTA
71556 5142 -10525 0 497 0 ---- LAST MOUNTAIN CS, SASK
-71557 5011 -12078 53 591 0 ---- MERRITT, BC
+71557 5011 -12078 0 591 0 ---- MERRITT, BC
71558 5138 -5610 0 29 0 ---- ST ANTHONY, NFLD
71559 4922 -10297 0 581 0 ---- ESTEVAN, SASK
-71560 4900 -9724 242 242 0 ---- EMERSON AUTO, MAN
+71560 4900 -9724 0 242 0 ---- EMERSON AUTO, MAN
71561 4423 -7978 0 252 0 ---- EGBERT UA, ONT
71562 4938 -12320 0 1180 0 ---- CYPRESS BOWL SNOWBOARD, BC
71563 5018 -9838 0 248 0 ---- DELTA MARSH CS, MAN
@@ -9570,71 +9653,73 @@
71566 5344 -11472 0 814 0 ---- TOMAHAWK AGDM, ALTA
71567 5394 -11058 0 630 0 ---- LINDBERGH AGDM, ALTA
71568 5045 -12598 0 8 0 ---- FANNY ISLAND, BC
-71569 5020 -10471 580 580 0 ---- BRATT'S LAKE CLIMATE, SASK
+71569 5020 -10471 0 580 0 ---- BRATT'S LAKE CLIMATE, SASK
71569 5020 -10470 0 580 0 ---- BRATT'S LAKE UA, SASK
71570 5052 -9598 0 253 0 ---- GREAT FALLS CLIMATE, MAN
71571 5569 -11923 1015 1015 0 ---- SPIRIT RIVER AUTO STATION, ALTA
71572 5604 -9651 0 183 0 ---- KELSEY DAM CS, MAN
71573 4287 -8055 0 232 0 ---- DELHI CS, ONT
-71574 4763 -6575 60 59 0 ---- BATHURST A, NB
-71575 6423 -7653 50 50 0 ---- CAPE DORSET CLIMATE, NU
+71574 4763 -6575 0 59 0 ---- BATHURST A, NB
+71575 6423 -7653 0 50 0 ---- CAPE DORSET CLIMATE, NU
71576 7269 -7795 55 65 0 ---- POND INLET CLIMATE, NU
71577 5063 -9698 0 217 0 ---- GIMLI HARBOUR CS, MAN
71578 4684 -7120 0 10 0 ---- BEAUPORT, QUE
71579 4989 -9713 0 230 0 ---- WINNIPEG THE FORKS, MAN
-71580 6955 -9358 0 28 0 ---- TALOYOAK A, NU
+71580 6955 -9358 0 27 0 ---- TALOYOAK A, NU
71581 4553 -7827 0 397 0 ---- ALGONQUIN PARK EAST GATE, ONT
-71582 5218 -12816 413 43 0 ---- BELLA BELLA, BC
+71582 5218 -12816 0 43 0 ---- BELLA BELLA, BC
71583 6825 -12210 0 548 0 ---- QAVVIK LAKE, NWT
71584 5028 -6361 0 38 0 ---- HAVRE ST. PIERRE, QUE
71585 5665 -11121 0 369 0 ---- FORT MCMURRAY CS, ALTA
71586 5515 -10527 382 379 0 ---- LA RONGE RCS, SASK
-71587 4752 -5278 0 114 0 ---- ST JOHN'S WEST CDA CS, NFLD
+71587 5306 -9334 0 290 0 ---- SANDY LAKE A, ONT
71588 4957 -5788 0 68 0 ---- ROCKY HARBOUR CS, NFLD
71589 4856 -5397 107 107 0 ---- TERRA NOVA NAT PARK CS, NFLD
71590 4742 -6831 157 154 0 ---- EDMUNDSTON, NB
71592 7298 -8501 0 10 0 ---- ARCTIC BAY CS, NU
71593 5863 -11168 0 212 0 ---- PRAIRIE RIVER, ALTA
+71595 4395 -5996 0 1 0 ---- SABLE ISLAND A, NS
71597 6864 -9585 0 47 0 ---- GJOA HAVEN A, NU
71598 4780 -6483 0 5 0 ---- BAS CARAQUET, NB
-71599 4443 -6520 0 165 0 ---- KEJIMKUJIK 1, NS
-71600 4393 -6001 6 5 0 T-T- SABLE ISLAND, NS
-71601 4463 -6350 51 51 0 ---- SHEARWATER A, NS
-71603 4383 -6609 46 43 0 ---- YARMOUTH A, NS
+71599 4440 -6520 126 125 0 ---- KEJIMKUJIK 1, NS
+71600 4393 -6001 0 5 0 T-T- SABLE ISLAND, NS
+71601 4463 -6350 0 44 0 ---- SHEARWATER A, NS
+71603 4383 -6609 0 43 0 ---- YARMOUTH A, NS
71603 4387 -6609 9 9 0 T-T- YARMOUTH UA, NS
71604 4682 -6067 0 439 0 ---- NORTH MOUNTAIN CS, NS
-71605 4952 -12348 0 123 0 ---- PORT MELLON, BC
+71605 4953 -12350 0 123 0 ---- PORT MELLON, BC
71607 4521 -6725 28 26 0 ---- ST. STEPHEN, NB
71608 4918 -12319 2 2 0 ---- VANCOUVER SEA ISLAND CCG, BC
-71609 4532 -6589 111 109 0 ---- SAINT JOHN A, NB
-71610 4544 -7169 242 241 0 ---- SHERBROOKE, QUE
+71609 4532 -6589 0 109 0 ---- SAINT JOHN A, NB
+71610 4544 -7169 0 241 0 ---- SHERBROOKE, QUE
71611 4537 -7181 0 181 0 ---- LENNOXVILLE, QUE
-71612 4550 -7358 0 73 0 ---- MCTAVISH, QUE
+71612 4551 -7358 0 73 0 ---- MCTAVISH, QUE
71614 4517 -7368 0 53 0 ---- STE-CLOTHILDE, QUE
71616 4630 -7206 0 97 0 ---- LEMIEUX, QUE
-71617 4842 -7115 0 128 0 ---- JONQUIERE, QUE
+71617 4842 -7114 0 136 0 ---- JONQUIERE, QUE
71618 5874 -9407 0 29 0 ---- CHURCHILL, MAN
71619 4801 -6533 0 46 0 ---- NEW CARLISLE 1, QUE
71620 4422 -7659 93 93 0 ---- KINGSTON, ONT
-71621 4412 -7753 85 86 0 --P- TRENTON A, ONT
+71621 4412 -7753 0 86 0 --P- TRENTON A, ONT
71622 4303 -8115 0 278 0 ---- LONDON CS, ONT
-71623 4303 -8115 278 278 0 ---- LONDON A, ONT
-71624 4368 -7963 173 173 0 ---- TORONTO LESTER B. PEARSON INT'L A, ONT
-71625 4595 -7731 130 130 0 --T- PETAWAWA A, ONT
-71627 4547 -7375 34 36 0 ---- MONTREAL/PIERRE ELLIOTT TRUDEAU INT'L A, QUE
-71628 4532 -7567 114 114 0 ---- OTTAWA MACDONALD-CARTIER INT'L A, ONT
-71629 7202 -9420 191 10 0 ---- FORT ROSS, NU
-71630 4497 -7930 282 282 0 ---- MUSKOKA A, ONT
+71623 4303 -8115 0 278 0 ---- LONDON A, ONT
+71624 4368 -7963 0 173 0 ---- TORONTO LESTER B. PEARSON INT'L A, ONT
+71625 4595 -7731 0 130 0 --T- PETAWAWA A, ONT
+71627 4547 -7375 0 36 0 ---- MONTREAL/PIERRE ELLIOTT TRUDEAU INT'L A, QUE
+71628 4532 -7567 0 114 0 ---- OTTAWA MACDONALD-CARTIER INT'L A, ONT
+71629 7202 -9420 0 10 0 ---- FORT ROSS, NU
+71630 4497 -7930 0 282 0 ---- MUSKOKA A, ONT
71631 4398 -8075 0 415 0 ---- MOUNT FOREST (AUT), ONT
71632 5685 -10107 0 354 0 ---- LYNN LAKE RCS, MAN
-71633 4475 -8111 223 222 0 ---- WIARTON A, ONT
-71634 4744 -6559 188 124 0 ---- RED PINES, NB
+71633 4475 -8111 0 222 0 ---- WIARTON A, ONT
+71634 4744 -6559 0 124 0 ---- RED PINES, NB
71636 5413 -11168 0 647 0 ---- CAMPSIE AUTO, AB
71637 5342 -11173 0 687 0 ---- RANFURLY AUTO, AB
71638 4945 -12370 0 86 0 ---- SECHELT, BC
71639 4386 -7937 0 198 0 ---- TORONTO BUTTONVILLE A, ONT
71640 4772 -8481 0 401 0 ---- LAKE SUPERIOR PROVINCIAL PARK, ON
-71642 4782 -8335 448 448 0 ---- CHAPLEAU A, ONT
+71642 4782 -8335 0 448 0 ---- CHAPLEAU A, ONT
+71643 5654 -7926 0 34 0 ---- SANIKILUAQ, NU
71645 5165 -12008 0 438 0 ---- CLEARWATER AUTO, BC
71648 4865 -12345 0 42 1 ---- SIDNEY, B.C (CAP14)
71649 7470 -9497 0 36 1 ---- RESOLUTE (CAP15)
@@ -9644,7 +9729,7 @@
71663 5313 -10940 0 640 0 ---- WASECA RCS, SASK
71665 5655 -6168 12 8 0 ---- NAIN, NFLD
71666 4643 -6477 0 36 0 ---- BUCTOUCHE CDA CS, NB
-71667 4837 -8933 199 199 0 ---- THUNDER BAY CS, ONT
+71667 4837 -8933 0 199 0 ---- THUNDER BAY CS, ONT
71668 4592 -6661 35 35 0 ---- FREDERICTON CDA CS, NB
71670 4677 -6501 0 34 0 ---- KOUCHIBOUGUAC CS, NB
71671 4507 -6448 0 49 0 ---- KENTVILLE CDA CS, NS
@@ -9653,14 +9738,14 @@
71674 5255 -11212 0 721 0 ---- FORESTBURG AGCM, ALTA
71675 5382 -8990 0 223 0 ---- BIG TROUT LAKE A, ONT
71678 5344 -9176 0 278 0 ---- MUSKRAT DAM, ONT
-71679 5377 -12600 861 861 0 ---- OOTSA LAKESKINS LAKE CLIMATE, BC
+71679 5377 -12600 0 861 0 ---- OOTSA LAKESKINS LAKE CLIMATE, BC
71680 6360 -11386 0 373 0 ---- LOWER CARP LAKE, NWT
71681 5071 -12128 0 327 0 ---- ASHCROFT, BC
71682 6112 -12285 0 183 0 ---- LINDBURG LANDING, NWT
71683 6875 -13350 0 85 0 ---- TRAIL VALLEY, NWT
-71684 4770 -7984 1631 244 0 ---- EARLTON A, ONT
+71684 4770 -7984 0 244 0 ---- EARLTON A, ONT
71685 5097 -11818 0 445 0 ---- REVELSTOKE A, BC
-71686 5842 -13003 907 803 0 ---- DEASE LAKE A, BC
+71686 5842 -13003 0 803 0 ---- DEASE LAKE A, BC
71687 5013 -12295 0 659 0 ---- WHISTLER - NESTERS, BC
71688 5014 -12311 0 884 0 ---- CALLAGHAN VALLEY, BC
71689 5665 -11122 0 369 0 ---- FORT MCMURRAY A, ALTA
@@ -9668,93 +9753,93 @@
71691 4913 -6820 0 22 0 ---- BAIE-COMEAU, QUE
71692 4733 -5459 27 22 0 ---- MARTICOT ISLAND, NFLD
71693 5529 -11478 0 583 0 ---- SLAVE LAKE RCS, AB
-71694 4514 -7940 297 297 0 ---- BEATRICE CLIMATE, ONT
-71695 5397 -10110 274 274 0 ---- THE PAS CLIMATE, MAN
+71694 4514 -7940 0 297 0 ---- BEATRICE CLIMATE, ONT
+71695 5397 -10110 0 274 0 ---- THE PAS CLIMATE, MAN
71696 5873 -9407 0 29 0 ---- CHURCHILL CLIMATE, MAN
71697 4392 -7888 0 140 0 ---- OSHAWA, ONT
-71700 4587 -6653 31 21 0 ---- FREDERICTON, NB
-71701 4584 -6645 51 51 0 ---- GAGETOWN AWOS A, NB
+71700 4587 -6654 0 21 0 ---- FREDERICTON, NB
+71701 4584 -6645 0 51 0 ---- GAGETOWN AWOS A, NB
71701 4583 -6643 0 51 0 -T-- GAGETOWN A, NB
-71702 4644 -6384 21 12 0 ---- SUMMERSIDE, PEI
-71703 4716 -6783 245 242 0 ---- ST LEONARD A, NB
+71702 4644 -6384 0 12 0 ---- SUMMERSIDE, PEI
+71703 4716 -6783 0 242 0 ---- ST LEONARD A, NB
71704 4300 -8231 0 181 0 ---- SARNIA, ONT
-71705 4611 -6468 71 71 0 ---- MONCTON A, NB
-71706 4629 -6313 79 49 0 ---- CHARLOTTETOWN A, PEI
-71707 4617 -6005 72 62 0 ---- SYDNEY A, NS
-71709 4742 -6178 18 11 0 ---- ILES DE LA MADELEINE A, QUE
+71705 4611 -6468 0 71 0 ---- MONCTON A, NB
+71706 4629 -6313 0 49 0 ---- CHARLOTTETOWN A, PEI
+71707 4617 -6005 0 62 0 ---- SYDNEY A, NS
+71709 4742 -6178 0 11 0 ---- ILES DE LA MADELEINE A, QUE
71710 4743 -6177 0 8 0 ---- ILES DE LA MADELEINE, QUE
-71711 4798 -6633 38 40 0 ---- CHARLO A, NB
+71711 4798 -6633 0 40 0 ---- CHARLO A, NB
71712 4512 -7429 0 49 0 ---- ST-ANICET 1, QUE
71713 4736 -7003 0 31 0 ---- LA POCATIERE, QUE
-71714 4679 -7138 74 74 0 ---- QUEBEC/JEAN LESAGE INTL, QUE
-71715 4781 -6955 148 147 0 ---- RIVIERE-DU-LOUP, QUE
-71716 4690 -7150 168 168 0 --T- VALCARTIER A, QUE
+71714 4680 -7138 0 60 0 ---- QUEBEC/JEAN LESAGE INTL, QUE
+71715 4781 -6955 0 147 0 ---- RIVIERE-DU-LOUP, QUE
+71716 4690 -7150 0 168 0 --T- VALCARTIER A, QUE
71717 4700 -6547 33 33 0 ---- MIRAMICHI A, NB
-71718 4860 -6822 52 52 0 ---- MONT-JOLI A, QUE
+71718 4860 -6822 0 52 0 ---- MONT-JOLI A, QUE
71719 4801 -6448 5 4 0 ---- MISCOU ISLAND (AUT), NB
-71720 4983 -12448 0 125 0 ---- POWELL RIVER, BC
-71721 4627 -7598 201 200 0 ---- MANIWAKI AIRPORT, QUE
+71720 4983 -12450 0 125 0 ---- POWELL RIVER, BC
+71721 4627 -7598 0 200 0 ---- MANIWAKI AIRPORT, QUE
71722 4630 -7601 188 189 0 T-T- MANIWAKI UA, QUE
71723 4623 -7266 0 8 0 ---- NICOLET, QUE
-71724 4636 -7252 0 6 0 ---- TROIS-RIVIERES, QUE
-71725 4806 -7779 345 337 0 ---- VAL-D'OR A, QUE
-71726 4792 -7462 441 445 0 ---- PARENT, QUE
-71727 4833 -7100 159 159 0 ---- BAGOTVILLE A, QUE
-71728 4852 -7227 187 179 0 ---- ROBERVAL A, QUE
-71730 4663 -8080 348 348 0 ---- SUDBURY A, ONT
-71731 4636 -7942 371 370 0 ---- NORTH BAY A, ONT
+71724 4635 -7252 0 6 0 ---- TROIS-RIVIERES, QUE
+71725 4806 -7779 0 337 0 ---- VAL-D'OR A, QUE
+71726 4792 -7462 0 445 0 ---- PARENT, QUE
+71727 4833 -7100 0 159 0 ---- BAGOTVILLE A, QUE
+71728 4852 -7227 0 179 0 ---- ROBERVAL A, QUE
+71730 4663 -8080 0 348 0 ---- SUDBURY A, ONT
+71731 4636 -7942 0 370 0 ---- NORTH BAY A, ONT
71732 4671 -7909 0 181 0 ---- BARRAGE TEMISCAMINGUE, QUE
-71733 4588 -8257 189 193 0 ---- GORE BAY AWOS, ONT
+71733 4588 -8257 0 193 0 ---- GORE BAY AWOS, ONT
71733 4588 -8257 0 194 0 ---- GORE BAY AWOS, ONT
71734 4825 -7903 0 318 0 ---- ROUYN, QUE
71735 4770 -7984 246 243 0 ---- EARLTON A, ONT
71736 4952 -11400 0 1190 0 ---- PINCHER CREEK CLIMATE, ALTA
71737 4682 -7409 0 430 0 ---- SAINT-MICHEL-DES-SAINTS, QUE
-71738 4797 -8478 287 287 0 ---- WAWA A, ONT
-71739 4857 -8138 295 295 0 ---- TIMMINS VICTOR POWER A, ONT
+71738 4797 -8478 0 287 0 ---- WAWA A, ONT
+71739 4857 -8138 0 295 0 ---- TIMMINS VICTOR POWER A, ONT
71741 5070 -12044 0 345 0 ---- KAMLOOPS AUT, BC
71742 4895 -5457 0 151 0 ---- GANDER AIRPORT CS, NFLD
71743 5791 -7298 0 171 0 ---- RIVIERE AUX FEUILLES, QUE
71744 4701 -6545 34 33 0 ---- MIRAMICHI RCS, NB
71746 4300 -8230 0 181 0 ---- SARNIA CLIMATE, ONT
-71747 4876 -9163 389 389 0 ---- ATIKOKAN (AUT), ONT
+71747 4876 -9163 0 389 0 ---- ATIKOKAN (AUT), ONT
71748 5063 -9705 230 230 0 ---- GIMLI CLIMATE, MAN
-71749 4837 -8932 206 199 0 ---- THUNDER BAY AWOS, ONT
71749 4837 -8932 0 199 0 ---- THUNDER BAY AWOS, ONT
-71750 4859 -8629 208 208 0 ---- PUKASKWA (AUT), ONT
-71751 4837 -8912 209 211 0 ---- WELCOME ISLAND (AUT), ONT
+71749 4837 -8932 0 199 0 ---- THUNDER BAY AWOS, ONT
+71750 4859 -8629 0 208 0 ---- PUKASKWA (AUT), ONT
+71751 4837 -8912 0 211 0 ---- WELCOME ISLAND (AUT), ONT
71752 4297 -7933 180 178 0 ---- WELLAND-PELHAM, ONT
71753 4523 -6306 25 24 0 ---- UPPER STEWIACKE RCS, NS
71754 5277 -10826 0 548 0 ---- NORTH BATTLEFORD RCS, SASK
71756 5010 -12294 0 937 0 ---- BLACKCOMB BASE SLIDING CENTER, BC
71757 5218 -12815 0 43 0 ---- BELLA BELLA A, BC
-71758 4616 -6004 63 63 0 ---- SYDNEY CS, NS
+71758 4616 -6004 0 63 0 ---- SYDNEY CS, NS
71760 5125 -12308 0 1670 0 ---- BIG CREEK, BC
71761 5413 -11192 0 645 0 ---- VILNA AGCM, ALTA
71762 5673 -13166 0 15 0 ---- ISKUT RIVER, BC
71763 5368 -12483 0 715 0 ---- NECHAKO RIVER, BC
-71765 5022 -12158 225 225 0 ---- LYTTON RCS, BC
+71765 5022 -12158 0 225 0 ---- LYTTON RCS, BC
71766 4934 -12439 0 58 0 ---- QUALICUM BEACH AIRPORT, BC
71767 4523 -8163 0 214 0 ---- TOBERMORY RCS, ONT
-71768 4956 -11964 0 454 0 ---- SUMMERLAND CS, BC
+71768 4956 -11965 456 454 0 ---- SUMMERLAND CS, BC
71769 4935 -12416 10 13 0 ---- BALLENAS ISLAND, BC
71770 4908 -11650 0 646 0 ---- CRESTON CAMPBELL SCIENTIFIC, BC
-71771 5303 -13160 0 17 0 ---- CUMSHEWA ISLAND, BC
-71772 4922 -12380 0 5 0 ---- ENTRANCE ISLAND CS, BC
+71771 5303 -13160 14 13 0 ---- CUMSHEWA ISLAND, BC
+71772 4921 -12381 9 8 0 ---- ENTRANCE ISLAND CS, BC
71773 6073 -13510 0 707 0 ---- WHITEHORSE AUTO, YT
71774 4858 -12353 0 366 0 ---- MALAHAT, BC
71775 4921 -12269 0 5 0 ---- PITT MEADOWS CS, BC
-71776 4949 -11731 535 535 0 ---- NELSON CS, BC
-71777 5030 -12274 0 204 0 ---- PEMBERTON AIRPORT CS, BC
+71776 4949 -11731 0 535 0 ---- NELSON CS, BC
+71777 5031 -12273 0 204 0 ---- PEMBERTON AIRPORT CS, BC
71778 4830 -12353 31 30 0 ---- RACE ROCKS, BC
-71779 5303 -12251 5 545 0 ---- QUESNEL AIRPORT AUTO, BC
-71780 4838 -12392 22 22 0 ---- SHERINGHAM POINT, BC
-71781 4949 -12444 20 20 0 ---- SISTERS ISLAND, BC
-71782 4975 -11489 0 1138 0 ---- SPARWOOD CS, BC
+71779 5303 -12251 0 545 0 ---- QUESNEL AIRPORT AUTO, BC
+71780 4838 -12392 0 22 0 ---- SHERINGHAM POINT, BC
+71781 4949 -12444 0 20 0 ---- SISTERS ISLAND, BC
+71782 4974 -11488 1138 1137 0 ---- SPARWOOD CS, BC
71783 4846 -12330 0 60 0 ---- VICTORIA UNIVERSITY CS, BC
-71784 4935 -12319 178 168 0 ---- WEST VANCOUVER AUT, BC
+71784 4935 -12319 0 170 0 ---- WEST VANCOUVER AUT, BC
71785 4902 -12278 0 13 0 ---- WHITE ROCK CAMPBELL SCIENTIFIC, BC
-71786 5144 -11634 0 1615 0 ---- YOHO PARK, BC
+71786 5144 -11634 0 1602 0 ---- YOHO PARK, BC
71787 4569 -6517 404 403 0 ---- MECHANIC SETTLEMENT, NB
71788 4987 -11173 0 783 0 ---- GRASSY LAKE, ALTA
71789 4979 -11338 0 978 0 ---- FORT MACLEOD AGCM, ALTA
@@ -9765,196 +9850,198 @@
71795 4999 -11026 0 795 0 ---- IRVINE AGCM, ALTA
71796 5229 -11111 0 720 0 ---- KESSLER AGCM, ALTA
71797 5335 -11042 0 664 0 ---- KITSCOTY AGCM, ALTA
-71799 4865 -12343 19 20 0 ---- VICTORIA INT'L A, BC
-71800 4666 -5308 28 27 0 ---- CAPE RACE (AUT), NFLD
-71801 4762 -5274 135 141 0 ---- ST.JOHN'S A, NFLD
+71798 4843 -12344 0 3 0 ---- ESQUIMALT HARBOUR, BC
+71799 4865 -12343 0 20 0 ---- VICTORIA INT'L A, BC
+71800 4666 -5308 0 27 0 ---- CAPE RACE (AUT), NFLD
+71801 4762 -5274 0 141 0 ---- ST.JOHN'S A, NFLD
71801 4762 -5275 141 140 0 T-T- ST.JOHN'S UA, NFLD
-71802 4752 -5278 113 112 0 T-T- ST JOHN'S WEST UA, NFLD
-71803 4895 -5458 151 151 0 ---- GANDER INT'L A, NFLD
+71802 4752 -5278 0 112 0 T-T- ST JOHN'S WEST UA, NFLD
+71803 4895 -5458 0 151 0 ---- GANDER INT'L A, NFLD
71804 5833 -6258 501 501 0 ---- SAGLEK, NFLD
71805 4677 -5618 7 8 0 ---- SAINT-PIERRE
71806 4992 -5567 194 192 0 ---- LA SCIE, NFLD
-71807 4729 -5399 16 19 0 ---- ARGENTIA (AUT), NFLD
-71808 5145 -5718 32 37 0 ---- LOURDES DE BLANC SABLON A, QUE
-71809 4922 -5740 29 22 0 ---- DEER LAKE A, NFLD
-71810 4984 -6429 53 55 0 ---- PORT-MENIER, QUE
+71807 4729 -5399 0 19 0 ---- ARGENTIA (AUT), NFLD
+71808 5145 -5718 0 37 0 ---- LOURDES DE BLANC SABLON A, QUE
+71809 4922 -5740 0 22 0 ---- DEER LAKE A, NFLD
+71810 4984 -6429 0 55 0 ---- PORT-MENIER, QUE
71811 5022 -6625 55 53 0 T-T- SEPT-ILES UA, QUE
71811 5022 -6625 53 52 0 T-T- SEPT-ILES UA, QUE
71812 6110 -9407 0 10 0 ---- ARVIAT A, NU
-71813 5018 -6180 9 11 0 ---- NATASHQUAN A, QUE
-71814 5046 -5964 6 8 0 ---- CHEVERY, QUE
-71815 4853 -5855 9 25 0 ---- STEPHENVILLE A, NFLD
+71813 5019 -6181 0 12 0 ---- NATASHQUAN A, QUE
+71814 5046 -5964 0 8 0 ---- CHEVERY, QUE
+71815 4853 -5855 0 25 0 ---- STEPHENVILLE A, NFLD
71815 4857 -5857 61 57 0 T-T- STEPHENVILLE UA, NFLD
-71816 5332 -6042 49 49 0 ---- GOOSE A, NFLD
+71816 5332 -6042 0 49 0 ---- GOOSE A, NFLD
71816 5330 -6037 39 36 0 T-T- GOOSE UA, NFLD
-71817 5230 -5583 11 12 0 ---- MARY'S HARBOUR A, NFLD
-71818 5371 -5704 15 14 0 ---- CARTWRIGHT, NFLD
-71819 5139 -5607 34 33 0 ---- ST. ANTHONY, NFLD
+71817 5230 -5583 0 11 0 ---- MARY'S HARBOUR A, NFLD
+71818 5371 -5704 0 14 0 ---- CARTWRIGHT, NFLD
+71819 5139 -5607 0 33 0 ---- ST. ANTHONY, NFLD
71820 4422 -7659 0 93 0 ---- KINGSTON CLIMATE, ONT
-71821 4976 -7779 280 281 0 ---- MATAGAMI A, QUE
-71822 4977 -7453 387 387 0 ---- CHIBOUGAMAU-CHAPAIS A, QUE
-71823 5375 -7368 307 306 0 ---- LA GRANDE IV, QUE
+71821 4976 -7779 0 281 0 ---- MATAGAMI A, QUE
+71822 4977 -7453 0 387 0 ---- CHIBOUGAMAU-CHAPAIS A, QUE
+71823 5376 -7368 0 303 0 ---- LA GRANDE IV, QUE
71823 5376 -7368 0 302 0 T-T- LA GRANDE IV UA, QUE
71824 4982 -7498 0 381 0 ---- CHAPAIS, QUE
-71825 5293 -6687 551 551 0 ---- WABUSH LAKE A, NFLD
-71826 6614 -6570 23 23 0 ---- PANGNIRTUNG, NU
-71827 5363 -7770 195 195 0 ---- LA GRANDE RIVIERE A, QUE
-71828 5480 -6680 518 521 0 ---- SCHEFFERVILLE A, QUE
+71825 5293 -6687 0 551 0 ---- WABUSH LAKE A, NFLD
+71826 6614 -6570 0 23 0 ---- PANGNIRTUNG, NU
+71827 5363 -7770 0 195 0 ---- LA GRANDE RIVIERE A, QUE
+71828 5480 -6680 0 517 0 ---- SCHEFFERVILLE, QUE
71829 4926 -6815 0 130 0 ---- BAIE-COMEAU, QUE
-71830 5138 -5608 34 33 0 ---- ST. ANTHONY LWIS, NFLD
-71831 4941 -8247 227 227 0 ---- KAPUSKASING A, ONT
-71832 4975 -8416 264 264 0 ---- NAGAGAMI (AUT), ONT
+71830 5138 -5608 0 33 0 ---- ST. ANTHONY LWIS, NFLD
+71831 4941 -8247 0 227 0 ---- KAPUSKASING A, ONT
+71832 4975 -8416 0 264 0 ---- NAGAGAMI (AUT), ONT
71833 4355 -8022 0 325 0 ---- GUELPH TURFGRASS, ONT
-71834 4978 -8693 349 348 0 ---- GERALDTON A, ONT
-71835 5145 -9022 391 391 0 ---- PICKLE LAKE (AUT), ONT
-71836 5129 -8061 10 9 0 ---- MOOSONEE A, ONT
+71834 4978 -8693 0 348 0 ---- GERALDTON A, ONT
+71835 5145 -9022 0 391 0 ---- PICKLE LAKE (AUT), ONT
+71836 5129 -8061 0 9 0 ---- MOOSONEE A, ONT
71836 5127 -8065 11 10 0 T-T- MOOSONEE UA, ONT
71837 4936 -11311 0 1128 0 ---- ST. MARY RESERVOIR, ALTA
71839 4930 -11336 0 1115 0 ---- BULLHORN COULEE RESERVOIR, ALTA
71840 4940 -9832 0 341 0 ---- DEERWOOD RCS, MAN
71841 5029 -8891 324 323 0 ---- ARMSTRONG (AUT), ONT
-71842 5012 -9190 390 383 0 ---- SIOUX LOOKOUT A, ONT
-71843 4988 -9713 0 251 0 ---- WINNIPEG UA, MAN
-71844 5382 -8990 224 222 0 ---- BIG TROUT LAKE READAC, ONT
-71845 5145 -9021 391 386 0 ---- PICKLE LAKE A, ONT
+71842 5012 -9190 0 383 0 ---- SIOUX LOOKOUT A, ONT
+71843 4980 -9713 0 227 0 ---- WINNIPEG UA, MAN
+71844 5382 -8990 0 222 0 ---- BIG TROUT LAKE READAC, ONT
+71845 5145 -9021 0 386 0 ---- PICKLE LAKE A, ONT
71845 5145 -9020 0 386 0 T-T- PICKLE LAKE UA, ONT
71846 5220 -8794 253 253 0 ---- LANSDOWNE HOUSE (AUT), ONT
-71847 4983 -9275 413 413 0 ---- DRYDEN A, ONT
+71847 4983 -9275 0 413 0 ---- DRYDEN A, ONT
71848 5030 -11286 0 955 0 ---- TRAVERS AGCM, ALTA
71849 4992 -9725 0 239 0 ---- WINNIPEG 'A' CS, MAN
-71850 4979 -9437 410 410 0 ---- KENORA A, ONT
-71851 4990 -9828 268 273 0 ---- PORTAGE SOUTHPORT, MAN
-71852 4992 -9723 239 239 0 ---- WINNIPEG RICHARDSON INT'L A, MAN
-71853 4978 -9964 375 375 0 T-T- SHILO, MAN
-71854 5107 -9379 383 386 0 ---- RED LAKE A, ONT
-71855 5110 -10005 305 304 0 ---- DAUPHIN A, MAN
+71850 4979 -9437 0 410 0 ---- KENORA A, ONT
+71851 4990 -9828 0 273 0 ---- PORTAGE SOUTHPORT, MAN
+71852 4992 -9723 0 239 0 ---- WINNIPEG RICHARDSON INT'L A, MAN
+71853 4978 -9964 0 375 0 T-T- SHILO, MAN
+71854 5107 -9379 0 386 0 ---- RED LAKE A, ONT
+71855 5110 -10005 0 304 0 ---- DAUPHIN A, MAN
71856 5063 -9705 230 230 0 ---- GIMLI INDUSTRIAL PARK, MAN
71857 5366 -11008 0 596 0 ---- TULLIBY LAKE AGCM, ALTA
-71858 5319 -9927 223 223 0 ---- GRAND RAPIDS (AUT), MAN
-71860 5110 -11437 1204 1201 0 ---- SPRINGBANK A, ALTA
-71861 5037 -10257 602 600 0 ---- BROADVIEW, SASK
-71862 4922 -10297 584 581 0 ---- ESTEVAN A, SASK
-71863 5043 -10467 577 578 0 ---- REGINA INT'L A, SASK
-71864 5033 -10555 577 577 0 ---- MOOSE JAW A, SASK
-71865 5177 -10420 561 560 0 ---- WYNYARD (AUT), SASK
-71866 5217 -10672 503 504 0 ---- SASKATOON DIEFENBAKER INT'L A, SASK
-71867 5397 -10110 271 270 0 ---- THE PAS A, MAN
-71867 5397 -10110 274 274 0 T-T- THE PAS UA, MAN
-71868 5282 -10232 358 358 0 ---- HUDSON BAY (AUT), SASK
-71869 5322 -10567 428 428 0 ---- PRINCE ALBERT A, SASK
-71870 5030 -10768 818 816 0 ---- SWIFT CURRENT A, SASK
-71871 5331 -11007 669 669 0 ---- LLOYDMINSTER, ALTA
-71872 8116 -9182 719 72 0 ---- SVARTEVAEG, NU
+71858 5319 -9927 0 223 0 ---- GRAND RAPIDS (AUT), MAN
+71860 5110 -11437 0 1201 0 ---- SPRINGBANK A, ALTA
+71861 5037 -10257 0 600 0 ---- BROADVIEW, SASK
+71862 4922 -10297 0 580 0 ---- ESTEVAN A, SASK
+71863 5043 -10467 0 578 0 ---- REGINA INT'L A, SASK
+71864 5033 -10555 0 577 0 ---- MOOSE JAW A, SASK
+71865 5177 -10420 0 560 0 ---- WYNYARD (AUT), SASK
+71866 5217 -10672 0 504 0 ---- SASKATOON DIEFENBAKER INT'L A, SASK
+71867 5397 -10110 0 270 0 ---- THE PAS A, MAN
+71867 5397 -10110 0 274 0 T-T- THE PAS UA, MAN
+71868 5282 -10232 0 358 0 ---- HUDSON BAY (AUT), SASK
+71869 5322 -10567 0 428 0 ---- PRINCE ALBERT A, SASK
+71870 5030 -10768 0 816 0 ---- SWIFT CURRENT A, SASK
+71871 5331 -11007 0 669 0 ---- LLOYDMINSTER, ALTA
+71872 8116 -9182 0 72 0 ---- SVARTEVAEG, NU
71873 5208 -11145 0 791 0 ---- CORONATION, ALTA
-71874 6684 -10801 922 5 0 ---- BATHURST INLET, NU
-71875 4952 -11398 1190 1189 0 ---- PINCHER CREEK (AUT), ALTA
-71876 5277 -10825 544 548 0 ---- NORTH BATTLEFORD, SASK
-71877 5111 -11402 1084 1084 0 ---- CALGARY INT'L A, ALTA
-71878 5218 -11389 904 905 0 ---- RED DEER A, ALTA
-71879 5357 -11352 668 671 0 ---- EDMONTON CITY CENTRE AWOS, ALTA
-71880 4961 -11578 939 940 0 ---- CRANBROOK A, BC
-71881 5358 -11646 927 927 0 ---- EDSON AWOS A, ALTA
-71882 5096 -11818 443 445 0 ---- REVELSTOKE A, BC
-71883 5213 -11929 683 683 0 ---- BLUE RIVER CS, BC
+71874 6684 -10801 0 5 0 ---- BATHURST INLET, NU
+71875 4952 -11398 0 1189 0 ---- PINCHER CREEK (AUT), ALTA
+71876 5277 -10824 0 548 0 ---- NORTH BATTLEFORD, SASK
+71877 5111 -11402 0 1084 0 ---- CALGARY INT'L A, ALTA
+71878 5218 -11389 0 905 0 ---- RED DEER A, ALTA
+71879 5357 -11352 0 671 0 ---- EDMONTON CITY CENTRE AWOS, ALTA
+71880 4961 -11578 0 940 0 ---- CRANBROOK A, BC
+71881 5358 -11646 0 927 0 ---- EDSON AWOS A, ALTA
+71882 5096 -11818 0 445 0 ---- REVELSTOKE A, BC
+71883 5213 -11929 0 683 0 ---- BLUE RIVER CS, BC
+71884 4383 -6608 0 36 0 ---- YARMOUTH RCS, NS
71885 4933 -11352 0 1074 0 ---- GLENWOOD, ALTA
71886 5126 -10246 0 498 0 ---- YORKTON, SASK
-71887 5070 -12044 346 345 0 ---- KAMLOOPS A, BC
-71888 5318 -11173 1061 711 0 ---- VIKING AGCM, ALTA
-71889 4946 -11960 344 344 0 ---- PENTICTON A, BC
-71891 5022 -12158 229 225 0 ---- LYTTON, BC
-71892 4920 -12318 2 4 0 ---- VANCOUVER INT'L A, BC
-71893 4972 -12490 24 26 0 ---- COMOX A, BC
-71894 4938 -12654 0 7 0 ---- ESTEVAN POINT CS, BC
+71887 5070 -12044 0 345 0 ---- KAMLOOPS A, BC
+71888 5318 -11173 0 711 0 ---- VIKING AGCM, ALTA
+71889 4946 -11960 0 344 0 ---- PENTICTON A, BC
+71891 5022 -12158 0 225 0 ---- LYTTON, BC
+71892 4919 -12318 0 4 0 ---- VANCOUVER INT'L A, BC
+71893 4972 -12490 0 26 0 ---- COMOX A, BC
+71894 4938 -12654 8 6 0 ---- ESTEVAN POINT CS, BC
71895 5298 -11344 0 774 0 ---- WETASKIWIN AGCM, ALTA
-71896 5388 -12268 691 691 0 ---- PRINCE GEORGE, BC
-71897 5226 -12872 26 26 0 ---- MCINNES ISLAND, BC
-71898 5429 -13044 36 35 0 ---- PRINCE RUPERT AWOS, BC
-71899 5426 -13306 41 41 0 ---- LANGARA, BC
+71896 5388 -12268 0 691 0 ---- PRINCE GEORGE, BC
+71897 5226 -12872 0 26 0 ---- MCINNES ISLAND, BC
+71898 5429 -13044 0 35 0 ---- PRINCE RUPERT AWOS, BC
+71899 5426 -13306 0 43 0 ---- LANGARA, BC
71900 5545 -6022 10 12 0 ---- HOPEDALE (AUT), NFLD
71901 5533 -6322 479 479 0 ---- BORDER, QUE
-71902 5655 -6168 12 7 0 ---- NAIN A, NFLD
-71903 5426 -13306 41 41 0 ---- LANGARA ISLAND CS, BC
+71902 5655 -6168 0 7 0 ---- NAIN A, NFLD
+71903 5426 -13306 49 47 0 ---- LANGARA ISLAND RCS, BC
71904 5194 -11359 0 940 0 ---- WIMBORNE AGCM, ALTA
-71905 4568 -7404 24 82 0 ---- MONTREAL MIRABEL INT'L, QUE
-71906 5810 -6842 44 39 0 ---- KUUJJUAQ A, QUE
+71905 4568 -7404 0 82 0 ---- MONTREAL MIRABEL INT'L, QUE
+71906 5810 -6842 0 40 0 ---- KUUJJUAQ A, QUE
71906 5812 -6842 65 60 0 T-T- KUUJJUAQ, UA, QUE
-71907 5847 -7808 28 25 0 ---- INUKJUAK A, QUE
+71907 5847 -7808 0 26 0 ---- INUKJUAK A, QUE
71907 5847 -7808 26 24 0 T-T- INUKJUAK UA, QUE
-71908 5390 -12279 601 601 0 T-T- PRINCE GEORGE UA, BC
-71909 6375 -6855 34 34 0 ---- IQALUIT A, NU
+71908 5390 -12279 0 601 0 T-T- PRINCE GEORGE UA, BC
+71909 6375 -6855 0 34 0 ---- IQALUIT A, NU
71909 6375 -6855 0 22 0 T-T- IQALUIT UA, NU
-71910 6423 -7653 56 48 0 ---- CAPE DORSET A, NU
-71911 6881 -9343 45 43 0 ---- SHEPHERD BAY A, NU
-71912 5636 -9471 146 145 0 ---- GILLAM A, MAN
-71913 5873 -9405 29 29 0 ---- CHURCHILL A, MAN
-71913 5873 -9407 29 29 0 T-T- CHURCHILL A UA, MAN
-71914 4878 -12313 178 178 0 ---- SATURNA CAPMON CS, BC
-71915 6419 -8336 64 62 0 ---- CORAL HARBOUR A, NU
-71915 6420 -8337 57 57 0 T-T- CORAL HARBOUR UA, NU
-71916 7323 -11954 42 42 0 ---- THOMSEN RIVER, NWT
-71917 7998 -8593 13 10 0 ---- EUREKA, NU
-71917 7998 -8593 10 10 0 T-T- EUREKA UA, NU
+71910 6423 -7653 0 48 0 ---- CAPE DORSET A, NU
+71911 6881 -9343 0 43 0 ---- SHEPHERD BAY A, NU
+71912 5636 -9471 0 145 0 ---- GILLAM A, MAN
+71913 5873 -9405 0 29 0 ---- CHURCHILL A, MAN
+71913 5873 -9407 0 29 0 T-T- CHURCHILL A UA, MAN
+71914 4878 -12313 0 178 0 ---- SATURNA CAPMON CS, BC
+71915 6419 -8336 0 62 0 ---- CORAL HARBOUR A, NU
+71915 6420 -8337 0 57 0 T-T- CORAL HARBOUR UA, NU
+71916 7323 -11954 0 42 0 ---- THOMSEN RIVER, NWT
+71917 7998 -8593 0 10 0 ---- EUREKA, NU
+71917 7998 -8593 0 10 0 T-T- EUREKA UA, NU
71918 6844 -8973 0 328 0 ---- CAM FOUR, NU
71920 4345 -6547 6 5 0 ---- BACCARO PT, NS
71921 5481 -6681 0 521 0 ---- SCHEFFERVILLE A, QC
71922 5515 -10527 0 379 0 ---- LA RONGE A, SASK
-71923 6113 -10088 353 353 0 ---- ENNADAI LAKE (AUT), NU
-71924 7472 -9497 68 68 0 ---- RESOLUTE CARS, NU
-71924 7470 -9497 46 46 0 T-T- RESOLUTE UA, NU
-71925 6911 -10514 23 27 0 ---- CAMBRIDGE BAY A, NU
-71925 6913 -10507 26 25 0 T-T- CAMBRIDGE BAY UA, NU
-71926 6430 -9608 18 19 0 ---- BAKER LAKE A, NU
-71926 6431 -9600 50 51 0 T-T- BAKER LAKE UA, NU
-71927 4882 -12372 60 60 0 ---- NORTH COWICHAN, BC
-71928 5242 -11491 988 988 0 ---- ROCKY MTN HOUSE (AUT), ALTA
-71930 5414 -11579 785 782 0 ---- WHITECOURT A, ALTA
-71931 4911 -5358 19 19 0 ---- POOLS ISLAND, NFLD
-71932 5665 -11122 375 369 0 ---- FORT MCMURRAY AWOS A, ALTA
-71933 5446 -12429 690 688 0 ---- FORT ST JAMES AUTO
-71934 6002 -11196 205 205 0 ---- FORT SMITH A, NWT
-71934 6003 -11193 204 204 0 T-T- FORT SMITH UA, NWT
-71935 6084 -11578 170 165 0 ---- HAY RIVER A, NWT
-71936 6246 -11444 206 206 0 ---- YELLOWKNIFE A, NWT
-71937 6850 -11322 21 16 0 ---- LADY FRANKLIN POINT A, NU
-71938 6781 -11514 22 23 0 ---- KUGLUKTUK A, NU
-71940 5518 -11888 669 669 0 ---- GRANDE PRAIRIE A, ALTA
+71923 6113 -10088 0 353 0 ---- ENNADAI LAKE (AUT), NU
+71924 7472 -9497 0 68 0 ---- RESOLUTE CARS, NU
+71924 7470 -9497 0 46 0 T-T- RESOLUTE UA, NU
+71925 6911 -10514 0 31 0 ---- CAMBRIDGE BAY A, NU
+71925 6913 -10507 0 25 0 T-T- CAMBRIDGE BAY UA, NU
+71926 6430 -9608 0 19 0 ---- BAKER LAKE A, NU
+71926 6431 -9600 0 51 0 T-T- BAKER LAKE UA, NU
+71927 4882 -12372 47 45 0 ---- NORTH COWICHAN, BC
+71928 5242 -11491 0 988 0 ---- ROCKY MTN HOUSE (AUT), ALTA
+71930 5414 -11579 0 782 0 ---- WHITECOURT A, ALTA
+71931 4911 -5358 0 19 0 ---- POOLS ISLAND, NFLD
+71932 5665 -11122 0 369 0 ---- FORT MCMURRAY AWOS A, ALTA
+71933 5446 -12429 690 688 0 ---- FORT ST JAMES AUTO, BC
+71934 6002 -11196 0 205 0 ---- FORT SMITH A, NWT
+71934 6003 -11193 0 204 0 T-T- FORT SMITH UA, NWT
+71935 6084 -11578 0 165 0 ---- HAY RIVER A, NWT
+71936 6246 -11444 0 206 0 ---- YELLOWKNIFE A, NWT
+71937 6850 -11322 0 16 0 ---- LADY FRANKLIN POINT A, NU
+71938 6781 -11514 0 23 0 ---- KUGLUKTUK A, NU
+71940 5518 -11888 0 669 0 ---- GRANDE PRAIRIE A, ALTA
71941 4805 -7778 0 337 0 ---- VAL D' OR A, QUE
-71943 5624 -12074 695 695 0 ---- FORT ST JOHN A, BC
-71944 5531 -12314 695 690 0 ---- MACKENZIE A, BC
-71945 5884 -12260 389 382 0 ---- FORT NELSON A, BC
+71943 5624 -12074 0 695 0 ---- FORT ST JOHN A, BC
+71944 5531 -12314 0 690 0 ---- MACKENZIE A, BC
+71945 5884 -12260 0 382 0 ---- FORT NELSON A, BC
71945 5883 -12260 382 378 0 T-T- FORT NELSON UA, BC
-71946 6176 -12124 169 169 0 ---- FORT SIMPSON A, NWT
+71946 6176 -12124 0 169 0 ---- FORT SIMPSON A, NWT
71947 4976 -7780 0 280 0 ---- MATAGAMI A, QUE
-71948 7017 -12472 14 87 0 ---- CAPE PARRY A, NWT
+71948 7017 -12472 0 87 0 ---- CAPE PARRY A, NWT
71949 6221 -13338 717 717 0 ---- FARO (AUT), YT
-71950 5483 -12718 523 523 0 ---- SMITHERS, BC
-71951 5447 -12858 217 217 0 ---- TERRACE A, BC
-71952 5438 -12596 715 713 0 ---- BURNS LAKE DECKER LAKE, BC
+71950 5483 -12718 0 523 0 ---- SMITHERS, BC
+71951 5447 -12858 0 217 0 ---- TERRACE A, BC
+71952 5438 -12596 0 713 0 ---- BURNS LAKE DECKER LAKE, BC
71953 6012 -12882 690 690 0 ---- WATSON LAKE A, YT
71954 5468 -10168 0 304 0 ---- FLIN FLON, MAN
71956 4588 -8257 0 189 0 ---- GORE BAY CLIMATE, ONT
-71957 6830 -13347 68 68 0 ---- INUVIK AWOS A, NWT
-71957 6831 -13352 103 103 0 T-T- INUVIK UA, NWT
-71958 5842 -13002 816 792 0 ---- DEASE LAKE LWIS, BC
+71957 6830 -13347 0 68 0 ---- INUVIK AWOS A, NWT
+71957 6831 -13352 0 103 0 T-T- INUVIK UA, NWT
+71958 5842 -13002 0 792 0 ---- DEASE LAKE LWIS, BC
71959 4664 -6095 0 44 0 ---- CHETICAMP CS, NS
71960 6959 -13091 0 102 0 ---- LIVERPOOL BAY, NWT
-71962 4865 -9344 342 342 0 ---- FORT FRANCES RCS, ONT
-71963 6360 -10513 317 317 0 ---- HANBURY RIVER, NWT
-71964 6071 -13507 703 706 0 ---- WHITEHORSE A, YT
-71964 6073 -13510 707 707 0 T-T- WHITEHORSE UA, YT
+71962 4865 -9344 0 342 0 ---- FORT FRANCES RCS, ONT
+71963 6360 -10513 0 317 0 ---- HANBURY RIVER, NWT
+71964 6071 -13507 0 706 0 ---- WHITEHORSE A, YT
+71964 6073 -13510 0 707 0 T-T- WHITEHORSE UA, YT
71966 6405 -13913 370 370 0 ---- DAWSON, YT
-71967 4583 -7254 801 85 0 ---- SAINT-GERMAIN-DE-GRANTHAM, QUE
-71968 6895 -13722 49 49 0 ---- SHINGLE POINT A, YT
+71967 4583 -7254 0 85 0 ---- SAINT-GERMAIN-DE-GRANTHAM, QUE
+71968 6895 -13722 0 49 0 ---- SHINGLE POINT A, YT
71970 5413 -10852 0 481 0 ---- MEADOW LAKE, SASK
71971 7642 -8290 0 45 0 ---- GRISE FIORD CLIMATE, NU
-71972 6160 -6463 369 369 0 ---- RESOLUTION ISLAND, NU
+71972 6160 -6463 0 369 0 ---- RESOLUTION ISLAND, NU
71973 4893 -5792 0 152 0 ---- CORNER BROOK, NFLD
71974 7414 -11999 0 32 0 ---- AULAVIK NATIONAL PARK, NWT
-71975 6495 -6358 583 583 0 ---- CAPE MERCY, NU
+71975 6495 -6358 0 583 0 ---- CAPE MERCY, NU
71976 6131 -7367 0 503 0 ---- PARC NATIONAL DES PINGUALUIT, QUE
-71977 6880 -14085 568 568 0 ---- MARGARET LAKE, YT
+71977 6880 -14085 0 568 0 ---- MARGARET LAKE, YT
71978 6916 -14015 0 244 0 ---- IVVAVIK NAT. PARK, YT
-71979 5380 -11845 1448 1448 0 ---- HENDRICKSON CREEK, ALTA
+71979 5380 -11845 0 1448 0 ---- HENDRICKSON CREEK, ALTA
71980 6196 -12721 0 618 0 ---- RABBIT KETTLE, NWT
71981 5051 -11401 0 1143 0 ---- AZURE, ALTA
71982 5071 -11415 0 1156 0 ---- BLACK DIAMOND, ALTA
@@ -9962,286 +10049,291 @@
71984 6936 -12408 0 6 0 ---- PAULATUK, NWT
71985 6943 -13302 6 5 0 ---- TUKTOYAKTUK, NWT
71986 5081 -11101 0 795 0 ---- ATLEE AGCM, ALTA
-71987 4706 -6400 8 8 0 ---- NORTH CAPE, PEI
-71989 7623 -11935 12 2 0 ---- MOULD BAY CS, NWT
+71987 4706 -6400 0 8 0 ---- NORTH CAPE, PEI
+71989 7623 -11935 0 2 0 ---- MOULD BAY CS, NWT
71990 6324 -13004 0 1379 0 ---- MACMILLAN PASS, YT
-71999 5068 -12193 0 235 0 ---- LILLOOET, BC
-72201 2455 -8176 5 2 0 T-T- KEY WEST/INT., FL
+71999 5068 -12193 243 240 0 ---- LILLOOET, BC
+72201 2456 -8176 6 2 0 T-T- KEY WEST/INT., FL
72202 2575 -8038 5 4 0 ---- MIAMI, FL
72202 2575 -8038 5 4 0 T-T- MIAMI, FL
-72203 2668 -8009 6 7 0 ---- WEST PALM BEACH/ INT. FL.
-72205 2843 -8131 32 29 0 ---- ORLANDO/JETPORT FL.
+72203 2668 -8009 6 7 0 T-T- WEST PALM BEACH/ INT. FL.
+72205 2842 -8131 32 29 0 T-T- ORLANDO/JETPORT FL.
72206 3048 -8170 11 10 0 T-T- JACKSONVILLE/INTNL., FL.
-72207 3213 -8120 15 15 0 ---- SAVANNAH/MUNICIPAL, GA.
-72208 3290 -8003 14 13 0 T-T- CHARLESTON/MUN., SC.
+72207 3213 -8120 16 15 0 T-T- SAVANNAH/MUNICIPAL, GA.
+72208 3290 -8004 14 13 0 T-T- CHARLESTON/MUN., SC.
72209 3188 -8156 14 14 0 TPTP FT. STEWART, GA
-72210 2771 -8240 15 13 0 T-T- TAMPA BAY AREA, FL.
-72211 2797 -8253 3 8 0 ---- TAMPA/INT., FL.
-72212 2962 -8310 13 13 0 ---- CROSS CITY/CROSS CITY A., FL.
+72210 2771 -8240 15 13 0 T-T- TAMPA BAY, FL.
+72211 2798 -8253 0 8 0 T-T- TAMPA/INT., FL.
+72212 2963 -8311 13 13 0 T-T- CROSS CITY/CROSS CITY A., FL.
72213 3125 -8240 46 46 0 ---- WAYCROSS/WARE CO., GA
-72214 3045 -8430 53 53 0 T-T- TALLAHASSEE/MUN., FL.
-72215 3353 -8457 257 245 0 T-T- PEACHTREE CITY, GA.
-72216 3153 -8418 59 60 0 ---- ALBANY/MUN., GA
-72217 3270 -8365 110 108 0 ---- MACON/LEWIS B.WILSON, GA.
-72218 3336 -8197 45 44 0 ---- AUGUSTA/BUSH FIELD, GA.
-72219 3365 -8442 315 312 0 ---- ATLANTA/MUN., GA.
-72220 2973 -8503 6 6 0 ---- APALACHICOLA/MUN., FL.
+72214 3039 -8435 53 53 0 T-T- TALLAHASSEE/MUN., FL.
+72215 3336 -8457 257 245 0 T-T- PEACHTREE CITY, GA.
+72216 3154 -8419 59 60 0 ---- ALBANY/MUN., GA
+72217 3269 -8365 110 108 0 T-T- MACON/LEWIS B.WILSON, GA.
+72218 3336 -8196 45 44 0 T-T- AUGUSTA/BUSH FIELD, GA.
+72219 3364 -8443 315 312 0 T-T- ATLANTA/MUN., GA.
+72220 2973 -8502 6 6 0 ---- APALACHICOLA/MUN., FL.
72221 3048 -8652 29 0 0 --T- VALPARAISO/EGLIN AFB, FL.
72222 3048 -8718 38 36 0 ---- PENSACOLA, FL
-72223 3068 -8825 67 66 0 ---- MOBILE/BATES FIELD, AL.
+72223 3069 -8824 67 66 0 T-T- MOBILE/BATES FIELD, AL.
72224 2968 -8537 0 2 0 P-T- CAPE SAN BLAS, FL.
72225 3233 -8483 130 0 0 --TT FORT BENNING, GA (ARMY)
-72226 3229 -8640 62 67 0 ---- MONTGOMERY/DANNELLY, AL.
+72226 3229 -8641 62 67 0 T-T- MONTGOMERY/DANNELLY, AL.
72227 3392 -8452 326 0 0 ---- MARIETTA/DOBBINS AFB, GA.
-72228 3357 -8675 192 196 0 ---- BIRMINGHAM/MUN., AL.
+72228 3357 -8674 192 196 0 T-T- BIRMINGHAM/MUN., AL.
72229 3290 -8725 140 140 0 ---- CENTREVILLE, AL.
72230 3318 -8678 175 174 0 T-T- BIRMINGHAM, AL
-72231 2998 -9025 9 1 0 ---- NEW ORLEANS/MOISANT INT., LA.
+72231 2999 -9026 7 1 0 T-T- NEW ORLEANS/MOISANT INT., LA.
72232 3054 -9115 21 0 0 ---- BATON ROUGE, LA, BATON ROUGE METROPOLITAN, RYAN FIELD ARPT
72233 3034 -8982 11 10 0 T-T- SLIDELL/MUN. LA
-72234 3233 -8875 94 91 0 ---- MERIDIAN/KEY, MS.
+72234 3233 -8874 94 91 0 T-T- MERIDIAN/KEY, MS.
72235 3232 -9008 91 91 0 T-T- JACKSON/ALLEN C. THOMPSON FIELD, MS.
-72239 3103 -9303 110 0 0 --T- FORT POLK, LA. (ARMY)
+72239 3104 -9319 3 0 0 --T- FORT POLK, LA. (ARMY)
72240 3013 -9322 6 5 0 T-T- LAKE CHARLES/MUN., LA.
-72241 2995 -9402 7 5 0 ---- PORT ARTHUR/JEFFERSON CO., TX.
-72242 2930 -9480 16 2 0 ---- GALVESTON, TX.
-72243 2997 -9535 33 30 0 ---- HOUSTON/INTERCONTINENTAL, TX.
+72241 2995 -9402 5 5 0 T-T- PORT ARTHUR/JEFFERSON CO., TX.
+72242 2926 -9486 16 2 0 ---- GALVESTON, TX.
+72243 2998 -9534 33 30 0 T-T- HOUSTON/INTERCONTINENTAL, TX.
72244 2964 -9528 15 0 0 ---- HOUSTON, TX WILLIAM P HOBBY ARPT
-72247 3235 -9465 124 124 0 ---- LONGVIEW, TX.
-72248 3245 -9384 85 85 0 T-T- SHREVEPORT/REG., LA.
+72247 3238 -9471 0 124 0 T-T- LONGVIEW, TX.
+72248 3245 -9382 85 85 0 T-T- SHREVEPORT/REG., LA.
72249 3284 -9730 199 195 0 T-T- FORT WORTH, TX.
-72250 2592 -9742 8 7 0 T-T- BROWNSVILLE/INT., TX
+72250 2591 -9743 8 7 0 T-T- BROWNSVILLE/INT., TX
72251 2778 -9751 15 15 0 T-T- CORPUS CHRISTI/INT., TX.
-72253 2953 -9847 242 247 0 ---- SAN ANTONIO/INT., TX.
+72253 2953 -9847 242 247 0 T-T- SAN ANTONIO/INT., TX.
72254 3030 -9770 189 193 0 ---- AUSTIN/CTY, TX.
-72255 2885 -9692 36 32 0 ---- VICTORIA/VICTORIA REGIONAL, TX.
-72256 3162 -9722 155 157 0 ---- WACO, MADISON-COOPER, TX.
+72255 2885 -9692 36 32 0 T-T- VICTORIA/VICTORIA REGIONAL, TX.
+72256 3161 -9723 155 157 0 T-T- WACO, MADISON-COOPER, TX.
72257 3110 -9733 270 0 0 --T- FORT HOOD, TX. (ARMY)
72258 3285 -9685 156 0 0 ---- DALLAS, TX, DALLAS LOVE FIELD ARPT
-72259 3290 -9703 182 182 0 ---- DALLAS-FORT WORTH/FORT WORTH REG.AIRPORT, TX.
+72259 3290 -9704 182 182 0 T-T- DALLAS-FORT WORTH/FORT WORTH REG.AIRPORT, TX.
72260 3222 -9818 402 402 0 ---- STEPHENVILLE/CLARK FIELD MUN., TX.
72261 2937 -10092 315 314 0 T-T- DEL RIO/INT., TX.
-72262 3183 -10480 0 1662 0 ---- GUADELUPE PASS, TX.
-72263 3137 -10050 582 584 0 ---- SAN ANGELO/MATHIS, TX.
+72262 3183 -10480 0 1662 0 T-T- GUADELUPE PASS, TX.
+72262 3183 -10481 0 1692 0 T-T- PINE SPRINGS, TX
+72263 3137 -10049 582 584 0 T-T- SAN ANGELO/MATHIS, TX.
72264 3037 -10402 1481 1478 0 ---- MARFA/MUN., TX.
72265 3194 -10219 874 875 0 T-T- MIDLAND/MIDLAND REG. AIR TERM., TX.
-72266 3242 -9968 546 542 0 ---- ABILENE/MUN., TX.
-72267 3365 -10182 988 996 0 ---- LUBBOCK/LUBBOCK INTERNATIONAL, TX.
-72268 3329 -10453 1118 1118 0 ---P ROSWELL/INDUSTRIAL AIR CENTER, NM
+72266 3240 -9968 546 542 0 T-T- ABILENE/MUN., TX.
+72267 3365 -10181 988 996 0 T-T- LUBBOCK/LUBBOCK INTERNATIONAL, TX.
+72268 3329 -10453 1118 1118 0 T-TP ROSWELL/INDUSTRIAL AIR CENTER, NM
72269 3238 -10648 1244 0 0 -TTT WHITE SANDS, NM.
-72270 3180 -10640 1194 1206 0 ---- EL PASO/INT., TX.
-72271 3322 -10727 1481 1481 0 ---- TRUTH OR CONSEQUENCES, NM
+72270 3181 -10638 1194 1206 0 T-T- EL PASO/INT., TX.
+72271 3324 -10727 1481 1481 0 ---- TRUTH OR CONSEQUENCES, NM
72272 3147 -10960 1251 0 0 ---- DOUGLAS BISBEE, AZ, BISBEE DOUGLAS INT. ARPT
72273 3158 -11033 1428 0 0 ---P FORT HUACHUCA, AZ.
-72274 3222 -11096 747 741 0 T-T- TUCSON, AZ.
-72278 3343 -11202 337 344 0 ---- PHOENIX/SKY HARBOR, INT, AZ.
+72274 3213 -11096 747 741 0 T-T- TUCSON, AZ.
+72278 3343 -11200 337 344 0 T-T- PHOENIX/SKY HARBOR, INT, AZ.
72280 3265 -11460 34 0 0 --P- YUMA/YUMA INT., AZ.
72281 3282 -11568 18 0 0 ---- EL CENTRO NAF, CA.
72286 3390 -11725 468 0 0 ---- RIVERSIDE/MARCH AFB. CA.
+72288 3420 -11836 0 0 0 ---- BURBANK, CA
72289 3422 -11807 0 1739 0 ---- MOUNT WILSON, CA.
-72290 3272 -11717 9 5 0 ---- SAN DIEGO/LINDBERGH, CA.
+72290 3272 -11718 9 5 0 T-T- SAN DIEGO/LINDBERGH, CA.
72291 3325 -11945 174 153 0 ---T SAN NICOLAS IS./NF, CA.
-72293 3283 -11712 134 134 0 T-T- SAN DIEGO/MIRAMAR, NAS, CA.
-72295 3393 -11840 32 38 0 ---- LOS ANGELES /INT., CA.
-72297 3382 -11815 12 18 0 ---- LONG BEACH/LB AIRP. DAUGHERTY FIELD, CA.
+72292 3340 -11842 0 0 0 ---- AVALON, CA
+72293 3286 -11714 135 137 0 T-T- SAN DIEGO/MIRAMAR, NAS, CA.
+72295 3394 -11839 32 38 0 T-T- LOS ANGELES /INT., CA.
+72297 3381 -11815 12 18 0 T-T- LONG BEACH/LB AIRP. DAUGHERTY FIELD, CA.
72301 3574 -8139 357 0 0 ---- HICKORY, NC, HICKORY RGNL ARPT
72302 3427 -7790 10 10 0 ---- WILMINGTON, NC.
72303 3517 -7903 0 61 0 PPTT POPE AFB, NC.
72304 3527 -7555 3 2 0 ---- CAPE HATTERAS, NC.
72305 3478 -7688 11 11 0 T-T- NEWPORT, NC.
-72306 3586 -7878 134 132 0 ---- RALEIGH/RALEIGH-DURHAM, NC.
+72306 3588 -7879 134 132 0 T-T- RALEIGH/RALEIGH-DURHAM, NC.
72307 3626 -7618 12 0 0 ---- ELIZABETH CITY, NC, ELIZABETH CITY CG AIR STATION-RGNL ARPT
-72308 3690 -7620 9 8 0 ---- NORFOLK/INT., VA.
+72308 3690 -7619 9 8 0 T-T- NORFOLK/INT., VA.
72309 3485 -7688 13 0 0 ---- CHERRY POINT/MCAS, NC.
-72310 3395 -8112 69 72 0 ---- COLUMBIA, SC.
-72311 3395 -8332 247 246 0 ---- ATHENS/MUN., GA.
-72312 3490 -8222 296 293 0 ---- GREENVILLE/GREENVILLE SPARTANBURG, SC.
-72314 3522 -8093 234 228 0 ---- CHARLOTTE/DOUGLAS, NC.
-72315 3543 -8255 661 659 0 ---- ASHEVILLE/MUN., NC.
+72310 3395 -8112 69 72 0 T-T- WEST COLUMBIA, SC.
+72311 3395 -8333 244 246 0 T-T- ATHENS/MUN., GA.
+72312 3490 -8221 296 293 0 T-T- GREER, SC.
+72314 3521 -8094 234 228 0 T-T- CHARLOTTE/DOUGLAS, NC.
+72315 3543 -8254 661 659 0 ---- FLETCHER, NC
72316 3154 -8251 44 0 0 ---- ALMA GA BACON COUNTY ARPT
72317 3610 -7994 277 277 0 T-T- GREENSBORO/G.-HIGH PT., NC.
72318 3720 -8041 642 639 0 T-T- BLACKSBURG, VA.
72319 3449 -8270 240 0 0 ---- ANDERSON RGNL ARPT
72320 3435 -8517 196 196 0 ---- ROME, GA
-72323 3465 -8677 196 191 0 ---- HUNTSVILLE/MADISON CO., AL.
-72324 3503 -8520 210 208 0 ---- CHATTANOOGA/LOVELL FIELD, TN.
+72323 3464 -8679 196 191 0 T-T- HUNTSVILLE/MADISON CO., AL.
+72324 3502 -8520 210 208 0 T-T- CHATTANOOGA/LOVELL FIELD, TN.
72325 3595 -8508 571 0 0 ---- CROSSVILLE, TN, CROSVILLE MEMORIAL-WHITSON FIELD ARPT
-72326 3582 -8398 299 299 0 ---- KNOXVILLE/MUN., TN.
+72326 3581 -8399 299 299 0 T-T- KNOXVILLE/MUN., TN.
72327 3622 -8655 173 180 0 ---- NASHVILLE/METROPOLITAN, TN.
72327 3625 -8656 173 180 0 T-T- NASHVILLE/OLD HICKORY, TN.
72328 3661 -8742 171 0 0 ---- CLARKSVILLE, TN OUTLASW FIELD ARPT
72329 3722 -8957 103 0 0 ---- CAPE GIRARDEAU, MO, CAPE GIRARDEAU RGNL ARPT
72330 3677 -9047 146 0 0 ---- POPLAR BLUFF, MO.
-72332 3427 -8877 0 110 0 ---- TUPELO/C.D. LEMONS MUN, MS
-72334 3504 -9000 87 101 0 ---- MEMPHIS/INTNL., TN.
+72332 3427 -8877 110 110 0 ---- TUPELO/C.D. LEMONS MUN, MS
+72334 3506 -8998 87 101 0 T-T- MEMPHIS/INTNL., TN.
72335 3647 -8240 469 0 0 ---- BRISTOL-JOHNSON-KINGSPORT, TN, TRI-CITIES RGNL TN-VA ARPT
72340 3484 -9226 173 173 0 T-T- LITTLE ROCK/ADAMS FLD, AR.
72341 3468 -9462 883 0 0 ---- PAGE, OK.
-72344 3533 -9437 141 143 0 ---- FORT SMITH/MUN., AR.
+72344 3533 -9436 141 143 0 T-T- FORT SMITH/MUN., AR.
72345 3626 -9316 421 0 0 ---- HARRISON, AR, BOONE COUNTY ARPT
72348 3672 -9185 308 307 0 ---- WEST PLAINS, MO
72349 3690 -9402 437 437 0 ---- MONETTE, MO.
-72351 3397 -9848 314 309 0 ---- WICHITA FALLS/SHEPS AFB/WICHITA FALLS/MUN., TX.
+72351 3399 -9849 314 309 0 T-T- WICHITA FALLS/SHEPS AFB/WICHITA FALLS/MUN., TX.
72352 3465 -9927 420 0 0 ---- ALTUS AFB, OK.
-72353 3538 -9760 398 395 0 ---- OKLAHOMA CITY/W. ROGERS WORLD, OK.
+72353 3539 -9760 397 395 0 T-T- OKLAHOMA CITY/W. ROGERS WORLD, OK.
72354 3542 -9738 397 0 0 ---- TINKER AFB, OK.
72355 3460 -9840 360 0 0 --TT FORT SILL, OK. (ARMY)
-72356 3620 -9588 195 207 0 ---- TULSA/INT., OK.
+72356 3620 -9589 195 207 0 T-T- TULSA/INT., OK.
72357 3518 -9744 345 345 0 T-T- NORMAN/MAX WESTHEIMER A, OK.
-72360 3645 -10315 1515 1515 0 ---- CLAYTON/MUN., NM.
+72360 3644 -10315 1515 1515 0 T-T- CLAYTON/MUN., NM.
72363 3522 -10171 1095 1095 0 T-T- AMARILLO/INTL., TX.
72364 3187 -10670 1254 1254 0 T-T- SANTA TERESA, NM.
-72365 3504 -10662 1619 1619 0 T-T- ALBUQUERQUE/INT., NM.
+72365 3504 -10661 1619 1619 0 T-T- ALBUQUERQUE/INT., NM.
72366 3443 -10029 595 0 0 ---- CHILDRESS, TX CHILDRESS MUNI ARPT
-72370 3527 -11393 1033 1050 0 ---- KINGMAN/MOHAVE COUNTY A., AZ.
-72371 3693 -11145 1304 1314 0 ---- PAGE/PAGE A., AZ
-72374 3502 -11073 1488 1505 0 ---- WINSLOW, AZ.
-72376 3522 -11182 2181 2179 0 T-T- FLAGSTAFF, AZ
+72370 3526 -11394 1033 1050 0 T-T- KINGMAN/MOHAVE COUNTY A., AZ.
+72371 3694 -11145 1304 1314 0 T-T- PAGE/PAGE A., AZ
+72374 3503 -11072 1488 1505 0 T-T- WINSLOW, AZ.
+72376 3522 -11182 2182 2179 0 T-T- FLAGSTAFF, AZ
72381 3492 -11790 705 0 0 ---- EDWARDS AFB, CA.
72382 3463 -11808 774 775 0 ---- PALMDALE/INT., CA.
-72383 3475 -11873 1379 1377 0 ---- SANDBERG, CA.
-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.
-72389 3677 -11972 100 101 0 ---- FRESNO/AIR TERM., CA.
+72383 3474 -11872 1379 1377 0 T-T- SANDBERG, CA.
+72384 3543 -11905 150 149 0 T-T- BAKERSFIELD/MEADOWS, CA.
+72386 3607 -11516 698 697 0 T-T- LAS VEGAS/MCCARRAN, NV.
+72387 3661 -11602 1009 1006 0 T-T- MERCURY/DESERT ROCK, NV.
+72389 3678 -11972 100 101 0 T-T- 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.
72393 3475 -12057 121 0 0 T-T- VANDENBERG AFB, CA.
72394 3490 -12045 73 79 0 ---- SANTA MARIA, CA.
72398 3834 -7551 20 0 0 ---- SALISBURY, MD, WSALISBURY-OCEAN CITY WICOMICO RGNL ARPT
72399 4019 -7676 96 0 0 ---- HARRISBURG, PA, HARRISBURG INT. ARPT
-72401 3750 -7733 54 51 0 ---- RICHMOND/BYRD, VA.
+72401 3751 -7731 50 51 0 T-T- RICHMOND/BYRD, VA.
72402 3793 -7548 12 12 0 T-T- WALLOPS ISLAND, VA.
72403 3895 -7745 98 95 0 ---- WASHINGTON/DULLES INT., VA.
72403 3897 -7748 89 88 0 T-T- STERLING, VA.
72404 3828 -7640 14 0 0 ---- PATUXENT RIVER/NAS, MD.
-72405 3885 -7703 20 5 0 ---- WASHINGTON/NAT., VA.
-72406 3918 -7667 47 48 0 ---- BALTIMORE/BALTIMORE-WASHINGTON INT., MD.
-72407 3945 -7456 20 21 0 ---- ATLANTIC CITY, NJ.
-72408 3988 -7525 9 4 0 ---- PHILADELPHIA/INT., PA.
+72405 3885 -7704 20 5 0 T-T- WASHINGTON/NAT., VA.
+72406 3917 -7667 47 48 0 T-T- BALTIMORE/BALTIMORE-WASHINGTON INT., MD.
+72407 3946 -7458 20 21 0 T-T- ATLANTIC CITY, NJ.
+72408 3986 -7525 9 4 0 T-T- PHILADELPHIA/INT., PA.
72409 4003 -7431 24 0 0 ---- LAKEHURST/NAS, NJ.
-72410 3733 -7920 286 285 0 ---- LYNCHBURG/MUN. P. GLENN, VA.
-72411 3732 -7997 358 358 0 ---- ROANOKE/MUN., VA.
-72412 3778 -8112 766 763 0 ---- BECKLEY (RALEIGH CTY. MEMORIAL AIRPORT), WV.
-72414 3836 -8159 299 299 0 ---- CHARLESTON/KANAWHA., WV.
-72417 3888 -7984 609 606 0 ---- ELKINS/ELKINS-RANDOLPH CO., WV.
+72410 3733 -7920 286 285 0 T-T- LYNCHBURG/MUN. P. GLENN, VA.
+72411 3733 -7998 358 358 0 T-T- ROANOKE/MUN., VA.
+72412 3779 -8112 766 763 0 T-T- BECKLEY (RALEIGH CTY. MEMORIAL AIRPORT), WV.
+72414 3836 -8159 299 299 0 T-T- CHARLESTON/KANAWHA., WV.
+72417 3889 -7986 603 606 0 T-T- ELKINS/ELKINS-RANDOLPH CO., WV.
72418 3967 -7559 23 0 0 ---- WILMINGTON, DE, NEW CASTLE ARPT
72419 3759 -8331 414 0 0 ---- JACKSON, KY, JULIAN CARROL ARPT
72420 4082 -8252 396 0 0 ---- MANSFIELD, OH, MANSFIELD LAHM RGNL ARPT
-72421 3904 -8467 267 271 0 ---- CINCINNATI/GREATER CINCINNATI, OH.
-72422 3803 -8460 301 298 0 ---- LEXINGTON/BLUE GRASS, KY.
-72423 3818 -8573 149 151 0 ---- LOUISVILLE/STANDIFORD, KY.
+72421 3904 -8467 267 271 0 T-T- CINCINNATI/GREATER CINCINNATI, OH.
+72422 3804 -8461 301 298 0 T-T- LEXINGTON/BLUE GRASS, KY.
+72423 3817 -8574 149 151 0 T-T- LOUISVILLE/STANDIFORD, KY.
72424 3790 -8597 230 0 0 --T- FT.KNOX, KY. (ARMY)
72425 3836 -8255 255 252 0 ---- HUNTINGTON, WV.
-72426 3942 -8382 323 323 0 T-T- WILMINGTON, OH.
+72426 3943 -8379 323 323 0 T-T- WILMINGTON, OH.
72427 3602 -8423 279 0 0 ---- OAK RIDGE, TN
-72428 4000 -8288 254 247 0 ---- COLUMBUS/PORT COLUMBUS, OH.
-72429 3986 -8412 306 307 0 ---- DAYTON/. COX, OH.
+72428 4000 -8289 249 247 0 T-T- COLUMBUS/PORT COLUMBUS, OH.
+72429 3990 -8422 306 307 0 T-T- DAYTON/. COX, OH.
72429 3986 -8412 0 0 0 ---- SULPHUR GROVE, OH.
-72432 3804 -8753 118 127 0 ---- EVANSVILLE/REG., IN.
-72434 3875 -9037 172 174 0 ---- ST.LOUIS/LAMBERT, ST.LOUIS INT., MO.
-72435 3707 -8877 126 0 0 ---- PADUCAH, KY.
-72438 3972 -8627 246 243 0 ---- INDIANAPOLIS/I.-MUN/WEIR COOK, IN.
-72439 3985 -8967 187 181 0 ---- SPRINGFIELD/CAPITAL, IL.
-72440 3722 -9340 390 391 0 T-T- SPRINGFIELD/MUN., MO.
+72432 3804 -8753 118 127 0 T-T- EVANSVILLE/REG., IN.
+72434 3875 -9036 169 174 0 T-T- ST.LOUIS/LAMBERT, ST.LOUIS INT., MO.
+72435 3707 -8877 126 0 0 T-T- PADUCAH, KY.
+72438 3972 -8629 246 243 0 T-T- INDIANAPOLIS/I.-MUN/WEIR COOK, IN.
+72439 3984 -8968 187 181 0 T-T- SPRINGFIELD/CAPITAL, IL.
+72440 3724 -9340 390 391 0 T-T- SPRINGFIELD/MUN., MO.
72441 3977 -9491 252 0 0 ---- ST JOSEPH, MO, ROSECRANS MEMORIAL ARPT
72442 3813 -9177 344 0 0 ---- ROLLA-VICHY, MO, ROLLA NATIONAL ARPT
72443 3994 -9119 237 0 0 ---- QUINCY, IL, QUINCY RGNL-BALDWIN FIELD ARPT
-72445 3882 -9222 274 271 0 ---- COLUMBIA/REGIONAL, MO.
-72446 3928 -9475 313 316 0 ---- KANSAS CITY, INTNL., MO.
+72445 3882 -9220 274 271 0 T-T- COLUMBIA/REGIONAL, MO.
+72446 3929 -9472 312 316 0 T-T- KANSAS CITY, INTNL., MO.
72449 3977 -9492 249 252 0 ---- ST. JOSEPH/ROSE-CRANS, MO.
-72450 3765 -9743 409 406 0 ---- WICHITA/MID-CONTINENT, KS.
-72451 3776 -9997 790 786 0 T-T- DODGE CITY/MUN., KS.
-72452 3729 -9858 468 0 0 ---- MEDICINE LODGE, KS
+72450 3765 -9743 408 406 0 T-T- WICHITA/MID-CONTINENT, KS.
+72451 3777 -9997 790 790 0 T-T- DODGE CITY/MUN., KS.
+72452 3728 -9855 469 0 0 T-T- MEDICINE LODGE, KS
72453 3672 -9710 309 0 0 ---- PONCA CITY, OK PONCA CITY RGNL ARPT
72455 3910 -9677 320 0 0 --TT FORT RILEY, KS. (ARMY)
72456 3907 -9563 269 268 0 T-T- TOPEKA/MUN., KS.
-72458 3954 -9765 452 453 0 ---- CONCORDIA/BLOSSER MUN., KS.
+72458 3954 -9765 452 453 0 T-T- CONCORDIA/BLOSSER MUN., KS.
72460 3700 -10188 1102 0 0 ---- ELKHART/ELKHART-MORTON COUNTY A., KS
-72462 3743 -10587 2299 2297 0 ---- ALAMOSA, CO.
-72464 3828 -10450 1439 1441 0 ---- PUEBLO/MEMORIAL, CO.
-72465 3936 -10168 1124 1114 0 ---- GOODLAND/RENNER FIELD/GOODLAND/MUN. KS.
-72466 3882 -10472 1881 1873 0 ---- COLORADO SPRINGS/MUNICIPAL, CO.
+72462 3744 -10587 2299 2297 0 T-T- ALAMOSA, CO.
+72464 3828 -10452 1439 1441 0 T-T- PUEBLO/MEMORIAL, CO.
+72465 3936 -10170 1124 1114 0 T-T- GOODLAND/RENNER FIELD/GOODLAND/MUN. KS.
+72466 3881 -10470 1881 1873 0 T-T- COLORADO SPRINGS/MUNICIPAL, CO.
72468 3870 -10477 1789 0 0 --TT FORT CARSON, CO. (ARMY)
72469 3977 -10487 1612 1611 0 T-T- DENVER/STAPLETON INT., CO.
-72470 3961 -11075 1799 1796 0 ---- PRICE/CARBON COUNTY A., UT.
+72470 3961 -11075 1785 1796 0 T-T- PRICE/CARBON COUNTY A., UT.
72475 3842 -11302 1536 1536 0 ---- MILFORD MUNICIPAL, UT.
72476 3911 -10852 1473 1474 0 T-T- GRAND JUNCTION/WALKER FIELD, CO.
72477 3960 -11601 1811 0 0 ---- EUREKA, NV, RAMOS
-72480 3736 -11837 1263 1255 0 ---- BISHOP, CA.
+72480 3736 -11836 1263 1255 0 T-T- BISHOP, CA.
72481 3736 -12057 60 0 0 PPPP MERCED/CASTLE AFB, CA.
72483 3852 -12150 8 6 0 ---- SACRAMENTO/EXECUTIVE CA.
72486 3929 -11485 1908 1907 0 ---- ELY/YELLAND, NV.
72487 3761 -11452 1335 0 0 ---- CALIENTE, NV.
-72488 3950 -11978 1341 1344 0 ---- RENO/INT., NV.
+72488 3947 -11977 1341 1344 0 T-T- RENO/INT., NV.
72489 3957 -11980 1515 1518 0 T-T- RENO, NV.
72491 3660 -12185 46 0 0 ---- MONTEREY/NAF, CA.
-72492 3790 -12125 8 9 0 ---- STOCKTON/METROPOLITAN CA.
-72493 3774 -12222 4 3 0 T-T- OAKLAND/METROP. OAKLAND INT., CA.
-72494 3761 -12238 5 6 0 ---- SAN FRANCISCO/INT., CA.
+72492 3789 -12123 8 9 0 T-T- STOCKTON/METROPOLITAN CA.
+72493 3772 -12222 4 3 0 T-T- OAKLAND/METROP. OAKLAND INT., CA.
+72494 3765 -12244 5 6 0 T-T- SAN FRANCISCO/INT., CA.
72495 3799 -12205 12 0 0 ---- CONCORD, CA BUCHANAN FIELD ARPT
72501 4086 -7286 26 20 0 T-T- UPTON, NY.
-72502 4070 -7417 9 5 0 ---- NEWARK/INT., NJ.
-72503 4077 -7390 9 7 0 ---- NEW YORK/LA GUARDIA, NY.
-72504 4117 -7313 5 3 0 ---- BRIDGEPORT/IGOR I. SIKORSKY MEM., CT.
+72502 4069 -7417 9 5 0 ---- NEWARK/INT., NJ.
+72503 4078 -7387 9 7 0 T-T- NEW YORK/LA GUARDIA, NY.
+72504 4116 -7313 5 3 0 ---- BRIDGEPORT/IGOR I. SIKORSKY MEM., CT.
72505 4079 -7309 44 0 0 ---- ISLIP, NY, LONG ISLAND ARTHUR ARPT
72506 4078 -7397 48 0 0 ---- NEW YORK, NY, CENTRAL PARK
-72507 4173 -7143 19 17 0 ---- PROVIDENCE/GREEN STATE, RI.
-72508 4193 -7268 55 53 0 ---- HARTFORD/BRADLEY INTNL., CT.
-72509 4237 -7103 9 6 0 ---- BOSTON/LOGAN INT., MA.
+72507 4172 -7143 19 17 0 T-T- PROVIDENCE/GREEN STATE, RI.
+72508 4194 -7268 55 53 0 T-T- WINDSOR LOCKS, CT.
+72509 4236 -7101 9 6 0 T-T- BOSTON/LOGAN INT., MA.
72510 4227 -7188 306 0 0 ---- WORCESTER, MA, WORCESTER RGNL ARPT
-72513 4133 -7573 289 292 0 ---- WILKES-BARRE-SCRANTON, PA.
-72514 4125 -7692 160 161 0 ---P WILLIAMSPORT/LYCOMING COUNTY, PA.
-72515 4222 -7598 497 497 0 ---- BINGHAMTON/BROOME CO., NY.
-72517 4065 -7543 117 118 0 ---- ALLENTOWN/A.-BETHLEHEM-EASTON, PA.
+72513 4134 -7572 289 292 0 T-T- WILKES-BARRE-SCRANTON, PA.
+72514 4124 -7692 160 161 0 ---P WILLIAMSPORT/LYCOMING COUNTY, PA.
+72515 4221 -7598 499 497 0 T-T- BINGHAMTON/BROOME CO., NY.
+72516 4289 -7325 0 0 0 T-T- BENNINGTON, VT
+72517 4065 -7544 117 118 0 T-T- ALLENTOWN/A.-BETHLEHEM-EASTON, PA.
72518 4275 -7380 89 88 0 ---- ALBANY COUNTY AIRPORT, NY.
72518 4269 -7383 89 93 0 T-T- ALBANY, NY.
-72519 4312 -7612 124 128 0 ---P SYRACUSE/HANCOCK, NY.
+72519 4311 -7611 125 128 0 ---P SYRACUSE/HANCOCK, NY.
72520 4052 -8022 359 361 0 ---- PITTSBURGH/GREATER PITTSBURGH INT., PA.
72520 4053 -8022 359 361 0 T-T- PITTSBURGH, PA.
-72521 4092 -8143 377 374 0 ---- AKRON/AKRON-CANTON REG. OH.
+72521 4092 -8144 377 374 0 T-T- AKRON/AKRON-CANTON REG. OH.
72522 4334 -7361 104 0 0 ---- GLENN FALLS, NY, FLOYD BENNETT MEMORIAL ARPT
-72523 4257 -7772 209 202 0 ---- DANSVILLE/MUNICIPAL, NY.
-72524 4142 -8187 245 241 0 ---- CLEVELAND/CLEVELAND-HOPKINS, OH.
-72525 4127 -8067 361 365 0 ---- YOUNGSTOWN, OH.
-72526 4208 -8018 225 223 0 ---- ERIE/INT., PA.
+72523 4257 -7770 209 0 0 T-T- DANSVILLE/MUNICIPAL, NY.
+72524 4141 -8184 245 241 0 T-T- CLEVELAND/CLEVELAND-HOPKINS, OH.
+72525 4126 -8068 361 365 0 T-T- YOUNGSTOWN, OH.
+72526 4208 -8018 225 223 0 T-T- ERIE/INT., PA.
72528 4294 -7872 218 218 0 T-T- BUFFALO/GREATER BUFFALO INT., NY.
-72529 4312 -7767 169 171 0 ---- ROCHESTER/ROCHESTER-MONROE CO., NY.
-72530 4198 -8790 205 203 0 ---- CHICAGO/O'HARE, IL.
+72529 4312 -7767 169 171 0 T-T- ROCHESTER/ROCHESTER-MONROE CO., NY.
+72530 4198 -8790 205 203 0 T-T- CHICAGO/O'HARE, IL.
72531 4029 -8815 228 0 0 ---- RANTOUL/CHANUTE AFB, IL.
-72532 4067 -8968 202 201 0 ---- PEORIA/GREATER PEORIA MUN., IL.
-72533 4100 -8520 252 245 0 ---P FORT WAYNE/MUN., BAER FLD., IN.
-72534 4178 -8775 190 189 0 ---- CHICAGO/MIDWAY, IL.
-72535 4170 -8632 236 241 0 ---- SOUTH BEND/ST.JOSEPH CO., IN.
-72536 4160 -8380 211 208 0 ---- TOLEDO/EXPRESS, OH.
-72537 4223 -8333 202 195 0 ---- DETROIT/METROPOLITAN, MI.
-72539 4277 -8460 266 261 0 ---- LANSING/CAPITAL CITY, MI.
+72532 4067 -8968 202 201 0 T-T- PEORIA/GREATER PEORIA MUN., IL.
+72533 4098 -8520 252 245 0 T-TP FORT WAYNE/MUN., BAER FLD., IN.
+72534 4179 -8775 190 189 0 ---- CHICAGO/MIDWAY, IL.
+72535 4171 -8632 236 241 0 T-T- SOUTH BEND/ST.JOSEPH CO., IN.
+72536 4159 -8381 211 208 0 T-T- TOLEDO/EXPRESS, OH.
+72537 4221 -8335 202 195 0 T-T- DETROIT/METROPOLITAN, MI.
+72539 4277 -8460 266 261 0 T-T- LANSING/CAPITAL CITY, MI.
72540 4025 -9372 270 271 0 ---- SPICKARD, MO.
72542 4078 -9112 212 0 0 ---- BURLINGTON, IA SOUTHEAST IOWA RGNL ARPT
-72543 4220 -8910 226 224 0 ---- ROCKFORD/GREATER ROCKFORD, IL.
-72544 4145 -9052 181 180 0 ---- MOLINE/QUAD CITY, IL.
-72545 4188 -9170 265 263 0 ---- CEDAR RAPIDS, IA.
-72546 4153 -9365 294 292 0 ---- DES MOINES/MUN., IA.
-72547 4240 -9070 329 328 0 ---- DUBUQUE/MUN., IA.
-72548 4255 -9240 268 266 0 ---- WATERLOO/MUN., IA.
+72543 4220 -8909 226 224 0 T-T- ROCKFORD/GREATER ROCKFORD, IL.
+72544 4145 -9051 181 180 0 T-T- MOLINE/QUAD CITY, IL.
+72545 4188 -9171 265 263 0 ---- CEDAR RAPIDS, IA.
+72546 4153 -9366 294 292 0 T-T- DES MOINES/MUN., IA.
+72547 4240 -9071 329 328 0 ---- DUBUQUE/MUN., IA.
+72548 4256 -9240 268 266 0 ---- WATERLOO/MUN., IA.
72549 4255 -9418 355 354 0 ---- FORT DODGE, IA
-72550 4130 -9590 299 300 0 ---- EPPLEY FIELD, OMAHA, NE.
-72551 4085 -9675 362 365 0 ---- LINCOLN/MUN., NE.
-72552 4095 -9832 566 563 0 ---- GRAND ISLAND/GR. IS. COUNTY, NE.
+72550 4130 -9589 299 300 0 T-T- EPPLEY FIELD, OMAHA, NE.
+72551 4085 -9676 362 365 0 T-T- LINCOLN/MUN., NE.
+72552 4097 -9831 566 563 0 T-T- GRAND ISLAND/GR. IS. COUNTY, NE.
72553 4137 -9602 406 399 0 ---- OMAHA, NE.
72554 4112 -9590 315 0 0 ---- OMAHA/OFFUTT AFB, NE.
-72556 4198 -9743 473 479 0 ---- NORFOLK/KARL STEFAN, NE.
-72557 4240 -9638 336 334 0 ---- SIOUX CITY/MUN., IA.
+72556 4199 -9743 473 479 0 T-T- NORFOLK/KARL STEFAN, NE.
+72557 4240 -9638 336 334 0 T-T- SIOUX CITY/MUN., IA.
72558 4132 -9637 352 352 0 T-T- VALLEY, NE.
-72561 4110 -10298 1312 1314 0 ---- SIDNEY/MUN., NE.
-72562 4113 -10070 848 849 0 T-T- NORTH PLATTE/LEE BIRD, NE.
-72564 4115 -10482 1872 1876 0 ---- CHEYENNE, WY.
-72565 3986 -10467 1656 1656 0 ---- DENVER INTERNATIONAL AIRPORT, CO.
+72561 4110 -10298 1312 1314 0 T-T- SIDNEY/MUN., NE.
+72562 4113 -10070 846 849 0 T-T- NORTH PLATTE/LEE BIRD, NE.
+72564 4115 -10481 1872 1876 0 T-T- CHEYENNE, WY.
+72565 3986 -10467 1656 1656 0 T-T- DENVER INTERNATIONAL AIRPORT, CO.
72566 4187 -10360 1206 1209 0 ---- SCOTTSBLUFF, COUNTY, NE.
-72567 4287 -10055 792 788 0 ---- VALENTINE/MILLER, NE.
-72569 4292 -10647 1612 1630 0 ---- CASPER/NATRONA COUNTY, INTNL, WY.
-72570 4050 -10753 1915 0 0 ---- CRAIG/CRAIG-MOFFAT A., CO.
-72572 4077 -11196 1289 1289 0 T-T- SALT LAKE CITY/INTNL UT.
+72567 4288 -10055 792 788 0 T-T- VALENTINE/MILLER, NE.
+72569 4291 -10646 1612 1630 0 T-T- CASPER/NATRONA COUNTY, INTNL, WY.
+72570 4050 -10752 1915 0 0 ---- CRAIG/CRAIG-MOFFAT A., CO.
+72572 4078 -11197 1289 1289 0 T-T- SALT LAKE CITY/INTNL UT.
+72575 4120 -11201 1353 0 0 T-T- OGDEN, UT
72576 4282 -10873 1694 1703 0 ---- LANDER/HUNT, WY.
72578 4292 -11260 1365 1355 0 ---- POCATELLO/MUN., ID.
72581 4072 -11403 1292 1291 0 ---- WENDOVER/AF. AUX. FIELD, UT.
@@ -10252,7 +10344,7 @@
72592 4050 -12230 0 153 0 ---- REDDING/MUN, CA
72593 3665 -12160 24 0 0 ---- SALINAS, CA, SALINAS MUNI ARPT
72594 4079 -12417 18 13 0 ---- EUREKA, CA.
-72597 4238 -12288 399 398 0 T-T- MEDFORD/MEDFORD-JACKSON COUNTY, OR.
+72597 4237 -12287 399 398 0 T-T- MEDFORD/MEDFORD-JACKSON COUNTY, OR.
72604 4422 -7175 287 0 0 ---- FRANCONIA, NH
72605 4320 -7150 105 103 0 ---- CONCORD/MUN., NH.
72606 4365 -7031 19 23 0 ---- PORTLAND/INTNL. JET PORT, ME.
@@ -10261,6 +10353,7 @@
72612 4493 -7220 233 233 0 ---- NEWPORT, VT.
72613 4427 -7130 1910 1909 0 ---- MOUNT WASHINGTON, NH.
72614 4442 -7202 217 203 0 ---- ST.JOHNSBURY, VT.
+72616 4458 -7118 0 0 0 ---- BERLIN, NH
72617 4447 -7315 104 102 0 ---- BURLINGTON/INT., VT.
72618 4453 -7053 205 192 0 ---- RUMFORD, ME.
72619 4547 -6958 316 0 0 ---- GREENVILLE, ME.
@@ -10269,7 +10362,7 @@
72635 4288 -8552 245 242 0 ---- GRAND RAPIDS/KENT CO., MI.
72636 4317 -8625 193 191 0 ---- MUSKEGON/COUNTY, MI.
72637 4297 -8375 233 238 0 ---- FLINT/BISHOP, MI.
-72638 4437 -8468 0 351 0 ---- HOUGHTON LAKE/ROSCOMMON COUNTY, MI.
+72638 4435 -8467 354 351 0 ---- HOUGHTON LAKE/ROSCOMMON COUNTY, MI.
72639 4507 -8357 211 210 0 ---- ALPENA/PHELPS COLLINS, MI.
72640 4295 -8790 211 220 0 ---- MILWAUKEE/GEN. MITCHELL, WI.
72641 4313 -8933 264 263 0 ---- MADISON/DANE COUNTY REGIONAL WI.
@@ -10283,56 +10376,56 @@
72652 4307 -9853 453 453 0 ---- PICKSTOWN, SD.
72653 4380 -9932 530 530 0 ---- CHAMBERLAIN, SD
72654 4438 -9822 393 392 0 ---- HURON/HURON REGIONAL SD.
-72655 4555 -9407 312 313 0 ---- ST.CLOUD/WHITNEY, MN.
+72655 4554 -9405 312 313 0 ---- ST.CLOUD/WHITNEY, MN.
72656 4438 -10029 527 0 0 ---- PIERRE, SD, PIERRE RGNL ARPT
72658 4488 -9322 255 256 0 ---- MINNEAPOLIS/ST.PAUL INT., MN.
72659 4546 -9841 400 398 0 T-T- ABERDEEN/REG., SD.
72661 4527 -10353 925 924 0 ---- REDIG, SD.
-72662 4407 -10320 1030 1030 0 ---- RAPID CITY/REGIONAL AIRPORT, SD.
+72662 4407 -10320 1030 0 0 ---- RAPID CITY/REGIONAL AIRPORT, SD.
72662 4407 -10321 1031 1029 0 T-T- RAPID CITY WFO, SD.
72665 4435 -10553 1230 1230 0 ---- GILLETTE/GILLETTE-CAMPBELL COUNTY A., WY.
72666 4477 -10697 1209 1226 0 ---- SHERIDAN/COUNTY, WY.
72669 4181 -10720 2065 0 0 ---- RAWLINGS, WY, RAWLINGS MUNI-HARVEY FIELD ARPT
72670 4452 -10902 1553 1551 0 ---- CODY/MUN., WY.
-72671 4257 -11010 2124 2124 0 ---- BIG PINEY, WY
-72672 4307 -10848 1698 1699 0 T-T- RIVERTON, WY.
+72671 4258 -11011 2124 2124 0 ---- BIG PINEY, WY
+72672 4306 -10844 1698 1699 0 T-T- RIVERTON, WY.
72677 4580 -10853 1088 1099 0 ---- BILLINGS/LOGAN INT., MT
-72681 4357 -11621 873 873 0 T-T- BOISE/MUN., ID.
+72681 4357 -11624 873 873 0 T-T- BOISE/MUN., ID.
72683 4358 -11895 1271 1265 0 ---- BURNS, OR.
72688 4568 -11885 456 455 0 ---- PENDLETON, OR.
72692 4425 -12115 936 0 0 ---- ROBERT FIELD ARPT
72693 4412 -12322 114 111 0 ---- EUGENE/MAHLON SWEET, OR.
-72694 4491 -12301 62 62 0 T-T- SALEM/MCNARY, OR.
+72694 4490 -12300 61 62 0 T-T- SALEM/MCNARY, OR.
72698 4560 -12260 12 7 0 ---- PORTLAND/INT., OR.
-72712 4687 -6801 191 191 0 T-T- CARIBOU/MUN., ME.
+72712 4687 -6801 192 191 0 T-T- CARIBOU/MUN., ME.
72713 4668 -6805 146 163 0 ---- PRESQUE ISLE, ME.
72741 4593 -9045 469 462 0 ---- PARK FALLS, WI.
72743 4653 -8755 434 434 0 ---- MARQUETTE, MI.
72744 4717 -8850 329 333 0 ---- HOUGHTON/HOUGHTON COUNTY, MI.
72745 4683 -9218 432 436 0 ---- DULUTH/INT., MN.
-72747 4856 -9340 362 357 0 T-T- INT.FALLS/FALLS INT. MN.
+72747 4857 -9340 362 357 0 T-T- INT.FALLS/FALLS INT. MN.
72750 4660 -9432 390 0 0 ---- PEQUOT LAKE, MN
-72753 4690 -9680 274 274 0 ---- FARGO/HECTOR FIELD, ND.
+72753 4692 -9681 274 274 0 ---- FARGO/HECTOR FIELD, ND.
72755 4750 -9493 420 423 0 ---- BEMIDJI/MUN., MN.
72756 4893 -9535 328 0 0 ---- WARROAD, MN
72757 4795 -9718 257 0 0 ---- GRAND FORKS, ND, GRAND FORKS INT. ARPT
72758 4810 -9887 443 439 0 ---- DEVILS LAKE, ND.
72763 4680 -10280 791 0 0 ---- DICKINSON, ND, DICKINSON - THEODORE ROOSEVELT RGNL ARPT
-72764 4677 -10076 505 506 0 T-T- BISMARCK/MUN., ND.
+72764 4677 -10075 505 506 0 T-T- BISMARCK/MUN., ND.
72765 4775 -10183 624 0 0 ---- ROSEGLEN, ND.
72767 4818 -10363 581 592 0 ---- WILLISTON/SLOULIN FIELD INT., ND.
-72768 4821 -10663 694 693 0 T-T- GLASGOW/INT., MT.
+72768 4821 -10662 694 693 0 T-T- GLASGOW/INT., MT.
72769 4861 -11238 1175 0 0 ---- CUT BANK, MT, CUT BANK MUNI ARPT
72770 4526 -11255 1591 0 0 ---- DILLON, MT, DILLON ARPT
72772 4660 -11200 1188 1186 0 ---- HELENA/COUNTY-CITY, MT.
72773 4692 -11408 972 976 0 ---- MISSOULA / JOHNSON-BELL FIELD, MT.
72774 4595 -11251 1688 0 0 ---- BUTTE, MT BERT MOONEY ARPT
72775 4748 -11137 1115 1118 0 ---- GREAT FALLS/INT., MT.
-72776 4746 -11138 1131 1132 0 T-T- GREAT FALLS, MT.
+72776 4746 -11138 1132 1134 0 T-T- GREAT FALLS, MT.
72777 4855 -10977 792 789 0 ---- HAVRE/CITY COUNTY, MT.
72779 4830 -11427 906 906 0 ---- KALISPELL/GLACIER PARK INT., MT.
72781 4657 -12053 325 332 0 ---- YAKIMA/YAKIMA AIR TERMINAL, WA.
-72783 4638 -11702 438 438 0 ---- LEWISTON/LEWISTON-NEZ PERCE CO., ID.
+72783 4637 -11702 438 438 0 ---- LEWISTON/LEWISTON-NEZ PERCE CO., ID.
72784 4657 -11960 223 0 0 ---- HANFORD, WA.
72785 4763 -11753 721 720 0 ---- SPOKANE/INT., WA.
72786 4768 -11763 729 729 0 T-T- SPOKANE, WA.
@@ -10343,7 +10436,7 @@
72791 4615 -12388 0 7 0 ---- ASTORIA/CLATSOP, OR.
72792 4697 -12290 61 62 0 ---- OLYMPIA, WA.
72793 4745 -12230 137 130 0 ---- SEATTLE/S.-TACOMA, WA.
-72797 4793 -12456 57 57 0 T-T- QUILLAYUTE, WA.
+72797 4794 -12456 57 57 0 T-T- QUILLAYUTE, WA.
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.
@@ -10351,12 +10444,12 @@
74201 4813 -12340 9 5 0 ---- PORT ANGELES/CGAS, WA.
74206 4715 -12248 87 0 0 ---- TACOMA/MC CHORD AFB, WA.
74207 4712 -12255 87 0 0 ---- FORT LEWIS/GRAY AAF, WA.
-74230 4643 -10587 801 0 0 ---- MILES CITY, MT
+74230 4643 -10588 803 0 0 T-T- MILES CITY, MT
74341 4467 -9545 0 319 0 PPPP WOOD LAKE, MN.
74357 4322 -9053 0 226 0 PPPP BLUE RIVER, WI.
74365 4483 -8455 387 0 0 ---- GRAYING AF RANGE, MI.
74370 4405 -7573 207 0 0 ---- FORT DRUM/WHEELER-SACK AAF, NY
-74389 4389 -7025 118 125 0 T-T- GRAY, ME.
+74389 4389 -7025 118 125 0 T-T- GRAY/PORTLAND, ME.
74392 4388 -6993 24 0 0 ---- BRUNSWICK/NAS, ME.
74393 4353 -7009 7 0 0 ---- PORTLAND, ME.
74413 4253 -11570 1108 0 0 ---- SAYLOR CREEK GUNNERY RANGE, ID.
@@ -10368,7 +10461,7 @@
74440 4010 -9733 0 433 0 PPPP FAIRBURY, NE.
74445 4220 -9780 0 524 0 PPPP NELIGH, NE.
74449 4190 -9370 0 315 0 PPPP SLATER, IA.
-74455 4161 -9058 231 231 0 T-T- QUAD CITY, IA.
+74455 4161 -9059 231 231 0 T-T- QUAD CITY, IA.
74460 4137 -8868 225 223 0 ---- MARSEILLES, IL
74465 4178 -8753 0 0 0 ---- DUNNE CRIB IL.
74466 4082 -8705 0 212 0 PPPP WOLCOTT, IN.
@@ -10377,7 +10470,7 @@
74483 4288 -7288 482 0 0 ---- WILMINGTON, VT.
74484 4293 -7287 595 0 0 ---- WEST DOVER, VT.
74486 4065 -7378 7 4 0 ---- NEW YORK/JOHN F. KENNEDY INT., NY.
-74490 4247 -7128 41 41 0 ---- BEDFORD/HANSCOM AFB, MA.
+74490 4247 -7129 41 41 0 ---- BEDFORD/HANSCOM AFB, MA.
74491 4220 -7253 75 0 0 ---- CHICOPEE FALLS/WESTOVER AFB, MA.
74492 4222 -7112 0 195 0 ---- BLUE HILL OBS. MA.
74494 4166 -6995 16 15 0 T-T- CHATHAM, MA.
@@ -10409,7 +10502,7 @@
74606 3465 -12057 112 0 0 ---- SOUTH VANDENBERG AFB CA.
74611 3528 -11662 716 0 0 ---- BICYCLE LAKE AAF, CA
74612 3568 -11768 696 0 0 --P- CHINA LAKE, NAF, CA.
-74614 3653 -11590 972 0 0 ---- INDIAN SPRINGS GUNNERY RANGE, NV.
+74614 3624 -11503 952 0 0 ---- LAS VEGAS, NV.
74618 3527 -11743 864 0 0 ---- CUDDLEBACK GUNNERY RANGE, CA.
74619 3633 -11710 962 0 0 ---- SUPERIOR VALLEY GUNNERY RANGE, CA
74626 3345 -11195 384 386 0 --P- WFO PHOENIX, AZ.
@@ -10420,6 +10513,7 @@
74638 3429 -10380 1326 0 0 ---- MELROSE GUNNERY RANGE, NM.
74640 3607 -9922 0 648 0 PPPP VICI, OK.
74641 3629 -9978 669 0 0 ---- GAGE, OK, GAGE ARPT
+74646 3661 -9748 0 306 0 TTTT LAMONT,Sulphur OK.
74647 3668 -9747 0 306 0 PPPP LAMONT, OK.
74648 3579 -9578 0 212 0 PPPP HASKELL, OK.
74649 3497 -9752 0 331 0 PPPP PURCELL, OK.
@@ -10445,7 +10539,7 @@
74750 3178 -9572 0 119 0 PPPP PALESTINE, TX.
74752 3411 -9428 0 195 0 PPPP DEQUEEN, AR.
74753 3190 -9278 141 93 0 PPPP WINNFIELD, LA.
-74754 3132 -9255 27 0 0 ---- ENGLAND AFB, LA.
+74754 3133 -9255 27 0 0 ---- ALEXANDRIA, LA.
74755 3113 -9257 67 0 0 --PP CLAIBORNE RANGE, LA. (AFS)
74756 2969 -8227 46 0 0 ---- GAINSVILLE, FL GAINSVILLE RGNL ARPT
74757 3041 -8907 16 0 0 ---- GULFPORT, MS, GULFPORT-BILOXI INT. ARPT
@@ -10514,7 +10608,7 @@
76581 2192 -9998 0 983 1 ---- RIO VERDE, S.L.P.
76585 2127 -9880 0 132 0 ---- MATLAPA, S.L.P.
76593 2127 -8965 0 2 0 ---- PROGRESO, YUC.
-76595 2102 -8685 10 9 0 T-T- CANCUN
+76595 2102 -8685 0 9 0 T-T- CANCUN
76612 2070 -10338 0 1551 0 --T- GUADALAJARA, JAL.
76625 2058 -10040 0 1880 1 ---- QUERETARO, QRO.
76632 2012 -9875 0 2425 1 ---- PACHUCA, HGO.
@@ -10564,7 +10658,7 @@
78066 2675 -7733 15 13 0 ---- GREEN TURTLE CAY, ABACO
78069 2570 -7925 3 0 0 ---- SOUTH BIMINI, BINIMI
78070 2573 -7930 3 2 0 ---- ALICE TOWN, BIMINI
-78073 2505 -7747 7 3 0 --T- NASSAU AIRPORT NEW PROVIDENCE
+78073 2505 -7747 7 0 0 --T- NASSAU AIRPORT NEW PROVIDENCE
78075 2548 -7667 2 0 0 ---- NORTH ELEUTHERA, ELEUTHERA
78077 2550 -7663 16 14 0 ---- DUNMORE TOWN, HARBOUR IS., ELEUTHERA
78080 2475 -7615 3 0 0 ---- ROCK SOUND, ELEUTHERA
@@ -10649,7 +10743,7 @@
78364 2005 -7581 38 0 0 ---- UNIVERSIDAD, SANTIAGO DE CUBA
78365 2107 -7562 4 0 0 ---- PUNTA LUCRECIA, HOLGUIN
78366 2003 -7563 1226 0 0 ---- GRAN PIEDRA, SANTIAGO DE CUBA
-78367 1989 -7513 23 0 0 TPTP GUANTANAMO, ORIENTE
+78367 1989 -7513 23 0 0 T-T- GUANTANAMO, ORIENTE
78368 2013 -7523 55 0 0 ---- GUANTANAMO, GUANTANAMO
78369 2025 -7415 10 0 0 ---- PUNTA DE MAISI, GUANTANAMO
78370 2067 -7578 20 0 0 ---- GUARO, HOLGUIN
@@ -10661,7 +10755,7 @@
78377 2032 -7688 30 0 0 ---- VEGUITAS, GRANMA
78378 2108 -7630 35 0 0 ---- VELASCO, HOLGUIN
78379 1992 -7742 900 0 0 ---- LOMA EL MANEY, GRANMA
-78383 1968 -7988 6 0 0 ---- CAYMAN BRAC
+78383 1968 -7988 0 0 0 ---- CAYMAN BRAC
78384 1929 -8136 3 3 0 T-T- OWEN ROBERTS AIRPORT GRAND CAYMAN
78385 1932 -8114 0 1 0 ---- GRAND CAYMAN - HIGH ROCK
78387 1825 -7837 10 9 0 ---- NEGRIL POINT
@@ -10721,7 +10815,7 @@
78663 1370 -8912 617 616 0 ---- SAN SALVADOR/ILOPANGO
78666 1344 -8907 21 25 0 ---- EL SALVADOR INTL. AIRPORT/COMALAPA
78670 1344 -8816 0 117 0 ---- SAN MIGUEL/UES
-78672 1332 -8781 0 28 0 ---- LA UNION/CPI
+78672 1332 -8781 0 10 0 ---- LA UNION/CPI
78700 1327 -8765 0 0 0 ---- AMAPALA
78701 1647 -8592 2 2 0 ---- GUANAJA
78703 1632 -8652 5 0 0 ---- ROATAN
@@ -10772,13 +10866,13 @@
78825 1029 -10923 2 1 0 ---- CLIPPERTON
78846 1820 -6305 29 0 0 ---- ANGUILLA
78857 1728 -6273 9 30 0 ---- BASSETERRE
-78858 1730 -6268 48 48 0 ---- GOLDEN ROCK
+78858 1730 -6272 67 67 0 ---- R.L. BRADSHAW INT'L AIRPORT
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
-78890 1634 -6100 27 26 0 ---- LA DESIRADE METEO
-78891 1630 -6134 0 25 0 ---- LE MOULE
+78890 1634 -6100 27 27 0 ---- LA DESIRADE METEO
+78891 1630 -6135 0 25 0 ---- LE MOULE
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
@@ -10786,7 +10880,7 @@
78906 1533 -6138 5 5 0 ---- CANEFIELD AIRPORT
78922 1477 -6088 39 26 0 ---- TRINITE-CARAVELLE
78924 1450 -6102 0 377 0 ---- LE DIAMANT
-78925 1460 -6100 8 3 0 ---- LAMENTIN-AERO
+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
78951 1313 -6120 13 9 0 ---- ARNOS VALE
@@ -10907,7 +11001,7 @@
81260 440 -5722 80 0 0 ---- KABALEBO
81401 549 -5403 5 5 0 ---- SAINT-LAURENT
81403 521 -5275 17 12 0 ---- KOUROU CSG
-81405 482 -5237 9 4 0 T-T- CAYENNE MATOURY
+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
81415 364 -5403 107 106 0 ---- MARIPASOULA
@@ -11032,7 +11126,7 @@
81977 -1007 -5675 296 294 0 ---- ALTA FLORESTA
81978 -997 -5583 302 300 0 ---- CARLINDA
81979 -994 -5488 322 320 0 ---- GUARANTA DO NORTE
-81982 -934 -535 170 168 0 ---- SANTANA DO ARAGUAIA
+81982 -934 -5035 170 168 0 ---- SANTANA DO ARAGUAIA
81985 -911 -4593 283 281 0 ---- ALTO PARNAIBA
81986 -986 -4535 427 425 0 ---- GILBUES
81987 -908 -4433 299 297 0 ---- BOM JESUS DO PIAUI
@@ -11200,7 +11294,7 @@
82930 -933 -5497 537 537 0 ---- CACHIMBO (AERO)
82965 -986 -5610 288 288 0 T-T- ALTA FLORESTA (AERO)
82970 -911 -4595 285 285 0 ---- ALTO PARNAIBA
-82975 -910 -4412 331 331 0 ---- BOM JESUS DO PIAUI
+82975 -907 -4437 331 331 0 ---- BOM JESUS DO PIAUI
82976 -927 -4333 523 523 0 ---- CARACOL
82979 -963 -4210 401 401 0 ---- REMANSO
82983 -938 -4047 370 370 0 --T- PETROLINA
@@ -11530,50 +11624,51 @@
83995 -3202 -5208 2 2 0 ---- RIO GRANDE
83997 -3352 -5335 24 24 0 ---- ST.VITORIA DO PALMAR
83998 -3375 -5337 13 11 0 ---- CHUI
-84001 -45 -9027 16 63 4 ---- BALTRA AEROPUERTO (GALAPAGOS)
+84001 -45 -9027 0 63 4 ---- BALTRA AEROPUERTO (GALAPAGOS)
84008 -90 -8960 6 8 4 --T- SAN CRISTOBAL RADIOSONDA (GALAPAGOS)
84010 -91 -8962 0 18 4 ---- SAN CRISTOBAL AEROPUERTO (GALAPAGOS)
84013 93 -7967 0 0 0 ---- ESMERALDAS LAS PALMAS
-84018 98 -7963 7 10 4 ---- ESMERALDAS (TACHINA) AEROPUERTO
-84027 81 -7770 2934 2941 3 ---- TULCAN AEROPUERTO
+84018 98 -7963 0 10 4 ---- ESMERALDAS (TACHINA) AEROPUERTO
+84027 81 -7770 0 2941 3 ---- TULCAN AEROPUERTO
84036 60 -7781 0 2860 3 ---- SAN GABRIEL
-84043 34 -7814 2214 2227 3 ---- IBARRA AEROPUERTO
+84043 34 -7814 0 2227 3 ---- IBARRA AEROPUERTO
84045 26 -7873 0 3185 3 ---- INGUINCHO
84050 3 -7937 0 360 4 ---- LA CONCORDIA
84056 3 -7823 0 2790 3 ---- TOMALON
-84063 9 -7687 297 299 4 ---- NUEVA LOJA AEROPUERTO
-84069 -25 -7920 554 522 9 ---- SANTO DOMINGO AEROPUERTO
-84071 -14 -7848 2794 2805 3 ---- QUITO AEROPUERTO
-84072 -17 -7848 2812 2812 3 ---- INAQUITO
+84063 9 -7687 0 299 4 ---- NUEVA LOJA AEROPUERTO
+84069 -25 -7920 0 522 9 ---- SANTO DOMINGO AEROPUERTO
+84071 -14 -7848 0 2805 3 ---- QUITO AEROPUERTO
+84072 -17 -7848 0 2812 3 ---- INAQUITO
84076 -23 -7837 0 2480 3 ---- LA TOLA
-84088 -37 -7855 3058 3058 3 ---- IZOBAMBA
-84099 -46 -7698 298 254 4 ---- EL COCA AEROPUERTO
-84101 -61 -8040 3 3 4 ---- SAN VICENTE AEROPUERTO
+84088 -37 -7855 0 3058 3 ---- IZOBAMBA
+84099 -46 -7698 0 254 4 ---- EL COCA AEROPUERTO
+84101 -61 -8040 0 3 4 ---- SAN VICENTE AEROPUERTO
84105 -48 -7934 0 260 4 ---- PUERTO ILA
-84117 -95 -8068 12 15 4 ---- MANTA AEROPUERTO
-84123 -91 -7862 2785 2805 3 ---- LATACUNGA AEROPUERTO
-84132 -92 -7542 265 205 4 ---- NUEVO ROCAFUERTE
-84135 -104 -8045 60 60 4 ---- PORTOVIEJO
+84117 -95 -8068 0 15 4 ---- MANTA AEROPUERTO
+84123 -91 -7862 0 2805 3 ---- LATACUNGA AEROPUERTO
+84132 -92 -7542 0 205 4 ---- NUEVO ROCAFUERTE
+84132 -92 -7540 0 190 0 --T- NUEVO ROCAFUERTE
+84135 -104 -8045 0 60 4 ---- PORTOVIEJO
84137 -104 -8047 0 40 4 ---- PORTOVIEJO AEROPUERTO
-84140 -110 -7945 120 120 4 ---- PICHILINGUE
-84143 -102 -7859 2628 2628 3 ---- RUMIPAMBA
-84147 -121 -7856 2515 2591 3 ---- AMBATO AEROPUERTO
+84140 -110 -7945 0 120 4 ---- PICHILINGUE
+84143 -102 -7859 0 2628 3 ---- RUMIPAMBA
+84147 -121 -7856 0 2591 3 ---- AMBATO AEROPUERTO
84149 -99 -7781 0 520 9 ---- TENA AEROPUERTO
-84160 -140 -7858 2940 2940 3 ---- QUERO CHACA
-84163 -151 -7806 1054 1056 2 ---- SHELL MERA AEROPUERTO
-84176 -165 -7866 2760 2787 3 ---- RIOBAMBA AEROPUERTO
-84179 -151 -7794 960 960 9 ---- PUYO
-84200 -221 -8098 4 6 4 ---- SALINAS AEROPUERTO
+84160 -140 -7858 0 2940 3 ---- QUERO CHACA
+84163 -151 -7806 0 1056 2 ---- SHELL MERA AEROPUERTO
+84176 -165 -7866 0 2787 3 ---- RIOBAMBA AEROPUERTO
+84179 -151 -7794 0 960 9 ---- PUYO
+84200 -221 -8098 0 6 4 ---- SALINAS AEROPUERTO
84202 -212 -7959 0 13 4 ---- MILAGRO
84203 -216 -7988 6 6 4 --T- GUAYAQUIL AEROPUERTO
-84204 -220 -7988 5 6 4 ---- GUAYAQUIL INAMHI
-84217 -229 -7812 995 1043 2 ---- MACAS AEROPUERTO
-84226 -254 -7894 3083 3083 3 ---- CANAR
-84239 -289 -7898 2516 2532 3 ---- CUENCA AEROPUERTO
+84204 -220 -7988 0 6 4 ---- GUAYAQUIL INAMHI
+84217 -229 -7812 0 1043 2 ---- MACAS AEROPUERTO
+84226 -254 -7894 0 3083 3 ---- CANAR
+84239 -289 -7898 0 2532 3 ---- CUENCA AEROPUERTO
84248 -325 -7995 4 0 0 ---- MACHALA AEROPUERTO
84252 -344 -7998 0 7 4 ---- SANTA ROSA AEROPUERTO
-84265 -400 -7937 1230 1237 2 ---- TOMO CATAMAYO AEROPUERTO
-84270 -404 -7920 2160 2130 3 ---- LOJA LA ARGELIA
+84265 -400 -7937 0 1237 2 ---- TOMO CATAMAYO AEROPUERTO
+84270 -404 -7920 0 2130 3 ---- LOJA LA ARGELIA
84279 -437 -7993 427 0 0 ---- MACARA AEROPUERTO
84331 -290 -7640 100 0 1 ---- ANDOAS
84347 -645 -7897 2201 2200 1 ---- HUAMBOS
@@ -11684,8 +11779,8 @@
85488 -2992 -7120 0 142 0 ---- LA SERENA
85543 -3278 -7152 0 5 0 T-T- QUINTERO
85574 -3339 -7079 0 481 0 ---- PUDAHUEL
-85577 -3344 -7068 520 520 0 ---- QUINTA NORMAL
-85585 -3364 -7883 30 29 0 ---- JUAN FERNANDEZ
+85577 -3344 -7068 0 520 0 ---- QUINTA NORMAL
+85585 -3364 -7883 0 29 0 ---- JUAN FERNANDEZ
85586 -3365 -7161 0 73 0 T-T- SANTO DOMINGO
85629 -3497 -7123 0 23 0 ---- CURICO
85672 -3659 -7204 0 156 0 ---- CHILLAN
@@ -11698,7 +11793,7 @@
85830 -4292 -7272 0 3 0 ---- CHAITEN
85832 -4319 -7184 0 317 0 ---- FUTALEUFU
85834 -4357 -7483 0 45 0 ---- ISLA HUAFO
-85836 -4363 -7178 277 281 0 ---- ALTO PALENA
+85836 -4363 -7178 0 281 0 ---- ALTO PALENA
85862 -4540 -7267 0 10 0 ---- PUERTO AYSEN *
85864 -4559 -7311 0 302 0 ---- COYHAIQUE
85874 -4591 -7169 0 516 0 ---- BALMACEDA
@@ -11710,14 +11805,14 @@
85930 -5240 -7509 52 0 0 ---- FARO EVANGELISTA
85934 -5300 -7084 0 38 0 --T- PUNTA ARENAS
85968 -5493 -6762 0 27 0 ---- PUERTO WILLIAMS
-85972 -5647 -6873 42 11 0 ---- ISLA DIEGO RAMIREZ
+85972 -5647 -6873 0 11 0 ---- ISLA DIEGO RAMIREZ
86011 -1953 -5937 143 0 0 ---- BASE A. GRAL ADRIAN JARA
-86033 -2022 -5817 82 92 0 ---- BAHIA NEGRA
+86033 -2022 -5817 82 0 0 ---- BAHIA NEGRA
86038 -2133 -6150 0 0 0 ---- LA PATRIA
86065 -2255 -6155 206 0 0 ---- PELAYO PRATS GILL
-86068 -2202 -6062 167 172 0 ---- MARISCAL ESTIGARRIBIA
-86086 -2228 -5793 78 88 0 ---- PUERTO CASADO
-86097 -2360 -5583 563 614 1 ---- PEDRO JUAN CABALLERO
+86068 -2202 -6062 167 0 0 ---- MARISCAL ESTIGARRIBIA
+86086 -2228 -5793 78 0 0 ---- PUERTO CASADO
+86097 -2363 -5583 563 0 1 ---- PEDRO JUAN CABALLERO
86125 -2338 -5890 100 0 0 ---- POZO COLORADO
86128 -2350 -5878 98 0 0 ---- POZO COLORADO
86134 -2343 -5742 98 0 0 ---- CONCEPCION
@@ -11726,7 +11821,7 @@
86192 -2467 -5645 183 0 0 ---- SAN ESTANISLAO
86210 -2403 -5435 297 0 0 ---- SALTO DEL GUAIRA
86216 -2537 -5755 120 0 0 ---- SAN LORENZO
-86218 -2527 -5763 83 0 0 ---- AEROPUERTO SILVIO PETTIROSSI, LUQUE
+86218 -2523 -5752 83 0 0 ---- AEROPUERTO SILVIO PETTIROSSI, LUQUE
86220 -2540 -5710 228 0 0 ---- CAACUPE
86221 -2563 -5713 116 0 0 ---- PARAGUARI
86233 -2575 -5643 263 0 0 ---- VILLARRICA
@@ -11735,7 +11830,7 @@
86246 -2545 -5483 247 0 0 ---- AEROPUERTO INT. GUARANI
86247 -2552 -5478 0 0 0 ---- VIVERO FORESTAL
86248 -2553 -5460 196 0 0 ---- CIUDAD DEL ESTE
-86255 -2688 -5832 58 59 0 ---- PILAR
+86255 -2688 -5832 58 0 0 ---- PILAR
86260 -2667 -5713 131 0 0 ---- SAN JUAN BAUTISTA
86262 -2665 -5710 0 0 0 ---- ESC. AGRIC.DE SAN JUAN BAUTISTA
86268 -2618 -5635 142 0 0 ---- CAAZAPA
@@ -11748,7 +11843,7 @@
86350 -3090 -5554 243 242 0 ---- RIVERA
86360 -3144 -5798 42 41 0 ---- SALTO
86370 -3171 -5599 135 134 0 ---- TACUAREMBO
-86430 -3235 -5804 61 61 0 ---- PAYSANDU
+86430 -3235 -5804 0 61 0 ---- PAYSANDU
86440 -3235 -5419 102 100 0 ---- MELO
86450 -3269 -5765 81 81 0 ---- YOUNG
86460 -3279 -5653 76 75 0 ---- PASO DE LOS TOROS
@@ -11771,7 +11866,7 @@
86613 -1054 -3900 434 432 0 ---- EUCLIDES DA CUNHA
86614 -1074 -3811 364 362 0 ---- POCO VERDE
86615 -1040 -3775 310 308 0 ---- CARIRA
-86616 -1095 -5705 6 5 0 ---- ARACAJU
+86616 -1095 -3704 6 5 0 ---- ARACAJU
86618 -1047 -3647 12 10 0 ---- BREJO GRANDE
86619 -1013 -3629 76 74 0 ---- CORURIPE
86620 -1102 -6873 219 217 0 ---- EPITACIOLANDIA
@@ -11983,7 +12078,7 @@
86879 -2286 -4341 47 45 0 ---- RIO DE JANEIRO-VILA MILITAR
86881 -2291 -4323 16 14 0 ---- MARACANA
86884 -2299 -4337 5 3 0 ---- RIO DE JANEIRO-JACAREPAGUA
-86887 -2299 -4319 982 980 0 ---- RIO DE JANEIRO-FORTE DE COPACABANA
+86887 -2299 -4319 47 45 0 ---- RIO DE JANEIRO-FORTE DE COPACABANA
86888 -2245 -4299 982 980 0 ---- TERESOPOLIS
86889 -2233 -4268 1048 1046 0 ---- NOVA FRIBURGO
86890 -2204 -4105 6 4 0 ---- SAO TOME
@@ -12208,7 +12303,7 @@
89016 -7309 -1315 363 0 0 ---- WASA EP5
89018 -7447 -1152 1160 0 0 ---- SVEA EP6
89020 -7558 -2617 0 0 0 ---- BRUNT AWS
-89022 -7544 -2622 33 30 0 --T- HALLEY
+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
89049 -8567 -4638 1860 0 0 ---- AGO-2
@@ -12222,19 +12317,20 @@
89058 -6222 -5897 10 0 0 ---- GREAT WALL
89059 -6332 -5668 10 0 0 ---- BASE BERNARDO O'HIGGINS
89061 -6477 -6408 8 0 0 ---- PALMER STATION
-89062 -6756 -6812 33 3 0 ---- ROTHERA
+89062 -6756 -6812 33 0 0 ---- ROTHERA
89062 -6756 -6813 0 3 0 --T- ROTHERA
89063 -6525 -6427 11 0 0 ---- VERNADSKY
89064 -6265 -6038 12 0 0 ---- JUAN CARLOS I AWS
89065 -7131 -6828 66 0 0 ---- FOSSIL BLUFF
89066 -6812 -6713 7 0 0 ---- BASE SAN MARTIN
89069 -6525 -6427 11 0 0 ---- FARADAY
+89070 -6298 -6068 0 12 0 ---- GABRIEL DE CASTILLA
89081 -8030 -8133 905 0 0 ---- PATRIOT HILLS AWS
89083 -7592 -8392 914 0 0 ---- SIPLE STATION
89087 -8520 -8788 1634 0 0 ---- THIEL MOUNTAINS AWS
89091 -88 -5260 206 206 0 ---- MONTE DOURADO
89108 -8900 -102 2755 0 0 ---- HENRY
-89132 -7477 -13680 142 140 0 ---- RUSSKAJA
+89132 -7476 -13679 142 140 0 ---- RUSSKAJA
89175 -7880 -17467 15 0 0 ---- BROCKTON
89208 -9000 0 2835 0 0 ---- UNIV. WI ID 8987 (CLEAN AIR)
89250 -6208 -5840 267 0 0 ---- KING GEORGE ISLAND
@@ -12270,7 +12366,7 @@
89528 -8277 2858 2912 0 0 ---- AGO-3
89532 -6901 3958 22 18 0 T-T- SYOWA
89536 -7865 3564 3620 0 0 ---- PLATEAU STATION B EP12
-89542 -6767 4585 50 48 0 ---- MOLODEZNAJA
+89542 -6766 4585 50 48 0 ---- MOLODEZNAJA
89558 -8211 5503 3730 0 0 ---- POLE OF INACCESSIBILITY EP 13
89564 -6759 6288 16 10 0 --T- MAWSON
89568 -7605 6502 2342 2342 0 ---- DAVIS LGB 35 AWS
@@ -12278,7 +12374,7 @@
89571 -6856 7797 23 18 0 T-T- DAVIS
89573 -6937 7637 18 0 0 ---- ZHONGSHAN
89574 -6938 7639 15 14 0 ---- PROGRESS
-89575 -6975 7370 46 45 0 ---- DRUZHNAYA-4
+89575 -6973 7370 46 45 0 ---- DRUZHNAYA-4
89576 -7083 7706 1850 1850 0 ---- DAVIS (LGB 69)
89577 -8037 7737 4084 4084 0 ---- DOME A
89578 -7642 7703 2824 2824 0 ---- EAGLE
@@ -12318,9 +12414,10 @@
89767 -7089 6987 84 84 0 ---- G3
89768 -7855 16665 920 0 0 ---- MINNA BLUFF
89769 -7847 16838 50 0 0 ---- LINDA
-89773 -6945 7142 65 65 0 ---- AMERY ICE SHELF AM01
+89773 -6945 7142 0 65 0 ---- AMERY ICE SHELF AM01
89774 -7345 7678 2537 2537 0 ---- DAVIS (LGB 59 AWS)
-89775 -6972 7263 47 47 0 ---- AMERY ICE SHELF AM02
+89775 -6972 7263 0 47 0 ---- AMERY ICE SHELF AM02
+89776 -6941 7619 35 0 0 ---- BHARATI
89799 -8900 8967 2935 0 0 ---- NICO
89803 -6850 10218 2123 2123 0 ---- CASEY (TRAVERSE GF08)
89807 -6655 10775 42 40 0 ---- SNYDER ROCKS
@@ -12461,6 +12558,7 @@
91532 -52 16692 7 7 0 ---- NAURU ARC-2
91533 -90 16953 66 65 0 ---- BANABA
91541 -1070 16580 24 23 0 ---- SANTA CRUZ
+91546 -1155 16006 15 14 0 ---- TINGOA
91550 -1332 16662 0 5 0 ---- LINUA AIRPORT AWS (TORRES IS.)
91551 -1385 16755 18 17 0 ---- SOLA (VANUA LAVA)
91553 -1528 16798 27 0 0 ---- SARATMATA
@@ -12471,16 +12569,16 @@
91568 -2023 16977 7 6 0 ---- ANEITYUM
91570 -1848 16309 4 4 0 ---- ILE SURPRISE
91571 -2046 16422 0 595 0 ---- THIEBAGI RADAR
-91573 -1972 16366 84 94 0 ---- ILE ART (BELEP)
+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 8 0 ---- OULOUP (ILE OUVEA)
+91579 -2064 16657 9 16 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 43 0 ---- LA ROCHE (ILE MARE)
+91587 -2148 16804 48 42 0 ---- LA ROCHE (ILE MARE)
91590 -2202 16622 11 16 0 ---- LA TONTOUTA (NLLE-CALEDONIE)
91592 -2228 16645 71 70 0 T-T- NOUMEA (NLLE-CALEDONIE)
-91596 -2259 16745 96 97 0 ---- MOUE (ILE DES PINS)
+91596 -2259 16745 104 97 0 ---- MOUE (ILE DES PINS)
91598 -2235 17136 28 27 0 ---- MATTHEW (ILOT)
91601 303 17278 0 1 0 ---- BUTARITARI
91610 135 17292 4 2 0 T-P- TARAWA
@@ -12572,17 +12670,17 @@
91921 -878 -14022 72 73 0 ---- NUKUATAHA AERO
91925 -981 -13904 53 51 0 T--- HIVA-OA
91929 -1645 -15175 3 3 0 ---- BORA-BORA-MOTU-AERO
-91932 -1705 -14955 13 13 0 ---- TETIAROA
+91932 -1705 -14955 0 13 0 ---- TETIAROA
91936 -1775 -14916 3 2 0 ---- TAIARAPU-EST
91938 -1755 -14961 2 2 0 T-T- TAHITI-FAAA
91939 -1757 -14957 320 0 1 ---- PAPPEETE, TAHITI
91941 -1496 -14766 7 3 0 ---- RANGIROA
-91943 -1445 -14503 3 2 0 ---- TAKAROA
-91944 -1805 -14096 5 3 0 ---- HAO
+91943 -1445 -14503 3 6 0 ---- TAKAROA
+91944 -1805 -14096 5 5 0 ---- HAO
91945 -1991 -14494 3 2 0 ---- HEREHERETUE
91948 -2313 -13497 89 91 0 T--- MANGAREVA
91952 -2182 -13880 3 2 0 ---- MURUROA *
-91954 -2334 -14947 3 2 0 ---- TUBUAI
+91954 -2337 -14953 4 3 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
@@ -12633,9 +12731,9 @@
92100 -433 15237 13 10 0 ---- TOKUA W.O.
93004 -3443 17268 213 214 0 ---- CAPE REINGA AWS
93008 -3507 17329 86 0 1 ---- KAITAIA
-93012 -3507 17329 54 85 0 ---- KAITAIA AWS
-93017 -3508 17381 0 395 0 PPPP KAEO RADAR
-93018 -3508 17381 401 383 0 ---- KAEO RADAR AWS
+93012 -3513 17326 0 85 0 ---- KAITAIA OBSERVATORY
+93017 -3508 17380 0 395 0 PPPP NORTHLAND RADAR
+93018 -3508 17381 398 382 0 ---- KAEO RADAR AWS
93020 -3527 17392 151 150 0 ---- KERIKERI
93021 -3526 17391 151 150 0 ---- KERIKERI AERO AWS
93023 -3513 17402 87 85 0 ---- PURERUA AWS
@@ -12643,7 +12741,7 @@
93057 -3577 17437 38 41 0 ---- WHANGAREI AERO AWS
93061 -3595 17383 0 15 0 ---- DARGAVILLE
93069 -3590 17512 60 69 0 ---- MOKOHINAU ISLAND AWS
-93072 -3629 17471 0 453 0 PPPP TAMAHUNGA RADAR
+93072 -3629 17470 0 453 0 PPPP TAMAHUNGA RADAR
93082 -3622 17548 0 140 0 ---- GREAT BARRIER ISLAND
93089 -3643 17467 72 72 0 ---- WARKWORTH
93098 -3679 17463 26 30 0 ---- WHENUAPAI AERO AWS
@@ -12654,7 +12752,7 @@
93113 -3683 17490 0 18 0 ---- MUSICK POINT
93119 -3700 17480 7 7 0 ---- AUCKLAND AERO AWS
93128 -3704 17594 0 103 0 ---- SLIPPER ISLAND AWS
-93129 -3683 17568 5 5 0 ---- WHITIANGA AERO AWS
+93129 -3683 17568 5 4 0 ---- WHITIANGA AERO AWS
93130 -3752 17718 0 310 0 ---- WHITE ISLAND AWS
93132 -3704 17455 0 244 0 ---- MANUKAU HEADS
93137 -3703 17497 41 34 0 ---- ARDMORE AERO AWS
@@ -12662,7 +12760,7 @@
93146 -3736 17568 19 18 0 ---- PAEROA AWS
93172 -3786 17533 54 52 0 ---- HAMILTON AERODROME
93173 -3786 17533 53 52 0 ---- HAMILTON AERO AWS
-93179 -3734 17589 264 261 0 ---- GOLDEN VALLEY AWS
+93179 -3734 17589 264 257 0 ---- GOLDEN VALLEY AWS
93182 -3786 17592 0 466 0 ---- KAIMAI AWS
93184 -3765 17618 4 3 0 ---- TAURANGA HARBOUR
93185 -3767 17620 5 4 0 ---- TAURANGA AERODROME
@@ -12680,15 +12778,15 @@
93243 -3875 17608 401 407 0 ---- TAUPO AERODROME
93245 -3874 17608 402 407 0 ---- TAUPO AERO AWS
93246 -3811 17632 294 285 0 ---- ROTORUA AERODROME
-93247 -3811 17631 285 286 0 ---- ROTORUA AERO AWS
+93247 -3811 17631 286 286 0 ---- ROTORUA AERO AWS
93251 -3886 17567 0 455 0 ---- KURATAU JUNCTION AWS
93254 -3879 17625 0 745 0 ---- HIGH LEVEL ROAD AWS
-93257 -3840 17674 175 168 1 ---- GALATEA AWS
-93258 -3807 17606 623 623 1 ---- MAMAKU RADAR AWS
+93257 -3840 17674 175 168 1 ---- GALATEA AERO AWS
+93258 -3807 17606 619 618 1 ---- MAMAKU RADAR AWS
93259 -3886 17638 0 750 0 ---- EASTERN RANGITAIKI AWS
-93261 -3807 17606 0 604 0 PPPP MAMAKU RADAR
+93261 -3807 17606 0 599 1 PPPP MAMAKU RADAR
93263 -3989 17566 262 255 0 ---- FLAT HILLS AWS
-93285 -3838 17831 12 5 0 ---- TOLAGA BAY AWS
+93285 -3838 17831 13 5 0 ---- TOLAGA BAY AWS
93289 -3882 17715 0 274 0 ---- TUAI
93291 -3865 17798 5 5 0 P-PP GISBORNE AERODROME
93292 -3865 17798 5 5 0 ---- GISBORNE AERO AWS
@@ -12728,8 +12826,8 @@
93420 -4090 17498 8 6 0 ---- PARAPARAUMU AERO AWS
93428 -4123 17478 0 562 1 ---- MT KAUKAU
93430 -4109 17478 0 110 0 ---- MANA ISLAND AWS
-93431 -4131 17465 0 548 0 PPPP OUTLOOK HILL RADAR
-93436 -4132 17480 4 13 0 ---- WELLINGTON AERO AWS
+93431 -4131 17465 0 548 1 PPPP OUTLOOK HILL RADAR
+93436 -4133 17481 4 13 0 ---- WELLINGTON AIRPORT
93437 -4128 17477 127 125 0 ---- KELBURN AWS
93439 -4133 17481 4 13 0 ---- WELLINGTON AERO AWS
93440 -4133 17483 131 131 0 ---- BEACON HILL
@@ -12763,15 +12861,15 @@
93577 -4152 17387 32 33 0 ---- BLENHEIM AERODROME
93579 -4152 17386 36 33 0 ---- WOODBOURNE AERO AWS
93581 -4133 17395 0 23 0 ---- KOROMIKO AWS
-93586 -4110 17444 69 68 0 ---- BROTHERS ISLAND AWS
-93597 -4173 17428 32 2 0 ---- CAPE CAMPBELL AWS
+93586 -4110 17444 68 67 0 ---- BROTHERS ISLAND AWS
+93597 -4173 17428 6 5 0 ---- CAPE CAMPBELL AWS
93613 -4274 17106 0 344 0 PPPP HOKITIKA RADAR
93614 -4270 17098 40 45 0 P-PP HOKITIKA AERODROME
93615 -4271 17098 40 45 0 ---- HOKITIKA AERO AWS
93616 -4275 17592 0 13 0 ---- HOKITIKA SOUTH AWS
93619 -4322 17015 6 0 0 ---- OKARITO
93630 -4295 17157 0 738 0 ---- ARTHURS PASS
-93656 -4277 17289 181 174 0 ---- CULVERDEN AWS
+93656 -4290 17272 181 174 0 ---- CULVERDEN AWS
93658 -4277 17288 0 174 0 ---- CULVERDEN AIRFIELD
93661 -4287 17272 0 235 0 ---- HURUNUI AWS
93678 -4242 17370 108 107 0 ---- KAIKOURA AWS
@@ -12785,7 +12883,7 @@
93737 -4424 17012 460 480 0 ---- PUKAKI AERO AWS
93738 -4376 17013 656 656 1 ---- MT COOK AERO AWS
93745 -4403 17037 0 730 0 ---- TEKAPO AWS
-93747 -4453 16989 0 488 0 ---- TARA HILLS AWS
+93747 -4453 16989 485 484 0 ---- TARA HILLS AWS
93752 -4521 16938 231 229 0 ---- ALEXANDRA AERO AWS
93753 -4404 17077 403 396 0 ---- FAIRLIE AWS
93755 -4410 17082 0 300 0 ---- FAIRLIE
@@ -12794,7 +12892,7 @@
93760 -4348 17215 0 190 0 ---- DARFIELD AWF
93761 -4352 17193 0 196 0 ---- HORORATA
93762 -4347 17167 0 560 0 ---- SNOWDEN AWF
-93765 -4390 17180 0 90 0 ---- ASHBURTON AERO AWS
+93765 -4390 17180 0 91 0 ---- ASHBURTON AERO AWS
93766 -4390 17175 0 89 0 ---- ASHBURTON
93769 -4378 17202 0 91 0 PPPP RAKAIA RADAR
93772 -4430 17122 0 27 0 ---- TIMARU AERODROME
@@ -12803,15 +12901,16 @@
93775 -4440 17125 8 3 0 ---- TIMARU HARBOUR
93779 -4351 17273 13 9 0 ---- NEW BRIGHTON PIER AWS
93780 -4348 17252 35 37 0 ---- CHRISTCHURCH AERO AWS
-93781 -4349 17253 36 37 0 ---- CHRISTCHURCH AERO AWS
+93781 -4349 17253 36 38 0 ---- CHRISTCHURCH AERO AWS
93783 -4355 17255 30 21 0 ---- WIGRAM
93784 -4360 17265 0 496 0 ---- SUGARLOAF AWS
-93786 -4362 17272 14 5 0 ---- LYTTELTON AWS
-93792 -4375 17312 238 237 0 ---- LE BONS BAY AWS
+93786 -4362 17272 0 5 0 ---- LYTTELTON AWS
+93792 -4375 17312 238 236 0 ---- LE BONS BAY AWS
93796 -4497 17108 30 30 0 ---- OAMARU AERO AWS
93800 -4522 16688 19 18 0 ---- SECRETARY ISLAND AWS
93805 -4616 16661 44 44 0 ---- PUYSEGUR POINT AWS
93811 -4553 16764 209 209 0 ---- MANAPOURI AERO AWS
+93817 -4504 16968 0 370 0 T--- LAUDER UPPER AIR
93819 -4610 16922 0 1225 0 ---- WAIPAHI AWS
93820 -4620 16977 0 115 0 ---- BALCLUTHA AWS
93822 -4480 16950 0 445 0 ---- CLUDEN HILL AWS
@@ -12819,14 +12918,14 @@
93824 -4500 16998 0 615 0 ---- WEDDERBURN AWS
93825 -4512 16952 0 290 0 ---- OMAKAU AWS
93826 -4565 16938 0 80 0 ---- MILLERS FLAT AWS
-93831 -4502 16874 355 357 0 ---- QUEENSTOWN AERO AWS
+93831 -4502 16874 357 357 0 ---- QUEENSTOWN AERO AWS
93834 -4574 16845 195 193 0 ---- LUMSDEN AWS
93835 -4559 16852 0 1271 1 ---- MID DOME AWS
-93838 -4594 16790 149 147 0 ---- BIRCHWOOD AWS
-93844 -4641 16832 3 2 0 T-TP INVERCARGILL AIRPORT
+93838 -4594 16790 149 142 0 ---- BIRCHWOOD AWS
+93844 -4641 16832 3 2 0 T-T- INVERCARGILL AIRPORT
93845 -4641 16832 3 2 0 ---- INVERCARGILL AERO AWS
-93847 -4642 16833 0 3 0 PPPP INVERCARGILL RADAR
-93851 -4552 16931 160 154 0 ---- ROXBURGH AWS
+93847 -4642 16833 0 10 0 PPPP INVERCARGILL RADAR
+93851 -4552 16931 163 154 0 ---- ROXBURGH AWS
93855 -4525 16938 143 0 0 ---- ALEXANDRA
93864 -4611 16889 0 123 0 ---- GORE AWS
93868 -4578 16935 0 270 0 ---- EDIEVALE
@@ -12842,7 +12941,7 @@
93985 -4382 -17648 12 13 0 ---- CHATHAM ISLAND AERO AWS
93986 -4395 -17655 49 46 0 T--- CHATHAM ISLAND
93987 -4395 -17655 48 46 0 ---- CHATHAM ISLAND AWS
-93988 -4382 17648 22 0 1 ---- CHATHAM ISLAND
+93988 -4382 -17648 22 0 1 ---- CHATHAM ISLAND
93994 -2924 -17793 50 48 0 ---- RAOUL ISLAND AWS
93997 -2924 -17793 50 48 0 T--- RAOUL ISLAND, KERMADEC IS.
94100 -1430 12665 24 29 0 ---- KALUMBURU
@@ -12867,7 +12966,7 @@
94129 -1131 13176 20 19 0 ---- CAPE DON
94130 -1494 13081 76 75 0 ---- BRADSHAW
94131 -1452 13238 135 135 0 ---- TINDAL RAAF
-94132 -1447 13226 108 106 0 ---- KATHERINE COUNTRY CLUB
+94132 -1447 13226 0 106 0 ---- KATHERINE COUNTRY CLUB
94134 -1115 13213 10 5 0 ---- BLACK POINT
94135 -1105 13297 2 1 0 ---- MCCLUER ISLAND
94137 -1266 13288 28 26 0 ---- JABIRU AIRPORT
@@ -12899,7 +12998,7 @@
94203 -1795 12224 9 17 0 TPP- BROOME AIRPORT
94204 -1757 12382 78 91 0 ---- CURTIN AERO
94206 -1818 12556 115 112 0 ---- FITZROY CROSSING AERO
-94207 -1752 11894 8 8 0 ---- ROWLEY SHOALS
+94207 -1752 11894 8 0 0 ---- ROWLEY SHOALS
94208 -1548 12452 17 12 0 ---- KURI BAY
94210 -1551 12316 6 5 0 ---- ADELE ISLAND
94211 -1642 12610 547 546 0 ---- MOUNT ELIZABETH
@@ -12945,7 +13044,7 @@
94290 -1772 14844 7 3 0 ---- FLINDERS REEF
94291 -1752 14603 10 10 0 ---- INNISFAIL
94292 -1826 14602 8 5 0 ---- CARDWELL MARINE PDE
-94293 -1713 15215 10 292 0 ---- LIHOU REEF LIGHTHOUSE
+94293 -1713 15215 10 0 0 ---- LIHOU REEF LIGHTHOUSE
94294 -1925 14677 9 6 0 TPP- TOWNSVILLE AERO
94295 -1852 14638 10 10 0 ---- LUCINDA POINT
94296 -1712 15200 9 3 0 ---- LIHOU REEF
@@ -13099,7 +13198,7 @@
94556 -2905 15202 838 838 0 ---- TENTERFIELD (FEDERATION PARK)
94557 -2666 15246 523 523 0 ---- JIMNA FORESTRY
94558 -2597 15286 143 143 0 ---- TOOLARA (KELLY)
-94562 -2754 15234 94 89 0 ---- UNIVERSITY OF QUEENSLAND GATTON
+94562 -2754 15234 0 89 0 ---- UNIVERSITY OF QUEENSLAND GATTON
94564 -2590 15309 16 14 0 ---- RAINBOW BEACH
94566 -2618 15263 65 65 0 ---- GYMPIE
94567 -2552 15272 11 6 0 ---- MARYBOROUGH
@@ -13112,7 +13211,7 @@
94574 -2887 15303 26 26 0 ---- CASINO AIRPORT
94575 -2757 15301 13 19 0 ---- ARCHERFIELD AIRPORT
94576 -2748 15304 8 8 0 ---- BRISBANE
-94577 -2803 15328 110 110 0 ---- HINZE DAM
+94577 -2803 15328 0 110 0 ---- HINZE DAM
94578 -2739 15313 10 4 0 TPPP BRISBANE AERO
94580 -2794 15343 4 3 0 ---- GOLD COAST SEAWAY
94581 -2705 15327 7 7 0 ---- SPITFIRE CHANNEL BEACON
@@ -13127,7 +13226,7 @@
94590 -2726 15324 20 20 0 ---- INNER RECIPROCAL MARKER
94591 -2753 15333 0 7 0 ---- BANANA BANK NORTH BEACON
94592 -2817 15351 5 6 0 ---- COOLANGATTA
-94593 -2744 15355 41 41 0 ---- POINT LOOKOUT
+94593 -2744 15355 0 41 0 ---- POINT LOOKOUT
94594 -2703 15347 101 100 0 ---- CAPE MORETON LIGHTHOUSE
94595 -2863 15363 98 95 0 ---- CAPE BYRON LIGHTHOUSE
94596 -2884 15356 2 2 0 ---- BALLINA AIRPORT AWS
@@ -13194,7 +13293,7 @@
94666 -3400 13753 1 1 0 ---- WARBURTO POINT
94667 -3395 13769 0 44 0 ---- KADINA
94668 -3314 13641 280 280 0 ---- KIMBA
-94669 -3317 13800 4 2 0 ---- PORT PIRIE NYRSTAR COMPARISON
+94669 -3317 13800 0 2 0 ---- PORT PIRIE NYRSTAR COMPARISON
94672 -3495 13852 8 6 0 TPTP ADELAIDE AIRPORT
94673 -3188 13844 317 315 0 ---- HAWKER
94674 -3060 13841 259 261 0 ---- LEIGH CREEK AIRPORT
@@ -13202,7 +13301,7 @@
94676 -3031 13934 318 318 0 ---- ARKAROOLA
94677 -3552 13882 12 11 0 ---- HINDMARSH ISLAND AWS
94678 -3472 13893 526 525 0 ---- MT CRAWFORD AWS
-94679 -3303 13875 512 521 0 ---- YONGALA
+94679 -3303 13875 0 521 0 ---- YONGALA
94680 -3418 13908 416 415 0 ---- EUDUNDA
94681 -3447 13901 276 275 0 ---- NURIOOTPA VITICULTURAL
94682 -3444 14060 30 30 0 ---- LOXTON RESEARCH CENTRE
@@ -13211,10 +13310,10 @@
94685 -3397 13766 42 42 0 ---- KADINA AWS
94686 -3109 14169 182 181 0 ---- FOWLERS GAP AWS
94688 -3533 14052 100 99 0 ---- LAMEROO COMPARISON
-94689 -3198 14147 315 315 0 ---- BROKEN HILL (PATTON STREET)
+94689 -3198 14147 0 315 0 ---- BROKEN HILL (PATTON STREET)
94690 -3538 14054 111 110 0 ---- AUSTIN PLAINS
94691 -3200 14147 282 292 0 ---- BROKEN HILL AIRPORT AWS
-94692 -3404 14127 43 26 0 ---- LAKE VICTORIA STORAGE
+94692 -3404 14127 0 26 0 ---- LAKE VICTORIA STORAGE
94693 -3424 14209 53 51 0 P--- MILDURA AIRPORT
94694 -3239 14241 61 61 0 ---- MENINDEE POST OFFICE
94695 -3156 14337 75 75 0 ---- WILCANNIA (REID ST)
@@ -13262,7 +13361,7 @@
94743 -3361 15027 1080 1080 0 ---- MOUNT BOYCE AWS
94744 -3371 15031 1015 1015 0 ---- KATOOMBA (MURRI ST)
94746 -3453 15041 679 678 0 ---- MOSS VALE AWS
-94747 -3449 15040 690 690 0 ---- BOWRAL (PARRY DRIVE)
+94747 -3449 15040 0 690 0 ---- BOWRAL (PARRY DRIVE)
94748 -3440 15088 0 25 0 ---- WOLLONGONG UNIVERSITY
94749 -3436 15093 10 10 0 ---- BELLAMBI AWS
94750 -3495 15054 105 122 0 ---T NOWRA RAN AIR STATION AWS
@@ -13284,7 +13383,7 @@
94769 -3385 15122 2 2 0 ---- FORT DENISON
94770 -3328 15157 24 27 0 ---- NORAH HEAD LIGHTHOUSE
94771 -3279 15133 62 62 0 ---- CESSNOCK (NULKABA)
-94772 -3021 15168 1332 1329 0 ---- GUYRA HOSPITAL
+94772 -3021 15168 0 1329 0 ---- GUYRA HOSPITAL
94773 -3052 15166 987 987 0 ---- ARMIDALE (TREE GROUP NURSERY)
94774 -3292 15180 33 33 0 ---- NEWCASTLE NOBBYS SIGNAL STATION
94775 -3263 15159 30 30 0 ---- TOCAL AWS
@@ -13308,7 +13407,7 @@
94802 -3494 11780 69 71 0 TPP- ALBANY AIRPORT
94804 -3534 13612 32 32 0 ---- NEPTUNE ISLAND
94805 -3575 13658 144 143 0 ---- CAPE BORDA
-94806 -3506 13885 360 359 0 ---- MOUNT BARKER
+94806 -3506 13885 0 359 0 ---- MOUNT BARKER
94807 -3579 13725 0 165 0 ---- PARNDANA CFS AWS
94808 -3515 13851 55 55 0 ---- NOARLUNGA
94809 -3511 13774 7 6 0 ---- EDITHBURGH
@@ -13329,7 +13428,7 @@
94828 -3831 14147 82 81 0 ---- CASHMORE AIRPORT
94829 -3765 14206 242 245 0 ---- HAMILTON AIRPORT
94830 -3839 14222 10 10 0 ---- PORT FAIRY AWS
-94831 -3507 14232 50 65 0 ---- OUYEN (POST OFFICE)
+94831 -3507 14232 0 65 0 ---- OUYEN (POST OFFICE)
94833 -3729 14260 1150 1150 0 ---- MOUNT WILLIAM
94834 -3728 14297 296 295 0 ---- ARARAT PRISON
94835 -3722 14319 875 875 0 ---- BEN NEVIS
@@ -13400,10 +13499,10 @@
94914 -3734 14902 641 640 0 ---- COMBIENBAR AWS
94915 -3640 14841 1738 1738 0 ---- PERISHER VALLEY AWS
94917 -3769 14846 41 41 0 ---- ORBOST (COMPARISON)
-94918 -3578 14801 655 645 0 ---- TUMBARUMBA POST OFFICE
+94918 -3578 14801 0 645 0 ---- TUMBARUMBA POST OFFICE
94919 -3622 14813 340 339 0 ---- KHANCOBAN AWS
94921 -3629 14897 931 947 0 ---- COOMA AIRPORT AWS
-94922 -3544 14894 700 700 0 ---- TIDBINBILLA NATURE RESERVE
+94922 -3544 14894 0 700 0 ---- TIDBINBILLA NATURE RESERVE
94923 -3622 14912 778 778 0 ---- COOMA VISITORS CENTRE
94925 -3542 14909 588 587 0 ---- TUGGERANONG (ISABELLA PLAINS)
94926 -3531 14919 578 576 0 ---- CANBERRA AIRPORT
@@ -13420,7 +13519,7 @@
94939 -3625 15022 54 52 0 ---- MONTAGUE ISLAND LIGHHOUSE
94940 -3508 15080 83 85 0 ---- POINT PERPENDICULAR LIGHTHOUSE COMPARISON
94941 -3572 15019 11 11 0 ---- BATEMANS BAY (CATALINA COUNTRY CLUB)
-94942 -3511 15008 630 630 0 ---- NERRIGA COMPOSITE
+94942 -3511 15008 0 630 0 ---- NERRIGA COMPOSITE
94943 -3511 15008 626 622 0 ---- NERRIGA AWS
94949 -3922 14697 117 116 0 ---- HOGAN ISLAND
94950 -4090 14471 108 107 0 ---- MARRAWAH
@@ -13442,19 +13541,19 @@
94968 -4153 14719 178 171 0 ---- LAUNCESTON AIRPORT COMPARISON
94969 -4142 14712 5 5 0 ---- LAUNCESTON (TI TREE BEND)
94970 -4289 14733 51 51 0 ---- HOBART (ELLERSLIE ROAD)
-94971 -4249 14719 238 238 0 ---- MELTON MOWBRAY (NORTH STOCKMAN)
+94971 -4249 14719 0 238 0 ---- MELTON MOWBRAY (NORTH STOCKMAN)
94972 -4117 14749 198 198 0 ---- SCOTTSDALE ( WEST MINSTONE ROAD)
94973 -4278 14690 0 532 0 ---- MOOGARA (UXBRIDGE BACK ROAD
94974 -4220 14516 20 19 0 ---- CAPE SORELL
94975 -4283 14750 27 4 0 TPTP HOBART AIRPORT
-94976 -4212 14618 742 742 0 ---- LAKE ST CLAIR NATIONAL PARK
+94976 -4212 14618 0 742 0 ---- LAKE ST CLAIR NATIONAL PARK
94977 -4320 14677 831 831 0 ---- HARTZ MOUNTAINS (KEOGHS PIMPLE)
94978 -4317 14783 193 192 0 ---- PORT ARTHUR (PALMERS LOOKOUT)
-94979 -4201 14780 575 575 0 ---- LAKE LEAKE (ELIZABETH RIVER)
+94979 -4201 14780 0 575 0 ---- LAKE LEAKE (ELIZABETH RIVER)
94980 -4009 14800 10 10 0 ---- FLINDERS ISLAND AIRPORT
94981 -4214 14807 11 10 0 ---- SWANSEA (FRANCIS STREET)
94983 -4099 14835 21 20 0 ---- LARAPUNA (EDDYSTONE POINT)
-94985 -4202 14750 186 186 0 ---- ROSS (THE BOULEVARDS)
+94985 -4202 14750 0 186 0 ---- ROSS (THE BOULEVARDS)
94987 -4200 14828 56 55 0 ---- FRIENDLY BEACHES
94988 -4306 14736 7 6 0 ---- DENNES POINT
94995 -3154 15908 7 5 0 T--- LORD HOWE ISLAND AERO
@@ -13482,7 +13581,7 @@
95291 -1864 14618 13 12 0 ---- INGHAM COMPOSITE
95292 -1761 14600 19 18 0 ---- SOUTH JOHNSTONE EXP STN
95293 -1942 14654 557 556 0 ---- WOOLSHED
-95295 -1962 14738 10 17 0 ---- AYR DPI RESEARCH STN
+95295 -1962 14738 0 17 0 ---- AYR DPI RESEARCH STN
95296 -1946 14747 8 8 0 ---- ALVA BEACH
95301 -2422 11340 0 12 0 ---- CAPE CUVIER WHARF
95303 -2066 11558 25 24 0 ---- VARANUS ISLAND
@@ -13551,7 +13650,7 @@
95621 -3336 11617 200 200 0 ---- COLLIE EAST
95622 -3357 11582 63 63 0 ---- DONNYBROOK
95623 -3379 11567 130 130 0 ---- JARRAHWOOD
-95624 -3148 11828 315 315 0 ---- MERREDIN
+95624 -3148 11828 0 315 0 ---- MERREDIN
95625 -3162 11722 217 213 0 ---- CUNDERDIN AIRFIELD
95626 -3207 11840 276 276 0 ---- NAREMBEEN
95627 -3244 11890 299 299 0 ---- HYDEN
@@ -13581,14 +13680,14 @@
95657 -3322 13800 12 12 0 ---- PORT PIRIE AERODROME
95658 -3048 13688 100 105 0 ---- OLYMPIC DAM AERODROME
95659 -3475 13753 33 34 0 ---- MINLATON AERO
-95660 -3045 13716 76 76 0 ---- ANDAMOOKA
+95660 -3045 13716 0 76 0 ---- ANDAMOOKA
95661 -3460 13588 9 11 0 ---- PORT LINCOLN AERO
95662 -3284 13515 166 165 0 ---- MINNIPA DPI
95663 -3425 13571 61 60 0 ---- CUMMINS AERO
95664 -3304 13752 7 13 0 ---- WHYALLA AERO
95666 -3251 13771 14 17 0 ---- PORT AUGUSTA AERO
95667 -3382 13859 396 395 0 ---- CLARE HIGH SCHOOL
-95668 -3376 14012 55 57 0 ---- GLUEPOT
+95668 -3376 14012 0 57 0 ---- GLUEPOT
95669 -3429 13800 2 2 0 ---- PRICE
95670 -3377 13822 109 109 0 ---- RAYVILLE PARK
95671 -3451 13868 66 65 0 ---- ROSEWORTHY AWS
@@ -13597,7 +13696,7 @@
95676 -3471 13862 17 20 0 ---- EDINBURGH RAAF
95677 -3479 13863 10 17 0 ---- PARAFIELD AIRPORT
95678 -3497 13871 685 685 0 ---- MOUNT LOFTY
-95679 -3533 13850 386 386 0 ---- MOUNT TERRIBLE RADAR
+95679 -3533 13850 0 386 0 ---- MOUNT TERRIBLE RADAR
95687 -3420 14068 32 35 0 ---- RENMARK AERO
95692 -3339 14257 53 53 0 ---- POONCARIE MAIL AGENCY
95695 -3152 14338 95 95 0 ---- WILCANNIA AERODROME AWS
@@ -13606,7 +13705,7 @@
95704 -3425 14607 135 134 0 ---- GRIFFITH AIRPORT AWS
95705 -3461 14643 165 164 0 ---- YANCO AGRICULTURAL INSTITUTE
95706 -3470 14651 146 144 0 ---- NARRANDERA AIRPORT
-95707 -3328 14637 169 169 0 ---- LAKE CARGELLIGO AIRPORT
+95707 -3328 14637 0 169 0 ---- LAKE CARGELLIGO AIRPORT
95708 -3307 14721 194 199 0 ---- CONDOBOLIN AIRPORT AWS
95709 -3394 14719 258 262 0 ---- WEST WYALONG AIRPORT AWS
95710 -3199 14794 216 215 0 ---- TRANGIE RESEARCH STATION AWS
@@ -13619,13 +13718,13 @@
95720 -3379 14869 385 381 0 ---- COWRA RESEARCH CENTRE
95721 -3384 14865 297 294 0 ---- COWRA AIRPORT AWS
95722 -3443 14751 281 281 0 ---- TEMORA AIRPORT
-95723 -3482 14891 520 498 0 ---- YASS (RURAL FIRE SERVICE)
+95723 -3482 14891 0 498 0 ---- YASS (RURAL FIRE SERVICE)
95725 -3332 14908 922 922 0 ---- ORANGE AGRICULTURAL INSTITUTE
95726 -3338 14913 948 950 0 ---- ORANGE AIRPORT AWS
95727 -3202 14940 388 388 0 ---- DUNEDOO POST OFFICE
95728 -3133 14927 646 645 0 ---- COONABARABRAN AIRPORT AWS
95734 -3032 14983 230 240 0 ---- NARRABRI AIRPORT AWS
-95735 -3368 14984 1095 1053 0 ---- OBERON (SPRINGBANK)
+95735 -3368 14984 0 1053 0 ---- OBERON (SPRINGBANK)
95740 -3095 15025 263 263 0 ---- GUNNEDAH AIRPORT AWS
95744 -3371 15058 320 320 0 ---- SPRINGWOOD (VALLEY HEIGHTS)
95746 -3151 15068 390 390 0 ---- QUIRINDI POST OFFICE
@@ -13641,7 +13740,7 @@
95761 -3399 15094 69 68 0 ---- HOLSWORTHY AERODROME AWS
95762 -3107 15084 396 407 0 ---- TAMWORTH AIRPORT AWS
95764 -3383 15116 40 40 0 ---- RIVERVIEW OBSERVATORY
-95765 -3383 15107 28 4 0 ---- SYDNEY OLYMPIC PARK AWS (ARCHERY CENTRE)
+95765 -3383 15107 0 4 0 ---- SYDNEY OLYMPIC PARK AWS (ARCHERY CENTRE)
95766 -3384 15126 6 6 0 ---- WEDDING CAKE WEST
95767 -3309 15146 7 6 0 ---- LAKE MACQUARIE AWS
95768 -3382 15130 90 90 0 ---- NORTH HEAD
@@ -13665,7 +13764,7 @@
95816 -3718 13981 4 3 0 ---- ROBE AIRFIELD
95818 -3506 13922 46 55 0 ---- PALLAMANA AERODROME
95822 -3792 14126 52 51 0 ---- DARTMOOR
-95823 -3665 14052 37 37 0 ---- PADTHAWAY SOUTH
+95823 -3665 14052 0 37 0 ---- PADTHAWAY SOUTH
95825 -3758 14133 131 131 0 ---- CASTERTON
95827 -3711 14180 189 189 0 ---- KANAGULK
95829 -3633 14163 133 133 0 ---- NHILL
@@ -13698,9 +13797,9 @@
95904 -3786 14801 4 4 0 ---- LAKES ENTRANCE (EASTERN BEACH ROAD)
95908 -3650 14830 1380 1380 0 ---- THREDBO VILLAGE
95909 -3649 14829 1368 1957 0 ---- THREDBO AWS
-95912 -3643 14833 1755 1755 0 ---- CHARLOTTE PASS (KOSCIUSKO CHALET)
+95912 -3643 14833 0 1755 0 ---- CHARLOTTE PASS (KOSCIUSKO CHALET)
95913 -3775 14713 480 480 0 ---- MOUNT MOORNAPA
-95916 -3594 14838 1482 1482 0 ---- CABRAMURRA SMHEA AWS
+95916 -3594 14838 0 1482 0 ---- CABRAMURRA SMHEA AWS
95918 -3769 14847 63 63 0 ---- ORBOST
95925 -3553 14877 1760 1760 0 ---- MOUNT GININI AWS
95929 -3690 14990 2 2 0 ---- MERIMBULA AIRPORT AWS
@@ -13731,7 +13830,7 @@
95974 -4164 14797 237 237 0 ---- FINGAL (LEGGE STREET)
95975 -4309 14736 46 46 0 ---- BULL BAY (LAURISTON)
95977 -4299 14707 65 65 0 ---- GROVE (RESEARCH STATION)
-95979 -4290 14724 1261 1261 0 ---- MOUNT WELLINGTON
+95979 -4290 14724 0 1261 0 ---- MOUNT WELLINGTON
95980 -4072 14812 0 9 0 ---- SWAN ISLAND LIGHTHOUSE
95981 -4134 14828 49 48 0 ---- ST HELENS AERODROME
95983 -4146 14826 3 3 0 ---- SCAMANDER
@@ -13744,26 +13843,26 @@
95997 -5302 7339 4 3 0 ---- HEARD ISLAND (ATLAS COVE)
96001 587 9532 126 0 0 ---- SABANG/CUT BAU
96009 518 9713 87 0 0 PPP- LHOKSEUMAWE/MALIKUSSALEH
-96011 552 9542 21 0 0 PPP- BANDA ACEH/BLANG BINTANG
+96011 552 9542 21 0 0 TPT- BANDA ACEH/BLANG BINTANG
96015 425 9612 0 0 0 PPP- MEULABOH/CUT NYAK DHIEN
96033 380 9870 3 0 0 ---- MEDAN/BELAWAN
-96035 364 9888 25 0 0 TPP- KUALANAMU MEDAN
+96035 364 9888 25 0 0 TPTP KUALANAMU MEDAN
96073 155 9888 3 0 0 PPP- SIBOLGA/PINANGSORI
96075 127 9760 6 0 0 PPP- GUNUNG SITOLI/BINAKA
96087 112 10412 24 0 0 ---- BATAM/HANG NADIM
96091 92 10453 18 0 0 PPP- TANJUNG PINANG/KIJANG
96109 47 10145 31 0 0 PPP- PEKAN BARU/SIMPANGTIGA
96145 320 10625 3 0 0 PPP- TAREMPA
-96147 395 10838 2 0 0 T-T- RANAI
-96163 -79 10028 3 0 0 TPP- MIA PADANG
+96147 395 10838 2 0 0 TPTP RANAI
+96163 -79 10028 3 0 0 TPTP MIA PADANG
96171 -33 10232 46 0 0 P-P- RENGAT/JAPURA
96179 -48 10458 31 0 0 P-P- SINGKEP/DABO
96195 -163 10365 25 0 0 P-P- JAMBI/SULTAN TAHA
96207 -277 10137 782 0 0 P--- KERINCI/DEPATI PARBO
96221 -290 10470 10 0 0 PPP- PALEMBANG/ST. M. BADARUDIN II
-96237 -217 10613 33 0 0 TPP- PANGKAL PINANG
+96237 -217 10613 33 0 0 TPTP PANGKAL PINANG
96249 -275 10775 44 0 0 P-P- TANJUNG PANDAN/BULUH TUMBANG
-96253 -388 10233 16 0 0 PPP- BENGKULU/PADANG KEMILING
+96253 -388 10233 16 0 0 TPT- BENGKULU/PADANG KEMILING
96295 -509 10518 96 0 0 P-P- TANJUNG KARANG/RADIN INTEN II
96315 493 11493 15 22 0 TPTP BRUNEI AIRPORT
96323 458 11420 3 0 0 ---- KUALA BELAIT
@@ -13778,21 +13877,21 @@
96481 426 11788 20 20 0 T-T- TAWAU
96491 590 11807 13 10 0 PPPP SANDAKAN
96505 373 11568 0 0 0 ---- LONG BAWAN/JUVAI SEMARING
-96509 333 11757 6 0 0 P-P- TARAKAN/JUWATA
+96509 333 11757 6 0 0 TPT- TARAKAN/JUWATA
96525 285 11733 50 0 0 ---- TANJUNG SELOR/TANJUNG HARAPAN
96529 212 11745 26 0 0 P--- TANJUNG REDEP/KALIMARAU
96535 177 10930 15 0 0 P--- PALOH
96557 -35 11178 37 0 0 ---- NANGAPINOH
96559 12 11153 30 0 0 ---- SINTANG
96565 88 11293 0 0 0 P--- PUTUSSIBAU/PAGSUMA
-96581 -15 10940 3 0 0 PPP- PONTIANAK/SUPADIO
+96581 -15 10940 3 0 0 TPTP PONTIANAK/SUPADIO
96595 -95 11490 60 0 0 P-P- MUARA TEWEH/BERINGIN
96607 -62 11715 230 0 0 P-P- SAMARINDA/TEMINDUNG
96615 -185 10997 9 0 0 ---- KETAPANG/RAHADI USMAN
96633 -127 11690 3 0 0 P-P- BALIKPAPAN/SEPINGGAN
-96645 -270 11170 25 0 0 P-P- PANGKALAN BUN/ISKANDAR
-96655 -100 11400 27 0 0 P-P- PALANGKA RAYA/TJILIK RIWUT
-96685 -343 11475 20 0 0 P-P- BANJARMASIN/SYAMSUDIN NOOR
+96645 -270 11170 25 0 0 TPT- PANGKALAN BUN/ISKANDAR
+96655 -222 11400 27 0 0 P-P- PALANGKA RAYA/TJILIK RIWUT
+96685 -343 11475 20 0 0 TPTP BANJARMASIN/SYAMSUDIN NOOR
96695 -340 11622 18 0 0 ---- KOTA BARU/STAGEN
96737 -612 10613 40 0 0 PPP- SERANG
96739 -623 10665 46 0 0 P-P- CURUG/BUDIARTO
@@ -13803,34 +13902,34 @@
96781 -690 10758 740 0 0 TP-- BANDUNG/HUSEIN
96791 -675 10827 50 0 0 PPP- CIREBON/JATIWANGI
96797 -685 10915 10 0 0 PPP- TEGAL
-96805 -773 10902 6 0 0 P-P- CILACAP
+96805 -773 10902 6 0 0 TPT- CILACAP
96837 -697 11042 3 0 0 ---- SEMARANG
96839 -698 11038 3 0 0 PPP- SEMARANG/AHMAD YANI
96925 -585 11263 3 0 0 P-P- SANGKAPURA (BAWEAN IS.)
96933 -722 11272 3 0 0 ---- SURABAYA/PERAK I
-96935 -738 11279 3 0 0 TPPP JUANDA SURABAYA
+96935 -738 11279 3 0 0 TPTP JUANDA SURABAYA
96937 -722 11272 3 0 0 ---- SURABAYA/PERAK II
96973 -705 11397 3 0 0 P-P- KALIANGET (MADURA IS)
96987 -822 11438 5 0 0 P-P- BANYUWANGI
96995 -1045 10569 262 279 0 ---- CHRISTMAS ISLAND AERO
96996 -1219 9683 4 3 0 T--- COCOS ISLAND AERO
97008 358 12547 38 0 0 P-P- NAHA/TAHUNA
-97014 153 12492 80 0 0 TPPP MENADO/ SAM RATULANGI
+97014 153 12492 80 0 0 TPTP MENADO/ SAM RATULANGI
97016 143 12518 3 0 0 ---- BITUNG
97028 102 12080 2 0 0 PPP- TOLI-TOLI/LALOS
97048 52 12307 2 0 0 P-P- GORONTALO/JALALUDDIN
-97072 -68 11973 6 0 0 TPP- PALU/MUTIARA
+97072 -68 11973 6 0 0 TPTP PALU/MUTIARA
97086 -90 12278 2 0 0 P--- LUWUK/BUBUNG
97096 -138 12073 2 0 0 P--- POSO/KASIGUNCU
97120 -250 11900 0 0 0 P--- MAJENE
97126 -254 12037 50 0 0 ---- MASAMBA/ANDI JEMMA
97142 -430 12153 3 0 0 ---- KOLAKA/POMALA
97146 -409 12243 50 0 0 PP-- KENDARI/WOLTER MONGINSIDI
-97180 -507 11955 14 0 0 TPPP UJUNG PANDANG/HASANUDDIN
+97180 -507 11955 14 0 0 TPTP UJUNG PANDANG/HASANUDDIN
97182 -507 11955 0 0 0 ---- UJANG PANDANG/PAOTERE
97192 -547 12262 2 0 0 P-P- BAU-BAU/BETO AMBARI
97230 -875 11517 1 0 0 PPP- DENPASAR/NGURAH RAI
-97240 -856 11609 97 97 0 PPP- PRAYA LOMBOK
+97240 -856 11609 0 0 0 PPP- PRAYA LOMBOK
97260 -843 11742 3 0 0 P-P- SUMBAWA BESAR/BRANGBIJI
97270 -855 11870 2 0 0 PPP- BIMA/M.SALAHUDDIN
97284 -863 12045 1170 0 0 ---- RUTENG/SATAR TACIK
@@ -13838,21 +13937,21 @@
97310 -827 12297 0 0 0 ---- LARANTUKA/GEWAYANTANA
97320 -822 12457 12 0 0 ---- ALOR/MALI KALAHAHI
97340 -967 12033 12 0 0 PPP- WAINGAPU/MAU HAU
-97372 -1017 12367 108 0 0 TPPP KUPANG/ELTARI
+97372 -1017 12367 108 0 0 TPTP KUPANG/ELTARI
97378 -1073 12307 1 0 0 ---- ROTE/LEKUNIK BAA
97380 -1050 12183 26 0 0 ---- SABU/TARDAMU
97385 -919 12437 5 0 0 P--- OE-CUSSIE
97388 -855 12657 0 0 0 P--- DILLI/COMORO
97389 -855 12552 0 0 0 ---- COMORO
-97390 -857 12557 6 0 0 ---- DILLI/DILLI AIRPORT
+97390 -857 12557 6 0 0 ---- DILI/DILI AIRPORT
97394 -886 12637 47 0 0 ---- VIQUEQUE
97395 -850 12640 522 0 0 ---- BAU CAU
97406 182 12783 0 0 0 ---- GALELA/GAMAR MALAMU
97430 77 12737 23 0 0 PPP- TERNATE/BABULLAH
97460 -63 12750 3 0 0 P--- LABUHA/OESMAN SADIK
-97502 -89 13129 3 0 0 P--- DEO SORONG
+97502 -89 13129 3 0 0 TPT- DEO SORONG
97530 -88 13405 3 0 0 P--- MANOKWARI/RENDANI
-97560 -118 13612 11 0 0 TPPP BIAK/FRANS KAISIEPO
+97560 -118 13612 11 0 0 TPTP BIAK/FRANS KAISIEPO
97570 -187 13622 3 0 0 ---- SERUI/SUJARWO CONDRO NEGORO
97580 -183 13872 3 0 0 ---- SARMI/MARARENA
97600 -208 12600 2 0 0 P-P- SANANA
@@ -13863,15 +13962,15 @@
97698 -237 14072 3 0 0 ---- JAYAPURA/DOK II
97700 -323 12708 20 0 0 ---- NAMLEA
97722 -335 12888 10 0 0 ---- AMAHAI
-97724 -370 12808 12 0 0 TPPP AMBON/PATTIMURA
+97724 -370 12808 12 0 0 TPTP AMBON/PATTIMURA
97748 -380 13083 3 0 0 P-P- GESER
97760 -367 13375 3 0 0 P--- KAIMANA/UTAROM
97780 -392 13637 1770 0 0 ---- ENAROTALI
97796 -500 13744 3 0 0 ---- TIMIKA
97810 -568 13275 12 0 0 P-P- TUAL/DUMATUBUN
97876 -610 14030 16 0 0 ---- TANAH MERAH
-97900 -798 13130 24 0 0 PPP- SAUMLAKI/OLILIT
-97980 -847 14038 3 0 0 TPP- MERAUKE/MOPAH
+97900 -798 13130 24 0 0 TPTP SAUMLAKI/OLILIT
+97980 -847 14038 3 0 0 TPT- MERAUKE/MOPAH
98132 2080 12185 124 123 0 ---- ITBAYAT
98133 1927 12147 13 12 0 ---- CALAYAN
98134 2043 12197 167 166 0 ---- BASCO RADAR
@@ -13902,7 +14001,7 @@
98430 1464 12104 46 45 0 ---- SCIENCE GARDEN
98431 1341 12119 41 39 0 ---- CALAPAN
98432 1409 12106 11 10 0 ---- AMBULONG
-98433 1458 12137 651 646 0 T--- TANAY
+98433 1458 12137 0 646 0 T--- TANAY
98434 1475 12165 7 5 0 ---- INFANTA
98435 1411 12202 5 4 0 ---- ALABAT
98436 1395 12138 372 0 0 ---- FERNANDO AB
diff --git a/src/StdAppManager/InputVisualiserDef b/src/StdAppManager/InputVisualiserDef
index 4081898..0546ffd 100644
--- a/src/StdAppManager/InputVisualiserDef
+++ b/src/StdAppManager/InputVisualiserDef
@@ -10,6 +10,7 @@ INPUT_VISUALISER; Input Visualiseer Application
GEO_VECTORS
XY_BINNING
GEO_BINNING
+ XY_BOXPLOT
# XY_BOXES
# GEO_BOXES
# HOR_BAR
@@ -51,6 +52,12 @@ INPUT_VISUALISER; Input Visualiseer Application
INPUT_VALUES { * / }
+ INPUT_MINIMUM_VALUES { * / }
+ INPUT_MAXIMUM_VALUES { * / }
+ INPUT_MEDIAN_VALUES { * / }
+ INPUT_BOX_UPPER_VALUES { * / }
+ INPUT_BOX_LOWER_VALUES { * / }
+
INPUT_BINNING
[ interface = icon,
class = MBINNING,
diff --git a/src/StdAppManager/InputVisualiserRules b/src/StdAppManager/InputVisualiserRules
index dcc7c45..493a11e 100644
--- a/src/StdAppManager/InputVisualiserRules
+++ b/src/StdAppManager/InputVisualiserRules
@@ -88,3 +88,21 @@
%unset INPUT_DATE_Y2_VALUES
%unset INPUT_X_COMPONENT_VALUES
%unset INPUT_Y_COMPONENT_VALUES
+
+%if INPUT_PLOT_TYPE = XY_BOXPLOT %then
+ %unset INPUT_Y_TYPE
+ %unset INPUT_Y_VALUES
+ %unset INPUT_Y_MISSING_VALUE
+ %unset INPUT_LONGITUDE_VALUES
+ %unset INPUT_LATITUDE_VALUES
+ %unset INPUT_X_COMPONENT_VALUES
+ %unset INPUT_Y_COMPONENT_VALUES
+ %unset INPUT_VALUES
+ %unset INPUT_BINNING
+
+%if INPUT_PLOT_TYPE <> XY_BOXPLOT %then
+ %unset INPUT_MINIMUM_VALUES
+ %unset INPUT_MAXIMUM_VALUES
+ %unset INPUT_MEDIAN_VALUES
+ %unset INPUT_BOX_UPPER_VALUES
+ %unset INPUT_BOX_LOWER_VALUES
\ No newline at end of file
diff --git a/src/StdAppManager/NetcdfPlusDef b/src/StdAppManager/NetcdfPlusDef
index f20ae23..aede4ee 100644
--- a/src/StdAppManager/NetcdfPlusDef
+++ b/src/StdAppManager/NetcdfPlusDef
@@ -77,4 +77,10 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
NETCDF_MISSING_ATTRIBUTE
{ @ } = MISSING_VALUE
+
+ NETCDF_X_AUXILIARY_VARIABLE [visible=false]
+ { @ } = ''
+
+ NETCDF_X_GEOLINE_CONVENTION [visible=false]
+ { @ } = ''
}
diff --git a/src/StdAppManager/ObjectSpec.StdAppManager b/src/StdAppManager/ObjectSpec.StdAppManager
index 48122ae..06ed9f2 100644
--- a/src/StdAppManager/ObjectSpec.StdAppManager
+++ b/src/StdAppManager/ObjectSpec.StdAppManager
@@ -55,7 +55,7 @@ state,
service = StdAppManager
state,
- class = INPUT_HISTOGRAM/INPUT_XY_POINTS/INPUT_GEO_POINTS/INPUT_XY_VECTORS/INPUT_GEO_VECTORS/INPUT_XY_BINNING/INPUT_GEO_BINNING/INPUT_XY_BOXES/INPUT_GEO_BOXES/INPUT_HOR_BAR/INPUT_VER_BAR,
+ class = INPUT_XY_POINTS/INPUT_GEO_POINTS/INPUT_XY_AREA/INPUT_XY_VECTORS/INPUT_GEO_VECTORS/INPUT_XY_BINNING/INPUT_GEO_BINNING/INPUT_XY_BOXPLOT,
action = visualise,
service = uPlotManager
diff --git a/src/XSection/Average.cc b/src/XSection/Average.cc
index fd097ae..c8fbd78 100644
--- a/src/XSection/Average.cc
+++ b/src/XSection/Average.cc
@@ -137,7 +137,7 @@ bool Average::generateData( ApplicationInfo& appInfo, ParamMap ¶ms,
}
// Compute number of points
-int Average::computeNumberPoints( ApplicationInfo& appInfo )
+int Average::computeGeographicalPoints( ApplicationInfo& appInfo, MvField* )
{
double x1,x2,y1,y2;
appInfo.getAreaLine(x1,x2,y1,y2);
@@ -146,7 +146,9 @@ int Average::computeNumberPoints( ApplicationInfo& appInfo )
int numberEW = (int)( fabs( (appInfo.X2()-appInfo.X1()) / appInfo.GridEW() ) + 0.0000001 ) + 1; // avoid precision errors
int np = ( inputMode_ == AVERAGE_NS ) ? numberEW : numberNS;
- appInfo.NrPoints(np);
+
+ // Compute the coordinates
+ appInfo.computeLine(np);
return np;
}
diff --git a/src/XSection/Average.h b/src/XSection/Average.h
index ccc64ef..7b90c63 100644
--- a/src/XSection/Average.h
+++ b/src/XSection/Average.h
@@ -45,7 +45,7 @@ public:
// Create output request
MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* );
- int computeNumberPoints( ApplicationInfo& );
+ int computeGeographicalPoints( ApplicationInfo&, MvField* = 0 );
bool fillValues( ApplicationInfo&, MvField&, double* );
diff --git a/src/XSection/CrossS.cc b/src/XSection/CrossS.cc
index 5ffb0f1..47b8f47 100644
--- a/src/XSection/CrossS.cc
+++ b/src/XSection/CrossS.cc
@@ -143,6 +143,9 @@ bool CrossS::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
if ( (const char*)in("VERTICAL_COORDINATE_PARAM") )
appInfo.setGHBC( (int)in("VERTICAL_COORDINATE_PARAM") );
+ if ( (const char*)in("HORIZONTAL_POINT_MODE") )
+ appInfo.horPointMode( (const char*)in("HORIZONTAL_POINT_MODE") );
+
return true;
}
@@ -291,14 +294,13 @@ bool CrossS::generateLNSP(ApplicationInfo& appInfo, MvNetCDF &cdf, ParamInfo* pa
}
// Memory allocation
- double *lon = new double [nrPoints];
- double *lat = new double [nrPoints];
double *y1_values = new double[nrPoints];
double *y2_values = new double[nrPoints];
// Get X values
- appInfo.computeLine(lon,lat); //compute lat/lng points
- double *x_values = ( lon[0] == lon[1] ) ? lat : lon;
+ const vector<double>& lon = appInfo.getLongitude();
+ const vector<double>& lat = appInfo.getLatitude();
+ const vector<double>& x_values = ( lon[0] == lon[1] ) ? lat : lon;
// Compute Y values
for ( int i = 0; i < nrPoints; i++ )
@@ -328,8 +330,6 @@ bool CrossS::generateLNSP(ApplicationInfo& appInfo, MvNetCDF &cdf, ParamInfo* pa
ncy2->put(y2_values,1,nrPoints);
// Release memory
- delete [] lat;
- delete [] lon;
delete [] y1_values;
delete [] y2_values;
@@ -653,19 +653,20 @@ void CrossS::mapValues( ApplicationInfo& appInfo, ParamInfo &par_uv, ParamInfo *
return;
}
-int CrossS::computeNumberPoints( ApplicationInfo& appInfo )
+int CrossS::computeGeographicalPoints( ApplicationInfo& appInfo, MvField* field )
{
// Compute distance
double x1,x2,y1,y2;
appInfo.getAreaLine(x1,x2,y1,y2);
double dellat = ABS(y2-y1), dellon = ABS(x2-x1);
- // Compute number of points
+ // Compute initial number of points
int np = int( sqrt( dellon*dellon + dellat*dellat ) / MAX(appInfo.GridNS(),appInfo.GridEW()) );
np = MAX(np,64);
- // Save and return value
- appInfo.NrPoints(np);
+ // Compute the coordinates
+ appInfo.computeLine(np,field);
+
return np;
}
@@ -676,22 +677,26 @@ bool CrossS::fillValues( ApplicationInfo& appInfo, MvField &field, double *vals
// Get number of points and lat/long interpolation points
int npoint = appInfo.NrPoints();
- double *lon = new double [ npoint ];
- double *lat = new double [ npoint ];
- appInfo.computeLine(lon,lat);
+ const vector<double>& lat = appInfo.getLatitude();
+ const vector<double>& lon = appInfo.getLongitude();
- // Interpolatate along XS line
- for ( i = 0; i < npoint; i++)
+ if ( appInfo.isHorInterpolate() )
{
- double val = field.interpolateAt(lon[i],lat[i]);
-
- // Check valid values
- vals[i] = ( val >= DBL_MAX ) ? XMISSING_VALUE : val;
+ // Interpolatate along XS line
+ for ( i = 0; i < npoint; i++)
+ {
+ double val = field.interpolateAt(lon[i],lat[i]);
+ vals[i] = ( val >= DBL_MAX ) ? XMISSING_VALUE : val;
+ }
+ }
+ else
+ {
+ for ( i = 0; i < npoint; i++)
+ {
+ double val = field.nearestGridpoint(lon[i],lat[i]);
+ vals[i] = ( val >= DBL_MAX ) ? XMISSING_VALUE : val;
+ }
}
-
- // Release memory
- delete [] lat; lat = 0;
- delete [] lon; lon = 0;
return true;
}
diff --git a/src/XSection/CrossS.h b/src/XSection/CrossS.h
index fb116fe..8a5fbd6 100644
--- a/src/XSection/CrossS.h
+++ b/src/XSection/CrossS.h
@@ -48,7 +48,7 @@ public:
// Check if parameters between two requests are consistent
bool consistencyCheck( MvRequest&, MvRequest& );
- int computeNumberPoints( ApplicationInfo& );
+ int computeGeographicalPoints( ApplicationInfo&, MvField* );
bool fillValues( ApplicationInfo&, MvField &, double* );
diff --git a/src/XSection/MXSectionCommonDef b/src/XSection/MXSectionCommonDef
index 243f766..824ba3d 100755
--- a/src/XSection/MXSectionCommonDef
+++ b/src/XSection/MXSectionCommonDef
@@ -61,6 +61,12 @@ W_WIND_PARAM
*
} = 135
+HORIZONTAL_POINT_MODE
+{
+ INTERPOLATE
+ NEAREST_GRIDPOINT
+} = INTERPOLATE
+
VERTICAL_COORDINATES
{
DEFAULT
diff --git a/src/XSection/MXSectionViewDef b/src/XSection/MXSectionViewDef
index 4947ed2..3c3b1d5 100644
--- a/src/XSection/MXSectionViewDef
+++ b/src/XSection/MXSectionViewDef
@@ -10,14 +10,14 @@ MXSECTIONVIEW; uPlot Icon; Metview
*
} = 0.01
+ %include MXSectionCommonDef
+
VERTICAL_SCALING
{
LINEAR
LOG
} = LINEAR
- %include MXSectionCommonDef
-
MAP_PROJECTION [ visible = false ]
{
cartesian
diff --git a/src/XSection/MvXsectFrame.cc b/src/XSection/MvXsectFrame.cc
index 76ab78c..0c7e893 100644
--- a/src/XSection/MvXsectFrame.cc
+++ b/src/XSection/MvXsectFrame.cc
@@ -118,6 +118,7 @@ ApplicationInfo::ApplicationInfo() :
nrPoints_(0), nrLevels_(0), levType_(XS_PL),
viaPole_(false), haveLNSP_(false),
haveGHBC_(false), paramGHBC_(-991),
+ hor_point_("INTERPOLATE"),
interpolate_(false)
{ }
@@ -168,23 +169,31 @@ void ApplicationInfo::Grid( double ns, double ew )
}
}
-// Fill lat/long values if this is an XSection
-void ApplicationInfo::computeLine(double* lon, double* lat)
+// Compute geographical points from delta intervals
+void ApplicationInfo::computeLine( int npoints )
{
+ // Compute delta intervals
+ nrPoints_ = npoints; // initial value
double dx = double( x2_ - x1_ ) / double(nrPoints_ -1);
double dy = double( y2_ - y1_ ) / double(nrPoints_ -1);
- lon[0] = x1_;
- lat[0] = y1_;
+ // Initialize vectors
+ lon_.clear();
+ lat_.clear();
+ lon_.reserve(nrPoints_);
+ lat_.reserve(nrPoints_);
+ lon_.push_back(x1_);
+ lat_.push_back(y1_);
+ // Compute initial coordinates via pole
if( viaPole() )
{
double lat_k_prev = y1_; //-- xsect line over a pole
bool overThePole = false;
- for( int k = 1; k< nrPoints_; k++ )
+ for( int k = 1; k < nrPoints_; k++ )
{
- lon[k] = lon[k-1] + dx;
+ lon_.push_back(lon_[k-1] + dx);
double lat_k = lat_k_prev + dy;
if( ( lat_k < -90.0 || lat_k > 90.0 ) && ! overThePole )
{
@@ -197,26 +206,88 @@ void ApplicationInfo::computeLine(double* lon, double* lat)
if( dx == 0 )
{
- lon[k] = x1_ + 180.0; //-- straight over the pole
- if( lon[k] > 360.0 ) //-- ensure inside normal range
- lon[k] = lon[k] - 360.0;
+ double dtemp = x1_ + 180.0; //-- straight over the pole
+ if( dtemp > 360.0 ) //-- ensure inside normal range
+ dtemp = dtemp - 360.0;
+
+ lon_.push_back(dtemp);
}
overThePole = true;
}
- lat[k] = lat_k;
+ lat_.push_back(lat_k);
lat_k_prev += dy;
}
}
+ // Compute coordinates
else
{
for (int k = 1; k < nrPoints_; k++) //-- no pole
{
- lon[k] = lon[k-1] + dx;
- lat[k] = lat[k-1] + dy;
+ lon_.push_back(lon_[k-1] + dx);
+ lat_.push_back(lat_[k-1] + dy);
+ }
+ }
+
+ return;
+}
+
+// Compute geographical points according to the Horizontal Point Mode parameter
+void ApplicationInfo::computeLine(int& npoints, MvField* field )
+{
+ // Compute initial geographical points
+ this->computeLine(npoints);
+
+ // Use the default geographical points computed by function computeLine
+ if ( hor_point_ == "INTERPOLATE" )
+ return;
+
+ // Update lat/long values
+ // Given the default lat/lon positions (computed by function computeLine)
+ // select only the nearest points to the original grid points
+ MvLocation loc(lat_[0],lon_[0]);
+ MvLocation loc2 = field->nearestGridPointLocation( loc );
+ double distmin = loc.distanceInMeters(loc2);
+ vector<double> lat2;
+ vector<double> lon2;
+ double distc; // current distance in meters
+ int index = 0; // index of the closest location
+ for ( int k = 1; k < nrPoints_; k++)
+ {
+ MvLocation loc(lat_[k],lon_[k]);
+ MvLocation loc1 = field->nearestGridPointLocation( loc );
+ distc = loc.distanceInMeters(loc1);
+ if ( loc1.longitude() != loc2.longitude() ||
+ loc1.latitude() != loc2.latitude() )
+ {
+ lat2.push_back(lat_[index]);
+ lon2.push_back(lon_[index]);
+ loc2 = loc1;
+ index = k;
+ distmin = distc;
+ }
+ else
+ {
+ // Save the smallest distance
+ if ( distc < distmin )
+ {
+ distmin = distc;
+ index = k;
+ }
}
}
+
+ // Process the last point
+ lat2.push_back(lat_[index]);
+ lon2.push_back(lon_[index]);
+
+ // Update coordinates and total number of points
+ nrPoints_ = npoints = lat2.size();
+ lon_.clear();
+ lat_.clear();
+ lon_ = lon2;
+ lat_ = lat2;
}
// Generate data values.
@@ -333,7 +404,7 @@ void ApplicationInfo::InterpolateVerticalGHBC( double **cp, ParamInfo *param, Pa
LevelInfo *firstlev,*nextlev;
LevelIterator ii = param->Levels().begin();
-LevelIterator jj = paramGHBC->Levels().begin();
+ LevelIterator jj = paramGHBC->Levels().begin();
for ( int k = 0; k < nrLevels_; k++, ii++, jj++ )
{
double pk = yvals[k]; // pressure level index
diff --git a/src/XSection/MvXsectFrame.h b/src/XSection/MvXsectFrame.h
index 1233919..b8b8c16 100644
--- a/src/XSection/MvXsectFrame.h
+++ b/src/XSection/MvXsectFrame.h
@@ -167,7 +167,11 @@ public:
double PresTop() { return PresTop_; }
double PresBot() { return PresBot_; }
- void computeLine(double *lon, double *lat);
+ // Handle geographical coordinates
+ void computeLine( int );
+ void computeLine( int&, MvField* );
+ const vector<double>& getLongitude() const { return lon_; }
+ const vector<double>& getLatitude() const { return lat_; }
void setAreaLine( double, double, double, double );
void getAreaLine( double&, double&, double&, double& );
@@ -244,6 +248,10 @@ public:
bool isGHBC(int iparam) { return iparam == paramGHBC_; }
int GHBC() { return paramGHBC_; }
+ // Handle horizontal point mode
+ void horPointMode( string mode ) { hor_point_ = mode; }
+ string horPointMode() { return hor_point_; }
+ bool isHorInterpolate() { return hor_point_ == "INTERPOLATE"; }
private:
@@ -254,13 +262,17 @@ private:
double PresTop_, PresBot_;
int nrPoints_, nrLevels_, ntimes_;
- int levType_; // level type data, e.g., XS_ML/XS_PL/XS_ML_LNSP/XS_ML_GHBC
+ int levType_; // level type data, e.g., XS_ML/XS_PL/XS_ML_LNSP/XS_ML_GHBC
bool viaPole_;
bool haveLNSP_;
- bool haveGHBC_; // vertical coordinates flag
- int paramGHBC_; // vertical coordinate parameter
- string actionMode_; // e.g. "examine"/"save"/"execute"/...
- int procType_; // processing type
+ bool haveGHBC_; // vertical coordinates flag
+ int paramGHBC_; // vertical coordinate parameter
+ string actionMode_; // e.g. "examine"/"save"/"execute"/...
+ int procType_; // processing type
+
+ string hor_point_; // horizontal point mode
+ vector<double> lat_; // geographical coordinates
+ vector<double> lon_;
// Remove this variable in the future
// It is kept for the moment because we need to make further
diff --git a/src/XSection/Vprofile.cc b/src/XSection/Vprofile.cc
index a6c1537..40d0f96 100644
--- a/src/XSection/Vprofile.cc
+++ b/src/XSection/Vprofile.cc
@@ -679,7 +679,7 @@ bool Vprofile::generateData ( ApplicationInfo& appInfo, ParamMap ¶ms,
return true;
}
-int Vprofile::computeNumberPoints( ApplicationInfo& appInfo )
+int Vprofile::computeGeographicalPoints( ApplicationInfo& appInfo, MvField* )
{
appInfo.NrPoints(1);
return 1;
diff --git a/src/XSection/Vprofile.h b/src/XSection/Vprofile.h
index 55e8e18..904e314 100644
--- a/src/XSection/Vprofile.h
+++ b/src/XSection/Vprofile.h
@@ -54,7 +54,7 @@ public:
// Create output request
MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* );
- int computeNumberPoints( ApplicationInfo& );
+ int computeGeographicalPoints( ApplicationInfo&, MvField* = 0 );
bool fillValues( ApplicationInfo&, MvField&, double* );
diff --git a/src/XSection/Xsect.cc b/src/XSection/Xsect.cc
index 294db00..fd40b50 100644
--- a/src/XSection/Xsect.cc
+++ b/src/XSection/Xsect.cc
@@ -90,7 +90,7 @@ bool Xsect::processData( MvRequest& data, ApplicationInfo& appInfo, MvRequest& o
appInfo.getAreaLine( X1,X2,Y1,Y2 );
// Compute number of vertical points
- int npoint = this->computeNumberPoints(appInfo);
+ int npoint = this->computeGeographicalPoints(appInfo,&field);
if( npoint == 0 )
{
setError(1,"Invalid Area/Line!");
@@ -786,9 +786,8 @@ bool Xsect::writeGeoCoordsNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo )
{
// Compute lat/long interpolation points
int npoint = appInfo.NrPoints();
- double *lon = new double [ npoint ];
- double *lat = new double [ npoint ];
- appInfo.computeLine(lon,lat);
+ const vector<double>& lon = appInfo.getLongitude();
+ const vector<double>& lat = appInfo.getLatitude();
// Add Latitude value
vector<string> coord_sdim(1,XS_VARLAT);
@@ -805,10 +804,6 @@ bool Xsect::writeGeoCoordsNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo )
nccoord->addAttribute("units", "degrees_east");
nccoord->put(lon,(long)npoint);
- // Release memory
- delete [] lon; lon = 0;
- delete [] lat; lat = 0;
-
return true;
}
diff --git a/src/XSection/Xsect.h b/src/XSection/Xsect.h
index f1d110c..657846c 100644
--- a/src/XSection/Xsect.h
+++ b/src/XSection/Xsect.h
@@ -82,8 +82,8 @@ public:
// Create output request using information from the request
virtual MvRequest createOutputRequest( MvRequest& );
- // Compute number of points
- virtual int computeNumberPoints( ApplicationInfo& ) = 0;
+ // Compute number and geographical points
+ virtual int computeGeographicalPoints( ApplicationInfo&, MvField* = 0 ) = 0;
// Get Parameter info given the key
virtual ParamInfo* getParamInfo( ParamMap&, string );
diff --git a/src/libMars/CMakeLists.txt b/src/libMars/CMakeLists.txt
index 17bd767..4a3cb27 100644
--- a/src/libMars/CMakeLists.txt
+++ b/src/libMars/CMakeLists.txt
@@ -33,9 +33,9 @@ set(extra_files_for_tarball
${CMAKE_CURRENT_SOURCE_DIR}/macro_api_internals.h
${CMAKE_CURRENT_SOURCE_DIR}/macro_api_f90.f90
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
- ${CMAKE_CURRENT_SOURCE_DIR}/rpcmars.x
- ${CMAKE_CURRENT_SOURCE_DIR}/langy.y
- ${CMAKE_CURRENT_SOURCE_DIR}/langl.l
+ ${MARS_SOURCE_PATH}/rpcmars.x
+ ${MARS_SOURCE_PATH}/langy.y
+ ${MARS_SOURCE_PATH}/langl.l
)
diff --git a/src/libMars/MARS/cachebase.c b/src/libMars/MARS/cachebase.c
deleted file mode 100644
index 68120c8..0000000
--- a/src/libMars/MARS/cachebase.c
+++ /dev/null
@@ -1,815 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-/*
-
-B.Raoult
-ECMWF Oct-93
-
-*/
-
-#include "mars.h"
-
-#ifdef CRAY
-#include <rpcsvc/dbm.h>
-#include <dirent.h>
-
-#define DBM_INSERT 0
-#define DBM_REPLACE 1
-#define dbm_open(a,b,c) (dbminit(a)<0?0:1)
-#define dbm_close(a) dbmclose()
-#define dbm_fetch(a,b) fetch(b)
-#define dbm_delete(a,b) delete(b)
-#define dbm_store(a,b,c,d) store(b,c)
-
-#else
-#include <ndbm.h>
-#endif
-#include <errno.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-
-static struct sembuf lock[] = {
- { 0, 0, SEM_UNDO }, /* test */
- { 0, 1, SEM_UNDO }, /* lock */
-};
-
-static struct sembuf unlock[] = {
- { 0, -1, SEM_UNDO }, /* ulck */
-};
-
-
-typedef struct field_entry {
- long offset;
- long length;
- ino_t id;
-} field_entry;
-
-typedef struct file_entry {
- time_t access;
- time_t created;
- long length;
- char fname[1024];
-} file_entry;
-
-typedef struct dbmdata {
-
- char *dir;
-
- char *fname;
- char *chigh;
- char *clow;
-
- long offset;
- ino_t id;
-
- FILE *f;
-
- request *w;
- request *u;
-
- int cnt;
- int sem;
- key_t key;
- boolean locked;
-
-#ifdef CRAY
- int dbm_fields; /* dummy */
- int dbm_files; /* dummy */
-#else
- DBM *dbm_fields;
- DBM *dbm_files;
-#endif
-
- double high;
- double low;
-
- file_entry file;
- field_entry field;
-
-}dbmdata;
-
-static void dbmcache_init(void);
-static void dbmcache_admin(void*);
-static err dbmcache_open(void *data,request*,request*,int);
-static err dbmcache_close(void *data);
-static err dbmcache_read(void *data,request *r,void *buffer,long *length);
-static err dbmcache_write(void *data,request *r,void *buffer,long *length);
-static boolean dbmcache_check(void *data, request *r);
-
-static int written = 0;
-
-static option opts[] = {
- {"cachespace","MARS_CACHE_PATH","-cachepath","/tmp/database",
- t_str,sizeof(char*),OFFSET(dbmdata,dir) },
-
- {"cachehigh", "MARS_CACHE_HIGH","-cachehigh","1G",
- t_str,sizeof(char*),OFFSET(dbmdata,chigh)},
-
- {"cachelow", "MARS_CACHE_LOW","-cachelow","1G",
- t_str,sizeof(char*),OFFSET(dbmdata,clow)},
-};
-
-static base_class _cachebase = {
-
- NULL, /* parent class */
- "cachebase", /* name */
-
- false, /* inited */
-
- sizeof(dbmdata), /* private size */
- NUMBER(opts), /* option count */
- opts, /* options */
-
- dbmcache_init, /* init */
-
- dbmcache_open, /* open */
- dbmcache_close, /* close */
-
- dbmcache_read, /* read */
- dbmcache_write, /* write */
- NULL, /* control */
- dbmcache_check, /* check */
- NULL, /* query */
- NULL, /* archive */
-
- dbmcache_admin, /* admin */
-};
-
-
-typedef char *(*chkproc)(request *r,const char*,const char*,int idx);
-
-static char *extchar(request *r,const char*,const char*,int idx);
-static char *extlong(request *r,const char*,const char*,int idx);
-static char *extreal(request *r,const char*,const char*,int idx);
-
-typedef struct chktype{
- char *name;
- char *format;
- int size;
- chkproc extract;
-} chktype;
-
-static chktype checks_grib[] = {
- {"TYPE" ,"%s",2, extchar, },
- {"CLASS" ,"%s",2, extchar, },
- {"STREAM" ,"%s",4, extchar, },
- {"LEVTYPE" ,"%s",3, extchar, },
- {"DOMAIN" ,"%s",1, extchar, },
- {"PARAM" ,"%s",3, extchar, },
- {"LEVELIST", "%s",4, extchar, },
- {"TIME", "%04d",4, extlong, },
- {"STEP", "%06d",6, extlong, },
- {"ITERATION", "%d",2, extlong, },
- {"DIAGNOSTIC", "%d",2, extlong, },
-
- {"STEP", "%d",6, extlong, },
- {"NUMBER", "%d",4, extlong, },
- {"_EXPVER", "%X",8, extlong, },
- {"REPRES", "%s",2, extchar, },
-
-/*
- {"_AREA_N", "%.6f",11, extreal, },
- {"_AREA_W", "%.6f",11, extreal, },
- {"_AREA_S", "%.6f",11, extreal, },
- {"_AREA_E", "%.6f",11, extreal, },
- {"_GRID_NS", "%.6f",11, extreal, },
- {"_GRID_EW", "%.6f",11, extreal, },
- {"_ROTATION_LAT","%.6f",11, extreal, },
- {"_ROTATION_LON","%.6f",11, extreal, },
- {"_GAUSSIAN", "%d",4, extlong, },
- {"_TRUNCATION", "%d",4, extlong, },
-*/
- {"DATE" ,"%s",8, extchar, },
-
-};
-
-static chktype checks_image[] = {
- {"TYPE" ,"%s",2, extchar, },
- {"CLASS" ,"%s",2, extchar, },
- {"STREAM" ,"%s",4, extchar, },
- {"TIME", "%04d",4, extlong, },
- {"OBSTYPE", "%04d",4, extlong, },
- {"IDENT", "%s",8, extchar, },
- {"_EXPVER", "%X",8, extlong, },
- {"DATE" ,"%s",8, extchar, },
-};
-
-static chktype checks_obs[] = {
- {"TYPE" ,"%s",2, extchar, },
- {"TIME", "%04d",4, extlong, },
- {"OBSTYPE", "%04d",4, extlong, },
- {"IDENT", "%s",8, extchar, },
- {"DATE" ,"%s",8, extchar, },
-};
-
-
-static char *indexname(request *r)
-{
- static char buf[1024];
- int i;
-
- chktype *checks = checks_grib;
- int n = NUMBER(checks_grib);
-
- if(image(r))
- {
- checks = checks_image;
- n = NUMBER(checks_image);
- }
-
- if(observation(r))
- {
- checks = checks_obs;
- n = NUMBER(checks_obs);
- }
-
- buf[0] = 0;
- for(i=0;i<n;i++)
- {
- strcat(buf,checks[i].extract(r,checks[i].name,
- checks[i].format,checks[i].size));
- strcat(buf,"/");
- }
-
- marslog(LOG_DBUG,"%s",buf);
-
- return buf;
-}
-
-static void complete(char *p,int len)
-{
- len -= strlen(p);
- while(len--) strcat(p,"x");
-}
-
-static char *extchar(request *r,const char* name,const char* format,int size)
-{
- static char buf[20];
- const char *x = get_value(r,name,0);
- buf[0] = 0;
- if(x) sprintf(buf,format,x);
- complete(buf,size);
- return buf;
-}
-
-static char *extlong(request *r,const char* name,const char* format,int size)
-{
- static char buf[20];
- const char *x = get_value(r,name,0);
- buf[0] = 0;
- if(x) sprintf(buf,format,atol(x));
- complete(buf,size);
- return buf;
-}
-
-static char *extreal(request *r,const char* name,const char* format,int size)
-{
- static char buf[20];
- const char *x = get_value(r,name,0);
- buf[0] = 0;
- if(x) sprintf(buf,format,atof(x));
- complete(buf,size);
- return buf;
-}
-
-/* the only 'public' variable ... */
-
-base_class *cachebase = &_cachebase;
-
-static void dbmcache_init(void)
-{
-}
-
-static err closeindex(dbmdata *g)
-{
- if(g->dbm_files) dbm_close(g->dbm_files);
- if(g->dbm_fields) dbm_close(g->dbm_fields);
- g->dbm_files = NULL;
- g->dbm_fields = NULL;
-
-
- if(g->locked)
- {
- if(semop(g->sem,unlock,NUMBER(unlock)) == -1)
- {
- marslog(LOG_EROR|LOG_PERR,"semop");
- return -1;
- }
- g->locked = false;
- }
-
- return 0;
-}
-
-static err openindex(dbmdata *g)
-{
- char buffer[1024];
-
- if(g->dbm_files) return 0; /* already opened */
-
- if(g->sem == -1)
- {
- key_t key;
-
- sprintf(buffer,"%s/.fields.pag",g->dir);
- if(access(buffer,F_OK) != 0)
- close(creat(buffer,0777));
-
- sprintf(buffer,"%s/.fields.dir",g->dir);
- if(access(buffer,F_OK) != 0)
- close(creat(buffer,0777));
-
- sprintf(buffer,"%s/.files.pag",g->dir);
- if(access(buffer,F_OK) != 0)
- close(creat(buffer,0777));
-
- sprintf(buffer,"%s/.files.dir",g->dir);
- if(access(buffer,F_OK) != 0)
- close(creat(buffer,0777));
-
- sprintf(buffer,"%s/.lock.lck",g->dir);
- if(access(buffer,F_OK) != 0)
- close(creat(buffer,0777));
-
-
- key = ftok(buffer,1);
- if(key == (key_t)-1)
- {
- marslog(LOG_EROR|LOG_PERR,"ftok(%s)",buffer);
- return -1;
- }
-
- g->sem = semget(key,1,0666 | IPC_CREAT);
- if(g->sem == -1)
- {
- marslog(LOG_EROR|LOG_PERR,"semget(%s)",buffer);
- return -1;
- }
- }
-
-
- /* Lock file */
-
- if(semop(g->sem,lock,NUMBER(lock)) == -1)
- {
- marslog(LOG_EROR|LOG_PERR,"semop");
- return -1;
- }
-
- g->locked = true;
-
- sprintf(buffer,"%s/.fields",g->dir);
-
- if(!(g->dbm_fields = dbm_open(buffer,O_RDWR,0777)))
- {
- marslog(LOG_EROR|LOG_PERR,"dbm_open:%s",buffer);
- return -1;
- }
-
- sprintf(buffer,"%s/.files",g->dir);
-
- if(!(g->dbm_files = dbm_open(buffer,O_RDWR,0777)))
- {
- marslog(LOG_EROR|LOG_PERR,"dbm_open:%s",buffer);
- return -1;
- }
-
- return 0;
-
-}
-
-
-static double parse(const char* p)
-{
- char *last;
- double n = strtod(p,&last);
- switch(*last)
- {
- case 0 :
- break;
-
- case 'k':
- case 'K':
- n *= 1024.0;
- break;
-
- case 'm':
- case 'M':
- n *= 1024.0 * 1014.0;
- break;
-
- case 'g':
- case 'G':
- n *= 1024.0 * 1024.0 * 1024.0;
- break;
-
- default:
- marslog(LOG_WARN,"Bad size suffix %c, only K, M and G are valid",*last);
- marslog(LOG_WARN,"Cache size is set to %sbytes",bytename(n));
- break;
- }
-
- return n;
-}
-
-static err dbmcache_open(void *data,request *r,request *e,int mode)
-{
- dbmdata *g = (dbmdata*)data;
-
- g->sem = -1;
-
- if(access(g->dir,X_OK|R_OK|W_OK) != 0)
- {
- mkdirp(g->dir,0777);
-
- if(access(g->dir,X_OK|R_OK|W_OK) != 0)
- {
- marslog(LOG_EROR|LOG_PERR,"Cannot access dbm directory %s", g->dir);
- return -1;
- }
- }
-
- if(mode == READ_MODE)
- {
- g->u = g->w = unwind_one_request(r);
- }
- else {
- g->high = parse(g->chigh);
- g->low = parse(g->clow );
- }
-
- return 0;
-
-}
-
-
-static err dbmcache_close(void *data)
-{
- dbmdata *g = (dbmdata*)data;
-
- if(g->f) fclose(g->f);
- free_all_requests(g->w);
- closeindex(g);
- return 0;
-}
-
-
-static boolean fetch_field(dbmdata *g,char* index)
-{
- datum idx,dat;
- idx.dsize = strlen(index)+1;
- idx.dptr = index;
- dat = dbm_fetch(g->dbm_fields,idx);
- if(dat.dptr == NULL) return false;
- memcpy(&g->field,dat.dptr,dat.dsize);
- return true;
-}
-
-static err store_field(dbmdata *g,char* index)
-{
- datum idx,dat;
- idx.dsize = strlen(index)+1;
- idx.dptr = index;
-
- dat.dsize = sizeof(field_entry);
- dat.dptr = (char*)&g->field;
-
- if((dbm_store(g->dbm_fields,idx,dat,DBM_REPLACE)) < 0)
- {
- marslog(LOG_EROR|LOG_PERR,"dbmstore");
- return -2;
- }
-
- return 0;
-}
-
-static boolean fetch_file(dbmdata *g,ino_t index)
-{
- datum idx,dat;
- idx.dsize = sizeof(index);
- idx.dptr = (char*)&index;
- dat = dbm_fetch(g->dbm_files,idx);
- if(dat.dptr == NULL) return false;
- memcpy(&g->file,dat.dptr,dat.dsize);
- return true;
-}
-
-static err store_file(dbmdata *g,ino_t index)
-{
- datum idx,dat;
- idx.dsize = sizeof(index);
- idx.dptr = (char*)&index;
-
- dat.dsize = sizeof(file_entry) - 1024 + strlen(g->file.fname) + 1;
- dat.dptr = (char*)&g->file;
-
- if(dbm_store(g->dbm_files,idx,dat,DBM_REPLACE) < 0)
- {
- marslog(LOG_EROR|LOG_PERR,"dbmstore");
- return -2;
- }
-
- return 0;
-}
-
-
-static void remove_fields(dbmdata *g,ino_t index)
-{
- datum idx,dat;
- boolean more;
- idx.dsize = sizeof(index);
- idx.dptr = (char*)&index;
-
- dbm_delete(g->dbm_files,idx);
-
- more = true;
-
- while(more)
- {
- more = false;
-
- for(idx = dbm_firstkey(g->dbm_fields);
- idx.dptr != NULL; idx = dbm_nextkey(g->dbm_fields))
- {
- field_entry f;
-
- dat = dbm_fetch(g->dbm_fields,idx);
- memcpy(&f,dat.dptr,dat.dsize);
- if(f.id == index) {
- dbm_delete(g->dbm_fields,idx);
- more = true;
- }
- }
- }
-}
-
-static err dbmcache_read(void *data,request *r,void *buffer,long *length)
-{
- dbmdata *g = (dbmdata*)data;
- char *iname;
- err e;
-
- /* last request */
-
- if(g->u == NULL) return EOF;
-
- if(openindex(g))
- return -1;
-
- /* build index name */
-
- iname = indexname(g->u);
-
- /* fetch the field */
-
- if(!fetch_field(g,iname))
- return EOF;
-
- /* open a file if not the same */
-
- if(g->id != g->field.id || g->f == NULL)
- {
- struct stat s;
-
- g->id = g->field.id;
-
- if(g->f) fclose(g->f);
- g->f = NULL;
-
- /* find file */
-
- if(fetch_file(g,g->id))
- {
- g->file.access = time(0);
- store_file(g,g->id);
- }
- else {
- /* something is wrong... */
- marslog(LOG_EROR,"Cannot find file %d",g->id);
- remove_fields(g,g->id);
- return -2;
- }
-
- if(stat(g->file.fname,&s)<0)
- {
- marslog(LOG_EROR|LOG_PERR,"stat: %s",g->file.fname);
- remove_fields(g,g->id);
- return -1;
- }
-
- if( g->id != s.st_ino )
- {
- marslog(LOG_EROR,"File have changed %d",g->id);
- remove_fields(g,g->id);
- return -2;
- }
-
- if((g->f = fopen(g->file.fname,"r")) == NULL)
- {
- if(errno == ENOENT) /* the file is lost or purged */
- {
- marslog(LOG_EROR,"Cannot find file %d",g->id);
- remove_fields(g,g->id);
- return EOF;
- }
- else
- {
- marslog(LOG_EROR|LOG_PERR,"dbm : open %s",g->file.fname);
- return -2;
- }
- }
- }
-
- fseek(g->f,g->field.offset,SEEK_SET);
- e = _readany(g->f,buffer,length);
-
- if(r && (e == 0))
- {
- grib_to_request(r,buffer,*length);
- set_value(r,"_ORIGINAL_FIELD","1");
- }
-
- g->u = g->u->next;
-
- closeindex(g);
-
- return e;
-}
-
-static err dbmcache_write(void *data,request *r,void *buffer,long *length)
-{
- dbmdata *g = (dbmdata*)data;
- long len;
- char *iname = indexname(r);
- const char *s = get_value(r,"_ORIGINAL_FIELD",0);
-
- if(s == NULL || atol(s) != 1)
- return EOF;
-
- if(openindex(g))
- return EOF;
-
- if(g->f == NULL)
- {
-
- /* Find a file name */
- struct stat s;
- char fname[1024];
-
- do {
- sprintf(fname,"%s/%s.%d.%d.%d", g->dir, iname, g->cnt++,time(0),getpid());
- mkdirp(dirname(fname),0777);
- }while(access(fname,F_OK) == 0);
-
- g->f = fopen(fname,"w");
- if(g->f == NULL)
- {
- marslog(LOG_EROR|LOG_PERR,"dbm : %s",fname);
- return -1;
- }
-
- /* get inode */
-
- if(stat(fname,&s)<0)
- {
- marslog(LOG_EROR|LOG_PERR,"stat: %s",fname);
- return -1;
- }
-
- g->id = s.st_ino;
-
- /* check that we don't have any thing with the same inode */
-
- if(fetch_file(g,g->id))
- {
- marslog(LOG_EROR,"Duplicate file id %d",g->id);
- remove_fields(g,g->id);
- }
-
- strcpy(g->file.fname,fname);
- g->file.created = g->file.access = time(0);
- g->file.length = 0;
- g->offset = 0;
-
- }
-
- len = *length;
-
- g->field.id = g->id;
- g->field.offset = g->offset;
- g->field.length = len;
-
- if((*length = fwrite(buffer,1,len,g->f)) != len)
- {
- marslog(LOG_EROR|LOG_PERR,"dbm : write error");
- return -1;
- }
-
- g->offset += len;
- g->file.length += len;
-
- if(store_field(g,iname) != 0)
- return -1;
-
- if(store_file(g,g->id) != 0)
- return -1;
-
- written++;
-
- return closeindex(g);
-}
-
-static boolean dbmcache_check(void *data, request *r)
-{
- return !observation(r);
-}
-
-static void dbmcache_admin(void *data)
-{
- dbmdata *g = (dbmdata*)data;
- struct stat s;
-
- datum idx,dat;
-
- boolean more = (written != 0);
- long max = g->high;
-
- while(more)
- {
- boolean found = false;
- time_t min = time(0);
- double total = 0;
- ino_t id;
- char fname[1024];
-
-
- more = false;
-
- if(openindex(g) != 0)
- return;
-
- for(idx = dbm_firstkey(g->dbm_files); idx.dptr != NULL;
- idx = dbm_nextkey(g->dbm_files))
- {
- file_entry f;
- ino_t i;
-
- dat = dbm_fetch(g->dbm_files,idx);
-
- memcpy(&f,dat.dptr,dat.dsize);
- memcpy(&i,idx.dptr,idx.dsize);
-
- if(stat(f.fname,&s)<0)
- {
- marslog(LOG_EROR|LOG_PERR,"stat: %s",f.fname);
- remove_fields(g,i);
- more = true;
- break;
- }
-
- if(s.st_atime < min)
- {
- min = s.st_atime;
- id = i;
- found = true;
- strcpy(fname,f.fname);
- }
-
- total += s.st_size;
- }
-
- marslog(LOG_INFO,"Cache size is %sbytes",bytename(total));
- marslog(LOG_INFO,"Cache high is %sbytes",bytename(g->high));
- marslog(LOG_INFO,"Cache low is %sbytes",bytename(g->low));
-
- if(total > max && found)
- {
- marslog(LOG_INFO,"Removing fields from: %s",fname);
- more = true;
- max = g->low;
- remove_fields(g,id);
- if(unlink(fname) < 0)
- marslog(LOG_EROR|LOG_PERR,"remove %s",fname);
- }
-
-
- closeindex(g);
- }
-
- written = 0;
-}
diff --git a/src/libMars/MARS/cacheserver.c b/src/libMars/MARS/cacheserver.c
deleted file mode 100755
index 7d3d6c6..0000000
--- a/src/libMars/MARS/cacheserver.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-#include "mars.h"
-#include "base.h"
-
-extern base_class *cachebase;
-
-typedef struct data {
- int port;
-} data;
-
-option opts[] = {
- {"port",NULL,"-port","7000",t_int,sizeof(int), OFFSET(data,port)},
-};
-
-
-
-int main(int argc,char *argv[])
-{
- data setup;
- marsinit(&argc,argv,&setup,NUMBER(opts),opts);
- server_run(setup.port,basetask,(void*)cachebase);
- marsexit(1);
-}
diff --git a/src/libMars/MARS/event.c b/src/libMars/MARS/event.c
deleted file mode 100644
index 1a71acf..0000000
--- a/src/libMars/MARS/event.c
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-/*
-
-B.Raoult
-ECMWF Oct-93
-
-*/
-#define Q
-
-#include <signal.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <setjmp.h>
-#include "mars.h"
-
-typedef struct data {
- int port;
- char *startup;
- char *exit;
- char *env;
- char *pipe;
-} data;
-
-static option opts[] = {
- {"startup",NULL,"-startup",NULL,
- t_str,sizeof(char*),OFFSET(data,startup),},
- {"exit",NULL,"-exit",NULL,
- t_str,sizeof(char*),OFFSET(data,exit),},
- {"port","EVENT_PORT","-port","0",
- t_int,sizeof(int),OFFSET(data,port)},
- {"environment",NULL,"-environment",NULL,
- t_str,sizeof(char*),OFFSET(data,env)},
- {"pipe",NULL,"-pipe",NULL,
- t_str,sizeof(char*),OFFSET(data,pipe)},
-};
-
-/* telnet service.socnections */
-
-#define MAX_SERVICES 100
-
-static jmp_buf env;
-
-typedef struct pending{
- struct pending *next;
- request *r;
- long ref;
- time_t when;
-} pending;
-
-typedef struct {
- pending *head;
- pending *tail;
-} plist;
-
-typedef void (*qproc)(plist *,pending *,int);
-
-typedef struct service {
- int soc;
- char *name;
- char *host;
- char *user;
- long pid;
- XDR x;
-
- long ref;
- boolean ready;
-
- time_t timeout;
- time_t lastcall;
- int outstanding;
-
- int want_message;
- int want_progress;
-
- int alive;
-
-} service;
-
-static data setup;
-
-static plist poutgoing = {
- NULL,NULL,};
-static plist pservices = {
- NULL,NULL,};
-static plist preplies = {
- NULL,NULL,};
-
-static service services[MAX_SERVICES];
-static fd_set files;
-static long ref = 0;
-static int soc = -1;
-static int pip = -1;
-static int monitor = -1;
-
-static void process_incoming(int n);
-static void broadcast_message(request *r);
-static err send_request(request *r,int n);
-static void sendr(plist *l,pending *p,int n);
-static void close_connection(int n);
-static void check_queue(void);
-static err notify_monitor(request *r,int n,char*);
-
-/*=======================================================*/
-/* Request handlers */
-/*=======================================================*/
-
-typedef err (*reqproc)(request*,int);
-typedef struct {
- char *name;
- reqproc proc;
-} dispatch;
-
-static err handle_reply (request *r,int n);
-static err handle_progress (request *r,int n);
-static err handle_exit (request *r,int n);
-static err handle_service (request *r,int n);
-static err handle_followup (request *r,int n);
-static err handle_message (request *r,int n);
-static err handle_register (request *r,int n);
-static err handle_getinfo (request *r,int n);
-static err handle_start (request *r,int n);
-static err handle_want (request *r,int n);
-static err handle_drop (request *r,int n);
-static err handle_timeout (request *r,int n);
-static err handle_alive (request *r,int n);
-static err handle_monitor (request *r,int n);
-
-static dispatch handlers[] = {
- {"EXIT", handle_exit, },
- {"REGISTER", handle_register, },
- {"FOLLOWUP", handle_followup, },
- {"SERVICE", handle_service, },
- {"MESSAGE", handle_message, },
- {"REPLY", handle_reply, },
- {"DROP", handle_drop, },
- {"PROGRESS", handle_progress, },
- {"GETINFO", handle_getinfo, },
- {"MONITOR", handle_monitor, },
- {"TIMEOUT", handle_timeout, },
- {"START", handle_start, },
- {"WANT", handle_want, },
- {"ALIVE", handle_alive, },
-};
-
-/*=======================================================*/
-/* New service in */
-/*=======================================================*/
-
-static void new_service(int soc)
-{
- struct sockaddr_in from;
- int snew,i;
- int fromlen;
-
- fromlen = sizeof(from);
- if((snew = accept(soc, &from, &fromlen))<0)
- {
- /* Interrupted system call : got on SIGCHLD signals */
- if(errno != EINTR) marslog(LOG_WARN|LOG_PERR,"accept");
- return;
- }
-
- marslog(LOG_INFO,"Got connection");
-
- if(from.sin_family == AF_INET)
- {
- char *net = inet_ntoa(from.sin_addr);
- struct hostent *remote;
-
- remote = gethostbyaddr(&from.sin_addr,
- sizeof(from.sin_addr),
- from.sin_family);
- if(remote)
- marslog(LOG_INFO,"incoming host is %s (%s)",
- remote->h_name,net);
- else
- marslog(LOG_INFO,"incoming address is %s",net);
-
- }
- else
- {
- marslog(LOG_INFO,"connection is not from internet");
- close(snew);
- return;
- }
-
- /* new service.socnection */
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].soc == -1)
- {
-
- if(fcntl(snew,F_SETFD,FD_CLOEXEC)<0)
- marslog(LOG_EROR|LOG_PERR,"fcntl");
-
- services[i].soc = snew;
- FD_SET(snew,&files);
- xdrrec_create(&services[i].x, 0,0,
- (void*)&services[i].soc,readtcp,writetcp);
- services[i].x.x_public = (void*)&services[i].soc;
- process_incoming(i);
- return;
- }
-
- marslog(LOG_EROR,"All services in use (max is %d)",NUMBER(services));
- close(snew);
- return;
-}
-
-/*=======================================================*/
-/* Close connection */
-/*=======================================================*/
-
-static void dequeue_request(plist *l,pending *p,int n)
-{
- pending *s = l->head;
- pending *q = NULL;
-
- while(s)
- {
- if(s == p)
- {
- free_all_requests(p->r);
- if(q) q->next = p->next;
- if(p == l->tail) l->tail = q;
- if(p == l->head) l->head = p->next;
- FREE(p);
- return;
- }
- q = s;
-
- s = s->next;
- }
-}
-
-static void queue_loop(plist *l,long ref,qproc cb,int n)
-{
- pending *p = l->head;
- while(p)
- {
- pending *q = p->next;
- if(ref == -1 || p->ref == ref) cb(l,p,n);
- p = q;
- }
-}
-
-static void noreply(plist *l,pending *p,int n)
-{
- char *x = get_value(p->r,"SOURCE_REF",0);
-
- if(x)
- {
- int i;
- int m = atol(get_value(p->r,"SOURCE_REF",0));
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref >=0 && services[i].ref == m)
- {
- request *r = empty_request("REPLY");
- reqcpy(r,p->r);
- set_value(r,"ERR_CODE","-42");
- set_value(r,"ERROR",
- "Service %s died before completing the request",
- services[n].name);
- notify_monitor(r,n,"REPLY");
- send_request(r,i);
- free_all_requests(r);
- }
-
- }
-}
-
-
-static void terminate_service(int n,char *msg)
-{
- request *r = empty_request("EXIT");
- set_value(r,"MESSAGE","%s",msg);
- send_request(r,n);
- free_all_requests(r);
- check_queue();
- close_connection(n);
-}
-
-static void close_connection(int n)
-{
-
- if(n == monitor) monitor = -1;
-
- marslog(LOG_INFO,"Closing wire %d: service %s",n,services[n].name);
- marslog(LOG_INFO,"%d outstanding replies",services[n].outstanding);
-
- queue_loop(&preplies, services[n].ref,noreply,n);
- queue_loop(&preplies, services[n].ref,dequeue_request,n);
-
- notify_monitor(NULL,n,"EXIT");
-
-#if 0
- don't dequeue outstating services (macro may die before getting the result)
- queue_loop(&pservices,services[n].ref,dequeue_request,n);
-#endif
-
- if(services[n].ref >= 0)
- {
- request *r = empty_request("DEATH");
- services[n].ref = -1;
- set_value(r,"NAME","%s",services[n].name);
- set_value(r,"USER","%s",services[n].user);
- set_value(r,"HOST","%s",services[n].host);
- set_value(r,"PID","%d",services[n].pid);
- broadcast_message(r);
- free_all_requests(r);
- }
-
-
- if(setup.exit && (setup.exit == services[n].name))
- {
-#if 0
- int i;
- for(i=0;i<NUMBER(services);i++)
- if(i != n && services[i].ref >= 0)
- terminate_service(i,"Closing all lines");
-#endif
-
- marslog(LOG_EXIT,"%s exited, closing all lines",setup.exit);
- }
-
- xdr_destroy(&services[n].x);
- strfree(services[n].name);
- strfree(services[n].host);
- strfree(services[n].user);
- FD_CLR(services[n].soc,&files);
- close(services[n].soc);
-
- memset((void*)&services[n],0,sizeof(services[n]));
-
- services[n].ref = services[n].soc = -1;
-
-}
-
-static err handle_exit(request *r,int n)
-{
- close_connection(n);
- return 0;
-}
-
-static void queue_request(plist *l,request *r,int n)
-{
- pending *p = NEW_CLEAR(pending);
- p->when = time(0);
-
- if(l->head)
- l->tail->next = p;
- else
- l->head = p;
-
- l->tail = p;
- p->r = clone_all_requests(r);
- p->ref = services[n].ref;
-}
-
-
-static void newsvc(plist *l,pending *p,int n)
-{
- char *target = get_value(p->r,"TARGET",0);
- boolean ok = false;
- int i;
-
- for(i=0;i<NUMBER(services);i++)
- if((target == NULL) || (services[i].name == target))
- {
- handle_service(p->r,i);
- ok = true;
- }
- if(ok) dequeue_request(l,p,n);
-
-
-}
-
-static void check_queue(void)
-{
- queue_loop(&pservices,-1,newsvc,0);
- queue_loop(&poutgoing,-1,sendr,0);
-}
-
-static void check_timeout(void)
-{
- int i;
- int alive = 0;
-
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref >=0)
- {
-
- alive += services[i].alive;
- if(services[i].timeout >0 )
- {
- if(services[i].outstanding == 0 && services[i].alive == 0)
- if(time(NULL) - services[i].lastcall > services[i].timeout)
- {
- marslog(LOG_INFO,"Service %s has timed out",
- services[i].name);
- terminate_service(i,"Service has timed out");
- return;
- }
- }
- }
-
- if(setup.exit) return;
-
- if(alive == 0)
-#if 0
- alarm(10); /* Wait 10 sec */
-#else
- {
- if(preplies.head == NULL && poutgoing.head == NULL)
- marslog(LOG_EXIT,"No more modules");
-
- {
- pending *p = preplies.head;
- int n = 0;
- while(p) { n++; print_all_requests(p->r); p = p->next;}
- marslog(LOG_INFO,"Outstanding replies %d",n);
-
- p = poutgoing.head;
- n = 0;
- while(p) { n++; print_all_requests(p->r); p = p->next; }
- marslog(LOG_INFO,"Outstanding requests %d",n);
- }
- }
-#endif
-}
-
-static err start_service(char *name)
-{
- request *r = mars.setup;
- int i;
-
- pending *p = pservices.head;
-
- /* Check if it was not started earlier */
-
- while(p)
- {
- char *target = get_value(p->r,"TARGET",0);
- if(EQ(name,target))
- {
- if(time(0) - p->when < 10) /* 10 sec... */
- return 0;
- }
- p=p->next;
- }
-
- while(r)
- {
- if(EQ(r->name,"service"))
- {
- char *nme = get_value(r,"name",0);
- char *cmd = get_value(r,"cmd",0);
- if(nme && cmd && (name == nme))
- {
- char buf[1024];
- marslog(LOG_INFO,"Starting service: %s",nme);
- marslog(LOG_INFO,"With command : %s",cmd);
- sprintf(buf,"%s 2>&1 </dev/null &",no_quotes(cmd));
- return system(buf);
-
- }
- }
- r = r->next;
- }
- marslog(LOG_EROR,"Cannot find service %s",name);
- return -1;
-}
-
-/*================================================================*/
-/*================================================================*/
-
-static void catch_alarm(int sig)
-{
- marslog(LOG_WARN,"Too many requests : alarm");
- longjmp(env,1);
-}
-
-static void sendr(plist *l,pending *p,int n)
-{
- int i,m=-1;
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref == p->ref) { m = i; break;}
- if(m>=0)
- {
- struct timeval timeout = {
- 0, 10 };
- fd_set fds;
-
- FD_ZERO(&fds);
- FD_SET(services[m].soc,&fds);
-
- if(setjmp(env)==0)
- {
- signal(SIGALRM,catch_alarm);
- alarm(20);
-
- switch(select(FD_SETSIZE,NULL,&fds,NULL,&timeout))
- {
- case 0:
-/* this can be if the module does not listen, especialy messages */
- marslog(LOG_EROR,"Timeout sending to %s",services[m].name);
- print_all_requests(p->r);
- break;
-
- case -1:
- marslog(LOG_EROR|LOG_PERR,"Error sending to %s",services[m].name);
- print_all_requests(p->r);
- break;
-
- default:
-
- services[m].ready = true;
-
- /* marslog(LOG_INFO,"Sending-> %s",services[m].name); */
- /* print_all_requests(p->r); */
-
- encode_request(p->r,&services[m].x);
- dequeue_request(l,p,n);
- break;
- }
- alarm(0);
- }
- }
- else dequeue_request(l,p,n);
-}
-
-static err send_request(request *r,int n)
-{
- /* check if the module is interested ... */
-
- if(r && r->name)
- {
-
- if(EQ(r->name,"MESSAGE") && (services[n].want_message == 0))
- return 0;
-
- if(EQ(r->name,"PROGRESS") && (services[n].want_progress == 0))
- return 0;
-
- }
-
- queue_request(&poutgoing,r,n);
- return 0;
-}
-
-static err handle_reply(request *r,int n)
-{
- char *x = get_value(r,"SOURCE_REF",0);
- int i,ref = -1;
-
-
- notify_monitor(r,n,"REPLY");
- services[n].outstanding--;
-
- if(services[n].outstanding <= 0)
- services[n].lastcall = time(NULL);
-
- if(x) {
-
- ref = atol(x);
- queue_loop(&preplies,services[n].ref,dequeue_request,0);
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref == ref)
- return send_request(r,i);
- }
-
- /* Cannot send reply when sender exited */
- /* marslog(LOG_EROR,"Cannot send reply, invalid ref %d",ref); */
- return -1;
-}
-
-static err handle_timeout(request *r,int n)
-{
- char *t = get_value(r,"TIMEOUT",0);
- if(!t) return 0;
- services[n].timeout = atol(t) * 60;
- marslog(LOG_INFO,"Timeout for %s : %d seconds",
- services[n].name,services[n].timeout);
-}
-
-static err handle_alive(request *r,int n)
-{
- char *t = get_value(r,"ALIVE",0);
- if(!t) return 0;
- services[n].alive = atol(t);
- marslog(LOG_INFO,"Alive value for %s : %s ",
- services[n].name,services[n].alive?"on":"off");
-}
-
-static err notify_monitor(request *r,int n,char *mode)
-{
- static request *u = NULL;
- if(!u) u = empty_request("PROGRESS");
-
- if(monitor != -1)
- {
- u->next = r;
- set_value(u,"NAME","%s", services[n].name);
- set_value(u,"REF", "%ld",services[n].ref);
- set_value(u,"MODE","%s",mode);
- send_request(u,monitor);
- }
-}
-
-static void tomonitor(plist *l,pending *p,int n)
-{
- int i;
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref == p->ref)
- notify_monitor(p->r,i,n?"WAIT":"SERVICE");
-}
-
-static err handle_monitor(request *r,int n)
-{
- int i;
-
- monitor = n;
- marslog(LOG_INFO,"%s is a monitor",services[n].name);
-
- r = empty_request("REGISTER");
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref >= 0)
- {
- set_value(r,"NAME", "%s",services[i].name);
- set_value(r,"HOST", "%s",services[i].host);
- set_value(r,"USER", "%s",services[i].user);
- set_value(r,"PID", "%ld",services[i].pid);
- set_value(r,"REF", "%ld",services[i].ref);
- set_value(r,"TIMEOUT", "%ld",services[i].timeout);
- set_value(r,"LASTCALL", "%ld",services[i].lastcall);
- set_value(r,"OUTSTANDING", "%d",services[i].outstanding);
- set_value(r,"MESSAGE", "%d",services[i].want_message);
- set_value(r,"PROGRESS", "%d",services[i].want_progress);
- set_value(r,"ALIVE", "%d",services[i].alive);
-
- notify_monitor(r,i,"REGISTER");
- }
-
-
- free_all_requests(r);
-
- queue_loop(&preplies,-1,tomonitor,0);
- queue_loop(&pservices,-1,tomonitor,1);
-
- /* s = queue_stat("OUTGOING",poutgoing.head,s); */
- /* s = queue_stat("SERVICES",pservices.head,s); */
- /* s = queue_stat("REPLIES",preplies.head,s); */
-
-}
-
-
-static err handle_want(request *r,int n)
-{
- char *kind = get_value(r,"TYPE",0);
-
- if(!kind) return 0;
-
- if (EQ(kind,"MESSAGE") ) services[n].want_message++;
- if (EQ(kind,"PROGRESS") ) services[n].want_progress++;
-
-}
-
-
-static err handle_progress(request *r,int n)
-{
- char *x = get_value(r,"SOURCE_REF",0);
- int i,ref = -1;
-
- if(x) {
-
- ref = atol(x);
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref == ref)
- {
- notify_monitor(r,n,"PROGRESS");
- return send_request(r,i);
- }
- }
-
- marslog(LOG_EROR,"Cannot send progress, invalid ref %d",ref);
- return -1;
-}
-
-/*================================================================*/
-/*================================================================*/
-
-static err broadcast(request *r)
-{
- int i;
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref >= 0)
- send_request(r,i);
-}
-
-static err handle_service (request *r,int n)
-{
- char *target = get_value(r,"TARGET",0);
- int i;
- boolean ok = false;
- static int cnt = 0;
-
- /* add info in request */
-
- if(get_value(r,"SOURCE",0) == NULL)
- {
- set_value(r,"REQ_ID", "%d",cnt++);
- set_value(r,"SOURCE", "%s",services[n].name);
- set_value(r,"SOURCE_REF","%d",services[n].ref);
- }
-
- if(target == NULL) {
- /* broadcasting does not work ... */
- /* broadcast(r); */
- ok = true;
- }
- else /* check if target in list */
- for(i=0;i<NUMBER(services);i++)
- if(services[i].name == target)
- {
- notify_monitor(r,i,"SERVICE");
- queue_request(&preplies,r,i);
- send_request(r,i); /* send service */
- services[i].outstanding++;
- ok = true;
- }
-
- if(ok)
- return 0;
-
- /* was no in the list */
-
- marslog(LOG_INFO,"Target is not running : %s",target);
-
- if(!start_service(target))
- ;
- /* marslog(LOG_EROR|LOG_PERR,"Failed to start : %s",target); */
-
- notify_monitor(r,i,"WAIT");
- queue_request(&pservices,r,n);
- return 0;
-}
-
-static err handle_drop (request *r,int n)
-{
- char *target = get_value(r,"TARGET",0);
- int i;
-
- if(get_value(r,"SOURCE",0) == NULL)
- {
- set_value(r,"SOURCE", "%s",services[n].name);
- set_value(r,"SOURCE_REF","%d",services[n].ref);
- }
-
- if(target == NULL)
- {
- marslog(LOG_WARN,"No target given in drop");
- return 0;
- }
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].name == target)
- {
- send_request(r,i); /* send service */
- return;
- }
- marslog(LOG_INFO,"Target is not running : %s, cannot drop",target);
- return 0;
-}
-
-/*================================================================*/
-/*================================================================*/
-
-static err handle_message(request *r,int n)
-{
- if(get_value(r,"SOURCE",0) == NULL)
- {
- set_value(r,"SOURCE", "%s",services[n].name);
- set_value(r,"SOURCE_REF","%d",services[n].ref);
- }
- broadcast(r);
-}
-
-static err handle_getinfo(request *r,int n)
-{
- static request *u = NULL;
-
- if(u == NULL) u = empty_request("REPLY");
- u->next = mars.setup;
- send_request(u,n);
-}
-
-static request *queue_stat(char *name,pending *p,request *s)
-{
- while(p)
- {
- request *r = empty_request(name);
- set_value(r,"REF","%ld",p->ref);
- set_value(r,"WHEN","%ld",p->when);
- set_subrequest(r,"REQUEST",p->r);
- s->next = r;
- s = r;
- p = p->next;
- }
- return s;
-}
-
-static err handle_start(request *r,int n)
-{
- char *name = get_value(r,"NAME",0);
- char *cmd = get_value(r,"CMD",0);
- if(cmd)
- {
- char buf[1024];
- marslog(LOG_INFO,"Starting command: %s",cmd);
- sprintf(buf,"%s 2>&1 < /dev/null&",no_quotes(cmd));
- system(buf);
- }
- else
- start_service(get_value(r,"NAME",0));
- send_request(NULL,n);
-}
-
-static err handle_stop(request *r,int n)
-{
- /* stop_service(get_value(r,"NAME",0)); */
- send_request(NULL,n);
-}
-
-static void broadcast_message(request *r)
-{
- static request *u = NULL;
- if(u == NULL) u = empty_request("MESSAGE");
- u->next = r;
- broadcast(u);
-}
-
-
-/* Reparent replies after forks */
-
-static err handle_followup(request *r,int n)
-{
- pending *p = preplies.head;
- char *s = get_value(r,"REQ_ID",0);
-
- if(s == NULL)
- {
- marslog(LOG_INFO,"Follow up : no id ");
- return -1;
- }
-
- while(p)
- {
- pending *q = p->next;
-
- if(s == get_value(p->r,"REQ_ID",0))
- {
- int i;
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref == p->ref)
- {
- services[i].outstanding--;
- break;
- }
-
- p->ref = services[n].ref;
- services[n].outstanding++;
-
- notify_monitor(p->r,n,"FOLLOWUP");
- break;
- }
-
- p = p->next;
- }
-
- return 0;
-}
-
-
-static err handle_register(request *r,int n)
-{
- char *name = get_value(r,"NAME",0);
- int i;
- request *u;
- char *p;
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].name == name)
- {
- marslog(LOG_WARN,"Service %s is already registered",name);
- terminate_service(n,"Service already registered");
- return -1;
- }
-
- services[n].ref = ref++;
- services[n].name = strcache(get_value(r,"NAME",0));
- services[n].user = strcache(get_value(r,"USER",0));
- services[n].host = strcache(get_value(r,"HOST",0));
- services[n].pid = atol(get_value(r,"PID",0));
- services[n].lastcall = time(NULL);
-
- marslog(LOG_INFO,"Register: %s %s %s %d as line %d ref %d",services[n].name,
- services[n].user,
- services[n].host,
- services[n].pid,n,ref-1);
-
- u = empty_request("BIRTH");
- reqcpy(u,r);
- broadcast_message(u);
- free_all_requests(u);
-
-
- /* Check for options */
-
- u = mars.setup;
- while(u)
- {
- if(EQ(u->name,"service"))
- {
- char *nme = get_value(u,"name",0);
- if(nme && (name == nme))
- {
- char *alive = get_value(u,"alive",0);
- char *timeout = get_value(u,"timeout",0);
-
- if(timeout) services[n].timeout = atol(timeout)*60;
- if(alive) services[n].alive = atol(alive);
-
- marslog(LOG_INFO,"%s : Timeout = %d Alive = %d",
- name,
- services[n].timeout,services[n].alive);
-
- }
- }
- u = u->next;
- }
-
- notify_monitor(r,n,"REGISTER");
-
- return 0;
-}
-
-/*================================================================*/
-/*================================================================*/
-
-static void process_outgoing(int n)
-{
-}
-
-static void process_incoming(int n)
-{
- request *r = NULL;
- int i;
-
- do{
- r = decode_request(&services[n].x);
-
- if(r == (void*)-1) /* connection is lost */
- {
- close_connection(n);
- return;
- }
-
-/*
- if(services[n].name)
- marslog(LOG_INFO,"Frome wire %d (%s)",services[n].ref,services[n].name);
- print_all_requests(r);
-*/
-
- services[n].lastcall = time(NULL);
-
- for(i=0;i<NUMBER(handlers);i++)
- if(EQ(handlers[i].name,r->name))
- handlers[i].proc(r,n);
-
-
- free_all_requests(r);
- } while(services[n].ref >=0 && !xdrrec_eof(&services[n].x));
-}
-
-
-/*================================================================*/
-
-
-static void open_pipe()
-{
- pip = open(setup.pipe,O_RDONLY);
- if(pip == -1)
- marslog(LOG_EROR|LOG_PERR,"Cannot open %s",setup.pipe);
- else
- FD_SET(pip,&files);
-}
-
-static void pipe_input()
-{
- static char line[1024];
- static int pos = 0;
- char c;
-
- if (read(pip,&c,1) != 1)
- {
- FD_CLR(pip,&files);
- close(pip);
- pip = -1;
- open_pipe();
- return;
- }
-
- if(c=='\n')
- {
- line[pos++] = 0;
- pos = 0;
- marslog(LOG_INFO,"Get command from pipe");
- marslog(LOG_INFO,"%s",line);
- }
- else if(pos < sizeof(line)-1)
- line[pos++] = c;
- else
- marslog(LOG_EROR,"pipe command too long");
-
-}
-
-/*================================================================*/
-
-static void startup()
-{
- char buf[1024];
- char host[1024];
-
- gethostname(host,sizeof(host));
-
- sprintf(buf,"EVENT_HOST=%s",host);
- putenv(strdup(buf));
- sprintf(buf,"EVENT_PORT=%d",setup.port);
- putenv(strdup(buf));
-
- if(setup.startup)
- {
- sprintf(buf,"%s 2>&1 < /dev/null&",setup.startup);
- system(buf);
- }
-}
-
-void panic(int code,void *dummy)
-{
- if(setup.env) unlink(setup.env);
-}
-
-void main(int argc,char **argv)
-{
- struct sockaddr_in sin;
- int i,len=sizeof(sin);
- fd_set fds;
- struct timeval smalltime = { 0, 100, };
- struct timeval bigtime = { 60, 0, };
-
- marsinit(&argc,argv,&setup,NUMBER(opts),opts);
- install_exit_proc(panic,NULL);
-
-
- for(i=0;i<NUMBER(services);i++)
- services[i].ref = services[i].soc = -1;
-
- /* Start real server */
-
- if((soc = new_server(setup.port,&sin))<0)
- marslog(LOG_EXIT,"Exiting server");
-
- getsockname(soc,(char*)&sin,&len);
- setup.port = ntohs(sin.sin_port);
- marslog(LOG_INFO,"Starting server: port is %d",setup.port);
-#ifndef sun
- marslog(LOG_INFO,"Env=%s, Exit=%s, Startup=%s",setup.env,
- setup.exit,setup.startup);
-#endif
-
- if(setup.pipe) open_pipe();
- if(setup.env)
- {
- FILE *f = fopen(setup.env,"w");
- if(f == NULL)
- marslog(LOG_EXIT|LOG_PERR,"Cannot open %s",setup.env);
- fprintf(f,"EVENT_PORT=%d\n",setup.port);
- fprintf(f,";TMPDIR=%s\n",getenv("TMPDIR"));
- fclose(f);
- }
-
- if(fcntl(soc,F_SETFD,FD_CLOEXEC)<0)
- marslog(LOG_EROR|LOG_PERR,"fcntl");
-
- FD_ZERO(&files);
- FD_SET(soc,&files);
-
- if(pip != -1)
- FD_SET(pip,&files);
-
- startup();
-
- for(;;)
- {
- struct timeval *delay = &bigtime;
-
- if(poutgoing.head != NULL)
- delay = &smalltime;
-
- fds = files;
- switch(select(FD_SETSIZE,&fds,NULL,NULL,delay) )
- {
-
- case -1:
- if(errno != EINTR)
- /* Interrupted system call : got on SIGCHLD signals */
- marslog(LOG_EXIT|LOG_PERR,"select");
- break;
-
- case 0: /* time out */
- check_timeout();
- break;
-
- default:
- if(FD_ISSET(soc,&fds)) /* new service */
- new_service(soc);
- else if(pip != -1 && FD_ISSET(pip,&fds))
- pipe_input();
- else
- {
- int flg = 0;
- alarm(0);
- /* Existing connection talking ... */
-
- for(i=0;i<NUMBER(services);i++)
- if(services[i].ref >= 0)
- if(FD_ISSET(services[i].soc,&fds))
- {
- process_incoming(i);
- flg++;
- }
-
- if(flg == 0)
- {
- /* This is bad, we should not be here */
- FD_ZERO(&files);
- FD_SET(soc,&files);
- if(pip != -1)
- FD_SET(pip,&files);
-
- for(i=0;i<NUMBER(services);i++)
- {
- if(services[i].ref < 0 && services[i].soc >=0)
- {
- marslog(LOG_EROR,"There is a bug in event invalif reference");
- close(services[i].soc);
- }
- if(services[i].ref >= 0 && services[i].soc < 0)
- {
- marslog(LOG_EROR,"There is a bug in event: invalid socket");
- services[i].ref = -1;
- }
- if(services[i].ref >= 0 && services[i].soc >=0)
- FD_SET(services[i].soc,&files);
- }
- }
- }
- break;
- }
-
- /* check if some new services are now alive */
- /* marslog(LOG_INFO,"Check queues"); */
-
- check_queue();
-
- /* check_timeout(); */
-
- /* marslog(LOG_INFO,"Check done"); */
- /* if(poutgoing.head) print_all_requests(poutgoing.head->r); */
- }
-}
diff --git a/src/libMars/MARS/llmatrix.c b/src/libMars/MARS/llmatrix.c
deleted file mode 100644
index 761b908..0000000
--- a/src/libMars/MARS/llmatrix.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-#include <math.h>
-#include <limits.h>
-#include "mars.h"
-
-/*
- LLMATRIX
- AREA
- GRID
- NORTH
- WEST
- EAST
- SOUTH
- NLAT
- NLON
- DATA
-*/
-
-
-err llmatrix_to_grib(const char *in,const char *out)
-{
- fortint ksec0[ISECTION_0];
- gribsec1 ksec1;
- gribsec2_ll ksec2;
- fortint ksec3[ISECTION_3];
- fortint ksec4[ISECTION_4];
-
- fortfloat psec2[RSECTION_2];
- fortfloat psec3[RSECTION_3];
- fortfloat missing = FLT_MAX;
-
-
- err e = 0;
- int miss = 0;
- fortint nlat,nlon,nbits;
- fortfloat north,west,south,east,ew,ns;
- char *buffer =NULL;
- fortint buflen;
- fortfloat *psec4 =NULL;
- fortint i,npoints;
- int n = 0;
- char line[1024];
- char *tmp = marstmp();
- FILE *f,*g;
- request *r;
- const char *p;
-
- CLEAR(ksec0);
- CLEAR(ksec1);
- CLEAR(ksec2);
- CLEAR(ksec3);
- CLEAR(ksec4);
- CLEAR(psec2);
- CLEAR(psec3);
-
- f = fopen(in,"r");
- if(!f)
- {
- marslog(LOG_EROR|LOG_PERR,"Cannot open %s",in);
- return -1;
- }
-
- g = fopen(tmp,"w");
- if(!g)
- {
- marslog(LOG_EROR|LOG_PERR,"Cannot open %s",tmp);
- fclose(f);
- return -1;
- }
-
-
- while(fgets(line,sizeof(line),f))
- {
- if(*line != '#')
- {
- int l = strlen(line)-1;
-
- while(l >= 0 && (
- line[l] == ' ' ||
- line[l] == '\n' ||
- line[l] == ',' ||
- line[l] == '\t')
- )
- line[l--] = 0;
-
-
- if(n == 0) {
- /* Look for a = */
- char *p = line;
- int flg = 0;
- while(*p) if(*p++ == '=') flg++;
- /* If a =, add a verb */
- if(flg) {
- fprintf(g,"LLMATRIX");
- fprintf(g,",%s",line);
- }
- else fprintf(g,"%s",line);
- }
- else fprintf(g,",%s",line);
- n++;
- }
- if(strncmp(line,"#DATA",5)==0)
- break;
- }
-
- fclose(g);
-
- r = read_request_file(tmp);
- unlink(tmp);
- print_all_requests(r);
-
- north = atof((p=get_value(r,"NORTH",0))?p:"0");
- west = atof((p=get_value(r,"WEST", 0))?p:"0");
- ew = atof((p=get_value(r,"GRID", 0))?p:"0");
- ns = atof((p=get_value(r,"GRID", 1))?p:"0");
- nlat = atol((p=get_value(r,"NLAT", 0))?p:"0");
- nlon = atol((p=get_value(r,"NLON", 0))?p:"0");
- missing = (p=get_value(r,"MISSING", 0))?atof(p):missing;
-
- if(ew == 0 || ns == 0 || nlat == 0 || nlon == 0)
- {
- marslog(LOG_EROR,"Invalid ll-matrix");
- fclose(f);
- return -1;
- }
-
- npoints = nlat * nlon;
-
- south = north - (nlat-1) * ns;
- east = west + (nlon-1) * ew;
-
- /* ============================================================ */
-
- psec4 = NEW_ARRAY(fortfloat,npoints);
-
- n = 0;
- for(i=0;i<npoints;i++)
- {
-#ifndef R64
- if(fscanf(f,"%f",&psec4[i])>0)
-#else
- if(fscanf(f,"%lf",&psec4[i])>0)
-#endif
- {
- n++;
- if(psec4[i] == missing)
- miss++;
- }
- }
- fclose(f);
-
- if(n != npoints)
- {
- marslog(LOG_EROR,"File %s, read %d values out of %d expected",
- in,n,npoints);
- e = -1;
- goto error;
- }
-
- /* 1 k header + 32 bit packing */
-
- buflen = (npoints + 1024)*4;
- buffer = (char*)MALLOC(buflen);
-
- /* ============================================================ */
-
- ksec1.version = 128;
- ksec1.center = 98;
- ksec1.generation = mars.computeflg;
- ksec1.grid_definition = 255;
- ksec1.flags = miss?192:128;
-
-
- ksec1.parameter = 255;
- ksec1.level_type = GRIB_SURFACE;
-
- ksec1.year = 94;
- ksec1.month = 1;
- ksec1.day = 1;
- ksec1.century = 20;
-
-
- ksec1.time_unit = 1;
- ksec1.local_use = 1;
- ksec1.local.ecmwf_local_id = GRIB_ENSEMBLE_FORECAST;
- ksec1.local.mars_class = GRIB_CLASS_OD;
- ksec1.local.mars_type = 3; /* IA */
- ksec1.local.mars_stream = 1025; /* DA */
- ksec1.local.mars_expver = 0x30303031; /* 01 */
-
- ksec2.data_rep = GRIB_LAT_LONG;
- ksec2.points_parallel = nlon;
- ksec2.points_meridian = nlat;
-
- ksec2.limit_north = (fortint)(north * GRIB_FACTOR);
- ksec2.limit_west = (fortint)(west * GRIB_FACTOR);
- ksec2.resolution = 128;
- ksec2.limit_south = (fortint)(south * GRIB_FACTOR);
- ksec2.limit_east = (fortint)(east * GRIB_FACTOR);
- ksec2.grid_ew = (fortint)(ew * GRIB_FACTOR);
- ksec2.grid_ns = (fortint)(ns * GRIB_FACTOR);
-
-
- /* Missing value */
-
- ksec3[0] = 0;
- ksec3[1] = INT_MAX;
- psec3[1] = missing;
-
- /* Data */
-
- ksec4[0] = npoints;
- ksec4[1] = nbits = best_packing(ksec4[1]);
-
- printf("nbits = %d\n",nbits);
- printf("missing = %g\n",missing);
-
- if(cgribex( ksec0,(fortint*)&ksec1, (fortint*)&ksec2,psec2,
- ksec3,psec3, ksec4,psec4,
- npoints, buffer, &buflen, "C") != 0)
- {
- marslog(LOG_EROR,"Error encoding GRIB");
- e = -1;
- goto error;
- }
-
-/*
- psec3[1] = 9999;
- e = cgribex( ksec0,(fortint*)&ksec1, (fortint*)&ksec2,psec2,
- ksec3,psec3, ksec4,psec4,
- npoints, buffer, &buflen, "D");
- printf("decode %d\n",e);
-*/
-
- f = fopen(out,"w");
- if(!f)
- {
- marslog(LOG_EROR|LOG_PERR,"Cannot open %s",out);
- e = -1;
- goto error;
- }
-
- if(fwrite(buffer,1,buflen,f) != buflen)
- {
- marslog(LOG_EROR|LOG_PERR,"fwrite(%s) failed",out);
- e = -1;
- }
-
- if(fclose(f))
- {
- marslog(LOG_EROR|LOG_PERR,"fclose(%s) failed",out);
- e = -1;
- }
-
-error:
- FREE(psec4);
- FREE(buffer);
- return e;
-}
-
-
-err grib_to_llmatrix(const char *g,const char *m)
-{
- return -1;
-}
diff --git a/src/libMars/MARS/marssvc.c b/src/libMars/MARS/marssvc.c
deleted file mode 100644
index fc633f3..0000000
--- a/src/libMars/MARS/marssvc.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-/*
-
-B.Raoult
-ECMWF Oct-93
-
-*/
-
-#include "mars.h"
-#include <time.h>
-
-
-svcid *curid = NULL;
-svc *s;
-request *doit(char *service,request *r,err *e);
-
-typedef struct info {
- char *field;
- char *from;
-}info ;
-
-
-static request *getdef(char *name,char *serv)
-{
- err e;
- static request *u = NULL;
- if(u == NULL) u = empty_request("RESOLVE");
- set_value(u,"NAME",name);
- return wait_service(s,serv,u,&e);
-}
-
-
-void putmsg(int code,char *msg)
-{
- if(code != LOG_INFO)
- set_svc_msg(curid,msg);
- else
- send_progress(curid,msg,NULL);
- printf("%s\n", msg);
-}
-
-
-static void send_status(char *class,char *name,char *state)
-{
- static request *r = NULL;
-
- if(r == NULL) r = empty_request("STATUS");
-
- if(class) set_value(r,"ICON_CLASS","%s",class);
- set_value(r,"NAME","%s",name);
- set_value(r,"STATUS","%s",state);
- send_message(s,r);
-
-}
-
-static variable *fullpath_to_variable(char *name,void* data)
-{
- info *p = (info*)data;
- char *path = strcache(makepath(dirname(p->field),name));
- variable *v = find_field(path);
- request *r;
-
- printf("%s - %s\n",name,path);
-
- if(v) {
- strfree(path);
- return v;
- };
-
-
- r = pool_fetch(s,path);
- if(r == NULL) r = getdef(path,p->from);
-
- if(r != NULL)
- {
- int e = 0;
- set_value(r,"_NAME","%s",path);
- free_all_requests(doit(p->from,r,&e));
- }
-
- free_all_requests(r);
-
- pool_link(s,p->field,path);
- v = find_field(path);
- strfree(path);
- return v;
-}
-
-#if 0
-static void check_dependant(variable *v,char *name,math *c)
-{
- if(c)
- {
- check_dependant(v,name,c->left);
- check_dependant(v,name,c->right);
- if(c->name && c->arity <= 0 && !is_number(c->name))
- {
- char *p = makepath(dirname(v->name),c->name);
- if(strcmp(name,p)==0)
- send_status("COMPUTE",v->name,"MODIFIED");
- }
- }
-}
-
-
-static void chk_fields(char *dir,char *service,math *c)
-{
- if(c)
- {
- chk_fields(dir,service,c->left);
- chk_fields(dir,service,c->right);
- if(c->name && c->arity <= 0 && !is_number(c->name))
- {
- char *p = (*dir == '/') ? makepath(dir,c->name) : c->name;
- if(find_field(p)==NULL)
- {
- request *r = empty_request("DEFINITION");
- marslog(LOG_INFO,"Compute need to resolve %s (%s)",c->name,p);
- set_value(r,"NAME","%s",p);
- call_service(s,service,r,(long)strcache(p));
- free_all_requests(r);
- }
- }
-
- }
-}
-
-#endif
-
-char *uniquename()
-{
- static char buf[80];
- static int n = 0;
- sprintf(buf,"mars/%d/%d",getpid(),n++);
- return buf;
-}
-
-request *doit(char *service,request *r,err *e)
-{
- info env;
- char *name = get_value(r,"_NAME",0);
- char *class = r->name;
- request *f = NULL, *l = NULL;
-
-
- *e = 0;
-
- reset_language(mars_language());
- expand_flags(EXPAND_MARS);
-
- while(r && (*e == 0))
- {
- request *n = r->next;
- request *p;
- request *z;
- request *y;
-
- r->next = NULL;
-
- if(name == NULL)
- name = get_value(r,"FIELDSET",0);
- if(name == NULL)
- name = uniquename();
-
- set_value(r,"FIELDSET","%s",name);
-
- send_status(r->name,name,"BUSY");
-
- printf(">>>====================\n");
- print_all_requests(r);
- y = trim_all_requests(mars_language(),r);
- z = expand_all_requests(mars_language(),mars_rules(),y);
- printf("====================<<<\n");
- print_all_requests(z);
-
- env.field = name;
- env.from = service;
-
- if(z && ((*e = handle_request(z,(void*)&env)) == 0))
- {
- char *name;
- variable *v;
- int i;
- char *s;
-
- if((name = get_value(z,"FIELDSET",0)) &&
- (v = find_field(name)))
- if(observation(z)) {
- p = empty_request("BUFR");
- set_value(p,"PATH","%s",v->file);
- set_value(p,"TEMPORARY","%d",v->temp);
- }
- else if(image(z)) {
- p = empty_request("IMAGE");
- set_value(p,"PATH","%s",v->file);
- set_value(p,"TEMPORARY","%d",v->temp);
-
- }
- else if(v->gribs) {
- p = variable_to_data(v);
- if(s = get_value(z,"FORMULA",0))
- set_value(p,"TITLE","%s",s);
-
- }
- else {
- p = empty_request("NUMBER");
- set_value(p,"VALUE","%g",v->val);
- }
-
- }
- if(z == NULL) p = clone_one_request(r);
-
- send_status(r->name,name,*e?"FAILED":"READY");
-
- free_all_requests(y);
- free_all_requests(z);
- r = n;
-
- if(p)
- {
- if(l == NULL) f = p;
- else l->next = p;
- l = p;
- }
- }
-
- if(*e == 0 && (
- strcmp(class,"RETRIEVE")==0) || strcmp(class,"READ")==0
- || strcmp(class,"COMPUTE")==0)
- pool_store(s,name,class,f);
- return f;
-}
-
-
-static void serve(svcid *id,request *r,void *data)
-{
-
- err e = 0;
- request *u = NULL;
- int forked;
- char *name = get_value(r,"_NAME",0);
-
- forked = fork_service(id);
-
- if(forked > 0) return;
-
- if(u = pool_fetch(s,name))
- {
- send_reply(id,u);
- free_all_requests(u);
- }
- else
- {
- marslog(LOG_INFO,"Request from %s",get_svc_source(id));
- curid = id;
- mars.outproc = putmsg;
- u = doit(get_svc_source(id),r,&e);
- mars.outproc = NULL;
- curid = NULL;
-
- set_svc_err(id,e);
- send_reply(id,u);
-
- free_all_requests(u);
- }
-
- if(forked != -1)
- {
- destroy_service(s);
- marsexit(0);
- }
-}
-
-
-void main(int argc,char **argv)
-{
-
- /* forkmode = strcmp(getenv("USER"),"mab")==0; */
-
- marsinit(&argc,argv,NULL,0,NULL);
-
- /* mars.verbose = true; */
-
- mars.deltmp = false;
- mars.savecalc = true;
- mars.casecomp = true; /* fieldset names are case senstive */
- mars.appl = "mars";
- mars.findvar = fullpath_to_variable;
-
- s = create_service("mars");
-
- add_service_callback(s,"RETRIEVE", serve, NULL);
- add_service_callback(s,"READ", serve, NULL);
- add_service_callback(s,"GRIB", serve, NULL);
- add_service_callback(s,"BUFR", serve, NULL);
- add_service_callback(s,"IMAGE", serve, NULL);
- add_service_callback(s,"NUMBER", serve, NULL);
- add_service_callback(s,"COMPUTE", serve, NULL);
- add_service_callback(s,"WRITE", serve, NULL);
-
-
- service_run(s);
-}
diff --git a/src/libMars/MARS/odb-iain.cc b/src/libMars/MARS/odb-iain.cc
deleted file mode 100644
index 34d0d4e..0000000
--- a/src/libMars/MARS/odb-iain.cc
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * � Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-///
-/// \file odb.cc
-///
-/// @author Piotr Kuchta, ECMWF May 2009
-///
-
-#ifdef ODB_SUPPORT
-
-#include "mars.h"
-
-
-# include "eckit/eckit_version.h"
-# include "eckit/io/StdFileHandle.h"
-# include "eckit/filesystem/PathName.h"
-# include "eckit/io/Length.h"
-# include "eckit/exception/Exceptions.h"
-
-#include "odb.h"
-#include <set>
-
-#include "odb_api/odbcapi.h"
-#include "odb_api/FastODA2Request.h"
-#include "odb_api/Select.h"
-
-#if !defined(OLD_ODB_API)
-
- /* valid for versions of ODB_API > 0.9.20 or so */
- #define ECLIB_FULL_VERSION ((ECLIB_MAJOR_VERSION)*10000) + ((ECLIB_MINOR_VERSION)*100) + (ECLIB_PATCH_VERSION)
-
- /* From version 7.3.0, eclib is protected by a namespace */
- #if ECLIB_FULL_VERSION >= 70300
- using namespace eclib;
- #endif
-
- /* The name of the eclib function to check whether a path exists changed. We try to keep compatibility with older versions. */
- #define ECLIB_PATH_EXIST_FN exists
-
-#else
- #define ECLIB_PATH_EXIST_FN exist
-#endif
-
-
-
-boolean is_part_of_mars_language(const char *n)
-{
- static request *archive = NULL;
- const char *s = NULL;
-
- if(!archive)
- {
- request *r = mars_language();
- while(r && !EQ(r->name, "ARCHIVE"))
- r = r->next;
- if(r == NULL)
- {
- marslog(LOG_EROR, const_cast<char *>("ARCHIVE request not found in language. OOOPPPSSS!!!"));
- marsexit(1);
- }
-
- archive = r;
- }
-
- if((s = get_value(archive,n,0)) != NULL)
- return true;
-
- return false;
-}
-
-// TODO: In //depot/mars/client/dev/oda/etc then to install in: /usr/local/lib/metaps/etc/
-// TODO: Tell Cristian if this is deployed in a config file eventually....
-const char* odb2request_config = "/usr/local/lib/metaps/etc/";
-const char * cfg =
-"CLASS: class\n"
-"DATE: andate\n"
-"TIME: antime\n"
-"TYPE: type\n"
-"OBSGROUP: groupid\n"
-"REPORTYPE: reportype\n"
-"STREAM: stream\n"
-"EXPVER: expver\n"
-;
-
-err odb_to_request_from_file(request *r, const char *fileName, unsigned long long *cnt)
-{
- err e = NOERR;
- try {
- odb_start();
- marslog(LOG_DBUG, const_cast<char *>("odb_to_request_from_file: fileName = %s."), fileName);
-
- eckit::PathName pn(fileName);
- if (! pn.ECLIB_PATH_EXIST_FN())
- {
- marslog(LOG_EROR, (char *)"oda_to_request_from_file: file '%s' does not exist.", (char *) fileName);
- return e = TOO_SHORT_ERR;
- }
- if (! pn.size())
- {
- marslog(LOG_EROR, (char *)"oda_to_request_from_file: file '%s' empty.", fileName);
- return e = TOO_SHORT_ERR;
- }
-
- odb::FastODA2Request<odb::ODA2RequestClientTraits> o2r;
- o2r.parseConfig(cfg);
-
- eckit::OffsetList offsets;
- eckit::LengthList lengths;
- std::vector<odb::ODAHandle*> handles;
- bool rc = o2r.scanFile(fileName, offsets, lengths, handles);
- for (size_t i = 0; i < handles.size(); ++i)
- delete handles[i];
- handles.clear();
- if (! rc) return HYPERCUBE_ERROR;
-
- ASSERT(lengths.size());
- ASSERT(lengths.size() == offsets.size());
- for(size_t i = 1; i < offsets.size(); i++)
- ASSERT(offsets[i] > offsets[i-1]);
- size_t last = offsets.size()-1;
- ASSERT(eckit::PathName(fileName).size() == offsets[last] + lengths[last]);
-
- *cnt = o2r.rowsNumber();
-
- std::string filesRequest = "ARCHIVE,\n";
- filesRequest += o2r.genRequest();
-
- eckit::Log::debug() << "odb_to_request_from_file: " << filesRequest << endl;
- request *n = string2request(filesRequest.c_str());
- if (! n)
- {
- marslog(LOG_EROR, (char *)"Error creating a MARS request from data");
- return e = TOO_SHORT_ERR;
- }
- //Log::debug() << "odb_to_request_from_file: converted to request:" << endl;
- //print_all_requests(n);
- reqmerge(r, n);
- free_all_requests(n);
- return e;
- }
- catch (eckit::Exception& ex)
- {
- marslog(LOG_EROR, (char *)"Error making a request from file %s\n",ex.what());
- marslog(LOG_EROR, (char *)"Exception ignored");
- e = TOO_SHORT_ERR;
- return e;
- }
- return e;
-}
-
-typedef std::map<std::string, std::set<std::string> > Parameters ;
-
-Parameters parameters(request* r)
-{
- Parameters ret;
-
- for (parameter *p = r->params; p; p = p->next)
- {
- string parameterName = p->name;
- size_t n = count_values(r, p->name);
- if (n == 0)
- {
- marslog(LOG_EROR, (char *)"parameters: no values of param '%s'", p->name);
- ASSERT(n != 0);
- }
- set<string> values;
- for (size_t i = 0; i < n; ++i)
- values.insert(get_value(r, p->name, i));
- ret[parameterName] = values;
- }
- return ret;
-}
-
-err odb_compare_attributes_of_first_request(request* first, request* second)
-{
- typedef Parameters P;
-
- P firstParams = parameters(first);
- P secondParams = parameters(second);
-
- for (P::iterator it = firstParams.begin(); it != firstParams.end(); ++it)
- {
- const string& paramName = it->first;
- const set<string>& values = it->second;
-
- P::iterator jt = secondParams.find(paramName);
- if (jt == secondParams.end())
- {
- marslog(LOG_EROR, (char *)"odb_compare_attributes_of_first_request: second request has no param '%s'", paramName.c_str());
- return -1;
- }
- const set<string>& otherValues = jt->second;
- if (values != otherValues)
- {
- stringstream ss;
- if (values.size() == 1 && otherValues.size() == 1)
- {
- ss << "Values of '" << paramName << "' differ: " << *values.begin() << " <> " << *otherValues.begin();
- marslog(LOG_EROR, (char *)"odb_compare_attributes_of_first_request: %s", ss.str().c_str());
- }
- else
- {
- marslog(LOG_EROR, (char *)"odb_compare_attributes_of_first_request: values for param '%s' differ", paramName.c_str());
- ostream_iterator<string> out(ss, ", ");
- set_symmetric_difference(values.begin(), values.end(), otherValues.begin(), otherValues.end(), out);
- marslog(LOG_EROR,(char *)
- "odb_compare_attributes_of_first_request: values present in one of the sets, but not in the other: %s",
- ss.str().c_str());
- }
- return -1;
- }
- }
- return NOERR;
-}
-
-long long odb_filter(const char *sql, FILE *fin, FILE *fout, long long total_to_read)
-{
- try {
- odb_start();
- marslog(LOG_INFO, const_cast<char *>("odb_filter: sql = '%s', total_to_read = %lld"),
- ((sql == 0) ? "NULL" : sql),
- total_to_read);
-
- if (total_to_read == 0)
- return 0;
-
- // TODO: check sql is a select really and does not have INTO clause (?)
- eckit::StdFileHandle fhin(fin), fhout(fout);
- fhin.openForRead();
-
- if (! sql)
- {
- eckit::Length n = fhin.saveInto(fhout);
- ASSERT(total_to_read == n);
- }
- else
- {
- using namespace odb;
- std::string s(sql);
- StringTool::trimInPlace(s);
- s = StringTool::isInQuotes(s) ? StringTool::unQuote(s) : s;
-
- odb::Select odb(s, fhin);
- odb::Select::iterator it = odb.begin();
- odb::Select::iterator end = odb.end();
-
- odb::Writer<> writer(fhout);
- odb::Writer<>::iterator outit = writer.begin();
- outit->pass1(it, end);
- }
- marslog(LOG_INFO, const_cast<char *>(" => odb_filter"));
- }
- catch (eckit::Exception &ex)
- {
- marslog(LOG_EROR, (char*)"Error in odb_filter %s\n",ex.what());
- return -1;
- }
-
- // TODO: make sure the below is true
- return total_to_read;
-}
-
-static int test()
-{
- odb_start();
- const char *sql = "select lat, lon";
- FILE *fin = fopen("input.oda", "r");
- FILE *fout = fopen("output.oda", "w");
-
- long long total_to_read = 0; // ? Do we really need this? maybe
- long long total_read = odb_filter(sql, fin, fout, total_to_read);
-
- //assert(total_to_read == total_read);
-
- fclose(fin);
- fclose(fout);
-
- return total_to_read;
-}
-
-//int main(int argc, char *argv[]) { return test(); }
-
-#else
-#include "mars.h"
-#endif
-
diff --git a/src/libMars/MARS/webbase.c b/src/libMars/MARS/webbase.c
deleted file mode 100644
index dcdba5f..0000000
--- a/src/libMars/MARS/webbase.c
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-#include "mars.h"
-#include <sys/ioctl.h>
-#include <signal.h>
-#include <ctype.h>
-#if defined(sgi) || defined(fujitsu) || defined(sun)
-#include <sys/filio.h> /* For FIONREAD */
-#endif
-/*
-
-TODO:
-
-- Work on error messages
-- Check data size againts Content-Length
-- Implement list
-- check if certificate are 0500 as well as parent dir.
-- check fixed size buffers
-
-*/
-
-typedef struct webdata {
- char *host;
- char *url;
- char *openssl;
- char *object;
- char *proxy;
- request *header;
- FILE *f;
- int cleanup;
- int port;
-} webdata;
-
-static void webbase_init(void);
-
-static err webbase_open(void *data,request*,request*,int);
-static err webbase_close(void *data);
-static err webbase_read(void *data,request *r,void *buffer,long *length);
-static err webbase_write(void *data,request *r,void *buffer,long *length);
-static err webbase_cntl(void *data,int code,void *param,int size);
-static boolean webbase_check(void *data,request *r);
-static err webbase_validate(void *data,request*,request*,int);
-
-static option opts[] = {
-
- {"host","MARS_WEB_HOST",NULL,"wms.ecmwf.int:443",t_str,
- sizeof(char*),OFFSET(webdata,host)},
-
- {"url","MARS_WEB_URL",NULL,"/services/mars/d/webbase",t_str,
- sizeof(char*),OFFSET(webdata,url)},
-
- {"openssl","MARS_WEB_OPENSSL",NULL,"/usr/local/openssl/bin/openssl",t_str,
- sizeof(char*),OFFSET(webdata,openssl)},
-
- {"proxy","MARS_WEB_PROXY",NULL,NULL/*"carbad:3333"*/,t_str,
- sizeof(char*),OFFSET(webdata,proxy)},
-
-
-};
-
-static base_class _webbase_base = {
-
- NULL, /* parent class */
- "webbase", /* name */
-
- false, /* inited */
-
- sizeof(webdata), /* private_size */
- NUMBER(opts), /* options_count */
- opts, /* options */
-
- webbase_init, /* init */
-
- webbase_open, /* open */
- webbase_close, /* close */
-
- webbase_read, /* read */
- webbase_write, /* write */
-
- webbase_cntl, /* control */
-
- webbase_check, /* check */
-
- NULL, /* query */
-
- NULL, /* archive */
- NULL, /* admin */
-
- webbase_validate, /* validate */
-
-};
-
-/* the only 'public' variable ... */
-
-base_class *webbase = &_webbase_base;
-
-static FILE* post_open(webdata*,const char*,const char*,const char*);
-
-static void webbase_init(void)
-{
-}
-
-static const char *escape(const char* p)
-{
- static char buf[10240];
- int i = 0;
- while(*p)
- {
- char c = *p;
- unsigned int h,l;
-
- if(isalnum(c))
- buf[i++] = c;
- else {
- buf[i++] = '%';
-
- h = ((unsigned char)c) / 16;
- l = ((unsigned char)c) % 16;
-
- if(h>=10) c = h - 10 + 'A'; else c = h + '0';
- buf[i++] = c;
-
- if(l>=10) c = l - 10 + 'A'; else c = l + '0';
- buf[i++] = c;
- }
-
- p++;
- }
- buf[i] = 0;
- return buf;
-}
-
-static int ok(const char *p)
-{
- if(*p == '_') return 0;
- if(EQ(p,"TARGET")) return 0;
- if(EQ(p,"FIELDSET")) return 0;
- if(EQ(p,"DATABASE")) return 0;
- return 1;
-}
-
-static char *encode(request *r)
-{
- parameter* p = r->params;
- static char buf[10240];
- buf[0] = 0;
- while(p)
- {
- if(ok(p->name))
- {
- value *v = p->values;
- while(v)
- {
- if(buf[0]) strcat(buf,"&");
- strcat(buf,lowcase(p->name));
- strcat(buf,"=");
- strcat(buf,escape(lowcase(v->name)));
- v = v->next;
- }
- }
- p = p->next;
- }
- /*strcat(buf,"\n");*/
- return buf;
-}
-
-static err parse_header(webdata* web,FILE* f)
-{
- char buf[1024];
- char param[1024];
- char value[1024];
-
- free_all_requests(web->header);
- web->header = empty_request("header");
-
- if(!fgets(buf,sizeof(buf),f))
- {
- marslog(LOG_EROR,"Cannot read result code");
- return -2;
- }
-
- while(strlen(buf)>0 && isspace(buf[strlen(buf)-1]))
- buf[strlen(buf)-1] = 0;
- set_value(web->header,"heading","%s",buf);
-
- while(fgets(buf,sizeof(buf),f))
- {
- char *p = buf;
- while(strlen(buf)>0 && isspace(buf[strlen(buf)-1]))
- buf[strlen(buf)-1] = 0;
-
- if(*p == 0)
- {
- const char *e = get_value(web->header,"Webmars-error",0);
- const char *m = get_value(web->header,"Webmars-message",0);
- if(mars.debug)
- print_all_requests(web->header);
-
- if(e && atol(e) && m) marslog(LOG_EROR,"%s",m);
-
- return e ? atol(e) : 0;
- }
-
- while(*p != 0 && *p != ':') p++;
- if(*p == ':')
- {
- *p = 0;
- strcpy(param,buf);
- p++;
- while(*p && isspace(*p)) p++;
- strcpy(value,p);
-
- add_value(web->header,param,"%s",value);
- }
- else {
- marslog(LOG_EROR,"webbase: could not find : in <%s>",buf);
- }
-
- /*if(buf[0] == 0) return r;*/
- }
- marslog(LOG_EROR,"webbase: could not find empty line");
- return -2;
-}
-
-static void split(const char* p,char *host,int *port)
-{
- int i = 0;
- while(*p && *p != ':' )
- host[i++] = *p++;
-
- host[i] = 0;
- if(*p) { p++; *port = atol(p); }
-}
-
-static int copy(int in,int out)
-{
- size_t size;
- char buf[10240];
-
- if(ioctl(in,FIONREAD,&size) < 0)
- marslog(LOG_EXIT|LOG_PERR,"ioctl");
-
- if(size == 0)
- {
- /* marslog(LOG_INFO,"closing %d -> %d",in,out); */
- shutdown(in,0);
- shutdown(out,1);
- return -1;
- }
-
- /* marslog(LOG_INFO,"copy %d -> %d %d",in,out,size); */
-
- while(size > 0)
- {
- size_t len = MIN(size,sizeof(buf));
- if(read(in,buf,len) != len)
- marslog(LOG_EXIT|LOG_PERR,"read");
-
- if(write(out,buf,len) != len)
- marslog(LOG_EXIT|LOG_PERR,"write");
-
- size -= len;
- }
-
- return in;
-}
-
-
-static err run_proxy(webdata* web,int s0)
-{
- int s1,s2,s3,s4;
- char host[1024];
- char buf[10240];
- int port = 80;
- char c;
- int i = 0;
- struct sockaddr_in from;
- marssocklen_t fromlen = sizeof(struct sockaddr_in);
-
- split(web->proxy,host,&port);
-
-
- /* marslog(LOG_INFO,"Unsing %s on port %d",host,port); */
- s1 = call_server(host,port,-1);
- if(s1 < 0) return -1;
-
- split(web->host,host,&port);
- sprintf(buf,"CONNECT %s HTTP/1.0\r\n"
- "User-Agent: ECMWF-MARS-%ld\r\n"
- "Host: %s\r\n"
- "Content-Length: 0\r\n"
- "Proxy-Connection: Keep-Alive\r\n"
- "Pragma: no-cache\r\n"
- "\r\n",
- web->host,
- marsversion(),
- host);
-
- if(write(s1,buf,strlen(buf)) != strlen(buf))
- marslog(LOG_EXIT|LOG_PERR,"write");
-
-
- i = 0;
- while(read(s1,&c,1) == 1 && i < sizeof(buf)-1)
- {
- buf[i++] = c;
- if(i > 4 && strncmp(&buf[i-4],"\r\n\r\n",4) == 0)
- break;
- }
- buf[i] = 0;
-
- /* ---- */
-
- /* marslog(LOG_INFO,"Listen on port %d",web->port); */
-
- alarm(10);
- s2 = accept(s0, (struct sockaddr*)&from, &fromlen);
- alarm(0);
-
- if(s2 < 0) {
- marslog(LOG_EROR|LOG_PERR,"accept");
- return -1;
- }
-
- s3 = s1;
- s4 = s2;
-
- while(s3 >= 0 || s4 >= 0)
- {
- fd_set fds;
-
- FD_ZERO(&fds);
- if(s3 >= 0) FD_SET(s3,&fds);
- if(s4 >= 0) FD_SET(s4,&fds);
-
-
- switch(select(FD_SETSIZE,&fds,0,0,0))
- {
- case -1:
- if(errno != EINTR)
- {
- return -1;
- marslog(LOG_EXIT|LOG_PERR,"select");
- }
- break;
-
- /* return timeout */
- case 0:
- return -1;
- /*NOTREACHED*/
- break;
-
- default:
- if(s3 >= 0 && FD_ISSET(s3,&fds)) s3 = copy(s1,s2);
- if(s4 >= 0 && FD_ISSET(s4,&fds)) s4 = copy(s2,s1);
- break;
- }
- }
-
- /* marslog(LOG_EXIT,"End of proxy"); */
- return 0;
-
-}
-
-static err start_proxy(webdata* web)
-{
- char address[80];
- int s = server_mode(&web->port,address);
- if(s < 0) return -1;
-
- switch(fork())
- {
- case 0:
- run_proxy(web,s);
- exit(0);
- break;
-
- case -1:
- marslog(LOG_EROR|LOG_PERR,"Cannot fork proxy helper");
- close(s);
- return -2;
-
- default:
- close(s);
- break;
- }
-
- return 0;
-}
-
-
-static err post_close(webdata* web,FILE* f)
-{
- if(pclose(f))
- {
- marslog(LOG_EROR|LOG_PERR,"pclose");
- return -1;
- }
- return 0;
-}
-
-static FILE* post_open(webdata* web, const char* req,const char* url,const char* arg)
-{
- const char *home = getenv("HOME");
- FILE *f;
- char *tmp = marstmp();
- char buf[1024];
- char host[1024];
-
- f = fopen(tmp,"w");
- if(!f)
- {
- marslog(LOG_EROR|LOG_PERR,"fopen(%s)",tmp);
- return NULL;
- }
-
- fprintf(f,"POST %s/%s HTTP/1.0\n",url,arg);
- fprintf(f,"User-Agent: ECMWF-MARS-%ld\n",marsversion());
- fprintf(f,"Content-Length: %d\n",strlen(req));
- fprintf(f,"\n");
- fprintf(f,"%s",req);
-
- if(fclose(f))
- {
- marslog(LOG_EROR|LOG_PERR,"fclose(%s)",tmp);
- return NULL;
- }
-
- if(web->proxy) {
- if(start_proxy(web) != 0)
- return NULL;
- sprintf(host,"localhost:%d",web->port);
- }
- else
- strcpy(host,web->host);
-
-
- sprintf(buf,"%s s_client -quiet "
- "-cert %s/.marsrc/cert.pem "
- "-key %s/.marsrc/key.pem "
- "-CAfile %s/.marsrc/ca.pem "
- "-connect %s < %s 2>/dev/null",
- web->openssl,home,home,home,host,tmp);
-
- f = popen(buf,"r");
- if(!f)
- {
- marslog(LOG_EROR|LOG_PERR,"popen(%s)",buf);
- return NULL;
- }
-
- if(parse_header(web,f) != 0)
- {
- post_close(web,f);
- return 0;
- }
-
- return f;
-}
-
-static err webbase_open(void *data,request *r,request *v,int mode)
-{
- webdata* web = (webdata*)data;
- const char *me = database_name(data);
- FILE* f ;
-
- marslog(LOG_INFO,"%s is at %s%s%s", me,web->host,web->proxy?",via proxy ":"",
- web->proxy?web->proxy:"");
-
- f = post_open(web,encode(r),web->url,"open");
-
- if(!f) return -2;
-
- web->object = strcache(get_value(web->header,"Webmars-object",0));
- post_close(web,f);
-
- web->cleanup = true; /* The request was started succesfully */
-
- {
- char buf[1024];
- const char *p;
-
- sprintf(buf,"object=%s",web->object);
- for(;;)
- {
- FILE* f = post_open(web,buf,web->url,"status");
- if(!f) return -2;
- if(post_close(web,f)) return -2;
-
- p = get_value(web->header,"Webmars-result",0);
- if(!p)
- {
- marslog(LOG_EROR,"Cannot get result from web server");
- p = get_value(web->header,"Webmars-message",0);
- if(p) marslog(LOG_EROR,"%s",p);
- return -2;
- }
-
- if(EQ(p,"complete"))
- break;
-
- if(EQ(p,"aborted"))
- {
- marslog(LOG_EROR,"The web server could not retrieve the data");
- return -2;
- }
-
- p = get_value(web->header,"Webmars-sleep",0);
- sleep(p?atol(p):2);
- }
-
- {
- FILE* f = post_open(web,buf,web->url,"fetch");
- if(!f) return -2;
- if(post_close(web,f)) return -2;
- }
-
- p = get_value(web->header,"Webmars-result",0);
- {
- FILE* f = post_open(web,buf,p,"");
- if(!f) return -2;
- /* if(post_close(web,f)) return -2;*/
- web->f = f;
- }
- }
-
- return 0;
-
-}
-
-static err webbase_close(void *data)
-{
- webdata* web = (webdata*)data;
- strfree(web->object);
- if(web->f) post_close(web,web->f);
-
- if(web->cleanup)
- {
- FILE *f;
- char buf[1024];
- sprintf(buf,"object=%s",web->object);
- f = post_open(web,buf,web->url,"close");
- if(f) post_close(web,f);
- }
- return 0;
-}
-
-
-static err webbase_read(void *data,request *r,void *buffer,long *length)
-{
- webdata* web = (webdata*)data;
- fortint len = *length;
- err ret = 0;
- if(web->f == 0)
- {
- return -1;
- }
-
- ret = _readany(web->f,buffer,&len);
- *length = len;
- return ret;
-}
-
-static err webbase_write(void *data,request *r,void *buffer,long *length)
-{
- return -1;
-}
-
-static err webbase_list(void *data,request *r)
-{
- return -1;
-}
-
-static err webbase_cntl(void *data,int code,void *param,int size)
-{
- switch(code)
- {
- case CNTL_LIST:
- webbase_list(data,(request*)param);
- return 0;
- /*NOTREACHED*/
- break;
-
- default:
- return -1;
- /*NOTREACHED*/
- break;
- }
- return -1;
-}
-
-static boolean webbase_check(void *data,request *r)
-{
- return true;
-}
-
-static err webbase_validate(void *data, request *r, request *e, int mode)
-{
- err ret = NOERR;
-
-/* if(net->validate)*/
-/* ret = validate_request(r,e,net->validate);*/
-
- return ret;
-}
diff --git a/src/libMars/MARS/xdropsvc.c b/src/libMars/MARS/xdropsvc.c
deleted file mode 100644
index ff75532..0000000
--- a/src/libMars/MARS/xdropsvc.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * © Copyright 1996-2012 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-#ifdef METVIEW
-#include <X11/Intrinsic.h>
-#include <Xm/Xm.h>
-#include "mars.h"
-#include "../Util/include/Drag.h"
-
-typedef struct drop{
- svc *s;
- svcproc proc;
- void *data;
-}drop;
-
-
-static void destroy_callback(Widget w,XtPointer cd,XtPointer cb)
-{
- XtFree(cd);
-}
-
-static void drop_callback(Widget w,XtPointer cd,DragCallbackStruct *cb)
-{
- drop *info = (drop*)cd;
-}
-
-void register_drop_target(svc *s,Widget w,char *name,svcproc proc,void *data)
-{
- drop *info = NEW_CLEAR(drop);
-
- info->s = s;
- info->proc = proc;
- info->data = data;
-
- if(XtIsDrag(w))
- XtAddCallback(w,XmNdropCallback,
- (XtCallbackProc)drop_callback,(XtPointer)info);
- else
- DragAcceptDropCallback(w,(XtCallbackProc)drop_callback,(XtPointer)info);
-
- XtAddCallback(w,XmNdestroyCallback,(XtCallbackProc)destroy_callback,
- (XtPointer)info);
-
- DragSetInfo(w,s->name);
-}
-
-void get_drop_info(svc *s,DragCallbackStruct *cb,void *data)
-{
-
-}
-
-#endif
-#endif
diff --git a/src/libMars/account.c b/src/libMars/account.c
deleted file mode 120000
index b9564ef..0000000
--- a/src/libMars/account.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/account.c
\ No newline at end of file
diff --git a/src/libMars/api.c b/src/libMars/api.c
deleted file mode 120000
index 76e9806..0000000
--- a/src/libMars/api.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/api.c
\ No newline at end of file
diff --git a/src/libMars/api.h b/src/libMars/api.h
deleted file mode 120000
index 7c13838..0000000
--- a/src/libMars/api.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/api.h
\ No newline at end of file
diff --git a/src/libMars/apibase.c b/src/libMars/apibase.c
deleted file mode 120000
index 53c30d7..0000000
--- a/src/libMars/apibase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/apibase.c
\ No newline at end of file
diff --git a/src/libMars/archive.c b/src/libMars/archive.c
deleted file mode 120000
index 4ee4f86..0000000
--- a/src/libMars/archive.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/archive.c
\ No newline at end of file
diff --git a/src/libMars/authenticate.c b/src/libMars/authenticate.c
deleted file mode 120000
index f94ca8b..0000000
--- a/src/libMars/authenticate.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/authenticate.c
\ No newline at end of file
diff --git a/src/libMars/base.c b/src/libMars/base.c
deleted file mode 120000
index 711211f..0000000
--- a/src/libMars/base.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/base.c
\ No newline at end of file
diff --git a/src/libMars/base.h b/src/libMars/base.h
deleted file mode 120000
index c9c46ab..0000000
--- a/src/libMars/base.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/base.h
\ No newline at end of file
diff --git a/src/libMars/bufr.c b/src/libMars/bufr.c
deleted file mode 120000
index 1d700a5..0000000
--- a/src/libMars/bufr.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/bufr.c
\ No newline at end of file
diff --git a/src/libMars/bufr.h b/src/libMars/bufr.h
deleted file mode 120000
index a9a06cb..0000000
--- a/src/libMars/bufr.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/bufr.h
\ No newline at end of file
diff --git a/src/libMars/calc.c b/src/libMars/calc.c
deleted file mode 120000
index ffc3409..0000000
--- a/src/libMars/calc.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/calc.c
\ No newline at end of file
diff --git a/src/libMars/check.c b/src/libMars/check.c
deleted file mode 120000
index 688f0c4..0000000
--- a/src/libMars/check.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/check.c
\ No newline at end of file
diff --git a/src/libMars/control.c b/src/libMars/control.c
deleted file mode 120000
index edccc3e..0000000
--- a/src/libMars/control.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/control.c
\ No newline at end of file
diff --git a/src/libMars/control.h b/src/libMars/control.h
deleted file mode 120000
index 837f8c8..0000000
--- a/src/libMars/control.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/control.h
\ No newline at end of file
diff --git a/src/libMars/cos.c b/src/libMars/cos.c
deleted file mode 120000
index f7f52ce..0000000
--- a/src/libMars/cos.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/cos.c
\ No newline at end of file
diff --git a/src/libMars/cos.h b/src/libMars/cos.h
deleted file mode 120000
index 7fe7f1b..0000000
--- a/src/libMars/cos.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/cos.h
\ No newline at end of file
diff --git a/src/libMars/dhsbase.c b/src/libMars/dhsbase.c
deleted file mode 120000
index 0f716a5..0000000
--- a/src/libMars/dhsbase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/dhsbase.c
\ No newline at end of file
diff --git a/src/libMars/ecaccess.c b/src/libMars/ecaccess.c
deleted file mode 120000
index 57d0677..0000000
--- a/src/libMars/ecaccess.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/ecaccess.c
\ No newline at end of file
diff --git a/src/libMars/ecaccess.h b/src/libMars/ecaccess.h
deleted file mode 120000
index ba9b284..0000000
--- a/src/libMars/ecaccess.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/ecaccess.h
\ No newline at end of file
diff --git a/src/libMars/environ.c b/src/libMars/environ.c
deleted file mode 120000
index 2f947dd..0000000
--- a/src/libMars/environ.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/environ.c
\ No newline at end of file
diff --git a/src/libMars/expand.c b/src/libMars/expand.c
deleted file mode 120000
index f2b79e3..0000000
--- a/src/libMars/expand.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/expand.c
\ No newline at end of file
diff --git a/src/libMars/externf.c b/src/libMars/externf.c
deleted file mode 120000
index c7b9783..0000000
--- a/src/libMars/externf.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/externf.c
\ No newline at end of file
diff --git a/src/libMars/field.c b/src/libMars/field.c
deleted file mode 120000
index de4e11b..0000000
--- a/src/libMars/field.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/field.c
\ No newline at end of file
diff --git a/src/libMars/field.h b/src/libMars/field.h
deleted file mode 120000
index f54a0ae..0000000
--- a/src/libMars/field.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/field.h
\ No newline at end of file
diff --git a/src/libMars/filebase.c b/src/libMars/filebase.c
deleted file mode 120000
index ce6abc9..0000000
--- a/src/libMars/filebase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/filebase.c
\ No newline at end of file
diff --git a/src/libMars/files.c b/src/libMars/files.c
deleted file mode 120000
index 262d057..0000000
--- a/src/libMars/files.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/files.c
\ No newline at end of file
diff --git a/src/libMars/flatfilebase.c b/src/libMars/flatfilebase.c
deleted file mode 120000
index 5cfcfaa..0000000
--- a/src/libMars/flatfilebase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/flatfilebase.c
\ No newline at end of file
diff --git a/src/libMars/free.c b/src/libMars/free.c
deleted file mode 120000
index 811bd4c..0000000
--- a/src/libMars/free.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/free.c
\ No newline at end of file
diff --git a/src/libMars/globals.h b/src/libMars/globals.h
deleted file mode 120000
index e0a0e44..0000000
--- a/src/libMars/globals.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/globals.h
\ No newline at end of file
diff --git a/src/libMars/grib.c b/src/libMars/grib.c
deleted file mode 120000
index 774c56e..0000000
--- a/src/libMars/grib.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/grib.c
\ No newline at end of file
diff --git a/src/libMars/grib.h b/src/libMars/grib.h
deleted file mode 120000
index b5a6890..0000000
--- a/src/libMars/grib.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/grib.h
\ No newline at end of file
diff --git a/src/libMars/gribbase.c b/src/libMars/gribbase.c
deleted file mode 120000
index e5d6a5c..0000000
--- a/src/libMars/gribbase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/gribbase.c
\ No newline at end of file
diff --git a/src/libMars/guess.c b/src/libMars/guess.c
deleted file mode 120000
index cc61afb..0000000
--- a/src/libMars/guess.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/guess.c
\ No newline at end of file
diff --git a/src/libMars/handler.c b/src/libMars/handler.c
deleted file mode 120000
index 9bbb241..0000000
--- a/src/libMars/handler.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/handler.c
\ No newline at end of file
diff --git a/src/libMars/hash.c b/src/libMars/hash.c
deleted file mode 120000
index 969e3d5..0000000
--- a/src/libMars/hash.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/hash.c
\ No newline at end of file
diff --git a/src/libMars/hidden.c b/src/libMars/hidden.c
deleted file mode 120000
index 4a89ba9..0000000
--- a/src/libMars/hidden.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/hidden.c
\ No newline at end of file
diff --git a/src/libMars/hypercube.c b/src/libMars/hypercube.c
deleted file mode 120000
index 196bc1e..0000000
--- a/src/libMars/hypercube.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/hypercube.c
\ No newline at end of file
diff --git a/src/libMars/hypercube.h b/src/libMars/hypercube.h
deleted file mode 120000
index a22e7ad..0000000
--- a/src/libMars/hypercube.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/hypercube.h
\ No newline at end of file
diff --git a/src/libMars/ibmblk.c b/src/libMars/ibmblk.c
deleted file mode 120000
index b469cae..0000000
--- a/src/libMars/ibmblk.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/ibmblk.c
\ No newline at end of file
diff --git a/src/libMars/ibmblk.h b/src/libMars/ibmblk.h
deleted file mode 120000
index 99a1aa3..0000000
--- a/src/libMars/ibmblk.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/ibmblk.h
\ No newline at end of file
diff --git a/src/libMars/index.c b/src/libMars/index.c
deleted file mode 120000
index 740ee64..0000000
--- a/src/libMars/index.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/index.c
\ No newline at end of file
diff --git a/src/libMars/index.h b/src/libMars/index.h
deleted file mode 120000
index 4fdec15..0000000
--- a/src/libMars/index.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/index.h
\ No newline at end of file
diff --git a/src/libMars/json.c b/src/libMars/json.c
deleted file mode 120000
index d1e245e..0000000
--- a/src/libMars/json.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/json.c
\ No newline at end of file
diff --git a/src/libMars/json.h b/src/libMars/json.h
deleted file mode 120000
index 2c14cd4..0000000
--- a/src/libMars/json.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/json.h
\ No newline at end of file
diff --git a/src/libMars/lang.h b/src/libMars/lang.h
deleted file mode 120000
index e8992fd..0000000
--- a/src/libMars/lang.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/lang.h
\ No newline at end of file
diff --git a/src/libMars/langl.l b/src/libMars/langl.l
deleted file mode 120000
index ef36612..0000000
--- a/src/libMars/langl.l
+++ /dev/null
@@ -1 +0,0 @@
-MARS/langl.l
\ No newline at end of file
diff --git a/src/libMars/langy.y b/src/libMars/langy.y
deleted file mode 120000
index b9a5a21..0000000
--- a/src/libMars/langy.y
+++ /dev/null
@@ -1 +0,0 @@
-MARS/langy.y
\ No newline at end of file
diff --git a/src/libMars/list.c b/src/libMars/list.c
deleted file mode 120000
index 5736d30..0000000
--- a/src/libMars/list.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/list.c
\ No newline at end of file
diff --git a/src/libMars/lock.c b/src/libMars/lock.c
deleted file mode 120000
index 5752d73..0000000
--- a/src/libMars/lock.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/lock.c
\ No newline at end of file
diff --git a/src/libMars/logfile.c b/src/libMars/logfile.c
deleted file mode 120000
index 7027241..0000000
--- a/src/libMars/logfile.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/logfile.c
\ No newline at end of file
diff --git a/src/libMars/macro_api.c b/src/libMars/macro_api.c
index c8e460f..33de283 100644
--- a/src/libMars/macro_api.c
+++ b/src/libMars/macro_api.c
@@ -284,7 +284,8 @@ int read_vector_from_request( request *r, double** vec, int* length )
*vec = v;
*length = size;
- }
+ }
+ return 0;
}
diff --git a/src/libMars/mars.h b/src/libMars/mars.h
deleted file mode 120000
index 2103439..0000000
--- a/src/libMars/mars.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/mars.h
\ No newline at end of file
diff --git a/src/libMars/mcs.h b/src/libMars/mcs.h
deleted file mode 120000
index 15893cf..0000000
--- a/src/libMars/mcs.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/mcs.h
\ No newline at end of file
diff --git a/src/libMars/memory.c b/src/libMars/memory.c
deleted file mode 120000
index 7dd771c..0000000
--- a/src/libMars/memory.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/memory.c
\ No newline at end of file
diff --git a/src/libMars/metadata.c b/src/libMars/metadata.c
deleted file mode 120000
index 3a437cb..0000000
--- a/src/libMars/metadata.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/metadata.c
\ No newline at end of file
diff --git a/src/libMars/multibase.c b/src/libMars/multibase.c
deleted file mode 120000
index dda2311..0000000
--- a/src/libMars/multibase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/multibase.c
\ No newline at end of file
diff --git a/src/libMars/netbase.c b/src/libMars/netbase.c
deleted file mode 120000
index d9ca5bb..0000000
--- a/src/libMars/netbase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/netbase.c
\ No newline at end of file
diff --git a/src/libMars/netbase.h b/src/libMars/netbase.h
deleted file mode 120000
index 5457d36..0000000
--- a/src/libMars/netbase.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/netbase.h
\ No newline at end of file
diff --git a/src/libMars/nfdbbase.c b/src/libMars/nfdbbase.c
deleted file mode 120000
index 2852479..0000000
--- a/src/libMars/nfdbbase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/nfdbbase.c
\ No newline at end of file
diff --git a/src/libMars/nullbase.c b/src/libMars/nullbase.c
deleted file mode 120000
index 495d1e4..0000000
--- a/src/libMars/nullbase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/nullbase.c
\ No newline at end of file
diff --git a/src/libMars/odb.cc b/src/libMars/odb.cc
deleted file mode 120000
index c4988bf..0000000
--- a/src/libMars/odb.cc
+++ /dev/null
@@ -1 +0,0 @@
-MARS/odb.cc
\ No newline at end of file
diff --git a/src/libMars/odb.h b/src/libMars/odb.h
deleted file mode 120000
index 59f7f42..0000000
--- a/src/libMars/odb.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/odb.h
\ No newline at end of file
diff --git a/src/libMars/odbbase.c b/src/libMars/odbbase.c
deleted file mode 120000
index 393988d..0000000
--- a/src/libMars/odbbase.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/odbbase.c
\ No newline at end of file
diff --git a/src/libMars/options.c b/src/libMars/options.c
deleted file mode 120000
index a2279e8..0000000
--- a/src/libMars/options.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/options.c
\ No newline at end of file
diff --git a/src/libMars/pproc.c b/src/libMars/pproc.c
deleted file mode 120000
index 336ae66..0000000
--- a/src/libMars/pproc.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/pproc.c
\ No newline at end of file
diff --git a/src/libMars/proto.h b/src/libMars/proto.h
deleted file mode 120000
index 9815c5e..0000000
--- a/src/libMars/proto.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/proto.h
\ No newline at end of file
diff --git a/src/libMars/queue.c b/src/libMars/queue.c
deleted file mode 120000
index 56f3d46..0000000
--- a/src/libMars/queue.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/queue.c
\ No newline at end of file
diff --git a/src/libMars/queue.h b/src/libMars/queue.h
deleted file mode 120000
index b62092c..0000000
--- a/src/libMars/queue.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/queue.h
\ No newline at end of file
diff --git a/src/libMars/remove.c b/src/libMars/remove.c
deleted file mode 120000
index 90085c6..0000000
--- a/src/libMars/remove.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/remove.c
\ No newline at end of file
diff --git a/src/libMars/request.c b/src/libMars/request.c
deleted file mode 120000
index 6439d74..0000000
--- a/src/libMars/request.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/request.c
\ No newline at end of file
diff --git a/src/libMars/restricted.c b/src/libMars/restricted.c
deleted file mode 120000
index 3b623d0..0000000
--- a/src/libMars/restricted.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/restricted.c
\ No newline at end of file
diff --git a/src/libMars/restricted.h b/src/libMars/restricted.h
deleted file mode 120000
index fd02668..0000000
--- a/src/libMars/restricted.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/restricted.h
\ No newline at end of file
diff --git a/src/libMars/retrieve.c b/src/libMars/retrieve.c
deleted file mode 120000
index ff8b106..0000000
--- a/src/libMars/retrieve.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/retrieve.c
\ No newline at end of file
diff --git a/src/libMars/rpcmars.x b/src/libMars/rpcmars.x
deleted file mode 120000
index b82555a..0000000
--- a/src/libMars/rpcmars.x
+++ /dev/null
@@ -1 +0,0 @@
-MARS/rpcmars.x
\ No newline at end of file
diff --git a/src/libMars/schedule.c b/src/libMars/schedule.c
deleted file mode 120000
index 0e207d5..0000000
--- a/src/libMars/schedule.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/schedule.c
\ No newline at end of file
diff --git a/src/libMars/server.c b/src/libMars/server.c
deleted file mode 120000
index c647f30..0000000
--- a/src/libMars/server.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/server.c
\ No newline at end of file
diff --git a/src/libMars/service.c b/src/libMars/service.c
deleted file mode 120000
index c476085..0000000
--- a/src/libMars/service.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/service.c
\ No newline at end of file
diff --git a/src/libMars/sh2ll.c b/src/libMars/sh2ll.c
deleted file mode 120000
index 05d40cc..0000000
--- a/src/libMars/sh2ll.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/sh2ll.c
\ No newline at end of file
diff --git a/src/libMars/statistics.c b/src/libMars/statistics.c
deleted file mode 120000
index e3b6749..0000000
--- a/src/libMars/statistics.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/statistics.c
\ No newline at end of file
diff --git a/src/libMars/stream.c b/src/libMars/stream.c
deleted file mode 120000
index a134208..0000000
--- a/src/libMars/stream.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/stream.c
\ No newline at end of file
diff --git a/src/libMars/target.c b/src/libMars/target.c
deleted file mode 120000
index 5b1e6c4..0000000
--- a/src/libMars/target.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/target.c
\ No newline at end of file
diff --git a/src/libMars/tcp.c b/src/libMars/tcp.c
deleted file mode 120000
index fe377bd..0000000
--- a/src/libMars/tcp.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/tcp.c
\ No newline at end of file
diff --git a/src/libMars/time.c b/src/libMars/time.c
deleted file mode 120000
index ab2dd1e..0000000
--- a/src/libMars/time.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/time.c
\ No newline at end of file
diff --git a/src/libMars/timer.c b/src/libMars/timer.c
deleted file mode 120000
index a705ccc..0000000
--- a/src/libMars/timer.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/timer.c
\ No newline at end of file
diff --git a/src/libMars/tools.c b/src/libMars/tools.c
deleted file mode 120000
index 27ce834..0000000
--- a/src/libMars/tools.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/tools.c
\ No newline at end of file
diff --git a/src/libMars/tools.h b/src/libMars/tools.h
deleted file mode 120000
index 9dfb9ce..0000000
--- a/src/libMars/tools.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/tools.h
\ No newline at end of file
diff --git a/src/libMars/udp.c b/src/libMars/udp.c
deleted file mode 120000
index 34b79aa..0000000
--- a/src/libMars/udp.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/udp.c
\ No newline at end of file
diff --git a/src/libMars/variable.c b/src/libMars/variable.c
deleted file mode 120000
index ec40560..0000000
--- a/src/libMars/variable.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/variable.c
\ No newline at end of file
diff --git a/src/libMars/variable.h b/src/libMars/variable.h
deleted file mode 120000
index 1ef777b..0000000
--- a/src/libMars/variable.h
+++ /dev/null
@@ -1 +0,0 @@
-MARS/variable.h
\ No newline at end of file
diff --git a/src/libMars/version.c b/src/libMars/version.c
deleted file mode 120000
index 8fb03f7..0000000
--- a/src/libMars/version.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/version.c
\ No newline at end of file
diff --git a/src/libMars/wind.c b/src/libMars/wind.c
deleted file mode 120000
index f612e5c..0000000
--- a/src/libMars/wind.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/wind.c
\ No newline at end of file
diff --git a/src/libMars/xservice.c b/src/libMars/xservice.c
deleted file mode 120000
index 9d344af..0000000
--- a/src/libMars/xservice.c
+++ /dev/null
@@ -1 +0,0 @@
-MARS/xservice.c
\ No newline at end of file
diff --git a/src/libMars/MARS/account.c b/src/libMarsClient/account.c
similarity index 100%
rename from src/libMars/MARS/account.c
rename to src/libMarsClient/account.c
diff --git a/src/libMars/MARS/api.c b/src/libMarsClient/api.c
similarity index 100%
rename from src/libMars/MARS/api.c
rename to src/libMarsClient/api.c
diff --git a/src/libMars/MARS/api.h b/src/libMarsClient/api.h
similarity index 100%
rename from src/libMars/MARS/api.h
rename to src/libMarsClient/api.h
diff --git a/src/libMars/MARS/apibase.c b/src/libMarsClient/apibase.c
similarity index 99%
rename from src/libMars/MARS/apibase.c
rename to src/libMarsClient/apibase.c
index 3cea835..07bdbb7 100644
--- a/src/libMars/MARS/apibase.c
+++ b/src/libMarsClient/apibase.c
@@ -135,7 +135,7 @@ static char *APIservice(void *data, const char *name)
static char *json2string(const json_value *j)
{
static char *buf = NULL;
- file_offset n;
+ off_t n;
char *tmp = marstmp();
FILE *f = fopen(tmp,"w");
diff --git a/src/libMars/MARS/archive.c b/src/libMarsClient/archive.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/archive.c
rename to src/libMarsClient/archive.c
diff --git a/src/libMars/MARS/authenticate.c b/src/libMarsClient/authenticate.c
similarity index 100%
rename from src/libMars/MARS/authenticate.c
rename to src/libMarsClient/authenticate.c
diff --git a/src/libMars/MARS/base.c b/src/libMarsClient/base.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/base.c
rename to src/libMarsClient/base.c
diff --git a/src/libMars/MARS/base.h b/src/libMarsClient/base.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/base.h
rename to src/libMarsClient/base.h
diff --git a/src/libMars/MARS/bufr.c b/src/libMarsClient/bufr.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/bufr.c
rename to src/libMarsClient/bufr.c
diff --git a/src/libMars/MARS/bufr.h b/src/libMarsClient/bufr.h
similarity index 100%
rename from src/libMars/MARS/bufr.h
rename to src/libMarsClient/bufr.h
diff --git a/src/libMars/MARS/calc.c b/src/libMarsClient/calc.c
similarity index 100%
rename from src/libMars/MARS/calc.c
rename to src/libMarsClient/calc.c
diff --git a/src/libMars/MARS/check.c b/src/libMarsClient/check.c
similarity index 100%
rename from src/libMars/MARS/check.c
rename to src/libMarsClient/check.c
diff --git a/src/libMars/MARS/control.c b/src/libMarsClient/control.c
similarity index 100%
rename from src/libMars/MARS/control.c
rename to src/libMarsClient/control.c
diff --git a/src/libMars/MARS/control.h b/src/libMarsClient/control.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/control.h
rename to src/libMarsClient/control.h
diff --git a/src/libMars/MARS/cos.c b/src/libMarsClient/cos.c
similarity index 100%
rename from src/libMars/MARS/cos.c
rename to src/libMarsClient/cos.c
diff --git a/src/libMars/MARS/cos.h b/src/libMarsClient/cos.h
similarity index 100%
rename from src/libMars/MARS/cos.h
rename to src/libMarsClient/cos.h
diff --git a/src/libMars/MARS/dhsbase.c b/src/libMarsClient/dhsbase.c
old mode 100755
new mode 100644
similarity index 97%
rename from src/libMars/MARS/dhsbase.c
rename to src/libMarsClient/dhsbase.c
index 111f7a2..0ff11da
--- a/src/libMars/MARS/dhsbase.c
+++ b/src/libMarsClient/dhsbase.c
@@ -1,9 +1,9 @@
/*
* © Copyright 1996-2012 ECMWF.
- *
+ *
* This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ * In applying this licence, ECMWF does not waive the privileges and immunities
* granted to it by virtue of its status as an intergovernmental organisation nor
* does it submit to any jurisdiction.
*/
@@ -18,7 +18,7 @@
-#ifdef AIX
+#ifdef _AIX
#include <netdb.h>
#endif
@@ -172,7 +172,7 @@ static void dhs_init(void)
}
-/* Checks that all single values contained in request 'a'
+/* Checks that all single values contained in request 'a'
are in request 'b' */
static err fix_check(const request *grib,const request *req, int cnt)
{
@@ -233,7 +233,7 @@ static err fix_check(const request *grib,const request *req, int cnt)
const char *r = get_value(req,p,i);
#if 1
- /* This extra check needs
+ /* This extra check needs
exhaustive testing */
/* If value is provided in the request
but not in the GRIB header, fail */
@@ -242,7 +242,7 @@ static err fix_check(const request *grib,const request *req, int cnt)
marslog(LOG_EROR,"Cannot determine '%s' from GRIB header for grib %d",p,cnt);
marslog(LOG_EROR,"Grib description follows:");
print_all_requests(grib);
- return -6;
+ return -6;
}
#endif
@@ -481,8 +481,8 @@ static err init_subtype_tables(request* r,
}
else
{
- marslog(LOG_EROR,"Archiving requires only one OBSGROUP value");
- return -6;
+ marslog(LOG_EROR,"Archiving requires only one OBSGROUP value");
+ return -6;
}
return 0;
@@ -527,7 +527,7 @@ static long64 file_size(int fd)
{
long64 size = 0;
-#ifdef linux
+#ifdef __linux__
/* On Linux -m32, lseek64 doesn't work. Use fstat64 instead */
struct stat st;
if(fstat(fd,&st) == -1)
@@ -641,7 +641,7 @@ static err dhs_obs_check(dhsdata* dhs,request* original_req)
dhs->total_tosend += file_length;
}
- if(fseek(f,(file_offset)0,SEEK_SET) != 0)
+ if(fseek(f,(off_t)0,SEEK_SET) != 0)
{
marslog(LOG_EROR|LOG_PERR,"fseek(%s)",s);
e = -2;
@@ -659,7 +659,7 @@ static err dhs_obs_check(dhsdata* dhs,request* original_req)
if (keyOk)
keyOk = verify_bufr_key(buffer,length,&k);
if (keyOk)
- {
+ {
datetime obs_date;
long subtype;
const char *obsgroup = get_value(dhs->req,"OBSGROUP",0);
@@ -691,7 +691,7 @@ static err dhs_obs_check(dhsdata* dhs,request* original_req)
"If this is a valid subtype, please contact the MARS team",
subtype);
err_count++;
- }
+ }
else if (!known_subtypes[subtype])
{
marslog(LOG_EROR,"Found report %d with subtype %d which "\
@@ -711,7 +711,7 @@ static err dhs_obs_check(dhsdata* dhs,request* original_req)
/* check the message is in archive period */
/*------------------------------------------------------*/
obs_date = key_2_datetime(keyptr);
- if (obs_date < archive_period.begin ||
+ if (obs_date < archive_period.begin ||
obs_date > archive_period.end && e == 0)
{
char date[20];
@@ -850,7 +850,7 @@ static err previous_dhs_grib_check(dhsdata *dhs,request* original_req)
}
- /* If language accept multi TYPE/CLASS/..., update count_fields
+ /* If language accept multi TYPE/CLASS/..., update count_fields
and fixed_check */
count = count_fields(dhs->req);
@@ -908,7 +908,7 @@ static err previous_dhs_grib_check(dhsdata *dhs,request* original_req)
else
dhs->total_tosend += file_length;
- if(fseek(f,(file_offset)0,SEEK_SET) != 0)
+ if(fseek(f,(off_t)0,SEEK_SET) != 0)
{
marslog(LOG_EROR|LOG_PERR,"fseek(%s)",s);
e = -2;
@@ -943,7 +943,7 @@ static err previous_dhs_grib_check(dhsdata *dhs,request* original_req)
{
n = find_order(&u,g);
- if(n < 0 )
+ if(n < 0 )
{
if(field_order(dhs->req,g) >= 0)
marslog(LOG_EROR,"Grib %d in '%s' is duplicated",cnt+1,s);
@@ -952,7 +952,7 @@ static err previous_dhs_grib_check(dhsdata *dhs,request* original_req)
marslog(LOG_EROR,"MARS description for Grib %d is:",cnt+1);
print_all_requests(g);
e = -6;
- }
+ }
else if(n >= total)
{
marslog(LOG_EROR,"MARS internal error analysing grib %d",cnt+1);
@@ -1066,7 +1066,7 @@ static err dhs_odb_check(dhsdata *dhs, request* original_req)
print_all_requests(r);
marslog(LOG_EROR, "odb_compare_attributes_of_first_request: %d", e);
return e;
- }
+ }
}
}
@@ -1132,7 +1132,7 @@ static err dhs_grib_check(dhsdata *dhs,request* original_req)
buffer = reserve_mem(length);
#endif
- /* If language accept multi TYPE/CLASS/..., update count_fields
+ /* If language accept multi TYPE/CLASS/..., update count_fields
and fixed_check */
count = count_fields(dhs->req);
@@ -1186,7 +1186,7 @@ static err dhs_grib_check(dhsdata *dhs,request* original_req)
else
dhs->total_tosend += file_length;
- if(fseek(f,(file_offset)0,SEEK_SET) != 0)
+ if(fseek(f,(off_t)0,SEEK_SET) != 0)
{
marslog(LOG_EROR|LOG_PERR,"fseek(%s)",s);
e = -2;
@@ -1205,7 +1205,7 @@ static err dhs_grib_check(dhsdata *dhs,request* original_req)
if( mars.build_grib_index ) {
- file_offset here = ftell(f) + total_prev_files;
+ off_t here = ftell(f) + total_prev_files;
idx = mars_grib_index_new( here - field_length, field_length); /* we are at the ed of the message */
if( dhs->head_idx == NULL )
@@ -1226,7 +1226,7 @@ static err dhs_grib_check(dhsdata *dhs,request* original_req)
print_all_requests(g);
}
- /* If BUDG or TIDE, create request from GRIB with
+ /* If BUDG or TIDE, create request from GRIB with
original request as template */
if(mars.pseudogrib)
{
@@ -1441,7 +1441,7 @@ static err send_request(mstream* s,request *r)
{
value *v = p->values;
- if( p->values == NULL)
+ if( p->values == NULL)
marslog(LOG_EXIT,"Internal error: missing value for %s",p->name);
stream_write_string(s,p->name);
@@ -1451,7 +1451,7 @@ static err send_request(mstream* s,request *r)
stream_write_int(s,n);
v = p->values;
- while(v)
+ while(v)
{
stream_write_string(s,v->name);
v = v->next;
@@ -1498,7 +1498,7 @@ static err send_source(dhsdata *dhs)
#endif
long readbufferlen = 1024*1024*20;
char *readbuffer = NULL;
- err e = 0;
+ err e = 0;
const char *s;
int q = 0;
long64 total = 0;
@@ -1531,7 +1531,7 @@ static err send_source(dhsdata *dhs)
f = fopen(s,"r");
- if(!f)
+ if(!f)
{
marslog(LOG_EROR|LOG_PERR,"fopen(%s)",s);
e = -2;
@@ -1735,7 +1735,7 @@ static void statistics(dhsdata *dhs)
{
char* a = strcache(stream_read_string(&dhs->s));
char* b = strcache(stream_read_string(&dhs->s));
- if(a && b && log_server_statistics)
+ if(a && b && log_server_statistics)
{
marslog(LOG_DBUG,"Server statistics %s = %s",a,b);
log_statistics(a,"%s",b);
@@ -1767,7 +1767,7 @@ static err list(dhsdata* dhs)
else
f = fopen(target,"a+");
- if(!f)
+ if(!f)
{
marslog(LOG_EROR|LOG_PERR,"fopen(%s)",target);
return -2;
@@ -1806,7 +1806,7 @@ static err list(dhsdata* dhs)
e = -2;
}
- if(target && f)
+ if(target && f)
{
if(fclose(f) != 0)
{
@@ -1944,7 +1944,7 @@ static err dhs_wait(dhsdata *dhs)
if(dhs->finished)
return EOF;
- if(dhs->csoc < 0)
+ if(dhs->csoc < 0)
{
if(setjmp(env) != 0) {
marslog(LOG_WARN,"Timeout waiting for %s",dhs->host);
@@ -1990,7 +1990,7 @@ static err dhs_wait(dhsdata *dhs)
id = stream_read_ulonglong(&dhs->s);
- if(dhs->s.error)
+ if(dhs->s.error)
{
marslog(LOG_WARN,"dhs_wait: stream_read_ulonglong: got error %d",dhs->s.error);
return dhs->s.error;
@@ -2003,7 +2003,7 @@ static err dhs_wait(dhsdata *dhs)
}
code = stream_read_char(&dhs->s);
- if(dhs->s.error)
+ if(dhs->s.error)
{
marslog(LOG_WARN,"dhs_wait: stream_read_char: got error %d",dhs->s.error);
return dhs->s.error;
@@ -2027,7 +2027,7 @@ static err dhs_wait(dhsdata *dhs)
break;
/* Aknowlegde */
- case 'a':
+ case 'a':
break;
/* read source */
@@ -2094,7 +2094,7 @@ static err dhs_wait(dhsdata *dhs)
if(!f) { e = -2; }
else {
char digest[4096];
- if(fwrite(message,1,size,f) != size) { e = -2; }
+ if(fwrite(message,1,size,f) != size) { e = -2; }
if(pclose(f)) { e = -2 ; }
f = fopen(tmp,"r"); unlink(tmp);
if(!f) {e = -2; }
@@ -2145,7 +2145,7 @@ static err dhs_wait(dhsdata *dhs)
case 'y': /* retry */
dhs->finished=true;
- msg(dhs,LOG_WARN);
+ msg(dhs,LOG_WARN);
e = RETRY_ERR;
break;
@@ -2219,7 +2219,7 @@ static err dhs_wait(dhsdata *dhs)
break;
}
- socket_close(dhs->csoc);
+ socket_close(dhs->csoc);
dhs->csoc = -1;
if(e == NOERR && dhs->s.error) e = dhs->s.error;
@@ -2230,7 +2230,7 @@ static err dhs_wait(dhsdata *dhs)
if(dhs->retry_on_client) e = RETRY_ERR;
if(dhs->retry_forever_on_client) e = RETRY_FOREVER_ERR;
- return e;
+ return e;
}
@@ -2272,7 +2272,7 @@ static err dhs_send(dhsdata *dhs,request *r,request *e)
struct servent *tcpserv = getservbyport(port,"tcp");
if(tcpserv == NULL)
break;
- marslog(LOG_INFO,"port %d already defined for service '%s'",port,tcpserv->s_name);
+ marslog(LOG_INFO,"port %d already defined for service '%s'",port,tcpserv->s_name);
dhs->asoc = server_mode(&port,address);
if(dhs->asoc<0)
return -1;
@@ -2285,7 +2285,7 @@ static err dhs_send(dhsdata *dhs,request *r,request *e)
timer_start(connect_time);
dhs->csoc = call_server(dhs->host,dhs->port,dhs->retry);
timer_stop(connect_time,0);
- if(dhs->csoc<0)
+ if(dhs->csoc<0)
return -1;
@@ -2399,7 +2399,7 @@ static err dhs_open(void *data,request *r,request *e,int mode)
set_value(r,"_client_can_index_grib", "%d", mars.build_grib_index );
set_value(r,"_accept_client_notifications", "1");
- if(mars.private_key)
+ if(mars.private_key)
{
if(access(mars.private_key, R_OK) == 0)
set_value(r,"_accept_authentication_requests", "1" );
@@ -2545,7 +2545,7 @@ static err dhs_close(void *data)
if(dhs->csoc == -1 && dhs->asoc == -1 && dhs->f == NULL)
timed_dhs_wait(dhs);
- if(dhs->f)
+ if(dhs->f)
{
socket_file_close(dhs->f);
}
@@ -2637,7 +2637,7 @@ static err dhs_read(void *data,request *r,void *buffer,long *length)
else if(dhs->obs)
{
e = timed_readany(dhs->f, (char *)buffer, length, net_time);
- if(e == 0)
+ if(e == 0)
{
dhs->count++;
dhs->total_read += *length;
@@ -2654,7 +2654,7 @@ static err dhs_read(void *data,request *r,void *buffer,long *length)
if(e == 0)
{
e = timed_readany(dhs->f, (char *) buffer, length, net_time);
- if(e == 0)
+ if(e == 0)
{
dhs->count++;
dhs->total_read += *length;
@@ -2665,26 +2665,39 @@ static err dhs_read(void *data,request *r,void *buffer,long *length)
else if (dhs->odb)
{
#ifdef ODB_SUPPORT
- {
+ {
const char *target = no_quotes(mars.webmars_target ? mars.webmars_target : get_value(dhs->req, "TARGET", 0));
const char *filter = get_value(dhs->req, "FILTER", 0);
FILE *out = NULL;
if(target)
{
out = fopen(target, target_open_mode(target));
- if(! out)
+ if(! out)
{
marslog(LOG_EROR|LOG_PERR, "fopen(%s)", target);
return -2;
}
+
+ dhs->total_read = odb_filter(filter, dhs->f, out, dhs->total_toread);
+ e = fclose(out);
+ if(e == 0)
+ e = EOF;
+ /* If odb_filter fails, do not retry */
+ if(dhs->total_read == -1) {
+ e = ODB_ERROR;
+ }
+ else {
+ mars.retrieve_size += dhs->total_read;
+ if(mars.max_retrieve_size && mars.retrieve_size > mars.max_retrieve_size) {
+ marslog(LOG_EROR, "Maximum retrieve size %s reached. Please split your request.", bytename(mars.max_retrieve_size));
+ e = -2;
+ }
+ }
+ }
+ else {
+ marslog(LOG_EROR, "No target");
+ e = -2;
}
- dhs->total_read = odb_filter(filter, dhs->f, out, dhs->total_toread);
- e = fclose(out);
- if(e == 0)
- e = EOF;
- /* If odb_filter fails, do not retry */
- if(dhs->total_read == -1)
- e = ODB_ERROR;
}
#else
diff --git a/src/libMars/MARS/ecaccess.c b/src/libMarsClient/ecaccess.c
similarity index 100%
rename from src/libMars/MARS/ecaccess.c
rename to src/libMarsClient/ecaccess.c
diff --git a/src/libMars/MARS/ecaccess.h b/src/libMarsClient/ecaccess.h
similarity index 100%
rename from src/libMars/MARS/ecaccess.h
rename to src/libMarsClient/ecaccess.h
diff --git a/src/libMars/MARS/environ.c b/src/libMarsClient/environ.c
old mode 100755
new mode 100644
similarity index 99%
rename from src/libMars/MARS/environ.c
rename to src/libMarsClient/environ.c
index f85e36c..d4be594
--- a/src/libMars/MARS/environ.c
+++ b/src/libMarsClient/environ.c
@@ -244,7 +244,7 @@ request *get_environ(void)
if(env) return env;
- if(EQ(who,"bamboo"))
+ if(EQ(who,"bamboo") || EQ(who,"deploy"))
who = user("max");
if(useTest && EQ(who,"max"))
diff --git a/src/libMars/MARS/expand.c b/src/libMarsClient/expand.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/expand.c
rename to src/libMarsClient/expand.c
diff --git a/src/libMars/MARS/externf.c b/src/libMarsClient/externf.c
similarity index 100%
rename from src/libMars/MARS/externf.c
rename to src/libMarsClient/externf.c
diff --git a/src/libMars/MARS/field.c b/src/libMarsClient/field.c
similarity index 98%
rename from src/libMars/MARS/field.c
rename to src/libMarsClient/field.c
index c55f5a6..fa3192f 100644
--- a/src/libMars/MARS/field.c
+++ b/src/libMarsClient/field.c
@@ -208,7 +208,7 @@ fieldset *new_fieldset(int n)
return f;
}
-field* read_field(gribfile *file,file_offset pos,long length)
+field* read_field(gribfile *file,off_t pos,long length)
{
field *g = new_field();
@@ -822,11 +822,12 @@ fieldset *read_fieldset(const char *fname,request *filter)
fieldset *v;
FILE *f;
long i;
- file_offset offset;
+ off_t offset;
err e = 0;
long buflen = 0;
long length = 0;
char *buffer = NULL;
+ static char *read_disk_buffer = NULL;
request *r = NULL;
gribfile *file;
hypercube *h = NULL;
@@ -867,12 +868,11 @@ fieldset *read_fieldset(const char *fname,request *filter)
if(mars.readdisk_buffer > 0)
{
- if(mars.readdisk_buffer > buflen)
- marslog(LOG_WARN,"Cannot use %d bytes for setvbuf, maximum size is %ld",mars.readdisk_buffer,buflen);
- else
- {
+ if(read_disk_buffer == NULL)
+ {
+ read_disk_buffer = reserve_mem(mars.readdisk_buffer);
marslog(LOG_DBUG,"Setting I/O read buffer to %d bytes",mars.readdisk_buffer);
- if(setvbuf(f,buffer,_IOFBF,mars.readdisk_buffer))
+ if(setvbuf(f,read_disk_buffer,_IOFBF,mars.readdisk_buffer))
marslog(LOG_WARN|LOG_PERR,"setvbuf failed");
}
}
@@ -952,7 +952,7 @@ static fieldset *_request_to_fieldset(request *r)
for(i=0;i<n;i++)
{
long length = atol(get_value(r,"LENGTH",i));
- file_offset offset;
+ off_t offset;
#ifdef LARGE_FILES_SUPPORT
offset = atoll(get_value(r,"OFFSET",i));
#else
diff --git a/src/libMars/MARS/field.h b/src/libMarsClient/field.h
old mode 100755
new mode 100644
similarity index 98%
rename from src/libMars/MARS/field.h
rename to src/libMarsClient/field.h
index d1fea69..d0f6824
--- a/src/libMars/MARS/field.h
+++ b/src/libMarsClient/field.h
@@ -44,7 +44,7 @@ typedef struct field {
/* if on file */
- file_offset offset;
+ off_t offset;
size_t length;
gribfile *file;
diff --git a/src/libMars/MARS/filebase.c b/src/libMarsClient/filebase.c
similarity index 100%
rename from src/libMars/MARS/filebase.c
rename to src/libMarsClient/filebase.c
diff --git a/src/libMars/MARS/files.c b/src/libMarsClient/files.c
similarity index 100%
rename from src/libMars/MARS/files.c
rename to src/libMarsClient/files.c
diff --git a/src/libMars/MARS/flatfilebase.c b/src/libMarsClient/flatfilebase.c
old mode 100755
new mode 100644
similarity index 99%
rename from src/libMars/MARS/flatfilebase.c
rename to src/libMarsClient/flatfilebase.c
index a11c192..d846a10
--- a/src/libMars/MARS/flatfilebase.c
+++ b/src/libMarsClient/flatfilebase.c
@@ -128,7 +128,7 @@ static err readmany(struct flatfiledata *data,char* buff,long* len)
long n;
int pad = sizeof(long);
int rnd;
- file_offset pos = ftell(data->s);
+ off_t pos = ftell(data->s);
err e = 0;
*len = 0;
diff --git a/src/libMars/MARS/free.c b/src/libMarsClient/free.c
similarity index 100%
rename from src/libMars/MARS/free.c
rename to src/libMarsClient/free.c
diff --git a/src/libMars/MARS/globals.h b/src/libMarsClient/globals.h
similarity index 98%
rename from src/libMars/MARS/globals.h
rename to src/libMarsClient/globals.h
index 98ee309..0890f68 100644
--- a/src/libMars/MARS/globals.h
+++ b/src/libMarsClient/globals.h
@@ -172,6 +172,9 @@ typedef struct globals {
boolean keep_database; /* by default, webmars removes the database provided by user */
char* webmars_request_id; /* Contains the Web API id, so a request can be traced */
+ long64 max_retrieve_size; /* maximum retrieval size (0= no limit) */
+ long64 retrieve_size; /* retrieved so far */
+
} globals;
diff --git a/src/libMars/MARS/grib.c b/src/libMarsClient/grib.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/grib.c
rename to src/libMarsClient/grib.c
diff --git a/src/libMars/MARS/grib.h b/src/libMarsClient/grib.h
old mode 100755
new mode 100644
similarity index 99%
rename from src/libMars/MARS/grib.h
rename to src/libMarsClient/grib.h
index 6b54718..6bf3fd0
--- a/src/libMars/MARS/grib.h
+++ b/src/libMarsClient/grib.h
@@ -32,7 +32,7 @@
#define PSEUDO_GRIB -6
/*
-#ifdef AIX
+#ifdef _AIX
#pragma options align=twobyte
#endif
*/
@@ -866,7 +866,7 @@ typedef union gribsec2 {
#define WMO_CENTRE_ID_KNMI 245 /* KNMI */ /* THIS IS WRONG. SHOULD BE 99, De Bilt, CCCC=EHDB */
#define WMO_CENTRE_ID_IFMK 246 /* Institut fuer Meererskunde-Kiel */
-#ifdef AIX
+#ifdef _AIX
#pragma options align=reset
#endif
diff --git a/src/libMars/MARS/gribbase.c b/src/libMarsClient/gribbase.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/gribbase.c
rename to src/libMarsClient/gribbase.c
diff --git a/src/libMars/MARS/guess.c b/src/libMarsClient/guess.c
similarity index 100%
rename from src/libMars/MARS/guess.c
rename to src/libMarsClient/guess.c
diff --git a/src/libMars/MARS/handler.c b/src/libMarsClient/handler.c
similarity index 99%
rename from src/libMars/MARS/handler.c
rename to src/libMarsClient/handler.c
index 3bc477c..d6872f1 100644
--- a/src/libMars/MARS/handler.c
+++ b/src/libMarsClient/handler.c
@@ -75,6 +75,7 @@ err handle_request(request *r,void *data)
{
unset_value(r,"DATABASE");
}
+ unset_value(r,"FIELDSET");
}
if(mars.verbose)
diff --git a/src/libMars/MARS/hash.c b/src/libMarsClient/hash.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/hash.c
rename to src/libMarsClient/hash.c
diff --git a/src/libMars/MARS/hidden.c b/src/libMarsClient/hidden.c
similarity index 100%
rename from src/libMars/MARS/hidden.c
rename to src/libMarsClient/hidden.c
diff --git a/src/libMars/MARS/hypercube.c b/src/libMarsClient/hypercube.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/hypercube.c
rename to src/libMarsClient/hypercube.c
diff --git a/src/libMars/MARS/hypercube.h b/src/libMarsClient/hypercube.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/hypercube.h
rename to src/libMarsClient/hypercube.h
diff --git a/src/libMars/MARS/ibmblk.c b/src/libMarsClient/ibmblk.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/ibmblk.c
rename to src/libMarsClient/ibmblk.c
diff --git a/src/libMars/MARS/ibmblk.h b/src/libMarsClient/ibmblk.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/ibmblk.h
rename to src/libMarsClient/ibmblk.h
diff --git a/src/libMars/MARS/index.c b/src/libMarsClient/index.c
similarity index 97%
rename from src/libMars/MARS/index.c
rename to src/libMarsClient/index.c
index 57119f1..fd33ff3 100644
--- a/src/libMars/MARS/index.c
+++ b/src/libMarsClient/index.c
@@ -29,7 +29,7 @@ void mars_grib_index_add(mars_grib_index* idx, const char* name, boolean s_ok, c
idx->tail = m;
}
-mars_grib_index* mars_grib_index_new( file_offset offset, long length )
+mars_grib_index* mars_grib_index_new( off_t offset, long length )
{
mars_grib_index* idx = NEW_CLEAR( mars_grib_index );
idx->offset = offset;
diff --git a/src/libMars/MARS/index.h b/src/libMarsClient/index.h
similarity index 97%
rename from src/libMars/MARS/index.h
rename to src/libMarsClient/index.h
index 0786276..b44c1f2 100644
--- a/src/libMars/MARS/index.h
+++ b/src/libMarsClient/index.h
@@ -28,7 +28,7 @@ typedef struct mars_grib_index {
struct mars_grib_index* next;
- file_offset offset;
+ off_t offset;
long length;
mars_grib_map* head;
diff --git a/src/libMars/MARS/json.c b/src/libMarsClient/json.c
similarity index 100%
rename from src/libMars/MARS/json.c
rename to src/libMarsClient/json.c
diff --git a/src/libMars/MARS/json.h b/src/libMarsClient/json.h
similarity index 100%
rename from src/libMars/MARS/json.h
rename to src/libMarsClient/json.h
diff --git a/src/libMars/MARS/lang.h b/src/libMarsClient/lang.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/lang.h
rename to src/libMarsClient/lang.h
diff --git a/src/libMars/MARS/langl.l b/src/libMarsClient/langl.l
similarity index 100%
rename from src/libMars/MARS/langl.l
rename to src/libMarsClient/langl.l
diff --git a/src/libMars/MARS/langy.y b/src/libMarsClient/langy.y
similarity index 100%
rename from src/libMars/MARS/langy.y
rename to src/libMarsClient/langy.y
diff --git a/src/libMars/MARS/list.c b/src/libMarsClient/list.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/list.c
rename to src/libMarsClient/list.c
diff --git a/src/libMars/MARS/lock.c b/src/libMarsClient/lock.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/lock.c
rename to src/libMarsClient/lock.c
diff --git a/src/libMars/MARS/logfile.c b/src/libMarsClient/logfile.c
old mode 100755
new mode 100644
similarity index 98%
rename from src/libMars/MARS/logfile.c
rename to src/libMarsClient/logfile.c
index c8a9186..6d589b1
--- a/src/libMars/MARS/logfile.c
+++ b/src/libMarsClient/logfile.c
@@ -10,7 +10,7 @@
#include <stdio.h>
#include <stdarg.h>
-#include <malloc.h>
+//#include <malloc.h>
#include <errno.h>
#include <time.h>
#include "mars.h"
@@ -112,7 +112,7 @@ void marslog(int level,char *fmt,...)
boolean once = (boolean)((level & LOG_ONCE) == LOG_ONCE);
boolean out = (boolean)((mars.outproc == NULL||lvl == LOG_DBUG||lvl == LOG_EXIT));
- char msg[1024];
+ char msg[10240];
if(marslogf == NULL)
marslogf = stdout;
@@ -135,8 +135,8 @@ void marslog(int level,char *fmt,...)
/* if(lvl == LOG_SMS) */
if((mars.sms_label || mars.ecflow_label) && (lvl != LOG_DBUG))
{
- char buf[1024];
- char cmd[1024];
+ char buf[10240];
+ char cmd[10240];
if(!mars.sms_label && !mars.ecflow_label)
return;
@@ -207,7 +207,7 @@ void marslog(int level,char *fmt,...)
if(!out)
{
- char buf[1024];
+ char buf[10240];
va_start(list,fmt);
vsprintf(buf, fmt, list);
va_end(list);
@@ -234,7 +234,7 @@ void marslog(int level,char *fmt,...)
level &= ~LOG_PERR;
if(level == LOG_EXIT || level == LOG_EROR)
{
- char buf[1024];
+ char buf[10240];
va_start(list,fmt);
vsprintf(buf, fmt, list);
va_end(list);
diff --git a/src/libMars/MARS/mars.h b/src/libMarsClient/mars.h
old mode 100755
new mode 100644
similarity index 94%
rename from src/libMars/MARS/mars.h
rename to src/libMarsClient/mars.h
index 50e690d..8c7b545
--- a/src/libMars/MARS/mars.h
+++ b/src/libMarsClient/mars.h
@@ -1,9 +1,9 @@
/*
* © Copyright 1996-2012 ECMWF.
- *
+ *
* This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ * In applying this licence, ECMWF does not waive the privileges and immunities
* granted to it by virtue of its status as an intergovernmental organisation nor
* does it submit to any jurisdiction.
*/
@@ -24,7 +24,7 @@
#define queue system_queue
#endif
-#ifdef linux
+#ifdef __linux__
#ifndef __USE_LARGEFILE64
#define __USE_LARGEFILE64
#endif
@@ -44,7 +44,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
-#include <malloc.h>
+//#include <malloc.h>
#include <unistd.h>
#include <limits.h>
#include <sys/socket.h>
@@ -61,12 +61,12 @@
#include <errno.h>
-#if !defined(linux) && !defined(CYGWIN)
+#if !defined(__linux__) && !defined(CYGWIN)
#ifdef VMS
#include <sys/perror.h>
#else
-extern char *sys_errlist[];
-extern int sys_nerr;
+//extern char *sys_errlist[];
+//extern int sys_nerr;
#endif
#endif
@@ -95,7 +95,7 @@ extern int sys_nerr;
#define C2FORT(x) _cptofcd(x,strlen(x))
#endif
-#ifdef AIX
+#ifdef _AIX
#if !defined(FORTRAN_NO_UNDERSCORE) && !defined(METVIEW)
#define FORTRAN_NO_UNDERSCORE
#endif
@@ -138,7 +138,7 @@ extern int sys_nerr;
#endif
#endif
-#ifdef linux
+#ifdef __linux__
#define LARGE_FILES_SUPPORT
# if !defined __off64_t_defined
typedef __off64_t off64_t;
@@ -147,25 +147,6 @@ typedef __off64_t off64_t;
#endif
-#ifdef LARGE_FILES_SUPPORT
-#define file_offset off64_t
-#ifdef linux
-#define fopen(a,b) (FILE*)fopen64(a,b)
-#else
-#define fopen(a,b) fopen64(a,b)
-#endif
-#define fseek(a,b,c) fseeko64(a,b,c)
-#define ftell(a) ftello64(a)
-#define fsetpos(a,b) fsetpos64(a,b,c)
-#define fgetpos(a,b) fgetpos64(a,b)
-#define lseek(a,b,c) lseek64(a,b,c)
-#define lstat(a,b) lstat64(a,b)
-#define fstat(a,b) fstat64(a,b)
-#define stat stat64
-#else
-#define file_offset off_t
-#endif
-
/*=======================================================================*/
/* Fortran types */
@@ -266,7 +247,7 @@ typedef void (*cbackproc)(void*); /* simple call back */
/* Use the macros ... */
-#define NEW(type) (type*)get_mem(sizeof(type))
+#define NEW(type) (type*)get_mem(sizeof(type))
#define NEW_CLEAR(type) (type*)get_mem_clear(sizeof(type))
#define MALLOC(size) get_mem(size)
#define NEW_ARRAY(type,cnt) (type*)get_mem((cnt)*(sizeof(type)))
@@ -332,14 +313,14 @@ typedef boolean (*namecmp)(const char *, const char *);
/* Language */
/*===========================================================================*/
-typedef void (*lookupproc)(char*,void*);
+typedef void (*lookupproc)(char*,void*);
/*===========================================================================*/
/* Networking */
/*===========================================================================*/
-typedef void (*taskproc)(int,int,void*);
-typedef void (*udpproc)(char*,int*,int,void*);
+typedef void (*taskproc)(int,int,void*);
+typedef void (*udpproc)(char*,int*,int,void*);
typedef struct udpinfo {
int soc;
@@ -475,13 +456,13 @@ enum argtype {
tnil = 131072L,
tnetcdf = 262144L,
tobject = 524288L,
- todb = 1048576L,
- ttable = 2097152L,
+ todb = 1048576L,
+ ttable = 2097152L,
/* used only for recording .. */
tinteger = 8192L,
- tboolean = 16384L,
+ tboolean = 16384L,
tany = ~0L,
@@ -542,7 +523,7 @@ typedef struct time_interval {
datetime begin;
datetime end;
-
+
} time_interval;
/*===========================================================================*/
@@ -584,6 +565,7 @@ typedef struct timer {
#define POSTPROC_ERROR -8
#define FAILED_EXPAND -9
#define ODB_ERROR -10
+#define QUOTA_ERROR -11
#define NOT_READY_ERR -42
#define TOO_SHORT_ERR -43
@@ -670,23 +652,27 @@ extern err parser(const char*,boolean);
/* xdr routines */
#if (defined(CRAY) || defined(__alpha))
-typedef void* mxdrparam;
+typedef void* mxdrparam;
typedef int (*mxdrproc)();
typedef void* msockopt;
#elif defined(sgi)
-typedef void* mxdrparam;
+typedef void* mxdrparam;
typedef int (*mxdrproc)(void*,void*,u_int);
typedef void* msockopt;
#elif defined(fujitsu)
-typedef caddr_t mxdrparam;
+typedef caddr_t mxdrparam;
typedef int (*mxdrproc)(void*,caddr_t,int);
typedef char* msockopt;
-#elif defined(linux)
+#elif (defined(__APPLE__) && defined(__MACH__)) /* To allow Metview to compile on Mac OS X */
+typedef caddr_t mxdrparam;
+typedef int (*mxdrproc)(void*,void*,int);
+typedef void* msockopt;
+#elif defined(__linux__)
typedef caddr_t mxdrparam;
typedef int (*mxdrproc)(char*,char*,int);
typedef __ptr_t msockopt;
#else
-typedef caddr_t mxdrparam;
+typedef caddr_t mxdrparam;
typedef int (*mxdrproc)(void*,caddr_t,int);
typedef void* msockopt;
#endif
@@ -698,7 +684,7 @@ typedef void* msockopt;
#define SEEK_SET 0 /* stupid codecenter */
#endif
-#ifdef AIX
+#ifdef _AIX
/* stupid ibm got it wrong ... */
#define strcasecmp casecompare
@@ -706,6 +692,7 @@ typedef void* msockopt;
#endif
+#ifdef METVIEW_MOTIF
#ifdef XtSpecificationRelease
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
@@ -715,5 +702,6 @@ void ListenToService(XtAppContext app_context,svc *s);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
-
#endif
+#endif
+
diff --git a/src/libMars/MARS/mcs.h b/src/libMarsClient/mcs.h
similarity index 100%
rename from src/libMars/MARS/mcs.h
rename to src/libMarsClient/mcs.h
diff --git a/src/libMars/MARS/memory.c b/src/libMarsClient/memory.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/memory.c
rename to src/libMarsClient/memory.c
diff --git a/src/libMars/MARS/metadata.c b/src/libMarsClient/metadata.c
similarity index 100%
rename from src/libMars/MARS/metadata.c
rename to src/libMarsClient/metadata.c
diff --git a/src/libMars/MARS/multibase.c b/src/libMarsClient/multibase.c
similarity index 100%
rename from src/libMars/MARS/multibase.c
rename to src/libMarsClient/multibase.c
diff --git a/src/libMars/MARS/netbase.c b/src/libMarsClient/netbase.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/netbase.c
rename to src/libMarsClient/netbase.c
diff --git a/src/libMars/MARS/netbase.h b/src/libMarsClient/netbase.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/netbase.h
rename to src/libMarsClient/netbase.h
diff --git a/src/libMars/MARS/nfdbbase.c b/src/libMarsClient/nfdbbase.c
similarity index 99%
rename from src/libMars/MARS/nfdbbase.c
rename to src/libMarsClient/nfdbbase.c
index 68c8361..058c181 100644
--- a/src/libMars/MARS/nfdbbase.c
+++ b/src/libMarsClient/nfdbbase.c
@@ -781,8 +781,7 @@ void request_to_fdb(int ref,request *r,int y2k)
if(leg != NULL)
{
- if( atoi(leg) != 0 )
- SETVALFDB(&ref,"leg",no_quotes(leg));
+ SETVALFDB(&ref,"leg",no_quotes(leg));
}
else
{
diff --git a/src/libMars/MARS/nullbase.c b/src/libMarsClient/nullbase.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/nullbase.c
rename to src/libMarsClient/nullbase.c
diff --git a/src/libMars/MARS/odb.cc b/src/libMarsClient/odb.cc
similarity index 100%
rename from src/libMars/MARS/odb.cc
rename to src/libMarsClient/odb.cc
diff --git a/src/libMars/MARS/odb.h b/src/libMarsClient/odb.h
similarity index 100%
rename from src/libMars/MARS/odb.h
rename to src/libMarsClient/odb.h
diff --git a/src/libMars/MARS/odbbase.c b/src/libMarsClient/odbbase.c
similarity index 100%
rename from src/libMars/MARS/odbbase.c
rename to src/libMarsClient/odbbase.c
diff --git a/src/libMars/MARS/options.c b/src/libMarsClient/options.c
old mode 100755
new mode 100644
similarity index 98%
rename from src/libMars/MARS/options.c
rename to src/libMarsClient/options.c
index 7364480..4543dd3
--- a/src/libMars/MARS/options.c
+++ b/src/libMarsClient/options.c
@@ -121,7 +121,7 @@ static option mars_opts[] = {
t_int,sizeof(int),OFFSET(globals,accuracy),
"grib_missing_value","MARS_MISSING_VALUE","-missing_value",
-#ifdef linux
+#ifdef __linux__
"3.40282347E+38F",
#else
QUOTE(FLOAT_MISSING_VALUE),
@@ -306,7 +306,10 @@ SCHEDULE_FAIL | SCHEDULE_INFORM_FUTURE_CHANGE | SCHEDULE_LOG = 13
NULL,
t_str,sizeof(char*),OFFSET(globals,webmars_request_id),
-
+ NULL,"MARS_MAX_RETRIEVE_SIZE",NULL, "0",
+ t_long64,sizeof(long64),OFFSET(globals,max_retrieve_size),
+
+
};
static int ac = 0;
@@ -320,10 +323,11 @@ static char *cmdopt(const char *clss,const char *name,const char *opt,boolean is
if(!av) return NULL;
for(i=0;i<ac;i++)
- if(EQ(opt,av[i]))
+ if(EQ(opt,av[i])) {
if(isbool) return "1";
else
return av[i+1];
+ }
return NULL;
}
diff --git a/src/libMars/MARS/pproc.c b/src/libMarsClient/pproc.c
similarity index 99%
rename from src/libMars/MARS/pproc.c
rename to src/libMarsClient/pproc.c
index 236f553..0233ee8 100644
--- a/src/libMars/MARS/pproc.c
+++ b/src/libMarsClient/pproc.c
@@ -26,7 +26,7 @@ fortint intuvp2_(char *vort_grib_in, char *div_grib_in, fortint * length_in, cha
fortint intvect2_(char *u_grib_in, char *v_grib_in, fortint *length_in, char *u_grib_out, char *v_grib_out, fortint *length_out) { return -1; }
-fortint emosnum_(fortint* a) { return *a;}
+fortint emosnum_(fortint* a) { return 1; } /* always return 1 when we don't have interpolation */
fortint ibasini_(fortint*a ) { return -1; }
int emosPrecision() { return 0; }
diff --git a/src/libMars/MARS/proto.h b/src/libMarsClient/proto.h
old mode 100755
new mode 100644
similarity index 99%
rename from src/libMars/MARS/proto.h
rename to src/libMarsClient/proto.h
index e057e0f..15ae047
--- a/src/libMars/MARS/proto.h
+++ b/src/libMarsClient/proto.h
@@ -509,7 +509,7 @@ err original_grib(char *bin, fortint *length);
/* index.c */
void mars_grib_index_add(mars_grib_index *idx, const char *name, boolean s_ok, const char *s, boolean l_ok, long l, boolean d_ok, double d);
-mars_grib_index *mars_grib_index_new(file_offset offset, long length);
+mars_grib_index *mars_grib_index_new(off_t offset, long length);
err mars_grib_index_send(mars_grib_index *idx, mstream *s);
void mars_grib_index_free(mars_grib_index *idx);
void mars_grib_index_print(mars_grib_index *idx);
@@ -690,7 +690,7 @@ void free_field(field *g);
void free_fieldset(fieldset *v);
field *new_field(void);
fieldset *new_fieldset(int n);
-field *read_field(gribfile *file, file_offset pos, long length);
+field *read_field(gribfile *file, off_t pos, long length);
err add_field(fieldset *v, field *g);
err set_field(fieldset *v, field *g, int pos);
err check_fieldset(fieldset *v, int expect);
diff --git a/src/libMars/MARS/queue.c b/src/libMarsClient/queue.c
similarity index 100%
rename from src/libMars/MARS/queue.c
rename to src/libMarsClient/queue.c
diff --git a/src/libMars/MARS/queue.h b/src/libMarsClient/queue.h
similarity index 100%
rename from src/libMars/MARS/queue.h
rename to src/libMarsClient/queue.h
diff --git a/src/libMars/MARS/remove.c b/src/libMarsClient/remove.c
similarity index 100%
rename from src/libMars/MARS/remove.c
rename to src/libMarsClient/remove.c
diff --git a/src/libMars/MARS/request.c b/src/libMarsClient/request.c
old mode 100755
new mode 100644
similarity index 99%
rename from src/libMars/MARS/request.c
rename to src/libMarsClient/request.c
index c2990ca..c139afd
--- a/src/libMars/MARS/request.c
+++ b/src/libMarsClient/request.c
@@ -2466,7 +2466,7 @@ void parameter2string(parameter *r,char *buf)
char *request2string(const request *r)
{
static char *buf = NULL;
- file_offset n;
+ off_t n;
char *tmp = marstmp();
FILE *f = fopen(tmp,"w");
diff --git a/src/libMars/MARS/restricted.c b/src/libMarsClient/restricted.c
similarity index 100%
rename from src/libMars/MARS/restricted.c
rename to src/libMarsClient/restricted.c
diff --git a/src/libMars/MARS/restricted.h b/src/libMarsClient/restricted.h
similarity index 100%
rename from src/libMars/MARS/restricted.h
rename to src/libMarsClient/restricted.h
diff --git a/src/libMars/MARS/retrieve.c b/src/libMarsClient/retrieve.c
similarity index 94%
rename from src/libMars/MARS/retrieve.c
rename to src/libMarsClient/retrieve.c
index f47e978..e001024 100644
--- a/src/libMars/MARS/retrieve.c
+++ b/src/libMarsClient/retrieve.c
@@ -1,9 +1,9 @@
/*
* © Copyright 1996-2012 ECMWF.
- *
+ *
* This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- * In applying this licence, ECMWF does not waive the privileges and immunities
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ * In applying this licence, ECMWF does not waive the privileges and immunities
* granted to it by virtue of its status as an intergovernmental organisation nor
* does it submit to any jurisdiction.
*/
@@ -64,9 +64,9 @@ request *findbase(const char *name)
if(EQ(s->name,"database"))
{
const char *p ; int i = 0;
-
+
while( (p = get_value(s,"name",i++)) && !t )
- if(strcasecmp(p,name) == 0)
+ if(strcasecmp(p,name) == 0)
t = s;
}
s = s->next;
@@ -128,7 +128,7 @@ database *openbase(request *s,request *r,const char **name,request **cache,int
}
-static err retrieve(request *r,request* setup,database *target,int *cnt,
+static err retrieve(request *r,request* setup,database *target,int *cnt,
postproc pproc)
{
request *w;
@@ -149,7 +149,7 @@ static err retrieve(request *r,request* setup,database *target,int *cnt,
static ppbuffer_t *pp = NULL;
static int nbuffers = 2;
static long buflen = 0;
- int i = 0;
+ int i = 0;
static boolean inform = true;
buflen = mars.readany_buffer_size;
@@ -166,7 +166,7 @@ static err retrieve(request *r,request* setup,database *target,int *cnt,
if(pp == NULL)
{
- pp = reserve_mem(sizeof(ppbuffer_t)*nbuffers);
+ pp = reserve_mem(sizeof(ppbuffer_t)*nbuffers);
for(i = 0; i<nbuffers; ++i)
{
pp[i].buffer=NULL;
@@ -297,12 +297,19 @@ static err retrieve(request *r,request* setup,database *target,int *cnt,
ret = database_write(target,w,pp[i].buffer,&written);
if(ret == NOERR)
(*cnt)++;
- else
+ else
done = true;
total_target += written;
+
+ mars.retrieve_size += written;
+ if(mars.max_retrieve_size && mars.retrieve_size > mars.max_retrieve_size) {
+ marslog(LOG_EROR, "Maximum retrieve size %s reached. Please split your request.", bytename(mars.max_retrieve_size));
+ ret = QUOTA_ERROR;
+ done = true;
+ }
}
}
- else
+ else
{
if(ret == BUF_TO_SMALL)
{
@@ -313,7 +320,7 @@ static err retrieve(request *r,request* setup,database *target,int *cnt,
buffer = NULL;
buflen = length;
}
-
+
done = true;
}
break;
@@ -443,10 +450,10 @@ static err visit_database(request *r,request *s,
t=get_timer(buf,NULL,true);
timer_start(t);
- do {
+ do {
*cnt = need;
marslog(LOG_DBUG,"Visiting database '%s'",dbname);
- e = retrieve(r,s,target,cnt, pproc);
+ e = retrieve(r,s,target,cnt, pproc);
if(e == RETRY_ERR)
{
if(retry<mars.maxretries)
@@ -464,7 +471,7 @@ static err visit_database(request *r,request *s,
if(e == RETRY_FOREVER_ERR)
{
- if(slp<20)
+ if(slp<20)
slp += 2;
marslog(LOG_WARN,"Sleeping %d minutes",slp);
sleep(slp*60);
@@ -531,17 +538,17 @@ err handle_retrieve(request *r,void *data)
{
/* For obs, make sure we have at least an empty file */
long length = 0;
- database_write(target,0,0,&length);
+ database_write(target,0,0,&length);
}
r->next = NULL; /* avoid sending to much on the net */
- ppinit(r,&pproc);
+ ppinit(r,&pproc);
if(bases != 0)
{
int i;
- for(i=0;i<bases;i++)
+ for(i=0;i<bases;i++)
{
const char *b = get_value(r,"DATABASE",i);
request *t = findbase(b);
@@ -554,6 +561,7 @@ err handle_retrieve(request *r,void *data)
e = visit_database(r,t,target,need,&cnt,pproc);
mars.infomissing=save;
if(e == NOERR) break;
+ if(e == QUOTA_ERROR) break;
}
}
}
@@ -568,6 +576,7 @@ err handle_retrieve(request *r,void *data)
{
e = visit_database(r,s,target,need,&cnt,pproc);
if(e == NOERR) break;
+ if(e == QUOTA_ERROR) break;
}
}
@@ -585,7 +594,7 @@ err handle_retrieve(request *r,void *data)
if(!enough(r,cnt) && (is_bufr(r) || is_odb(r)) && visited > 0)
{
e = NOERR;
- }
+ }
else if(!enough(r,cnt))
{
const char* expect = get_value(r,"EXPECT",0);
@@ -602,7 +611,7 @@ err handle_retrieve(request *r,void *data)
{
long length = 0;
marslog(LOG_WARN,"No data, but EXPECT was provided");
- database_write(target,0,0,&length);
+ database_write(target,0,0,&length);
e = 0;
}
}
diff --git a/src/libMars/MARS/rpcmars.x b/src/libMarsClient/rpcmars.x
similarity index 100%
rename from src/libMars/MARS/rpcmars.x
rename to src/libMarsClient/rpcmars.x
diff --git a/src/libMars/MARS/schedule.c b/src/libMarsClient/schedule.c
similarity index 100%
rename from src/libMars/MARS/schedule.c
rename to src/libMarsClient/schedule.c
diff --git a/src/libMars/MARS/server.c b/src/libMarsClient/server.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/server.c
rename to src/libMarsClient/server.c
diff --git a/src/libMars/MARS/service.c b/src/libMarsClient/service.c
similarity index 100%
rename from src/libMars/MARS/service.c
rename to src/libMarsClient/service.c
diff --git a/src/libMars/MARS/sh2ll.c b/src/libMarsClient/sh2ll.c
similarity index 100%
rename from src/libMars/MARS/sh2ll.c
rename to src/libMarsClient/sh2ll.c
diff --git a/src/libMars/MARS/statistics.c b/src/libMarsClient/statistics.c
similarity index 100%
rename from src/libMars/MARS/statistics.c
rename to src/libMarsClient/statistics.c
diff --git a/src/libMars/MARS/stream.c b/src/libMarsClient/stream.c
similarity index 100%
rename from src/libMars/MARS/stream.c
rename to src/libMarsClient/stream.c
diff --git a/src/libMars/MARS/target.c b/src/libMarsClient/target.c
similarity index 99%
rename from src/libMars/MARS/target.c
rename to src/libMarsClient/target.c
index 3fb26c4..4995b0f 100644
--- a/src/libMars/MARS/target.c
+++ b/src/libMarsClient/target.c
@@ -32,7 +32,7 @@ typedef struct targetfile {
FILE *file;
char *name;
char* key;
- file_offset start;
+ off_t start;
char *buffer;
@@ -212,7 +212,7 @@ static targetfile* open_file(targetdata *g,const char *name,int* error)
{
check_nfs_target(name);
- fseek(f->file,(file_offset)0,SEEK_END);
+ fseek(f->file,(off_t)0,SEEK_END);
f->start = ftell(f->file);
}
@@ -697,7 +697,7 @@ static err target_write(void *data,request *r,void *buffer,long *length)
{
long len = *length;
targetdata *g = (targetdata*)data;
- file_offset pos;
+ off_t pos;
if(select_file(g,r,1,buffer,*length) != 0)
return -2;
diff --git a/src/libMars/MARS/tcp.c b/src/libMarsClient/tcp.c
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/tcp.c
rename to src/libMarsClient/tcp.c
diff --git a/src/libMars/MARS/time.c b/src/libMarsClient/time.c
similarity index 100%
rename from src/libMars/MARS/time.c
rename to src/libMarsClient/time.c
diff --git a/src/libMars/MARS/timer.c b/src/libMarsClient/timer.c
similarity index 100%
rename from src/libMars/MARS/timer.c
rename to src/libMarsClient/timer.c
diff --git a/src/libMars/MARS/tools.c b/src/libMarsClient/tools.c
old mode 100755
new mode 100644
similarity index 99%
rename from src/libMars/MARS/tools.c
rename to src/libMarsClient/tools.c
index ad467d6..75f5bd7
--- a/src/libMars/MARS/tools.c
+++ b/src/libMarsClient/tools.c
@@ -57,7 +57,7 @@
#include <sys/resource.h>
-#if !defined(hpux) && !defined(AIX) && !defined(linux) && !defined(CYGWIN)
+#if 0
#include <sys/procfs.h>
@@ -376,7 +376,7 @@ err mars_uncompress(void *in,void *out,long inlen,long *outlen)
const char *no_quotes(const char *in)
{
- static char buf[1024];
+ static char buf[10240];
char *p = buf;
@@ -397,7 +397,7 @@ const char *no_quotes(const char *in)
/* char *strdup(char *a) { char *p = MALLOC(strlen(a)+1);strcpy(p,a);return p;} */
#endif
-#ifdef AIX
+#ifdef _AIX
int casecompare(const char *a,const char *b)
{
char x,y;
@@ -1078,7 +1078,7 @@ const char *lowcase(const char *p)
const char *upcase(const char *p)
{
- static char buf[1024];
+ static char buf[10240];
int i = 0;
while(*p)
{
@@ -1100,8 +1100,9 @@ static int cmpstringp(const void *p1, const void *p2)
void print_environment(FILE *f)
{
+
#if defined(__STDC__)
-#ifndef __alpha
+#if !defined( __alpha ) && !defined( __APPLE__ )
# define environ _environ
#endif
#endif
diff --git a/src/libMars/MARS/tools.h b/src/libMarsClient/tools.h
old mode 100755
new mode 100644
similarity index 100%
rename from src/libMars/MARS/tools.h
rename to src/libMarsClient/tools.h
diff --git a/src/libMars/MARS/udp.c b/src/libMarsClient/udp.c
similarity index 100%
rename from src/libMars/MARS/udp.c
rename to src/libMarsClient/udp.c
diff --git a/src/libMars/MARS/variable.c b/src/libMarsClient/variable.c
similarity index 100%
rename from src/libMars/MARS/variable.c
rename to src/libMarsClient/variable.c
diff --git a/src/libMars/MARS/variable.h b/src/libMarsClient/variable.h
similarity index 100%
rename from src/libMars/MARS/variable.h
rename to src/libMarsClient/variable.h
diff --git a/src/libMars/MARS/version.c b/src/libMarsClient/version.c
old mode 100644
new mode 100755
similarity index 88%
rename from src/libMars/MARS/version.c
rename to src/libMarsClient/version.c
index 3a3e715..0c18bcc
--- a/src/libMars/MARS/version.c
+++ b/src/libMarsClient/version.c
@@ -10,12 +10,12 @@
long marsversion() {
- static long version = 20140626;
+ static long version = 20150414;
return version;
}
long marsemoscycle() {
- static long emoscycle = 395;
+ static long emoscycle = 401;
return emoscycle;
}
@@ -29,7 +29,7 @@ const char *marssourcebranch() {
}
long marsgribapi() {
- static long version = 20140624;
+ static long version = 20150320;
return version;
}
diff --git a/src/libMars/MARS/wind.c b/src/libMarsClient/wind.c
similarity index 100%
rename from src/libMars/MARS/wind.c
rename to src/libMarsClient/wind.c
diff --git a/src/libMars/MARS/xservice.c b/src/libMarsClient/xservice.c
similarity index 100%
rename from src/libMars/MARS/xservice.c
rename to src/libMarsClient/xservice.c
diff --git a/src/libMetview/MvGrid.cc b/src/libMetview/MvGrid.cc
index 8d071b0..08ac51f 100644
--- a/src/libMetview/MvGrid.cc
+++ b/src/libMetview/MvGrid.cc
@@ -954,14 +954,17 @@ MvGridPoint MvLatLonGrid::nearestGridpoint( double lat_y, double lon_x )
double lat9 = lat1 + (nlat-1) * dy_; //-- ending corner
double lon9 = lon1 + (nlon-1) * dx_;
- double east = lon1 < lon9 ? lon1 : lon9; //-- scanning E->W or W->E ?
- double west = lon1 < lon9 ? lon9 : lon1;
+ double west = lon1 < lon9 ? lon1 : lon9; //-- scanning E->W or W->E ?
+ double east = lon1 < lon9 ? lon9 : lon1;
+ double eastpoint = east; // backup of this in case we change 'east'
- MvGeoBox myArea( lat1, east , lat9, west );
+ MvGeoBox myArea( lat1, west , lat9, east );
if( lon9 - lon1 + dx_ > 359.9 ) //-- extend for globe
{
myArea.set( lat1, 0, lat9, 360 );
+ west = 0;
+ east = 360;
}
if( ! myArea.isInside( lat_y, lon_x ) )
@@ -969,9 +972,9 @@ MvGridPoint MvLatLonGrid::nearestGridpoint( double lat_y, double lon_x )
return cMissingPoint; //-- outside grid area !
}
- while( lon_x < east ) //-- adjust longitude inside grid
+ while( lon_x < west ) //-- adjust longitude inside grid
lon_x += 360.0;
- while( lon_x > west )
+ while( lon_x > eastpoint + (dx_/2.0) ) //-- half a gridpoint over the eastmost point
lon_x -= 360.0;
int j = int( rint( (lat_y - lat1) / dy_ ) ); //-- nearest gridpoint
@@ -1844,8 +1847,22 @@ double MvIrregularGrid::firstLatY()
return latitudes_[ firstLatIndex_ ];
}
+//------------------------------------------------------
+double MvIrregularGrid::firstLonXInArea(int row)
+{
+ // default behaviour, unless overridden, is to return the first
+ // longitude from the GRIB header
+ return firstLonX();
+}
+//------------------------------------------------------
+double MvIrregularGrid::lastLonXInArea(int row)
+{
+ // default behaviour, unless overridden, is to return the last
+ // longitude from the GRIB header
+ return lastLonX();
+}
//------------------------------------------------------
MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
@@ -1878,6 +1895,7 @@ MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
int row1 = borderRow ? row9 : row9 - 1; //-- previous row is N of pt
double lat1 = latitudes_[ row1 ];
+ int pointsInRow1 = pointsInRow(row1);
// to get the longitude interval, we need to consider the difference
// between a global grid and a sub-area grid. A global grid has its
@@ -1888,23 +1906,23 @@ MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
// a) |o o o |
// b) |o o o |
- double dataLonWidth = (globalEW_) ? 360.0 : lastLonX() - firstLonX();
- int numIntervals = (globalEW_) ? pointsInRow( row1 ) : pointsInRow( row1 ) - 1;
+ double dataLonWidth = (globalEW_) ? 360.0 : lastLonXInArea(row1) - firstLonXInArea(row1);
+ int numIntervals = (globalEW_) ? pointsInRow1 : pointsInRow1 - 1;
double dx1 = dataLonWidth / numIntervals; //-- N row increment
int firstIndex = 0; //-- => find pts on N row <= --//
for( int i=firstLatIndex_; i<row1; ++i )
firstIndex += pointsInRow( i ); //-- offset
- double firstLon = firstLonX();
- if( firstLon > lon_x ) //-- normalise acording to lon_x
+ double firstLon = firstLonXInArea(row1);//firstLonX();
+ if( globalEW_ && (firstLon > lon_x) ) //-- normalise acording to lon_x
firstLon -= 360.0;
int ix1 = int((lon_x-firstLon)/dx1); //-- column W of pt
- int ix2 = (ix1 == (pointsInRow(row1)-1) ) ? //-- column E of pt:
+ int ix2 = (ix1 == (pointsInRow1-1) ) ? //-- column E of pt:
0 : ix1 + 1; //-- first or next!
- if (ix1 > pointsInRow(row1)) //-- outside the data row?
+ if (ix1 > pointsInRow1) //-- outside the data row?
{
return cMissingPoint;
}
@@ -1921,22 +1939,30 @@ MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
double closestDistance = point.distanceInMeters( gridPoint[0].loc_ );
if( point.distanceInMeters( gridPoint[1].loc_ ) < closestDistance )
- {
+ {
closestDistance = point.distanceInMeters( gridPoint[1].loc_ );
gridPoint[0] = gridPoint[1];
- }
+ }
if( borderRow )
return gridPoint[0];
//-- => find pts on S row <= --//
- firstIndex += pointsInRow( row1 );
+ firstIndex += pointsInRow1;
+ firstLon = firstLonXInArea(row9);
+ if( globalEW_ && (firstLon > lon_x) ) //-- normalise acording to lon_x
+ firstLon -= 360.0;
+
+
- numIntervals = (globalEW_) ? pointsInRow( row9 ) : pointsInRow( row9 ) - 1;
+ int pointsInRow9 = pointsInRow(row9);
+
+ dataLonWidth = (globalEW_) ? 360.0 : lastLonXInArea(row9) - firstLonXInArea(row9);
+ numIntervals = (globalEW_) ? pointsInRow9 : pointsInRow9 - 1;
double dx9 = dataLonWidth / numIntervals; //-- S row increment
ix1 = int((lon_x-firstLon)/dx9); //-- column W of pt
- ix2 = ( ix1 == (pointsInRow(row9)-1) ) ? //-- column E of pt:
+ ix2 = ( ix1 == (pointsInRow9-1) ) ? //-- column E of pt:
0 : ix1 + 1; //-- first or next!
grid_11 = valueAt(firstIndex+ix1); //-- value in W pt
@@ -1948,13 +1974,19 @@ MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
gridPoint[3] = MvGridPoint( grid_12, lat9, lon_x9+dx9, firstIndex+ix2 );
for(int p=2; p<4; ++p ) //-- either one closer?
- {
+ {
if( point.distanceInMeters( gridPoint[p].loc_ ) < closestDistance )
{
closestDistance = point.distanceInMeters( gridPoint[p].loc_ );
gridPoint[0] = gridPoint[p];
}
- }
+ }
+
+
+ if (gridPoint[0].loc_.longitude() >= 360.0)
+ gridPoint[0].loc_.set(gridPoint[0].loc_.latitude(),
+ gridPoint[0].loc_.longitude()-360.0);
+
#if 0
cout << "Closest point: "
@@ -2000,6 +2032,7 @@ double MvIrregularGrid::interpolatePoint( double lat_y, double lon_x )
int row1 = borderRow ? row9 : row9 - 1; //-- previous row is N of pt
double lat1 = latitudes_[ row1 ];
+ int pointsInRow1 = pointsInRow(row1);
// to get the longitude interval, we need to consider the difference
// between a global grid and a sub-area grid. A global grid has its
@@ -2010,8 +2043,8 @@ double MvIrregularGrid::interpolatePoint( double lat_y, double lon_x )
// a) |o o o |
// b) |o o o |
- double dataLonWidth = (globalEW_) ? 360.0 : lastLonX() - firstLonX();
- int numIntervals = (globalEW_) ? pointsInRow( row1 ) : pointsInRow( row1 ) - 1;
+ double dataLonWidth = (globalEW_) ? 360.0 : lastLonXInArea(row1) - firstLonXInArea(row1);
+ int numIntervals = (globalEW_) ? pointsInRow1 : pointsInRow1 - 1;
double dx1 = dataLonWidth / numIntervals; //-- N row increment
@@ -2019,18 +2052,19 @@ double MvIrregularGrid::interpolatePoint( double lat_y, double lon_x )
for( int i=firstLatIndex_; i<row1; ++i )
firstIndex += pointsInRow( i ); //-- offset
- double firstLon = firstLonX();
- if( firstLon > lon_x ) //-- normalise acording to lon_x
+ double firstLon = firstLonXInArea(row1);
+ if( globalEW_ && (firstLon > lon_x) ) //-- normalise acording to lon_x
firstLon -= 360.0;
int ix1 = int((lon_x-firstLon)/dx1); //-- column W of pt
- int ix2 = (ix1 == (pointsInRow(row1)-1) ) ? //-- column E of pt:
+ int ix2 = (ix1 == (pointsInRow1-1) ) ? //-- column E of pt:
0 : ix1 + 1; //-- first or next!
- if (ix1 > pointsInRow(row1)) //-- outside the data row?
- {
- return DBL_MAX;
- }
+ if (ix1 > pointsInRow1 || //-- ix1 outside the data row?
+ (!globalEW_ && (ix2 < ix1))) //-- sub-area, and ix2 is first point?
+ {
+ return DBL_MAX;
+ }
double grid_11 = valueAt(firstIndex+ix1); //-- value in W pt
@@ -2043,22 +2077,34 @@ double MvIrregularGrid::interpolatePoint( double lat_y, double lon_x )
}
//-- interpolate on N row
double lon_x1 = firstLon + ix1*dx1;
- double w1 = (lon_x - lon_x1)/dx1;
+ double w1 = fabs((lon_x - lon_x1)/dx1);
double w2 = 1. - w1;
double val1 = w2*grid_11 + w1*grid_12;
if( borderRow )
return val1;
//-- => find pts on S row <=
- firstIndex += pointsInRow( row1 );
+ firstIndex += pointsInRow1;
+ firstLon = firstLonXInArea(row9);
+ if( globalEW_ && (firstLon > lon_x) ) //-- normalise acording to lon_x
+ firstLon -= 360.0;
+
+ int pointsInRow9 = pointsInRow(row9);
- numIntervals = (globalEW_) ? pointsInRow( row9 ) : pointsInRow( row9 ) - 1;
+ dataLonWidth = (globalEW_) ? 360.0 : lastLonXInArea(row9) - firstLonXInArea(row9);
+ numIntervals = (globalEW_) ? pointsInRow9 : pointsInRow9 - 1;
double dx9 = dataLonWidth / numIntervals; //-- S row increment
double dy = lat1 - lat9;
- ix1 = int((lon_x-firstLon)/dx9); //-- column W of pt
- ix2 = ( ix1 == (pointsInRow(row9)-1) ) ? //-- column E of pt:
- 0 : ix1 + 1; //-- first or next!
+ ix1 = int((lon_x-firstLon)/dx9); //-- column W of pt
+ ix2 = ( ix1 == (pointsInRow9-1) ) ? //-- column E of pt:
+ 0 : ix1 + 1; //-- first or next!
+
+ if (ix1 > pointsInRow9 || //-- ix1 outside the data row?
+ (!globalEW_ && (ix2 < ix1))) //-- sub-area, and ix2 is first point?
+ {
+ return DBL_MAX;
+ }
grid_11 = valueAt(firstIndex+ix1); //-- value in W pt
grid_12 = valueAt(firstIndex+ix2); //-- value in E pt
@@ -2071,7 +2117,7 @@ double MvIrregularGrid::interpolatePoint( double lat_y, double lon_x )
//-- interpolate on S row
double lon_x9 = firstLon + ix1*dx9;
- w1 = (lon_x - lon_x9)/dx9;
+ w1 = fabs((lon_x - lon_x9)/dx9);
w2 = 1. - w1;
double val2 = w2*grid_11 + w1*grid_12;
@@ -2452,7 +2498,64 @@ MvReducedGaussianGrid::MvReducedGaussianGrid( field* myfield
currentLonx_ = firstLonX();
horisPoints_ = pointsInRow( 0 );
- dx_ = ( 360.0 / horisPoints_ );
+}
+
+//------------------------------------------------------
+
+double MvReducedGaussianGrid::firstLonXInArea(int row)
+{
+ if( ! field_ )
+ return 0; //-- must be valid message
+
+ double globalFirstLonX = firstLonX();
+ double firstLonXInArea = globalFirstLonX;
+
+ // if the grid is on a sub-area then we need to scan along the current line in order to
+ // find the location of the first point
+
+ if (!globalEW_)
+ {
+ long numPts = 0;
+ long indexFirst, indexLast;
+ int globalPointsInThisRow = pointsInRow_ ? pointsInRow_[row] : 0;
+ grib_get_reduced_row(globalPointsInThisRow, firstLonX(), lastLonX(),
+ &numPts, &indexFirst,&indexLast);
+
+ firstLonXInArea = (indexFirst*360.0) / globalPointsInThisRow;
+ if (firstLonXInArea > lastLonX())
+ firstLonXInArea -= 360.0;
+ }
+
+ return firstLonXInArea;
+}
+//------------------------------------------------------
+
+double MvReducedGaussianGrid::lastLonXInArea(int row)
+{
+ if( ! field_ )
+ return 0; //-- must be valid message
+
+ double globalLastLonX = lastLonX();
+ double lastLonXInArea = globalLastLonX;
+
+ // if the grid is on a sub-area then we need to scan along the current line in order to
+ // find the location of the first point
+
+ if (!globalEW_)
+ {
+ long numPts = 0;
+ long indexFirst, indexLast;
+ int globalPointsInThisRow = pointsInRow_ ? pointsInRow_[row] : 0;
+ grib_get_reduced_row(globalPointsInThisRow, firstLonX(), lastLonX(),
+ &numPts, &indexFirst,&indexLast);
+
+ lastLonXInArea = (indexLast*360.0) / globalPointsInThisRow;
+ if (lastLonXInArea < firstLonX())
+ lastLonXInArea += 360.0;
+ }
+
+ return lastLonXInArea;
+
}
//------------------------------------------------------
@@ -2463,24 +2566,26 @@ bool MvReducedGaussianGrid::advance()
return false;
if( ++horisPointCount_ >= horisPoints_ )
- {
+ {
if( isSouthToNorthScanning_ )
- --currentLatIndex_;
+ --currentLatIndex_;
else
- ++currentLatIndex_;
+ ++currentLatIndex_;
currentLaty_ = latitudes_[ currentLatIndex_ ];
- currentLonx_ = firstLonX();
+ currentLonx_ = firstLonXInArea(currentLatIndex_-firstLatIndex_);
//horisPoints_ = field_->ksec2[ cNPtsIndexBegin + currentLatIndex_ ];
- horisPoints_ = pointsInRow( currentLatIndex_ );
- dx_ = ( 360.0 / horisPoints_ );
+ horisPoints_ = pointsInRow( currentLatIndex_-firstLatIndex_ );
+ //dx_ = ( 360.0 / horisPoints_ );
horisPointCount_ = 0;
//cout << currentIndex_ << '\t' << currentLaty_ << '\t' << horisPoints_ << endl;
- }
+ }
else
- {
+ {
currentLonx_ += dx_;
- }
+ if (fabs(currentLonx_) < 0.00001) // try to avoid imprecision around zero
+ currentLonx_ = 0.0;
+ }
return true;
}
@@ -2503,7 +2608,21 @@ int MvReducedGaussianGrid::pointsInRow( int row )
//--
//-- row: 0,1,2,...
//--
- return pointsInRow_ ? pointsInRow_[row] : 0;
+ int globalPointsInThisRow = pointsInRow_ ? pointsInRow_[row] : 0;
+ dx_ = ( 360.0 / globalPointsInThisRow );
+ if (globalEW_)
+ return globalPointsInThisRow;
+ else
+ {
+ long numPts = 0;
+ long indexFirst, indexLast;
+ grib_get_reduced_row(globalPointsInThisRow, firstLonX(), lastLonX(),
+ &numPts, &indexFirst,&indexLast);
+
+ return numPts;
+
+// return ((lastLonX() - firstLonX()) / dx_) + 1;
+ }
}
diff --git a/src/libMetview/MvGrid.h b/src/libMetview/MvGrid.h
index 0632d0d..ade7f2b 100644
--- a/src/libMetview/MvGrid.h
+++ b/src/libMetview/MvGrid.h
@@ -455,6 +455,8 @@ class MvIrregularGrid : public MvGridBase
virtual void init();
virtual double firstLonX();
virtual double firstLatY();
+ virtual double firstLonXInArea(int row);
+ virtual double lastLonXInArea(int row);
virtual MvGridPoint nearestGridpoint( double lat_y, double lon_x );
virtual double interpolatePoint( double lat_y, double lon_x );
virtual int pointsInRow( int row ) = 0;
@@ -583,6 +585,8 @@ class MvReducedGaussianGrid : public MvGaussianGridBase
MvReducedGaussianGrid( field* myfield, field_state oldState, bool memoryToBeReleased );
~MvReducedGaussianGrid(){ delete [] pointsInRow_; }
+ virtual double firstLonXInArea(int row);
+ virtual double lastLonXInArea(int row);
virtual bool advance();
virtual int pointsInRow( int row );
diff --git a/src/libMetview/MvPrepBufrPrep.cc b/src/libMetview/MvPrepBufrPrep.cc
index 36e6af5..f8e15a6 100644
--- a/src/libMetview/MvPrepBufrPrep.cc
+++ b/src/libMetview/MvPrepBufrPrep.cc
@@ -237,7 +237,7 @@ bool MvPrepBufrPrep::createDataDecodeLinks()
MvObsSetIterator iter( obsSet_ );
MvObs obs;
- while( obs = iter() ) //-- search all msgs for the required 'bufrdc' table names
+ while( (obs = iter()) ) //-- search all msgs for the required 'bufrdc' table names
{
if( obs.messageType() == 11 ) //-- skip if msg contains BUFR tables
continue;
diff --git a/src/libMetview/MvProtocol.cc b/src/libMetview/MvProtocol.cc
index 82c732f..b2508bc 100644
--- a/src/libMetview/MvProtocol.cc
+++ b/src/libMetview/MvProtocol.cc
@@ -89,6 +89,7 @@ void MvProtocol::_clear_id()
void MvProtocol::sendReplyFromInteractive(const MvRequest& answer)
{
send_reply(Id, answer);
+ _clear_id();
}
void MvProtocol::sendReply(const MvRequest& answer)
diff --git a/src/libMetview/MvService.cc b/src/libMetview/MvService.cc
index ed77ce9..d3a9c45 100644
--- a/src/libMetview/MvService.cc
+++ b/src/libMetview/MvService.cc
@@ -275,9 +275,13 @@ void MvService::_call_serve(svcid *id,request *r)
if(Id == 0) // it was redispatched
{
- _id = NULL;
- mars.outproc = NULL;
- return;
+ if(forked != -1)
+ {
+ marsexit(0);
+ }
+ //_id = NULL;
+ //mars.outproc = NULL;
+ //return;
}
diff --git a/src/libMvQtGui/MvQProfileView.cc b/src/libMvQtGui/MvQProfileView.cc
index 2d994ce..9bd5566 100644
--- a/src/libMvQtGui/MvQProfileView.cc
+++ b/src/libMvQtGui/MvQProfileView.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2015 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.
@@ -377,9 +377,10 @@ void MvQProfileItem::adjustFrame()
}
else if(fabs(valMin) > 0.0000000001 && fabs(valMin) < 1000000000.)
{
- int digits=static_cast<int>(log10(valMin));
- tickXStep_=pow(10.,digits);
- if(fabs(valMin/tickXStep_) < 3)
+ int digits=static_cast<int>(log10(fabs(valMin)));
+ tickXStep_=pow(10.,digits);
+
+ if(fabs(valMin/tickXStep_) < 3)
{
tickXStep_=pow(10.,digits-1);
}
@@ -389,14 +390,20 @@ void MvQProfileItem::adjustFrame()
tickXStep_=1;
}
+ //We need to ensure that tickXStep_ is greater than 0!!!
+ if(tickXStep_ <= 0)
+ tickXStep_=1.;
+
tickXLabelStep_=tickXStep_;
tickXLabelStepOffset_=0;
- frameXMin_=static_cast<int>((valMin-tickXStep_)/tickXStep_)*tickXStep_;
- frameXMax_=static_cast<int>((valMax+tickXStep_)/tickXStep_)*tickXStep_;
-
- xRatio_=frameRect_.width()/(frameXMax_-frameXMin_);
+ //Because tickXStep_ alwasy greater than 0 these two values will always be different!!!
+ frameXMin_=static_cast<int>((valMin-tickXStep_-tickXStep_/1000.)/tickXStep_)*tickXStep_;
+ frameXMax_=static_cast<int>((valMax+tickXStep_+tickXStep_/1000.)/tickXStep_)*tickXStep_;
+ //So this division can always be made!!!
+ xRatio_=frameRect_.width()/(frameXMax_-frameXMin_);
+
//Adjustment
if(xRatio_*tickXStep_ < textWidth)
{
diff --git a/src/libMvQtGui/MvQProfileView.h b/src/libMvQtGui/MvQProfileView.h
index 3b74820..1b366d1 100644
--- a/src/libMvQtGui/MvQProfileView.h
+++ b/src/libMvQtGui/MvQProfileView.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2015 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.
@@ -43,10 +43,10 @@ protected:
void hoverLeaveEvent(QGraphicsSceneHoverEvent *);
private:
- MvQProfileItem* prof_;
+ MvQProfileItem* prof_;
bool editable_;
float yPos_;
- QList<MvQEdgeItem *> edges_;
+ QList<MvQEdgeItem *> edges_;
QBrush brush_;
QBrush idleBrush_;
diff --git a/src/libMvQtGui/MvQService.cc b/src/libMvQtGui/MvQService.cc
index 878cd67..f887fba 100644
--- a/src/libMvQtGui/MvQService.cc
+++ b/src/libMvQtGui/MvQService.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2015 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.
@@ -15,6 +15,7 @@
MvQService::MvQService(const char* name) :
MvService(name)
{
+ saveToPool(false); // interactive modules are not caching data (always true?)
}
MvQService::~MvQService()
diff --git a/src/libUtil/GribMetaData.cc b/src/libUtil/GribMetaData.cc
index 3d7a54b..bd8f94f 100644
--- a/src/libUtil/GribMetaData.cc
+++ b/src/libUtil/GribMetaData.cc
@@ -431,8 +431,8 @@ void GribMvDump::read(const string& fgrib, int count)
stringstream in, cnt_s;
- vector<char*> name_space;
- name_space.push_back(0);
+ vector<std::string> name_space;
+ name_space.push_back("Default");
name_space.push_back("geography");
name_space.push_back("ls");
name_space.push_back("mars");
@@ -444,7 +444,7 @@ void GribMvDump::read(const string& fgrib, int count)
// list of blacklisted keys - these can be very expensive to compute; we can
// always put them back in if someone really really needs them...
// to be considered: minimum, maximum
- vector<string> key_blacklist;
+ vector<std::string> key_blacklist;
key_blacklist.push_back("distinctLatitudes");
key_blacklist.push_back("distinctLongitudes");
key_blacklist.push_back("distinctLatitudes");
@@ -517,7 +517,11 @@ void GribMvDump::read(const string& fgrib, int count)
for(unsigned int ns = 0 ; ns < name_space.size(); ns++)
{
//Get key iterator
- kiter=grib_keys_iterator_new(gh,key_iterator_filter_flags,name_space[ns]);
+ if (name_space[ns]!="Default")
+ kiter=grib_keys_iterator_new(gh,key_iterator_filter_flags,const_cast<char *>(name_space[ns].c_str()));
+ else
+ kiter=grib_keys_iterator_new(gh,key_iterator_filter_flags,NULL);
+
if (!kiter)
{
stringstream err_s;
@@ -547,9 +551,9 @@ void GribMvDump::read(const string& fgrib, int count)
//Add namespace prefix to the key name (e.g. mars.param)
- if(name_space[ns] != 0)
+ if(name_space[ns] != "Default")
{
- cbuff = string(name_space[ns]) + "." + cbuff;
+ cbuff = name_space[ns] + "." + cbuff;
}
//Get string value
@@ -1272,7 +1276,7 @@ void GribMetaData::getKeyList(int count,string nameSpace,list<string> &keys)
for(vector<char*>::iterator it=nameSpaceL.begin(); it != nameSpaceL.end(); it++)
{
if((*it) != 0)
- delete *it;
+ delete [] *it;
}
return;
@@ -1292,7 +1296,7 @@ void GribMetaData::getKeyList(int count,string nameSpace,list<string> &keys)
for(vector<char*>::iterator it=nameSpaceL.begin(); it != nameSpaceL.end(); it++)
{
if((*it) != 0)
- delete *it;
+ delete [] *it;
}
return;
@@ -1347,7 +1351,7 @@ void GribMetaData::getKeyList(int count,string nameSpace,list<string> &keys)
for(vector<char*>::iterator it=nameSpaceL.begin(); it != nameSpaceL.end(); it++)
{
if((*it) != 0)
- delete *it;
+ delete [] *it;
}
diff --git a/src/libUtil/MvOdb.cc b/src/libUtil/MvOdb.cc
index c79d582..b3e280f 100644
--- a/src/libUtil/MvOdb.cc
+++ b/src/libUtil/MvOdb.cc
@@ -760,8 +760,6 @@ void MvOdb::retrieveToFile(string query, string inFile,string outFile)
//cout << "Select: " << SELECT << endl;
- //ODAWriter writer(outFile);
- //ODAWriter::iterator outit = writer.begin();
odb::Writer<> writer(outFile);
odb::Writer<>::iterator outit = writer.begin();
@@ -769,8 +767,6 @@ void MvOdb::retrieveToFile(string query, string inFile,string outFile)
odb::Select::iterator it = oda.begin();
odb::Select::iterator end = oda.end();
outit->pass1(it, end);
- //it = oda.select(SELECT);
- //outit->pass2(*it);
}
bool MvOdb::toGeopoints(string outFile,string geoType)
diff --git a/src/libUtil/MvProfileData.h b/src/libUtil/MvProfileData.h
index 77739ae..6173976 100644
--- a/src/libUtil/MvProfileData.h
+++ b/src/libUtil/MvProfileData.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2015 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.
@@ -52,8 +52,10 @@ public:
enum LevelDirection {TopDown,BootmUp};
MvProfileData();
+ virtual ~MvProfileData() {};
- virtual float value(int)=0;
+ virtual float value(int)=0;
+
virtual float level(int)=0;
virtual float auxLevel(int)=0;
virtual void levels(vector<float>&)=0;
diff --git a/src/libUtil/MvScm.cc b/src/libUtil/MvScm.cc
index a73e190..26f8218 100644
--- a/src/libUtil/MvScm.cc
+++ b/src/libUtil/MvScm.cc
@@ -133,14 +133,14 @@ void MvScmProfileData::levels(vector<float>& lev)
{
if(var_->levelType() == MvScmVar::ModelLevelType)
{
- for(unsigned int i=0; i < count(); i++)
+ for(int i=0; i < count(); i++)
{
lev.push_back(i+1);
}
}
else if(var_->levelType() == MvScmVar::SoilLevelType)
{
- for(unsigned int i=0; i < count(); i++)
+ for(int i=0; i < count(); i++)
{
lev.push_back(i+1);
}
@@ -359,6 +359,27 @@ MvScmVar::~MvScmVar()
delete consistency_;
}
+const vector<float>& MvScmVar::data(int ts) const
+{
+ if(ts >=0 && ts < static_cast<int>(data_.size()))
+ return data_.at(ts);
+
+ static vector<float> emptyVec;
+ return emptyVec;
+}
+
+const vector<float>& MvScmVar::dataOri(int ts) const
+{
+ if(ts >=0 && ts < static_cast<int>(dataOri_.size()))
+ return dataOri_.at(ts);
+
+ static vector<float> emptyVec;
+ return emptyVec;
+}
+
+
+
+
string MvScmVar::units() const
{
if(unitsConverter_)
@@ -1473,8 +1494,6 @@ void MvScm::addVarToFile(NcVar *inVar,NcFile& outNc,const std::vector<NcDim*>& o
//Add values_
if(inVar->num_dims() == 0)
{
- long counts[1];
- counts[0]=1;
float vals;
inVar->get(&vals,0,0,0,0,0);
outVar->put(&vals,0,0,0,0,0);
diff --git a/src/libUtil/MvScm.h b/src/libUtil/MvScm.h
index a01f025..880d4fc 100644
--- a/src/libUtil/MvScm.h
+++ b/src/libUtil/MvScm.h
@@ -161,8 +161,8 @@ public:
string units() const;
float value(int,int);
float consistencyValue(int,int);
- const vector<float>& data(int ts) const {if(ts >=0 && ts < static_cast<int>(data_.size())) return data_.at(ts);}
- const vector<float>& dataOri(int ts) const {if(ts >=0 && ts < static_cast<int>(dataOri_.size())) return dataOri_.at(ts);}
+ const vector<float>& data(int ts) const;
+ const vector<float>& dataOri(int ts) const;
int stepNum() {return static_cast<int>(data_.size());}
int levelNum() {return (data_.size() >0)?static_cast<int>(data_.at(0).size()):0;}
bool setValue(int,int,float,MvScmProfileChange&,bool checkCons=true);
diff --git a/src/libUtil/proj_braz.cc b/src/libUtil/proj_braz.cc
index 8fb2c6e..8a1b358 100644
--- a/src/libUtil/proj_braz.cc
+++ b/src/libUtil/proj_braz.cc
@@ -1698,7 +1698,7 @@ unsigned char pInterAt(SImage *Imi, CPoint *p)
/* interpolate on row */
u = (short)(p1 * dx1 + p2 * dx + 0.5);
- v = (u >> 1) & 0x00FF | 0x0080;
+ v = ((u >> 1) & 0x00FF) | 0x0080;
return (unsigned char) v;
}
@@ -1706,7 +1706,7 @@ void pPut(SImage* Im,short lin, short col, unsigned char c)
{
unsigned char *p;
- if (lin < Im->Iny && col< Im->Inx && lin >= 0 || col >= 0)
+ if (( (lin < Im->Iny) && (col < Im->Inx) && (lin >= 0)) || col >= 0)
{
p = Im->tbuf;
p[(int) (lin*Im->Inx + col)] = c;
diff --git a/src/uPlot/BufrDecoder.h b/src/uPlot/BufrDecoder.h
index ab905d4..86c18a2 100644
--- a/src/uPlot/BufrDecoder.h
+++ b/src/uPlot/BufrDecoder.h
@@ -46,7 +46,7 @@
#include <mars.h>
#include <MvObs.h>
-#include "Decoder.h"
+#include "MvDecoder.h"
// Until something more clever, set grouping period to 6 hours.
const int GROUPINGPERIOD = 6;
diff --git a/src/uPlot/CMakeLists.txt b/src/uPlot/CMakeLists.txt
index 556ca71..5b00c64 100644
--- a/src/uPlot/CMakeLists.txt
+++ b/src/uPlot/CMakeLists.txt
@@ -2,7 +2,7 @@ set(common_srcs
AnnotationView.cc AverageView.cc BufrDecoder.cc
Canvas.cc CartesianView.cc CommonXSectView.cc
CreateAction.cc CreateTypeAction.cc
- DataBuilder.cc DataObject.cc Decoder.cc Device.cc
+ DataBuilder.cc DataObject.cc Device.cc
DrawingPriority.cc DropAction.cc
GenAppService.cc
GeopointsDecoder.cc GraphicsEngine.cc MvGribDecoder.cc
@@ -10,7 +10,7 @@ set(common_srcs
MvLayer.cc MacroConverter.cc MacroVisitor.cc
MagicsGraphicsEngine.cc MagicsTranslator.cc
MagPlusService.cc MapView.cc MatchingCriteria.cc MatchingInfo.cc
- MvIcon.cc MvIconDataBase.cc
+ MvDecoder.cc MvIcon.cc MvIconDataBase.cc
NewpageAction.cc
ObjectInfo.cc ObjectList.cc OutputFormatAction.cc
Page.cc PlotAction.cc PlotMod.cc PlotModAction.cc PlotModBuilder.cc
diff --git a/src/uPlot/CartesianView.cc b/src/uPlot/CartesianView.cc
index cbfe55c..b9ae7bd 100644
--- a/src/uPlot/CartesianView.cc
+++ b/src/uPlot/CartesianView.cc
@@ -11,7 +11,7 @@
#include "CartesianView.h"
#include "DataObject.h"
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "ObjectList.h"
#include "Page.h"
#include "PmContext.h"
diff --git a/src/uPlot/CommonXSectView.cc b/src/uPlot/CommonXSectView.cc
index e764843..20aac16 100644
--- a/src/uPlot/CommonXSectView.cc
+++ b/src/uPlot/CommonXSectView.cc
@@ -13,7 +13,7 @@
#include "CommonXSectView.h"
#include "DataObject.h"
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "ObjectList.h"
#include "PlotMod.h"
#include "PlotModTask.h"
diff --git a/src/uPlot/CreateAction.cc b/src/uPlot/CreateAction.cc
index 18df8d1..501d7dc 100644
--- a/src/uPlot/CreateAction.cc
+++ b/src/uPlot/CreateAction.cc
@@ -33,9 +33,14 @@ CreateAction::Instance()
void
CreateAction::Execute ( PmContext& context )
{
+ // Check if request has a flag indicating that it comes from the Macro module
+ MvRequest req = context.InRequest().justOneRequest();
+ if ( PlotMod::Instance().CalledFromMacro ( req ) )
+ PlotMod::Instance().CalledFromMacro (true);
+
// Build the Tree branch associated with the Request
// First, find which builder will process the request
- const char* requestName = context.InRequest().getVerb();
+ const char* requestName = req.getVerb();
const char* builderName = ObjectList::Find ("request", requestName, "builder");
PlotModBuilder& builder = PlotModBuilder::Find ( builderName );
@@ -44,9 +49,11 @@ CreateAction::Execute ( PmContext& context )
Presentable* superpage = builder.Execute ( context );
ensure (superpage != 0 );
+// This was needed to send the driver info to Magics for each newpage.
+// Now, Magics only receive the driver info once (FAMI20150514)
// Add output device to Superpage
- MvRequest deviceReq = PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
- MvRequest spReq = superpage->Request();
- spReq("_OUTPUT_DEVICES") = deviceReq;
- superpage->SetRequest(spReq);
+// MvRequest deviceReq = PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
+// MvRequest spReq = superpage->Request();
+// spReq("_OUTPUT_DEVICES") = deviceReq;
+// superpage->SetRequest(spReq);
}
diff --git a/src/uPlot/DataBuilder.cc b/src/uPlot/DataBuilder.cc
index a999660..1b85ef4 100644
--- a/src/uPlot/DataBuilder.cc
+++ b/src/uPlot/DataBuilder.cc
@@ -13,7 +13,7 @@
#include "DataBuilder.h"
#include "ObjectList.h"
#include "PmContext.h"
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "SuperPage.h"
#include "Root.h"
#include "Task.h"
diff --git a/src/uPlot/GeoView.cc b/src/uPlot/GeoView.cc
index f62a9ad..648d992 100644
--- a/src/uPlot/GeoView.cc
+++ b/src/uPlot/GeoView.cc
@@ -19,7 +19,7 @@
#include "ObjectList.h"
#include "Page.h"
#include "PmContext.h"
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "PlotMod.h"
#include "PlotModTask.h"
#include "SubPage.h"
diff --git a/src/uPlot/GeopointsDecoder.h b/src/uPlot/GeopointsDecoder.h
index 3d912c7..a055c65 100644
--- a/src/uPlot/GeopointsDecoder.h
+++ b/src/uPlot/GeopointsDecoder.h
@@ -40,7 +40,7 @@
#ifndef GeopointsDecoder_H
#define GeopointsDecoder_H
-#include "Decoder.h"
+#include "MvDecoder.h"
//#include <MvDate.h>
//#include <MvFilter.h>
//#include <MvFieldSet.h>
diff --git a/src/uPlot/MagicsTranslator.cc b/src/uPlot/MagicsTranslator.cc
index 3b1bfdd..2ea1fa3 100644
--- a/src/uPlot/MagicsTranslator.cc
+++ b/src/uPlot/MagicsTranslator.cc
@@ -44,19 +44,17 @@ SymbolTranslator symbolTranslatorInstance ( "PSYMB" );
TextTranslator textTranslatorInstance ( "PTEXT" );
TextTranslator mtextTranslatorInstance ( "MTEXT" );
ThermoTranslator mthermoTranslatorInstance ( "MTHERMO" );
-VoidTranslator input1TranslatorInstance ( "INPUT_HISTOGRAM" );
+VoidTranslator mboxplotTranslatorInstance( "MBOXPLOT" );
VoidTranslator input2TranslatorInstance ( "INPUT_XY_POINTS" );
VoidTranslator input3TranslatorInstance ( "INPUT_GEO_POINTS" );
VoidTranslator input4TranslatorInstance ( "INPUT_XY_VECTORS" );
VoidTranslator input5TranslatorInstance ( "INPUT_GEO_VECTORS" );
VoidTranslator input6TranslatorInstance ( "INPUT_XY_BINNING" );
VoidTranslator input7TranslatorInstance ( "INPUT_GEO_BINNING" );
-VoidTranslator input8TranslatorInstance ( "INPUT_XY_BOXES" );
-VoidTranslator input9TranslatorInstance ( "INPUT_GEO_BOXES" );
-VoidTranslator input10TranslatorInstance ( "INPUT_HOR_BAR" );
-VoidTranslator input11TranslatorInstance ( "INPUT_VER_BAR" );
+VoidTranslator input8TranslatorInstance ( "INPUT_XY_BOXPLOT" );
+VoidTranslator input9TranslatorInstance ( "INPUT_XY_AREA" );
VoidTranslator mcoastTranslatorInstance ( "MCOAST" );
-VoidTranslator mcontTranslatorInstance ( "MCONT" );
+MContTranslator mcontTranslatorInstance ( "MCONT" );
VoidTranslator mgraphTranslatorInstance ( "MGRAPH" );
VoidTranslator mlegendTranslatorInstance ( "MLEGEND" );
VoidTranslator msymbolTranslatorInstance ( "MSYMB" );
@@ -156,18 +154,19 @@ GribTranslator::Execute ( const MvRequest& dataUnitRequest, const MvRequest& dat
// Metview's "GRIB_SCALING_OF_RETRIEVED_FIELDS" is equivalent to Magics' "GRIB_AUTOMATIC_SCALING"
// Metview's "GRIB_SCALING_OF_DERIVED_FIELDS" is equivalent to Magics' "GRIB_AUTOMATIC_DERIVED_SCALING"
-
const char *scalingOfRetrievedFields = (const char*) expandRequest("GRIB_SCALING_OF_RETRIEVED_FIELDS");
if (scalingOfRetrievedFields)
+ {
+ magicsRequest.unsetParam("GRIB_SCALING_OF_RETRIEVED_FIELDS");
magicsRequest("GRIB_AUTOMATIC_SCALING") = scalingOfRetrievedFields;
+ }
const char *scalingOfDerivedFields = (const char*) expandRequest("GRIB_SCALING_OF_DERIVED_FIELDS");
if (scalingOfDerivedFields)
+ {
+ magicsRequest.unsetParam("GRIB_SCALING_OF_DERIVED_FIELDS");
magicsRequest("GRIB_AUTOMATIC_DERIVED_SCALING") = scalingOfDerivedFields;
-
- //ir const char *derived = dataInfoRequest("DERIVED");
- //ir //if (derived
- //ir magicsRequest ( "GRIB_AUTOMATIC_SCALING") = "OFF" ;
+ }
// Copy GRIB_* parameters
CopySomeParameters(dataInfoRequest,magicsRequest,"GRIB_");
@@ -179,7 +178,13 @@ GribTranslator::Execute ( const MvRequest& dataUnitRequest, const MvRequest& dat
magicsRequest ( "SUBPAGE_MAP_PROJECTION" ) = "INPUT_IMAGE";
}
- //magicsRequest ( "GRIB_AUTOMATIC_SCALING") = "OFF";
+ // Handle GRID_SHADDING option: this is a Magics requirement
+ if ( (const char*)expandRequest("CONTOUR_SHADE") &&
+ strcmp(expandRequest("CONTOUR_SHADE"),"ON") == 0 &&
+ (const char*)expandRequest("CONTOUR_SHADE_TECHNIQUE") &&
+ strcmp(expandRequest("CONTOUR_SHADE_TECHNIQUE"),"GRID_SHADING") == 0
+ )
+ magicsRequest("GRIB_INTERPOLATION_METHOD") = "NEAREST";
// Copy hidden parameters
magicsRequest ("_NAME" ) = (const char*)dataUnitRequest ("_NAME");
@@ -327,11 +332,35 @@ ContTranslator::Execute ( const MvRequest& visdefRequest )
}
else
{
- // Strip out the "GRIB_" the "INPUT_FIELD_SUPPRESS" parts
+ // Strip out the "GRIB_" and the "INPUT_FIELD_SUPPRESS" parts
CopyAndRemoveParameters ( visdefRequest, tmpRequest, "INPUT_FIELD_SUPPRESS" );
CopyAndRemoveParameters ( tmpRequest, magicsRequest, "GRIB_" );
}
+ // Handle GRID_SHADDING option: this is a Magics requiment.
+ if ( (const char*)magicsRequest("CONTOUR_SHADE") &&
+ strcmp(magicsRequest("CONTOUR_SHADE"),"ON") == 0 &&
+ (const char*)magicsRequest("CONTOUR_SHADE_TECHNIQUE") &&
+ strcmp(magicsRequest("CONTOUR_SHADE_TECHNIQUE"),"GRID_SHADING") == 0
+ )
+ magicsRequest("CONTOUR_METHOD") = "LINEAR";
+
+ return magicsRequest;
+}
+
+MvRequest
+MContTranslator::Execute ( const MvRequest& visdefRequest )
+{
+ MvRequest magicsRequest = visdefRequest;
+
+ // Handle GRID_SHADDING option: this is a Magics requiment.
+ if ( (const char*)magicsRequest("CONTOUR_SHADE") &&
+ strcmp(magicsRequest("CONTOUR_SHADE"),"ON") == 0 &&
+ (const char*)magicsRequest("CONTOUR_SHADE_TECHNIQUE") &&
+ strcmp(magicsRequest("CONTOUR_SHADE_TECHNIQUE"),"GRID_SHADING") == 0
+ )
+ magicsRequest("CONTOUR_METHOD") = "LINEAR";
+
return magicsRequest;
}
@@ -436,10 +465,6 @@ PageTranslator::Execute ( const MvRequest& viewRequest )
magicsRequest ( "SUBPAGE_MAP_PROJECTION" ) = "NONE";
}
- // Add overlay information
-// if ( (const char*)metviewRequest("MAP_OVERLAY_CONTROL") )
-// magicsRequest("SUBPAGE_OVERLAY_CONTROL") = (const char*)metviewRequest("MAP_OVERLAY_CONTROL");
-
return magicsRequest;
}
diff --git a/src/uPlot/MagicsTranslator.h b/src/uPlot/MagicsTranslator.h
index 8b9e78f..37adee6 100644
--- a/src/uPlot/MagicsTranslator.h
+++ b/src/uPlot/MagicsTranslator.h
@@ -159,6 +159,24 @@ public:
{ return this->Execute(req); }
};
+class MContTranslator : public MagicsTranslator
+{
+public:
+
+ // Contructors
+ MContTranslator(const Cached& actionName ):
+ MagicsTranslator ( actionName ){}
+
+ // Destructor
+ ~MContTranslator() {}
+
+ virtual MvRequest Execute ( const MvRequest& );
+ virtual MvRequest Execute ( const MvRequest& req, const MvRequest& )
+ { return this->Execute(req); }
+ virtual MvRequest Execute ( const MvRequest& req, const MvRequest&, const MvRequest& )
+ { return this->Execute(req); }
+};
+
class TextTranslator : public MagicsTranslator
{
public:
diff --git a/src/uPlot/MapView.cc b/src/uPlot/MapView.cc
index c6e280c..96d2937 100644
--- a/src/uPlot/MapView.cc
+++ b/src/uPlot/MapView.cc
@@ -22,7 +22,7 @@
#include "GraphicsEngine.h"
#include "Page.h"
#include "PmContext.h"
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "PlotMod.h"
#include "PlotModTask.h"
@@ -74,12 +74,13 @@ MapView::Name()
void
MapView::Drop ( PmContext& context )
{
- MvIconDataBase& dataBase = Owner().IconDataBase();
+ MvIconDataBase& dataBase = Owner().IconDataBase();
// Process the drop
MvRequest dropRequest;
dropRequest.copyFromCurrentTo(context.InRequest(), NEWPAGE.c_str());
MvIconList duList;
+ bool foundDU = false;
while ( dropRequest )
{
// VisDefs are processed in one single goal. This is because the
@@ -99,8 +100,8 @@ MapView::Drop ( PmContext& context )
break;
}
- MvRequest request = dropRequest.justOneRequest();
- Cached verb = request.getVerb();
+ MvRequest request = dropRequest.justOneRequest();
+ Cached verb = request.getVerb();
if ( ObjectList::IsDataUnit ( verb ) == true )
{
MvIcon dataUnit = dataBase.InsertDataUnit ( request, Owner().Id() );
@@ -108,6 +109,7 @@ MapView::Drop ( PmContext& context )
Owner().InitMatching();
DecodeDataUnit ( dataUnit );
+ foundDU = true;
dropRequest.advance();
continue;
}
@@ -117,7 +119,7 @@ MapView::Drop ( PmContext& context )
this->UpdateView ( request );
else if ( ObjectList::IsVisDefCoastlines ( verb ) )
- this->ReplaceCoastlines ( request );
+ this->ProcessCoastlines ( request, foundDU );
else if ( ObjectList::IsService ( verb,"visualise",true ) )
{
@@ -374,13 +376,28 @@ MapView::UpdateView ( MvRequest& viewRequest )
}
void
-MapView::ReplaceCoastlines ( MvRequest& coastRequest )
+MapView::ProcessCoastlines ( MvRequest& coastRequest, bool foundDU )
{
- viewRequest_ ( "COASTLINES" ) = coastRequest;
+ // Two main procedures:
+ // A) if the icon came from a Macro then keep it in the same position
+ // as defined in the Plot command
+ // B) if the icon came from a Drop then replace the one defined in
+ // the View request
+
+ // Icon from a Macro
+ if ( PlotMod::Instance().CalledFromMacro() )
+ {
+ MvIconDataBase& dataBase = Owner().IconDataBase();
+ coastRequest("_PLOTTING_ORDER") = foundDU ? "FOREGROUND" : "BACKGROUND";
+ MvIcon icon(coastRequest,true);
+ dataBase.InsertIcon( PRES_VISDEF_REL, Owner().Id(), icon, -1, false );
+ }
+ else // icon from a Drop
+ viewRequest_ ( "COASTLINES" ) = coastRequest;
- // Redraw this page
- Owner().EraseDraw();
- Owner().RedrawIfWindow();
+ // Redraw this page
+ Owner().EraseDraw();
+ Owner().RedrawIfWindow();
}
#if 0
@@ -410,6 +427,30 @@ MapView::ReplaceArea ( const Location& coordinates, int izoom)
void
MapView::DrawBackground ( )
{
+#if 1 // New code
+ // Retrieve background request
+ MvRequest backList;
+ if ( this->RetrieveBackground(backList) == 0 )
+ return; // nothing to be plotted
+
+ // Loop all requests
+ GraphicsEngine& ge = Owner().GetGraphicsEngine();
+ while ( backList )
+ {
+ // Draw the layer info
+ MvRequest req = backList.justOneRequest();
+ MvIcon icon(req,true);
+ Owner().DrawLayerInfo( icon.Id() );
+
+ // Ask the graphics engine to draw the coastlines
+ ge.Draw ( req, true );
+
+ backList.advance();
+ }
+
+ Owner().SetProjection ( viewRequest_ );
+
+#else // Old code, delete it later
bool draw = false;
string ON = "ON";
@@ -476,11 +517,36 @@ MapView::DrawBackground ( )
}
Owner().SetProjection ( viewRequest_ );
+#endif
}
void
MapView::DrawForeground ( )
{
+#if 1 // New code
+ // Retrieve foreground request
+ MvRequest foreList;
+ if ( this->RetrieveForeground(foreList) == 0 )
+ return; // nothing to be plotted
+
+ // Loop all requests
+ GraphicsEngine& ge = Owner().GetGraphicsEngine();
+ while ( foreList )
+ {
+ // Draw the layer info
+ MvRequest req = foreList.justOneRequest();
+ MvIcon icon(req,true);
+ Owner().DrawLayerInfo( icon.Id() );
+
+ // Ask the graphics engine to draw the coastlines
+ ge.Draw ( req, true );
+
+ foreList.advance();
+ }
+
+ Owner().SetProjection ( viewRequest_ ); //????
+
+#else // Old code, delete it later
bool draw = false;
string ON = "ON";
string LAST = "LAST";
@@ -561,6 +627,7 @@ MapView::DrawForeground ( )
ge.Draw ( coastRequest, true );
Owner().SetProjection ( viewRequest_ );
+#endif
}
// Describe the contents of the view
@@ -604,6 +671,103 @@ bool MapView::CallService(const MvRequest &req, PmContext &context)
}
}
+int MapView::RetrieveBackground( MvRequest& backReq )
+{
+ // Get icons from the Database first. If there is none then get the icon
+ // from the View.
+ int ncount = this->RetrieveBackForeground("BACKGROUND",backReq);
+ if ( ncount )
+ return ncount;
+
+ // Retrieve icon from the View
+ // By default, Coastline will only be plotted on the foreground, unless
+ // there is a sea/land shade to be drawn on the background
+ backReq = viewRequest_.getSubrequest ("COASTLINES");
+
+ // Account for land-sea shading defined in the View.
+ // By default, if Coastline Land Shade is ON it will be drawn on the background
+ bool draw = false;
+ const char* onoff = (const char*)backReq( "MAP_COASTLINE_LAND_SHADE" );
+ if ( onoff && strcmp(onoff,"ON") == 0 )
+ draw = true;
+
+ // By default, if Coastline Sea Shade is ON it will be drawn on the background
+ onoff = (const char*)backReq( "MAP_COASTLINE_SEA_SHADE" );
+ if ( onoff && strcmp(onoff,"ON") == 0 )
+ draw = true;
+
+ // Set Coastline to be drawn on the background
+ if ( draw )
+ {
+ // By default Boundaries, Cities and Rivers are plotted on the Foreground
+ backReq ("MAP_BOUNDARIES") = "OFF";
+ backReq ("MAP_CITIES") = "OFF";
+ backReq ("MAP_RIVERS") = "OFF";
+
+ // Unset other drawings
+ backReq ("MAP_GRID") = "OFF";
+ backReq ("MAP_LABEL") = "OFF";
+
+ return 1;
+ }
+
+ backReq.clean();
+ return 0;
+}
+
+int MapView::RetrieveForeground( MvRequest& foreReq )
+{
+ // Get icons from the Database first. If there is none then get the icon
+ // from the View.
+ int ncount = this->RetrieveBackForeground("FOREGROUND",foreReq);
+ if ( ncount )
+ return ncount;
+
+ // Retrieve icon from the View
+ foreReq = viewRequest_.getSubrequest ("COASTLINES");
+
+ // Account for land-sea shading. If they are setted to ON then
+ // they were previously drawn on the Background by default.
+ const char* onoff = (const char*)foreReq ( "MAP_COASTLINE_LAND_SHADE" );
+ if ( onoff && strcmp(onoff,"ON") == 0 )
+ foreReq ("MAP_COASTLINE_LAND_SHADE") = "OFF";
+
+ onoff = (const char*)foreReq ( "MAP_COASTLINE_SEA_SHADE" );
+ if ( onoff && strcmp(onoff,"ON") == 0 )
+ foreReq ("MAP_COASTLINE_SEA_SHADE") = "OFF";
+
+ return 1;
+}
+
+int MapView::RetrieveBackForeground( const char* stype, MvRequest& req )
+{
+ // Get icons from the database (if any)
+ req.clean();
+ MvIconDataBase& dataBase = Owner().IconDataBase();
+ MvIconList iconList;
+ if ( dataBase.RetrieveIcon ( PRES_VISDEF_REL, Owner().Id(), iconList ) == 0 )
+ return 0;
+
+ // Save the requested type icons
+ int ncount = 0;
+ MvListCursor ii;
+ for ( ii = iconList.begin(); ii != iconList.end(); ii++ )
+ {
+ MvRequest currentReq = (*ii).Request();
+ if ( ObjectList::IsVisDefBackForeground(currentReq.getVerb()) )
+ {
+ if ( (const char*)currentReq("_PLOTTING_ORDER") &&
+ (string(stype) == (const char*)currentReq("_PLOTTING_ORDER")) )
+ {
+ req = req + currentReq;
+ ncount++;
+ }
+ }
+ }
+
+ return ncount;
+}
+
#if 0
void
MapView::DescribeSubrequest ( ObjectInfo& description,
diff --git a/src/uPlot/MapView.h b/src/uPlot/MapView.h
index 1d6966b..54d17a3 100644
--- a/src/uPlot/MapView.h
+++ b/src/uPlot/MapView.h
@@ -67,7 +67,7 @@ public:
virtual void Drop ( PmContext& );
// Insert a new data request into the page hierarchy;
- virtual MvIconList InsertDataRequest ( MvRequest& dropRequest );
+ virtual MvIconList InsertDataRequest ( MvRequest& );
// Updates the current view
virtual void UpdateView ( MvRequest& viewRequest);
@@ -85,31 +85,30 @@ public:
virtual void DescribeYourself ( ObjectInfo& );
// Decode the data Unit
- virtual void DecodeDataUnit ( MvIcon& dataUnit);
+ virtual void DecodeDataUnit ( MvIcon& );
// Call an application
virtual bool CallService(const MvRequest &, PmContext &);
-// virtual Cached InputMode () { return Cached ("MAP"); }
- // Input mode is MAP
+ // Get background/foreground icons
+ int RetrieveBackground( MvRequest& );
-// virtual bool CanChangeGeography() { return true; }
- // Allow to change geography coordinates
+ int RetrieveForeground( MvRequest& );
-protected:
-
-// virtual int CheckPSymb(MvRequest&);
- // Find, and if necessary, add a psymb. Return it's id.
-// virtual void DescribeSubrequest ( ObjectInfo& description, MvRequest& request, const Cached& name, const Cached& verb);
+protected:
// Provide coastline information
- virtual void ReplaceCoastlines ( MvRequest& coastRequest );
+ virtual void ProcessCoastlines ( MvRequest& coastRequest, bool foundDU=false );
void ConvertToSatellite ( MvRequest& decoderRequest );
private:
+ // Get background/foreground icons
+ // const char* = "BACKGROUND" or "FOREGROUND"
+ int RetrieveBackForeground( const char*, MvRequest& );
+
// No assignment
MapView& operator=(const MapView&);
};
diff --git a/src/uPlot/Decoder.cc b/src/uPlot/MvDecoder.cc
similarity index 98%
rename from src/uPlot/Decoder.cc
rename to src/uPlot/MvDecoder.cc
index 66b2ee8..89504f0 100644
--- a/src/uPlot/Decoder.cc
+++ b/src/uPlot/MvDecoder.cc
@@ -13,7 +13,7 @@
//
//
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "MvGribDecoder.h"
#include "ObjectList.h"
diff --git a/src/uPlot/Decoder.h b/src/uPlot/MvDecoder.h
similarity index 99%
rename from src/uPlot/Decoder.h
rename to src/uPlot/MvDecoder.h
index b380a90..c5cf9fd 100644
--- a/src/uPlot/Decoder.h
+++ b/src/uPlot/MvDecoder.h
@@ -55,8 +55,8 @@
// by Nathan Myers, included in the "C++ Gems" book
// (see also Stroustrup, 3rd. edition, page 580ff).
//
-#ifndef Decoder_H
-#define Decoder_H
+#ifndef MvDecoder_H
+#define MvDecoder_H
#include <MvRequest.h>
#include <Factory.hpp>
diff --git a/src/uPlot/MvGribDecoder.h b/src/uPlot/MvGribDecoder.h
index f150b65..5115320 100644
--- a/src/uPlot/MvGribDecoder.h
+++ b/src/uPlot/MvGribDecoder.h
@@ -45,7 +45,7 @@
#define GribDecoder_H
#include <MvFieldSet.h>
-#include "Decoder.h"
+#include "MvDecoder.h"
class GribDecoder: public Decoder {
public:
diff --git a/src/uPlot/MvIconDataBase.cc b/src/uPlot/MvIconDataBase.cc
index 762bec9..e25b0de 100644
--- a/src/uPlot/MvIconDataBase.cc
+++ b/src/uPlot/MvIconDataBase.cc
@@ -1197,42 +1197,37 @@ bool MvIconDataBase::ExistsInRelation ( MvRelation &relation, const int firstId,
void MvIconDataBase::CreateLink (MvRequest& req)
{
- // If there is no path, do no create a link
- const char* mpath = (const char*)(req("PATH"));
- if ( mpath == 0) return;
-
- // Check if the link has to be created
- const char* createLink = (const char*)req("_CREATE_LINK");
- if ( createLink && strcmp(createLink,"NO") == 0 )
- return;
-
- string spath = (const char*)mpath;
- string slink = tempnam(getenv("METVIEW_TMPDIR"),"link");
- if ( link(spath.c_str(),slink.c_str()) != 0 )
- {
- marslog( LOG_WARN
- , (char*)"Unable to create hard link to %s, try soft link...", spath.c_str());
+ // If there is no path, do no create a link
+ const char* mpath = (const char*)(req("PATH"));
+ if ( mpath == 0) return;
- if ( symlink(spath.c_str(),slink.c_str()) != 0 ) //-- create a soft link
- {
- marslog(LOG_WARN,(char*)"MvIconDataBase::CreateLink: unable to create a link");
+ // Check if the link has to be created
+ const char* createLink = (const char*)req("_CREATE_LINK");
+ if ( createLink && strcmp(createLink,"NO") == 0 )
+ return;
- return; //-- nothing to do => bail out!
- }
+ string spath = (const char*)mpath;
+ string slink = tempnam(getenv("METVIEW_TMPDIR"),"link");
- //-- make sure that soft link is not a dangling ptr!
- if( !FileCanBeOpened( slink.c_str(), "r" ) )
- {
- marslog(LOG_WARN,(char*)"Created soft link is dangling: %s", slink.c_str());
+ if ( symlink(spath.c_str(),slink.c_str()) != 0 ) //-- create a soft link
+ {
+ marslog(LOG_WARN,(char*)"MvIconDataBase::CreateLink: unable to create a link");
- return; //-- nothing to do => bail out!
- }
- }
+ return; //-- nothing to do => bail out!
+ }
- req("PATH") = slink.c_str();
- linkList_.push_back(slink.c_str());
+ //-- make sure that soft link is not a dangling ptr!
+ if( !FileCanBeOpened( slink.c_str(), "r" ) )
+ {
+ marslog(LOG_WARN,(char*)"Created soft link is dangling: %s", slink.c_str());
- return;
+ return; //-- nothing to do => bail out!
+ }
+
+ req("PATH") = slink.c_str();
+ linkList_.push_back(slink.c_str());
+
+ return;
}
void MvIconDataBase::DeleteLink ()
diff --git a/src/uPlot/ObjectList.cc b/src/uPlot/ObjectList.cc
index 4616c31..4056ab0 100644
--- a/src/uPlot/ObjectList.cc
+++ b/src/uPlot/ObjectList.cc
@@ -872,7 +872,8 @@ ObjectList::IsService ( const char* classe, const char* action, bool context )
return true;
}
-bool ObjectList::IsDefaultValue(MvRequest &in, const char *param )
+bool
+ObjectList::IsDefaultValue(MvRequest &in, const char *param )
{
bool retVal = false;
@@ -888,3 +889,12 @@ bool ObjectList::IsDefaultValue(MvRequest &in, const char *param )
return retVal;
}
+
+bool
+ObjectList::IsVisDefBackForeground( const char* verb )
+{
+ return ( IsVisDefCoastlines(verb) ||
+ IsVisDefText(verb) ||
+ IsVisDefLegend(verb)
+ );
+}
diff --git a/src/uPlot/ObjectList.h b/src/uPlot/ObjectList.h
index 0100267..845f916 100644
--- a/src/uPlot/ObjectList.h
+++ b/src/uPlot/ObjectList.h
@@ -111,6 +111,8 @@ public:
static bool IsLayer ( const char* );
static bool AreCompanions ( const string&, const string& );
static bool CalledFromMacro ( const MvRequest& );
+ static bool IsVisDefBackForeground( const char* );
+
static Cached MacroName ( const Cached& iconClass );
static void GetCompanion ( const string&, string&, string& );
diff --git a/src/uPlot/OutputFormatAction.cc b/src/uPlot/OutputFormatAction.cc
index 6b3e973..5e75960 100644
--- a/src/uPlot/OutputFormatAction.cc
+++ b/src/uPlot/OutputFormatAction.cc
@@ -42,6 +42,7 @@ OutputFormatAction::Execute (PmContext& context)
// else //SCREEN
newreqdev ("OUTPUT_FULLNAME") = reqdev ("FILE_NAME");
+ reqdev = newreqdev;
req("OUTPUT_DEVICES") = newreqdev;
}
#endif
@@ -49,27 +50,40 @@ OutputFormatAction::Execute (PmContext& context)
// Magics requires the output filename to have an absolute path
// Hidden parameter _CWD contains the absolute path. If it is not
// given then nothing can be done
- if ( (const char*)reqdev("OUTPUT_FULLNAME") && (const char*)req("_CWD") )
+ bool flag = false;
+ while ( reqdev )
{
- string name = (const char*)reqdev("OUTPUT_FULLNAME");
- if ( !name.empty() && name[0] != '/' ) // UNIX environment
- {
- name = (string)req("_CWD") + "/" + name; // absolute path
- reqdev("OUTPUT_FULLNAME") = name.c_str();
- req("OUTPUT_DEVICES") = reqdev;
- }
+ if ( (const char*)reqdev("OUTPUT_FULLNAME") && (const char*)req("_CWD") )
+ {
+ string name = (const char*)reqdev("OUTPUT_FULLNAME");
+ if ( !name.empty() && name[0] != '/' ) // UNIX environment
+ {
+ name = (string)req("_CWD") + "/" + name; // absolute path
+ reqdev("OUTPUT_FULLNAME") = name.c_str();
+ flag = true;
+ }
+ }
+
+ // The same test for the other output name parameter
+ if ( (const char*)reqdev("OUTPUT_NAME") && (const char*)req("_CWD") )
+ {
+ string name = (const char*)reqdev("OUTPUT_NAME");
+ if ( !name.empty() && name[0] != '/' ) // UNIX environment
+ {
+ name = (string)req("_CWD") + "/" + name; // absolute path
+ reqdev("OUTPUT_NAME") = name.c_str();
+ flag = true;
+ }
+ }
+
+ reqdev.advance();
}
- // The same test for the other output name parameter
- if ( (const char*)reqdev("OUTPUT_NAME") && (const char*)req("_CWD") )
+ // Update output definition
+ if ( flag )
{
- string name = (const char*)reqdev("OUTPUT_NAME");
- if ( !name.empty() && name[0] != '/' ) // UNIX environment
- {
- name = (string)req("_CWD") + "/" + name; // absolute path
- reqdev("OUTPUT_NAME") = name.c_str();
- req("OUTPUT_DEVICES") = reqdev;
- }
+ reqdev.rewind();
+ req("OUTPUT_DEVICES") = reqdev;
}
// Save output definition
diff --git a/src/uPlot/Page.cc b/src/uPlot/Page.cc
index 7144f39..4baa35b 100644
--- a/src/uPlot/Page.cc
+++ b/src/uPlot/Page.cc
@@ -469,13 +469,20 @@ Page::InsertVisDefFromWindow (MvRequest& vdRequestList, MvIconList& duList)
MvListCursor duCursor;
if ( duList.empty() )
{
+ // Retrieve dataunit related to this Page
MvIconDataBase& dataBase = this->IconDataBase();
MvIconList oldDuList;
dataBase.RetrieveIcon (PRES_DATAUNIT_REL,Id(),oldDuList);
- // Process visdefs for each dataunit
- for ( duCursor = oldDuList.begin(); duCursor != oldDuList.end(); ++duCursor)
- InsertVisDefToDataUnit(vdRequestList,*duCursor);
+ // If there are dataunit, process visdefs for each of them.
+ // Otherwise, add visdefs to the Page
+ if ( !oldDuList.empty() )
+ {
+ for ( duCursor = oldDuList.begin(); duCursor != oldDuList.end(); ++duCursor)
+ this->InsertVisDefToDataUnit(vdRequestList,*duCursor);
+ }
+ else
+ this->InsertVisDefToPresentable(vdRequestList);
}
else
{
@@ -546,6 +553,47 @@ Page::InsertVisDefToDataUnit (MvRequest& vdRequestList, MvIcon& du )
return found;
}
+void
+Page::InsertVisDefToPresentable( MvRequest& vdRequestList )
+{
+ // Retrieve the Icon Data Base
+ MvIconDataBase& dataBase = this->IconDataBase();
+
+#if 0
+ // Remove visdefs with same TYPE
+ vdRequestList.rewind();
+ while ( vdRequestList )
+ {
+ MvRequest reqVd = vdRequestList.justOneRequest();
+ MvIconList duList;
+ if ( CheckValidVisDef( du, reqVd, duList ) )
+ {
+ MvListCursor duCursor;
+ for ( duCursor = duList.begin(); duCursor != duList.end(); ++duCursor)
+ {
+ MvIcon& theDataUnit = *( duCursor );
+ dataBase.RemoveAllVisDefsByDataUnit ( theDataUnit, &reqVd );
+ }
+
+ }
+ vdRequestList.advance();
+ }
+#endif
+
+ // Insert new VD
+ vdRequestList.rewind();
+ while ( vdRequestList )
+ {
+ MvRequest reqVd = vdRequestList.justOneRequest();
+ MvIcon icon(reqVd,true);
+ dataBase.InsertIcon( PRES_VISDEF_REL, Id(), icon, -1, false );
+
+ vdRequestList.advance();
+ }
+
+ return;
+}
+
#if 0
// Process the dropping of PTEXTS
void
diff --git a/src/uPlot/Page.h b/src/uPlot/Page.h
index 124692f..573a37a 100644
--- a/src/uPlot/Page.h
+++ b/src/uPlot/Page.h
@@ -167,6 +167,9 @@ public:
// Insert visdefs to dataunit
bool InsertVisDefToDataUnit (MvRequest&, MvIcon&);
+ // Insert visdefs to the presentable
+ void InsertVisDefToPresentable( MvRequest& );
+
// Remove icon from tree structure
virtual void RemoveIcon ( MvIcon& );
diff --git a/src/uPlot/PlotPageBuilder.cc b/src/uPlot/PlotPageBuilder.cc
index ae1b84c..8fe7a3c 100644
--- a/src/uPlot/PlotPageBuilder.cc
+++ b/src/uPlot/PlotPageBuilder.cc
@@ -45,6 +45,11 @@ PlotPageBuilder::Execute (PmContext& context)
Presentable* superpage = 0;
MvRequest defaultSuperPage;
+ // Flag to indicate that the current request was not used to build the
+ // SUPERPAGE. So it will need to be handle by the DropSimulate function.
+ // Examples of such requests are: MCOAST, MCONT, ...
+ bool skipReq = true;
+
// Build a PLOTSUPERPAGE. If the superpage structure
// already exists, only add the new page
if ( verb == PLOTSUPERPAGE )
@@ -91,7 +96,7 @@ PlotPageBuilder::Execute (PmContext& context)
// If there is a data unit, we try to build a view according to this.
// Else a default superpage with nothing in it will be built.
- else if ( ObjectList::IsDataUnit(verb) || ObjectList::IsVisDef(verb))
+ else if ( ObjectList::IsDataUnit(verb) || ObjectList::IsVisDef(verb) )
{
MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
@@ -99,12 +104,14 @@ PlotPageBuilder::Execute (PmContext& context)
if ( (const char *)viewName )
{
MvRequest viewRequest = ObjectList::CreateDefaultRequest( viewName );
-
pageRequest("VIEW") = viewRequest;
}
defaultSuperPage("PAGES") = pageRequest;
+ skipReq = false;
}
+ else
+ skipReq = false;
superpage = new SuperPage ( defaultSuperPage );
}
@@ -120,7 +127,8 @@ PlotPageBuilder::Execute (PmContext& context)
superpage->CreateReply ( reply );
context.AddToReply ( reply );
- context.Advance(); // Skip request processed above
+ if ( skipReq )
+ context.Advance(); // Skip request processed above
// Deal with further requests
superpage->DropSimulate(context);
diff --git a/src/uPlot/Presentable.cc b/src/uPlot/Presentable.cc
index cabc225..7a4fec3 100644
--- a/src/uPlot/Presentable.cc
+++ b/src/uPlot/Presentable.cc
@@ -10,7 +10,7 @@
#include "Presentable.h"
#include <Assertions.hpp>
-#include "Decoder.h"
+#include "MvDecoder.h"
#include "DrawingPriority.h"
#include "GraphicsEngine.h"
#include "MvLayer.h"
diff --git a/src/uPlot/Root.cc b/src/uPlot/Root.cc
index af2f9bd..9f412b7 100644
--- a/src/uPlot/Root.cc
+++ b/src/uPlot/Root.cc
@@ -205,7 +205,7 @@ void Root::DrawTrailer()
}
// Second request are the output devices
-// fullReq = fullReq + PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
+ fullReq = fullReq + PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
// Get children requests
MvChildIterator child;
diff --git a/src/uPlot/SimpleDecoder.h b/src/uPlot/SimpleDecoder.h
index db0a7a1..a837748 100644
--- a/src/uPlot/SimpleDecoder.h
+++ b/src/uPlot/SimpleDecoder.h
@@ -40,7 +40,7 @@
#ifndef SimpleDecoder_H
#define SimpleDecoder_H
-#include "Decoder.h"
+#include "MvDecoder.h"
class SimpleDecoder: public Decoder {
public:
diff --git a/src/uPlot/SuperPage.cc b/src/uPlot/SuperPage.cc
index 4b8eabc..20c610c 100644
--- a/src/uPlot/SuperPage.cc
+++ b/src/uPlot/SuperPage.cc
@@ -327,8 +327,10 @@ SuperPage::DrawTrailer( MvRequest& fullReq )
if ( !this->HasDrawTask () )
return;
+// This was needed to send the driver info to Magics for each newpage.
+// Now, Magics only receive the driver info once (FAMI20150514)
// Retrieve from the request the Output Device description
- fullReq = fullReq + myRequest_("_OUTPUT_DEVICES");
+// fullReq = fullReq + myRequest_("_OUTPUT_DEVICES");
// Get all requests
GetAllRequests( fullReq );
diff --git a/src/uPlot/uPlotBase.cc b/src/uPlot/uPlotBase.cc
index fcdff3b..1b68a3d 100644
--- a/src/uPlot/uPlotBase.cc
+++ b/src/uPlot/uPlotBase.cc
@@ -480,7 +480,7 @@ void uPlotBase::slotProcessDropInView(const MvQDrop& drop, QPoint pos)
}
// Build request to be sent back to source
- int pageId;
+ int pageId = 0;
istringstream sst(sPageId);
sst >> pageId;
diff --git a/src/uPlot/uPlotManager.cc b/src/uPlot/uPlotManager.cc
index 848e0b6..2f00ce9 100644
--- a/src/uPlot/uPlotManager.cc
+++ b/src/uPlot/uPlotManager.cc
@@ -100,6 +100,13 @@ int main(int argc,char **argv)
uPlotManager gv1("GRIB_VECTORS");
+ uPlotManager vd1("MCONT");
+ uPlotManager vd2("MCOAST");
+ uPlotManager vd3("MTEXT");
+ uPlotManager vd4("MLEGEND");
+ uPlotManager vd5("MGRAPH");
+ uPlotManager vd6("MSYMB");
+
// 'METVIEW 3' applications. Instantiated here due to
// backwards compatibility. Delete them later.
uPlotManager mv31("XSECTVIEW");
diff --git a/test/data/t1000_LL_1x1.grb b/test/data/t1000_LL_1x1.grb
new file mode 100644
index 0000000..96dca01
Binary files /dev/null and b/test/data/t1000_LL_1x1.grb differ
diff --git a/test/data/t1000_LL_1x1_subarea.grb b/test/data/t1000_LL_1x1_subarea.grb
new file mode 100644
index 0000000..c08d830
Binary files /dev/null and b/test/data/t1000_LL_1x1_subarea.grb differ
diff --git a/test/data/t1000_LL_2x2.grb b/test/data/t1000_LL_2x2.grb
new file mode 100644
index 0000000..de39155
Binary files /dev/null and b/test/data/t1000_LL_2x2.grb differ
diff --git a/test/macros/CMakeLists.txt b/test/macros/CMakeLists.txt
index 79ed9e9..574f895 100644
--- a/test/macros/CMakeLists.txt
+++ b/test/macros/CMakeLists.txt
@@ -29,6 +29,10 @@ if(ENABLE_PLOTTING)
RESOURCES set_output.mv ../data/z500.grb)
endif()
+metview_macro_test(MACRO grib_nearest_gridpoint.mv
+ RESOURCES ../data/t1000_LL_1x1.grb
+ ../data/t1000_LL_1x1_subarea.grb
+ ../data/t1000_LL_2x2.grb)
metview_macro_test(MACRO interpolation_sh_to_ll.mv
RESOURCES ../data/t1000_SH.grb)
@@ -39,8 +43,8 @@ metview_macro_test(MACRO interpolation_sh_to_rgg.mv
metview_macro_test(MACRO interpolation_rgg_to_ll.mv
RESOURCES ../data/t1000_SH_to_RGG_reference.grb)
-metview_macro_test(MACRO interpolation_gg_to_subarea.mv
- RESOURCES ../data/10U_GG.grb)
+#metview_macro_test(MACRO interpolation_gg_to_subarea.mv
+# RESOURCES ../data/10U_GG.grb)
metview_macro_test(MACRO bufr_obs_filter.mv
RESOURCES ../data/bufr-1.bufr ../data/bufr_obs_filter_reference.gpt)
@@ -48,6 +52,14 @@ metview_macro_test(MACRO bufr_obs_filter.mv
metview_macro_test(MACRO bufr_picker.mv
RESOURCES ../data/bufr-2.bufr ../data/bufr_picker_reference.gpt)
+metview_macro_test(MACRO inline_c.mv
+ RESOURCES ../data/z500.grb)
+
+metview_macro_test(MACRO inline_fortran.mv
+ RESOURCES ../data/z500.grb)
+
+metview_macro_test(MACRO station.mv)
+
if(ENABLE_MARS)
metview_macro_test(MACRO MarsAccess.mv
RESOURCES ../data/10U_GG.grb )
diff --git a/test/macros/grib_nearest_gridpoint.mv b/test/macros/grib_nearest_gridpoint.mv
new file mode 100644
index 0000000..f1a1068
--- /dev/null
+++ b/test/macros/grib_nearest_gridpoint.mv
@@ -0,0 +1,142 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2015 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 data file (global field)
+data = read('t1000_LL_1x1.grb')
+print('Testing global 1x1 lat/lon grid')
+numcols = 360
+numrows = 181
+lastrowindex = numcols*(numrows-1)+1
+lastpointindex = lastrowindex + numcols - 1
+
+# test a whole bunch of points, checking their locations and indexes in particular
+# lat lon reflat reflon refindex
+test_nearest_gridpoint_info(data, 90, 0, 90, 0, 1) # top row, first point
+test_nearest_gridpoint_info(data, 90, 359, 90, 359, numcols) # top row, last point
+test_nearest_gridpoint_info(data, 89, 0, 89, 0, 361)
+test_nearest_gridpoint_info(data, 89.2, 0, 89, 0, 361) # should be the same as above
+test_nearest_gridpoint_info(data, 88.7, 0, 89, 0, 361) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 0, 0, 0, 32401)
+test_nearest_gridpoint_info(data, 0, 360, 0, 0, 32401) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 359.9, 0, 0, 32401) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 359.6, 0, 0, 32401) # should be the same as above
+test_nearest_gridpoint_info(data, 0, -0.1, 0, 0, 32401) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 0.1, 0, 0, 32401) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 1, 0, 1, 32402)
+test_nearest_gridpoint_info(data, 0, -1, 0, 359, 32760)
+test_nearest_gridpoint_info(data, 0, 359, 0, 359, 32760) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 359.1, 0, 359, 32760) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 359.4, 0, 359, 32760) # should be the same as above
+test_nearest_gridpoint_info(data, -1, 0, -1, 0, 32761)
+test_nearest_gridpoint_info(data, -90, 0, -90, 0, lastrowindex) # bottom row, first point
+test_nearest_gridpoint_info(data, -90, 359, -90, 359, lastpointindex) # bottom row, last point
+
+
+
+# read the data file (sub-area field)
+data = read('t1000_LL_1x1_subarea.grb') # lat: -30 to +30, lon: -60 to +60
+print(' ')
+print('Testing subarea of 1x1 lat/lon grid')
+numcols = 121
+numrows = 61
+lastrowindex = numcols*(numrows-1)+1
+lastpointindex = lastrowindex + numcols - 1
+
+
+# test a whole bunch of points, checking their locations and indexes in particular
+# lat lon reflat reflon refindex
+test_nearest_gridpoint_info(data, 0, 75, nil, nil, nil) # out of area
+test_nearest_gridpoint_info(data, 0, -61, nil, nil, nil ) # out of area
+test_nearest_gridpoint_info(data, -31, 0, nil, nil, nil ) # out of area
+test_nearest_gridpoint_info(data, 31, 0, nil, nil, nil ) # out of area
+test_nearest_gridpoint_info(data, 30, -60, 30, -60, 1) # top row, first point
+test_nearest_gridpoint_info(data, 30, 60, 30, 60, numcols) # top row, last point
+test_nearest_gridpoint_info(data, -30, -60, -30, -60, lastrowindex) # bottom row, first point
+test_nearest_gridpoint_info(data, -30, 60, -30, 60, lastpointindex) # bottom row, last point
+test_nearest_gridpoint_info(data, -30, 59.6, -30, 60, lastpointindex) # should be the same as above
+test_nearest_gridpoint_info(data, 0, -60, 0, -60, numcols*30+1)
+test_nearest_gridpoint_info(data, 0, 0, 0, 0, numcols*30+61)
+test_nearest_gridpoint_info(data, 0.1, 0.1, 0, 0, numcols*30+61) # should be the same as above
+test_nearest_gridpoint_info(data, -0.1, -0.1, 0, 0, numcols*30+61) # should be the same as above
+
+
+
+# read the 2x2 data file (global field)
+data = read('t1000_LL_2x2.grb')
+print(' ')
+print('Testing global 2x2 lat/lon grid')
+numcols = 180
+numrows = 91
+lastrowindex = numcols*(numrows-1)+1
+lastpointindex = lastrowindex + numcols - 1
+
+# test a whole bunch of points, checking their locations and indexes in particular
+# lat lon reflat reflon refindex
+test_nearest_gridpoint_info(data, 90, 0, 90, 0, 1) # top row, first point
+test_nearest_gridpoint_info(data, 90, 358, 90, 358, numcols) # top row, last point
+test_nearest_gridpoint_info(data, 0, 0, 0, 0, 8101)
+test_nearest_gridpoint_info(data, 0, 360, 0, 0, 8101) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 359.9, 0, 0, 8101) # should be the same as above
+test_nearest_gridpoint_info(data, 0, -0.1, 0, 0, 8101) # should be the same as above
+test_nearest_gridpoint_info(data, 0, 0.1, 0, 0, 8101) # should be the same as above
+
+
+
+
+# read the data file (reduced Gaussian field)
+data = read('t1000_SH_to_RGG_reference.grb')
+print(' ')
+print('Testing reduced Gaussian grid')
+
+# test a whole bunch of points, checking their locations and indexes in particular
+# lat lon reflat reflon refindex
+test_nearest_gridpoint_info(data, 89.82, 0, 89.828, 0, 1) # top row, first point
+test_nearest_gridpoint_info(data, 89.82, 350, 89.828, 340, 18) # top row, last point
+test_nearest_gridpoint_info(data, 89.82, 351, 89.828, 0, 1) # top row, first point
+test_nearest_gridpoint_info(data, 89.82, 358, 89.828, 0, 1) # top row, first point
+test_nearest_gridpoint_info(data, -89.82, 340, -89.828, 340, 843490) # bottom row, last point
+test_nearest_gridpoint_info(data, -89.82, 0, -89.828, 0, 843490-17) # bottom row, first point
+test_nearest_gridpoint_info(data, -89.82, 355, -89.828, 0, 843490-17) # should be the same as above
+
+
+
+# ----------------------------------------------------------------------------
+# Function : test_nearest_gridpoint_info
+#
+# Description : checks whether the nearest_gridpoint function is giving
+# the expected result (supplied as arguments). It currently
+# only checks the lat, lon and index of the returned point,
+# not its value.
+# ----------------------------------------------------------------------------
+
+function test_nearest_gridpoint_info(f:fieldset, inlat, inlon, correctlat, correctlon, correctindex)
+
+ ng = nearest_gridpoint_info(f, inlat, inlon)
+ ng = ng[1]
+ print('in: ', inlat, ',', inlon, tab, ' out:', ng)
+ if (correctlat = nil and ng = nil) then
+ return
+ end if
+ if (different(ng.latitude, correctlat) or
+ different(ng.longitude, correctlon) or
+ different(ng.index, correctindex)) then
+ print("Nearest gridpoint gave incorrect result:")
+ print(ng)
+ print("Should have been : lat=", correctlat, " lon=", correctlon, " index=", correctindex)
+ fail('Stopped')
+ end if
+
+end test_nearest_gridpoint
+
+function different(v1, v2)
+ return (abs(v1-v2) > 0.01) # threshold may have to change if we use higher-res data
+end different
diff --git a/test/macros/inline_c.mv b/test/macros/inline_c.mv
new file mode 100644
index 0000000..c0960b3
--- /dev/null
+++ b/test/macros/inline_c.mv
@@ -0,0 +1,63 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2015 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 ************************************
+
+# inline 'C' function which returns the number of values in the given field.
+# Note that this is only a test - it is not necessary to use inline 'C' for
+# this - the following line of Macro code will also do it:
+# numvals = count(values(field))
+
+extern grib_test(f:fieldset) "C" inline
+#include <stdio.h>
+#include <string.h>
+#include "macro_api.h"
+
+int main()
+{
+ grib_handle* gh = NULL;
+ void* grib_id = NULL;
+
+ int fcnt = 0; /*-- field count --*/
+ int ret = 0; /*-- function return value --*/
+ size_t len = 0; /*-- number of grid point values --*/
+ double* vals = NULL; /*-- array for grid point values --*/
+
+ grib_id = mci_get_grib_id_ptr(&fcnt);
+
+ gh = mci_load_one_grib( grib_id );
+
+ grib_get_size(gh,"values",&len);
+ vals = (double*)malloc(len*sizeof(double));
+ printf("GRID size: %d\n",len);
+
+ ret = grib_get_double_array(gh,"values",vals,&len);
+
+ if( ret == GRIB_SUCCESS )
+ printf("-- got the values !!! --\n" );
+ else
+ printf(">>> grib_get_double_array returned %d\n", ret );
+
+ free(vals);
+ grib_handle_delete(gh);
+ free(grib_id);
+
+ mci_return_number(len);
+}
+end inline
+
+# -------------------------------------------------------------
+
+fs = read('z500.grb')
+r = grib_test(fs)
+print (r)
+
+if r <> 29040 then
+ fail('Inline C function failed - should have returned 29040; got ' & r)
+end if
diff --git a/test/macros/inline_fortran.mv b/test/macros/inline_fortran.mv
new file mode 100755
index 0000000..8dfc726
--- /dev/null
+++ b/test/macros/inline_fortran.mv
@@ -0,0 +1,58 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2015 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 ************************************
+
+# inline Fortran function which returns the number of values in the given field.
+# Note that this is only a test - it is not necessary to use inline Fortran for
+# this - the following line of Macro code will also do it:
+# numvals = count(values(field))
+
+extern numvals(f:fieldset) "fortran90" inline
+
+ PROGRAM NUMVALS
+ USE grib_api
+ IMPLICIT NONE
+
+ INTEGER fieldset_in, icnt
+ INTEGER grib_id, isize, istatus, i
+ INTEGER byte_size
+ REAL*8 rtotalsize
+
+ isize = 0
+ rtotalsize = 0.0
+ !-- GET FIRST ARGUMENT AS A FIELDSET.
+ !-- icnt IS THE NUMBER OF FIELDS
+ CALL mfi_get_fieldset( fieldset_in, icnt )
+
+ !-- LOOP ON FIELDS
+ DO i=1, icnt
+ !-- GET NEXT FIELD FROM INPUT FIELDSET
+ CALL mfi_load_one_grib( FIELDSET_IN, grib_id )
+ CALL grib_get_size( grib_id, 'values', isize )
+ rtotalsize = rtotalsize + isize
+
+ END DO
+ !-- RETURN THE RESULT
+ CALL mfi_return_number( rtotalsize )
+
+ STOP
+END
+
+end inline
+
+
+fs = read('z500.grb')
+r = numvals(fs)
+print (r)
+
+if r <> 29040 then
+ fail('Inline Fortran function failed - should have returned 29040; got ' & r)
+end if
+
diff --git a/test/macros/interpolation_gg_to_subarea.mv b/test/macros/interpolation_gg_to_subarea.mv
index 9985bd5..a4fa92b 100644
--- a/test/macros/interpolation_gg_to_subarea.mv
+++ b/test/macros/interpolation_gg_to_subarea.mv
@@ -29,13 +29,7 @@ expected_grid_type = 'regular_gg'
new_grid_type = grib_get_string(data_sub, 'gridType')
-using_ecregrid_flag = getenv('EC_USE_ECREGRID')
-if using_ecregrid_flag = 1 then
- interp_package = 'ecRegrid'
-else
- interp_package = 'emoslib'
-end if
-
+interp_package = 'emoslib'
if new_grid_type <> expected_grid_type then
print('Error interpolating a subarea from a regular Gaussian grid - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
diff --git a/test/macros/interpolation_rgg_to_ll.mv b/test/macros/interpolation_rgg_to_ll.mv
index 0790b52..8da8050 100644
--- a/test/macros/interpolation_rgg_to_ll.mv
+++ b/test/macros/interpolation_rgg_to_ll.mv
@@ -29,13 +29,7 @@ expected_grid_type = 'regular_ll'
new_grid_type = grib_get_string(data_ll, 'gridType')
-using_ecregrid_flag = getenv('EC_USE_ECREGRID')
-if using_ecregrid_flag = 1 then
- interp_package = 'ecRegrid'
-else
- interp_package = 'emoslib'
-end if
-
+interp_package = 'emoslib'
if new_grid_type <> expected_grid_type then
print('Error interpolating from reduced Gaussian grid to regular lat/lon - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
diff --git a/test/macros/interpolation_sh_to_ll.mv b/test/macros/interpolation_sh_to_ll.mv
index dd03c25..ccebf34 100644
--- a/test/macros/interpolation_sh_to_ll.mv
+++ b/test/macros/interpolation_sh_to_ll.mv
@@ -29,13 +29,7 @@ expected_grid_type = 'regular_ll'
new_grid_type = grib_get_string(data_ll, 'gridType')
-using_ecregrid_flag = getenv('EC_USE_ECREGRID')
-if using_ecregrid_flag = 1 then
- interp_package = 'ecRegrid'
-else
- interp_package = 'emoslib'
-end if
-
+interp_package = 'emoslib'
if new_grid_type <> expected_grid_type then
print('Error interpolating from spherical harmonics to regular lat/lon - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
diff --git a/test/macros/interpolation_sh_to_rgg.mv b/test/macros/interpolation_sh_to_rgg.mv
index 4fc5d28..01e07dc 100644
--- a/test/macros/interpolation_sh_to_rgg.mv
+++ b/test/macros/interpolation_sh_to_rgg.mv
@@ -30,13 +30,7 @@ expected_grid_type = 'reduced_gg'
new_grid_type = grib_get_string(data_rgg, 'gridType')
-using_ecregrid_flag = getenv('EC_USE_ECREGRID')
-if using_ecregrid_flag = 1 then
- interp_package = 'ecRegrid'
-else
- interp_package = 'emoslib'
-end if
-
+interp_package = 'emoslib'
if new_grid_type <> expected_grid_type then
print('Error interpolating from spherical harmonics to reduced Gaussian grid - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
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/station.mv b/test/macros/station.mv
new file mode 100755
index 0000000..83f7e39
--- /dev/null
+++ b/test/macros/station.mv
@@ -0,0 +1,36 @@
+#Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2015 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 ************************************
+
+# First test: ident does not exist
+st1 = stations(
+ search_key : "ident",
+ ident : 12344321,
+ fail_on_error : "no"
+ )
+
+if st1 <> nil then
+ fail("Should return nil because ident does not exist")
+end if
+
+# Second test: should not failure
+st = stations(
+ search_key : "ident",
+ ident : 3772, #Heathrow
+ fail_on_error : "no"
+ )
+
+if st = nil then
+ fail("Should not return nil because ident does exist")
+end if
+
+if st.LATITUDE <> 51.48 or st.LONGITUDE <> -0.45 or st.NAME <> "Heathrow" then
+ fail("The returned station is not correct: ", st)
+end if
--
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