SUBROUTINE ATRCPT(MSGIN,LMSGOT,MSGOT)

C$$$  SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM:    ATRCPT
C   PRGMMR: ATOR             ORG: NP12       DATE: 2009-03-23
C
C ABSTRACT: THIS SUBROUTINE READS AN INPUT BUFR MESSAGE, APPENDS THE
C   TANK RECEIPT TIME TO SECTION 1, AND WRITES THE RESULT TO A NEW BUFR
C   MESSAGE FOR OUTPUT.  THE TANK RECEIPT TIME MUST HAVE BEEN SPECIFIED
C   VIA A PREVIOUS CALL TO BUFR ARCHIVE LIBRARY SUBROUTINE STRCPT.  THE
C   OUTPUT MESSAGE WILL BE SLIGHTLY LONGER THAN THE INPUT MESSAGE, SO
C   THE USER MUST ALLOW FOR ENOUGH SPACE WITHIN THE OUTPUT ARRAY.
C
C PROGRAM HISTORY LOG:
C 2009-03-23  J. ATOR    -- ORIGINAL AUTHOR
C
C USAGE:    CALL ATRCPT (MSGIN, LMSGOT, MSGOT)
C   INPUT ARGUMENT LIST:
C     MSGIN    - INTEGER: *-WORD ARRAY CONTAINING BUFR MESSAGE
C     LMSGOT   - INTEGER: DIMENSIONED SIZE (IN INTEGER WORDS) OF MSGOT;
C                USED BY THE SUBROUTINE TO ENSURE THAT IT DOES NOT
C                OVERFLOW THE MSGOT ARRAY
C
C   OUTPUT ARGUMENT LIST:
C     MSGOT    - INTEGER: *-WORD ARRAY CONTAINING INPUT BUFR MESSAGE
C                WITH TANK RECEIPT TIME APPENDED TO SECTION 1
C
C REMARKS:
C    MSGIN AND MSGOT MUST BE SEPARATE ARRAYS.
C
C    THIS ROUTINE CALLS:        BORT     GETLENS  IUPBS01  MVB
C                               PKB
C    THIS ROUTINE IS CALLED BY: MSGWRT
C                               Also called by application programs.
C
C ATTRIBUTES:
C   LANGUAGE: FORTRAN 77
C   MACHINE:  PORTABLE TO ALL PLATFORMS
C
C$$$

	DIMENSION MSGIN(*), MSGOT(*)

	COMMON /HRDWRD/ NBYTW,NBITW,IORD(8)
	COMMON /TNKRCP/ ITRYR,ITRMO,ITRDY,ITRHR,ITRMI,CTRT

	CHARACTER*1 CTRT

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

C	Get some section lengths and addresses from the input message.

	CALL GETLENS(MSGIN,1,LEN0,LEN1,L2,L3,L4,L5)

	IAD1 = LEN0
	IAD2 = IAD1 + LEN1

	LENM = IUPBS01(MSGIN,'LENM')

C	Check for overflow of the output array.  Note that the new
C	message will be 6 bytes longer than the input message.

	LENMOT = LENM + 6
	IF(LENMOT.GT.(LMSGOT*NBYTW)) GOTO 900 

	LEN1OT = LEN1 + 6

C	Write Section 0 of the new message into the output array.

	CALL MVB ( MSGIN, 1, MSGOT, 1, 4 )
	IBIT = 32
	CALL PKB ( LENMOT, 24, MSGOT, IBIT )
	CALL MVB ( MSGIN, 8, MSGOT, 8, 1 )

C	Store the length of the new Section 1.

	IBIT = IAD1*8
	CALL PKB ( LEN1OT, 24, MSGOT, IBIT )

C	Copy the remainder of Section 1 from the input array to the
C	output array.

	CALL MVB ( MSGIN, IAD1+4, MSGOT, (IBIT/8)+1, LEN1-3 )

C	Append the tank receipt time data to the new Section 1.

	IBIT = IAD2*8
	CALL PKB ( ITRYR, 16, MSGOT, IBIT )
	CALL PKB ( ITRMO,  8, MSGOT, IBIT )
	CALL PKB ( ITRDY,  8, MSGOT, IBIT )
	CALL PKB ( ITRHR,  8, MSGOT, IBIT )
	CALL PKB ( ITRMI,  8, MSGOT, IBIT )
	
C	Copy Sections 2, 3, 4 and 5 from the input array to the
C	output array.

	CALL MVB ( MSGIN, IAD2+1, MSGOT, (IBIT/8)+1, LENM-IAD2 )

	RETURN
900	CALL BORT('BUFRLIB: ATRCPT - OVERFLOW OF OUTPUT MESSAGE '//
     .    'ARRAY; TRY A LARGER DIMENSION FOR THIS ARRAY')
	END