anchor.diff:    end.    
   
   
  -%%
  -%% Display the block values in a readable format
  -%%
  +% Display the block values in a readable format
   format_block_values(BlockValues) ->
     FormatAttribute = fun(BlockValue) -> format_attribute(BlockValue) end,
   
  
positive.code:   end.
  
  
  %%
  %% format an attribute name and value into a displayable string
  %%
  format_attribute(BlockValue) ->
    case BlockValue of
      {ValueId, {Value}} ->
        io:format("  ~p:  ~p~n", [ValueId, Value]);
  
      {ValueId, {Value, LinkOrRefs}} ->
        case LinkOrRefs of
          {OutAttribName} ->
            io:format("  ~p:  ~p  Link: ~p~n", [ValueId, Value, OutAttribName]);
          {BlockName, OutAttribName} ->
            io:format("  ~p:  ~p  Link: ~p:~p~n", [ValueId, Value, BlockName, OutAttribName]);
          {NodeName, BlockName, OutAttribName} ->
            io:format("  ~p:  ~p  Link: ~p:~p:~p~n", [ValueId, Value, NodeName, BlockName, OutAttribName]);
          References ->
            io:format("  ~p:  ~p  Refs: ~p~n", [ValueId, Value, References])
        end;
  
      {ValueName, ArrayValues} ->
        io:format("  ~p:  ", [ValueName]),
        % TODO: List each array value separately
        io:format("~p~n", [ArrayValues])
    end.
  
  
  % Process the set value command
  
negative.code:       io:format("Inputs:~n"),
        lists:map(FormatAttribute, Inputs),
  
        io:format("Outputs:~n"),
        lists:map(FormatAttribute, Outputs);
  
      _ ->
  