anchor.diff:  
   -export([duplicated_code_1/3]).
   
  --export([tokenize/1]).
  -
  --compile(export_all).
  -
  +-export([init/1]).
   %% TODO:  
   %% 1) does recusive function calls affect the result?
   %% 2) does qualifed names affect the result? 
  
positive.code:     ?wrangler_io("\nCMD: ~p:duplicated_code(~p,~p,~p).\n", [?MODULE, DirFileList, MinLength1, MinClones1]),
      ?debug("current time:~p\n", [time()]),
      start_suffix_tree_clone_detector(),
      {Cs5, _FileNames} = duplicated_code_detection(DirFileList, MinClones1, MinLength1),
      ?debug("Filtering out sub-clones.\n", []),
      Cs6 = remove_sub_clones(Cs5),
      stop_suffix_tree_clone_detector(),
      ?debug("current time:~p\n", [time()]),
      %% case length(FileNames) of
      %%     1 -> display_clones(Cs6);
      %%     _ -> display_clones1(Cs6)
      %%  end,
      ?wrangler_io("No of Clones found:\n~p\n", [length(Cs6)]),
      ?wrangler_io("Clones:\n~p\n", [Cs6]),
      {ok, "Duplicated code detection finished."}.
  
  -spec(duplicated_code_1/3::(dir(), [integer()], [integer()]) ->
  	     [{[{{filename(), integer(), integer()},{filename(), integer(), integer()}}], integer(), integer()}]).  
  
  duplicated_code_1(DirFileList, MinLength1, MinClones1) ->
      {Cs5, _} = duplicated_code_detection(DirFileList, MinClones1,
  
negative.code: %% combine the ranges within two continuous branches if possible.
  extend_range(SuffixTree) ->
      extend_range([],SuffixTree).
  
  extend_range(Prev_Range, {branch, {Range, {_Len, Freq}}, leaf}) ->
      ExtendedRange = lists:map(fun (R) -> combine_range(Prev_Range, R) end, Range),
  