anchor.diff:  %% =====================================================================
   %% Add a link to an input value from a block output
   %% =====================================================================    
  -handle_call({add_link, OutputBlockName, OutputValueId, Link}, _From, State) ->
  -  case system_server:is_block(OutputBlockName) of
  +handle_call({add_link, OutputBlockNameStr, OutputValueIdStr, LinkStrs}, _From, State) ->
  +OutputBlockName = list_to_atom(OutputBlockNameStr),
  +Result = case block_supervisor:is_block(OutputBlockName) of
       true ->
  -      case link_utils:validate_link(Link) of
  -        ok ->
  -          Result = block_server:add_link(OutputBlockName, OutputValueId, Link);
  -
  -        {error, Reason} ->
  -          Result = {error, Reason}
  +      case parse_link(LinkStrs) of
  +        {ok, Link} ->
  +          case link_utils:validate_link(Link) of
  +            ok ->
  +              case attrib_utils:str_to_value_id(OutputValueIdStr) of
  +                {ok, OutputValueId} ->
  +                  block_server:add_link(OutputBlockName, OutputValueId, Link);
  +
  +                {error, Reason} -> {error, Reason}
  +              end;
  +
  +            {error, Reason} -> {error, Reason}
  +          end;
  +
  +        {error, Reason} -> {error, Reason}
         end;
  -    _False ->
  -      Result = {error, block_not_found}
  +
  +    false -> {error, block_not_found}
     end,      
     {reply, Result, State};
   
  
positive.code: %% =====================================================================
  %% Get a block value
  %% =====================================================================    
  handle_call({get_value, BlockName, ValueId}, _From, State) ->
    case system_server:is_block(BlockName) of
      true ->
        case block_server:get_value(BlockName, ValueId) of
          {ok, CurrentValue} ->
            Result = {ok, CurrentValue};
  
          {error, not_found} ->
            Result = {error, value_not_found};
  
          {error, Reason} ->
            Result = {error, Reason}
        end;
      _ ->
        Result = {error, block_not_found}
    end,
    {reply, Result, State};
  
  
  
negative.code:         version      -> true;
                     _ -> false
        end
    end.
  
  %%
  %% Parse a list of strings into a Link tuple
  %%
  parse_link(LinkStrs) ->
  
    % Links should consist of a Block Name and Value ID
    case LinkStrs of
      [BlockNameStr, ValueIdStr] ->
        BlockName = list_to_atom(BlockNameStr),
  
        case attrib_utils:str_to_value_id(ValueIdStr) of
          {ok, ValueId}   -> {ok, {BlockName, ValueId}};
          {error, Reason} -> {error, Reason}
        end;
  
      _Invalid -> {error, invalid}
    end.
  
  
  