/* * (C) Copyright 2005- ECMWF. * * This software is licensed under the terms of the Apache Licence Version 2.0 * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. * * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ #include "grib_api.h" static unsigned char buffer[50000000]; int main(int argc, char* argv[]) { char* filename; FILE* f; grib_handle* h = NULL; grib_context* c; size_t size = 0; int ret = 0; size_t bufsize = sizeof(buffer); long count, step, edition, totalLength; char gridType[50], levelType[50], level[50], shortName[50]; size_t gridTypelen = sizeof(gridType); size_t levelTypelen = sizeof(levelType); size_t levellen = sizeof(level); size_t shortNamelen = sizeof(shortName); size_t len; if (argc != 2) return 1; filename = argv[1]; f = fopen(filename, "rb"); if (!f) { perror(filename); exit(1); } c = grib_context_get_default(); size = bufsize; count = 1; while ((ret = grib_read_any_from_file(c, f, buffer, &size)) == GRIB_SUCCESS) { if ((1)) { h = grib_handle_new_from_message_copy(c, buffer, size); if (!h) { printf("unable to new from message\n"); exit(1); } else { grib_get_long(h, "edition", &edition); grib_get_long(h, "step", &step); grib_get_long(h, "totalLength", &totalLength); len = gridTypelen; grib_get_string(h, "gridType", gridType, &len); len = levelTypelen; GRIB_CHECK(grib_get_string(h, "levelType", levelType, &len), 0); len = levellen; grib_get_string(h, "level", level, &len); len = shortNamelen; grib_get_string(h, "shortName", shortName, &len); printf("- %3ld -\t ed=%ld\t size=%8ld totalLength=%8ld \t %s\t %s\t %s\t level=%s\t step=%ld\n", count, edition, (long)size, totalLength, shortName, gridType, levelType, level, step); grib_handle_delete(h); } } else { printf("MESSAGE #%ld\n", count); } size = bufsize; count++; } grib_context_delete(grib_context_get_default()); return 0; }