anchor.diff:      )
     )
   )
  -endlocal & set "%~4=%RESULT%"
  -exit /b 0
  -
  -:# Replace delimiter sets.
  -:# Advantage: Simple and fast; Works with CHAR '=' ':' '*'
  +set "!RETVAR!=!RESULT!"
  +%UPVAR% !RETVAR! & %RETURN% 0
  +
  +:# Replace delimiter sets
  +:# Advantage: Simple and fast; Works with CHAR '=' ':'
   :# Drawback: Multiple consecutive CHARs are replaced by a single REPL string.
   :# Drawback: Does not work on strings with LF or '!' characters.
  -:ReplaceDelimSets STRVAR CHAR REPLACEMENT RETVAR
  -setlocal EnableDelayedExpansion
  -set "STRING=[!%~1!]"	&:# Make mure the string does not begin or end with delims
  +:ReplaceDelimSets %1=STRVAR  %2=CHAR  %3=REPLACEMENT  %4=RETVAR (Default: STRVAR)
  +%FUNCTION% EnableDelayedExpansion
  +set "STRING=[!%~1:^=^^^^!]" &:# Make mure the string does not begin or end with delims
   set "REPL=%~3"
  +set "RETVAR=%~4" & if not defined RETVAR set "RETVAR=%~1"
   set "RESULT="
   :ReplaceDelimSets.loop
   for /f "delims=%~2 tokens=1*" %%s in ("!STRING!") do (
  
positive.code: if '%1'=='call' goto :call
  
  setlocal EnableExtensions DisableDelayedExpansion &:# Make sure ! characters are preserved
  set "VERSION=2021-09-15"
  set "SCRIPT=%~nx0"		&:# Script name
  set "SNAME=%~n0"		&:# Script name, without its extension
  set "SPATH=%~dp0"		&:# Script path
  
negative.code: :#                                                                            #
  :#  Arguments                                                                 #
  :#                                                                            #
  :#  Notes 	    Non ASCII CHAR arguments must be quoted. Ex: ","          #
  :#                                                                            #
  :#		    '*' '=' ':' cannot be replaced by %VAR:c=repl%            #
  :#                                                                            #
  :#                  Routines shared on dostips:                               #
  :#                  https://www.dostips.com/forum/viewtopic.php?p=50132#p50132
  :#                                                                            #
  :#  History                                                                   #
  :#   2016-11-13 JFL Added routine ReplaceChars.                               #
  :#   2021-12-06 JFL Use %FUNCTION%/%RETURN% to return correct results.        #
  :#                  Updated the drawback comments about known limitations.    #
  :#		    Added routine :ReplaceEquals.                             #
  :#                  The RETVAR argument is now optional for all routines.     #
  :#		    Fixed :ReplaceDelimSets support for ^ in input strings.   #
  :#                                                                            #
  :#----------------------------------------------------------------------------#
  
  :# Replace characters
  :# Advantage: Works with CHAR ':' '*' '~'
  :# Advantage: The string can contain LF and '"' characters
  :# Drawback: Does not work with '='.
  :ReplaceChars %1=STRVAR  %2=CHAR  %3=REPLACEMENT  %4=RETVAR (Default: STRVAR)
  %FUNCTION% EnableDelayedExpansion
  set "STRING=!%~1!"
  set "REPL=%~3"
  set "RETVAR=%~4" & if not defined RETVAR set "RETVAR=%~1"
  set "RESULT="
  if defined STRING (
    call :strlen.q STRING SLEN	&:# SLEN = Full string length
  