SUBROUTINE PKVS1(IL,IV)

C$$$  SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM:    PKVS1
C   PRGMMR: ATOR            ORG: NP12       DATE: 2004-08-18
C
C ABSTRACT: THIS SUBROUTINE IS USED TO SPECIFY A VALUE IV TO BE WRITTEN
C   INTO BYTE IL OF SECTION 1 (OR INTO BYTE 8 OF SECTION 0, IF IL = 0)
C   FOR ALL BUFR MESSAGES THAT WILL BE OUTPUT BY FUTURE CALLS TO ANY
C   OF THE BUFR ARCHIVE LIBRARY SUBROUTINES WHICH CREATE SUCH MESSAGES
C   (E.G. WRITCP, WRITSB, COPYMG, WRITSA, ETC.).  THIS SUBROUTINE CAN  
C   BE CALLED AT ANY TIME, INCLUDING BEFORE THE FIRST CALL TO BUFR
C   ARCHIVE LIBRARY SUBROUTINE OPENBF IF IT IS DESIRED FOR THE NEW VALUE
C   TO ALSO BE INCLUDED IN ANY DX DICTIONARY TABLE MESSAGES THAT WILL BE
C   OUTPUT BY BUFR ARCHIVE LIBRARY SUBROUTINE WRITDX.  IF MULTIPLE
C   VALUES ARE DESIRED TO BE CHANGED IN SECTION 1 (OR 0) OF FUTURE
C   OUTPUT MESSAGES, THEN EACH SUCH VALUE (AND CORRESPONDING LOCATION)
C   SHOULD BE SPECIFIED USING A SEPARATE CALL TO THIS SUBROUTINE.
C   IN ANY CASE, EACH CALL TO THIS SUBROUTINE WITH A PARTICULAR IL VALUE
C   OVERRIDES ANY PREVIOUS CALL(S) WITH THAT SAME IL VALUE (OR, IN THE
C   CASE OF THE FIRST CALL WITH A PARTICULAR IL VALUE, IT OVERRIDES THE
C   DEFAULT VALUE FOR THE CORRESPONDING BYTE LOCATION!).  NOTE THAT THIS
C   SUBROUTINE IS CONSIDERED OBSOLETE AND MAY BE REMOVED FROM THE BUFR
C   ARCHIVE LIBRARY IN A FUTURE VERSION; USERS SHOULD INSTEAD MIGRATE TO
C   THE USE OF BUFR ARCHIVE LIBRARY SUBROUTINE PKVS01.
C
C PROGRAM HISTORY LOG:
C 2004-08-18  J. ATOR    -- ORIGINAL AUTHOR
C 2005-11-29  J. ATOR    -- ADDED SPECIAL IL=-99 INITIALIZATION OPTION
C			    FOR INTERNAL USE WITHIN BUFRLIB; MARKED AS
C                           OBSOLETE AND ADDED PRINT NOTIFICATION
C
C USAGE:    CALL PKVS1(IL,IV)
C   INPUT ARGUMENT LIST:
C     IL       - INTEGER: BYTE TO OVERWRITE WITHIN SECTION 1 OF ALL
C                FUTURE OUTPUT BUFR MESSAGES:
C                       0 = OVERWRITE BYTE 8 OF SECTION 0
C		      -99 = SPECIAL FLAG TO FORCE INITIALIZATION OF
C			    NCOD=0 WITHIN COMMON /SECT01/; IN THIS
C			    CASE THE INPUT VALUE IV IS IGNORED
C			    (NOTE: AN APPLICATION PROGRAM SHOULD NEVER
C			    ITSELF NEED TO DO THIS!)
C     IV       - INTEGER: NEW VALUE FOR BYTE POINTED TO BY IL
C
C REMARKS:
C    THIS ROUTINE CALLS:        BORT
C    THIS ROUTINE IS CALLED BY: BFRINI
C                               Also called by application programs.
C
C ATTRIBUTES:
C   LANGUAGE: FORTRAN 77
C   MACHINE:  PORTABLE TO ALL PLATFORMS
C
C$$$

      PARAMETER (MXCOD=15)

      COMMON /SECT01/ NCOD,ILCOD(MXCOD),IVCOD(MXCOD)

      COMMON /QUIET / IPRT

      CHARACTER*128 BORT_STR

      DATA IFIRST/0/

      SAVE IFIRST

C-----------------------------------------------------------------------
C-----------------------------------------------------------------------

      IF(IFIRST.EQ.0) THEN

C	NOTE THAT WE ARE INITIALIZING NCOD=0 HERE (RATHER THAN WITHIN
C	SUBROUTINE BFRINI) IN ORDER TO ALLOW FOR THE POSSIBILITY THAT A
C	USER MAY CALL SUBROUTINE PKVS1 PRIOR TO CALLING SUBROUTINE
C	OPENBF (WHICH ITSELF CALLS BFRINI!).  HOWEVER, IF THE USER DOES
C	NOT DO THIS, THEN THE "CALL PKVS1(-99,-99)" STATEMENT WITHIN
C	BFRINI WILL ENSURE THAT THE REQUIRED INITIALIZATION OF NCOD=0
C	STILL GETS DONE; OTHERWISE, WE WOULD RUN THE RISK OF NCOD BEING
C	UNINITIALIZED WHEN REFERENCED LATER ON WITHIN SUBROUTINE MSGWRT!

        NCOD = 0
        IFIRST = 1

         IF( (IPRT.GE.0) .AND. (IL.NE.-99) ) THEN
      PRINT*
      PRINT*,'+++++++++++++++++BUFR ARCHIVE LIBRARY++++++++++++++++++++'
      PRINT 101
101   FORMAT(' BUFRLIB: PKVS1 - THIS SUBROUTINE IS NOW OBSOLETE; ',
     . 'USE SUBROUTINE PKVS01 INSTEAD')
      PRINT*,'+++++++++++++++++BUFR ARCHIVE LIBRARY++++++++++++++++++++'
      PRINT*
         ENDIF

      ENDIF

      IF (IL.EQ.-99) THEN
        RETURN
      ENDIF

C     IF AN IV HAS ALREADY BEEN ASSIGNED FOR THIS PARTICULAR IL, THEN
C     OVERWRITE THAT ENTRY IN COMMON /SECT01/ USING THE NEW IV VALUE.

      IF(NCOD.GT.0) THEN
        DO I=1,NCOD
          IF(IL.EQ.ILCOD(I)) THEN
            IVCOD(I) = IV
            RETURN
          ENDIF
        ENDDO
      ENDIF

C     OTHERWISE, USE THE NEXT AVAILABLE UNUSED ENTRY IN COMMON /SECT01/.

      IF(NCOD.GE.MXCOD) GOTO 900

      NCOD = NCOD + 1
      ILCOD(NCOD) = IL
      IVCOD(NCOD) = IV      

C  EXITS
C  -----

      RETURN
900   WRITE(BORT_STR,'("BUFRLIB: PKVS1 - CANNOT OVERWRITE MORE THAN '//
     . '",I2," DIFFERENT BYTES WITHIN SECTION 1")') MXCOD
      CALL BORT(BORT_STR)
      END