@goto INITIALIZE
:BEGIN
if "%~0"=="GENERATE-CODE.cmd" set is_nested_call$$=1

if !is_nested_call$$!==1 goto START
cls
echo GENERATING CODE FILE(S):
echo ßßßßßßßßßßßßßßßßßßßßßßßß

:START
call #SETTINGS.cmd
if !errorlevel! neq 0 goto ERROR

if "!#UseMsBuild!"=="1" goto MS_BUILD
call :EXEC_CMD dotnet build --nologo "!#ProjectFileName!" -t:"_GenerateFiles_"
if !errorlevel! neq 0 goto FAILURE
goto SUCCESS

:MS_BUILD
call :EXEC_CMD MsBuild /nologo /v:minimal "!#ProjectFileName!" /t:"_GenerateFiles_"
if !errorlevel! neq 0 goto FAILURE

::==================================================================================================

:SUCCESS
if !is_nested_call$$!==1 goto FINISH
echo.
echo ÜÜÜ GENERATE CODE ÄÄ SUCCESS ÜÜÜ
goto FINISH

:FAILURE
if !is_nested_call$$!==1 goto ERROR
echo.
echo ÜÜÜ ## GENERATE CODE ÄÄ FAILURE ÜÜÜ
goto ERROR

::==================================================================================================

:EXEC_CMD
call :SET_ERROR
setlocal enableextensions disabledelayedexpansion
if errorlevel 1 goto CANT_SWITCH_ON_SIMPLE_CMD_PROCESSING
echo.
echo ^>^> %* ...
%*
if %errorlevel% neq 0 goto END_LOCAL_RETURN_ERROR
goto END_LOCAL_RETURN_SUCCESS

::==================================================================================================
:INITIALIZE
@echo off
call :SET_ERROR
setlocal enableextensions disabledelayedexpansion
if errorlevel 1 goto CANT_SWITCH_ON_SIMPLE_CMD_PROCESSING
set DP0$$=%~dp0
set P1$$=%~1
set P2$$=%~2
set P3$$=%~3
set P4$$=%~4
set P5$$=%~5
set P6$$=%~6
set P7$$=%~7
set P8$$=%~8
set P9$$=%~9
call :SET_ERROR
setlocal enableextensions enabledelayedexpansion
if errorlevel 1 goto CANT_SWITCH_ON_EXTENDED_CMD_PROCESSING
set is_nested_call$$=0
set initial_cd$$=!CD!
goto BEGIN
::==================================================================================================
:CANT_SWITCH_ON_SIMPLE_CMD_PROCESSING
echo.
echo ## Can not switch on simple command processing (without delayed expansion).
goto TERMINATED
:CANT_SWITCH_ON_EXTENDED_CMD_PROCESSING
echo.
echo ## Can not switch on extended command processing.
goto TERMINATED
::--------------------------------------------------------------------------------------------------
rem :
rem echo.
rem echo ## 
rem goto TERMINATED
::--------------------------------------------------------------------------------------------------
:TERMINATED
echo ## CMD-execution is terminated (in "%~dpnx0").
echo 
pause
EXIT 255
::==================================================================================================
:RESET_ERROR
set errorlevel=0
set errorlevel=
goto :EOF
:SET_ERROR
verify # 2>nul
goto :EOF
::==================================================================================================
:RETURN_SUCCESS
set errorlevel=0
set errorlevel=
goto :EOF
:RETURN_ERROR
verify # 2>nul
goto :EOF
:END_LOCAL_RETURN_SUCCESS
endlocal
goto RETURN_SUCCESS
:END_LOCAL_RETURN_ERROR
endlocal
goto RETURN_ERROR
::==================================================================================================
:FINISH
if !is_nested_call$$!==0 if not "!$cmd_plain!"=="1" (
echo.
pause )
endlocal
endlocal
goto RETURN_SUCCESS
:ERROR
if !is_nested_call$$!==0 (
echo 
if not "%$cmd_plain%"=="1" pause )
endlocal
endlocal
goto RETURN_ERROR
::==================================================================================================
