anchor.diff:  -compile(export_all).
   
   print() ->
  +    print(user).
  +
  +print(D) ->
       try supervisor:which_children(ssh_sup)
       of
   	_ ->
  -	    io:nl(),
  -	    print_general(),
  -	    io:nl(),
  -	    underline("Client part", $=),
  -	    print_clients(),
  -	    io:nl(),
  -	    underline("Server part", $=),
  -	    print_servers(),
  -	    io:nl(),
  +	    io:nl(D),
  +	    print_general(D),
  +	    io:nl(D),
  +	    underline(D, "Client part", $=),
  +	    print_clients(D),
  +	    io:nl(D),
  +	    underline(D, "Server part", $=),
  +	    print_servers(D),
  +	    io:nl(D),
   	    %% case os:type() of
   	    %% 	{unix,_} ->
   	    %% 	    io:nl(),
  
positive.code: 	    %% 	    catch io:format(os:cmd("netstat -tpn"));
  	    %% 	_ -> ok
  	    %% end,
  	    underline("Supervisors", $=),
  	    walk_sups(ssh_sup),
  	    io:nl()
      catch
  	_:_ ->
  	    io:format("Ssh not found~n",[])
      end.
  
  %%%================================================================
  print_general() ->
      {_Name, Slogan, Ver} = lists:keyfind(ssh,1,application:which_applications()),
      underline(io_lib:format("~s  ~s", [Slogan, Ver]), $=),
      io:format('This printout is generated ~s. ~n',[datetime()]).
  
  %%%================================================================
  print_clients() ->
      try
  	lists:foreach(fun print_client/1, supervisor:which_children(sshc_sup))
      catch
  	C:E ->
  	    io:format('***FAILED: ~p:~p~n',[C,E])
      end.
  
  print_client({undefined,Pid,supervisor,[ssh_connection_handler]}) ->
      {{Local,Remote},_Str} = ssh_connection_handler:get_print_info(Pid),
      io:format("    Local=~s Remote=~s~n",[fmt_host_port(Local),fmt_host_port(Remote)]);
  print_client(Other) ->
      io:format("    [[Other 1: ~p]]~n",[Other]).
  
  
  %%%================================================================
  print_servers() ->
      try
  	lists:foreach(fun print_server/1, supervisor:which_children(sshd_sup))
      catch
  	C:E ->
  	    io:format('***FAILED: ~p:~p~n',[C,E])
      end.
  
  print_server({{server,ssh_system_sup,LocalHost,LocalPort},Pid,supervisor,[ssh_system_sup]}) when is_pid(Pid) ->
      io:format('Local=~s (~p children)~n',[fmt_host_port({LocalHost,LocalPort}),
  					  ssh_acceptor:number_of_connections(Pid)]),
      lists:foreach(fun print_system_sup/1, supervisor:which_children(Pid));
  print_server(Other) ->
      io:format("    [[Other 2: ~p]]~n",[Other]).
      
  print_system_sup({Ref,Pid,supervisor,[ssh_subsystem_sup]}) when is_reference(Ref),
  								is_pid(Pid) ->
      lists:foreach(fun print_channels/1, supervisor:which_children(Pid));
  print_system_sup({{ssh_acceptor_sup,LocalHost,LocalPort}, Pid,supervisor, [ssh_acceptor_sup]}) when is_pid(Pid) ->
      io:format("    [Acceptor for ~s]~n",[fmt_host_port({LocalHost,LocalPort})]);
  print_system_sup(Other) -> 
      io:format("    [[Other 3: ~p]]~n",[Other]).
  
  print_channels({{server,ssh_channel_sup,_,_},Pid,supervisor,[ssh_channel_sup]}) when is_pid(Pid) ->
      lists:foreach(fun print_channel/1, supervisor:which_children(Pid));
  print_channels(Other) -> 
      io:format("    [[Other 4: ~p]]~n",[Other]).
  
  
  print_channel({Ref,Pid,worker,[ssh_channel]}) when is_reference(Ref), 
  						   is_pid(Pid)  ->
      {{ConnManager,ChannelID}, Str} = ssh_channel:get_print_info(Pid),
      {{Local,Remote},StrM} = ssh_connection_handler:get_print_info(ConnManager),
      io:format('    ch ~p: ~s ~s',[ChannelID, StrM, Str]),
      io:format("    Local=~s Remote=~s~n",[fmt_host_port(Local),fmt_host_port(Remote)]);
  print_channel(Other) -> 
      io:format("    [[Other 5: ~p]]~n",[Other]).
  	      
  %%%================================================================
  -define(inc(N), (N+4)).
  
  walk_sups(StartPid) ->
      io:format("Start at ~p, ~s.~n",[StartPid,dead_or_alive(StartPid)]),
      walk_sups(children(StartPid), _Indent=?inc(0)).
  
  walk_sups([H={_,Pid,SupOrWorker,_}|T], Indent) ->
      indent(Indent), io:format('~200p  ~p is ~s~n',[H,Pid,dead_or_alive(Pid)]),
      case SupOrWorker of
  	supervisor -> walk_sups(children(Pid), ?inc(Indent));
  	_ -> ok
      end,
      walk_sups(T, Indent);
  walk_sups([], _) ->
      ok.
  
  dead_or_alive(Name) when is_atom(Name) ->
  
negative.code: 
  
  
  nyi(D) ->
      io:format(D,'Not yet implemented~n',[]),
      nyi.
  