/* * version 1.2.1 of grib headers w. ebisuzaki * 1.2.2 added access to spectral reference value l. kornblueh */ #ifndef INT2 #define INT2(a,b) ((1-(int) ((unsigned) (a & 0x80) >> 6)) * (int) (((a & 0x7f) << 8) + b)) #endif #define BDS_LEN(bds) ((int) ((bds[0]<<16)+(bds[1]<<8)+bds[2])) #define BDS_Flag(bds) (bds[3]) #define BDS_Grid(bds) ((bds[3] & 128) == 0) #define BDS_Harmonic(bds) (bds[3] & 128) #define BDS_Packing(bds) ((bds[3] & 64) != 0) #define BDS_SimplePacking(bds) ((bds[3] & 64) == 0) #define BDS_ComplexPacking(bds) ((bds[3] & 64) != 0) #define BDS_OriginalType(bds) ((bds[3] & 32) != 0) #define BDS_OriginalFloat(bds) ((bds[3] & 32) == 0) #define BDS_OriginalInt(bds) ((bds[3] & 32) != 0) #define BDS_MoreFlags(bds) ((bds[3] & 16) != 0) #define BDS_UnusedBits(bds) ((int) (bds[3] & 15)) #define BDS_BinScale(bds) INT2(bds[4],bds[5]) #define BDS_RefValue(bds) (ibm2flt(bds+6)) #define BDS_NumBits(bds) ((int) bds[10]) #define BDS_Harmonic_RefValue(bds) (ibm2flt(bds+11)) #define BDS_DataStart(bds) ((int) (11 + BDS_MoreFlags(bds)*3)) /* breaks if BDS_NumBits(bds) == 0 */ #define BDS_NValues(bds) (((BDS_LEN(bds) - BDS_DataStart(bds))*8 - \ BDS_UnusedBits(bds)) / BDS_NumBits(bds)) /* #define BDS_NValues(bds) ((BDS_NumBits(bds) == 0) ? 0 : \ (((BDS_LEN(bds) - BDS_DataStart(bds))*8 - \ BDS_UnusedBits(bds)) / BDS_NumBits(bds))) */ /* undefined value -- if bitmap */ #define UNDEFINED 9.999e20