anchor.diff:  %IF_DEBUG% goto :Echo
   goto :Echo.Log
   
  -:Echo.Eval2DebugOut %*=String with variables that need to be evaluated first
  -:# Must be called with delayed expansion on, so that !variables! within %* get expanded
  -%>DEBUGOUT% echo.%INDENT%%*
  -goto :eof
  -
  -:Echo.2DebugOut	%*=String to output to the DEBUGOUT stream
  -setlocal DisableDelayedExpansion &:# Make sure !variables! do _not_ get expanded
  -set ^"ARGS=%*^" &:# ^carets within "quoted" strings get doubled.
  -if defined ARGS set ^"ARGS=%ARGS:^^=^%^"
  -%>DEBUGOUT% echo.%INDENT%%ARGS%
  -goto :eof
  -
  -:Echo.Eval2LogFile %*=String with variables that need to be evaluated first
  -:# Must be called with delayed expansion on, so that !variables! within %* get expanded
  -%>>LOGFILE% echo.%INDENT%%*
  -goto :eof
  -
  -:Echo.2LogFile %*=String to output to the LOGFILE
  -setlocal DisableDelayedExpansion &:# Make sure !variables! do _not_ get expanded
  -set ^"ARGS=%*^" &:# ^carets within "quoted" strings get doubled.
  -if defined ARGS set ^"ARGS=%ARGS:^^=^%^"
  -%>>LOGFILE% echo.%INDENT%%ARGS%
  +:Echo.Eval2DebugOut %1=Name of string, with !variables! that need to be evaluated first
  +setlocal EnableDelayedExpansion &:# Make sure that !variables! get expanded
  +set "STRING=!%1!" &:# !variables! not yet expanded; They will be on next line
  +%>DEBUGOUT% echo.%INDENT%%STRING%
  +goto :eof
  +
  +:Echo.2DebugOut	%1=Name of string to output to the DEBUGOUT stream
  +setlocal EnableDelayedExpansion &:# Make sure that !variables! get expanded
  +%>DEBUGOUT% echo.%INDENT%!%1!
  +goto :eof
  +
  +:Echo.Eval2LogFile %1=Name of string, with variables that need to be evaluated first
  +setlocal EnableDelayedExpansion &:# Make sure that !variables! get expanded
  +set "STRING=!%1!" &:# !variables! not yet expanded; They will be on next line
  +%>>LOGFILE% echo.%INDENT%%STRING%
  +goto :eof
  +
  +:Echo.2LogFile %1=Name of string to output to the LOGFILE
  +setlocal EnableDelayedExpansion &:# Make sure that !variables! get expanded
  +%>>LOGFILE% echo.%INDENT%!%1!
   goto :eof
   
   :# Echo and log variable values, indented at the same level as the debug output.
  
positive.code:       ) %\n%
        call set "DEBUG.MSG=%'!%DEBUG.MSG:%%=%%DEBUG.excl%%%'!%" %# Change all percent to ! #%  %\n%
        if defined ^^%>%DEBUGOUT ( %# If we use a debugging stream distinct from stdout #% %\n%
  	call :Echo.Eval2DebugOut %!%DEBUG.MSG%!%%# Use a helper routine, as delayed redirection does not work #%%\n%
        ) else ( %# Output directly here, which is faster #% %\n%
  	for /f "delims=" %%c in ("%'!%INDENT%'!%%'!%DEBUG.MSG%'!%") do echo %%c%# Use a for loop to do a double !variable! expansion #%%\n%
        ) %\n%
        if defined LOGFILE ( %# If we have to send a copy to a log file #% %\n%
  	call :Echo.Eval2LogFile %!%DEBUG.MSG%!%%# Use a helper routine, as delayed redirection does not work #%%\n%
        ) %\n%
      ) %\n%
      for %%r in (%!%DEBUG.EXITCODE%!%) do ( %# Carry the return values through the endlocal barriers #% %\n%
  
negative.code: :# Macro for displaying comments on the return log line
  set RETURN#=set "RETURN#ERR=%'!%ERRORLEVEL%'!%" %&% %MACRO% ( %\n%
    set RETVAL=%!%MACRO.ARGS:~1%!%%\n%
    %!%LCALL%!% :Debug.Return0 %!%RETURN#ERR%!% %\n%
    %ON_MACRO_EXIT% set "INDENT=%'!%INDENT%'!%" %/ON_MACRO_EXIT% %&% set "RETURN#ERR=" %&% exit /b %\n%
  ) %/MACRO%
  set "EXEC.ARGS= %EXEC.ARGS%"
  