SUBROUTINE RDMSGB(LUNIT,MESG,IRET) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C C SUBPROGRAM: RDMSGB C PRGMMR: ATOR ORG: NP12 DATE: 2005-11-29 C C ABSTRACT: THIS SUBROUTINE READS THE NEXT BUFR MESSAGE FROM LOGICAL C UNIT LUNIT AS AN ARRAY OF BYTES, WHICH ARE THEN TRANSFERRED TO C AN ARRAY OF INTEGER WORDS FOR OUTPUT. C C PROGRAM HISTORY LOG: C 2005-11-29 J. ATOR -- ORIGINAL AUTHOR C C USAGE: CALL RDMSGB (LUNIT, MESG, IRET) C INPUT ARGUMENT LIST: C LUNIT - INTEGER: FORTRAN LOGICAL UNIT NUMBER FOR BUFR FILE C C OUTPUT ARGUMENT LIST: C MESG - *-WORD ARRAY CONTAINING BUFR MESSAGE READ FROM LUNIT C IRET - INTEGER: RETURN CODE: C 0 = normal return C -1 = end-of-file encountered while reading C from LUNIT C -2 = I/O error encountered while reading C from LUNIT C C INPUT FILES: C UNIT "LUNIT" - BUFR FILE C C REMARKS: C THIS ROUTINE CALLS: ICHKSTR IUPBS01 LMSG C THIS ROUTINE IS CALLED BY: READMG C Normally not called by any application C programs. C C ATTRIBUTES: C LANGUAGE: FORTRAN 77 C MACHINE: PORTABLE TO ALL PLATFORMS C C$$$ INCLUDE 'bufrlib.prm' DIMENSION MESG(*) CHARACTER*8 SEC0 CHARACTER*1 CBAY(8*MXMSGLD4) DIMENSION JBAY(MXMSGLD4) EQUIVALENCE (CBAY(1),JBAY(1),SEC0) C----------------------------------------------------------------------- C----------------------------------------------------------------------- SEC0 = ' ' READ(LUNIT,END=100,ERR=200) . SEC0,(CBAY(I),I=9,IUPBS01(JBAY,'LENM')) C Confirm that the first 4 bytes of CBAY contain 'BUFR' encoded in C CCITT IA5 (i.e. ASCII). Note that, since CBAY(1) is equivalenced C to SEC0, then CBAY already contains the entire BUFR message! IF(ICHKSTR('BUFR',CBAY,4).NE.0) GOTO 200 C Transfer the message from CBAY into MESG. DO I=1,LMSG(SEC0) MESG(I) = JBAY(I) ENDDO IRET = 0 RETURN 100 IRET = -1 RETURN 200 IRET = -2 RETURN END