static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment) { grib_dumper_c_code *self = (grib_dumper_c_code*)d; long value; size_t size = 1; int err = grib_unpack_long(a,&value,&size); int i; char buf[1024]; if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) return; if(a->length == 0) return; buf[0] = 0; for(i=0;i<(a->length*8);i++) { if(test_bit(value,a->length*8-i-1)) strcat(buf,"1"); else strcat(buf,"0"); } if(comment) { strcat(buf,";"); strcat(buf,comment); } pcomment(self->dumper.out,value,buf); if(err) fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); else fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); fprintf(self->dumper.out,"\n"); }
static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) { grib_dumper_c_code *self = (grib_dumper_c_code*)d; long value; size_t size = 1; int err = grib_unpack_long(a,&value,&size); if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) return; #if 1 if(comment) pcomment(self->dumper.out,value,comment); #endif if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) fprintf(self->dumper.out," GRIB_CHECK(grib_set_missing(h,\"%s\"),%d);\n",a->name,0); else fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); if(err) fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); if(comment) fprintf(self->dumper.out,"\n"); }
/* rmhash - read macro for '#' */ LVAL rmhash(void) { LVAL fptr,mch,val; int escflag,ch; /* protect some pointers */ xlsave1(val); /* get the file and macro character */ fptr = xlgetfile(); mch = xlgachar(); xllastarg(); /* make the return value */ val = consa(NIL); /* check the next character */ switch (ch = xlgetc(fptr)) { case '\'': rplaca(val,pquote(fptr,s_function)); break; case '(': rplaca(val,pvector(fptr)); break; case 'b': case 'B': rplaca(val,pnumber(fptr,2)); break; case 'o': case 'O': rplaca(val,pnumber(fptr,8)); break; case 'x': case 'X': rplaca(val,pnumber(fptr,16)); break; case '\\': xlungetc(fptr,ch); pname(fptr,&escflag); ch = buf[0]; if (strlen(buf) > 1) { upcase((char *) buf); if (strcmp(buf,"NEWLINE") == 0) ch = '\n'; else if (strcmp(buf,"SPACE") == 0) ch = ' '; else if (strcmp(buf,"TAB") == 0) ch = '\t'; else xlerror("unknown character name",cvstring(buf)); } rplaca(val,cvchar(ch)); break; case ':': rplaca(val,punintern(fptr)); break; case '|': pcomment(fptr); val = NIL; break; default: xlerror("illegal character after #",cvfixnum((FIXTYPE)ch)); } /* restore the stack */ xlpop(); /* return the value */ return (val); }