anchor.diff:      0 -> ok
     end.
   
  -update_on_ticker(State) ->
  -  {Rate, NewState} = update_rate(State),
  -  printout(State, "~s", [Rate]),
  -  NewState.
  -
  -update_rate(State) ->
  -  #logger_state{
  -     rate_timestamp = Old,
  -     rate_prev = Prev,
  -     rate_width = OldWidth,
  -     traces_explored = Current,
  -     traces_ssb = TracesSSB
  -    } = State,
  -  New = timestamp(),
  -  Time = timediff(New, Old),
  -  Useful = Current - TracesSSB,
  -  Diff = Useful - Prev,
  -  Rate = (Diff / (Time + 0.0001)) + 0.01,
  -  Width = max(OldWidth, trunc(math:log10(Rate)) + 3),
  -  WidthStr = [$0 + Width],
  -  RateStr = io_lib:format("(~"++WidthStr++".1f/s) ", [Rate]),
  -  NewState =
  -    State#logger_state{
  -      rate_timestamp = New,
  -      rate_prev = Useful,
  -      rate_width = Width},
  -  {RateStr, NewState}.
  +stop_ticker(Ticker) ->
  +  Ticker ! {stop, self()},
  +  receive
  +    stopped -> ok
  +  end.
  +
  +%%------------------------------------------------------------------------------
   
   separator_string(Char) ->
     lists:duplicate(80, Char).
  
positive.code:       loop(graph_command(Command, State));
      {finish, SchedulerStatus, Scheduler} ->
        case is_pid(Ticker) of
          true -> Ticker ! stop;
          false -> ok
        end,
        separator(Output, $#),
  
negative.code:                 [Day, Mstr, Year, Hour, Minute, Second]).
  
  force_printout(State, Format, Data) ->
    printout(State#logger_state{ticker = force}, Format, Data).
  
  printout(#logger_state{ticker = Ticker} = State, Format, Data)
    when Ticker =/= none ->
    rate_clear(),
    to_stderr(Format, Data),
    rate_print(State);
  printout(_, Format, Data) ->
    to_stderr(Format, Data).
  
  