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:     assert_valid(Ctl, St),
      assert_arg(Ctl, Arg),
      auth_op(Ctl, ?OP_RETR, St),
      NameR = rel_name(from_utf8(Arg,St), St#cstate.wd),
      Name = jail(Ctl, filename:join(St#cstate.rootwd, NameR), St),
      authorize(?AUTH_READ, abs_name(NameR), Ctl, St),
      case file:open(Name, [read | file_mode(St)]) of
  	{ok,Fd} ->
  	    {ok, #file_info{size = FileSize}} = file:read_file_info(Name),
  	    case St#cstate.state of
  		{restart_pos, Pos} when Pos > FileSize ->
  		    rsend(Ctl, 554, "REST position invalid"),
  		    file:close(Fd),
  		    throw(failed);
  		{restart_pos, Pos} ->
  		    file:position(Fd, Pos);
  		_ ->
  		    ok
  	    end,
  	    {Data,St1} = open_data(Ctl, St#cstate{state = undefined}),
  	    case send_file(Fd, 1024, 0, Data) of
  		{ok,Count} ->
  		    rsend(Ctl,226, ["closing data connection, sent",
  				    integer_to_list(Count), " bytes"]);
  		    %%rsend(Ctl,200);
  
  		{error,Err} ->
  		    rsend(Ctl,226, "closing data connection, aborted"),
  		    rsend(Ctl,550, [" error ",  erl_posix_msg:message(Err)])
  	    end,
  	    gen_tcp:close(Data),
  	    file:close(Fd),
  	    catch (St#cstate.event_mod):event({retr, Name}),
  	    St1;
  	{error,Err} ->
  	    rsend(Ctl,550, ["error ", erl_posix_msg:message(Err)]),
  
negative.code: rpath([],[]) -> "";
  rpath([], RP) -> filename:join(reverse(RP)).
  
  %% Remove ".torrent" for get operations
  retr_torrent_name(RetrName) ->
  	case lists:suffix(".torrent", RetrName) of
  		true ->
  			lists:sublist(RetrName, length(RetrName) - 8);
  		_ -> 
  			RetrName
  	end.
  
  %%
  %% Generate a directory listing
  %% should normally go to the socket
  