NCEPLIBS-g2c 1.9.0
|
Write summary output to an index file, as is done by utility grb2index. More...
Go to the source code of this file.
Macros | |
#define | G2C_INDEX_BASENAME_LEN 40 |
Length of the basename in header record 2. | |
#define | G2C_INDEX_BITMAP_BYTES 6 |
Length of bitmap section included in the index record. | |
#define | G2C_INDEX_DATE_STR_LEN 10 |
Length of date string in index record. | |
#define | G2C_INDEX_FIXED_LEN 44 |
Length of beginning of index record. | |
#define | G2C_INDEX_FIXED_LEN_2 48 |
Length of beginning of index record for large files. | |
#define | G2C_INDEX_HEADER_LEN 81 |
Length of the two header lines at the top of the index file. | |
#define | G2C_INDEX_STR1_LEN 7 |
Length of str1 string in index record. | |
#define | G2C_INDEX_TIME_STR_LEN 8 |
Length of time string in index record. | |
Functions | |
EXTERN_MUTEX (m) | |
Use externally-defined mutex for thread-safety. | |
int | g2c_get_prod_sections (G2C_MESSAGE_INFO_T *msg, int fieldnum, G2C_SECTION_INFO_T **sec3, G2C_SECTION_INFO_T **sec4, G2C_SECTION_INFO_T **sec5, G2C_SECTION_INFO_T **sec6, G2C_SECTION_INFO_T **sec7) |
Given a pointer to a message, and a field number, return pointers to all relevent section structs for that product. | |
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. | |
int | g2c_open_index1 (const char *index_file) |
Open a GRIB1 index file and read the contents. | |
int | g2c_start_index1_record (FILE *f, int rw_flag, unsigned int *b2_msg, unsigned int *b2_pds, unsigned int *b2_gds, unsigned int *b2_bms, unsigned int *b2_bds, unsigned int *msglen, unsigned char *version, unsigned char *pds_val, unsigned char *gds_val, unsigned char *bms_val, unsigned char *bds_val, unsigned char *pds_val2, unsigned char *pds_val3, unsigned char *gds_val2) |
Read or write the start of a version 1 index record. | |
int | g2c_start_index_record (FILE *f, int rw_flag, int *reclen, int *msg, int *local, int *gds, int *pds, int *drs, int *bms, int *data, size_t *msglen, unsigned char *version, unsigned char *discipline, short *fieldnum) |
Read or write the start of a version 2 index record. | |
int | g2c_start_index_record_lf (FILE *f, int rw_flag, int *reclen, size_t *msg, int *local, int *gds, int *pds, int *drs, int *bms, int *data, size_t *msglen, unsigned char *version, unsigned char *discipline, short *fieldnum) |
Read or write the start of a version 2 index record for large file. | |
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. | |
static int | read_hdr_rec1 (FILE *f, int *ip, int *jp, int *kp, char *date_str, char *time_str) |
Read the header record apparently named after Steve Lord. | |
static int | read_hdr_rec2 (FILE *f, int *skipp, int *total_lenp, int *num_recp, char *basename, int *index_version) |
Read the second header record of an index file. | |
Variables | |
G2C_FILE_INFO_T | g2c_file [G2C_MAX_FILES+1] |
Global file information. | |
Write summary output to an index file, as is done by utility grb2index.
Definition in file g2cindex.c.
#define G2C_INDEX_BASENAME_LEN 40 |
Length of the basename in header record 2.
Definition at line 20 of file g2cindex.c.
#define G2C_INDEX_BITMAP_BYTES 6 |
Length of bitmap section included in the index record.
Definition at line 23 of file g2cindex.c.
#define G2C_INDEX_DATE_STR_LEN 10 |
Length of date string in index record.
Definition at line 32 of file g2cindex.c.
#define G2C_INDEX_FIXED_LEN 44 |
Length of beginning of index record.
Definition at line 26 of file g2cindex.c.
#define G2C_INDEX_FIXED_LEN_2 48 |
Length of beginning of index record for large files.
Definition at line 29 of file g2cindex.c.
#define G2C_INDEX_HEADER_LEN 81 |
Length of the two header lines at the top of the index file.
Definition at line 17 of file g2cindex.c.
#define G2C_INDEX_STR1_LEN 7 |
Length of str1 string in index record.
Definition at line 38 of file g2cindex.c.
#define G2C_INDEX_TIME_STR_LEN 8 |
Length of time string in index record.
Definition at line 35 of file g2cindex.c.
EXTERN_MUTEX | ( | m | ) |
Use externally-defined mutex for thread-safety.
int g2c_get_prod_sections | ( | G2C_MESSAGE_INFO_T * | msg, |
int | fieldnum, | ||
G2C_SECTION_INFO_T ** | sec3, | ||
G2C_SECTION_INFO_T ** | sec4, | ||
G2C_SECTION_INFO_T ** | sec5, | ||
G2C_SECTION_INFO_T ** | sec6, | ||
G2C_SECTION_INFO_T ** | sec7 | ||
) |
Given a pointer to a message, and a field number, return pointers to all relevent section structs for that product.
Each product is defined in a section 4, and has an associated section 3, 5, 6, and 7.
msg | Pointer to a G2C_MESSAGE_INFO_T with information about the message. |
fieldnum | The field number (first field in message is 0). |
sec3 | Pointer that gets a pointer to the G2C_SECTION_INFO_T struct for the section 3 associated with this product. |
sec4 | Pointer that gets a pointer to the G2C_SECTION_INFO_T struct for the section 4 associated with this product. |
sec5 | Pointer that gets a pointer to the G2C_SECTION_INFO_T struct for the section 5 associated with this product. |
sec6 | Pointer that gets a pointer to the G2C_SECTION_INFO_T struct for the section 6 associated with this product. NULL is returned if there is no section 6. |
sec7 | Pointer that gets a pointer to the G2C_SECTION_INFO_T struct for the section 7 associated with this product. |
Definition at line 319 of file g2cindex.c.
References G2C_EINVAL, G2C_ENOSECTION, G2C_NOERROR, g2c_section_info::next, g2c_section_info::prev, g2c_message_info::sec, g2c_section_info::sec_info, and g2c_section_info::sec_num.
Referenced by g2c_write_index().
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.
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.
data_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. |
Definition at line 895 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().
int g2c_open_index1 | ( | const char * | index_file | ) |
Open a GRIB1 index file and read the contents.
index_file | The name that will be given to the index file. An existing file will be overwritten. |
Definition at line 793 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().
int g2c_start_index1_record | ( | FILE * | f, |
int | rw_flag, | ||
unsigned int * | b2_msg, | ||
unsigned int * | b2_pds, | ||
unsigned int * | b2_gds, | ||
unsigned int * | b2_bms, | ||
unsigned int * | b2_bds, | ||
unsigned int * | msglen, | ||
unsigned char * | version, | ||
unsigned char * | pds_val, | ||
unsigned char * | gds_val, | ||
unsigned char * | bms_val, | ||
unsigned char * | bds_val, | ||
unsigned char * | pds_val2, | ||
unsigned char * | pds_val3, | ||
unsigned char * | gds_val2 | ||
) |
Read or write the start of a version 1 index record.
For more detail on version 1 of the index format, see the grbindex documentation in the NCEPLIBS-grib_util.
f | FILE * to open index file. |
rw_flag | True if function should write, false if it should read. |
b2_msg | Pointer that gets the bytes to skip in file before msg. |
b2_pds | Pointer that gets bytes to skip in message before pds. |
b2_gds | Pointer that gets bytes to skip in message before gds (0 if no gds). |
b2_bms | Pointer that gets bytes to skip in message before bms (0 if no bms). |
b2_bds | Pointer that gets bytes to skip in message before bds. |
msglen | Pointer that gets bytes total in the message. |
version | Pointer that gets grib version number (always 1 for this function). |
pds_val | Pointer that gets an arry of 27 bytes of the product definition section (pds). |
gds_val | Pointer that gets an arry of 41 bytes of the gds. |
bms_val | Pointer that gets an arry of 5 bytes of the bms. |
bds_val | Pointer that gets an arry of 10 bytes, bytes 41-100 of the bds. |
pds_val2 | Pointer that gets an arry of 59 bytes 41-100 of the pds. Ignored if null. |
pds_val3 | Pointer that gets an arry of 11 bytes 29-40 of the pds. Ignored if null. |
gds_val2 | Pointer that gets an arry of 135 bytes 43-178 of the gds. Ignored if null. |
Definition at line 240 of file g2cindex.c.
References G2C_EFILE, G2C_EINVAL, g2c_file_io_ubyte(), g2c_file_io_uint(), G2C_INDEX1_BDS_VAL_LEN, G2C_INDEX1_BMS_VAL_LEN, G2C_INDEX1_GDS_VAL_LEN, G2C_INDEX1_PDS_VAL_LEN, and G2C_NOERROR.
Referenced by g2c_open_index1().
int g2c_start_index_record | ( | FILE * | f, |
int | rw_flag, | ||
int * | reclen, | ||
int * | msg, | ||
int * | local, | ||
int * | gds, | ||
int * | pds, | ||
int * | drs, | ||
int * | bms, | ||
int * | data, | ||
size_t * | msglen, | ||
unsigned char * | version, | ||
unsigned char * | discipline, | ||
short * | fieldnum | ||
) |
Read or write the start of a version 2 index record.
f | FILE * to open index file. |
rw_flag | True if function should write, false if it should read. |
reclen | Pointer to reclen. |
msg | Pointer to msg. |
local | Pointer to local. |
gds | Pointer to gds. |
pds | Pointer to pds. |
drs | Pointer to drs. |
bms | Pointer to bms. |
data | Pointer to data. |
msglen | Pointer to msglen. |
version | Pointer to version. |
discipline | Pointer to discipline. |
fieldnum | Pointer to fieldnum, 0- based. (It is 1-based in the index file.) |
Definition at line 70 of file g2cindex.c.
References G2C_EINVAL, g2c_file_io_short(), g2c_file_io_ubyte(), g2c_file_io_uint(), g2c_file_io_ulonglong(), G2C_NOERROR, and LOG.
Referenced by g2c_open_index(), and g2c_write_index().
int g2c_start_index_record_lf | ( | FILE * | f, |
int | rw_flag, | ||
int * | reclen, | ||
size_t * | msg, | ||
int * | local, | ||
int * | gds, | ||
int * | pds, | ||
int * | drs, | ||
int * | bms, | ||
int * | data, | ||
size_t * | msglen, | ||
unsigned char * | version, | ||
unsigned char * | discipline, | ||
short * | fieldnum | ||
) |
Read or write the start of a version 2 index record for large file.
f | FILE * to open index file. |
rw_flag | True if function should write, false if it should read. |
reclen | Pointer to reclen. |
msg | Pointer to msg. |
local | Pointer to local. |
gds | Pointer to gds. |
pds | Pointer to pds. |
drs | Pointer to drs. |
bms | Pointer to bms. |
data | Pointer to data. |
msglen | Pointer to msglen. |
version | Pointer to version. |
discipline | Pointer to discipline. |
fieldnum | Pointer to fieldnum, 0- based. (It is 1-based in the index file.) |
Definition at line 152 of file g2cindex.c.
References G2C_EINVAL, g2c_file_io_short(), g2c_file_io_ubyte(), g2c_file_io_uint(), g2c_file_io_ulonglong(), G2C_NOERROR, and LOG.
Referenced by g2c_open_index(), and g2c_write_index().
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.
The index file starts with two header records:
Each following index record corresponds to a grib message and has the internal format:
g2cid | 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. |
Definition at line 433 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().
|
static |
Read the header record apparently named after Steve Lord.
This function reads the first of two 81-byte header records of an index file.
f | Pointer to open FILE. |
ip | Pointer that gets i value. Ignored if NULL. |
jp | Pointer that gets j value. Ignored if NULL. |
kp | Pointer that gets k value. Ignored if NULL. |
date_str | Pointer to char array of size G2C_INDEX_DATE_STR_LEN + 1 which will get the date string from the header. Ignored if NULL. |
time_str | Pointer to char array of size G2C_INDEX_TIME_STR_LEN + 1 which will get the time string from the header. Ignored if NULL. |
Definition at line 677 of file g2cindex.c.
References G2C_EFILE, G2C_INDEX_DATE_STR_LEN, G2C_INDEX_HEADER_LEN, G2C_INDEX_STR1_LEN, G2C_INDEX_TIME_STR_LEN, G2C_NOERROR, and LOG.
Referenced by g2c_open_index1().
|
static |
Read the second header record of an index file.
This function reads the second of two 81-byte header records of an index file.
f | Pointer to open FILE. |
skipp | Pointer that gets number of bytes to skip before index records. Ignored if NULL. |
total_lenp | Pointer that gets number of bytes in each index record. Ignored if NULL. |
num_recp | Pointer that gets number of index records in the file. Ignored if NULL. |
basename | Pointer to char array of size G2C_INDEX_BASENAME_LEN + 1 which will get the basename string from the second header record. Ignored if NULL. |
index_version | The version of the index, 1 for legacy, 2 to allow for > 2 GB GRIB2 files. |
Definition at line 746 of file g2cindex.c.
References G2C_EFILE, G2C_INDEX_BASENAME_LEN, G2C_INDEX_HEADER_LEN, and G2C_NOERROR.
Referenced by g2c_open_index1().
|
extern |
Global file information.
Definition at line 10 of file g2cfile.c.
Referenced by g2c_open_index(), and g2c_write_index().