Skip to content

Commit

Permalink
Merge pull request #141 from Argent77/user-dir-fix
Browse files Browse the repository at this point in the history
[Windows] Fix installation errors when user name contains non-ASCII characters
  • Loading branch information
K4thos authored Mar 27, 2024
2 parents 9cb11ac + 38db44c commit db73786
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 3 deletions.
7 changes: 4 additions & 3 deletions EET/EET.tp2
Original file line number Diff line number Diff line change
Expand Up @@ -1019,15 +1019,16 @@ BUT_ONLY
COPY ~engine.lua~ ~engine.lua~
REPLACE_TEXTUALLY ~engine_name[ %TAB%]*=[ %TAB%]*".*"~ ~engine_name = "Baldur's Gate - Enhanced Edition Trilogy"~

OUTER_PATCH_SAVE USER_DIRECTORY_EET ~%USER_DIRECTORY%~ BEGIN
LAF GET_USER_DIRECTORY RET user_directory END // retrieves user directory in the correct character encoding
OUTER_PATCH_SAVE USER_DIRECTORY_EET ~%user_directory%~ BEGIN
REPLACE_TEXTUALLY ~Baldur's Gate II - Enhanced Edition~ ~Baldur's Gate - Enhanced Edition Trilogy~
END

ACTION_IF (NOT DIRECTORY_EXISTS ~%USER_DIRECTORY_EET%/save~) BEGIN
MKDIR ~%USER_DIRECTORY_EET%/save~
END
ACTION_IF (NOT FILE_EXISTS ~%USER_DIRECTORY_EET%/Baldur.lua~) AND (FILE_EXISTS ~%USER_DIRECTORY%/Baldur.lua~) BEGIN
COPY + ~%USER_DIRECTORY%/Baldur.lua~ ~%USER_DIRECTORY_EET%~
ACTION_IF (NOT FILE_EXISTS ~%USER_DIRECTORY_EET%/Baldur.lua~) AND (FILE_EXISTS ~%user_directory%/Baldur.lua~) BEGIN
COPY + ~%user_directory%/Baldur.lua~ ~%USER_DIRECTORY_EET%~
END

ACTION_IF (FILE_EXISTS ~%USER_DIRECTORY_EET%/Baldur.lua~) BEGIN
Expand Down
50 changes: 50 additions & 0 deletions EET/lib/macros.tph
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,56 @@
//BEGIN Macros
/////////////////////////////////////////////////////////////////////////////////////////////////////////

// Returns the game's user directory (USER_DIRECTORY) in the right encoding for use with filesystem functions.
DEFINE_ACTION_FUNCTION GET_USER_DIRECTORY
STR_VAR
temp_directory = EVAL ~%MOD_FOLDER%/temp~ // where to store temporary data
RET
user_directory // path to the game's user directory
BEGIN
ACTION_IF (~%WEIDU_OS%~ STR_EQ ~win32~) BEGIN
// On Windows the path string must be correctly encoded
<<<<<<<< .../get_doc_path.bat
@echo off
for /f "tokens=3,*" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do set DOC_DIR=%%a
for /f "delims=" %%a in ('echo %DOC_DIR%') do echo %%a>"${temp_directory}\documents_path.txt"
>>>>>>>>
MKDIR ~%temp_directory%~
COPY + ~.../get_doc_path.bat~ ~%temp_directory%/get_doc_path.bat~
// Replacing ${xxx} placeholders in batch file with content of %xxx%.
// This is needed as regular %xxx% variables have already a special meaning in batch files.
REPLACE_EVALUATE ~\${\([^}]+\)}~ BEGIN
SPRINT path_var EVAL ~%%MATCH1%%~
INNER_PATCH_SAVE path_var ~%path_var%~ BEGIN REPLACE_TEXTUALLY ~/~ ~\\~ END
END ~%path_var%~
AT_NOW ~%temp_directory%/get_doc_path.bat~
DELETE ~%temp_directory%/get_doc_path.bat~

// getting Documents directory
COPY + ~%temp_directory%/documents_path.txt~ ~%temp_directory%/documents_path.txt~
REPLACE_TEXTUALLY ~[%WNL%]+~ ~~
READ_ASCII 0 doc_dir (BUFFER_LENGTH)
DELETE ~%temp_directory%/documents_path.txt~

// getting game folder name
// OUTER_SPRINT game_folder ~Baldur's Gate II - Enhanced Edition~
// COPY ~engine.lua~ ~engine.lua~
// READ_ASCII 0 content (BUFFER_LENGTH)
// INNER_PATCH ~%content%~ BEGIN
// REPLACE_EVALUATE ~engine_name[ %TAB%]*=[ %TAB%]*"\([^"]+\)"~ BEGIN
// SPRINT game_folder ~%MATCH1%~
// END ~%MATCH0%~
// END
// BUT_ONLY IF_EXISTS

// assembling user directory
OUTER_SPRINT user_directory ~%doc_dir%\Baldur's Gate II - Enhanced Edition~
END ELSE BEGIN
// using WeiDU variable directly on non-Windows systems
OUTER_SPRINT user_directory ~%USER_DIRECTORY%~
END
END

DEFINE_ACTION_FUNCTION GET_SYSTEM_ARCH RET SYSTEM_ARCH BEGIN
ACTION_MATCH "%WEIDU_OS%" WITH
win32 BEGIN
Expand Down

0 comments on commit db73786

Please sign in to comment.