#include "cbfcmn.h" void cbf_read_ ( barray, nbytes, iret ) unsigned char *barray; int *nbytes; int *iret; /************************************************************************ * cbf_read * * * * This function reads an entire message from a BUFR file. * * * * cbf_read ( barray, nbytes, iret ) * * * * Output parameters: * * *barray unsigned char Byte array * * *nbytes int Number of bytes * * *iret int Return code * * -2 = Error reading data * ** * * Log: * * S. Jacobs/NCEP 11/98 * ***********************************************************************/ { int ier, nbuf, i, iostat, done; unsigned char buffer[8]; byte_to_int msize; /*---------------------------------------------------------------------*/ *iret = 0; done = G_FALSE; iostat = 0; while ( iostat == 0 && ! done ) { cfl_seek ( fpbf, ibcnt, SEEK_SET, &iostat ); if ( iostat == 0 ) cfl_read ( fpbf, 8, buffer, &nbuf, &iostat ); if ( iostat == 0 ) { if ( buffer[0] == 'B' && buffer[1] == 'U' && buffer[2] == 'F' && buffer[3] == 'R' ) { msize.byte[0] = 0; for ( i = 1; i < 4; i++ ) { msize.byte[i] = buffer[i+3]; } cfl_seek ( fpbf, ibcnt, SEEK_SET, &ier ); cfl_read ( fpbf, msize.integer, barray, &nbuf, &ier ); if ( barray[msize.integer-4] == '7' && barray[msize.integer-3] == '7' && barray[msize.integer-2] == '7' && barray[msize.integer-1] == '7' ) { *nbytes = msize.integer; ibcnt += *nbytes; } else { *iret = -2; *nbytes = 0; } done = G_TRUE; } else { ibcnt++; } } else { *iret = -2; *nbytes = 0; } } }