<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='WTSTAT'><A href='../../html_code/bufr/wtstat.f.html#WTSTAT' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
SUBROUTINE WTSTAT(LUNIT,LUN,IL,IM) 22,6
C$$$ SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM: WTSTAT
C PRGMMR: WOOLLEN ORG: NP20 DATE: 1994-01-06
C
C ABSTRACT: THIS SUBROUTINE EITHER DISCONNECTS THE INPUT LOGICAL UNIT
C NUMBER LUNIT (AND ITS ASSOCIATED BUFR FILE) FROM THE BUFR ARCHIVE
C LIBRARY SOFTWARE OR IT CONNECTS IT AS EITHER AN INPUT OR OUPUT FILE
C AND DEFINES A BUFR MESSAGE AS BEING EITHER OPENED OR CLOSED IN
C MEMORY FOR THE BUFR FILE IN LUNIT. THIS INFORMATION IS STORED IN
C THE INTERNAL ARRAYS IOLUN AND IOMSG IN COMMON BLOCK /STBFR/.
C
C PROGRAM HISTORY LOG:
C 1994-01-06 J. WOOLLEN -- ORIGINAL AUTHOR
C 1998-07-08 J. WOOLLEN -- REPLACED CALL TO CRAY LIBRARY ROUTINE
C "ABORT" WITH CALL TO NEW INTERNAL BUFRLIB
C ROUTINE "BORT"
C 1999-11-18 J. WOOLLEN -- THE NUMBER OF BUFR FILES WHICH CAN BE
C OPENED AT ONE TIME INCREASED FROM 10 TO 32
C (NECESSARY IN ORDER TO PROCESS MULTIPLE
C BUFR FILES UNDER THE MPI)
C 2003-11-04 J. ATOR -- CORRECTED A "TYPO" IN TEST FOR VALID VALUE
C FOR "IM"; ADDED DOCUMENTATION
C 2003-11-04 S. BENDER -- ADDED REMARKS/BUFRLIB ROUTINE
C INTERDEPENDENCIES
C 2003-11-04 D. KEYSER -- UNIFIED/PORTABLE FOR WRF; ADDED HISTORY
C DOCUMENTATION; OUTPUTS MORE COMPLETE
C DIAGNOSTIC INFO WHEN ROUTINE TERMINATES
C ABNORMALLY
C
C USAGE: CALL WTSTAT
(LUNIT, LUN, IL, IM)
C INPUT ARGUMENT LIST:
C LUNIT - INTEGER: FORTRAN LOGICAL UNIT NUMBER FOR BUFR FILE
C LUN - INTEGER: I/O STREAM INDEX ASSOCIATED WITH LOGICAL UNIT
C LUNIT
C IL - INTEGER: LOGICAL UNIT STATUS INDICATOR:
C 0 = disconnect LUNIT w.r.t. BUFR Archive
C Library software (all information
C associated with LUNIT is deleted from
C within internal arrays)
C 1 = connect LUNIT as an output file w.r.t. to
C BUFR Archive Library software
C -1 = connect LUNIT as an input file w.r.t. to
C BUFR Archive Library software
C IM - INTEGER: DEFINES WHETHER THERE IS A BUFR MESSAGE
C CURRENTLY OPEN WITHIN MEMORY FOR THIS LUNIT (IF IT IS
C CONNECTED, I.E., IL .NE. ZERO):
C 0 = no
C 1 = yes
C
C REMARKS:
C THIS ROUTINE CALLS: BORT
C THIS ROUTINE IS CALLED BY: CLOSBF CLOSMG OPENBF OPENMB
C OPENMG RDMEMM READERME REWNBF
C 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'
COMMON /STBFR/ IOLUN(NFILES),IOMSG(NFILES)
CHARACTER*128 BORT_STR
C-----------------------------------------------------------------------
C-----------------------------------------------------------------------
C CHECK ON THE ARGUMENTS
C ----------------------
IF(LUNIT.LE.0) GOTO 900
IF(LUN .LE.0) GOTO 901
IF(IL.LT.-1 .OR. IL.GT.1) GOTO 902
IF(IM.LT. 0 .OR. IM.GT.1) GOTO 903
C CHECK ON LUNIT-LUN COMBINATION
C ------------------------------
IF(ABS(IOLUN(LUN)).NE.LUNIT) THEN
IF(IOLUN(LUN).NE.0) GOTO 905
ENDIF
C RESET THE FILE STATUSES
C -----------------------
IF(IL.NE.0) THEN
IOLUN(LUN) = SIGN(LUNIT,IL)
IOMSG(LUN) = IM
ELSE
IOLUN(LUN) = 0
IOMSG(LUN) = 0
ENDIF
C EXITS
C -----
RETURN
900 WRITE(BORT_STR,'("BUFRLIB: WTSTAT - INVALID UNIT NUMBER PASSED '//
. ' INTO FIRST ARGUMENT (INPUT) (=",I3,")")') LUNIT
CALL BORT
(BORT_STR)
901 WRITE(BORT_STR,'("BUFRLIB: WTSTAT - INVALID I/O STREAM INDEX '//
. 'PASSED INTO SECOND ARGUMENT (INPUT) (=",I3,")")') LUN
CALL BORT
(BORT_STR)
902 WRITE(BORT_STR,'("BUFRLIB: WTSTAT - INVALID LOGICAL UNIT STATUS'//
. ' INDICATOR PASSED INTO THIRD ARGUMENT (INPUT) (=",I4,")")') IL
CALL BORT
(BORT_STR)
903 WRITE(BORT_STR,'("BUFRLIB: WTSTAT - INVALID BUFR MESSAGE STATUS'//
. ' INDICATOR PASSED INTO FOURTH ARGUMENT (INPUT) (=",I4,")")') IM
CALL BORT
(BORT_STR)
905 WRITE(BORT_STR,'("BUFRLIB: WTSTAT - ATTEMPTING TO REDEFINE '//
. 'EXISTING FILE UNIT (LOGICAL UNIT NUMBER ",I3,")")') IOLUN(LUN)
CALL BORT
(BORT_STR)
END