function y=cshift(x,dim,nshift)
% CSHIFT circular shift operation 
% cshift(x,dim,shift)
[nx nz]=size(x);

if dim == 1

if nshift < 0

	    y(1:nx+nshift,:)=x(1-nshift:nx,:);
	    y(nx+nshift+1:nx+nshift+abs(nshift),:)=x(1:abs(nshift),:);

end

if nshift > 0

	    y(nshift+1:nx,:)=x(1:nx-nshift,:);
	    y(1:nshift,:)=x(nx-nshift+1:nx,:);

end

end

if dim == 2

if nshift < 0

	    y(:,1:nz+nshift)=x(:,1-nshift:nz);
	    y(:,nz+nshift+1:nz+nshift+abs(nshift))=x(:,1:abs(nshift));

end

if nshift > 0

	    y(:,nshift+1:nz)=x(:,1:nz-nshift);
	    y(:,1:nshift)=x(:,nz-nshift+1:nz);

end

end

if nshift == 0

y=x;

end
