From 30c4aa7793494bace939b8507bb05bb3fa3d7e5b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 4 Apr 2016 15:12:39 +0100 Subject: [PATCH] ECC-239: Provide missing tools: metar_get metar_filter metar_copy --- tools/CMakeLists.txt | 2 +- tools/bufr_copy.c | 33 +++--- tools/gts_copy.c | 142 ++++++++++++------------- tools/metar_copy.c | 118 +++++++++++++++++++++ tools/metar_filter.c | 141 ++++++++++++------------- tools/metar_get.c | 246 ++++++++++++------------------------------- 6 files changed, 338 insertions(+), 344 deletions(-) create mode 100644 tools/metar_copy.c diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index c3ff4c9fa..8fb91dc13 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -14,7 +14,7 @@ list( APPEND grib_tools_bins bufr_ls bufr_dump bufr_set bufr_get bufr_copy bufr_compare bufr_index_build gts_get gts_compare gts_copy gts_dump gts_filter gts_ls - metar_dump metar_ls metar_compare + metar_dump metar_ls metar_compare metar_get metar_filter metar_copy ) list( APPEND grib_tools_bins_EXTRA diff --git a/tools/bufr_copy.c b/tools/bufr_copy.c index 6c005f157..06c6c86a5 100644 --- a/tools/bufr_copy.c +++ b/tools/bufr_copy.c @@ -24,7 +24,7 @@ grib_option grib_options[]={ /* {id, args, help}, on, command_line, value */ {"f",0,0,0,1,0}, {"c",0,0,1,0,0}, -/* {"r",0,0,0,1,0}, */ + /* {"r",0,0,0,1,0}, */ {"q",0,0,1,0,0}, {"p:",0,0,1,1,0}, {"s:",0,0,0,1,0}, @@ -34,17 +34,17 @@ grib_option grib_options[]={ "copied to the\n\t\toutput_bufr_file.\n\t\tFor each key a string (key:s), a " "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type " "is string.\n",0,1,0}, - {"B:",0,0,0,1,0}, - {"V",0,0,0,1,0}, - {"W:",0,0,0,1,0}, - {"U",0,0,1,0,0}, - {"H",0,0,1,0,0}, - {"T:",0,0,1,0,"B"}, - {"S",0,0,1,0,0}, - {"g",0,0,0,1,0}, -/* {"G",0,0,0,1,0}, */ - {"7",0,0,0,1,0}, - {"v",0,0,0,1,0} + {"B:",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,0,1,0}, + {"U",0,0,1,0,0}, + {"H",0,0,1,0,0}, + {"T:",0,0,1,0,"B"}, + {"S",0,0,1,0,0}, + {"g",0,0,0,1,0}, + /* {"G",0,0,0,1,0}, */ + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} }; int grib_options_count=sizeof(grib_options)/sizeof(grib_option); @@ -88,7 +88,6 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { int err=0; if (!options->skip) { - if (options->set_values_count != 0) err=grib_set_values(h,options->set_values,options->set_values_count); @@ -117,8 +116,8 @@ int grib_tool_finalise_action(grib_runtime_options* options) return 0; } -int grib_no_handle_action(int err) { - fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); - return 0; +int grib_no_handle_action(int err) +{ + fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); + return 0; } - diff --git a/tools/gts_copy.c b/tools/gts_copy.c index 9c4dfc346..c92c4623a 100644 --- a/tools/gts_copy.c +++ b/tools/gts_copy.c @@ -8,121 +8,109 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_copy - * - * Author: Enrico Fucile - * - * - */ - #include "grib_tools.h" -char* grib_tool_description="Copies the content of grib files printing" - " values of some keys."; +char* grib_tool_description="Copies the content of GTS files printing" + " values of some keys."; char* grib_tool_name="gts_copy"; char* grib_tool_usage="[options] file file ... output_file"; grib_option grib_options[]={ -/* {id, args, help}, on, command_line, value */ - {"f",0,0,0,1,0}, - {"c",0,0,1,0,0}, - {"r",0,0,0,1,0}, - {"q",0,0,1,0,0}, - {"p:",0,0,1,1,0}, - {"P:",0,0,0,1,0}, - {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause." - "\n\t\tOnly grib messages matching the key/value constraints are " - "copied to the\n\t\toutput_grib_file.\n\t\tFor each key a string (key:s), a " - "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type " - "is string.\n",0,1,0}, - {"B:",0,0,0,1,0}, - {"V",0,0,0,1,0}, - {"W:",0,0,0,1,0}, - {"M",0,0,0,1,0}, - {"U",0,0,1,0,0}, - {"H",0,0,1,0,0}, - {"T:",0,0,1,0,"T"}, - {"S",0,0,1,0,0}, - {"g",0,0,0,1,0}, - {"G",0,0,0,1,0}, - {"7",0,0,0,1,0}, - {"v",0,0,0,1,0} + /* {id, args, help}, on, command_line, value */ + {"f",0,0,0,1,0}, + {"c",0,0,1,0,0}, + {"r",0,0,0,1,0}, + {"q",0,0,1,0,0}, + {"p:",0,0,1,1,0}, + {"P:",0,0,0,1,0}, + {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause." + "\n\t\tOnly GTS messages matching the key/value constraints are " + "copied to the\n\t\toutput_gts_file.\n\t\tFor each key a string (key:s), a " + "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type " + "is string.\n",0,1,0}, + {"B:",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,0,1,0}, + {"U",0,0,1,0,0}, + {"H",0,0,1,0,0}, + {"T:",0,0,1,0,"T"}, /* GTS */ + {"S",0,0,1,0,0}, + {"g",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} }; int grib_options_count=sizeof(grib_options)/sizeof(grib_option); int main(int argc, char *argv[]) { - int ret=grib_tool(argc,argv); - return ret; + int ret=grib_tool(argc,argv); + return ret; } int grib_tool_before_getopt(grib_runtime_options* options) { - return 0; + return 0; } int grib_tool_init(grib_runtime_options* options) { #if 0 - if (options->outfile && options->outfile->name) { - options->outfile->file = fopen(options->outfile->name,"w"); - if(!options->outfile->file) { - perror(options->outfile->name); - exit(1); + if (options->outfile && options->outfile->name) { + options->outfile->file = fopen(options->outfile->name,"w"); + if(!options->outfile->file) { + perror(options->outfile->name); + exit(1); + } } - } #endif - return 0; + return 0; } - -int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { - return 0; +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) +{ + return 0; } -int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { - return 0; +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) +{ + return 0; } -int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { - double* v; - size_t size=0; - if ( options->repack ) { - GRIB_CHECK_NOLINE(grib_get_size(h,"values",&size),0); +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) +{ + int err=0; + if (!options->skip) { + if (options->set_values_count != 0) + err=grib_set_values(h,options->set_values,options->set_values_count); - v = (double*)calloc(size,sizeof(double)); - if(!v) { - fprintf(stderr,"failed to allocate %ld bytes\n",(long)(size*sizeof(double))); - exit(1); + if( err != GRIB_SUCCESS && options->fail) exit(err); } - GRIB_CHECK_NOLINE(grib_get_double_array(h,"values",v,&size),0); - GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0); - free(v); - } - grib_tools_write_message(options,h); - return 0; + grib_tools_write_message(options,h); + return 0; } -int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { - grib_handle_delete(h); - return 0; +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) +{ + grib_handle_delete(h); + return 0; } -void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { - grib_print_key_values(options,h); +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) +{ + grib_print_key_values(options,h); } -int grib_tool_finalise_action(grib_runtime_options* options) { -/* +int grib_tool_finalise_action(grib_runtime_options* options) +{ + /* if (options->outfile->file) { fclose(options->outfile->file); } -*/ - return 0; + */ + return 0; } -int grib_no_handle_action(int err) { - fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); - return 0; +int grib_no_handle_action(int err) +{ + fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); + return 0; } - diff --git a/tools/metar_copy.c b/tools/metar_copy.c new file mode 100644 index 000000000..2ab656243 --- /dev/null +++ b/tools/metar_copy.c @@ -0,0 +1,118 @@ +/* + * Copyright 2005-2016 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 "grib_tools.h" + +char* grib_tool_description="Copies the content of METAR files printing" + " values of some keys."; +char* grib_tool_name="metar_copy"; +char* grib_tool_usage="[options] file file ... output_file"; + +grib_option grib_options[]={ + /* {id, args, help}, on, command_line, value */ + {"f",0,0,0,1,0}, + {"c",0,0,1,0,0}, + {"q",0,0,1,0,0}, + {"p:",0,0,1,1,0}, + {"P:",0,0,0,1,0}, + {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause." + "\n\t\tOnly grib messages matching the key/value constraints are " + "copied to the\n\t\toutput_grib_file.\n\t\tFor each key a string (key:s), a " + "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type " + "is string.\n",0,1,0}, + {"B:",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,0,1,0}, + {"U",0,0,1,0,0}, + {"H",0,0,1,0,0}, + {"T:",0,0,1,0,"M"}, /* METAR */ + {"S",0,0,1,0,0}, + {"g",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} +}; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) +{ + int ret=grib_tool(argc,argv); + return ret; +} + +int grib_tool_before_getopt(grib_runtime_options* options) +{ + return 0; +} + +int grib_tool_init(grib_runtime_options* options) +{ +#if 0 + if (options->outfile && options->outfile->name) { + options->outfile->file = fopen(options->outfile->name,"w"); + if(!options->outfile->file) { + perror(options->outfile->name); + exit(1); + } + } +#endif + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) +{ + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) +{ + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) +{ + int err=0; + if (!options->skip) { + if (options->set_values_count != 0) + err=grib_set_values(h,options->set_values,options->set_values_count); + + if( err != GRIB_SUCCESS && options->fail) exit(err); + } + + grib_tools_write_message(options,h); + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) +{ + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) +{ + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) +{ + /* + if (options->outfile->file) { + fclose(options->outfile->file); + } + */ + return 0; +} + +int grib_no_handle_action(int err) +{ + fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); + return 0; +} diff --git a/tools/metar_filter.c b/tools/metar_filter.c index 737c470fe..76c614fed 100644 --- a/tools/metar_filter.c +++ b/tools/metar_filter.c @@ -8,101 +8,100 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_filter - * - * Author: Enrico Fucile - * - * - */ - #include "grib_tools.h" - grib_option grib_options[]={ -/* {id, args, help}, on, command_line, value */ - {"f",0,0,0,1,0}, - {"f",0,0,1,0,0}, - {"F",0,0,1,0,0}, - {"o:",0,0,1,1,"filter.out"}, - {"q",0,0,1,0,0}, - {"M",0,0,0,1,0}, - {"I",0,0,1,0,0}, - {"V",0,0,0,1,0}, - {"g",0,0,0,1,0}, - {"G",0,0,0,1,0}, - {"T:",0,0,1,0,"M"}, - {"7",0,0,0,1,0}, - {"v",0,0,0,1,0} + /* {id, args, help}, on, command_line, value */ + {"f",0,0,0,1,0}, + {"f",0,0,1,0,0}, + {"F",0,0,1,0,0}, + {"o:",0,0,1,1,"filter.out"}, + {"q",0,0,1,0,0}, + {"I",0,0,1,0,0}, + {"V",0,0,0,1,0}, + {"g",0,0,0,1,0}, + {"T:",0,0,1,0,"M"}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} }; -char* grib_tool_description="Apply the rules defined in rules_file to each metar " - "message\n\tin the files provided as arguments."; +char* grib_tool_description="Apply the rules defined in rules_file to each METAR " + "message\n\tin the files provided as arguments."; char* grib_tool_name="metar_filter"; char* grib_tool_usage="[options] rules_file " - "file file ..."; + "file file ..."; int fail=0; int grib_options_count=sizeof(grib_options)/sizeof(grib_option); -int main(int argc, char *argv[]) { return grib_tool(argc,argv);} - -int grib_tool_before_getopt(grib_runtime_options* options) { - return 0; +int main(int argc, char *argv[]) +{ + return grib_tool(argc,argv); } -int grib_tool_init(grib_runtime_options* options) { - - options->action = grib_action_from_filter(options->infile_extra->name); - if (!options->action) { - fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name); - exit(1); - } - - if ( options->outfile && options->outfile->name ) - options->action->context->outfilename=options->outfile->name; - - return 0; +int grib_tool_before_getopt(grib_runtime_options* options) +{ + return 0; } -int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { - return 0; +int grib_tool_init(grib_runtime_options* options) +{ + options->action = grib_action_from_filter(options->infile_extra->name); + if (!options->action) { + fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name); + exit(1); + } + + if ( options->outfile && options->outfile->name ) + options->action->context->outfilename=options->outfile->name; + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) +{ + return 0; } -int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { - return 0; +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) +{ + return 0; } -int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { - int err=0; - - if (options->current_infile->name) { - size_t len=strlen(options->current_infile->name); - grib_set_string(h,"file",options->current_infile->name,&len); - } +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) +{ + int err=0; - err=grib_handle_apply_action(h,options->action); - if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) { - printf("ERROR: %s\n",grib_get_error_message(err)); - exit(err); - } - return 0; + if (options->current_infile->name) { + size_t len=strlen(options->current_infile->name); + grib_set_string(h,"file",options->current_infile->name,&len); + } + + err=grib_handle_apply_action(h,options->action); + if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) { + printf("ERROR: %s\n",grib_get_error_message(err)); + exit(err); + } + return 0; } -int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { - grib_handle_delete(h); - return 0; +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) +{ + grib_handle_delete(h); + return 0; } -void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { - grib_print_key_values(options,h); +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) +{ + grib_print_key_values(options,h); } -int grib_tool_finalise_action(grib_runtime_options* options) { - grib_file_pool_clean(); - return 0; +int grib_tool_finalise_action(grib_runtime_options* options) +{ + grib_file_pool_clean(); + return 0; } -int grib_no_handle_action(int err) { - fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); - return 0; +int grib_no_handle_action(int err) +{ + fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); + return 0; } - diff --git a/tools/metar_get.c b/tools/metar_get.c index c6b8bb829..4e5afe810 100644 --- a/tools/metar_get.c +++ b/tools/metar_get.c @@ -8,42 +8,30 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_get - * - * Author: Enrico Fucile - * - * - */ - #include "grib_tools.h" grib_option grib_options[]={ -/* {id, args, help}, on, command_line, value*/ - {"f",0,0,0,1,0}, - {"p:",0,0,0,1,0}, - {"F:",0,0,1,1,"%g"}, - {"l:",0,0,0,1,0}, - {"P:",0,0,0,1,0}, - {"w:",0,0,0,1,0}, - {"n:",0,0,1,1,0}, - {"s:",0,0,0,1,0}, - {"V",0,0,0,1,0}, - {"W:",0,0,1,1,"8"}, - {"m",0,0,0,1,0}, - {"M",0,0,0,1,0}, - {"S",0,0,1,0,0}, - {"g",0,0,0,1,0}, - {"G",0,0,0,1,0}, - {"T:",0,0,1,0,"M"}, - {"7",0,0,0,1,0}, - {"v",0,0,1,0,0}, - {"i:",0,0,0,1,0} + /* {id, args, help}, on, command_line, value*/ + {"f",0,0,0,1,0}, + {"p:",0,0,0,1,0}, + {"F:",0,0,1,1,"%g"}, + {"P:",0,0,0,1,0}, + {"w:",0,0,0,1,0}, + {"n:",0,0,1,1,0}, + {"s:",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,1,1,"8"}, + {"m",0,0,0,1,0}, + {"M",0,0,0,1,0}, + {"S",0,0,1,0,0}, + {"T:",0,0,1,0,"M"}, /* METAR */ + {"7",0,0,0,1,0}, + {"v",0,0,1,0,0} }; -char* grib_tool_description="Get values of some keys from a metar file." - "\n\tIt is similar to metar_ls, but fails returning an error code " - "\n\twhen an error occurs (e.g. key not found)."; +char* grib_tool_description="Get values of some keys from a METAR file." + "\n\tIt is similar to metar_ls, but fails returning an error code " + "\n\twhen an error occurs (e.g. key not found)."; char* grib_tool_name="metar_get"; char* grib_tool_usage="[options] file file ..."; @@ -51,168 +39,70 @@ int grib_options_count=sizeof(grib_options)/sizeof(grib_option); double lat=0; double lon=0; int mode=0; -grib_nearest* n=NULL; -int main(int argc, char *argv[]) { return grib_tool(argc,argv);} - -int grib_tool_before_getopt(grib_runtime_options* options) { - options->print_keys_count=-1; - return 0; +int main(int argc, char *argv[]) +{ + return grib_tool(argc,argv); } -int grib_tool_init(grib_runtime_options* options) { - char *end = NULL, *end1=NULL; - size_t size=4; - int ret=0; - double min=0,max=0; - int i=0,idx=0; - char* p=NULL; - - options->print_header=0; - options->print_statistics=0; - options->default_print_width=-1; +int grib_tool_before_getopt(grib_runtime_options* options) +{ + options->print_keys_count=-1; + return 0; +} - if (options->latlon) { +int grib_tool_init(grib_runtime_options* options) +{ + options->print_header=0; + options->print_statistics=0; + options->default_print_width=-1; - lat = strtod(options->latlon,&end); - if (*end != ',') { - printf("ERROR: wrong latitude value\n"); - exit(1); - } - lon= strtod(++end,&end1); - - mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID; + return 0; +} - if (end1 && *end1 == ',') { - end1++; - if (*end1 != '0') { - p=end1; - while (*p != ',' && *p !='\0') p++; - if (*end1 == '4') { - options->latlon_mode=4; - } else if (*end1 == '1') { - options->latlon_mode=1; - } else { - printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name); - exit(1); +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) +{ + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) +{ + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) +{ + int err = 0; + + if (!options->skip) { + if (options->set_values_count != 0) { + err=grib_set_values(h,options->set_values,options->set_values_count); } - } - if (*p == ',') { - p++; - options->latlon_mask=strdup(p); - } + + if (err != GRIB_SUCCESS && options->fail) exit(err); } - - } - - if (options->latlon && options->latlon_mask) { - FILE* f=NULL; - grib_handle* hh; - f=fopen(options->latlon_mask,"r"); - if(!f) { - perror(options->latlon_mask); - exit(1); - } - hh=grib_handle_new_from_file(0,f,&ret); - fclose(f); - GRIB_CHECK_NOLINE(ret,0); - n=grib_nearest_new(hh,&ret); - GRIB_CHECK_NOLINE(ret,0); - GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode, - options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0); - grib_nearest_delete(n); - n=NULL; - grib_handle_delete( hh); - - options->latlon_idx=-1; - max=options->distances[0]; - for (i=0;i<4;i++) - if (maxdistances[i]) {max=options->distances[i];idx=i;} - min=max; - for (i=0;i<4;i++) { - if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) { - options->latlon_idx=i; - min = options->distances[i]; - } - } - - if (options->latlon_idx<0){ - min=0; - options->latlon_idx=0; - for (i=1;i<4;i++) - if (min>options->distances[i]) { - min = options->distances[i]; - options->latlon_idx=i; - } - } - } - - return 0; -} -int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { - return 0; - } - - -int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { - return 0; + return 0; } -int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) { - size_t size=4; - int err = 0; - - if (!options->skip) { - if (options->set_values_count != 0) { - err=grib_set_values(h,options->set_values,options->set_values_count); - } - - if (err != GRIB_SUCCESS && options->fail) exit(err); - } - - if (options->latlon) { - int err=0; - double min; - int i; - if (!n) n=grib_nearest_new(h,&err); - GRIB_CHECK_NOLINE(err,0); - GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode, - options->lats,options->lons,options->values, - options->distances,options->indexes,&size),0); - min=options->distances[0]; - options->latlon_idx=0; - i=0; - for (i=1;i<4;i++) { - if (min>options->distances[i]) { - min=options->distances[i]; - options->latlon_idx=i; - } - } - - } - - return 0; +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) +{ + grib_handle_delete(h); + return 0; } -int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { - grib_handle_delete(h); - return 0; +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) +{ + grib_print_key_values(options,h); } -void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { - grib_print_key_values(options,h); +int grib_tool_finalise_action(grib_runtime_options* options) +{ + return 0; } -int grib_tool_finalise_action(grib_runtime_options* options) { - - if (n) grib_nearest_delete(n); - - return 0; +int grib_no_handle_action(int err) +{ + fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); + return 0; } - -int grib_no_handle_action(int err) { - fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n"); - return 0; -} -