grib_action* grib_action_create_gen(grib_context* context, const char* name, const char* op, const long len, grib_arguments* params, grib_arguments* default_value,int flags,const char* name_space,const char* set) { grib_action_gen* a = NULL; grib_action_class* c = grib_action_class_gen; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->next = NULL; act->name = grib_context_strdup_persistent(context, name); act->op = grib_context_strdup_persistent(context, op); if(name_space) act->name_space = grib_context_strdup_persistent(context, name_space); act->cclass = c; act->context = context; act->flags = flags; a = (grib_action_gen*)act; a->len = len; a->params = params; if (set) act->set = grib_context_strdup_persistent(context, set); act->default_value = default_value; return act; }
grib_action* grib_action_create_set_darray( grib_context* context, const char* name, grib_darray* darray) { char buf[1024]; grib_action_set_darray* a ; grib_action_class* c = grib_action_class_set_darray; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_set_darray*)act; act->context = context; a->darray = darray; a->name = grib_context_strdup_persistent(context,name); sprintf(buf,"set_darray%p",(void*)darray); act->name = grib_context_strdup_persistent(context,buf); return act; }
grib_action* grib_action_create_if( grib_context* context, grib_expression* expression, grib_action* block_true,grib_action* block_false,int transient) { char name[1024]; grib_action_if* a ; grib_action_class* c = grib_action_class_if; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_if*)act; act->context = context; a->expression = expression; a->block_true = block_true; a->block_false = block_false; a->transient = transient; if (transient) sprintf(name,"__if%p",(void*)a); else sprintf(name,"_if%p",(void*)a); act->name = grib_context_strdup_persistent(context,name); return act; }
grib_action* grib_action_create_print( grib_context* context, const char* name,char* outname) { char buf[1024]; grib_action_print* a ; grib_action_class* c = grib_action_class_print; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_print*)act; act->context = context; a->name = grib_context_strdup_persistent(context,name); if (outname) { FILE* out=NULL; int ioerr=0; a->outname = grib_context_strdup_persistent(context,outname); out=fopen(outname,"w"); ioerr=errno; if (!out) { grib_context_log(act->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), "IO ERROR: %s: %s",strerror(ioerr),outname); } if (out) fclose(out); } sprintf(buf,"print%p",(void*)a->name); act->name = grib_context_strdup_persistent(context,buf); return act; }
grib_action* grib_action_create_set( grib_context* context, const char* name, grib_expression* expression,int nofail) { char buf[1024]; grib_action_set* a ; grib_action_class* c = grib_action_class_set; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_set*)act; act->context = context; a->expression = expression; a->name = grib_context_strdup_persistent(context,name); a->nofail = nofail; sprintf(buf,"set%p",(void*)expression); act->name = grib_context_strdup_persistent(context,buf); return act; }
grib_expression* new_is_in_list_expression(grib_context* c,const char* name,const char* list) { grib_expression_is_in_list* e = (grib_expression_is_in_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_expression_is_in_list)); e->base.cclass = grib_expression_class_is_in_list; e->name = grib_context_strdup_persistent(c,name); e->list = grib_context_strdup_persistent(c,list); return (grib_expression*)e; }
grib_action* grib_action_create_put( grib_context* context, const char* name ,grib_arguments *args ) { grib_action_put* a = NULL; grib_action_class* c = grib_action_class_put; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->next = NULL; act->name = grib_context_strdup_persistent(context,name); act->op = grib_context_strdup_persistent(context,"forward"); act->cclass = c; act->context = context; a = (grib_action_put*)act; a->args = args; return act; }
grib_expression* new_string_expression(grib_context* c,const char* value) { grib_expression_string* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_string)); e->base.cclass = grib_expression_class_string; e->value = grib_context_strdup_persistent(c,value); return (grib_expression*)e; }
grib_rule_entry *grib_new_rule_entry(grib_context* c,const char* name,grib_expression* expression) { grib_rule_entry* e = (grib_rule_entry*)grib_context_malloc_clear_persistent(c,sizeof(grib_rule_entry)); e->name = grib_context_strdup_persistent(c,name); e->value = expression; return e; }
grib_expression* new_accessor_expression(grib_context* c,const char *name) { grib_expression_accessor* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_accessor)); e->base.cclass = grib_expression_class_accessor; e->name = grib_context_strdup_persistent(c,name); return (grib_expression*)e; }
grib_action* grib_action_create_template( grib_context* context,int nofail,const char* name , const char* arg1) { grib_action_template* a ; grib_action_class* c = grib_action_class_template; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act-> name = grib_context_strdup_persistent(context,name); act-> op = grib_context_strdup_persistent(context,"section"); act-> cclass = c; act-> next = NULL; act->context = context; a = (grib_action_template*)act; a->nofail=nofail; if (arg1) a->arg = grib_context_strdup_persistent(context,arg1); else a->arg = NULL; return act; }
grib_action* grib_action_create_noop( grib_context* context,const char* fname) { char buf[1024]; grib_action_noop* a ; grib_action_class* c = grib_action_class_noop; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_noop*)act; act->context = context; sprintf(buf,"_noop%p",(void*)a); act->name = grib_context_strdup_persistent(context,buf); return act; }
grib_action* grib_action_create_alias(grib_context* context, const char* name, const char* arg1,const char* name_space,int flags) { grib_action_alias* a ; grib_action_class* c = grib_action_class_alias; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->context = context; act->op = NULL; act->name = grib_context_strdup_persistent(context, name); if(name_space) act->name_space = grib_context_strdup_persistent(context, name_space); act->cclass = c; act->flags = flags; a = (grib_action_alias*)act; a->target = arg1 ? grib_context_strdup_persistent(context, arg1) : NULL; return act; }
grib_action *grib_action_create_trigger(grib_context *context, grib_arguments *args, grib_action *block) { char name[1024]; grib_action_trigger* a = 0; grib_action_class* c = grib_action_class_trigger; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); sprintf(name,"_trigger%p",(void*)act); act-> name = grib_context_strdup_persistent(context,name); act-> op = grib_context_strdup_persistent(context,"section"); act-> cclass = c; act-> next = NULL; act->context = context; a = ( grib_action_trigger*)act; a->trigger_on = args; a->block = block; return act; }
grib_action* grib_action_create_modify( grib_context* context, const char* name, long flags) { grib_action_modify* a ; grib_action_class* c = grib_action_class_modify; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_modify*)act; act->context = context; a->flags = flags; a->name = grib_context_strdup_persistent(context,name); act->name = grib_context_strdup_persistent(context,"flags"); return act; }
grib_action* grib_action_create_variable( grib_context* context, const char* name, const char* op, const long len, grib_arguments* params, grib_arguments* default_value,int flags,const char* name_space) { grib_action_variable* a = NULL; grib_action_class* c = grib_action_class_variable; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->next = NULL; act->name = grib_context_strdup_persistent(context, name); if(name_space) act->name_space = grib_context_strdup_persistent(context, name_space); act->op = grib_context_strdup_persistent(context, op); act->cclass = c; act->context = context; act->flags = flags; a = (grib_action_variable*)act; a->len = len; a->params = params; act->default_value = default_value; /* printf("CREATE %s\n",name); */ return act; }
grib_action* grib_action_create_meta( grib_context* context, const char* name, const char* op, grib_arguments* params, grib_arguments* default_value,unsigned long flags,const char* name_space) { grib_action_meta* a = (grib_action_meta*)grib_context_malloc_clear_persistent(context,sizeof(grib_action_meta)); grib_action* act = (grib_action*)a; act->next = NULL; act->name = grib_context_strdup_persistent(context, name); act->op = grib_context_strdup_persistent(context, op); if(name_space) act->name_space = grib_context_strdup_persistent(context, name_space); act->cclass = grib_action_class_meta; act->context = context; act->flags = flags; a->params = params; act->default_value = default_value; a->len = 0; /* grib_arguments_print(context,a->params,0); printf("\n"); */ return act; }
grib_action* grib_action_create_write( grib_context* context, const char* name,int append,int padtomultiple) { char buf[1024]; grib_action_write* a =NULL; grib_action_class* c = grib_action_class_write; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_write*)act; act->context = context; a->name = grib_context_strdup_persistent(context,name); sprintf(buf,"write%p",(void*)a->name); act->name = grib_context_strdup_persistent(context,buf); a->append=append; a->padtomultiple=padtomultiple; return act; }
grib_action* grib_action_create_switch( grib_context* context, grib_arguments* args, grib_case* Case, grib_action* Default) { char name[1024]; grib_action_switch* a ; grib_action_class* c = grib_action_class_switch; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); act->op = grib_context_strdup_persistent(context,"section"); act->cclass = c; a = (grib_action_switch*)act; act->context = context; a->args = args; a->Case = Case; a->Default = Default; sprintf(name,"_switch%p",(void*)a); act->name = grib_context_strdup_persistent(context,name); return act; }
static int grib_load_codetable(grib_context* c,const char* filename, const char* recomposed_name,size_t size,grib_codetable* t) { char line[1024]; FILE *f = NULL; grib_context_log(c,GRIB_LOG_DEBUG,"Loading code table form %s",filename); f=fopen(filename, "r"); if (!f) return GRIB_IO_PROBLEM; Assert(t!=NULL); if (t->filename[0] == NULL ){ t->filename[0] = grib_context_strdup_persistent(c,filename); t->recomposed_name[0] = grib_context_strdup_persistent(c,recomposed_name); t->next = c->codetable; t->size = size; c->codetable = t; } else { t->filename[1] = grib_context_strdup_persistent(c,filename); t->recomposed_name[1] = grib_context_strdup_persistent(c,recomposed_name); } while(fgets(line,sizeof(line)-1,f)) { char* p = line; int code = 0; char abbreviation[1024] = {0,}; char title[1024]={0,}; char* q = abbreviation; char* r = title; char* units=0; char unknown[]="unknown"; line[strlen(line)-1] = 0; while(*p != '\0' && isspace(*p)) p++; if(*p == '#') continue; while(*p != '\0' && isspace(*p)) p++; if( *p =='\0' ) continue; Assert(isdigit(*p)); while(*p != '\0') { if(isspace(*p)) break; code *= 10; code += *p - '0'; p++; } if(code <0 || code >= size) { grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: invalide code in %s: %d (table size=%d)",filename,code,size); continue; } while(*p != '\0' && isspace(*p)) p++; while(*p != '\0') { if(isspace(*p)) break; *q++ = *p++; } *q = 0; while(*p != '\0' && isspace(*p)) p++; while(*p != '\0') { if(*p == '(' ) break; *r++ = *p++; } *r = 0; while(*p != '\0' && isspace(*p)) p++; if (*p != '\0') { units=++p; while(*p != '\0' && *p != ')' ) p++; *p='\0'; } else { units=unknown; } Assert(*abbreviation); Assert(*title); if(t->entries[code].abbreviation != NULL) { grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: duplicate code in %s: %d (table size=%d)",filename,code,size); continue; } Assert(t->entries[code].abbreviation == NULL); Assert(t->entries[code].title == NULL); t->entries[code].abbreviation = grib_context_strdup_persistent(c,abbreviation); t->entries[code].title = grib_context_strdup_persistent(c,title); t->entries[code].units = grib_context_strdup_persistent(c,units); } fclose(f); return 0; }