1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
subroutine ccopy(n,dx,incx,dy,incy)
c same as dcopy but for characters
c Copyright INRIA
character*(*) dx,dy
integer i,incx,incy,ix,iy,m,mp1,n
c
if(n.le.0)return
if(incx.eq.1.and.incy.eq.1)go to 20
c
c code for unequal increments or equal increments
c not equal to 1
c
ix = 1
iy = 1
if(incx.lt.0)ix = (-n+1)*incx + 1
if(incy.lt.0)iy = (-n+1)*incy + 1
do 10 i = 1,n
dy(iy:iy) = dx(ix:ix)
ix = ix + incx
iy = iy + incy
10 continue
return
c
c code for both increments equal to 1
c
c
c clean-up loop
c
20 m = mod(n,7)
if( m .eq. 0 ) go to 40
do 30 i = 1,m
dy(i:i) = dx(i:i)
30 continue
if( n .lt. 7 ) return
40 mp1 = m + 1
do 50 i = mp1,n,7
dy(i:i) = dx(i:i)
dy(i + 1:i+1) = dx(i + 1:i+1)
dy(i + 2:i+2) = dx(i + 2:i+2)
dy(i + 3:i+3) = dx(i + 3:i+3)
dy(i + 4:i+4) = dx(i + 4:i+4)
dy(i + 5:i+5) = dx(i + 5:i+5)
dy(i + 6:i+6) = dx(i + 6:i+6)
50 continue
return
end
|