anchor.diff:  :#                                                                            #
   :#  Function        PopArg                                                    #
   :#                                                                            #
  -:#  Description     Pop the first arguments from %ARGS% into %ARG%            #
  -:#                                                                            #
  -:#  Arguments       %ARGS%	    Command line arguments                    #
  -:#                                                                            #
  -:#  Returns         %ARG%           The unquoted argument                     #
  +:#  Description     Pop the first argument from %ARGS% into %ARG% and %"ARG"% #
  +:#                                                                            #
  +:#  Macros          %POPARG%        Pop one argument                          #
  +:#                  %POPSARG%       Faster version, not supporting ! or ^ val.#
  +:#                                                                            #
  +:#  Input           %ARGS%	    Command line arguments                    #
  +:#                                                                            #
  +:#  Output          %ARG%           The unquoted argument                     #
   :#                  %"ARG"%         The actual argument, possibly quoted      #
  +:#                  %ARGS%	    Remaining command line arguments          #
   :#                                                                            #
   :#  Notes 	    Works around the defect of the shift command, which       #
   :#                  pops the first argument from the %* list, but does not    #
   :#                  remove it from %*.                                        #
  +:#                  Also works around another defect with tricky characters   #
  +:#                  like ! or ^ being lost when variable expansion is on.     #
  +:#                                                                            #
  +:#                  Important: The performance of this routine is much better #
  +:#                  when invoked with variable expansion disabled. This is    #
  +:#                  due to the complex processing done to avoid issues with   #
  +:#                  tricky characters like ! or ^ when expansion is enabled.  #
  +:#                  If you're sure that NONE of the arguments contain such    #
  +:#                  tricky characters, then call :PopSimpleArg.               #
   :#                                                                            #
   :#                  Use an inner call to make sure the argument parsing is    #
   :#                  done by the actual cmd.exe parser. This guaranties that   #
  
positive.code: %RETURN%
  
  :#----------------------------------------------------------------------------#
  :#                                                                            #
  :#  Function        Main                                                      #
  :#                                                                            #
  
negative.code: set "FUNCTION0=rem"
  set FUNCTION=%MACRO.GETEXP% %&% %MACRO% ( %\n%
    call set "FUNCTION.NAME=%%0" %\n%
    call set ARGS=%%*%# Do not quote this, to keep string/non string aternance #%%\n%
    set ARGS=%!%ARGS:^^^^^^^^^^^^^^^^=^^^^^^^^%!%%# ^carets are doubled in quoted strings, halved outside. => Quadruple them if using unquoted ones #%%\n%
    set "DEBUG.RETVARS=" %\n%
    if not defined MACRO.ARGS set "MACRO.ARGS=%'!%MACRO.EXP%'!%" %\n%
    setlocal %!%MACRO.ARGS%!% %\n%
  