23 #include <sys/types.h>
26 #define G2C_VERSION "1.8.0"
28 #define G2_PNG_ENABLED 1
29 #define G2_JPEG2000_ENABLED 1
227 unsigned char **csec2);
231 g2int *mappdslen,
float **coordlist,
g2int *numcoord);
260 unsigned char *cpack,
g2int *lcpack);
264 unsigned char *cpack,
g2int *lcpack);
268 unsigned char *cpack,
g2int *lcpack);
286 #define G2C_UINT64 11
289 #define G2C_MAX_FILES 3
290 #define G2C_MAX_NAME 1024
291 #define G2C_NOWRITE 0x0000
292 #define G2C_WRITE 0x0001
293 #define G2C_CLOBBER 0x0000
294 #define G2C_NOCLOBBER 0x0004
297 #define G2C_SECTION0_BYTES 16
301 #define G2C_SECTION1_BYTES 21
303 #define G2C_SECTION0_LEN 3
304 #define G2C_SECTION1_LEN 13
307 #define G2C_MAX_GDS_TEMPLATE 31
308 #define G2C_MAX_GDS_TEMPLATE_MAPLEN 28
309 #define G2C_MAX_PDS_TEMPLATE 47
310 #define G2C_MAX_PDS_TEMPLATE_MAPLEN 45
311 #define G2C_MAX_DRS_TEMPLATE 10
312 #define G2C_MAX_DRS_TEMPLATE_MAPLEN 18
315 int g2c_open(
const char *path,
int mode,
int *g2cid);
316 int g2c_open_index(
const char *data_file,
const char *index_file,
int mode,
int *g2cid);
324 int g2c_inq(
int g2cid,
int *num_msg);
326 int *num_local,
short *center,
short *subcenter,
unsigned char *master_version,
327 unsigned char *local_version);
328 int g2c_inq_msg_time(
int g2cid,
int msg_num,
unsigned char *sig_ref_time,
short *year,
329 unsigned char *month,
unsigned char *day,
unsigned char *hour,
330 unsigned char *minute,
unsigned char *second);
331 int g2c_inq_prod(
int g2cid,
int msg_num,
int prod_num,
int *pds_template_len,
332 int *pds_template,
int *gds_template_len,
int *gds_template,
333 int *drs_template_len,
int *drs_template);
334 int g2c_inq_dim(
int g2cid,
int msg_num,
int prod_num,
int dim_num,
size_t *len,
335 char *name,
float *val);
338 int g2c_get_prod(
int g2cid,
int msg_num,
int prod_num,
int *num_data_points,
344 int *extlen,
int *ext);
346 int *extlen,
int *ext);
351 int g2c_get_msg(
int g2cid,
size_t skip_bytes,
size_t max_bytes,
size_t *bytes_to_msg,
352 size_t *bytes_in_msg,
unsigned char **cbuf);
353 int g2c_find_msg2(
int g2cid,
size_t skip_bytes,
size_t max_bytes,
size_t *bytes_to_msg,
354 size_t *bytes_in_msg);
359 void g2c_gbit_int(
unsigned char *in,
int *iout,
int iskip,
int nbits);
360 int g2c_gbits_int(
unsigned char *in,
int *iout,
int iskip,
int nbits,
362 int g2c_seekmsg(
int g2cid,
size_t skip,
size_t *offset,
size_t *msglen);
372 int g2c_unpack7(
unsigned char *cgrib,
int igdsnum,
int gds_tmpl_len,
long long int *gdstmpl,
373 int idrsnum,
int drs_tmpl_len,
long long int *drstmpl,
int ndpts,
float *
fld);
374 int g2c_pngpackf(
float *
fld,
size_t width,
size_t height,
int *idrstmpl,
375 unsigned char *cpack,
int *lcpack);
376 int g2c_pngpackd(
double *
fld,
size_t width,
size_t height,
int *idrstmpl,
377 unsigned char *cpack,
int *lcpack);
382 int g2c_jpcpackf(
float *
fld,
size_t width,
size_t height,
int *idrstmpl,
383 unsigned char *cpack,
size_t *lcpack);
384 int g2c_jpcpackd(
double *
fld,
size_t width,
size_t height,
int *idrstmpl,
385 unsigned char *cpack,
size_t *lcpack);
391 int ltype,
int ratio,
int retry,
char *outjpc,
394 int g2c_aecpackf(
float *
fld,
size_t width,
size_t height,
int *idrstmpl,
395 unsigned char *cpack,
size_t *lcpack);
396 int g2c_aecpackd(
double *
fld,
size_t width,
size_t height,
int *idrstmpl,
397 unsigned char *cpack,
size_t *lcpack);
410 int g2c_param_g1tog2(
int g1val,
int g1ver,
int *g2disc,
int *g2cat,
int *g2num);
412 int g2c_param_g2tog1(
int g2disc,
int g2cat,
int g2num,
int *g1val,
int *g1ver);
413 int g2c_param_all(
int param_idx,
int *g1ver,
int *g1val,
int *g2disc,
int *g2cat,
414 int *g2num,
char *abbdrev);
417 #define G2C_SECTION0_ARRAY_LEN 3
418 #define G2C_SECTION1_ARRAY_LEN 13
420 #define G2C_JPEG_DRS_TEMPLATE_LEN 7
421 #define G2C_PNG_DRS_TEMPLATE_LEN 5
422 #define G2C_AEC_DRS_TEMPLATE_LEN 8
424 #define G2C_MAX_GRIB_DESC_LEN 512
425 #define G2C_MAX_GRIB_STATUS_LEN 40
426 #define G2C_MAX_GRIB_LEVEL_DESC_LEN 40
427 #define G2C_MAX_GRIB_CODE_LEN 20
428 #define G2C_MAX_GRIB_TITLE_LEN 200
429 #define G2C_MAX_NUM_SECTIONS 1024
431 #define G2C_MAX_NOAA_PARAMS 2000
432 #define G2C_MAX_NOAA_ABBREV_LEN 8
433 #define G2C_MAX_NOAA_PARAM_LINE_LEN 120
435 #define G2C_JASPER_MAX_MEM 268435456
438 #define G2_NO_ERROR 0
439 #define G2_CREATE_GRIB_VERSION -1
440 #define G2_INFO_NO_GRIB 1
441 #define G2_INFO_GRIB_VERSION 2
442 #define G2_INFO_NO_SEC1 3
443 #define G2_INFO_WRONG_END 4
444 #define G2_INFO_BAD_END 5
445 #define G2_INFO_INVAL_SEC 6
446 #define G2_GETFLD_NO_GRIB 1
447 #define G2_GETFLD_GRIB_VERSION 2
448 #define G2_GETFLD_INVAL 3
449 #define G2_GETFLD_WRONG_END 4
450 #define G2_GETFLD_WRONG_NFLDS 6
451 #define G2_GETFLD_BAD_END 7
452 #define G2_GETFLD_INVAL_SEC 8
453 #define G2_GETFLD_NO_DRT 9
454 #define G2_GETFLD_BAD_SEC1 15
455 #define G2_GETFLD_BAD_SEC2 16
456 #define G2_GETFLD_BAD_SEC3 10
457 #define G2_GETFLD_BAD_SEC4 11
458 #define G2_GETFLD_BAD_SEC5 12
459 #define G2_GETFLD_BAD_SEC6 13
460 #define G2_GETFLD_BAD_SEC7 14
461 #define G2_GETFLD_NO_BITMAP 17
462 #define G2_GRIBEND_MSG_INIT -1
463 #define G2_BAD_SEC -4
464 #define G2_UNPACK_BAD_SEC 2
465 #define G2_UNPACK_NO_MEM 6
466 #define G2_UNPACK3_BAD_GDT 5
467 #define G2_UNPACK4_BAD_PDT 5
468 #define G2_UNPACK5_BAD_DRT 7
469 #define G2_UNPACK6_BAD_BITMAP 4
470 #define G2_UNPACK7_CORRUPT_SEC 7
471 #define G2_UNPACK7_WRONG_GDT 5
472 #define G2_UNPACK7_BAD_DRT 4
473 #define G2_ADD_MSG_INIT -1
474 #define G2_ADD_MSG_COMPLETE -2
475 #define G2_BAD_SEC_COUNTS -3
476 #define G2_ADDFIELD_BAD_PDT -5
477 #define G2_ADDFIELD_BAD_GDS -6
478 #define G2_ADDFIELD_BAD_DRT -7
479 #define G2_ADDFIELD_BAD_BITMAP -8
480 #define G2_ADDFIELD_BAD_GDT -9
481 #define G2_ADDFIELD_ERR -10
482 #define G2_ADDGRID_BAD_GDT -5
483 #define G2_JPCUNPACK_MEM 1
484 #define G2_SPECUNPACK_TYPE -3
485 #define G2_JASPER_INIT -2
486 #define G2_JASPER_ENCODE -3
487 #define G2_JASPER_DECODE -3
488 #define G2_JASPER_DECODE_COLOR -5
491 #define G2C_NOERROR 0
493 #define G2C_ENOTGRIB (-50)
494 #define G2C_EMSGCOMPLETE (-51)
495 #define G2C_ENAMETOOLONG (-52)
496 #define G2C_EINVAL (-53)
497 #define G2C_EFILE (-54)
498 #define G2C_EBADID (-55)
499 #define G2C_ETOOMANYFILES (-56)
500 #define G2C_ENOMEM (-57)
501 #define G2C_EMSG (-58)
502 #define G2C_ENOMSG (-59)
503 #define G2C_EXML (-60)
504 #define G2C_ENOTFOUND (-61)
505 #define G2C_ENOTGRIB2 (-62)
506 #define G2C_ENOSECTION (-63)
507 #define G2C_ENOEND (-64)
508 #define G2C_EBADEND (-65)
509 #define G2C_EBADSECTION (-66)
510 #define G2C_EJPEG (-67)
511 #define G2C_EPNG (-68)
512 #define G2C_ENOTEMPLATE (-69)
513 #define G2C_EBADTEMPLATE (-70)
514 #define G2C_ENOPARAM (-71)
515 #define G2C_ENOPRODUCT (-72)
516 #define G2C_EBADTYPE (-73)
517 #define G2C_EAEC (-74)
g2int g2_unpack5(unsigned char *cgrib, g2int *iofst, g2int *ndpts, g2int *idrsnum, g2int **idrstmpl, g2int *mapdrslen)
This subroutine unpacks Section 5 (Data Representation Section) as defined in GRIB Edition 2.
g2int igdtnum
Grid Definition Template Number (See Table 3.1).
g2int jpcunpack(unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, float *fld)
Unpack JPEG2000 compressed data into an array of floats, using info from the GRIB2 Data Representatio...
void g2_free(gribfield *gfld)
This routine frees up memory that was allocated for struct gribfield.
int g2c_inq_prod(int g2cid, int msg_num, int prod_num, int *pds_template_len, int *pds_template, int *gds_template_len, int *gds_template, int *drs_template_len, int *drs_template)
Inquire about a product.
g2int locallen
Length of array local.
g2int g2_create(unsigned char *cgrib, g2int *listsec0, g2int *listsec1)
This routine initializes a new GRIB2 message and packs GRIB2 Section 0 (Indicator Section) and Sectio...
g2int ibmap
Bitmap indicator (see Table 6.0).
int g2c_inq(int g2cid, int *num_msg)
Learn about a GRIB2 file.
void pngpack(float *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack)
This subroutine packs up a float data field into PNG image format.
int g2c_open_index(const char *data_file, const char *index_file, int mode, int *g2cid)
Open a GRIB2 file with the help of an index file.
g2int g2_addgrid(unsigned char *cgrib, g2int *igds, g2int *igdstmpl, g2int *ideflist, g2int idefnum)
This routine packs up a Grid Definition Section (Section 3) and adds it to a GRIB2 message.
const char * g2c_strerror(int g2cerr)
Given an error code, return an error message.
int g2c_jpcunpackd(unsigned char *cpack, size_t len, int *idrstmpl, size_t ndpts, double *fld)
Unpack JPEG2000 compressed data into an array of doubles, using info from the GRIB2 Data Representati...
int g2c_aecpackf(float *fld, size_t width, size_t height, int *idrstmpl, unsigned char *cpack, size_t *lcpack)
This function packs up a float array into a AEC code stream.
g2int interp_opt
Interpretation of list for optional points definition.
g2int ngrdpts
Number of grid points in the defined grid.
int g2c_find_desc_str(char *title, char *code, char *desc)
Given a table title and a code, find a description.
int g2c_dec_jpeg2000(char *injpc, size_t bufsize, int *outfld)
This Function decodes a JPEG2000 code stream specified in the JPEG2000 Part-1 standard (i....
int g2c_open(const char *path, int mode, int *g2cid)
Open an existing GRIB2 file.
g2int pngunpack(unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, float *fld)
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB...
void seekgb(FILE *lugb, g2int iseek, g2int mseek, g2int *lskip, g2int *lgrib)
Search a file for the next GRIB Message.
int g2c_jpcpackd(double *fld, size_t width, size_t height, int *idrstmpl, unsigned char *cpack, size_t *lcpack)
This function packs up a double array into a JPEG2000 code stream.
int g2c_param_g2tog1(int g2disc, int g2cat, int g2num, int *g1val, int *g1ver)
Translate GRIB2 parameter to GRIB1 parameter.
g2int ifldnum
Field number within GRIB message.
int g2c_jpcunpackf(unsigned char *cpack, size_t len, int *idrstmpl, size_t ndpts, float *fld)
Unpack JPEG2000 compressed data into an array of floats, using info from the GRIB2 Data Representatio...
int g2c_param_abbrev(int g2disc, int g2cat, int g2num, char *abbrev)
Get NOAA abbreviation for a GRIB2 parameter.
int g2c_open_index1(const char *index_file)
Open a GRIB1 index file and read the contents.
int g2c_pngunpackd(unsigned char *cpack, size_t len, int *idrstmpl, size_t ndpts, double *fld)
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB...
g2int g2_unpack7(unsigned char *cgrib, g2int *iofst, g2int igdsnum, g2int *igdstmpl, g2int idrsnum, g2int *idrstmpl, g2int ndpts, float **fld)
This subroutine unpacks Section 7 (Data Section) of a GRIB2 message.
g2int g2_unpack4(unsigned char *cgrib, g2int *iofst, g2int *ipdsnum, g2int **ipdstmpl, g2int *mappdslen, float **coordlist, g2int *numcoord)
This subroutine unpacks Section 4 (Product Definition Section) as defined in GRIB Edition 2.
int g2c_aecunpackd(unsigned char *cpack, size_t len, int *idrstmpl, size_t ndpts, double *fld)
Unpack AEC compressed data into an array of doubles, using info from the GRIB2 Data Representation Te...
g2int griddef
Source of grid definition (see Table 3.0).
int g2c_find_desc(char *title, int code, char *desc)
Given a table title and an integer code, find a description.
g2int ipdtnum
Product Definition Template Number (see Table 4.0).
g2int * ipdtmpl
Contains the data values for the Product Definition Template specified by ipdtnum.
g2int discipline
Message Discipline (see Table 0.0).
g2int g2_unpack2(unsigned char *cgrib, g2int *iofst, g2int *lencsec2, unsigned char **csec2)
This subroutine unpacks Section 2 (Local Use Section) as defined in GRIB Edition 2.
int g2c_enc_jpeg2000(unsigned char *cin, int width, int height, int nbits, int ltype, int ratio, int retry, char *outjpc, size_t jpclen)
This Function encodes a grayscale image into a JPEG2000 code stream specified in the JPEG2000 Part-1 ...
g2int numoct_opt
Number of octets needed for each additional grid points definition.
g2int aecunpack(unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, float *fld)
Unpack AEC compressed data into an array of floats, using info from the GRIB2 Data Representation Tem...
g2int g2_unpack1(unsigned char *cgrib, g2int *iofst, g2int **ids, g2int *idslen)
This subroutine unpacks Section 1 - Identification Section as defined in GRIB Edition 2.
int g2c_get_pds_template(int pds_template_num, int *maplen, int *map, int *needext)
Get PDS template information.
int g2c_pngpackd(double *fld, size_t width, size_t height, int *idrstmpl, unsigned char *cpack, int *lcpack)
This subroutine packs up a double data field into PNG image format.
g2int idrtlen
Number of elements in idrtmpl.
int g2c_get_grid_template_extension(int grid_template_num, int *g2c_template, int *extlen, int *ext)
Get grid template extension information.
int g2c_close(int g2cid)
Close a GRIB2 file, freeing resources.
g2int unpacked
Logical value indicating whether the bitmap and data values were unpacked.
int g2c_jpcpackf(float *fld, size_t width, size_t height, int *idrstmpl, unsigned char *cpack, size_t *lcpack)
This function packs up a float array into a JPEG2000 code stream.
int g2c_degrib2(int g2cid, const char *fileout)
Write a summary file like the degrib2 utility.
g2int g2_unpack6(unsigned char *cgrib, g2int *iofst, g2int ngpts, g2int *ibmap, g2int **bmap)
This subroutine unpacks Section 6 (Bit-Map Section) as defined in GRIB Edition 2.
g2int g2_gribend(unsigned char *cgrib)
This routine finalizes a GRIB2 message after all grids and fields have been added.
int g2c_pngunpackf(unsigned char *cpack, size_t len, int *idrstmpl, size_t ndpts, float *fld)
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB...
g2int idsectlen
Number of elements in idsect.
g2int ipdtlen
Number of elements in ipdtmpl - i.e.
int g2c_inq_dim(int g2cid, int msg_num, int prod_num, int dim_num, size_t *len, char *name, float *val)
Learn about the one of the dimensions of a GRIB2 product.
int g2c_inq_msg_time(int g2cid, int msg_num, unsigned char *sig_ref_time, short *year, unsigned char *month, unsigned char *day, unsigned char *hour, unsigned char *minute, unsigned char *second)
Learn about the date/time information in a GRIB2 message.
uint64_t g2intu
Unsigned long integer type.
float * coord_list
Array containing floating point values intended to document the vertical discretisation associated to...
void g2c_free_tables()
Free table memory.
int g2c_get_msg(int g2cid, size_t skip_bytes, size_t max_bytes, size_t *bytes_to_msg, size_t *bytes_in_msg, unsigned char **cbuf)
Search a file for the next GRIB1 or GRIB2 message, and read it, allocating space in memory to hold th...
int g2c_set_log_level(int new_level)
Use this to set the global log level.
int g2c_inq_msg(int g2cid, int msg_num, unsigned char *discipline, int *num_fields, int *num_local, short *center, short *subcenter, unsigned char *master_version, unsigned char *local_version)
Learn about a GRIB2 message.
g2int * igdtmpl
Contains the data values for the Grid Definition Template specified by igdtnum.
g2int idrtnum
Data Representation Template Number (see Table 5.0).
int g2c_write_index(int g2cid, int mode, const char *index_file)
Create an index file from a GRIB2 file, just like those created by the grb2index utility.
g2int g2_addlocal(unsigned char *cgrib, unsigned char *csec2, g2int lcsec2)
This routine adds a Local Use Section (Section 2) to a GRIB2 message.
g2int ndpts
Number of data points unpacked and returned.
int g2c_get_drs_template(int drs_template_num, int *maplen, int *map, int *needext)
Get DRS template information.
int g2c_param_all(int param_idx, int *g1ver, int *g1val, int *g2disc, int *g2cat, int *g2num, char *abbdrev)
Return all the information about a parameter.
g2int * idrtmpl
Contains the data values for the Data Representation Template specified by idrtnum.
int g2c_find_msg2(int g2cid, size_t skip_bytes, size_t max_bytes, size_t *bytes_to_msg, size_t *bytes_in_msg)
Search a file for the next GRIB1 or GRIB2 message.
g2int * list_opt
(Used if numoct_opt .ne.
int g2c_get_prod(int g2cid, int msg_num, int prod_num, int *num_data_points, float *data)
Read the data for a product.
int g2c_param_g1tog2(int g1val, int g1ver, int *g2disc, int *g2cat, int *g2num)
Translate GRIB1 parameter to GRIB2 parameter.
int g2c_unpack7(unsigned char *cgrib, int igdsnum, int gds_tmpl_len, long long int *gdstmpl, int idrsnum, int drs_tmpl_len, long long int *drstmpl, int ndpts, float *fld)
This subroutine unpacks Section 7 (Data Section) of a GRIB2 message.
int g2c_get_pds_template_extension(int pds_template_num, int *g2c_template, int *extlen, int *ext)
Get pds template extension information.
g2int g2_getfld(unsigned char *cgrib, g2int ifldnum, g2int unpack, g2int expand, gribfield **gfld)
This subroutine returns all the metadata, template values, bit-map (if applicable),...
g2int g2_info(unsigned char *cgrib, g2int *listsec0, g2int *listsec1, g2int *numfields, g2int *numlocal)
This subroutine searches through a GRIB2 message and returns the number of gridded fields found in th...
g2int version
GRIB edition number (2).
void jpcpack(float *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack)
This function packs up a float array into a JPEG2000 code stream.
int g2c_aecpackd(double *fld, size_t width, size_t height, int *idrstmpl, unsigned char *cpack, size_t *lcpack)
This function packs up a double array into a AEC code stream.
int g2c_log_file(int g2cid)
Print a summary of the contents of an open GRIB2 file.
g2int g2_addfield(unsigned char *cgrib, g2int ipdsnum, g2int *ipdstmpl, float *coordlist, g2int numcoord, g2int idrsnum, g2int *idrstmpl, float *fld, g2int ngrdpts, g2int ibmap, g2int *bmap)
This routine packs up Sections 4 through 7 for a given field and adds them to a GRIB2 message.
g2int * idsect
Contains the entries in the Identification Section (Section 1).
float * fld
Array of ndpts unpacked data points.
g2int num_coord
Number of values in array coord_list.
g2int g2_unpack3(unsigned char *cgrib, g2int *iofst, g2int **igds, g2int **igdstmpl, g2int *mapgridlen, g2int **ideflist, g2int *idefnum)
This routine unpacks Section 3 (Grid Definition Section) from a GRIB2 message.
int g2c_gbits_int(unsigned char *in, int *iout, int iskip, int nbits, int nskip, int n)
Get bits - unpack bits: Extract arbitrary size values from a packed bit string, right justifying each...
unsigned char * local
Pointer to character array containing contents of Local Section 2, if included.
g2int expanded
Logical value indicating whether the data field was expanded to the grid in the case where a bit-map ...
g2int num_opt
(Used if numoct_opt .ne.
int g2c_pngpackf(float *fld, size_t width, size_t height, int *idrstmpl, unsigned char *cpack, int *lcpack)
This subroutine packs up a float data field into PNG image format.
g2int igdtlen
Number of elements in igdtmpl - i.e.
int g2c_compare(int g2cid1, int g2cid2)
Compare the metadata of two open GRIB2 files.
g2int * bmap
Integer array containing decoded bitmap, if ibmap=0 or ibap=254.
int g2c_aecunpackf(unsigned char *cpack, size_t len, int *idrstmpl, size_t ndpts, float *fld)
Unpack AEC compressed data into an array of floats, using info from the GRIB2 Data Representation Tem...
int64_t g2int
Long integer type.
int g2c_get_grid_template(int grid_template_num, int *maplen, int *map, int *needext)
Get grid template information.
int g2c_seekmsg(int g2cid, size_t skip, size_t *offset, size_t *msglen)
Search a file for the next GRIB2 Message.
void g2c_gbit_int(unsigned char *in, int *iout, int iskip, int nbits)
Get bits - unpack bits: Extract arbitrary size values from a packed bit string, right justifying each...
void aecpack(float *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack)
This function packs up a float array into a AEC code stream.