text: ! (C) Copyright 2005- ECMWF.
  !
  ! This software is licensed under the terms of the Apache Licence Version 2.0
  ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
  !
  ! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
  ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  !
  !
  !  Description: How to create a new BUFR message by cloning
  !               an existing message.
  !
  !
  program bufr_clone
     use eccodes
     implicit none
     integer       :: i, iret
     integer       :: infile, outfile
     integer       :: ibufr_in
     integer       :: ibufr_out
  
     ! Open source file
     call codes_open_file(infile, '../../data/bufr/syno_multi.bufr', 'r')
  
     ! Open target file
     call codes_open_file(outfile, 'bufr_clone_test_f.clone.bufr', 'w')
  
     ! The first bufr message is loaded from file,
     ! ibufr is the bufr id to be used in subsequent calls
     call codes_bufr_new_from_file(infile, ibufr_in, iret)
  
     ! Create several clones of this message and alter them
     ! in different ways
     do i = 1, 3
  
        ! Clone the current handle
        call codes_clone(ibufr_in, ibufr_out)
  
        ! This is the place where you may wish to modify the clone
        ! E.g. we change the bufrHeaderCentre
        call codes_set(ibufr_out, 'bufrHeaderCentre', 222)
  
        ! Write cloned messages to a file
        call codes_write(ibufr_out, outfile)
  
        ! Release the clone's handle
        call codes_release(ibufr_out)
     end do
  
     ! Release the original handle
     call codes_release(ibufr_in)
  
     call codes_close_file(infile)
     call codes_close_file(outfile)
  
  end program bufr_clone
  