anchor.diff:  
   list_bodyc([], _) -> {[], 0};
   list_bodyc(_, Max) when Max < 4 -> {"...", 3};
  -list_bodyc([H|T], Max) -> 
  +list_bodyc([H|T], Max) ->
       {List, Len} = print(H, Max),
       {Final, FLen} = list_bodyc(T, Max-Len-1),
       {[$,, List|Final], FLen + Len + 1};
  
positive.code: %% back to io_lib to format the term, but then the formatting is
  %% depth-limited instead of length limited, so you might run out
  %% memory printing it. Out of the frying pan and into the fire.
  %% 
  safe(What, Len) ->
      case catch print(What, Len) of
  	{L, Used} when is_list(L) -> {L, Used};
  	_ -> {"unable to print" ++ io_lib:write(What, 99)}
      end.	     
  
  %% Returns {List, Length}
  print(_, Max) when Max < 0 -> {"...", 3};
  print(Tuple, Max) when is_tuple(Tuple) -> 
      {TC, Len} = tuple_contents(Tuple, Max-2),
      {[${, TC, $}], Len + 2};
  
  %% We assume atoms, floats, funs, integers, PIDs, ports and refs never need 
  %% to be truncated. This isn't strictly true, someone could make an 
  %% arbitrarily long bignum. Let's assume that won't happen unless someone
  %% is being malicious.
  %%
  
negative.code: %% Returns {List, Length}
  list_body([], _) -> {[], 0};
  list_body(_, Max) when Max < 4 -> {"...", 3};
  list_body([H|T], Max) ->
      {List, Len} = print(H, Max),
      {Final, FLen} = list_bodyc(T, Max-Len-1),
      {[List|Final], FLen + Len + 1};
  