From f54dee83e58b9b940dc8ace3ea475e5156e2225b Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Thu, 24 Jan 2008 15:02:43 +0000 Subject: [PATCH] griblib update --- ChangeLog | 2 +- src/griblib.c | 46 +++++++++++++++++++++++++++++++++++++++------- src/stream.c | 22 +++++++++++++++------- 3 files changed, 55 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5eb4e7cef..dc43dffdf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -2008-01-?? Uwe Schulzweida <Uwe.Schulzweida@zmaw.de> +2008-01-24 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de> * using GRIB library version 1.1.0 * using FILE library version 1.6.0 diff --git a/src/griblib.c b/src/griblib.c index 421cdf134..82281f8b2 100644 --- a/src/griblib.c +++ b/src/griblib.c @@ -1,5 +1,5 @@ -/* Generated automatically from m214003 on Tue Jan 22 14:51:21 CET 2008 */ +/* Generated automatically from m214003 on Thu Jan 24 15:59:29 CET 2008 */ /* GRIBLIB_VERSION="1.1.0" */ @@ -1341,7 +1341,10 @@ void gribPrintSec1(int *isec0, int *isec1) iyear = isec1[9]; if ( iyear != 255 ) { - iyear = ((isec1[20]-1)*100 + isec1[9]); + int date, time; + /* iyear = ((isec1[20]-1)*100 + isec1[9]); */ + gribDateTime(isec1, &date, &time); + iyear = date/10000; fprintf(grprsm, " Year of reference time of data. %9d (%4d)\n", isec1[9], iyear); } else @@ -5007,6 +5010,24 @@ int gribCheckFiletype(int fileID) } +int gribCheckSeek(int fileID, long *offset, int *version) +{ + int ierr; + char buffer[4]; + + ierr = gribFileSeek(fileID, &offset); + + *version = -1; + if ( !ierr ) + { + if ( fileRead(fileID, buffer, 4) == 4 ) + *version = buffer[3]; + } + + return (ierr); +} + + int gribFileSeekOld(int fileID, long *offset) { /* position file pointer after GRIB */ @@ -7331,11 +7352,12 @@ void gribPrintPDS(int nrec, long recpos, long recsize, unsigned char *gribbuffer unsigned char *is = NULL, *pds = NULL, *gds = NULL, *bms = NULL, *bds = NULL; int century, subcenter, decimalscale, nerr; int fc_num = 0; + int date; if ( header ) { fprintf(stdout, - " Rec : PDS Tab Cen Sub Ver Grid Code LTyp Level1 Level2 Date Time P1 P2 TU TR NAVE Scale FCnum\n"); + " Rec : PDS Tab Cen Sub Ver Grid Code LTyp Level1 Level2 Date Time P1 P2 TU TR NAVE Scale FCnum CT\n"); /* ----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+ */ header = 0; } @@ -7373,11 +7395,21 @@ void gribPrintPDS(int nrec, long recpos, long recsize, unsigned char *gribbuffer if ( pds[40] == 1 ) fc_num = GET_UINT1(pds[49]); - fprintf(stdout, "%5d :%4d%4d%4d%4d%4d %4d %4d%4d%7d%7d %8d%6d%3d%3d%3d%3d%5d%6d%5d\n", nrec, + if ( PDS_Year < 0 ) + { + date = (-PDS_Year)*10000+PDS_Month*100+PDS_Day; + century = -century; + } + else + { + date = PDS_Year*10000+PDS_Month*100+PDS_Day; + } + + fprintf(stdout, "%5d :%4d%4d%4d%4d%4d %4d %4d%4d%7d%7d %8d%6d%3d%3d%3d%3d%5d%6d%5d%4d\n", nrec, PDS_Len, PDS_CodeTable, PDS_CenterID, subcenter, PDS_ModelID, PDS_GridDefinition, PDS_Parameter, PDS_LevelType, PDS_Level1, PDS_Level2, - PDS_Date, PDS_Time, PDS_TimePeriod1, PDS_TimePeriod2, PDS_TimeUnit, PDS_TimeRange, - PDS_AvgNum, decimalscale, fc_num); + date, PDS_Time, PDS_TimePeriod1, PDS_TimePeriod2, PDS_TimeUnit, PDS_TimeRange, + PDS_AvgNum, decimalscale, fc_num, century); } @@ -8304,7 +8336,7 @@ int gribUnzip(unsigned char *dbuf, long dbufsize, unsigned char *sbuf, long sbu return (gribLen); } -static const char grb_libvers[] = "1.1.0" " of ""Jan 22 2008"" ""14:51:21"; +static const char grb_libvers[] = "1.1.0" " of ""Jan 24 2008"" ""15:59:29"; diff --git a/src/stream.c b/src/stream.c index a8ebe9776..451cd454a 100644 --- a/src/stream.c +++ b/src/stream.c @@ -104,8 +104,9 @@ static int getFiletype(const char *filename, int *byteorder) int filetype = CDI_EUFTYPE; int fileID; int swap = 0; + int version; long recpos; - char buffer[4]; + char buffer[8]; fileID = fileOpen(filename, "r"); @@ -117,14 +118,18 @@ static int getFiletype(const char *filename, int *byteorder) return (CDI_ESYSTEM); } - if ( fileRead(fileID, buffer, 4) != 4 ) return (CDI_EUFTYPE); + if ( fileRead(fileID, buffer, 8) != 8 ) return (CDI_EUFTYPE); fileRewind(fileID); if ( strncmp(buffer, "GRIB", 4) == 0 ) { - filetype = FILETYPE_GRB; - if ( CDI_Debug ) Message(func, "found GRIB file = %s", filename); + version = buffer[7]; + if ( version <= 1 ) + { + filetype = FILETYPE_GRB; + if ( CDI_Debug ) Message(func, "found GRIB file = %s, version %d", filename); + } } else if ( strncmp(buffer, "CDF\001", 4) == 0 ) { @@ -161,10 +166,13 @@ static int getFiletype(const char *filename, int *byteorder) if ( CDI_Debug ) Message(func, "found IEG file = %s", filename); } #endif - else if ( gribFileSeek(fileID, &recpos) == 0 ) + else if ( gribCheckSeek(fileID, &recpos, &version) == 0 ) { - filetype = FILETYPE_GRB; - if ( CDI_Debug ) Message(func, "found seek GRIB file = %s", filename); + if ( version <= 1 ) + { + filetype = FILETYPE_GRB; + if ( CDI_Debug ) Message(func, "found seek GRIB file = %s", filename); + } } fileClose(fileID); -- GitLab