static int create_accessor(grib_section* p, grib_action* act, grib_loader *h ){ int ret = GRIB_SUCCESS; grib_action_template* a = ( grib_action_template*)act; grib_action* la = NULL; grib_action* next = NULL; grib_accessor* as = NULL; grib_section* gs = NULL; char fname[1024]={0,}; char *fpath=0; as = grib_accessor_factory(p, act,0,NULL); if(!as) return GRIB_INTERNAL_ERROR; if(a->arg){ ret = grib_recompose_name(p->h,as,a->arg,fname,1); if ((fpath=grib_context_full_defs_path(p->h->context,fname))==NULL) { if (!a->nofail) { grib_context_log(p->h->context,GRIB_LOG_ERROR, "Unable to find template %s from %s ",act->name,fname); return GRIB_FILE_NOT_FOUND; } la = get_empty_template(p->h->context,&ret); if (ret) return ret; } else la = grib_parse_file(p->h->context, fpath); } as->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; gs = as->sub_section; gs->branch = la; /* Will be used to prevent unecessary reparse */ grib_push_accessor(as,p->block); if(la){ next = la; while(next){ ret = grib_create_accessor(gs, next,h); if(ret != GRIB_SUCCESS) { if(p->h->context->debug) { grib_context_log(p->h->context,GRIB_LOG_ERROR, "Error processing template %s: %s [%s] %04lx", fname,grib_get_error_message(ret),next->name,next->flags); } return ret; } next= next->next; } } return GRIB_SUCCESS; }
grib_action* get_empty_template(grib_context* c,int *err) { char fname[]="empty_template.def"; char* path=0; path=grib_context_full_defs_path(c,fname); if (path) { *err=GRIB_SUCCESS; return grib_parse_file(c, path); } else { *err=GRIB_INTERNAL_ERROR; grib_context_log(c,GRIB_LOG_ERROR,"get_empty_template: unable to get template %s",fname); return NULL; } }
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; }
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++) { a=grib_parse_file(c,argv[i]); if (!a) { fail++; printf("FAILED\n"); exit(1); } while (a) { if (*(a->name) != '_') printf("%s\n",a->name); a=a->next; } } return fail; }
static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit) { grib_action_template* self = (grib_action_template*)a; char *fpath=0; if(self->arg){ char fname[1024]; grib_recompose_name(acc->parent->h,NULL,self->arg,fname,1); if ((fpath=grib_context_full_defs_path(acc->parent->h->context,fname))==NULL) { if (!self->nofail) { grib_context_log(acc->parent->h->context,GRIB_LOG_ERROR, "Unable to find template %s from %s ",a->name,fname); return NULL; } return a; } /* printf("REPARSE %s\n",fpath); */ return grib_parse_file(acc->parent->h->context, fpath); } return NULL; }