g2intg2_addfield(unsignedchar*cgrib,g2intipdsnum,g2int*ipdstmpl,float*coordlist,g2intnumcoord,g2intidrsnum,g2int*idrstmpl,float*fld,g2intngrdpts,g2intibmap,g2int*bmap)
Pack sections 4 through 7 and adds them to a GRIB2 message. They are:
4. Product Definition Section
5. Data Representation Section
6. Bit-Map Section
7. Data Section
This routine is used with routines g2_create(), g2_addlocal(), g2_addgrid(), and g2_gribend() to create a
complete GRIB2 message. Function g2_create() must be called first to initialize a new GRIB2 message.
Function g2_addgrid() must be called after g2_create() and before this routine to add the appropriate
grid description to the GRIB2 message. A call to g2_gribend() is required to complete GRIB2 message after
all fields have been added.
ProgramHistoryLog
Date Programmer Comments 2002-11-05 Gilbert Initial 2002-12-23 Gilbert Added complex
spherical harmonic packing 2003-08-27 Gilbert Added support for new templates using PNG and
JPEG2000 algorithms/templates. 2004-11-29 Gilbert JPEG2000 now can use WMO Template 5.40 PNG can
use WMO Template 5.41. Added packing algorithm check. 2005-05-10 Gilbert Imposed minimum size on
cpack. 2009-01-14 Vuong Changed structure name template to gtemplate 2023-09-08 Engle Added
support for new template, 5.42, using CCSDS compression (libaec).
Parameterscgrib Char array that contains the GRIB2 message to which sections 4 through 7 should be added. Must
be allocated large enough to store the entire GRIB2 message.
ipdsnum Product Definition Template Number (see Code Table 4.0).
ipdstmpl Contains the data values for the Product Definition Template specified by ipdsnum.
coordlist Array containg floating point values intended to document the vertical discretisation
associated to model data on hybrid coordinate vertical levels.
numcoord number of values in array coordlist.
idrsnum Data Representation Template Number (see Code Table 5.0).
idrstmpl The data values for the Data Representation Template specified by idrsnum. Note that some
values in this template (eg. reference values, number of bits, etc...) may be changed by the data
packing algorithms. Use this to specify scaling factors and order of spatial differencing, if
desired.
fld Array of data points to pack.
ngrdpts Number of data points in grid. i.e. size of fld and bmap.
ibmap Bitmap indicator (see Code Table 6.0)
• 0 = bitmap applies and is included in Section 6.
• 1-253 = Predefined bitmap applies.
• 254 = Previously defined bitmap applies to this field.
• 255 = Bit map does not apply to this product.
bmap Integer array containing bitmap to be added (if ibmap = 0).
Returns
• > 0 Current size of updated GRIB2 message
• G2_ADD_MSG_INIT GRIB message was not initialized. Need to call routine g2_create() first.
• G2_ADD_MSG_COMPLETE GRIB message already complete. Cannot add new section.
• G2_BAD_SEC_COUNTS Sum of Section byte counts doesn't add to total byte count.
• G2_BAD_SEC Previous Section was not 3 or 7.
• G2_ADDFIELD_BAD_PDT Could not find requested Product Definition Template.
• G2_ADDFIELD_BAD_GDS Section 3 (GDS) not previously defined in message.
• G2_ADDFIELD_BAD_DRT Tried to use unsupported Data Representationi Template.
• G2_ADDFIELD_BAD_BITMAP Specified use of a previously defined bitmap, but one does not exist in the
GRIB message.
• G2_ADDFIELD_BAD_GDT GDT of one of 5.50 through 5.53 required to pack field using DRT 5.51.
• G2_ADDFIELD_ERR Error packing data field.
Note
Note that the Sections 4 through 7 can only follow Section 3 or Section 7 in a GRIB2 message.
Author
Stephen Gilbert
Date
2002-11-05
Definition at line 100 of file g2_addfield.c.
References aecpack(), cmplxpack(), gtemplate::ext, gtemplate::extlen, extpdstemplate(),
G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_ADDFIELD_BAD_BITMAP, G2_ADDFIELD_BAD_DRT, G2_ADDFIELD_BAD_GDS,
G2_ADDFIELD_BAD_GDT, G2_ADDFIELD_BAD_PDT, G2_ADDFIELD_ERR, G2_BAD_SEC, G2_BAD_SEC_COUNTS,
g2c_check_msg(), G2C_EMSGCOMPLETE, G2C_ENOTGRIB, gbit(), getdim(), getdrstemplate(), getpdstemplate(),
getpoly(), jpcpack(), gtemplate::map, gtemplate::maplen, mkieee(), gtemplate::needext, pngpack(), sbit(),
sbits(), simpack(), and specpack().
g2intg2_addgrid(unsignedchar*cgrib,g2int*igds,g2int*igdstmpl,g2int*ideflist,g2intidefnum)
Packs a Grid Definition Section (Section 3) and adds it to a GRIB2 message. This function is used with
routines g2_create(), g2_addlocal(), g2_addfield(), and g2_gribend() to create a complete GRIB2 message.
g2_create() must be called first to initialize a new GRIB2 message.
Parameterscgrib Char array that contains the GRIB2 message to which section should be added. Must be allocated
large enough to store the entire GRIB2 message.
igds Contains information needed for GRIB Grid Definition Section 3. Must be dimensioned >= 5.
• igds[0] Source of grid definition (see Code Table 3.0).
• igds[1] Number of grid points in the defined grid.
• igds[2] Number of octets needed for each additional grid points definition. Used to define number
of points in each row (or column) for non-regular grids. = 0, if using regular grid.
• igds[3] Interpretation of list for optional points definition. (See Code Table 3.11).
• igds[4] Grid Definition Template Number (See Code Table 3.1).
igdstmpl Contains the data values for the specified Grid Definition Template (igds[4]). Each element
of this integer array contains an entry (in the order specified) of Grid Defintion Template.
ideflist (Used if igds[2] != 0) This array contains the number of grid points contained in each row
(or column).
idefnum (Used if igds[2] != 0) The number of entries in array ideflist. i.e. number of rows (or
columns) for which optional grid points are defined.
Returns
• > 0 Current size of updated GRIB2 message
• G2_ADD_MSG_INIT GRIB message was not initialized. Need to call routine gribcreate first.
• G2_ADD_MSG_COMPLETE GRIB message already complete. Cannot add new section.
• G2_BAD_SEC_COUNTS Sum of Section byte counts doesn't add to total byte count
• G2_BAD_SEC Previous Section was not 1, 2 or 7.
• G2_ADDGRID_BAD_GDT Could not find requested Grid Definition Template.
Note
The Grid Def Section (Section 3) can only follow Section 1, 2 or Section 7 in a GRIB2 message.
Author
Stephen Gilbeert
Date
2002-11-01
Definition at line 66 of file g2_addgrid.c.
References gtemplate::ext, extgridtemplate(), gtemplate::extlen, G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT,
G2_ADDGRID_BAD_GDT, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(), G2C_EMSGCOMPLETE, G2C_ENOTGRIB,
gbit(), getgridtemplate(), gtemplate::map, gtemplate::maplen, gtemplate::needext, sbit(), and sbits().
g2intg2_addlocal(unsignedchar*cgrib,unsignedchar*csec2,g2intlcsec2)
Adds a Local Use Section (Section 2) to a GRIB2 message. This function is used with routines g2_create(),
g2_addgrid(), g2_addfield(), and g2_gribend() to create a complete GRIB2 message.
Parameterscgrib Char array that contains the GRIB2 message to which section 2 should be added. Must be
allocated large enough to store the entire GRIB2 message.
csec2 Character array containing information to be added in Section 2.
lcsec2 Number of bytes of character array csec2 to be added to Section 2.
Returns
> 0 = Current size of updated GRIB2 message.
• G2_ADD_MSG_INIT GRIB message was not initialized. Need to call routine gribcreate first.
• G2_ADD_MSG_COMPLETE GRIB message already complete. Cannot add new section.
• G2_BAD_SEC_COUNTS Sum of Section byte counts doesn't add to total byte count.
• G2_BAD_SEC Previous Section was not 1 or 7.
Note
The Local Use Section (Section 2) can only follow Section 1 or Section 7 in a GRIB2 message.
Author
Stephen Gilbeert
Date
2002-11-01
Definition at line 41 of file g2_addlocal.c.
References G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(),
G2C_EMSGCOMPLETE, G2C_ENOTGRIB, gbit(), and sbit().
g2intg2_create(unsignedchar*cgrib,g2int*listsec0,g2int*listsec1)
Initialize a new GRIB2 message and pack GRIB2 Section 0 (Indicator Section) and Section 1 (Identification
Section). This routine is used with routines g2_addlocal(), g2_addgrid(), g2_addfield(), and g2_gribend()
to create a complete GRIB2 message. g2_create() must be called first to initialize a new GRIB2 message. A
call to g2_gribend() is required to complete GRIB2 message after all fields have been added.
Parameterscgrib Character array to contain the GRIB2 message. Must be allocated large enough to store the
entire GRIB2 message.
listsec0 Contains information needed for GRIB Indicator Section 0. Must be dimensioned >= 2.
• listsec0[0] Discipline-GRIB Master Table Number ([Code Table 0.0]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table0-0.shtml)).
• listsec0[1] GRIB Edition Number (currently 2).
listsec1 Contains information needed for GRIB Identification Section 1. Must be dimensioned >= 13.
• listsec1[0] Id of orginating centre ([Table 0]
(https://www.nco.ncep.noaa.gov/pmb/docs/on388/table0.html)).
• listsec1[1] Id of orginating sub-centre ([Table C]
(https://www.nco.ncep.noaa.gov/pmb/docs/on388/tablec.html)).
• listsec1[2] GRIB Master Tables Version Number ([Table 1.0]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-0.shtml)).
• listsec1[3] GRIB Local Tables Version Number ([Table 1.1]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-1.shtml)).
• listsec1[4] Significance of Reference Time ([Table 1.2]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-2.shtml))
• listsec1[5] Reference Time - Year (4 digits)
• listsec1[6] Reference Time - Month
• listsec1[7] Reference Time - Day
• listsec1[8] Reference Time - Hour
• listsec1[9] Reference Time - Minute
• listsec1[10] Reference Time - Second
• listsec1[11] Production status of data ([Table 1.3]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-3.shtml)).
• listsec1[12] Type of processed data ([Table 1.4]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-4.shtml)).
Returns
• > 0 Current size of new GRIB2 message
• G2_CREATE_GRIB_VERSION Tried to use for version other than GRIB Edition 2
This routine is intended for use with routines g2_addlocal(), g2_addgrid(), g2_addfield(), and
g2_gribend() to create a complete GRIB2 message.
Author
Stephen Gilbeert
Date
2002-10-31
Definition at line 68 of file g2_create.c.
References G2_CREATE_GRIB_VERSION, LENSEC0, MAPSEC1LEN, and sbit().
voidg2_free(gribfield*gfld)
Free memory that was allocated for struct gribfield.
Parametersgfld pointer to gribfield structure (defined in include file grib2.h) returned from routine
g2_getfld().
Note
This routine must be called to free up memory used by the decode routine, g2_getfld(), when user no
longer needs to reference this data.
Author
Stephen Gilbeert
Date
2002-10-28
Definition at line 23 of file g2_free.c.
References gribfield::bmap, gribfield::coord_list, gribfield::fld, gribfield::idrtmpl, gribfield::idsect,
gribfield::igdtmpl, gribfield::ipdtmpl, gribfield::list_opt, and gribfield::local.
Referenced by g2_getfld().
g2intg2_getfld(unsignedchar*cgrib,g2intifldnum,g2intunpack,g2intexpand,gribfield**gfld)
Return all the metadata, template values, bit-map (if applicable), and the unpacked data for a data
field. All of the information returned is stored in a gribfield structure, which is defined in file
grib2.h. Users of this routine will need to include grib2.h in their source code that calls this routine.
Since there can be multiple data fields packed into a GRIB2 message, the calling routine indicates which
field is being requested with the ifldnum argument.
ProgramHistoryLog
Date Programmer Comments 2002-10-28 Gilbert Initial 2013-08-08 Vuong Free up memory in
array igds - free(igds)
Parameterscgrib Character pointer to the GRIB2 message.
ifldnum Specifies which field in the GRIB2 message to return. The first field is number 1, Fortran
style.
unpack Boolean value indicating whether to unpack bitmap/data field.
• 1 unpack bitmap (if present) and data values.
• 0 do not unpack bitmap and data values.
expand Boolean value indicating whether the data points should be expanded to the correspond grid, if
a bit-map is present. This argument is ignored if unpack == 0 OR if the returned field does not
contain a bit-map.
• 1 if possible, expand data field to grid, inserting zero values at gridpoints that are bitmapped
out. (SEE REMARKS2)
• 0 do not expand data field, leaving it an array of consecutive data points for each '1' in the
bitmap.
gfld pointer to structure gribfield containing all decoded data for the data field.
Returns
• G2_NO_ERROR no error
• G2_GETFLD_NO_GRIB Beginning characters 'GRIB' not found.
• G2_GETFLD_GRIB_VERSION GRIB message is not Edition 2.
• G2_GETFLD_INVAL The data field request number was not positive.
• G2_GETFLD_WRONG_END End string '7777' found, but not where expected.
• G2_GETFLD_WRONG_NFLDS GRIB message did not contain the requested number of data fields.
• G2_GETFLD_BAD_END End string '7777' not found at end of message.
• G2_GETFLD_INVAL_SEC Unrecognized Section encountered.
• G2_GETFLD_NO_DRT Data Representation Template 5.NN not yet implemented.
• G2_GETFLD_BAD_SEC1 Error unpacking Section 1.
• G2_GETFLD_BAD_SEC2 Error unpacking Section 2.
• G2_GETFLD_BAD_SEC3 Error unpacking Section 3.
• G2_GETFLD_BAD_SEC4 Error unpacking Section 4.
• G2_GETFLD_BAD_SEC5 Error unpacking Section 5.
• G2_GETFLD_BAD_SEC6 Error unpacking Section 6.
• G2_GETFLD_BAD_SEC7 Error unpacking Section 7.
• G2_GETFLD_NO_BITMAP Previous bitmap specified, yet none exists.
Note
Struct gribfield is allocated by this routine and it also contains pointers to many arrays of data
that were allocated during decoding. Users are encouraged to free up this memory, when it is no
longer needed, by an explicit call to routine g2_free().
Example:
#include "grib2.h"
gribfield *gfld;
ret=g2_getfld(cgrib,1,1,1,&gfld);
...
g2_free(gfld);
Routine g2_info() can be used to first determine how many data fields exist in a given GRIB message.
Note
It may not always be possible to expand a bit-mapped data field. If a pre-defined bit-map is used and
not included in the GRIB2 message itself, this routine would not have the necessary information to
expand the data. In this case, gfld->expanded would would be set to 0 (false), regardless of the
value of input argument expand.
Author
Stephen Gilbert
Date
2002-10-28
Definition at line 93 of file g2_getfld.c.
References gribfield::bmap, gribfield::coord_list, gribfield::discipline, gribfield::expanded,
gribfield::fld, g2_free(), G2_GETFLD_BAD_END, G2_GETFLD_BAD_SEC1, G2_GETFLD_BAD_SEC2, G2_GETFLD_BAD_SEC3,
G2_GETFLD_BAD_SEC4, G2_GETFLD_BAD_SEC5, G2_GETFLD_BAD_SEC6, G2_GETFLD_BAD_SEC7, G2_GETFLD_GRIB_VERSION,
G2_GETFLD_INVAL, G2_GETFLD_INVAL_SEC, G2_GETFLD_NO_BITMAP, G2_GETFLD_NO_GRIB, G2_GETFLD_WRONG_END,
G2_GETFLD_WRONG_NFLDS, G2_NO_ERROR, g2_unpack1(), g2_unpack2(), g2_unpack3(), g2_unpack4(), g2_unpack5(),
g2_unpack6(), g2_unpack7(), gbit(), gribfield::griddef, gribfield::ibmap, gribfield::idrtlen,
gribfield::idrtmpl, gribfield::idrtnum, gribfield::idsect, gribfield::idsectlen, gribfield::ifldnum,
gribfield::igdtlen, gribfield::igdtmpl, gribfield::igdtnum, gribfield::interp_opt, gribfield::ipdtlen,
gribfield::ipdtmpl, gribfield::ipdtnum, gribfield::list_opt, gribfield::local, gribfield::locallen,
gribfield::ndpts, gribfield::ngrdpts, gribfield::num_coord, gribfield::num_opt, gribfield::numoct_opt,
gribfield::unpacked, and gribfield::version.
g2intg2_gribend(unsignedchar*cgrib)
Finalize a GRIB2 message after all grids and fields have been added. This function adds the End Section
('7777') to the end of the GRIB message and calculates the length and stores it in the appropriate place
in Section 0. This routine is used with routines g2_create(), g2_addlocal(), g2_addgrid(), and
g2_addfield() to create a complete GRIB2 message.
Parameterscgrib Char array containing all the data sections added be previous calls to g2_create(),
g2_addlocal(), g2_addgrid(), and g2_addfield(). After function is called, contains the finalized
GRIB2 message.
Returns
• > 0 Length of the final GRIB2 message in bytes.
• G2_GRIBEND_MSG_INIT GRIB message was not initialized - call g2_create() first.
• G2_BAD_SEC_COUNTS Sum of Section byte counts doesn't add to total byte count.
• G2_BAD_SEC Previous Section was not 7.
Note
This routine is intended for use with routines g2_create(), g2_addlocal(), g2_addgrid(), and
g2_addfield() to create a complete GRIB2 message.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 40 of file g2_gribend.c.
References G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(),
G2C_EMSGCOMPLETE, G2C_ENOTGRIB, gbit(), and sbit().
g2intg2_info(unsignedchar*cgrib,g2int*listsec0,g2int*listsec1,g2int*numfields,g2int*numlocal)
Search through a GRIB2 message and return the number of gridded fields found in the message and the
number (and maximum size) of Local Use Sections. Other checks are performed to see if the message is a
valid GRIB2 message.
Parameterscgrib Pointer to a buffer containing the GRIB2 message.
listsec0 Pointer to an array that gets the information decoded from GRIB Indicator Section 0. Must be
allocated with >= 3 elements (see G2C_SECTION0_LEN).
• listsec0(0) Discipline-GRIB Master Table Number ([Code Table 0.0]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table0-0.shtml)).
• listsec0[1] GRIB Edition Number (currently 2).
• listsec0[2] Length of GRIB message.
listsec1 Pointer to an array that gets the information read from GRIB Identification Section 1. Must
be allocated with >= 13 elements (see G2C_SECTION1_LEN).
• listsec1[0] Id of orginating centre ([Table 0]
(https://www.nco.ncep.noaa.gov/pmb/docs/on388/table0.html)).
• listsec1[1] Id of orginating sub-centre ([Table C]
(https://www.nco.ncep.noaa.gov/pmb/docs/on388/tablec.html)).
• listsec1[2] GRIB Master Tables Version Number ([Table 1.0]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-0.shtml)).
• listsec1[3] GRIB Local Tables Version Number ([Table 1.1]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-1.shtml)).
• listsec1[4] Significance of Reference Time ([Table 1.2]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-1.shtml))
• listsec1[5] Reference Time - Year (4 digits)
• listsec1[6] Reference Time - Month
• listsec1[7] Reference Time - Day
• listsec1[8] Reference Time - Hour
• listsec1[9] Reference Time - Minute
• listsec1[10] Reference Time - Second
• listsec1[11] Production status of data ([Table 1.3]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-3.shtml)).
• listsec1[12] Type of processed data ([Table 1.4]
(https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table1-4.shtml)).
numfields A pointer that gets the number of gridded fields found in the GRIB message. That is, the
number of occurences of Sections 4 - 7.
numlocal A pointer that gets the number of Local Use Sections (section 2) found in the GRIB message.
Returns
0 for success, otherwise:
• G2_INFO_NO_GRIB Beginning characters 'GRIB' not found.
• G2_INFO_GRIB_VERSION GRIB message is not Edition 2.
• G2_INFO_NO_SEC1 Could not find Section 1, where expected.
• G2_INFO_WRONG_END End string '7777' found, but not where expected.
• G2_INFO_BAD_END End string '7777' not found at end of message.
• G2_INFO_INVAL_SEC Invalid section number found.
Author
Stephen Gilbeert
Date
2002-10-28
Definition at line 70 of file g2_info.c.
References G2_INFO_BAD_END, G2_INFO_GRIB_VERSION, G2_INFO_INVAL_SEC, G2_INFO_NO_GRIB, G2_INFO_NO_SEC1,
G2_INFO_WRONG_END, gbit(), and LOG.
g2intg2_unpack1(unsignedchar*cgrib,g2int*iofst,g2int**ids,g2int*idslen)
Unpacks Section 1 - Identification Section of a GRIB2 message.
Parameterscgrib char array containing Section 1 of the GRIB2 message.
iofst Bit offset for the beginning of Section 1 in cgrib.
ids Pointer that gets an array which contians the information read from Section 1, the Identification
section. This array is allocated by this function, and must be freed by caller (using g2_free()).
• ids[0] Identification of originating Centre (see Table 0).
• ids[1] Identification of originating Sub-centre (see Table C).
• ids[2] GRIB Master Tables Version Number (see Table 1.0).
• ids[3] GRIB Local Tables Version Number (see Table 1.1).
• ids[4] Significance of Reference Time (see Table 1.2).
• ids[5] Year (4 digits)
• ids[6] Month
• ids[7] Day
• ids[8] Hour
• ids[9] Minute
• ids[10] Second
• ids[11] Production status of processed data (see Table 1.3).
• ids[12] Type of processed data (see Table 1.4).
idslen Number of elements in ids.
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed is not section 1.
• G2_UNPACK_NO_MEM memory allocation error.
Author
Stephen Gilbert
Date
2002-10-29
Definition at line 55 of file g2_unpack1.c.
References G2_NO_ERROR, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, and gbit().
Referenced by g2_getfld().
g2intg2_unpack2(unsignedchar*cgrib,g2int*iofst,g2int*lencsec2,unsignedchar**csec2)
Unpack Section 2 (Local Use Section) of a GRIB2 message.
ProgramHistoryLog
Date Programmer Comments 2002-10-31 Gilbert Initial 2008-12-23 Wesley Initialize
lencsec2 Length of Local Use data 2010-08-05 Vuong If section 2 has zero length, ierr=0
Parameterscgrib char array containing Section 2 of the GRIB2 message.
iofst Pointer that contains the bit offset for the beginning of Section 2 in cgrib. The modified
version will be returned.
lencsec2 Length (in octets) of Local Use data.
csec2 Pointer to a pointer that will get an allocated array containing local use data. This memory
must be freed by the caller.
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK_NO_MEM Memory allocation error.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 37 of file g2_unpack2.c.
References G2_NO_ERROR, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, and gbit().
Referenced by g2_getfld().
g2intg2_unpack3(unsignedchar*cgrib,g2int*iofst,g2int**igds,g2int**igdstmpl,g2int*mapgridlen,g2int**ideflist,g2int*idefnum)
Unpack Section 3 (Grid Definition Section) of a GRIB2 message.
ProgramHistoryLog
Date Programmer Comments 2002-10-31 Gilbert Initial 2009-01-14 Vuong Changed structure
name template to gtemplate
Parameterscgrib Char array ontaining Section 3 of the GRIB2 message.
iofst Pointer to g2int which contains the bit offset for the beginning of Section 3 in cgrib.
igds Pointer to a pointer which will get a pointer to memory allocated for the GDS array, of length
5. The array will contain information read from the appropriate GRIB Grid Definition Section 3 for
the field being returned.
• igds[0] Source of grid definition (see Table 3.0).
• igds[1] Number of grid points in the defined grid.
• igds[2] Number of octets needed for each additional grid points definition. Used to define number
of points in each row (or column) for non-regular grids. = 0, if using regular grid.
• igds[3] Interpretation of list for optional points definition. (See Table 3.11)
• igds[4] Grid Definition Template Number (see Table 3.1).
igdstmpl Pointer a pointer to g2int, which will get a pointer to an allocated array that contians
containing the data values from the Grid Definition Template specified by igds[4].
mapgridlen A pointer tat gets the number of elements in igdstmpl. i.e. number of entries in Grid
Defintion Template specified by igds[4].
ideflist (Used if igds[2] .ne. 0) Pointer to integer array containing the number of grid points
contained in each row (or column).
idefnum (Used if igds[2] != 0.) A pointer that gets the number of entries in array ideflist - i.e.
number of rows (or columns) for which optional grid points are defined.
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK3_BAD_GDT message contains an undefined Grid Definition Template.
• G2_UNPACK_NO_MEM Memory allocation error.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 62 of file g2_unpack3.c.
References gtemplate::ext, extgridtemplate(), gtemplate::extlen, G2_NO_ERROR, G2_UNPACK3_BAD_GDT,
G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), gbits(), getgridtemplate(), gtemplate::map,
gtemplate::maplen, and gtemplate::needext.
Referenced by g2_getfld(), getdim(), and getpoly().
g2intg2_unpack4(unsignedchar*cgrib,g2int*iofst,g2int*ipdsnum,g2int**ipdstmpl,g2int*mappdslen,float**coordlist,g2int*numcoord)
Unpack Section 4 (Product Definition Section) of a GRIB2 message.
ProgramHistoryLog
Date Programmer Comments 2002-10-31 Gilbert Initial 2009-01-14 Vuong Changed structure
name template to gtemplate
Parameterscgrib Array containing Section 4 of the GRIB2 message.
iofst Bit offset of the beginning of Section 4 in cgrib. Returned with updated bit offset.
ipdsnum Product Definition Template Number (see Table 4.0).
ipdstmpl Pointer that gets an integer array containing the data values for the Product Definition
Template specified by ipdsnum.
mappdslen Number of elements in ipdstmpl - i.e. number of entries in Product Defintion Template
specified by ipdsnum.
coordlist Pointer that gets an array containing floating point values intended to document the
vertical discretisation associated to model data on hybrid coordinate vertical levels.
numcoord number of values in array coordlist.
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK4_BAD_PDT message contains an undefined Product Definition Template.
• G2_UNPACK_NO_MEM Memory allocation error.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 45 of file g2_unpack4.c.
References gtemplate::ext, gtemplate::extlen, extpdstemplate(), G2_NO_ERROR, G2_UNPACK4_BAD_PDT,
G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), gbits(), getpdstemplate(), gtemplate::map,
gtemplate::maplen, gtemplate::needext, and rdieee().
Referenced by g2_getfld().
g2intg2_unpack5(unsignedchar*cgrib,g2int*iofst,g2int*ndpts,g2int*idrsnum,g2int**idrstmpl,g2int*mapdrslen)
Unpack Section 5 (Data Representation Section) of a GRIB2 message.
ProgramHistoryLog
Date Programmer Comments 2002-10-31 Gilbert Initial 2009-01-14 Vuong Changed structure
name template to gtemplate
Parameterscgrib char array containing Section 5 of the GRIB2 message.
iofst Bit offset for the beginning of Section 5 in cgrib. Returned with bit offset at the end of
Section 5.
ndpts Number of data points unpacked and returned.
idrsnum Data Representation Template Number (see Code Table 5.0).
idrstmpl Pointer to an integer array containing the data values for the specified Data Representation
Template (N=idrsnum). Each element of this integer array contains an entry (in the order specified)
of Data Representation Template 5.N.
mapdrslen- Number of elements in idrstmpl. i.e. number of entries in Data Representation Template 5.N
(N=idrsnum).
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK_NO_MEM Memory allocation error.
• G2_UNPACK5_BAD_DRT 'GRIB' message contains an undefined Data Representation Template.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 40 of file g2_unpack5.c.
References gtemplate::ext, extdrstemplate(), gtemplate::extlen, G2_NO_ERROR, G2_UNPACK5_BAD_DRT,
G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), getdrstemplate(), gtemplate::map, gtemplate::maplen, and
gtemplate::needext.
Referenced by g2_getfld().
g2intg2_unpack6(unsignedchar*cgrib,g2int*iofst,g2intngpts,g2int*ibmap,g2int**bmap)
Unpack Section 6 (Bit-Map Section) of a GRIB2 message.
Parameterscgrib char array containing Section 6 of the GRIB2 message.
iofst Bit offset of the beginning of Section 6 in cgrib.
ngpts Number of grid points specified in the bit-map
ibmap Bitmap indicator (see Code Table 6.0)
• 0 bitmap applies and is included in Section 6.
• 1-253 Predefined bitmap applies
• 254 Previously defined bitmap applies to this field
• 255 Bit map does not apply to this product.
bmap Pointer to an integer array containing decoded bitmap. (if ibmap=0)
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK6_BAD_BITMAP Unrecognized pre-defined bit-map.
• G2_UNPACK_NO_MEM Memory allocation error.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 32 of file g2_unpack6.c.
References G2_NO_ERROR, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), and gbits().
Referenced by g2_getfld().
g2intg2_unpack7(unsignedchar*cgrib,g2int*iofst,g2intigdsnum,g2int*igdstmpl,g2intidrsnum,g2int*idrstmpl,g2intndpts,float**fld)
This subroutine unpacks Section 7 (Data Section) of a GRIB2 message. This function is maintained for
backward compatibility. Users may wish to use the newer g2c_unpack7() function instead.
Parameterscgrib char array containing Section 7 of the GRIB2 message
iofst Pointer to a bit offset of the beginning of Section 7 in cgrib. This is updated by this
function to reflect the data read in this function. After this function is successfully called, the
value pointed to by iofst will be the number of bits to the end of section 7 in cbuf.
igdsnum Grid Definition Template Number (see Code Table 3.0). (Only used for DRS Template 5.51.)
igdstmpl Pointer to an integer array containing the data values for the specified Grid Definition
Template (N=igdsnum). Each element of this integer array contains an entry (in the order specified)
of Grid Definition Template 3.N. (Only used for DRS Template 5.51).
idrsnum Data Representation Template Number (see Code Table 5.0).
idrstmpl Pointer to an integer array containing the data values for the specified Data Representation
Template (N=idrsnum). Each element of this integer array contains an entry (in the order specified)
of Data Representation Template 5.N
ndpts Number of data points to be unpacked and returned.
fld Pointer to a float pointer which gets a pointer to an array allocated by this function to hold
the unpacked data. This memory must be freed by the caller.
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK7_BAD_DRT Unrecognized Data Representation Template.
• G2_UNPACK7_WRONG_GDT need one of GDT 3.50 through 3.53 to decode DRT 5.51
• G2_UNPACK_NO_MEM Memory allocation error.
• G2_UNPACK7_CORRUPT_SEC Corrupt section 7.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 214 of file g2_unpack7.c.
References g2c_unpack7_int().
Referenced by g2_getfld().
intg2c_aecpackd(double*fld,size_twidth,size_theight,int*idrstmpl,unsignedchar*cpack,size_t*lcpack)
This function packs up a double array into a AEC code stream. After the data are scaled, and the
reference value is subtracted out, the data are passed to the AEC encoder.
This function also fills in GRIB2 Data Representation Template 5.42 with the appropriate values.
This function is the V2 API version of aecpack() for floats.
Parametersfld Pointer to the float data values to pack.
width The number of points in the x direction.
height The number of points in the y direction.
idrstmpl Contains the array of values for Data Representation Template Table 5.42.
• 0 Reference value - ignored on input, set by aecpack routine.
• 1 Binary Scale Factor - used on input, unchanged by aecpack routine.
• 2 Decimal Scale Factor - used on input, unchanged by aecpack routine.
• 3 number of bits for each data value - ignored on input
• 4 Original field type - currently ignored on input Data values assumed to be reals. Set to 0 on
output.
• 5 CCSDS compression options mask.
• 6 Block size.
• 7 Reference sample interval. May be modified in this function.
cpack A pointer that will get the packed data field. Must be allocated before this function is
called. Pass the allocated size in the lcpack parameter.
lcpack Pointer that gets the length of packed field in cpack. This must be set by the calling
function to the size available in cpack.
Returns
• G2C_NOERROR No error.
• G2C_EAEC Error encoding/decoding AEC data.
Author
Eric Engle (adapted from jpcpack)
Definition at line 410 of file aecpack.c.
References aecpack_int(), and G2C_AEC_DRS_TEMPLATE_LEN.
intg2c_aecpackf(float*fld,size_twidth,size_theight,int*idrstmpl,unsignedchar*cpack,size_t*lcpack)
This function packs up a float array into a AEC code stream. After the data are scaled, and the reference
value is subtracted out, the data are passed to the AEC encoder.
This function also fills in GRIB2 Data Representation Template 5.42 with the appropriate values.
This function is the V2 API version of aecpack() for floats.
Parametersfld Pointer to the float data values to pack.
width The number of points in the x direction.
height The number of points in the y direction.
idrstmpl Contains the array of values for Data Representation Template Table 5.42.
• 0 Reference value - ignored on input, set by aecpack routine.
• 1 Binary Scale Factor - used on input, unchanged by aecpack routine.
• 2 Decimal Scale Factor - used on input, unchanged by aecpack routine.
• 3 number of bits for each data value - ignored on input
• 4 Original field type - currently ignored on input Data values assumed to be reals. Set to 0 on
output.
• 5 CCSDS compression options mask.
• 6 Block size.
• 7 Reference sample interval. May be modified in this function.
cpack A pointer that will get the packed data field. Must be allocated before this function is
called. Pass the allocated size in the lcpack parameter.
lcpack Pointer that gets the length of packed field in cpack. This must be set by the calling
function to the size available in cpack.
Returns
• G2C_NOERROR No error.
• G2C_EAEC Error encoding/decoding AEC data.
Author
Eric Engle (adapted from jpcpack)
Definition at line 346 of file aecpack.c.
References aecpack_int(), and G2C_AEC_DRS_TEMPLATE_LEN.
intg2c_aecunpackd(unsignedchar*cpack,size_tlen,int*idrstmpl,size_tndpts,double*fld)
Unpack AEC compressed data into an array of doubles, using info from the GRIB2 Data Representation
Template 5.42. This function is the V2 API version of aecunpack() for doubles.
Parameterscpack The packed data.
len The length of the packed data.
idrstmpl Pointer to array of values for Data Representation Template 5.42.
ndpts The number of data values to unpack.
fld A pointer that gets the unpacked data values as an array of double.
Returns
• G2C_NOERROR No error.
• G2C_ENOMEM Out of memory.
Author
Eric Engle
Date
2023-10-16
Definition at line 232 of file aecunpack.c.
References aecunpack_int(), G2C_AEC_DRS_TEMPLATE_LEN, and LOG.
intg2c_aecunpackf(unsignedchar*cpack,size_tlen,int*idrstmpl,size_tndpts,float*fld)
Unpack AEC compressed data into an array of floats, using info from the GRIB2 Data Representation
Template 5.42.
Parameterscpack The packed data.
len The length of the packed data.
idrstmpl Pointer to array of values for Data Representation Template 5.42.
ndpts The number of data values to unpack.
fld A pointer that gets the unpacked data values as an array of float.
Returns
• G2C_NOERROR No error.
• G2C_ENOMEM Out of memory.
Author
Eric Engle
Date
2022-10-16
Definition at line 194 of file aecunpack.c.
References aecunpack_int(), G2C_AEC_DRS_TEMPLATE_LEN, and LOG.
intg2c_close(intg2cid)
Close a GRIB2 file, freeing resources.
Parametersg2cid Indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EBADID - Bad file ID.
Author
Ed Hartnett
Date
Aug 16, 2022
Definition at line 1367 of file g2cfile.c.
References g2c_file_info::f, free_metadata(), G2C_EBADID, G2C_EFILE, g2c_file, G2C_MAX_FILES,
G2C_NOERROR, g2c_file_info::g2cid, LOG, MUTEX_LOCK, MUTEX_UNLOCK, g2c_file_info::num_messages, and
g2c_file_info::path.
Referenced by main().
intg2c_compare(intg2cid1,intg2cid2)
Compare the metadata of two open GRIB2 files.
Parametersg2cid1 Indentifier for one file.
g2cid2 Indentifier for the other file.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid parameters.
• G2C_EFILE File I/O error.
Author
Ed Hartnett
Date
Dec 28, 2022
Definition at line 28 of file g2ccompare.c.
References g2c_message_info::center, g2c_section5_info::data_def, g2c_message_info::day,
g2c_message_info::discipline, G2C_EBADID, G2C_ENOSECTION, G2C_ERROR, g2c_file, G2C_MAX_FILES,
G2C_NOERROR, g2c_section3_info::grid_def, g2c_message_info::hour, g2c_section3_info::interp_list,
g2c_message_info::local_version, LOG, g2c_message_info::master_version, g2c_message_info::minute,
g2c_message_info::month, g2c_file_info::msg, g2c_message_info::next, g2c_section_info::next,
g2c_section4_info::num_coord, g2c_section3_info::num_data_points, g2c_section5_info::num_data_points,
g2c_message_info::num_fields, g2c_message_info::num_local, g2c_file_info::num_messages,
g2c_section3_info::num_opt, g2c_section_info::prev, g2c_section4_info::prod_def, g2c_message_info::sec,
g2c_section_info::sec_info, g2c_section_info::sec_num, g2c_message_info::second,
g2c_message_info::sig_ref_time, g2c_section3_info::source_grid_def, g2c_message_info::status,
g2c_message_info::subcenter, g2c_section_info::template, g2c_section_info::template_len,
g2c_message_info::type, and g2c_message_info::year.
Referenced by main().
intg2c_csv_init()
Initialize tables from 'CodeFlag.txt'.
Returns
• G2C_NOERROR No error.
Author
Alyson Stahl
Date
8/2/24
Definition at line 215 of file g2ccsv.c.
References doc, g2c_csv_strsep(), G2C_ECSV, G2C_ENAMETOOLONG, G2C_ENOMEM, g2c_find_table(),
G2C_MAX_GRIB_CODE_LEN, G2C_MAX_GRIB_DESC_LEN, G2C_MAX_GRIB_LEVEL_DESC_LEN, G2C_MAX_GRIB_STATUS_LEN,
G2C_MAX_GRIB_TITLE_LEN, G2C_NOERROR, and g2c_table.
Referenced by g2c_log_file(), and g2c_log_section1().
intg2c_dec_jpeg2000(char*injpc,size_tbufsize,int*outfld)
Decode a JPEG2000 code stream specified in the JPEG2000 Part-1 standard (i.e., ISO/IEC 15444-1) using
JasPer Software.
Parametersinjpc Pointer to buffer that holds the input JPEG2000 code stream.
bufsize Length (in bytes) of the buffer that holds the input JPEG2000 code stream.
outfld Pointer to int array, already allocated, that gets the unpacked data.
Returns
• G2C_NOERROR No error.
• G2_JASPER_DECODE Error decode jpeg2000 code stream.
• G2_JASPER_DECODE_COLOR decoded image had multiple color components. Only grayscale is expected.
• G2_JASPER_INIT Error inializing Jasper library.
Author
Ed Hartnett
Date
9/7/22
Definition at line 350 of file decenc_jpeg2000.c.
References int_dec_jpeg2000().
intg2c_dec_png(unsignedchar*pngbuf,int*width,int*height,unsignedchar*cout)
Decode PNG.
Parameterspngbuf Pointer to PNG buffer.
width Pointer to width.
height Pointer to height.
cout Output buffer.
Returns
0 for success, error code otherwise.
Author
Alyson Stahl
Definition at line 100 of file decenc_png.c.
References dec_png().
intg2c_degrib2(intg2cid,constchar*fileout)
Write a summary file like the degrib2 utility.
Parametersg2cid Indentifier for the file, returned by g2c_open() or g2c_create().
fileout Path of output file. Any existing file of this name will be overwritten.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid parameters.
• G2C_EFILE File I/O error.
Author
Ed Hartnett
Date
Sep 17, 2022
Definition at line 634 of file g2cdegrib2.c.
References g2c_message_info::bytes_in_msg, g2c_message_info::bytes_to_msg, g2c_message_info::center,
g2c_section5_info::data_def, g2c_message_info::day, g2c_message_info::discipline, G2C_EBADID, G2C_EFILE,
G2C_EINVAL, G2C_ENOSECTION, G2C_ERROR, g2c_file, g2c_get_datetime(), g2c_get_level_desc(),
g2c_get_prod(), G2C_MAX_FILES, G2C_MAX_NOAA_ABBREV_LEN, G2C_MAX_TYPE_OF_FIXED_SURFACE_LEN, G2C_NOERROR,
g2c_param_abbrev(), g2c_section3_info::grid_def, g2c_message_info::hour, g2c_section6_info::indicator,
g2c_section3_info::interp_list, g2c_message_info::local_version, LOG, g2c_message_info::master_version,
g2c_message_info::minute, g2c_message_info::month, g2c_section_info::msg, g2c_message_info::msg_num,
g2c_message_info::next, g2c_section_info::next, g2c_section4_info::num_coord,
g2c_section3_info::num_data_points, g2c_section5_info::num_data_points, g2c_message_info::num_fields,
g2c_message_info::num_local, g2c_section3_info::num_opt, g2c_section3_info::optional,
g2c_section_info::prev, g2c_section4_info::prod_def, g2c_message_info::sec, g2c_section_info::sec_info,
g2c_section_info::sec_len, g2c_section_info::sec_num, g2c_message_info::second,
g2c_message_info::sig_ref_time, g2c_section3_info::source_grid_def, g2c_message_info::status,
g2c_message_info::subcenter, g2c_section_info::template, g2c_section_info::template_len,
g2c_message_info::type, and g2c_message_info::year.
Referenced by main().
intg2c_enc_jpeg2000(unsignedchar*cin,intwidth,intheight,intnbits,intltype,intratio,intretry,char*outjpc,size_tjpclen)
Encode a grayscale image into a JPEG2000 code stream specified in the JPEG2000 Part-1 standard (i.e.,
ISO/IEC 15444-1) using JasPer Software.
Parameterscin Packed matrix of Grayscale image values to encode.
width width of image.
height height of image.
nbits depth (in bits) of image. i.e number of bits used to hold each data value.
ltype indicator of lossless or lossy compression.
• 1, for lossy compression
• != 1, for lossless compression
ratio target compression ratio. (ratio:1) Used only when ltype == 1.
retry If 1 try increasing number of guard bits.
outjpc Output encoded JPEG2000 code stream.
jpclen Number of bytes allocated for the output JPEG2000 code stream in outjpc.
Returns
• > 0 = Length in bytes of encoded JPEG2000 code stream
• G2_JASPER_INIT Error initializing jasper library.
• G2_JASPER_ENCODE Error encode jpeg2000 code stream.
Note
Requires JasPer Software version 1.500.4 or 1.700.2 or later.
Author
Stephen Gilbert
Date
2002-12-02
Author
Ed Hartnett
Definition at line 45 of file decenc_jpeg2000.c.
References enc_jpeg2000().
intg2c_enc_png(unsignedchar*data,intwidth,intheight,intnbits,unsignedchar*pngbuf)
Encode PNG.
Parametersdata data.
width width.
height height.
nbits number of bits.
pngbuf PNG buffer.
Returns
PNG length, or negative number for error.
Author
Alyson Stahl
Definition at line 237 of file decenc_png.c.
References enc_png().
intg2c_find_desc(char*title,intcode,char*desc)
Given a table title and an integer code, find a description.
Parameterstitle Title of table.
code Code to search for as an int.
desc Pointer that gets a copy of the description. Must be allocated to G2C_MAX_GRIB_DESC_LEN + 1.
Author
Ed Hartnett
Date
8/28/22
Returns
0 for success, error code otherwise.
Definition at line 131 of file g2ccsv.c.
References g2c_find_desc_str(), and G2C_MAX_GRIB_CODE_LEN.
Referenced by g2c_log_section1().
intg2c_find_desc_str(char*title,char*code,char*desc)
Given a table title and a code, find a description.
Parameterstitle Title of table.
code Code to search for.
desc Pointer that gets a copy of the description. Must be allocated to G2C_MAX_GRIB_DESC_LEN + 1.
Author
Ed Hartnett
Date
8/28/22
Returns
0 for success, error code otherwise.
Definition at line 84 of file g2ccsv.c.
References G2C_EINVAL, G2C_ENOTFOUND, G2C_MAX_GRIB_CODE_LEN, G2C_MAX_GRIB_TITLE_LEN, G2C_NOERROR, and
g2c_table.
Referenced by g2c_find_desc().
intg2c_find_msg2(intg2cid,size_tskip_bytes,size_tmax_bytes,size_t*bytes_to_msg,size_t*bytes_in_msg)
Search a file for the next GRIB1 or GRIB2 message. A grib message is identified by its indicator section,
i.e. an 8-byte sequence with 'GRIB' in bytes 1-4 and a '1' or '2' in byte 8. If found, the length of the
message is decoded from bytes 5-7. The search is done over a given section of the file. The search is
terminated if an eof or i/o error is encountered.
Parametersg2cid ID of the opened grib file, returned by g2c_open().
skip_bytes Number of bytes to skip before search.
max_bytes Maximum number of bytes to search.
bytes_to_msg Pointer that gets the number of bytes to skip before message.
bytes_in_msg Pointer that gets the number of bytes in message (or 0 if no message found)
Returns
• G2C_NOERROR No error.
• G2C_EBADID g2cid not found.
• G2C_EFILE File error.
• G2C_EINVAL Invalid input.
Author
Ed Hartnett
Date
2022-08-19
Definition at line 164 of file g2cfile.c.
References G2C_EBADID, G2C_EFILE, G2C_EINVAL, G2C_EMSG, G2C_ENOMEM, G2C_ERROR, g2c_file,
G2C_MAGIC_HEADER_LEN, G2C_NOERROR, LOG, MIN, and READ_BUF_SIZE.
voidg2c_free_tables()
Free table memory.
Author
Ed Hartnett
Date
8/28/22
Definition at line 42 of file g2ccsv.c.
References g2c_table.
Referenced by g2c_log_file().
voidg2c_gbit_int(unsignedchar*in,int*iout,intiskip,intnbits)
Extract arbitrary size values from a packed bit string, right justifying each value in the unpacked iout
array. This is similar to gbit(), but with int types instead of g2int.
Parametersin pointer to character array input.
iout pointer that gets the unpacked array output.
iskip initial number of bits to skip.
nbits number of bits to take.
Author
NOAA Programmer
Definition at line 113 of file gbits.c.
References g2c_gbits_int().
intg2c_gbits_int(unsignedchar*in,int*iout,intiskip,intnbits,intnskip,intn)
Extract arbitrary size values from a packed bit string, right justifying each value in the unpacked iout
array. This is similar to gbits(), but with int types instead of g2int.
Parametersin Pointer to character array input.
iout Pointer that gets the unpacked array output.
iskip Initial number of bits to skip.
nbits Number of bits to take.
nskip Additional number of bits to skip on each iteration.
n Number of iterations.
Returns
• G2C_NOERROR No error.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
8/31/22
Definition at line 137 of file gbits.c.
References G2C_EINVAL, G2C_ENOMEM, G2C_NOERROR, and gbits().
Referenced by g2c_gbit_int().
intg2c_get_drs_template(intdrs_template_num,int*maplen,int*map,int*needext)
Get DRS template information. The DRS template consists of a template map, and its length. There are no
supported DRS templates with extensions.
Parametersdrs_template_num The DRS template number.
maplen Pointer that gets the length of the map. Ignored if NULL.
map Pointer that gets the map as an array of int. Memory must be allocated by caller. Ignored if
NULL.
needext Pointer that a non-zero value if an extension to this template is needed. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_ENOTEMPLATE Template not found.
Author
Ed Hartnett
Date
10/18/22
Definition at line 266 of file drstemplates.c.
References G2C_ENOTEMPLATE, G2C_MAX_DRS_TEMPLATE, G2C_NOERROR, and templatesdrs.
Referenced by g2c_rw_section5_metadata().
intg2c_get_grid_template(intgrid_template_num,int*maplen,int*map,int*needext)
Get grid template information. The grid template consists of a template map, its length, and, for some
templates, an extra extension map, and its length. If an extension is needed, use
g2c_get_grid_template_extension() to get it.
Parametersgrid_template_num The grid template number.
maplen Pointer that gets the length of the map. Ignored if NULL.
map Pointer that gets the map as an array of int. Memory must be allocated by caller. Ignored if
NULL.
needext Pointer that a non-zero value if an extension to this template is needed. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_ENOTEMPLATE Template not found.
Author
Ed Hartnett
Date
10/16/22
Definition at line 391 of file gridtemplates.c.
References G2C_ENOTEMPLATE, G2C_MAX_GDS_TEMPLATE, G2C_NOERROR, and templatesgrid.
Referenced by g2c_rw_section3_metadata().
intg2c_get_grid_template_extension(intgrid_template_num,int*template,int*extlen,int*ext)
Get grid template extension information.
Parametersgrid_template_num The grid template number.
template Pointer to array that contains the template values.
extlen Pointer that gets the length of the extension. Ignored if NULL.
ext Pointer that gets template extension array, if there is one. Memory must be allocated by the
caller. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOTEMPLATE Template not found.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
10/16/22
Definition at line 316 of file gridtemplates.c.
References gtemplate::ext, extgridtemplate(), gtemplate::extlen, G2C_EINVAL, G2C_ENOMEM, G2C_ENOTEMPLATE,
G2C_MAX_GDS_TEMPLATE, G2C_NOERROR, and templatesgrid.
intg2c_get_msg(intg2cid,size_tskip_bytes,size_tmax_bytes,size_t*bytes_to_msg,size_t*bytes_in_msg,unsignedchar**cbuf)
Search a file for the next GRIB1 or GRIB2 message, and read it, allocating space in memory to hold the
message. A grib message is identified by its indicator section, i.e. an 8-byte sequence with 'GRIB' in
bytes 1-4 and a '1' or '2' in byte 8. If found, the length of the message is decoded from bytes 5-7. The
search is done over a given section of the file. The search is terminated if an EOF or I/O error is
encountered.
Parametersg2cid ID of the opened grib file, returned by g2c_open().
skip_bytes The number of bytes to skip before search.
max_bytes The maximum number of bytes to search. Must be at least 16.
bytes_to_msg A pointer that gets the number of bytes to skip before message.
bytes_in_msg A pointer that gets the number of bytes in message (or 0 if no message found)
cbuf A pointer that gets allocation of memory, into which the message is copied. This memory must be
freed by the caller.
Returns
• G2C_NOERROR No error.
• G2C_EBADID g2cid not found.
• G2C_EFILE File error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOMSG No GRIB message found.
Author
Ed Hartnett
Date
2022-08-20
Definition at line 291 of file g2cfile.c.
References G2C_EBADID, G2C_EFILE, G2C_EINVAL, G2C_ENOMEM, G2C_ENOMSG, G2C_ERROR, g2c_file,
G2C_MIN_MAX_BYTES, G2C_NOERROR, LOG, and seekgb().
intg2c_get_pds_template(intpds_template_num,int*maplen,int*map,int*needext)
Get PDS template information. The PDS template consists of a template map, its length, and, for some
templates, an extra extension map, and its length. If an extension is needed, use
g2c_get_pds_template_extension() to get it.
Parameterspds_template_num The PDS template number.
maplen Pointer that gets the length of the map. Ignored if NULL.
map Pointer that gets the map as an array of int. Memory must be allocated by caller. Ignored if
NULL.
needext Pointer that a non-zero value if an extension to this template is needed. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_ENOTEMPLATE Template not found.
Author
Ed Hartnett
Date
10/18/22
Definition at line 1806 of file pdstemplates.c.
References G2C_ENOTEMPLATE, G2C_MAX_PDS_TEMPLATE, G2C_NOERROR, and templatespds.
Referenced by g2c_rw_section4_metadata().
intg2c_get_pds_template_extension(intpds_template_num,int*template,int*extlen,int*ext)
Get pds template extension information.
Parameterspds_template_num The pds template number.
template Pointer to array that contains the template values.
extlen Pointer that gets the length of the extension. Ignored if NULL.
ext Pointer that gets template extension array, if there is one. Memory must be allocated by the
caller. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOTEMPLATE Template not found.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
10/16/22
Definition at line 1731 of file pdstemplates.c.
References gtemplate::ext, gtemplate::extlen, extpdstemplate(), G2C_EINVAL, G2C_ENOMEM, G2C_ENOTEMPLATE,
G2C_MAX_PDS_TEMPLATE, G2C_NOERROR, and templatespds.
intg2c_get_prod(intg2cid,intmsg_num,intprod_num,int*num_data_points,float*data)
Read the data for a product.
Parametersg2cid File ID.
msg_num Message number in file (first message in file is message 0).
prod_num Product number in message (first product in message is product 0).
num_data_points Pointer that gets the number of data points in the product. Ignored if NULL.
data Pointer that gets the data. Ignored if NULL.
Returns
• G2C_NOERROR No error.
Author
Ed Hartnett
Date
Sep 28, 2022
Definition at line 32 of file g2cprod.c.
References g2c_message_info::bytes_to_msg, g2c_section_info::bytes_to_sec, g2c_section5_info::data_def,
g2c_file_info::f, G2C_EBADID, G2C_EFILE, G2C_EINVAL, G2C_ENOMEM, G2C_ENOMSG, G2C_ENOPRODUCT,
G2C_ENOSECTION, G2C_ERROR, g2c_file, G2C_MAX_FILES, G2C_NOERROR, g2c_unpack7(),
g2c_section3_info::grid_def, g2c_section_info::msg, g2c_message_info::msg_num, MUTEX_LOCK, MUTEX_UNLOCK,
g2c_message_info::next, g2c_section_info::next, g2c_section5_info::num_data_points,
g2c_section_info::prev, g2c_message_info::sec, g2c_section_info::sec_info, g2c_section_info::sec_len,
g2c_section_info::sec_num, g2c_section_info::template, and g2c_section_info::template_len.
Referenced by g2c_degrib2().
intg2c_inq(intg2cid,int*num_msg)
Learn about a GRIB2 file.
Parametersg2cid ID of the opened file, as from g2c_open().
num_msg Pointer that gets the number of messages in the file. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID File ID not found.
Author
Ed Hartnett
Date
10/21/22
Definition at line 31 of file g2cinq.c.
References G2C_EBADID, g2c_file, G2C_MAX_FILES, G2C_NOERROR, MUTEX_LOCK, MUTEX_UNLOCK, and
g2c_file_info::num_messages.
intg2c_inq_dim(intg2cid,intmsg_num,intprod_num,intdim_num,size_t*len,char*name,float*val)
Learn about the one of the dimensions of a GRIB2 product. This function will return the size, name, and
values along the dimension.
Parametersg2cid ID of the opened file, as from g2c_open().
msg_num Number of the message in the file, starting with the first message as 0.
prod_num Product number.
dim_num Dimension number, with the first dimension as 0.
len Pointer that gets the length of this dimension. Ignored if NULL.
name Pointer that gets the name of this dimension. Must have memory of size G2C_MAX_NAME. Ignored if
NULL.
val Pointer that gets array of dimension values, of length len. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID File ID not found.
• G2C_ENOMSG Message not found.
• G2C_ENOPRODUCT Product not found.
• G2C_ENOSECTION GDS not found.
Author
Ed Hartnett
Date
10/21/22
Definition at line 372 of file g2cinq.c.
References G2C_EBADID, G2C_EINVAL, G2C_ENOMSG, G2C_ENOPRODUCT, G2C_ENOSECTION, g2c_file, G2C_MAX_FILES,
G2C_MAX_NAME, G2C_NOERROR, g2c_dim_info::len, g2c_message_info::msg_num, MUTEX_LOCK, MUTEX_UNLOCK,
g2c_dim_info::name, g2c_message_info::next, g2c_section_info::next, g2c_section_info::prev,
g2c_message_info::sec, g2c_section_info::sec_info, g2c_section_info::sec_num, and g2c_dim_info::value.
Referenced by g2c_inq_dim_info().
intg2c_inq_dim_info(intg2cid,intmsg_num,intprod_num,intdim_num,size_t*len,char*name)
Learn about the one of the dimensions of a GRIB2 product. This function will return the size and name of
the dimension.
Parametersg2cid ID of the opened file, as from g2c_open().
msg_num Number of the message in the file, starting with the first message as 0.
prod_num Product number.
dim_num Dimension number, with the first dimension as 0.
len Pointer that gets the length of this dimension. Ignored if NULL.
name Pointer that gets the name of this dimension. Must have memory of size G2C_MAX_NAME. Ignored if
NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID File ID not found.
• G2C_ENOMSG Message not found.
• G2C_ENOPRODUCT Product not found.
• G2C_ENOSECTION GDS not found.
Author
Ed Hartnett
Date
10/21/22
Definition at line 468 of file g2cinq.c.
References g2c_inq_dim().
intg2c_inq_msg(intg2cid,intmsg_num,unsignedchar*discipline,int*num_fields,int*num_local,short*center,short*subcenter,unsignedchar*master_version,unsignedchar*local_version)
Learn about a GRIB2 message.
Parametersg2cid ID of the opened file, as from g2c_open().
msg_num Number of the message in the file, starting with the first message as 0.
discipline Pointer that gets the discipline from the message. Ignored if NULL.
num_fields Pointer that gets the number of fields in the message. Ignored if NULL.
num_local Pointer that gets the number of local sections in the message. Ignored if NULL.
center Pointer that gets the code for the producing center from the message. Ignored if NULL.
subcenter Pointer that gets the code for the producing subcenter from the message. Ignored if NULL.
master_version Pointer that gets the master version from the message. Ignored if NULL.
local_version Pointer that gets the local version from the message. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID File ID not found.
• G2C_ENOMSG Message not found.
Author
Ed Hartnett
Date
10/21/22
Definition at line 87 of file g2cinq.c.
References g2c_message_info::center, g2c_message_info::discipline, G2C_EBADID, G2C_EINVAL, G2C_ENOMSG,
g2c_file, G2C_MAX_FILES, G2C_NOERROR, g2c_message_info::local_version, g2c_message_info::master_version,
g2c_message_info::msg_num, MUTEX_LOCK, MUTEX_UNLOCK, g2c_message_info::next,
g2c_message_info::num_fields, g2c_message_info::num_local, and g2c_message_info::subcenter.
intg2c_inq_msg_time(intg2cid,intmsg_num,unsignedchar*sig_ref_time,short*year,unsignedchar*month,unsignedchar*day,unsignedchar*hour,unsignedchar*minute,unsignedchar*second)
Learn about the date/time information in a GRIB2 message.
Parametersg2cid ID of the opened file, as from g2c_open().
msg_num Number of the message in the file, starting with the first message as 0.
sig_ref_time Pointer that gets Significane of reference time value from the message. Ignored if NULL.
year Pointer that gets the year from the message. Ignored if NULL.
month Pointer that gets the month from the message. Ignored if NULL.
day Pointer that gets the day from the message. Ignored if NULL.
hour Pointer that gets the hour from the message. Ignored if NULL.
minute Pointer that gets the minute from the message. Ignored if NULL.
second Pointer that gets the seconds from the message. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID File ID not found.
• G2C_ENOMSG Message not found.
Author
Ed Hartnett
Date
10/22/22
Definition at line 170 of file g2cinq.c.
References g2c_message_info::day, G2C_EBADID, G2C_EINVAL, G2C_ENOMSG, g2c_file, G2C_MAX_FILES,
G2C_NOERROR, g2c_message_info::hour, g2c_message_info::minute, g2c_message_info::month,
g2c_message_info::msg_num, MUTEX_LOCK, MUTEX_UNLOCK, g2c_message_info::next, g2c_message_info::second,
g2c_message_info::sig_ref_time, and g2c_message_info::year.
intg2c_inq_prod(intg2cid,intmsg_num,intprod_num,int*pds_template_len,longlongint*pds_template,int*gds_template_len,longlongint*gds_template,int*drs_template_len,longlongint*drs_template)
Inquire about a product.
Parametersg2cid File ID.
msg_num Message number.
prod_num Product number.
pds_template_len PDS template length. Ignored if NULL.
pds_template Pointer that gets the PDS template. Ignored if NULL.
gds_template_len GDS template length. Ignored if NULL.
gds_template Pointer that gets the GDS template. Ignored if NULL.
drs_template_len The DRS template length. Ignored if NULL.
drs_template Pointer that gets the DRS template. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID File ID not found.
• G2C_ENOMSG Message not found.
• G2C_ENOPRODUCT Product not found.
• G2C_ENOSECTION Section not found.
Author
Ed Hartnett
Date
10/21/22
Definition at line 247 of file g2cinq.c.
References G2C_EBADID, G2C_EINVAL, G2C_ENOMSG, G2C_ENOPRODUCT, G2C_ENOSECTION, g2c_file, G2C_MAX_FILES,
G2C_NOERROR, g2c_message_info::msg_num, MUTEX_LOCK, MUTEX_UNLOCK, g2c_message_info::next,
g2c_section_info::next, g2c_section_info::prev, g2c_message_info::sec, g2c_section_info::sec_info,
g2c_section_info::sec_num, g2c_section_info::template, and g2c_section_info::template_len.
intg2c_jpcpackd(double*fld,size_twidth,size_theight,int*idrstmpl,unsignedchar*cpack,size_t*lcpack)
This function packs up a double array into a JPEG2000 code stream. After the data are scaled, and the
reference value is subtracted out, the data are treated as a grayscale image and passed to a JPEG2000
encoder.
This function also fills in GRIB2 Data Representation Template 5.40 or 5.40000 with the appropriate
values.
This function is the V2 API version of jpcpack() for doubles.
Parametersfld Pointer to the double data values to pack.
width The number of points in the x direction.
height The number of points in the y direction.
idrstmpl Contains the array of values for Data Representation Template Table 5.40 or 5.40000.
• 0 Reference value - ignored on input, set by jpcpack routine.
• 1 Binary Scale Factor - used on input, unchanged by jpcpack routine.
• 2 Decimal Scale Factor - used on input, unchanged by jpcpack routine.
• 3 number of bits for each data value - ignored on input
• 4 Original field type - currently ignored on input Data values assumed to be reals. Set to 0 on
output.
• 5 if 0 use lossless compression, if 1 use lossy compression.
• 6 Desired compression ratio, if idrstmpl[5]=1. Set to 255, if idrstmpl[5]=0. May be modified in
this function.
cpack A pointer that will get the packed data field. Must be allocated before this function is
called. Pass the allocated size in the lcpack parameter.
lcpack Pointer that gets the length of packed field in cpack. This must be set by the calling
function to the size available in cpack.
Returns
• G2C_NOERROR No error.
• G2C_EJPEG Error encoding/decoding JPEG data.
Author
Ed Hartnett
Definition at line 386 of file jpcpack.c.
References G2C_JPEG_DRS_TEMPLATE_LEN, and jpcpack_int().
intg2c_jpcpackf(float*fld,size_twidth,size_theight,int*idrstmpl,unsignedchar*cpack,size_t*lcpack)
This function packs up a float array into a JPEG2000 code stream. After the data are scaled, and the
reference value is subtracted out, the data are treated as a grayscale image and passed to a JPEG2000
encoder.
This function also fills in GRIB2 Data Representation Template 5.40 or 5.40000 with the appropriate
values.
This function is the V2 API version of jpcpack() for floats.
Parametersfld Pointer to the float data values to pack.
width The number of points in the x direction.
height The number of points in the y direction.
idrstmpl Contains the array of values for Data Representation Template Table 5.40 or 5.40000.
• 0 Reference value - ignored on input, set by jpcpack routine.
• 1 Binary Scale Factor - used on input, unchanged by jpcpack routine.
• 2 Decimal Scale Factor - used on input, unchanged by jpcpack routine.
• 3 number of bits for each data value - ignored on input
• 4 Original field type - currently ignored on input Data values assumed to be reals. Set to 0 on
output.
• 5 if 0 use lossless compression, if 1 use lossy compression.
• 6 Desired compression ratio, if idrstmpl[5]=1. Set to 255, if idrstmpl[5]=0. May be modified in
this function.
cpack A pointer that will get the packed data field. Must be allocated before this function is
called. Pass the allocated size in the lcpack parameter.
lcpack Pointer that gets the length of packed field in cpack. This must be set by the calling
function to the size available in cpack.
Returns
• G2C_NOERROR No error.
• G2C_EJPEG Error encoding/decoding JPEG data.
Author
Ed Hartnett
Definition at line 320 of file jpcpack.c.
References G2C_JPEG_DRS_TEMPLATE_LEN, and jpcpack_int().
intg2c_jpcunpackd(unsignedchar*cpack,size_tlen,int*idrstmpl,size_tndpts,double*fld)
Unpack JPEG2000 compressed data into an array of doubles, using info from the GRIB2 Data Representation
Template 5.40 or 5.40000. This function is the V2 API version of jpcunpack() for doubles.
Parameterscpack The packed data.
len The length of the packed data.
idrstmpl Pointer to array of values for Data Representation Template 5.40 or 5.40000.
ndpts The number of data values to unpack.
fld A pointer that gets the unpacked data values as an array of double.
Returns
• G2C_NOERROR No error.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
2022-08-12
Definition at line 199 of file jpcunpack.c.
References G2C_JPEG_DRS_TEMPLATE_LEN, jpcunpack_int(), and LOG.
intg2c_jpcunpackf(unsignedchar*cpack,size_tlen,int*idrstmpl,size_tndpts,float*fld)
Unpack JPEG2000 compressed data into an array of floats, using info from the GRIB2 Data Representation
Template 5.40 or 5.40000.
Parameterscpack The packed data.
len The length of the packed data.
idrstmpl Pointer to array of values for Data Representation Template 5.40 or 5.40000.
ndpts The number of data values to unpack.
fld A pointer that gets the unpacked data values as an array of float.
Returns
• G2C_NOERROR No error.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
2022-09-08
Definition at line 159 of file jpcunpack.c.
References G2C_JPEG_DRS_TEMPLATE_LEN, jpcunpack_int(), and LOG.
intg2c_log_file(intg2cid)
Print a summary of the contents of an open GRIB2 file. If the NCEPLIBS-g2c library is built without the
LOGGING option, this function will do nothing.
Parametersg2cid The file ID, returned by g2c_open() or g2c_create().
Returns
• G2C_NOERROR No error.
• G2C_EBADID g2cid not found.
Author
Ed Hartnett 8/22/22
Definition at line 189 of file g2cutil.c.
References g2c_message_info::bytes_in_msg, g2c_message_info::bytes_to_msg, g2c_message_info::center,
g2c_message_info::day, g2c_csv_init(), G2C_EBADID, g2c_file, g2c_free_tables(), g2c_log_section(),
g2c_log_section1(), G2C_NOERROR, g2c_table, g2c_message_info::hour, g2c_message_info::local_version, LOG,
g2c_message_info::master_version, g2c_message_info::minute, g2c_message_info::month,
g2c_message_info::msg_num, g2c_message_info::next, g2c_section_info::next, g2c_message_info::num_fields,
g2c_message_info::num_local, g2c_message_info::sec, g2c_message_info::sec1_len, g2c_message_info::second,
g2c_message_info::sig_ref_time, g2c_message_info::status, g2c_message_info::subcenter,
g2c_message_info::type, and g2c_message_info::year.
Referenced by read_metadata().
intg2c_open(constchar*path,intmode,int*g2cid)
Open an existing GRIB2 file. This function opens the GRIB2 file and reads its metadata.
GRIB2 messages in the file are assigned a message ID, starting with 0 for the first message in the file.
Each product within a message is assigned a product ID, starting with 0 for the first product in the
message.
Files opened with this function should be closed with a call g2c_close() to release resources.
Parameterspath Path of the file.
mode Open mode flags.
g2cid Pointer that gets an indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EINVAL - Invalid input.
• G2C_ETOOMANYFILES - Trying to open too many files at the same time.
Author
Ed Hartnett
Date
Aug 16, 2022
Definition at line 1201 of file g2cfile.c.
References g2c_add_file(), LOG, MUTEX_LOCK, MUTEX_UNLOCK, and read_metadata().
Referenced by main().
intg2c_open_index(constchar*data_file,constchar*index_file,intmode,int*g2cid)
Open a GRIB2 file with the help of an index file. The index file, generated by the grb2index utility, of
the g2c_write_index() function, contains the byte offsets for the sections of each message in the GRIB2
file. When a GRIB2 file is opened with an index file, the library does not have to scan the file to
locate all metadata.
Parametersdata_file The name of the data file to which the index applies.
index_file The name that will be given to the index file. An existing file will be overwritten.
mode Open mode flags.
g2cid Pointer that gets the g2cid for this file. Ignored if NULL.
Returns
• G2C_NOERROR No error.
Author
Ed Hartnett
Date
10/12/22
Definition at line 914 of file g2cindex.c.
References add_msg(), add_section(), g2c_message_info::bytes_to_bms, g2c_message_info::bytes_to_data,
g2c_message_info::bytes_to_local, g2c_message_info::bytes_to_msg, g2c_message_info::discipline,
g2c_add_file(), G2C_EBADSECTION, G2C_EFILE, G2C_EINVAL, G2C_ENAMETOOLONG, g2c_file, g2c_file_io_ubyte(),
g2c_file_io_uint(), G2C_FILE_READ, G2C_INDEX_BASENAME_LEN, G2C_INDEX_DATE_STR_LEN, G2C_INDEX_HEADER_LEN,
G2C_INDEX_STR1_LEN, G2C_INDEX_TIME_STR_LEN, g2c_log_section1(), G2C_MAX_NAME, G2C_NOERROR,
g2c_rw_section1_metadata(), g2c_start_index_record(), g2c_start_index_record_lf(), LOG,
g2c_message_info::master_version, MUTEX_LOCK, and MUTEX_UNLOCK.
Referenced by main().
intg2c_open_index1(constchar*index_file)
Open a GRIB1 index file and read the contents. This function opens the GRIB2 index file and reads its
metadata, and opens the accompanying GRIB2 file.
GRIB2 messages in the file are assigned a message ID, starting with 0 for the first message in the file.
Each product within a message is assigned a product ID, starting with 0 for the first product in the
message.
Files opened with this function should be closed with a call g2c_close() to release resources.
Parametersindex_file The name that will be given to the index file. An existing file will be overwritten.
Returns
• G2C_NOERROR No error.
Author
Ed Hartnett
Date
10/12/22
Definition at line 812 of file g2cindex.c.
References G2C_EFILE, G2C_EINVAL, G2C_FILE_READ, G2C_INDEX1_BDS_VAL_LEN, G2C_INDEX1_BMS_VAL_LEN,
G2C_INDEX1_GDS_VAL_LEN, G2C_INDEX1_PDS_VAL_LEN, G2C_INDEX_BASENAME_LEN, G2C_INDEX_DATE_STR_LEN,
G2C_INDEX_HEADER_LEN, G2C_INDEX_TIME_STR_LEN, G2C_NOERROR, g2c_start_index1_record(), LOG, MUTEX_LOCK,
MUTEX_UNLOCK, read_hdr_rec1(), and read_hdr_rec2().
intg2c_param_abbrev(intg2disc,intg2cat,intg2num,char*abbrev)
Get NOAA abbreviation for a GRIB2 parameter.
Parametersg2disc The GRIB2 discipline number.
g2cat The GRIB2 category number.
g2num The GRIB2 parameter number.
abbrev Pointer that gets the abbreviation. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EFILE Error reading CSV file.
• G2C_ENOPARAM Parameter not found.
Author
Ed Hartnett
Date
9/19/22
Definition at line 1091 of file g2cparams.c.
References G2C_MAX_NOAA_ABBREV_LEN, G2C_MAX_NOAA_PARAMS, G2C_NOERROR, LOG, and param.
Referenced by g2c_degrib2(), and g2c_log_section().
intg2c_param_all(intparam_idx,int*g1num,int*g1ver,int*g2disc,int*g2cat,int*g2num,char*abbrev)
Return all the information about a parameter.
Parametersparam_idx Parameter index between 0 and G2C_MAX_NOAA_PARAMS.
g1num Pointer that gets the GRIB1 parameter. Ignored if NULL.
g1ver Pointer that gets the GRIB1 parameter table version number. Ignored if NULL.
g2disc Pointer that gets the GRIB2 discipline number. Ignored if NULL.
g2cat Pointer that gets the GRIB2 category number. Ignored if NULL.
g2num Pointer that gets the GRIB2 parameter number. Ignored if NULL.
abbrev Pointer that gets the abbreviation.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_EFILE Error reading CSV file.
• G2C_ENOPARAM Parameter not found.
Author
Ed Hartnett
Date
9/19/22
Definition at line 1185 of file g2cparams.c.
References g2c_param::g1num, g2c_param::g1ver, G2C_EINVAL, G2C_MAX_NOAA_ABBREV_LEN, G2C_MAX_NOAA_PARAMS,
G2C_NOERROR, g2c_param::g2cat, g2c_param::g2disc, g2c_param::g2num, and param.
intg2c_param_g1tog2(intg1num,intg1ver,int*g2disc,int*g2cat,int*g2num)
Translate GRIB1 parameter to GRIB2 parameter.
Parametersg1num The GRIB1 parameter.
g1ver The GRIB1 parameter table version number.
g2disc Pointer that gets the GRIB2 discipline number. Ignored if NULL.
g2cat Pointer that gets the GRIB2 category number. Ignored if NULL.
g2num Pointer that gets the GRIB2 parameter number. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EFILE Error reading CSV file.
• G2C_ENOPARAM Parameter not found.
Author
Ed Hartnett
Date
9/19/22
Definition at line 1051 of file g2cparams.c.
References G2C_ENOPARAM, G2C_MAX_NOAA_PARAMS, G2C_NOERROR, g2c_param::g2cat, g2c_param::g2disc,
g2c_param::g2num, and param.
intg2c_param_g2tog1(intg2disc,intg2cat,intg2num,int*g1num,int*g1ver)
Translate GRIB2 parameter to GRIB1 parameter.
Parametersg2disc The GRIB2 discipline number.
g2cat The GRIB2 category number.
g2num The GRIB2 parameter number.
g1num Pointer that gets the GRIB1 parameter. Ignored if NULL.
g1ver Pointer that gets the GRIB1 parameter table version number. Ignored if NULL.
Returns
• G2C_NOERROR No error.
• G2C_EFILE Error reading CSV file.
• G2C_ENOPARAM Parameter not found.
Author
Ed Hartnett
Date
9/19/22
Definition at line 1136 of file g2cparams.c.
References g2c_param::g1num, g2c_param::g1ver, G2C_ENOPARAM, G2C_MAX_NOAA_PARAMS, G2C_NOERROR, LOG, and
param.
intg2c_pngpackd(double*fld,size_twidth,size_theight,int*idrstmpl,unsignedchar*cpack,int*lcpack)
This subroutine packs up a double data field into PNG image format. After the data field is scaled, and
the reference value is subtracted out, it is treated as a grayscale image and passed to a PNG encoder. It
also fills in GRIB2 Data Representation Template 5.41 or 5.40010 with the appropriate values.
Parametersfld Pointer to array of double that contains the data values to pack.
width Number of points in the x direction.
height Number of points in the y direction.
idrstmpl Contains the array of values for Data Representation Template 5.41 or 5.40010.
• 0 Reference value - ignored on input, set by pngpack routine.
• 1 Binary Scale Factor - used on input.
• 2 Decimal Scale Factor - used on input.
• 3 number of bits for each grayscale pixel value - ignored on input.
• 4 Original field type - currently ignored on input, set = 0 on output. Data values assumed to be
reals.
cpack The packed data field.
lcpack length of packed field cpack.
Returns
• G2C_NOERROR No error.
• G2C_EPNG Error encoding/decoding PNG data.
Author
Ed Hartnett
Date
Aug 8, 2022
Definition at line 348 of file pngpack.c.
References G2C_PNG_DRS_TEMPLATE_LEN, and pngpack_int().
intg2c_pngpackf(float*fld,size_twidth,size_theight,int*idrstmpl,unsignedchar*cpack,int*lcpack)
This subroutine packs up a float data field into PNG image format. After the data field is scaled, and
the reference value is subtracted out, it is treated as a grayscale image and passed to a PNG encoder. It
also fills in GRIB2 Data Representation Template 5.41 or 5.40010 with the appropriate values.
Parametersfld Pointer to array of float that contains the data values to pack.
width Number of points in the x direction.
height Number of points in the y direction.
idrstmpl Contains the array of values for Data Representation Template 5.41 or 5.40010.
• 0 Reference value - ignored on input, set by pngpack routine.
• 1 Binary Scale Factor - used on input.
• 2 Decimal Scale Factor - used on input.
• 3 number of bits for each grayscale pixel value - ignored on input.
• 4 Original field type - currently ignored on input, set = 0 on output. Data values assumed to be
reals.
cpack The packed data field.
lcpack length of packed field cpack.
Returns
• G2C_NOERROR No error.
• G2C_EPNG Error encoding/decoding PNG data.
Author
Ed Hartnett
Definition at line 294 of file pngpack.c.
References G2C_PNG_DRS_TEMPLATE_LEN, and pngpack_int().
intg2c_pngunpackd(unsignedchar*cpack,size_tlen,int*idrstmpl,size_tndpts,double*fld)
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB2
Data Representation Template 5.41 or 5.40010.
Parameterscpack The packed data field (character*1 array).
len length of packed field cpack().
idrstmpl Pointer to array of values for Data Representation Template 5.41 or 5.40010.
ndpts The number of data values to unpack.
fld Contains the unpacked data values.
Returns
• G2C_NOERROR No Error.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
Aug 8, 2022
Definition at line 188 of file pngunpack.c.
References G2C_PNG_DRS_TEMPLATE_LEN, and pngunpack_int().
intg2c_pngunpackf(unsignedchar*cpack,size_tlen,int*idrstmpl,size_tndpts,float*fld)
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB2
Data Representation Template 5.41 or 5.40010.
Parameterscpack The packed data field (character*1 array).
len length of packed field cpack().
idrstmpl Pointer to array of values for Data Representation Template 5.41 or 5.40010.
ndpts The number of data values to unpack.
fld Contains the unpacked data values.
Returns
• G2C_NOERROR No Error.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
Sep 8, 2022
Definition at line 156 of file pngunpack.c.
References G2C_PNG_DRS_TEMPLATE_LEN, and pngunpack_int().
intg2c_seekmsg(intg2cid,size_tskip,size_t*offset,size_t*msglen)
Search a file for the next GRIB2 Message. The search is terminated when a GRIB2 message is found, or the
end of the file is reached.
Parametersg2cid ID of an open GRIB2 file, returned from g2c_open()/g2c_create().
skip The number of bytes in the file to skip before starting the search.
offset Pointer that gets the number of bytes to skip from the beggining of the file to where the GRIB
message starts. Ignored if NULL.
msglen Pointer that gets the number of bytes in message (set to 0, if no message found). Ignored if
NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID Bad g2cid.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
2022-09-11
Definition at line 56 of file g2cfile.c.
References G2C_EBADID, G2C_EFILE, G2C_ENOMEM, g2c_file, G2C_MAGIC_HEADER, G2C_NOERROR,
G2C_SEEKMSG_BUFSIZE, hton64, and LOG.
Referenced by read_metadata().
intg2c_set_log_level(intnew_level)
Use this to set the global log level. Settings:
• -1 turn off all logging.
• 0 show only errors.
• 1 output useful as verbose to utilities.
• 2 or 3 shows some/all calls to top-level functions.
• 4+ ever greater levels of detail.
If logging is not enabled when building NCEPLIBS-g2c, this function will do nothing.
Parametersnew_level The new logging level.
ReturnsG2C_NOERROR No error.
Author
Ed Hartnett
Definition at line 129 of file util.c.
References G2C_NOERROR, and LOG.
Referenced by main().
constchar*g2c_strerror(intg2cerr)
Given an error code, return an error message.
Parametersg2cerr An error number returned by one of the g2c_* functions.
Returns
The error message.
Author
Ed Hartnett
Definition at line 29 of file g2cutil.c.
References G2C_EBADEND, G2C_EBADID, G2C_EBADSECTION, G2C_EBADTEMPLATE, G2C_EBADTYPE, G2C_EFILE,
G2C_EINVAL, G2C_EJPEG, G2C_EMSG, G2C_EMSGCOMPLETE, G2C_ENAMETOOLONG, G2C_ENOEND, G2C_ENOMEM, G2C_ENOMSG,
G2C_ENOPARAM, G2C_ENOPRODUCT, G2C_ENOSECTION, G2C_ENOTEMPLATE, G2C_ENOTFOUND, G2C_ENOTGRIB,
G2C_ENOTGRIB2, G2C_EPNG, G2C_ETOOMANYFILES, G2C_EXML, and G2C_NOERROR.
intg2c_unpack7(unsignedchar*cgrib,intigdsnum,intgds_tmpl_len,longlongint*gdstmpl,intidrsnum,intdrs_tmpl_len,longlongint*drstmpl,intndpts,float*fld)
This subroutine unpacks Section 7 (Data Section) of a GRIB2 message. This function is the newer version
of g2_unpack7().
Parameterscgrib char array containing Section 7 of the GRIB2 message
igdsnum Grid Definition Template Number (see Code Table 3.0). (Only used for DRS Template 5.51.) May
be zero for other templates.
gds_tmpl_len Number of elements in the GDS template.
gdstmpl Pointer to an integer array containing the data values for the specified Grid Definition
Template (N=igdsnum). Each element of this integer array contains an entry (in the order specified)
of Grid Definition Template 3.N. (Only used for DRS Template 5.51). May be NULL.
idrsnum Data Representation Template Number (see Code Table 5.0).
drs_tmpl_len Number of elements in the DRS template.
drstmpl Pointer to an integer array containing the data values for the specified Data Representation
Template (N=idrsnum). Each element of this integer array contains an entry (in the order specified)
of Data Representation Template 5.N
ndpts Number of data points to be unpacked and returned.
fld Pointer which the data. Memory must be allocated in advance by caller.
Returns
• G2_NO_ERROR No error.
• G2_UNPACK_BAD_SEC Array passed had incorrect section number.
• G2_UNPACK7_BAD_DRT Unrecognized Data Representation Template.
• G2_UNPACK7_WRONG_GDT need one of GDT 3.50 through 3.53 to decode DRT 5.51
• G2_UNPACK_NO_MEM Memory allocation error.
• G2_UNPACK7_CORRUPT_SEC Corrupt section 7.
Author
Stephen Gilbert
Date
2002-10-31
Definition at line 259 of file g2_unpack7.c.
References G2C_EINVAL, G2C_ENOMEM, g2c_unpack7_int(), and LOG.
Referenced by g2c_get_prod().
intg2c_write_index(intg2cid,intmode,constchar*index_file)
Create an index file from a GRIB2 file, just like those created by the grb2index utility. The index file
starts with two header records:
1. 81-byte header with 'gb2ix1' in columns 42-47.
2. 81-byte header with number of bytes to skip before index records, total length in bytes of the index
records, number of index records, and grib file basename written in format ('ix1form:',3i10,2x,a40).
Each following index record corresponds to a grib message and has the internal format:
• byte 001 - 004 length of index record
• byte 005 - 008 bytes to skip in data file before grib message
• byte 009 - 012 bytes to skip in message before lus (local use) (0, if none).
• byte 013 - 016 bytes to skip in message before gds
• byte 017 - 020 bytes to skip in message before pds
• byte 021 - 024 bytes to skip in message before drs
• byte 025 - 028 bytes to skip in message before bms
• byte 029 - 032 bytes to skip in message before data section
• byte 033 - 040 bytes total in the message
• byte 041 - 041 grib version number (currently 2)
• byte 042 - 042 message discipline
• byte 043 - 044 field number within grib2 message (1-based)
• byte 045 - ii identification section (ids)
• byte ii+1- jj grid definition section (gds)
• byte jj+1- kk product definition section (pds)
• byte kk+1- ll the data representation section (drs)
• byte ll+1-ll+6 first 6 bytes of the bit map section (bms)
Parametersg2cid File it for an open GRIB2 file, as returned by g2c_open().
mode Mode flags. Set G2C_NOCLOBBER to avoid overwriting and existing file.
index_file The name that will be given to the index file. An existing file will be overwritten.
Returns
• G2C_NOERROR No error.
Author
Ed Hartnett
Date
10/12/22
Definition at line 431 of file g2cindex.c.
References g2c_message_info::bytes_in_msg, g2c_message_info::bytes_to_local,
g2c_message_info::bytes_to_msg, g2c_section_info::bytes_to_sec, g2c_message_info::discipline,
g2c_file_info::f, g2c_message_info::file, G2C_EBADID, G2C_EFILE, G2C_EINVAL, g2c_file,
g2c_file_io_ubyte(), g2c_file_io_uint(), G2C_FILE_WRITE, g2c_get_prod_sections(), G2C_INDEX_BASENAME_LEN,
G2C_INDEX_BITMAP_BYTES, G2C_INDEX_FIXED_LEN, G2C_INDEX_FIXED_LEN_2, G2C_INDEX_HEADER_LEN,
G2C_LARGE_FILE_INDEX, G2C_MAX_FILES, G2C_NOCLOBBER, G2C_NOERROR, g2c_rw_section1_metadata(),
g2c_rw_section3_metadata(), g2c_rw_section4_metadata(), g2c_rw_section5_metadata(),
g2c_start_index_record(), g2c_start_index_record_lf(), LOG, g2c_message_info::master_version, MUTEX_LOCK,
MUTEX_UNLOCK, g2c_message_info::next, g2c_message_info::num_fields, ONE_BYTE, g2c_message_info::sec1_len,
and g2c_section_info::sec_len.
Referenced by main().
voidseekgb(FILE*lugb,g2intiseek,g2intmseek,g2int*lskip,g2int*lgrib)
Search a file for the next GRIB Message. The search is done starting at byte offset iseek of the file
referenced by lugb for mseek bytes at a time. If found, the starting position and length of the message
are returned in lskip and lgrib, respectively. The search is terminated when an EOF or I/O error is
encountered.
ProgramHistoryLog
Date Programmer Comments 2002-10-28 GILBERT Modified from Iredell's skgb subroutine
2009-01-16 VUONG Changed lskip to 4 instead of sizof(g2int)
Parameterslugb FILE pointer for the file to search. File must be opened before this routine is called.
iseek The number of bytes in the file to skip before search.
mseek The maximum number of bytes to search at a time (must be at least 16, but larger numbers like
4092 will result in better perfomance).
lskip Pointer that gets the number of bytes to skip from the beggining of the file to where the GRIB
message starts.
lgrib Pointer that gets the number of bytes in message (set to 0, if no message found).
Author
Stephen Gilbert
Date
2002-10-28
Definition at line 46 of file seekgb.c.
References BYTE, gbit(), and LOG.
Referenced by g2c_get_msg().