C $Header: /u/gcmpack/MITgcm/eesupp/src/mds_byteswapi4.F,v 1.3 2009/01/09 22:51:13 jmc Exp $
C $Name: $
#include "CPP_EEOPTIONS.h"
subroutine MDS_BYTESWAPI4( n, arr )
C IN:
C n integer :: Number of 4-byte words in arr
C IN/OUT:
C arr integer*4 :: Array declared as integer*4(n)
C
C Created: 05/05/99 adcroft@mit.edu (This is an unfortunate hack!!)
implicit none
#ifdef FAST_BYTESWAP
C Arguments
integer n
integer(kind=4) arr(n), i32
C Local
integer i
i32(i) = ishft(i.and. z'ff000000', -24) .or.
& ishft(i.and. z'00ff0000', -8) .or.
& ishft(i.and. z'0000ff00', 8) .or.
& ishft(i.and. z'000000ff', 24)
do i = 1,n
arr(i) = i32(arr(i))
enddo
#else /* FAST_BYTESWAP */
C Arguments
integer n
character*(*) arr
C Local
integer i
character*(1) cc
do i=1,4*n,4
cc=arr(i:i)
arr(i:i)=arr(i+3:i+3)
arr(i+3:i+3)=cc
cc=arr(i+1:i+1)
arr(i+1:i+1)=arr(i+2:i+2)
arr(i+2:i+2)=cc
enddo
#endif /* FAST_BYTESWAP */
return
end