/* * (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_internal.h" typedef struct grib_action_if { grib_action act; /* Members defined in section */ /* Members defined in if */ grib_expression* expression; grib_action* block_true; grib_action* block_false; } grib_action_if; typedef struct grib_action_list { grib_action act; /* Members defined in section */ /* Members defined in list */ grib_expression* expression; grib_action* block_list; } grib_action_list; void print_names(grib_action* a) { while (a) { if (a->op && !strcmp(a->op, "label")) { a = a->next; continue; } if (!strcmp(a->cclass->name, "action_class_noop") || !strcmp(a->cclass->name, "action_class_when")) { a = a->next; continue; } if (!strcmp(a->cclass->name, "action_class_list")) { grib_action_list* al = (grib_action_list*)a; printf("%s\n", a->name); print_names(al->block_list); } else if (!strcmp(a->cclass->name, "action_class_if")) { grib_action_if* ai = (grib_action_if*)a; print_names(ai->block_false); print_names(ai->block_true); } else { /* printf("%s (%s %s)\n",a->name,a->op,a->cclass->name); */ printf("%s\n", a->name); } a = a->next; } } int main(int argc, char* argv[]) { int i = 0; int fail = 0; grib_context* c = grib_context_get_default(); grib_action* a = NULL; for (i = 1; i < argc; i++) { /* printf("%s ... \n",argv[i]);fflush(stdout); */ if (!(a = grib_parse_file(c, argv[i]))) { fail++; printf("FAILED\n"); exit(1); } else print_names(a); } return fail; }