anchor.diff:  
   
   %% manipulators
  -
  -filter_locks({Lockname, Ids}, Locks) when is_list(Ids) ->
  -    [ L || L <- Locks, L#lock.name == Lockname, lists:member(L#lock.id, Ids)];
  -filter_locks({Lockname, Id}, Locks) ->
  -    [ L || L <- Locks, L#lock.name == Lockname, L#lock.id == Id ];
  -filter_locks(Lockname, Locks) ->
  -    [ L || L <- Locks, L#lock.name == Lockname ].
  +filter_locks_type(Locks, undefined) -> Locks;
  +filter_locks_type(Locks, all) -> Locks;
  +filter_locks_type(Locks, Types) when is_list(Types) ->
  +    [ L || L <- Locks, lists:member(L#lock.type, Types)];
  +filter_locks_type(Locks, Type) ->
  +    [ L || L <- Locks, L#lock.type =:= Type].
  +
  +filter_locks(Locks, {Lockname, Ids}) when is_list(Ids) ->
  +    [ L || L <- Locks, L#lock.name =:= Lockname, lists:member(L#lock.id, Ids)];
  +filter_locks(Locks, {Lockname, Id}) ->
  +    [ L || L <- Locks, L#lock.name =:= Lockname, L#lock.id =:= Id ];
  +filter_locks(Locks, Lockname) ->
  +    [ L || L <- Locks, L#lock.name =:= Lockname ].
   % order of processing
   % 2. cut thresholds
   % 3. sort locks
  
positive.code: 	locks    = Locks
      }.
  
  % [{name, id, type, [{{file, line}, {tries, colls, {s, ns, n}}}]
  locks2records(Locks) ->
      [  #lock{
  	    name  = Name,
  	    id    = Id,
  	    type  = Type,
  	    stats = [ #stats{
  		file  = File,
  
negative.code: 	{reverse,    false},
  	{print,      [name,id,tries,colls,ratio,time,duration]},
  	{max_locks,  20},
  	{combine,    false},
  	{thresholds, [] },
  	{locations,  false}],
  
      Opts      = options(InOpts, Default),
      Filtered  = filter_locks(Locks, Lockname),
      IDs       = case {proplists:get_value(full_id, Opts), proplists:get_value(combine, Opts)} of
  	{true, true} -> locks_ids(Filtered);
  	_            -> []
  