anchor.diff:      {ok, Row, NCBState} =
   	(State#state.callback):row(ProcessInfo, State#state.cbstate),
       hpi(Rest, State#state{ cbstate = NCBState }, [Row|Acc]).
  -
  -update_headers(Headers, _State) ->
  -    lists:foldl(fun(RX, LineNumber) ->
  -			cecho:mvaddstr(LineNumber,0,RX),
  -			LineNumber + 1
  -		end, 1, Headers).
   
   sort(ProcList, State) ->
       Sorted = lists:keysort(State#state.sort, ProcList),
  
positive.code: %% =============================================================================
  %% Internal Functions
  %% =============================================================================
  init(Parent, State) ->
      process_flag(trap_exit, true),
      application:start(cecho),
      ok = cecho:cbreak(),
      ok = cecho:noecho(),
      ok = cecho:curs_set(?ceCURS_INVISIBLE),
      ok = cecho:keypad(?ceSTDSCR, true),
      case (State#state.callback):init(State#state.node) of
  	{ok, {Columns, DefaultSort}, CBState} when DefaultSort =< length(Columns) 
  						   andalso DefaultSort >= 1 ->
  	    NSort = DefaultSort;
  	{ok, {Columns, _}, CBState} ->
  	    NSort = 1
      end,
      NState = State#state{ columns = Columns, cbstate = CBState, sort = NSort },
      print_nodeinfo(State),
      Parent ! continue,
      self() ! time_update,
      loop(Parent, NState).
      
  loop(Parent, State) ->
      receive
  	time_update ->
  	    State2 = update_screen(State),
  	    erlang:send_after(State2#state.interval, self(), time_update),
  	    loop(Parent, State2);
  	force_update ->
  	    State2 = update_screen(State),
  	    loop(Parent, State2);
  	{sort, N} when is_integer(N) ->
  	    State2 = update_sort_screen(State, N),
  	    loop(Parent, State2);
  	{sort, Direction} ->
  	    case Direction of
  		next -> State2 = update_sort_screen(State, State#state.sort + 1);
  		prev -> State2 = update_sort_screen(State, State#state.sort - 1)
  	    end,
  	    loop(Parent, State2);
  	reverse_sort ->
  	    State2 = update_screen(State#state{ reverse_sort = (not State#state.reverse_sort) }),
  	    loop(Parent, State2);
  	{'EXIT', Parent, _} ->
  	    ok
      end.
  
  load_remote_static_data(State) ->
      RPC = fun(M, F, A) -> rpc:call(State#state.node, M, F, A) end,
      Otp = RPC(erlang, system_info, [otp_release]),
  
negative.code:     State#state{ otp_version = Otp, erts_version = Erts,
  		 os_fam = Os1, os = Os2, os_version = OsVers, node_flags = Flags }.
  
  remote_load_code(Module, Node) ->
      {_, Binary, Filename} = code:get_object_code(Module),
      rpc:call(Node, code, load_binary, [Module, Filename, Binary]).
  
  init(Parent, State) ->
      process_flag(trap_exit, true),
      application:start(cecho),
      ok = cecho:cbreak(),
      ok = cecho:noecho(),
      ok = cecho:curs_set(?ceCURS_INVISIBLE),
      ok = cecho:keypad(?ceSTDSCR, true),
      NState = init_callback(State),
      print_nodeinfo(NState),
      Parent ! continue,
      self() ! time_update,
      loop(Parent, NState).
  
  init_callback(State) ->
      case (State#state.callback):init(State#state.node) of
  	{ok, {Columns, DefaultSort}, CBState} when DefaultSort =< length(Columns) 
  						   andalso DefaultSort >= 1 ->
  	    NSort = DefaultSort;
  	{ok, {Columns, _}, CBState} ->
  	    NSort = 1
      end,
      State#state{ columns = Columns, cbstate = CBState, sort = NSort }.
  
  print_nodeinfo(State) ->
      cecho:move(0, 0),
      cecho:hline($ , ?MAX_HLINE),
      {Mj, Md, Mi} = State#state.os_version,
      OsVers = lists:concat([Mj,".",Md,".",Mi]),
      Head = io_lib:format("Node: ~p (~s/~s) ~p (~p ~s)~s", 
  