mirror of
https://github.com/1j01/textual-paint.git
synced 2024-12-22 06:11:37 +03:00
201 lines
6.7 KiB
Bash
201 lines
6.7 KiB
Bash
|
lang=$1
|
||
|
img_dir=/home/io/Downloads/Windowses/vdi-to-img
|
||
|
img_file=$img_dir/Win98-$lang.vdi.img
|
||
|
output_dir=/home/io/Downloads/Windowses/resources/$lang
|
||
|
|
||
|
if [ ! "$1" ]; then
|
||
|
echo "One argument required: a target language code (e.g. en)"
|
||
|
exit 1
|
||
|
fi
|
||
|
if [ ! "$2" ]; then
|
||
|
vdi_file="/home/io/VirtualBox VMs/Win98-$lang/Win98-$lang.vdi"
|
||
|
elif [ -d "$2" ]; then
|
||
|
mount_dir=$2
|
||
|
elif [ -f "$2" ]; then
|
||
|
vdi_file=$2
|
||
|
else
|
||
|
echo "No file or directory at \"$2\"!"
|
||
|
exit 1
|
||
|
fi
|
||
|
if [ ! "$mount_dir" ]; then
|
||
|
if [ ! -d "$img_dir" ]; then
|
||
|
mkdir -p "$img_dir"
|
||
|
fi
|
||
|
if [ ! -f "$img_file" ]; then
|
||
|
echo "File \"$img_file\" does not exist yet..."
|
||
|
# To avoid "VBoxManage: error: Cannot register the hard disk ... because a hard disk ... already exists",
|
||
|
# copy the .vdi file and randomize the UUID.
|
||
|
vdi_copy="$vdi_file-copy.vdi"
|
||
|
echo "Copy .vdi file"
|
||
|
cp "$vdi_file" "$vdi_copy"
|
||
|
echo "Regenerate copied .vdi file's UUID"
|
||
|
VBoxManage internalcommands sethduuid "$vdi_copy"
|
||
|
echo "Convert .vdi to RAW .img"
|
||
|
VBoxManage clonemedium disk "$vdi_copy" "$img_file" --format RAW
|
||
|
rm "$vdi_copy"
|
||
|
if [ ! -f "$img_file" ]; then
|
||
|
echo "Failed to create \"$img_file\"!"
|
||
|
exit 1
|
||
|
fi
|
||
|
echo "Created \"$img_file\""
|
||
|
fi
|
||
|
echo "Time to do some desktop automation!"
|
||
|
sleep 3
|
||
|
echo "Show .img file in folder"
|
||
|
nautilus --browser "$img_file"
|
||
|
echo "Waiting for window \"vdi-to-img\""
|
||
|
xdotool search --sync --name "vdi-to-img" windowactivate --sync
|
||
|
echo "Found window \"vdi-to-img\""
|
||
|
sleep 5
|
||
|
xdotool key --clearmodifiers Return
|
||
|
sleep 1
|
||
|
echo "Click on notification to go to mounted folder"
|
||
|
echo "If the wrong notification is selected, quick, use the arrow keys!"
|
||
|
xdotool key --clearmodifiers Super_L+v
|
||
|
sleep 15 # time to select appropriate notification
|
||
|
xdotool key --clearmodifiers Return
|
||
|
sleep 0.5
|
||
|
xdotool key --clearmodifiers Escape
|
||
|
sleep 8
|
||
|
# It's just called e.g. 341 MB Volume
|
||
|
# echo "Waiting for window \"Win98-$lang.vdi\""
|
||
|
# xdotool search --sync --name "Win98-$lang.vdi" windowactivate --sync
|
||
|
# echo "Found window \"Win98-$lang.vdi\""
|
||
|
# sleep 1
|
||
|
echo "Copy path of mounted folder"
|
||
|
xdotool key --clearmodifiers ctrl+l
|
||
|
sleep 1
|
||
|
old_clipboard=`xclip -selection clipboard -o`
|
||
|
xdotool key --clearmodifiers ctrl+c
|
||
|
sleep 0.5
|
||
|
mount_dir=`xclip -selection clipboard -o`
|
||
|
cat "$old_clipboard" | xclip -selection clipboard
|
||
|
echo "(Restored clipboard text)"
|
||
|
echo "Close mounted folder window"
|
||
|
xdotool key --clearmodifiers alt+F4
|
||
|
echo "Close vdi-to-img folder window"
|
||
|
wmctrl -c "vdi-to-img"
|
||
|
if [ ! -d "$mount_dir" ]; then
|
||
|
echo "Failed to get path of mounted directory, or failed to mount. \"$mount_dir\" is not a directory."
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
if [ ! -d "$output_dir" ]; then
|
||
|
mkdir -p "$output_dir"
|
||
|
fi
|
||
|
|
||
|
echo "Using mount dir: \"$mount_dir\""
|
||
|
|
||
|
grab() {
|
||
|
file_path=`find "$mount_dir" -iname "$1" | head -n 1`
|
||
|
if [ -f "$file_path" ]; then
|
||
|
printf "Copy \"$file_path\" -> \"$output_dir\" "
|
||
|
cp "$file_path" "$output_dir"
|
||
|
if [ $? = 0 ]; then
|
||
|
printf " ✅\n"
|
||
|
else
|
||
|
printf " ❌\n"
|
||
|
fi
|
||
|
else
|
||
|
printf "No file found for \"$1\" ❌\n"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
grab_folder() {
|
||
|
folder_path=`find "$mount_dir" -type d -iname "$1" | head -n 1`
|
||
|
if [ -d "$folder_path" ]; then
|
||
|
printf "Copy folder \"$folder_path\" -> \"$output_dir\" "
|
||
|
cp -r "$folder_path" "$output_dir"
|
||
|
if [ $? = 0 ]; then
|
||
|
printf " ✅\n"
|
||
|
else
|
||
|
printf " ❌\n"
|
||
|
fi
|
||
|
else
|
||
|
printf "No folder found for \"$1\" ❌\n"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
grab_folder "Help" # "C:\\Windows\\Help"
|
||
|
grab "Notepad.exe" # "C:\\Windows\\Notepad.exe"
|
||
|
grab "Sndrec32.exe" # "C:\\Windows\\Sndrec32.exe"
|
||
|
grab "WinHelp.exe" # "C:\\Windows\\WinHelp.exe"
|
||
|
grab "WinHlp32.exe" # "C:\\Windows\\WinHlp32.exe"
|
||
|
grab "Explorer.exe" # "C:\\Windows\\Explorer.exe"
|
||
|
grab "Offline.htm" # "C:\\Windows\\Web\\Offline.htm"
|
||
|
# grab "iexplore.exe" # "C:\\Program Files\\Internet Explorer\\iexplore.exe" # contains no interesting strings
|
||
|
# grab "browseui.dll" # "C:\\Program Files\\Internet Explorer\\iexplore.exe" # contains no strings
|
||
|
grab "mspaint.exe" # "C:\\Program Files\\Accessories\\mspaint.exe"
|
||
|
grab "wordpad.exe" # "C:\\Program Files\\Accessories\\wordpad.exe"
|
||
|
grab "Write.exe" # "C:\\Windows\\Write.exe"
|
||
|
|
||
|
echo "Grabbed files, now copy them to the Windows 10 VM shared folder"
|
||
|
rsync -av --exclude='HELP/' "/home/io/Downloads/Windowses/resources" "/home/io/VirtualBox VMs/Win10 Share"
|
||
|
|
||
|
echo "Go to Windows 10 VM"
|
||
|
VBoxManage controlvm "Windows 10" resume
|
||
|
xdotool search --sync --name "Windows 10 (\(.*\) )?\[Running\]" windowactivate --sync
|
||
|
sleep 1
|
||
|
echo "Open Run dialog"
|
||
|
xdotool key --clearmodifiers --delay 20 Super_L+r
|
||
|
sleep 1
|
||
|
echo "Open Resource Tuner for the localized mspaint.exe"
|
||
|
xdotool type --delay 20 "C:\\Program Files (x86)\\Resource Tuner\\restuner.exe Z:\\resources\\$lang\\mspaint.exe"
|
||
|
sleep 0.3
|
||
|
xdotool key --clearmodifiers Return
|
||
|
sleep 10
|
||
|
echo "Open \"Save Multiple Resources At Once\" batch export dialog"
|
||
|
xdotool key --clearmodifiers --delay 20 ctrl+shift+m
|
||
|
sleep 2
|
||
|
echo "Settings should be already selected; Next"
|
||
|
xdotool key --clearmodifiers --delay 20 alt+n
|
||
|
sleep 2
|
||
|
echo "Enter output folder"
|
||
|
xdotool key --clearmodifiers --delay 20 Tab
|
||
|
sleep 0.2
|
||
|
xdotool key --clearmodifiers --delay 20 Tab
|
||
|
sleep 0.2
|
||
|
xdotool key --clearmodifiers --delay 20 Tab
|
||
|
sleep 0.2
|
||
|
# It will create these folders automatically :)
|
||
|
xdotool type "Z:\\extracted-resources\\$lang\\mspaint"
|
||
|
sleep 0.2
|
||
|
echo "Finish"
|
||
|
xdotool key --clearmodifiers Return
|
||
|
sleep 1
|
||
|
echo "Close Resource Tuner"
|
||
|
xdotool key --clearmodifiers alt+F4
|
||
|
sleep 1
|
||
|
echo "Pause the VM"
|
||
|
VBoxManage controlvm "Windows 10" pause
|
||
|
|
||
|
echo "Copy extracted strings out of the VM shared folder"
|
||
|
mkdir -p "/home/io/Projects/jspaint/localization/$lang"
|
||
|
cp -r "/home/io/VirtualBox VMs/Win10 Share/extracted-resources/$lang/mspaint/Dialog" "/home/io/Projects/jspaint/localization/$lang"
|
||
|
cp -r "/home/io/VirtualBox VMs/Win10 Share/extracted-resources/$lang/mspaint/Menu" "/home/io/Projects/jspaint/localization/$lang"
|
||
|
cp -r "/home/io/VirtualBox VMs/Win10 Share/extracted-resources/$lang/mspaint/String Table" "/home/io/Projects/jspaint/localization/$lang"
|
||
|
echo "Rebuild localization files in jspaint"
|
||
|
cd "/home/io/Projects/jspaint"
|
||
|
npm run update-localization
|
||
|
echo "DONE! Now just test the new language in jspaint and commit!"
|
||
|
|
||
|
# TODO: find where strings are stored for:
|
||
|
# - The Edit Colors dialog text
|
||
|
# - The Help viewer text
|
||
|
# - Minesweeper - is Games not part of Typical/Recommended installation?
|
||
|
|
||
|
|
||
|
# Script to open Paint and the Edit Colors dialog in a VM:
|
||
|
# echo "Alt-tab to and click on VM window to select it"
|
||
|
# xdotool selectwindow windowactivate --sync
|
||
|
# sleep 1
|
||
|
# xdotool key --clearmodifiers --delay 20 Super_L+r
|
||
|
# sleep 1
|
||
|
# xdotool type --delay 20 "C:\\Program Files\\Accessories\\Mspaint.exe"
|
||
|
# xdotool key --clearmodifiers Return
|
||
|
# sleep 1
|
||
|
# xdotool key --clearmodifiers --delay 20 alt+c
|
||
|
# xdotool key --clearmodifiers --delay 20 Return
|
||
|
# xdotool key --clearmodifiers --delay 20 alt+d
|