anchor.diff:      auth_op(Ctl, ?OP_LST, St),
       {Data,St1} = open_data(Ctl, St),
   	{TorrentL, _} = torrent_browse:search(Arg, ?MAX_FTP_FILES, 0, name, asc),
  -	io:format("TorrentInfo ~w~n",[TorrentL]),
   	lists:foreach( 
   		fun(E) ->
   				gen_tcp:send(Data, torrent_info(E) ++ ?CRNL)
  
positive.code: 	    St#cstate { listen = undefined }
      end.
  
  %% Send file data over a socket
  send_file(Fd, Chunk, Count, S) ->
      case file:read(Fd, Chunk) of
  	eof -> {ok,Count};
  	{ok,Data} ->
  	    case gen_tcp:send(S, Data) of
  		ok -> send_file(Fd, Chunk, Count+size(Data), S);
  		Error -> Error
  	    end;
  	Error -> Error
      end.
  
  %% Receive file data over a socket
  recv_file(S, Chunk, Count, Fd) ->
      case gen_tcp:recv(S, 0) of
  
negative.code:     assert_valid(Ctl, St),
      assert_arg(Ctl, Arg),
      auth_op(Ctl, ?OP_RETR, St),
  	TorrentName = retr_torrent_name(Arg),
  	case torrent:get_torrent_binary(TorrentName) of
  	{ok, TorrentBinary} ->
  	    TorrentBinarySize = size(TorrentBinary),
  	    case St#cstate.state of
  		{restart_pos, PosByte} when PosByte > TorrentBinarySize ->
  		    rsend(Ctl, 554, "REST position invalid"),
  			TorrentBinaryToSend = <<>>,
  		    throw(failed);
  		{restart_pos, PosByte} ->
  			PosBit = 8*PosByte,
  		    <<_:PosBit, TorrentBinaryToSend/binary>> = TorrentBinary;
  		_ ->
  			TorrentBinaryToSend = TorrentBinary
  	    end,
  	    {Data,St1} = open_data(Ctl, St#cstate{state = undefined}),
  		case gen_tcp:send(Data, TorrentBinaryToSend) of
  		ok ->
  			rsend(Ctl,226, ["closing data connection, sent ",
  				integer_to_list(TorrentBinarySize), " bytes"]),
  			ok;
  		Error -> 
  			rsend(Ctl,226, "closing data connection, aborted"),
  			rsend(Ctl,550, [" error ",  erl_posix_msg:message(Error)])
  		end,
  	    gen_tcp:close(Data),
  	    catch (St#cstate.event_mod):event({retr, Arg}),
  	    St1;
  	{error,Err} ->
  	    rsend(Ctl,550, ["error ", erl_posix_msg:message(Err)]),
  