static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
{
    grib_dumper_debug *self = (grib_dumper_debug*)d;
    double value; size_t size = 1;
    int err = grib_unpack_double(a,&value,&size);
    int i;

    if( a->length == 0  &&
            (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0)
        return;

    set_begin_end(d,a);

    for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");

    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a))
        fprintf(self->dumper.out,"%ld-%ld %s %s = MISSING",self->begin,self->theEnd,a->creator->op, a->name);
    else
        fprintf(self->dumper.out,"%ld-%ld %s %s = %g",self->begin,self->theEnd,a->creator->op, a->name,value);
    if(comment) fprintf(self->dumper.out," [%s]",comment);
    if(err)
        fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_debug::dump_double]",err,grib_get_error_message(err));
    aliases(d,a);
    fprintf(self->dumper.out,"\n");
}
static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
{
  grib_dumper_default *self = (grib_dumper_default*)d;
  char *value=NULL;
  char *p = NULL;
  size_t size = 0;
  grib_context* c=NULL;
  int err = grib_get_string_length(a->parent->h,a->name,&size);

  c=a->parent->h->context;
  if (size==0) return;

  value=(char*)grib_context_malloc_clear(c,size);
  if (!value) {
  	grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
	return;
  }

  err = grib_unpack_string(a,value,&size);
  p=value;

  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
    return;

  while(*p) { if(!isprint(*p)) *p = '.'; p++; }

  print_offset(self->dumper.out,d,a);

  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
  }

  aliases(d,a);
  if(comment) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# %s \n",comment);
  }

  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"#-READ ONLY- ");
  } else
    fprintf(self->dumper.out,"  ");

  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
    fprintf(self->dumper.out,"%s = MISSING;",a->name);
  else
    fprintf(self->dumper.out,"%s = %s;",a->name,value);


  if(err) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_string]",err,grib_get_error_message(err));
  }

  fprintf(self->dumper.out,"\n");
  grib_context_free(c,value);
}
static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment)
{
  grib_dumper_default *self = (grib_dumper_default*)d;
  int i;
  long value; size_t size = 1;
  int err = grib_unpack_long(a,&value,&size);

  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
    return;

  print_offset(self->dumper.out,d,a);

  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
  }

  aliases(d,a);
  if(comment) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# %s \n",comment);
  }

  fprintf(self->dumper.out,"  ");
  fprintf(self->dumper.out,"# flags: ");
  for(i=0;i<(a->length*8);i++) {
    if(test_bit(value,a->length*8-i-1))
      fprintf(self->dumper.out,"1");
    else
      fprintf(self->dumper.out,"0");
  }
  fprintf(self->dumper.out,"\n");

  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"#-READ ONLY- ");
  } else
    fprintf(self->dumper.out,"  ");

  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
    fprintf(self->dumper.out,"%s = MISSING;",a->name);
  else
    fprintf(self->dumper.out,"%s = %ld;",a->name,value);


  if(err) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_bits]",err,grib_get_error_message(err));
  }

  fprintf(self->dumper.out,"\n");
}
static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
{
    grib_dumper_debug *self = (grib_dumper_debug*)d;
    int err=0;
    int i;
    size_t size=0;
    char *value=NULL;
    char *p=NULL ;

    err = grib_get_string_length(a->parent->h, a->name, &size);
    if ( (size < 2) && grib_is_missing_internal(a) ) {
        /* GRIB-302: transients and missing keys. Need to re-adjust the size */
        size = 10; /* big enough to hold the string "missing" */
    }

    value=(char*)grib_context_malloc_clear(a->parent->h->context,size);
    if (!value) return;
    err=grib_unpack_string(a,value,&size);

    if(err) strcpy(value,"<error>");

    p=value;

    if( a->length == 0  && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0)
        return;

    set_begin_end(d,a);

    while(*p) { if(!isprint(*p)) *p = '.'; p++; }

    for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
    fprintf(self->dumper.out,"%ld-%ld %s %s = %s",self->begin,self->theEnd,a->creator->op, a->name,value);

    if(comment) fprintf(self->dumper.out," [%s]",comment);
    if(err)
        fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_debug::dump_string]",err,grib_get_error_message(err));
    aliases(d,a);
    fprintf(self->dumper.out,"\n");

    if (value) grib_context_free(a->parent->h->context,value);
}
static int is_missing(grib_accessor* a){
  grib_accessor_scale* self = (grib_accessor_scale*)a;
  grib_accessor* av=grib_find_accessor(a->parent->h,self->value);

  if (!av) return GRIB_NOT_FOUND;
  return grib_is_missing_internal(av);
#if 0
  int ret=0;
  long value=0;

  if((ret = grib_get_long_internal(a->parent->h,self->value,
     &value) )   != GRIB_SUCCESS){
    grib_context_log(a->parent->h->context, GRIB_LOG_ERROR,
      "Accessor %s cannont gather value for %s error %d \n", a->name,
       self->value, ret);
    return 0;
  }

  return (value == GRIB_MISSING_LONG);
#endif

   
}
static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
{
  grib_dumper_default *self = (grib_dumper_default*)d;
  long value; size_t size = 1;
  long *values=NULL;
  int err = 0;
  int i;
  long count=0;

  grib_value_count(a,&count);
  size=count;

  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
    return;

  print_offset(self->dumper.out,d,a);

  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
  }

  if (size>1) {
    values=(long *)grib_context_malloc_clear(a->parent->h->context,sizeof(long)*size);
    err=grib_unpack_long(a,values,&size);
  } else {
    err=grib_unpack_long(a,&value,&size);
  }

  aliases(d,a);
  if(comment) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# %s \n",comment);
  }

  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"#-READ ONLY- ");
  } else
    fprintf(self->dumper.out,"  ");

  if (size>1) {
    int cols=19;
    int count=0;
    fprintf(self->dumper.out,"%s = { \t",a->name);
    for (i=0;i<size;i++) {
        if (count>cols) {fprintf(self->dumper.out,"\n\t\t\t\t");count=0;}
        fprintf(self->dumper.out,"%ld ",values[i]);
        count++;
    }
    fprintf(self->dumper.out,"}\n");
    grib_context_free(a->parent->h->context,values);
  } else {
	  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
		fprintf(self->dumper.out,"%s = MISSING;",a->name);
	  else
		fprintf(self->dumper.out,"%s = %ld;",a->name,value);
  }

  if(err) {
    fprintf(self->dumper.out,"  ");
    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_long]",err,grib_get_error_message(err));
  }

  fprintf(self->dumper.out,"\n");
}
Пример #7
0
static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
{
  grib_dumper_wmo *self = (grib_dumper_wmo*)d;
  long value = 0; size_t size =0;
  long *values=NULL;
  int err = 0;
  int i=0;
  long count=0;

  grib_value_count(a,&count);
  size=count;


  if (size>1) {
  	values=(long*)grib_context_malloc_clear(a->parent->h->context,sizeof(long)*size);
	err=grib_unpack_long(a,values,&size);
  } else {
	err=grib_unpack_long(a,&value,&size);
  }

  if( a->length == 0  &&
      (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0)
    return;

  if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 &&
      (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0)
    return;

  set_begin_end(d,a);


  print_offset(self->dumper.out,self->begin,self->theEnd);

  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
        fprintf(self->dumper.out,"%s ",a->creator->op);

  if (size>1) {
	int cols=19;
	int count=0;
	fprintf(self->dumper.out,"%s = { \t",a->name);
	for (i=0;i<size;i++) {
		if (count>cols) {fprintf(self->dumper.out,"\n\t\t\t\t");count=0;}
		fprintf(self->dumper.out,"%ld ",values[i]);
		count++;
	}
	fprintf(self->dumper.out,"}\n");
	grib_context_free(a->parent->h->context,values);
  } else {
	  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
		fprintf(self->dumper.out,"%s = MISSING",a->name);
	  else
		fprintf(self->dumper.out,"%s = %ld",a->name,value);

	  print_hexadecimal(self->dumper.out,d->option_flags,a);

	  if(comment) fprintf(self->dumper.out," [%s]",comment);
  }
  if(err)
    fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_wmo::dump_long]",err,grib_get_error_message(err));

  aliases(d,a);


  fprintf(self->dumper.out,"\n");
}