int main ( int argc, char* argv[]) { grib_handle *hfrom,*hto,*h; FILE *in; char *in_name,*in_name1,*out_name; int err=0; int what=0; if (argc<4) usage(argv[0]); in_name=argv[1]; in_name1=argv[2]; out_name=argv[3]; in=fopen(in_name,"r"); if (!in) { perror(in_name); exit(1); } hfrom=grib_handle_new_from_file(0,in,&err); GRIB_CHECK(err,0); fclose(in); in=fopen(in_name1,"r"); if (!in) { perror(in_name1); exit(1); } hto=grib_handle_new_from_file(0,in,&err); GRIB_CHECK(err,0); fclose(in); what=GRIB_SECTION_PRODUCT | GRIB_SECTION_LOCAL; h=grib_util_sections_copy(hfrom,hto,what,&err); GRIB_CHECK(err,0); err=grib_write_message(h,out_name,"w"); return err; }
int main(int argc, char* argv[]) { grib_handle *h=NULL; grib_context* c=NULL; FILE* fin=NULL; double *values=NULL; char buffer[BUFF_SIZE]={0,}; char buf[BUFF_SIZE]={0,}; size_t length; int sec4len; flong ksec0[ISECTION_0]; flong ksec1[ISECTION_1]; flong ksec2[ISECTION_2]; flong ksec3[ISECTION_3]; flong ksec4[ISECTION_4]; flong miss=0; const void *msg; flong gribex_msg_len=0; double rsec2[RSECTION_2]; double rsec3[RSECTION_3]; size_t nvalues=0; double* gvalues; FILE* fout; int one=1; char finname[]="sh.grib"; fin = fopen(finname,"r"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); length=BUFF_SIZE; GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); fclose(fin); h=grib_handle_new_from_message_copy(c,buffer,length); GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); values=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); gvalues=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } if (!gvalues) { printf("%s: memory allocation error\n",argv[0]); exit(1); } GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); GRIB_CHECK(grib_set_long(h,"computeLaplacianOperator",1),0); GRIB_CHECK(grib_set_double_array(h,"values",values,nvalues),0); grib_write_message(h,"out_grib_api.grib","w"); sec4len=nvalues+100000; /* decode with gribex*/ msg=(char*)buffer; gribex_msg_len=length; sec4len=nvalues+100000; gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, ksec4,gvalues,sec4len, (char*)msg,&gribex_msg_len,"D")); /* encode values with gribex*/ gribex_msg_len=BUFF_SIZE; grsmkp_(&one); gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, ksec4,gvalues,nvalues, buf,&gribex_msg_len,"C")); fout=fopen("out_gribex.grib","w"); if (!fout) {perror("out_gribex.grib");exit(1);} if (fwrite(buf,1,gribex_msg_len,fout)!=gribex_msg_len) { perror("out_gribex.grib"); exit(1); } fclose(fout); return 0; }
int codes_write_message(grib_handle* h,const char* file,const char* mode) { return grib_write_message(h,file,mode); }