anchor.diff:  set "^!=^^^^^^^!"	&:# Define a %!%DelayedExpansion%!% variable
   set "'^!=^^^!"		&:# Idem, but inside a quoted string
   set ">=^^^>"		&:# Insert a redirection character
  +set "<=^^^<"		&:# Insert a redirection character
   set "&=^^^&"		&:# Insert a command separator in a macro
   :# Idem, to be expanded twice, for use in macros within macros
   set "^!2=^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!"
   set "'^!2=^^^^^^^!"
   set "&2=^^^^^^^^^^^^^^^&"
   
  -set "MACRO=for %%$ in (1 2) do if %%$==2"			&:# Prolog code of a macro
  +set "MACRO=for %%$ in (1 2) do if %%$==2"				&:# Prolog code of a macro
   set "/MACRO=else setlocal enableDelayedExpansion %&% set MACRO.ARGS="	&:# Epilog code of a macro
  +set "ENDMACRO=endlocal"	&:# Ends the macro local scope started in /MACRO. Necessary before macro exit.
   
   set "ON_MACRO_EXIT=for /f "delims=" %%r in ('echo"	&:# Begin the return variables definitions 
  -set "/ON_MACRO_EXIT=') do endlocal %&% %%r"		&:# End the return variables definitions
  +set "/ON_MACRO_EXIT=') do %ENDMACRO% %&% %%r"		&:# End the return variables definitions
   
   :# Primitive macro debugging definitions
   :# Macros, usable anywhere, including within other macros, for conditionally displaying debug information
  
positive.code: :# Execute a command, logging its output.
  :# Use for informative commands that should always be run, even in NOEXEC mode. 
  :Do
  set "Exec.RestoreErr=call :Exec.SetErrorLevel %ERRORLEVEL%" &:# Save the initial errorlevel: Build a command for restoring it later
  setlocal EnableExtensions DisableDelayedExpansion
  set NOEXEC=0
  set "IF_NOEXEC=if .%NOEXEC%.==.1."
  goto :Exec.Start
  
  :# Execute critical operations that should not be run in NOEXEC mode.
  :# Version supporting input and output redirections, and pipes.
  :# Redirection operators MUST be surrounded by quotes. Ex: "<" or ">" or "2>>"
  :Exec
  set "Exec.RestoreErr=call :Exec.SetErrorLevel %ERRORLEVEL%" &:# Save the initial errorlevel: Build a command for restoring it later
  setlocal EnableExtensions DisableDelayedExpansion
  :Exec.Start
  set "NOREDIR0=%NOREDIR%"
  set "Exec.Redir=>>%LOGFILE%,2>&1"
  if .%NOREDIR%.==.1. set "Exec.Redir="
  if not defined LOGFILE set "Exec.Redir="
  if /i .%LOGFILE%.==.NUL. set "Exec.Redir="
  :# Process optional arguments
  set "Exec.GotCmd=Exec.GotCmd"   &:# By default, the command line is %* for :Exec
  goto :Exec.GetArgs
  :Exec.NextArg
  set "Exec.GotCmd=Exec.BuildCmd" &:# An :Exec argument was found, we'll have to rebuild the command line
  shift
  :Exec.GetArgs
  if "%~1"=="-L" set "Exec.Redir=" & goto :Exec.NextArg :# Do not send the output to the log file
  if "%~1"=="-t" if defined LOGFILE ( :# Tee the output to the log file
    :# Warning: This prevents from getting the command exit code!
    if .%Exec.HaveTee%.==.1. if not .%NOREDIR%.==.1. set "Exec.Redir= 2>&1 | tee.exe -a %LOGFILE%"
    goto :Exec.NextArg
  )
  set Exec.Cmd=%*
  goto :%Exec.GotCmd%
  :Exec.BuildCmd
  :# Build the command list. Cannot use %*, which still contains the :Exec switches processed above.
  set Exec.Cmd=%1
  :Exec.GetCmdLoop
  shift
  if not .%1.==.. set Exec.Cmd=%Exec.Cmd% %1& goto :Exec.GetCmdLoop
  :Exec.GotCmd
  :# First stage: Split multi-char ops ">>" "2>" "2>>". Make sure to keep ">" signs quoted every time.
  :# Do NOT use surrounding quotes for these set commands, else quoted arguments will break.
  set Exec.Cmd=%Exec.Cmd:">>"=">"">"%
  
negative.code: :#   2016-09-01 JFL Bug fix: %RETURN% incorrectly returned empty variables.   #
  :#   2016-11-02 JFL Bug fix: Avoid log file redirection failures in recursive #
  :#                  scripts.                                                  #
  :#   2016-11-13 JFL Bug fix: Correctly return special characters & | < > ? *  #
  :#   2016-11-24 JFL Fixed tracing %FUNCTION% arguments with ^ and % chars.    #
  :#                                                                            #
  :#----------------------------------------------------------------------------#
  
  