| @ECHO OFF | 
 |  | 
 | :: | 
 | :: GetTclKit.bat -- | 
 | :: | 
 | :: TclKit Download Tool | 
 | :: | 
 |  | 
 | SETLOCAL | 
 |  | 
 | REM SET __ECHO=ECHO | 
 | REM SET __ECHO2=ECHO | 
 | REM SET __ECHO3=ECHO | 
 | IF NOT DEFINED _AECHO (SET _AECHO=REM) | 
 | IF NOT DEFINED _CECHO (SET _CECHO=REM) | 
 | IF NOT DEFINED _VECHO (SET _VECHO=REM) | 
 |  | 
 | SET OVERWRITE=^> | 
 | IF DEFINED __ECHO SET OVERWRITE=^^^> | 
 |  | 
 | SET APPEND=^>^> | 
 | IF DEFINED __ECHO SET APPEND=^^^>^^^> | 
 |  | 
 | SET PROCESSOR=%1 | 
 |  | 
 | IF DEFINED PROCESSOR ( | 
 |   CALL :fn_UnquoteVariable PROCESSOR | 
 | ) ELSE ( | 
 |   GOTO usage | 
 | ) | 
 |  | 
 | %_VECHO% Processor = '%PROCESSOR%' | 
 |  | 
 | SET DUMMY2=%2 | 
 |  | 
 | IF DEFINED DUMMY2 ( | 
 |   GOTO usage | 
 | ) | 
 |  | 
 | SET ROOT=%~dp0\.. | 
 | SET ROOT=%ROOT:\\=\% | 
 |  | 
 | %_VECHO% Root = '%ROOT%' | 
 |  | 
 | SET TOOLS=%~dp0 | 
 | SET TOOLS=%TOOLS:~0,-1% | 
 |  | 
 | %_VECHO% Tools = '%TOOLS%' | 
 |  | 
 | IF NOT DEFINED windir ( | 
 |   ECHO The windir environment variable must be set first. | 
 |   GOTO errors | 
 | ) | 
 |  | 
 | %_VECHO% WinDir = '%windir%' | 
 |  | 
 | IF NOT DEFINED TEMP ( | 
 |   ECHO The TEMP environment variable must be set first. | 
 |   GOTO errors | 
 | ) | 
 |  | 
 | %_VECHO% Temp = '%TEMP%' | 
 |  | 
 | IF NOT DEFINED TCLKIT_URI ( | 
 |   SET TCLKIT_URI=https://tclsh.com/ | 
 | ) | 
 |  | 
 | %_VECHO% TclKitUri = '%TCLKIT_URI%' | 
 |  | 
 | IF /I "%PROCESSOR%" == "x86" ( | 
 |   CALL :fn_TclKitX86Variables | 
 | ) ELSE IF /I "%PROCESSOR%" == "x64" ( | 
 |   CALL :fn_TclKitX64Variables | 
 | ) ELSE ( | 
 |   GOTO usage | 
 | ) | 
 |  | 
 | %_VECHO% TclKitVersion = '%TCLKIT_VERSION%' | 
 | %_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%' | 
 | %_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%' | 
 | %_VECHO% TclKitExe = '%TCLKIT_EXE%' | 
 | %_VECHO% TclKitLib = '%TCLKIT_LIB%' | 
 | %_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%' | 
 | %_VECHO% TclKitSdk = '%TCLKIT_SDK%' | 
 | %_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%' | 
 | %_VECHO% TclKitFiles = '%TCLKIT_FILES%' | 
 |  | 
 | CALL :fn_ResetErrorLevel | 
 |  | 
 | FOR %%T IN (csc.exe) DO ( | 
 |   SET %%T_PATH=%%~dp$PATH:T | 
 | ) | 
 |  | 
 | %_VECHO% Csc.exe_PATH = '%csc.exe_PATH%' | 
 |  | 
 | IF DEFINED csc.exe_PATH ( | 
 |   GOTO skip_addToPath | 
 | ) | 
 |  | 
 | IF DEFINED FRAMEWORKDIR ( | 
 |   REM Use the existing .NET Framework directory... | 
 | ) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" ( | 
 |   SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727 | 
 | ) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" ( | 
 |   SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5 | 
 | ) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" ( | 
 |   SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319 | 
 | ) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" ( | 
 |   SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727 | 
 | ) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" ( | 
 |   SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5 | 
 | ) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" ( | 
 |   SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319 | 
 | ) ELSE ( | 
 |   ECHO No suitable version of the .NET Framework appears to be installed. | 
 |   GOTO errors | 
 | ) | 
 |  | 
 | %_VECHO% FrameworkDir = '%FRAMEWORKDIR%' | 
 |  | 
 | IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" ( | 
 |   ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing. | 
 |   GOTO errors | 
 | ) | 
 |  | 
 | SET PATH=%FRAMEWORKDIR%;%PATH% | 
 |  | 
 | :skip_addToPath | 
 |  | 
 | IF NOT EXIST "%TEMP%\GetFile.exe" ( | 
 |   %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs" | 
 |  | 
 |   IF ERRORLEVEL 1 ( | 
 |     ECHO Compilation of "%TOOLS%\GetFile.cs" failed. | 
 |     GOTO errors | 
 |   ) | 
 | ) | 
 |  | 
 | FOR %%F IN (%TCLKIT_FILES%) DO ( | 
 |   IF NOT EXIST "%TEMP%\%%F" ( | 
 |     %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F" | 
 |  | 
 |     IF ERRORLEVEL 1 ( | 
 |       ECHO Download of "%%F" from "%TCLKIT_URI%" failed. | 
 |       GOTO errors | 
 |     ) | 
 |   ) | 
 | ) | 
 |  | 
 | IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip | 
 |  | 
 | IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" ( | 
 |   %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%" | 
 |  | 
 |   IF ERRORLEVEL 1 ( | 
 |     ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%". | 
 |     GOTO errors | 
 |   ) | 
 | ) | 
 |  | 
 | %__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%" | 
 |  | 
 | IF ERRORLEVEL 1 ( | 
 |   ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%". | 
 |   GOTO errors | 
 | ) | 
 |  | 
 | :skip_sdkUnZip | 
 |  | 
 | %__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ROOT%\SetTclKitEnv.bat" | 
 |  | 
 | IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables | 
 |  | 
 | %__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ROOT%\SetTclKitEnv.bat" | 
 | %__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat" | 
 | %__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat" | 
 | %__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat" | 
 | %__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat" | 
 |  | 
 | :skip_sdkVariables | 
 |  | 
 | ECHO. | 
 | ECHO Wrote "%ROOT%\SetTclKitEnv.bat". | 
 | ECHO Please run it to set the necessary Tcl environment variables. | 
 | ECHO. | 
 |  | 
 | GOTO no_errors | 
 |  | 
 | :fn_TclKitX86Variables | 
 |   IF NOT DEFINED TCLKIT_PATCHLEVEL ( | 
 |     SET TCLKIT_PATCHLEVEL=8.6.4 | 
 |   ) | 
 |   SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% | 
 |   SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% | 
 |   SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe | 
 |   SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib | 
 |   SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a | 
 |   SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL% | 
 |   SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip | 
 |   SET TCLKIT_FILES=%TCLKIT_EXE% | 
 |   IF NOT DEFINED TCLKIT_NOSDK ( | 
 |     SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% | 
 |   ) | 
 |   GOTO :EOF | 
 |  | 
 | :fn_TclKitX64Variables | 
 |   IF NOT DEFINED TCLKIT_PATCHLEVEL ( | 
 |     REM | 
 |     REM NOTE: By default, use latest available version of the TclKit SDK | 
 |     REM       for x64.  However, the "default" TclKit executable for x86 | 
 |     REM       is still used here because it is the only one "well-known" | 
 |     REM       to be available for download. | 
 |     REM | 
 |     SET TCLKIT_PATCHLEVEL=8.6.3 | 
 |     SET TCLKIT_EXE=tclkit-8.6.4.exe | 
 |   ) ELSE ( | 
 |     SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe | 
 |   ) | 
 |   SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% | 
 |   SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% | 
 |   SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib | 
 |   SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a | 
 |   SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL% | 
 |   SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip | 
 |   SET TCLKIT_FILES=%TCLKIT_EXE% | 
 |   IF NOT DEFINED TCLKIT_NOSDK ( | 
 |     SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% | 
 |   ) | 
 |   GOTO :EOF | 
 |  | 
 | :fn_UnquoteVariable | 
 |   IF NOT DEFINED %1 GOTO :EOF | 
 |   SETLOCAL | 
 |   SET __ECHO_CMD=ECHO %%%1%% | 
 |   FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( | 
 |     SET VALUE=%%V | 
 |   ) | 
 |   SET VALUE=%VALUE:"=% | 
 |   REM " | 
 |   ENDLOCAL && SET %1=%VALUE% | 
 |   GOTO :EOF | 
 |  | 
 | :fn_ResetErrorLevel | 
 |   VERIFY > NUL | 
 |   GOTO :EOF | 
 |  | 
 | :fn_SetErrorLevel | 
 |   VERIFY MAYBE 2> NUL | 
 |   GOTO :EOF | 
 |  | 
 | :usage | 
 |   ECHO. | 
 |   ECHO Usage: %~nx0 ^<processor^> | 
 |   ECHO. | 
 |   ECHO The only supported values for processor are "x86" and "x64". | 
 |   GOTO errors | 
 |  | 
 | :errors | 
 |   CALL :fn_SetErrorLevel | 
 |   ENDLOCAL | 
 |   ECHO. | 
 |   ECHO Failure, errors were encountered. | 
 |   GOTO end_of_file | 
 |  | 
 | :no_errors | 
 |   CALL :fn_ResetErrorLevel | 
 |   ENDLOCAL | 
 |   ECHO. | 
 |   ECHO Success, no errors were encountered. | 
 |   GOTO end_of_file | 
 |  | 
 | :end_of_file | 
 | %__ECHO% EXIT /B %ERRORLEVEL% |