1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
@echo off
setlocal enabledelayedexpansion
:: GLE Installation Script for Windows
:: Default installation directory
DEFAULT_INSTALL_PREFIX=%ProgramFiles%\gle-graphics
ENV_KEY=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
echo "\e[31mG\e[32mL\e[34mE\e[0m Installation Script"
set INSTALL_DIR=
set CREATE_FILETYPE_ASSOCIATION=1
set INSTALL=1
set UNINSTALL=0
set ADMIN_NEEDED=1
set PREFIX_NEEDED=1
set MY_EDITOR=
:: Parse command-line arguments
:parse_args
if "%~1"=="" goto arg_parse_done
if "%~1"=="--prefix" (
shift
set INSTALL_DIR=%~1
shift
goto parse_args
) else if "%~1"=="--editor" (
shift
set MY_EDITOR=%~1
shift
goto parse_args
) else if "%~1"=="--create_filetype_association" (
set CREATE_FILETYPE_ASSOCIATION=1
set INSTALL=0
set ADMIN_NEEDED=0
set PREFIX_NEEDED=0
shift
goto parse_args
) else if "%~1"=="--no_create_filetype_association" (
set CREATE_FILETYPE_ASSOCIATION=0
shift
goto parse_args
) else if "%~1"=="--uninstall" (
set UNINSTALL=1
set CREATE_FILETYPE_ASSOCIATION=0
shift
goto parse_args
) else (
echo Usage: %~nx0 [--prefix "C:\Program Files"] [--create_filetype_association] [--uninstall]
exit /b 1
)
:arg_parse_done
if "%ADMIN_NEEDED%" == "1" (
:: Check for Administrator privileges
net session >nul 2>&1
if %errorlevel% neq 0 (
echo Error: Please run this script as Administrator.
exit /b 1
)
)
if "%PREFIX_NEEDED%" == "1" (
:: Prompt user if no prefix provided
set /p USER_INPUT=Choose installation directory [%DEFAULT_INSTALL_PREFIX% by default]:
if "%USER_INPUT%"=="" (
set INSTALL_DIR=%DEFAULT_INSTALL_PREFIX%
) else (
set INSTALL_DIR=%USER_INPUT%
)
)
if "%UNINSTALL%" == "1" (
echo Removing GLE from %INSTALL_DIR%...
:: Create directories
rmdir /S "%INSTALL_DIR%"
:: clean registry
REG DELETE HKCR\.gle /f
REG DELETE HKCR\glefile /f
:: delete GLE_TOP variable
set GLE_TOP=
REG DELETE "%ENV_KEY%" /v GLE_TOP /f
:: remove from PATH_EXT
set "RegPath=%ENV_KEY"
set "ValueName=PATHEXT"
set "AppendText=;.GLE"
for /f "tokens=3*" %%A in ('reg query "%RegPath%" /v "%ValueName%" ^| find "%ValueName%"') do (
set "CurrentValue=%%A %%B"
)
:: Check if CurrentValue is empty
if "%CurrentValue%"=="" (
echo Value not found or empty. Nothing to remove.
goto :EOF
)
:: echo Current value: %CurrentValue%
:: Remove the specified text
set "NewValue=%CurrentValue%"
set "NewValue=!NewValue:%RemoveText%=!"
:: Write updated value back to registry
reg add "%RegPath%" /v "%ValueName%" /t REG_SZ /d "%NewValue%" /f
:: remove from PATH
set "RegPath=%ENV_KEY"
set "ValueName=PATH"
set "AppendText=;%INSTALL_DIR%\bin"
for /f "tokens=3*" %%A in ('reg query "%RegPath%" /v "%ValueName%" ^| find "%ValueName%"') do (
set "CurrentValue=%%A %%B"
)
:: Check if CurrentValue is empty
if "%CurrentValue%"=="" (
echo Value not found or empty. Nothing to remove.
goto :EOF
)
:: echo Current value: %CurrentValue%
:: Remove the specified text
set "NewValue=%CurrentValue%"
set "NewValue=!NewValue:%RemoveText%=!"
:: Write updated value back to registry
reg add "%RegPath%" /v "%ValueName%" /t REG_SZ /d "%NewValue%" /f
)
if "%INSTALL%" == "1" (
echo Installing to %INSTALL_DIR%...
:: Create directories
mkdir "%INSTALL_DIR%"
mkdir "%INSTALL_DIR%\bin"
mkdir "%INSTALL_DIR%\fonts"
mkdir "%INSTALL_DIR%\doc"
mkdir "%INSTALL_DIR%\gleinc"
:: Copy files (assuming script is in root of GLE source)
copy bin\gle.exe "%INSTALL_DIR%\bin\"
copy bin\qgle.exe "%INSTALL_DIR%\bin\"
:: copy bin\manip.exe "%INSTALL_DIR%\bin\" (linux only)
copy glerc "%INSTALL_DIR%"
copy init.tex "%INSTALL_DIR%"
copy initex.ini "%INSTALL_DIR%"
copy doc\* "%INSTALL_DIR%\doc"
copy gleinc\*.txt "%INSTALL_DIR%\doc"
copy gleinc\*.gle "%INSTALL_DIR%\gleinc"
xcopy font "%INSTALL_DIR%\font" /E /I /Y
:: Set GLE_TOP variable
set GLE_TOP=%INSTALL_DIR%\share\gle-graphics
REG ADD "%ENV_KEY%" /f /v GLE_TOP /t REG_EXPAND_SZ /d "%INSTALL_DIR"
)
if %CREATE_FILETYPE_ASSOCIATION% == "1" (
REG ADD HKCR\.gle /f /ve /d glefile
REG ADD HKCR\.gle /f /v "Content Type" /t REG_SZ /d application/gle
REG ADD HKCR\.gle /f /v "PerceivedType" /t REG_SZ /d text
REG ADD HKCR\glefile /f /ve /d "GLE Script"
REG ADD HKCR\glefile /f /v EditFlags /t REG_DWORD /d 0
REG ADD HKCR\glefile /f /v BrowserFlags /t REG_DWORD /d 8
REG ADD HKCR\glefile /f /v AlwaysShowExt /t REG_SZ
REG ADD HKCR\glefile\DefaultIcon /f /ve /d "%INSTALL_DIR%\bin\qgle.exe,0"
REG ADD HKCR\glefile\shell\open\command /f /v " " /d "\"%INSTALL_DIR%\bin\qgle.exe\" -f %%1" /t REG_SZ
reg add HKCR\glefile\shell\edit /v MUIVerb /d "Edit" /f
REG ADD HKCR\glefile\shell\edit\command /f /v " " /d "\"%MY_EDITOR%\" %%1" /t REG_SZ
:: add to PATH if not allready present
set "ValueName=PATH"
set "AppendText=;%INSTALL_DIR%\bin"
:: Query current value
for /f "tokens=3*" %%A in ('reg query "%RegPath%" /v "%ValueName%" ^| find "%ValueName%"') do (
set "CurrentValue=%%A %%B"
)
:: Check if CurrentValue is empty
if "%CurrentValue%"=="" (
echo Value not found or empty. Creating new value.
set "NewValue=%AppendText%"
) else (
echo Current value: %CurrentValue%
set "NewValue=%CurrentValue%%AppendText%"
)
:: Write updated value back to registry
reg add "%RegPath%" /v "%ValueName%" /t REG_SZ /d "%NewValue%" /f
:: add to PATHEXT if not allready present
:: Define registry path, value name, and text to append
set "RegPath=%ENV_KEY"
set "ValueName=PATHEXT"
set "AppendText=;.GLE"
:: Query current value
for /f "tokens=3*" %%A in ('reg query "%RegPath%" /v "%ValueName%" ^| find "%ValueName%"') do (
set "CurrentValue=%%A %%B"
)
:: Check if CurrentValue is empty
if "%CurrentValue%"=="" (
echo Value not found or empty. Creating new value.
set "NewValue=%AppendText%"
) else (
echo Current value: %CurrentValue%
set "NewValue=%CurrentValue%%AppendText%"
)
:: Write updated value back to registry
reg add "%RegPath%" /v "%ValueName%" /t REG_SZ /d "%NewValue%" /f
)
echo GLE Installation complete.
|