From 8d95a6e0778726877b0a9674061050a0baa4cc2b Mon Sep 17 00:00:00 2001 From: Rim Date: Fri, 15 Dec 2023 16:09:19 -0500 Subject: [PATCH] Add tools, compile script --- README.md | 2 +- T7x/compile.bat | 4 + T7x/t7x_Installer.nsi | 2 +- T7x/{old => ver}/template.nsi | 0 T7x/{old => ver}/test.nsi | 0 T7x/{old => ver}/test2.nsi | 0 T7x/{old => ver}/test3.nsi | 0 T7x/{old => ver}/test4.nsi | 0 T7x/{old => ver}/test5.nsi | 0 T7x/{old => ver}/test6.nsi | 0 tools/Bin/GenPat.exe | Bin 0 -> 25088 bytes tools/Bin/MakeLangId.exe | Bin 0 -> 24576 bytes tools/Bin/RegTool-x86.bin | Bin 0 -> 5120 bytes tools/Bin/makensis.exe | Bin 0 -> 465920 bytes tools/Bin/zip2exe.exe | Bin 0 -> 22528 bytes tools/Bin/zlib1.dll | Bin 0 -> 81964 bytes tools/Contrib/Graphics/Checks/big.bmp | Bin 0 -> 886 bytes .../Contrib/Graphics/Checks/classic-cross.bmp | Bin 0 -> 886 bytes tools/Contrib/Graphics/Checks/classic.bmp | Bin 0 -> 886 bytes tools/Contrib/Graphics/Checks/colorful.bmp | Bin 0 -> 2512 bytes tools/Contrib/Graphics/Checks/grey-cross.bmp | Bin 0 -> 886 bytes tools/Contrib/Graphics/Checks/grey.bmp | Bin 0 -> 886 bytes tools/Contrib/Graphics/Checks/modern.bmp | Bin 0 -> 1652 bytes tools/Contrib/Graphics/Checks/red-round.bmp | Bin 0 -> 886 bytes tools/Contrib/Graphics/Checks/red.bmp | Bin 0 -> 886 bytes .../Contrib/Graphics/Checks/simple-round.bmp | Bin 0 -> 1616 bytes .../Contrib/Graphics/Checks/simple-round2.bmp | Bin 0 -> 1844 bytes tools/Contrib/Graphics/Checks/simple.bmp | Bin 0 -> 1616 bytes tools/Contrib/Graphics/Header/nsis-r.bmp | Bin 0 -> 9744 bytes tools/Contrib/Graphics/Header/nsis.bmp | Bin 0 -> 9744 bytes .../Graphics/Header/nsis3-branding-r.bmp | Bin 0 -> 25820 bytes .../Graphics/Header/nsis3-branding.bmp | Bin 0 -> 25820 bytes .../Graphics/Header/nsis3-grey-right.bmp | Bin 0 -> 8932 bytes tools/Contrib/Graphics/Header/nsis3-grey.bmp | Bin 0 -> 8956 bytes .../Graphics/Header/nsis3-metro-right.bmp | Bin 0 -> 25820 bytes tools/Contrib/Graphics/Header/nsis3-metro.bmp | Bin 0 -> 25820 bytes .../Graphics/Header/nsis3-vintage-right.bmp | Bin 0 -> 8996 bytes .../Contrib/Graphics/Header/nsis3-vintage.bmp | Bin 0 -> 9008 bytes tools/Contrib/Graphics/Header/orange-nsis.bmp | Bin 0 -> 9740 bytes .../Contrib/Graphics/Header/orange-r-nsis.bmp | Bin 0 -> 9740 bytes tools/Contrib/Graphics/Header/orange-r.bmp | Bin 0 -> 9744 bytes .../Graphics/Header/orange-uninstall-nsis.bmp | Bin 0 -> 9740 bytes .../Header/orange-uninstall-r-nsis.bmp | Bin 0 -> 9740 bytes .../Graphics/Header/orange-uninstall-r.bmp | Bin 0 -> 9744 bytes .../Graphics/Header/orange-uninstall.bmp | Bin 0 -> 9744 bytes tools/Contrib/Graphics/Header/orange.bmp | Bin 0 -> 9744 bytes tools/Contrib/Graphics/Header/win.bmp | Bin 0 -> 9744 bytes .../Contrib/Graphics/Icons/arrow-install.ico | Bin 0 -> 4710 bytes .../Graphics/Icons/arrow-uninstall.ico | Bin 0 -> 4710 bytes .../Contrib/Graphics/Icons/arrow2-install.ico | Bin 0 -> 4710 bytes .../Graphics/Icons/arrow2-uninstall.ico | Bin 0 -> 4710 bytes tools/Contrib/Graphics/Icons/box-install.ico | Bin 0 -> 4710 bytes .../Contrib/Graphics/Icons/box-uninstall.ico | Bin 0 -> 4710 bytes .../Graphics/Icons/classic-install.ico | Bin 0 -> 1078 bytes .../Graphics/Icons/classic-uninstall.ico | Bin 0 -> 1078 bytes tools/Contrib/Graphics/Icons/llama-blue.ico | Bin 0 -> 2238 bytes tools/Contrib/Graphics/Icons/llama-grey.ico | Bin 0 -> 2238 bytes .../Icons/modern-install-blue-full.ico | Bin 0 -> 23558 bytes .../Graphics/Icons/modern-install-blue.ico | Bin 0 -> 13902 bytes .../Icons/modern-install-colorful.ico | Bin 0 -> 23558 bytes .../Graphics/Icons/modern-install-full.ico | Bin 0 -> 23558 bytes .../Contrib/Graphics/Icons/modern-install.ico | Bin 0 -> 13902 bytes .../Icons/modern-uninstall-blue-full.ico | Bin 0 -> 23558 bytes .../Graphics/Icons/modern-uninstall-blue.ico | Bin 0 -> 13902 bytes .../Icons/modern-uninstall-colorful.ico | Bin 0 -> 23558 bytes .../Graphics/Icons/modern-uninstall-full.ico | Bin 0 -> 23558 bytes .../Graphics/Icons/modern-uninstall.ico | Bin 0 -> 13902 bytes tools/Contrib/Graphics/Icons/nsis-menu.ico | Bin 0 -> 39119 bytes .../Contrib/Graphics/Icons/nsis1-install.ico | Bin 0 -> 1078 bytes .../Graphics/Icons/nsis1-uninstall.ico | Bin 0 -> 1078 bytes .../Graphics/Icons/nsis3-install-alt.ico | Bin 0 -> 13111 bytes .../Contrib/Graphics/Icons/nsis3-install.ico | Bin 0 -> 11697 bytes .../Graphics/Icons/nsis3-uninstall.ico | Bin 0 -> 12533 bytes .../Graphics/Icons/orange-install-nsis.ico | Bin 0 -> 25214 bytes .../Contrib/Graphics/Icons/orange-install.ico | Bin 0 -> 25214 bytes .../Graphics/Icons/orange-uninstall-nsis.ico | Bin 0 -> 25214 bytes .../Graphics/Icons/orange-uninstall.ico | Bin 0 -> 25214 bytes .../Contrib/Graphics/Icons/pixel-install.ico | Bin 0 -> 5390 bytes .../Graphics/Icons/pixel-uninstall.ico | Bin 0 -> 5390 bytes tools/Contrib/Graphics/Icons/win-install.ico | Bin 0 -> 1078 bytes .../Contrib/Graphics/Icons/win-uninstall.ico | Bin 0 -> 1078 bytes tools/Contrib/Graphics/Wizard/arrow.bmp | Bin 0 -> 52576 bytes tools/Contrib/Graphics/Wizard/llama.bmp | Bin 0 -> 26494 bytes tools/Contrib/Graphics/Wizard/nsis.bmp | Bin 0 -> 26494 bytes .../Graphics/Wizard/nsis3-branding.bmp | Bin 0 -> 154544 bytes tools/Contrib/Graphics/Wizard/nsis3-grey.bmp | Bin 0 -> 51832 bytes tools/Contrib/Graphics/Wizard/nsis3-metro.bmp | Bin 0 -> 154544 bytes .../Contrib/Graphics/Wizard/nsis3-vintage.bmp | Bin 0 -> 51920 bytes tools/Contrib/Graphics/Wizard/nullsoft.bmp | Bin 0 -> 26494 bytes tools/Contrib/Graphics/Wizard/orange-nsis.bmp | Bin 0 -> 52572 bytes .../Graphics/Wizard/orange-uninstall-nsis.bmp | Bin 0 -> 52572 bytes .../Graphics/Wizard/orange-uninstall.bmp | Bin 0 -> 52576 bytes tools/Contrib/Graphics/Wizard/orange.bmp | Bin 0 -> 52576 bytes tools/Contrib/Graphics/Wizard/win.bmp | Bin 0 -> 26494 bytes tools/Contrib/Language files/Afrikaans.nlf | 190 ++ tools/Contrib/Language files/Afrikaans.nsh | 121 + tools/Contrib/Language files/Albanian.nlf | 191 ++ tools/Contrib/Language files/Albanian.nsh | 129 + tools/Contrib/Language files/Arabic.nlf | 190 ++ tools/Contrib/Language files/Arabic.nsh | 130 + tools/Contrib/Language files/Armenian.nlf | 191 ++ tools/Contrib/Language files/Armenian.nsh | 130 + tools/Contrib/Language files/Asturian.nlf | 190 ++ tools/Contrib/Language files/Asturian.nsh | 129 + tools/Contrib/Language files/Basque.nlf | 190 ++ tools/Contrib/Language files/Basque.nsh | 129 + tools/Contrib/Language files/Belarusian.nlf | 190 ++ tools/Contrib/Language files/Belarusian.nsh | 129 + tools/Contrib/Language files/Bosnian.nlf | 191 ++ tools/Contrib/Language files/Bosnian.nsh | 121 + tools/Contrib/Language files/Breton.nlf | 191 ++ tools/Contrib/Language files/Breton.nsh | 121 + tools/Contrib/Language files/Bulgarian.nlf | 194 ++ tools/Contrib/Language files/Bulgarian.nsh | 124 + tools/Contrib/Language files/Catalan.nlf | 191 ++ tools/Contrib/Language files/Catalan.nsh | 121 + tools/Contrib/Language files/Corsican.nlf | 193 ++ tools/Contrib/Language files/Corsican.nsh | 133 + tools/Contrib/Language files/Croatian.nlf | 190 ++ tools/Contrib/Language files/Croatian.nsh | 121 + tools/Contrib/Language files/Czech.nlf | 191 ++ tools/Contrib/Language files/Czech.nsh | 129 + tools/Contrib/Language files/Danish.nlf | 191 ++ tools/Contrib/Language files/Danish.nsh | 129 + tools/Contrib/Language files/Dutch.nlf | 191 ++ tools/Contrib/Language files/Dutch.nsh | 129 + tools/Contrib/Language files/English.nlf | 191 ++ tools/Contrib/Language files/English.nsh | 129 + tools/Contrib/Language files/Esperanto.nlf | 191 ++ tools/Contrib/Language files/Esperanto.nsh | 129 + tools/Contrib/Language files/Estonian.nlf | 190 ++ tools/Contrib/Language files/Estonian.nsh | 121 + tools/Contrib/Language files/Farsi.nlf | 191 ++ tools/Contrib/Language files/Farsi.nsh | 121 + tools/Contrib/Language files/Finnish.nlf | 193 ++ tools/Contrib/Language files/Finnish.nsh | 124 + tools/Contrib/Language files/French.nlf | 191 ++ tools/Contrib/Language files/French.nsh | 129 + tools/Contrib/Language files/Galician.nlf | 191 ++ tools/Contrib/Language files/Galician.nsh | 121 + tools/Contrib/Language files/Georgian.nlf | 190 ++ tools/Contrib/Language files/Georgian.nsh | 121 + tools/Contrib/Language files/German.nlf | 190 ++ tools/Contrib/Language files/German.nsh | 129 + tools/Contrib/Language files/Greek.nlf | 190 ++ tools/Contrib/Language files/Greek.nsh | 121 + tools/Contrib/Language files/Hebrew.nlf | 190 ++ tools/Contrib/Language files/Hebrew.nsh | 129 + tools/Contrib/Language files/Hindi.nlf | 190 ++ tools/Contrib/Language files/Hindi.nsh | 129 + tools/Contrib/Language files/Hungarian.nlf | 191 ++ tools/Contrib/Language files/Hungarian.nsh | 122 + tools/Contrib/Language files/Icelandic.nlf | 191 ++ tools/Contrib/Language files/Icelandic.nsh | 121 + tools/Contrib/Language files/Indonesian.nlf | 194 ++ tools/Contrib/Language files/Indonesian.nsh | 129 + tools/Contrib/Language files/Irish.nlf | 191 ++ tools/Contrib/Language files/Irish.nsh | 121 + tools/Contrib/Language files/Italian.nlf | 192 ++ tools/Contrib/Language files/Italian.nsh | 131 + tools/Contrib/Language files/Japanese.nlf | 190 ++ tools/Contrib/Language files/Japanese.nsh | 129 + tools/Contrib/Language files/Korean.nlf | 191 ++ tools/Contrib/Language files/Korean.nsh | 121 + tools/Contrib/Language files/Kurdish.nlf | 190 ++ tools/Contrib/Language files/Kurdish.nsh | 122 + tools/Contrib/Language files/Latvian.nlf | 191 ++ tools/Contrib/Language files/Latvian.nsh | 122 + tools/Contrib/Language files/Lithuanian.nlf | 191 ++ tools/Contrib/Language files/Lithuanian.nsh | 121 + .../Contrib/Language files/Luxembourgish.nlf | 190 ++ .../Contrib/Language files/Luxembourgish.nsh | 121 + tools/Contrib/Language files/Macedonian.nlf | 191 ++ tools/Contrib/Language files/Macedonian.nsh | 121 + tools/Contrib/Language files/Malay.nlf | 190 ++ tools/Contrib/Language files/Malay.nsh | 121 + tools/Contrib/Language files/Mongolian.nlf | 190 ++ tools/Contrib/Language files/Mongolian.nsh | 129 + tools/Contrib/Language files/Norwegian.nlf | 190 ++ tools/Contrib/Language files/Norwegian.nsh | 129 + .../Language files/NorwegianNynorsk.nlf | 191 ++ .../Language files/NorwegianNynorsk.nsh | 129 + tools/Contrib/Language files/Pashto.nlf | 191 ++ tools/Contrib/Language files/Pashto.nsh | 121 + tools/Contrib/Language files/Polish.nlf | 195 ++ tools/Contrib/Language files/Polish.nsh | 132 + tools/Contrib/Language files/Portuguese.nlf | 191 ++ tools/Contrib/Language files/Portuguese.nsh | 129 + tools/Contrib/Language files/PortugueseBR.nlf | 191 ++ tools/Contrib/Language files/PortugueseBR.nsh | 129 + tools/Contrib/Language files/Romanian.nlf | 202 ++ tools/Contrib/Language files/Romanian.nsh | 128 + tools/Contrib/Language files/Russian.nlf | 192 ++ tools/Contrib/Language files/Russian.nsh | 129 + tools/Contrib/Language files/ScotsGaelic.nlf | 191 ++ tools/Contrib/Language files/ScotsGaelic.nsh | 129 + tools/Contrib/Language files/Serbian.nlf | 190 ++ tools/Contrib/Language files/Serbian.nsh | 121 + tools/Contrib/Language files/SerbianLatin.nlf | 190 ++ tools/Contrib/Language files/SerbianLatin.nsh | 121 + tools/Contrib/Language files/SimpChinese.nlf | 192 ++ tools/Contrib/Language files/SimpChinese.nsh | 130 + tools/Contrib/Language files/Slovak.nlf | 190 ++ tools/Contrib/Language files/Slovak.nsh | 133 + tools/Contrib/Language files/Slovenian.nlf | 190 ++ tools/Contrib/Language files/Slovenian.nsh | 130 + tools/Contrib/Language files/Spanish.nlf | 191 ++ tools/Contrib/Language files/Spanish.nsh | 130 + .../Language files/SpanishInternational.nlf | 191 ++ .../Language files/SpanishInternational.nsh | 130 + tools/Contrib/Language files/Swedish.nlf | 190 ++ tools/Contrib/Language files/Swedish.nsh | 130 + tools/Contrib/Language files/Tatar.nlf | 190 ++ tools/Contrib/Language files/Tatar.nsh | 129 + tools/Contrib/Language files/Thai.nlf | 191 ++ tools/Contrib/Language files/Thai.nsh | 121 + tools/Contrib/Language files/TradChinese.nlf | 194 ++ tools/Contrib/Language files/TradChinese.nsh | 131 + tools/Contrib/Language files/Turkish.nlf | 192 ++ tools/Contrib/Language files/Turkish.nsh | 122 + tools/Contrib/Language files/Ukrainian.nlf | 192 ++ tools/Contrib/Language files/Ukrainian.nsh | 130 + tools/Contrib/Language files/Uzbek.nlf | 190 ++ tools/Contrib/Language files/Uzbek.nsh | 121 + tools/Contrib/Language files/Vietnamese.nlf | 191 ++ tools/Contrib/Language files/Vietnamese.nsh | 129 + tools/Contrib/Language files/Welsh.nlf | 191 ++ tools/Contrib/Language files/Welsh.nsh | 121 + tools/Contrib/Modern UI 2/Deprecated.nsh | 86 + tools/Contrib/Modern UI 2/Interface.nsh | 363 +++ tools/Contrib/Modern UI 2/Localization.nsh | 198 ++ tools/Contrib/Modern UI 2/MUI2.nsh | 117 + tools/Contrib/Modern UI 2/Pages.nsh | 324 +++ .../Contrib/Modern UI 2/Pages/Components.nsh | 242 ++ tools/Contrib/Modern UI 2/Pages/Directory.nsh | 126 + tools/Contrib/Modern UI 2/Pages/Finish.nsh | 510 ++++ .../Modern UI 2/Pages/InstallFiles.nsh | 149 ++ tools/Contrib/Modern UI 2/Pages/License.nsh | 143 ++ tools/Contrib/Modern UI 2/Pages/StartMenu.nsh | 236 ++ .../Modern UI 2/Pages/UninstallConfirm.nsh | 100 + tools/Contrib/Modern UI 2/Pages/Welcome.nsh | 181 ++ tools/Contrib/Modern UI/System.nsh | 2255 +++++++++++++++++ tools/Contrib/Modern UI/ioSpecial.ini | 19 + tools/Contrib/UIs/default.exe | Bin 0 -> 6144 bytes tools/Contrib/UIs/modern.exe | Bin 0 -> 6656 bytes tools/Contrib/UIs/modern_headerbmp.exe | Bin 0 -> 4608 bytes tools/Contrib/UIs/modern_headerbmpr.exe | Bin 0 -> 4608 bytes tools/Contrib/UIs/modern_nodesc.exe | Bin 0 -> 4096 bytes tools/Contrib/UIs/modern_smalldesc.exe | Bin 0 -> 4096 bytes tools/Contrib/UIs/sdbarker_tiny.exe | Bin 0 -> 6656 bytes tools/Contrib/zip2exe/Base.nsh | 87 + tools/Contrib/zip2exe/Classic.nsh | 4 + tools/Contrib/zip2exe/Modern.nsh | 8 + tools/Docs/AdvSplash/advsplash.txt | 51 + tools/Docs/Banner/Readme.txt | 47 + tools/Docs/BgImage/BgImage.txt | 92 + tools/Docs/Dialer/Dialer.txt | 121 + tools/Docs/InstallOptions/Changelog.txt | 144 ++ tools/Docs/InstallOptions/Readme.html | 909 +++++++ tools/Docs/Math/Math.txt | 197 ++ tools/Docs/Modern UI 2/License.txt | 10 + tools/Docs/Modern UI 2/Readme.html | 1162 +++++++++ tools/Docs/Modern UI 2/images/closed.gif | Bin 0 -> 203 bytes tools/Docs/Modern UI 2/images/header.gif | Bin 0 -> 6023 bytes tools/Docs/Modern UI 2/images/open.gif | Bin 0 -> 138 bytes tools/Docs/Modern UI 2/images/screen1.png | Bin 0 -> 15647 bytes tools/Docs/Modern UI 2/images/screen2.png | Bin 0 -> 18437 bytes tools/Docs/Modern UI/Changelog.txt | 268 ++ tools/Docs/Modern UI/License.txt | 10 + tools/Docs/Modern UI/Readme.html | 1160 +++++++++ tools/Docs/Modern UI/images/closed.gif | Bin 0 -> 203 bytes tools/Docs/Modern UI/images/header.gif | Bin 0 -> 6023 bytes tools/Docs/Modern UI/images/open.gif | Bin 0 -> 138 bytes tools/Docs/Modern UI/images/screen1.png | Bin 0 -> 15647 bytes tools/Docs/Modern UI/images/screen2.png | Bin 0 -> 18437 bytes tools/Docs/MultiUser/Readme.html | 391 +++ tools/Docs/NSISdl/License.txt | 18 + tools/Docs/NSISdl/ReadMe.txt | 92 + tools/Docs/Splash/splash.txt | 41 + tools/Docs/StartMenu/Readme.txt | 47 + tools/Docs/StrFunc/StrFunc.txt | 705 ++++++ tools/Docs/System/System.html | 898 +++++++ tools/Docs/System/WhatsNew.txt | 46 + tools/Docs/VPatch/Readme.html | 310 +++ tools/Docs/makensisw/License.txt | 17 + tools/Docs/makensisw/Readme.txt | 245 ++ tools/Docs/nsDialogs/Readme.html | 878 +++++++ tools/Docs/nsExec/nsExec.txt | 55 + tools/Examples/AdvSplash/Example.nsi | 35 + tools/Examples/AppGen.nsi | 78 + tools/Examples/Banner/Example.nsi | 38 + tools/Examples/BgImage/Example.nsi | 101 + tools/Examples/FileFunc.ini | 91 + tools/Examples/FileFunc.nsi | 732 ++++++ tools/Examples/FileFuncTest.nsi | 572 +++++ tools/Examples/InstallOptions/test.ini | 76 + tools/Examples/InstallOptions/test.nsi | 84 + tools/Examples/InstallOptions/testimgs.ini | 65 + tools/Examples/InstallOptions/testimgs.nsi | 59 + tools/Examples/InstallOptions/testlink.ini | 44 + tools/Examples/InstallOptions/testlink.nsi | 58 + tools/Examples/InstallOptions/testnotify.ini | 105 + tools/Examples/InstallOptions/testnotify.nsi | 133 + tools/Examples/Library.nsi | 130 + tools/Examples/LogicLib.nsi | 619 +++++ tools/Examples/Math/math.nsi | 33 + tools/Examples/Math/mathtest.ini | 101 + tools/Examples/Math/mathtest.nsi | 171 ++ tools/Examples/Math/mathtest.txt | 7 + tools/Examples/Memento.nsi | 79 + tools/Examples/Modern UI/Basic.nsi | 89 + tools/Examples/Modern UI/HeaderBitmap.nsi | 91 + tools/Examples/Modern UI/MultiLanguage.nsi | 204 ++ tools/Examples/Modern UI/StartMenu.nsi | 115 + tools/Examples/Modern UI/WelcomeFinish.nsi | 93 + tools/Examples/MultiUser.nsi | 58 + tools/Examples/NSISMenu.nsi | 358 +++ tools/Examples/Plugin/exdll-vs2008.sln | 20 + tools/Examples/Plugin/exdll-vs2008.vcproj | 266 ++ tools/Examples/Plugin/exdll.c | 42 + tools/Examples/Plugin/exdll.dpr | 118 + tools/Examples/Plugin/exdll.dsp | 112 + tools/Examples/Plugin/exdll.dsw | 29 + tools/Examples/Plugin/exdll_with_unit.dpr | 100 + tools/Examples/Plugin/extdll.inc | 145 ++ tools/Examples/Plugin/nsis.pas | 236 ++ tools/Examples/Plugin/nsis/api.h | 85 + tools/Examples/Plugin/nsis/nsis_tchar.h | 229 ++ .../Plugin/nsis/pluginapi-x86-ansi.lib | Bin 0 -> 7004 bytes .../Plugin/nsis/pluginapi-x86-unicode.lib | Bin 0 -> 7012 bytes tools/Examples/Plugin/nsis/pluginapi.h | 108 + tools/Examples/Splash/Example.nsi | 21 + tools/Examples/StartMenu/Example.nsi | 50 + tools/Examples/StrFunc.nsi | 562 ++++ tools/Examples/System/Resource.dll | Bin 0 -> 31744 bytes tools/Examples/System/SysFunc.nsh | 395 +++ tools/Examples/System/System.nsh | 413 +++ tools/Examples/System/System.nsi | 161 ++ tools/Examples/TextFunc.ini | 130 + tools/Examples/TextFunc.nsi | 834 ++++++ tools/Examples/TextFuncTest.nsi | 414 +++ tools/Examples/UserInfo/UserInfo.nsi | 45 + tools/Examples/VPatch/example.nsi | 62 + tools/Examples/VPatch/newfile.txt | 6 + tools/Examples/VPatch/oldfile.txt | 6 + tools/Examples/VPatch/patch.pat | Bin 0 -> 99 bytes tools/Examples/VersionInfo.nsi | 29 + tools/Examples/WordFunc.ini | 107 + tools/Examples/WordFunc.nsi | 535 ++++ tools/Examples/WordFuncTest.nsi | 610 +++++ tools/Examples/bigtest.nsi | 330 +++ tools/Examples/example1.nsi | 45 + tools/Examples/example2.nsi | 98 + tools/Examples/gfx.nsi | 123 + tools/Examples/install-per-user.nsi | 181 ++ tools/Examples/install-shared.nsi | 95 + tools/Examples/languages.nsi | 192 ++ tools/Examples/makensis.nsi | 1093 ++++++++ tools/Examples/nsDialogs/InstallOptions.nsi | 47 + tools/Examples/nsDialogs/example.nsi | 299 +++ tools/Examples/nsDialogs/timer.nsi | 107 + tools/Examples/nsDialogs/welcome.nsi | 214 ++ tools/Examples/nsExec/test.nsi | 31 + tools/Examples/one-section.nsi | 80 + tools/Examples/primes.nsi | 70 + tools/Examples/rtest.nsi | 93 + tools/Examples/silent.nsi | 63 + tools/Examples/unicode.nsi | 47 + tools/Examples/waplugin.nsi | 205 ++ tools/Include/Colors.nsh | 75 + tools/Include/FileFunc.nsh | 2012 +++++++++++++++ tools/Include/InstallOptions.nsh | 244 ++ tools/Include/Integration.nsh | 44 + tools/Include/LangFile.nsh | 191 ++ tools/Include/Library.nsh | 885 +++++++ tools/Include/LogicLib.nsh | 899 +++++++ tools/Include/MUI.nsh | 1 + tools/Include/MUI2.nsh | 1 + tools/Include/Memento.nsh | 553 ++++ tools/Include/MultiUser.nsh | 505 ++++ tools/Include/Sections.nsh | 310 +++ tools/Include/StrFunc.nsh | 1627 ++++++++++++ tools/Include/TextFunc.nsh | 1211 +++++++++ tools/Include/UpgradeDLL.nsh | 207 ++ tools/Include/Util.nsh | 184 ++ tools/Include/VB6RunTime.nsh | 90 + tools/Include/VPatchLib.nsh | 47 + tools/Include/Win/COM.nsh | 392 +++ tools/Include/Win/Propkey.nsh | 216 ++ tools/Include/Win/RestartManager.nsh | 117 + tools/Include/Win/WinDef.nsh | 67 + tools/Include/Win/WinError.nsh | 155 ++ tools/Include/Win/WinNT.nsh | 224 ++ tools/Include/Win/WinUser.nsh | 199 ++ tools/Include/WinCore.nsh | 263 ++ tools/Include/WinMessages.nsh | 890 +++++++ tools/Include/WinVer.nsh | 703 +++++ tools/Include/WordFunc.nsh | 1800 +++++++++++++ tools/Include/nsDialogs.nsh | 1249 +++++++++ tools/Include/x64.nsh | 120 + tools/NSIS.exe | Bin 0 -> 91312 bytes tools/Plugins/x86-ansi/AdvSplash.dll | Bin 0 -> 5632 bytes tools/Plugins/x86-ansi/Banner.dll | Bin 0 -> 4096 bytes tools/Plugins/x86-ansi/BgImage.dll | Bin 0 -> 7680 bytes tools/Plugins/x86-ansi/Dialer.dll | Bin 0 -> 3584 bytes tools/Plugins/x86-ansi/InstallOptions.dll | Bin 0 -> 14848 bytes tools/Plugins/x86-ansi/LangDLL.dll | Bin 0 -> 5632 bytes tools/Plugins/x86-ansi/Math.dll | Bin 0 -> 67584 bytes tools/Plugins/x86-ansi/NSISdl.dll | Bin 0 -> 14848 bytes tools/Plugins/x86-ansi/Splash.dll | Bin 0 -> 4096 bytes tools/Plugins/x86-ansi/StartMenu.dll | Bin 0 -> 7680 bytes tools/Plugins/x86-ansi/System.dll | Bin 0 -> 12288 bytes tools/Plugins/x86-ansi/TypeLib.dll | Bin 0 -> 3584 bytes tools/Plugins/x86-ansi/UserInfo.dll | Bin 0 -> 4096 bytes tools/Plugins/x86-ansi/VPatch.dll | Bin 0 -> 8192 bytes tools/Plugins/x86-ansi/nsDialogs.dll | Bin 0 -> 9728 bytes tools/Plugins/x86-ansi/nsExec.dll | Bin 0 -> 6656 bytes tools/Plugins/x86-unicode/AdvSplash.dll | Bin 0 -> 6144 bytes tools/Plugins/x86-unicode/Banner.dll | Bin 0 -> 4096 bytes tools/Plugins/x86-unicode/BgImage.dll | Bin 0 -> 7680 bytes tools/Plugins/x86-unicode/Dialer.dll | Bin 0 -> 3584 bytes tools/Plugins/x86-unicode/InstallOptions.dll | Bin 0 -> 15872 bytes tools/Plugins/x86-unicode/LangDLL.dll | Bin 0 -> 5632 bytes tools/Plugins/x86-unicode/Math.dll | Bin 0 -> 69120 bytes tools/Plugins/x86-unicode/NSISdl.dll | Bin 0 -> 15360 bytes tools/Plugins/x86-unicode/Splash.dll | Bin 0 -> 4096 bytes tools/Plugins/x86-unicode/StartMenu.dll | Bin 0 -> 7680 bytes tools/Plugins/x86-unicode/System.dll | Bin 0 -> 12288 bytes tools/Plugins/x86-unicode/TypeLib.dll | Bin 0 -> 3584 bytes tools/Plugins/x86-unicode/UserInfo.dll | Bin 0 -> 4096 bytes tools/Plugins/x86-unicode/VPatch.dll | Bin 0 -> 8704 bytes tools/Plugins/x86-unicode/nsDialogs.dll | Bin 0 -> 9728 bytes tools/Plugins/x86-unicode/nsExec.dll | Bin 0 -> 7168 bytes tools/Stubs/bzip2-x86-ansi | Bin 0 -> 37376 bytes tools/Stubs/bzip2-x86-unicode | Bin 0 -> 38912 bytes tools/Stubs/bzip2_solid-x86-ansi | Bin 0 -> 38400 bytes tools/Stubs/bzip2_solid-x86-unicode | Bin 0 -> 39424 bytes tools/Stubs/lzma-x86-ansi | Bin 0 -> 37376 bytes tools/Stubs/lzma-x86-unicode | Bin 0 -> 38400 bytes tools/Stubs/lzma_solid-x86-ansi | Bin 0 -> 37888 bytes tools/Stubs/lzma_solid-x86-unicode | Bin 0 -> 38912 bytes tools/Stubs/uninst | Bin 0 -> 766 bytes tools/Stubs/zlib-x86-ansi | Bin 0 -> 38400 bytes tools/Stubs/zlib-x86-unicode | Bin 0 -> 39936 bytes tools/Stubs/zlib_solid-x86-ansi | Bin 0 -> 38912 bytes tools/Stubs/zlib_solid-x86-unicode | Bin 0 -> 40960 bytes tools/makensis.exe | Bin 0 -> 2560 bytes tools/makensisw.exe | Bin 0 -> 1138688 bytes tools/nsisconf.nsh | 62 + 449 files changed, 63561 insertions(+), 2 deletions(-) create mode 100644 T7x/compile.bat rename T7x/{old => ver}/template.nsi (100%) rename T7x/{old => ver}/test.nsi (100%) rename T7x/{old => ver}/test2.nsi (100%) rename T7x/{old => ver}/test3.nsi (100%) rename T7x/{old => ver}/test4.nsi (100%) rename T7x/{old => ver}/test5.nsi (100%) rename T7x/{old => ver}/test6.nsi (100%) create mode 100644 tools/Bin/GenPat.exe create mode 100644 tools/Bin/MakeLangId.exe create mode 100644 tools/Bin/RegTool-x86.bin create mode 100644 tools/Bin/makensis.exe create mode 100644 tools/Bin/zip2exe.exe create mode 100644 tools/Bin/zlib1.dll create mode 100644 tools/Contrib/Graphics/Checks/big.bmp create mode 100644 tools/Contrib/Graphics/Checks/classic-cross.bmp create mode 100644 tools/Contrib/Graphics/Checks/classic.bmp create mode 100644 tools/Contrib/Graphics/Checks/colorful.bmp create mode 100644 tools/Contrib/Graphics/Checks/grey-cross.bmp create mode 100644 tools/Contrib/Graphics/Checks/grey.bmp create mode 100644 tools/Contrib/Graphics/Checks/modern.bmp create mode 100644 tools/Contrib/Graphics/Checks/red-round.bmp create mode 100644 tools/Contrib/Graphics/Checks/red.bmp create mode 100644 tools/Contrib/Graphics/Checks/simple-round.bmp create mode 100644 tools/Contrib/Graphics/Checks/simple-round2.bmp create mode 100644 tools/Contrib/Graphics/Checks/simple.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis-r.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-branding-r.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-branding.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-grey-right.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-grey.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-metro-right.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-metro.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-vintage-right.bmp create mode 100644 tools/Contrib/Graphics/Header/nsis3-vintage.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-nsis.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-r-nsis.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-r.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-uninstall-nsis.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-uninstall-r.bmp create mode 100644 tools/Contrib/Graphics/Header/orange-uninstall.bmp create mode 100644 tools/Contrib/Graphics/Header/orange.bmp create mode 100644 tools/Contrib/Graphics/Header/win.bmp create mode 100644 tools/Contrib/Graphics/Icons/arrow-install.ico create mode 100644 tools/Contrib/Graphics/Icons/arrow-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/arrow2-install.ico create mode 100644 tools/Contrib/Graphics/Icons/arrow2-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/box-install.ico create mode 100644 tools/Contrib/Graphics/Icons/box-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/classic-install.ico create mode 100644 tools/Contrib/Graphics/Icons/classic-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/llama-blue.ico create mode 100644 tools/Contrib/Graphics/Icons/llama-grey.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-install-blue-full.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-install-blue.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-install-colorful.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-install-full.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-install.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-uninstall-blue.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-uninstall-colorful.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-uninstall-full.ico create mode 100644 tools/Contrib/Graphics/Icons/modern-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/nsis-menu.ico create mode 100644 tools/Contrib/Graphics/Icons/nsis1-install.ico create mode 100644 tools/Contrib/Graphics/Icons/nsis1-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/nsis3-install-alt.ico create mode 100644 tools/Contrib/Graphics/Icons/nsis3-install.ico create mode 100644 tools/Contrib/Graphics/Icons/nsis3-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/orange-install-nsis.ico create mode 100644 tools/Contrib/Graphics/Icons/orange-install.ico create mode 100644 tools/Contrib/Graphics/Icons/orange-uninstall-nsis.ico create mode 100644 tools/Contrib/Graphics/Icons/orange-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/pixel-install.ico create mode 100644 tools/Contrib/Graphics/Icons/pixel-uninstall.ico create mode 100644 tools/Contrib/Graphics/Icons/win-install.ico create mode 100644 tools/Contrib/Graphics/Icons/win-uninstall.ico create mode 100644 tools/Contrib/Graphics/Wizard/arrow.bmp create mode 100644 tools/Contrib/Graphics/Wizard/llama.bmp create mode 100644 tools/Contrib/Graphics/Wizard/nsis.bmp create mode 100644 tools/Contrib/Graphics/Wizard/nsis3-branding.bmp create mode 100644 tools/Contrib/Graphics/Wizard/nsis3-grey.bmp create mode 100644 tools/Contrib/Graphics/Wizard/nsis3-metro.bmp create mode 100644 tools/Contrib/Graphics/Wizard/nsis3-vintage.bmp create mode 100644 tools/Contrib/Graphics/Wizard/nullsoft.bmp create mode 100644 tools/Contrib/Graphics/Wizard/orange-nsis.bmp create mode 100644 tools/Contrib/Graphics/Wizard/orange-uninstall-nsis.bmp create mode 100644 tools/Contrib/Graphics/Wizard/orange-uninstall.bmp create mode 100644 tools/Contrib/Graphics/Wizard/orange.bmp create mode 100644 tools/Contrib/Graphics/Wizard/win.bmp create mode 100644 tools/Contrib/Language files/Afrikaans.nlf create mode 100644 tools/Contrib/Language files/Afrikaans.nsh create mode 100644 tools/Contrib/Language files/Albanian.nlf create mode 100644 tools/Contrib/Language files/Albanian.nsh create mode 100644 tools/Contrib/Language files/Arabic.nlf create mode 100644 tools/Contrib/Language files/Arabic.nsh create mode 100644 tools/Contrib/Language files/Armenian.nlf create mode 100644 tools/Contrib/Language files/Armenian.nsh create mode 100644 tools/Contrib/Language files/Asturian.nlf create mode 100644 tools/Contrib/Language files/Asturian.nsh create mode 100644 tools/Contrib/Language files/Basque.nlf create mode 100644 tools/Contrib/Language files/Basque.nsh create mode 100644 tools/Contrib/Language files/Belarusian.nlf create mode 100644 tools/Contrib/Language files/Belarusian.nsh create mode 100644 tools/Contrib/Language files/Bosnian.nlf create mode 100644 tools/Contrib/Language files/Bosnian.nsh create mode 100644 tools/Contrib/Language files/Breton.nlf create mode 100644 tools/Contrib/Language files/Breton.nsh create mode 100644 tools/Contrib/Language files/Bulgarian.nlf create mode 100644 tools/Contrib/Language files/Bulgarian.nsh create mode 100644 tools/Contrib/Language files/Catalan.nlf create mode 100644 tools/Contrib/Language files/Catalan.nsh create mode 100644 tools/Contrib/Language files/Corsican.nlf create mode 100644 tools/Contrib/Language files/Corsican.nsh create mode 100644 tools/Contrib/Language files/Croatian.nlf create mode 100644 tools/Contrib/Language files/Croatian.nsh create mode 100644 tools/Contrib/Language files/Czech.nlf create mode 100644 tools/Contrib/Language files/Czech.nsh create mode 100644 tools/Contrib/Language files/Danish.nlf create mode 100644 tools/Contrib/Language files/Danish.nsh create mode 100644 tools/Contrib/Language files/Dutch.nlf create mode 100644 tools/Contrib/Language files/Dutch.nsh create mode 100644 tools/Contrib/Language files/English.nlf create mode 100644 tools/Contrib/Language files/English.nsh create mode 100644 tools/Contrib/Language files/Esperanto.nlf create mode 100644 tools/Contrib/Language files/Esperanto.nsh create mode 100644 tools/Contrib/Language files/Estonian.nlf create mode 100644 tools/Contrib/Language files/Estonian.nsh create mode 100644 tools/Contrib/Language files/Farsi.nlf create mode 100644 tools/Contrib/Language files/Farsi.nsh create mode 100644 tools/Contrib/Language files/Finnish.nlf create mode 100644 tools/Contrib/Language files/Finnish.nsh create mode 100644 tools/Contrib/Language files/French.nlf create mode 100644 tools/Contrib/Language files/French.nsh create mode 100644 tools/Contrib/Language files/Galician.nlf create mode 100644 tools/Contrib/Language files/Galician.nsh create mode 100644 tools/Contrib/Language files/Georgian.nlf create mode 100644 tools/Contrib/Language files/Georgian.nsh create mode 100644 tools/Contrib/Language files/German.nlf create mode 100644 tools/Contrib/Language files/German.nsh create mode 100644 tools/Contrib/Language files/Greek.nlf create mode 100644 tools/Contrib/Language files/Greek.nsh create mode 100644 tools/Contrib/Language files/Hebrew.nlf create mode 100644 tools/Contrib/Language files/Hebrew.nsh create mode 100644 tools/Contrib/Language files/Hindi.nlf create mode 100644 tools/Contrib/Language files/Hindi.nsh create mode 100644 tools/Contrib/Language files/Hungarian.nlf create mode 100644 tools/Contrib/Language files/Hungarian.nsh create mode 100644 tools/Contrib/Language files/Icelandic.nlf create mode 100644 tools/Contrib/Language files/Icelandic.nsh create mode 100644 tools/Contrib/Language files/Indonesian.nlf create mode 100644 tools/Contrib/Language files/Indonesian.nsh create mode 100644 tools/Contrib/Language files/Irish.nlf create mode 100644 tools/Contrib/Language files/Irish.nsh create mode 100644 tools/Contrib/Language files/Italian.nlf create mode 100644 tools/Contrib/Language files/Italian.nsh create mode 100644 tools/Contrib/Language files/Japanese.nlf create mode 100644 tools/Contrib/Language files/Japanese.nsh create mode 100644 tools/Contrib/Language files/Korean.nlf create mode 100644 tools/Contrib/Language files/Korean.nsh create mode 100644 tools/Contrib/Language files/Kurdish.nlf create mode 100644 tools/Contrib/Language files/Kurdish.nsh create mode 100644 tools/Contrib/Language files/Latvian.nlf create mode 100644 tools/Contrib/Language files/Latvian.nsh create mode 100644 tools/Contrib/Language files/Lithuanian.nlf create mode 100644 tools/Contrib/Language files/Lithuanian.nsh create mode 100644 tools/Contrib/Language files/Luxembourgish.nlf create mode 100644 tools/Contrib/Language files/Luxembourgish.nsh create mode 100644 tools/Contrib/Language files/Macedonian.nlf create mode 100644 tools/Contrib/Language files/Macedonian.nsh create mode 100644 tools/Contrib/Language files/Malay.nlf create mode 100644 tools/Contrib/Language files/Malay.nsh create mode 100644 tools/Contrib/Language files/Mongolian.nlf create mode 100644 tools/Contrib/Language files/Mongolian.nsh create mode 100644 tools/Contrib/Language files/Norwegian.nlf create mode 100644 tools/Contrib/Language files/Norwegian.nsh create mode 100644 tools/Contrib/Language files/NorwegianNynorsk.nlf create mode 100644 tools/Contrib/Language files/NorwegianNynorsk.nsh create mode 100644 tools/Contrib/Language files/Pashto.nlf create mode 100644 tools/Contrib/Language files/Pashto.nsh create mode 100644 tools/Contrib/Language files/Polish.nlf create mode 100644 tools/Contrib/Language files/Polish.nsh create mode 100644 tools/Contrib/Language files/Portuguese.nlf create mode 100644 tools/Contrib/Language files/Portuguese.nsh create mode 100644 tools/Contrib/Language files/PortugueseBR.nlf create mode 100644 tools/Contrib/Language files/PortugueseBR.nsh create mode 100644 tools/Contrib/Language files/Romanian.nlf create mode 100644 tools/Contrib/Language files/Romanian.nsh create mode 100644 tools/Contrib/Language files/Russian.nlf create mode 100644 tools/Contrib/Language files/Russian.nsh create mode 100644 tools/Contrib/Language files/ScotsGaelic.nlf create mode 100644 tools/Contrib/Language files/ScotsGaelic.nsh create mode 100644 tools/Contrib/Language files/Serbian.nlf create mode 100644 tools/Contrib/Language files/Serbian.nsh create mode 100644 tools/Contrib/Language files/SerbianLatin.nlf create mode 100644 tools/Contrib/Language files/SerbianLatin.nsh create mode 100644 tools/Contrib/Language files/SimpChinese.nlf create mode 100644 tools/Contrib/Language files/SimpChinese.nsh create mode 100644 tools/Contrib/Language files/Slovak.nlf create mode 100644 tools/Contrib/Language files/Slovak.nsh create mode 100644 tools/Contrib/Language files/Slovenian.nlf create mode 100644 tools/Contrib/Language files/Slovenian.nsh create mode 100644 tools/Contrib/Language files/Spanish.nlf create mode 100644 tools/Contrib/Language files/Spanish.nsh create mode 100644 tools/Contrib/Language files/SpanishInternational.nlf create mode 100644 tools/Contrib/Language files/SpanishInternational.nsh create mode 100644 tools/Contrib/Language files/Swedish.nlf create mode 100644 tools/Contrib/Language files/Swedish.nsh create mode 100644 tools/Contrib/Language files/Tatar.nlf create mode 100644 tools/Contrib/Language files/Tatar.nsh create mode 100644 tools/Contrib/Language files/Thai.nlf create mode 100644 tools/Contrib/Language files/Thai.nsh create mode 100644 tools/Contrib/Language files/TradChinese.nlf create mode 100644 tools/Contrib/Language files/TradChinese.nsh create mode 100644 tools/Contrib/Language files/Turkish.nlf create mode 100644 tools/Contrib/Language files/Turkish.nsh create mode 100644 tools/Contrib/Language files/Ukrainian.nlf create mode 100644 tools/Contrib/Language files/Ukrainian.nsh create mode 100644 tools/Contrib/Language files/Uzbek.nlf create mode 100644 tools/Contrib/Language files/Uzbek.nsh create mode 100644 tools/Contrib/Language files/Vietnamese.nlf create mode 100644 tools/Contrib/Language files/Vietnamese.nsh create mode 100644 tools/Contrib/Language files/Welsh.nlf create mode 100644 tools/Contrib/Language files/Welsh.nsh create mode 100644 tools/Contrib/Modern UI 2/Deprecated.nsh create mode 100644 tools/Contrib/Modern UI 2/Interface.nsh create mode 100644 tools/Contrib/Modern UI 2/Localization.nsh create mode 100644 tools/Contrib/Modern UI 2/MUI2.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/Components.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/Directory.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/Finish.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/InstallFiles.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/License.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/StartMenu.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh create mode 100644 tools/Contrib/Modern UI 2/Pages/Welcome.nsh create mode 100644 tools/Contrib/Modern UI/System.nsh create mode 100644 tools/Contrib/Modern UI/ioSpecial.ini create mode 100644 tools/Contrib/UIs/default.exe create mode 100644 tools/Contrib/UIs/modern.exe create mode 100644 tools/Contrib/UIs/modern_headerbmp.exe create mode 100644 tools/Contrib/UIs/modern_headerbmpr.exe create mode 100644 tools/Contrib/UIs/modern_nodesc.exe create mode 100644 tools/Contrib/UIs/modern_smalldesc.exe create mode 100644 tools/Contrib/UIs/sdbarker_tiny.exe create mode 100644 tools/Contrib/zip2exe/Base.nsh create mode 100644 tools/Contrib/zip2exe/Classic.nsh create mode 100644 tools/Contrib/zip2exe/Modern.nsh create mode 100644 tools/Docs/AdvSplash/advsplash.txt create mode 100644 tools/Docs/Banner/Readme.txt create mode 100644 tools/Docs/BgImage/BgImage.txt create mode 100644 tools/Docs/Dialer/Dialer.txt create mode 100644 tools/Docs/InstallOptions/Changelog.txt create mode 100644 tools/Docs/InstallOptions/Readme.html create mode 100644 tools/Docs/Math/Math.txt create mode 100644 tools/Docs/Modern UI 2/License.txt create mode 100644 tools/Docs/Modern UI 2/Readme.html create mode 100644 tools/Docs/Modern UI 2/images/closed.gif create mode 100644 tools/Docs/Modern UI 2/images/header.gif create mode 100644 tools/Docs/Modern UI 2/images/open.gif create mode 100644 tools/Docs/Modern UI 2/images/screen1.png create mode 100644 tools/Docs/Modern UI 2/images/screen2.png create mode 100644 tools/Docs/Modern UI/Changelog.txt create mode 100644 tools/Docs/Modern UI/License.txt create mode 100644 tools/Docs/Modern UI/Readme.html create mode 100644 tools/Docs/Modern UI/images/closed.gif create mode 100644 tools/Docs/Modern UI/images/header.gif create mode 100644 tools/Docs/Modern UI/images/open.gif create mode 100644 tools/Docs/Modern UI/images/screen1.png create mode 100644 tools/Docs/Modern UI/images/screen2.png create mode 100644 tools/Docs/MultiUser/Readme.html create mode 100644 tools/Docs/NSISdl/License.txt create mode 100644 tools/Docs/NSISdl/ReadMe.txt create mode 100644 tools/Docs/Splash/splash.txt create mode 100644 tools/Docs/StartMenu/Readme.txt create mode 100644 tools/Docs/StrFunc/StrFunc.txt create mode 100644 tools/Docs/System/System.html create mode 100644 tools/Docs/System/WhatsNew.txt create mode 100644 tools/Docs/VPatch/Readme.html create mode 100644 tools/Docs/makensisw/License.txt create mode 100644 tools/Docs/makensisw/Readme.txt create mode 100644 tools/Docs/nsDialogs/Readme.html create mode 100644 tools/Docs/nsExec/nsExec.txt create mode 100644 tools/Examples/AdvSplash/Example.nsi create mode 100644 tools/Examples/AppGen.nsi create mode 100644 tools/Examples/Banner/Example.nsi create mode 100644 tools/Examples/BgImage/Example.nsi create mode 100644 tools/Examples/FileFunc.ini create mode 100644 tools/Examples/FileFunc.nsi create mode 100644 tools/Examples/FileFuncTest.nsi create mode 100644 tools/Examples/InstallOptions/test.ini create mode 100644 tools/Examples/InstallOptions/test.nsi create mode 100644 tools/Examples/InstallOptions/testimgs.ini create mode 100644 tools/Examples/InstallOptions/testimgs.nsi create mode 100644 tools/Examples/InstallOptions/testlink.ini create mode 100644 tools/Examples/InstallOptions/testlink.nsi create mode 100644 tools/Examples/InstallOptions/testnotify.ini create mode 100644 tools/Examples/InstallOptions/testnotify.nsi create mode 100644 tools/Examples/Library.nsi create mode 100644 tools/Examples/LogicLib.nsi create mode 100644 tools/Examples/Math/math.nsi create mode 100644 tools/Examples/Math/mathtest.ini create mode 100644 tools/Examples/Math/mathtest.nsi create mode 100644 tools/Examples/Math/mathtest.txt create mode 100644 tools/Examples/Memento.nsi create mode 100644 tools/Examples/Modern UI/Basic.nsi create mode 100644 tools/Examples/Modern UI/HeaderBitmap.nsi create mode 100644 tools/Examples/Modern UI/MultiLanguage.nsi create mode 100644 tools/Examples/Modern UI/StartMenu.nsi create mode 100644 tools/Examples/Modern UI/WelcomeFinish.nsi create mode 100644 tools/Examples/MultiUser.nsi create mode 100644 tools/Examples/NSISMenu.nsi create mode 100644 tools/Examples/Plugin/exdll-vs2008.sln create mode 100644 tools/Examples/Plugin/exdll-vs2008.vcproj create mode 100644 tools/Examples/Plugin/exdll.c create mode 100644 tools/Examples/Plugin/exdll.dpr create mode 100644 tools/Examples/Plugin/exdll.dsp create mode 100644 tools/Examples/Plugin/exdll.dsw create mode 100644 tools/Examples/Plugin/exdll_with_unit.dpr create mode 100644 tools/Examples/Plugin/extdll.inc create mode 100644 tools/Examples/Plugin/nsis.pas create mode 100644 tools/Examples/Plugin/nsis/api.h create mode 100644 tools/Examples/Plugin/nsis/nsis_tchar.h create mode 100644 tools/Examples/Plugin/nsis/pluginapi-x86-ansi.lib create mode 100644 tools/Examples/Plugin/nsis/pluginapi-x86-unicode.lib create mode 100644 tools/Examples/Plugin/nsis/pluginapi.h create mode 100644 tools/Examples/Splash/Example.nsi create mode 100644 tools/Examples/StartMenu/Example.nsi create mode 100644 tools/Examples/StrFunc.nsi create mode 100644 tools/Examples/System/Resource.dll create mode 100644 tools/Examples/System/SysFunc.nsh create mode 100644 tools/Examples/System/System.nsh create mode 100644 tools/Examples/System/System.nsi create mode 100644 tools/Examples/TextFunc.ini create mode 100644 tools/Examples/TextFunc.nsi create mode 100644 tools/Examples/TextFuncTest.nsi create mode 100644 tools/Examples/UserInfo/UserInfo.nsi create mode 100644 tools/Examples/VPatch/example.nsi create mode 100644 tools/Examples/VPatch/newfile.txt create mode 100644 tools/Examples/VPatch/oldfile.txt create mode 100644 tools/Examples/VPatch/patch.pat create mode 100644 tools/Examples/VersionInfo.nsi create mode 100644 tools/Examples/WordFunc.ini create mode 100644 tools/Examples/WordFunc.nsi create mode 100644 tools/Examples/WordFuncTest.nsi create mode 100644 tools/Examples/bigtest.nsi create mode 100644 tools/Examples/example1.nsi create mode 100644 tools/Examples/example2.nsi create mode 100644 tools/Examples/gfx.nsi create mode 100644 tools/Examples/install-per-user.nsi create mode 100644 tools/Examples/install-shared.nsi create mode 100644 tools/Examples/languages.nsi create mode 100644 tools/Examples/makensis.nsi create mode 100644 tools/Examples/nsDialogs/InstallOptions.nsi create mode 100644 tools/Examples/nsDialogs/example.nsi create mode 100644 tools/Examples/nsDialogs/timer.nsi create mode 100644 tools/Examples/nsDialogs/welcome.nsi create mode 100644 tools/Examples/nsExec/test.nsi create mode 100644 tools/Examples/one-section.nsi create mode 100644 tools/Examples/primes.nsi create mode 100644 tools/Examples/rtest.nsi create mode 100644 tools/Examples/silent.nsi create mode 100644 tools/Examples/unicode.nsi create mode 100644 tools/Examples/waplugin.nsi create mode 100644 tools/Include/Colors.nsh create mode 100644 tools/Include/FileFunc.nsh create mode 100644 tools/Include/InstallOptions.nsh create mode 100644 tools/Include/Integration.nsh create mode 100644 tools/Include/LangFile.nsh create mode 100644 tools/Include/Library.nsh create mode 100644 tools/Include/LogicLib.nsh create mode 100644 tools/Include/MUI.nsh create mode 100644 tools/Include/MUI2.nsh create mode 100644 tools/Include/Memento.nsh create mode 100644 tools/Include/MultiUser.nsh create mode 100644 tools/Include/Sections.nsh create mode 100644 tools/Include/StrFunc.nsh create mode 100644 tools/Include/TextFunc.nsh create mode 100644 tools/Include/UpgradeDLL.nsh create mode 100644 tools/Include/Util.nsh create mode 100644 tools/Include/VB6RunTime.nsh create mode 100644 tools/Include/VPatchLib.nsh create mode 100644 tools/Include/Win/COM.nsh create mode 100644 tools/Include/Win/Propkey.nsh create mode 100644 tools/Include/Win/RestartManager.nsh create mode 100644 tools/Include/Win/WinDef.nsh create mode 100644 tools/Include/Win/WinError.nsh create mode 100644 tools/Include/Win/WinNT.nsh create mode 100644 tools/Include/Win/WinUser.nsh create mode 100644 tools/Include/WinCore.nsh create mode 100644 tools/Include/WinMessages.nsh create mode 100644 tools/Include/WinVer.nsh create mode 100644 tools/Include/WordFunc.nsh create mode 100644 tools/Include/nsDialogs.nsh create mode 100644 tools/Include/x64.nsh create mode 100644 tools/NSIS.exe create mode 100644 tools/Plugins/x86-ansi/AdvSplash.dll create mode 100644 tools/Plugins/x86-ansi/Banner.dll create mode 100644 tools/Plugins/x86-ansi/BgImage.dll create mode 100644 tools/Plugins/x86-ansi/Dialer.dll create mode 100644 tools/Plugins/x86-ansi/InstallOptions.dll create mode 100644 tools/Plugins/x86-ansi/LangDLL.dll create mode 100644 tools/Plugins/x86-ansi/Math.dll create mode 100644 tools/Plugins/x86-ansi/NSISdl.dll create mode 100644 tools/Plugins/x86-ansi/Splash.dll create mode 100644 tools/Plugins/x86-ansi/StartMenu.dll create mode 100644 tools/Plugins/x86-ansi/System.dll create mode 100644 tools/Plugins/x86-ansi/TypeLib.dll create mode 100644 tools/Plugins/x86-ansi/UserInfo.dll create mode 100644 tools/Plugins/x86-ansi/VPatch.dll create mode 100644 tools/Plugins/x86-ansi/nsDialogs.dll create mode 100644 tools/Plugins/x86-ansi/nsExec.dll create mode 100644 tools/Plugins/x86-unicode/AdvSplash.dll create mode 100644 tools/Plugins/x86-unicode/Banner.dll create mode 100644 tools/Plugins/x86-unicode/BgImage.dll create mode 100644 tools/Plugins/x86-unicode/Dialer.dll create mode 100644 tools/Plugins/x86-unicode/InstallOptions.dll create mode 100644 tools/Plugins/x86-unicode/LangDLL.dll create mode 100644 tools/Plugins/x86-unicode/Math.dll create mode 100644 tools/Plugins/x86-unicode/NSISdl.dll create mode 100644 tools/Plugins/x86-unicode/Splash.dll create mode 100644 tools/Plugins/x86-unicode/StartMenu.dll create mode 100644 tools/Plugins/x86-unicode/System.dll create mode 100644 tools/Plugins/x86-unicode/TypeLib.dll create mode 100644 tools/Plugins/x86-unicode/UserInfo.dll create mode 100644 tools/Plugins/x86-unicode/VPatch.dll create mode 100644 tools/Plugins/x86-unicode/nsDialogs.dll create mode 100644 tools/Plugins/x86-unicode/nsExec.dll create mode 100644 tools/Stubs/bzip2-x86-ansi create mode 100644 tools/Stubs/bzip2-x86-unicode create mode 100644 tools/Stubs/bzip2_solid-x86-ansi create mode 100644 tools/Stubs/bzip2_solid-x86-unicode create mode 100644 tools/Stubs/lzma-x86-ansi create mode 100644 tools/Stubs/lzma-x86-unicode create mode 100644 tools/Stubs/lzma_solid-x86-ansi create mode 100644 tools/Stubs/lzma_solid-x86-unicode create mode 100644 tools/Stubs/uninst create mode 100644 tools/Stubs/zlib-x86-ansi create mode 100644 tools/Stubs/zlib-x86-unicode create mode 100644 tools/Stubs/zlib_solid-x86-ansi create mode 100644 tools/Stubs/zlib_solid-x86-unicode create mode 100644 tools/makensis.exe create mode 100644 tools/makensisw.exe create mode 100644 tools/nsisconf.nsh diff --git a/README.md b/README.md index 178ee6e..363a950 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ### Prerequisites -- [Nullsoft Scriptable Install System](https://nsis.sourceforge.io/Download) +- ~~[Nullsoft Scriptable Install System](https://nsis.sourceforge.io/Download)~~ (*Tools now included*) | Game | Official | |---------------------------------------------|:--------:| diff --git a/T7x/compile.bat b/T7x/compile.bat new file mode 100644 index 0000000..9752cc3 --- /dev/null +++ b/T7x/compile.bat @@ -0,0 +1,4 @@ +@echo off + +if not exist "build" mkdir "build" +..\tools\makensis.exe "..\T7x\t7x_Installer.nsi" \ No newline at end of file diff --git a/T7x/t7x_Installer.nsi b/T7x/t7x_Installer.nsi index 6b686b2..abba18d 100644 --- a/T7x/t7x_Installer.nsi +++ b/T7x/t7x_Installer.nsi @@ -11,7 +11,7 @@ ; Attributes Name "${PRODUCT_NAME}" -OutFile "t7xInstaller.exe" +OutFile "build\t7xInstaller.exe" InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" RequestExecutionLevel user ; Request user-level execution, not admin diff --git a/T7x/old/template.nsi b/T7x/ver/template.nsi similarity index 100% rename from T7x/old/template.nsi rename to T7x/ver/template.nsi diff --git a/T7x/old/test.nsi b/T7x/ver/test.nsi similarity index 100% rename from T7x/old/test.nsi rename to T7x/ver/test.nsi diff --git a/T7x/old/test2.nsi b/T7x/ver/test2.nsi similarity index 100% rename from T7x/old/test2.nsi rename to T7x/ver/test2.nsi diff --git a/T7x/old/test3.nsi b/T7x/ver/test3.nsi similarity index 100% rename from T7x/old/test3.nsi rename to T7x/ver/test3.nsi diff --git a/T7x/old/test4.nsi b/T7x/ver/test4.nsi similarity index 100% rename from T7x/old/test4.nsi rename to T7x/ver/test4.nsi diff --git a/T7x/old/test5.nsi b/T7x/ver/test5.nsi similarity index 100% rename from T7x/old/test5.nsi rename to T7x/ver/test5.nsi diff --git a/T7x/old/test6.nsi b/T7x/ver/test6.nsi similarity index 100% rename from T7x/old/test6.nsi rename to T7x/ver/test6.nsi diff --git a/tools/Bin/GenPat.exe b/tools/Bin/GenPat.exe new file mode 100644 index 0000000000000000000000000000000000000000..163f96286b7c08325ffb1d8a3626bc9b23e0697e GIT binary patch literal 25088 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 Mr~i5Qe?bEO8`yK|DF6Tf literal 0 HcmV?d00001 diff --git a/tools/Bin/MakeLangId.exe b/tools/Bin/MakeLangId.exe new file mode 100644 index 0000000000000000000000000000000000000000..5fd313358d67df7e25b8bb8ce2a61ccc8ede354d GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/tools/Bin/RegTool-x86.bin b/tools/Bin/RegTool-x86.bin new file mode 100644 index 0000000000000000000000000000000000000000..4cb7b5f984021d7cd9340b690e31dde67235da55 GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/tools/Bin/makensis.exe b/tools/Bin/makensis.exe new file mode 100644 index 0000000000000000000000000000000000000000..7c6468b9b5e6d44dd5540b8b16229e221c5f7747 GIT binary patch literal 465920 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

uLBqsyp_%@x1*#J? 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ò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%0AQfDh#T&`^Q$|!L7(4_z=yRnK`(5 zCfdd~e9NH`ZOUwymP?uH_JUIMPg{cU_~gM(9y=+qpEIlBVcyL*yp+P;m^AFFUFt68 z1N+lVZ;5*=bNW=a*j1X?i?TpU)~s=Z*XfSplCiW2bEyEg31BX*pMq z)6K3wZF-9^Vp0-5VcuP6ITxjy;_#5U1Q{6L%yDoG92fJ{-3m`iKC`mql`Pi(?91HT zGqhW6;PHK{b%sw%49xfDsu;}~O_}GxWqs*ypRRQA>%(doULK*3ssz``J>^P0rodm_ z_329YgVP4rhxe#9`2Ns7`X#dTLW}3uDvtMBCVeM8p~6=y*1&0-;W@$4_8wwfB_GOy zXOX0_Zo=vXyNT)3^s;E*3H28&$GM{w&l}tNn*Ptj`=)s()fX!=yzpp=bc|%oDDWv`l;zA;W|REJD(pIR z>5cBcZr^#eiSI>hmNqU-snJvVj-4odWOBYqy9YMLjq!$-vrGgwsWN_a5#+ zh+c$8&0KYkb5EW-*mpS7nK2u?mT>@g9@?XeVqRAaOMN>YsiRhm`J8xC`VW=bzvqnb zN0|y*wC9+QZ6OcpA9{Q#U((YB$&;Ebx=*xX#(__o@nViuVm>2^->5E9=3@$6Tlay6 z&GsLjOK@mOkL#J&loU8r(UchucMg~mgC$Q@veBN?(e|{WeO-c@gPL12t~uI#WnIqW z%C<^2S!ew^BlPt#iC5|?$$Ht z?GX#?cufPZ<6}8GTJ5E5#?0JJ4BRRPJ zKBs)Rx2>o5bCnFeTj52885Qzzdw33DNnrWJn2pZ8wNovS0a;&iFX_SW;q+uwEqA)( zYmLWoXqeWA@$y6hf*o@>TXvoj)E=i{2P(@&&u|R9Q~fmimuG`yD&I)0q`(bf&nCg`uEZk|=$&cS=}X@Anhz8v>Sa%H9#d}#i23RbYu&U>2E z?UTncqdq6;+pcr9{tG3VbRg%Ln+M&U6TjdBFk$pDzw8hU9PGyjMQpb-pQgOEE;T2g zt?;w-x4;rBlTQTcDR)jdN6R4&T7^UG2X>vnJHMF+ny_Z>nPXWFDaw4BY08+HzPw=^ z|6(|R`52=J^B{B|_aS;Oya0qJ@wNREI93F1jG0%>Xe(&h^hv%_jpj%(PJyyL{*Y3* zKQdlZg6;CmT&)**4R*KIo3LEjTd9P>DLz$-RsH2k=Q~+pK|5K;EV+vHI&R8{v$k08 zBK^4Vof8!N2UF&Jyvbwj`0x@|ZS(KhMUJg_x<7waC#_03;(WgT((<|i8UqeBk7&F9 zejn8~b7f^^d3AklW}OpxkL$e5wH;pnXC-F38YAK?rZLsVw-G%m?7df3RjQsQu3i0s zeitWV&=Zix%oFi&&{uHtJ}P7g__#TKT=c6E8;)?FI#wSLFcPp z>|fCp;HbX6m4&PGiwYgnIl%oZYxDgwf_8DJ?U#1xyybiD?yoGKUFQtQwQWjAZ(Gq{ zY$C{F#y3`qfnU}ydIf!pFFeEOloB>*#qQ#$g?Z9F&QiGi>Xt+jIv%s-LF->hd(Rh< zn8iG+}WoJcAVK) zriC8l$69xk6J>;NCn;vubtbzu2sqDjecv#z)W-LyL)0wc_B}nS`hX3qeEE%i{hVpY z)5axW)R%Q})`U+~SZ8{uNDGy9p_Px;Dat(X%EHTo?SPIJ5H($<>rIZsT&+%8bmK zgh%!Z_1LgS8XWhloooC?3Qeg^bJp8Vj}}au`vwkl*K&o=+HRC*nRZZp@`$7rt%j#R zBOO>wX>M_B(31wRY z?}9Uv@frpvsq(ZTeL?IogKh+8*jK(AN?DvVf%G#MInO49`gLgy#BG0T*Euv1C^jy> zp(URZX5Q7$+Qw>&KbriPdTy!xQgXXbJ1_g~J*9fVQD}i7Tbe703SEUgbQ@}gt)6yMgyp8n=+VsIx-ncJ}XH}goklyqRGgN~Q}3E0d{ zYtGVQzKZW6GLQ8odMkQ+v&`tP)2-OeGbhTNts7#`LKBU7M)+$&-KmK~XQoe{IC64w zW~LtpTvrP9Hhr7Wp}{k=ho_EC4t!MFW}ZFaopsV@jUepJKqJCR;PW7|9ozzL54bVy z)lpB&dFB8YHHxy+7{!S^dVE*~J}6&& z-`9#B9H)DFCKfHl8UynoDWiIt_?q7n)4;A*jh(>pySTZY=;EOzFmeRzR_|Yn!d&VuIv}mTRs#^V5 z<~NwvQKbPd=sGXG$g48gL7EniK`LCUo}jXy7k;? z8+6wjwR0~vIM}w)7%`XwTADG3WS>sxJDdlW9zB)}ZJI=H80@3hs&AxxC+gOu?5ye+ zr;$XPG+Sp>yF}`D0?&{&?enn`ORo{oKUmEQ`yoBDy>{arc2GU#cbPAGr&na@VV>cb zr^wlTJ#}Zk`^+xJ5|3NxBv@jRYECmK@yzS(dZGJqz7aYlGsDm=*%34h-?o0yoQZ{o z4W7%zDC)6kcxmi_>81~3WBB8zEMzqII0GH9zq8JpR${(e!y`nxa=wWC?4qgVm}klC zmPK=B-$U+x1Xfb4LVI(ZE8CTs3A=U}!6^^PzI7~+efAX3)=59atbO!?vY%%k%8=W? z*`JWL_|pvL_ICRe`dTyR^lP=&;@$e_CDyfaOikYcB)M1MP35+nF4sq5Bpl2g*^IPg zjAL%XZ`P=%l{f1KlafKq73>?x$iZmxbiGoAzd2tXQS7#sd_DM(`bII?Xh;=W%{PJO zdZ=;SDlfFTqFs+>Zf}AdRYr>-l zsSek`JGM_C^O;d3Ehw>B|FU0@yX|T1G&x&3Smaj9k)TSMf3uy?YHfoFi$3^6kMw4U zF|%y5a=skjDGf_t)3dVtimf7k`&%yC<^gIZieAGN>IK4eO zdY+TmhCMO#>8M4F*YP_jPP|MFcX@qt)ZERMdpHFh;950+Qc0hgng^M;O{x9Lv5`?W z#?`In+oVr;G|VV>RzTpDhb4dMJJb_>mbE&10Xz@xw)48bB0K3HZA}SX%k~Urfmk!# zU%)=f@tpSI>RVs)2Crn5n1pW)^l0K;_M>Qlt{k$ZqMf^9m3%s^-Mi9d?(YmAFz<|U z)_ZR0XR!k{Ai&JM{2x#I9NpnQYqWFjy)l1zcANH)?bSF}?w_$9Jg8G+9r5Vx){C(m z`GJKo{Oz&Q@U+{t)CD7_CWed}Sp6(-&sQ9XeZjK0UC-d5zyqCPQrsE-eI>kZlw4X~ZDcjU5Dzd5eJA_?RCe!}j@wzp-mhFCh zRCR9xhc<^&KJX@&8Y|$*sfIP%PwTr?ds_ZQ+eEui^M^&Tpc=nRy`9zF((c69L2Xw) z0*Zy)N{zC&nP2rvF=x{AZ}BiLPx@;i=4KPZOF;^f>u%P#fo_m zwn6yMqmEDOVgKsMs@L41bu9K?mV4}=>tWS`_JCd|^*8o>S*~}_``YOyl#cx}#(7jq z{4kqXY~$L|Gt0U(b#-BGp1T>ht#WlQmpQk~!RDS;GkXc8Wiwg-@^Obio<$0pru-%BziIjQ#N0uy5r#30?7;^-OLL%EpbOG53iwOMRnk z*JghBG|*C!Thgt}=MEv(<{5lux&0;9H@!~k`(R4AA&$%LRo%v2*&^6UJzeEs+TcZu z^df$&Y;~nAVZM9*HKNUt{d2gtA}e_)U*N z;=*an-6+L;hnBxXzpwGP)eq(bPgiC)Q)YI{0>QtpJN8z z&Lv&l2CPoUXfa6pW}GZ3RwHvJmt{pAk}u6`%@%SCcz%^FXX_H&3e^H1cnh5s9V_F4 zb?}s}Amr&Z^bgK0U@h%L-CN3(?s@J%+bZ7e&c7@f$;wRLD`IX>@P+qdc8g90?%vN9 zV^&cA+T|sVWxFDAbH^u~Yo0>eYjQbS#9b9{@hxW&#E*6vRo}AwZXOGsW$n@2v6XzY zW#DV5ML&psPfI3mwO71KDVDVume0eL9P&z|$8R(SC>Wz+l#ccb{aC9EOtLPN%IUJH z9~k0UUD@xfksSYVCyQO@T?UuwwZ(rUS zwI}T% zT?S`ju#Y#M!E!jYjxzY$%s($XB&E4MQJ33urX~_$Rr`{I1MvuLA zer0Lc1k$eJksnBoXYQRjUR!U$B30%y)~at{!x`|o(}GzisoFSNe)A>x4c=(dWiU-h!MSPZPRaC-3N#lZRh(L;E|l8k(+5t{|jw1 zIjSOZMHlzEGQYN@YsRpZ3)o_FGJ;@&}1}zQl#B#xkDr*|nHktSKtFvU0 zoZA$3DGLgLJO3}J+*k*Xv;KYJzwZIqucCb)K-?1my?q}*mXExR`kkpb+cFI}t9a*y zowX8bGFJSuTrsu%jnzfwOwgaQx;1n6v+i$6;dU!h0(r(*aY^NPeK4>OT`*-h+--{h z)CRNsW({GR=*X@U^9x#C?k6whf;KAXRtf0Iy$by0e@5z3hU%xD;4Ma(u+=cK(PpuK zJo>L?kZ~EE&T-%zPBWWPZoboJUsWdXCl%VR7u}il);)U1bnYxEKcvtt`r^3=-=qFu zzuro*J|r{Q)bO zB?>*j^Qk8Oz_CVprp%2-cWvr!LcbIL)c=zEVvIV}diw7#+-&XxUqyOm%GomhkdEGzu z*J1aW2dZDWTDYNjzP|+gq8H~J9lh`TxntFam$wEW13NG_#v|jh` zwl0C)bjQj|R zv(+1nCzRH$HZQ%|mJnMZ?78h5jje4r$L^SufXLg&V@4DRjbcU|66<+4h73KM z3iG^M?}Ih`w<)}%hEv|ldmMk8!Y?UI{#Cg({6E+4eG133@loUXy9L-;$LHIdV}?Jc z@T&?3{?FHN@_bfd{_@Nze5?N6t#`VP5Bz-!ga3c0_a=qoiE?ii;Pu^xga0Xo$>$q- z_bCjFGG5r_@c*Om#<9bj@O};de+9p(4lCGuey8LAe+sYEVc_5Uu;Kri!mlYzy(nY4 zhW{po_bD9px?N%L|CjX6o;|z?|K5k3&n=4hn!@DsBYGdK;s24s@2lZIs_^s<$7jZQ zhr*HnZ3_RSVE?|}?|#tvDA;>hVetA7^uAPwfnTb_|CYiJ)$xB#&x0Ru{C`vMejO(M z^qq$PCkj8PFy->Tw}$^;3cqzn;`4^Wlnc(^R+xwS_Z6mHeyiSFYq)~FZ@=I8|4xO! zsc_Wmd4*})XY_udfG^hYe@^hD1^jk}DfegezPUZ~`If?z4{g6zz@M+-x2nJmg`q#s zV+xbcAJhBb;lov0;49k<|CYjcbin_l;7=$H4|TY`j{i#vzxhPA`&)hI^DhhjRt+cq zi#7aTQTRE9!RN>IuKcXy|EmhmDje`$4gWs{fAzN~{x2vD{{OMwXKOgWU;Ax_|2c)f zsW4^oJYU1Vt?(D>aP^@M|5^Qb{e7ALRfWm#Kh?XaF!{hgU;Y`xkLvgH3P=9WC=7r8 zhr}=7r|S6ZwSTaNlh59`t#l4*xa5_bW^s@_PL@IL`m9@XHDV<9()v|8<3D6(&BXf58uh;|Y0An)SP~zr6NSuGd!te?{TI=aRz2{crWo7Vy_^ zGyK04{AGosUJupqza{t%g(IIge$w%OLV#Bl4)}95{HFw1FW?h3{JqMjUxyX!J^K^J z^S3L!sBq+Sa}ECug1`A5!-@Yjg^^3|*ZaJ}Jn;WRHTfFa56M=Vt^b{(X8MQ#i_fu!jE~!S@vKzQUCCclF*@z;CMIzbyD0KVtg4 zTj6~_?D+qp!g~~sC;At^UwmV76VI1_$oTxU;9pTV@cE@0{&~Tlso~&#`@0S%et%r=V+H(Z4gaqM ze^B9gqF(=-06PQ+N1m7eiSzkC6n;_RfPej04gcQ-|B}LO_}2yhCBbQPo>O)Fzp3y; z3da-W{%Zp46CC_`Uwg~>{~HQ_Q{mv-t2O*t!RHi?C-V7{0H*{e57OLT$H)42a~&VL zyzq~W^Uo{%tith-4{2BRUJ{%z@?=LHUeoW}I^a(V{=I*c<$g_JXtJ*Ng#x~>hO@`? zeG13(>OXXRR$RWKa6I5cKL5AgFA5&?d_rOB@jbl{7Vz6^_&?;^_cH#A3KRby>3ybv zAFbj4SnxXv_{;ym@&AF~FDe}6o~q%0U+{Yic&~>4s^G8v{fz&d!j$`#-o*mGzlKBL z_bCjWd0zc{j{hzJzM^ozpReKnL~*Vv9QaJv@Lv;rPXT}JyUyoT!M~v}G$hT>e^X)Ne?sq<3ixw1{GS*6Y5|Y=%YQBSsRI6>!r=ek z=;2~#zuQHeroI3HW{7vV7ufmTh z44k}fR+#$!9=*>N^SC$uhU0%h@K+R$a=)lBbodwaZWQp_YWSOifA@`y|80e-?++=1 zZxryr^M?h0seo_P@oy6Ri5gDXp`ZMSe(WpaM?UWs{I&xAoxkpKe^l_VDoh@{krs>R-4VZ|B1g~_`faqLkb7{)N6)6FZdpX+wd<6{@ywcb$I#DJO1BR_yvWdURP`Q z9fChrhoSkKf6jT{Nm_-eJ87=g@DC__RN>&0J8Jj`1;16{$p5>4*7@uZ{5uK<{FNGh zm*8J2;OjN~LxS&Dcr*VR{$as;Mf`7n+xhPl_{$1M{?F9#U4qXR@QA-#@SQar{o(6> z#`%m1{!0o+K8rPc5Ah55du#Y!!Qc4P89(5&g1;(w;D1SB`1xVI({+5ly|;!xqVRYB zl=CU!j|%>s0=}X!`JCeIfPYHxi30xStB(I^!M~|+)ax5H{IuX-uHlrsqlQ1GaKDKE z>YsEz#{_>xVe)||_SEp>3cs(0L(fz85byDxM_c}g( zW8WWlJ~ImMP&o4W?zaq|7W{REdC32(HT-e?eo5h|FZMd}|2e(S*YWwbUdKP9@LU0( zsNqitey_sNhPPM4&no!FA4_~*RG9qF>3zO{fA5bPeqQjed@z{$H%)Ul4rp-obn>3jT#UK6H4nj(RQ^Jayi+p^x*|B(A2 z<|6)g{($rUUj+Y}!o=nIqQcbsf7QEDz@Mn$UlV-4!j#FgvxeU+z-=|0 zZ?F7**Z0Ttb|U;MqE z7c1EN*6%a?cPRW-g(Lrf|Fi%v6maA=^*yQXS6Dut4e1i(RLRvd7aiOV4Tr=KsmDNdr^L|cz<(ZweQ!9RetuMv)<-2LcwEP z@#b1s_-q;HeWdbBjSJjH)-(9apFxW6&|(a$?I$N&Skz+m-3`k z@W;dbDV2xk8Qw#zubvUcgS%E(TRvOWri|;D^d0;%@TOrl8+UXb(rXaU;tetWu1rj{>+h>f~ z`g`?RC9t;3`s{|@9m|yz`q74_)Kk|P+_-|h8C|1A4eN(DRz z_~P?!no^8!oN-)AHgh37Zmul9(XUHiJ@_?aUJE~DO4~CQyn%=J1iy#ldqy=u;zjIk z{Jr~Yy7Dh#kJ>SL4pT~3T~Es!2|uJV_T58cX*sKz^?v>0Ec*@7 zdQz>iQT=+q{)PwGX~o5F`|(W}CnfCHI5#QCLH+-LYRW03#}wy*ifYt`8>zWH*5hGv zMd{lPmCuN_NF20Ok4=L<{YgvC%D`ig7J(*_uhY^Z*;2qbO`Cg_*pKcwNYHZc1!dy1 zmODSv%dkpPe1TIL8#1o>@dFLmJ^FRJ;>MC6n`M}HdPPpjH{E-by5drfd7Crk`kQ4M zZ_Yf(TMqhaGsf>2kv2qoPR`dTb~SBM?xi zGgxkT=WYmFyx*|gKzBGEpD5@VI$d}H!x!O^=X@iV_(e`7rJbjJvmzH@sml@DsS6uIU=t=3hyP+_8 zNP6}Xr(J4N|8aRSI^P{i8NIokBH+TD9Q}WJ&;=XMh!+5ZeR9^ z+%tkB<7lOzk*R~^@<}6b+`L8-YanPo@BsTckOt^mo*fOF55cYGcTVZzerRrdj=3EC zef{HRjG%*~rN_uNPwy6%-oZedlz!8+NzBh;?$(SEUx}$T0M)&@E0VF{v|7Zx41LyX zsTeYQzfvT$K+~^f5z|7ZQ?g07#y`xjYCK4 zvY}JpMYx=gQzj4P4&FY4X2!h`c~1?v#3&S{4#( zYA4(Nn)vt|+(`d`=gsHF=tl4fO(Zp|X8+IeE^y2o&Fv!0x=0C}5`B|PobgF~pOe5^lXV^DU92{tiN)=GyX#oQN2*(5 zOh`&GlKCM$`{BU*ibge7h*l-#_GmWEOgmS#EK$&5^E^@K3x@O)k1rnC54GZIme5q4g@cUD|r zJFw$GGi(#`1*qj1|ZYou9lh2ILtrDD{kM|Pky+oOW@_}SLrMjm zEsw{mFVw~Ie?u~$^i8!Uj*H?z)=Fzgu$G8l_={d}rn=}5PC-GScVb&D4Ju!a6>#O>o(E?h+J6N#8BV<>_ z{mg^i=03NpulDyW2$_Q~0=z*i+Qh%P|BUg2TP%=fruDR_6J9BB8+^^|zgMM=AmGGAlI{zVsv|M*9G9ZV2;`Jm)^rc+U!1MEp}5?rJ0UphvY%26pA$PPIBUQD%Uv0)-kz*t?5X7s{nIwT zd3|fw3wyA6bW-(Y*0ZV-(q=YL=PL6mo^1KFYY(DWglLu9)^PZXt`c zMPy#a!G{nXWSAb9F-!S*m&&y7Ba(1jyoPm&5~nsxr&Ub{PSJH84-_S%rNCR4#SdT+ zS_@plh=}$unkIa;eUlom$Xa?%xvf;?8k^zwFjtZEU+N!7SZoX zFk9XHf-M~FlzA7NPp^a9@XtK2m=T-uqMvXU9~|RvmJI$jUh~f4&~izo4HuHVyk zPt~O}zd$N-E9d=!GKce8n(MLH8E9LwwzmFRKC~Gb?q|ST=)H;+aNE* z?FY0}n}%(EK+24&b64)ec;b5V-Wok~e1bE&>J+npYt`J|m&`+HE?`pt4p=Uw`1pLM9+reo6BqviEbxm~`?4K2iLH+Zq0 z&uHpL9t9WEI%q8A+9LbQj#Zj9dhSWZigCRrXEmCmiMDes*KA8`K5fl7zMvMN zCs_N>801SiW&Z(oJ@$B7lN``=8FQDb(mbC?Pg%IqWnEMa!)8y}VNKxsuzp|ix2^bT z*Ch}1U0VN1@g{ii1f0JY3pn4lS`IyNE9=9t{uA+kP}UZkG$>aVp~BYb0RN0yC+c1u z$~I`O0`+>IlpJB6!2^GKW^8|-X??>+#Iv<_!e;;e^%#rmJpfPNX$mivmxpWcUF z4xHKnLHo~}6Kx6b9W+PH340qU+i9_=<#`8l;wLNuoNJZncc0b6>Qb@jYizX=>CbH5n~ej z9m-iJV*nmCF?XPBY%vpxxvH2k4!SRt5a#n((|sQJ^{(*@%c;3ugg0?%MU7e{=t}kva%vzfx?oCt;x1q?6i)Do>7L&`@jN@2H_mK zzJ5wyXR3T7enPt9Pf2cK{l%`v?O@!=gs<~d1&ur+79+voswSgieNuKguo#w$@1tgq zk!#Hz$k_Cvlz^jmO)Cx_mb06&y;I3pOp1owXY;V|!dJ=pk(2Fs_$!v2da&YD`cCjF z;iH0HR0*~dH`gHYJ9@LnJouD#+$;KfQBXX!*<}=Q(Pxgf;*>o%WNyqAuppF{ttun^ z*OZH1y`Vh$F15;Yuj3?l);&vE$}Th{3FDol-t z2`j3pXKBs+f&$j*kVV!I7-zEATXrBZSYcrlz@sB&2{MDR5t|!hHMfaojj+3pO6h$u z?B}F>C>QM>`IbJTP5fEIu~nLuXJpM$-7SQzkrlH={P>XP%xC#oO!JQ)>J5$~W?`N^u{i{H^Jy z*eT!y?BSjlrN--dyhm%>H?f3787_BPsaU6`et4%uyb>NT{5LaZ;%!)_%{aj9JIdZ9 zhZz6b6l;1%w7*6UUW;R;$z%2Kc#M;bzfj$HCXU1CN__mMSQ$r8ic(`w)#*+Aqb+GS z)9Hk$7ti-2|CsZQ-nE6~VLw*6LyP@Nu}^DoR~I_A>5&*`e_9YH(rZH7OFMV=H0y0h zcyy{#9}JmgFLL~NJ(3<1KH$Wzq=fN}k&rc)168T4!$&-J=d!NL$bVchSxxgAFn`N@ zTpzFw`+u~wj;Q2T!uepwcx4|z|Swc6;nHFa;BAZ{h zlhma!M}aQ6C)Kv{lA?q2xy0X8pO9>^je#A8rKDjrfj&Fx9*^b0*1Yxz%^Dfw)n|vs zxT{(vZdz0qzj(=}`O~=H(syn>01OPKxdqrJc^p zO2mWDByybb&K@W5KtglBN%Z9l;zm~KVw4E&sW%|2Sj}L(rT34L{$)JNA^d|fEqJyi z7&FXk9Tz%3n(~TJ2&(KN_UG~JHAWLR9W`; zW=@owdKnrMx^L-6`;aJw9BJzbTOC)>M7a;hGYficdQreHd}rR_G1C17dTcd+cm$2J z-1m^M1Il|`XNEGLWX6Mpcle-s`IPz>Ga=8YIH?H#h-sxbq~06ro3456b=oRkpA{YL z$Av}&e((XbjC?<_83XM(Vqouxb(~Rj$bM9gdbX&=Qll zGggR)D(c|V(cf|l#GHol*H%4Cl_-<*hp?VS&9cl<^((zS`pP*iJ=BqrixG;E54{pi zKKwYM+zEZZs5bRC%4(m46n4|L9WpILgK5ZzXBZze@kWQS#tYV^UojFS>?hVAhvn#% za{LRq`-!^747N#?QkRIF4^+I3J%CY-K7a0argaQqHh6gXLel9ZGD5@(*4Hz=`cK^tah#3 zm&^SGiA%I^P3|qqjb_gtT>S?F-`yKMJ#^hR{DAr#C(z(S$P;|Wj0>$Xp3@ai_+&6_ zPFU^m>O&u34u&M7U*OSdd6m>a&tl9n*2v?$y_6ZkwQ?)*O1)@S_<>L2TzaK3UNOS9 z&oly_>(Z>iUl2ZM$oR-%m!h@OCY|4bN8I@CInJ=M#*}0FW@k>jCFL0LcxZog&{fUX z=QpYE^@wtvk+|s0UJ>*vA}}m?Sb0Kk3Xj!j$Ai^(Gdkh4WUtR z-&oZm)+r9u{17ySXKhyui1(4x3MUpX5fH*B|_6_sCRg)g(%@B=Ep zovHM}ReeLgSfU(~456=L;U5>*BVp*vB@N0vfDgmJjWJX!*WQ@}qPap>^uX|^fYKLL zmw3`{V>=(ccvZbJTMD^BPWE)QRXOH}u?8Jd+UM(0Hj-#Y_4O{AN0lC0^(q+zJ;4F0 zy#4Z`Z)RRtKVqEVRI%{Z=T6MnJKn~eG&7n7o~dUEoKD9~D)v$|zX9b8B4%9pk$aX^ zruJN{D~5Mru+G=a(=uX^c5W#~s>}N47WFy;(uUR<#v^cFtha`R746mD<%8$ku=+rr zJl(l^Y{V{x{{iDBb}uY%@Umwpa2ztmd`*2=;fZG$u5Eq}i&po!0hSk(k}Vo3eo#Di z$~6ts3L5RG&YSVR8Tuvm3nWOp-(>J~Lx%*Kh!%F*$~PHS$4L@vvrucCys_pkkrzmHYn~mpPA+S)1pFPLI@rK7Lp= zq(ray5f?u{fxwnv~4b?uFk!J9gJOCGY&XCT0E5buU(X zP0?dRPWl`~q#vu*@RZk8;AAxT(vBai3UPMga=pq$ZXORu)9(jY+6~ev*9YJWc&nTb zz!&aQ;mMlXt97QfN3Hoac+E428ByGQee3ym=L0T0xhD;6-ZB##5_|c)#*V!9ne@yt zu~u=0RP3B%?r~h-ZGZV}Rd4)cks(M0>m69Rkw&Z`N4<9|-z7<+t~m74IIV!*KTIDB z3wQb;5Idljnscg+J-6FB5OI-xd5Th;oQ~wM9*c(Of60sOeBOCos?_94j47GDueJ!X zdda%y2|=(7o~qzjfw?wq2J5}vVfa8wIUq;B+sCDFtF4*254PVAr!yDd`#Aq@}w&zaEJ0inJ}!aTb(*OuKI zpiG=_4p(Dm!Tyarq;G*!ScG%WHk^tkLBGJ`CanjgKm$Bi)!yg&bCv~jOJqmPd{V!P zQLR6sE!_@njc0fYYgq00(8uc(fekZA`qoj^#oj~2;raE%sv9TcF-WK2lHs*ymJ8pu z>pwijaC*T{_5qj^r{Hzvl`2{s4uy+?R==K@nP%Sq(8S1e3(3i<26HO<-B$HR&-I!q zo7&>ux?f#8CLXUmhlB?jN@A0GAr=ng+^YI)X!rI3x0eK-@zyU{-(#f*pZ^?Vb}M!G zCL1W`2{kQZ_L%3-=drn?vWme ze^8R^h;p&#rTN+QWP~tx$EZe0%uI9iVh?rxjxnJe(E>I&s>PS)$OdLS;8l)m`0LP0 zXqS0*t;ejv-QUewca9=Z2rqcn_QPMIt*_En9%;a1yo#H4YUbdyfaki{`q;Ie)ZeK1 z$D=zvigP5ALab=e*BA}?YK;$U%yX{0%WQK+^Mn9aVar(`DNFx|J4Gp8P9|TIHHGJ4 zg*->RU+|t@^AF!rLh#MJdq>D$Yf8AN&vlj|P6Gs{<2&(A-0W&OhL^D8pkyU=Zr^5%`0YD8A|Gz{>PbiDloxn|lhfiGClrAT{frqGa&=mqaz&vsj?3fDFZ_~i zmxTY9)ka7k`+HAGCY}&vUc8UIWah@41nvu-VVrB8El1h(#5{+Tg8Iwe z(cPju=bP{w56u}-ep2CHZ+>-kdA0x4>caZM5`OgW(tDHM_vqcB7yH?wfRh5ga%->m z^B>T8cdE*-e(GJl@4e@y-mlzsYwv5npqa}~a_{wae|-GmLnp4RAG~tm!u;yw)${W! n>kG?E4?b9Z_5W2+{}pK-S$}$E{>;MCh2=UXalqxDrsw|$3KDZO literal 0 HcmV?d00001 diff --git a/tools/Bin/zip2exe.exe b/tools/Bin/zip2exe.exe new file mode 100644 index 0000000000000000000000000000000000000000..982249bae455c489bf49ee12ba6d4d618be1a5dd GIT binary patch literal 22528 zcmeHv4|rR}mG4OYrz8q8)GltD1YsN+8tgbx3^s~Ei7m$|u~8yNiol7Z*ivLwmQ?9p z+kx0PmEBleRMLL*+q9)`Y3cUy7QQa~3MG_(&Y$A6O}km3A$>rb_R+4419c&rxL~;N zcV@0^*$L2X_wD!I_w_n+@64Gq=bSln=FFM7S82L+Kg(f^uLUc`m;|giE_N(E%_v#dwr*u z^x^p#|1Xx@$)7KByeH~@%gdWP+XF;1(*uW{v5mT1w)U0#J2J4-%%oeO%V+E}fZQmc z|8zZ`g-A9k<3@SC&<{aKPyE`CyH-FoE+7)_^iwMm2$yjkW5*~nz}SIHDD$6m*%*6J z_rbI(Bww$D>d-Z~k$lwG=}sVz%gor0idctN@-p`A`2g6Ej7SwoS(gnp6#|W|HlxCU zM18pdDeJN^Hc}Cb$JznoeH}oCcsC+tT{gif3-Y(@f3*hGVx!H*l=`yVAPY=fVPioS z^f?}QZJUj$#i6w}cDRtaEa&_+RTDlNlNJQ%k=_Y0JvCC9(VrCX%}%AY%;K_O74~xgE$k)Zz|2l&S#k&lW{(%pG_=hY(M?1L;iW4dy zJpBs56><@BzoMM9LCZ1erqmEsI#LaKhx*bvPCzGJs_;x=LPx~*fS9N$bV`PFr>d%+ z@qD#-0C0_^DjU?|L6nC^Bw7zKagYEr@7$hK|2?Z?!ag9kprSbF}|=#VQl6nIBf z-AZjE5FCMAXia_TNm4Ev-Agcm5!lnhHRk}xa?a&c7Pla$z5re}J{DTjXQ^o*3S_rh zJOUJt$K~c|p9mIeqoh_9I)JncNMnQW0Rb~|s%%t?pF#uWl*jrjk5n4eyCA|rK=62! z9uK6sH9UfR;%L!$ezJ-KWMg_eI;2c`tnVlLjHbb>K+~NrT+E;ek7;Njib;7gDNl{& zO?BBAy2xBE*OSy&^glYKs!sHB4^--a6zLWa(~9YHu!6+VvcVD4&@yDt4fO#_l}kl4 zNBYS!7$6!Gk<3Fau3t-oB4JF4Fx3TBhs&iFZ-wYXBc{Rk^o;py9wQ9XU@r>F;s;SB z+Bnn~Ji*pBf6Y_&7)NjeVY+1Y9R_RX|<=0h}k0j;?8MIQ{%0=SvMSS#O+*ESH zN&^JJzUqtSG3}mJ@H*%WXf_I>ZOPOUwron#&E^2>|zR_~S2l!Ud zOB^*Slh*g0{bskQ4(cHD{SY&8w9qz7u+Rfnq;y&6|W#OG{JsZBhL-)uzFpqcbiT{Ujz6)K3!!Q;bSMed??9+%C<_Iq9#tLH-jN{tYnvOb3f$^RCl>C*A`1nQvNi=_ic>)>D>U`g;?MxdNU$)~ zH{eNrmAv-b52gCjqxRP*RD9?m%gdILRNtZDZ6goi@;~&CR6Ld3_M-9=lu>v(1PzZ4 z1#mCIBu{Re00CZ1Zaa%HG=n4NN#f~VVCZFY%0A)-I2T~2Q!6kOkWJdt<2lJ~>6HC7 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/big.bmp b/tools/Contrib/Graphics/Checks/big.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d6db07793905996d858436e0ecbdb9c84ffbc41e GIT binary patch literal 886 zcmah{yAi`63{@_SYWN4n8{>{~p&L9b?dxLe8zQ{aGz##T(l87_*_h%>(vu>X^|Zn7^vPBw{W0;wfp3+c=|jB}U8uKPeW+7O9|B`9^)Ls&{a;jHmFfqvog(!aeMk5Hp-;#ZXF*~MOa7E6WGf4ANzXuODpybk`v{y5o8)#M zjudS`yuu&w3;aMQL|EQWFZ*bTFv!{jh?vr{EI`@V;-GDl861x+A%tk&Cv3+#Q=S~n zv@p}X$GI@m!neNfBy%+i&vI^We8!?*_-KhFk3(Q!;X7v68?8^>n)vADi$9IvYyFjw z0ey6C_WaSg>6d;WN_{X3mU`GZ^r7|Zd|iLN9<5*RSL@gBQ|rr$+)u_&zwx^j{XhSQ PqVJ*^-@rLr&TGO8nLgM; literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/classic.bmp b/tools/Contrib/Graphics/Checks/classic.bmp new file mode 100644 index 0000000000000000000000000000000000000000..83e3cf565385105ac3e973e146aff90548f9cf37 GIT binary patch literal 886 zcma))K@Ni;5JjhHldep9jGm+W-l0e6%5g*DPBz}jBe;VNXR&_oaN8$anM?`VIX=7i2`5k1y-o5}{GsMnT4qhGBrp#H5X;Nk-^+~C?@ jKe*hVn;-sqUb(pqzrLS8{|9kFcyBdKN&6IWSvh|Iu!-To literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/colorful.bmp b/tools/Contrib/Graphics/Checks/colorful.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7713942e0262a1d4646ed1a3ac4a1dc2902b2a01 GIT binary patch literal 2512 zcmc(f4Nz277=~Xo?2@5oW`vngMi%rVm8E4{5E+&zMt~#;h=gK z9fbb#A?TNdV4!9P`fDSh?2HZW7bn3d(Cl#U2hPV>n1+bdeXSi>gFJlqVXYF4Y)yVgYIn3!rE#MSn*H z`r0cnsF35>b`IIwIAjsxP!0vry7YgQ7@^*!25~qL$YGx!hqz4~_V{v$S}g_#+{ z!i5ah)(kc_40d)54h{^B->b#o+DD;N!#K>&vitGebZCLtr37 zP!PkRLp--oR>n|L@*65E8IAuybu~kMJ;S9-43{r6G&K#QwUwd0onc^L1cQSNN+s<_ z#xOiQjG>_+IyZ>EzCI`v3UqaKp|i6S9UUDsryXr=Z8X0XEiEl*Zf=HLE=NN{17tE8 zii?XOl}b@mR0N4cg2KW=6ciL7FE0uAi=#K*bBdpDH1pND^WGPHY;9v_&(~Eob(P1fMg#cz ze*b#!HCy6>*E;h7_gwrN{{u#|-g5HKR4+mE#Z;{7FLUve#-mGPJN#)Jd{)2D8G75oqy~0{i(uK3UFDuN)!JhPc0S- z{|w-Lr;emkJsP0Szhi$IT^|k5#6Q(gxY&?Z@S(-Ki+G<@EKEPFTES(xI)7BMFfB#3 z0xuU${7)D@GeeJW(FbM=d7tEPdX|K5(Xoaf)cLDh7$ z$dFx9=ij?;Z&*kG1svS8Tob?kv?&uG*3o|c#kb!u<$Wjer6p&|&Xs0oR$Wx*-?b+) zJT%BZEdId8&ouGBpf~kVReGncDsH<*uF46tLAlV4b@C^RM4$_rDMS`u_MY#2Xh!Q&zvFfaSLe*@IG=myG7z{fGhDT z_Zr|zocs-Mj?V9S=R+0Xy&+MLmV~U+q~N5ts#e|6U#cPM&G@hH8tCZ?Wd4IlMgLLN znbC3e6oZP6GBk#N0%kRCb%AN z^1unM$Hm`Brgx#`#z#~@2u4Ws%b@JBf_c%8Zw%e9Kj94|kGa-cD|&GScK$>|)|<-T zS`;|)Ur6&Fiq4jWVe literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/modern.bmp b/tools/Contrib/Graphics/Checks/modern.bmp new file mode 100644 index 0000000000000000000000000000000000000000..62468dedc173ab5383a74a75def0d54c10d21ca0 GIT binary patch literal 1652 zcmb`HL2`pI3`K<@gyMMGD`eLL^aS1a4n0Gs2go8<=`nhREW2dOk|j&}C7Fl-PG;JO zu?HdZ{Auj3Ipj{(==K(znb)A#8_P218>(@@v< z)OH;W!$3XmJKVRZHK-krN4z6_=**9sNb;iy*DnM9 zy$J{(sdFkY@^J*RixeMqX&CBD|Ah$%-*16efykE=W`P7>>MXG8e`f;9_s+!~ocTd_ zkmOgogH``K6A*sk-Pod$&(^s`DLz~07Onc9ikp2SOO*-BH literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/red-round.bmp b/tools/Contrib/Graphics/Checks/red-round.bmp new file mode 100644 index 0000000000000000000000000000000000000000..31d3c025288ec03ec3c376509a0c26b8774c220c GIT binary patch literal 886 zcma))F;c`Z3`NC2n;E)5k)CtVa|e#VHfuM`geq<_1LYRnB}dq;;uJbd_>ycACp!b$ zSU+pOe9KXuUyiq=aYTN?c*VHKxS=~_L|V5$>)aCIqP8_b#w`uQ0F{MVFPdk$!@y6b zkXR!|)4y|{5%?gOw;D8&Q=@$6u(skKLJi)qmH*{rd~_v$2+HsLr|$^`5smL7 z3R?Vq=TXq!pV@fklE-0%-}$3J6eOKs6twuuVe6~@vVrp0py08=Rew%AZ+HiO_kLtz tYSf>{zVLUxUi>QowZG6$=`-SO-Cu2+%p(5({qz<%p@h8oQuBA2^al$U!w3KX literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/red.bmp b/tools/Contrib/Graphics/Checks/red.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e14e6b4a0baf3a1949ff1114462df72e66034221 GIT binary patch literal 886 zcmah_v2ny85X55_;4)l?^Y6h`{6WBsGLbM2H3aHKUBCxdi@e7POY-BcsV>t=Kgtg@dD-)DPNIYPNsllH^z84M-CXrd{&+t`XwdUV1J!3b z>(QX=&u)@D%;>-0KLXjY>(9LD`H!B)-5KSo literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/simple-round.bmp b/tools/Contrib/Graphics/Checks/simple-round.bmp new file mode 100644 index 0000000000000000000000000000000000000000..695023224c652dca377cff35aff9c68be0ddb226 GIT binary patch literal 1616 zcmc(fZ4QDk42Ji?jK7S>@EFGb8js*nINA~qhJ9P8V{BxoiLV)0+CE)7^m4uL4C_YM z6RiiWBQ0z8bT!72|9OywP^^JI=ScTqFfm5c_dPxRi-JnZs~JACvnGO5F)&z_*j^>J zhP$G_j(12%@YcdsI(>ot#!GzW&+yB5?A|%)Vd6U{lp4S5)ZfC#7P-L4hs}Trzavfl z20n07K=@(`s2b YV$bli0!4rRf|_st&+`05f!{uO0To;qwg3PC literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/simple-round2.bmp b/tools/Contrib/Graphics/Checks/simple-round2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ee1ec8427efb946b350e9ed7fe30d683ac07ccbc GIT binary patch literal 1844 zcmchXKXVd67{;GFz$1k*5)sr$luIr|4IBvyB=KLgwb3$-g(=hzpq0a)Mn^w@6RG21 zC#@-9tZ1lcC~^e_UjyHF_p(D^XU@X$fp>S`d-i_s-tEHPvw{VoO#{f#=q1Ghg@Guw zfO!u1Jul-Scki20Y|WWHdsj(?Pr4#@HawqzH}Sop?At{)O+uk9gDug@MNu zdmWQ{lll;zhzR3pCxZR1jn};*-iRpSZLf?E{pS=f@MZ7{p9crjAK=h?hr<&J?>&x) zeKh=ppQEp6Q8a%v@vYIoXf(obIE3eU7z_sJ_xtGedgyk$Xti2sHk)YByn4NkTCIj^ zwTeomf=DESa5#)mC-P@;Z=AT{evEW+fhF@f zC6Uj}SN5D=@JxY;>7u}Hd~xy8M1kFCG^z*$n3+H2pMg^{J%1;0IUWb(6A*8Q?x&+H zOKAAQFO`%Z#NSRP6a21X{tMa`c)x&#&wjDw7a)IH)9beq0#Cm}xd9fhp2aKF@X2R< zx$OIa{A5z{kVwRscghFtgPwn{C?x$r{?%*1(h}FWeua7YJitNirjDP_-@Q#i5`G|m zIfWF7c*`l~xh`B1<*uvayY4Oa3x$I41Nmvv&Gd~lkWMo%=L^W?bo^6)YfJcne0ycp zCav1AZRTaqXQhzM>iEi^7k(h$S#z8yaXA7u5ENQ7!+)huR^mqPDfq!`c_yYxBqlW+h literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Checks/simple.bmp b/tools/Contrib/Graphics/Checks/simple.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c687a1d92731dbbbbab08a06a4ff0f73607c2f82 GIT binary patch literal 1616 zcmd6nVGe>Y428Q5jK7S>@EFGb8js*nINA~qhVQL{V=&wj5`Cm2rSP>~7cSTPPJ(V& zPp}8<2s5(BDq<0T9@O|Mt;cotxc9wy@1^THJpF;%i9{xDTkoeWv^ElXCK7!YiGK9D zU5Nh$-&$>AsLxt$B3FOYjPa8CxdkD?n@>LgGW-S_;st!-G=cKfCt#URye2?A)ofnI zD32Y)e0H$LX9uNx&GF$o$DDb-bJ{^6pL-A9$miCq@fi<0RK^dZMS_9P&zT@szs5O% o8oo*R?hD`5^2hmVeOyuB>^yv;mGy7LpZw5J-$eC(dj2=}U+a7rssI20 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis-r.bmp b/tools/Contrib/Graphics/Header/nsis-r.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb3650f7d3901e6d8b969afc6b3647433d773e58 GIT binary patch literal 9744 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 I6;%N1{~MpyNdN!< literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis.bmp b/tools/Contrib/Graphics/Header/nsis.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cbb52312f16e431e9b0c634948e3e59dda14d1eb GIT binary patch literal 9744 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis3-branding-r.bmp b/tools/Contrib/Graphics/Header/nsis3-branding-r.bmp new file mode 100644 index 0000000000000000000000000000000000000000..795f5db122f383193a06a4cd49582f916585a327 GIT binary patch literal 25820 zcmeI)O-~a+7zgnBEj)Vk(#Apl>Um`?} zfkc#pN}}RHV>CviCMFs$=s!IAWZc~uy0Np{hNqcs)^4rM{Q7@pX18_sp4E!T`fVq+ z+i}n0z6CC)p6$=emGoILEUF%f{f}YK{$qHN z^KC=GF|@(zKi49}&;lR?JPmUVUF2g(X5WG4*DI@cr)NhSyT5(@s+$)r&n=|(HPP#c zVSt9SW0zJImJN&qNNxs36%dSK7_1?Dbc`yXff0biN0QmY9UNvc4BXI@(GBRyNPu5H ze42>&i=iDl?pM$85Ve$K9E>_Z2O|UGaWS+E2+0i%RmO{{5j@|}a1t$3+lCT~1QM(m zmWCnbp97U~OmXs^!{#%qBMn_(WI)NGeZWF;2*7k@e06yRQ=D{F;@zt^6fpNzEunl= za%i8?TuT{{Obm10PHQ`d%q>0seM!UtC) zuw29$9Ya%3mO@et12hB+mIyjV0A}jjao%mZcYNvAeO-HaEE-in{Bz@nrkVSP+ZdmstJQZa54QWv^xt3Dz2D24I zG2D#*fr(+%8jJQ=t)HGRK3M(F^?mj2$#;Z{8d0@t1KSrvF_bbJeh)|vC5PdE3IiK< eO7fpNQi7vL=i;=Mo@wF!-1c}+?nzG=BT$TUpe)w6yIf><; zU9{dok4}2*rpK1VHd-eVDSCbTPW4!>pjG|BA}m=Q0T^cgAq>OpH$1Q>tA`PEo+5xe z%>F!tAq;U%oB0Ufe26^E{85O@8u$6It04I}b$5f8>(%Wrkw(C6I8=LOX~Tb>-+3tg z4ba|wK7?Vm932tz@In7b_nDe?T~f(TmGa2LfCDFj;b`kXz>Yt@(+ zxVX2tf&4wo)uKAp7Z~a$(z4L7BfqNsWaX-FGIeiaes+#peti4hbzSssZoVnE42G)) zbJYey!~TlqFCRYn83|Cic^Gv->Lc=SRVYsbxgq&@7#YyRNPsQJDrltTe!-AK5l{#+ zbTJx$Rz?L#DSE$mnEMMu4n;sA)G(dV3TQAgAl1V#fXli`3`3oKr@?L5nkWM^|; z1r4E;feIFeR*-F=A-4;N-z0mRtKxvFXxmnAo4K4%C$)hLj_1fC|%-o zoT{FioK*>yzSf6OeieD>GLhEr-|E_e=S%f@8oIYo2n?v6dKeX;K8mVMVCagxv_2>g z4L}bgXCN0;V_L&dYUOG#H?#s;84Wk%DGXgE(t4p`XF-xKVm!AIJg6FC3R$m&q14LN zUT8?WAx8ft=x{?1O?bEDt=vZN_(=t3grUnsS}!-G$*fjF@Ya zTDjT_4ZF|Q_LVn|58O6b_$j3seHzhITu*7{S!gGEk1*G!M?+c`8q&SRuZ5p3Mm0`$ z6<(wU)8kJ)%V1TT-cuOr(U6wqhLmzvMn2IkeEUIDZ=UO(*(Z}-g~?P+7k3th9EyNK zkYPF_1FAvQ!>9o11_jqN0bJHiLJf6B1JJ|BfYb(tR*-0_GE-xF8ln5RwDgy`3x6t1gzMg*hX6BV^8ENWM?`&MD!q5s5P#I*%L+Ib%e{R-wk97|%E-vah z#$_5p>kpmde(8)b3DNt9=0C8kp5||mC*{QGs2J& zVitskuE}hJ(F4egFpNpZn@bE`fX1LY^XP?s4&=8o3i=<5W3J5zj_9exurarcg6&y4 zPFIWGoEyWCLlIDr7zXS<;wCVR7$|GA2!>N*6Q1v%t;tLDHB~hr<2$5QC4XfEL%!MD zfC3EtT-H}%xS9VyP1}jeH5n&GJLxT1`9hoZm_ucH1l)O;-WE0gX9Sj({?C4)SJ5MY sJlxFZ!|2BWT4pu^$V22I{%>ODBjEo0Ftg(W-aUE*FqUqHu{4qR2YH?%kpKVy literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis3-grey-right.bmp b/tools/Contrib/Graphics/Header/nsis3-grey-right.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4b935c77e494dc1c84998f098c61bf142c6dd2fd GIT binary patch literal 8932 zcmeI$y-(Xf7zXesEi{zkw$Ku2p?pKkmkF^tbnV{%2^67(k3@hVLV!pjF|Z&Zu`ni3xfizOz)ol!ez){Yp+Oo8iZE@7+cB^H;SGq8dYh$?mf3`oXRc z8pQM8y+Ds8ukY*$zwYktaC>`;o0}V4UtgnEtKsVE3e{>AmzS5QR4TZ*xWM`OInK_` zaC&-*lamva%Vm^GB^)0gqgX8B=;#QChle;gIKck?KKAzZu)Dj9ot+(QZ*QYeC?KED zBbUozYikReo156!*ueVwI@Z?Kkj-YXy1I&$l@%;6FJozG35$!1$Ye4|r_)$iSit=J zJm%)+FgrVoR4RpJGKra)86*-3Oixc^YHCXSpSCXx@FmL*T+bVqAg>^==OysGzy9C* ztLyVWm8nvFsk~am-ty!}N8pkPu)MxSpQu)VBCn_#qsPA6ed3DS-R-)@ZJW>)jk{sR z!k-3TtC?W1=Y+0ElZM5@fQE4vsS66mSsG@T!_+PZCRq;5Fzb5BT>_?90>)VIfs4bw zw&*fP8Os;0@I<`R-7SYW%MY%w)zDHVXWm10i$*~ zEC78^>zk}zVI-Rn-oftYN00i$;H=yj{5U$HoBgm%5}8f{YJXxN<* zU3_~a-M8x%%ovG%d9Uij7_|!yjJ3R;nh3RZ4-w}D2@^9>!5Hfmao5-den)5HYWO;v5oELhFeeU%vaCxP3|6P#R{Y<=`1bKO-bN`)x^8)?=iTGgG literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis3-grey.bmp b/tools/Contrib/Graphics/Header/nsis3-grey.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dbd7028735b671a0a15d32bc2d0b32ee0628ac1d GIT binary patch literal 8956 zcmeI0yH6W29LK+uLa(%?rL=`o3L!KQNJ2sal%res{!bv@;UQj%K)e|c3lb6xY#_ma zU}Heg0Tvb(1|%jbsO|Il0uj)h6x)^fNq1*m&hf|J-@|wQ`Rk7t%)D8EpR^L>Fv*bx zgWdmK0eI@H;|IAzkDHqtTwh<~>go!YmzTJ>xWM`OInK_`aC&-*lamu1A0OlB=m>|0 zhd4Mm!2bR|_V)I$ySs~>ogHj%Z)0m~3!9sp*x1;>`uaN7*4D7Px{8&R6)Z0=V`*s# zi;Ig`SXjXP{5I1-5j#>U1lIy#Dxkr50J z4`XO(2!n%z7#J8pe}6yv`uY%$$I;u{i=Lhyba!{7tE&s0ot^0D=sUdD)sU~ zfDtSKW<>p}xoj|o#lehdUa@j63yfniFoFdQxF}dnp|FY=!P0^&C)iN!td^DE36>6A zIl+S5@EcJes9HL35iCG}8BtBR7?uDdAy1=TyUel!~W#lotnzvaE> zq;UDNZ7?Gmta>M`QZ*Mi7zwH8H6jP{gXN0#f(6DhQGn$Ka}>wDk3<(y?4?!YIT*o` zTqnYJ>lfuhw!euN2nI&6By-*Rex!AkaWN-aX-U8smSnD$FwHY+yxvnTqcL12tlEqb zwPfp+S|@06|5p3@m2F>4lVzpyxF=40_VqK_y=RtBwWMHjxl-ec#g+hLSPV=qSE!ll zL5;^(y;UGM7{{Vua=B9C%U-G(n7|@nYPoDIfPlTVl(f$DGhE%e-Q?^v)g@C|ZFO9! zEXj8ialIFNO7}F1)a-xplJ($4(thEse0&gy|0s#esjHEDe0S$|b#lCAuI=cRxiQ@Q sv!j=r-kIy8t6t9gYUbwd=AU)-V=UliHkt1es?YowZbs16kM#|}UrkvsN&o-= literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis3-metro-right.bmp b/tools/Contrib/Graphics/Header/nsis3-metro-right.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0871426abd58098282793a055690034fdcfaf4c1 GIT binary patch literal 25820 zcmeI*PizcP90%}iBqSUZMN=g8FR2J25i}9;=i)+~xj5kLSOnYus!A&ql{iR~3wF`d_4NL_=zQcc1>u&c63{U(M|7Howj6WI8k1-Mr6y-@Nx`cDrSJ zWN#q(Sc`cDp6z&6;#m|Z#XJzWhVA7m#WT4Av+gRM3cCc@u<#FIHe|!Xu7xJXd8CLD z3cdumF6Fwk;1A*nP@QrPIftA>|4V>#Xr9AZ`}&Xf4&-Y=|_KdpfS@bLi@ULx#}v`grNTvXc#6)e~a> zWq4>3UL3ZC>(guwT_K z`u6mE_rW4I^hQsVtJLt_jXi_UuWA?tpm5VL+5z!)oI`IURfh0UG1>t&i~tNbE(kZ2 zQHhY34>_iy1A%Akw5`!YS^}eJ{m7%SpwM@qWu{PPDc}`_u@wV$ZF)o zA}|u*IC9A2rRL|%jD`TTg2ltH?jnt$>X|?Ko{4~^&+SzxZ8gmy8@g>sfWkz>2tcc* z#HyV$^5F#mVu20KO|q;)X*W#{9e^4}N?<}Vm5~koGn4{K83|BqbuhA_Pli3ME5tca zu%yqaQgr~PGqRyihNx-ZoLQ}Jf<{j*3mu(i??%|EDUEFCqv6>#ntmWQ^_*Vr=tkHL zu`C$F^`&&~<*_zzJf&@#SbL>aSBeVL!9st+2UjD|UBu|PX0i{KLXr)0Xb2W`5mbzc zb6|ZL#@+fZZ~OYBRW*Hi++x+vrVz5BH-IQtX%1nC$VnL!fXSgWO~W-2*WaUWukXg? z;YjmhV$3Fo@nf_*FJxH)8pCu(0!%2y<4VRcz|oOGZqs-cKN8j(0*cb;08A>%7;S*q zhYj<Fvd0LLN6Vea?B!Z@b+c^Bq5j0Tr~eQ#?eui;^RC&jkdKELhrRa>dW~fhy2LMT6CuxW=n#-u#9_~ky$&x-sscL* z8;8P}4-iX#J8%-J*;e>3ep1@cn%#`780tbY3(R zdlIgm&4w8}Gh+dwVb{40zrVb(GXkJ+voOkl&_<5Kj8K*WbVKm5Fe0FZ5db5#^I@dL zcCjILg+s#0(8QO3|B0XYsGtV~sW z7z#ibLPt+=8cGIU-xL9s{wNQjxR&G4WJ1k%HAFyRVqp}3@+c~*up!mTRNl!@0kkk; z1Y&~Y&_v;!PdC&8Y8e$bcoDhDe63CH4QiTb2%lU0{gE^=igD5lmO_F4 z=Pj0{tF=OIDI3bYK~2*QA>_1-c%b_;&;ys=EayGnUbaVrrQMgdV`JG6yTT#iWSGu~ zfMQU!FbY7Jpzt}31DCdntD(#|*r8WE{q4BtexEby@uGzzBta14}%*^p{w zD(`A2BCzZHM)-c=_qTTk-*uRlkJopLjVouWY-lo}<~teU5IQpav-?Wrr`!8dBmd+W z!!!(`p`%6ED4CHBv0Hp5=!OU=pe&3EplB&FvY}5ptWGqHoLrDTjnFb`0cA!uLy14!z?>WTPzF1zNbOU@6X0%75q$949NT&Qmv9bGYdnU>`g*~ z4eeaowQN|(zsHZ%EgY9|lJp|6=5p<>#+jBLFvp>#60e$4J-~*AJeE$WU5y)K=>d*I ijzj*Nd%5ocjzf;a-0y{!1I091#c`PbaX9*)O8x_PO^by9 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/nsis3-vintage-right.bmp b/tools/Contrib/Graphics/Header/nsis3-vintage-right.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bed344a808e0f4f754536845918bef97c938cc04 GIT binary patch literal 8996 zcmeI$J4_To7zgnG0m~av;J5>M9P*Uc0*AmJ$ieMtqQ=75BJq(3NKiqeQDao1@+dS~ z5H0MCi4EbA7#m|{;j>X2qm?!`CNy@4GqXE$uov(snB7FaWZ7kJ!~X7@Z{}Mzbg--x zEcUyADsnVMHjQj9B(w8hN&sKIvF#ye==S~NC;a^S4R;S6##B!)zP^5gp11@YiC568 zB;jasDvqab!HJAaoZOa;lUX_F%XXtbCl~#04+e6*81Urbls6xPdD}6VUx1;4A`BH4 z<8+Y^XNpU3c1J0OOUp1)R*sSK3Y@E`#QDl9T&S+Wg_>GitgFW*wE&N5a5j?$g8PhjLF*i1j z`H4x)jZfg&ox6B`?>=5Uc!*a|p5X2DG~Uh3;Qj0@KFrVK^UIg`_2UPAFD&5C;v$xo zmROz?M+V?Xma^$u-?%t6Uq0XZzK5)AHYvTeIK@7h?$+DS3^-?5=y0Wy0u8)EUg`3Wp<&VIz;o z^91eNJLn)9L57mC44BO>r7SWLeW^ytGnn13aX_bQ(d)|K; zOV-*y#rr~u^|iLh_*A%Lt*gbWjGg85R$hQ%NzXa_ezERlnq(ytE;=d&9~{g`4~6TDa9yyBf);27>euLJq2pkWW z&?ZIVL{v1|qhruvjzvdI98Si?<5YYiIunx6nV5{O

zLSkaSeLpR-etakL;9O$(> zaK_=pS!X)VrMYlEJp&gq-RN_B(4Uo!i`hB2l$(dkdHEQ~FTg-SA+8jc;A&Ypu2ocG zu-c13Zw-cOd>E;%!$@5{t~bcIA^UOD--KIDhcHT-ai`@lCfYmj=yVqz_w?dPUq7aX zNAPrL7&BwH@oaPq&+pyGiwEO)`EUZSCMWTBY6|bBr}2Jf2J^GCn4g=&x5Y(#Us}SC z**50$qEOehaOtJ~2X{4YFCN%Yy){iVzM{ zSR(WC5Dud(4wEe|(JmdvSQ<>W)Rzi(sW6SjV3b7+;8I{|mAvv|Da#NplPxAQaJS5f zqAVl0Otvbd9N-Itl9mx%ltl=K$rgjS7>mPb%PU!I+8t5Ii5P${?ymhf~1fwY|$>F!Dvf0rtvx8vlj@?i>NR*6FJOhHwo^05A80RScAIAYcR?Zy-p}D;&<)V z76=AYScY)1K~$$Dg)x>9T(UX2kXNP@N7FJwUa}?2SzD)9i6pUEDZKCLARgQo-lPsA z@$I7Pg8~!nV!g#-jKyGrUGeGyp}{nk0u$`gZ`BOOSrjJLrLzd3uo|Ve^iuu}7kA%| z4m@c})kT55I9I^1){!7rHGihG&Ow=&=U>{Awc$?0^TG{5+AsgPD`B0n`{Q)RT79?k g=K{~8cmB2i<`qM(;L;1_70N5P1cJNTxcvqE0thSOSO5S3 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/orange-nsis.bmp b/tools/Contrib/Graphics/Header/orange-nsis.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b4a0cf94b92d220b2d75b3ac2df52b4c5f1e5b25 GIT binary patch literal 9740 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/orange-r-nsis.bmp b/tools/Contrib/Graphics/Header/orange-r-nsis.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2da34f174f051dd82b1962eafac5ba8e85f48689 GIT binary patch literal 9740 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 Dj)1Nn literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp b/tools/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f215d77455b87f02b42afdbad857a445d37c107 GIT binary patch literal 9740 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 UQy>?9n1cB%g*O7@;b%Mk50Ge=o&W#< literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Header/orange-uninstall-r.bmp b/tools/Contrib/Graphics/Header/orange-uninstall-r.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1672afa6d3ba4625690277187b4bab8bd0abd738 GIT binary patch literal 9744 zcmb`N3tUun7RS$2vnw{HYqq)DZtJ5=Sp$R?6wE+F)>m)|ACa2TOAOOW*UWX*m9a~hr;7(##EFcx6s-ONdUfG-msc?5{`bl_j81iQ-( z7KaN){c$X)txho7U9hse3udf+57u5Zz?w=uL=Z2)>QfD{y;=jCe!2x8)|%ksIuq=^ zYKHw1GaQtf;qyid6yC5v5uPV*S>fwuD}00Jw=GsEYbSv(BcW1ZgKDJ>L|t~c+HHq= zjUBFQ9nfNMfXd>88OPP|^miJ_I-`Xbf9QZ!=k>6vLI>IBw2;m3hUF#K;FU9-kX3pU zp8DVWUWDeSQ`aGgrbs{OrH=W;lS?1NA02aMc8#U>yH*xfAx+>fn&n0tNWzhp$^;=b3u= z46jETEO6+m4hm}2@C9`*F~XM^^P@McP~3zkzCV7`3MCl-l14L}#2g%NFhD6@zrAIF z?=TnNw~}zWjf8I-bx?-aGnkj3@LJwM!a11@D)2ln$1C1f;fbCtR0npwsMx zF3h*WK!TQZfd+MFu({yDMH?V`$r^~y+Jss&!fuS^K8)r3?6=_{#_CJ_-bGR)e1+fl zGeHNOZXw~gSOz~f>4A^mrJ}sh3o2%QD z-3>~m5;{6MptZFX8X6ivDwV>uYu7+57K2bIgzD;QsI07nii!$2d-g1xK7ATWOG}}o zqy&x}IRg3l`H+{F2MW(|<<2|LpTBU|U1xv&#TQ48RQ&4GhYuevIC$`rhyJ^F@A%#0 z#*O`G%m?rPY3F+nzO&*RZN;EJp0VZ-;5YB z;_0W;(-$mQF!!%`Jo)64GiN3~{`kRo^ne~N3M`PTfa2P>H-G%Uk?X@T z?<3fQdGGuyH}{`gwoqIf5$yio-nTku)ykLdeIB`%AQ;Vc&zw2KhtHXloXl`N&T##C z@{q_$ctlSAb7(@n-WM+)7acH+*TaVkd|bPIT%Le!L#_vY@5eRj-se|5>*Y$jXZZZ( zahdby51TP{P9nyO3E1SwsEF9OxVYHZh)I!;hCjLJ{lSqc^z(WsF@e0B9 z=5OD)59391J>!WNV$Hr(5_TzOcHHuaVKZh-oj!f~-H#24ij9kj4#OjQN?gRGi6OuO zxG<4tdkgFUB`}(6-~vluIDGk~B3=TI_goRp7CS#`M&ytg5pgkLg@wF?1YTiLSWH}0 zBs-YFmq*1FUm^pAzi;n&T3}=P3am%?Jp#*EI6Si?Rm@LKNh)U;qGRGQcd=8#c-++H z=G2Ciqy%13bX>#`RHV8UkvwrqGNPvGcMkfL5}(a{O~ zrpCq_HyT@-_()b59Tzo(P5pbn^l>o)ql|(Pm`C^rmZK_`_3VMuS16 z*!NNXCl?h8wS#6$;k#<`km!H5wJ1Z`c9>@0z>|Sb#?BV+O z)Hh7HGScS8wYA@BUl9BOR|kOC+;&55`#uEG=|8 zmEuD>T*s+!B^R}}BM8T2GKrif6A5j2+eYwMxujD6c!dxc8X`oSZnVuv#j;zKCm8t2JF+ zT~6`!>(@I9lfqd2D}XDQzP?rc|oD*>{O~$mEXU% zNFtTiaSSSzTIN=%RCdlaskEG3Ug2z9!35T`bcb@*XGaotnNY7)DlX>beX!>t zt=0)@YwI{xrCKJENt8-A=UQzIH!MDiC5_>hUU_73*1;{^7%!K$s!XZ)eA}iCYmdM9 z)whSbyEU>p3d|uB)mF(Q5>8ERtuSFq1ZxFmu`n|5ywZ8}bJieBH7|=6 zYG0XEro3_nv9gwCJe9nxTcfdvYisN4IHLOc`dS&MroR3fH-^2O2oJ)=;;aL2iirIg z$;oA^&d(657_kx;YBXB8i-SnWLxEM{I{{WXY*`Esw_1D0E12*HyL1z;96frpOr@;M zVX*$PP^*>8b#C$HtG>fdL`O^t(Rr|P(X}DdMEbabI_m@e%^KZ&5U-`BrS0!hRjw$` zI67dMw3V^7D*&RaY`Xdi>2~ne3taDb1g;D2j;BA+sBR_JET^3Yvp>Q*+SY#I#@K8)k>1G zlwZQtud`BPil9vqu{AsUr9nrQxtUE^gJPV3mu5%4VS}iwmC3b4u_qBbPR;cZtvx*m`7hCZ@VcX z+%CJ!q(RRz81ZSu;T;MKm1U>k5bw6Q0t9wD<0ir=k=a#R${Y+v6B-3+VWLF^3y)vG zMTn`Z_zMGTit;GnU()L0eb!znj8g)#x|LCM6- zkcoAcL&eMK49sJI@GE{5T3|hMR-c2>Tz3hDok}HLLsM8<@6t`Wgd9OCKLM++Q2Juw zqL%JH<0j8Mv%jY31)>wX4Rgbm|MbGb$CFvQ(K75@oS3kUn5b|CjaM*%g=mTb$4##g zS30}ovaksgCOrDYnyqCTI*W8k!7SY*$w`WdWi9Oo#pSCF`)!Iwy_}-#mdjHSYXa_B zJ~DCQw1sO*fBu>BGOEzQaJf^9rm%KGG*-CF)kj}}0vqrkpAp!aR{_@`_m@3flczp0 zYi?S`n$ptCmnkdux3hn1_hzzPZuvJLVB#!cBTKPNq|F z-hEKSr2`g<%N)5H2BiX?6}qFE?*jH5V7ikOE`ny3M9&H8(W{ zp@MSp7iF!w|K#s-ckC?VhDC(h9SRQ*&gDy_Uu`(Brs&n>)kJ)}FJ8;C*S@_8^@VvH z&*5=jUU^^jxe{?o3NI!ybe+==SLmfX=(y=s+z=)RB84D$MJ050c7H9PzH-%`50`}nN z%^Tz%JPTJa;SYT2?%5)x_u$hOEa=7M*@I_GA-jM1HEUjH{RMmQ>3zBA9|zn97bAQ> efrWO~fTg?l9=u0j%#SJP-%sF##F6T(SXRNqo_qetqY)Z#EPYA(OSD|-Ky2v)}^+N z7OlIDXq7>0m9d0Yh#({aK@gNhK$e6DArK(@KKH#On6SM^?RU=0TMp;&%m4o0{l0s@ z%y@n9XrP8)e}FM~bp($CL|Wk0Yay#a2RRZQ+?DE~ zxJ3^SWO^uTH9(Er08MHmcuin~^GoAk>g8sLxFLhs-&*VlL#tNBAuIbOtOwoD3iH<*)(2%clZ4Y{K*AJ95~D*PrDo z;B&m*nWuo=cs*ha8@|Nr{RK+!@D76g`Eoc|sDwjBD%i(wgo6d`FniSoI8v;FBSrZ9 zt_(I@;KBB*xv=i&6*z{^k3CSqm)!es;=T$_6f5DITUD@f-x)YbYE&$T)1_)Sjem2t zObw^*%i(xI3!E)g!I=^zaPZl=ay9&j*Jp}b;XK}7KrItW6mY3R1BsP*;610X2`*P@ zAPKcidZ>a+rE<868ecA#!*x6-KT^XD)cV(2EpY3!ko>R>e#7(csQXPkr;D|4t6m2g zcw`cI#``Qh^D!QG8Zjn#2%Ge97mq@WO;Iz(2agh&0ZQ>Gk!s)}#;LSf3zcmKsKVn> zy8(*oq)?|YLM_Hmgy(vt5y}V|G^&gs#dtQzwa}_Hfeig6*O}mjC7*(C_$v4!M*)XX z=O0k#Q>fbo{N6v~cje@XVd!%&0=GsBmkaA5wXz*}_#HCDI!LQl03Vt28njS=oH><^ z(4^GEPf0(63cWkh|1}u&>~I+1;sytfp2q)a0-ezeTJ(6(imkA4;~}VRRzf@S+Nr^c!AD@kcOp5f9JcM+2PYFVAY@i3@JsYiCpE*393x!3Q3BU^ zwebBJE)>_8;ZlkbzCBt2$IqGIyLdA=yG($A1M^_mFf(|28{ny@27-sjDe&>hgP}v0 z!=gnRShr3O+qavcva$;H@BapN?D!naW-}NJ2GDA?pi-%zt*s4OT3SFNk$_k%hT7U% zC@(LE($Z2WDJg;C;$kQ)ECiuY2st@9kd>7M85tRnmX-!wE*Gv}zYa-BNpSAmIf##s zhh@u_!31W5&Bni*IC0{D0h1?B`PaXuO`A4-`t+GIXU=kVo{eM9oVjxsELiflWy_YY zSUq&@i1*(6;2+OD|H9_YTVDKZ$4fhRd3^cRKlki?dH={!qrM$|=+O7C9R1;kV<%3G zIr*30PoF+}_L*Owemd>u&HnxG5S9T9xqQ6*{QP`;CQTd=V8=CM#*BgFnBhEo4q}m9 z%U7&gJ#_d8#QKEf+Op*{6nNKe55(H@@;>A`F#6!3!z9kF1xxQ4DBzK+zZ7p_-c zIYR0+W{fqA$d#667e<1KUTh!V!13uES62=von#|rBcq3~ymStSIijC(+viS$`Twmp;R&u$a_;`MF z_|hSNUAElO_Kx-w1Y%kLG4)!9nTG}|K)FT#h9sFwN_D!31?K?)XRaRA0 zR8&90kBX{l@-oq75DFI4DXZGDSKqQK28N!?yPX^oV)X7STQ+|9)7y&^M*KYL2FX&! ztwgY@)Kv0@8|umnU%K*7$*Rn_aQ16!lMthJZrk+9`c*Lt=Y+jBGx1SPMHv_bm5-`Y zO{Uc9nu;ne8OS(h_M);qX4RhT#YitJ*Ed)GYmsaAtQmpTH8s_#I*q1ZWvWr5F;!O8 z)RegnijL~UWj8t6WqaDJN)Q?it-rim$sr;3QF2`%9+m zkt?>>NxLJf_C9IjTiFM$y`)?#7bl=xQ&VbiDT82?lq#skyV@$J4z6A%ZEIFN=8)|> zXH{lgB9X|bkq~=GcfCQ$H6^8vB&p@{WjG*(y5Tv^kBo|QSWNUfXf{6BIATmo@D zsaO9rf@o-Hlt^w}jf;*hC@5mJOC-&FF)p6xqNYBqnK5ge=pH3+}+V$4A!bW z*o#<|K+h#G$ug50i8I?aez@kszu&!lyt%o>T!dgk13x!ElP?yt?&aqTTyc6_!N6Yh zlQwA>4|*C(Ol4C!f#C$uBN+ii~n!>6q<% z$f}*zgk9FEB$mlU&lMjQ9Gom^IE7dVm{X^OwY11YCLx05AQpmU7T?YBjE-`DtJ9=y z$JK{Yh{Pf)&GcNcSk@&=8gH$lumafgWHOPcRV>W9+cEMyqnEnB_4c1MX(N}Sfu1YQ zd6sj0ljPRogs^i{C$YT-B2{a9yTMbOYyrE?4~>`?ORfn!vMOyUL}u0QOCd@xGXuTe z#kw^f-@^FJq@+tZIa-aVwXI#QP$=t#!g{e-kR38V!hPZ2$u%?s+cU|k1i^&sX@Fz880gC&mLHkhbJPG3tQ3hcU&o=a@f^OY@R&Qjppi2XP;7CK8$!XX}u zieq>7`Xdb{i(JIDBzi7|n6H<}tT_u4g;s4*ixdk7i+UgJxq4~jSQ}qm8%$On+bJWJ zo~u4rCXvY6~ zw>25}56ERO+TL4WQ*?u97&7xK=VvQX;ZrnI8 zuSxUXPr7{@<+80P#9SICF;F!I-*uGQSzQ+cWm5h#y?ZXkE(ZS!#3&o=JVo#b9j9dxlFAN)TacgE) zE|=;Q4(mf!we7xiTMAKRbX-3ET$!|4>q1F1=lq<6u(05B9bD@#ZrZ*p6FY@uM{aeG zw%p$7Fedq3N+c#dCyZD{87dLME!XwwxTD8w!-Bj8P z8%)f&*uII)En?sVIC6b`ebngRBG1RH`EcWwE5GbX6p}OKFl$zQ(o%>?9NFW|^&#ng z0bRKc_DftCvkKMQvHR;hCpRp%-+l63A*)z;qVX4-%MF=05wW`Hb+BKm+Z%6>xcI`B z&peV7-J;y%*7Ve1+TXWQh>2dlL4n>uK^=NM8?$D^M)ViP@sMzkll#h{d69x_7(6I4 zHg4Est|u#nm~c&);G3SF?(OaE6dKBzKc9ztjp+N&zrOzRf$T_5NQx8rCJuRXnO&vL zFst@9Y17A%+B&B8jweqE48m=_bWUifQ+9SXzn@c7M0nWTg|^L5hwRl;R<&+A_T09o zv?4!f{54^sZBN^>sok-s9T^!J7KWSJwmogTY~OiL+t$B4+}*BFH>D88M#n{Bb+^|} zZnpQj*Z#*#Ax2yz)2{ZiOYKGGi3sgugP}6RK%L)rbFI)mQR2H}-l7iM`foEQL5q8`%z@A1UNOWdU z87&}DX@N8FC5SDNL0qu}{NA4h^Y&kaS=m3q$mx-=WN#_Ne|rG(u4-WGbv>*tyb5`j z6(Gz%33(S~u(eJJo6onwk5`qj^M)2i1%|-SH?^=EuLHMraOf``9LDQtqYi$*r-x#Z z9`>LA3r;s1po}oUAGh0~s?`AJ#YVU+HNv6t3s5IB!nJl26kTe7nmb}>RGOeoYliU1 zD0q9+Xc#wPBIK@H4`Y9kz{u^lV8pt!Fn+%T`UlMi&dXyV;8zK}p1u!;CvJqGBT|Sd zl0)1X1;m|}!|b1`A@uvxFg5ou#23pU=J#e09K8(*CGC({s(`@H^C4t?0i@u+Ur?@u zfCXQIutEvKG6jtJI2C4ZItEKCm9Xrr61?9S2Wfw*Agw|HpH?X$yYSobSrwqbYZiJU62Ey0)y#A5~LQ=Ef zn~Q2#cR>ytFKZwuAq{dWn&I0k8rXbA4Vy2iVbetgd{?KzIH)1xNDah%l@D7mKHKWG zu%%878!APx4S)XQH7(?xZh#&5xgCF=e_abdV9a)5ocekXggrNPu(v@6d+>SxEgk$q z#tfeiV%(14wf7J044ZYd{+yl7}Ij{ z!nl?;>7cU309ANZw;7=Zuj&>()MA`3NsMq+W`cUWDjHg#u1yO!Fy0Mv6WoyM;kLpA zcU5M%hnGlgh8B$(#2Ei}y#4*0v_@4gFv&wcp2?5$VA zQRM#(eRsSOng7y4F*2WSGQf%YR;X;&!#U)-fJ|4Ar4Fy_$WnN&4sIjE9in79Df z!qn6yOIED>>|blvto`!qVe4PoxbfSUUwQSlty_P5eaFr>-rT)+?=Np37&-Frs4-)X zjy-<-%hoE$aQ4wZ^uuboN&GH zR2MG9a&Q@qOyrsx8a5+%cJPdTVWFWjqoQnjMbDcX_sJ)*xCUg#r7uriv69rwiR;zZ zkc*Pb#`P=3b<~M#BI-rSWz*|nx%!6on;p*QM@EK+P;4{fqA-p~6+5T@;-!&G7x(ub zfMhE^vvCbuKl~d~ulroKFgkHfnD9HP*TjkTFe2BTJ5FIF80a;JBBrh+oB!1dr@67b&E9vbu3hjk)q_~{zgTEBE?caE_ zXWQf3*u`E9xcY{LbKK-oqIYk?iOnm?lO2RmwiU!q5qd54_VN7!ZQs>iE^KeNSCK7C zba2_T1i^$WoMVzB*Yk%)T|L!65K=R@iM=5u#e>vp(z_hnhewJqY4L!pf%mywWG^yJ zxU?5(`%d;E^m@8D1~=*Cayg55{?|Rbw*OguVN4OpW@W!aV!h+R@vz;n1%7GXK7%{k zYimdLdbq4gFyIOi^}@v>O7`#0KbN=ZY<5P*`d!xorjS^ZCi@%wCsTJ**eF=0@8ij; z%(&WdAr~pv=JmPd%N8WY%$XcWF5H7PhNkza`^hO@O9x~zv=^1_F{^fGFGhOVxQZQe zr7lQ__MGwot{}EirBWH$LFB^}j$hg!ms}5@RS80;qw`mYNQR3=6g$Z^*W(PXDfjS& zz-77@Og`SDxO&{QJ8a+crj2hUQ?6#B*zPV;t|&oiX=yOqYF1!%qrjJ720o+l2W8== zjm1O{n>LkIX*O+!TvDmrt(myJ{rk-oHh0a963m=AlP?gkO%jR3$QB6r_$=^RN^v%dAQeS_W~H8m!1gG@iP$Jv)PvDNOqF}S0XOV2ir1I7sW(HOf4NJ zmC4$B$t}QpW&)B;c!n3x_sJSa)`T6lr)`DEtm?WIVyqY0xFXlh@daB()Q=vmlgru> zOQF_q5!tgJ7?9WREyTNR&{N!o?0QsT+47_UY9gW+Z8IcMz0{L6iTH^rB?HJ zJT}%h>GYj;ceSdktV$5RTzY?H;6koumQ1cxX>|C+LE|*r1HJ90B)N0gf4T;sk^vfRF~3o=|nuWnAIVdNrP&c%@|7~QW>4NoHuQ1VnPja9<~*tz{<*Lx!go1 z9#>4}EV)9Z(VI+KG!{AwBT3Sk?0UJd*P{%WY;q9?_tJA2MQ-h4%vo}L4YAMAYP1xO zkrWGE)|Ko2AjgHh9Iem;S=G+t_$WS3%ViN6+gio#y;MyAA~&8It%ZiSsfBu(*;v>6 z_~Pd1u$PnVA2F*EMD2N6F1KbZvc$dQ0p?bTo+k=u0!TF^_ui?Y#xe%*WEVpp6SS5=>vCQPg^=|^J$j!zjB*A>hny|Z8$Z5bt z-wIJ^mjf7bnLvzqRI!Swj3t$+%oZ*Vrmb8yIb_1o#Qja1%&J{lp{{e)?rK#MOm>MG z7pqBWmkSd=iG^<``5NeWA}eq>X@hbGy0BLl+q-CmaFTHL|hM9@5$N9RntEJWkn*aVtcT9ZaW*W8ZMMHkOR{{-jCo1qOa_=1l3-h(%kr zjH4cmCL)zw}d#|aO#XcU)1-ZR(qP`(=m&L5|O?*)E9aeWvO z6z2T^@yc)Bm?_zvwhs~R)~pSAz?}U*|URfT=)tOMTPRwUl_-DKd*s9 zbAE9513^++&bpyr-{<=OS|KJ})20PS^7)+PbLxQQx{N0TEXlN>+&M2_9NDPh@CavnNFH@9vj$At^z zNJ^pt{+g3R&Re(WVOADBE-0Yl8#l;VUQUiDPss7~DLsDpkem)+sHmXQk`nrT`7#Rs zcp5q4&r<#g3q3e($@om6#HCZozWigdEt^I*e6@f33EA+mub58u zl`|-5)l5oW^EstNd`)Sa7gPGr%PC>q*Oa*}oc`LpoUZNPOgZLVlznt3G(kJsrzel|TUxJeIg z<$#9*dQy6ao|cu+lY4jRG5@^0j4Gczrb~+^(8X^)q)TDoU@5-$<@kQ_Jtl?ErsVJE z(B*Y==~VcabanT7x)JpYInE!Yti#*rX7palIlhN-E&J(a%s$FHd5~_MK0^7ihk-wa z3h@0DCIJ71llWMv_+l&-Uphl~lFrfHlnYdno=Bw`Hhdp;#OpHM&(5T>tPJ4JqVl{O z^sq3O9u?=)!=gOeyJH(wJS?ZD5AIXxl_Y%6m#G}T?;-yA;xRmD4nN5%G6i~&Z z2jr-DN|jHa(Am?m^eApGeoqnIvTUX3BZu(cD5I0hKA_yAYv}>Fa9r3*lgE#yQtLXZ zEV)UJvI5EnubKauK#sgioR3P$QCUId_sb~j#&x=qnL&12B4z&YF6BkdB}c+q zD*5v#s!ZNPPcn{D-k*Ev>5W**{_7}J6sAzobvrp96jR0hBC0s`72*{K93_ENmG1{GdAL=VeyDL*TkZr;qH?7TQCx|2>x zxpA~4dORIS`;}ha<4JEOjixaL8|h%;U-a&td$cafM#H|0BB#?y1*pY;@msod>5`s3 zd-i%~`MbUQ_8riF#lS&>2d`W?WXP&jtMP{7y@xjp@BLx#fE_=m`8MUw1!LQdV5)~cQjlBflK)MJ6!@x@#RL> zDA2V|=o?$Iomw1q~k_I`qBJ_lAXr4mX+knfyZywzRAV zU1P?9E(xRHlC1xPvwrKRh@%n4FF5P9Fdhr;(F3p+9$kD2QRKAeFdDc(*OH!ZGhMww z7s9wA+$Ydtu?8w^ab^=}3k?nTR*&JDLXE6P7?JfVy*}JD0o5pU0T-v2UX4*R5k{tq z(`)|xuYNnsbOrZVwCJ0KN4s@Hc1avPS|Phyx0X1vNFeLAYV1E?;EEt~q^0!CnJ%SC z)<6xM+3fA@WAf|Z>l@(j;|*l~piGH`WPQZAaovAFc5xUdB8>m1hf$^1Ou+h#v;K=O z_wHr7_U+%Vs*!Om*0Vm$!^_L-Qcb}HSVC8?cY43eboCz;9vEp!Dm{hj$T@SXQ%9@6 z8N_+})UVaPebbj3HhiO_uL+#_YvKjEMl)Rq#1TVhOpiW!H)vWm| zEqs0A;!KJ!$$E$?=n_$#w0X+3kHMEK>p8nVXHne^y5{bIsP1ExU|gJDN4p{E4;*0e z3XApvE)_@61*zA=*k@q>;gJ@r)ndDGJ*VvM-Rswj(o#}}1vP2Z_yq%4z39YO0nA^t zUg(M#BVxaCBgAX-lpo#2YsR*1+oN3K^`^>t5!JV#UeNk(i&b`^8oeaFz}M1$2`-2# z==v67KXB0SNUPPFWIOj~S$X+```0q!Q%(a`BNwn{wQD*&1sGZo_n>tV8^%Dq6kS`U zOqu%AFDzc75-eWZkzTW(71d*1K^L-1uSVAT7-Sddav<*^_C1%dcrEYUyKf&BFYslt zS`yBkyZ4Y^d3kJjIAAquY%tc+;Q%o2IJ2K7s-Q~`JP|MI{&)iv+^R)%YfQ z5ULSb9~}Hg4;K5XJ&3bQ;o|f{Z{+Oi+owNzkm4)hufG&7K=Y~J*d16i58!f~@#RRa zRauYTsKo0d)_M-3(t1^mZsNsR&*>#SNYRD#Qew}d%GC%9Pg0B!uU>2=`t=()aNuC@ zm6T*pxN6{vGc|6k18dNrPSfT!8JDAzDb5@q)fmA&TMHxOQZ3t{3w*hH5Q~@6dV~>l z9hH_XSr73-IkpzQ6fUMqdJxhJxRUI4;JRA!NCNrLdrgBEUQoa!^;-%ohi6^yIDZi@ zz|t)as!?m%ZlY?0aqgQUs;U}~u$RzqLF0p;JR=@$K_M2 zPJe9R;S$0^xMy$JF!lqj2W>ILOVI_3v%`%p6-G|4u5eyjZ)7XMJ*ZVH zq&?^|a7hnREnE1q+rSs&!UJXg?b`wvkTtE&xM~pMh=03gVnCc3xKNE_IlVM1@uP&% z=t00WbEm5s=W!VKa}QEh0%7Eq&0d1TsLBz18KR16WV+C_hg^Z6$_lVews2-7O z1TLr-JFl=9cB;%4=RI(7Z> z>ML{&UI|>KHrqAedMt5_>(KNi23DtejTcQ%uK1Z+Jb&hOd5mi$!Z^-wgqt@{ovJ%8 z&8hB~wUet+SqV`I&aPv~da)90ahNX;k5=4+SiKZqJ;h3}N=Vi-E?a3SaHZdQjQ6P0 z+yQ*?t5>5|;FIhO(?6eoqIE+1RTve)Q26m#B(S)kRgb9(3`*!Se=060*+8D4zg=O@LNhG7?-r{&f>hZ^y2)I`HZz*=;C=p_yVr9 zI{<}O>0d`+HLOQ9>Y7YJO`86rt!hc_fs3or5U(vt>|OI2=8aiApJ{WDgi*2{bSd%T z^wO#kS6yspQRf-2(R|MA6%0S?HsbTY$t*A!zcJ=GGuihM*!S14g zk2wI&Yb?)aaD)oqy z<&fdlQs*_>wKNy5S^(t%(W*u)VAZR))tYz*A9IK}!tR=t*bL|OjIocBaaPS|t}q6_ zrPHO0mkb;ts=^o31uKE{;&B#q4PH6anvj~Cmz{PtucAWYX!czcE&R5w23*yjtHV8s z8LRK@uaDVmpv4gy<1DxAPq)vC;;~VxaWB$~=QA<(Mm4h7Ghbdj2r2bqzIygthH;jw zQBD7YR}Kla#upT%0@vBpj0}sVqO#J|Nrm0|AnWGM)adE>| z>Ut`^YQMw+t2OaP^?iIo);}}ODr0XrLWnB!rNoP!*S_Dx;&5+-NN_bu*0ZR3=}~09 zma$Xi9t6I$>3_KOvW6=~z4#{nuX%BqL^l_KRZYB6qb5Fn=-H|o(Styj>WyMltB%>M z^~T(IjK#}kC5)^$!U$Y4{WC6&F7P!p0Ju(O15=jv_vN5~PK>K_vxWdBy%H%lG{}Dx zoR^5#rU?*Lw=hZ%!nS0VD~xce?sUP}t1u$FU~yE(*3yOfl5I(E9%m)(v0DmdzB012 z+@1o~x+QQKjMZ=Azm~TphOwVmbz3q6^BG$lWWDr8jjqEBj&+5o%9zcAkc2VD0|SRH zULb%7)hH?f2Q6V_T)vl+FDGPYgHwaEX=R-snm%!NppSYJ{_w-4gSaf5l?Y&dn{&U)Z-8?)8;uZNLw z$sE*gzzW$BayhOVYDuzM?U}iS*e4bm?|iH&q~pskzuXWh*1ncskl%MQpBX&}J3?J0 zbmt`&hv||fj-;1}gj#wbyL9ITv4@k;dJrcvUM9}A;jNg@>|OWn(2b`+O+XmE1_2-9FDdvkum!>)f8|&la?QM>XT+j0vTZs?!tpwAh zZA zr?XRwglon58S$5MlM&ivEK$sXAy^VJE;ujE*l)(}5?cwEQ{BEjN^K?d<&tPU(u?Oa zY)fS6#dL)kzFx7#e93$!<1Aa8mArutwY2f{Y*W0oOP4l))uv4s?5<%HZT8~g{3{u! zFGmJqHy6N5FNBeMkSv#2yo}`%?+D#?abIfHsKTh`GhRV!7DqGo4kPV>i&wq-4+P>sBT zc8Mx_5X4Jwjaq)a!%@_5X&d`ci_>Pen0)X|CVxiv>T9+ZHhusGWEN|HjQ<=)eaz-+ zWLVk?dImdHcZ-9~IQMKN5}G5_#49XXSqVLelK0|N*+A=baUAh~_hnf8f*6~>AJExt z989|%Y%weeBX3JEpD8P0gt6*YLaln)5sFI42AZvea;mr_Jkx|UT3%-*-z~VBgT&Ht~o;4j0;`LO7JDYpvzeG zV(FzswMsR*&1X7gL=r~s*_zm|T0L}x&FSPWlocNze|pWD_d`Sd@t2=p$1aOIx2#>S zMP!_Rh+2BNtc143aXBw!y~`1D4^m<5ir)A&J7`xmvPeKvWj=Gq^{pDSCF`LQpsP!p zTj{_B^M!YU-N;R%twfg-|iD!z=0+qlzd-nUZ@8z{`C%e_!EuDdJexpWW%vL)>>5Whc zWWDRa@#!{L30bLDJ-lGdUZfnMZYAVS<#JvM8xfiikF)M!yj_%;mZjr5k#<(WYTG`b zE>^y^TY7j}ur680;?-RfFKq0UsJa~CwjEJCW{bm78~bOfQHdAd&lF!SvhXv;CF88C z8i)D%a&BpCok%;O!D>1&F!Bw+YSr4y78n;YIsz)8mN;;#ys_8BYdV_HGY1Z3>~&mn zKVvJw2M&z?T#ZPtD!6I~8wOev)zw2oLoXxcQ&Lk>ky{$9ws^kg$X9zXtb<*wfv{d1 z#uzqm?8GFH$s&Q_^LY)fDzcw@g;?FeP*g~N+x?2T=S z9IBq-YuaIk#g0(*M&Od`EZ_BTo7E1pIJk6g*Dk;>WW@T2h=}#0M7`9VN)9jT3~DTw zwBD#?y-o+VK!ZkJ;vD~uKa9*l6YPj^Pv2g|kH2pfO->Jr+2eFlyz~ije zv-L2tBiyMr_O7Lu95|RR7B2%AA6}}87tjq173Zb0UR|>hM~p|wj^?#-B-0e<(p`%l$kn*KC9lMpah5yd%`b%Q%C|#$H5KJG@}}cU_HzF5Z^NU9YP3 z5?pob_D2umVq~XUwHo;kOUQGhi?7B)m+n-N^%D_Bwdz&Je|D-fWd*Hpsa>4fN^lQy UGxls$wavJSpZ;St{PC{;0!F;pv;Y7A literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/arrow-install.ico b/tools/Contrib/Graphics/Icons/arrow-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..0441d5cef880ed99fb4a827ae09d004d88b8ae53 GIT binary patch literal 4710 zcmeH}O>WyT5QWE*Tcm)2`Uqa;7+w(F8t5sqNzb6;ubs%3x75a;?nFMn z6S-#&8m5uAM=vsHf2#u_90qgfF+>~0dk+xwUqavr4S$?smuwuTWgO)&jv_ypZo7f)2L8Vr*wMO99iBeQJYlqhaipAr7PSeR051{|x3$KwGtTX~TGUw9^iDaq zjXLiCL#+>x;;%o=*Z7@1Vc9cUsz-v_b=wB~sDq&Xs6&t8%jyx*)m&q;cW!p`CAflcl+j25-l#!9m!R@`c3 z;lvi8`HERx<9dcQfIMOi_(je0RPhV-#0@OpYI)X+X+EQJ-4Y^d9EDEd)eM8s=L{S+YM|t5O09> z`#D31q8>e3-!}tH7Ou#ma!SQ}=3@a{$OctD7uSE|3{xxX$NU&&C&}xl@GCFESB+wQ zU&b7*IF@Y#T29;sG~93#Q1gWAfQlDf1r%Q65|DX|b3o#2oC02zceaZ;yXSiSE^+l& r91}5L2Ww89IYuk4vhZ%jExO`1vHJY~MP7e_ug>@LA2I)z-&4K=J#6-L literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/arrow-uninstall.ico b/tools/Contrib/Graphics/Icons/arrow-uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..f3e7bfed3e2dd45a6b7e75ee3530916d20d72587 GIT binary patch literal 4710 zcmeHJJ8s-S4CP9jz}rbD(3ZYL09QGSD5^dVE8FW-^SG;>IxdFicwI7FK7c$y+uWuvF|Gd^5wo zpW^hwWI8Ev z9&UcqI-6qY<+mXFi(zBGyjLh{?|za=4%0Flfi>fb0odudgs1ly-mX{mP^NQ^KmM z+ym0jJ&Uv>|Hb~WaL*Zg^FDFLc);L&P334xXTF)g-OzlJ{Z3KUW?$|V*el=_&_?`| z2`hic6R&PJcnkOWZF%3i>|p6}@$qYCyJl-@uju2#g_3=5gko@RD7WQ@W+on@|ZjblU&z6XJ+n=sc1z}Fze3Q z`>eC}KIhysaQ6Yq;73hOjrJ{Nz^wo|$g4110qo_NZ5#cUa^Rav;YL4J1)L24Et12= zVdnX1fwZ<)GgL%Or;Vd!mo1GTK3=ve`^^cGPk5 z;u+=8lX4(aEzWT~KJPfA!X=MBFMgDH;w68nhvCIlk@0b#JdbOIC%yz@!F zz$+^&aq(CgF1}ugOK${l>CF(^YAhTt!@@fiSU3^D!b$Se5iFdsF@CZgi|4vA`TjO6 zetHL{J|4v4*dV4qe;AAB_hIJi!&vE;Jr5_m>N=s4$cfh8HO#s0UrjNtg35_0=(d!7|;-kR27$IEzI=;a5gmCf8Py6rq&f1(d#a66G zVC}j(()_4XVg1pLmfdTsM@-jHO8~!8Ih7l5)PQnwN~MGku#+2595OtYQ=-eT=uSZ- zH9BW-7|%&G=Wq!r)+>S3LV?sTfz&cVf$Q4n;ZhPkx~Y|}F0u*G`C69hTA0tsIzaS- ztONcem;HF+^TJ1E0h4cPd5Px@mv_{5U{&k)8pD5)Q|K*a;0KRmo zVwZ;h@s6yS;o2=+$!1Hj$$d@3Z=ANC`vkub2m}InbbB28?@iDr@YrAj9^cV`gF74W z)KDW1?6C2~P8&}S**LVz!lC;bapZmrPY*ZZ+1(bN+hbwmK^eC>&Ngi0ncX(WZH(-- z@xntkp5I5$rtdDV`FVG#;=LuP?=F|$YQ*KYZCp9t%yt8=oY;u*Q=2h<`euy3+k^2l zeV90V3nntRVdA~pG5NtZwmUKT;a!+KcQ>X!x`+3g?U?#x7uyhWpFO~~2f49FFg>;( z(_b9G^p^)Q^Hmx%=Z|3a+Y!wE@FM1Zdaj$JN(IC6?vV@^G-ZiF!+`Jj?ZsM3V2{+9p_Tm;QytJ zRjQ-FINS!bcM2#QTk7cHcA%q6pp>yPkITC{fX;4#GFIe5R}XXoT|F+etX$sH1$6hi zFuKcoyMdlQ7e;q^Uk~*yE{yK-E!2BcE{yK-R4?;WTT3u{iEd3X-@Ad|t}pT*AoDNZ GQ+@>p!8)4& literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/arrow2-uninstall.ico b/tools/Contrib/Graphics/Icons/arrow2-uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa6064fab4610999be7310f5e548ca3eb3528e54 GIT binary patch literal 4710 zcmeHJTTfh76#fQgxXsASIh@WoVHoHILJJHaL78F*R4&JuCYq@6+Ly*lY&DISw2)v1 zQdCS$@lunChG~52gXxQ!_Q}kz@DCI%l(sMeu~Q$8-`eM#xs)1hVxx(CGi$BA*0|r%`L$g>5!3d}g865^K@sEh{5d zp=dMW=UFc{O`D-BR_f9VNT)M-?&Bg`$>-#G+$*F;YRk`whbJiQCu_$asy|JcSi*>B17p4oj9?QJHJdQ&Ht@s)n|RXL#Pcm%IF{VPD;+<64f zuDc_}mpU2FA7!YyytjG8as{mn@Mv02%QahCvu5QqEhK(37rADQA=}U8G~p#IyycK| zZJr%0=Cg_N87?5iIYp?MB@3Bb#C`QMZvVW!ALpamPv)fTpW)n<8OpEY=f%$yeGXz7 z#|7T9@i%=nsih+A{N7BV-1+^sPulTS0=v7uJ?l$+CMep;w`afNIsXNjyfVdmfcxjp z0+p%4#CD_i-^!j@?%mF7Bqrz!L3(Px=EgPza_6!M`n z81ihtyNo$^7qk9nJRSc9&+fj8=k{I2i|xyJ`M@%cKD2^YA6~(011orAa0SPQuHns* zYj}HX74JU2ij#*|af&ka)OAcha~(4;+`#FVZs4P%H!=UpO`JWphO@`laPFNoeEHrw z(v$1>dU_p;Dc*VJa=7rxuekWd2EO}h6W>#QSlq;=^INz~;lE7Dq3tYpPT>D`0s%h} z@JAG)k!Um;j_TC9rt3TlzrWh&H<@Dk4AV3XBWwmWE_BW!y%81F)yyDI%5NA36U?9y z)-+QKYmJS(Z%BfvKBVmWFc;iH_=;*j6HIAf@XPjW5jNQ%DmMgF_*q^@I$-)E_5+xP z7LfKhxHG|yCV}LT zjq(I1NPckGL1}^;8w7?%Toe=B$jA`+Lj|}Ag}@>5!=pvm2}OT&nDwI*6XW9(R1`_D b-Ej$yvcBX2xUFdx_U1z9zd-h1zNh>F4bbGw literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/box-install.ico b/tools/Contrib/Graphics/Icons/box-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..fd6c7c1f3b12f56a3b89c3581f8bf739bdbd15c8 GIT binary patch literal 4710 zcmeHJX>3$g6#ib_q|!V7=M^(OwY`@_kQ;~ z=iK|wOx`(wfh-gh6sUQ$0n7x5LF__vHgG%ld_K(|&j1eP2-f^o7qH6>j20g%x9OL~ z5s0Xi-)EAZ|D=I&-B|}17Eo$kCg){tqpDV_>#-1%pV`o^@hq>gE^PxQtpUt+83?Y=fVmN9cyJhZ}-pQmv->^~rB4#zTe)YKs6|S){A^lkkZJh9Tu;XvX zbNub|T#mneA67y8eBMUYS;ybT;@=ZiHC3KX`L~8CPI=T_ePCY8Uks^$c>Ya~Ns;fn}Cu@XRRnsAWk%;iFEYO24KgOHXQ) zUP6>2{luu7fN}Q#HA|s-iwO^~zgPiW@-R@lihTxqjKGt?lyyd;&j>!l_?vRrZ@AIe zUWCRMidEk+cWW7YkC6zm|5#x69}8X^i|bz>ulkT?_9Bb7PewEKwjK4VC%J=tNz2Mbgsp(13nKcNWO)FiwKqsl+5v|>)9 zhs_C(Ag@`|RJ>_aSNZ*OL-QNz>!)7qCa-+Ss`#d9jH|A`I;3S*o|}AAlVTly!bFD- zHF|{CtbM*|)CT6+?&LixzT7TxejpHV0?aPdynTY)-!$qci^2RWE}wZ>eNkcG^QYHM z2?XZNy`aiBoQddre#7*79&u&$=&H&QrQW{hH_)K2wszdu3rAIsC|7*i`BgNi3j}CT zJ*raTJI^0d_cNVeR?keYe*RF%PLNpHzp0ue{Xt=yB#@R~yv-&J()c8sFi7QfWKvqx z0jWG3CdD9)@5dmW?`zPD?_c!csgp0)9^@r+tgH+X0X zT83`ti4#oEJj?XlNv0Q`XL|7*lW8)ouQ9D=U!}LMzC*bj(-+@- zN5A~Oy{E=V)0TDx+7L`@+Wh zqK0r78frw1=YQfm8$rNXsNIhUy=#BT>JK{l4^B}0$rYBr-;dzfN^(T#Q6iVcB%fPp z#Hs;#3&ldAB78p2IdjEZ;7XB!0nMCgdW-0OEPahlG%WNo!RUK{8W%wW1HvD?g>8S^ z-u4Hr;??|hz6O8wJm`WtzxDj}{Q7-V{%uqBRCzb$ziLA4_G~4rVM&PAYhwlF4Ya*q zSY@EGv||yJM8fMnEf+Sf8Cbk(GR@C3EkKu^W;%(PU5EoYC{i z*|T~^Ie(t%<(HV2UtwBVX1Z`e&n*`(GOb~DvFDeyb*8KDy^kOH9%XTsS?2ZEn66x5 zdgD!|Ywt2$zrI5^ZZLiL0n^7HF@630PjvHBrXOxssa$5-*kIb+WV&;QX={tATE)-N zmUadH&lS*fhP^gaA`us0_(GTy4)}Z?x7+2y{9#EVk%)_dF*-768+5r`77tc<7#N2m zBZH}6Z=mm(&)ubYA?N3XkCQQWI5L+>2ZIZl;~qEW7koj4jmH%qH=<*YXEK@e0+wSQ zw;{A*Rs49|h()7maFB&Qp9j3f+WcfJ8e0@P9mH#ZM`RVlia#|Odsy>>cuy7Ik^j-D zql|i<1wfGjpg^bNV&LHSF>vzD27CA>gT1`dpozsr{So(L>jo`Y%b+zY P27k%6A~7xet8>bq==+=B literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/classic-install.ico b/tools/Contrib/Graphics/Icons/classic-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..5afcc62e85ddfc493b85b04fd55426ab9f502765 GIT binary patch literal 1078 zcma)5F>c&25M22TP^olJP!;$W$qVv^JV6}^7=hT4hGAUF82*Gy1Hu9P#ue&Qsyh|7 zH?zBveTM`_RvIp6XGyJ=5>Z7LwB2q=?5ZOA4BxiKe_s%NL+lDMiL^jPml%nPjy72K z8i+)=DMoV`F{M%pya=o}G0P0VB_SCWOJ0pq7E3WfgvGq*waS5N4Z}|m8uin3?wOVI zWO}panP1kEJ_oy3R*6)zA|m!bC>v(!Qww|r);>k_@ShgZA_&?NnPH+Ay!7g%O~|rx ztXFS+avsXNxo|iBG#X}fq~GQ7-U9tDb}r2?hkI)w^yEUH55J5<4?d;&kZ&Jl2hl?a z-KX0@`JxjIPw`F90}?|gT=X#9Ji3%r?|DksPY-)ub)JI18TRurNjiz19)@wZ3w1^b z;5lFK$1HW{&ba$A=IFd%d2{r>mlNyA`z~il_8lx-ca|YK=3||mooY@{s86LUg`h< literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/classic-uninstall.ico b/tools/Contrib/Graphics/Icons/classic-uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..09532909ed74d815f65c765b309955f60ee53e0a GIT binary patch literal 1078 zcmb7?F>b>!3`M`20`BJAz?q8PqCG*cqip6TZM~9@5}->*j~%r=(0FNpXWG-L^4A0K&e#iMikzqhkDP%q<~r5tHDCb$Fsp_$U5w*MtAxiN z?(!)96w|zCl*`F+TQ)b7f_#0)El+-$=Jichp|V@uqRnKFcO1B}aB#6{F?|8{bI^mC;#k^J#Tq(Ry^56?uzbx%MgCZemy*r6fAY4O`ww1yM(-EO(EkAa mtXq92F4W%Z0vzttjJ&qgfoiGVfWdglN3=e1i*F3>yz{>o%}Y)I literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/llama-blue.ico b/tools/Contrib/Graphics/Icons/llama-blue.ico new file mode 100644 index 0000000000000000000000000000000000000000..08288b6ddbbc80c450f536548e26ffef32d79124 GIT binary patch literal 2238 zcmcJRcT|&U7KeZKvdE5O8{IR4)X0#c+7FcgPiK_CbM z0f`8R6e+xR z1X&j%eIc+C0EGle!IXqFFC}2EY@1$YO>bv3x4~M|7Y^#?_(}5sPHULL#n>80_fzo0 zVQrkT+XQb1O&qs2gT1X4Tx_X0ePSQUnZv`$20mwP;p65AFE0=1Elt9vRgsXJ*Neq- z-(ta>cbGSO7_(=INHYn!4>71~0%5k6jvdO$xU_L8u5O!;m~Z4k+pLO!t_+Ts3OJt1V4qV%sjm@=eYb$^yahD#-MDPI6LE(u5cIP-!rXQu%;yji z{l7)fIeP?qokED8JMOxef#nP9h`Xd)$h2!mTJ@+z(uZ%HTDq z30;kvfUi(XBk#l3;L)Y8@%V}YngZ9NIYAiRAGE^bRQAc-{It1Ai{3lBnuhZ4gb4Lq399_I+Y2tOB2Hvx^ z@PVU^4<*{@%{PD`S0As-^e{j^50vQO-UUlkNA5#a)KOH?kD;1=1kV!9Q4{Nkj;vka zXHwCeO2s3l2c9w=(2(hiey%=-xVjkT=|Om34}+EZ7_HLB$O9791{fzHs$Y-EdP7Xq z8bbVdJtR+zAbDzpDY8dh3`J}t4N0+)h>eX!N(>DdNmo#i@GEj|CL;ej4eZQ#WM^k1 zEiDZNnJLK6yMyxL0@M{GpegSHn(hRnwIm)b>=;xPrK7U62(>&mnrceGzn_lo`U3Pf za8OxUiMqO4)IO}l%X%JOKC44pb0gYXTfyhIqq(^mjn5nKrjdvKmWL4XAEK}01xC6a zW2CzQ!oGG01OoJQccH((AANnj5WRZ^(NI4I2L~Y>9>(P8M@){7KqL}jY-|kTiE&6I z5=>1^VM;89cv1u%DFe=Yg0)N`2*or|s%k&}3~%^$zCV0UoO#$C@$yP zy&S1uc!_uyilOV}>!~u&V_FUL)?3fl3oo&KI?{R1?gl;7ZKH8u_OvgeY5rwU*v+qh zuvlY0e?)L!n|N0vqiN48I{vTv4&jt&u!sNT5&xs8r}7UUCaW(!d9On-I4%~8$Atqu zA4kT!|MXeX^NSbt4vHk=NrG51E)jp`iv#}pVO%O__{>K-@P)GC|KaUxNN?gue;Jd1 z)*FXqk>_LoctUC?Mn}g+31gB8L6tUnKCZ@p_`1<4qKDqRA+z@G{qX2;%NaZ3-HeTc zvQv`SwCW+rq~v|;!GFj&{Ps3`J;q7E%_)E?u`n4Z57YikVBQ)7~NtZG* zU-XOaM-2^r$^0$q`-e|Dgrcsc0W%}YW)&nSM)|l=4b=TIe><UJfHJvIc zh_{EU6LtG0r8&Evr}_TV$!UvR-@zTOGq|}pJDHho-)1sLXI(>{{~l9QQ>{a~JIrRF zQb}g}whilabg-{2@1~{2Zu6bydv?#TXOD%2#Wx!aq(4vGe%+dPJ0tyb_D*XZo!Q?u zwzW3?7cUxe_nNGqO{!%;K~+uVQ&bfd73Rv+7@*JzET{nH1dzW9(!l?Tne!`1uTIia G+WU7|t@P6X literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/llama-grey.ico b/tools/Contrib/Graphics/Icons/llama-grey.ico new file mode 100644 index 0000000000000000000000000000000000000000..4749479fa7a93f5af53407a0dadc9516112882e8 GIT binary patch literal 2238 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 KcOEfZq5lO`eceR> literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-install-colorful.ico b/tools/Contrib/Graphics/Icons/modern-install-colorful.ico new file mode 100644 index 0000000000000000000000000000000000000000..2908f58be0f58154dc012697b5e80e133cc707a1 GIT binary patch literal 23558 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 SB^Jc8u4rgkXDr|rJpX@JLYu_^ literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-install-full.ico b/tools/Contrib/Graphics/Icons/modern-install-full.ico new file mode 100644 index 0000000000000000000000000000000000000000..3aa83e9f426548d9ba03e62af4276fdb27122ef4 GIT binary patch literal 23558 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-install.ico b/tools/Contrib/Graphics/Icons/modern-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..f8fbd5ffa910bd7e090becb3ec78fda3cfa4dd8f GIT binary patch literal 13902 zcmeHtcVJsZw)Y8P2`sR*WtXxK!tT3-fg*e%a$xx z$&%c=+$}d*l1psMvLwqz?lq3%#Mp6Sop-Kmvmp!YKHmHO`^Fy4ojYgdoS8fK&Tr=Y z0M@`dxclzAfeBBo0kENz$*zH0!R!|R@pNzf`sMPmn*eTE$K;pGMYjS>-v;p9b1V5@ z0Yu-sT7Ny5-3;*7W2^G(K}5}@K2CZV9TceKO9656O zXQV6j!K8;;U$blpW6f%GqkI2Jl&(em{y5!gvUVdqkM9C=y^=q+Zxfgw-40HtcY?Xg z9!Pe20%BZuf}8UxI1~IeoQyvWrxGln&F3cQiM$6e?kR|4Z3iBeMa6vyyvTjP3qJ}8 zAr`=kv4JF#4bC_Y-j#x4(EX;!RDiP%6WI#bx zCM0E*Q@goPT2utN`Q?x!se;nN5>Vv(fUGP4YRglgwm<~+k_?a+mw<1BFXUJILq=05 zq)K^^(i#Z?iWK0;DnTR@f>4$T74jqysgj^XD}>C(Tu5&&hqA6b=&t61qM8qirX;AX zO^0*!nV@LN2DMBC?aB=3ZWKYcRsibmY^Xk00Q#0(P;}>lytfQGG?Z`4hjvvZs5>e^ zt0{-J?n>zGs)GL3Oc?B}0PHG+Xr2nfa}*$!NI{sX2Vr&(h_bptnA-&fl{&~P?S-PM zK8pQhn-tQT8=y#04aGHbsH{^$wyp(=)QwQuu7GmoAe6UELUX+oA%VnTyu7UO@ zIaI4!pp{~MV;eLyt3cJ>3Y~3j(AutnR!s+}be%BJT@M3&El^`e{cm5)X?fKW&0oL8U>9Ey)>))+qhq}LcAHdDO*}C`CLCbHRV|}&r z`Flg)m!ItV`otLvv)!M6`of>@{RnRRug|_be)Px}&p-302k!sX7P$4d+s-7MJ$c}r zw>Lcf>stcgkK4H!S%UbK^z`&(e_MbLU*$PJ`ttABzxdcAnSSq*0Z;h4IXKgwqfNRU zV;{Wa&KHTq>6xisrYyh*uk7&QC3$_Yl4X+c@aW~7(G_6kE&v0qP13crRM0ok6sg$l z`nYnRkzr(+I>xt`*Q50$w~^xNdgMlH-D>#1UXNDWT}jv3+FC4MhTsehKC>Dv-=Mt3 z^5R5;MuGCSH|ANU#cR0&Q%;MW#cGQyd4QD$eyV;a1|IqtE1*Y)oD=)(7&u#_VFK>a|7R-~xvZ?FajlN5SswVQ}Al9|YUp37j);0`K%k5NQ2(;5dB%(biu; zlGQd~I~@dHdcMgn``~EY9xxMs4o;>)1J4pL%|K}xU#@VU0Y5g!Nloa2y?Vhb^4_8<@(f}G@Iki@rx(lk2|kYXR&zUJqxTo59=82b@AYz`>6P*6E($P{IK#fdE{Jv%#_65B$75 zAw19v;@LhB;L8S|m?+>xvmqtI6Oy9>AdwdY0!}n!#1ejD$5EaGS#dGIO9_DZOu|}) z9Ku;Xke}uQDFp#gD)ED)^l-?^jDX}6E{GF(kerCGV+R{ATN(_SU!|f{d`F!6c-jld1)zBXZaEy^MS^4HmJ%YVXQnF zs?*a!UYG|BW#tgq=m#-MZ*Z&UKxk78#J92ulleocG6p2gY)Eg7fP#*A2x-iQh$ayP z$R!ZlR0yf{A`o_@LXk!UV!9`3Dh08+3`+Hc1#8*RCXE7=M?rOU5-95hP+OM{iUu)g zlwzps6oN*R2GZIBXqFLXYb*e%tQ6`R%bUQ`FgrPYvsLSmf(N@PRO&`<|zg%ax2O3-!HLqlT+GvzP$D7v#F#<8Z*9kW2zhae5^N^8hG&5Kfm^lq*D3M@`;H7Lw{e6^-C`# z0mS_3w!gmiu9ZpPtWp{Ok6-&u3=H(;=LcK9`m6&$;9U>D{-#h|RYew7HY=qy)dr?C zC)m;Qjc2I~tVh=WAtfz6uSzagG&j@K=_{bp97ji{{2?lT^s&8y)WV{oqUq@i7cR(i za&kmeD73VE_vL4PYbyUka%yf~o?I@MN*kq)mX_A@D zstiXX;>E=)SDA2Ser|Bkg^B@oeVs9|IHR4rJ;Li#r)}ChMs_=Y z=6v<)+@NY1P#!)+<#X-ZKX(0mN83lPACG^c*}87&>b!orIyKeABE)hp+9t6+CU>fmmV?17nug$0thGCAz3 zy{@+DQs=z;n>|@sy_1vU5zaSMUXcxRa{9)_#oe8j%>Ou;0L;u?%Lf&-)Dp&cdja54 z0;hK|(Lf+o3c%nK6Gm|()bLZ0Y*03DcF(8*|hiQ{(o3M+k=}=^5ok=x=Q=X%^ zkK%VY<(HIM4QuFvi4Oe&!i?al;09=cPMg`=*EBy?0)MhacMs zzkljWc;c_8;k9?|3A_9QjvdVp8X8$P96d~TQhJZJR7v<*AVY?H}LImhdk#s z5WVMb5P0+{h&lQSaL&F3GRHL#dFVah*uM|n_FqA)-520_>NEt|9fv3vGjKPz1(uBi z9P`}*&JkO{%zqb{vA+bD*j;ce<3q5Qd;~|cc7Y9H9c%Ana3tX;4J&cx{6?-yOhZ?*c*8SCE^q7ebQ00l%`(f$Mh!;v$biu$vP^ z``AKU6yY%j8wFZJQmie6h)zI!>Iv|w*ar!z_7GHh7I?WfAWl6Bd4l7ROc<#|Y(p5y z5hVFeP$T&U=Ca-cW7b}1&OZU#l4DRqn>l5%Js1lPf>+H+h^Rge{&jW`Tki;bnLVha z4)B*(!(hvfVEFowKUi1>!scC7uBAZ3PYZm}ZUJUF;2_&>u5snc;C7mw`I|NYN$p?`_0!4M@ zAXF7XDV-11*RY|zmIKCmA22Gp(BBmY^7>T5F(POn?4#9+p+Q~o8s6eaJz<|CU z=5@``-_r&2R7YWuLr1?H6oWcY4|l_mL21G(^ZjZ#M|edyG6Z9j6EH?NWoG6AVU`(~ zq%)(Li}dyQzYDtmxT%EL@NgFW`BRAfchz*UEboBusJMECLcr%lFjam+kuKKDJ2JW-1zoyZ~28M^?@)|MSQsT_UrqQ;Q5Em zd-f&OE61iTuZS}h7?TzzCr5`XxZ&QPbN;D;_4`d*_L(Kill_DmYA$mwzp4RK6vzKP0jK5-+AkI_rDQK;$%=y zIX8U!*6%Fxy5}ET_KB0^z;HF-cueQ6tMO4l|hYt{O%7n z?=eeGmNhps1}P&{s&lm|#~&nl5}z3F>+UY+25jH7qQLi_J3rX`&4HxkYQmaikiaBg zbC~4Gn2FK8p6+r+e(Q1%bdTSC=aV0Qb0Dm`TGrf33IvI!_DMdRj3H~N`C@M1-mRPX zOpjy#_^YS>^zp9K2c%S?wY9CiKH}SN&$kIv9{v@NTJP=crRIx+LU(RkZ+d9{_uTc= z3txP_KRa7mB9pbZx7V9lSXdl8a%4yN@aSl7H`97CmyzG}InzGto~NIG@hkJp?Cjiz zh6ZI*YioPEl3sx>GKJ|WNf&b?BSUv@+q6EFk-zu3mrtA$XXccZl{GXpHjR-AB~_?U zP(LM%bR>mPlRVP_-+Nzr`4y2UqqMAwLPtl(SQE)B6y@E;#f)?oH;WM``9~g#BYFS7 zzU1PXmR?X=NzyY+VBqJ)vW%?K;+#;D%p~E^{kwNZD`@O!=#b0n z8X5vaLxbrrbbs*f{q(nM%jQQOVCI}Z+4JftkvJ!(l<5E?Ew7WyOM-#|L;ZqHVfWtM zJN9nd^vDB@JxqUJJaNiAGbgvKp`%0IUdMEQ>MH{buB zr~mTomnUgJ8S$wp8XnRhZ-|Nwq8b4dcJAG|ZO67vA3pS7%y_czdE%Kre{%A4CW%kc zbfX||BKf#DF1MJ=B^{yOdv|QxvgwhBP251pX#K#1(ytjXL&u7#;3_t!i7uUS}%D&l!MN^o&bcrzk0t1Gbuyk#n!qAXj z9}~~WgYSKgX?c~sgCtIv*tobbw?H*Wei`6jy~b2vE}6uaj7y7z zmKQEDfSdUvai#*vJFgrSgV%j-c}2Y>uODBEvEp6gImA0TROqbO(>xy@+ef!VCJpI3 zotDi3!g>yQ`MtACi%y-oJ8rWYKYK^K24_WwuTN}u|Ll-ndu?93pw-W7^h5I+?KQ1tUhAPDaZU6M%Z#rNX)w$)V@Lnf z^Yd4k3mQl!nbtYQd}sWs2CL|z{?(^?&Ge{Ney&ZA-`F}+hh-J*ZmO|(<=WLN*Os3y zb@f{^=AT1zotgxDE9aOZ$>8jz#f8P?*+8aDYI)J$eVMP5W-i%24$jU+MZLZK{e!bK z)uyMrH0&R4e7WW@)o^llc6WC#?42AR*YKjFd80QpdP9~M?cm_xL?N02`v;fa8)^Xb zP#7N{`Iq}YF{vAEz?hWLML$L+b^T{b z)o3>cK>ISPxRR2O#Dun1Q}UY_nDW(>d?`{U|6?ib(@f?6+w{8j4J-OgDcNDN@4D1v zKiRw54^zLWKc@at|B$Kgx;!3C2Box}WKwF-G(J@EE+$VEP2)!cw>-WJv?-?hrf?&V zVLdfUXX`hclArt;8X9_t7M~9|oES@5emtWh!aNhW+%x6n|FX2S z^gWihD?fqfGgwoTwn#o?Bl&TSa!K*k3?6qRI?zv4Sy{R9+i$;JKHy(zig4d;sRI69 zf44Jg^1U0$?~LTPMe>Ow@dl9my{Mr`zH^KTVfAEXr0u!B4W>{jLl}kJaJTpvjs@{2t`T1Vi3@<_|3~uUqpG_K$#;+B-zS~9 zNSpyA9sv@E0g2;)#Hqlf0DE3yEa&tIp7}N6OdxR#khla$TmU3)01`(4iDQ7of50RW z3yC9v#J51=Um)=_Fu~V4LCjCxZyxyN72;wbaTTz&rxMBUj>H#0;u0Y74v_c{NL&ac z?gSFo0*S+c#Q#7(J19`0P`qsCVK+eB1|{KwJWftc zBl+=>xB?iOEnlpts@_INgm(pc`Nt3k!$^LAB<=wc?*oaOfyDVh;(s9VHIO(UNSqKP z-#!xG09mo=3VMDIFms@#rR8~dj{r6C5sbuFK;kkWaTk!d3`jf%Bz^-Dw*iUsKsHQa zYC+{?(!G_byBZ{g#h(A!9#wSe?&tr)=5=P=P7>U1Ntf*BiaQRvC%9^^5f2i(i8_akRT75G~ zkYmG6&J2u8%?;s;^F7O}YCk0;^e^u(<7bxA_sfmGflT~&fsv6?G*BI;E^{8Xp5jJ| zYfM+v&fS#x8G-2+^G*>K{u8}dZ|CLZeMD~g?IMwACli_Lf`Wq0H8nMFXtmlWCMG6+ z{WH}3OBLq(L)(S*bQ=6tVq)SRA0HokCrA5eCnp=Rvx`lxtDAkko4b9!hl5?Nr-Pl? z)5VERTV`v4K=5TcBggXco$?PG?31rAq|d>b|d-bkbJl(7VzoY+>HZ0J*XvHn(Ad(R#=2-f)tDkbRYM2 zao`Ds!Y>HLJoZyIFwcw6=kK<)vP=wewiru^IkQxj?~mkf!%kXz41MQtbVQHi<9(=9 zR3iC!k^Ic~#%nKOc18vc8w^N3E!3z~sBDlSowp%hkZg<#cE1?l?wH2R)gK!N<{2^T ztF5(7q?hf9;UxNwOVS)sQ5A>ezr$X=9ES%xaeS-?74kA9UonowuEkOIS|p!0lCRrj zLw_%Q8}(hNQnjK?QIFY0`Iwj-gWMp;OTMlS$;`9(q4_}Hy64E{Z|iJ+qKoUdZ;5=$ zSXbbW?KJLPsxmZmlm3A=Y*bbt`L%H}njl5Ya-5-S^10*7FTIHQxw+WW-Gw@RC$^}X zvAjWwqJnfxNC?Jwf6Lh*e?M17*Y(d~aB%S9l$4aOEsmee4|UvsjeOu(nP!76CE=)5 zW?_%21PwYVl5Y^nw~gf6M)GYV`O*Ge8}bE}Z)M`d1nKbpCQ5&5JM2o;aCrb$aJDR@f()&Od^+g&s&gU)0M5 zXrQ%npraUvx@9=r*NA0Vk%&E|h@Dx84Rl>_42kD}EFT~2?&(5xmlm5eDy(jA!GdNP zrYkE^AkD($^l;>cox~`YqiSJl>Q~HnQm@zlf%fE9)&~yu5Jv(%qCdvO)Pq=D*LBNkq>e8wY6~40e=bq0k-2+cR*qS&Za=N8&ah@imbA``D;y$BK?d%xj~5 zw^XCJsRV`c928XYF(oey6L?k_=ef%m;$o4(e50A@Y;DK2IK6kCcpXUG3M5_yifdUY zq32uG5{HU50k)mXr1wCA{q2P`CkTJF=Aedb>S)hK^0_1V-m$W|9*f%Km_d3)%3>5M z@-S7Fj{K@*dj7GPk{f^tNw$QMzQl0rJ?({sg`1eQ#rdptl7+{SMdFa4OSLUVD!nn~ zTsY>cldx1LLTOh9Hgx6SxgH62c9&px2fYvN64bR8VrxeslCPg^mC|!ALs63iMU4e0 zs1>82n)Ft3Nq02zi^Gt36__9({WQnfr#~6W$jJDN!N@KamMP}`=2y+ioRGL2NW2A1 zr1_me^Gnht!HVv3tnHJc+)#&2hI(x6m!XQT)m>6l>Pj$OkxDv+C~oAVxIP|*RZ%Fc zj6_jo1PaSSQCJ#?sS*}Fe;4`=97E#2V653Y6U_IJS@1FzVo&CjAU%a5-z8VBu=EcsTzo5`PDYBZF~` z-bh>xB(4TlYem?k&mq0}*hLt)hn`8VCY5ls5SukANc<5@$me20b_6D*24W)Lm+-I; zMK4U^yI@ix>5e;%iQE%NJRjuPzlRZr-y37bpIPJGY#n0GSni%bBHn?HrMr-LIvC&J zh`BA{SlubabNV9G^;OaOBc(O26#KgJQLm%9r%S`uE+LkcrJy*E@OVDqXbA@sGa~36 z4#p&bA10-EU?R^J6QfRGLfAp%`RqXAIAQ4VZ3YH2sZ^?GSngha*2lk@Ig$1SI+yLm z(3-O-PzGYDN`&ow4cIf(frG<39O&=Bo-PIIHTBq`uEb_lF)C^PojX^K4UJ`3(^Q6~ z&1G27SVG_20veMv@m(E3QQUG#dosk`I3d8Jnqo2LGqPDj7b>=(FiHSX7cj&mD zctu7x85@ZgL(jep6+>F=KR^!#XXRuj&0c%y~v8Z_xiJO8!>C&apC@zP=igZ$Xr$i#zWPj2! z-yz6t(XF0`oaS7bbB)+NHG*T8XK;G{GS1A;;f2eWaGY%Doft;l_yFxg$d0i-9GjXj z?L(No2stUPix+Tg`~vNnW>D5XjXAPWBt8wgMx{;hQ$;6MaVmN1pQe*hXRD)@!^EpH z5;q7X-7VNZGl?x-!zjvY!iIAiB;FdP<&`2XU%s{UOrqav;0!AzsC18#Bv%Z+7Ih z;D#J}@0xMs;stC{jUjP^kT_xZ!W*6#6JLqM3q#_EA@PNfcw}_13OBszfwlD=NPIFB zrYn#*Wk|d`ll}`AX0XRFPWxL8I)-OlN=O!1(R2UZs(vPAuo;gVXJ&oKu8WnHdX3*+ zi+xjL*r}hwz$i5m2MrTNdQ8pk!Ya7|*~x0;3e^~&)`{gc1|*&uHnt3*nD%1{sX8Q1 z6Y|C9O!}GU(%ol3;xrjO0wU9zXLvRicBiDc_@f`fU(6UV&w@ zy+&|#b%@D6| zDYmH;^Y!#D(08Go-aF02Aibl*I61xi-km=`Mf-wL)Dixys8brllX7P~gJXmxrDa=& zhld~hH)_9E%$!@1y^j?Z6m9kM4G%eMjBSR~m``hAlds zvAsiQlquVm((|hp{h|buuKw(bgydAK*4EbN=$r5}cfQMWqO-H}>B2(E)`)PftG!ED z_Gzc^#*?m5+EYGpJ!b-v`#gdLJs$pvS{D{a=^GrIlq^U))gYI@_CM|O_XgmG%e#h4_0IZYJ mu_hDU==gw%@IMTz^`umn;#vc>NoTHi(J|>Ne+N;z7XKSu^X9ey literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico b/tools/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico new file mode 100644 index 0000000000000000000000000000000000000000..cd9227971c3731d85cb8e64bcfb6fee2197492b5 GIT binary patch literal 23558 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-uninstall-blue.ico b/tools/Contrib/Graphics/Icons/modern-uninstall-blue.ico new file mode 100644 index 0000000000000000000000000000000000000000..77031b58eaea4cea614e0e164b042c84f3ea0755 GIT binary patch literal 13902 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 JYRuL1{{c5`wW|OC literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-uninstall-colorful.ico b/tools/Contrib/Graphics/Icons/modern-uninstall-colorful.ico new file mode 100644 index 0000000000000000000000000000000000000000..461035cc2c3fef9a2b405435f18557d31c6fc4ab GIT binary patch literal 23558 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/modern-uninstall-full.ico b/tools/Contrib/Graphics/Icons/modern-uninstall-full.ico new file mode 100644 index 0000000000000000000000000000000000000000..a134f586c76a971b26dd8706ce3260cd7c4ab442 GIT binary patch literal 23558 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\uX% zK(Zqxjx^!fh+eYE+UUJ&QP!;trL783+8~4MoEQ|7^ub-r3{heI*^Zo?91*^@s4AF5 zyuZ?Vj<_R8TnF6bdk*)9C!_^NRr62}791*GGi$U;1lQh{f)>d~yA841Tn!tpV>b^sm2x=>NG z2^Ex^@Q79;N*=DmJv8>!+#2v~cqJ-3=b(ah8XmGt!2`yLc)&0Y<#eJ@N-YS*_Bi0K zue5OAM+dL-`H-*Y>hi{s?{0E<_=>(K66XU~`jZ_Rk&eXIK;mhjac(8r6;`8raV-+3 z0EtV0d4-LbPIHl8bQ7L(twnXmQao;$jR&<7QTlik?pKZ=+cX^a9S+8Qhy1CZ`XKRa zP;9Fu?pUOXV(-b!KcCwS>WZe}@6)&>-VPG)1XsFJ9r;Hf@ka1ud=3%^0|RrbFebkS zvkPmmB)1&PsZDb8s_9w<>e`jz0i!~c(oRQ7`FNC&i9!jvNE%1sC?OSu65`${A?$|Y zJDrd?M@T#*6#d}vRbKymjn`7K4ESh~!M&Fibnp{H10>E161N43$AZKI!SK9#%q(fc zQb9Xb7B*oi+26U@RhX1rj>P{!;_RTpi2{^7k%PqVp|(gtaXHdMHX0@NhoQKLFN*){ zgnKqvq3Aa{NL(lsTckF^ZKlr7&TkEM9UYe}G?;wtupTZnF~fCs9w_4*hs2Y?Xh9Da z){S6I!zHY$xPS#&y_lQUh4G247!ucjel#w^!<*65zX=@zo6tC<2~YYrqOyGrifIW@ zRJ9OAj%4C4$r#+RJrK99bVA~1;oi-b^_7*CKk|9l$2&xG<9Fr*#F=7?+|u#KAOW>~ zGy2wE!m{(Xv4!?Jouf0@d0`qWyKZ4d(^X8M^){w~_HGoKx^81n&lK4M6lhP-+c%AU zv@fV{o5q-&StPCsI>t>S@o%`EG>9`0%y6*l}S7i#u;(X4`d4Y`Kc@EmyF$cLLAT^LQ8- zcw*BJ4$jc|EVgybVq)GbxX?q%9nx3?OtwOm&<|rub zLtVoNv~x_RJz^l*I>h0H3$xflIuK_EiI0TD=VGD<;z}zktABj9{*nLj&)L~|qI-8+ zWPK}~@@S1m6`n{xkBy_VSlMzN9etaScw$I=H+1nULk)vmJVyP@)TPkEEkJQP6vPzHOa+dhoPqGX_TuVnFO5rqJ5z6xfTdVSVU!?mVXDjiG{i z4GPMy(EffH1HuN#Mrgy}a~*i`;_Un$v7q!S5;u*>DTOCCHMOkztzAyu-9I)qHvOQj z>FT|HefV|avoVA00ZePYj*%%BFr#1$tDA4q{+Dd4>`@F&9LDsr%NP_lgyl8Y(Ld}w zHnrTEkMoKyV+iSL=hlTow7;vWzK&W}ZI9QB$M$eO{VI$c(4Rl^Zi4{@2L_&;clS&p zaoMq+{1ld6eUI1dP8{_1OVRvW_9uTnKL`nXk962|T-hyX$+rPx->a8DmWk?M#M#1h z+P^lCz0)={g&p+FP72+$haILm9v!{&G|ZA7GxK}%sv7chIP^Xel1=XN@lVy@d#U+{ z{DU7}54pXZx`FwACCw+p?59#Rz66WTS=91E(X=`>wHh#S=zHg~;>d@DFvM%h{n=>RV zp57-ckl?- zfu9!@6>X>b{E62wUz;ypytshs^KITA|BEX9!=m{7$lH;RS?)t1y@V1H5~KqH0#w}G z+)j}%#K6+h($xIPVZkH%w#|(D4EUa(z(4JfkdUJ(DJgq-KWT4oUq<`u1>6ty4gqXZs_8}?KWdb9?5L?g`M5=;nubk{<_Wu69<)?! zYfi~oSDlixC_SlQnsY|gD9Xsd$etMXdi-6uPo%N2@rMf+E_}-EhW}8_zsgQ+{6{{< zcztudy}iA)jE#-0HB`@pDjqa0K61#mQ(eXT@|jc7(?&+=4=k+m9@#q!n44E6bMvlZ zE>;!HRY~yJK|X)Z;y~IRqXSXbbmiQ;&&t_Wol!G9N9|+o@9(e5-=m|W<2ydr|8^bx zE2aL)3%p&=pFh92q@-kPXlSUCsi~FbYN;`7lm$?6w`w-j$L@px`PFow4&G9MkLM@Gmy)EptCpp`WZ>*u2aYL zqp9DSMMXu)bNi9^Pd>i>Ni~00jPJpDeWa(Si}Sushnw6!of64iZdc{^2F_`zMl*A> zO!V|DXAzN2n3~#&d3n89QaZ>gDu=P6dW3u)BdnbK4#jaJm=`h3h}VQkKK)4CCq|qv zBpw-4-<$nNYggE`+HUJM9UUDf-oClHxx&4@y-WYyHG;QceSQ5Js*givrskGM4r|4T zZ?))?6AEIA(jiRmWCC-v%VQydRV*p7jTIL5v+}ZGR#!L5T3W_gN5@sx-F1FQL?ab&@9aEMsWe0a>F!de26B-Ko8P=Az=CqHK zZf$K{&g=1aEBJ3*e6r3r{tyunpx{WbUX z8X20|$w}xG?q211YtLF&rYPabjJ2X^JZ7;_-*T1`*UXCY`dDq{2qXU?>+HJ9I=aVL zee)0#RCcpmK|9MXX=i!Govc*Q&l+nlvX16!tiACDt1G|CO7g~7YTN}D>fgs)96Fe; zUOhW>q?8dalF9xQcwbf0y2;YS)}H2PDZZ!qN8{m{Uz__MEG?}~4@jNP*uLEQhR6zg zrXb>kx{5)})hG>vT#7J0yq4vqcVR{8Fg7<_Vx1l2`)nD(oT4`L39DkpHsz?TSAiO5 zs+hJ;6&jk>podQ*OHJ>=TH3!g)n8{-)DC&smskSX%7HzPt#xjb1Xrb?|#?r)n`Ew3%%8QC44f4a>^LSym3&ory!}9n!;$?OXBanJSbxki&NGj7F)A9`{xE znU?wZ_-Jz7xQ@Tq?P=Y3jj!w6&#a@P=Pa_?q<`z@wvQ#&n=lng8)kkika_ARuxOWJ zmKsKNpVZ3A^LnTs46wSI^DI84j-53wWzq+$nI`ERn>5O58*j3fj@zuEr?Eux z*XKqwU{PW-E6?u0+R|Rk%57#k#sZW%REs9|?O5J8&TdWJ$NO`Scwl$#KE!U??>l<+ zvK>3?anr^+JbbKmAQ=-_ib=ppKk*`w)xr`92~5ya{NrthD8=vzyHX9iT$XD#Fu8o=SAY~B5`$D zrcXH*gx8@Uu7OqNv}0LOJ7KWpOy*!Ep3-YYLG2jcn!L;IKX~GUzH@Jm4UJ6Go^u%G z4mL9h$tEPeFiJ@`F(ZpM%qqUfa!SWBHft39hJ;io!(`VZI?U}Q301G)2 z%@QoqS+19W6$MwZ(%3pymEFd2G8&nog@Emsr9KhU&&IA!v%948z58<%KV*X=Q`A?6 zncSgfwx4u%^B!OYf^nvCs+B3JG_i=JL6$DK%%ZYKnS1OIGYjiurvkf}qDK>xwyI+L zRI{0wcmxyv!HFGQZG72G*Up`{0oR$g0k>ayzYh-&S5#Bc3tYe0c=X-3Pd#4xgBBAO z(nrk$PRw2_7=y@H7;i)Rdlq4FP&rn{)UoQU7EF$>MOCeGrmWhGm4xR`&D=w-Klj65 zBy2eF+z^vJ*o^z6n#cz|K=bPa`Gcp?#

jDm0>te=mzKyoAA-7tuaukm-bwk2ata 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

dLYQMF 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/nsis-menu.ico b/tools/Contrib/Graphics/Icons/nsis-menu.ico new file mode 100644 index 0000000000000000000000000000000000000000..94396b40b02b2682986b410b441d8e16d39e893d GIT binary patch literal 39119 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/nsis1-uninstall.ico b/tools/Contrib/Graphics/Icons/nsis1-uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..a37774cf3d64bf2d49b13938d17a5608f6dfa203 GIT binary patch literal 1078 zcmbu7F>>QD3`M`<%xF9N26DBNTVzj=>(Cw1iCwOwqj+YUlrB|df;^B?)&9W*f3{`eqLH-E)%uvjdO;f9N=o^%FW7vMW*Z%&{ru^r zzIT7!xnIzPY*mMkv}(C=u=SiB+|T@g=+hDXLu;Rm9)7)y9+9CZ)v)7!yH8ZuR)5-j zygr>;7hAMX@D>2CIq-@rZrm`~qFDV0+W8;x7%yW{uU_bvyj~|e^|;W&c`gJ#IL~7u zurgV0P<&yq-l8xPIAG(HgY#@9j>j0mWET$9Gl#7nuPCr_L)B~X^#z&s$Zr?{8$YsC zl#kC*`OD@0pJ_AqH$D2S!OzGvyh+0xQ+*=}^|v}pyBl>AV~cjEM}tY(81hNIUwFl< IvO6>X4xy1yC;$Ke literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/nsis3-install-alt.ico b/tools/Contrib/Graphics/Icons/nsis3-install-alt.ico new file mode 100644 index 0000000000000000000000000000000000000000..855cdc3d30235c0f37cd1d1af88c885158e8ea99 GIT binary patch literal 13111 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/nsis3-install.ico b/tools/Contrib/Graphics/Icons/nsis3-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..9d9409cf755210cbc2e2ff062365991eda9ef1fd GIT binary patch literal 11697 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 TviW4&HJ*4H_@w#2IxqhNqhBe> literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/nsis3-uninstall.ico b/tools/Contrib/Graphics/Icons/nsis3-uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..617a5470b93161c8eaa82eef964e02e45000a582 GIT binary patch literal 12533 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 KKeFO?tN#O)lB@v$ literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/orange-install.ico b/tools/Contrib/Graphics/Icons/orange-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..1db75f8e4a2470b7477f7a1ca6d536a898aad40a GIT binary patch literal 25214 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/pixel-uninstall.ico b/tools/Contrib/Graphics/Icons/pixel-uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..2003b2df819c9be5f2a03a99ee437182a059d0ed GIT binary patch literal 5390 zcmeHLyKdV+5FF?3xA=I9y(W_Yxm7;2nVLYqNjmz!ze-w`PAUfe){N zH`LGtgw>BX+$C}yj^EoSRNo))>+^f;b~{{MU7@aPJU%{Rzu&`qKXjUr`2^+@crhoy z64Du2S{ALDr77(Qh^4jyX61RB7pf4OmRuFc)M6|HvP?K6Nn!xg2HPnh+b~}26uK?d z(>6=?MSmyvIA|xYqM>xx6rjVlI7 zXIYBzmQ(7pjIR^PVx5)xDs?s1+gNMoI;+PwU*;2d$tU1?r7J$Eb458MoXhi~JSPNI zyhj*nxD_Ia9Z}*8R7OH0Xq2Mo5%7X&NMRn9(ahm#eegSY2RqQP5Ka|B$=zihb~(ptv4hvLH*HYJz% z{hk#wj7E=SbN7Ed{3nk(@i@Yx!UHy769StN*qG35UJ1E`eJi0Z!GYY7x)XhB`brF$ z-dRll!|V6LEu-9V#y+-5X^f2XJ|^D`(#xKopPTQ7`}_O(yJ6()W@tWvmvjQXGCFuL z=hDTnMn;))S(YxQ1i~smDlpdgp+MM}Wq3DVtjKV#R=ouqrsSo+a_TLsxCpHBD~l2Q z8HplSm^=N=t?{&l%YwjsWe-7U3&s~gSx!8Fb9Mq`;}K z38X0nMY&im^;Ni3Jw%{Ai>*|ELL+E`M$qyFzhx%0VgLXD literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Icons/win-install.ico b/tools/Contrib/Graphics/Icons/win-install.ico new file mode 100644 index 0000000000000000000000000000000000000000..a5eb774b3e663f252446dfccd9c8770ed18067f1 GIT binary patch literal 1078 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Wizard/llama.bmp b/tools/Contrib/Graphics/Wizard/llama.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1e1d94251ebe71c2d87b981a469c90c548ce95dd GIT binary patch literal 26494 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Wizard/nsis3-branding.bmp b/tools/Contrib/Graphics/Wizard/nsis3-branding.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3da21fde116213800437db23f1fff6ae562d1272 GIT binary patch literal 154544 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 Rpa2S>01BW03WT@-(SIXT=k)*p literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Wizard/nullsoft.bmp b/tools/Contrib/Graphics/Wizard/nullsoft.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d4145d4ff3a6834a40ca592067cfcad82daec58e GIT binary patch literal 26494 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Wizard/orange-uninstall.bmp b/tools/Contrib/Graphics/Wizard/orange-uninstall.bmp new file mode 100644 index 0000000000000000000000000000000000000000..097d09429264c6444bcfbff3e0f9b53b5da41d76 GIT binary patch literal 52576 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 ZFOR=x{}X6%)qjCq_FrH<{|k(e{{zaz4F~`L literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Wizard/orange.bmp b/tools/Contrib/Graphics/Wizard/orange.bmp new file mode 100644 index 0000000000000000000000000000000000000000..196a5b7a7e0179fb9ac572b4c0dea3b6c9801687 GIT binary patch literal 52576 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 ICon?(A1_5If&c&j literal 0 HcmV?d00001 diff --git a/tools/Contrib/Graphics/Wizard/win.bmp b/tools/Contrib/Graphics/Wizard/win.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5524eef945119e421d076d8fa9f8ded1205c1021 GIT binary patch literal 26494 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 Dp19ST literal 0 HcmV?d00001 diff --git a/tools/Contrib/Language files/Afrikaans.nlf b/tools/Contrib/Language files/Afrikaans.nlf new file mode 100644 index 0000000..0ebfb74 --- /dev/null +++ b/tools/Contrib/Language files/Afrikaans.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1078 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Friedel Wolff +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Installasie +# ^UninstallCaption +$(^Name) Verwydering +# ^LicenseSubCaption +: Lisensie-ooreenkoms +# ^ComponentsSubCaption +: Installasiekeuses +# ^DirSubCaption +: Installasiegids +# ^InstallingSubCaption +: Installeer tans +# ^CompletedSubCaption +: Voltooid +# ^UnComponentsSubCaption +: Verwyderingkeuses +# ^UnDirSubCaption +: Verwyderinggids +# ^ConfirmSubCaption +: Bevestiging +# ^UninstallingSubCaption +: Verwyder tans +# ^UnCompletedSubCaption +: Voltooid +# ^BackBtn +< V&orige +# ^NextBtn +&Volgende > +# ^AgreeBtn +&Regso +# ^AcceptBtn +Ek &aanvaar die ooreenkoms +# ^DontAcceptBtn +Ek aan vaar &nie die ooreenkoms nie +# ^InstallBtn +&Installeer +# ^UninstallBtn +&Verwyder +# ^CancelBtn +Kanselleer +# ^CloseBtn +&Sluit af +# ^BrowseBtn +&Blaai... +# ^ShowDetailsBtn +&Wys detail +# ^ClickNext +Klik op Volgende om verder te gaan. +# ^ClickInstall +Klik op Installeer om die installasie te begin. +# ^ClickUninstall +Klik op Verwyder om die verwydering te begin. +# ^Name +Naam +# ^Completed +Voltooid +# ^LicenseText +Lees die lisensieooreenkoms voordat u $(^NameDA) installeer. Klik op Regso as u die ooreenkoms aanvaar. +# ^LicenseTextCB +Lees die lisensieooreenkoms voordat u $(^NameDA) installeer. Merk die blokkie hieronder as u die ooreenkoms aanvaar. $_CLICK +# ^LicenseTextRB +Lees die lisensieooreenkoms voordat u $(^NameDA) installeer. Kies die eerste keuse hieronder as u die ooreenkoms aanvaar. $_CLICK +# ^UnLicenseText +Lees die lisensieooreenkoms voordat u $(^NameDA) verwyder. Klik op Regso als u die ooreenkoms aanvaar. +# ^UnLicenseTextCB +Lees die lisensieooreenkoms voordat u $(^NameDA) verwyder. Merk die blokkie hieronder as u die ooreenkoms aanvaar. $_CLICK +# ^UnLicenseTextRB +Lees die lisensieooreenkoms voordat u $(^NameDA) verwyder. KIes die eerste keuse hieronder as u die ooreenkoms aanvaar. $_CLICK +# ^Custom +Aangepast +# ^ComponentsText +Kies die komponente wat u wil installeer en deselekteer dié wat u nie wil installeer nie. $_CLICK +# ^ComponentsSubText1 +Kies die installasietipe: +# ^ComponentsSubText2_NoInstTypes +Kies die komponente wat geïnstalleer moet word: +# ^ComponentsSubText2 +Of kies die komponente wat geïnstalleer moet word: +# ^UnComponentsText +Kies die komponente wat u wil verwyder en deselekteer dié wat u nie wil verwyder nie. $_CLICK +# ^UnComponentsSubText1 +Kies die verwyderingstipe: +# ^UnComponentsSubText2_NoInstTypes +Kies die komponente wat verwyder moet word: +# ^UnComponentsSubText2 +Of kies die komponente wat verwyder moet word: +# ^DirText +$(^NameDA) sal in die volgende gids geïnstalleer word. Om elders te installeer, klik op Blaai en kies 'n ander een. $_CLICK +# ^DirSubText +Installasiegids +# ^DirBrowseText +Kies die gids om $(^NameDA) in te installeer: +# ^UnDirText +$(^NameDA) gaan uit die volgende gids verwyder word. Om van elders af te verwyder, klik op Blaai en kies 'n ander gids. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Kies die gids om $(^NameDA) uit te verwyder: +# ^SpaceAvailable +"Beskikbare spasie: " +# ^SpaceRequired +"Vereiste spasie: " +# ^UninstallingText +$(^NameDA) sal uit die volgende gids verwyder word. $_CLICK +# ^UninstallingSubText +Verwydering uit: +# ^FileError +Fout met skryf na lêer: \r\n\r\n$0\r\n\r\nKlik Staak om de installasie te stop,\r\nProbeer weer om weer te probeer of\r\nIgnoreer om dié lêer oor te slaan. +# ^FileError_NoIgnore +Fout met skryf na lêer: \r\n\r\n$0\r\n\r\nKlik Probeer weer om op nuut te probeer, of \r\nKanselleer om die installasie te stop. +# ^CantWrite +"Kon nie skyf nie: " +# ^CopyFailed +Kopiëring het misluk +# ^CopyTo +"Kopieer na " +# ^Registering +"Registreer tans: " +# ^Unregistering +"Deregistreer tans: " +# ^SymbolNotFound +"Kon nie simbool vind nie: " +# ^CouldNotLoad +"Kon nie laai nie: " +# ^CreateFolder +"Skep gids: " +# ^CreateShortcut +"Maak kortpad: " +# ^CreatedUninstaller +"Verwyderingsprogram gemaak: " +# ^Delete +"Verwyder lêer: " +# ^DeleteOnReboot +"Verwyder na herbegin van rekenaar: " +# ^ErrorCreatingShortcut +"Fout met maak van kortpad: " +# ^ErrorCreating +"Fout met skep: " +# ^ErrorDecompressing +Fout met uitpak van data! Korrupte installasielêer? +# ^ErrorRegistering +Fout met registrasie van DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Voer uit: " +# ^Extract +"Pak uit: " +# ^ErrorWriting +"Uitpak: fout met skryf na lêer " +# ^InvalidOpcode +Installasieprogram korrup: ongeldige opcode +# ^NoOLE +"Geen OLE vir: " +# ^OutputFolder +"Afvoergids: " +# ^RemoveFolder +"Verwyder gids: " +# ^RenameOnReboot +"Hernoem na herbegin van rekenaar: " +# ^Rename +"Hernoem: " +# ^Skipped +"Oorgeslaan: " +# ^CopyDetails +Kopieer detail na knipbord +# ^LogInstall +Boekstaaf die installasieproses +# ^Byte +G +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Afrikaans.nsh b/tools/Contrib/Language files/Afrikaans.nsh new file mode 100644 index 0000000..70423bc --- /dev/null +++ b/tools/Contrib/Language files/Afrikaans.nsh @@ -0,0 +1,121 @@ +;Language: Afrikaans (1078) +;By Friedel Wolff + +!insertmacro LANGFILE "Afrikaans" = "Afrikaans" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Welkom by die $(^NameDA) Installasieslimmerd" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Hierdie slimmerd lei mens deur die installasie van $(^NameDA).$\r$\n$\r$\nDit word aanbeveel dat u alle ander programme afsluit voor die begin van die installasie. Dit maak dit moontlik om die relevante stelsellêers op te dateer sonder om die rekenaar te herlaai.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Welkom by die $(^NameDA) Verwyderingslimmerd" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Hierdie slimmerd lei mens deur die verwydering van $(^NameDA).$\r$\n$\r$\nVoor die verwydering begin word, maak seker dat $(^NameDA) nie loop nie.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisensie-ooreenkoms" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Lees die lisensie-ooreenkoms voordat u $(^NameDA) installeer." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Klik op Regso om verder te gaan as u die ooreenkoms aanvaar. U moet die ooreenkoms aanvaar om $(^NameDA) te installeer." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Merk die blokkie hier onder as u die ooreenkoms aanvaar. U moet die ooreenkoms aanvaar om $(^NameDA) te installeer. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Kies die eerste keuse hieronder as u die ooreenkoms aanvaar. U moet die ooreenkoms aanvaar om $(^NameDA) te installeer. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisensie-ooreenkoms" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Lees die lisensie-ooreenkoms voordat u $(^NameDA) verwyder." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Klik op Regso om verder te gaan as u die ooreenkoms aanvaar. U moet die ooreenkoms aanvaar om $(^NameDA) te verwyder." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Merk die kiesblokkie hieronder as u die ooreenkoms aanvaar. U moet die ooreenkoms aanvaar om $(^NameDA) te verwyder." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Kies die eerste keuse hieronder as u die ooreenkoms aanvaar. U moet die ooreenkoms aanvaar om $(^NameDA) te verwyder." +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Druk op Page Down om die res van die ooreenkoms te sien." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Kies komponente" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Kies watter komponente van $(^NameDA) geïnstalleer moet word." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Kies komponente" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Kies watter komponente van $(^NameDA) verwyder moet word." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrywing" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Beweeg die muis oor 'n komponent om sy beskrywing te sien." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Kies 'n komponent om sy beskrywing te sien." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Kies installasieplek" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Kies die gids waarin u $(^NameDA) wil installeer." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Kies verwyderinggids" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Kies die gids waaruit u $(^NameDA) wil verwyder." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installeer tans" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Wag asb. terwyl $(^NameDA) geïnstalleer word." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installasie voltooid" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Die installasie is suksesvol voltooi." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installasie gestaak" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Die installasie is nie suksesvol voltooi nie." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Verwyder tans" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Wag asb. terwyl $(^NameDA) van u rekenaar verwyder word." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Verwydering voltooi" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Verwydering is suksesvol voltooi." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Verwydering gestaak" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Verwydering is nie suksesvol voltooi nie." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Voltooi van die $(^NameDA) Installasieslimmerd" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) is geïnstalleer op uw rekenaar.$\r$\n$\r$\nKlik op Voltooi om hierdie slimmerd af te sluit." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Die rekenaar moet oorbegin word om die installasie van $(^NameDA) te voltooi. Wil u nou oorbegin?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Voltooi van die $(^NameDA) Verwyderingslimmerd" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) is van u rekenaar verwyder.$\r$\n$\r$\nKlik op Voltooi om hierdie slimmerd af te sluit." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Die rekenaar moet oorbegin word om die verwydering van $(^NameDA) te voltooi. Wil u nou oorbegin?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Begin nou oor" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ek wil later self oorbegin" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Laat loop $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Wys Leesmy-lêer" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Voltooi" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Kies gids in Begin-kieslys" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Kies 'n gids in die Begin-kieslys vir $(^NameDA) se kortpaaie." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Kies die gids in die Begin-kieslys waarin die program se kortpaaie geskep moet word. U kan ook 'n nuwe naam gee om 'n nuwe gids te skep." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Moenie kortpaaie maak nie" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Verwyder $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Verwyder $(^NameDA) van u rekenaar." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Wil u definitief die installasie van $(^Name) afsluit?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Wil u definitief die verwydering van $(^Name) afsluit?" +!endif diff --git a/tools/Contrib/Language files/Albanian.nlf b/tools/Contrib/Language files/Albanian.nlf new file mode 100644 index 0000000..49cccf6 --- /dev/null +++ b/tools/Contrib/Language files/Albanian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1052 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Përkthimi nga Besnik Bleta, besnik@programeshqip.org +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Rregullimi i $(^Name) +# ^UninstallCaption +Çinstalimi i $(^Name) +# ^LicenseSubCaption +: Marrëveshje Licence +# ^ComponentsSubCaption +: Mundësi Instalimi +# ^DirSubCaption +: Dosje Instalimi +# ^InstallingSubCaption +: Po instalohet +# ^CompletedSubCaption +: U plotësua +# ^UnComponentsSubCaption +: Mundësi Çinstalimi +# ^UnDirSubCaption +: Dosje Çinstalimi +# ^ConfirmSubCaption +: Ripohim +# ^UninstallingSubCaption +: Po çinstalohet +# ^UnCompletedSubCaption +: U plotësua +# ^BackBtn +< &Mbrapsht +# ^NextBtn +&Pasuesi > +# ^AgreeBtn +&Pajtohem +# ^AcceptBtn +&I pranoj kushtet e Marrëveshjes së Licencës +# ^DontAcceptBtn +&Nuk i pranoj kushtet e Marrëveshjes së Licencës +# ^InstallBtn +&Instaloje +# ^UninstallBtn +&Çinstaloje +# ^CancelBtn +Anuloje +# ^CloseBtn +&Mbylle +# ^BrowseBtn +Sh&fletoni… +# ^ShowDetailsBtn +Shfaq &hollësi +# ^ClickNext +Që të vazhdohet, klikoni Pasuesi. +# ^ClickInstall +Që të fillojë instalimi, klikoni Instaloje. +# ^ClickUninstall +Që të fillojë çinstalimi, klikoni Çinstaloje. +# ^Name +Emër +# ^Completed +U plotësua +# ^LicenseText +Ju lutemi, para instalimit të $(^NameDA), shqyrtoni marrëveshjen e licencës. Nëse i pranoni tërë kushtet e marrëveshjes, klikoni Pajtohem. +# ^LicenseTextCB +Ju lutemi, para instalimit të $(^NameDA), shqyrtoni marrëveshjen e licencës. Nëse i pranoni tërë kushtet e marrëveshjes, klikoni kutizën më poshtë. $_CLICK +# ^LicenseTextRB +Ju lutemi, para instalimit të $(^NameDA), shqyrtoni marrëveshjen e licencës. Nëse i pranoni tërë kushtet e marrëveshjes, përzgjidhni mundësinë e parë më poshtë. $_CLICK +# ^UnLicenseText +Ju lutemi, para çinstalimit të $(^NameDA), shqyrtoni marrëveshjen e licencës. Nëse i pranoni tërë kushtet e marrëveshjes, klikoni Pajtohem. +# ^UnLicenseTextCB +Ju lutemi, para çinstalimit të $(^NameDA), shqyrtoni marrëveshjen e licencës. Nëse i pranoni tërë kushtet e marrëveshjes, klikoni kutizën më poshtë. $_CLICK +# ^UnLicenseTextRB +Ju lutemi, para çinstalimit të $(^NameDA), shqyrtoni marrëveshjen e licencës. Nëse i pranoni tërë kushtet e marrëveshjes, përzgjidhni mundësinë e parë më poshtë. $_CLICK +# ^Custom +Vetjake +# ^ComponentsText +U vini shenjë përbërësve që doni të instalohen dhe hiquani shenjën përbërësve që s’doni të instalohen. $_CLICK +# ^ComponentsSubText1 +Përzgjidhni llojin e instalimit: +# ^ComponentsSubText2_NoInstTypes +Përzgjidhni përbërësit për instalim: +# ^ComponentsSubText2 +Ose, përzgjidhni përbërësit e mundshëm që doni të instalohen: +# ^UnComponentsText +U vini shenjë përbërësve që doni të çinstalohen dhe hiquni shenjën përbërësve që s’doni të çinstalohen. $_CLICK +# ^UnComponentsSubText1 +Përzgjidhni llojin e çinstalimit: +# ^UnComponentsSubText2_NoInstTypes +Përzgjidhni përbërësit për çinstalim: +# ^UnComponentsSubText2 +Ose, përzgjidhni përbërësit e mundshëm që doni të çinstalohen: +# ^DirText +Rregullimi do ta instalojë $(^NameDA) në dosjen vijuese. Për instalim në një dosje tjetër, klikoni Shfletoni dhe përzgjidhni një tjetër dosje. $_CLICK +# ^DirSubText +Dosje Vendmbërritje +# ^DirBrowseText +Përzgjidhni dosjen ku të instalohet $(^NameDA): +# ^UnDirText +Rregullimi do të çinstalojë $(^NameDA) prej dosjes vijuese. Për çinstalim prej një dosjeje tjetër, klikoni Shfletoni dhe përzgjidhni një tjetër dosje. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Përzgjidhni dosjen prej nga ku të çinstalohet $(^NameDA): +# ^SpaceAvailable +"Hapësirë e mundshme: " +# ^SpaceRequired +"Hapësirë e nevojshme: " +# ^UninstallingText +$(^NameDA) do të çinstalohet prej dosjes vijuese. $_CLICK +# ^UninstallingSubText +Po çinstalohet prej: +# ^FileError +Gabim në hapje kartele për shkrim: \r\n\r\n$0\r\n\r\nKlikoni Ndërprite për të ndalur instalimin,\r\nRiprovo për të provuar sërish, ose\r\nShpërfille për të anashkaluar këtë kartelë. +# ^FileError_NoIgnore +Gabim në hapje kartele për shkrim: \r\n\r\n$0\r\n\r\nKlikoni Riprovo për të provuar sërish, ose\r\nAnuloje për të ndalur instalimin. +# ^CantWrite +"S’shkruhet dot: " +# ^CopyFailed +Kopjimi dështoi +# ^CopyTo +"Kopjoje tek " +# ^Registering +"Regjistrim: " +# ^Unregistering +"Çregjistrim: " +# ^SymbolNotFound +"S’u gjet dot simbol: " +# ^CouldNotLoad +"S’u ngarkua dot: " +# ^CreateFolder +"Krijo dosje: " +# ^CreateShortcut +"Krijo shkurtore: " +# ^CreatedUninstaller +"Krijo çinstalues: " +# ^Delete +"Fshi kartelë: " +# ^DeleteOnReboot +"Fshi gjatë rinisjes: " +# ^ErrorCreatingShortcut +"Gabim në krijim shkurtoresh: " +# ^ErrorCreating +"Gabim në krijimin e: " +# ^ErrorDecompressing +Gabim në çngjeshje të dhënash! Instalues i dëmtuar? +# ^ErrorRegistering +Gabim në regjistrim DLL-je +# ^ExecShell +"ExecShell: " +# ^Exec +"Ekzekuto: " +# ^Extract +"Përfto: " +# ^ErrorWriting +"Përftim: gabim në shkrim te kartela " +# ^InvalidOpcode +Instalues i dëmtuar: opcode i pavlefshëm +# ^NoOLE +"Pa OLE për: " +# ^OutputFolder +"Dosje përfundimesh: " +# ^RemoveFolder +"Hiq dosjen: " +# ^RenameOnReboot +"Riemërtoje gjatë rinisjes: " +# ^Rename +"Riemërtoje: " +# ^Skipped +"U anashkalua: " +# ^CopyDetails +Kopjo Hollësira Te E Papastra +# ^LogInstall +Regjistroje procesin e instalimit +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Albanian.nsh b/tools/Contrib/Language files/Albanian.nsh new file mode 100644 index 0000000..30f76f7 --- /dev/null +++ b/tools/Contrib/Language files/Albanian.nsh @@ -0,0 +1,129 @@ +;Language: Albanian (1052) +;Translation Besnik Bleta, besnik@programeshqip.org + +!insertmacro LANGFILE "Albanian" = "Shqip" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Mirë se vini te Rregullimi i $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ky do t’ju udhëheqë gjatë instalimit të $(^NameDA).$\r$\n$\r$\nKëshillohet që të mbyllni tërë aplikacionet e tjera, para se të nisni Rregullimin. Kjo bën të mundur përditësimin e kartelave të rëndësishme të sistemit pa u dashur të riniset kompjuteri juaj.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Mirë se vini te Çinstalimi i $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ky do t’ju udhëheqë gjatë çinstalimit të $(^NameDA).$\r$\n$\r$\nPara nisjes së çinstalimit, sigurohuni se $(^NameDA) s’është duke xhiruar.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Marrëveshje Licence" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ju lutemi, para se të instaloni $(^NameDA), shqyrtoni kushtet e licencës." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Nëse i pranoni kushtet e marrëveshjes, klikoni Pajtohem, që të vazhdohet. Që të instalohet $(^NameDA), duhet të pranoni marrëveshjen." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Nëse pranoni kushtet e marrëveshjes, klikoni kutizën më poshtë. Që të instalohet $(^NameDA), duhet të pranoni marrëveshjen. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Nëse pranoni kushtet e marrëveshjes, përzgjidhni më poshtë mundësinë e parë. Që të instalohet $(^NameDA), duhet të pranoni marrëveshjen. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Marrëveshje Licence" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Ju lutemi, para çinstalimit të $(^NameDA), shqyrtoni kushtet e licencës." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Nëse i pranoni kushtet e marrëveshjes, klikoni Pajtohem, që të vazhdohet. Që të çinstalohet $(^NameDA), duhet të pranoni marrëveshjen." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Nëse pranoni kushtet e marrëveshjes, klikoni kutizën më poshtë. Që të çinstalohet $(^NameDA), duhet të pranoni marrëveshjen. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Nëse pranoni kushtet e marrëveshjes, përzgjidhni mundësinë e parë më poshtë. Që të çinstalohet $(^NameDA), duhet të pranoni marrëveshjen. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Për të parë pjesën e mbetur të marrëveshjes, shtypni tastin Page Down." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Përzgjidhni Përbërës" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Zgjidhni cilat anë të $(^NameDA) doni të instalohen." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Zgjidhni Përbërës" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Zgjidhni cilat anë të $(^NameDA) doni të çinstalohen." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Përshkrim" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Për të parë përshkrimin e një përbërësi, vendosni kursorin përsipër tij." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Zgjidhni Vend Instalimi" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Zgjidhni dosjen tek e cila të instalohet $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Zgjidhni Vend Çinstalimi" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Zgjidhni dosjen prej së cilës të çinstalohet $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Po instalohet" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Ju lutemi, prisni, ndërkohë që $(^NameDA) instalohet." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalim i Plotësuar" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Rregullimi u plotësua me sukses." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalimi u Ndërpre" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Rregullimi s’u plotësua me sukses." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Çinstalim" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Ju lutemi, prisni, ndërsa $(^NameDA) çinstalohet." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Çinstalim i Plotë" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Çinstalimi u plotësua me sukses." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Çinstalimi u Ndërpre" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Çinstalimi s’u plotësua me sukses." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Po plotësohet Rregullimi i $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) u instalua në kompjuterin tuaj.$\r$\n$\r$\nPër mbylljen e procesit, klikoni Përfundoje." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Që të mund të plotësohet instalimi i $(^NameDA), kompjuteri juaj duhet të riniset. Doni të riniset tani?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Po plotësohet Çinstalimi i $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) u çinstalua prej kompjuterit tuaj.$\r$\n$\r$\nPër mbylljen e procesit, klikoni Përfundoje." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Kompjuteri juaj duhet të riniset, që të mund të plotësohet çinstalimi i $(^NameDA). Doni të riniset tani?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Rinise tani" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Dua ta rinis dorazi më vonë" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Nis $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Shfaq Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Përfundoje" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Zgjidhni Dosje Menuje Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Zgjidhni një dosje Menuje Start për shkurtore $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Përzgjidhni dosjen e Menusë Start në të cilën do të donit të krijohen shkurtoret për programin. Mundeni edhe të jepni një emër për të krijuar një dosje të re." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Mos krijo shkurtore" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Çinstalo $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Hiqeni $(^NameDA) prej kompjuterit tuaj." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Jeni i sigurt se doni të dilet nga Rregullimi i $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Jeni i sigurt se doni të dilet nga Çinstalimi i $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Zgjidhni Përdorues" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Zgjidhni për cilët përdorues doni të instalohet $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Përzgjidhni nëse doni të instalohet $(^NameDA) vetëm për veten tuaj apo për tërë përdoruesit e këtij kompjuteri. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instaloje për këdo në këtë kompjuter" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instaloje vetëm për mua" +!endif diff --git a/tools/Contrib/Language files/Arabic.nlf b/tools/Contrib/Language files/Arabic.nlf new file mode 100644 index 0000000..8157173 --- /dev/null +++ b/tools/Contrib/Language files/Arabic.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1025 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1256 +# RTL - anything else than RTL means LTR +RTL +# Translation by asdfuae@msn.com, updated by Rami Kattan +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +تنصيب $(^Name) +# ^UninstallCaption +إزالة $(^Name) +# ^LicenseSubCaption +إتÙاقية†الترخيص : +# ^ComponentsSubCaption +خيارات التنصيب : +# ^DirSubCaption +مجلد التنصيب : +# ^InstallingSubCaption +تنصيب : +# ^CompletedSubCaption +إنتهى : +# ^UnComponentsSubCaption +خيارات الإزالة : +# ^UnDirSubCaption +مجلد الإزالة : +# ^ConfirmSubCaption +تأكيد : +# ^UninstallingSubCaption +إزالة : +# ^UnCompletedSubCaption +إنتهى : +# ^BackBtn +< ال&سابق +# ^NextBtn +ال&تالي > +# ^AgreeBtn +مواÙÙ‚& +# ^AcceptBtn +&أواÙÙ‚ على شروط اتÙاقية الترخيص +# ^DontAcceptBtn +&لا أواÙÙ‚ على شروط اتÙاقية الترخيص +# ^InstallBtn +&تنصيب +# ^UninstallBtn +&إزالة +# ^CancelBtn +إلغاء +# ^CloseBtn +Ø¥&غلاق +# ^BrowseBtn +&عرض... +# ^ShowDetailsBtn +Ø¥&ظهار التÙاصيل +# ^ClickNext +إضغط على التالي للمتابعة. +# ^ClickInstall +إضغط على تنصيب لتشغيل التنصيب. +# ^ClickUninstall +إضغط على إزالة لتشغيل الإزالة. +# ^Name +الإسم +# ^Completed +إنتهى +# ^LicenseText +الرجاء مراجعة إتÙاقية الترخيص قبل تنصيب $(^NameDA). عند المواÙقة على جميع شروط الإتÙاقية، إضغط مواÙÙ‚. +# ^LicenseTextCB +الرجاء مراجعة إتÙاقية الترخيص قبل تنصيب $(^NameDA). عند المواÙقة على جميع شروط الإتÙاقية، إضغط على مربع المؤشر التالي. $_CLICK. +# ^LicenseTextRB +الرجاء مراجعة إتÙاقية الترخيص قبل تنصيب $(^NameDA). عند المواÙقة على جميع شروط الإتÙاقية، إختر الخيار الأول التالي. $_CLICK +# ^UnLicenseText +الرجاء مراجعة إتÙاقية الترخيص قبل إزالة $(^NameDA). عند المواÙقة على جميع شروط الإتÙاقية، إضغط مواÙÙ‚. +# ^UnLicenseTextCB +الرجاء مراجعة إتÙاقية الترخيص قبل إزالة $(^NameDA). عند المواÙقة على جميع شروط الإتÙاقية، اضغط على مربع المؤشر التالي. $_CLICK +# ^UnLicenseTextRB +الرجاء مراجعة إتÙاقية الترخيص قبل إزالة $(^NameDA). عند المواÙقة على جميع شروط الإتÙاقية، إختر الخيار الأول التالي. $_CLICK +# ^Custom +إختياري +# ^ComponentsText +علّم المكونات المراد تنصيبها وإزل العلامة عن المكونات الغير مراد تنصيبها. $_CLICK +# ^ComponentsSubText1 +إختر نوع التنصيب: +# ^ComponentsSubText2_NoInstTypes +إختر المكونات للتنصيب: +# ^ComponentsSubText2 +أو، قم بإختيار المكونات الإختيارية المراد تنصيبها: +# ^UnComponentsText +علّم المكونات المراد إزالتها وأزل العلامة عن المكونات الغير مراد إزالتها. $_CLICK +# ^UnComponentsSubText1 +إختر نوع الإزالة: +# ^UnComponentsSubText2_NoInstTypes +إختر المكونات للإزالة: +# ^UnComponentsSubText2 +أو، إختر المكونات الإختيارية المراد إزالتها: +# ^DirText +سيتم تنصيب $(^NameDA) ÙÙŠ المجلد التالي. للتنصيب ÙÙŠ مجلد آخر، إضغط عرض وإختر مجلد آخر. $_CLICK +# ^DirSubText +مجلد الهد٠+# ^DirBrowseText +إختر المجلد لتنصيب $(^NameDA) Ùيه: +# ^UnDirText +سيتم إزالة $(^NameDA) من المجلد التالي. للإزالة من مجلد آخر، إضغط عرض وأختر مجلد آخر. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +إختر المجلد لإزالة $(^NameDA) منه: +# ^SpaceAvailable +"المساحة المتوÙرة: " +# ^SpaceRequired +"المساحة المطلوبة: " +# ^UninstallingText +سيتم إزالة $(^NameDA) من المجلد التالي. $_CLICK +# ^UninstallingSubText +إزالة من: +# ^FileError +حدث خلل أثناء Ùتح مل٠للكتابة: \r\n\t\"$0\"\r\nإضغط إلغاء لإلغاء التنصيب،\r\nمحاولة لإعادة محاولة كتابة الملÙØŒ\r\n تجاهل لتخطي المل٠+# ^FileError_NoIgnore +حدث خلل أثناء Ùتح مل٠للكتابة: \r\n\t\"$0\"\r\nإضغط محاولة لإعادة محاولة كتابة الملÙØŒ أو\r\nإلغاء لإلغاء التنصيب +# ^CantWrite +"لا يستطيع الكتابة: " +# ^CopyFailed +Ùشل النسخ +# ^CopyTo +"نسخ إلى" +# ^Registering +"تسجيل: " +# ^Unregistering +"إلغاء تسجيل: " +# ^SymbolNotFound +"لم يتمكن من إيجاد الرمز :" +# ^CouldNotLoad +"لم يتمكن من تحميل :" +# ^CreateFolder +"إنشاء مجلد" +# ^CreateShortcut +"إنشاء إختصار: " +# ^CreatedUninstaller +"إنشاء مزيل: " +# ^Delete +"حذ٠ملÙ: " +# ^DeleteOnReboot +"حذ٠بعد إعادة التشغيل: " +# ^ErrorCreatingShortcut +"خلل أثناء إنشاء إختصار: " +# ^ErrorCreating +"خلل أثناء إنشاء :" +# ^ErrorDecompressing +خلل أثناء Ùتح البيانات المضغوطة! منصب تالÙØŸ +# ^ErrorRegistering +خلل أثناء تسجيل DLL +# ^ExecShell +"تنÙيذ ExecShell:" +# ^Exec +"تنÙيذ: " +# ^Extract +"إستخراج: " +# ^ErrorWriting +"إستخراج: خلل أثناء الكتابة إلى مل٠" +# ^InvalidOpcode +المنصّب تالÙ: Ø´Ùرة غير صالحة +# ^NoOLE +"لا توجد OLE لـÙ: " +# ^OutputFolder +"مجلد الإخراج: " +# ^RemoveFolder +"إزالة مجلد: " +# ^RenameOnReboot +"إعادة تسمية بعد إعادة التشغيل: " +# ^Rename +"إعادة تسمية: " +# ^Skipped +"تخطى: " +# ^CopyDetails +نسخ التÙاصيل إلى الذاكرة +# ^LogInstall +سجّل عملية التنصيب +# ^Byte +بايت +# ^Kilo + كيلو +# ^Mega + ميغا +# ^Giga + جيغا diff --git a/tools/Contrib/Language files/Arabic.nsh b/tools/Contrib/Language files/Arabic.nsh new file mode 100644 index 0000000..523104f --- /dev/null +++ b/tools/Contrib/Language files/Arabic.nsh @@ -0,0 +1,130 @@ +;Language: Arabic (1025) +;Translation by asdfuae@msn.com +;updated by Rami Kattan + +!insertmacro LANGFILE "Arabic" = "العربية" "Al-Arabiyyah" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "مرحبا بك ÙÙŠ مرشد إعداد $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "سيساعدك هذا المرشد ÙÙŠ تنصيب $(^NameDA).$\r$\n$\r$\nمن المÙضل إغلاق جميع البرامج قبل التنصيب. سيساعد هذا ÙÙŠ تجديد ملÙات النظام دون الحاجة لإعادة تشغيل الجهاز.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "مرحبا بك ÙÙŠ مرشد إزالة $(^NameDA) " + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "هذا المرشد سيدلّك أثناء إزالة $(^NameDA).$\r$\n$\r$\n قبل البدء بالإزالة، يرجى التأكد من أن $(^NameDA) غير شغّال.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "إتÙاقية†الترخيص" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "الرجاء مراجعة إتÙاقية†الترخيص قبل تنصيب $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "عند المواÙقة على شروط الإتÙاقيةâ€ØŒ إضغط أواÙÙ‚ للمتابعة. يجب المواÙقة على الإتÙاقية†لتنصيب $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "عند المواÙقة على شروط الإتÙاقيةâ€ØŒ علّم مربع العلامة التالي. يجب المواÙقة على الإتÙاقية†لتنصيب $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "عند المواÙقة على شروط الإتÙاقية، إختر الخيار الأول من التالي. يجب المواÙقة على الإتÙاقية لتنصيب $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "إتÙاقية الترخيص" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "الرجاء مراجعة شروط الترخيص قبل إزالة $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "عند المواÙقة على شروط الإتÙاقية، إضغط على مواÙÙ‚. يجب المواÙقة على الإتÙاقية لإزالة $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "عند المواÙقة على شروط الإتÙاقية، علّم المربع العلامة التالي. يجب المواÙقة على الإتÙاقية لإزالة $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "عند المواÙقة على شروط الإتÙاقية، إختر الخيار الأول من التالي. يجب المواÙقة على الإتÙاقية لإزالة $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "إضعط Ù…Ùتاح صÙحة للأسÙÙ„ لرؤية باقي الإتÙاقية" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "إختر المكونات" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "إختر ميزات $(^NameDA) المراد تنصيبها." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "إختر المكونات" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "إختر ميزات $(^NameDA) المراد إزالتها." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "الوصÙ" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "أشر بالÙأرة Ùوق أحد المكونات لرؤية الوصÙ" + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "إختر موقع التنصيب" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "إختر المجلد المراد تنصيب $(^NameDA) Ùيه." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "إختر موقع المزيل" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "إختر المجلد الذي سيزال منه $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "تنصيب" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "الرجاء الإنتظار أثناء تنصيب $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "إنتهى التنصيب" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "إنتهت عملية التنصيب بنجاح." + ${LangFileString} MUI_TEXT_ABORT_TITLE "إلغاء التنصيب" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "لم ينتهي التنصيب بنجاح." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "إزالة" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "الرجاء الإنتظار أثناء إزالة $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "إنتهى" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "إنتهت عملية الإزالة بنجاح." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "إلغاء الإزالة" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "لم تنتهي الإزالة بنجاح." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "إنهاء مرشد إعداد $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "لقد تم تنصيب $(^NameDA) على الجهاز$\r$\n$\r$\nإضغط إنهاء لإغلاق مرشد الإعداد." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "يجب إعادة تشغيل الجهاز لإنهاء تنصيب $(^NameDA). هل تريد إعادة التشغيل الآن؟" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "إنهاء مرشد إزالة $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "لقد تم إزالة $(^NameDA) من الجهاز.$\r$\n$\r$\n إضغط إنهاء لإغلاق المرشد." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "يجب إعادة تشغيل الجهاز لإنهاء إزالة $(^NameDA). هل تريد إعادة التشغيل الآن؟" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "أعد التشغيل الآن" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "أرغب ÙÙŠ إعادة تشغيل الجهاز ÙÙŠ وقت لاحق" + ${LangFileString} MUI_TEXT_FINISH_RUN "&شغل $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "اعرض& أقرأني" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&إنهاء" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "إختر مجلد قائمة ابدأ" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "إختر مجلد قائمة ابدأ لإختصارات $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "إختر المجلد ÙÙŠ قائمة ابدأ الذي ستنشأ Ùيه إختصارات البرنامج. يمكن أيضا كتابة إسم لإنشاء مجلد جديد." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "لا تنشئ إختصارات" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "إزالة $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "إزالة $(^NameDA) من الجهاز." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "هل أنت متأكد من إغلاق منصّب $(^Name)ØŸ" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "هل أنت متأكد من أنك الخروج من مزيل $(^Name)ØŸ" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "اختر المستخدمين" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "حدد لمن من المستخدمين تريد تركيب $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "حدد لمن تريد تركيب $(^NameDA) لنÙسك Ùقط أم لجميع مستخدمي الحاسب. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "تركيب لجميع مستخدمي هذا الحاسب" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "تركيب لي Ùقط" +!endif diff --git a/tools/Contrib/Language files/Armenian.nlf b/tools/Contrib/Language files/Armenian.nlf new file mode 100644 index 0000000..12bd7a8 --- /dev/null +++ b/tools/Contrib/Language files/Armenian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1067 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1200 +# RTL - anything else than RTL means LTR +- +# Translation by Hrant Ohanyan (h.ohanyan@haysoft.org) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ $(^Name)-Õ¨ +# ^UninstallCaption +Õ‹Õ¶Õ»Õ¥Õ¬ $(^Name)-Õ¨ +# ^LicenseSubCaption +: Ô±Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ +# ^ComponentsSubCaption +: ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ¨Õ¶Õ¿Ö€Õ¡Õ¶Ö„Õ¶Õ¥Ö€Õ¨ +# ^DirSubCaption +: ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨ +# ^InstallingSubCaption +: Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ¨ ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¾Õ¸Ö‚Õ´ Õ¥Õ¶ +# ^CompletedSubCaption +: Ô³Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¡Õ¾Õ¡Ö€Õ¿Õ¾Õ¥Ö +# ^UnComponentsSubCaption +: ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ¨Õ¶Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ +# ^UnDirSubCaption +: Õ‹Õ¶Õ»Õ¾Õ¸Õ² Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨ +# ^ConfirmSubCaption +: Õ€Õ¡Õ½Õ¿Õ¡Õ¿Õ¥Ö„ +# ^UninstallingSubCaption +: Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ¨ Õ»Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ¥Õ¶ +# ^UnCompletedSubCaption +: Ô³Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¡Õ¾Õ¡Ö€Õ¿Õ¾Õ¥Ö +# ^BackBtn +« &Õ†Õ¡Õ­Õ¸Ö€Õ¤Õ¨ +# ^NextBtn +&Õ€Õ¡Õ»Õ¸Ö€Õ¤Õ¨ » +# ^AgreeBtn +Õ€Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶& Õ¥Õ´ +# ^AcceptBtn +ÔµÕ½ &Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Õ´ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Ö€Õ« ÕºÕ¡ÕµÕ´Õ¡Õ¶Õ¶Õ¥Ö€Õ¨ +# ^DontAcceptBtn +ÔµÕ½ &Õ¹Õ¥Õ´ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Ö€Õ« ÕºÕ¡ÕµÕ´Õ¡Õ¶Õ¶Õ¥Ö€Õ¨ +# ^InstallBtn +&ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ +# ^UninstallBtn +Õ‹Õ¶&Õ»Õ¥Õ¬ +# ^CancelBtn +Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ +# ^CloseBtn +&Õ“Õ¡Õ¯Õ¥Õ¬ +# ^BrowseBtn +Ô´&Õ«Õ¿Õ¥Õ¬ ... +# ^ShowDetailsBtn +&Õ„Õ¡Õ¶Ö€Õ¡Õ´Õ¡Õ½Õ¶... +# ^ClickNext +Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'Ô±Õ¼Õ¡Õ»'Ö‰ +# ^ClickInstall +ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬'Ö‰ +# ^ClickUninstall +Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'Õ‹Õ¶Õ»Õ¥Õ¬'Ö‰ +# ^Name +Ô±Õ¶Õ¸Ö‚Õ¶Õ¨ +# ^Completed +ÕŠÕ¡Õ¿Ö€Õ¡Õ½Õ¿ Õ§ +# ^LicenseText +$(^NameDA)-Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰ ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ¶Õ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'Õ€Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶ Õ¥Õ´'Ö‰ +# ^LicenseTextCB +$(^NameDA)-Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰ ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ¶Õ Õ¤Ö€Õ¥Ö„ Õ¶Õ«Õ·Õ¨ Õ¶Õ¥Ö€Ö„Ö‡Õ¸Ö‚Õ´Ö‰ $_CLICK +# ^LicenseTextRB +$(^NameDA)-Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰ ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ¶Õ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¶Õ¥Ö€Ö„Õ¸Õ¶Õ·ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ«Ö Õ¡Õ¼Õ¡Õ»Õ«Õ¶Õ¨Ö‰ $_CLICK +# ^UnLicenseText +$(^NameDA)-Õ¨ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰ ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ¶Õ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'Õ€Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶ Õ¥Õ´'Ö‰ +# ^UnLicenseTextCB +$(^NameDA)-Õ¨ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰ ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ¶Õ Õ¤Ö€Õ¥Ö„ Õ¶Õ«Õ·Õ¨ Õ¶Õ¥Ö€Ö„Ö‡Õ¸Ö‚Õ´Ö‰ $_CLICK +# ^UnLicenseTextRB +$(^NameDA)-Õ¨ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰ ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ¶Õ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¶Õ¥Ö€Ö„Õ¸Õ¶Õ·ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ«Ö Õ¡Õ¼Õ¡Õ»Õ«Õ¶Õ¨Ö‰ $_CLICK +# ^Custom +Õ€Õ¡Ö€Õ´Õ¡Ö€Õ¥ÖÕ¾Õ¡Õ® +# ^ComponentsText +Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ¡ÕµÕ¶ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö„ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Ö‰ $_CLICK +# ^ComponentsSubText1 +Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯Õ¨. +# ^ComponentsSubText2_NoInstTypes +ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨. +# ^ComponentsSubText2 +Õ¯Õ¡Õ´ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¬Ö€Õ¡ÖÕ¸Ö‚ÖÕ«Õ¹ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€. +# ^UnComponentsText +Õ‹Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨Ö‰ $_CLICK +# ^UnComponentsSubText1 +Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯Õ¨. +# ^UnComponentsSubText2_NoInstTypes +Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨. +# ^UnComponentsSubText2 +Õ¯Õ¡Õ´ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¬Ö€Õ¡ÖÕ¸Ö‚ÖÕ«Õ¹ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Ö‰ +# ^DirText +Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¯Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ« $(^NameDA)-Õ¨ Õ¶Õ·Õ¾Õ¡Õ® Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´Ö‰ Ô±ÕµÕ¬ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'Ô¸Õ¶Õ¿Ö€Õ¥Õ¬' Ö‡ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¡ÕµÕ¶Ö‰ $_CLICK +# ^DirSubText +ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¯Õ¨ +# ^DirBrowseText +Õ†Õ·Õ¥Ö„ $(^NameDA)-Õ« Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨. +# ^UnDirText +Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¯Õ»Õ¶Õ»Õ« $(^NameDA)-Õ¨ Õ¶Õ·Õ¾Õ¡Õ® Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ«ÖÖ‰ Ô±ÕµÕ¬ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ«Ö Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Õ½Õ¥Õ²Õ´Õ¥Ö„ 'Ô¸Õ¶Õ¿Ö€Õ¥Õ¬' Ö‡ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¡ÕµÕ¶Ö‰ $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨, Õ¸Ö€Õ«Ö ÕºÕ¥Õ¿Ö„ Õ§ Õ»Õ¶Õ»Õ¥Õ¬ $(^NameDA)-Õ¨. +# ^SpaceAvailable +"Õ€Õ¡Õ½Õ¡Õ¶Õ¥Õ¬Õ« Õ§. " +# ^SpaceRequired +"ÕŠÕ¡Õ°Õ¡Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ§. " +# ^UninstallingText +$(^NameDA) Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¯Õ»Õ¶Õ»Õ¾Õ« ÕÕ¥Ö€ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ«ÖÖ‰ $_CLICK +# ^UninstallingSubText +Õ‹Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ§Õ +# ^FileError +Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ¢Õ¡ÖÕ¥Õ¬ Ö†Õ¡ÕµÕ¬Õ¨Õ Õ£Ö€Õ¡Õ¶ÖÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰ \r\n\t"$0"\r\n'Ô´Õ¡Õ¤Õ¡Ö€Õ¥ÖÕ¶Õ¥Õ¬'Õ Õ¨Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´Õ¨,\r\n"Ô¿Ö€Õ¯Õ¶Õ¥Õ¬"Õ Õ¯Ö€Õ¯Õ«Õ¶ ÖƒÕ¸Ö€Õ±Õ¥Õ¬,\r\n"Ô²Õ¡Ö Õ©Õ¸Õ²Õ¶Õ¥Õ¬"Õ Õ¢Õ¡Ö Õ©Õ¸Õ²Õ¶Õ¥Õ¬ Õ£Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨Ö‰ +# ^FileError_NoIgnore +Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ¢Õ¡ÖÕ¥Õ¬ Ö†Õ¡ÕµÕ¬Õ¨Õ Õ£Ö€Õ¡Õ¶ÖÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰ \r\n\t"$0"\r\n'Ô¿Ö€Õ¯Õ¶Õ¥Õ¬'Õ Õ¯Ö€Õ¯Õ«Õ¶ ÖƒÕ¸Ö€Õ±Õ¥Õ¬,\r\n'Ô´Õ¡Õ¤Õ¡Ö€Õ¥ÖÕ¶Õ¥Õ¬'Õ Õ¨Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´Õ¨Ö‰ +# ^CantWrite +"Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ£Ö€Õ¡Õ¶ÖÕ¥Õ¬ " +# ^CopyFailed +ÕÕ­Õ¡Õ¬Õ ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¥Õ¬Õ¸Ö‚ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯ +# ^CopyTo +"ÕŠÕ¡Õ¿Õ³Õ¥Õ¶Õ¥Õ¬Õ " +# ^Registering +"Ô³Ö€Õ¡Õ¶ÖÕ¸Ö‚Õ´. " +# ^Unregistering +"ÕŽÕ¥Ö€Õ¡Õ£Ö€Õ¡Õ¶ÖÕ¸Ö‚Õ´. " +# ^SymbolNotFound +"Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ£Õ¿Õ¶Õ¥Õ¬Õ " +# ^CouldNotLoad +"Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ¢Õ¡ÖÕ¥Õ¬. " +# ^CreateFolder +"ÕÕ¿Õ¥Õ²Õ®Õ¾Õ¸Ö‚Õ´ Õ§ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯ " +# ^CreateShortcut +"ÕÕ¿Õ¥Õ²Õ®Õ¾Õ¸Ö‚Õ´ Õ¥Õ¶ ÕºÕ«Õ¿Õ¡Õ¯Õ¶Õ¥Ö€." +# ^CreatedUninstaller +"ÕÕ¿Õ¥Õ²Õ®Õ¾Õ¸Ö‚Õ´ Õ»Õ¶Õ»Õ´Õ¡Õ¶ Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨. " +# ^Delete +"Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ« Õ»Õ¶Õ»Õ¸Ö‚Õ´. " +# ^DeleteOnReboot +"Ô¿Õ»Õ¶Õ»Õ¾Õ« Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥Õ¬Õ¸Ö‚Ö Õ°Õ¥Õ¿Õ¸. " +# ^ErrorCreatingShortcut +"ÕÕ­Õ¡Õ¬Õ ÕºÕ«Õ¿Õ¡Õ¯Õ¨ Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬Õ«Õ½. " +# ^ErrorCreating +"ÕÕ­Õ¡Õ¬. " +# ^ErrorDecompressing +ÕÕ­Õ¡Õ¬Õ Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ¨ Õ¢Õ¡ÖÕ¥Õ¬Õ¸Ö‚ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Ö‰ +# ^ErrorRegistering +Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ£Ö€Õ¡Õ¶ÖÕ¥Õ¬ Õ£Ö€Õ¡Õ¤Õ¡Ö€Õ¡Õ¶Õ¨(DLL) +# ^ExecShell +"Õ–Õ¡ÕµÕ¬Õ« Õ¯Õ«Ö€Õ¡Õ¼Õ¸Ö‚Õ´. " +# ^Exec +"Ô¿Õ¡Õ¿Õ¡Ö€Õ¾Õ¸Ö‚Õ´ Õ§. " +# ^Extract +"Õ€Õ¡Õ¶Õ¸Ö‚Õ´ Õ§. " +# ^ErrorWriting +"Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ¨ Õ£Ö€Õ¥Õ¬Õ¸Ö‚ Õ½Õ­Õ¡Õ¬. " +# ^InvalidOpcode +ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ«Õ¹Õ¨ Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® Õ§. +# ^NoOLE +"Õ‰Õ¯Õ¡ OLEÕ" +# ^OutputFolder +"ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨. " +# ^RemoveFolder +"Ô¹Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ« Õ»Õ¶Õ»Õ¸Ö‚Õ´. " +# ^RenameOnReboot +"Ô¿Õ¡Õ¶Õ¾Õ¡Õ¶Õ¡ÖƒÕ¸Õ­Õ¾Õ« Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥Õ¬Õ¸Ö‚Ö Õ°Õ¥Õ¿Õ¸. " +# ^Rename +"Ô±Õ¶Õ¾Õ¡Õ¶Õ¡ÖƒÕ¸Õ­Õ¸Ö‚Õ´. " +# ^Skipped +"Ô²Õ¡Ö Õ©Õ¸Õ²Õ¶Õ¡Õ®. " +# ^CopyDetails +ÕŠÕ¡Õ¿Õ³Õ¥Õ¶Õ¥Õ¬ Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ¨ +# ^LogInstall +ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ´Õ¡Õ¶ Õ°Õ¡Õ·Õ¾Õ¥Õ¿Õ¾Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ +# byte +Õ¢Õ¡ÕµÕ© +# kilo + Ô¿ +# mega + Õ„ +# giga + Ô³ \ No newline at end of file diff --git a/tools/Contrib/Language files/Armenian.nsh b/tools/Contrib/Language files/Armenian.nsh new file mode 100644 index 0000000..07c5ad3 --- /dev/null +++ b/tools/Contrib/Language files/Armenian.nsh @@ -0,0 +1,130 @@ +;Language: Armenian (1067) +;Translation by Hrant Ohanyan (h.ohanyan@haysoft.org) + +!insertmacro LANGFILE "Armenian" = "Õ€Õ¡ÕµÕ¥Ö€Õ¥Õ¶" "Hayeren" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "ÕÕ¥Õ¦ Õ¸Õ²Õ»Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ§ $(^NameDA) Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ«Õ¹Õ¨" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ô±ÕµÕ½ Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¯Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ« $(^NameDA)-Õ¨ ÕÕ¥Ö€ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ¸Ö‚Õ´Ö‰$\r$\n$\r$\nÔ½Õ¸Ö€Õ°Õ¸Ö‚Ö€Õ¤ Õ¥Õ¶Ö„ Õ¿Õ¡Õ¬Õ«Õ½ ÖƒÕ¡Õ¯Õ¥Õ¬ Õ¡Õ·Õ­Õ¡Õ¿Õ¸Õ² Õ¢Õ¸Õ¬Õ¸Ö€ Õ®Ö€Õ¡Õ£Ö€Õ¥Ö€Õ¨Ö‰ Ô´Õ¡ Õ°Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ¯Õ¿Õ¡ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚Ö Õ°Õ¥Õ¿Õ¸ Õ­Õ¸Ö‚Õ½Õ¡ÖƒÕ¥Õ¬ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ¨ Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥Õ¬Õ¸Ö‚ÖÖ‰$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "ÕÕ¥Õ¦ Õ¸Õ²Õ»Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ§ $(^NameDA)-Õ¨ Õ°Õ¥Õ¼Õ¡ÖÕ¶Õ¥Õ¬Õ¸Ö‚ Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ô±ÕµÕ½ Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¯Õ»Õ¶Õ»Õ« $(^NameDA)-Õ¨ ÕÕ¥Ö€ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ«ÖÖ‰$\r$\n$\r$\nÕ‹Õ¶Õ»Õ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ°Õ¡Õ´Õ¸Õ¦Õ¾Õ¥Ö„, Õ¸Ö€ $(^NameDA) Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¢Õ¡ÖÕ¡Õ® Õ¹Õ§Ö‰$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Ô±Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA)-Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Õ«Ö€Õ¨, Õ¡ÕºÕ¡ Õ½Õ¥Õ²Õ´Õ¥Ö„ $\"Õ€Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶ Õ¥Õ´$\"Ö‰ Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¥Ö„Ö‰" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Õ«Ö€Õ¨Õ Õ¤Ö€Õ¥Ö„ Õ¶Õ«Õ·Õ¨ Õ¶Õ¥Ö€Ö„Ö‡Õ¸Ö‚Õ´Ö‰ Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¥Ö„: $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Õ«Ö€Õ¨Õ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¶Õ¥Ö€Ö„Õ¸Õ¶Õ·ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ«Ö Õ¡Õ¼Õ¡Õ»Õ«Õ¶Õ¨Ö‰ Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¥Ö„: $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Ô±Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA)-Õ¨ Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚Ö Õ¡Õ¼Õ¡Õ» Õ®Õ¡Õ¶Õ¸Õ©Õ¡ÖÕ¥Ö„ Õ¡Ö€Õ¿Õ¸Õ¶Õ¡Õ£Ö€Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨Ö‰" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Õ«Ö€Õ¨Õ Õ½Õ¥Õ²Õ´Õ¥Ö„ $\"Õ€Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶ Õ¥Õ´$\" Õ¯Õ¸Õ³Õ¡Õ¯Õ¨Ö‰ Õ‹Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¥Ö„Ö‰ $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Õ«Ö€Õ¨Õ Õ¤Ö€Õ¥Ö„ Õ¶Õ«Õ·Õ¨ Õ¶Õ¥Ö€Ö„Ö‡Õ¸Ö‚Õ´Ö‰ Õ‹Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¥Ö„Ö‰ $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ÔµÕ©Õ¥ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ°Õ¡Õ´Õ¡Õ±Õ¡ÕµÕ¶Õ¡Õ£Õ«Ö€Õ¨Õ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¶Õ¥Ö€Ö„Õ¸Õ¶Õ·ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ«Ö Õ¡Õ¼Õ¡Õ»Õ«Õ¶Õ¨Ö‰ Õ‹Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¤Õ¸Ö‚Õ¶Õ¥Ö„Ö‰ $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ÕÕ¥Ö„Õ½Õ¿Õ¨ Õ¯Õ¡Ö€Õ¤Õ¡Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Ö„ Õ¯Õ¸Õ³Õ¡Õ¯Õ¶Õ¥Ö€Õ $\"PageUp$\" Ö‡ $\"PageDown$\"Ö‰" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¾Õ¸Õ² Õ®Ö€Õ¡Õ£Ö€Õ« Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ $(^NameDA)-Õ« Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö„ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Ö‰" + +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Ô¾Ö€Õ¡Õ£Ö€Õ« Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ $(^NameDA)-Õ« Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ¶Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö„ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬Ö‰" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Õ„Õ¯Õ¶Õ«Õ¯Õ« Õ½Õ¬Õ¡Ö„Õ¨ Õ¸Ö‚Õ²Õ²Õ¥Ö„ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ« Õ¾Ö€Õ¡Õ Õ¶Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¯Õ¡Ö€Õ¤Õ¡Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰" + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Õ„Õ¯Õ¶Õ«Õ¯Õ« Õ½Õ¬Õ¡Ö„Õ¨ Õ¸Ö‚Õ²Õ²Õ¥Ö„ Õ¢Õ¡Õ²Õ¡Õ¤Ö€Õ«Õ¹Õ« Õ¾Ö€Õ¡Õ Õ¶Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¯Õ¡Ö€Õ¤Õ¡Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰" + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ« Õ¨Õ¶Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨, Õ¸Ö€Õ¿Õ¥Õ² ÕºÕ¥Õ¿Ö„ Õ§ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ $(^NameDA)-Õ¨Ö‰" +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Õ‹Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ« Õ¨Õ¶Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨, Õ¸Ö€Õ¿Õ¥Õ²Õ«Ö ÕºÕ¥Õ¿Ö„ Õ§ Õ»Õ¶Õ»Õ¥Õ¬ $(^NameDA)-Õ¨Ö‰" +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ¨ ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¾Õ¸Ö‚Õ´ Õ¥Õ¶" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "ÕÕºÕ¡Õ½Õ¥Ö„, ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¸Ö‚Õ´ Õ§ $(^NameDA)-Õ« Ö†Õ¡ÕµÕ¬Õ¥Ö€Õ¨..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¾Õ¥Ö" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Õ€Õ¡Õ»Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¾Õ¥Ö" + ${LangFileString} MUI_TEXT_ABORT_TITLE "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´Õ¨ Õ¨Õ¶Õ¤Õ°Õ¡Õ¿Õ¾Õ¥Õ¬ Õ§Ö‰" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´Õ¨ Õ¹Õ« Õ¡Õ¾Õ¡Ö€Õ¿Õ¾Õ¥Õ¬Ö‰" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Õ‹Õ¶Õ»Õ¸Ö‚Õ´ Õ§" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "ÕÕºÕ¡Õ½Õ¥Ö„, Õ»Õ¶Õ»Õ¸Ö‚Õ´ Õ§ $(^NameDA)-Õ« Ö†Õ¡ÕµÕ¬Õ¥Ö€Õ¨..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Õ‹Õ¶Õ»Õ¾Õ¥Ö" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ°Õ¡Õ»Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ»Õ¶Õ»Õ¾Õ¥ÖÖ‰" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Õ‹Õ¶Õ»Õ´Õ¡Õ¶ Õ£Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¨Õ¶Õ¤Õ°Õ¡Õ¿Õ¾Õ¥Õ¬ Õ§Ö‰" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Ô¾Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¹Õ« Õ»Õ¶Õ»Õ¾Õ¥Õ¬Ö‰" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA)-Õ« Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ´Õ¡Õ¶ Õ¡Õ·Õ­Õ¡Õ¿Õ¡Õ¶Ö„Õ« Õ¡Õ¾Õ¡Ö€Õ¿Õ¸Ö‚Õ´" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA)-Õ¨ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¾Õ¥ÖÖ‰$\r$\n$\r$\nÕÕ¥Õ²Õ´Õ¥Ö„ $\"ÕŠÕ¡Õ¿Ö€Õ¡Õ½Õ¿ Õ§$\" Õ¯Õ¸Õ³Õ¡Õ¯Õ¨Õ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ«Õ¹Õ¨ ÖƒÕ¡Õ¯Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA)-Õ« Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´Õ¨ Õ¡Õ¾Õ¡Ö€Õ¿Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¡Õ°Õ¡Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ« Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¸Ö‚Õ´: ÕŽÕ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥ÕžÕ¬Ö‰" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA)-Õ« Õ»Õ¶Õ»Õ¥Õ¬Õ¸Ö‚ Õ£Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¡Õ´ÖƒÕ¸ÖƒÕ¸Ö‚Õ´ " + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) Õ®Ö€Õ¡Õ£Õ«Ö€Õ¨ Õ»Õ¶Õ»Õ¾Õ¥Õ¬ Õ§ ÕÕ¥Ö€ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ«ÖÖ‰ $\r$\n$\r$\nÕÕ¥Õ²Õ´Õ¥Ö„ $\"ÕŠÕ¡Õ¿Ö€Õ¡Õ½Õ¿ Õ§ $\" Õ¯Õ¸Õ³Õ¡Õ¯Õ¨Õ Õ®Ö€Õ¡Õ£Ö€Õ«Ö Õ¤Õ¸Ö‚Ö€Õ½ Õ£Õ¡Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA)-Õ« Õ»Õ¶Õ»Õ¸Ö‚Õ´Õ¨ Õ¡Õ¾Õ¡Ö€Õ¿Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€ ÕºÕ¡Õ°Õ¡Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ« Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¸Ö‚Õ´: ÕŽÕ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥ÕžÕ¬Ö‰" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ô±ÕµÕ¸, Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥Õ¬ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ«Õ¹Õ¨Ö‰" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "ÕˆÕ¹, Õ¥Õ½ Õ¾Õ¥Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¡Ö€Õ¯Õ¥Õ´ Õ¡Õ¾Õ¥Õ¬Õ« Õ¸Ö‚Õ·Ö‰" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Ô²Õ¡ÖÕ¥Õ¬$(^NameDA)-Õ¨" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ ReadMe Ö†Õ¡ÕµÕ¬Õ¨" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&ÕŠÕ¡Õ¿Ö€Õ¡Õ½Õ¿ Õ§" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Ô¹Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ $\"Start$\" Õ¨Õ¶Õ¿Ö€Õ¡ÖÕ¡Õ¶Õ¯Õ¸Ö‚Õ´" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ $\"Start$\"-Õ« Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨Õ Õ®Ö€Õ¡Õ£Ö€Õ« ÕºÕ«Õ¿Õ¡Õ¯Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ $\"Start$\"-Õ« Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¨, Õ¸Ö€Õ¿Õ¥Õ² Õ¯Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¶ Õ®Ö€Õ¡Õ£Ö€Õ« ÕºÕ«Õ¿Õ¡Õ¯Õ¶Õ¥Ö€Õ¨Ö‰" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Õ‰Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬ ÕºÕ«Õ¿Õ¡Õ¯Õ¶Õ¥Ö€" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA)-Õ« Õ»Õ¶Õ»Õ¸Ö‚Õ´" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA)-Õ¨ Õ»Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¹Õ«ÖÖ‰" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ô¸Õ¶Õ¤Õ°Õ¡Õ¿Õ¥ÕžÕ¬ $(^Name)-Õ« Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´Õ¨Ö‰" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ô¿Õ¡Õ¶Õ£Õ¶Õ¥ÖÕ¶Õ¥ÕžÕ¬ $(^Name)-Õ« Õ»Õ¶Õ»Õ¸Ö‚Õ´Õ¨Ö‰" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Ô¸Õ¶Õ¿Ö€Õ¥Õ¬ Ö…Õ£Õ¿Õ¾Õ¸Õ²Õ¶Õ¥Ö€Õ«Õ¶" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Ô¸Õ¶Õ¿Ö€Õ¥Ö„, Õ©Õ¥ Õ¸Ö€ Ö…Õ£Õ¿Õ¾Õ¸Õ²Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€ Õ¥Ö„ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ $(^NameDA)-Õ¨:" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Ô¸Õ¶Õ¿Ö€Õ¥Ö„, Õ©Õ¥ Õ«Õ¶Õ¹ÕºÕ¥Õ½ Õ¥Ö„ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¿Õ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ $(^NameDA)-Õ¨Õ Õ´Õ«Õ¡ÕµÕ¶ ÕÕ¥Õ¦ Õ°Õ¡Õ´Õ¡Ö€, Õ©Õ¥ Õ¢Õ¸Õ¬Õ¸Ö€ Ö…Õ£Õ¿Õ¾Õ¸Õ²Õ¶Õ¥Ö€Õ«: $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€ Ö…Õ£Õ¿Õ¾Õ¸Õ²Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "ÕÕ¥Õ²Õ¡Õ¯Õ¡ÕµÕ¥Õ¬ Õ´Õ«Õ¡ÕµÕ¶ Õ«Õ¶Õ± Õ°Õ¡Õ´Õ¡Ö€" +!endif diff --git a/tools/Contrib/Language files/Asturian.nlf b/tools/Contrib/Language files/Asturian.nlf new file mode 100644 index 0000000..7d4e59d --- /dev/null +++ b/tools/Contrib/Language files/Asturian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit ;Asturian - Asturies +NLF v6 +# Language ID (none exists at the moment) +9997 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Marcos (marcoscostales@gmail.com). +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalación de $(^Name) +# ^UninstallCaption +Desinstalación de $(^Name) +# ^LicenseSubCaption +: Alcuerdu de Llicencia +# ^ComponentsSubCaption +: Opciones d'Instalación +# ^DirSubCaption +: Direutoriu d'Instalación +# ^InstallingSubCaption +: Instalando +# ^CompletedSubCaption +: Completáu +# ^UnComponentsSubCaption +: Opciones de Desinstalación +# ^UnDirSubCaption +: Direutoriu de Desinstalación +# ^ConfirmSubCaption +: Confirmación +# ^UninstallingSubCaption +: Desinstalando +# ^UnCompletedSubCaption +: Completáu +# ^BackBtn +< &Atrás +# ^NextBtn +&Siguiente > +# ^AgreeBtn +A&ceuto +# ^AcceptBtn +A&ceuto los términos de la llicencia +# ^DontAcceptBtn +&Non aceuto los términos de la llicencia +# ^InstallBtn +&Instalar +# ^UninstallBtn +&Desinstalar +# ^CancelBtn +Encaboxar +# ^CloseBtn +&Zarrar +# ^BrowseBtn +&Restolar... +# ^ShowDetailsBtn +Ver &detalles +# ^ClickNext +Calca Siguiente pa siguir. +# ^ClickInstall +Calca Instalar pa entamar la instalación. +# ^ClickUninstall +Calca Desinstalar pa entamar la desinstalación. +# ^Name +Nome +# ^Completed +Completáu +# ^LicenseText +Por favor, revisa l'acuerdu de llicencia enantes d'instalar $(^NameDA). Si aceutes tolos términos del alcuerdu, calca Aceuto. +# ^LicenseTextCB +Por favor, revisa l'alcuerdu de llicencia enantes d'instalar $(^NameDA). Si aceutes tolos términos del alcuerdu, marca embaxo la caxella. $_CLICK +# ^LicenseTextRB +Por favor, revisa l'alcuerdu de llicencia enantes d'instalar $(^NameDA). Si aceutes tolos términos del alcuerdu, seleiciona embaxo la primer opción. $_CLICK +# ^UnLicenseText +Por favor, revisa l'alcuerdu de llicencia enantes de desinstalar $(^NameDA). Si aceutes tolos términos del alcuerdu, calca Aceuto. +# ^UnLicenseTextCB +Por favor, revisa l'alcuerdu de llicencia enantes de desinstalar $(^NameDA). Si aceutes tolos términos del alcuerdu, marca embaxo la caxella. $_CLICK. +# ^UnLicenseTextRB +Por favor, revisa l'alcuerdu de llicencia enantes de desinstalar $(^NameDA). Si aceutes tolos términos del alcuerdu, seleiciona embaxo la primer opción. $_CLICK +# ^Custom +Personalizada +# ^ComponentsText +Conseña los componentes que deseyes instalar y desconseña los componentes que nun quies instalar. $_CLICK +# ^ComponentsSubText1 +Tipos d'instalación: +# ^ComponentsSubText2_NoInstTypes +Seleiciona los componentes a instalar: +# ^ComponentsSubText2 +O selecciona los componentes opcionales que deseyes instalar: +# ^UnComponentsText +Conseña los componentes que deseyes desinstalar y desconseña los componentes que nun quieras desinstalar. $_CLICK +# ^UnComponentsSubText1 +Tipos de desinstalación: +# ^UnComponentsSubText2_NoInstTypes +Seleiciona los componentes a desinstalar: +# ^UnComponentsSubText2 +O seleiciona los componentes opcionales que deseyes desinstalar: +# ^DirText +El programa d'instalación instalará $(^NameDA) nel siguiente direutoriu. Pa instalar nun direutoriu distintu, calca Restolar y seleiciona otru direutoriu. $_CLICK +# ^DirSubText +Direutoriu de Destín +# ^DirBrowseText +Seleiciona'l direutoriu nel qu'instalará $(^NameDA): +# ^UnDirText +El programa d'instalación desinstalará $(^NameDA) del siguiente direutoriu. Pa desinstalar d'un direutoriu distintu, calca Restolar y seleiciona otru direutoriu. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Seleiciona'l direutoriu dende'l cual desinstalará $(^NameDA): +# ^SpaceAvailable +Espaciu disponible: +# ^SpaceRequired +Espaciu requeríu: +# ^UninstallingText +$(^NameDA) sedrá desinstaláu del siguiente direutoriu. $_CLICK +# ^UninstallingSubText +Desinstalando dende: +# ^FileError +Error abriendo ficheru pa escritura: \r\n\t"$0"\r\nCalca albortar p'anular la instalación,\r\nreintentar pa volver a intentar escribir el ficheru, u\r\nomitir pa inorar esti ficheru +# ^FileError_NoIgnore +Error abriendo ficheru pa escritura: \r\n\t"$0"\r\nCalca reintentar pa volver a intentar escribir el ficheru, o\r\nencaboxar p'anular la instalación +# ^CantWrite +"Nun pudo escribise: " +# ^CopyFailed +Falló la copia +# ^CopyTo +"Copiar a " +# ^Registering +"Rexistrando: " +# ^Unregistering +"Desaniciando rexistru: " +# ^SymbolNotFound +"Nun pudo atopase símbolu: " +# ^CouldNotLoad +"Nun pudo cargase: " +# ^CreateFolder +"Criar direutoriu: " +# ^CreateShortcut +"Criar accesu direutu: " +# ^CreatedUninstaller +"Criar desinstalador: " +# ^Delete +"Desaniciar ficheru: " +# ^DeleteOnReboot +"Desaniciar al reaniciu: " +# ^ErrorCreatingShortcut +"Fallu criando accesu direutu: " +# ^ErrorCreating +"Fallu criando: " +# ^ErrorDecompressing +¡Error descomprimiendo datos! ¿Instalador corruptu? +# ^ErrorRegistering +Fallu rexistrando DLL +# ^ExecShell +"Executar comandu: " +# ^Exec +"Executar: " +# ^Extract +"Estrayer: " +# ^ErrorWriting +"Extrayer: fallu escribiendo al ficheru " +# ^InvalidOpcode +Instalador corruptu: códigu d'operación non válidu +# ^NoOLE +"Ensin OLE pa: " +# ^OutputFolder +"Direutoriu de salida: " +# ^RemoveFolder +"Desaniciar direutoriu: " +# ^RenameOnReboot +"Renomar al reaniciu: " +# ^Rename +"Renomar: " +# ^Skipped +"Omitíu: " +# ^CopyDetails +Copiar Detalles al Cartafueyu +# ^LogInstall +Rexistrar procesu d'instalación +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Asturian.nsh b/tools/Contrib/Language files/Asturian.nsh new file mode 100644 index 0000000..a641214 --- /dev/null +++ b/tools/Contrib/Language files/Asturian.nsh @@ -0,0 +1,129 @@ +;Language: Asturian (1150) +;By Marcos (marcoscostales@gmail.com). + +!insertmacro LANGFILE "Asturian" = "Asturies" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bienveníu al Asistente d'Instalación de $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Esti programa instalará $(^NameDA) nel to ordenador.$\r$\n$\r$\nEncamiéntase que zarres toles demás aplicaciones enantes d'aniciar la instalación. Esto faerá posible anovar ficheros rellacionaos col sistema ensin tener que reaniciar el to ordenador.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bienveníu al Asistente de Desinstalación de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Esti asistente guiaráte durante la desinstalación de $(^NameDA).$\r$\n$\r$\nEnantes d'aniciar la desinstalación, asegúrate de que $(^NameDA) nun se ta executando.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Alcuerdu de llicencia" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Por favor revisa los términos de la llicencia enantes d'instalar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Si aceutes tolos términos del alcuerdu, seleiciona Aceuto pa siguir. Tienes d'aceutar l'alcuerdu pa instalar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si aceutes los términos del alcuerdu, conseña embaxo la caxella. Tienes d'aceutar los términos pa instalar $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si aceutes los términos del alcuerdu, seleiciona embaxo la primer opción. Tienes d'aceutar los términos pa instalar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Alcuerdu de llicencia" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Por favor revisa los términos de la llicencia enantes de desinstalar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Si aceutes tolos términos del alcuerdu, seleiciona Aceuto pa siguir. Tienes d'aceutar l'alcuerdu pa desinstalar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si aceutes los términos del alcuerdu, conseña embaxu la caxella. Tienes d'aceutar los términos pa desinstalar $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si aceutes los términos del alcuerdu, seleccione embaxu la primer opción. Tienes d'aceutar los términos pa desinstalar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Calca Avanzar Páxina pa ver el restu del alcuerdu." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Seleición de componentes" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Seleicione qué carauterístiques de $(^NameDA) deseyes instalar." + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Seleición de componentes" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Seleicione qué carauterístiques de $(^NameDA) quies desinstalar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Allugue'l mur enriba d'un componente pa ver la so descripción." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Escoyer llugar d'instalación" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Escueye'l direutoriu pa instalar $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Escoyer llugar de desinstalación" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Escueye'l direutoriu dende'l cual se desinstalará $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalando" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Por favor espera mientres $(^NameDA) s'instala." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalación Completada" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "La instalación completóse correutamente." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalación Desaniciada" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "La instalación nun se completó correutamente." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor espera mientres $(^NameDA) se desinstala." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstalación Completada" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La desinstalación completóse correutamente." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstalación Desaniciada" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La desinstalación nun se completó correutamente." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Completando l'Asistente d'Instalación de $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) foi instaláu nel to sistema.$\r$\n$\r$\nCalca Finar pa zarrar esti asistente." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "El to sistema tien de reaniciase pa que pueda completase la instalación de $(^NameDA). ¿Quies reaniciar agora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completando l'Asistente de Desinstalación de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) foi desinstaláu del to sistema.$\r$\n$\r$\nCalca Finar pa zarrar esti asistente." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "El to ordenador tien que reaniciar pa finar la desinstalación de $(^NameDA). ¿Quies reiniciar agora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reaniciar agora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Deseo reaniciar manualmente más sero" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Executar $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Ver Lléame" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Finar" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Escoyer Carpeta del Menú Aniciu" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Escueye una Carpeta del Menú Aniciu pa los accesos direutos de $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Seleiciona una carpeta del Menú Aniciu na que quieras criar los accesos direutos del programa. Tamién puedes introducir un nome pa criar una nueva carpeta." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Non criar accesos direutos" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstalar $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Desaniciar $(^NameDA) del to sistema." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "¿De xuru que quies colar de la instalación de $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "¿De xuru que quies colar de la desinstalación de $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Escoyer Usuarios" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Escueye los usuarios pa los cuales quies instalar $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Seleiciona si quies instalar $(^NameDA) namái pa tí o pa tolos usuarios d'esti Ordenador.$(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instalación pa cualisquier usuariu d'esti ordenador" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalación namái pa mí" +!endif diff --git a/tools/Contrib/Language files/Basque.nlf b/tools/Contrib/Language files/Basque.nlf new file mode 100644 index 0000000..b299b54 --- /dev/null +++ b/tools/Contrib/Language files/Basque.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1069 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Iñaki San Vicente +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) -ren Instalazioa +# ^UninstallCaption +$(^Name) -ren Ezabaketa +# ^LicenseSubCaption +: Lizentzia hitzarmen agiria +# ^ComponentsSubCaption +: Instalazio aukerak +# ^DirSubCaption +: Instalazio karpeta +# ^InstallingSubCaption +: Instalatzen +# ^CompletedSubCaption +: Instalazioa burututa +# ^UnComponentsSubCaption +: Ezabaketa aukerak +# ^UnDirSubCaption +: Ezabaketa direktorioa +# ^ConfirmSubCaption +: Berretsi ezabaketa +# ^UninstallingSubCaption +: Ezabatzen +# ^UnCompletedSubCaption +: Ezabaketa burututa +# ^BackBtn +< &Atzera +# ^NextBtn +&Aurrera > +# ^AgreeBtn +Onartu +# ^AcceptBtn +Lizentzia hitzarmenaren baldintzak onartzen ditut. +# ^DontAcceptBtn +Ez ditut lizentzia hitzarmenaren baldintzak onartzen. +# ^InstallBtn +&Instalatu +# ^UninstallBtn +&Ezabatu +# ^CancelBtn +Ezeztatu +# ^CloseBtn +&Itxi +# ^BrowseBtn +&Arakatu... +# ^ShowDetailsBtn +Ikusi &zehaztasunak +# ^ClickNext +Sakatu Aurrera jarraitzeko. +# ^ClickInstall +Sakatu Instalatu instalazioarekin hasteko. +# ^ClickUninstall +Sakatu Ezabatu ezabaketarekin hasteko. +# ^Name +Izena +# ^Completed +Osatuta +# ^LicenseText +Mesedez, aztertu lizentzia hitzarmena $(^NameDA) instalatu aurretik. Baldintza guztiak onartzen badituzu, sakatu Onartu. +# ^LicenseTextCB +Mesedez, aztertu lizentzia hitzarmena $(^NameDA) instalatu aurretik. Baldintza guztiak onartzen badituzu, nabarmendu azpiko laukitxoa. $_CLICK +# ^LicenseTextRB +Mesedez, aztertu lizentzia hitzarmena $(^NameDA) instalatu aurretik. Baldintza guztiak onartzen badituzu, hautatu azpian lehen aukera. $_CLICK +# ^UnLicenseText +Mesedez, aztertu lizentzia hitzarmena $(^NameDA) ezabatu aurretik. Baldintza guztiak onartzen badituzu, sakatu Onartu. +# ^UnLicenseTextCB +Mesedez, aztertu lizentzia hitzarmena $(^NameDA) ezabatu aurretik. Baldintza guztiak onartzen badituzu, nabarmendu azpiko laukitxoa. $_CLICK. +# ^UnLicenseTextRB +Mesedez, aztertu lizentzia hitzarmena $(^NameDA) ezabatu aurretik. Baldintza guztiak onartzen badituzu, hautatu azpian lehen aukera. $_CLICK +# ^Custom +Norberaren nahien arabera +# ^ComponentsText +Nabarmendu instalatu nahi diren osagaiak, eta utzi zuri instalatu nahi ez direnak. $_CLICK +# ^ComponentsSubText1 +Hautatu instalazio mota: +# ^ComponentsSubText2_NoInstTypes +Hautatu instalatu beharreko osagaiak: +# ^ComponentsSubText2 +Edo hautatu instalatu beharreko aukerazko osagaiak: +# ^UnComponentsText +Nabarmendu ezabatu nahi diren osagaiak, eta utzi zuri ezabatu nahi ez direnak. $_CLICK +# ^UnComponentsSubText1 +Hautatu ezabaketa mota: +# ^UnComponentsSubText2_NoInstTypes +Hautatu ezabatu beharreko osagaiak: +# ^UnComponentsSubText2 +Edo hautatu ezabatu beharreko aukerazko osagaiak: +# ^DirText +Instalazio programak $(^NameDA) honako karpetan instalatuko du. Beste karpeta batean instalatzeko, sakatu Arakatu eta aukeratu beste bat. $_CLICK +# ^DirSubText +Helburu karpeta +# ^DirBrowseText +Aukeratu $(^NameDA) instalatuko den karpeta: +# ^UnDirText +Instalazio programak $(^NameDA) honako karpetatik ezabatuko du. Beste karpeta batetik ezabatzeko, sakatu Arakatu eta aukeratu beste bat. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Aukeratu $(^NameDA) zein karpetatik ezabatuko den: +# ^SpaceAvailable +Leku erabilgarria: +# ^SpaceRequired +Behar den lekua: +# ^UninstallingText +$(^NameDA) ondorengo karpetan instalatuko da. $_CLICK +# ^UninstallingSubTex +Ezabatzen honako karpetatik: +# ^FileError +Hutsegitea idazteko fitxategia irekitzean: \r\n\t"$0"\r\nSakatu Irten instalazioa ,\r\nsaiatu berriz fitxategi hau berriz idazten saiatzeko, u\r\njarraitu fitxategi hau alde batera utzita aurrera egiteko +# ^FileError_NoIgnore +Hutsegitea idazteko fitxategia irekitzean: \r\n\t"$0"\r\nsaiatu berriz fitxategi hau berriz idazten saiatzeko ,\r\nSakatu Irten instalazioa +# ^CantWrite +"Ezin izan da idatzi: " +# ^CopyFailed +Kopiatzeak hutsegin du +# ^CopyTo +"Kopiatu hona " +# ^Registering +"Erregistratzen: " +# ^Unregistering +"Erregistroa ezabatzen: " +# ^SymbolNotFound +"Ikurra ezin izan da aurkitu: " +# ^CouldNotLoad +"Ezin izan da kargatu: " +# ^CreateFolder +"Sortu karpeta: " +# ^CreateShortcut +"Sortu lasterbidea: " +# ^CreatedUninstaller +"Sortu ezabatzailea: " +# ^Delete +"Ezabatu fitxategia: " +# ^DeleteOnReboot +"Ezabatu berrabiarazitakoan: " +# ^ErrorCreatingShortcut +"Hutsegitea lasterbidea sortzerakoan: " +# ^ErrorCreating +"Hutsegitea sortzerakoan: " +# ^ErrorDecompressing +¡Hutsegitea datuak deskomprimatzean! Instalatzailea okerra? +# ^ErrorRegistering +Hutsegitea DLL erregistratzerakoan +# ^ExecShell +"Exekutatu agindua: " +# ^Exec +"Exekutatu: " +# ^Extract +"Kanporatu: " +# ^ErrorWriting +"Kanporaketa: hutsegitea fitxategira idazterakoan " +# ^InvalidOpcode +Instalatzailea okerra: ekintza kodea ez da baliozkoa +# ^NoOLE +"OLE-rik ez honentzako: " +# ^OutputFolder +"Irteera karpeta: " +# ^RemoveFolder +"Ezabatu karpeta: " +# ^RenameOnReboot +"Berrizendatu berrabiarazitakoan: " +# ^Rename +"Berrizendatu: " +# ^Skipped +"Alde batera utzitakoa: " +# ^CopyDetails +Kopiatu xehetasunak arbelera +# ^LogInstall +Instalazio prozesuaren erregistroa gorde +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Basque.nsh b/tools/Contrib/Language files/Basque.nsh new file mode 100644 index 0000000..e03a7c9 --- /dev/null +++ b/tools/Contrib/Language files/Basque.nsh @@ -0,0 +1,129 @@ +;Language: Basque (1069) +;By Iñaki San Vicente + +!insertmacro LANGFILE "Basque" = "Euskera" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Ongi etorri $(^NameDA) -ren instalazio programara" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Programa honek $(^NameDA) zure ordenagailuan instalatuko du.$\r$\n$\r$\nAholkatzen da instalazioarekin hasi aurretik beste aplikazio guztiak ixtea. Honek sistemarekin erlazionatuta dauden fitxategien eguneratzea ahalbidetuko du, ordenagailua berrabiarazi beharrik izan gabe.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Ongi etorri $(^NameDA) -ren ezabaketa programara" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Laguntzaile honek $(^NameDA)-ren ezabaketa prozesuan zehar gidatuko zaitu.$\r$\n$\r$\nEzabaketa hasi aurretik, ziurtatu $(^NameDA) martxan ez dagoela .$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lizentzia hitzarmena" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Mesedez aztertu lizentziaren baldintzak $(^NameDA) instalatu aurretik." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Baldintzak onartzen badituzu, sakatu Onartu aurrera egiteko. Hitzarmena onartzea ezinbestekoa da $(^NameDA) instalatzeko." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Baldintzak onartzen badituzu, nabarmendu azpiko laukitxoa. Hitzarmena onartzea ezinbestekoa da $(^NameDA) instalatzeko. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Baldintzak onartzen badituzu, hautatu azpian lehen aukera. Hitzarmena onartzea ezinbestekoa da $(^NameDA) instalatzeko. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lizentzia hitzarmena" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Mesedez aztertu lizentziaren baldintzak $(^NameDA) ezabatu aurretik." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Baldintzak onartzen badituzu, sakatu Onartu aurrera egiteko. Hitzarmena onartzea ezinbestekoa da $(^NameDA) ezabatzeko." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Baldintzak onartzen badituzu, nabarmendu azpiko laukitxoa. Hitzarmena onartzea ezinbestekoa da $(^NameDA) ezabatzeko. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Baldintzak onartzen badituzu, hautatu azpian lehen aukera. Hitzarmena onartzea ezinbestekoa da $(^NameDA) ezabatzeko. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Sakatu Av Pág hitzarmenaren gainontzeko atalak ikusteko." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Osagaien hautatzea" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Hautatu $(^NameDA)-ren zein ezaugarri instalatu nahi duzun." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Osagaien hautatzea" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Hautatu $(^NameDA)-ren zein ezaugarri ezabatu nahi duzun." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Azalpena" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Jarri sagua osagai baten gainean dagokion azalpena ikusteko." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Hautatu osagai bat bere azalpena ikusteko." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Hautatu instalazioaren lekua" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Aukeratu $(^NameDA) instalatzeko karpeta." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Aukeratu ezabatuko den karpeta" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Aukeratu $(^NameDA) zein karpetatik ezabatuko den." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalatzen" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Mesedez itxoin $(^NameDA) instalatzen den bitartean." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalazioa burututa" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalazioa zuzen burutu da." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalazioa ezeztatua" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalazioa ez da zuzen burutu." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Ezabatzen" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Mesedez itxoin $(^NameDA) ezabatzen den bitartean." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Ezabatzea burututa" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Ezabatzea zuzen burutu da." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Ezabatzea ezeztatuta" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Ezabatzea ez da zuzen burutu." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA)-ren instalazio laguntzailea osatzen" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) zure sisteman instalatu da.$\r$\n$\r$\nSakatu Amaitu laguntzaile hau ixteko." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Zure sistema berrabiarazi behar duzu $(^NameDA)-ren instalazioa osatzeko. Orain Berrabiarazi nahi duzu?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA)-ren ezabaketa laguntzailea osatzen" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) zure sistematik ezabatu da.$\r$\n$\r$\nSakatu Amaitu laguntzaile hau ixteko." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Zure ordenagailuak berrabiarazia izan behar du $(^NameDA)-ren ezabaketa osatzeko. Orain Berrabiarazi nahi duzu?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Berrabiarazi orain" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Neuk berrabiarazi geroago" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Exekutatu $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Ikusi Readme.txt" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Amaitu" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Aukeratu Hasiera Menuko karpeta" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Aukeratu Hasiera Menuko karpeta bat $(^NameDA)-ren lasterbideentzako." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Aukeratu Hasiera Menuko karpeta bat, non programaren lasterbideak instalatu nahi dituzun. Karpeta berri bat sortzeko izen bat ere adierazi dezakezu." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ez sortu lasterbiderik" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Ezabatu $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) zure sistematik ezabatzen du." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ziur zaude $(^Name)-ren instalaziotik irten nahi duzula?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ziur zaude $(^Name)-ren ezabaketa laguntzailetik irten nahi duzula?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Hautatu Erabiltzaileak" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Hautatu zein erabiltzailerentzat ezartzea nahi duzun $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Hautatu norentzat ezartzea nahi duzun $(^NameDA) zuretzat bakarrik edo ordenagailu honetako erabiltzaile guztientzat. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Ezarri ordenagailu hau erabiltzen duen edonorentzat" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Ezarri niretzat bakarrik" +!endif diff --git a/tools/Contrib/Language files/Belarusian.nlf b/tools/Contrib/Language files/Belarusian.nlf new file mode 100644 index 0000000..b1a4e27 --- /dev/null +++ b/tools/Contrib/Language files/Belarusian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1059 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by PrydesparBLR [ prydespar@outlook.com ] +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +УÑталÑванне $(^Name) +# ^UninstallCaption +Выдаленне $(^Name) +# ^LicenseSubCaption +: ЛіцÑнзійнае пагадненне +# ^ComponentsSubCaption +: Параметры ÑžÑталÑÐ²Ð°Ð½Ð½Ñ +# ^DirSubCaption +: Папка ÑžÑталÑÐ²Ð°Ð½Ð½Ñ +# ^InstallingSubCaption +: КапіÑванне файлаў +# ^CompletedSubCaption +: ПрацÑдура завершена +# ^UnComponentsSubCaption +: Параметры Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ +# ^UnDirSubCaption +: Папка Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ +# ^ConfirmSubCaption +: ПацвÑрджÑнне +# ^UninstallingSubCaption +: Выдаленне файлаў +# ^UnCompletedSubCaption +: ПрацÑдура завершана +# ^BackBtn +< &Ðазад +# ^NextBtn +&Далей > +# ^AgreeBtn +&ПрынÑць +# ^AcceptBtn +Я &прымаю ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ +# ^DontAcceptBtn +Я н&е прымаю ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ +# ^InstallBtn +&УÑталÑваць +# ^UninstallBtn +Выд&аліць +# ^CancelBtn +СкаÑаваць +# ^CloseBtn +За&крыць +# ^BrowseBtn +Ð&глÑд ... +# ^ShowDetailsBtn +Падра&бÑзнаÑці... +# ^ClickNext +ÐаціÑніце кнопку "Далей", каб працÑгнуць уÑталÑванне праграмы. +# ^ClickInstall +ÐаціÑніце кнопку "УÑталÑваць", каб пачаць працÑÑ ÑžÑталÑÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. +# ^ClickUninstall +ÐаціÑніце кнопку "Выдаліць", каб пачаць працÑÑ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. +# ^Name +Ð†Ð¼Ñ +# ^Completed +Завершана +# ^LicenseText +Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ пачаткам уÑталÑÐ²Ð°Ð½Ð½Ñ $(^NameDA). Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, націÑніце кнопку "ПрынÑць". +# ^LicenseTextCB +Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ пачаткам уÑталÑÐ²Ð°Ð½Ð½Ñ $(^NameDA). Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, націÑніце на ÑцÑжок ніжÑй. $_CLICK +# ^LicenseTextRB +Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ пачаткам уÑталÑÐ²Ð°Ð½Ð½Ñ $(^NameDA). Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, выберыце першы варыÑнт з прапанаваных нiжÑй. $_CLICK +# ^UnLicenseText +Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ пачаткам Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA). Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, нацiÑнiце кнопку "ПрынÑць". +# ^UnLicenseTextCB +Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ пачаткам Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA). Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, націÑніце на ÑцÑжок ніжÑй. $_CLICK +# ^UnLicenseTextRB +Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ пачаткам Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA). Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, выберыце першы варыÑнт з прапанаваных нiжÑй. $_CLICK +# ^Custom +Выбарачна +# ^ComponentsText +Выберыце кампаненты праграмы, ÑкiÑ Ð’Ñ‹ жадаеце ÑžÑталÑваць. $_CLICK +# ^ComponentsSubText1 +Выберыце тып уÑталÑваннÑ: +# ^ComponentsSubText2_NoInstTypes +Выберыце кампаненты праграмы, каб уÑталÑваць iÑ…: +# ^ComponentsSubText2 +або выберыце кампаненты праграмы, каб уÑталÑваць iÑ… па Ñвайму жаданню: +# ^UnComponentsText +Выберыце кампаненты, ÑкiÑ Ð’Ñ‹ жадаеце выдалiць, i знiмiце ÑцÑжкі, Ð²Ñ‹Ð±Ñ€Ð°Ð½Ñ‹Ñ Ð´Ð»Ñ Ñ‚Ñ‹Ñ… кампанентаў, ÑкiÑ Ð½Ðµ Ñ‚Ñ€Ñба выдалÑць. $_CLICK +# ^UnComponentsSubText1 +Выберыце тып выдаленнÑ: +# ^UnComponentsSubText2_NoInstTypes +Выберыце кампаненты Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ: +# ^UnComponentsSubText2 +або выберыце кампаненты праграмы Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ: +# ^DirText +Праграма ÑžÑталюе $(^NameDA) у выбраную папку. Каб уÑталÑваць праграму Ñž iншай папкі, нацiÑнiце кнопку "ÐглÑд" i выберыце патрÑбную папку. $_CLICK +# ^DirSubText +Папка ÑžÑталÑÐ²Ð°Ð½Ð½Ñ +# ^DirBrowseText +Выберыце папку Ð´Ð»Ñ ÑžÑталÑÐ²Ð°Ð½Ð½Ñ $(^NameDA): +# ^UnDirText +Праграма выдалiць $(^NameDA) з выбранай папкі. Каб выдаліць праграму з iншай папкі, нацiÑнiце кнопку "ÐглÑд" i выберыце патрÑбную папку. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Выберыце папку, з Ñкой Ð’Ñ‹ жадаеце выдалiць $(^NameDA): +# ^SpaceAvailable +"ДаÑтупна на дыÑку: " +# ^SpaceRequired +"ПатрÑбна меÑца на дыÑку: " +# ^UninstallingText +Праграма выдалiць $(^NameDA) з Вашага камп'ютара. $_CLICK +# ^UninstallingSubText +Выдаленне з: +# ^FileError +Ðемагчыма адкрыць файл Ð´Ð»Ñ Ð·Ð°Ð¿iÑу: \r\n\r\n$0\r\n\r\nÐацiÑнiце кнопку "Перапынiць", каб перапынiць уÑталÑванне;\r\n"Паўтарыць", каб паўтарыць Ñпробу запiÑу Ñž файл;\r\n"Ігнараваць", каб прапуÑцiць гÑта дзеÑнне. +# ^FileError_NoIgnore +Ðемагчыма адкрыць файл Ð´Ð»Ñ Ð·Ð°Ð¿iÑу: \r\n\r\n$0\r\n\r\nÐацiÑнiце кнопку "Паўтарыць", каб паўтарыць Ñпробу запiÑу Ñž файл;\r\n"СкаÑаваць", каб перапынiць уÑталÑванне. +# ^CantWrite +"Ðемагчыма запiÑаць: " +# ^CopyFailed +Памылка пры капіÑванні +# ^CopyTo +"КапіÑванне Ñž " +# ^Registering +"РÑгiÑтрацыÑ: " +# ^Unregistering +"Выдаленне Ñ€ÑгiÑтрацыi: " +# ^SymbolNotFound +"Ðемагчыма знайÑці Ñiмвал: " +# ^CouldNotLoad +"Ðемагчыма загрузiць: " +# ^CreateFolder +"СтварÑнне папкі: " +# ^CreateShortcut +"СтварÑнне Ñрлыка: " +# ^CreatedUninstaller +"СтварÑнне праграмы выдаленнÑ: " +# ^Delete +"Выдаленне файла: " +# ^DeleteOnReboot +"Выдаленне паÑÐ»Ñ Ð¿ÐµÑ€Ð°Ð·Ð°Ð¿ÑƒÑку камп'ютара: " +# ^ErrorCreatingShortcut +"Памылка ÑтварÑÐ½Ð½Ñ Ñрлыка: " +# ^ErrorCreating +"Памылка ÑтварÑннÑ: " +# ^ErrorDecompressing +Ðемагчыма выцÑгнуць дадзеныÑ. Магчыма пашкоджаны дыÑтрыбутыў. +# ^ErrorRegistering +Ðемагчыма зарÑгіÑтраваць бібліÑÑ‚Ñку (DLL) +# ^ExecShell +"Выкананне каманды абалонкі: " +# ^Exec +"Выкананне: " +# ^Extract +"Выманне: " +# ^ErrorWriting +"Выманне: памылка запiÑу файла" +# ^InvalidOpcode +дыÑтрыбутыў пашкоджаны: код памылкi +# ^NoOLE +"ÐÑма OLE длÑ: " +# ^OutputFolder +"Папка уÑталÑваннÑ: " +# ^RemoveFolder +"Выдаленне папкі: " +# ^RenameOnReboot +"Перайменаванне паÑÐ»Ñ Ð¿ÐµÑ€Ð°Ð·Ð°Ð¿ÑƒÑку камп'ютара: " +# ^Rename +"Перайменаванне: " +# ^Skipped +"Прапушчана: " +# ^CopyDetails +КапіÑваць звеÑткi Ñž буфер абмена +# ^LogInstall +ЗапiÑваць у лог працÑÑ ÑƒÑталÑÐ²Ð°Ð½Ð½Ñ +# byte +Б +# kilo + К +# mega + Ðœ +# giga + Г diff --git a/tools/Contrib/Language files/Belarusian.nsh b/tools/Contrib/Language files/Belarusian.nsh new file mode 100644 index 0000000..32f11a4 --- /dev/null +++ b/tools/Contrib/Language files/Belarusian.nsh @@ -0,0 +1,129 @@ +;Language: Belarusian (1059) +;Translated by PrydesparBLR [ prydespar@outlook.com.by ] + +!insertmacro LANGFILE "Belarusian" = "БеларуÑкаÑ" "Bielaruskaja" ; BieÅ‚aruskaja + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Ð’Ð°Ñ Ð²iтае ÑžÑталёўшчык $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "ГÑта праграма ÑžÑталюе $(^NameDA) на Ваш камп'ютар.$\r$\n$\r$\nПерад уÑталÑваннем прапануем закрыць уÑе праграмы, ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ¾Ð½Ð²Ð°ÑŽÑ†Ñ†Ð° на дадзены момант. ГÑта дапаможа ÑžÑталёўшчыку абнавіць ÑÑ–ÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ без перазапуÑку камп'ютара.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Ð’Ñ‹ вырашылі выдаліць $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "ГÑта праграма выдаліць $(^NameDA) з Вашага камп'ютара.$\r$\n$\r$\nПерад выдаленнем пераканайцеÑÑ Ñž тым, што праграма $(^NameDA) не запушчана.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Лiцензiйнае пагадненне" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ уÑталÑваннем $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Калi Ð’Ñ‹ прымаеце ўмовы Лiцензiйнага пагадненнÑ, націÑніце кнопку $\"ПрынÑць$\". ГÑта неабходна Ð´Ð»Ñ ÑžÑталÑÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Калi Ð’Ñ‹ прымаеце ўмовы Лiцензiйнага пагадненнÑ, націÑніце на ÑцÑжок ніжÑй. ГÑта неабходна Ð´Ð»Ñ ÑžÑталÑÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Калi Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, выберыце першы варыÑнт з прапанаваных ніжÑй. ГÑта неабходна Ð´Ð»Ñ ÑžÑталÑÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "ЛіцÑнзійнае пагадненне" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Калі лаÑка, прачытайце ўмовы ЛіцÑнзійнага Ð¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð°Ð´ выдаленнем $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, націÑніце кнопку $\"ПрынÑць$\". ГÑта неабходна Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, націÑніце на ÑцÑжок ніжÑй. ГÑта неабходна Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Калі Ð’Ñ‹ прымаеце ўмовы ЛіцÑнзійнага пагадненнÑ, выберыце першы варыÑнт з прапанаваных ніжÑй. ГÑта неабходна Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ВыкарыÑтоўвайце кнопкi $\"PageUp$\" i $\"PageDown$\" Ð´Ð»Ñ Ð¿ÐµÑ€Ð°Ð¼ÑшчÑÐ½Ð½Ñ Ð¿Ð° Ñ‚ÑкÑце." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Кампаненты праграмы, ÑÐºÐ°Ñ ÑžÑталёўваецца" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Выберыце кампаненты $(^NameDA), ÑÐºÑ–Ñ Ð’Ñ‹ жадаеце ÑžÑталÑваць." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Кампаненты праграмы" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Выберыце кампаненты $(^NameDA), ÑÐºÑ–Ñ Ð’Ñ‹ жадаеце выдаліць." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÐпіÑанне" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ПерамÑÑціце курÑор мышы на назву кампанента, каб прачытаць Ñго апіÑанне." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Выберыце кампанент, каб прачытаць Ñго апіÑанне." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Выбар папкі Ð´Ð»Ñ ÑžÑталÑваннÑ" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Выберыце папку, у Ñкую патрÑбна ÑžÑталÑваць $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Выбар папкі Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Выберыце папку, з Ñкой патрÑбна выдаліць $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "КапіÑванне файлаў" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Пачакайце, калі лаÑка, выконваецца капіÑванне файлаў $(^NameDA) на Ваш камп'ютар..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "УÑталÑванне завершана" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "УÑталÑванне паÑпÑхова завершана." + ${LangFileString} MUI_TEXT_ABORT_TITLE "УÑталÑванне перарвана" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "УÑталÑванне не завершана." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Выдаленне" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Пачакайце, калі лаÑка, выконваецца выдаленне файлаў $(^NameDA) з Вашага камп'ютара..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Выдаленне завершана" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Выдаленне праграмы паÑпÑхова завершана." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Выдаленне перарвана" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Выдаленне выканана не поўнаÑцю." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "ЗаканчÑнне ÑžÑталÑÐ²Ð°Ð½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "УÑталÑванне $(^NameDA) выканана.$\r$\n$\r$\nÐаціÑніце кнопку $\"Гатова$\", каб выйÑці." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Каб завершыць уÑталÑванне $(^NameDA), неабходна перазапуÑціць камп'ютар. Ці жадаеце Ð’Ñ‹ зрабіць гÑта зараз?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "ЗаканчÑнне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Выдаленне $(^NameDA) з Вашага камп'ютара выканана.$\r$\n$\r$\nÐаціÑніце кнопку $\"Гатова$\"каб выйÑці." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Каб завершыць выдаленне $(^NameDA), неабходна перазапуÑціць камп'ютар. Ці жадаеце Ð’Ñ‹ зрабіць гÑта зараз?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Так, перазапуÑціць камп'ютар зараз" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ðе, перазапуÑціць камп'ютар пазней" + ${LangFileString} MUI_TEXT_FINISH_RUN "&ЗапуÑціць $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Паказаць інфармацыю аб праграме" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Гатова" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Папка Ñž меню $\"ПуÑк$\"" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Выберыце папку Ñž меню $\"ПуÑк$\" Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼ÑшчÑÐ½Ð½Ñ Ñрлыкоў праграмы." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Выберыце папку Ñž меню $\"ПуÑк$\", куды будуць змешчаны Ñрлыкі праграмы. Ð’Ñ‹ такÑама можаце ўвеÑці іншае Ñ–Ð¼Ñ Ð¿Ð°Ð¿ÐºÑ–." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ðе Ñтвараць Ñрлыкі" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Выдаленне $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Выдаленне $(^NameDA) з Вашага камп'ютара." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ð’Ñ‹ Ñапраўды жадаеце ÑкаÑаваць уÑталÑванне $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ð’Ñ‹ Ñапраўды жадаеце ÑкаÑаваць выдаленне $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Выбраць карыÑтальнікаў" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Выберыце, Ð´Ð»Ñ Ñкіх карыÑтальнікаў Ð’Ñ‹ хочаце уÑталÑваць $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Выберыце, ÑžÑталёўваць $(^NameDA) толькі Ð´Ð»Ñ ÑÑбе або Ð´Ð»Ñ ÑžÑÑ–Ñ… карыÑтальнікаў гÑтага камп'ютара. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "УÑталÑваць Ð´Ð»Ñ ÑžÑÑ–Ñ… карыÑтальнікаў" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "УÑталÑваць толькі Ð´Ð»Ñ Ð±Ñгучага карыÑтальніка" +!endif diff --git a/tools/Contrib/Language files/Bosnian.nlf b/tools/Contrib/Language files/Bosnian.nlf new file mode 100644 index 0000000..dfb4218 --- /dev/null +++ b/tools/Contrib/Language files/Bosnian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +5146 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Salih CAVKIC, cavkic@skynet.be +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Instalacija +# ^UninstallCaption +$(^Name) Uklanjanje +# ^LicenseSubCaption +: Licencno pravo koriÅ¡tenja +# ^ComponentsSubCaption +: Opcije instalacije +# ^DirSubCaption +: Izbor mape za instalaciju +# ^InstallingSubCaption +: Instaliranje +# ^CompletedSubCaption +: ZavrÅ¡eno +# ^UnComponentsSubCaption +: Opcije uklanjanja +# ^UnDirSubCaption +: Mapa uklanjanja +# ^ConfirmSubCaption +: Potvrda +# ^UninstallingSubCaption +: Uklanjanje +# ^UnCompletedSubCaption +: ZavrÅ¡eno uklanjanje +# ^BackBtn +< &Nazad +# ^NextBtn +&Dalje > +# ^AgreeBtn +&Prihvatam +# ^AcceptBtn +&Prihvatam uvjete licencnog ugovora +# ^DontAcceptBtn +&Ne prihvatam uvjete licencnog ugovora +# ^InstallBtn +&Instaliraj +# ^UninstallBtn +&Ukloni +# ^CancelBtn +Odustani +# ^CloseBtn +&Zatvori +# ^BrowseBtn +&Pregledaj... +# ^ShowDetailsBtn +Prikaži &detalje +# ^ClickNext +Pritisnite dugme 'Dalje' za nastavak. +# ^ClickInstall +Pritisnite dugme 'Instaliraj' za poÄetak instalacije. +# ^ClickUninstall +Pritisnite dugme 'Ukloni' za poÄetak uklanjanja. +# ^Name +Ime +# ^Completed +ZavrÅ¡eno +# ^LicenseText +Molim proÄitajte licencu prije instaliranja programa $(^NameDA). Ukoliko prihvatate sve uvjete ugovora, odaberite 'Prihvatam'. +# ^LicenseTextCB +Molim proÄitajte licencu prije instaliranja programa $(^NameDA). Ukoliko prihvatate sve uvjete ugovora, oznaÄite donji kvadratić. $_CLICK +# ^LicenseTextRB +Molim proÄitajte licencu prije instaliranja programa $(^NameDA). Ukoliko prihvatate sve uvjete ugovora, odaberite prvu donju opciju. $_CLICK +# ^UnLicenseText +Molim proÄitajte licencu prije uklanjanja programa $(^NameDA). Ukoliko prihvatate sve uvjete ugovora, odaberite 'Prihvatam'. +# ^UnLicenseTextCB +Molim proÄitajte licencu prije uklanjanja programa $(^NameDA). Ako prihvatate sve uvjete ugovora, obilježite donji kvadratić. $_CLICK +# ^UnLicenseTextRB +Molim proÄitajte licencu prije uklanjanja programa $(^NameDA). Ukoliko prihvatate sve uvjete ugovora, odaberite prvu opciju ispod. $_CLICK +# ^Custom +PodeÅ¡avanje +# ^ComponentsText +OznaÄite komponente koje želite instalirati. Instaliraju se samo oznaÄene komponente. Uklonite oznaku sa onih koje ne želite instalirati. $_CLICK +# ^ComponentsSubText1 +Izaberite tip instalacije: +# ^ComponentsSubText2_NoInstTypes +Odaberite komponente za instalaciju: +# ^ComponentsSubText2 +Ili po izboru oznaÄite komponente koje želite instalirati: +# ^UnComponentsText +OznaÄite komponente koje želite ukloniti. Uklonite oznaku sa onih koje ne želite ukloniti. $_CLICK +# ^UnComponentsSubText1 +Izaberite tip uklanjanja: +# ^UnComponentsSubText2_NoInstTypes +Izaberite komponente za uklanjanje: +# ^UnComponentsSubText2 +Ili po izboru odaberite komponente koje želite da uklonite: +# ^DirText +Program $(^NameDA) će biti instaliran u sljedeću mapu. Za instalaciju na neku drugu mapu odaberite 'Pregledaj...' i odaberite drugu mapu. $_CLICK +# ^DirSubText +OdrediÅ¡na mapa +# ^DirBrowseText +Izaberite mapu u koju želite instalirati program $(^NameDA): +# ^UnDirText +Program $(^NameDA) će biti uklonjen iz navedene mape. Za uklanjanje iz druge mape odaberite 'Pregledaj...' i oznaÄite drugu mapu. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Izaberite mapu iz koje ćete program $(^NameDA) ukloniti: +# ^SpaceAvailable +"Slobodno prostora na disku: " +# ^SpaceRequired +"Potrebno prostora na disku: " +# ^UninstallingText +Program $(^NameDA) će biti uklonjen iz sljedeće mape. $_CLICK +# ^UninstallingSubText +Uklanjanje iz: +# ^FileError +GreÅ¡ka prilikom otvaranja datoteke za upisivanje: \r\n\t"$0"\r\n\"Odustani\" za prekid instalacije,\r\n\"Ponovi\" za ponovni pokuÅ¡aj upisivanja, ili\r\n\"IgnoriÅ¡i\" za zanemarenje te datoteke +# ^FileError_NoIgnore +GreÅ¡ka prilikom otvaranja datoteke za upisivanje: \r\n\t"$0"\r\n\"Ponovi\" za ponovni pokuÅ¡aj zapisivanja, ili\r\n\"Odustani\" za prekid instalacije +# ^CantWrite +"Nemoguće upisati: " +# ^CopyFailed +GreÅ¡ka prilikom kopiranja +# ^CopyTo +"Kopiraj u " +# ^Registering +"Prijava: " +# ^Unregistering +"Odjava: " +# ^SymbolNotFound +"Nemoguće naći simbol: " +# ^CouldNotLoad +"Nemoguće uÄitavanje: " +# ^CreateFolder +"Napravi mapu: " +# ^CreateShortcut +"Napravi preÄicu: " +# ^CreatedUninstaller +"Program za uklanjanje: " +# ^Delete +"ObriÅ¡i datoteku: " +# ^DeleteOnReboot +"ObriÅ¡i prilikom ponovnog pokretanja: " +# ^ErrorCreatingShortcut +"GreÅ¡ka prilikom kreiranja preÄica: " +# ^ErrorCreating +"GreÅ¡ka prilikom kreiranja: " +# ^ErrorDecompressing +GreÅ¡ka prilikom otpakivanja podataka! OÅ¡tećen instalacijski program? +# ^ErrorRegistering +GreÅ¡ka prilikom prijavljivanja DLLa +# ^ExecShell +"ExecShell: " +# ^Exec +"IzvrÅ¡i: " +# ^Extract +"Otpakuj: " +# ^ErrorWriting +"Otpakivanje: greÅ¡ka upisivanja u datoteku " +# ^InvalidOpcode +OÅ¡tećena instalacijska datoteka: neispravna opkoda +# ^NoOLE +"Nema OLE za: " +# ^OutputFolder +"Izlazna mapa: " +# ^RemoveFolder +"ObriÅ¡i mapu: " +# ^RenameOnReboot +"Preimenuj prilikom ponovnog startovanja: " +# ^Rename +"Preimenuj: " +# ^Skipped +"PreskoÄeno: " +# ^CopyDetails +Kopiraj detalje na Klembord +# ^LogInstall +Logiraj zapisnik procesa instalacije +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G + diff --git a/tools/Contrib/Language files/Bosnian.nsh b/tools/Contrib/Language files/Bosnian.nsh new file mode 100644 index 0000000..29c1bcb --- /dev/null +++ b/tools/Contrib/Language files/Bosnian.nsh @@ -0,0 +1,121 @@ +;Language: Bosnian (5146) +;By Salih ÄŒavkić, cavkic@skynet.be + +!insertmacro LANGFILE "Bosnian" = "Bosanski" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li u program za instalaciju $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ovaj program će instalirati $(^NameDA) na VaÅ¡ sistem. $\r$\n$\r$\nPreporuÄujemo da neizostavno zatvorite sve druge otvorene programe prije nego Å¡to definitivno zapoÄnete sa instaliranjem. To će omogućiti bolju nadogradnju odreÄ‘enih sistemskih datoteka bez potrebe da VaÅ¡ raÄunar ponovo startujete. Instaliranje programa možete prekinuti pritiskom na dugme 'Odustani'.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li u postupak uklanjanja programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ovaj će Vas vodiÄ provesti kroz postupak uklanjanja programa $(^NameDA).$\r$\n$\r$\nPrije samog poÄetka, molim zatvorite program $(^NameDA) ukoliko je sluÄajno otvoren.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licencni ugovor" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Molim proÄitajte licencni ugovor $(^NameDA) prije instalacije programa." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ako prihvatate uslove licence, odaberite 'Prihvatam' za nastavak. Morate prihvatiti licencu za instalaciju programa $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ako prihvatate uslove licence, oznaÄite donji kvadratić. Morate prihvatiti licencu za instalaciju programa $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ako prihvatate uslove licence, odaberite prvu donju opciju. Morate prihvatiti licencu za instalaciju programa $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licencni ugovor o pravu koriÅ¡tenja" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Molim proÄitajte licencu prije uklanjanja programa $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ako prihvatate uslove licence, odaberite 'Prihvatam' za nastavak. Morate prihvatiti licencu za uklanjanje programa $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ako prihvatate uslove licence, oznaÄite donji kvadratić. Morate prihvatiti licencu za uklanjanje programa $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ako prihvatate uslove licence, odaberite prvu donju opciju. Morate prihvatiti licencu za uklanjanje programa $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Pritisnite 'Page Down' na tastaturi za ostatak licence." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Izbor komponenti za instalaciju" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Izaberite komponente programa $(^NameDA) koje želite instalirati." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Izbor komponenti za uklanjanje" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Izaberite komponente programa $(^NameDA) koje želite ukloniti." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Postavite kursor od miÅ¡a iznad komponente da biste vidjeli njezin opis." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Selektirajte jednu komponentu da vidite njezin opis." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Odaberite odrediÅ¡te za instalaciju" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Odaberite mapu u koju želite instalirati program $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Izaberite polaziÅ¡te za uklanjanje" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Selektirajte mapu iz koje želite ukloniti program $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instaliranje" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Molim priÄekajte na zavrÅ¡etak instalacije programa $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Kraj instalacije" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalacija je u potpunosti uspjeÅ¡no zavrÅ¡ila." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalacija je prekinuta" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalacija nije zavrÅ¡ila uspjeÅ¡no." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uklanjanje" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Molim Vas priÄekajte da vodiÄ zavrÅ¡i uklanjanje $(^NameDA) programa." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Uklanjanje je zavrÅ¡eno" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Uklanjanje je u potpunosti zavrÅ¡ilo uspjeÅ¡no." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Uklanjanje je prekinuto" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Uklanjanje nije zavrÅ¡ilo uspjeÅ¡no." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "DovrÅ¡avanje instalacije programa $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) je instaliran na VaÅ¡e raÄunar.$\r$\n$\r$\nPritisnite dugme 'Kraj' za zavrÅ¡etak." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "RaÄunar treba ponovno startovati za dovrÅ¡avanje instalacije programa $(^NameDA). Želite li to uÄiniti sada?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "ZavrÅ¡etak uklanjanja programa $(^NameDA) sa VaÅ¡eg sistema." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Program $(^NameDA) je uklonjen sa VaÅ¡eg raÄunara.$\r$\n$\r$\nPritisnite dugme 'Kraj' za zatvaranje ovog prozora." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "VaÅ¡ raÄunar trebate ponovno startovati da dovrÅ¡ite uklanjanje programa $(^NameDA). Želite li da odmah sad ponovo startujete raÄunar?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Startuj raÄunar odmah sad" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ponovno ću pokrenuti raÄunar kasnije" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Pokreni program $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Prikaži datoteku &Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Kraj" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Izbor mape u Start meniju" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Izaberite ime za programsku mapu unutar Start menija." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Izaberite jednu mapu u Start meniju u kojoj želite da se kreiraju preÄice programa. Možete takoÄ‘er unijeti ime za novu mapu ili selektirati već postojeću." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nemojte praviti preÄice" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Uklanjanje programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Program $(^NameDA) će biti uklonjen sa VaÅ¡eg raÄunara." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Jeste li sigurni da želite prekinuti instalaciju programa $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Jeste li sigurni da želite prekinuti uklanjanje $(^Name) programa?" +!endif diff --git a/tools/Contrib/Language files/Breton.nlf b/tools/Contrib/Language files/Breton.nlf new file mode 100644 index 0000000..1423026 --- /dev/null +++ b/tools/Contrib/Language files/Breton.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1150 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by KAD-Korvigelloù an Drouizig (drouizig@drouizig.org) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Staliañ ha kefluniañ $(^Name) +# ^UninstallCaption +Distaliañ $(^Name) +# ^LicenseSubCaption +: Aotre arverañ +# ^ComponentsSubCaption +: Dibaboù staliañ +# ^DirSubCaption +: Kavlec'h staliañ +# ^InstallingSubCaption +: O staliañ ar restroù +# ^CompletedSubCaption +: Echu eo +# ^UnComponentsSubCaption +: Dibaboù distaliañ +# ^UnDirSubCaption +: Kavlec'h distaliañ +# ^ConfirmSubCaption +: Kadarnañ +# ^UninstallingSubCaption +: O tistaliañ ar restroù +# ^UnCompletedSubCaption +: Echu eo +# ^BackBtn +< &Kent +# ^NextBtn +&War-lerc'h > +# ^AgreeBtn +&A-du emaon +# ^AcceptBtn +&Degemer holl dermoù al lañvaz emglev +# ^DontAcceptBtn +&Chom hep degemer termoù al lañvaz emglev +# ^InstallBtn +&Staliañ +# ^UninstallBtn +&Distaliañ +# ^CancelBtn +Nullañ +# ^CloseBtn +&Serriñ +# ^BrowseBtn +F&urchal... +# ^ShowDetailsBtn +Muioc'h a &ditouroù +# ^ClickNext +Klikit war « War-lerc'h » evit mont war-raok. +# ^ClickInstall +Klikit war « Staliañ » evit kregiñ gant ar staliadur. +# ^ClickUninstall +Klikit war « Distaliañ » evit kregiñ gant an distaliadur. +# ^Name +Anv +# ^Completed +Echu eo +# ^LicenseText +Bezit aketus en ur lenn an aotre arverañ a-raok staliañ $(^NameDA) mar plij. Mar degemerit pep term eus an aotre, klikit war « A-du emaon ». +# ^LicenseTextCB +Bezit aketus en ur lenn an aotre arverañ a-raok staliañ $(^NameDA) mar plij. Mar degemerit pep term eus an aotre, klikit war al log a-zindan. $_CLICK +# ^LicenseTextRB +Bezit aketus en ur lenn an aotre arverañ a-raok staliañ $(^NameDA) mar plij. Mar degemerit pep term eus an aotre, dizuzit an dibab kentañ a-zindan. $_CLICK +# ^UnLicenseText +Bezit aketus en ur lenn an aotre arverañ a-raok distaliañ $(^NameDA) mar plij. Mar degemerit pep term eus an aotre, klikit war « A-du emaon ». +# ^UnLicenseTextCB +Bezit aketus en ur lenn an aotre arverañ a-raok distaliañ $(^NameDA) mar plij. Mar degemerit pep term eus an aotre, klikit war al log a-zindan. $_CLICK +# ^UnLicenseTextRB +Bezit aketus en ur lenn an aotre arverañ a-raok distaliañ $(^NameDA) mar plij. Mar degemerit pep term eus an aotre, diuzit an dibab kentañ a-zindan. $_CLICK +# ^Custom +Diouzh ho kiz +# ^ComponentsText +Dibabit an elfennoù a fell deoc'h staliañ pe diziuzit an elfennoù a fell deoc'h leuskel a-gostez. $_CLICK +# ^ComponentsSubText1 +Dibabit pe seurt staliañ a vo : +# ^ComponentsSubText2_NoInstTypes +Dibabit an elfennoù da staliañ : +# ^ComponentsSubText2 +Pe dibabit an elfennoù diret a fell deoc'h staliañ : +# ^UnComponentsText +Dibabit an elfennoù a fell deoc'h distaliañ pe diziuzit an elfennoù a fell deoc'h mirout. $_CLICK +# ^UnComponentsSubText1 +Dibabit peseurt distaliañ a vo : +# ^UnComponentsSubText2_NoInstTypes +Dibabit an elfennoù da zistaliañ : +# ^UnComponentsSubText2 +Pe dibabit an elfennoù diret a fell deoc'h distaliañ : +# ^DirText +Staliet e vo $(^NameDA) gant ar goulev-mañ er c'havlec'h da-heul. Mar fell deoc'h dibab ur c'havlec'h all, klikit war « Furchal » ha dibabit ur c'havlec'h all. $_CLICK +# ^DirSubText +Kavlec'h bukenn +# ^DirBrowseText +Dibabit ar c'havlec'h e vo diazezet $(^NameDA) ennañ : +# ^UnDirText +Distaliet e vo $(^NameDA) gant ar goulev-mañ adalek ar c'havlec'h da heul. Ma fell deoc'h distaliañ adalek ur c'havlec'h all, klikit war « Furchal » ha diuzit ur c'havlec'h all. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Diuzit ar c'havlec'h evit distaliañ $(^NameDA) adalek : +# ^SpaceAvailable +"Egor kantenn vak : " +# ^SpaceRequired +"Egor kantenn rekis : " +# ^UninstallingText +Distaliet e vo $(^NameDA) adalek ar c'havelec'h da-heul. $_CLICK +# ^UninstallingSubText +Distaliañ adalek : +# ^FileError +Fazi en ur zigeriñ ur restr evit skrivañ : \r\n\r\n$0\r\n\r\nKlikit war « Paouez » evit paouez gant ar staliañ,\r\n« Adober » evit eseañ en-dro, pe\r\n« Tremen » evit leuskel a-gostez ar restr-mañ. +# ^FileError_NoIgnore +Fazi en ur zigeriñ ur restr a-benn skrivañ : \r\n\r\n$0\r\n\r\nKlikit war « Adober » evit esaeañ en-dro, pe\r\nwar « Nullañ » evit paouez gant ar staliañ. +# ^CantWrite +"N'haller ket skrivañ : " +# ^CopyFailed +Kopiañ faziet +# ^CopyTo +"Kopiañ da " +# ^Registering +"Oc'h enskrivañ : " +# ^Unregistering +"O tienskrivañ : " +# ^SymbolNotFound +"N'haller ket kavout ur simbolenn : " +# ^CouldNotLoad +"N'haller ket kargañ : " +# ^CreateFolder +"Krouiñ kavlec'h : " +# ^CreateShortcut +"Krouiñ berradenn : " +# ^CreatedUninstaller +"Skoazeller distaliañ krouet : " +# ^Delete +"Dilemel restr : " +# ^DeleteOnReboot +"Dilemel en ur adloc'hañ : " +# ^ErrorCreatingShortcut +"Fazi en ur grouiñ berradenn : " +# ^ErrorCreating +"Fazi en ur grouiñ : " +# ^ErrorDecompressing +Fazi en ur ziwaskañ stlenn ! Skoazeller staliañ gwastet ? +# ^ErrorRegistering +Fazi en ur enskrivañ an DLL +# ^ExecShell +"ExecShell : " +# ^Exec +"Lañsañ : " +# ^Extract +"Eztennañ : " +# ^ErrorWriting +"Eztennañ : fazi en ur skrivañ restr " +# ^InvalidOpcode +Skoazeller staliañ gwastet : opcode direizh +# ^NoOLE +"OLE ebet evit : " +# ^OutputFolder +"Kavlec'h ec'hank : " +# ^RemoveFolder +"Dilemel ar c'havlec'h : " +# ^RenameOnReboot +"Adenvel pa vez adloc'het : " +# ^Rename +"Adenvel : " +# ^Skipped +"Laosket a-gostez: " +# ^CopyDetails +Kopiañ ar munudoù er golver +# ^LogInstall +Tresañ an argerzh staliañ +# ^Byte +E +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Breton.nsh b/tools/Contrib/Language files/Breton.nsh new file mode 100644 index 0000000..a17d935 --- /dev/null +++ b/tools/Contrib/Language files/Breton.nsh @@ -0,0 +1,121 @@ +;Language: Breton (1150) +;By KAD-Korvigelloù An Drouizig + +!insertmacro LANGFILE "Breton" = "Brezhoneg" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Degemer mat e skoazeller staliañ $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Sturiet e viot gant ar skoazeller-mañ evit staliañ $(^NameDA).$\r$\n$\r$\nGwelloc'h eo serriñ pep arload oberiant er reizhiad a-raok mont pelloc'h gant ar skoazeller-mañ. Evel-se e c'heller nevesaat ar restroù reizhiad hep rankout adloc'hañ hoc'h urzhiataer.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Degemer mat er skoazeller distaliañ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Sturiet e viot gant ar skoazeller-mañ a-benn distaliañ $(^NameDA).$\r$\n$\r$\nEn em asurit n'eo ket lañset $(^NameDA) a-raok mont pelloc'h gant an distaliañ.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lañvaz emglev" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Bezit aketus en ur lenn pep term eus al lañvaz a-raok staliañ $(^NameDA), mar plij." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Mar degemerit pep term eus al lañvaz, klikit war « War-lerc'h ». Ret eo deoc'h degemer al lañvaz evit staliañ $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Mar degemerit pep term eus al lañvaz, klikit war al log a-zindan. Ret eo deoc'h degemer al lañvaz a-benn staliañ $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Mar degemerit pep term eus al lañvaz, diuzit an dibab kentañ a-zindan. Ret eo deoc'h degemer al lañvaz a-benn staliañ $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lañvaz emglev" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Trugarez da lenn al lañvaz a-raok distaliañ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Mar degemerit pep term eus al lañvaz, klikit war « A-du emaon » evit kenderc'hel. Ret eo deoc'h degemer al lañvaz evit distaliañ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Mar degemerit pep term eus al lañvaz, klikit war al log a-zindan. Ret eo deoc'h degemer al lañvaz evit distaliañ $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Mar degemerit pep term eus al lañvaz, dizuit an dibab kentañ a-zindan. Ret eo deoc'h degemer al lañvaz evit distaliañ $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Pouezit war « Pajenn a-raok » evit lenn ar pajennoù eus al lañvaz da-heul." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Dibab elfennoù" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Dibabit pe elfenn(où) $(^NameDA) a fell deoc'h staliañ." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Dibabit elfennoù" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Dibabit pe elfenn(où) $(^NameDA) a fell deoc'h distaliañ." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Deskrivadenn" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Lakait ho logodenn a-zioc'h an elfenn evit gwelout he deskrivadenn." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Diuzuit an elfenn evit gwelout he deskrivadenn." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Dibabit al lec'hiadur staliañ" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Dibabit ar c'havlec'h ma vo lakaet $(^NameDA) ennañ." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Dibabit al lec'hiadur distaliañ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Dibabit ar c'havlec'h e vo dilamet $(^NameDA) dioutañ." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "O staliañ" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Gortozit mar plij, emañ $(^NameDA) o vezañ staliet." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Echu eo gant ar staliañ" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Kaset eo bet da benn mat ar staliañ." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Staliañ paouezet" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "N'eo ket bet kaset da benn mat ar staliañ." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "O tistaliañ" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Gortozit mar plij, emañ $(^NameDA) o vezañ distaliet." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Echu eo gant an distaliañ" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Gant berzh eo bet kaset da benn an distaliañ." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Distaliañ paouezet" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "N'eo ket bet kaset da benn mat an distaliañ." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Oc'h echuiñ staliañ $(^NameDA) gant ar skoazeller" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Staliet eo bet $(^NameDA) war hoc'h urzhiataer.$\r$\n$\r$\nKlikit war « Echuiñ » evit serriñ ar skoazeller-mañ." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Ret eo hoc'h urzhiataer bezañ adloc'het evit ma vez kaset da benn staliañ $(^NameDA). Ha fellout a ra deoc'h adloc'hañ diouzhtu ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Oc'h echuiñ distaliañ $(^NameDA) gant ar skoazeller" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Distaliet eo bet $(^NameDA) diouzh hoc'h urzhiataer.$\r$\n$\r$\nKlikit war « Echuiñ » evit serriñ ar skoazeller-mañ." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Ret eo hoc'h urzhiataer bezañ adloc'het evit ma vez kaset da benn distaliañ $(^NameDA). Ha fellout a ra deoc'h adloc'hañ diouzhtu ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Adloc'hañ diouzhtu" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Fellout a ra din adloc'hañ diwezatoc'h dre zorn" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Lañsañ $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Diskouez ar restr Malennit" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Echuiñ" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Diskouez kavlec'h al Lañser loc'hañ" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Dibabit ur c'havlec'h Lañser loc'hañ evit berradennoù $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Diuzit ar c'havlec'h Lañser loc'hañ e vo savet ennañ berradennoù ar goulevioù. Gallout a rit ingal reiñ un anv evit sevel ur c'havlec'h nevez." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Chom hep sevel berradennoù" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Distaliañ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Dilemel $(^NameDA) adalek hoc'h urzhiataer." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ha sur oc'h e fell deoc'h kuitaat staliañ $(^Name) ?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ha sur oc'h e fell deoc'h kuitaat distaliañ $(^Name) ?" +!endif diff --git a/tools/Contrib/Language files/Bulgarian.nlf b/tools/Contrib/Language files/Bulgarian.nlf new file mode 100644 index 0000000..7803a14 --- /dev/null +++ b/tools/Contrib/Language files/Bulgarian.nlf @@ -0,0 +1,194 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1026 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by Asparouh Kalyandjiev +# Updated v2 to v6 by Plamen Penkov +# Updated by Кирил Кирилов (DumpeR) +# +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +ИнÑталиране на $(^Name) +# ^UninstallCaption +Изтриване на $(^Name) +#^LicenseSubCaption +: Лицензионно Ñпоразумение +#^ComponentsSubCaption +: Опции за инÑталиране +# ^DirSubCaption +: ИнÑталиране в папка +#^InstallingSubCaption +: ИнÑталиране +#^CompletedSubCaption +: Завършване +# ^UnComponentsSubCaption +: Опции за изтриване +# ^UnDirSubCaption +: Изтриване от папка +# ^ConfirmSubCaption +: Потвърждение +#^UninstallingSubCaption +: Изтриване +#^UnCompletedSubCaption +: Завършване +# ^BackBtn +< &Ðазад +#^NextBtn +Ð&апред > +# ^AgreeBtn +&СъглаÑен +# ^AcceptBtn +&СъглаÑен Ñъм Ñ ÑƒÑловиÑта на Лицензионното Ñпоразумение. +# ^DontAcceptBtn +&Ðе Ñъм ÑъглаÑен Ñ ÑƒÑловиÑта на Лицензионното Ñпоразумение. +# ^InstallBtn +&ИнÑталирай +#^UninstallBtn +&Изтрий +# ^CancelBtn +&Отказ +#^CloseBtn +&Затвори +#^BrowseBtn +П&реглед... +#^ShowDetailsBtn +&Детайли +# ^ClickNext +ÐатиÑнете "Ðапред", за да продължите. +# ^ClickInstall +ÐатиÑнете "ИнÑталирай", за да започне инÑталирането. +# ^ClickUninstall +ÐатиÑнете "Изтрий", за да започне изтриването. +# ^Name +Име +#^Completed +Край +# ^LicenseText +ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ Лицензионното Ñпоразумение преди да инÑталирате $(^NameDA). Ðко приемате вÑички уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð° Ñпоразумението, натиÑнете "СъглаÑен". +# ^LicenseTextCB +ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ Лицензионното Ñпоразумение преди да инÑталирате $(^NameDA). Ðко приемате вÑички уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð° Ñпоразумението, Ñложете отметка в полето по-долу. $_CLICK +# ^LicenseTextRB +ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ Лицензионното Ñпоразумение преди да инÑталирате $(^NameDA). Ðко приемате вÑички уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð° Ñпоразумението, изберете първата Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ð¾-долу. $_CLICK +# ^UnLicenseText +ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ Лицензионното Ñпоразумение преди да изтриете $(^NameDA). Ðко приемате вÑички уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð° Ñпоразумението, натиÑнете "СъглаÑен". +# ^UnLicenseTextCB +ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ Лицензионното Ñпоразумение преди да изтриете $(^NameDA). Ðко приемате вÑички уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð° Ñпоразумението, Ñложете отметка в полето по-долу. $_CLICK +# ^UnLicenseTextRB +ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ Лицензионното Ñпоразумение преди да изтриете $(^NameDA). Ðко приемате вÑички уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð° Ñпоразумението, изберете първата Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ð¾-долу. $_CLICK +# ^Custom +ИнÑталиране по избор +#^ComponentsText +Изберете компонентите, които иÑкате да бъдат инÑталирани. $_CLICK +#^ComponentsSubText1 +Изберете тип инÑталиране: +#^ComponentsSubText2_NoInstTypes +Изберете компоненти: +#^ComponentsSubText2 +Или изберете компонентите, които иÑкате да бъдат инÑталирани: +# ^UnComponentsText +Сложете отметка пред компонентите, които иÑкате да изтриете, а тези които не иÑкате да изтриете оÑтавете без отметка. $_CLICK +# ^UnComponentsSubText1 +Изберете типа на изтриване: +# ^UnComponentsSubText2_NoInstTypes +Изберете компонентите за изтриване: +# ^UnComponentsSubText2 +Или, изберете допълнителни компоненти за изтриване: +# ^DirText +Програмата ще инÑталира $(^NameDA) в поÑочената папка. За да инÑталирате в друга папка, натиÑнете "Преглед" и изберете друга папка. $_CLICK +# ^DirSubText +Целева папка +# ^DirBrowseText +Изберете папка, в коÑто да Ñе инÑталира $(^NameDA): +# ^UnDirText +Програмата ще изтрие $(^NameDA) от Ñледната папка. За да изтриете от друга папка, натиÑнете "Преглед" и изберете друга папка. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Изберете папката от коÑто да Ñе изтрие $(^NameDA): +# ^SpaceAvailable +"Свободно проÑтранÑтво: " +#^SpaceRequired +"Ðеобходимо проÑтранÑтво: " +# ^UninstallingText +$(^NameDA) ще бъде изтрита от Ñледната папка. $_CLICK +# ^UninstallingSubText +Изтриване от: +# ^FileError +Грешка при отварÑне на файла за запиÑ: \r\n\t"$0"\r\nÐатиÑнете "Прекрати", за да прекратите инÑталирането, "Повтори", за да опитате отново или "Игнорирай", за да пропуÑнете този файл +# ^FileError_NoIgnore +Грешка при отварÑне на файла за запиÑ: \r\n\t"$0"\r\nÐатиÑнете "Повтори", за да опитате отново или "Прекрати", за да прекратите инÑталирането. +# ^CantWrite +"ÐеуÑпешно запиÑване на: " +#^CopyFailed +Копирането неуÑпешно +# ^CopyTo +"Копиране на " +# ^Registering +"РегиÑтриране на: " +# ^Unregistering +"ДерегиÑтриране на: " +#^SymbolNotFound +"Символът не е намерен: " +# ^CouldNotLoad +"ÐеуÑпешно зареждане на: " +# ^CreateFolder +"Създаване на папка: " +# ^CreateShortcut +"Създаване на прÑк път: " +#^CreatedUninstaller +"Създаване на програма за изтриване: " +# ^Delete +"Изтриване на: " +#^DeleteOnReboot +"Изтриване Ñлед реÑтарт: " +#^ErrorCreatingShortcut +"Грешка при Ñъздаване на Ð¿Ñ€ÐµÐºÐ¸Ñ Ð¿ÑŠÑ‚: " +#^ErrorCreating +"Грешка при Ñъздаване на: " +# ^ErrorDecompressing +Грешка при декомпреÑиране на данните! ВероÑтно инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚ е повреден. +# ^ErrorRegistering +Грешка при региÑтриране на DLL +#^ExecShell +"ExecShell: " +#^Exec +"Изпълнение на: " +#^Extract +"Извличане на: " +#^ErrorWriting +"Извличане на: грешка при Ð·Ð°Ð¿Ð¸Ñ Ð²ÑŠÐ² файл " +#^InvalidOpcode +Пакета е повреден: грешен код на Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ +# ^NoOLE +"ÐÑма OLE за: " +#^OutputFolder +"ИнÑталиране в папка: " +#^RemoveFolder +"Изтриване на папка: " +#^RenameOnReboot +"Преименуване при реÑтарт: " +# ^Rename +"Преименуване на: " +#^Skipped +"ПропуÑкане на: " +# ^CopyDetails +Копиране на данните в буфера +# ^LogInstall +ЗапиÑване на отчет за инÑталирането +# ^Byte +Б +# ^Kilo + К +# ^Mega + Ðœ +# ^Giga + Г \ No newline at end of file diff --git a/tools/Contrib/Language files/Bulgarian.nsh b/tools/Contrib/Language files/Bulgarian.nsh new file mode 100644 index 0000000..74c4c07 --- /dev/null +++ b/tools/Contrib/Language files/Bulgarian.nsh @@ -0,0 +1,124 @@ +;Language: Bulgarian (1026) +;Translated by Asparouh Kalyandjiev [acnapyx@sbline.net] +;Review and update from v1.63 to v1.68 by Plamen Penkov [plamen71@hotmail.com] +;Updated by Кирил Кирилов (DumpeR) [dumper@data.bg] +; + +!insertmacro LANGFILE "Bulgarian" = "БългарÑки" "Balgarski" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Добре дошли в Съветника за инÑталиране на $(^NameDA)!" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Той ще инÑталира $(^NameDA) на Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€.$\r$\n$\r$\nПрепоръчва Ñе да затворите вÑички други приложениÑ, преди да продължите. Това ще позволи на програмата да обнови нÑкои ÑиÑтемни файлове, без да Ñе реÑтартира компютъра.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Добре дошли в Съветника за изтриване на $(^NameDA)!" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Той ще ви помогне да изтриете $(^NameDA) от Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€.$\r$\n$\r$\nПреди да продължите, уверете Ñе че $(^NameDA) не е Ñтартирана в момента.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Лицензионно Ñпоразумение" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "ÐœÐ¾Ð»Ñ Ð·Ð°Ð¿Ð¾Ð·Ð½Ð°Ð¹Ñ‚Ðµ Ñе Лицензионното Ñпоразумение преди да продължите." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ðко приемате уÑловиÑта на Ñпоразумението, натиÑнете $\"СъглаÑен$\", за да продължите. ТрÑбва да приемете Ñпоразумението, за да инÑталирате $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ðко приемате уÑловиÑта на Ñпоразумението, Ñложете отметка в полето по-долу. ТрÑбва да приемете Ñпоразумението, за да инÑталирате $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ðко приемате уÑловиÑта на Ñпоразумението, изберете първата Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ð¾-долу. ТрÑбва да приемете Ñпоразумението, за да инÑталирате $(^NameDA) $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Лицензионно Ñпоразумение" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "ÐœÐ¾Ð»Ñ Ð·Ð°Ð¿Ð¾Ð·Ð½Ð°Ð¹Ñ‚Ðµ Ñе лицензионните уÑÐ»Ð¾Ð²Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¸ да изтриете $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ðко приемате уÑловиÑта на Ñпоразуменито, натиÑнете $\"СъглаÑен$\" за да продължите. ТрÑбва да приемете Ñпоразумението, за да изтриете $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ðко приемате уÑловиÑта на Ñпоразумението, Ñложете отметка в полето по-долу. ТрÑбва да приемете Ñпоразумението, за да изтриете $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ðко приемате уÑловиÑта на Ñпоразуменито, изберете първата Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ð¾-долу. ТрÑбва да приемете Ñпоразумението, за да изтриете $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ÐатиÑнете клавиша $\"Page Down$\", за да видите оÑтаналата чаÑÑ‚ от Ñпоразумението." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Избор на компоненти" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Изберете кои компоненти на $(^NameDA) иÑкате да инÑталирате." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Избор на компоненти" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Изберете кои компоненти на $(^NameDA) иÑкате да изтриете." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ОпиÑание" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Преминете Ñ Ð¼Ð¸ÑˆÐºÐ°Ñ‚Ð° над определен компонент, за да видите опиÑанието му." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Изберете компонент, за да видите опиÑанието му." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Избор на папка за инÑталиране" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Изберете папката, в коÑто да Ñе инÑталира $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Избор на папка за изтриване" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Изберете папката, от коÑто да Ñе изтрие $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ИнÑталиране" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Изчакайте, инÑталират Ñе файловете на $(^NameDA)..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ИнÑталирането завърши." + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "ИнÑталирането завърши уÑпешно." + ${LangFileString} MUI_TEXT_ABORT_TITLE "ИнÑталирането прекратено." + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ИнÑталирането не завърши уÑпешно." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Изтриване" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Изчакайте, изтриват Ñе файловете на $(^NameDA)..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Край" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Изтриването завърши уÑпешно." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Изтриването прекратено." + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Изтриването не завърши напълно." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Приключване на Съветника за инÑталиране на $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "ИнÑталирането на $(^NameDA) е завършено.$\r$\n$\r$\nÐатиÑнете бутона $\"Край$\", за да затворите Съветника." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Компютърът Ñ‚Ñ€Ñбва да бъде реÑтартиран, за да завърши инÑталирането на $(^NameDA). ИÑкате ли да реÑтартирате Ñега?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Приключване на Съветника за изтриване на $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Програмата $(^NameDA) беше изтрита от Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€.$\r$\n$\r$\nÐатиÑнете $\"Край$\" за да затворите този Съветник." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Компютърът ви Ñ‚Ñ€Ñбва да Ñе реÑтартира, за да приключи уÑпешно изтриването на $(^NameDA). ИÑкате ли да реÑтартирате Ñега?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Да, реÑтартирай Ñега" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ðе, ще реÑтартирам по-къÑно" + ${LangFileString} MUI_TEXT_FINISH_RUN "Стартирай $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Покажи файла $\"ReadMe$\"" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Край" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Избор на папка в менюто $\"Старт$\"" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Изберете папка в менюто $\"Старт$\" за преки пътища към програмата." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Изберете папка в менюто $\"Старт$\", в коÑто иÑкате да Ñъздадете преки пътища към програмата. Можете Ñъщо така да въведете име, за да Ñъздадете нова папка." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ðе Ñъздавай преки пътища" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Изтриване на $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Изтриване на $(^NameDA) от Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Сигурни ли Ñте, че иÑкате да прекратите инÑталирането на $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Сигурни ли Ñте, че иÑкате да прекратите изтриването на $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Catalan.nlf b/tools/Contrib/Language files/Catalan.nlf new file mode 100644 index 0000000..8328c26 --- /dev/null +++ b/tools/Contrib/Language files/Catalan.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +1027 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by falanko +# Corrections by Toni Hermoso Pulido +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instal·lació de l'aplicació $(^Name) +# ^UninstallCaption +Desinstal·lació de l'aplicació $(^Name) +# ^LicenseSubCaption +: Acord de llicència +# ^ComponentsSubCaption +: Opcions d'instal·lació +# ^DirSubCaption +: Carpeta d'instal·lació +# ^InstallingSubCaption +: S'està instal·lant +# ^CompletedSubCaption +: S'ha acabat +# ^UnComponentsSubCaption +: Opcions de desinstal·lació +# ^UnDirSubCaption +: Carpeta de desinstal·lació +# ^ConfirmSubCaption +: Confirmació +# ^UninstallingSubCaption +: S'està desinstal·lant +# ^UnCompletedSubCaption +: No s'ha acabat +# ^BackBtn +< En&rere +# ^NextBtn +En&davant > +# ^AgreeBtn +Hi estic d'a&cord +# ^AcceptBtn +&Accepto els termes de l'acord de llicència +# ^DontAcceptBtn +&No accepto els termes de l'acord de llicència +# ^InstallBtn +&Instal·la +# ^UninstallBtn +&Desinstal·la +# ^CancelBtn +&Cancel·la +# ^CloseBtn +&Tanca +# ^BrowseBtn +&Navega... +# ^ShowDetailsBtn +&Mostra els detalls +# ^ClickNext +Feu clic a Endavant per a continuar. +# ^ClickInstall +Feu clic a Instal·la per a iniciar la instal·lació. +# ^ClickUninstall +Feu clic a Desinstal·la per a iniciar la desinstal·lació. +# ^Name +Nom +# ^Completed +S'ha acabat +# ^LicenseText +Reviseu l'acord de llicència abans d'instal·lar l'aplicació $(^NameDA). Si accepteu tots els termes de l'acord, feu clic a Hi estic d'acord. +# ^LicenseTextCB +Reviseu l'acord de llicència abans d'instal·lar l'aplicació $(^NameDA). Si accepteu tots els termes de l'acord, activeu la casella de sota. $_CLICK +# ^LicesnseTextRB +Reviseu l'acord de llicència abans d'instal·lar l'aplicació $(^NameDA). Si accepteu tots els termes de l'acord, seleccioneu la primera opció de sota. $_CLICK +# ^UnLicenseText +Reviseu l'acord de llicència abans de desinstal·lar l'aplicació $(^NameDA). Si accepteu tots els termes de l'acord, feu clic a Hi estic d'acord. +# ^UnLicenseTextCB +Reviseu l'acord de llicència abans de desinstal·lar l'aplicació $(^NameDA). Si accepteu tots els termes de l'acord, activeu la la casella de sota. $_CLICK +# ^UnLicesnseTextRB +Reviseu l'acord de llicència abans de desinstal·lar l'aplicació $(^NameDA). Si accepteu tots els termes de l'acord, seleccioneu la primera opció de sota. $_CLICK +# ^Custom +Personalitzada +# ^ComponentsText +Activeu els components que voleu instal·lar i desactiveu els que no. $_CLICK +# ^ComponentsSubText1 +Seleccioneu el tipus d'instal·lació: +# ^ComponentsSubText2_NoInstTypes +Seleccioneu els components per instal·lar: +# ^ComponentsSubText2 +O bé, seleccioneu els components opcionals que desitgéssiu instal·lar: +# ^UnComponentsText +Activeu els components que voleu desinstal·lar i desactiveu els que no. $_CLICK +# ^UnComponentsSubText1 +Seleccioneu el tipus de desinstal·lació: +# ^UnComponentsSubText2_NoInstTypes +Seleccioneu els components per desinstal·lar: +# ^UnComponentsSubText2 +O bé, seleccioneu els components opcionals per desinstal·lar: +# ^DirText +El programa d'instal·lació instal·larà l'aplicació $(^NameDA) en la següent carpeta. Per a instal·lar-lo en una carpeta diferent, feu clic a Navega i seleccioneu-ne una altra. $_CLICK +# ^DirSubText +Carpeta de destinació +# ^DirBrowseText +Seleccioneu la carpeta on s'instal·larà l'aplicació $(^NameDA): +# ^UnDirText +El programa d'instal·lació desinstal·larà l'aplicació $(^NameDA) de la següent carpeta. Per a desinstal·lar-lo d'una carpeta diferent, feu clic a Navega i seleccioneu-ne una altra. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Seleccioneu la carpeta des d'on es desinstal·larà l'aplicació $(^NameDA): +# ^SpaceAvailable +"Espai lliure: " +# ^SpaceRequired +"Espai necessari: " +# ^UninstallingText +Es desinstal·larà l'aplicació $(^NameDA) de la següent carpeta. $_CLICK +# ^UninstallingSubTex +S'està desinstal·lant de: +# ^FileError +S'ha produït un error en obrir el fitxer en mode d'escriptura: \r\n\t"$0"\r\nFeu clic a Abandona per a aturar la instal·lació,\r\nReintenta per a tornar-ho a provar, o\r\Ignora per a ometre aquest fitxer. +# ^FileError_NoIgnore +S'ha produït un error en obrir el fitxer en mode d'escriptura: \r\n\t"$0"\r\nFeu clic a Reintenta per a tornar-ho a provar, o\r\Cancel·la per a aturar la instal·lació. +# ^CantWrite +"No s'ha pogut escriure: " +# ^CopyFailed +Ha fallat la còpia +# ^CopyTo +"Copia a " +# ^Registering +"S'esta registrant:" +# ^Unregistering +"S'està suprimint el registre: " +# ^SymbolNotFound +"No s'ha trobat el símbol: " +# ^CouldNotLoad +"No s'ha pogut carregar: " +# ^CreateFolder +"Crea la carpeta: " +# ^CreateShortcut +"Crea la drecera: " +# ^CreatedUninstaller +"S'ha creat el desinstal·lador: " +# ^Delete +"S'ha suprimit el fitxer: " +# ^DeleteOnReboot +"Suprimeix en reiniciar: " +# ^ErrorCreatingShortcut +"S'ha produït un error en crear la drecera: " +# ^ErrorCreating +S'ha produït un error en crear: +# ^ErrorDecompressing +S'ha produït un error en descomprimir les dades! L'instal·lador està corrupte? +# ^ErrorRegistering +S'ha produït un error en registrar una DLL +# ^ExecShell +"Executa l'ordre: " +# ^Exec +"Executa:" +# ^Extract +"Extreu: " +# ^ErrorWriting +"Extreu: s'ha produït un error en escriure el fitxer " +# ^InvalidOpcode +L'instal·lador està corrupte: el codi d'operació no és vàlid +# ^NoOLE +"No hi ha OLE per a: " +# ^OutputFolder +"Carpeta de sortida: " +# ^RemoveFolder +"Suprimeix la carpeta: " +# ^RenameOnReboot +"Reanomena en reiniciar: " +# ^Rename +"Reanomena: " +# ^Skipped +"S'ha omès: " +# ^CopyDetails +Copia els detalls al porta-retalls +# ^LogInstall +Registra el procés d'instal·lació +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Catalan.nsh b/tools/Contrib/Language files/Catalan.nsh new file mode 100644 index 0000000..e085500 --- /dev/null +++ b/tools/Contrib/Language files/Catalan.nsh @@ -0,0 +1,121 @@ +;Language: Catalan (1027) +;By falanko, corrections by Toni Hermoso Pulido + +!insertmacro LANGFILE "Catalan" = "Català" "Catala" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Benvinguts a l'auxiliar d'instal·lació de l'aplicació $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Aquest auxiliar us guiarà durant el procés d'instal·lació de l'aplicació $(^NameDA).$\r$\n$\r$\nEs recomana tancar la resta d'aplicacions abans de començar la instal·lació. Això permetrà al programa d'instal·ació actualitzar fitxers del sistema rellevants sense haver de reiniciar l'ordinador.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Benvinguts a l'auxiliar de desinstal·lació de l'aplicació $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Aquest auxiliar us guiarà a través de la desinstal·lació de l'aplicació $(^NameDA).$\r$\n\rAbans de començar la desinstal·lació, assegureu-vos que l'aplicació $(^NameDA) no s'està executant.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Acord de Llicència" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Reviseu els termes de la llicència abans d'instal·lar l'aplicació $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Si accepteu tots els termes de l'acord, premeu Hi estic d'acord per a continuar. Heu d'acceptar l'acord per a poder instal·lar l'aplicació $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si accepteu tots els termes de l'acord, activeu la casella de sota. Heu d'acceptar l'acord per poder instal·lar l'aplicació $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si accepteu tots els termes de l'acord, seleccioneu la primera opció de sota. Heu d'acceptar l'acord per a poder instal·lar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Acord de llicència" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Reviseu els termes de la llicència abans de desinstal·lar l'aplicació $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Si accepteu tots els termes de l'acord, premeu Hi estic d'Acord per a continuar. Heu d'acceptar l'acord per a poder desinstal·lar l'aplicació $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si accepteu tots els termes de l'acord, activeu la casella de sota. Heu d'acceptar l'acord per a poder desinstal·lar l'aplicació $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si accepteu tots els termes de l'acord, seleccioneu la primera opció de sota. Heu d'acceptar l'acord per a poder desinstal·lar l'aplicació $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Premeu AvPàg per a veure la resta de l'acord." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selecció de components" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Seleccioneu quines característiques de l'aplicació $(^NameDA) desitgeu instal·lar." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selecció de components" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Seleccioneu quines característiques de l'aplicació $(^NameDA) desitgeu desinstal·lar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripció" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Situeu el ratolí damunt d'un component per a veure'n la descripció." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Trieu una ubicació d'instal·lació" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Trieu la carpeta on instal·lar-hi l'aplicació $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Trieu la ubicació de desinstal·lació" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Trieu la carpeta d'on desinstal·lar l'aplicació $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "S'està instal·lant" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Si us plau, espereu mentre l'aplicació $(^NameDA) s'instal·la." + ${LangFileString} MUI_TEXT_FINISH_TITLE "S'ha acabat la instal·lació" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "La instal·lació ha acabat correctament." + ${LangFileString} MUI_TEXT_ABORT_TITLE "S'ha abandonat la instal·lació" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "La instal·lació no ha acabat correctament." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "S'està desinstal·lant" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Si us plau, espereu mentre l'aplicació $(^NameDA) es desinstal·la." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "S'ha acabat la desinstal·lació" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La desinstal·lació s'ha realitzat correctament." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "S'ha abandonat la desinstal·lació" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La desinstal·lació no ha acabat correctament." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "S'està acabant l'auxiliar d'instal·lació de l'aplicació $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "L'aplicació $(^NameDA) s'ha instal·lat a l'ordinador.$\r$\n$\r$\nFeu clic a Finalitza per a tancar aquest auxiliar." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Cal reiniciar l'ordinador perquè pugui acabar-se la instal·lació de l'aplicació $(^NameDA). Voleu reiniciar-lo ara?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "S'està acabant l'auxiliar de desinstal·lació de l'aplicació $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "L'aplicació $(^NameDA) s'ha desinstal·lat de l'ordinador.$\r$\n$\r$\nFeu clic a Finalitza per a tancar aquest auxiliar." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Cal reiniciar l'ordinador perquè pugui acabar-se la desinstal·lació de l'aplicació $(^NameDA). Voleu reiniciar-lo ara?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reinicia ara" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Reinicia més tard manualment" + ${LangFileString} MUI_TEXT_FINISH_RUN "Executa l'aplicació $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Mostra el Llegeix-me" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Finalitza" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Tria la carpeta del menú Inicia" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Tria una carpeta del menú Inicia per a les dreceres de l'aplicació $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Seleccioneu la carpeta del Menú Inicia en la que hi vulgueu crear les dreceres del programa. Podeu introduir-hi un altre nom si voleu crear una carpeta nova." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "No creïs les dreceres" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstal·la l'aplicació $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Suprimeix l'aplicació $(^NameDA) de l'ordinador." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Esteu segur que voleu sortir del programa d'instal·lació de l'aplicació $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Esteu segur que voleu sortir del programa de desinstal·lació de l'aplicació $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Corsican.nlf b/tools/Contrib/Language files/Corsican.nlf new file mode 100644 index 0000000..6a590c5 --- /dev/null +++ b/tools/Contrib/Language files/Corsican.nlf @@ -0,0 +1,193 @@ +# Header, don't edit +NLF v6 +# Language ID +1155 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything other than RTL means LTR +- +# Translation by Patriccollu di Santa Maria è Sichè - +# Updated on August 9th, 2020 for version 3.06.1 +# Created on April 24th, 2016 for version 3.0rc1 +# Traduzzione corsa creata è mantinuta da Patriccollu di Santa Maria è Sichè +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Assistente d’installazione di $(^Name) +# ^UninstallCaption +Disinstallazione di $(^Name) +# ^LicenseSubCaption +: Cuntrattu di licenza +# ^ComponentsSubCaption +: Ozzioni d’installazione +# ^DirSubCaption +: Cartulare d’installazione +# ^InstallingSubCaption +: Installazione in corsu +# ^CompletedSubCaption +: Installazione compia +# ^UnComponentsSubCaption +: Ozzioni di disinstallazione +# ^UnDirSubCaption +: Cartulare di disinstallazione +# ^ConfirmSubCaption +: Cunfirmazione +# ^UninstallingSubCaption +: Disinstallazione in corsu +# ^UnCompletedSubCaption +: Disinstallazione compia +# ^BackBtn +< &Precedente +# ^NextBtn +&Seguente > +# ^AgreeBtn +&Accunsentu +# ^AcceptBtn +Sò d’&accunsentu cù i termini di u cuntrattu di licenza +# ^DontAcceptBtn +Ùn sò &micca d’accunsentu cù i termini di u cuntrattu di licenza +# ^InstallBtn +&Installà +# ^UninstallBtn +&Disinstallà +# ^CancelBtn +Abbandunà +# ^CloseBtn +&Chjode +# ^BrowseBtn +&Sfuglià... +# ^ShowDetailsBtn +Affissà i &ditaglii +# ^ClickNext +Sciglite Seguente per cuntinuà. +# ^ClickInstall +Sciglite Installà per principià l’installazione. +# ^ClickUninstall +Sciglite Disinstallà per principià a disinstallazione. +# ^Name +Nome +# ^Completed +Compiu +# ^LicenseText +Ci vole à leghje u cuntrattu di licenza nanzu d’installà $(^NameDA). S’è voi site d’accunsentu cù tutti i termini di u cuntrattu, sciglite Accunsentu. +# ^LicenseTextCB +Ci vole à leghje u cuntrattu di licenza nanzu d’installà $(^NameDA). S’è voi site d’accunsentu cù tutti i termini di u cuntrattu, sciglite a casella inghjò. $_CLICK +# ^LicenseTextRB +Ci vole à leghje u cuntrattu di licenza nanzu d’installà $(^NameDA). S’è voi site d’accunsentu cù tutti i termini di u cuntrattu, sciglite a prima ozzione inghjò. $_CLICK +# ^UnLicenseText +Ci vole à leghje u cuntrattu di licenza nanzu di disinstallà $(^NameDA). S’è voi site d’accunsentu cù tutti i termini di u cuntrattu, sciglite Accunsentu. +# ^UnLicenseTextCB +Ci vole à leghje u cuntrattu di licenza nanzu di disinstallà $(^NameDA). S’è voi site d’accunsentu cù tutti i termini di u cuntrattu, sciglite a casella inghjò. $_CLICK +# ^UnLicenseTextRB +Ci vole à leghje u cuntrattu di licenza nanzu di disinstallà $(^NameDA). S’è voi site d’accunsentu cù tutti i termini di u cuntrattu, sciglite a prima ozzione inghjò. $_CLICK +# ^Custom +Persunalizata +# ^ComponentsText +Selezziunà i cumpunenti chì voi vulete installà è viutà a casella di quelli ch’ellu ùn ci vole micca à installà. $_CLICK +# ^ComponentsSubText1 +Selezziunà u tipu d’installazione : +# ^ComponentsSubText2_NoInstTypes +Selezziunà i cumpunenti à installà : +# ^ComponentsSubText2 +Osinnò, selezziunà i cumpunenti addizziunali chì voi vulete installà : +# ^UnComponentsText +Selezziunà i cumpunenti chì voi vulete disinstallà è viutà a casella di quelli ch’ellu ùn ci vole à disinstallà. $_CLICK +# ^UnComponentsSubText1 +Selezziunà u tipu di disinstallazione : +# ^UnComponentsSubText2_NoInstTypes +Selezziunà i cumpunenti à disinstallà : +# ^UnComponentsSubText2 +Osinnò, selezziunà i cumpunenti addizziunali chì voi vulete disinstallà : +# ^DirText +L’assistente hà da installà $(^NameDA) in quessu cartulare. Per installà in un altru cartulare, sciglite Sfuglià è selezziunà un altru cartulare. $_CLICK +# ^DirSubText +Cartulare di destinazione +# ^DirBrowseText +Selezziunà u cartulare d’installazione di $(^NameDA) : +# ^UnDirText +L’assistente hà da disinstallà $(^NameDA) da quessu cartulare. Per disinstallà da un altru cartulare, sciglite Sfuglià è selezziunà un altru cartulare. $_CLICK +# ^UnDirSubText +Cartulare d’installazione +# ^UnDirBrowseText +Selezziunà u cartulare di disinstallazione di $(^NameDA) : +# ^SpaceAvailable +Spaziu dispunibule : +# ^SpaceRequired +Spaziu richiestu : +# ^UninstallingText +$(^NameDA) serà disinstallatu da quessu cartulare. $_CLICK +# ^UninstallingSubText +Disinstallazione da : +# ^FileError +Sbagliu durante l’accessu in scrittura di u schedariu : \r\n\r\n$0\r\n\r\nSciglite Interrompe per piantà l’installazione,\r\nTorna per pruvà torna, o\r\nIgnurà per ignurà stu schedariu. +# ^FileError_NoIgnore +Sbagliu durante l’accessu in scrittura di u schedariu : \r\n\r\n$0\r\n\r\nSciglite Torna per pruvà torna, o\r\nAbbandunà per piantà l’installazione. +# ^CantWrite +Ùn pò micca scrive : +# ^CopyFailed +Fiascu di a copia +# ^CopyTo +Cupià ver di +# ^Registering +Arregistramentu : +# ^Unregistering +Disarregistramentu : +# ^SymbolNotFound +Impussibule di truvà un simbolu : +# ^CouldNotLoad +Impussibule di caricà : +# ^CreateFolder +Creazione di u cartulare : +# ^CreateShortcut +Creazione di l’accurtatoghju : +# ^CreatedUninstaller +Creazione di l’assistente di disinstallazione : +# ^Delete +Squassatura di schedariu : +# ^DeleteOnReboot +Squassatura à l’avviu di l’urdinatore : +# ^ErrorCreatingShortcut +Sbagliu durante a creazione di l’accurtatoghju : +# ^ErrorCreating +Sbagliu durante a creazione di : +# ^ErrorDecompressing +Sbagliu durante a scumprezzione di i dati ! Stalladore alteratu ? +# ^ErrorRegistering +Sbagliu durante l’arregistramentu di DLL +# ^ExecShell +ExecShell : +# ^Exec +Eseguisce : +# ^Extract +Estrazzione : +# ^ErrorWriting +Estrazzione : sbagliu di scrittura ver di u schedariu +# ^InvalidOpcode +Stalladore alteratu : opcode micca accettevule +# ^NoOLE +Alcunu OLE per : +# ^OutputFolder +Cartulare di destinazione : +# ^RemoveFolder +Cacciatura di u cartulare : +# ^RenameOnReboot +Rinumà à l’avviu di l’urdinatore : +# ^Rename +Rinumà : +# ^Skipped +Tralasciatu : +# ^CopyDetails +Cupià i detaglii ver di u preme’papei +# ^LogInstall +Arregistrà u ghjurnale d’installazione +# ^Byte +o +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Corsican.nsh b/tools/Contrib/Language files/Corsican.nsh new file mode 100644 index 0000000..5e58b1e --- /dev/null +++ b/tools/Contrib/Language files/Corsican.nsh @@ -0,0 +1,133 @@ +/* +** Language: Corsican (1155) +** Traduzzione corsa da Patriccollu di Santa Maria è Sichè - +** ISO 639-1: co +** ISO 639-2: cos +*/ + +!insertmacro LANGFILE "Corsican" "Corsican" "Corsu" "Corsu" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Benvenuta in l’assistente d’installazione di $(^NameDA)m" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "L’assistente d’installazione hà da aiutavvi à installà $(^NameDA).$\r$\n$\r$\nHè ricumandatu di chjode tutte l’altre appiecazioni nanzu di avvià st’assistente. Quessu permetterà di mudificà i schedarii di u sistema senza riavvià l’urdinatore.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Benvenuta in l’assistente di disinstallazione di $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "L’assistente hà da aiutavvi à disinstallà $(^NameDA).$\r$\n$\r$\nNanzu di principià a disinstallazione, ci vole à assicurassi chì $(^NameDA) ùn sia micca in funzione.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Cuntrattu di licenza" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ci vole à leghje i termini di a licenza nanzu d’installà $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "S’è voi site d’accunsentu cù i termini di u cuntrattu, sciglite Accunsentu per cuntinuà. Ci vole à accettà u cuntrattu per installà $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "S’è voi site d’accunsentu cù i termini di u cuntrattu, sciglite a casella inghjò. Ci vole à accettà u cuntrattu per installà $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "S’è voi site d’accunsentu cù i termini di u cuntrattu, sciglite a prima ozzione inghjò. Ci vole à accettà u cuntrattu per installà $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Cuntrattu di licenza" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Ci vole à leghje i termini di a licenza nanzu di disinstallà $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "S’è voi site d’accunsentu cù i termini di u cuntrattu, sciglite Accunsentu per cuntinuà. Ci vole à accettà u cuntrattu per disinstallà $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "S’è voi site d’accunsentu cù i termini di u cuntrattu, sciglite a casella inghjò. Ci vole à accettà u cuntrattu per disinstallà $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "S’è voi site d’accunsentu cù i termini di u cuntrattu, sciglite a prima ozzione inghjò. Ci vole à accettà u cuntrattu per disinstallà $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Sciglite Pagina Seguente per fighjà a seguita di u ducumentu." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Sciglite i cumpunenti" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Sciglite e funzioni di $(^NameDA) chì voi vulete installà." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Sciglite i cumpunenti" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Sciglite e funzioni di $(^NameDA) chì voi vulete disinstallà." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Discrizzione" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Piazzà u topu nant’à un cumpunentu per fighjà a so discrizzione." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Selezziunà un cumpunentu per fighjà a so discrizzione." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Sciglite u cartulare d’installazione" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Sciglite u cartulare induve installà $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Sciglite u cartulare di disinstallazione" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Sciglite u cartulare di disinstallazione di $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installazione in corsu" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Aspettate per piacè chì $(^NameDA) sia installatu." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installazione compia" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "L’installazione hè compia bè." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installazione interrotta" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "L’installazione ùn hè micca compia bè." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Disinstallazione in corsu" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Aspettate per piacè chì $(^NameDA) sia disinstallatu." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Disinstallazione compia" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "A disinstallazione hè compia bè." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Disinstallazione interrotta" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "A disinstallazione ùn hè micca compia bè." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Fine d’installazione di $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) hè statu installatu nant’à l’urdinatore.$\r$\n$\r$\nSciglite Piantà per chjode l’assistente." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "L’urdinatore deve esse piantatu è rilanciatu per compie l’installazione di $(^NameDA). Vulete piantalu è rilancialu avà ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Fine di disinstallazione di $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) hè statu disinstallatu da l’urdinatore.$\r$\n$\r$\nSciglite Piantà per chjode l’assistente." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "L’urdinatore deve esse piantatu è rilanciatu per compie a disinstallazione di $(^NameDA). Vulete piantalu è rilancialu avà ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Rilancià subitu" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Vogliu fallu dopu dapermè" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Eseguisce $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Affissà u schedariu LisezMoi/Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Piantà" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Sciglite un cartulare in u listinu « Démarrer »" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Sciglite un cartulare in u listinu « Démarrer » per l’accurtatoghjii di $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Sciglite un cartulare in u listinu « Démarrer » induve l’accurtatoghjii di u prugramma seranu creati. Pudete dinù scrive un nome per creà un novu cartulare." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ùn creà micca d’accurtatoghji" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Disinstallà $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Caccià $(^NameDA) da l’urdinatore." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Site sicuru di vulè chità l’assistente d’installazione di $(^Name) ?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Site sicuru di vulè chità l’assistente di disinstallazione di $(^Name) ?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Scelta di l’utilizatori" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Sciglite l’utilizatori chì puderanu impiegà $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Selezziunà s’èllu ci vole à installà $(^NameDA) solu per voi o per tutti l’utilizatori di l’urdinatore. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installà per tutti l’utilizatori di l’urdinatore" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installà solu per mè" +!endif diff --git a/tools/Contrib/Language files/Croatian.nlf b/tools/Contrib/Language files/Croatian.nlf new file mode 100644 index 0000000..c26571a --- /dev/null +++ b/tools/Contrib/Language files/Croatian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1050 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Igor Ostriz +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalacija programa $(^Name) +# ^UninstallCaption +Uklanjanje programa $(^Name) +# ^LicenseSubCaption +: Uvjeti Ugovora o licenci +# ^ComponentsSubCaption +: Instalacijske opcije +# ^DirSubCaption +: Instalacijska mapa +# ^InstallingSubCaption +: Instaliranje +# ^CompletedSubCaption +: ZavrÅ¡eno +# ^UnComponentsSubCaption +: Opcije uklanjanja +# ^UnDirSubCaption +: Mapa uklanjanja +# ^ConfirmSubCaption +: Potvrda +# ^UninstallingSubCaption +: Uklanjanje +# ^UnCompletedSubCaption +: ZavrÅ¡eno +# ^BackBtn +< &Natrag +# ^NextBtn +&Dalje > +# ^AgreeBtn +&Prihvaćam +# ^AcceptBtn +&Prihvaćam uvjete Ugovora o licenci +# ^DontAcceptBtn +&Ne prihvaćam uvjete Ugovora o licenci +# ^InstallBtn +&Instaliraj +# ^UninstallBtn +&Ukloni +# ^CancelBtn +Odustani +# ^CloseBtn +&Zatvori +# ^BrowseBtn +&Pregledaj... +# ^ShowDetailsBtn +Prikaži &detalje +# ^ClickNext +Za nastavak odaberite 'Dalje'. +# ^ClickInstall +Za poÄetak instalacije odaberite 'Instaliraj'. +# ^ClickUninstall +Za poÄetak uklanjanja odaberite 'Ukloni'. +# ^Name +Ime +# ^Completed +ZavrÅ¡eno +# ^LicenseText +ProÄitajte licencu prije instalacije programa $(^NameDA). Ukoliko prihvaćate sve uvjete ugovora, odaberite 'Prihvaćam'. +# ^LicenseTextCB +ProÄitajte licencu prije instalacije programa $(^NameDA). Ukoliko prihvaćate sve uvjete ugovora, oznaÄite donji kvadratić. $_CLICK +# ^LicenseTextRB +ProÄitajte licencu prije instalacije programa $(^NameDA). Ukoliko prihvaćate sve uvjete ugovora, odaberite prvu donju opciju. $_CLICK +# ^UnLicenseText +ProÄitajte licencu prije uklanjanja programa $(^NameDA). Ukoliko prihvaćate sve uvjete ugovora, odaberite 'Prihvaćam'. +# ^UnLicenseTextCB +ProÄitajte licencu prije uklanjanja programa $(^NameDA). Ukoliko prihvaćate sve uvjete ugovora, oznaÄite donji kvadratić. $_CLICK +# ^UnLicenseTextRB +ProÄitajte licencu prije uklanjanja programa $(^NameDA). Ukoliko prihvaćate sve uvjete ugovora, odaberite prvu donju opciju. $_CLICK +# ^Custom +Posebna +# ^ComponentsText +OznaÄite komponente koje želite instalirati i uklonite oznaku s onih koje ne želite instalirati. $_CLICK +# ^ComponentsSubText1 +Izaberite tip instalacije: +# ^ComponentsSubText2_NoInstTypes +Odaberite komponente za instalaciju: +# ^ComponentsSubText2 +Ili po izboru oznaÄite komponente koje želite instalirati: +# ^UnComponentsText +OznaÄite komponente koje želite ukloniti i uklonite oznaku s onih koje ne želite ukloniti. $_CLICK +# ^UnComponentsSubText1 +Izaberite tip uklanjanja: +# ^UnComponentsSubText2_NoInstTypes +Odaberite komponente za uklanjanje: +# ^UnComponentsSubText2 +Ili po izboru oznaÄite komponente koje želite ukloniti: +# ^DirText +Program $(^NameDA) bit će instaliran u sljedeću mapu. Ako želite promijeniti odrediÅ¡te, pritisnite dugme za traženje mape i oznaÄite drugu mapu. $_CLICK +# ^DirSubText +OdrediÅ¡na mapa +# ^DirBrowseText +Odaberite mapu u koju želite instalirati program $(^NameDA): +# ^UnDirText +Program $(^NameDA) bit će uklonjen iz sljedeće mape. Za uklanjanje s drugog mjesta odaberite 'Pregledaj' i oznaÄite drugu mapu. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Mapa iz koje će program $(^NameDA) biti uklonjen: +# ^SpaceAvailable +"Slobodno prostora na disku: " +# ^SpaceRequired +"Potrebno prostora na disku: " +# ^UninstallingText +Program $(^NameDA) bit će uklonjen iz sljedeće mape. $_CLICK +# ^UninstallingSubText +Uklanjam iz: +# ^FileError +GreÅ¡ka prilikom otvaranja datoteke za zapisivanje: \r\n\r\n$0\r\n\r\nPritisnite "Abort" ako želite prekinuti instalaciju,\r\n"Retry" ako želite pokuÅ¡ati ponovno, ili\r\n"Ignore" ako želite zanemariti tu datoteku +# ^FileError_NoIgnore +GreÅ¡ka prilikom otvaranja datoteke za zapisivanje: \r\n\r\n$0\r\n\r\nPritisnite "Retry" za ponovni pokuÅ¡aj zapisivanja, ili\r\n"Cancel" za prekid instalacije +# ^CantWrite +"Ne mogu zapisati: " +# ^CopyFailed +GreÅ¡ka prilikom kopiranja +# ^CopyTo +"Kopiraj u " +# ^Registering +"Prijava: " +# ^Unregistering +"Odjava: " +# ^SymbolNotFound +"Ne mogu naći simbol: " +# ^CouldNotLoad +"Ne mogu uÄitati: " +# ^CreateFolder +"Stvori mapu: " +# ^CreateShortcut +"Stvori preÄac: " +# ^CreatedUninstaller +"Program za uklanjanje: " +# ^Delete +"IzbriÅ¡i datoteku: " +# ^DeleteOnReboot +"IzbriÅ¡i prilikom ponovnog pokretanja: " +# ^ErrorCreatingShortcut +"GreÅ¡ka prilikom stvaranja preÄaca: " +# ^ErrorCreating +"GreÅ¡ka prilikom stvaranja: " +# ^ErrorDecompressing +GreÅ¡ka dekompresije podataka! OÅ¡tećena instalacijska datoteka? +# ^ErrorRegistering +GreÅ¡ka prilikom prijavljivanja DLL-a +# ^ExecShell +"ExecShell: " +# ^Exec +"IzvrÅ¡i: " +# ^Extract +"Otpakiraj: " +# ^ErrorWriting +"Otpakiranje: greÅ¡ka zapisivanja u datoteku " +# ^InvalidOpcode +OÅ¡tećena instalacijska datoteka: neispravan opkod +# ^NoOLE +"Nema OLE za: " +# ^OutputFolder +"Izlazna mapa: " +# ^RemoveFolder +"IzbriÅ¡i mapu: " +# ^RenameOnReboot +"Preimenuj prilikom ponovnog pokretanja: " +# ^Rename +"Preimenuj: " +# ^Skipped +"PreskoÄeno: " +# ^CopyDetails +Kopiraj detalje u meÄ‘uspremnik +# ^LogInstall +Logiraj instalacijski proces +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Croatian.nsh b/tools/Contrib/Language files/Croatian.nsh new file mode 100644 index 0000000..9fd7677 --- /dev/null +++ b/tools/Contrib/Language files/Croatian.nsh @@ -0,0 +1,121 @@ +;Language: Croatian (1050) +;By Igor Ostriz + +!insertmacro LANGFILE "Croatian" = "Hrvatski" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li u instalaciju programa $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Instalacija programa $(^NameDA) na VaÅ¡e raÄunalo sastoji se od nekoliko jednostavnih koraka kroz koje će Vas provesti ovaj Äarobnjak.$\r$\n$\r$\nPreporuÄamo zatvaranje svih ostalih aplikacija prije samog poÄetka instalacije. To će omogućiti nadogradnju nekih sistemskih datoteka bez potrebe za ponovnim pokretanjem VaÅ¡eg raÄunala. U svakom trenutku instalaciju možete prekinuti pritiskom na 'Odustani'.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li u postupak uklanjanja programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ovaj će Vas Äarobnjak provesti kroz postupak uklanjanja programa $(^NameDA).$\r$\n$\r$\nPrije samog poÄetka, molim zatvorite program $(^NameDA) ukoliko je sluÄajno otvoren.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Ugovor o licenci" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "ProÄitajte licencu prije instalacije programa $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ako prihvaćate uvjete licence, pritisnite 'Prihvaćam' za nastavak. Da biste instalirali program $(^NameDA), morate prihvatiti licencu." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ukoliko prihvaćate uvjete licence, oznaÄite donji kvadratić. Morate prihvatiti licencu za instalaciju programa $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ukoliko prihvaćate uvjete licence, odaberite prvu donju opciju. Morate prihvatiti licencu za instalaciju programa $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Ugovor o licenci" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "ProÄitajte licencu prije uklanjanja programa $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ako prihvaćate uvjete licence, pritisnite 'Prihvaćam' za nastavak. Da biste instalirali program $(^NameDA), morate prihvatiti licencu." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ukoliko prihvaćate uvjete licence, oznaÄite donji kvadratić. Morate prihvatiti licencu za uklanjanje programa $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ukoliko prihvaćate uvjete licence, odaberite prvu donju opciju. Morate prihvatiti licencu za uklanjanje programa $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Služite se tipkom 'Page Down' da biste vidjeli ostatak licence." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Izbor komponenti" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Odaberite komponente programa $(^NameDA) koje želite instalirati." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Izbor komponenti" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Odaberite koje komponente programa $(^NameDA) želite ukloniti." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Postavite pokazivaÄ iznad komponente za njezin opis." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "OznaÄite komponentu za njezin opis." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Odaberite odrediÅ¡te za instalaciju" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Odaberite mapu u koju želite instalirati program $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Odaberite polaziÅ¡te za uklanjanje" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Odaberite mapu iz koje želite ukloniti program $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalacija u tijeku..." + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "PriÄekajte zavrÅ¡etak instalacije programa $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Kraj instalacije" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalacija je u potpunosti zavrÅ¡ila uspjeÅ¡no." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalacija je prekinuta" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalacija nije zavrÅ¡ila uspjeÅ¡no." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uklanjanje u tijeku..." + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "PriÄekajte zavrÅ¡etak uklanjanja programa $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Uklanjanje zavrÅ¡eno" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Uklanjanje je u potpunosti zavrÅ¡ilo uspjeÅ¡no." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Uklanjanje je prekinuto" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Uklanjanje nije zavrÅ¡ilo uspjeÅ¡no." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "DovrÅ¡etak instalacije programa $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) upravo je instaliran.$\r$\n$\r$\nOdaberite 'Kraj' za zavrÅ¡etak." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Da bi se dovrÅ¡ila instalacija programa $(^NameDA), trebate ponovno pokrenuti raÄunalo. Želite li to uÄiniti sada?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "ZavrÅ¡etak uklanjanja programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Program $(^NameDA) uklonjen je s VaÅ¡eg raÄunala.$\r$\n$\r$\nOdaberite 'Kraj' za zatvaranje ovog Äarobnjaka." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Da bi se dovrÅ¡io postupka uklanjanja programa $(^NameDA), trebate ponovno pokrenuti raÄunalo. Želite li to uÄiniti sada?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ponovno pokreni raÄunalo sada" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ponovno ću pokrenuti raÄunalo kasnije" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Pokreni program $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Otvori datoteku '&Readme'" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Kraj" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Izbor mape u izborniku 'Start'" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Odaberite ime za programsku mapu unutar izbornika 'Start'." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Program će pripadati odabranoj programskoj mapi u izborniku 'Start'. Možete odrediti novo ime za mapu ili odabrati već postojeću." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nemoj napraviti preÄace" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Uklanjanje programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Program $(^NameDA) bit će uklonjen s VaÅ¡eg raÄunala." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Jeste li sigurni da želite prekinuti instalaciju programa $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Jeste li sigurni da želite prekinuti uklanjanje programa $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Czech.nlf b/tools/Contrib/Language files/Czech.nlf new file mode 100644 index 0000000..d524925 --- /dev/null +++ b/tools/Contrib/Language files/Czech.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1029 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Václav PavlíÄek (v.pavlicek@centrum.cz), dříve SELiCE +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalace $(^Name) +# ^UninstallCaption +Odinstalace $(^Name) +# ^LicenseSubCaption +: LicenÄní smlouva +# ^ComponentsSubCaption +: Možnosti instalace +# ^DirSubCaption +: InstalaÄní složka +# ^InstallingSubCaption +: Instalace +# ^CompletedSubCaption +: DokonÄeno +# ^UnComponentsSubCaption +: Možnosti odinstalace +# ^UnDirSubCaption +: OdinstalaÄní složka +# ^ConfirmSubCaption +: Potvrzení +# ^UninstallingSubCaption +: Odinstalace +# ^UnCompletedSubCaption +: DokonÄeno +# ^BackBtn +< &ZpÄ›t +# ^NextBtn +&Další > +# ^AgreeBtn +Souhl&asím +# ^AcceptBtn +Souhl&asím s podmínkami licenÄní smlouvy +# ^DontAcceptBtn +&Nesouhlasím s podmínkami licenÄní smlouvy +# ^InstallBtn +&Instalovat +# ^UninstallBtn +&Odinstalovat +# ^CancelBtn +Storno +# ^CloseBtn +&Zavřít +# ^BrowseBtn +P&rocházet... +# ^ShowDetailsBtn +&Podrobnosti +# ^ClickNext +PokraÄujte kliknutím na tlaÄítko Další. +# ^ClickInstall +Instalaci spustíte kliknutím na tlaÄítko Instalovat. +# ^ClickUninstall +Odinstalaci spustíte kliknutím na tlaÄítko Odinstalovat. +# ^Name +Název +# ^Completed +DokonÄeno +# ^LicenseText +PÅ™ed instalací programu $(^NameDA) si prosím pÅ™eÄtÄ›te licenÄní smlouvu. Jestliže souhlasíte s podmínkami této smlouvy, kliknÄ›te na tlaÄítko Souhlasím. +# ^LicenseTextCB +PÅ™ed instalací programu $(^NameDA) si prosím pÅ™eÄtÄ›te licenÄní smlouvu. Jestliže souhlasíte s podmínkami této smlouvy, zaÅ¡krtnÄ›te políÄko níže. $_CLICK +# ^LicenseTextRB +PÅ™ed instalací programu $(^NameDA) si prosím pÅ™eÄtÄ›te licenÄní smlouvu. Jestliže souhlasíte s podmínkami této smlouvy, vyberte níže první možnost. $_CLICK +# ^UnLicenseText +PÅ™ed odinstalací programu $(^NameDA) si prosím pÅ™eÄtÄ›te licenÄní smlouvu. Jestliže souhlasíte s podmínkami této smlouvy, kliknÄ›te na tlaÄítko Souhlasím. +# ^UnLicenseTextCB +PÅ™ed odinstalací programu $(^NameDA) si prosím pÅ™eÄtÄ›te licenÄní smlouvu. Jestliže souhlasíte s podmínkami této smlouvy, zaÅ¡krtnÄ›te políÄko níže. $_CLICK +# ^UnLicenseTextRB +PÅ™ed odinstalací programu $(^NameDA) si prosím pÅ™eÄtÄ›te licenÄní smlouvu. Jestliže souhlasíte s podmínkami této smlouvy, vyberte níže první možnost. $_CLICK +# ^Custom +Vlastní +# ^ComponentsText +ZaÅ¡krtnÄ›te souÄásti, které chcete nainstalovat a zruÅ¡te zaÅ¡krtnutí souÄástí, které nechcete nainstalovat. $_CLICK +# ^ComponentsSubText1 +Zvolte způsob instalace: +# ^ComponentsSubText2_NoInstTypes +Vyberte souÄásti, které chcete nainstalovat. +# ^ComponentsSubText2 +Nebo vyberte volitelné souÄásti, které chcete nainstalovat. +# ^UnComponentsText +ZaÅ¡krtnÄ›te souÄásti, které chcete odinstalovat a zruÅ¡te zaÅ¡krtnutí souÄástí, které nechcete odinstalovat. $_CLICK +# ^UnComponentsSubText1 +Zvolte způsob odinstalace: +# ^UnComponentsSubText2_NoInstTypes +Vyberte souÄásti, které chcete odinstalovat. +# ^UnComponentsSubText2 +Nebo vyberte volitelné souÄásti, které chcete odinstalovat. +# ^DirText +InstalaÄní program nainstaluje program $(^NameDA) do následující složky. Chcete-li instalovat do jiné složky, kliknÄ›te na tlaÄítko Procházet a vyberte jinou složku. $_CLICK +# ^DirSubText +Cílová složka +# ^DirBrowseText +VýbÄ›r instalaÄní složky programu $(^NameDA). +# ^UnDirText +OdinstalaÄní program odinstaluje program $(^NameDA) z následující složky. Chcete-li odinstalovat z jiné složky, kliknÄ›te na tlaÄítko Procházet a vyberte jinou složku. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Vyberte odinstalaÄní složku programu $(^NameDA): +# ^SpaceAvailable +"Volné místo: " +# ^SpaceRequired +"Požadované místo: " +# ^UninstallingText +Program $(^NameDA) bude odinstalován z následující složky. $_CLICK +# ^UninstallingSubText +Odinstalovat z: +# ^FileError +Soubor nelze otevřít pro zápis: \r\n\t"$0"\r\nKliknÄ›te na tlaÄítko PÅ™eruÅ¡it k ukonÄení instalace,\r\nnebo na tlaÄítko Opakovat k zopakování akce, nebo\r\n na tlaÄítko Ignorovat k pÅ™eskoÄení souboru. +# ^FileError_NoIgnore +Soubor nelze otevřít pro zápis: \r\n\t"$0"\r\nKliknÄ›te na tlaÄítko Opakovat k zopakování akce, nebo\r\n na tlaÄítko Storno k ukonÄení instalace. +# ^CantWrite +"Nelze zapsat: " +# ^CopyFailed +Kopírování se nezdaÅ™ilo. +# ^CopyTo +"Kopírování do " +# ^Registering +"Registrace: " +# ^Unregistering +"RuÅ¡ení registrace: " +# ^SymbolNotFound +"Nelze najít symbol: " +# ^CouldNotLoad +"Nelze naÄíst: " +# ^CreateFolder +"Vytváření složky: " +# ^CreateShortcut +"Vytváření zástupce: " +# ^CreatedUninstaller +"Vytváření odinstalaÄního programu: " +# ^Delete +"Odstraňování souboru: " +# ^DeleteOnReboot +"Odstranit pÅ™i restartování: " +# ^ErrorCreatingShortcut +"PÅ™i vytváření zástupce doÅ¡lo k chybÄ›: " +# ^ErrorCreating +"PÅ™i vytváření doÅ¡lo k chybÄ›: " +# ^ErrorDecompressing +PÅ™i dekompresi dat doÅ¡lo k chybÄ›. Byl poÅ¡kozen instalaÄní program? +# ^ErrorRegistering +PÅ™i registraci souborů DLL doÅ¡lo k chybÄ›. +# ^ExecShell +"SpouÅ¡tÄ›ní prostÅ™edí: " +# ^Exec +"SpouÅ¡tÄ›ní: " +# ^Extract +"Extrahování: " +# ^ErrorWriting +"Extrakce: PÅ™i zápisu souboru doÅ¡lo k chybÄ› " +# ^InvalidOpcode +InstalaÄní program byl poÅ¡kozen: neplatný operaÄní kód. +# ^NoOLE +"Nedostupné OLE pro: " +# ^OutputFolder +"Výstupní složka: " +# ^RemoveFolder +"Odstraňování složky: " +# ^RenameOnReboot +"PÅ™ejmenovat pÅ™i restartování: " +# ^Rename +"PÅ™ejmenováno: " +# ^Skipped +"PÅ™eskoÄeno: " +# ^CopyDetails +Zkopírovat podrobnosti do schránky +# ^LogInstall +Protokolovat proces instalace +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Czech.nsh b/tools/Contrib/Language files/Czech.nsh new file mode 100644 index 0000000..51c0fa4 --- /dev/null +++ b/tools/Contrib/Language files/Czech.nsh @@ -0,0 +1,129 @@ +;Language: Czech (1029) +;By Václav PavlíÄek (v.pavlicek@centrum.cz), dříve SELiCE + +!insertmacro LANGFILE "Czech" = "ÄŒeÅ¡tina" "Cestina" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Vítejte v průvodci instalace programu $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Tento průvodce vás provede instalací programu $(^NameDA).$\r$\n$\r$\nPÅ™ed spuÅ¡tÄ›ním instalaÄního programu je doporuÄeno ukonÄit vÅ¡echny ostatní aplikace. Umožní to aktualizovat související systémové soubory bez restartování poÄítaÄe.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Vítejte v průvodci odinstalace programu $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tento průvodce vás provede odinstalací programu $(^NameDA).$\r$\n$\r$\nPÅ™ed spuÅ¡tÄ›ním odinstalace se pÅ™esvÄ›dÄte, zda program $(^NameDA) není spuÅ¡tÄ›n.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "LicenÄní smlouva" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "PÅ™ed instalací programu $(^NameDA) si prosím projdÄ›te licenÄní podmínky." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jestliže souhlasíte s podmínkami smlouvy, kliknÄ›te na tlaÄítko Souhlasím. Chcete-li nainstalovat program $(^NameDA), je nutné s touto smlouvou souhlasit." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jestliže souhlasíte s podmínkami smlouvy, zaÅ¡krtnÄ›te políÄko níže. Chcete-li nainstalovat program $(^NameDA), je nutné s touto smlouvou souhlasit. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jestliže souhlasíte s podmínkami smlouvy, vyberte níže první možnost. Chcete-li nainstalovat program $(^NameDA), je nutné s touto smlouvou souhlasit. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "LicenÄní smlouva" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "PÅ™ed odinstalací programu $(^NameDA) si prosím projdÄ›te licenÄní podmínky." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jestliže souhlasíte s podmínkami smlouvy, kliknÄ›te na tlaÄítko Souhlasím. Chcete-li odinstalovat program $(^NameDA), je nutné s touto smlouvou souhlasit." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jestliže souhlasíte s podmínkami smlouvy, zaÅ¡krtnÄ›te políÄko níže. Chcete-li odinstalovat program $(^NameDA), je nutné s touto smlouvou souhlasit. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jestliže souhlasíte s podmínkami smlouvy, vyberte níže první možnost. Chcete-li odinstalovat program $(^NameDA), je nutné s touto smlouvou souhlasit. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Zbytek textu zobrazíte stisknutím klávesy Page Down." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Volba souÄástí" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "VýbÄ›r souÄástí programu $(^NameDA) pro instalaci." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Volba souÄástí" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "VýbÄ›r souÄástí programu $(^NameDA) pro odinstalaci." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Popis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Chcete-li zobrazit popis souÄásti, umístÄ›te na ní ukazatel myÅ¡i." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Chcete-li zobrazit popis souÄásti, vyberte ji." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Volba umístÄ›ní instalace" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "VýbÄ›r instalaÄní složky programu $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Volba umístÄ›ní odinstalace" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "VýbÄ›r odinstalaÄní složky programu $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalace" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "PoÄkejte prosím na dokonÄení instalace programu $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalace dokonÄena" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalace byla úspěšnÄ› dokonÄena." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalace pÅ™eruÅ¡ena" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalace nebyla úspěšnÄ› dokonÄena." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Odinstalace" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "PoÄkejte prosím na dokonÄení odinstalace programu $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Odinstalace dokonÄena" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Odinstalace byla úspěšnÄ› dokonÄena." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Odinstalace pÅ™eruÅ¡ena" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Odinstalace nebyla úspěšnÄ› dokonÄena." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "DokonÄení instalace programu $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) byl nainstalován do poÄítaÄe.$\r$\n$\r$\nKliknutím na tlaÄítko DokonÄit ukonÄíte tohoto průvodce." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "K dokonÄení instalace programu $(^NameDA) je nutné restartovat poÄítaÄ. Chcete jej restartovat nyní?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "DokonÄení odinstalace programu $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Program $(^NameDA) byl odinstalován z poÄítaÄe.$\r$\n$\r$\nKliknutím na tlaÄítko DokonÄit ukonÄíte tohoto průvodce." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "K dokonÄení odinstalace $(^NameDA) je nutné restartovat poÄítaÄ. Chcete jej restartovat nyní?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Restartovat nyní" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Restartovat pozdÄ›ji ruÄnÄ›" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Spustit program $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Zobrazit soubor Readme (ÄŒti mÄ›)" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&DokonÄit" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Volba složky v Nabídce Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "VýbÄ›r složky v Nabídce Start pro zástupce programu $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vyberte složku v Nabídce Start, ve které chcete vytvoÅ™it zástupce programu. Chcete-li vytvoÅ™it novou složku, zadejte její název." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "NevytvoÅ™it zástupce" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Odinstalace programu $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Odebere program $(^NameDA) z poÄítaÄe." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Opravdu chcete instalaci programu $(^Name) ukonÄit?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Opravdu chcete odinstalaci programu $(^Name) ukonÄit?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Volba uživatelů" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "VýbÄ›r uživatelů, kterým bude program $(^NameDA) nainstalován." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Vyberte, zda chcete program $(^NameDA) nainstalovat pouze pro sebe, nebo pro vÅ¡echny uživatele poÄítaÄe. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instalovat pro vÅ¡echny uživatele poÄítaÄe" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalovat pouze pro sebe" +!endif diff --git a/tools/Contrib/Language files/Danish.nlf b/tools/Contrib/Language files/Danish.nlf new file mode 100644 index 0000000..82b0863 --- /dev/null +++ b/tools/Contrib/Language files/Danish.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1030 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Claus Futtrup, scootergrisen +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Installation +# ^UninstallCaption +$(^Name) Afinstallation +# ^LicenseSubCaption +: Licensaftale +# ^ComponentsSubCaption +: Installationsvalgmuligheder +# ^DirSubCaption +: Installationsmappe +# ^InstallingSubCaption +: Installerer +# ^CompletedSubCaption +: Gennemført +# ^UnComponentsSubCaption +: Afinstallationsvalgmuligheder +# ^UnDirSubCaption +: Afinstallationsmappe +# ^ConfirmSubCaption +: Bekræft +# ^UninstallingSubCaption +: Afinstallerer +# ^UnCompletedSubCaption +: Gennemført +# ^BackBtn +< &Tilbage +# ^NextBtn +&Næste > +# ^AgreeBtn +Jeg &accepterer +# ^AcceptBtn +Jeg &accepterer vilkÃ¥rene i licensaftalen +# ^DontAcceptBtn +Jeg &accepterer ikke vilkÃ¥rene i licensaftalen +# ^InstallBtn +&Installer +# ^UninstallBtn +&Afinstaller +# ^CancelBtn +Annuller +# ^CloseBtn +&Luk +# ^BrowseBtn +G&ennemse... +# ^ShowDetailsBtn +Vis &detaljer +# ^ClickNext +Tryk pÃ¥ Næste for at fortsætte. +# ^ClickInstall +Tryk pÃ¥ Installer for at starte installationen. +# ^ClickUninstall +Tryk pÃ¥ Afinstaller for at starte afinstallationen. +# ^Name +Navn +# ^Completed +Gennemført +# ^LicenseText +Gennemlæs venligst licensaftalen før installationen af $(^NameDA). Hvis du accepterer alle vilkÃ¥r i aftalen, skal du klikke pÃ¥ Jeg accepterer. +# ^LicenseTextCB +Gennemlæs venligst licensaftalen før installationen af $(^NameDA). Hvis du accepterer alle vilkÃ¥r i aftalen, skal du klikke pÃ¥ afkrydsningsfeltet nedenfor. $_CLICK +# ^LicenseTextRB +Gennemlæs venligst licensaftalen før installationen af $(^NameDA). Hvis du accepterer alle vilkÃ¥r i aftalen, skal du vælge den første valgmulighed nedenfor. $_CLICK +# ^UnLicenseText +Gennemlæs venligst licensaftalen før afinstallationen af $(^NameDA). Hvis du accepterer alle vilkÃ¥r i aftalen, skal du trykke pÃ¥ Jeg accepterer. +# ^UnLicenseTextCB +Gennemlæs venligst licensaftalen før afinstallationen af $(^NameDA). Hvis du accepterer alle vilkÃ¥r i aftalen, skal du klikke pÃ¥ afkrydsningsfeltet nedenfor. $_CLICK +# ^UnLicenseTextRB +Gennemlæs venligst licensaftalen før afinstallationen af $(^NameDA). Hvis du accepterer alle vilkÃ¥r i aftalen, skal du vælge den første valgmulighed nedenfor. $_CLICK +# ^Custom +Brugerdefineret +# ^ComponentsText +Tilvælg de komponenter du vil installere, og fravælg de komponenter du ikke vil installere. $_CLICK +# ^ComponentsSubText1 +Vælg installationstype: +# ^ComponentsSubText2_NoInstTypes +Vælg de komponenter der skal installeres: +# ^ComponentsSubText2 +Eller vælg de valgfrie komponenter du ønsker at installere: +# ^UnComponentsText +Tilvælg de komponenter du vil afinstallere, og fravælg de komponenter du ikke vil afinstallere. $_CLICK +# ^UnComponentsSubText1 +Vælg afinstallationstype: +# ^UnComponentsSubText2_NoInstTypes +Vælg de komponenter der skal afinstalleres: +# ^UnComponentsSubText2 +Eller vælg de valgfrie komponenter du ønsker at afinstallere: +# ^DirText +Installationsguiden vil installere $(^NameDA) i følgende mappe. For at installere i en anden mappe, tryk pÃ¥ Gennemse og vælg en anden mappe. $_CLICK +# ^DirSubText +Destinationsmappe +# ^DirBrowseText +Vælg den mappe hvori $(^NameDA) skal installeres: +# ^UnDirText +Installationsguiden vil afinstallere $(^NameDA) fra følgende mappe. For at afinstallere fra en anden mappe, tryk pÃ¥ Gennemse og vælg en anden mappe. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Vælg den mappe hvorfra $(^NameDA) skal afinstalleres: +# ^SpaceAvailable +"Ledig plads: " +# ^SpaceRequired +"Nødvendig plads: " +# ^UninstallingText +$(^NameDA) vil blive afinstalleret fra følgende mappe. $_CLICK +# ^UninstallingSubText +Afinstallerer fra: +# ^FileError +Fejl ved skrivning af fil til skrivning: \r\n\r\n$0\r\n\r\nTryk pÃ¥ Annuller for at stoppe installationen,\r\nPrøv igen for at prøve igen, eller\r\nIgnorer for at springe over denne fil. +# ^FileError_NoIgnore +Fejl ved Ã¥bning af fil til skrivning: \r\n\r\n$0\r\n\r\nTryk pÃ¥ Prøv igen for at prøve igen, eller\r\nAnnuller for at stoppe installationen. +# ^CantWrite +"Kan ikke skrive: " +# ^CopyFailed +Kopiering mislykkedes +# ^CopyTo +"Kopier til " +# ^Registering +"Registrerer: " +# ^Unregistering +"Afregisterer: " +# ^SymbolNotFound +"Kunne ikke finde symbol: " +# ^CouldNotLoad +"Kunne ikke indlæse: " +# ^CreateFolder +"Opret mappe: " +# ^CreateShortcut +"Opret genvej: " +# ^CreatedUninstaller +"Afinstallationsguide oprettet: " +# ^Delete +"Slet fil: " +# ^DeleteOnReboot +"Slet ved genstart: " +# ^ErrorCreatingShortcut +"Fejl ved oprettelse af genvej: " +# ^ErrorCreating +"Fejl ved oprettelse: " +# ^ErrorDecompressing +Fejl ved udpakning af data! Beskadiget installationsguide? +# ^ErrorRegistering +Fejl ved registrering af DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Kør: " +# ^Extract +"Udpak: " +# ^ErrorWriting +"Udpak: fejl ved skrivning til fil " +# ^InvalidOpcode +Beskadiget installationsguide: ugyldig opcode +# ^NoOLE +"Ingen OLE for: " +# ^OutputFolder +"Outputmappe: " +# ^RemoveFolder +"Slet mappe: " +# ^RenameOnReboot +"Omdøb ved genstart: " +# ^Rename +"Omdøb: " +# ^Skipped +"Sprunget over: " +# ^CopyDetails +Kopier detaljer til udklipsholderen +# ^LogInstall +Log installationsproces +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Danish.nsh b/tools/Contrib/Language files/Danish.nsh new file mode 100644 index 0000000..f6da994 --- /dev/null +++ b/tools/Contrib/Language files/Danish.nsh @@ -0,0 +1,129 @@ +;Language: Danish (1030) +;By Claus Futtrup, scootergrisen + +!insertmacro LANGFILE "Danish" = "Dansk" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Velkommen til installationsguiden for $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Denne guide hjælper dig gennem installationen af $(^NameDA).$\r$\n$\r$\nDet anbefales, at du lukker alle kørende programmer inden start af installationsguiden. Det gør det muligt at opdatere de nødvendige systemfiler uden at skulle genstarte din computer.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Velkommen til $(^NameDA) afinstallationsguiden" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Denne guide hjælper dig gennem afinstallationen af $(^NameDA).$\r$\n$\r$\nFør start af afinstallationen skal du være sikker pÃ¥ at $(^NameDA) ikke kører.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licensaftale" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Læs venligst licensaftalen før installationen af $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Hvis du accepterer vilkÃ¥rene i aftalen, skal du klikke pÃ¥ Jeg accepterer for at fortsætte. Du skal acceptere aftalen for at installere $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Hvis du accepterer vilkÃ¥rene i aftalen, skal du klikke pÃ¥ afkrydsningsfeltet nedenfor. Du skal acceptere aftalen for at installere $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du accepterer vilkÃ¥rene i aftalen, skal du vælge den første valgmulighed nedenfor. Du skal acceptere aftalen for at installere $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licensaftale" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Læs venligst licensaftalen før afinstallationen af $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Hvis du accepterer vilkÃ¥rene i aftalen, skal du klikke pÃ¥ Jeg accepterer for at fortsætte. Du skal acceptere aftalen for at afinstallere $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Hvis du accepterer vilkÃ¥rene i aftalen, skal du klikke pÃ¥ afkrydsningsfeltet nedenfor. Du skal acceptere aftalen for at afinstallere $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du accepterer vilkÃ¥rene i aftalen, skal du vælge den første valgmulighed nedenfor. Du skal acceptere aftalen for at afinstallere $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tryk pÃ¥ Page Down for at se resten af aftalen." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Vælg komponenter" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Vælg hvilke faciliteter af $(^NameDA) du vil installere." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Vælg komponenter" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Vælg hvilke faciliteter af $(^NameDA) du vil afinstallere." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivelse" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Placer musemarkøren over en komponent for at se dens beskrivelse." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Vælg en komponent for at se dens beskrivelse." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Vælg installationsmappe" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Vælg den mappe hvori du vil installere $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Vælg afinstallationsmappe" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Vælg den mappe hvorfra du vil afinstallere $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installerer" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vent venligst mens $(^NameDA) bliver installeret." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installation gennemført" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Installationsguiden blev gennemført." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installation afbrudt" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Installationsguiden blev ikke gennemført." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Afinstallerer" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vent venligst mens $(^NameDA) bliver afinstalleret." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Afinstallation gennemført" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Afinstallationen blev gennemført." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Afinstallation afbrudt" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Afinstallationen blev ikke gennemført." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Gennemfører $(^NameDA) installationsguiden" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) er blevet installeret pÃ¥ din computer.$\r$\n$\r$\nTryk pÃ¥ Afslut for at lukke installationsguiden." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Din computer skal genstartes for at gennemføre installationen af $(^NameDA). Vil du genstarte nu?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Gennemfører $(^NameDA) afinstallationsguiden" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) er blevet afinstalleret fra din computer.$\r$\n$\r$\nTryk pÃ¥ Afslut for at lukke installationsguiden." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Din computer skal genstartes for at gennemføre afinstallationen af $(^NameDA). Vil du genstarte nu?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Genstart nu" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Jeg genstarter selv pÃ¥ et senere tidspunkt" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Kør $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Vis Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Afslut" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Vælg mappe i menuen Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Vælg en mappe i menuen Start til programmets genveje." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vælg mappe i menuen Start hvori du vil oprette programmets genveje. Du kan ogsÃ¥ skrive et navn for at oprette en ny mappe." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Opret ikke genveje" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Afinstaller $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Slet $(^NameDA) fra din computer." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Er du sikker pÃ¥, at du vil afslutte installationen af $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Er du sikker pÃ¥, at du vil afslutte afinstallationen af $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Vælg brugere" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Vælg de brugere som skal have installeret $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Vælg hvorvidt du vil installere $(^NameDA) kun for dig selv eller for alle brugere pÃ¥ denne computer. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installer for alle som bruger denne computer" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installer kun for mig" +!endif diff --git a/tools/Contrib/Language files/Dutch.nlf b/tools/Contrib/Language files/Dutch.nlf new file mode 100644 index 0000000..86ced7f --- /dev/null +++ b/tools/Contrib/Language files/Dutch.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1043 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Joost Verburg & Hendri Adireans, fixes by Milan Bast +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name)-installatie +# ^UninstallCaption +$(^Name)-deïnstallatie +# ^LicenseSubCaption +: Licentieovereenkomst +# ^ComponentsSubCaption +: Installatieopties +# ^DirSubCaption +: Installatiemap +# ^InstallingSubCaption +: Bezig met installeren +# ^CompletedSubCaption +: Voltooid +# ^UnComponentsSubCaption +: Verwijderingsopties +# ^UnDirSubCaption +: Te verwijderen map +# ^ConfirmSubCaption +: Bevestiging +# ^UninstallingSubCaption +: Bezig met verwijderen +# ^UnCompletedSubCaption +: Voltooid +# ^BackBtn +< V&orige +# ^NextBtn +&Volgende > +# ^AgreeBtn +&Akkoord +# ^AcceptBtn +Ik &accepteer de overeenkomst +# ^DontAcceptBtn +Ik accepteer de overeenkomst &niet +# ^InstallBtn +&Installeren +# ^UninstallBtn +&Verwijderen +# ^CancelBtn +Annuleren +# ^CloseBtn +&Afsluiten +# ^BrowseBtn +&Bladeren... +# ^ShowDetailsBtn +&Details tonen +# ^ClickNext +Klik op Volgende om verder te gaan. +# ^ClickInstall +Klik op Installeren om de installatie te beginnen. +# ^ClickUninstall +Klik op Verwijderen om de deïnstallatie te beginnen. +# ^Name +Naam +# ^Completed +Voltooid +# ^LicenseText +Lees de licentieovereenkomst voordat u $(^NameDA) installeert. Klik op Akkoord als u de overeenkomst accepteert. +# ^LicenseTextCB +Lees de licentieovereenkomst voordat u $(^NameDA) installeert. Schakel het selectievakje hieronder in als u de overeenkomst accepteert. $_CLICK +# ^LicenseTextRB +Lees de licentieovereenkomst voordat u $(^NameDA) installeert. Selecteer de eerste optie hieronder als u de overeenkomst accepteert. $_CLICK +# ^UnLicenseText +Lees de licentieovereenkomst voordat u $(^NameDA) verwijdert. Klik op Akkoord als u de overeenkomst accepteert. +# ^UnLicenseTextCB +Lees de licentieovereenkomst voordat u $(^NameDA) verwijdert. Schakel het selectievakje hieronder in als u de overeenkomst accepteert. $_CLICK +# ^UnLicenseTextRB +Lees de licentieovereenkomst voordat u $(^NameDA) verwijdert. Selecteer de eerste optie hieronder als u de overeenkomst accepteert. $_CLICK +# ^Custom +Aangepast +# ^ComponentsText +Selecteer de onderdelen die u wilt installeren en deselecteer welke u niet wilt installeren. $_CLICK +# ^ComponentsSubText1 +Selecteer het installatietype: +# ^ComponentsSubText2_NoInstTypes +Selecteer de onderdelen die moeten worden geïnstalleerd: +# ^ComponentsSubText2 +Of selecteer de optionele onderdelen die moeten worden geïnstalleerd: +# ^UnComponentsText +Selecteer de onderdelen die u wilt verwijderen en deselecteer welke u niet wilt verwijderen. $_CLICK +# ^UnComponentsSubText1 +Selecteer het type verwijdering: +# ^UnComponentsSubText2_NoInstTypes +Selecteer de onderdelen die moeten worden verwijderd: +# ^UnComponentsSubText2 +Of selecteer de optionele onderdelen die moeten worden verwijderd: +# ^DirText +Setup zal $(^NameDA) in de volgende map installeren. Klik op Bladeren als u $(^NameDA) in een andere map wilt installeren en selecteer deze. $_CLICK +# ^DirSubText +Installatiemap +# ^DirBrowseText +Selecteer de map om $(^NameDA) in te installeren: +# ^UnDirText +Setup zal $(^NameDA) uit de volgende map verwijderen. Klik op Bladeren als u $(^NameDA) uit een andere map wilt verwijderen en selecteer deze. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Selecteer de map om $(^NameDA) uit te verwijderen: +# ^SpaceAvailable +"Beschikbare ruimte: " +# ^SpaceRequired +"Vereiste ruimte: " +# ^UninstallingText +$(^NameDA) zal uit de volgende map worden verwijderd. $_CLICK +# ^UninstallingSubText +Verwijderen uit: +# ^FileError +Fout bij het schrijven naar bestand: \r\n\r\n$0\r\n\r\nKlik op Afbreken om de installatie te stoppen,\r\nOpnieuw om het opnieuw te proberen of\r\nNegeren om dit bestand over te slaan. +# ^FileError_NoIgnore +Fout bij het schrijven naar bestand: \r\n\r\n$0\r\n\r\nKlik op Opnieuw om het opnieuw te proberen of \r\nAnnuleren om de installatie te stoppen. +# ^CantWrite +"Kon niet schrijven: " +# ^CopyFailed +Kopiëren mislukt +# ^CopyTo +"Kopiëren naar " +# ^Registering +"Registreren: " +# ^Unregistering +"Deregistreren: " +# ^SymbolNotFound +"Kon symbool niet vinden: " +# ^CouldNotLoad +"Kon niet laden: " +# ^CreateFolder +"Map maken: " +# ^CreateShortcut +"Snelkoppeling maken: " +# ^CreatedUninstaller +"Deïnstallatieprogramma gemaakt: " +# ^Delete +"Bestand verwijderen: " +# ^DeleteOnReboot +"Verwijderen na opnieuw opstarten: " +# ^ErrorCreatingShortcut +"Fout bij maken snelkoppeling: " +# ^ErrorCreating +"Fout bij maken: " +# ^ErrorDecompressing +Fout bij uitpakken van gegevens! Gegevens beschadigd? +# ^ErrorRegistering +Fout bij registreren DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Uitvoeren: " +# ^Extract +"Uitpakken: " +# ^ErrorWriting +"Uitpakken: fout bij schrijven naar bestand " +# ^InvalidOpcode +Installatieprogramma beschadigd: ongeldige opcode +# ^NoOLE +"Geen OLE voor: " +# ^OutputFolder +"Uitvoermap: " +# ^RemoveFolder +"Map verwijderen: " +# ^RenameOnReboot +"Hernoemen na opnieuw opstarten: " +# ^Rename +"Hernoemen: " +# ^Skipped +"Overgeslagen: " +# ^CopyDetails +Details kopiëren naar klembord +# ^LogInstall +Gegevens over installatie bewaren +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Dutch.nsh b/tools/Contrib/Language files/Dutch.nsh new file mode 100644 index 0000000..3ae418b --- /dev/null +++ b/tools/Contrib/Language files/Dutch.nsh @@ -0,0 +1,129 @@ +;Language: Dutch (1043) +;By Joost Verburg + +!insertmacro LANGFILE "Dutch" = "Nederlands" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Welkom bij de $(^NameDA)-installatiewizard" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Deze wizard zal $(^NameDA) op uw systeem installeren.$\r$\n$\r$\nHet wordt aanbevolen alle overige toepassingen af te sluiten alvorens de installatie te starten. Dit maakt het mogelijk relevante systeembestanden bij te werken zonder uw systeem opnieuw op te moeten starten.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Welkom bij de $(^NameDA)-deïnstallatiewizard" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Deze wizard zal $(^NameDA) van uw syteem verwijderen.$\r$\n$\r$\nControleer voordat u begint met verwijderen of $(^NameDA) is afgesloten.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licentieovereenkomst" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Lees de licentieovereenkomst voordat u $(^NameDA) installeert." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Klik op Akkoord om verder te gaan als u de overeenkomst accepteert. U moet de overeenkomst accepteren om $(^NameDA) te installeren." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Schakel het selectievakje hieronder in als u de overeenkomst accepteert. U moet de overeenkomst accepteren om $(^NameDA) te installeren." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Selecteer de eerste optie hieronder als u de overeenkomst accepteert. U moet de overeenkomst accepteren om $(^NameDA) te installeren." +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licentieovereenkomst" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Lees de licentieovereenkomst voordat u $(^NameDA) verwijdert." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Klik op Akkoord op verder te gaan als u de overeenkomst accepteert. U moet de overeenkomst accepteren om $(^NameDA) te verwijderen." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Schakel het selectievakje hieronder in als u de overeenkomst accepteert. U moet de overeenkomst accepteren om $(^NameDA) te verwijderen." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Selecteer de eerste optie hieronder als u de overeenkomst accepteert. U moet de overeenkomst accepteren om $(^NameDA) te verwijderen." +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Druk op Page Down om de rest van de overeenkomst te zien." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Onderdelen kiezen" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Kies de onderdelen die u wilt installeren." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Onderdelen kiezen" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Kies de onderdelen die u wilt verwijderen." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschrijving" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Beweeg uw muis over een onderdeel om de beschrijving te zien." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Selecteer een onderdeel om de beschrijving te zien." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Installatielocatie kiezen" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Kies de map waarin u $(^NameDA) wilt installeren." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Locatie kiezen" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Kies de map waaruit u $(^NameDA) wilt verwijderen." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Bezig met installeren" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Een ogenblik geduld terwijl $(^NameDA) wordt geïnstalleerd." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installatie voltooid" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "De installatie is succesvol voltooid." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installatie afgebroken" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "De installatie is niet voltooid." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Bezig met verwijderen" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Een ogenblik geduld terwijl $(^NameDA) van uw systeem wordt verwijderd." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Verwijderen gereed" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "$(^NameDA) is van uw systeem verwijderd." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Verwijderen afgebroken" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "$(^NameDA) is niet volledig van uw systeem verwijderd." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Voltooien van de $(^NameDA)-installatiewizard" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) is geïnstalleerd op uw systeem.$\r$\n$\r$\nKlik op Voltooien om deze wizard te sluiten." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Uw systeem moet opnieuw worden opgestart om de installatie van $(^NameDA) te voltooien. Wilt u nu herstarten?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Voltooien van de $(^NameDA)-deïnstallatiewizard" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) is van uw systeem verwijderd.$\r$\n$\r$\nKlik op Voltooien om deze wizard te sluiten." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Uw systeem moet opnieuw worden opgestart om het verwijderen van $(^NameDA) te voltooien. Wilt u nu herstarten?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Nu herstarten" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ik wil later handmatig herstarten" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) &starten" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Leesmij weergeven" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Voltooien" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Startmenumap kiezen" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Kies een map in het menu Start voor de snelkoppelingen van $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Kies een map in het menu Start waarin de snelkoppelingen moeten worden aangemaakt. U kunt ook een naam invoeren om een nieuwe map te maken." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Geen snelkoppelingen aanmaken" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA) verwijderen" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) van uw systeem verwijderen." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Weet u zeker dat u de $(^Name)-installatie wilt afsluiten?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Weet u zeker dat u de $(^Name)-deïnstallatie wilt afsluiten?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Gebruikers kiezen" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Kies voor welke gebruikers u $(^NameDA) wilt installeren." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Selecteer of u $(^NameDA) alleen voor uzelf of voor alle gebruikers van deze computer wilt installeren. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installeer voor alle gebruikers van deze computer" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installeer alleen voor mijzelf" +!endif diff --git a/tools/Contrib/Language files/English.nlf b/tools/Contrib/Language files/English.nlf new file mode 100644 index 0000000..feb69cb --- /dev/null +++ b/tools/Contrib/Language files/English.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1033 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +- +# RTL - anything else than RTL means LTR +- +# Translation by ..... (any credits should go here) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Setup +# ^UninstallCaption +$(^Name) Uninstall +# ^LicenseSubCaption +: License Agreement +# ^ComponentsSubCaption +: Installation Options +# ^DirSubCaption +: Installation Folder +# ^InstallingSubCaption +: Installing +# ^CompletedSubCaption +: Completed +# ^UnComponentsSubCaption +: Uninstallation Options +# ^UnDirSubCaption +: Uninstallation Folder +# ^ConfirmSubCaption +: Confirmation +# ^UninstallingSubCaption +: Uninstalling +# ^UnCompletedSubCaption +: Completed +# ^BackBtn +< &Back +# ^NextBtn +&Next > +# ^AgreeBtn +I &Agree +# ^AcceptBtn +I &accept the terms of the License Agreement +# ^DontAcceptBtn +I &do not accept the terms of the License Agreement +# ^InstallBtn +&Install +# ^UninstallBtn +&Uninstall +# ^CancelBtn +Cancel +# ^CloseBtn +&Close +# ^BrowseBtn +B&rowse... +# ^ShowDetailsBtn +Show &details +# ^ClickNext +Click Next to continue. +# ^ClickInstall +Click Install to start the installation. +# ^ClickUninstall +Click Uninstall to start the uninstallation. +# ^Name +Name +# ^Completed +Completed +# ^LicenseText +Please review the license agreement before installing $(^NameDA). If you accept all terms of the agreement, click I Agree. +# ^LicenseTextCB +Please review the license agreement before installing $(^NameDA). If you accept all terms of the agreement, click the check box below. $_CLICK +# ^LicenseTextRB +Please review the license agreement before installing $(^NameDA). If you accept all terms of the agreement, select the first option below. $_CLICK +# ^UnLicenseText +Please review the license agreement before uninstalling $(^NameDA). If you accept all terms of the agreement, click I Agree. +# ^UnLicenseTextCB +Please review the license agreement before uninstalling $(^NameDA). If you accept all terms of the agreement, click the check box below. $_CLICK +# ^UnLicenseTextRB +Please review the license agreement before uninstalling $(^NameDA). If you accept all terms of the agreement, select the first option below. $_CLICK +# ^Custom +Custom +# ^ComponentsText +Check the components you want to install and uncheck the components you don't want to install. $_CLICK +# ^ComponentsSubText1 +Select the type of install: +# ^ComponentsSubText2_NoInstTypes +Select components to install: +# ^ComponentsSubText2 +Or, select the optional components you wish to install: +# ^UnComponentsText +Check the components you want to uninstall and uncheck the components you don't want to uninstall. $_CLICK +# ^UnComponentsSubText1 +Select the type of uninstall: +# ^UnComponentsSubText2_NoInstTypes +Select components to uninstall: +# ^UnComponentsSubText2 +Or, select the optional components you wish to uninstall: +# ^DirText +Setup will install $(^NameDA) in the following folder. To install in a different folder, click Browse and select another folder. $_CLICK +# ^DirSubText +Destination Folder +# ^DirBrowseText +Select the folder to install $(^NameDA) in: +# ^UnDirText +Setup will uninstall $(^NameDA) from the following folder. To uninstall from a different folder, click Browse and select another folder. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Select the folder to uninstall $(^NameDA) from: +# ^SpaceAvailable +"Space available: " +# ^SpaceRequired +"Space required: " +# ^UninstallingText +$(^NameDA) will be uninstalled from the following folder. $_CLICK +# ^UninstallingSubText +Uninstalling from: +# ^FileError +Error opening file for writing: \r\n\r\n$0\r\n\r\nClick Abort to stop the installation,\r\nRetry to try again, or\r\nIgnore to skip this file. +# ^FileError_NoIgnore +Error opening file for writing: \r\n\r\n$0\r\n\r\nClick Retry to try again, or\r\nCancel to stop the installation. +# ^CantWrite +"Can't write: " +# ^CopyFailed +Copy failed +# ^CopyTo +"Copy to " +# ^Registering +"Registering: " +# ^Unregistering +"Unregistering: " +# ^SymbolNotFound +"Could not find symbol: " +# ^CouldNotLoad +"Could not load: " +# ^CreateFolder +"Create folder: " +# ^CreateShortcut +"Create shortcut: " +# ^CreatedUninstaller +"Created uninstaller: " +# ^Delete +"Delete file: " +# ^DeleteOnReboot +"Delete on reboot: " +# ^ErrorCreatingShortcut +"Error creating shortcut: " +# ^ErrorCreating +"Error creating: " +# ^ErrorDecompressing +Error decompressing data! Corrupted installer? +# ^ErrorRegistering +Error registering DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Execute: " +# ^Extract +"Extract: " +# ^ErrorWriting +"Extract: error writing to file " +# ^InvalidOpcode +Installer corrupted: invalid opcode +# ^NoOLE +"No OLE for: " +# ^OutputFolder +"Output folder: " +# ^RemoveFolder +"Remove folder: " +# ^RenameOnReboot +"Rename on reboot: " +# ^Rename +"Rename: " +# ^Skipped +"Skipped: " +# ^CopyDetails +Copy Details To Clipboard +# ^LogInstall +Log install process +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/English.nsh b/tools/Contrib/Language files/English.nsh new file mode 100644 index 0000000..4da2e09 --- /dev/null +++ b/tools/Contrib/Language files/English.nsh @@ -0,0 +1,129 @@ +;Language: English (1033) +;By Joost Verburg + +!insertmacro LANGFILE "English" "English" "English" "English" ; See \Include\LangFile.nsh for a description of these parameters + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Welcome to $(^NameDA) Setup" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Setup will guide you through the installation of $(^NameDA).$\r$\n$\r$\nIt is recommended that you close all other applications before starting Setup. This will make it possible to update relevant system files without having to reboot your computer.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Welcome to $(^NameDA) Uninstall" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Setup will guide you through the uninstallation of $(^NameDA).$\r$\n$\r$\nBefore starting the uninstallation, make sure $(^NameDA) is not running.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "License Agreement" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Please review the license terms before installing $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "If you accept the terms of the agreement, click I Agree to continue. You must accept the agreement to install $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "If you accept the terms of the agreement, click the check box below. You must accept the agreement to install $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "If you accept the terms of the agreement, select the first option below. You must accept the agreement to install $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "License Agreement" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Please review the license terms before uninstalling $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "If you accept the terms of the agreement, click I Agree to continue. You must accept the agreement to uninstall $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "If you accept the terms of the agreement, click the check box below. You must accept the agreement to uninstall $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "If you accept the terms of the agreement, select the first option below. You must accept the agreement to uninstall $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Press Page Down to see the rest of the agreement." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Choose Components" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Choose which features of $(^NameDA) you want to install." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Choose Components" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Choose which features of $(^NameDA) you want to uninstall." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Position your mouse over a component to see its description." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Select a component to see its description." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Choose Install Location" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Choose the folder in which to install $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Choose Uninstall Location" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Choose the folder from which to uninstall $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installing" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Please wait while $(^NameDA) is being installed." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installation Complete" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Setup was completed successfully." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installation Aborted" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Setup was not completed successfully." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uninstalling" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Please wait while $(^NameDA) is being uninstalled." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Uninstallation Complete" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Uninstall was completed successfully." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Uninstallation Aborted" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Uninstall was not completed successfully." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Completing $(^NameDA) Setup" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) has been installed on your computer.$\r$\n$\r$\nClick Finish to close Setup." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Your computer must be restarted in order to complete the installation of $(^NameDA). Do you want to reboot now?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completing $(^NameDA) Uninstall" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) has been uninstalled from your computer.$\r$\n$\r$\nClick Finish to close Setup." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Your computer must be restarted in order to complete the uninstallation of $(^NameDA). Do you want to reboot now?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reboot now" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "I want to manually reboot later" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Run $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Show Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Finish" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Choose Start Menu Folder" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Choose a Start Menu folder for the $(^NameDA) shortcuts." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Select the Start Menu folder in which you would like to create the program's shortcuts. You can also enter a name to create a new folder." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Do not create shortcuts" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Uninstall $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Remove $(^NameDA) from your computer." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Are you sure you want to quit $(^Name) Setup?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Are you sure you want to quit $(^Name) Uninstall?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Choose Users" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Choose for which users you want to install $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Select whether you want to install $(^NameDA) only for yourself or for all users of this computer. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Install for anyone using this computer" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Install just for me" +!endif diff --git a/tools/Contrib/Language files/Esperanto.nlf b/tools/Contrib/Language files/Esperanto.nlf new file mode 100644 index 0000000..f2f9e82 --- /dev/null +++ b/tools/Contrib/Language files/Esperanto.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID (none exists for Esperanto at the moment) +9998 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +- +# RTL - anything else than RTL means LTR +- +# Translation v4.0.3 by Felipe Castro +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalado de $(^Name) +# ^UninstallCaption +Malinstalado de $(^Name) +# ^LicenseSubCaption +: Permes-Kontrakto +# ^ComponentsSubCaption +: Instaladaj Opcioj +# ^DirSubCaption +: Instalada Dosierujo +# ^InstallingSubCaption +: Oni Instalas Dosierojn +# ^CompletedSubCaption +: Kompletite +# ^UnComponentsSubCaption +: Malinstaladaj Opcioj +# ^UnDirSubCaption +: Malinstalada Dosierujo +# ^ConfirmSubCaption +: Konfirmo +# ^UninstallingSubCaption +: Oni malinstalas +# ^UnCompletedSubCaption +: Kompletite +# ^BackBtn +< &Antauxe +# ^NextBtn +&Sekve > +# ^AgreeBtn +&Akceptite +# ^AcceptBtn +Mi &akceptas la kondicxojn de la Permes-Kontrakto +# ^DontAcceptBtn +Mi &ne akceptas la kondicxojn de la Permes-Kontrakto +# ^InstallBtn +&Instali +# ^UninstallBtn +&Malinstali +# ^CancelBtn +Nuligi +# ^CloseBtn +&Fermi +# ^BrowseBtn +&Sercxi... +# ^ShowDetailsBtn +Vidi &Detalojn +# ^ClickNext +Musklaku en 'Sekve' por dauxrigi. +# ^ClickInstall +Musklaku en 'Instali' por ekigi la instaladon. +# ^ClickUninstall +Musklaku en 'Malinstali' por ekigi la malinstaladon. +# ^Name +Nomo +# ^Completed +Kompletite +# ^LicenseText +Bonvole revidu la permes-akordon antaux ol instali $(^NameDA). Se vi konsentas kun cxiuj kondicxoj de la permeso, musklaku en 'Akceptite'. +# ^LicenseTextCB +Bonvole revidu la permes-akordon antaux ol instali $(^NameDA). Se vi konsentas kun cxiuj kondicxoj de la permeso, musklaku en la suba elekt-skatolo. $_CLICK +# ^LicenseTextRB +Bonvole revidu la permes-akordon antaux ol instali $(^NameDA). Se vi konsentas kun cxiuj kondicxoj de la permeso, elektu la unuan opcion sube. $_CLICK +# ^UnLicenseText +Bonvole revidu la permes-akordon antaux ol malinstali $(^NameDA). Se vi konsentas kun cxiuj kondicxoj de la permeso, musklaku en 'Akceptite'. +# ^UnLicenseTextCB +Bonvole revidu la permes-akordon antaux ol malinstali $(^NameDA). Se vi konsentas kun cxiuj kondicxoj de la permeso, musklaku en la suba elekt-skatolo. $_CLICK +# ^UnLicenseTextRB +Bonvole revidu la permes-akordon antaux ol malinstali $(^NameDA). Se vi konsentas kun cxiuj kondicxoj de la permeso, elektu la unuan opcion sube. $_CLICK +# ^Custom +Personigite +# ^ComponentsText +Marku la konsisterojn, kiujn vi deziras instali kaj malmarku tiujn, kiujn vi ne deziras instali. $_CLICK +# ^ComponentsSubText1 +Elektu la tipon de instalado: +# ^ComponentsSubText2_NoInstTypes +Elektu la konsisterojn por instali: +# ^ComponentsSubText2 +Aux, elektu la nedevigajn konsisterojn, kiujn vi deziras instali: +# ^UnComponentsText +Marku la konsisterojn, kiujn vi volas malinstali aux male. $_CLICK +# ^UnComponentsSubText1 +Elektu la tipon de malinstalado: +# ^UnComponentsSubText2_NoInstTypes +Elektu la konsisterojn por malinstali: +# ^UnComponentsSubText2 +Aux, elektu la nedevigajn konsisterojn, kiujn vi deziras malinstali: +# ^DirText +$(^NameDA) estos instalita en la jena dosierujo. Por instali en alia dosierujo, musklaku en 'Sercxi...' kaj elektu gxin. $_CLICK +# ^DirSubText +Celota Dosierujo +# ^DirBrowseText +Elektu dosierujon por instali $(^NameDA): +# ^UnDirText +$(^NameDA) estos malinstalita el la jena dosierujo. Por malinstali en alia dosierujo, musklaku en 'Sercxi...' kaj elektu gxin. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Elektu dosierujon el kie $(^NameDA) estos malinstalita: +# ^SpaceAvailable +"Disponebla spaco: " +# ^SpaceRequired +"Postulata spaco: " +# ^UninstallingText +$(^NameDA) estos malinstalita el la jena dosierujo. $_CLICK +# ^UninstallingSubText +Malinstalado el: +# ^FileError +Eraro dum malfermo de dosiero por skribi: \r\n\t"$0"\r\nMusklaku en Cxesigi por finigi la instaladon,\r\Ripeti por provi refoje skribi sur la dosiero, aux\r\nPreteratenti por preteratenti tiun cxi dosieron. +# ^FileError_NoIgnore +Eraro dum malfermo de dosierujo por skribi: \r\n\t"$0"\r\nMusklaku en Ripeti por provi refoje skribi sur la dosiero, aux\r\nNuligi por cxesigi la instaladon. +# ^CantWrite +"Ne eblis skribi: " +# ^CopyFailed +Malsukceso dum kopio +# ^CopyTo +"Kopii al " +# ^Registering +"Oni registras: " +# ^Unregistering +"Oni malregistras: " +# ^SymbolNotFound +"Ne trovita simbolo: " +# ^CouldNotLoad +"Ne eblis sxargi: " +# ^CreateFolder +"Oni kreas subdosierujon: " +# ^CreateShortcut +"Oni kreas lancxilon: " +# ^CreatedUninstaller +"Oni kreas malinstalilon: " +# ^Delete +"Oni forigas dosieron: " +# ^DeleteOnReboot +"Forigi je restarto: " +# ^ErrorCreatingShortcut +"Eraro dum kreo de lancxilo: " +# ^ErrorCreating +"Eraro dum kreo: " +# ^ErrorDecompressing +Eraro dum malkompaktigo de datumaro! Cxu misrompita instalilo? +# ^ErrorRegistering +Eraru dum registro de DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Lancxi: " +# ^Extract +"Eltiri: " +# ^ErrorWriting +"Eltirado: eraro dum skribo de dosiero " +# ^InvalidOpcode +Misrompita instalilo: malvalida operaci-kodo +# ^NoOLE +"Sen OLE por: " +# ^OutputFolder +"Celota dosierujo: " +# ^RemoveFolder +"Oni forigas la dosierujon: " +# ^RenameOnReboot +"Renomigi je restarto: " +# ^Rename +"Oni renomigas: " +# ^Skipped +"Preterpasita: " +# ^CopyDetails +Kopii detalojn al la tondejo +# ^LogInstall +Registri instalad-procezo +# ^Byte +B +# ^Kilo + k +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Esperanto.nsh b/tools/Contrib/Language files/Esperanto.nsh new file mode 100644 index 0000000..cdbdd30 --- /dev/null +++ b/tools/Contrib/Language files/Esperanto.nsh @@ -0,0 +1,129 @@ +;Language: Esperanto (0) +;By Felipe Castro + +!insertmacro LANGFILE "Esperanto" = "Esperanto" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bonvenon al la Gvidilo por Instalado de $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Tiu cxi gvidilo helpos vin dum la instalado de $(^NameDA).$\r$\n$\r$\nOni rekomendas fermi cxiujn aliajn aplikajxojn antaux ol ekigi la Instaladon. Tio cxi ebligos al la Instalilo gxisdatigi la koncernajn dosierojn de la sistemo sen bezono restartigi la komputilon.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bonvenon al la Gvidilo por Malinstalado de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tiu cxi gvidilo helpos vin dum la malinstalado de $(^NameDA).$\r$\n$\r$\nAntaux ol ekigi la malinstalado, certigxu ke $(^NameDA) ne estas plenumata nun.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Permes-Kontrakto" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Bonvole, kontrolu la kondicxojn de la permesilo antaux ol instali la programon $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se vi akceptas la kondicxojn, musklaku en 'Akceptite' por dauxrigi. Vi devos akcepti la kontrakton por instali la programon $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se vi akceptas la permes-kondicxojn, musklaku la suban elekt-skatolon. Vi devos akcepti la kontrakton por instali la programon $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se vi akceptas la permes-kondicxojn, elektu la unuan opcion sube. Vi devas akcepti la kontrakton por instali la programon $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Permes-Kontrakto" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Bonvole, kontrolu la kondicxojn de la permesilo antaux ol malinstali la programon $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se vi akceptas la kondicxojn, musklaku en 'Akceptite' por dauxrigi. Vi devos akcepti la kontrakton por malinstali la programon $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se vi akceptas la permes-kondicxojn, musklaku la suban elekt-skatolon. Vi devos akcepti la kontrakton por malinstali la programon $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se vi akceptas la permes-kondicxojn, elektu la unuan opcion sube. Vi devas akcepti la kontrakton por malinstali la programon $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Premu 'Page Down' por rigardi la reston de la permeso." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Elekto de Konsisteroj" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Elektu kiujn funkciojn de $(^NameDA) vi deziras instali." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Elekto de Konsisteroj" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Elektu kiujn funkciojn de $(^NameDA) vi deziras malinstali." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Priskribo" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Poziciu la muson sur konsistero por rigardi ties priskribon." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Elekto de la Instalada Loko" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Elektu la dosierujon en kiun vi deziras instali la programon $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Elekto de la Malinstalada Loko" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Elektu la dosierujon el kiu vi deziras malinstali la programon $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Oni instalas" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Bonvole, atendu dum $(^NameDA) estas instalata." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalado Plenumite" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "La instalado sukcese plenumigxis." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalado Cxesigite" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "La instalado ne plenumigxis sukcese." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Oni malinstalas" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Bonvole, atendu dum $(^NameDA) estas malinstalata." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Malinstalado Plenumite" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La malinstalado sukcese plenumigxis." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Malinstalado Cxesigxite" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La malinstalado ne plenumigxis sukcese." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Oni finigas la Gvidilon por Instalado de $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) estas instalita en via komputilo.$\r$\n$\r$\nMusklaku en Finigi por fermi tiun cxi gvidilon." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Via komputilo devas esti restartigita por kompletigi la instaladon de $(^NameDA). Cxu restartigi nun?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Oni finigas la Gvidilon por Malinstalado de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) estis forigita el via komputilo.$\r$\n$\r$\nMusklaku en Finigi por fermi tiun cxi gvidilon." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Via komputilo devas esti restartigita por kompletigi la malinstaladon de $(^NameDA). Cxu restartigi nun?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Restartigi Nun" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Mi volas restartigi permane poste" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Lancxi $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Montri Legumin" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Finigi" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Elektu Dosierujon de la Ek-Menuo" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Elektu dosierujon de la Ek-Menuo por la lancxiloj de la programo." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Elektu dosierujon de la Ek-Menuo en kiu vi deziras krei la lancxilojn de la programo. Vi povas ankaux tajpi nomon por krei novan ujon." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ne krei lancxilojn" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Malinstali $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Forigi $(^NameDA) el via komputilo." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Cxu vi certe deziras nuligi la instaladon de $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Cxu vi certe deziras nuligi la malinstaladon de $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Elekti Uzantojn" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Elekti por kiuj uzantoj vi deziras instali $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Elektu cxu vi volas instali $(^NameDA) por vi mem aux por cxiuj uzantoj de tiu cxi komputilo. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instali por iu ajn uzanto de tiu cxi komputilo" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instali nur por mi" +!endif diff --git a/tools/Contrib/Language files/Estonian.nlf b/tools/Contrib/Language files/Estonian.nlf new file mode 100644 index 0000000..d43f259 --- /dev/null +++ b/tools/Contrib/Language files/Estonian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1061 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1257 +# RTL - anything else than RTL means LTR +- +# Translation by izzo (izzo@hot.ee) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Paigaldamine +# ^UninstallCaption +$(^Name) Eemaldamine +# ^LicenseSubCaption +: Litsentsileping +# ^ComponentsSubCaption +: Paigaldusvalikud +# ^DirSubCaption +: Paigalduskaust +# ^InstallingSubCaption +: Paigaldan +# ^CompletedSubCaption +: Valmis +# ^UnComponentsSubCaption +: Eemaldusvalikud +# ^UnDirSubCaption +: Eemalduskaust +# ^ConfirmSubCaption +: Kinnitus +# ^UninstallingSubCaption +: Eemaldan +# ^UnCompletedSubCaption +: Valmis +# ^BackBtn +< Tagasi +# ^NextBtn +Edasi > +# ^AgreeBtn +Nõustun +# ^AcceptBtn +Nõustun litsentsilepingu tingimustega +# ^DontAcceptBtn +Ei nõustu litsentsilepingu tingimustega +# ^InstallBtn +Paigalda +# ^UninstallBtn +Eemalda +# ^CancelBtn +Loobu +# ^CloseBtn +Sule +# ^BrowseBtn +Sirvi... +# ^ShowDetailsBtn +Detailid +# ^ClickNext +Jätkamiseks vajuta Edasi. +# ^ClickInstall +Paigaldamise alustamiseks vajuta Paigalda. +# ^ClickUninstall +Eemaldamise alustamiseks vajuta Eemalda. +# ^Name +Nimi +# ^Completed +Valmis +# ^LicenseText +Enne $(^NameDA) paigaldamist vaata palun litsentsileping üle. Kui sa nõustud kõigi lepingu tingimustega, vajuta Nõustun. +# ^LicenseTextCB +Enne $(^NameDA) paigaldamist vaata palun litsentsileping üle. Kui sa nõustud kõigi lepingu tingimustega, vali allolev märkeruut. $_CLICK +# ^LicenseTextRB +Enne $(^NameDA) paigaldamist vaata palun litsentsileping üle. Kui sa nõustud kõigi lepingu tingimustega, märgi allpool esimene valik. $_CLICK +# ^UnLicenseText +Enne $(^NameDA) eemaldamist vaata palun litsentsileping üle. Kui sa nõustud kõigi lepingu tingimustega, vajuta Nõustun. +# ^UnLicenseTextCB +Enne $(^NameDA) eemaldamist vaata palun litsentsileping üle. Kui sa nõustud kõigi lepingu tingimustega, vali allolev märkeruut. $_CLICK +# ^UnLicenseTextRB +Enne $(^NameDA) eemaldamist vaata palun litsentsileping üle. Kui sa nõustud kõigi lepingu tingimustega, märgi allpool esimene valik. $_CLICK +# ^Custom +Kohandatud +# ^ComponentsText +Märgista komponendid mida soovid paigaldada ja eemalda märgistus neilt, mida ei soovi paigaldada. $_CLICK +# ^ComponentsSubText1 +Vali paigalduse tüüp: +# ^ComponentsSubText2_NoInstTypes +Vali paigaldatavad komponendid: +# ^ComponentsSubText2 +või vali lisakomponendid mida soovid paigaldada: +# ^UnComponentsText +Märgista komponendid mida soovid eemaldada ja eemalda märgistus neilt, mida ei soovi eemaldada. $_CLICK +# ^UnComponentsSubText1 +Vali eemalduse tüüp: +# ^UnComponentsSubText2_NoInstTypes +Vali eemaldatavad komponendid: +# ^UnComponentsSubText2 +või vali lisakomponendid mida soovid eemaldada: +# ^DirText +$(^NameDA) paigaldatakse järgmisse kausta. Et mujale paigaldada, vajuta sirvi ja vali teine kaust. $_CLICK +# ^DirSubText +Sihtkaust +# ^DirBrowseText +Vali kaust kuhu $(^NameDA) paigaldada: +# ^UnDirText +$(^NameDA) eemaldatakse järgmisest kaustast. Et mujalt eemaldada, vajuta sirvi ja vali teine kaust. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Vali kaust kust $(^NameDA) eemaldada: +# ^SpaceAvailable +"Vaba ruum: " +# ^SpaceRequired +"Vajalik ruum: " +# ^UninstallingText +$(^NameDA) eemaldatakse järgmisest kaustast. $_CLICK +# ^UninstallingSubText +Eemaldan sealt: +# ^FileError +Tõrge faili avamisel kirjutamiseks: \r\n\t"$0"\r\nPaigalduse katkestamiseks vajuta Katkesta,\r\nvajuta Ãœrita uuesti, et faili kirjutamist uuesti proovida, või\r\nIgnoreeri, et see fail vahele jätta. +# ^FileError_NoIgnore +Tõrge faili avamisel kirjutamiseks: \r\n\t"$0"\r\nVajuta Ãœrita uuesti, et faili kirjutamist uuesti proovida, või\r\nLoobu, et paigaldamine katkestada +# ^CantWrite +"Ei saa kirjutada: " +# ^CopyFailed +Kopeerimine ebaõnnestus +# ^CopyTo +"Kopeeri sinna " +# ^Registering +"Registreerin: " +# ^Unregistering +"Deregistreerin: " +# ^SymbolNotFound +"Ei leidnud sümbolit: " +# ^CouldNotLoad +"Ei saanud laadida: " +# ^CreateFolder +"Loo kaust: " +# ^CreateShortcut +"Loo otsetee: " +# ^CreatedUninstaller +"Loodud eemaldaja: " +# ^Delete +"Kustuta fail: " +# ^DeleteOnReboot +"Kustuta taaskäivitamisel: " +# ^ErrorCreatingShortcut +"Tõrge otsetee loomisel: " +# ^ErrorCreating +"Tõrge loomisel: " +# ^ErrorDecompressing +Tõrge andmete lahtipakkimisel! Vigane paigaldaja? +# ^ErrorRegistering +Tõrge DLL-i registreerimisel +# ^ExecShell +"ExecShell: " +# ^Exec +"Käivita: " +# ^Extract +"Paki lahti: " +# ^ErrorWriting +"Paki lahti: viga faili kirjutamisel " +# ^InvalidOpcode +Paigaldaja kõlbmatu: vigane opkood +# ^NoOLE +"No OLE for: " +# ^OutputFolder +"Väljastatav kaust: " +# ^RemoveFolder +"Eemalda kaust: " +# ^RenameOnReboot +"Taaskäivitusel nimeta ümber: " +# ^Rename +"Nimeta ümber: " +# ^Skipped +"Vahele jäetud: " +# ^CopyDetails +Kopeeri detailid lõikelauale +# ^LogInstall +Logi paigaldusprotsess +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Estonian.nsh b/tools/Contrib/Language files/Estonian.nsh new file mode 100644 index 0000000..a780a6f --- /dev/null +++ b/tools/Contrib/Language files/Estonian.nsh @@ -0,0 +1,121 @@ +;Language: Estonian (1061) +;Translated by johnny izzo (izzo@hot.ee) + +!insertmacro LANGFILE "Estonian" = "Eesti keel" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) paigaldamine!" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "See abiline aitab paigaldada $(^NameDA).$\r$\n$\r$\nEnne paigaldamise alustamist on soovitatav kõik teised programmid sulgeda, see võimaldab teatud süsteemifaile uuendada ilma arvutit taaskäivitamata.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) eemaldamine!" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "See abiline aitab eemaldada $(^NameDA).$\r$\n$\r$\nEnne eemaldamist vaata, et $(^NameDA) oleks suletud.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Litsentsileping" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Enne $(^NameDA) paigaldamist vaata palun litsentsileping üle." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Kui sa oled lepingu tingimustega nõus, vali jätkamiseks Nõustun. $(^NameDA) paigaldamiseks pead sa lepinguga nõustuma." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Kui nõustud lepingu tingimustega, vali allolev märkeruut. $(^NameDA) paigaldamiseks pead lepinguga nõustuma. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Kui nõustud lepingu tingimustega, märgi allpool esimene valik. $(^NameDA) paigaldamiseks pead lepinguga nõustuma. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Litsentsileping" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Enne $(^NameDA) eemaldamist vaata palun litsentsileping üle." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Kui sa oled lepingu tingimustega nõus, vali jätkamiseks Nõustun. $(^NameDA) eemaldamiseks pead sa lepinguga nõustuma." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Kui nõustud lepingu tingimustega, vali allolev märkeruut. $(^NameDA) eemaldamiseks pead lepinguga nõustuma. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Kui nõustud lepingu tingimustega, märgi allpool esimene valik. $(^NameDA) eemaldamiseks pead lepinguga nõustuma. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Vajuta Page Down, et näha ülejäänud teksti." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Vali komponendid" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Vali millised $(^NameDA) osad sa soovid paigaldada." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Vali komponendid" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Vali millised $(^NameDA) osad sa soovid eemaldada." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Kirjeldus" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Nihuta hiir komponendile, et näha selle kirjeldust." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Vali komponent, et näha selle kirjeldust." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Vali asukoht" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Vali kaust kuhu paigaldada $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Vali asukoht" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Vali kaust kust $(^NameDA) eemaldada." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Paigaldan..." + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Palun oota kuni $(^NameDA) on paigaldatud." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Programm paigaldatud" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Paigaldus edukalt sooritatud." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Paigaldus katkestatud" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Paigaldamine ebaõnnestus." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Eemaldan..." + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Palun oota kuni $(^NameDA) on eemaldatud." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Eemaldamine lõpetatud" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Eemaldamine edukalt lõpule viidud." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Eemaldamine katkestatud" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Eemaldamine ebaõnestus." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) paigalduse lõpule viimine." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) on sinu arvutisse paigaldatud.$\r$\n$\r$\nAbilise sulgemiseks vajuta Lõpeta." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) täielikuks paigaldamiseks tuleb arvuti taaskäivitada. Kas soovid arvuti kohe taaskäivitada ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) eemaldamise lõpule viimine." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) on sinu arvutist eemaldatud.$\r$\n$\r$\nAbilise sulgemiseks vajuta Lõpeta." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) täielikuks eemaldamiseks tuleb arvuti taaskäivitada. Kas soovid arvuti kohe taaskäivitada ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Taaskäivita kohe" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Taaskäivitan hiljem käsitsi" + ${LangFileString} MUI_TEXT_FINISH_RUN "Käivita $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Kuva Loemind" + ${LangFileString} MUI_BUTTONTEXT_FINISH "Lõpeta" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Vali Start-menüü kaust" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Vali $(^NameDA) otseteede jaoks Start-menüü kaust." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vali Start-menüü kaust, kuhu soovid paigutada programmi otseteed. Võid ka sisestada nime, et luua uus kaust." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ära loo otseteid" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Eemalda $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Eemalda $(^NameDA) oma arvutist." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Oled sa kindel et soovid $(^Name) paigaldamise katkestada?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Oled sa kindel et soovid $(^Name) eemaldamise katkestada?" +!endif diff --git a/tools/Contrib/Language files/Farsi.nlf b/tools/Contrib/Language files/Farsi.nlf new file mode 100644 index 0000000..b048e44 --- /dev/null +++ b/tools/Contrib/Language files/Farsi.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1065 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1256 +# RTL - anything else than RTL means LTR +RTL +# Translation By FzerorubigD - FzerorubigD@gmail.com - Thanx to all people help me in forum.persiantools.com, Elnaz Sarbar +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +نصب $(^Name) +# ^UninstallCaption +حذ٠$(^Name) +# ^LicenseSubCaption +: مجوز نصب +# ^ComponentsSubCaption +: گزینه‌های نصب +# ^DirSubCaption +: پوشه نصب +# ^InstallingSubCaption +: در حال نصب +# ^CompletedSubCaption +: پایان یاÙت +# ^UnComponentsSubCaption +: گزینه‌های حذ٠+# ^UnDirSubCaption +: پوشه‌ی حذ٠+# ^ConfirmSubCaption +: تأیید +# ^UninstallingSubCaption +: در حال حذ٠+# ^UnCompletedSubCaption +: پایان یاÙت +# ^BackBtn +&قبل +# ^NextBtn +&بعد +# ^AgreeBtn +&مواÙقم +# ^AcceptBtn +من همه‌ی بندهای مجوز را قبول &دارم +# ^DontAcceptBtn +من بندهای مجوز را قبول &ندارم +# ^InstallBtn +&نصب +# ^UninstallBtn +&حذ٠+# ^CancelBtn +انصرا٠+# ^CloseBtn +&بستن +# ^BrowseBtn +&مرور... +# ^ShowDetailsBtn +نمایش جزئیات +# ^ClickNext +برای ادامه روی دکمه‌ی بعد کلیک کنید. +# ^ClickInstall +برای شروع نصب روی دکمه‌ی نصب کلیک کنید. +# ^ClickUninstall +برای شروع حذ٠روی دکمه‌ی حذ٠کلیک کنید. +# ^Name +نام +# ^Completed +پایان یاÙت +# ^LicenseText +لطÙاً قبل از نصب $(^NameDA) متن مجوز را بخوانید. اگر همه‌ی بندهای آن را قبول دارید روی دکمه‌ی مواÙقم کلیک کنید. +# ^LicenseTextCB +لطÙاً قبل از نصب $(^NameDA) متن مجوز را بخوانید. اگر همه‌ی بندهای آن را قبول دارید روی جعبه نشانه‌زنی زیر کلیک کنید. $_CLICK +# ^LicenseTextRB +لطÙاً قبل از نصب $(^NameDA) متن مجوز را بخوانید. اگر همه‌ی بندهای آن را قبول دارید گزینه‌ی اول را انتخاب کنید. $_CLICK +# ^UnLicenseText +لطÙاً قبل از حذ٠$(^NameDA) متن مجوز را بخوانید. اگر همه‌ی بندهای آن را قبول دارید روی دکمه‌ی مواÙقم کلیک کنید. +# ^UnLicenseTextCB +لطÙاً قبل از حذ٠$(^NameDA) متن مجوز را بخوانید. اگر همه‌ی بندهای آن را قبول دارید روی جعبه نشانه‌زنی زیر کلیک کنید. $_CLICK +# ^UnLicenseTextRB +لطÙاً قبل از حذ٠$(^NameDA) متن مجوز را بخوانید. اگر همه‌ی بندهای آن را قبول دارید گزینه‌ی اول را انتخاب کنید. $_CLICK +# ^Custom +سÙارشی +# ^ComponentsText +کنار بخش‌هایی Ú©Ù‡ می‌خواهید نصب شوند نشانه بزنید Ùˆ نشانه بخش‌هایی را Ú©Ù‡ نمی‌خواهید نصب شوند بردارید. $_CLICK +# ^ComponentsSubText1 +نوع نصب را مشخص کنید: +# ^ComponentsSubText2_NoInstTypes +بخش‌هایی را Ú©Ù‡ می‌خواهید نصب شوند انتخاب کنید: +# ^ComponentsSubText2 +یا، بخش‌های اختیاری را Ú©Ù‡ می‌خواهید نصب شوند انتخاب کنید: +# ^UnComponentsText +کنار بخش‌هایی Ú©Ù‡ می‌خواهید حذ٠شوند نشانه بزنید Ùˆ نشانه بخش‌هایی را Ú©Ù‡ نمی‌خواهید حذ٠شوند بردارید. $_CLICK +# ^UnComponentsSubText1 +نوع حذ٠را انتخاب کنید: +# ^UnComponentsSubText2_NoInstTypes +بخش‌هایی را Ú©Ù‡ می‌خواهید حذ٠شوند انتخاب کنید: +# ^UnComponentsSubText2 +یا، بخش‌های اختیاری را Ú©Ù‡ می‌خواهید حذ٠شوند انتخاب کنید: +# ^DirText +برنامه نصب، $(^NameDA) را در پوشه‌ی زیر نصب خواهد کرد. برای نصب در پوشه‌ی دیگر روی دکمه مرور کلیک کنید Ùˆ پوشه‌ی دیگری انتخاب کنید. $_CLICK +# ^DirSubText +پوشه‌ی مقصد +# ^DirBrowseText +انتخاب پوشه برای نصب $(^NameDA): +# ^UnDirText +برنامه نصب، $(^NameDA) را از پوشه‌ی زیر حذ٠خواهد کرد. برای نصب در پوشه‌ی دیگر روی دکمه مرور کلیک کنید Ùˆ پوشه‌ی دیگری انتخاب کنید. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +انتخاب پوشه برای حذ٠$(^NameDA): +# ^SpaceAvailable +"Ùضای موجود: " +# ^SpaceRequired +"Ùضای مورد نیاز: " +# ^UninstallingText +$(^NameDA) از پوشه‌ی زیر حذ٠خواهد شد. $_CLICK +# ^UninstallingSubText +حذ٠از: +# ^FileError +خطا هنگام باز کردن پرونده برای نوشتن: \r\n\r\n$0\r\n\n برای توق٠نصب روی Abort \r\n برای تلاش مجدد روی Retry \r\n Ùˆ برای صرÙ‌نظر از این پرونده روی Ignore کلیک کنید. +# ^FileError_NoIgnore +خطا هنگام باز کردن پرونده برای نوشتن: \r\n\r\n$0\r\n\nبرای تلاش مجدد روی Retry\r\nÙˆ برای انصرا٠روی Cancel کلیک کنید. +# ^CantWrite +"نوشتن ممکن نیست: " +# ^CopyFailed +نسخه‌برداری ناموÙÙ‚ بود. +# ^CopyTo +"نسخه‌برداری در: " +# ^Registering +"در حال ثبت: " +# ^Unregistering +"در حال حذ٠ثبت: " +# ^SymbolNotFound +"علامت پیدا نشد: " +# ^CouldNotLoad +"بارگذاری ممکن نیست: " +# ^CreateFolder +"ایجاد پوشه: " +# ^CreateShortcut +"ایجاد میان‌بÙر: " +# ^CreatedUninstaller +"حذÙ‌کننده ایجاد شد: " +# ^Delete +"حذ٠پرونده: " +# ^DeleteOnReboot +"حذ٠هنگام راه اندازی مجدد: " +# ^ErrorCreatingShortcut +"خطا هنگام ایجاد میان‌بÙر: " +# ^ErrorCreating +"خطا هنگام ایجاد: " +# ^ErrorDecompressing +خطا هنگام باز کردن اطلاعات! نصب‌کننده خراب است؟ +# ^ErrorRegistering +خطا هنگام ثبت DLL +# ^ExecShell +"پوسته اجرایی: " +# ^Exec +"اجرا: " +# ^Extract +"استخراج: " +# ^ErrorWriting +"استخراج: خطا هنگام نوشتن در پرونده" +# ^InvalidOpcode +نصب‌کننده خراب است: کد عملیاتی نامعتبر. +# ^NoOLE +"â€OLE وجود ندارد: " +# ^OutputFolder +"پوشه‌ی خروجی: " +# ^RemoveFolder +"حذ٠پوشه: " +# ^RenameOnReboot +"تغییر نام هنگام راه اندازی مجدد: " +# ^Rename +"تغییر نام: " +# ^Skipped +"چشم پوشی شد: " +# ^CopyDetails +نسخه‌برداری جزئیات در کلیپ‌برد +# ^LogInstall +ثبت روند نصب +# ^Byte + بایت +# ^Kilo + کیلو +# ^Mega + مگا +# ^Giga + گیگا diff --git a/tools/Contrib/Language files/Farsi.nsh b/tools/Contrib/Language files/Farsi.nsh new file mode 100644 index 0000000..bb0adb4 --- /dev/null +++ b/tools/Contrib/Language files/Farsi.nsh @@ -0,0 +1,121 @@ +;Language: Farsi (1065) +;By FzerorubigD - FzerorubigD@gmail.com - Thanx to all people help me in forum.persiantools.com + +!insertmacro LANGFILE "Farsi" "Persian" "Ùارسی" "Farsi" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "به برنامه نصب $(^NameDA) خوش آمدید." + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "این برنامه شما را در نصب $(^NameDA) یاری می‌کند.$\r$\n$\r$\nتوصیه می‌کنیم کلیه برنامه‌های در حال اجرا را ببندید. این به برنامه نصب اجازه می‌دهد Ú©Ù‡ Ùایل‌های لازم را بدون نیاز به راه اندازی دوباره‌ی کامپیوتر شما به روز کند.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "به برنامه حذ٠$(^NameDA) خوش آمدید." + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT " این برنامه برای حذ٠$(^NameDA) به شما Ú©Ù…Ú© می‌کند.$\r$\n$\r$\nقبل از حذ٠$(^NameDA) مطمئن شوید این برنامه در حال اجرا نباشد.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "تواÙقنامه نصب" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "لطÙا پیش از نصب $(^NameDA) Ù…Ùاد تواÙقنامه را مرور کنید." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "اگر کلیه بندهای تواÙقنامه را قبول دارید دکمه‌ی مواÙقم را بÙشارید. برای نصب $(^NameDA) شما بایست این تواÙقنامه را قبول کنید." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "اگر کلیه بندهای تواÙقنامه را قبول دارید تیک زیر را انتخاب کنید. برای نصب $(^NameDA) شما بایست این تواÙقنامه را قبول کنید. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "اگر کلیه بندهای تواÙقنامه را قبول دارید گزینه اول را انتخاب کنید. برای نصب $(^NameDA) شما بایست این تواÙقنامه را قبول کنید. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "تواÙقنامه حذÙ" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "لطÙا کلیه بندهای این تواÙقنامه را قبل ار حذ٠$(^NameDA) مرور کنید." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "اگر کلیه بندهای تواÙقنامه را قبول دارید دکمه‌ی مواÙقم را بÙشارید. برای حذ٠$(^NameDA) شما بایست این تواÙقنامه را قبول کنید." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "اگر کلیه بندهای تواÙقنامه را قبول دارید تیک زیر را انتخاب کنید. برای حذ٠$(^NameDA) شما بایست این تواÙقنامه ر قبول کنید. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "اگر کلیه بندهای تواÙقنامه را قبول دارید گزینه اول را انتخاب کنید. برای حذ٠$(^NameDA) شما بایست این تواÙقنامه ر قبول کنید. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "برای دیدن متن به صورت کامل از کلید Page Down استÙاده کنید." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "انتخاب اجزای برنامه " + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "اجزایی از $(^NameDA) Ú©Ù‡ می‌خواهید نصب شوند را انتخاب کنید." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "انتخاب اجزای برنامه" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "اجزایی از $(^NameDA) را Ú©Ù‡ می‌خواهید حذ٠کنید انتخاب کنید." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "توضیحات" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "نشانگر ماوس را بر روی اجزایی Ú©Ù‡ می‌خواهید ببرید تا توضیحات آن را ببینید." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "يكي از گزينه هاي نصب را انتخاب كنيد تا توضيحات مربوط به آن را ببينيد." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "انتخاب پوشه نصب" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "پوشه‌ای Ú©Ù‡ می‌خواهید $(^NameDA) در آن نصب شود را انتخاب کنید." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "پوشه حذ٠را انتخاب کنید" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "پوشه‌ای Ú©Ù‡ می‌خواهید $(^NameDA) را از آن حذ٠کنید انتخاب کنید." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "نصب برنامه" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "لطÙا مدت زمانی Ú©Ù‡ $(^NameDA) در حال نصب است را صبر کنید." + ${LangFileString} MUI_TEXT_FINISH_TITLE "نصب پایان یاÙت" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "برنامه نصب با موÙقیت پایان یاÙت." + ${LangFileString} MUI_TEXT_ABORT_TITLE "برنامه نصب لغو شد." + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "برنامه نصب به صورت نیمه تمام پایان یاÙت." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "حذ٠برنامه" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "لطÙا مدت زمانی Ú©Ù‡ $(^NameDA) در حال حذ٠است را صبر کنید." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "حذ٠پایان یاÙت" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "برنامه حذ٠با موÙقیت پایان یاÙت." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "برنامه حذ٠لغو شد" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "برنامه حذ٠به صورت نیمه تمام پایان یاÙت" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "برنامه نصب $(^NameDA) پایان یاÙت" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) بر روی کامپیوتر شما نصب شد.$\r$\n$\r$\nبر روی دکمه‌ی پایان برای خروج از این برنامه کلیک کنید." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "کامپیوتر شما برای تکمیل نصب $(^NameDA) بایستی دوباره راه اندازی شود. آیا می‌خواهید این کار را الان انجام دهید؟" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "برنامه حذ٠$(^NameDA) پایان یاÙت" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) از روی کامپیوتر شما حذ٠شد.$\r$\n$\r$\nبر روی دکمه‌ی پایان برای خروج از این برنامه کلیک کنید." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "کامپیوتر شما برای تکمیل حذÙ$(^NameDA) بایست دوباره راه اندازی شود.آیا می‌خواهید این کار را الان انجام دهید؟" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "راه اندازی مجدد." + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "من خودم این کار را انجام خواهم داد." + ${LangFileString} MUI_TEXT_FINISH_RUN "&اجرای $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&نمایش Ùایل توضیحات" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&پایان" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "انتخاب پوشه در منوی برنامه‌ها" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "پوشه‌ای Ú©Ù‡ می‌خواهید میانبرهای $(^NameDA) در آن قرار بگیرند را انتخاب کنید." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "پوشه‌ای در منوی برنامه‌ها Ú©Ù‡ می‌خواهید میانبرهای برنامه در آنجا ایجاد شوند را انتخاب کنید. برای ایجاد یک پوشه جدید میتوانید یک نام تایپ کنید." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "میانبری نساز" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "حذ٠$(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "پاک کردن $(^NameDA) از روی کامپیوتر شما." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "آیا مطمئنید Ú©Ù‡ می‌خواهید از برنامه نصب $(^Name) خارج شوید؟" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "آیا مطمئنید Ú©Ù‡ می‌خواهید از برنامه حذ٠$(^Name) خارج شوید؟" +!endif diff --git a/tools/Contrib/Language files/Finnish.nlf b/tools/Contrib/Language files/Finnish.nlf new file mode 100644 index 0000000..b9fdf3b --- /dev/null +++ b/tools/Contrib/Language files/Finnish.nlf @@ -0,0 +1,193 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1035 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Eclipser (Jonne Lehtinen) +# Corrections by the Mozilla.fi crew +# Upd 11/08 by WTLib Team +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) -ohjelman asennus +# ^UninstallCaption +$(^Name) -ohjelman poisto +# ^LicenseSubCaption +: Lisenssisopimus +# ^ComponentsSubCaption +: Asennusvaihtoehdot +# ^DirSubCaption +: Asennuskansio +# ^InstallingSubCaption +: Asennetaan +# ^CompletedSubCaption +: Valmis +# ^UnComponentsSubCaption +: Poistovaihtoehdot +# ^UnDirSubCaption +: Poistokansio +# ^ConfirmSubCaption +: Varmistus +# ^UninstallingSubCaption +: Poistetaan +# ^UnCompletedSubCaption +: Valmis +# ^BackBtn +< &Takaisin +# ^NextBtn +&Seuraava > +# ^AgreeBtn +&Hyväksyn +# ^AcceptBtn +Hyväksyn lisenssisopimuksen ehdot +# ^DontAcceptBtn +En hyväksy sopimuksen ehtoja +# ^InstallBtn +&Asenna +# ^UninstallBtn +&Poista +# ^CancelBtn +Peruuta +# ^CloseBtn +&Sulje +# ^BrowseBtn +S&elaa... +# ^ShowDetailsBtn +&Näytä tiedot +# ^ClickNext +Valitse Seuraava jatkaaksesi. +# ^ClickInstall +Valitse Asenna aloittaaksesi asennuksen. +# ^ClickUninstall +Valitse Poista poistaaksesi asennuksen. +# ^Name +Nimi +# ^Completed +Valmis +# ^LicenseText +Lue lisenssisopimus ennen asentamista. Jos hyväksyt sopimuksen kaikki ehdot, valitse Hyväksyn. +# ^LicenseTextCB +Lue lisenssisopimus ennen asentamista. Jos hyväksyt sopimuksen kaikki ehdot, laita rasti ruutuun. $_CLICK +# ^LicenseTextRB +Lue lisenssisopimus ennen asentamista. Jos hyväksyt sopimuksen kaikki ehdot, valitse ensimmäinen vaihtoehto alapuolelta. $_CLICK +# ^UnLicenseText +Lue lisenssisopimus ennen poistamista. Jos hyväksyt sopimuksen kaikki ehdot, valitse Hyväksyn. +# ^UnLicenseTextCB +Lue lisenssisopimus ennen poistamista. Jos hyväksyt sopimuksen kaikki ehdot, laita rasti ruutuun. $_CLICK +# ^UnLicenseTextRB +Lue lisenssisopimus ennen poistamista. Jos hyväksyt sopimuksen kaikki ehdot, valitse ensimmäinen vaihtoehto alapuolelta. $_CLICK +# ^Custom +Oma +# ^ComponentsText +Valitse komponentit, jotka haluat asentaa, ja poista valinta komponenteista, joita et halua asentaa. $_CLICK +# ^ComponentsSubText1 +Valitse asennustyyppi: +# ^ComponentsSubText2_NoInstTypes +Valitse asennettavat komponentit: +# ^ComponentsSubText2 +Tai, valitse valinnaiset komponentit, jotka haluat asentaa: +# ^UnComponentsText +Valitse komponentit, jotka haluat poistaa, ja poista valinta komponenteista, joita et haluat poistaa. $_CLICK +# ^UnComponentsSubText1 +Valitse poistotyyppi: +# ^UnComponentsSubText2_NoInstTypes +Valitse poistettavat komponentit: +# ^UnComponentsSubText2 +Tai, valitse valinnaiset komponentit, jotka haluat poistaa +# ^DirText +$(^NameDA) -ohjelma asennetaan seuraavaan kansioon. Jos haluat asentaa sen johonkin muuhun kansioon, valitse Selaa, ja valitse toinen kansio. $_CLICK +# ^DirSubText +Kohdekansio +# ^DirBrowseText +Valitse kansio, johon haluat asentaa ohjelman $(^NameDA): +# ^UnDirText +Poistetaan ohjelman $(^NameDA) seuraavasta kansiosta. Jos haluat poistaa sen jostakin muusta kansiosta, valitse Selaa, ja valitse toinen kansio. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Valitse kansio, josta haluat poistaa ohjelman $(^NameDA): +# ^SpaceAvailable +"Tilaa vapaana: " +# ^SpaceRequired +"Tarvittava tila: " +# ^UninstallingText +Tämä ohjelma poistaa ohjelman $(^NameDA) tietokoneelta. $_CLICK +# ^UninstallingSubText +Poistetaan kansiosta: +# ^FileError +Tiedostoon ei voitu kirjoittaa: \r\n\t"$0"\r\nLopeta asennus valitsemalla Hylkää,\r\nyritä uudelleen valitsemalla Uudelleen, tai\r\nohita tiedosto valitsemalla Ohita +# ^FileError_NoIgnore +Tiedostoon ei voitu kirjoittaa: \r\n\t"$0"\r\nYritä uudelleen valitsemalla Uudelleen, tai\r\nlopeta asennus valitsemalla Hylkää +# ^CantWrite +"Ei voi kirjoittaa: " +# ^CopyFailed +Kopiointi epäonnistui +# ^CopyTo +"Kopioidaan kohteeseen " +# ^Registering +"Rekisteröidään: " +# ^Unregistering +"Poistetaan rekisteröinti: " +# ^SymbolNotFound +"Symbolia ei löytynyt: " +# ^CouldNotLoad +"Ei voitu ladata: " +# ^CreateFolder +"Luo kansio: " +# ^CreateShortcut +"Luo pikakuvake: " +# ^CreatedUninstaller +"Poisto-ohjelma luotiin: " +# ^Delete +"Poista: " +# ^DeleteOnReboot +"Poista käynnistyksen yhteydessä: " +# ^ErrorCreatingShortcut +"Virhe luotaessa pikakuvaketta: " +# ^ErrorCreating +"Virhe luotaessa: " +# ^ErrorDecompressing +Pakettia ei voitu purkaa. Korruptoitunut asennusohjelma? +# ^ErrorRegistering +Virhe rekisteröidessä DLL-tiedostoa +# ^ExecShell +"ExecShell: " +# ^Exec +"Suorita: " +# ^Extract +"Pura: " +# ^ErrorWriting +"Pura: tiedostoon ei voitu kirjoittaa " +# ^InvalidOpcode +Asennuspaketti on vioittunut: virheellinen opcode +# ^NoOLE +"Ei OLEa: " +# ^OutputFolder +"Kansio: " +# ^RemoveFolder +"Poista kansio: " +# ^RenameOnReboot +"Muuta nimi uudelleenkäynnistyksen yhteydessä: " +# ^Rename +"Muuta nimi: " +# ^Skipped +"Ohitettiin: " +# ^CopyDetails +Kopioi tiedot leikepöydälle +# ^LogInstall +Tallenna asennusloki +# ^Byte +t +# ^Kilo + k +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Finnish.nsh b/tools/Contrib/Language files/Finnish.nsh new file mode 100644 index 0000000..dfed388 --- /dev/null +++ b/tools/Contrib/Language files/Finnish.nsh @@ -0,0 +1,124 @@ +;Compatible with Modern UI 1.86 +;Language: Finnish (1035) +;By Eclipser (Jonne Lehtinen) +;Updated by Puuhis (puuhis@puuhis.net) +;Updated 11/08 by WTLib Team + +!insertmacro LANGFILE "Finnish" = "Suomi" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Tervetuloa $(^NameDA) -ohjelman asennukseen" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Saat tarvittavia ohjeita sitä mukaa kuin $(^NameDA) -ohjelman asennus edistyy.$\r$\n$\r$\nOn suositeltavaa sulkea kaikki muut ohjelmat ennen asennuksen aloittamista, jotta asennus voi päivittää järjestelmätiedostoja käynnistämättä konetta uudelleen.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Tervetuloa $(^NameDA) -ohjelman poisto-ohjelmaan" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Saat tarvittavia ohjeita sitä mukaa kuin $(^NameDA) -ohjelman poisto edistyy.$\r$\n$\r$\nEnnen poiston aloittamista varmista, ettei $(^NameDA) ole käynnissä.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Käyttöoikeussopimus" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Lue käyttöehdot huolellisesti ennen $(^NameDA) -ohjelman asentamista." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jos hyväksyt ehdot, valitse Hyväksyn. Ohjelman asentaminen edellyttää käyttöehtojen hyväksymistä." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jos hyväksyt ehdot, laita rasti alla olevaan ruutuun. Ohjelman asentaminen edellyttää käyttöehtojen hyväksymistä. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jos hyväksyt ehdot, valitse ensimmäinen vaihtoehto alapuolelta. Ohjelman asentaminen edellyttää käyttöehtojen hyväksymistä. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Käyttöoikeussopimus" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Lue käyttöehdot huolellisesti ennen $(^NameDA) -ohjelman poistoa." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jos hyväksyt ehdot, valitse Hyväksyn. Ohjelman asentaminen edellyttää käyttöehtojen hyväksymistä." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jos hyväksyt ehdot, laita rasti alla olevaan ruutuun. Ohjelman asentaminen edellyttää käyttöehtojen hyväksymistä. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jos hyväksyt ehdot, valitse ensimmäinen vaihtoehto alapuolelta. Ohjelman asentaminen edellyttää käyttöehtojen hyväksymistä. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Paina Page Down -näppäintä nähdäksesi loput sopimuksesta." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Valitse komponentit" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Valitse toiminnot, jotka haluat asentaa ohjelmaan $(^NameDA)." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Valitse komponentit" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Valitse $(^NameDA) toiminnot, jotka haluat poistaa." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Selitys" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Siirrä hiiri komponentin nimen päälle nähdäksesi sen selityksen." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Valitse komponentti nähdäksesi sen selityksen." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Valitse asennuskansio" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Valitse kansio, johon haluat asentaa $(^NameDA) -ohjelman." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Valitse kansio, josta poistetaan" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Valitse kansio, josta $(^NameDA) poistetaan." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Asennetaan" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Odota... $(^NameDA) asennetaan..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Asennus valmis." + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Asennus onnistui." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Asennus keskeytyi." + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Asennus ei onnistunut." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Poistetaan" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Odota... $(^NameDA) poistetaan." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Poisto valmis." + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Poisto onnistui." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Poisto keskeytyi." + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Poisto epäonnistui." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) -ohjelman asennus on valmis" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) on asennettu tietokoneelle.$\r$\n$\r$\nValitse Valmis sulkeaksesi asennusohjelman." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) -ohjelman asennuksen viimeisteleminen edellyttää tietokoneen uudelleenkäynnistämistä. Haluatko käynnistää tietokoneen uudelleen nyt?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) on poistettu" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) on poistettu tietokoneelta.$\r$\n$\r$\nValitse Lopeta sulkeaksesi poisto-ohjelman." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) -ohjelman poiston viimeisteleminen edellyttää tietokoneen uudelleenkäynnistämistä. Haluatko käynnistää tietokoneen uudelleen nyt?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Käynnistä uudelleen nyt" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Käynnistän uudelleen myöhemmin" + ${LangFileString} MUI_TEXT_FINISH_RUN "Käynnistä $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Näytä Lueminut-tiedosto" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Valmis" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Valitse Käynnistä-valikon kansio" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Valitse Käynnistä-valikon kansio, johon ohjelman pikakuvakkeet asennetaan." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Valitse Käynnistä-valikon kansio, johon haluat asentaa ohjelman pikakuvakkeet. Voit myös kirjoittaa uuden kansion nimen." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Älä luo pikakuvakkeita." +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Poista $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Poista $(^NameDA) tietokoneesta." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Haluatko varmasti keskeyttää $(^Name) -ohjelman asennuksen?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Haluatko varmasti keskeyttää $(^Name) -ohjelman poiston?" +!endif diff --git a/tools/Contrib/Language files/French.nlf b/tools/Contrib/Language files/French.nlf new file mode 100644 index 0000000..e30d2a6 --- /dev/null +++ b/tools/Contrib/Language files/French.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +1036 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by the French NSIS team - http://www.winampfr.com/nsis. +# Updated to v6 by Jerome Charaoui (lavamind@inetflex.com) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Installation de $(^Name) +# ^UninstallCaption +Désinstallation de $(^Name) +# ^LicenseSubCaption +: Licence +# ^ComponentsSubCaption +: Options d'installation +# ^DirSubCaption +: Dossier d'installation +# ^InstallingSubCaption +: Installation des fichiers +# ^CompletedSubCaption +: Terminé +# ^UnComponentsSubCaption +: Options de désinstallation +# ^UnDirSubCaption +: Dossier de désinstallation +# ^ConfirmSubCaption +: Confirmation +# ^UninstallingSubCaption +: Désinstallation des fichiers +# ^UnCompletedSubCaption +: Terminé +# ^BackBtn +< &Précédent +# ^NextBtn +&Suivant > +# ^AgreeBtn +J'a&ccepte +# ^AcceptBtn +J'a&ccepte les termes de la licence +# ^DontAcceptBtn +Je &n'accepte pas les termes de la licence +# ^InstallBtn +&Installer +# ^UninstallBtn +&Désinstaller +# ^CancelBtn +Annuler +# ^CloseBtn +&Fermer +# ^BrowseBtn +P&arcourir... +# ^ShowDetailsBtn +P&lus d'infos +# ^ClickNext +Cliquez sur Suivant pour continuer. +# ^ClickInstall +Cliquez sur Installer pour démarrer l'installation. +# ^ClickUninstall +Cliquez sur Désinstaller pour démarrer la désinstallation. +# ^Name +Nom +# ^Completed +Terminé +# ^LicenseText +Veuillez examiner le contrat de licence avant d'installer $(^NameDA). Si vous acceptez tous les termes du contrat, cliquez sur J'accepte. +# ^LicenseTextCB +Veuillez examiner le contrat de licence avant d'installer $(^NameDA). Si vous acceptez tous les termes du contrat, cochez la boîte de contrôle ci-dessous. $_CLICK +# ^LicesnseTextRB +Veuillez examiner le contrat de licence avant d'installer $(^NameDA). Si vous acceptez tous les termes du contrat, sélectionnez la première option ci-dessous. $_CLICK +# ^UnLicenseText +Veuillez examiner le contrat de licence avant de désinstaller $(^NameDA). Si vous acceptez tous les termes du contrat, cliquez sur J'accepte. +# ^UnLicenseTextCB +Veuillez examiner le contrat de licence avant de désinstaller $(^NameDA). Si vous acceptez tous les termes du contrat, cochez la boîte de contrôle ci-dessous. $_CLICK +# ^UnLicesnseTextRB +Veuillez examiner le contrat de licence avant de désinstaller $(^NameDA). Si vous acceptez tous les termes du contrat, sélectionnez la première option ci-dessous. $_CLICK +# ^Custom +Personnalisée +# ^ComponentsText +Cochez les composants que vous désirez installer et décochez ceux que vous ne désirez pas installer. $_CLICK +# ^ComponentsSubText1 +Type d'installation : +# ^ComponentsSubText2_NoInstTypes +Sélectionnez les composants à installer : +# ^ComponentsSubText2 +Ou, sélectionnez les composants optionnels que vous voulez installer : +# ^UnComponentsText +Cochez les composants que vous désirez désinstaller et décochez ceux que vous ne désirez pas désinstaller. $_CLICK +# ^UnComponentsSubText1 +Sélectionnez le type de désinstallation : +# ^UnComponentsSubText2_NoInstTypes +Sélectionnez les composants à désinstaller : +# ^UnComponentsSubText2 +Ou, sélectionnez les composants optionnels que vous voulez désinstaller : +# ^DirText +Ceci installera $(^NameDA) dans le dossier suivant. Pour installer dans un autre dossier, cliquez sur Parcourir et choisissez un autre dossier. $_CLICK +# ^DirSubText +Dossier d'installation +# ^DirBrowseText +Sélectionnez le dossier d'installation pour $(^NameDA) : +# ^UnDirText +Ceci désinstallera $(^NameDA) du dossier suivant. Pour désinstaller d'un autre dossier, cliquez sur Parcourir et choisissez un autre dossier. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Sélectionnez le dossier de désinstallation pour $(^NameDA) : +# ^SpaceAvailable +"Espace disponible : " +# ^SpaceRequired +"Espace requis : " +# ^UninstallingText +Ce programme désinstallera $(^NameDA) de votre ordinateur. $_CLICK +# ^UninstallingSubText +Désinstallation à partir de : +# ^FileError +Erreur lors de l'ouverture du fichier en écriture : \r\n\t"$0"\r\nAppuyez sur Abandonner pour annuler l'installation,\r\nRéessayer pour réessayer l'écriture du fichier, ou\r\nIgnorer pour passer ce fichier +# ^FileError_NoIgnore +Erreur lors de l'ouverture du fichier en écriture : \r\n\t"$0"\r\nAppuyez sur Réessayez pour re-écrire le fichier, ou\r\nAnnuler pour abandonner l'installation +# ^CantWrite +"Impossible d'écrire : " +# ^CopyFailed +Échec de la copie +# ^CopyTo +"Copier vers " +# ^Registering +"Enregistrement : " +# ^Unregistering +"Suppression de l'enregistrement : " +# ^SymbolNotFound +"Impossible de trouver un symbole : " +# ^CouldNotLoad +"Impossible de charger : " +# ^CreateFolder +"Création du dossier : " +# ^CreateShortcut +"Création du raccourci : " +# ^CreatedUninstaller +"Création de la désinstallation : " +# ^Delete +"Suppression : " +# ^DeleteOnReboot +"Suppression au redémarrage : " +# ^ErrorCreatingShortcut +"Erreur lors de la création du raccourci : " +# ^ErrorCreating +"Erreur de la création : " +# ^ErrorDecompressing +Erreur lors de la décompression des données ! Installation corrompue ? +# ^ErrorRegistering +Erreur lors de l'enregistrement de la DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Exécution : " +# ^Extract +"Extraction : " +# ^ErrorWriting +"Extraction : erreur d'écriture du fichier " +# ^InvalidOpcode +Installation corrompue : opcode incorrect +# ^NoOLE +"Pas de OLE pour : " +# ^OutputFolder +"Destination : " +# ^RemoveFolder +"Suppression du dossier : " +# ^RenameOnReboot +"Renommer au redémarrage : " +# ^Rename +"Renommer : " +# ^Skipped +"Passé : " +# ^CopyDetails +Copier les Détails dans le Presse-papier +# ^LogInstall +Enregistrer le déroulement de l'installation +# ^Byte +o +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/French.nsh b/tools/Contrib/Language files/French.nsh new file mode 100644 index 0000000..282d2cd --- /dev/null +++ b/tools/Contrib/Language files/French.nsh @@ -0,0 +1,129 @@ +;Language: French (1036) +;By Sébastien Delahaye + +!insertmacro LANGFILE "French" = "Français" "Francais" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bienvenue dans le programme d'installation de $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Vous êtes sur le point d'installer $(^NameDA) sur votre ordinateur.$\r$\n$\r$\nAvant de démarrer l'installation, il est recommandé de fermer toutes les autres applications. Cela permettra la mise à jour de certains fichiers système sans redémarrer votre ordinateur.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bienvenue dans le programme de désinstallation de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Vous êtes sur le point de désinstaller $(^NameDA) de votre ordinateur.$\r$\n$\r$\nAvant d'amorcer la désinstallation, assurez-vous que $(^NameDA) ne soit pas en cours d'exécution.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licence utilisateur" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Veuillez examiner les termes de la licence avant d'installer $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Si vous acceptez les conditions de la licence utilisateur, cliquez sur J'accepte pour continuer. Vous devez accepter la licence utilisateur afin d'installer $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si vous acceptez les conditions de la licence utilisateur, cochez la case ci-dessous. Vous devez accepter la licence utilisateur afin d'installer $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si vous acceptez les conditions de la licence utilisateur, sélectionnez le premier choix ci-dessous. Vous devez accepter la licence utilisateur afin d'installer $(^NameDA)." +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licence utilisateur" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Veuillez examiner les conditions de la licence avant de désinstaller $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Si vous acceptez les conditions de la licence utilisateur, cliquez sur J'accepte pour continuer. Vous devez accepter la licence utilisateur afin de désinstaller $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si vous acceptez les conditions de la licence utilisateur, cochez la case ci-dessous. Vous devez accepter la licence utilisateur afin de désintaller $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si vous acceptez les conditions de la licence utilisateur, sélectionnez le premier choix ci-dessous. Vous devez accepter la licence utilisateur afin de désinstaller $(^NameDA)." +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Appuyez sur Page Suivante pour lire le reste de la licence utilisateur." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Choisissez les composants" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Choisissez les composants de $(^NameDA) que vous souhaitez installer." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Choisissez les composants" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Cochez les composants de $(^NameDA) que vous souhaitez désinstaller." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Passez le curseur de votre souris sur un composant pour en voir la description." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Sélectionnez un composant pour en voir la description." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Choisissez le dossier d'installation" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Choisissez le dossier dans lequel installer $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Choisissez le dossier de désinstallation" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Choisissez le dossier à partir duquel vous voulez désinstaller $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installation en cours" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Veuillez patienter pendant l'installation de $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installation terminée" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "L'installation s'est terminée avec succès." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installation interrompue" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "L'installation n'a pas été terminée." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Désinstallation en cours" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Veuillez patienter pendant la désinstallation de $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Désinstallation terminée" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La désinstallation s'est terminée avec succès." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Désinstallation interrompue" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La désinstallation n'a pas été terminée." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Fin de l'installation de $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) a été installé sur votre ordinateur.$\r$\n$\r$\nCliquez sur Fermer pour quitter le programme d'installation." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Votre ordinateur doit être redémarré afin de compléter l'installation de $(^NameDA). Souhaitez-vous redémarrer maintenant ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Fin de la désinstallation de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) a été supprimé de votre ordinateur.$\r$\n$\r$\nCliquez sur Fermer pour quitter le programme d'installation." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Votre ordinateur doit être redémarré pour terminer la désinstallation de $(^NameDA). Souhaitez-vous redémarrer maintenant ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Redémarrer maintenant" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Je souhaite redémarrer moi-même plus tard" + ${LangFileString} MUI_TEXT_FINISH_RUN "Lancer $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Afficher le fichier Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fermer" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Choisissez un dossier dans le menu Démarrer" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Choisissez un dossier dans le menu Démarrer pour les raccourcis de l'application." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Choisissez le dossier du menu Démarrer dans lequel vous voulez placer les raccourcis du programme. Vous pouvez également entrer un nouveau nom pour créer un nouveau dossier." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ne pas créer de raccourcis" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Désinstaller $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Supprimer $(^NameDA) de votre ordinateur." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Êtes-vous sûr de vouloir quitter l'installation de $(^Name) ?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Êtes-vous sûr de vouloir quitter la désinstallation de $(^Name) ?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Choix des utilisateurs" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Sélection des utilisateurs désirant utiliser $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Choix entre installer $(^NameDA) seulement pour vous-même ou bien pour tous les utilisateurs du système. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installer pour tous les utilisateurs" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installer seulement pour moi" +!endif diff --git a/tools/Contrib/Language files/Galician.nlf b/tools/Contrib/Language files/Galician.nlf new file mode 100644 index 0000000..1d1d4f8 --- /dev/null +++ b/tools/Contrib/Language files/Galician.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1110 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation v 1.0.0 by Ramon Flores +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalación de $(^Name) +# ^UninstallCaption +Desinstalación de $(^Name) +# ^LicenseSubCaption +: Contrato de licenza +# ^ComponentsSubCaption +: Opcións de instalación +# ^DirSubCaption +: Diretória de instalación +# ^InstallingSubCaption +: Instalando ficheiros +# ^CompletedSubCaption +: Concluído +# ^UnComponentsSubCaption +: Opcións de desinstalación +# ^UnDirSubCaption +: Cartafol de desinstalación +# ^ConfirmSubCaption +: Confirmación +# ^UninstallingSubCaption +: Desinstalando +# ^UnCompletedSubCaption +: Concluído +# ^BackBtn +< &Anterior +# ^NextBtn +&Seguinte > +# ^AgreeBtn +&Aceito +# ^AcceptBtn +Eu &aceito os termos do Contrato de licenza +# ^DontAcceptBtn +Eu &non aceito os termos do Contrato de licenza +# ^InstallBtn +&Instalar +# ^UninstallBtn +&Desinstalar +# ^CancelBtn +Cancelar +# ^CloseBtn +&Fechar +# ^BrowseBtn +&Procurar... +# ^ShowDetailsBtn +Ver &Detalles +# ^ClickNext +Clique en 'Seguinte' para continuar. +# ^ClickInstall +Clique en 'Instalar' para iniciar a instalación. +# ^ClickUninstall +Clique en 'Desinstalar' para iniciar a desinstalación. +# ^Name +Nome +# ^Completed +Concluído +# ^LicenseText +Por favor revexa o acordo de licenza antes de instalar $(^NameDA). Se concordar con todos os termos da licenza, clique em 'Aceito'. +# ^LicenseTextCB +Por favor reveja o acordo de licenza antes de instalar $(^NameDA). Se concordar con todos os termos da licenza, clique na caixa de selección abaixo. $_CLICK +# ^LicenseTextRB +Por favor revexa o acordo de licenza antes de instalar $(^NameDA). Se concordar con todos os termos da licenza, escolla a primeira opción abaixo. $_CLICK +# ^UnLicenseText +Por favor revexa o acordo de licenza antes de desinstalar $(^NameDA). Se concordar con todos os termos da licenza, clique em 'Aceito'. +# ^UnLicenseTextCB +Por favor reveja o acordo de licenza antes de desinstalar $(^NameDA). Se concordar con todos os termos da licenza, clique na caixa de selección abaixo. $_CLICK +# ^UnLicenseTextRB +Por favor revexa o acordo de licenza antes de desinstalar $(^NameDA). Se concordar con todos os termos da licenza, escolla a primeira opción abaixo. $_CLICK +# ^Custom +Personalizado +# ^ComponentsText +Marque os componentes que desexa instalar e desmarque os componentes que non desexa instalar. $_CLICK +# ^ComponentsSubText1 +Escolla o tipo de instalación: +# ^ComponentsSubText2_NoInstTypes +Escolla os componentes para instalar: +# ^ComponentsSubText2 +Ou, escolla os componentes opcionais que desexa instalar: +# ^UnComponentsText +Marque os componentes que queira desinstalar e vice versa. $_CLICK +# ^UnComponentsSubText1 +Escolla o tipo de desinstalación: +# ^UnComponentsSubText2_NoInstTypes +Escolla os componentes para desinstalar: +# ^UnComponentsSubText2 +Ou, escolla os componentes opcionais que queira desinstalar: +# ^DirText +O $(^NameDA) será instalado na seguinte directória. Para instalar nunha directória diferente, clique en 'Procurar...' e escolla outra directória. $_CLICK +# ^DirSubText +Directória de destino +# ^DirBrowseText +Escolla unha directória para instalar o $(^NameDA): +# ^UnDirText +O $(^NameDA) será desinstalado da seguinte directória. Para desinstalar dunha pasta diferente, clique en 'Procurar...' e escolla outra directória. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Escolla a directória de onde vai ser desinstalado o $(^NameDA): +# ^SpaceAvailable +"Espazo disponíbel: " +# ^SpaceRequired +"Espazo necesário: " +# ^UninstallingText +$(^NameDA) vai ser desinstalado da seguinte directória. $_CLICK +# ^UninstallingSubText +Desinstalando de: +# ^FileError +Erro ao abrir ficheiro para escrita: \r\n\t"$0"\r\nClique en Abortar para abortar a instalación,\r\nRepetir para tentar novamente a escrita do ficheiro, ou\r\nIgnorar para ignorar este ficheiro. +# ^FileError_NoIgnore +Erro ao abrir ficheiro para escrita: \r\n\t"$0"\r\nClique en Repetir para tentar novamente a gravación do ficheiro, ou\r\nCancelar para abortar a instalación. +# ^CantWrite +"Non foi posíbel escreber: " +# ^CopyFailed +Falla ao copiar +# ^CopyTo +"Copiar para " +# ^Registering +"Rexistando: " +# ^Unregistering +"Desrexistando: " +# ^SymbolNotFound +"Símbolo non achado: " +# ^CouldNotLoad +"Non foi posíbel carregar: " +# ^CreateFolder +"Criando diretória: " +# ^CreateShortcut +"Criando atallo: " +# ^CreatedUninstaller +"Criando desinstalador: " +# ^Delete +"Eliminando ficheiro: " +# ^DeleteOnReboot +"Eliminar ao reiniciar: " +# ^ErrorCreatingShortcut +"Erro ao criar atallo: " +# ^ErrorCreating +"Erro ao criar: " +# ^ErrorDecompressing +Erro ao descomprimir dados! Instalador corrompido? +# ^ErrorRegistering +Erro ao rexistar DLL +# ^ExecShell +"Executando polo Shell: " +# ^Exec +"Executando: " +# ^Extract +"Extraindo: " +# ^ErrorWriting +"Extraindo: erro ao escreber ficheiro " +# ^InvalidOpcode +Instalador corrompido: código de operación inválido +# ^NoOLE +"Sen OLE para: " +# ^OutputFolder +"Cartafol de destino: " +# ^RemoveFolder +"Removendo cartafol: " +# ^RenameOnReboot +"Renomear ao reiniciar: " +# ^Rename +"Renomeando: " +# ^Skipped +"Ignorado: " +# ^CopyDetails +Copiar detalles para a Ãrea de transférencia +# ^LogInstall +Rexistar proceso de instalación +# ^Byte +B +# kilo + K +# mega + M +# giga + G diff --git a/tools/Contrib/Language files/Galician.nsh b/tools/Contrib/Language files/Galician.nsh new file mode 100644 index 0000000..7654c2a --- /dev/null +++ b/tools/Contrib/Language files/Galician.nsh @@ -0,0 +1,121 @@ +;Language: Galician (1110) +;Ramon Flores + +!insertmacro LANGFILE "Galician" = "Galego" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Benvindo ao Asistente de Instalación do $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Este asistente vai axudá-lo durante a instalación do $(^NameDA).$\r$\n$\r$\nRecomenda-se fechar todas as outras aplicacións antes de iniciar a instalación. Isto posibilita actualizar os ficheiros do sistema relevantes sen ter que reiniciar o computador.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Benvindo ao Asistente de desinstalación do $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este asistente vai axudá-lo durante a desinstalación do $(^NameDA).$\r$\n$\r$\nAntes de iniciar a desinstalación, certifique-se de que o $(^NameDA) non está a executar-se.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Contrato de licenza" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Por favor, verifique os termos da licenza antes de instalar o $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se aceitar os termos da licenza, clique en 'Aceito' para continuar. Cumpre aceitar o contrato para instalar o $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se aceitar os termos da licenza, clique na caixa de selección abaixo. Cumpre aceitar o contrato para instalar o $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se aceitar os termos da licenza, seleccione a primeira opción abaixo. Cumpre aceitar o contrato para instalar o $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Contrato de licenza" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Por favor, verifique os termos da licenza antes de desinstalar o $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se aceitar os termos da licenza, clique en 'Aceito' para continuar. Cumpre aceitar o contrato para desinstalar o $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se aceitar os termos da licenza, clique na caixa de selección abaixo. Cumpre aceitar o contrato para desinstalar o $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se aceitar os termos da licenza, seleccione a primeira opción abaixo. Cumpre aceitar o contrato para desinstalar o $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Prema Page Down para ver o restante da licenza." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Escolla de componentes" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Escolla que características do $(^NameDA) que desexa instalar." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Escoller componentes" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Escolla que características do $(^NameDA) desexa desinstalar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrición" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posicione o rato sobre un componente para ver a sua descrición." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Seleccione un componente para ver a sua descrición." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Escolla do local da instalación" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Escolla a directória na cal desexa instalar o $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Escolla o Local de desinstalación" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Escolla a directória de onde pretende desinstalar o $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalando" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Por favor, agarde entanto o $(^NameDA) está sendo instalado." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalación completa" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "A instalación concluiu con suceso." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalación Abortada" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "A instalación concluiu sen suceso." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor, agarde entanto se desinstala o $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstalación completa" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "A desinstalación concluiu con suceso." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstalación abortada" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "A desinstalación non concluiu con suceso" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Concluindo o Asistente de instalación do $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Instalou-se o $(^NameDA) no seu computador.$\r$\n$\r$\nClique en Rematar para fechar este asistente." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Cumpre reiniciar o seu computador para concluír a instalación do $(^NameDA). Desexa reiniciar agora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Concluíndo o asistente de desinstalación do $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Eliminou-se $(^NameDA) do seu computador.$\r$\n$\r$\nClique em Rematar para fechar este asistente." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Cumpre reiniciar o seu computador para concluír a desinstalación do $(^NameDA). Desexa reiniciá-lo agora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reiniciar agora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Prefiro reinicia-lo manualmente despois" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Executar $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Mostrar Leame" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Rematar" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Escolla un cartafol do Menu Iniciar" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Escolla un cartafol do Menu Iniciar para os atallos do programa." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Seleccione o cartafol do Menu Iniciar no que desexa criar os atallos do programa. Tamén é posíbel dixitar un nome para criar un novo cartafol. " + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Non criar atallos" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstalar $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Eliminar o $(^NameDA) do seu computador." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Realmente desexa cancelar a instalación do $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Realmente desexa cancelar a desinstalación do $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Georgian.nlf b/tools/Contrib/Language files/Georgian.nlf new file mode 100644 index 0000000..63d7457 --- /dev/null +++ b/tools/Contrib/Language files/Georgian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1079 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1200 +# RTL - anything else than RTL means LTR +- +#Translation by David Huriev +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრ$(^Name) +# ^UninstallCaption +$(^Name)–ის წáƒáƒ¨áƒšáƒ +# ^LicenseSubCaption +: სáƒáƒšáƒ˜áƒªáƒ”ნზირშეთáƒáƒœáƒ®áƒ›áƒ”ბრ+# ^ComponentsSubCaption +: ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის მáƒáƒœáƒáƒªáƒ”მები +# ^DirSubCaption +: სáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒáƒªáƒ˜áƒ ფáƒáƒšáƒ“ერი +# ^InstallingSubCaption +: ფáƒáƒ˜áƒšáƒ”ბის კáƒáƒžáƒ˜áƒ áƒ”ბრ+# ^CompletedSubCaption +: áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულირ+# ^UnComponentsSubCaption +: წáƒáƒ¨áƒšáƒ˜áƒ¡ მáƒáƒœáƒáƒªáƒ”მები +# ^UnDirSubCaption +: წáƒáƒ¨áƒšáƒ˜áƒ¡ ფáƒáƒ£áƒšáƒ“ერი +# ^ConfirmSubCaption +: თáƒáƒœáƒ®áƒ›áƒáƒ‘რ+# ^UninstallingSubCaption +: ფáƒáƒ˜áƒšáƒ”ბის წáƒáƒ¨áƒšáƒ +# ^UnCompletedSubCaption +: áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულირ+# ^BackBtn +< &უკáƒáƒœ +# ^NextBtn +&შემდეგ > +# ^AgreeBtn +ვეთáƒáƒœáƒ®áƒ›áƒ”&ბი +# ^AcceptBtn +&ვეთáƒáƒœáƒ®áƒ›áƒ”ბი სáƒáƒšáƒ˜áƒªáƒ”ნზირპირáƒáƒ‘ებს +# ^DontAcceptBtn +&áƒáƒ  ვეთáƒáƒœáƒ®áƒ›áƒ”ბი სáƒáƒšáƒ˜áƒªáƒ”ნზირპირáƒáƒ‘ებს +# ^InstallBtn +&ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრ+# ^UninstallBtn +წáƒáƒ¨&ლრ+# ^CancelBtn +უáƒáƒ áƒ˜ +# ^CloseBtn +&დáƒáƒ®áƒ£áƒ áƒ•áƒ +# ^BrowseBtn +დáƒáƒ—&ვáƒáƒšáƒ˜áƒ”რებáƒ... +# ^ShowDetailsBtn +&დეტáƒáƒšáƒ”ბი... +# ^ClickNext +გáƒáƒ¡áƒáƒ’რძელებლáƒáƒ“ დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'შემდეგ'. +# ^ClickInstall +დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ', პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“. +# ^ClickUninstall +დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'წáƒáƒ¨áƒšáƒ', პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“. +# ^Name +სáƒáƒ®áƒ”ლი +# ^Completed +ჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—რ+# ^LicenseText +სáƒáƒœáƒáƒ› ჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—ებრ$(^NameDA) გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირხელშეკრულებáƒáƒ¡. თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'თáƒáƒœáƒ®áƒ›áƒáƒ‘áƒ'. +# ^LicenseTextCB +სáƒáƒœáƒáƒ› ჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—ებრ$(^NameDA) გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირხელშეკრულებáƒáƒ¡. თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ფáƒáƒœáƒ¯áƒáƒ áƒ ქვემáƒáƒ—. $_CLICK +# ^LicenseTextRB +სáƒáƒœáƒáƒ› ჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—ებრ$(^NameDA) გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირხელშეკრულებáƒáƒ¡. თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ქვემáƒáƒ— მáƒáƒªáƒ”მული პირველი ვáƒáƒ áƒ˜áƒáƒœáƒ¢áƒ˜. $_CLICK +# ^UnLicenseText +სáƒáƒœáƒáƒ› წáƒáƒ¨áƒšáƒ˜áƒ— $(^NameDA) გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირხელშეკრულებáƒáƒ¡. თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'თáƒáƒœáƒ®áƒ›áƒáƒ‘áƒ'. +# ^UnLicenseTextCB +სáƒáƒœáƒáƒ› წáƒáƒ¨áƒšáƒ˜áƒ— $(^NameDA) გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირხელშეკრულებáƒáƒ¡. თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ფáƒáƒœáƒ¯áƒáƒ áƒ ქვემáƒáƒ—. $_CLICK +# ^UnLicenseTextRB +სáƒáƒœáƒáƒ› წáƒáƒ¨áƒšáƒ˜áƒ— $(^NameDA) გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირხელშეკრულებáƒáƒ¡. თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ქვემáƒáƒ— მáƒáƒªáƒ”მული პირველი ვáƒáƒ áƒ˜áƒáƒœáƒ¢áƒ˜. $_CLICK +# ^Custom +სტáƒáƒœáƒ“áƒáƒ áƒ¢áƒ£áƒšáƒ˜ +# ^ComponentsText +áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ის კáƒáƒ›áƒžáƒáƒœáƒ”ნტები, რáƒáƒ›áƒšáƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒª გსურთ. $_CLICK +# ^ComponentsSubText1 +áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის მეთáƒáƒ“ი: +# ^ComponentsSubText2_NoInstTypes +ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“ áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ კáƒáƒ›áƒžáƒáƒœáƒ”ნტები: +# ^ComponentsSubText2 +áƒáƒœ ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“ áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბითი კáƒáƒ›áƒžáƒáƒœáƒ”ნტები: +# ^UnComponentsText +áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ის კáƒáƒ›áƒžáƒáƒœáƒ”ნტები, რáƒáƒ›áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒáƒª გსურთ. $_CLICK +# ^UnComponentsSubText1 +áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ წáƒáƒ¨áƒšáƒ˜áƒ¡ მეთáƒáƒ“ი: +# ^UnComponentsSubText2_NoInstTypes +წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ კáƒáƒ›áƒžáƒáƒœáƒ”ნტები: +# ^UnComponentsSubText2 +áƒáƒœ წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბითი კáƒáƒ›áƒžáƒáƒœáƒ”ნტები: +# ^DirText +პრáƒáƒ’რáƒáƒ›áƒ ჩáƒáƒ’იტვირთáƒáƒ•áƒ— $(^NameDA)–ის მითითებულ ფáƒáƒšáƒ“ერში. სხვრáƒáƒ“გილზე ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“ დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'დáƒáƒ—ვáƒáƒšáƒ˜áƒ”რებáƒ' დრმიუთითეთ áƒáƒ“გილი. $_CLICK +# ^DirSubText +ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის ფáƒáƒšáƒ“ერი +# ^DirBrowseText +მითითეთ ფáƒáƒšáƒ“ერი სáƒáƒ“áƒáƒª უნდრჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ¡ $(^NameDA): +# ^UnDirText +პრáƒáƒ’რáƒáƒ›áƒ წáƒáƒ¨áƒšáƒ˜áƒ¡ $(^NameDA)–ის მითითებული ფáƒáƒšáƒ“ერიდáƒáƒœ. სხვრფáƒáƒšáƒ“ერიდáƒáƒœ წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე 'დáƒáƒ—ვáƒáƒšáƒ˜áƒ”რებáƒ' დრმიუთითეთ áƒáƒ“გილი. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +მიუთითეთ ფáƒáƒšáƒ“ერი სáƒáƒ˜áƒ“áƒáƒœáƒáƒª უნდრწáƒáƒ˜áƒ¨áƒáƒšáƒáƒ¡ $(^NameDA): +# ^SpaceAvailable +"ДоÑтупно на диÑке: " +# ^SpaceRequired +"ТребуетÑÑ Ð½Ð° диÑке: " +# ^UninstallingText +პრáƒáƒ’რáƒáƒ›áƒ $(^NameDA) წáƒáƒ˜áƒ¨áƒšáƒ”ბრთქვენი კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რიდáƒáƒœ. $_CLICK +# ^UninstallingSubText +წáƒáƒ¨áƒšáƒ: +# ^FileError +áƒáƒ  იხსნებრფáƒáƒ˜áƒšáƒ”ბი ჩáƒáƒ¡áƒáƒ¬áƒ”რáƒáƒ“: \r\n\t"$0"\r\n'შეჩერებáƒ': შეჩერდეს ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ;\r\n"გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ": მცდელáƒáƒ‘ის გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ;\r\n"გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ”ბáƒ": áƒáƒ› მáƒáƒ¥áƒ›áƒ”დების გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ”ბáƒ. +# ^FileError_NoIgnore +áƒáƒ  იხსნებრფáƒáƒ˜áƒšáƒ”ი ჩáƒáƒ¡áƒáƒ¬áƒ”რáƒáƒ“: \r\n\t"$0"\r\n'გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ': მცდელáƒáƒ‘ის გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ;\r\n'უáƒáƒ áƒ˜': ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის პრáƒáƒªáƒ”სის შეწყვეტáƒ. +# ^CantWrite +"áƒáƒ  იწერებáƒ: " +# ^CopyFailed +შეცდáƒáƒ›áƒ ჩáƒáƒ¬áƒ”რის დრáƒáƒ¡ +# ^CopyTo +"კáƒáƒžáƒ˜áƒ áƒ”ბáƒ: " +# ^Registering +"რეგისტრირებáƒ: " +# ^Unregistering +"რეგისტრირებიდáƒáƒœ მáƒáƒ®áƒ¡áƒœáƒ: " +# ^SymbolNotFound +"ვერ მáƒáƒ˜áƒ«áƒ”ბნრსიმბáƒáƒšáƒ: " +# ^CouldNotLoad +"ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრშეუძლებელიáƒ: " +# ^CreateFolder +"ფáƒáƒšáƒ“ერის შექმნáƒ: " +# ^CreateShortcut +"იáƒáƒ áƒšáƒ˜áƒ§áƒ˜áƒ¡ შექმნáƒ: " +# ^CreatedUninstaller +"წáƒáƒ¨áƒšáƒ˜áƒ¡ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ შექმნáƒ: " +# ^Delete +"ფáƒáƒ˜áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ: " +# ^DeleteOnReboot +"წáƒáƒ˜áƒ¨áƒšáƒ”ბრკáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რის გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის დრáƒáƒ¡: " +# ^ErrorCreatingShortcut +"იáƒáƒ áƒšáƒ˜áƒ§áƒ˜áƒ¡ შექმნისáƒáƒ¡ დáƒáƒ¨áƒ•áƒ”ბულირშეცდáƒáƒ›áƒ: " +# ^ErrorCreating +"შექმნისáƒáƒ¡ დáƒáƒ¨áƒ•áƒ”ბულირშეცდáƒáƒ›áƒ: " +# ^ErrorDecompressing +შეცდáƒáƒ›áƒ მáƒáƒœáƒáƒªáƒ”მების გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡áƒáƒ¡! შესáƒáƒ«áƒšáƒáƒ სáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒáƒªáƒ˜áƒ პრáƒáƒ’რáƒáƒ›áƒáƒ დáƒáƒ–იáƒáƒœáƒ”ბული. +# ^ErrorRegistering +áƒáƒ  რეგისტრირდებრ(DLL) +# ^ExecShell +"ExecShell: " +# ^Exec +"შესრულებáƒ: " +# ^Extract +"áƒáƒ›áƒáƒœáƒáƒ¬áƒ”რი: " +# ^ErrorWriting +"áƒáƒ›áƒáƒœáƒáƒ¬áƒ”რი: შეცდáƒáƒ›áƒáƒ დáƒáƒ¨áƒ•áƒ”ბული ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¬áƒ”რისáƒáƒ¡ " +# ^InvalidOpcode +სáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒáƒªáƒ˜áƒ პრáƒáƒ’რáƒáƒ›áƒ დáƒáƒ–იáƒáƒœáƒ”ბულიáƒ: კáƒáƒ“ი áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს +# ^NoOLE +"OLE áƒáƒ  áƒáƒ áƒ˜áƒ¡: " +# ^OutputFolder +"ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის ფáƒáƒšáƒ“ერი: " +# ^RemoveFolder +"ფáƒáƒšáƒ“ერის წáƒáƒ¨áƒšáƒ: " +# ^RenameOnReboot +"სáƒáƒ®áƒ”ლის შეცვლრკáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რის გáƒáƒ“áƒáƒ•áƒ˜áƒ áƒ—ვისáƒáƒ¡: " +# ^Rename +"სáƒáƒ®áƒ”ლის შეცვლáƒ: " +# ^Skipped +"გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ: " +# ^CopyDetails +მáƒáƒœáƒáƒªáƒ”მების ბუფერში კáƒáƒžáƒ˜áƒ áƒ”ბრ+# ^LogInstall +ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის áƒáƒ¦áƒ¬áƒ”რრ+# byte +B +# kilo + K +# mega + M +# giga + G diff --git a/tools/Contrib/Language files/Georgian.nsh b/tools/Contrib/Language files/Georgian.nsh new file mode 100644 index 0000000..766c3c7 --- /dev/null +++ b/tools/Contrib/Language files/Georgian.nsh @@ -0,0 +1,121 @@ +;Language: Georgian (1079) +;Translation by David Huriev and format updated by Jim Park + +!insertmacro LANGFILE "Georgian" = "ქáƒáƒ áƒ—ული" "Kartuli" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბáƒáƒ— $(^NameDA)–ის სáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒáƒªáƒ˜áƒ პრáƒáƒ’რáƒáƒ›áƒ" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "ეს პრáƒáƒ’რáƒáƒ›áƒ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ¡ $(^NameDA)–ს თქვენს კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რში.$\r$\n$\r$\nჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ›áƒ“ე რეკáƒáƒ›áƒ”ნდირებულირყველრპრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ დáƒáƒ®áƒ£áƒ áƒ•áƒ. áƒáƒ› შემთხვევáƒáƒ¨áƒ˜ პრáƒáƒ’რáƒáƒ›áƒ სისტემურ ფáƒáƒ˜áƒšáƒ”ბს ისე შეცვლის, რáƒáƒ› კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რს გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრáƒáƒ  დáƒáƒ¡áƒ­áƒ˜áƒ áƒ“ებáƒ.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბáƒáƒ— $(^NameDA)–ის დეინსტáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ ფáƒáƒœáƒ¯áƒáƒ áƒ" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "ეს პრáƒáƒ’რáƒáƒ›áƒ წáƒáƒ¨áƒšáƒ˜áƒ¡ $(^NameDA)–ს კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რიდáƒáƒœ.$\r$\n$\r$\nწáƒáƒ¨áƒšáƒáƒ›áƒ“ე დáƒáƒ®áƒ£áƒ áƒ”თ პრáƒáƒ’რáƒáƒ›áƒ $(^NameDA).$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "სáƒáƒšáƒ˜áƒªáƒ”ნზირშეთáƒáƒœáƒ®áƒ›áƒ”ბáƒ" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "სáƒáƒœáƒáƒ› $(^NameDA)–ს ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ— გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირშეთáƒáƒœáƒ®áƒ›áƒ”ბáƒáƒ¡." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს, დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე $\"ვეთáƒáƒœáƒ®áƒ›áƒ”ბი$\". პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“ áƒáƒ£áƒªáƒ˜áƒšáƒ”ბელირდáƒáƒ—áƒáƒœáƒ®áƒ›áƒ”ბáƒ." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს, მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ფáƒáƒœáƒ¯áƒáƒ áƒ ქვემáƒáƒ—. $(^NameDA)–ის ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“ áƒáƒ£áƒªáƒ˜áƒšáƒ”ბელირპირáƒáƒ‘ებზე დáƒáƒ—áƒáƒœáƒ®áƒ›áƒ”ბáƒ. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ქვემáƒáƒ— მáƒáƒªáƒ”მული პირველი ვáƒáƒ áƒ˜áƒáƒœáƒ¢áƒ˜. $(^NameDA)–ის ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ“ áƒáƒ£áƒªáƒ˜áƒšáƒ”ბელირპირáƒáƒ‘ებზე დáƒáƒ—áƒáƒœáƒ®áƒ›áƒ”ბáƒ. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "სáƒáƒšáƒ˜áƒªáƒ”ნზირშეთáƒáƒœáƒ®áƒ›áƒ”ბáƒ" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "სáƒáƒœáƒáƒ› წáƒáƒ¨áƒšáƒ˜áƒ— $(^NameDA)–ს გáƒáƒ”ცáƒáƒœáƒ˜áƒ— სáƒáƒšáƒ˜áƒªáƒ”ნზირშეთáƒáƒœáƒ®áƒ›áƒ”ბáƒáƒ¡." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე $\"თáƒáƒœáƒ®áƒ›áƒáƒ‘áƒ$\". $(^NameDA)–ის წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ სáƒáƒ­áƒ˜áƒ áƒáƒ პირáƒáƒ”ბებზე დáƒáƒ—áƒáƒœáƒ®áƒ›áƒ”ბáƒ. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ფáƒáƒœáƒ¯áƒáƒ áƒ ქვემáƒáƒ—. $(^NameDA)–ს წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ სáƒáƒ­áƒ˜áƒ áƒáƒ პირáƒáƒ”ბებზე დáƒáƒ—áƒáƒœáƒ®áƒ›áƒ”ბáƒ. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით პირáƒáƒ‘ებს მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ ქვემáƒáƒ— მáƒáƒªáƒ”მული პირველი ვáƒáƒ áƒ˜áƒáƒœáƒ¢áƒ˜. $(^NameDA)–ს წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ სáƒáƒ­áƒ˜áƒ áƒáƒ პირáƒáƒ”ბებზე დáƒáƒ—áƒáƒœáƒ®áƒ›áƒ”ბáƒ. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ტექსტის წáƒáƒ¡áƒáƒ™áƒ˜áƒ—ხáƒáƒ“ გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ ღილáƒáƒ™áƒ”ბი $\"PageUp$\" დრ$\"PageDown$\"." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ი პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ კáƒáƒ›áƒžáƒáƒœáƒ”ნტები" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ $(^NameDA)–ის კáƒáƒ›áƒžáƒáƒœáƒ”ნტები, რáƒáƒ›áƒšáƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒª გსურთ." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ კáƒáƒ›áƒžáƒáƒœáƒ”ნტები" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ $(^NameDA)–ის კáƒáƒ›áƒžáƒáƒœáƒ”ნტები, რáƒáƒ›áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒáƒª გსურთ." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "შემáƒáƒ“გენლáƒáƒ‘áƒ" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "მიიყვáƒáƒœáƒ”თ მáƒáƒ£áƒ¡áƒ˜ კáƒáƒ›áƒžáƒáƒœáƒ”ნტის სáƒáƒ®áƒ”ლწáƒáƒ“ებáƒáƒ¡áƒ—áƒáƒœ მის სრულáƒáƒ“ წáƒáƒ¡áƒáƒ™áƒ˜áƒ—ხáƒáƒ“." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ კáƒáƒ›áƒžáƒáƒœáƒ”ნტი, შემáƒáƒ“გენლáƒáƒ‘ის დáƒáƒ¡áƒáƒœáƒáƒ®áƒáƒ“." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ი ფáƒáƒšáƒ“ერის მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ $(^NameDA)–ს ჩáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ი ფáƒáƒšáƒ“ერი." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლი ფáƒáƒšáƒ“ერის მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "მიუთითეთ ფáƒáƒšáƒ“ერი, სáƒáƒ˜áƒ“áƒáƒœáƒáƒª უნდრწáƒáƒ˜áƒ¨áƒáƒšáƒáƒ¡ $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "დáƒáƒ”ლáƒáƒ“ეთ, მიმდინáƒáƒ áƒ”áƒáƒ‘ს $(^NameDA)–ის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრდáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულიáƒ" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "პრáƒáƒ’რáƒáƒ›áƒ წáƒáƒ áƒ›áƒáƒ¢áƒ”ბით ჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—áƒ." + ${LangFileString} MUI_TEXT_ABORT_TITLE "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრშეწყდáƒ" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრáƒáƒ  დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულáƒ." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "წáƒáƒ¨áƒšáƒ" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "დáƒáƒ”ლáƒáƒ“ეთ, მიმდინáƒáƒ áƒ”áƒáƒ‘ს $(^NameDA)–ის წáƒáƒ¨áƒšáƒ..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "წáƒáƒ˜áƒ¨áƒáƒšáƒ" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "პრáƒáƒ’რáƒáƒ›áƒ სრულáƒáƒ“ წáƒáƒ˜áƒ¨áƒáƒšáƒ." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "შეწყდრწáƒáƒ¨áƒšáƒ" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "სრულáƒáƒ“ áƒáƒ  წáƒáƒ¨áƒšáƒ˜áƒšáƒ." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "დáƒáƒ¡áƒ áƒ£áƒšáƒ“რ$(^NameDA)–ის სáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒáƒªáƒ˜áƒ პრáƒáƒ’რáƒáƒ›áƒ" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ჩáƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—რკáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რში.$\r$\n$\r$\nდáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე $\"მზáƒáƒ“áƒáƒ$\" სáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒáƒªáƒ˜áƒ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ“áƒáƒœ გáƒáƒ›áƒáƒ¡áƒáƒ¡áƒ•áƒšáƒ”ლáƒáƒ“." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA)–ის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ”ბლáƒáƒ“ გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ეთ კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რი. áƒáƒ®áƒšáƒáƒ•áƒ” გსურთ მისი გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA)–ის წáƒáƒ¨áƒšáƒ˜áƒ¡ პრáƒáƒ’რáƒáƒ›áƒ" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) წáƒáƒ˜áƒ¨áƒáƒšáƒ კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რიდáƒáƒœ.$\r$\n$\r$\nდáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ ღილáƒáƒ™áƒ–ე $\"მზáƒáƒ“áƒáƒ$\" წáƒáƒ¨áƒšáƒ˜áƒ¡ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ“áƒáƒœ გáƒáƒ›áƒáƒ¡áƒáƒ¡áƒ•áƒšáƒ”ლáƒáƒ“." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA)–ის სრულáƒáƒ“ წáƒáƒ¡áƒáƒ¨áƒšáƒ”ლáƒáƒ“ გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ეთ კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რი. áƒáƒ®áƒšáƒáƒ•áƒ” გსურთ მისი გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "დიáƒáƒ®, áƒáƒ®áƒšáƒáƒ•áƒ” გáƒáƒ“áƒáƒ˜áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ¡" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "áƒáƒ áƒ, მáƒáƒ’ვიáƒáƒœáƒ”ბით გáƒáƒ“áƒáƒ•áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ• კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რს" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA)–ის &ჩáƒáƒ áƒ—ვáƒ" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "ReadMe &ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩვენებáƒ" #FIXME: BUGBUG "ReadMe"? + ${LangFileString} MUI_BUTTONTEXT_FINISH "&მზáƒáƒ“áƒáƒ" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "მენიუში áƒáƒ áƒ¡áƒ”ბული ფáƒáƒšáƒ“ერი $\"სტáƒáƒ áƒ¢áƒ˜$\"" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ფáƒáƒšáƒ“ერი მენიუში $\"სტáƒáƒ áƒ¢áƒ˜$\" $(^NameDA)–ის იáƒáƒ áƒšáƒ˜áƒ§áƒ”ბის გáƒáƒœáƒ¡áƒáƒ—áƒáƒ•áƒ¡áƒ”ბლáƒáƒ“." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ფáƒáƒšáƒ“ერი მენიუში $\"სტáƒáƒ áƒ¢áƒ˜$\", სáƒáƒ“áƒáƒª გáƒáƒœáƒ—áƒáƒ•áƒ¡áƒ“ებრპრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ იáƒáƒ áƒšáƒ˜áƒ§áƒ”ბი. თქვენ სხვრსáƒáƒ®áƒ”ლიც შეგიძლიáƒáƒ— მიუთითáƒáƒ— áƒáƒ®áƒáƒšáƒ˜ ფáƒáƒšáƒ“ერის შესáƒáƒ¥áƒ›áƒœáƒ”ლáƒáƒ“." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "áƒáƒ  შეიქმნáƒáƒ¡ იáƒáƒ áƒšáƒ˜áƒ§áƒ˜" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA)–ის წáƒáƒ¨áƒšáƒ" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA)–ის კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რიდáƒáƒœ წáƒáƒ¨áƒšáƒ." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "ნáƒáƒ›áƒ“ვილáƒáƒ“ გსურთ უáƒáƒ áƒ˜ თქვáƒáƒ— $(^Name)–ის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ–ე?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "ნáƒáƒ›áƒ“ვილáƒáƒ“ გსურთ უáƒáƒ áƒ˜ თქვáƒáƒ— $(^Name)–ის წáƒáƒ¨áƒšáƒáƒ–ე?" +!endif diff --git a/tools/Contrib/Language files/German.nlf b/tools/Contrib/Language files/German.nlf new file mode 100644 index 0000000..ed2f91f --- /dev/null +++ b/tools/Contrib/Language files/German.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1031 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by L.King, changes by R. Bisswanger, Tim Kosse, Frederik Schwarzer & Sebastian Stange +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Installation von $(^Name) +# ^UninstallCaption +Deinstallation von $(^Name) +# ^LicenseSubCaption +: Lizenzabkommen +# ^ComponentsSubCaption +: Installationsoptionen +# ^DirSubCaption +: Zielverzeichnis +# ^InstallingSubCaption +: Wird installiert +# ^CompletedSubCaption +: Fertig +# ^UnComponentsSubCaption +: Deinstallationsoptionen +# ^UnDirSubCaption +: Quellverzeichnis +# ^ConfirmSubCaption +: Bestätigung +# ^UninstallingSubCaption +: Wird entfernt +# ^UnCompletedSubCaption +: Fertig +# ^BackBtn +< &Zurück +# ^NextBtn +&Weiter > +# ^AgreeBtn +&Annehmen +# ^AcceptBtn +Lizenzabkommen &akzeptieren +# ^DontAcceptBtn +Lizenzabkommen ab&lehnen +# ^InstallBtn +&Installieren +# ^UninstallBtn +&Deinstallieren +# ^CancelBtn +Abbrechen +# ^CloseBtn +&Beenden +# ^BrowseBtn +&Durchsuchen ... +# ^ShowDetailsBtn +&Details anzeigen +# ^ClickNext +Klicken Sie auf Weiter, um fortzufahren. +# ^ClickInstall +Klicken Sie auf Installieren, um die Installation zu starten. +# ^ClickUninstall +Klicken Sie auf Deinstallieren, um die Deinstallation zu starten. +# ^Name +Name +# ^Completed +Fertig +# ^LicenseText +Bitte lesen Sie das Lizenzabkommen, bevor Sie $(^NameDA) installieren. Wenn Sie alle Bedingungen des Abkommens akzeptieren, klicken Sie auf Annehmen. +# ^LicenseTextCB +Bitte lesen Sie das Lizenzabkommen, bevor Sie $(^NameDA) installieren. Wenn Sie alle Bedingungen des Abkommens akzeptieren, aktivieren Sie das Kontrollkästchen. $_CLICK +# ^LicenseTextRB +Bitte lesen Sie das Lizenzabkommen, bevor Sie $(^NameDA) installieren. Wenn Sie alle Bedingungen des Abkommens akzeptieren, wählen Sie die entsprechende Option. $_CLICK +# ^UnLicenseText +Bitte lesen Sie das Lizenzabkommen, bevor Sie $(^NameDA) entfernen. Wenn Sie alle Bedingungen des Abkommens akzeptieren, klicken Sie auf Annehmen. +# ^UnLicenseTextCB +Bitte lesen Sie das Lizenzabkommen, bevor Sie $(^NameDA) entfernen. Wenn Sie alle Bedingungen des Abkommens akzeptieren, aktivieren Sie das Kontrollkästchen. $_CLICK +# ^UnLicenseTextRB +Bitte lesen Sie das Lizenzabkommen, bevor Sie $(^NameDA) entfernen. Wenn Sie alle Bedingungen des Abkommens akzeptieren, wählen Sie die entsprechende Option. $_CLICK +# ^Custom +Benutzerdefiniert +# ^ComponentsText +Wählen Sie die Komponenten, welche Sie installieren wollen. $_CLICK +# ^ComponentsSubText1 +Installationstyp bestimmen: +# ^ComponentsSubText2_NoInstTypes +Wählen Sie die zu installierenden Komponenten: +# ^ComponentsSubText2 +oder wählen Sie zusätzliche zu installierende Komponenten: +# ^UnComponentsText +Wählen Sie die Komponenten, welche Sie entfernen wollen. $_CLICK +# ^UnComponentsSubText1 +Deinstallationstyp bestimmen: +# ^UnComponentsSubText2_NoInstTypes +Wählen Sie die zu entfernenden Komponenten: +# ^UnComponentsSubText2 +oder wählen Sie zusätzliche Komponenten, welche Sie entfernen möchten: +# ^DirText +$(^NameDA) wird in das unten angegebene Verzeichnis installiert. Falls Sie in ein anderes Verzeichnis installieren möchten, klicken Sie auf Durchsuchen und wählen Sie ein anderes Verzeichnis aus. $_CLICK +# ^DirSubText +Zielverzeichnis +# ^DirBrowseText +Wählen Sie das Verzeichnis aus, in das Sie $(^NameDA) installieren möchten: +# ^UnDirText +$(^NameDA) wird aus dem unten angegebenen Verzeichnis entfernt. Falls sich $(^NameDA) in einem anderen Verzeichnis befindet, klicken Sie auf Durchsuchen und wählen Sie das richtige Verzeichnis aus. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Wählen Sie das Verzeichnis aus, in dem sich $(^NameDA) befindet: +# ^SpaceAvailable +"Verfügbarer Speicher: " +# ^SpaceRequired +"Benötigter Speicher: " +# ^UninstallingText +$(^NameDA) wird aus dem unten angegebenen Verzeichnis entfernt. $_CLICK +# ^UninstallingSubText +Wird entfernt aus: +# ^FileError +Fehler beim Ãœberschreiben der Datei: \r\n\t"$0"\r\nKlicken Sie auf Abbrechen, um abzubrechen,\r\nauf Wiederholen, um den Schreibvorgang erneut zu versuchen,\r\noder auf Ignorieren, um diese Datei zu überspringen. +# ^FileError_NoIgnore +Fehler beim Ãœberschreiben der Datei: \r\n\t"$0"\r\nKlicken Sie auf Wiederholen, um den Schreibvorgang erneut zu versuchen,\r\noder auf Abbrechen, um die Installation zu beenden. +# ^CantWrite +"Fehler beim Schreiben: " +# ^CopyFailed +Kopieren fehlgeschlagen +# ^CopyTo +"Wird kopiert nach " +# ^Registering +"Wird registriert: " +# ^Unregistering +"Wird deregistriert: " +# ^SymbolNotFound +"Symbol ist nicht vorhanden: " +# ^CouldNotLoad +"Fehler beim Laden von " +# ^CreateFolder +"Verzeichnis wird erstellt: " +# ^CreateShortcut +"Verknüpfung wird erstellt: " +# ^CreatedUninstaller +"Deinstallationsprogramm wird erstellt: " +# ^Delete +"Datei wird gelöscht: " +# ^DeleteOnReboot +"Datei wird nach Neustart gelöscht: " +# ^ErrorCreatingShortcut +"Fehler beim Erstellen der Verknüpfung: " +# ^ErrorCreating +"Fehler beim Erstellen: " +# ^ErrorDecompressing +Fehler beim Entpacken. Ist das Installationsprogramm beschädigt? +# ^ErrorRegistering +Fehler beim Registrieren der DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Wird gestartet: " +# ^Extract +"Wird entpackt: " +# ^ErrorWriting +"Entpacken: Fehler beim Schreiben der Datei " +# ^InvalidOpcode +Beschädigtes Installationsprogramm: ungültiger Befehlscode +# ^NoOLE +"Kein OLE für: " +# ^OutputFolder +"Zielverzeichnis: " +# ^RemoveFolder +"Verzeichnis wird entfernt: " +# ^RenameOnReboot +"Umbenennen nach Neustart: " +# ^Rename +"Umbenennen: " +# ^Skipped +"Ãœbersprungen: " +# ^CopyDetails +Details in die Zwischenablage kopieren +# ^LogInstall +Installationsverlauf protokollieren +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/German.nsh b/tools/Contrib/Language files/German.nsh new file mode 100644 index 0000000..1acdf78 --- /dev/null +++ b/tools/Contrib/Language files/German.nsh @@ -0,0 +1,129 @@ +;Language: German (1031) +;By L.King, changes by K. Windszus, R. Bisswanger, M. Simmack, D. Weiß, Frederik Schwarzer & S. Stange + +!insertmacro LANGFILE "German" = "Deutsch" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Willkommen zur Installation$\r$\nvon $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Dieser Assistent wird Sie durch die Installation von $(^NameDA) begleiten.$\r$\n$\r$\nEs wird empfohlen, vor der Installation alle anderen Programme zu schließen, damit bestimmte Systemdateien ohne Neustart ersetzt werden können.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Willkommen zur Deinstallation$\r$\nvon $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Dieser Assistent wird Sie durch die Deinstallation von $(^NameDA) begleiten.$\r$\n$\r$\nBitte beenden Sie $(^NameDA), bevor Sie mit der Deinstallation fortfahren.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lizenzabkommen" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Bitte lesen Sie die Lizenzbedingungen durch, bevor Sie mit der Installation fortfahren." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Falls Sie alle Bedingungen des Abkommens akzeptieren, klicken Sie auf Annehmen. Sie müssen die Lizenzvereinbarungen anerkennen, um $(^NameDA) installieren zu können." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Falls Sie alle Bedingungen des Abkommens akzeptieren, aktivieren Sie das Kästchen. Sie müssen die Lizenzvereinbarungen anerkennen, um $(^NameDA) installieren zu können. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Falls Sie alle Bedingungen des Abkommens akzeptieren, wählen Sie unten die entsprechende Option. Sie müssen die Lizenzvereinbarungen anerkennen, um $(^NameDA) installieren zu können. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lizenzabkommen" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Bitte lesen Sie die Lizenzbedingungen durch, bevor Sie mit der Deinstallation von $(^NameDA) fortfahren." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Falls Sie alle Bedingungen des Abkommens akzeptieren, klicken Sie auf Annehmen. Sie müssen die Lizenzvereinbarungen anerkennen, um $(^NameDA) deinstallieren zu können." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Falls Sie alle Bedingungen des Abkommens akzeptieren, aktivieren Sie das Kästchen. Sie müssen die Lizenzvereinbarungen anerkennen, um $(^NameDA) deinstallieren zu können. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Falls Sie alle Bedingungen des Abkommens akzeptieren, wählen Sie unten die entsprechende Option. Sie müssen die Lizenzvereinbarungen anerkennen, um $(^NameDA) deinstallieren zu können. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Drücken Sie die BILD-AB-Taste, um den Rest des Abkommens zu lesen." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Komponenten auswählen" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Wählen Sie die Komponenten aus, die Sie installieren möchten." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Komponenten auswählen" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Wählen Sie die Komponenten aus, die Sie entfernen möchten." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschreibung" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bewegen Sie den Mauszeiger über eine Komponente, um die Beschreibung zu lesen." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Wählen Sie eine Komponente, um die Beschreibung zu lesen." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Zielverzeichnis auswählen" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Wählen Sie das Verzeichnis aus, in das $(^NameDA) installiert werden soll." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Verzeichnis für Deinstallation auswählen" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Wählen Sie das Verzeichnis aus, aus dem $(^NameDA) entfernt werden soll." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Wird installiert ..." + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Bitte warten Sie, während $(^NameDA) installiert wird." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Die Installation ist vollständig" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Die Installation wurde erfolgreich abgeschlossen." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Abbruch der Installation" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Die Installation wurde nicht vollständig abgeschlossen." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Wird deinstalliert ..." + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Bitte warten Sie, während $(^NameDA) entfernt wird." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Die Deinstallation ist vollständig" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Die Deinstallation wurde erfolgreich abgeschlossen." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Abbruch der Deinstallation" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Die Deinstallation wurde nicht vollständig abgeschlossen." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Die Installation von $(^NameDA) wird abgeschlossen" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) wurde auf Ihrem Computer installiert.$\r$\n$\r$\nKlicken Sie auf Fertigstellen, um den Installationsassistenten zu schließen." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Windows muss neu gestartet werden, um die Installation von $(^NameDA) zu vervollständigen. Möchten Sie Windows jetzt neu starten?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Die Deinstallation von $(^NameDA) wird abgeschlossen" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ist von Ihrem Computer entfernt worden.$\r$\n$\r$\nKlicken Sie auf Fertigstellen, um den Assistenten zu schließen." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Windows muss neu gestartet werden, um die Deinstallation von $(^NameDA) zu vervollständigen. Möchten Sie Windows jetzt neu starten?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Jetzt neu starten" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Windows später selbst neu starten" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) ausführen" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Liesmich-Datei anzeigen" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fertigstellen" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Startmenü-Ordner bestimmen" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Bestimmen Sie einen Startmenü-Ordner für die Programmverknüpfungen." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Wählen Sie den Startmenü-Ordner für die Programmverknüpfungen aus. Falls Sie einen neuen Ordner erstellen möchten, geben Sie dessen Namen ein." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Keine Verknüpfungen erstellen" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Deinstallation von $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) wird von Ihrem Computer entfernt." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Sind Sie sicher, dass Sie die Installation von $(^Name) abbrechen möchten?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Sind Sie sicher, dass Sie die Deinstallation von $(^Name) abbrechen möchten?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Benutzer auswählen" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Wählen Sie die Benutzer aus, für die Sie $(^NameDA) installieren möchten." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Wählen Sie aus, ob Sie $(^NameDA) nur für den eigenen Gebrauch oder für die Nutzung durch alle Benutzer dieses Systems installieren möchten. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installation für alle Benutzer dieses Computers" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installation nur für mich" +!endif diff --git a/tools/Contrib/Language files/Greek.nlf b/tools/Contrib/Language files/Greek.nlf new file mode 100644 index 0000000..84f3988 --- /dev/null +++ b/tools/Contrib/Language files/Greek.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1032 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1253 +# RTL - anything else than RTL means LTR +- +# Translation by Makidis N. Michael - http://dias.aueb.gr/~p3010094/ +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Εγκατάσταση του '$(^Name)' +# ^UninstallCaption +Απεγκατάσταση του '$(^Name)' +# ^LicenseSubCaption +: Συμφωνία Άδειας ΧÏήσης +# ^ComponentsSubCaption +: Επιλογές Εγκατάστασης +# ^DirSubCaption +: Φάκελος Εγκατάστασης +# ^InstallingSubCaption +: Εγκατάσταση σε εξέλιξη +# ^CompletedSubCaption +: ΟλοκληÏώθηκε +# ^UnComponentsSubCaption +: Επιλογές Απεγκατάστασης +# ^UnDirSubCaption +: Φάκελος Απεγκατάστασης +# ^ConfirmSubCaption +: Επιβεβαίωση +# ^UninstallingSubCaption +: Απεγκατάσταση σε εξέλιξη +# ^UnCompletedSubCaption +: ΟλοκληÏώθηκε +# ^BackBtn +< &Πίσω +# ^NextBtn +&Επόμενο > +# ^AgreeBtn +&Συμφωνώ +# ^AcceptBtn +&Αποδέχομαι τους ÏŒÏους της άδειας χÏήσης +# ^DontAcceptBtn +&Δεν αποδέχομαι τους ÏŒÏους της άδειας χÏήσης +# ^InstallBtn +&Εγκατάσταση +# ^UninstallBtn +Απε&γκατάστ. +# ^CancelBtn +ΆκυÏο +# ^CloseBtn +&Κλείσιμο +# ^BrowseBtn +Α&ναζήτηση... +# ^ShowDetailsBtn +&ΛεπτομέÏειες +# ^ClickNext +Κάντε κλικ στο Επόμενο για να συνεχίσετε. +# ^ClickInstall +Κάντε κλικ στο Εγκατάσταση για να αÏχίσετε την εγκατάσταση. +# ^ClickUninstall +Κάντε κλικ στο Απεγκατάσταση για να αÏχίσετε την απεγκατάσταση. +# ^Name +Όνομα +# ^Completed +ΟλοκληÏώθηκε +# ^LicenseText +Ελέγξτε την άδεια χÏήσης Ï€Ïιν εγκαταστήσετε το '$(^NameDA)'. Εάν αποδέχεστε όλους τους ÏŒÏους, κάντε κλικ στο Συμφωνώ. +# ^LicenseTextCB +Ελέγξτε την άδεια χÏήσης Ï€Ïιν εγκαταστήσετε το '$(^NameDA)'. Εάν αποδέχεστε όλους τους ÏŒÏους, κάντε κλικ στην επιλογή παÏακάτω. $_CLICK +# ^LicenseTextRB +Ελέγξτε την άδεια χÏήσης Ï€Ïιν εγκαταστήσετε το '$(^NameDA)'. Εάν αποδέχεστε όλους τους ÏŒÏους, κάντε κλικ στην Ï€Ïώτη επιλογή παÏακάτω. $_CLICK +# ^UnLicenseText +Ελέγξτε την άδεια χÏήσης Ï€Ïιν απεγκαταστήσετε το '$(^NameDA)'. Εάν αποδέχεστε όλους τους ÏŒÏους, κάντε κλικ στο Συμφωνώ. +# ^UnLicenseTextCB +Ελέγξτε την άδεια χÏήσης Ï€Ïιν απεγκαταστήσετε το '$(^NameDA)'. Εάν αποδέχεστε όλους τους ÏŒÏους, κάντε κλικ στην επιλογή παÏακάτω. $_CLICK +# ^UnLicenseTextRB +Ελέγξτε την άδεια χÏήσης Ï€Ïιν απεγκαταστήσετε το '$(^NameDA)'. Εάν αποδέχεστε όλους τους ÏŒÏους, κάντε κλικ στην Ï€Ïώτη επιλογή παÏακάτω. $_CLICK +# ^Custom +ΠÏοσαÏμοσμένη +# ^ComponentsText +Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε και αποεπιλέξτε τα στοιχεία που δε θέλετε να εγκαταστήσετε. $_CLICK +# ^ComponentsSubText1 +Επιλέξτε Ï„Ïπο εγκατάστασης: +# ^ComponentsSubText2_NoInstTypes +Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε: +# ^ComponentsSubText2 +Ή, επιλέξτε τα Ï€ÏοαιÏετικά στοιχεία που θέλετε να εγκαταστήσετε: +# ^UnComponentsText +Επιλέξτε τα στοιχεία που θέλετε να απεγκαταστήσετε και αποεπιλέξτε τα στοιχεία που δε θέλετε να απεγκαταστήσετε. $_CLICK +# ^UnComponentsSubText1 +Επιλέξτε Ï„Ïπο απεγκατάστασης: +# ^UnComponentsSubText2_NoInstTypes +Επιλέξτε τα στοιχεία που θέλετε να απεγκαταστήσετε: +# ^UnComponentsSubText2 +Ή, επιλέξτε τα Ï€ÏοαιÏετικά στοιχεία που θέλετε να απεγκαταστήσετε: +# ^DirText +Το Ï€ÏόγÏαμμα εγκατάστασης θα εγκαταστήσει το '$(^NameDA)' στον παÏακάτω φάκελο. Για να το εγκαταστήσετε σε έναν άλλο φάκελο, κάντε κλικ στο Αναζήτηση και επιλέξτε κάποιον άλλο φάκελο. $_CLICK +# ^DirSubText +Φάκελος Εγκατάστασης +# ^DirBrowseText +Επιλέξτε το φάκελο εγκατάστασης για το '$(^NameDA)': +# ^UnDirText +Το Ï€ÏόγÏαμμα εγκατάστασης θα απεγκαταστήσει το '$(^NameDA)' από τον παÏακάτω φάκελο. Για να απεγκαταστήσετε από έναν άλλο φάκελο, κάντε κλικ στο Αναζήτηση και επιλέξτε κάποιον άλλο φάκελο. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Επιλέξτε το φάκελο απεγκατάστασης για το '$(^NameDA)': +# ^SpaceAvailable +"Διαθέσιμος χώÏος: " +# ^SpaceRequired +"ΑπαιτοÏμενος χώÏος: " +# ^UninstallingText +Το '$(^NameDA)' θα απεγκατασταθεί από τον ακόλουθο φάκελο. $_CLICK +# ^UninstallingSubText +Απεγκατάστ. από: +# ^FileError +Σφάλμα κατά το άνοιγμα αÏχείου για εγγÏαφή: \r\n\t"$0"\r\nΕπιλέξτε ματαίωση για να ματαιώσετε την εγκατάσταση,\r\nεπανάληψη για να δοκιμάσετε να γÏάψετε το αÏχείο πάλι, ή\r\nπαÏάβλεψη για να παÏαλείψετε αυτό το αÏχείο. +# ^FileError_NoIgnore +Σφάλμα κατά το άνοιγμα αÏχείου για εγγÏαφή: \r\n\t"$0"\r\nΕπιλέξτε επανάληψη για να δοκιμάσετε να γÏάψετε το αÏχείο πάλι, ή\r\nματαίωση για να ματαιώσετε την εγκατάσταση. +# ^CantWrite +"Αδυναμία εγγÏαφής: " +# ^CopyFailed +ΑντιγÏαφή απέτυχε +# ^CopyTo +"ΑντιγÏαφή στο " +# ^Registering +"ΚαταχώÏηση: " +# ^Unregistering +"ΚατάÏγηση καταχώÏησης: " +# ^SymbolNotFound +"Αδυναμία εÏÏεσης συμβόλου: " +# ^CouldNotLoad +"Αδυναμία φόÏτωσης: " +# ^CreateFolder +"ΔημιουÏγία φακέλου: " +# ^CreateShortcut +"ΔημιουÏγία συντόμευσης: " +# ^CreatedUninstaller +"ΔημιουÏγία Ï€ÏογÏάμματος απεγκατάστασης: " +# ^Delete +"ΔιαγÏαφή αÏχείου: " +# ^DeleteOnReboot +"ΔιαγÏαφή στην επανεκκίνηση: " +# ^ErrorCreatingShortcut +"Σφάλμα στη δημιουÏγία συντόμευσης: " +# ^ErrorCreating +"Σφάλμα στη δημιουÏγία: " +# ^ErrorDecompressing +Σφάλμα στην αποσυμπίεση δεδομένων! ΚατεστÏαμμένο Ï€ÏόγÏαμμα εγκατάστασης; +# ^ErrorRegistering +Σφάλμα καταχώÏησης του DLL +# ^ExecShell +"Εκτέλεση (ExecShell): " +# ^Exec +"Εκτέλεση: " +# ^Extract +"Αποσυμπίεση: " +# ^ErrorWriting +"Αποσυμπίεση: σφάλμα εγγÏαφής στο αÏχείο " +# ^InvalidOpcode +Εγκατάσταση κατεστÏαμμένη: μη-έγκυÏο opcode +# ^NoOLE +"Όχι OLE για το: " +# ^OutputFolder +"Φάκελος εξόδου: " +# ^RemoveFolder +"ΔιαγÏαφή φακέλου: " +# ^RenameOnReboot +"Μετονομασία στην επανεκκίνηση: " +# ^Rename +"Μετονομασία: " +# ^Skipped +"ΠαÏαλείφθηκε: " +# ^CopyDetails +ΑντιγÏαφή λεπτομεÏειών στο ΠÏόχειÏο +# ^LogInstall +ΚαταγÏαφή διαδικασίας εγκατάστασης +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Greek.nsh b/tools/Contrib/Language files/Greek.nsh new file mode 100644 index 0000000..50628d8 --- /dev/null +++ b/tools/Contrib/Language files/Greek.nsh @@ -0,0 +1,121 @@ +;Language: Greek (1032) +;By Makidis N. Michael - http://dias.aueb.gr/~p3010094/ + +!insertmacro LANGFILE "Greek" = "Ελληνικά" "Ellinika" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Καλώς ήλθατε στην Εγκατάσταση του '$(^NameDA)'" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ο οδηγός αυτός θα σας καθοδηγήσει κατά τη διάÏκεια της εγκατάστασης του '$(^NameDA)'.$\r$\n$\r$\nΣυνιστάται να κλείσετε όλες τις άλλες εφαÏμογές Ï€Ïιν ξεκινήσετε την Εγκατάσταση. Αυτό θα επιτÏέψει στην Εγκατάσταση να ενημεÏώσει τα σχετικά αÏχεία συστήματος χωÏίς την επανεκκίνηση του υπολογιστή σας.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Καλώς ήλθατε στον οδηγό απεγκατ. του '$(^NameDA)'" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ο οδηγός αυτός θα σας καθοδηγήσει κατά τη διάÏκεια της απεγκατάστασης του '$(^NameDA)'.$\r$\n$\r$\nΠÏιν ξεκινήσετε την απεγκατάσταση, βεβαιωθείτε ότι το '$(^NameDA)' δεν Ï„Ïέχει.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Συμφωνία Άδειας ΧÏήσης" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ελέγξτε την άδεια χÏήσης Ï€Ïιν εγκαταστήσετε το '$(^NameDA)'." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Εάν αποδέχεστε τους ÏŒÏους της άδειας χÏήσης, κάντε κλικ στο Συμφωνώ για να συνεχίσετε. ΠÏέπει να αποδεχθείτε τη συμφωνία για να εγκαταστήσετε το '$(^NameDA)'." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Εάν αποδέχεστε τους ÏŒÏους της άδειας χÏήσης, κάντε κλικ στην επιλογή παÏακάτω. ΠÏέπει να αποδεχθείτε τη συμφωνία για να εγκαταστήσετε το '$(^NameDA)'. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Εάν αποδέχεστε τους ÏŒÏους της άδειας χÏήσης, κάντε κλικ στην Ï€Ïώτη επιλογή παÏακάτω. ΠÏέπει να αποδεχθείτε τη συμφωνία για να εγκαταστήσετε το '$(^NameDA)'. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Συμφωνία Άδειας ΧÏήσης" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Ελέγξτε την άδεια χÏήσης Ï€Ïιν απεγκαταστήσετε το '$(^NameDA)'." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Εάν αποδέχεστε τους ÏŒÏους της άδειας χÏήσης, κάντε κλικ στο Συμφωνώ για να συνεχίσετε. ΠÏέπει να αποδεχθείτε τη συμφωνία για να απεγκαταστήσετε το '$(^NameDA)'." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Εάν αποδέχεστε τους ÏŒÏους της άδειας χÏήσης, κάντε κλικ στην επιλογή παÏακάτω. ΠÏέπει να αποδεχθείτε τη συμφωνία για να απεγκαταστήσετε το '$(^NameDA)'. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Εάν αποδέχεστε τους ÏŒÏους της άδειας χÏήσης, κάντε κλικ στην Ï€Ïώτη επιλογή παÏακάτω. ΠÏέπει να αποδεχθείτε τη συμφωνία για να απεγκαταστήσετε το '$(^NameDA)'. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Πατήστε το Page Down για να δείτε το υπόλοιπο της άδειας χÏήσης." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Επιλογή Στοιχείων" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Επιλέξτε τα στοιχεία του '$(^NameDA)' που θέλετε να εγκαταστήσετε." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Επιλογή Στοιχείων" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Επιλέξτε τα στοιχεία του '$(^NameDA)' που θέλετε να απεγκαταστήσετε." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ΠεÏιγÏαφή" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ΠεÏάστε το δείκτη του Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï Ï€Î¬Î½Ï‰ από ένα στοιχείο για να δείτε την πεÏιγÏαφή του." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Επιλέξτε ένα στοιχείο για να δείτε την πεÏιγÏαφή του." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Επιλογή Θέσης Εγκατάστασης" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Επιλέξτε το φάκελο μέσα στον οποίο θα εγκατασταθεί το '$(^NameDA)'." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Επιλογή Θέσης Απεγκατάστασης" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Επιλέξτε το φάκελο από τον οποίο θα απεγκατασταθεί το '$(^NameDA)'." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Εγκατάσταση Σε Εξέλιξη" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "ΠαÏακαλώ πεÏιμένετε όσο το '$(^NameDA)' εγκαθίσταται." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Η Εγκατάσταση ΟλοκληÏώθηκε" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Η εγκατάσταση ολοκληÏώθηκε επιτυχώς." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Η Εγκατάσταση Διακόπηκε" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Η εγκατάσταση δεν ολοκληÏώθηκε επιτυχώς." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Απεγκατάσταση Σε Εξέλιξη" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "ΠαÏακαλώ πεÏιμένετε όσο το '$(^NameDA)' απεγκαθίσταται." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Η Απεγκατάσταση ΟλοκληÏώθηκε" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Η απεγκατάσταση ολοκληÏώθηκε επιτυχώς." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Η Απεγκατάσταση Διακόπηκε" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Η απεγκατάσταση δεν ολοκληÏώθηκε επιτυχώς." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "ΟλοκλήÏωση της Εγκατάστασης του '$(^NameDA)'" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Το '$(^NameDA)' εγκαταστάθηκε στον υπολογιστή σας.$\r$\n$\r$\nΚάντε κλικ στο Τέλος για να κλείσετε αυτόν τον οδηγό." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "ΠÏέπει να γίνει επανεκκίνηση του υπολογιστή σας για να ολοκληÏωθεί η εγκατάσταση του '$(^NameDA)'. Θέλετε να επανεκκινήσετε τον υπολογιστή σας Ï„ÏŽÏα;" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "ΟλοκλήÏωση της Απεγκατάστασης του '$(^NameDA)'" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Το '$(^NameDA)' απεγκαταστάθηκε από τον υπολογιστή σας.$\r$\n$\r$\nΚάντε κλικ στο Τέλος για να κλείσετε αυτόν τον οδηγό." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "ΠÏέπει να γίνει επανεκκίνηση του υπολογιστή σας για να ολοκληÏωθεί η απεγκατάσταση του '$(^NameDA)'. Θέλετε να επανεκκινήσετε τον υπολογιστή σας Ï„ÏŽÏα;" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Îα γίνει επανεκκίνηση Ï„ÏŽÏα" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Θα επανεκκινήσω τον υπολογιστή μου αÏγότεÏα" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Εκτέλεση του '$(^NameDA)'" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Εμφάνιση του &αÏχείου Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Τέλος" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Επιλογή Φακέλου για το ÎœÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξη" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Επιλέξτε ένα φάκελο του Î¼ÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξη για τις συντομεÏσεις του '$(^NameDA)'." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Επιλέξτε ένα φάκελο του Î¼ÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξη για τις συντομεÏσεις του Ï€ÏογÏάμματος. ΜποÏείτε επίσης να εισάγετε ένα όνομα για να δημιουÏγήσετε ένα νέο φάκελο." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Îα μη δημιουÏγηθοÏν συντομεÏσεις" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Απεγκατάσταση του '$(^NameDA)'" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "ΑφαίÏεση του '$(^NameDA)' από τον υπολογιστή σας." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Είστε σίγουÏοι πως θέλετε να τεÏματίσετε την εγκατάσταση του '$(^Name)';" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Είστε σίγουÏοι πως θέλετε να τεÏματίσετε την απεγκατάσταση του '$(^Name)';" +!endif diff --git a/tools/Contrib/Language files/Hebrew.nlf b/tools/Contrib/Language files/Hebrew.nlf new file mode 100644 index 0000000..cf0af87 --- /dev/null +++ b/tools/Contrib/Language files/Hebrew.nlf @@ -0,0 +1,190 @@ +# Hebrew NSIS language file +NLF v6 +# Language ID +1037 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1255 +# RTL - anything else than RTL means LTR +RTL +# Translation by Amir Szekely (aka KiCHiK), fixed by Yaron Shahrabani +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +התקנת $(^Name) +# ^UninstallCaption +הסרת $(^Name) +# ^LicenseSubCaption +: ×”×¡×›× ×¨×™×©×•×™ +# ^ComponentsSubCaption +: ×פשרויות התקנה +# ^DirSubCaption +: תיקיית התקנה +# ^InstallingSubCaption +: מתקין +# ^CompletedSubCaption +: ההתקנה הושלמה +# ^UnComponentsSubCaption +: ×פשרויות הסרה +# ^UnDirSubCaption +: תיקייה להסרה +# ^ConfirmSubCaption +: ×ישור הסרה +# ^UninstallingSubCaption +: מסיר +# ^UnCompletedSubCaption +: ההסרה הושלמה +# ^BackBtn +< ×”&×§×•×“× +# ^NextBtn +×”&×‘× > +# ^AgreeBtn +×× ×™ &×ž×¡×›×™× +# ^AcceptBtn +×× ×™ &×ž×¡×›×™× ×œ×ª× ××™ ×”×¡×›× ×”×¨×™×©×•×™ +# ^DontAcceptBtn +×× ×™ &×œ× ×ž×¡×›×™× ×œ×ª× ××™ ×”×¡×›× ×”×¨×™×©×•×™ +# ^InstallBtn +&התקן +# ^UninstallBtn +&הסר +# ^CancelBtn +ביטול +# ^CloseBtn +סגור& +# ^BrowseBtn +&עיין... +# ^ShowDetailsBtn +×”&צג ×¤×¨×˜×™× +# ^ClickNext +לחץ על ×”×‘× ×›×“×™ להמשיך. +# ^ClickInstall +לחץ על התקן כדי להתחיל ×ת ההתקנה. +# ^ClickUninstall +לחץ על הסר כדי להתחיל ×ת ההסרה. +# ^Name +×©× +# ^Completed +הפעולה הושלמה +# ^LicenseText +×× × ×¡×§×•×¨ ×ת ×”×¡×›× ×”×¨×™×©×•×™ לפני התקנת $(^NameDA). ×× ×”×™× ×š מקבל ×ת כל תנ××™ ההסכ×, לחץ '×× ×™ מסכי×'. +# ^LicenseTextCB +×× × ×¡×§×•×¨ ×ת ×”×¡×›× ×”×¨×™×©×•×™ לפני התקנת $(^NameDA). ×× ×”×™× ×š מקבל ×ת כל תנ××™ ההסכ×, סמן ×ת תיבת הסימון שלהלן. $_CLICK +# ^LicenseTextRB +×× × ×¡×§×•×¨ ×ת ×”×¡×›× ×”×¨×™×©×•×™ לפני התקנת $(^NameDA). ×× ×”×™× ×š מקבל ×ת כל תנ××™ ההסכ×, בחר ב×פשרות הר×שונה שלהלן. $_CLICK +# ^UnLicenseText +×× × ×¡×§×•×¨ ×ת ×”×¡×›× ×”×¨×™×©×•×™ לפני הסרת $(^NameDA). ×× ×”×™× ×š ×ž×¡×›×™× ×œ×›×œ תנ××™ ההסכ×, לחץ '×× ×™ מסכי×'. +# ^UnLicenseTextCB +×× × ×¡×§×•×¨ ×ת ×”×¡×›× ×”×¨×™×©×•×™ לפני הסרת $(^NameDA). ×× ×”×™× ×š ×ž×¡×›×™× ×œ×›×œ תנ××™ ההסכ×, סמן ×ת תיבת הסימון שלהלן. $_CLICK +# ^UnLicenseTextRB +×× × ×¡×§×•×¨ ×ת ×”×¡×›× ×”×¨×™×©×•×™ לפני הסרת $(^NameDA). ×× ×”×™× ×š ×ž×¡×›×™× ×œ×›×œ תנ××™ ההסכ×, בחר ב×פשרות הר×שונה שלהלן. $_CLICK +# ^Custom +מות×× ×ישית +# ^ComponentsText +סמן ×ת ×”×¨×›×™×‘×™× ×©×‘×¨×¦×•× ×š להתקין ובטל ×ת הסימון של ×¨×›×™×‘×™× ×©×ין ברצונך להתקין. $_CLICK +# ^ComponentsSubText1 +בחר סוג התקנה: +# ^ComponentsSubText2_NoInstTypes +בחר ×¨×›×™×‘×™× ×œ×”×ª×§× ×”: +# ^ComponentsSubText2 +×ו, בחר רכיבי רשות להתקנה: +# ^UnComponentsText +סמן ×ת ×”×¨×›×™×‘×™× ×©×‘×¨×¦×•× ×š להסיר ובטל ×ת הסימון של ×¨×›×™×‘×™× ×©×ין ברצונך להסיר. $_CLICK +# ^UnComponentsSubText1 +בחר סוג הסרה: +# ^UnComponentsSubText2_NoInstTypes +בחר ×¨×›×™×‘×™× ×œ×”×¡×¨×”: +# ^UnComponentsSubText2 +×ו, בחר רכיבי רשות להסרה: +# ^DirText +תוכנית זו תתקין ×ת $(^NameDA) לתיקייה שלהלן. כדי להתקין לתיקייה ×חרת, לחץ על 'עיין' ובחר תיקייה ×חרת. $_CLICK +# ^DirSubText +תיקיית יעד +# ^DirBrowseText +בחר תיקייה להתקנת $(^NameDA): +# ^UnDirText +תוכנית זו תסיר ×ת $(^NameDA) מהתיקייה שלהלן. כדי להסיר מתיקייה ×חרת, לחץ על 'עיין' ובחר תיקייה ×חרת. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +בחר תיקייה ממנה תוסר $(^NameDA): +# ^SpaceAvailable +"×ž×§×•× ×¤× ×•×™: " +# ^SpaceRequired +"×ž×§×•× ×“×¨×•×©: " +# ^UninstallingText +הסרת $(^NameDA) תתבצע מהתיקייה שלהלן. $_CLICK +# ^UninstallingSubText +מסיר מ: +# ^FileError +×רעה שגי××” בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על ביטול כדי לבטל ×ת ההתקנה,\r\nנסה שנית כדי לנסות לפתוח ×ת הקובץ שוב, ×ו\r\n×”×ª×¢×œ× ×›×“×™ לדלג על הקובץ +# ^FileError_NoIgnore +×רעה שגי××” בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על נסה שנית כדי לנסות לפתוח ×ת הקובץ שוב, ×ו\r\nביטול כדי לבטל ×ת התתקנה +# ^CantWrite +"×œ× × ×™×ª×Ÿ לכתוב: " +# ^CopyFailed +ההעתקה נכשלה +# ^CopyTo +העתק ל- +# ^Registering +"רוש×: " +# ^Unregistering +"ביטול רישו×: " +# ^SymbolNotFound +"סמל ×œ× × ×ž×¦×: " +# ^CouldNotLoad +"×œ× × ×™×ª×Ÿ לטעון: " +# ^CreateFolder +"צור תיקייה: " +# ^CreateShortcut +"צור קיצור דרך: " +# ^CreatedUninstaller +"מסיר התקנה נוצר: " +# ^Delete +"מחק קובץ: " +# ^DeleteOnReboot +"מחק ×חרי ×תחול: " +# ^ErrorCreatingShortcut +"שגי××” בעת יצירת קיצור דרך: " +# ^ErrorCreating +"שגי××” בעת יצירת: " +# ^ErrorDecompressing +שגי××” בעת פרישת מידע! התקנה פגומה? +# ^ErrorRegistering +שגי××” בעת ×¨×™×©×•× DLL +# ^ExecShell +"בצע פעולת-קובץ: " +# ^Exec +"בצע: " +# ^Extract +"פרוש: " +# ^ErrorWriting +"פרוש: שגי××” בעת כתיבה לקובץ " +# ^InvalidOpcode +התקנה פגומה! פקודת ביצוע שגויה +# ^NoOLE +"×ין OLE ל: " +# ^OutputFolder +"תיקיית פלט: " +# ^RemoveFolder +"הסר תיקייה: " +# ^RenameOnReboot +"שנה ×©× ×œ×חר ×תחול: " +# ^Rename +"שנה ש×: " +# ^Skipped +"דלג: " +# ^CopyDetails +העתק ×¤×¨×˜×™× ×œ×œ×•×— +# ^LogInstall +שמור ×¨×™×©×•× ×¤×¢×™×œ×•×™×•×ª ההתקנה +# ^Byte +"ב +# ^Kilo +" ק" +# ^Mega +" מ" +# ^Giga +" ×’" \ No newline at end of file diff --git a/tools/Contrib/Language files/Hebrew.nsh b/tools/Contrib/Language files/Hebrew.nsh new file mode 100644 index 0000000..5dcc80e --- /dev/null +++ b/tools/Contrib/Language files/Hebrew.nsh @@ -0,0 +1,129 @@ +;Language: Hebrew (1037) +;By Yaron Shahrabani + +!insertmacro LANGFILE "Hebrew" = "עברית" "Ivrit" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "×‘×¨×•×›×™× ×”×‘××™× ×œ×שף ההתקנה של $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "×שף ×–×” ×™× ×—×” ××ª×›× ×‘×ž×”×œ×š ההתקנה של $(^NameDA).$\r$\n$\r$\nמומלץ לסגור כל תוכנית ×חרת לפני התחלת ההתקנה. פעולה זו ת×פשר ל×שף לעדכן קבצי מערכת ×œ×œ× ×יתחול המחשב.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "×‘×¨×•×›×™× ×”×‘××™× ×œ×שף ההסרה של $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "×שף ×–×” ×™× ×—×” ××ª×›× ×‘×ž×”×œ×š ההסרה של $(^NameDA).$\r$\n$\r$\nמומלץ לסגור כל תוכנית ×חרת לפני התחלת ההסרה. פעולה זו ת×פשר ל×שף לעדכן קבצי מערכת ×œ×œ× ×יתחול המחשב.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "×”×¡×›× ×¨×™×©×•×™" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "× × ×¢×™×™×Ÿ בתנ××™ ×”×¡×›× ×”×¨×™×©×•×™ לפני התקנת $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "×× ×תה מקבל ×ת תנ××™ ההסכ×, לחץ על '×× ×™ מסכי×' כדי להמשיך. ×× ×œ× ×ª×¡×›×™× ×œ×ª× ××™ ×”×”×¡×›× ×œ× ×ª×•×›×œ להתקין ×ת $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "×× ×תה מקבל ×ת תנ××™ ההסכ×, סמן ×ת תיבת הבחירה שלהלן. עלייך לקבל ×ת תנ××™ ×”×”×¡×›× ×‘×›×“×™ להתקין ×ת $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "×× ×תה מקבל ×ת תנ××™ ההסכ×, בחר ב×פשרות הר×שונה שלהלן. עלייך לקבל ×ת ×”×”×¡×›× ×›×“×™ להתקין ×ת $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "×”×¡×›× ×¨×™×©×•×™" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "× × ×¢×™×™×Ÿ בתנ××™ ×”×¡×›× ×”×¨×™×©×•×™ לפני הסרת $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "×× ×תה מקבל ×ת תנ××™ ההסכ×, לחץ על '×× ×™ מסכי×' כדי להמשיך. ×× ×œ× ×ª×§×‘×œ ×ת תנ××™ ×”×”×¡×›× ×œ× ×ª×•×›×œ להסיר ×ת $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "×× ×תה מקבל ×ת תנ××™ ההסכ×, סמן ×ת תיבת הבחירה שלהלן. עלייך לקבל ×ת תנ××™ ×”×”×¡×›× ×›×“×™ להסיר ×ת $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "×× ×תה מקבל ×ת תנ××™ ההסכ×, בחר ב×פשרות הר×שונה שלהלן. עלייך לקבל ×ת ×”×”×¡×›× ×›×“×™ להסיר ×ת $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "כדי לצפות בש×ר ×”×¡×›× ×”×¨×™×©×•×™ לחץ על Page Down." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "בחר רכיבי×" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "בחר ×ילו ×¨×›×™×‘×™× ×©×œ $(^NameDA) ברצונך להתקין." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "בחר רכיבי×" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "בחר ×ילו תכונות של $(^NameDA) ברצונך להסיר." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "תי×ור" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "העבר ×ת העכבר מעל רכיב כלשהו בכדי לצפות בתי×ורו." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "בחר רכיב כלשהו בכדי לצפות בתי×ורו." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "בחר ×ž×™×§×•× ×œ×”×ª×§× ×”" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "בחר ×ת התיקייה בה ×תה מעוניין להתקין ×ת $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "בחר ×ž×™×§×•× ×œ×”×¡×¨×”" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "בחר ×ת התיקייה ממנה ×תה מעוניין להסיר ×ת $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "מתקין" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "×× × ×”×ž×ª×Ÿ בזמן ש-$(^NameDA) מותקן." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ההתקנה הושלמה" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "ההתקנה הושלמה במלו××”." + ${LangFileString} MUI_TEXT_ABORT_TITLE "ההתקנה בוטלה" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ההתקנה ×œ× ×”×•×©×œ×ž×” המלו××”." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "מסיר" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "×× × ×”×ž×ª×Ÿ בזמן ש-$(^NameDA) מוסר מהמחשב." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "ההסרה הושלמה" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "ההסרה הושלמה במלו××”." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "ההסרה בוטלה" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "ההסרה ×œ× ×”×•×©×œ×ž×” במלו××”." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "×ž×©×œ×™× ×ת ×שף ההתקנה של $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) הותקן בהצלחה.$\r$\n$\r$\nלחץ על ×¡×™×•× ×›×“×™ לסגור ×ת ×”×שף." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "עלייך ל×תחל ×ת המחשב כדי ×œ×¡×™×™× ×ת התקנת $(^NameDA). ×”×× ×‘×¨×¦×•× ×š ל×תחל כעת?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "×ž×©×œ×™× ×ת ×שף ההסרה של $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) הוסר בהצלחה.$\r$\n$\r$\nלחץ על ×¡×™×•× ×›×“×™ לסגור ×ת ×”×שף." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "עלייך ל×תחל ×ת המחשב כדי ×œ×¡×™×™× ×ת הסרת $(^NameDA). ×”×× ×‘×¨×¦×•× ×š ל×תחל כעת?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "×תחל כעת" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "ברצוני ל×תחל ידנית מ×וחר יותר" + ${LangFileString} MUI_TEXT_FINISH_RUN "&הרץ ×ת $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&הצג מסמך '×§×¨× ×ותי'" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&סיי×" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "בחר תיקייה בתפריט ההתחלה" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "בחר בתיקיית תפריט ההתחלה בה יווצרו קיצורי הדרך של התוכנית." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "בחר בתיקייה מתפריט ההתחלה בה ברצונך ליצור ×ת קיצורי הדרך עבור התוכנית. ב×פשרותך ×’× ×œ×”×§×œ×™×“ ×ת ×©× ×”×ª×™×§×™×™×” כדי ליצור תיקייה חדשה." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "×ל תיצור קיצורי דרך" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "הסר ×ת $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "הסר ×ת $(^NameDA) מהמחשב." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "×”×× ×תה בטוח שברצונך לצ×ת מהתקנת $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "×”×× ×תה בטוח שברצונך לצ×ת מהסרת $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "בחר משתמשי×" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "בחר ל×ילו ×ž×©×ª×ž×©×™× ×œ×”×ª×§×™×Ÿ ×ת $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "בחר ×”×× ×œ×”×ª×§×™×Ÿ ×ת $(^NameDA) לעצמך ×ו לכל ×”×ž×©×ª×ž×©×™× ×©×œ המחשב. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "התקן לכל משתמשי המחשב" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "התקן רק למשתמש שלי" +!endif diff --git a/tools/Contrib/Language files/Hindi.nlf b/tools/Contrib/Language files/Hindi.nlf new file mode 100644 index 0000000..aebcb9e --- /dev/null +++ b/tools/Contrib/Language files/Hindi.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1081 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1200 +# RTL - anything else than RTL means LTR +- +# Translation by Ryan Pretorius +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) सेटअप +# ^UninstallCaption +$(^Name) अनइनसà¥à¤Ÿà¥‰à¤² करें +# ^LicenseSubCaption +: लाइसेंस समà¤à¥Œà¤¤à¤¾ +# ^ComponentsSubCaption +: इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ के विकलà¥à¤ª +# ^DirSubCaption +: इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ फोलà¥à¤¡à¤° +# ^InstallingSubCaption +: इनसà¥à¤Ÿà¥‰à¤² कर रहे हैं +# ^CompletedSubCaption +: संपनà¥à¤¨ +# ^UnComponentsSubCaption +: अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ के विकलà¥à¤ª +# ^UnDirSubCaption +: अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ फोलà¥à¤¡à¤° +# ^ConfirmSubCaption +: पà¥à¤·à¥à¤Ÿà¤¿à¤•à¤°à¤£ +# ^UninstallingSubCaption +: अनइनसà¥à¤Ÿà¥‰à¤² कर रहे हैं +# ^UnCompletedSubCaption +: समà¥à¤ªà¤¨à¥à¤¨ +# ^BackBtn +< &पीछे +# ^NextBtn +&आगे > +# ^AgreeBtn +मैं &सहमत हूठ+# ^AcceptBtn +मैं लाइसेंस समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡à¤‚ &सà¥à¤µà¥€à¤•à¤¾à¤° करता हूठ+# ^DontAcceptBtn +मैं लाइसेंस समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° नहीं &करता हूठ+# ^InstallBtn +&इनसà¥à¤Ÿà¥‰à¤² करें +# ^UninstallBtn +&अनइनसà¥à¤Ÿà¥‰à¤² करें +# ^CancelBtn +रदà¥à¤¦ करें +# ^CloseBtn +&बंद करें +# ^BrowseBtn +बà¥à¤°à¤¾&उज करें... +# ^ShowDetailsBtn +&विवरण दिखाà¤à¤‚ +# ^ClickNext +जारी रखने के लिठआगे पर कà¥à¤²à¤¿à¤• करें। +# ^ClickInstall +इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ शà¥à¤°à¥‚ करने के लिठइनसà¥à¤Ÿà¥‰à¤² करें पर कà¥à¤²à¤¿à¤• करें। +# ^ClickUninstall +अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ शà¥à¤°à¥‚ करने के लिठअनइनसà¥à¤Ÿà¥‰à¤² करें पर कà¥à¤²à¤¿à¤• करें। +# ^Name +म +# ^Completed +समà¥à¤ªà¤¨à¥à¤¨ +# ^LicenseText +$(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस समà¤à¥Œà¤¤à¥‡ की समीकà¥à¤·à¤¾ करें। यदि आप समà¤à¥Œà¤¤à¥‡ की सभी शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो मैं सहमत हूठपर कà¥à¤²à¤¿à¤• करें। +# ^LicenseTextCB +$(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस समà¤à¥Œà¤¤à¥‡ की समीकà¥à¤·à¤¾ करें। यदि आप समà¤à¥Œà¤¤à¥‡ की सभी शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठचेक बॉकà¥à¤¸ पर कà¥à¤²à¤¿à¤• करें। $_CLICK +# ^LicenseTextRB +$(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस समà¤à¥Œà¤¤à¥‡ की समीकà¥à¤·à¤¾ करें। यदि आप समà¤à¥Œà¤¤à¥‡ की सभी शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठपहले विकलà¥à¤ª का चयन करें। $_CLICK +# ^UnLicenseText +$(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस समà¤à¥Œà¤¤à¥‡ की समीकà¥à¤·à¤¾ करें। यदि आप समà¤à¥Œà¤¤à¥‡ की सभी शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो मैं सहमत हूठपर कà¥à¤²à¤¿à¤• करें। +# ^UnLicenseTextCB +$(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस समà¤à¥Œà¤¤à¥‡ की समीकà¥à¤·à¤¾ करें। यदि आप समà¤à¥Œà¤¤à¥‡ की सभी शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठचेक बॉकà¥à¤¸ पर कà¥à¤²à¤¿à¤• करें। $_CLICK +# ^UnLicenseTextRB +$(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस समà¤à¥Œà¤¤à¥‡ की समीकà¥à¤·à¤¾ करें। यदि आप समà¤à¥Œà¤¤à¥‡ की सभी शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठपहले विकलà¥à¤ª का चयन करें। $_CLICK +# ^Custom +कसà¥à¤Ÿà¤® +# ^ComponentsText +आप जो घटक इनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं उनà¥à¤¹à¥‡à¤‚ चेक करें और आप जो घटक इनसà¥à¤Ÿà¥‰à¤² नहीं करना चाहते हैं उनà¥à¤¹à¥‡à¤‚ अनचेक करें। $_CLICK +# ^ComponentsSubText1 +इनसà¥à¤Ÿà¥‰à¤² के पà¥à¤°à¤•à¤¾à¤° का चयन करें: +# ^ComponentsSubText2_NoInstTypes +इनसà¥à¤Ÿà¥‰à¤² करने के लिठघटकों का चयन करें: +# ^ComponentsSubText2 +या उन वैकलà¥à¤ªà¤¿à¤• घटकों का चयन करें जिनà¥à¤¹à¥‡à¤‚ आप इनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं: +# ^UnComponentsText +आप जो घटक अनइनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं उनà¥à¤¹à¥‡à¤‚ चेक करें और आप जो घटक अनइनसà¥à¤Ÿà¥‰à¤² नहीं करना चाहते हैं उनà¥à¤¹à¥‡à¤‚ अनचेक करें। $_CLICK +# ^UnComponentsSubText1 +अनइनसà¥à¤Ÿà¥‰à¤² के पà¥à¤°à¤•à¤¾à¤° का चयन करें: +# ^UnComponentsSubText2_NoInstTypes +अनइनसà¥à¤Ÿà¥‰à¤² करने के लिठघटकों का चयन करें: +# ^UnComponentsSubText2 +या उन वैकलà¥à¤ªà¤¿à¤• घटकों का चयन करें जिनà¥à¤¹à¥‡à¤‚ आप अनइनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं: +# ^DirText +सेटअप $(^NameDA) को निमà¥à¤¨à¤²à¤¿à¤–ित फोलà¥à¤¡à¤° में इनसà¥à¤Ÿà¥‰à¤² करेगा। किसी भिनà¥à¤¨ फोलà¥à¤¡à¤° में इनसà¥à¤Ÿà¥‰à¤² करने के लिठबà¥à¤°à¤¾à¤‰à¤œ करें पर कà¥à¤²à¤¿à¤• करें और किसी अनà¥à¤¯ फोलà¥à¤¡à¤° का चयन करें। $_CLICK +# ^DirSubText +गंतवà¥à¤¯ फोलà¥à¤¡à¤° +# ^DirBrowseText +$(^NameDA) को जिस फोलà¥à¤¡à¤° में इनसà¥à¤Ÿà¥‰à¤² करना है उसका चयन करें: +# ^UnDirText +सेटअप $(^NameDA) को निमà¥à¤¨à¤²à¤¿à¤–ित फोलà¥à¤¡à¤° से अनइनसà¥à¤Ÿà¥‰à¤² करेगा। किसी भिनà¥à¤¨ फोलà¥à¤¡à¤° से अनइनसà¥à¤Ÿà¥‰à¤² करने के लिठबà¥à¤°à¤¾à¤‰à¤œ करें पर कà¥à¤²à¤¿à¤• करें और किसी अनà¥à¤¯ फोलà¥à¤¡à¤° का चयन करें। $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA) को जिस फोलà¥à¤¡à¤° से अनइनसà¥à¤Ÿà¥‰à¤² करना है उसका चयन करें: +# ^SpaceAvailable +"उपलबà¥à¤§ जगह: " +# ^SpaceRequired +"अपेकà¥à¤·à¤¿à¤¤ जगह: " +# ^UninstallingText +$(^NameDA) को निमà¥à¤¨à¤²à¤¿à¤–ित फोलà¥à¤¡à¤° से अनइनसà¥à¤Ÿà¥‰à¤² किया जाà¤à¤—ा। $_CLICK +# ^UninstallingSubText +इस से अनइनसà¥à¤Ÿà¥‰à¤² कर रहे हैं: +# ^FileError +लिखने के लिठफ़ाइल खोलने में तà¥à¤°à¥à¤Ÿà¤¿: \r\n\r\n$0\r\n\r\nइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ रोकने के लिठनिरसà¥à¤¤ करें पर कà¥à¤²à¤¿à¤• करें,\r\nफिर से पà¥à¤°à¤¯à¤¾à¤¸ करने के लिठपà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ करें, या\r\nइस फाइल को छोड़ने के लिठनजरंदाज करें। +# ^FileError_NoIgnore +लिखने के लिठफ़ाइल खोलने में तà¥à¤°à¥à¤Ÿà¤¿: \r\n\r\n$0\r\n\r\nफिर से पà¥à¤°à¤¯à¤¾à¤¸ करने के लिठपà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ करें पर कà¥à¤²à¤¿à¤• करें, या\r\nइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ रोकने के लिठरदà¥à¤¦ करें। +# ^CantWrite +"नहीं लिख सकते: " +# ^CopyFailed" +कॉपी करना विफल रहा +# ^CopyTo" +"में कॉपी करें " +# ^Registering +"पंजीकृत कर रहे हैं: " +# ^Unregistering +"पंजीकरण रदà¥à¤¦ कर रहे हैं: " +# ^SymbolNotFound +"पà¥à¤°à¤¤à¥€à¤• नहीं ढूंढ सके: " +# ^CouldNotLoad +"लोड नहीं कर सके: " +# ^CreateFolder +"फोलà¥à¤¡à¤° बनाà¤à¤‚: " +# ^CreateShortcut +"शॉरà¥à¤Ÿà¤•à¤Ÿ बनाà¤à¤‚: " +# ^CreatedUninstaller +"अनइंसà¥à¤Ÿà¤¾à¤²à¤° बनाया: " +# ^Delete +"फाइल हटाà¤à¤‚: " +# ^DeleteOnReboot" +"रीबूट करने पर हटाà¤à¤‚: " +# ^ErrorCreatingShortcut +"शॉरà¥à¤Ÿà¤•à¤Ÿ बनाने में तà¥à¤°à¥à¤Ÿà¤¿: " +# ^ErrorCreating +"बनाने में तà¥à¤°à¥à¤Ÿà¤¿: " +# ^ErrorDecompressing +डेटा असंपीड़ित करने पर तà¥à¤°à¥à¤Ÿà¤¿! दूषित इंसà¥à¤Ÿà¤¾à¤²à¤°? +# ^ErrorRegistering +DLL पंजीकृत करने पर तà¥à¤°à¥à¤Ÿà¤¿ +# ^ExecShell +"शेल निषà¥à¤ªà¤¾à¤¦à¤¿à¤¤ करें: " +# ^Exec +निषà¥à¤ªà¤¾à¤¦à¤¿à¤¤ करें: " +# ^Extract +"निकालें: " +# ^ErrorWriting +"निकालें: फाइल में लिखते समय तà¥à¤°à¥à¤Ÿà¤¿ " +# ^InvalidOpcode +इंसà¥à¤Ÿà¤¾à¤²à¤° दूषित: अवैध ऑपकोड +# ^NoOLE +"इसके लिठकोई OLE नहीं: " +# ^OutputFolder +"आउटपà¥à¤Ÿ फोलà¥à¤¡à¤°: " +# ^RemoveFolder +"फोलà¥à¤¡à¤° निकालें: " +# ^RenameOnReboot +"रीबूट करने पर नाम बदलें: " +# ^Rename +"नाम बदलें: " +# ^Skipped +"छोड़ा गया: " +# ^CopyDetails +कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ पर विवरण कॉपी करें +# ^LogInstall +लॉग इनसà¥à¤Ÿà¥‰à¤² पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G \ No newline at end of file diff --git a/tools/Contrib/Language files/Hindi.nsh b/tools/Contrib/Language files/Hindi.nsh new file mode 100644 index 0000000..ffbd653 --- /dev/null +++ b/tools/Contrib/Language files/Hindi.nsh @@ -0,0 +1,129 @@ +;Language: HindÄ« (Devanagari script) (1081) +;By Ryan Pretorius + +!insertmacro LANGFILE "Hindi" = "हिनà¥à¤¦à¥€" "Hindi" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) सेटअप में आपका सà¥à¤µà¤¾à¤—त है" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "सेटअप $(^NameDA) के इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ के दौरान आपका मारà¥à¤—दरà¥à¤¶à¤¨ करेगा।$\r$\n$\r$\nयह सिफारिश की जाती है कि सेटअप शà¥à¤°à¥‚ करने से पहले आप अनà¥à¤¯ सभी अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— बंद कर दें। इससे आपके कंपà¥à¤¯à¥‚टर को रीबूट किठबिना पà¥à¤°à¤¾à¤¸à¤‚गिक सिसà¥à¤Ÿà¤® फ़ाइलों को अपडेट करना संभव हो जाà¤à¤—ा।$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) के अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ में आपका सà¥à¤µà¤¾à¤—त है" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "सेटअप $(^NameDA) के अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ के दौरान आपका मारà¥à¤—दरà¥à¤¶à¤¨ करेगा।$\r$\n$\r$\nअनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ शà¥à¤°à¥‚ करने से पहले सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि $(^NameDA) चल न रहा हो।$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "लाइसेंस समà¤à¥Œà¤¤à¤¾" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस शरà¥à¤¤à¥‹à¤‚ की समीकà¥à¤·à¤¾ करें।" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "यदि आप समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो जारी रखने के लिठमैं सहमत हूठपर कà¥à¤²à¤¿à¤• करें। आपको $(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने के लिठसमà¤à¥Œà¤¤à¥‡ को सà¥à¤µà¥€à¤•à¤¾à¤° करना होगा।" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "यदि आप समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठचेक बॉकà¥à¤¸ पर कà¥à¤²à¤¿à¤• करें। आपको $(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने के लिठसमà¤à¥Œà¤¤à¥‡ को सà¥à¤µà¥€à¤•à¤¾à¤° करना होगा। $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "यदि आप समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठपहले विकलà¥à¤ª का चयन करें। आपको $(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करने के लिठसमà¤à¥Œà¤¤à¥‡ को सà¥à¤µà¥€à¤•à¤¾à¤° करना होगा। $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "लाइसेंस समà¤à¥Œà¤¤à¤¾" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने से पहले लाइसेंस शरà¥à¤¤à¥‹à¤‚ की समीकà¥à¤·à¤¾ करें।" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "यदि आप समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो जारी रखने के लिठमैं सहमत हूठपर कà¥à¤²à¤¿à¤• करें। आपको $(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने के लिठसमà¤à¥Œà¤¤à¥‡ को सà¥à¤µà¥€à¤•à¤¾à¤° करना होगा।" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "यदि आप समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठचेक बॉकà¥à¤¸ पर कà¥à¤²à¤¿à¤• करें। आपको $(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने के लिठसमà¤à¥Œà¤¤à¥‡ को सà¥à¤µà¥€à¤•à¤¾à¤° करना होगा। $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "यदि आप समà¤à¥Œà¤¤à¥‡ की शरà¥à¤¤à¥‡ सà¥à¤µà¥€à¤•à¤¾à¤° करते हैं तो नीचे दिठगठपहले विकलà¥à¤ª का चयन करें। आपको $(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करने के लिठसमà¤à¥Œà¤¤à¥‡ को सà¥à¤µà¥€à¤•à¤¾à¤° करना होगा। $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "शेष समà¤à¥Œà¤¤à¤¾ देखने के लिठपेज नीचे करें को दबाà¤à¤‚।" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "घटक चà¥à¤¨à¥‡à¤‚" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "$(^NameDA) की वे विशेषताà¤à¤‚ चà¥à¤¨à¥‡à¤‚ जो आप इनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं।" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "घटक चà¥à¤¨à¥‡à¤‚" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA) की वे विशेषताà¤à¤‚ चà¥à¤¨à¥‡à¤‚ जो आप अनइनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं।" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "विवरण" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "उस घटक पर अपना माउस रखें जिसका आप विवरण देखना चाहते हैं।" + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "उस घटक का चयन करें जिसका आप विवरण देखना चाहते हैं।" + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "इनसà¥à¤Ÿà¥‰à¤² करने का सà¥à¤¥à¤¾à¤¨ चà¥à¤¨à¥‡à¤‚" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "वह फोलà¥à¤¡à¤° चà¥à¤¨à¥‡à¤‚ जिसमें $(^NameDA) को इनसà¥à¤Ÿà¥‰à¤² करना है।" +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "अनइनसà¥à¤Ÿà¥‰à¤² करने का सà¥à¤¥à¤¾à¤¨ चà¥à¤¨à¥‡à¤‚" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "वह फोलà¥à¤¡à¤° चà¥à¤¨à¥‡à¤‚ जिससे $(^NameDA) को इनसà¥à¤Ÿà¥‰à¤² करना है।" +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "इनसà¥à¤Ÿà¥‰à¤² कर रहे हैं" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) इनसà¥à¤Ÿà¥‰à¤² होने तक पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें।" + ${LangFileString} MUI_TEXT_FINISH_TITLE "इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ समà¥à¤ªà¤¨à¥à¤¨" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "सेटअप सफलतापूरà¥à¤µà¤• पूरà¥à¤£ हà¥à¤†à¥¤" + ${LangFileString} MUI_TEXT_ABORT_TITLE "इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ निरसà¥à¤¤ किया गया" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "सेटअप सफलतापूरà¥à¤µà¤• पूरà¥à¤£ नहीं हà¥à¤†à¥¤" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "अनइनसà¥à¤Ÿà¥‰à¤² कर रहे हैं" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² होने तक पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें।" + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ समà¥à¤ªà¤¨à¥à¤¨" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ सफलतापूरà¥à¤µà¤• पूरà¥à¤£ हà¥à¤†à¥¤" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ निरसà¥à¤¤ किया गया" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ सफलतापूरà¥à¤µà¤• पूरà¥à¤£ नहीं हà¥à¤†à¥¤" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) का सेटअप पूरा कर रहे हैं" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "आपके कंपà¥à¤¯à¥‚टर पर $(^NameDA) को इनसà¥à¤Ÿà¥‰à¤² कर दिया गया है।$\r$\n$\r$\nसेटअप बंद करने के लिठसमापà¥à¤¤ करें पर कà¥à¤²à¤¿à¤• करें।" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) के इंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ को पूरा करने के लिठआपके कंपà¥à¤¯à¥‚टर को फिर से शà¥à¤°à¥‚ करना होगा। कà¥à¤¯à¤¾ आप अभी रीबूट करना चाहते हैं?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) का अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ पूरा कर रहे हैं" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "आपके कंपà¥à¤¯à¥‚टर पर $(^NameDA) को अनइनसà¥à¤Ÿà¥‰à¤² कर दिया गया है।$\r$\n$\r$\nसेटअप बंद करने के लिठसमापà¥à¤¤ करें पर कà¥à¤²à¤¿à¤• करें।" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) के अनइंसà¥à¤Ÿà¤¾à¤²à¥‡à¤¶à¤¨ को पूरा करने के लिठआपके कंपà¥à¤¯à¥‚टर को फिर से शà¥à¤°à¥‚ करना होगा। कà¥à¤¯à¤¾ आप अभी रीबूट करना चाहते हैं?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "अभी रीबूट करें" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "मैं बाद में मैनà¥à¤¯à¥à¤…ली रीबूट करना चाहता हूà¤" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) &चलाà¤à¤‚" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "रीडमी &दिखाà¤à¤‚" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&समापà¥à¤¤ करें" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ मेनू फोलà¥à¤¡à¤° चà¥à¤¨à¥‡à¤‚" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "$(^NameDA) के शॉरà¥à¤Ÿà¤•à¤Ÿ के लिठसà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ मेनू फोलà¥à¤¡à¤° चà¥à¤¨à¥‡à¤‚।" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "उस सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ मेनू फोलà¥à¤¡à¤° का चयन करें जिसमें आप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® के शॉरà¥à¤Ÿà¤•à¤Ÿ बनाना चाहते हैं। आप नया फोलà¥à¤¡à¤° बनाने के लिठनाम भी पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ कर सकते हैं।" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "शॉरà¥à¤Ÿà¤•à¤Ÿ न बनाà¤à¤‚" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA) अनइनसà¥à¤Ÿà¥‰à¤² करें" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "अपने कंपà¥à¤¯à¥‚टर से $(^NameDA) निकालें।" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "कà¥à¤¯à¤¾ आप वाकई $(^Name) का सेटअप छोड़ना चाहते हैं?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "कà¥à¤¯à¤¾ आप वाकई $(^Name) को अनइनसà¥à¤Ÿà¥‰à¤² करना छोड़ना चाहते हैं?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "उपयोगकरà¥à¤¤à¤¾ चà¥à¤¨à¥‡à¤‚" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "वे उपयोगकरà¥à¤¤à¤¾ चà¥à¤¨à¥‡à¤‚ जिनके लिठआप $(^NameDA) इनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं।" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "चयन करें कि कà¥à¤¯à¤¾ आप $(^NameDA) को केवल अपने लिठइनसà¥à¤Ÿà¥‰à¤² करना चाहते हैं या इस कंपà¥à¤¯à¥‚टर के सभी उपयोगकरà¥à¤¤à¤¾à¤“ं के लिà¤à¥¤ $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "इस कंपà¥à¤¯à¥‚टर का उपयोग करने वाले किसी भी वà¥à¤¯à¤•à¥à¤¤à¤¿ के लिठइनसà¥à¤Ÿà¥‰à¤² करें" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "केवल मेरे लिठइनसà¥à¤Ÿà¥‰à¤² करें" +!endif diff --git a/tools/Contrib/Language files/Hungarian.nlf b/tools/Contrib/Language files/Hungarian.nlf new file mode 100644 index 0000000..38e92e9 --- /dev/null +++ b/tools/Contrib/Language files/Hungarian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +1038 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Soft-Trans Bt. (V2) +# Translation by Orfanik Kft. (V3-V6) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) TelepítÅ‘ +# ^UninstallCaption +$(^Name) Eltávolító +# ^LicenseSubCaption +: LicencszerzÅ‘dés +# ^ComponentsSubCaption +: Telepítési lehetÅ‘ségek +# ^DirSubCaption +: Célmappa +# ^InstallingSubCaption +: Fájlok telepítése +# ^CompletedSubCaption +: Kész +# ^UnComponentsSubCaption +: Eltávolítási lehetÅ‘ségek +# ^UnDirSubCaption +: Eltávolítás mappája +# ^ConfirmSubCaption +: MegerÅ‘sítés +# ^UninstallingSubCaption +: Fájlok eltávolítása +# ^UnCompletedSubCaption +: Kész +# ^BackBtn +< &Vissza +# ^NextBtn +&Tovább > +# ^AgreeBtn +&Elfogadom +# ^AcceptBtn +&Elfogadom a LicencszerzÅ‘dés feltételeit +# ^DontAcceptBtn +&Nem fogadom el a LicencszerzÅ‘dés feltételeit +# ^InstallBtn +&Telepítés +# ^UninstallBtn +&Eltávolítás +# ^CancelBtn +&Mégse +# ^CloseBtn +&Bezárás +# ^BrowseBtn +&Tallózás... +# ^ShowDetailsBtn +&Részletek +# ^ClickNext +Kattintson a Tovább-ra a folytatáshoz. +# ^ClickInstall +Kattintson a Telepítésre a telepítéshez. +# ^ClickUninstall +Kattintson az Eltávolításra az eltávolításhoz. +# ^Name +Név +# ^Completed +Kész +# ^LicenseText +A(z) $(^NameDA) telepítése elÅ‘tt tekintse át a szerzÅ‘dés feltételeit. Ha elfogadja a szerzÅ‘dés valamennyi feltételét, az Elfogadom gombbal folytathatja. +# ^LicenseTextCB +A(z) $(^NameDA) telepítése elÅ‘tt tekintse át a szerzÅ‘dés feltételeit. Ha elfogadja a szerzÅ‘dés valamennyi feltételét, jelölje be a JelölÅ‘négyzeten. $_CLICK +# ^LicenseTextRB +A(z) $(^NameDA) telepítése elÅ‘tt tekintse át a szerzÅ‘dés feltételeit. Ha elfogadja a szerzÅ‘dés valamennyi feltételét, válassza az elsÅ‘ lehetÅ‘séget. $_CLICK +# ^UnLicenseText +A(z) $(^NameDA) eltávolítása elÅ‘tt tekintse át a szerzÅ‘dés feltételeit. Ha elfogadja a szerzÅ‘dés valamennyi feltételét, az Elfogadom gombbal folytathatja. +# ^UnLicenseTextCB +A(z) $(^NameDA) eltávolítása elÅ‘tt tekintse át a szerzÅ‘dés feltételeit. Ha elfogadja a szerzÅ‘dés valamennyi feltételét, jelölje be a JelölÅ‘négyzeten. $_CLICK +# ^UnLicenseTextRB +A(z) $(^NameDA) eltávolítása elÅ‘tt tekintse át a szerzÅ‘dés feltételeit. Ha elfogadja a szerzÅ‘dés valamennyi feltételét, válassza az elsÅ‘ lehetÅ‘séget. $_CLICK +# ^Custom +Egyéni +# ^ComponentsText +Jelölje be azokat az összetevÅ‘ket amelyeket telepíteni kíván és törölje a jelölést a nem kívánt összetevÅ‘knél. $_CLICK +# ^ComponentsSubText1 +Válassza ki a telepítés típusát: +# ^ComponentsSubText2_NoInstTypes +Válassza ki a telepítendÅ‘ összetevÅ‘ket: +# ^ComponentsSubText2 +vagy, jelölje ki a választható összetevÅ‘k közül a telepíteni kívánta(ka)t: +# ^UnComponentsText +Jelölje be azokat az összetevÅ‘ket amelyeket el kíván távolítani és törölje a jelölést az eltávolítani nem kívánt összetevÅ‘knél. $_CLICK +# ^UnComponentsSubText1 +Válassza ki az Eltávolítás típusát: +# ^UnComponentsSubText2_NoInstTypes +Válassza ki az eltávolítandó összetevÅ‘ket: +# ^UnComponentsSubText2 +vagy, jelölje ki a választható összetevÅ‘k közül az eltávolítani kívánta(ka)t: +# ^DirText +A $(^NameDA) a következÅ‘ mappába kerül. Másik mappa választásához kattintson a Tallózás gombra. $_CLICK +# ^DirSubText +Telepítés helye +# ^DirBrowseText +A(z) $(^NameDA) telepítési helyének kiválasztása: +# ^UnDirText +A(z) $(^NameDA) eltávolítása a következÅ‘ mappából. Másik mappa választásához kattintson a Tallózás gombra. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Válassza ki, hogy a $(^NameDA) melyik mappából kerüljön eltávolításra: +# ^SpaceAvailable +"Szabad terület: " +# ^SpaceRequired +"Helyigény: " +# ^UninstallingText +A(z) $(^NameDA) eltávolítása következik a számítógéprÅ‘l. $_CLICK +# ^UninstallingSubText +Eltávolítás helye: +# ^FileError +Hiba történt a fájl írásra történÅ‘ megnyitásakor: \r\n\t"$0"\r\nA Mégse gomb megnyomásával megszakíthatja a telepítést,\r\naz Ismét gombbal megismételheti a fájl írását,\r\na Kihagyás gombbal kihagyhatja ezt a fájlt. +# ^FileError_NoIgnore +Hiba történt a fájl írásra történÅ‘ megnyitásakor: \r\n\t"$0"\r\nAz Újra gomb megnyomásával megismételheti a műveletet, vagy \r\na Mégse gombbal megszakíthatja a telepítést. +# ^CantWrite +"Nem írható: " +# ^CopyFailed +A másolás megszakadt +# ^CopyTo +"Másolás ide: " +# ^Registering +"Bejegyzés: " +# ^Unregistering +"Eltávolítás: " +# ^SymbolNotFound +"A következÅ‘ szimbólum nem található: " +# ^CouldNotLoad +"Nem tölthetÅ‘ be: " +# ^CreateFolder +"Mappa létrehozás: " +# ^CreateShortcut +"Parancsikon létrehozása: " +# ^CreatedUninstaller +"Létrehozott eltávolító: " +# ^Delete +"Törölt fájl: " +# ^DeleteOnReboot +"Rendszerindításkor törlendÅ‘: " +# ^ErrorCreatingShortcut +"Hiba a parancsikon létrehozásakor: " +# ^ErrorCreating +"Hiba a létrehozáskor: " +# ^ErrorDecompressing +Hiba az adatok kibontásakor! Megsérült a TelepítÅ‘? +# ^ErrorRegistering +Hiba a DLL regisztrálásakor +# ^ExecShell +"Végrehajtás a hozzárendeléseken keresztül: " +# ^Exec +"Végrehajtás: " +# ^Extract +"Kibontás: " +# ^ErrorWriting +"Kibontás: Hiba a fájl írásakor " +# ^InvalidOpcode +Sérült a telepítÅ‘: hibás utasítás +# ^NoOLE +"Nincs OLE: " +# ^OutputFolder +"Kimeneti mappa: " +# ^RemoveFolder +"Mappa eltávolítása: " +# ^RenameOnReboot +"Ãtnevezés rendszerindításkor: " +# ^Rename +"Ãtnevezés: " +# ^Skipped +"Kihagyott: " +# ^CopyDetails +Adatok vágólapra másolása +# ^LogInstall +TelepítÅ‘ ellenÅ‘rzÅ‘lista +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Hungarian.nsh b/tools/Contrib/Language files/Hungarian.nsh new file mode 100644 index 0000000..317f892 --- /dev/null +++ b/tools/Contrib/Language files/Hungarian.nsh @@ -0,0 +1,122 @@ +;Language: Hungarian (1038) +;Translation by Jozsef Tamas Herczeg ( - 1.61-ig), +; Lajos Molnar (Orfanik) ( 1.62 - tÅ‘l) + +!insertmacro LANGFILE "Hungarian" = "Magyar" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Ãœdvözli a(z) $(^NameDA) TelepítÅ‘ Varázsló" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "A(z) $(^NameDA) telepítése következik a számítógépre.$\r$\n$\r$\nJavasoljuk, hogy indítás elÅ‘tt zárja be a futó alkalmazásokat. Ãgy a telepítÅ‘ a rendszer újraindítása nélkül tudja frissíteni a szükséges rendszerfájlokat.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Ãœdvözli a(z) $(^NameDA) Eltávolító Varázsló" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ez a varázsló segíti a(z) $(^NameDA) eltávolításában.$\r$\n$\r$\nMielÅ‘tt elkezdi az eltávilítást gyÅ‘zÅ‘djön meg arról, hogy a(z) $(^NameDA) nem fut.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "LicencszerzÅ‘dés" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "A(z) $(^NameDA) telepítése elÅ‘tt tekintse át a szerzÅ‘dés feltételeit." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ha elfogadja a szerzÅ‘dés valamennyi feltételét, az Elfogadom gombbal folytathatja. El kell fogadnia a(z) $(^NameDA) telepítéséhez." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Amennyiben elfogadja a feltételeket, jelölje be a jelölÅ‘nényzeten. A(z) $(^NameDA) telepítéséhez el kell fogadnia a feltételeket. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Amennyiben elfogadja a feltételeket, válassza az elsÅ‘ opciót. A(z) $(^NameDA) telepítéséhez el kell fogadnia a feltételeket. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "LicencszerzÅ‘dés" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "A(z) $(^NameDA) eltávolítása elÅ‘tt tekintse át a szerzÅ‘dés feltételeit." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ha elfogadja a szerzÅ‘dés valamennyi feltételét, az Elfogadom gombbal folytathatja. El kell fogadnia a(z) $(^NameDA) eltávolításához." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Amennyiben elfogadja a feltételeket, jelölje be a jelölÅ‘nényzeten. A(z) $(^NameDA) eltávolításához el kell fogadnia a feltételeket. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Amennyiben elfogadja a feltételeket, válassza az elsÅ‘ opciót. A(z) $(^NameDA) eltávolításához el kell fogadnia a feltételeket. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "A PageDown gombbal olvashatja el a szerzÅ‘dés folytatását." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ÖsszetevÅ‘k kiválasztása" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Válassza ki, hogy a(z) $(^NameDA) mely funkcióit kívánja telepíteni." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÖsszetevÅ‘k kiválasztása" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Válassza ki, hogy a(z) $(^NameDA) mely funkcióit kívánja eltávolítani." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Leírás" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Vigye rá az egeret az összetevÅ‘re, hogy megtekinthesse a leírását." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Telepítési hely kiválasztása" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Válassza ki a(z) $(^NameDA) telepítésének mappáját." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Telepítési hely kiválasztása" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Válassza ki a(z) $(^NameDA) telepítésének mappáját." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Telepítési folyamat" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Kis türelmet a(z) $(^NameDA) telepítéséig." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Telepítés befejezÅ‘dött" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "A telepítés sikeresen befejezÅ‘dött." + ${LangFileString} MUI_TEXT_ABORT_TITLE "A telepítés megszakadt" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "A telepítés sikertelen volt." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Eltávolítási folyamat" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Kis türelmet a(z) $(^NameDA) eltávolításáig." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Az eltávolítás befejezÅ‘dött" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Az eltávolítás sikeresen befejezÅ‘dött." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Az eltávolítás megszakadt" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Az eltávolítás sikertelen volt." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "A(z) $(^NameDA) telepítése megtörtént." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "A(z) $(^NameDA) telepítése megtörtént.$\r$\n$\r$\nA Befejezés gomb megnyomásával zárja be a varázslót." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "A(z) $(^NameDA) telepítésének befejezéséhez újra kell indítani a rendszert. Most akarja újraindítani?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "A(z) $(^NameDA) eltávolítás varázslójának befejezése." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "A(z) $(^NameDA) eltávolítása sikeresen befejezÅ‘dött.$\r$\n$\r$\nA Finish-re kattintva bezárul ez a varázsló." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "A számítógépet újra kell indítani, hogy a(z) $(^NameDA) eltávolítása teljes legyen. Akarja most újraindítani a rendszert?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Most indítom újra" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "KésÅ‘bb fogom újraindítani" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) futtatása" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "OlvassEl fájl megjelenítése" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Befejezés" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Start menü mappa kijelölése" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Start menü mappa kijelölése a program parancsikonjaihoz." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Jelöljön ki egy mappát a Start menüben, melybe a program parancsikonjait fogja elhelyezni. Beírhatja új mappa nevét is." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nincs parancsikon elhelyezés" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "A(z) $(^NameDA) Eltávolítása." + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "A(z) $(^NameDA) eltávolítása következik a számítógéprÅ‘l." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Biztos, hogy ki akar lépni a(z) $(^Name) TelepítÅ‘bÅ‘l?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Biztos, hogy ki akar lépni a(z) $(^Name) Eltávolítóból?" +!endif diff --git a/tools/Contrib/Language files/Icelandic.nlf b/tools/Contrib/Language files/Icelandic.nlf new file mode 100644 index 0000000..1352784 --- /dev/null +++ b/tools/Contrib/Language files/Icelandic.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1039 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Gretar Orri Kristinsson +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Uppsetning +# ^UninstallCaption +$(^Name) Fjarlæging +# ^LicenseSubCaption +: Notandaleyfissamningur +# ^ComponentsSubCaption +: Uppsetningarvalmöguleikar +# ^DirSubCaption +: Uppsetningarskráarsafn +# ^InstallingSubCaption +: Set upp +# ^CompletedSubCaption +: Lokið +# ^UnComponentsSubCaption +: Fjarlægingarvalmöguleikar +# ^UnDirSubCaption +: Fjarlægingarskráarsafn +# ^ConfirmSubCaption +: Staðfesting +# ^UninstallingSubCaption +: Fjarlægi +# ^UnCompletedSubCaption +: Lokið +# ^BackBtn +< &Til baka +# ^NextBtn +&Ãfram > +# ^AgreeBtn +Ég &Samþykki +# ^AcceptBtn +Ég &samþykki skilmála leyfissamningsins +# ^DontAcceptBtn +Ég samþykki &ekki skilmála leyfissamningsins +# ^InstallBtn +&Setja upp +# ^UninstallBtn +&Fjarlægja +# ^CancelBtn +Hætta við +# ^CloseBtn +&Loka +# ^BrowseBtn +&Vafra... +# ^ShowDetailsBtn +Sýna &upplýsingar +# ^ClickNext +Smelltu á 'Ãfram' til að halda áfram. +# ^ClickInstall +Smelltu á 'Setja upp' til þess að hefja uppsetninguna. +# ^ClickUninstall +Smelltu á 'Fjarlægja' til að hefja fjarlægingar ferlið. +# ^Name +Nafn +# ^Completed +Lokið +# ^LicenseText +Vinsamlegast skoðaðu notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst. Ef þú samþykkir skilmála samningsins, smelltu þá á 'Ég samþykki'. +# ^LicenseTextCB +Vinsamlegast skoðaðu notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst. Ef þú samþykkir skilmála samningsins, hakaðu þá í kassann hér að neðan. $_CLICK +# ^LicenseTextRB +Vinsamlegast skoðaðu notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst. Ef þú samþykkir skilmála samningsins, veldu þá fyrsta valmöguleikann hér að neðan. $_CLICK +# ^UnLicenseText +Vinsamlegast skoðaðu notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst. Ef þú samþykkir skilmála samningsins, smelltu þá á 'Ég samþykki'. +# ^UnLicenseTextCB +Vinsamlegast skoðaðu notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst. Ef þú samþykkir skilmála samningsins, hakaðu þá í kassann hér að neðan. $_CLICK +# ^UnLicenseTextRB +Vinsamlegast skoðaðu notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst. Ef þú samþykkir skilmála samningsins, veldu þá fyrsta valmöguleikann hér að neðan. $_CLICK +# ^Custom +Sjálfval +# ^ComponentsText +Hakaðu við þá íhluti sem þú vilt setja upp og taktu hakið af þeim íhlutum sem þú vilt ekki setja upp. $_CLICK +# ^ComponentsSubText1 +Veldu tegund uppsetningar: +# ^ComponentsSubText2_NoInstTypes +Veldu þá íhluti sem á að setja upp: +# ^ComponentsSubText2 +Eða, veldu valfrjálsa íhluti á að setja upp: +# ^UnComponentsText +Hakaðu við þá íhluti sem þú vilt fjarlægja og taktu hakið af þeim íhlutum sem þú vilt ekki fjarlægja. $_CLICK +# ^UnComponentsSubText1 +Veldu tegund fjarlægingar: +# ^UnComponentsSubText2_NoInstTypes +Veldu íhluti sem á að fjarlægja: +# ^UnComponentsSubText2 +Eða, veldu valfrjálsa íhluti sem á að fjarlægja: +# ^DirText +Uppsetningin mun setja $(^NameDA) upp í eftirfarandi skráarsafn. Til að setja forritið upp í annað skráarsafn, smelltu á 'Vafra...' og veldu annað skráarsafn. $_CLICK +# ^DirSubText +Uppsetningarskráarsafn +# ^DirBrowseText +Veldu það skráarsafn sem þú vilt setja $(^NameDA) upp í: +# ^UnDirText +Uppsetningin mun fjarlægja $(^NameDA) úr eftirfarandi skráarsafni. Til að fjarlægja forritið úr öðru skráarsafni, smelltu á 'Vafra...' og veldu annað skráarsafn. $_CLICK +# ^UnDirSubText +"Fjarlægingarskráarsafn" +# ^UnDirBrowseText +Veldu það skráarsafn sem þú vilt fjarlægja $(^NameDA) úr: +# ^SpaceAvailable +"Tiltækt rými: " +# ^SpaceRequired +"Nauðsynlegt rými: " +# ^UninstallingText +$(^NameDA) verður fjarlægt úr eftirfarandi skráarsafni. $_CLICK +# ^UninstallingSubText +Fjarlægi úr: +# ^FileError +Villa við að skrifa í skrá: \r\n\r\n$0\r\n\r\nSmelltu á 'Hætta við' til að stoppa uppsetninguna,\r\n'Reyna aftur' til að gera aðra tilraun, eða\r\n'Hunsa' til sleppa þessari skrá. +# ^FileError_NoIgnore +Villa við að skrifa í skrá: \r\n\r\n$0\r\n\r\nSmelltu á 'Reyna aftur' til að gera aðra tilraun, eða\r\n'Hætta við' til að stoppa uppsetninguna. +# ^CantWrite +"Get ei skrifað: " +# ^CopyFailed +Afritun mistókst +# ^CopyTo +"Afrita til " +# ^Registering +"Skrásetja: " +# ^Unregistering +"Afskrá: " +# ^SymbolNotFound +"Fann ekki tákn: " +# ^CouldNotLoad +"Gat ekki hlaðið inn: " +# ^CreateFolder +"Búa til skráarsafn: " +# ^CreateShortcut +"Búa til flýtileið: " +# ^CreatedUninstaller +"Bjó til fjarlægingarhjálp: " +# ^Delete +"Eyða skrá: " +# ^DeleteOnReboot +"Eyða við endurræsingu: " +# ^ErrorCreatingShortcut +"Villa við gerð flýtileiðar: " +# ^ErrorCreating +"Villa við gerð: " +# ^ErrorDecompressing +Villa við afþjöppun gagna! Biluð uppsetningarhjálp? +# ^ErrorRegistering +Villa við skrásetningu DLL +# ^ExecShell +"Keyrslugluggi: " +# ^Exec +"Keyra: " +# ^Extract +"Færa út: " +# ^ErrorWriting +"Færa út: villa við að skrifa í skrá " +# ^InvalidOpcode +Uppsetningarhjálp biluð: rangur stýrikóði +# ^NoOLE +"Engin OLE fyrir: " +# ^OutputFolder +"Útskráarsafn: " +# ^RemoveFolder +"Fjarlægja skráarsafn: " +# ^RenameOnReboot +"Endurskíra við endurræsingu: " +# ^Rename +"Endurskíra: " +# ^Skipped +"Sleppt: " +# ^CopyDetails +Afrita upplýsingar til skrifbrettis +# ^LogInstall +Skrá uppsetningarferli +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Icelandic.nsh b/tools/Contrib/Language files/Icelandic.nsh new file mode 100644 index 0000000..eb24d6f --- /dev/null +++ b/tools/Contrib/Language files/Icelandic.nsh @@ -0,0 +1,121 @@ +;Language: Icelandic (15) +;By Gretar Orri Kristinsson + +!insertmacro LANGFILE "Icelandic" = "Ãslenska" "Islenska" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Velkominn til $(^NameDA) uppsetningarhjálparinnar" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Þessi hjálp mun leiða þig í gegnum uppsetninguna á $(^NameDA).$\r$\n$\r$\nMælt er með því að þú lokir öllum öðrum forritum áður en uppsetningin hefst. Þetta mun gera uppsetningarforritinu kleyft að uppfæra kerfiskrár án þess að endurræsa tölvuna.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Velkomin(n) til $(^NameDA) fjarlægingarhjálparinnar" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Þessi hjálp mun leiða þig í gegnum fjarlæginguna á $(^NameDA).$\r$\n$\r$\nÃður en fjarlæging hefst skal ganga úr skugga um að $(^NameDA) sé ekki opið.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Notandaleyfissamningur" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Vinsamlegast skoðaðu Notandaleyfissamninginn vel áður en uppsetning á $(^NameDA) hefst." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ef þú samþykkir skilmála samningsins, smelltu þá á 'Ég samþykki' til að halda áfram. Þú verður að samþykkja samninginn til þess að setja upp $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ef þú samþykkir skilmála samningsins, hakaðu þá í kassann hér að neðan. Þú verður að samþykkja samninginn til þess að setja upp $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ef þú samþykkir skilmála samningsins, veldu þá fyrsta valmöguleikann hér að neðan. Þú verður að samþykkja samninginn til þess að setja upp $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Leyfissamningur" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Vinsamlegast skoðaðu leyfissamninginn vel áður en fjarlæging á $(^NameDA) hefst." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ef þú samþykkir skilmála samningsins, smelltu þá á 'Ég samþykki' til að halda áfram. Þú verður að samþykkja samninginn til þess að fjarlægja $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ef þú samþykkir skilmála samningsins, hakaðu þá í kassann hér að neðan. Þú verður að samþykkja samninginn til þess að fjarlægja $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ef þú samþykkir skilmála samningsins, veldu þá fyrsta valmöguleikann hér að neðan. Þú verður að samþykkja samninginn til þess að fjarlægja $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Smelltu á 'PageDown' takkann á lyklaborðinu til að sjá afganginn af samningnum." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Velja íhluti" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Veldu hvaða $(^NameDA) íhluti þú vilt setja upp." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Velja íhluti" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Velja hvaða $(^NameDA) íhluti þú vilt fjarlægja." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Lýsing" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Færðu músina yfir íhlut til að fá lýsinguna á honum." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Veldu íhlut til þess að fá lýsinguna á honum." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Veldu uppsetningarskáarsafn" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Veldu það skráarsafn sem þú vilt setja $(^NameDA) upp í." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Velja fjarlægingarskáarsafn" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Veldu það skráarsafn sem þú vilt fjarlægja $(^NameDA) úr." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Set upp" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vinsamlegast dokaðu við meðan $(^NameDA) er sett upp." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Uppsetningu lokið" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Uppsetning tókst." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Hætt við uppsetningu" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Uppsetningu lauk ekki sem skildi." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Fjarlægi" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vinsamlegast dokaðu við á meðan $(^NameDA) er fjarlægt." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Fjarlægingu lokið" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Fjarlæging tókst." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Hætt við fjarlægingu" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Fjarlægingu lauk ekki sem skildi." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Ljúka $(^NameDA) uppsetningarhjálpinni" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) er nú upp sett á tölvunni þinni.$\r$\n$\r$\nSmelltu á 'Ljúka' til að loka þessari hjálp." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Til að ljúka uppsetningunni á $(^NameDA) verður að endurræsa tölvuna. Viltu endurræsa núna?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Ljúka $(^NameDA) fjarlægingarhjálpinni" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) hefur nú verið fjarlægt úr tölvunni.$\r$\n$\r$\nSmelltu á 'Ljúka' til að loka þessari hjálp." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Til að ljúka fjarlægingunni á $(^NameDA) verður að endurræsa tölvuna. Viltu endurræsa núna?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Endurræsa núna" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ég vil endurræsa seinna" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Keyra $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Skoða LestuMig" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Ljúka" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Velja skráarsafn 'Start' valmyndar" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Veldu skráarsafn $(^NameDA) flýtileiða fyrir 'Start' valmyndina." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Veldu skráarsafn flýtileiða forritsins fyrir 'Start' valmyndina. Þú getur einnig búið til nýtt skráarsafn með því að setja inn nýtt nafn." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ekki búa til flýtileiðir í 'Start' valmyndinni" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Fjarlægja $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Fjarlægja $(^NameDA) úr tölvunni." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ertu viss um að þú viljir loka $(^Name) uppsetningarhjálpinni?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ertu viss um að þú viljir loka $(^Name) fjarlægingarhjálpinni?" +!endif diff --git a/tools/Contrib/Language files/Indonesian.nlf b/tools/Contrib/Language files/Indonesian.nlf new file mode 100644 index 0000000..98c696a --- /dev/null +++ b/tools/Contrib/Language files/Indonesian.nlf @@ -0,0 +1,194 @@ +# Header, don't edit +NLF v6 +# Language ID +1057 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Revision date: 2009 April +# Translators: +## Ariel , +## was.uthm@gmail.com +# +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalasi Program $(^Name) +# ^UninstallCaption +Penghapusan Program $(^Name) +# ^LicenseSubCaption +: Perihal Lisensi +# ^ComponentsSubCaption +: Pilihan Instalasi +# ^DirSubCaption +: Lokasi Instalasi +# ^InstallingSubCaption +: Proses Instalasi +# ^CompletedSubCaption +: Selesai +# ^UnComponentsSubCaption +: Pilihan Penghapusan +# ^UnDirSubCaption +: Berkas Lokasi yang dihapus +# ^ConfirmSubCaption +: Konfirmasi +# ^UninstallingSubCaption +: Proses Penghapusan +# ^UnCompletedSubCaption +: Selesai +# ^BackBtn +< &Mundur +# ^NextBtn +&Lanjut > +# ^AgreeBtn +Saya &Setuju +# ^AcceptBtn +Saya s&etuju dengan Perihal Lisensi +# ^DontAcceptBtn +Saya &tidak setuju dengan Perihal Lisensi +# ^InstallBtn +&Instal +# ^UninstallBtn +&Hapus +# ^CancelBtn +Batalkan +# ^CloseBtn +&Tutup +# ^BrowseBtn +Ca&ri... +# ^ShowDetailsBtn +Lihat &perincian +# ^ClickNext +Tekan tombol Lanjut untuk melanjutkan. +# ^ClickInstall +Tekan tombol Instal untuk memulai instalasi. +# ^ClickUninstall +Tekan tombol Hapus untuk memulai penghapusan. +# ^Name +Nama +# ^Completed +Selesai +# ^LicenseText +Silahkan membaca lisensi berikut sebelum memulai instalasi $(^NameDA). Jika anda menyetujui dan menerima semua pernyataan, tekan tombol Saya Setuju. +# ^LicenseTextCB +Silahkan membaca lisensi berikut sebelum memulai instalasi $(^NameDA). Jika anda menyetujui dan menerima semua pernyataan, beri tanda centang. $_CLICK +# ^LicenseTextRB +Silahkan membaca lisensi berikut sebelum memulai instalasi $(^NameDA). Jika anda menyetujui dan menerima semua pernyataan, pilihlah salah satu item dibawah ini. $_CLICK +# ^UnLicenseText +Silahkan membaca lisensi berikut sebelum mulai menghapus $(^NameDA). Jika anda menyetujui dan menerima semua pernyataan, tekan tombol Saya Setuju. +# ^UnLicenseTextCB +Silahkan membaca lisensi berikut sebelum mulai menghapus $(^NameDA). Jika anda menyetujui dan menerima semua pernyataan, beri tanda centang. $_CLICK +# ^UnLicenseTextRB +Silahkan membaca lisensi berikut sebelum mulai menghapus $(^NameDA). Jika anda menyetujui dan menerima semua pernyataan, pilihlah salah satu item dibawah ini. $_CLICK +# ^Custom +Tentukan Sendiri +# ^ComponentsText +Beri tanda centang pada komponen yang akan di instal and hilangkan tanda centang pada komponen yang tidak perlu di instal. $_CLICK +# ^ComponentsSubText1 +Pilih tipe instalasi: +# ^ComponentsSubText2_NoInstTypes +Pilih komponen-komponen yang akan di instal: +# ^ComponentsSubText2 +Atau, pilih komponen tambahan yang akan di instal: +# ^UnComponentsText +Beri tanda centang pada komponen yang akan dihapus and hilangkan tanda centang pada komponen yang tidak ingin dihapus. $_CLICK +# ^UnComponentsSubText1 +Pilih tipe penghapusan: +# ^UnComponentsSubText2_NoInstTypes +Pilih komponen-komponen yang ingin dihapus: +# ^UnComponentsSubText2 +Atau, pilih komponen tambahan yang ingin dihapus: +# ^DirText +Program $(^NameDA) akan di instal pada lokasi berikut. Untuk memilih lokasi, tekan tombol Cari kemudian pilih lokasi yang anda kehendaki. $_CLICK +# ^DirSubText +Lokasi instalasi +# ^DirBrowseText +Pilih lokasi instalasi program $(^NameDA): +# ^UnDirText +Proses penghapusan program $(^NameDA) dari lokasi instalasi berikut. Untuk memilih lokasi lainnya, tekan tombol Cari kemudian pilih lokasi yang anda kehendaki. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Pilih lokasi instalasi program $(^NameDA) yang akan dihapus: +# ^SpaceAvailable +"Ruang yang tersedia: " +# ^SpaceRequired +"Ruang yang dibutuhkan: " +# ^UninstallingText +$(^NameDA) akan dihapus dari lokasi berikut. $_CLICK +# ^UninstallingSubText +Proses penghapusan dari: +# ^FileError +Tidak dapat membuka berkas untuk menulis: \r\n\t"$0"\r\nTekan tombol Abort untuk membatalkan instalasi,\r\nRetry untuk mencoba lagi, atau\r\nIgnore untuk melewati file ini. +# ^FileError_NoIgnore +Tidak dapat membuka berkas untuk menulis: \r\n\t"$0"\r\nTekan tombol Retry untuk mencoba lagi, atau\r\nCancel untuk membatalkan instalasi. +# ^CantWrite +"Tidak bisa menulis pada berkas: " +# ^CopyFailed +Gagal menyalin berkas +# ^CopyTo +"Menyalin ke " +# ^Registering +"Memasukkan dalam daftar: " +# ^Unregistering +"Menghapus dari daftar: " +# ^SymbolNotFound +"Tidak dapat menemukan simbol: " +# ^CouldNotLoad +"Tidak dapat memuat: " +# ^CreateFolder +"Membuat tempat menyimpan berkas: " +# ^CreateShortcut +"Membuat shortcut: " +# ^CreatedUninstaller +"Program penghapusan yang dibuat: " +# ^Delete +"Menghapus berkas: " +# ^DeleteOnReboot +"Akan dihapus saat reboot: " +# ^ErrorCreatingShortcut +"Tidak dapat membuat shortcut: " +# ^ErrorCreating +"Ada kesalahan saat membuat: " +# ^ErrorDecompressing +Ada kesalahan saat membuka data! Program Instalasi tidak lengkap? +# ^ErrorRegistering +Ada kesalahan ketika mendaftarkan modul DLL +# ^ExecShell +"Perintah: " +# ^Exec +"Menjalankan: " +# ^Extract +"Proses ekstraksi berkas: " +# ^ErrorWriting +"Ekstraksi: ada kesalahan saat menulis ke berkas " +# ^InvalidOpcode +Program instalasi rusak: kode program tidak lengkap +# ^NoOLE +"OLE tidak ditemukan: " +# ^OutputFolder +"Lokasi tujuan: " +# ^RemoveFolder +"Menghapus lokasi penyimpanan: " +# ^RenameOnReboot +"Memberi nama baru saat reboot: " +# ^Rename +"Memberi nama baru: " +# ^Skipped +"Dilewati: " +# ^CopyDetails +Salin perincian ke Clipboard +# ^LogInstall +Catat proses instalasi +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Indonesian.nsh b/tools/Contrib/Language files/Indonesian.nsh new file mode 100644 index 0000000..48064c2 --- /dev/null +++ b/tools/Contrib/Language files/Indonesian.nsh @@ -0,0 +1,129 @@ +;Language: Indonesian (1057) +;By Ariel825010106@yahoo.com modified by was.uthm@gmail.com in April 2009 + +!insertmacro LANGFILE "Indonesian" = "Bahasa Indonesia" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Selamat datang di program instalasi $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Program ini akan membantu anda dalam proses instalasi $(^NameDA).$\r$\n$\r$\nAnda sangat disarankan untuk menutup program lainnya sebelum memulai proses instalasi. Hal ini diperlukan agar berkas yang terkait dapat diperbarui tanpa harus booting ulang komputer anda.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Selamat datang di program penghapusan $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Program ini akan membantu anda pada proses penghapusan $(^NameDA).$\r$\n$\r$\nSebelum memulai proses penghapusan, pastikan dulu $(^NameDA) tidak sedang digunakan.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Perihal Lisensi" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Silahkan membaca perihal lisensi sebelum memulai proses instalasi $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jika anda setuju dan menerima semua pernyataan, tekan tombol Saya Setuju untuk melanjutkan. Anda harus setuju untuk memulai instalasi $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda setuju dan menerima semua pernyatan, beri tanda centang. Anda harus setuju untuk memulai instalasi $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda setuju dan menerima semua pernyataan, pilihlah salah satu item dibawah ini. Anda harus setuju untuk memulai instalasi $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Perihal Lisensi" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Silahkan membaca lisensi berikut sebelum melakukan penghapusan $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jika anda setuju dan menerima semua pernyataan, tekan tombol Saya Setuju untuk melanjutkan. Anda harus setuju untuk memulai proses penghapusan $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda setuju dan menerima semua pernyataan, beri tanda centang. Anda harus setuju untuk memulai proses penghapusan $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda setuju dan menerima semua pernyataan, pilihlah salah satu item dibawah ini. Anda harus setuju untuk memulai proses penghapusan $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tekan tombol Page Down untuk melihat pernyataan berikutnya." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Pilih Komponen" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Pilih komponen fitur tambahan dari $(^NameDA) yang ingin di instal." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Pilih Komponen" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Pilih komponen fitur tambahan dari $(^NameDA) yang ingin dihapus." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Deskripsi" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tunjuk ke salah satu komponen untuk melihat deskripsi tentang komponen itu." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Pilih Lokasi Instalasi" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Pilih lokasi untuk instalasi program $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Pilih Lokasi berkas yang akan dihapus" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Pilih lokasi instalasi program $(^NameDA) yang akan dihapus." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Proses instalasi " + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Mohon tunggu sejenak, instalasi program $(^NameDA) sedang berlangsung." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalasi Selesai" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Seluruh proses instalasi sudah paripurna." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalasi Dibatalkan" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Proses instalasi tidak selesai dengan sempurna." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Proses penghapusan" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Mohon tunggu sejenak, penghapusan program $(^NameDA) sedang berlangsung." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Proses Penghapusan Selesai" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Seluruh proses penghapusan sudah paripurna." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Penghapusan Dibatalkan" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Proses penghapusa tidak selesai dengan sempurna." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Menutup Instalasi Program $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) sudah di instal di komputer anda.$\r$\n$\r$\nTekan tombol Selesai untuk menutup program." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Komputer anda memerlukan booting ulang untuk menyempurnakan proses instalasi $(^NameDA). Apakah anda akan melakukan booting ulang sekarang juga?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Menutup program penghapusan $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) sudah dihapus dari komputer anda.$\r$\n$\r$\nTekan tombol Selesai untuk menutup." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Komputer anda memerlukan booting untuk menyempurnakan proses penghapusan $(^NameDA). Apakah anda akan melakukan booting ulang sekarang juga?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Booting ulang sekarang" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Booting ulang nanti" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Jalankan $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Buka berkas Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Selesai" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Pilih lokasi dari Menu Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Pilih lokasi dari Menu Start untuk meletakkan shortcut $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Pilih lokasi dari Menu Start untuk meletakkan shortcut program ini. Anda bisa juga membuat lokasi baru dengan cara menulis nama lokasi yang dikehendaki." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Tidak perlu membuat shortcut" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Penghapusan $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Menghapus $(^NameDA) dari komputer anda." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Apakah anda yakin ingin menghentikan proses instalasi $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Apakah anda yakin ingin menghentikan proses penghapusan $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Pilihan Pemakai" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Pilihlah pemakai komputer yang akan menggunakan program $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Apakah anda akan melakukan instalasi $(^NameDA) untuk anda sendiri atau untuk semua pemakai komputer ini. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instalasi untuk semua pemakai komputer ini" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalasi hanya untuk saya sendiri" +!endif diff --git a/tools/Contrib/Language files/Irish.nlf b/tools/Contrib/Language files/Irish.nlf new file mode 100644 index 0000000..26a0825 --- /dev/null +++ b/tools/Contrib/Language files/Irish.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +2108 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Kevin P. Scannell < scannell at slu dot edu > +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Socrú $(^Name) +# ^UninstallCaption +Díshuiteáil $(^Name) +# ^LicenseSubCaption +: Comhaontú um Cheadúnas +# ^ComponentsSubCaption +: Roghanna Suiteála +# ^DirSubCaption +: Fillteán Suiteála +# ^InstallingSubCaption +: Suiteáil +# ^CompletedSubCaption +: Críochnaithe +# ^UnComponentsSubCaption +: Roghanna Díshuiteála +# ^UnDirSubCaption +: Fillteán Díshuiteála +# ^ConfirmSubCaption +: Deimhniú +# ^UninstallingSubCaption +: Díshuiteáil +# ^UnCompletedSubCaption +: Críochnaithe +# ^BackBtn +< Ar Ai&s +# ^NextBtn +Ar &Aghaidh > +# ^AgreeBtn +Gl&acaim Leis +# ^AcceptBtn +Táim toilteanach &glacadh le coinníollacha an Chomhaontú um Cheadúnas +# ^DontAcceptBtn +Nílim &toilteanach glacadh le coinníollacha an Chomhaontú um Cheadúnas +# ^InstallBtn +&Suiteáil +# ^UninstallBtn +&Díshuiteáil +# ^CancelBtn +Cealaigh +# ^CloseBtn +&Dún +# ^BrowseBtn +B&rabhsáil... +# ^ShowDetailsBtn +Taispeáin &sonraí +# ^ClickNext +Cliceáil "Ar Aghaidh" chun leanúint ar aghaidh. +# ^ClickInstall +Cliceáil "Suiteáil" chun tosú. +# ^ClickUninstall +Cliceáil "Díshuiteáil" chun tosú. +# ^Name +Ainm +# ^Completed +Críochnaithe +# ^LicenseText +Déan iniúchadh ar an gComhaontú um Cheadúnas sula suiteálann tú $(^NameDA). Má ghlacann tú le gach coinníoll den chomhaontú, cliceáil "Glacaim Leis". +# ^LicenseTextCB +Déan iniúchadh ar an gComhaontú um Cheadúnas sula suiteálann tú $(^NameDA). Má ghlacann tú le gach coinníoll den chomhaontú, cliceáil an ticbhosca thíos. $_CLICK +# ^LicenseTextRB +Déan iniúchadh ar an gComhaontú um Cheadúnas sula suiteálann tú $(^NameDA). Má ghlacann tú le gach coinníoll den chomhaontú, roghnaigh an chéad rogha thíos. $_CLICK +# ^UnLicenseText +Déan iniúchadh ar an gComhaontú um Cheadúnas sula ndíshuiteálann tú $(^NameDA). Má ghlacann tú le gach coinníoll den chomhaontú, cliceáil "Glacaim Leis". +# ^UnLicenseTextCB +Déan iniúchadh ar an gComhaontú um Cheadúnas sula ndíshuiteálann tú $(^NameDA). Má ghlacann tú le gach coinníoll den chomhaontú, cliceáil an ticbhosca thíos. $_CLICK +# ^UnLicenseTextRB +Déan iniúchadh ar an gComhaontú um Cheadúnas sula ndíshuiteálann tú $(^NameDA). Má ghlacann tú le gach coinníoll den chomhaontú, roghnaigh an chéad rogha thíos. $_CLICK +# ^Custom +Saincheaptha +# ^ComponentsText +Roghnaigh na comhpháirteanna is mian leat a shuiteáil, agus díroghnaigh na comhpháirteanna nach mian leat a shuiteáil. $_CLICK +# ^ComponentsSubText1 +Roghnaigh cineál na suiteála: +# ^ComponentsSubText2_NoInstTypes +Roghnaigh na comhpháirteanna is mian leat a shuiteáil: +# ^ComponentsSubText2 +Nó, roghnaigh na comhpháirteanna roghnacha is mian leat a shuiteáil: +# ^UnComponentsText +Roghnaigh na comhpháirteanna is mian leat a dhíshuiteáil, agus díroghnaigh na comhpháirteanna nach mian leat a dhíshuiteáil. $_CLICK +# ^UnComponentsSubText1 +Roghnaigh cineál na díshuiteála: +# ^UnComponentsSubText2_NoInstTypes +Roghnaigh comhpháirteanna le díshuiteáil: +# ^UnComponentsSubText2 +Nó, roghnaigh na comhpháirteanna roghnacha is mian leat a dhíshuiteáil: +# ^DirText +Cuirfidh an Suiteálaí $(^NameDA) san fhillteán seo a leanas. Más mian leat suiteáil i bhfillteán difriúil, cliceáil "Brabhsáil" agus roghnaigh fillteán eile. $_CLICK +# ^DirSubText +Sprioc-Fhillteán +# ^DirBrowseText +Roghnaigh an fillteán inar mian leat $(^NameDA) a shuiteáil: +# ^UnDirText +Bainfidh an Suiteálaí $(^NameDA) amach as an bhfillteán seo a leanas. Más mian leat é a dhíshuiteáil ó fhillteán difriúil, cliceáil "Brabhsáil" agus roghnaigh fillteán eile. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Roghnaigh an fillteán ar mian leat $(^NameDA) a dhíshuiteáil as: +# ^SpaceAvailable +"Spás le fáil: " +# ^SpaceRequired +"Spás de dhíth: " +# ^UninstallingText +Díshuiteálfar $(^NameDA) ón fhillteán seo a leanas. $_CLICK +# ^UninstallingSubText +à dhíshuiteáil ó: +# ^FileError +Earráid agus comhad á scríobh: \r\n\r\n$0\r\n\r\nCliceáil "Abort" chun an tsuiteáil a stopadh,\r\n"Retry" chun iarracht eile a dhéanamh, nó\r\n"Ignore" chun neamhaird a dhéanamh den chomhad seo. +# ^FileError_NoIgnore +Earráid agus comhad á scríobh: \r\n\r\n$0\r\n\r\nCliceáil "Retry" chun iarracht eile a dhéanamh, nó\r\n"Cancel" chun an tsuiteáil a stopadh. +# ^CantWrite +"Ní féidir scríobh: " +# ^CopyFailed +Theip ar an gcóipeáil +# ^CopyTo +"Cóipeáil go " +# ^Registering +"Clárú: " +# ^Unregistering +"Díchlárú: " +# ^SymbolNotFound +"Níorbh fhéidir siombail a aimsiú: " +# ^CouldNotLoad +"Níorbh fhéidir luchtú: " +# ^CreateFolder +"Cruthaigh fillteán: " +# ^CreateShortcut +"Cruthaigh aicearra: " +# ^CreatedUninstaller +"Cruthaíodh díshuiteálaí: " +# ^Delete +"Scrios comhad: " +# ^DeleteOnReboot +"Scrios ag am atosaithe: " +# ^ErrorCreatingShortcut +"Earráid agus aicearra á chruthú: " +# ^ErrorCreating +"Earráid le linn cruthaithe: " +# ^ErrorDecompressing +Earráid agus sonraí á ndíchomhbhrú! Suiteálaí truaillithe? +# ^ErrorRegistering +Earráid agus DLL á chlárú +# ^ExecShell +"Blaosc: " +# ^Exec +"Rith: " +# ^Extract +"Bain Amach: " +# ^ErrorWriting +"Extract: earráid le linn scríofa " +# ^InvalidOpcode +Díshuiteálaí truaillithe: cód neamhbhailí oibríochta +# ^NoOLE +"Gan OLE le haghaidh: " +# ^OutputFolder +"Fillteán aschurtha: " +# ^RemoveFolder +"Bain fillteán: " +# ^RenameOnReboot +"Athainmnigh ag am atosaithe: " +# ^Rename +"Athainmnigh: " +# ^Skipped +"Neamhaird déanta de: " +# ^CopyDetails +Cóipeáil Sonraí go dtí an Ghearrthaisce +# ^LogInstall +Logáil an próiseas suiteála +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Irish.nsh b/tools/Contrib/Language files/Irish.nsh new file mode 100644 index 0000000..aff4d54 --- /dev/null +++ b/tools/Contrib/Language files/Irish.nsh @@ -0,0 +1,121 @@ +;Language: Irish (2108) +;By Kevin P. Scannell < scannell at slu dot edu > + +!insertmacro LANGFILE "Irish" = "Gaeilge" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Fáilte go dtí Draoi Suiteála $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Déanfaidh an draoi seo treorú duit tríd an suiteáil de $(^NameDA).$\r$\n$\r$\nMoltar duit gach feidhmchlár eile a dhúnadh sula dtosaíonn tú an Suiteálaí. Cinnteoidh sé seo gur féidir na comhaid oiriúnacha a nuashonrú gan do ríomhaire a atosú.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Fáilte go dtí Draoi Díshuiteála $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Déanfaidh an draoi seo treorú duit tríd an díshuiteáil de $(^NameDA).$\r$\n$\r$\nBí cinnte nach bhfuil $(^NameDA) ag rith sula dtosaíonn tú an díshuiteáil.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Comhaontú um Cheadúnas" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Déan iniúchadh ar choinníollacha an cheadúnais sula suiteálann tú $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Má ghlacann tú le coinníollacha an chomhaontaithe, cliceáil $\"Glacaim Leis$\" chun leanúint ar aghaidh. Caithfidh tú glacadh leis an gcomhaontú chun $(^NameDA) a shuiteáil." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Má ghlacann tú le coinníollacha an chomhaontaithe, cliceáil an ticbhosca thíos. Caithfidh tú glacadh leis an gcomhaontú chun $(^NameDA) a shuiteáil. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Má ghlacann tú le coinníollacha an chomhaontaithe, roghnaigh an chéad rogha thíos. Caithfidh tú glacadh leis an gcomhaontú chun $(^NameDA) a dhíshuiteáil. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Comhaontú um Cheadúnas" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Déan iniúchadh ar choinníollacha an cheadúnais sula ndíshuiteálann tú $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Má ghlacann tú le coinníollacha an chomhaontaithe, cliceáil $\"Glacaim Leis$\" chun leanúint ar aghaidh. Caithfidh tú glacadh leis an gcomhaontú chun $(^NameDA) a dhíshuiteáil." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Má ghlacann tú le coinníollacha an chomhaontaithe, cliceáil an ticbhosca thíos. Caithfidh tú glacadh leis an gcomhaontú chun $(^NameDA) a dhíshuiteáil. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Má ghlacann tú le coinníollacha an chomhaontaithe, roghnaigh an chéad rogha thíos. Caithfidh tú glacadh leis an gcomhaontú chun $(^NameDA) a dhíshuiteáil. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Brúigh $\"Page Down$\" chun an chuid eile den cheadúnas a léamh." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Roghnaigh Comhpháirteanna" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Roghnaigh na gnéithe $(^NameDA) ba mhaith leat suiteáil." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Roghnaigh Comhpháirteanna" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Roghnaigh na gnéithe $(^NameDA) ba mhaith leat díshuiteáil." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Cur Síos" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Cuir do luch os cionn comhpháirte chun cur síos a fheiceáil." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Roghnaigh comhpháirt chun cur síos a fheiceáil." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Roghnaigh Suíomh na Suiteála" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Roghnaigh an fillteán inar mian leat $(^NameDA) a shuiteáil." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Roghnaigh Suíomh na Díshuiteála" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Roghnaigh an fillteán ar mian leat $(^NameDA) a dhíshuiteáil as." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "à Shuiteáil" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Fan go fóill; $(^NameDA) á shuiteáil." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Suiteáil Críochnaithe" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "D'éirigh leis an tsuiteáil." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Suiteáil Tobscortha" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Níor éirigh leis an tsuiteáil." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "à Dhíshuiteáil" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Fan go fóill; $(^NameDA) á dhíshuiteáil." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Díshuiteáil Críochnaithe" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "D'éirigh leis an díshuiteáil." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Díshuiteáil Tobscortha" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Níor éirigh leis an díshuiteáil." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Draoi Suiteála $(^NameDA) á Chríochnú" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Suiteáladh $(^NameDA) ar do ríomhaire.$\r$\n$\r$\nCliceáil $\"Críochnaigh$\" chun an draoi seo a dhúnadh." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Ní mór duit do ríomhaire a atosú chun suiteáil $(^NameDA) a chur i gcrích. Ar mhaith leat atosú anois?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Draoi Díshuiteála $(^NameDA) á Chríochnú" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Díshuiteáladh $(^NameDA) ó do ríomhaire.$\r$\n$\r$\nCliceáil $\"Críochnaigh$\" chun an draoi seo a dhúnadh." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Ní mór duit do ríomhaire a atosú chun díshuiteáil $(^NameDA) a chur i gcrích. Ar mhaith leat atosú anois?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Atosaigh anois" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Atosóidh mé de láimh níos déanaí" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Rith $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Tai&speáin comhad README" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Críochnaigh" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Roghnaigh Fillteán sa Roghchlár Tosaigh" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Roghnaigh fillteán sa Roghchlár Tosaigh a gcuirfear aicearraí $(^NameDA) ann." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Roghnaigh an fillteán sa Roghchlár Tosaigh inar mian leat aicearraí an chláir a chruthú. Is féidir freisin fillteán nua a chruthú trí ainm nua a iontráil." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ná cruthaigh aicearraí" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Díshuiteáil $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Bain $(^NameDA) ó do ríomhaire." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "An bhfuil tú cinnte gur mian leat Suiteálaí $(^Name) a scor?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "An bhfuil tú cinnte gur mian leat Díshuiteálaí $(^Name) a scor?" +!endif diff --git a/tools/Contrib/Language files/Italian.nlf b/tools/Contrib/Language files/Italian.nlf new file mode 100644 index 0000000..07e7759 --- /dev/null +++ b/tools/Contrib/Language files/Italian.nlf @@ -0,0 +1,192 @@ +# Header, don't edit +NLF v6 +# Language ID +1040 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation orginally started by Orfanik - http://www.orfanik.hu +# Updated v2 to v6 by Alessandro Staltari < staltari (a) geocities.com > +# Revised by < mdalco@gmail.com > and bovirus < bovirus@gmail.com > +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Installazione di $(^Name) +# ^UninstallCaption +Disinstallazione di $(^Name) +# ^LicenseSubCaption +: Accordo di licenza +# ^ComponentsSubCaption +: Opzioni installazione +# ^DirSubCaption +: Cartella installazione +# ^InstallingSubCaption +: Installazione +# ^CompletedSubCaption +: Installazione completata +# ^UnComponentsSubCaption +: Opzioni disinstallazione +# ^UnDirSubCaption +: Cartella disinstallazione +# ^ConfirmSubCaption +: Conferma +# ^UninstallingSubCaption +: Disinstallazione +# ^UnCompletedSubCaption +: Disisntallazione completata +# ^BackBtn +< &Indietro +# ^NextBtn +&Avanti > +# ^AgreeBtn +&Accetto +# ^AcceptBtn +&Accetto le condizioni della licenza +# ^DontAcceptBtn +&Non accetto le condizioni della licenza +# ^InstallBtn +Ins&talla +# ^UninstallBtn +&Disinstalla +# ^CancelBtn +Annulla +# ^CloseBtn +&Fine +# ^BrowseBtn +S&foglia... +# ^ShowDetailsBtn +Visualizza &dettagli +# ^ClickNext +Per proseguire, seleziona 'Avanti'. +# ^ClickInstall +Per avviare l'installazione, seleziona 'Installa'. +# ^ClickUninstall +Per avviare la disinstallazione, seleziona 'Disinstalla'. +# ^Name +Nome +# ^Completed +Installazione completata +# ^LicenseText +Leggi la licenza prima di procedere con l'installazione di $(^NameDA). Se accetti le condizioni della licenza, seleziona 'Accetto'. +# ^LicenseTextCB +Leggi licenza prima di procedere con l'installazione di $(^NameDA). Se accetti tutte le condizioni della licenza, seleziona la casella sottostante. $_CLICK +# ^LicesnseTextRB +Leggi la licenza prima di procedere con l'installazione di $(^NameDA). Se accetti tutte le condizioni della licenza, seleziona la prima delle opzioni sottoindicate. $_CLICK +# ^UnLicenseText +Leggi la licenza prima di procedere con la disinstallazione di $(^NameDA). Se accetti tutte le condizioni della licenza, seleziona 'Accetto'. $_CLICK +# ^UnLicenseTextCB +Leggi la licenza prima di procedere con la disinstallazione di $(^NameDA). Se accetti tutte le condizioni della licenza, seleziona la casella sottostante. $_CLICK +# ^UnLicesnseTextRB +Leggi la licenza prima di procedere con la disinstallazione di $(^NameDA). Se accetti tutte le condizioni della licenza, seleziona la prima delle opzioni sottoindicate. $_CLICK +# ^Custom +Personalizzata +# ^ComponentsText +Seleziona componenti da installare. +# ^ComponentsSubText1 +Seleziona tipo installazione: +# ^ComponentsSubText2_NoInstTypes +Seleziona componenti da installare: +# ^ComponentsSubText2 +Oppure, seleziona componenti opzionali da installare: +# ^UnComponentsText +Seleziona componenti da disinstallare. +# ^UnComponentsSubText1 +Seleziona tipo disinstallazione: +# ^UnComponentsSubText2_NoInstTypes +Seleziona componenti da disinstallare: +# ^UnComponentsSubText2 +Oppure, seleziona componenti opzionali da disinstallare : +# ^DirText +Questa procedura installerà $(^NameDA) in questa cartella.\r\nPer installare in una cartella diversa, seleziona 'Sfoglia' e scegli un'altra cartella.\r\n$_CLICK +# ^DirSubText +Cartella destinazione +# ^DirBrowseText +Seleziona la cartella dove installare $(^NameDA): +# ^UnDirText +Questa procedura disinstallerà $(^NameDA) da questa cartella.\r\nPer disinstallare da una cartella diversa, seleziona 'Sfoglia' e scegli un'altra cartella.\r\n$_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Seleziona la cartella dalla quale disinstallare $(^NameDA): +# ^SpaceAvailable +"Spazio disponibile: " +# ^SpaceRequired +"Spazio richiesto: " +# ^UninstallingText +$(^NameDA) verrà disinstallato da questa cartella.\r\n$_CLICK +# ^UninstallingSubText +Rimozione da: +# ^FileError +Errore nell'apertura del file per la scrittura: \r\n\t"$0"\r\nSeleziona 'Termina' per interrompere l'installazione,\r\n'Riprova' per ritentare, oppure\r\n'Ignora' per saltare questo file. +# ^FileError_NoIgnore +Errore nell'apertura del file per la scrittura: \r\n\t"$0"\r\nSeleziona 'Riprova' per ritentare, oppure\r\n'Termina' per interrompere l'installazione +# ^CantWrite +"Impossibile scrivere: " +# ^CopyFailed +Copia fallita +# ^CopyTo +"Copia in " +# ^Registering +"Registrazione di: " +# ^Unregistering +"Deregistrazione di: " +# ^SymbolNotFound +"Impossibile trovare il simbolo: " +# ^CouldNotLoad +"Impossibile caricare: " +# ^CreateFolder +"Creazione cartella: " +# ^CreateShortcut +"Creazione collegamento: " +# ^CreatedUninstaller +"Creazione programma disinstallazione: " +# ^Delete +"Eliminazione file: " +# ^DeleteOnReboot +"Elimina al riavvio: " +# ^ErrorCreatingShortcut +"Errore nella creazione del collegamento: " +# ^ErrorCreating +"Errore nella creazione di: " +# ^ErrorDecompressing +Errore nella decompressione dei dati! Probabile programma di installazione corrotto. +# ^ErrorRegistering +Errore nella registrazione della DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Esecuzione di: " +# ^Extract +"Estrazione di: " +# ^ErrorWriting +"Estrazione: errore nella scrittura nel file " +# ^InvalidOpcode +Programma di installazione corrotto: opcode non valido +# ^NoOLE +"Nessuna OLE per: " +# ^OutputFolder +"Cartella destinazione: " +# ^RemoveFolder +"Rimozione cartella: " +# ^RenameOnReboot +"Al riavvio rinomina: " +# ^Rename +Rinomina +# ^Skipped +"Saltato: " +# ^CopyDetails +Copia i dettagli negli Appunti +# ^LogInstall +Registro eventi processo installazione +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Italian.nsh b/tools/Contrib/Language files/Italian.nsh new file mode 100644 index 0000000..78bd168 --- /dev/null +++ b/tools/Contrib/Language files/Italian.nsh @@ -0,0 +1,131 @@ +;Language: Italian (1040) +;By SANFACE Software v1.67 accents +;Review and update from v1.65 to v1.67 by Alessandro Staltari < staltari (a) geocities.com > +;Review and update from v1.67 to v1.68 by Lorenzo Bevilacqua < meow811@libero.it > + +!insertmacro LANGFILE "Italian" = "Italiano" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Installazione di $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Questo programma installerà $(^NameDA) nel computer.$\r$\n$\r$\nSi raccomanda di chiudere tutte le altre applicazioni prima di iniziare l'installazione. Questo permetterà al programma di installazione di aggiornare i file di sistema senza dover riavviare il computer.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Disinstallazione di $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Questa programma ti guiderà nella disinstallazione di $(^NameDA).$\r$\n$\r$\nPrima di iniziare la disinstallazione, assicurati che $(^Name) non sia in esecuzione.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Accordo di licenza" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Leggi le condizioni dell'accordo di licenza prima di installare $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se accetti tutti i termini dell'accordo di licenza, seleziona 'Accetto' per continuare. Per installare $(^NameDA) è necessario accettare i termini dell'accordo di licenza." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se accetti i termini dell'accordo di licenza, seleziona la casella sottostante. Per installare $(^NameDA) è necessario accettare i termini dell'accordo di licenza. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se accetti i termini dell'accordo di licenza, seleziona la prima opzione sottostante. Per installare $(^NameDA) è necessario accettare i termini della licenza d'uso. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Accordo di licenza" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Leggi le condizioni dell'accordo di licenza prima di installare $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se accetti tutti i termini dell'accordo di licenza, seleziona 'Accetto' per continuare. Per installare $(^NameDA) è necessario accettare i termini dell'accordo di licenza." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se accetti i termini dell'accordo di licenza, seleziona la casella sottostante. Per installare $(^NameDA) è necessario accettare i termini dell'accordo di licenza. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se accetti i termini dell'accordo di licenza, seleziona la prima opzione sottostante. Per installare $(^NameDA) è necessario accettare i termini della licenza d'uso. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Premi 'PagGiù' per visualizzare il resto dell'accordo di licenza." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selezione componenti" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Seleziona i componenti di $(^NameDA) da installare." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selezione componenti" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Seleziona i componenti di $(^NameDA) da disinstallare." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrizione" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posiziona il puntatore del mouse sul componente per visualizzare la relativa descrizione." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Seleziona un componente per visualizzare la relativa descrizione." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Selezione cartella installazione" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Seleziona la cartella nella quale installare $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Selezione cartella da cui disinstallare" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Seleziona la cartella dalla quale disinstallare $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installazione" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Attendi il completamento dell'installazione di $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installazione completata" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "L'installazione è stata completata correttamente." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installazione interrotta" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "L'installazione non è stata completata correttamente." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Disinstallazione" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Attendi il completamento della disinstallazione di $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Disinstallazione completata" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La disinstallazione è stata completata correttamente." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Disinstallazione interrotta" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La disintallazione non è stata completata correttamente." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Installazione di $(^NameDA) completata." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) è stato installato.$\r$\n$\r$\nScegli 'Chiudi' per chiudere il programma di installazione." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Per completare l'installazione di $(^NameDA) il computer deve essere riavviato. Vuoi riavviarlo ora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Disinstallazione di $(^NameDA) completata." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) è stato disinstallato.$\r$\n$\r$\nSeleziona 'Chiudi' per chiudere questa procedura." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Per completare la disinstallazione di $(^NameDA) il computer deve essere riavviato. Vuoi riavviarlo ora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Riavvia ora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Preferisco riavviarlo manualmente più tardi" + ${LangFileString} MUI_TEXT_FINISH_RUN "Esegui $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Visualizza il file Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Chiudi" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Selezione cartella menu Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Seleziona la cartella del menu Start in cui creare i collegamenti del programma." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Seleziona la cartella del menu Start in cui verranno creati i collegamenti del programma. È possibile inserire un nome per creare una nuova cartella." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Non creare i collegamenti del programma." +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Disinstallazione" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Disinstalla il programma $(^NameDA)." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Sei sicuro di voler interrompere l'installazione di $(^Name) ?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Sei sicuro di voler interrompere la disinstallazione di $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Configurazione profilo utenti" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Seleziona per quali utenti vuoi installare $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Seleziona se vuoi installare $(^NameDA) solo per questo utente o per tutti gli utenti di questo sistema. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installazione per tutti gli utenti" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installazione per il singolo utente" +!endif diff --git a/tools/Contrib/Language files/Japanese.nlf b/tools/Contrib/Language files/Japanese.nlf new file mode 100644 index 0000000..d961543 --- /dev/null +++ b/tools/Contrib/Language files/Japanese.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1041 +# Font and size - dash (-) means default +ï¼­ï¼³ Pゴシック +9 +# Codepage - dash (-) means ASCII code page +932 +# RTL - anything else than RTL means LTR +- +# Translation by Dnanako(2002), Updated by Takahiro Yoshimura(2003) , maboroshin(2020) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) セットアップ +# ^UninstallCaption +$(^Name) アンインストール +# ^LicenseSubCaption +:使用許諾契約 +# ^ComponentsSubCaption +:インストール オプション +# ^DirSubCaption +:インストール フォルダ +# ^InstallingSubCaption +:インストール +# ^CompletedSubCaption +:完了 +# ^UnComponentsSubCaption +: アンインストール オプション +# ^UnDirSubCaption +: アンインストール フォルダ +# ^ComfirmSubCaption +:ç¢ºèª +# ^UninstallingSubCaption +:アンインストール +# ^UnCompletedSubCaption +:完了 +# ^BackBtn +< 戻る(&B) +# ^NextBtn +次ã¸(&N) > +# ^AgreeBtn +åŒæ„ã™ã‚‹(&A) +# ^AcceptBtn +ã“ã®ä½¿ç”¨è¨±è«¾å¥‘ç´„ã«åŒæ„ã™ã‚‹(&A) +# ^DontAcceptBtn +ã“ã®ä½¿ç”¨è¨±è«¾å¥‘ç´„ã«åŒæ„ã—ã¾ã›ã‚“(&D) +# ^InstallBtn +インストール(&I) +# ^UninstallBtn +ï½±ï¾ï½²ï¾ï½½ï¾„ï½°ï¾™(&U) +# ^CancelBtn +キャンセル +# ^CloseBtn +é–‰ã˜ã‚‹(&C) +# ^BrowseBtn +å‚ç…§(&R)... +# ^ShowDetailsBtn +詳細を表示(&D) +# ^ClickNext +「次ã¸ã€ã‚’クリックã—続行ã—ã¾ã™ã€‚ +# ^ClickInstall +「インストールã€ã‚’クリックã—インストールを開始ã—ã¾ã™ã€‚ +# ^ClickUninstall +「アンインストールã€ã‚’クリックã—アンインストールを開始ã—ã¾ã™ã€‚ +# ^Name +アプリケーション +# ^Completed +完了 +# ^LicenseText +$(^NameDA) をインストールã™ã‚‹å‰ã«ã€ä½¿ç”¨è¨±è«¾å¥‘約を確èªã—ã¦ãã ã•ã„。契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ã€ŒåŒæ„ã™ã‚‹ã€ã‚’クリックã—ã¦ãã ã•ã„。 +# ^LicenseTextCB +$(^NameDA) をインストールã™ã‚‹å‰ã«ã€ä½¿ç”¨è¨±è«¾å¥‘約を確èªã—ã¦ãã ã•ã„。契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’クリックã—ã¦ãã ã•ã„。 $_CLICK +# ^LicenseTextRB +$(^NameDA) をインストールã™ã‚‹å‰ã«ã€ä½¿ç”¨è¨±è«¾å¥‘約を確èªã—ã¦ãã ã•ã„。契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®é¸æŠžè‚¢ã‹ã‚‰æœ€åˆã®ã‚‚ã®ã‚’é¸æŠžã—ã¦ãã ã•ã„。 $_CLICK +# ^UnLicenseText +$(^NameDA) をアンインストールã™ã‚‹å‰ã«ã€ä½¿ç”¨è¨±è«¾å¥‘約を確èªã—ã¦ãã ã•ã„。契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ã€ŒåŒæ„ã™ã‚‹ã€ã‚’クリックã—ã¦ãã ã•ã„。 +# ^UnLicenseTextCB +$(^NameDA) をアンインストールã™ã‚‹å‰ã«ã€ä½¿ç”¨è¨±è«¾å¥‘約を確èªã—ã¦ãã ã•ã„。契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’クリックã—ã¦ãã ã•ã„。 $_CLICK +# ^UnLicenseTextRB +$(^NameDA) をアンインストールã™ã‚‹å‰ã«ã€ä½¿ç”¨è¨±è«¾å¥‘約を確èªã—ã¦ãã ã•ã„。契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®é¸æŠžè‚¢ã‹ã‚‰æœ€åˆã®ã‚‚ã®ã‚’é¸æŠžã—ã¦ãã ã•ã„。 $_CLICK +# ^Custom +カスタム +# ^ComponentsText +インストールã—ãŸã„構æˆè¦ç´ ã«ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。ä¸è¦ãªã‚‚ã®ã¯ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã¦ãã ã•ã„。 $_CLICK +# ^ComponentsSubText1 +インストールã®ç¨®é¡žã‚’é¸æŠž: +# ^ComponentsSubText2_NoInstTypes +インストールã™ã‚‹æ§‹æˆè¦ç´ ã‚’é¸æŠž: +# ^ComponentsSubText2 +ã¾ãŸã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã„構æˆè¦ç´ ã‚’é¸æŠž: +# ^UnComponentsText +アンインストールã—ãŸã„構æˆè¦ç´ ã«ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。ãã†ã§ãªã„ã‚‚ã®ã¯ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã¦ãã ã•ã„。 $_CLICK +# ^UnComponentsSubText1 +アンインストールã®ç¨®é¡žã‚’é¸æŠž: +# ^UnComponentsSubText2_NoInstTypes +アンインストールã™ã‚‹æ§‹æˆè¦ç´ ã‚’é¸æŠž: +# ^UnComponentsSubText2 +ã¾ãŸã¯ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã„構æˆè¦ç´ ã‚’é¸æŠž: +# ^DirText +$(^NameDA) を以下ã®ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚別ã®ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã€Œå‚照〠を押ã—フォルダをé¸æŠžã—ã¦ãã ã•ã„。 $_CLICK +# ^DirSubText +インストール先ã®ãƒ•ã‚©ãƒ«ãƒ€ +# ^DirBrowseText +$(^NameDA) をインストールã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠž: +# ^UnDirText +$(^NameDA) を以下ã®ãƒ•ã‚©ãƒ«ãƒ€ã‹ã‚‰ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚別ã®ãƒ•ã‚©ãƒ«ãƒ€ã‹ã‚‰ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã€Œå‚照〠を押ã—フォルダをé¸æŠžã—ã¦ãã ã•ã„。 $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA) をアンインストールã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠž: +# ^SpaceAvailable +空ã容é‡: +# ^SpaceRequired +å¿…è¦å®¹é‡: +# ^UninstallingText +$(^NameDA) を以下ã®ãƒ•ã‚©ãƒ«ãƒ€ã‹ã‚‰ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚ $_CLICK +# ^UninstallingSubText +アンインストール元: +# ^FileError +書ãè¾¼ã¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚ªãƒ¼ãƒ—ンã®ã‚¨ãƒ©ãƒ¼:\r\n\t"$0"\r\nインストールを中止ã™ã‚‹ã«ã¯ã€Œä¸­æ­¢ã€ã€\r\nå†ã³ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ä½œæˆã‚’試ã¿ã‚‹ã«ã¯ã€Œå†è©¦è¡Œã€ã€\r\nã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’スキップã—ã¦ç¶šã‘ã‚‹ã«ã¯ã€Œç„¡è¦–ã€ã‚’押ã—ã¦ãã ã•ã„。 +# ^FileError_NoIgnore +書ãè¾¼ã¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚ªãƒ¼ãƒ—ンã®ã‚¨ãƒ©ãƒ¼: \r\n\t"$0"\r\nå†ã³ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ä½œæˆã‚’試ã¿ã‚‹ã«ã¯ã€Œå†è©¦è¡Œã€ã€\r\nインストールを中止ã™ã‚‹ã«ã¯ã€Œã‚­ãƒ£ãƒ³ã‚»ãƒ«ã€ã‚’押ã—ã¦ãã ã•ã„。 +# ^CantWrite +書ãè¾¼ã‚ã¾ã›ã‚“: +# ^CopyFailed +コピー失敗 +# ^CopyTo +コピー +# ^Registering +登録中: +# ^Unregistering +登録解除中: +# ^SymbolNotFound +シンボルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: +# ^CouldNotLoad +読ã¿è¾¼ã¿ã«å¤±æ•—: +# ^CreateFolder +フォルダ作æˆ: +# ^CreateShortcut +ショートカット作æˆ: +# ^CreatedUninstaller +アンインストーラ作æˆ: +# ^Delete +ファイル削除: +# ^DeleteOnReboot +å†èµ·å‹•æ™‚ã«å‰Šé™¤: +# ^ErrorCreatingShortcut +ショートカット作æˆã‚¨ãƒ©ãƒ¼: +# ^ErrorCreating +作æˆã‚¨ãƒ©ãƒ¼: +# ^ErrorDecompressing +データã®å±•é–‹ã‚¨ãƒ©ãƒ¼\r\n\r\nインストーラãŒç ´æã—ã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ +# ^ErrorRegistering +DLL ã®ç™»éŒ²ã‚¨ãƒ©ãƒ¼ +# ^ExecShell +æ‹¡å¼µå­ã®é–¢é€£ä»˜ã‘実行: +# ^Execute +実行: +# ^Extract +展開: +# ^ErrorWriting +展開:ファイルã¸ã®æ›¸ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼ +# ^InvalidOpcode +インストーラーãŒå£Šã‚Œã¦ã„ã‚‹:無効㪠opcode +# ^NoOLE +OLE ãŒã‚ã‚Šã¾ã›ã‚“: +# ^OutputFolder +出力先フォルダ: +# ^RemoveFolder +フォルダ削除: +# ^RenameOnReboot +å†èµ·å‹•æ™‚ã«åå‰ã®å¤‰æ›´: +# ^Rename +åå‰ã®å¤‰æ›´: +# ^Skipped +çœç•¥: +# ^CopyDetails +クリップボードã¸è©³ç´°ã‚’コピー +# ^LogInstall +インストールã®çµŒéŽã‚’ログヘ記録 +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Japanese.nsh b/tools/Contrib/Language files/Japanese.nsh new file mode 100644 index 0000000..a143b0f --- /dev/null +++ b/tools/Contrib/Language files/Japanese.nsh @@ -0,0 +1,129 @@ +;Language: Japanese (1041) +; 1st translation by Dnanako Dnanako (2002, r1537), 2nd update by Takahiro Yoshimura (2003, r2489) , 3rd update by maboroshin (July 2020) + +!insertmacro LANGFILE "Japanese" = "日本語" "Nihongo" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) セットアップã¸ã‚ˆã†ã“ã" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "セットアップã¯ã€$(^NameDA) ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’ã”案内ã—ã¾ã™ã€‚$\r$\n$\r$\nセットアップを開始ã™ã‚‹å‰ã«ã€ä»–ã®ã™ã¹ã¦ã®ã‚¢ãƒ—リケーションを終了ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã£ã¦ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ãŒã‚³ãƒ³ãƒ”ュータをå†èµ·å‹•ã›ãšã«ã€ã‚·ã‚¹ãƒ†ãƒ  ファイルを更新ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) アンインストールã¸ã‚ˆã†ã“ã" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "セットアップã¯ã€$(^NameDA) ã®ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’ã”案内ã—ã¾ã™ã€‚$\r$\n$\r$\nアンインストールを開始ã™ã‚‹å‰ã«ã€$(^NameDA) ãŒèµ·å‹•ã—ã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¦ä¸‹ã•ã„。$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "使用許諾契約" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA) をインストールã™ã‚‹å‰ã«ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡ä»¶ã‚’確èªã—ã¦ãã ã•ã„。" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ã€ŒåŒæ„ã™ã‚‹ã€ ã‚’é¸æŠžã—インストールを続行ã—ã¾ã™ã€‚$(^NameDA) をインストールã™ã‚‹ã«ã¯ã€å¥‘ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’クリックã—ã¦ãã ã•ã„。$(^NameDA) をインストールã™ã‚‹ã«ã¯ã€å¥‘ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã«è¡¨ç¤ºã•ã‚Œã¦ã„るオプションã®ã†ã¡ã€æœ€åˆã®ã‚‚ã®ã‚’é¸æŠžã—ã¦ãã ã•ã„。$(^NameDA) をインストールã™ã‚‹ã«ã¯ã€å¥‘ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "使用許諾契約" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA) をアンインストールã™ã‚‹å‰ã«ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡ä»¶ã‚’確èªã—ã¦ãã ã•ã„。" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ã€ŒåŒæ„ã™ã‚‹ã€ ã‚’é¸æŠžã—アンインストールを続行ã—ã¾ã™ã€‚$(^NameDA) をアンインストールã™ã‚‹ã«ã¯ã€å¥‘ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’クリックã—ã¦ãã ã•ã„。$(^NameDA) をアンインストールã™ã‚‹ã«ã¯ã€å¥‘ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "契約ã®ã™ã¹ã¦ã®æ¡ä»¶ã«åŒæ„ã™ã‚‹ãªã‚‰ã€ä¸‹ã®é¸æŠžè‚¢ã‹ã‚‰æœ€åˆã®ã‚‚ã®ã‚’é¸æŠžã—ã¦ãã ã•ã„。$(^NameDA) をアンインストールã™ã‚‹ã«ã¯ã€å¥‘ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "[Page Down] を押ã—契約をã™ã¹ã¦ãŠèª­ã¿ãã ã•ã„。" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "構æˆè¦ç´ ã®é¸æŠž" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "インストールã—ãŸã„ $(^NameDA) ã®æ©Ÿèƒ½ã‚’é¸æŠžã—ã¦ãã ã•ã„。" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "構æˆè¦ç´ ã®é¸æŠž" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "アンインストールã—ãŸã„ $(^NameDA) ã®æ©Ÿèƒ½ã‚’é¸æŠžã—ã¦ãã ã•ã„。" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "説明" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "構æˆè¦ç´ ã«ãƒžã‚¦ã‚¹ カーソルを載ã›ã‚‹ã¨ã€èª¬æ˜ŽãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚" + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "構æˆè¦ç´ ã‚’é¸æŠžã™ã‚‹ã¨ã€èª¬æ˜ŽãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚" + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "インストール先ã®é¸æŠž" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA) をインストールã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。" +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "アンインストール元ã®é¸æŠž" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA) をアンインストールã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。" +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "インストール" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) をインストール中ã§ã™ã€‚ãŠå¾…ã¡ãã ã•ã„。" + ${LangFileString} MUI_TEXT_FINISH_TITLE "インストールã®å®Œäº†" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "インストールã«æˆåŠŸã—ã¾ã—ãŸã€‚" + ${LangFileString} MUI_TEXT_ABORT_TITLE "インストールã®ä¸­æ­¢" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "セットアップã¯æ­£å¸¸ã«å®Œäº†ã—ã¾ã›ã‚“ã§ã—ãŸã€‚" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "アンインストール" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) をアンインストール中ã§ã™ã€‚ãŠå¾…ã¡ãã ã•ã„。" + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "アンインストールã®å®Œäº†" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "アンインストールã«æˆåŠŸã—ã¾ã—ãŸã€‚" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "アンインストールã®ä¸­æ­¢" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "アンインストールã¯æ­£å¸¸ã«å®Œäº†ã—ã¾ã›ã‚“ã§ã—ãŸã€‚" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) セットアップã®å®Œäº†" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ã¯ã€ã“ã®ã‚³ãƒ³ãƒ”ュータã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã—ãŸã€‚$\r$\n$\r$\n「完了ã€ã‚’クリックã—セットアップを閉ã˜ã¾ã™ã€‚" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’完了ã™ã‚‹ã«ã¯ã€ã“ã®ã‚³ãƒ³ãƒ”ュータをå†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚今ã™ãå†èµ·å‹•ã—ã¾ã™ã‹ï¼Ÿ" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) アンインストールã®å®Œäº†" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ã¯ã€ã“ã®ã‚³ãƒ³ãƒ”ュータã‹ã‚‰ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã—ãŸã€‚$\r$\n$\r$\n「完了ã€ã‚’クリックã—セットアップを閉ã˜ã¾ã™ã€‚" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) ã®ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’完了ã™ã‚‹ã«ã¯ã€ã“ã®ã‚³ãƒ³ãƒ”ュータをå†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚今ã™ãå†èµ·å‹•ã—ã¾ã™ã‹ï¼Ÿ" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "今ã™ãå†èµ·å‹•" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "後ã§æ‰‹å‹•ã§å†èµ·å‹•" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) を実行(&R)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Readme を表示(&S)" + ${LangFileString} MUI_BUTTONTEXT_FINISH "完了(&F)" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "スタートメニューã®ãƒ•ã‚©ãƒ«ãƒ€ã®é¸æŠž" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "$(^NameDA) ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’作æˆã™ã‚‹ã‚¹ã‚¿ãƒ¼ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "ã“ã®ãƒ—ログラムã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’作æˆã—ãŸã„スタートメニューã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。ã¾ãŸã€æ–°è¦ãƒ•ã‚©ãƒ«ãƒ€ã®åå‰ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "ショートカットを作æˆã—ãªã„" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA) ã®ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) ã‚’ã“ã®ã‚³ãƒ³ãƒ”ュータã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "$(^Name) セットアップを中止ã—ã¾ã™ã‹ï¼Ÿ" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name) アンインストールを中止ã—ã¾ã™ã‹ï¼Ÿ" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "ユーザーã®é¸æŠž" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãŸã‚ã« $(^NameDA) をインストールã™ã‚‹ã‹é¸æŠžã—ã¦ãã ã•ã„。" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "$(^NameDA) を自分自身ã®ãŸã‚ã ã‘ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã®ã‹ã€ã“ã®ã‚³ãƒ³ãƒ”ューターã®ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã®ã‹é¸æŠžã—ã¦ãã ã•ã„。$(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "ã“ã®ã‚³ãƒ³ãƒ”ューターを使用ã™ã‚‹å…¨å“¡ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "自分ã«ã®ã¿ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" +!endif diff --git a/tools/Contrib/Language files/Korean.nlf b/tools/Contrib/Language files/Korean.nlf new file mode 100644 index 0000000..6a04a97 --- /dev/null +++ b/tools/Contrib/Language files/Korean.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1042 +# Font and size - dash (-) means default +굴림 +9 +# Codepage - dash (-) means ASCII code page +949 +# RTL - anything else than RTL means LTR +- +# Translation by dTomoyo dtomoyo@empal.com ( ~V2.0 BETA2 ) / By hardkoder@gmail.com (V2.0 BETA3 ~ ) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) 설치 +# ^UninstallCaption +$(^Name) 제거 +# ^LicenseSubCaption +: 사용권 계약 ë™ì˜ +# ^ComponentsSubCaption +: 설치 옵션 +# ^DirSubCaption +: í´ë” 지정 +# ^InstallingSubCaption +: íŒŒì¼ ì„¤ì¹˜ì¤‘ +# ^CompletedSubCaption +: 설치 완료 +# ^UnComponentsSubCaption +: 제거 옵션 +# ^UnDirSubCaption +: 제거 í´ë” +# ^ConfirmSubCaption +: í™•ì¸ +# ^UninstallingSubCaption +: 제거중 +# ^UnCompletedSubCaption +: 제거 완료 +# ^BackBtn +< 뒤로 +# ^NextBtn +ë‹¤ìŒ > +# ^AgreeBtn +ë™ì˜í•¨ +# ^AcceptBtn +위 ì‚¬í•­ì— ë™ì˜í•©ë‹ˆë‹¤. +# ^DontAcceptBtn +ë™ì˜í•˜ì§€ 않습니다. +# ^InstallBtn +설치 +# ^UninstallBtn +제거 +# ^CancelBtn +취소 +# ^CloseBtn +ë‹«ìŒ +# ^BrowseBtn +찾아보기... +# ^ShowDetailsBtn +ìžì„¸ížˆ 보기 +# ^ClickNext +계ì†í•˜ì‹œë ¤ë©´ '다ìŒ' ë²„íŠ¼ì„ ëˆŒëŸ¬ 주세요. +# ^ClickInstall +설치를 시작하시려면 '설치' ë²„íŠ¼ì„ ëˆŒëŸ¬ 주세요. +# ^ClickUninstall +'제거' ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 제거가 시작ë©ë‹ˆë‹¤. +# ^Name +ì´ë¦„ +# ^Completed +완료 +# ^LicenseText +$(^NameDA)(ì„)를 설치하기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 'ë™ì˜í•¨'ì„ ëˆŒëŸ¬ 주세요. +# ^LicenseTextCB +$(^NameDA)(ì„)를 설치하기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 아래 ì‚¬í•­ì„ ì²´í¬í•´ 주세요. $_CLICK +# ^LicesnseTextRB +$(^NameDA)(ì„)를 설치하기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 아래 ì˜µì…˜ì„ ì„ íƒí•´ 주세요. $_CLICK +# ^UnLicenseText +$(^NameDA)(ì„)를 제거하기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 'ë™ì˜í•¨'ì„ ëˆŒëŸ¬ 주세요. +# ^UnLicenseTextCB +$(^NameDA)(ì„)를 제거하기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 아래 ì‚¬í•­ì„ ì²´í¬í•´ 주세요. $_CLICK +# ^UnLicesnseTextRB +$(^NameDA)(ì„)를 제거하기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 아래 ì˜µì…˜ì„ ì„ íƒí•´ 주세요. $_CLICK +# ^Custom +ì‚¬ìš©ìž ì •ì˜ +# ^ComponentsText +설치를 ì›í•˜ì‹œëŠ” 구성 요소를 ì„ íƒí•˜ì—¬ 주시기 ë°”ëžë‹ˆë‹¤. $_CLICK +# ^ComponentsSubText1 +설치 형태 ì„ íƒ: +# ^ComponentsSubText2_NoInstTypes +설치하려는 구성 요소 ì„ íƒ: +# ^ComponentsSubText2 +구성요소 ì§ì ‘ ì„ íƒ: +# ^UnComponentsText +제거를 ì›í•˜ëŠ” 구성 요소를 ì²´í¬í•´ 주시기 ë°”ëžë‹ˆë‹¤. $_CLICK +# ^UnComponentsSubText1 +제거 형태 ì„ íƒ: +# ^UnComponentsSubText2_NoInstTypes +제거하려는 구성 요소 ì„ íƒ: +# ^UnComponentsSubText2 +제거하려는 구성요소 ì§ì ‘ ì„ íƒ: +# ^DirText +$(^NameDA)(ì„)를 ë‹¤ìŒ í´ë”ì— ì„¤ì¹˜í•  예정입니다. \r\n다른 í´ë”ì— ì„¤ì¹˜í•˜ê³  싶으시면 '찾아보기' ë²„íŠ¼ì„ ëˆŒëŸ¬ì„œ 다른 í´ë”를 ì„ íƒí•´ 주세요. $_CLICK +# ^DirSubText +설치 í´ë” +# ^DirBrowseText +$(^NameDA)(ì„)를 ë‹¤ìŒ í´ë”ì— ì„¤ì¹˜í•©ë‹ˆë‹¤: +# ^UnDirText +$(^NameDA)(ì„)를 ë‹¤ìŒ í´ë”ì—ì„œ 제거할 예정입니다. \r\n다른 í´ë”ì—ì„œ 제거하고 싶으시면 '찾아보기' ë²„íŠ¼ì„ ëˆŒëŸ¬ì„œ 다른 í´ë”를 ì„ íƒí•´ 주세요. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA)(ì„)를 ë‹¤ìŒ í´ë”ì—ì„œ 제거 합니다: +# ^SpaceAvailable +"ë‚¨ì€ ë””ìŠ¤í¬ ê³µê°„: " +# ^SpaceRequired +"필요한 ë””ìŠ¤í¬ ê³µê°„: " +# ^UninstallingText +시스템ì—ì„œ $(^NameDA)(ì„)를 제거 í•  것입니다. $_CLICK +# ^UninstallingText +제거 대ìƒ: +# ^FileError +ë‹¤ìŒ íŒŒì¼ì„ ì—´ 수 없습니다.: \r\n\t"$0"\r\n'중단'ì„ ëˆŒëŸ¬ 설치를 종료하거나,\r'다시 ì‹œë„'를 눌러 다시 ì‹œë„í•´ 보거나,\r'무시'를 눌러 ì´ íŒŒì¼ì„ 건너 뛰세요. +# ^FileError_NoIgnore +ë‹¤ìŒ íŒŒì¼ì„ ì—´ 수 없습니다.: \r\n\t"$0"\r\n'다시 ì‹œë„'를 눌러 다시 ì‹œë„í•´ 보거나,\r'취소'를 눌러 설치를 종료하세요. +# ^CantWrite +"기ë¡í•  수 ì—†ìŒ: " +# ^CopyFailed +복사 실패 +# ^CopyTo +"íŒŒì¼ ë³µì‚¬ " +# ^Registering +"등ë¡ì¤‘: " +# ^Unregistering +"ë“±ë¡ í•´ì œì¤‘: " +# ^SymbolNotFound +"ì‹¬ë³¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: " +# ^CouldNotLoad +"불러올 수 ì—†ìŒ: " +# ^CreateFolder +"í´ë” ìƒì„±: " +# ^CreateShortcut +"바로 가기 ìƒì„±: " +# ^CreatedUninstaller +"ì–¸ì¸ìŠ¤í†¨ëŸ¬ ìƒì„±: " +# ^Delete +"íŒŒì¼ ì‚­ì œ: " +# ^DeleteOnReboot +"재부팅시 ì‚­ì œ: " +# ^ErrorCreatingShortcut +"바로 가기 ìƒì„± 오류: " +# ^ErrorCreating +"ìƒì„± 실패: " +# ^ErrorDecompressing +압축 해제중 오류 ë°œìƒ! 설치 파ì¼ì´ ì†ìƒë˜ì—ˆìŠµë‹ˆë‹¤. +# ^ErrorRegistering +DLL ë“±ë¡ ì‹¤íŒ¨ +# ^ExecShell +"쉘 실행: " +# ^Exec +"실행: " +# ^Extract +"압축 í•´ì œ: " +# ^ErrorWriting +"압축 í•´ì œ: 파ì¼ì„ 기ë¡í•˜ëŠ” ë„중 오류 ë°œìƒ " +# ^InvalidOpcode +ì¸ìŠ¤í†¨ëŸ¬ ì†ìƒë¨: ìž˜ëª»ëœ ì‹¤í–‰ì½”ë“œ +# ^NoOLE +"OLE ì •ë³´ ì—†ìŒ: " +# ^OutputFolder +"ëŒ€ìƒ í´ë”: " +# ^RemoveFolder +"í´ë” ì‚­ì œ: " +# ^RenameOnReboot +"재부팅시 ì´ë¦„ 변경: " +# ^Rename +"ì´ë¦„ 변경: " +# ^Skipped +"건너뜀: " +# ^CopyDetails +ìžì„¸í•œ ë‚´ìš©ì„ í´ë¦½ë³´ë“œë¡œ 복사 +# ^LogInstall +설치 로그 작성 +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Korean.nsh b/tools/Contrib/Language files/Korean.nsh new file mode 100644 index 0000000..c60a02d --- /dev/null +++ b/tools/Contrib/Language files/Korean.nsh @@ -0,0 +1,121 @@ +;Language: Korean (1042) +;By linak linak@korea.com ( ~ V2.0 BETA3 ) By kippler@gmail.com(www.kipple.pe.kr) ( V2.0 BETA3 ~ ) (last update:2007/09/05) + +!insertmacro LANGFILE "Korean" = "한국어" "Hangugeo" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) 설치를 시작합니다." + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "ì´ í”„ë¡œê·¸ëž¨ì€ ë‹¹ì‹ ì˜ ì»´í“¨í„°ì— $(^NameDA)(ì„)를 설치할 것입니다.$\r$\n$\r$\n설치를 시작하기 ì „ 가능한 í•œ 모든 í”„ë¡œê·¸ëž¨ì„ ì¢…ë£Œí•˜ì—¬ 주시기 ë°”ëžë‹ˆë‹¤. ì´ëŠ” ìž¬ë¶€íŒ…ì„ í•˜ì§€ ì•Šê³ ì„œë„ ì‹œìŠ¤í…œ 파ì¼ì„ 수정할 수 있게 í•´ì¤ë‹ˆë‹¤.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) 제거를 시작합니다." + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "ì´ í”„ë¡œê·¸ëž¨ì€ ë‹¹ì‹ ì˜ ì»´í“¨í„°ì—ì„œ $(^NameDA)(ì„)를 제거할 것입니다.$\r$\n$\r$\n제거를 시작하기 ì „ì— $(^NameDA)(ì„)를 종료하여 주시기 ë°”ëžë‹ˆë‹¤.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "사용권 계약" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA)(ì„)를 설치하시기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 'ë™ì˜í•¨'ì„ ëˆŒëŸ¬ 주세요. $(^NameDA)(ì„)를 설치하기 위해서는 반드시 ë‚´ìš©ì— ë™ì˜í•˜ì…”야 합니다." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 아래 ì‚¬í•­ì„ ì„ íƒí•´ 주세요. $(^NameDA)(ì„)를 설치하기 위해서는 반드시 ë‚´ìš©ì— ë™ì˜í•˜ì…”야 합니다. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 첫 번째 ì‚¬í•­ì„ ì„ íƒí•´ 주세요. $(^NameDA)(ì„)를 설치하기 위해서는 반드시 ë‚´ìš©ì— ë™ì˜í•˜ì…”야 합니다. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "사용권 계약 ë™ì˜" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA)(ì„)를 제거하시기 ì „ì— ì‚¬ìš©ê¶Œ 계약 ë‚´ìš©ì„ ì‚´íŽ´ë³´ì‹œê¸° ë°”ëžë‹ˆë‹¤." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 'ë™ì˜í•¨'ì„ ëˆŒëŸ¬ 주세요. $(^NameDA)(ì„)를 제거하기 위해서는 반드시 ë‚´ìš©ì— ë™ì˜í•˜ì…”야 합니다." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 아래 ì‚¬í•­ì„ ì„ íƒí•´ 주세요. $(^NameDA)(ì„)를 제거하기 위해서는 반드시 ë‚´ìš©ì— ë™ì˜í•˜ì…”야 합니다. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ë‚´ìš©ì— ë™ì˜í•˜ì…¨ë‹¤ë©´ 첫 번째 ì‚¬í•­ì„ ì„ íƒí•´ 주세요. $(^NameDA)(ì„)를 제거하기 위해서는 반드시 ë‚´ìš©ì— ë™ì˜í•˜ì…”야 합니다. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "사용권 계약 ë™ì˜ ì‚¬í•­ì˜ ë‚˜ë¨¸ì§€ ë¶€ë¶„ì„ ë³´ì‹œë ¤ë©´ [Page Down] 키를 눌러 주세요." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "구성 요소 ì„ íƒ" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "ì„¤ì¹˜í•˜ê³ ìž í•˜ëŠ” $(^NameDA)ì˜ êµ¬ì„± 요소를 ì„ íƒí•´ 주세요." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "구성 요소 ì„ íƒ" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ì œê±°í•˜ê³ ìž í•˜ëŠ” $(^NameDA)ì˜ êµ¬ì„± 요소를 ì„ íƒí•´ 주세요." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ìƒì„¸ 설명" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ìƒì„¸ ì„¤ëª…ì„ ë³´ê³  싶으신 ë¶€ë¶„ì— ë§ˆìš°ìŠ¤ë¥¼ 올려놓으세요." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ìƒì„¸ ì„¤ëª…ì„ ë³´ê³  싶으신 ë¶€ë¶„ì„ ì„ íƒí•˜ì„¸ìš”." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "설치 위치 ì„ íƒ" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA)(ì„)를 설치할 í´ë”를 ì„ íƒí•´ 주세요." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "제거 위치 ì„ íƒ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA)(ì„)를 제거할 í´ë”를 ì„ íƒí•´ 주세요." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "설치중" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA)(ì„)를 설치하는 ë™ì•ˆ ìž ì‹œ 기다려 주세요." + ${LangFileString} MUI_TEXT_FINISH_TITLE "설치 완료" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "설치가 성공ì ìœ¼ë¡œ 완료ë˜ì—ˆìŠµë‹ˆë‹¤." + ${LangFileString} MUI_TEXT_ABORT_TITLE "설치 취소" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "프로그램 설치가 취소ë˜ì—ˆìŠµë‹ˆë‹¤." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "제거중" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA)(ì„)를 제거하는 ë™ì•ˆ ìž ì‹œ 기다려 주시기 ë°”ëžë‹ˆë‹¤." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "제거 마침" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "í”„ë¡œê·¸ëž¨ì„ ì„±ê³µì ìœ¼ë¡œ 제거하였습니다." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "프로그램 제거 취소" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "프로그램 제거가 취소ë˜ì—ˆìŠµë‹ˆë‹¤." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) 설치 완료" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA)ì˜ ì„¤ì¹˜ê°€ 완료ë˜ì—ˆìŠµë‹ˆë‹¤.$\r$\n$\r$\n설치 í”„ë¡œê·¸ëž¨ì„ ë§ˆì¹˜ë ¤ë©´ '마침' ë²„íŠ¼ì„ ëˆŒëŸ¬ 주세요." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA)ì˜ ì„¤ì¹˜ë¥¼ 완료하기 위해서는 ì‹œìŠ¤í…œì„ ë‹¤ì‹œ 시작해야 합니다. 지금 재부팅 하시겠습니까?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) 제거 완료" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA)ì˜ ì œê±°ê°€ 완료 ë˜ì—ˆìŠµë‹ˆë‹¤.$\r$\n$\r$\n설치 í”„ë¡œê·¸ëž¨ì„ ë§ˆì¹˜ë ¤ë©´ '마침' ë²„íŠ¼ì„ ëˆŒëŸ¬ 주세요." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA)ì˜ ì œê±°ë¥¼ 완료하기 위해서는 ì‹œìŠ¤í…œì„ ë‹¤ì‹œ 시작해야 합니다. 지금 재부팅 하시겠습니까?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "지금 재부팅 하겠습니다." + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "ë‚˜ì¤‘ì— ìž¬ë¶€íŒ… 하겠습니다." + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) 실행하기(&R)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Readme íŒŒì¼ ë³´ê¸°(&S)" + ${LangFileString} MUI_BUTTONTEXT_FINISH "마침" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "시작 메뉴 í´ë” ì„ íƒ" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "í”„ë¡œê·¸ëž¨ì˜ ë°”ë¡œ 가기 ì•„ì´ì½˜ì´ ìƒì„±ë  시작 메뉴 í´ë” ì„ íƒ." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "í”„ë¡œê·¸ëž¨ì˜ ë°”ë¡œ 가기 ì•„ì´ì½˜ì´ ìƒì„±ë  시작 메뉴 í´ë”를 ì„ íƒí•˜ì„¸ìš”. 새로운 í´ë”를 ìƒì„±í•˜ë ¤ë©´ í´ë” ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "바로 가기 ì•„ì´ì½˜ì„ 만들지 않겠습니다." +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA) 제거" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) 제거하기" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "$(^Name) 설치를 취소하시겠습니까?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name) 제거를 취소하시겠습니까?" +!endif diff --git a/tools/Contrib/Language files/Kurdish.nlf b/tools/Contrib/Language files/Kurdish.nlf new file mode 100644 index 0000000..94070c5 --- /dev/null +++ b/tools/Contrib/Language files/Kurdish.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID (none exists for Kurdish at this time) +9999 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1254 +# RTL - anything else than RTL means LTR +- +# Translation by Rêzan Tovjîn(chagy) (retovjin@hotmail.com.com) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Sazkirin +# ^UninstallCaption +$(^Name) Rakirin +# ^LicenseSubCaption +: Peymana Lîsansê +# ^ComponentsSubCaption +: Vebijêrkên Sazkirinê +# ^DirSubCaption +: Peldanka Sazkirinê +# ^InstallingSubCaption +: Tê Sazkirin +# ^CompletedSubCaption +: Qediya +# ^UnComponentsSubCaption +: Vebijêrkên Rakirinê +# ^UnDirSubCaption +: Peldanka Rakirinê +# ^ConfirmSubCaption +: Erêkirin +# ^UninstallingSubCaption +: Tê Rakirin +# ^UnCompletedSubCaption +: Qediya +# ^BackBtn +< &Vegere +# ^NextBtn +&Bidomîne > +# ^AgreeBtn +&Ez Dipejirînim +# ^AcceptBtn +Åžertên Peymanê &Dipejirînim +# ^DontAcceptBtn +Åžertên Peymanê Napejirînim +# ^InstallBtn +&Saz Bike +# ^UninstallBtn +&Rake +# ^CancelBtn +Betal +# ^CloseBtn +&Bigire +# ^BrowseBtn +&Çavlêgerîn... +# ^ShowDetailsBtn +Hûragahiyan &Nîşan Bide +# ^ClickNext +Ji bo berdewamê 'Bidomîne'yê bitikîne. +# ^ClickInstall +Ji bo destpêka sazkirinê 'Saz Bike'yê bitikîne. +# ^ClickUninstall +Ji bo destpêka rakirinê 'Rake' bitikîne. +# ^Name +nav +# ^Completed +Qediya +# ^LicenseText +Ji kerema xwe re berî tu bernameya $(^NameDA) saz bikî, çavekî li peymana lîsansê bigerîne. Heke tu hemû ÅŸertên peymanê dipejirînî, 'Ez Dipejirînim'ê bitikîne. +# ^LicenseTextCB +Ji kerema xwe re berî tu bernameya $(^NameDA) saz bikî, çavekî li peymana lîsansê bigerîne. Heke tu hemû ÅŸertan dipejirînî, zeviya erêkirinê ya jêrîn dagire. $_CLICK +# ^LicenseTextRB +Ji kerema xwe re berî tu bernameya $(^NameDA) saz bikî çavekî li peymana lîsansê bigerîne. Heke tu hemû ÅŸertên peymanê dipejirînî, zeviya vebijêrkê ya jêrîn dagire. $_CLICK +# ^UnLicenseText +Ji kerema xwe re berî tu bernameya $(^NameDA) rakî, çavekî li peymana lîsansê bigerîne. Heke tu hemû ÅŸertên peymanê dipejirînî, 'Ez Dipejirînim'ê bitikîn. +# ^UnLicenseTextCB +Ji kerema xwe re berî tu bernameya $(^NameDA) ji pergala xwe rakî, çavekî li peymana lîsansê bigerîne. Heke tu hemû ÅŸertên peymanê dipejirînî, zeviya jêrîn a erêkirinê dagire. $_CLICK +# ^UnLicenseTextRB +Ji kerema xwe re berî tu bernameya $(^NameDA) ji pergala xwe rakî, çavekî li peymana lîsansê bigerîne. Heke tu hemû ÅŸertên peymanê dipejirînî, zeviya vebijêrkê ya jêrîn dagire. $_CLICK +# ^Custom +Taybet +# ^ComponentsText +Beşên tu dixwazî saz bikî hilbijêre û niqirên 'check' beşên tu naxwazî werin sazkirin rake. $_CLICK +# ^ComponentsSubText1 +Awayê sazkirinê hilbijêre: +# ^ComponentsSubText2_NoInstTypes +Beşên dê werin sazkirin hilbijêre: +# ^ComponentsSubText2 +an jî, beşên beşên tu dixwazî werin sazkirin hilbijêre: +# ^UnComponentsText +Beşên tu dixwazî rakî hilbijêre, an jî niqira 'check'a ber beşên tu daxwazî were rakirin, rake. $_CLICK +# ^UnComponentsSubText1 +Awayê rakirinê hilbijêre: +# ^UnComponentsSubText2_NoInstTypes +Beşên dê werin rakirin hilbijêre: +# ^UnComponentsSubText2 +an jî beşên tu dixwazî werin rakirin hilbijêre: +# ^DirText +$(^NameDA) dê ji aliyê sazkirinê ve li peldanka jêrîn were sazkirin. Ji bo tu li peldankeke din saz bikî 'Çavlêgerîn'ê bitikîne û peldankeke din hilbijêre. $_CLICK +# ^DirSubText +Peldanka Armanckirî +# ^DirBrowseText +Peldanka tu dixwazî bernameya $(^NameDA) lê were sazkirin hilbijêre: +# ^UnDirText +$(^NameDA) dê ji aliyê sazkirinê ve ji peldanka jêrîn were rakirin. Ji bo tu ji peldankeke cuda rakî 'Çavlêgerîn'ê bitikîne û peldankeke din hilbijêre. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Peldanka tu dixwazî bernameya $(^NameDA) jê were rakirin hilbijêre: +# ^SpaceAvailable +"Herêma vala ku dikare were bikaranîn: " +# ^SpaceRequired +"Herêma vala ya pêwist: " +# ^UninstallingText +Bernameya $(^NameDA) dê ji peldanka jêrîn were rakirin. $_CLICK +# ^UninstallingSubText +tê rakirin: +# ^FileError +Dosya ji bo nivîsandinê venebû: \r\n\t"$0"\r\nJi bo destjêberdana sazkirinê abort'ê bitikîne,\r\nji bo ceribandina ji nû ve retry'ê , an jî\r\nji bo tu dosiyê tune bihesibînî û berdewam bikî ignore'yê bitikîne +# ^FileError_NoIgnore +Dosya ji bo nivîsandinê vebenebû: \r\n\t"$0"\r\nJi bo nivîsandina ji nû ve retry'yê, an jî\r\nJi bo destjêberdana sazkirinê abort'ê hilbijêre +# ^CantWrite +"Nehate Nivîsandin: " +# ^CopyFailed +Çewtiya Jibergirtinê +# ^CopyTo +"Ji Ber Bigire " +# ^Registering +"Tê Tomarkirin: " +# ^Unregistering +"Tomarî Tê Jêbirin: " +# ^SymbolNotFound +"Dawêr Nehate Dîtin: " +# ^CouldNotLoad +"Nehate Barkirin: " +# ^CreateFolder +"Peldankê Çêke: " +# ^CreateShortcut +"Kineriyê Çêke: " +# ^CreatedUninstaller +"Sêrbazê Rakirinê Hate Çêkirin: " +# ^Delete +"Dosyayê Jê Bibe: " +# ^DeleteOnReboot +"Dema ji nû ve dest pê kir dosiyê jê bibe: " +# ^ErrorCreatingShortcut +"Dema çêkirina kineriyê çewtî derket: " +# ^ErrorCreating +"Çewtiya çêkirinê: " +# ^ErrorDecompressing +Di dema vekirina daneyan de çewtî derket! Sazkirina Çewt? +# ^ErrorRegistering +Çewtiya tomariya DLL +# ^ExecShell +"Qalikê Xebatê: " +# ^Exec +"Bixebitîne: " +# ^Extract +"Veke: " +# ^ErrorWriting +"Veke: Dema li dosiyê hate nivîsîn çewtiyek derket " +# ^InvalidOpcode +Sazkirina Xirabe: koda nerast pêkanînê +# ^NoOLE +"OLE nehate dîtin: " +# ^OutputFolder +"Peldanka derketinê: " +# ^RemoveFolder +"Peldankê jê bibe: " +# ^RenameOnReboot +"Dema ji nû hate destpêkirin ji nû ve bi nav bike: " +# ^Rename +"Nav Biguhere: " +# ^Skipped +"Hate gavkirin: " +# ^CopyDetails +Hûragahiyan li Pano'yê binivîse +# ^LogInstall +Pêkanîna sazkirinê li lênûska rewşê binivîse +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Kurdish.nsh b/tools/Contrib/Language files/Kurdish.nsh new file mode 100644 index 0000000..75a2786 --- /dev/null +++ b/tools/Contrib/Language files/Kurdish.nsh @@ -0,0 +1,122 @@ +;Language: Kurdish +;By Rêzan Tovjîn +;Updated by Erdal Ronahî (erdal.ronahi@gmail.com) + +!insertmacro LANGFILE "Kurdish" = "Kurdî" "Kurdi" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) Tu bi xêr hatî sêrbaziya sazkirinê" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ev sêrbaz dê di dema sazkirina $(^NameDA) de rêberiya te bike.$\r$\n$\r$\nBerî tu dest bi sazkirinê bikî, em pêşniyar dikin tu hemû bernameyên vekirî bigirî. Bi vî rengî beyî tu komputera ji nû ve vekî dê hinek dosiyên pergalê bêpirsgirêk werin sazkirin.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Tu bi xêr hatî sêrbaziya rakirina bernameya $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ev sêrbaz ji bo rakirina bernameya $(^NameDA) dê alîkariya te bike.$\r$\n$\r$\nBerî tu dest bi rakirina bernameyê bikî, bernameyên vekirî hemûyan bigire. Bi vî rengî dû re tu mecbûr namînî ku komputera xwe bigirî û ji nû ve veki.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Peymana Lîsansê" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ji kerema xwe re berî tu bernameya $(^NameDA) saz bikî, peymana lîsansê bixwîne." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Heke tu ÅŸertên peymanê dipejirînî, 'Ez Dipejirînim'ê bitikîne. Ji bo sazkirina bernameya $(^NameDA) divê tu ÅŸertên peymanê bipejirînî." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Heke tu ÅŸertên peymanê dipejirînî, zeviya piÅŸtrastkirinê ya jêrîn dagire. Ji bo tu bikarî bernameya $(^NameDA) saz bikî divê tu ÅŸertên peymanê bipejirînî. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Heke tu ÅŸertên peymanê dipejirînî, biÅŸkojka erêkirinê ya jêrîn bitikîne. Ji bo sazkirina bernameya $(^NameDA) divê tu ÅŸertên peymanê bipejirînî. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Peymana Lîsansê" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Berî tu bernameya $(^NameDA) ji pergala xwe rakî peymanê bixwîne." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Heke tu ÅŸertên peymanê dipejirînî, 'Dipejirînim'ê bitikîne. Ji bo rakirina bernameya $(^NameDA) divê tu ÅŸertên peymanê bipejirînî." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Heke tu ÅŸertên peymanê dipejirînî, zeviya erêkirinê ya jêrîn dagire. Ji bo tu bernameya $(^NameDA) ji pergala xwe rakî divê tu peymanê bipejirînî. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Heke tu ÅŸertên peymanê dipejirînî, biÅŸkojka erêkirinê ya jêrîn hilbijêre. Ji bo tu bernameya $(^NameDA) ji pergala xwe rakî divê tu ÅŸertên peymanê bipejirînî. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Ji bo dûmahîka peymanê biÅŸkojka 'page down' bitikîne." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Hilbijartina pareyan" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Ji bo sazkirina $(^NameDA) pareyên tu dixwazî hilbijêre." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Hilbijartina Pareyan" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Pareya bernameya $(^NameDA) ku tu dixwazî rakî hilbijêre." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Dazanîn" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ji bo tu der barê pareyan de agahiyan bistînî nîşanekê bibe ser pareyekê." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ji bo tu der barê pareyan de agahiyan bistînî pareyekê hilbijêre." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Hilbijartina peldanka armanckirî" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Peldanka tu dixwazî bernameya $(^NameDA) tê de were sazkirin hilbijêre." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Hilbijartina Peldanka Dê Were Rakirin" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Peldanka bernameya $(^NameDA) ku tudixwazî rakî hilbijêre." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Tê sazkirin" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Ji kerema xwe re heta sazkirina $(^NameDA) biqede raweste." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Sazkirin Qediya" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Sazkirin bi serkeftinî qediya." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Sazkirin hate betalkirin" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Sazkirin be tevahî qediya." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Tê rakirin" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Heta bernameya $(^NameDA) ji pergala te were rakirin raweste." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Rakirina Bernameyê Biqedîne" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Rakirina bernameyê bi serkeftin pêk hat." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Rakirina bernameyê hate betalkirin" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Rakirina bernameyê neqediya." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Sêrbaziya sazkirina $(^NameDA) diqede." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) li komputera te hate barkirin.$\r$\n$\r$\n'Biqedîne'yê bitikîne û sazkirinê bi dawî bîne." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Ji bo bidawîkirina sazkirina $(^NameDA) divê tu komputerê ji nû ve vekî.Tu dixwazî komputerê ji nû ve vekî?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Sêrbaziya Rakirina Bernameya $(^NameDA) Tê Temamkirin" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Bernameya $(^NameDA) ji pergale hate rakirin.$\r$\n$\r$\nJi bo girtina sêrbaz 'biqedîne'yê bitikîne." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Ji bo rakirina bernameya $(^NameDA) biqede divê tu komputera xwe ji nû ve vekî. Tu dixwazî niha komputera te were girtin û ji nû ve dest pê bike?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ji nû ve veke" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ezê paşê ji nû ve vekim." + ${LangFileString} MUI_TEXT_FINISH_RUN "Bernameya $(^NameDA) bixebitîne" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Dosiya min bixwîne/readme &nîşan bide" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Biqedîne" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Hilbijartina Peldanka Pêşeka Destpêkê" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Peldanka pêşeka destpêkê ya ku dê kineriya $(^NameDA) tê de were bikaranîn hilbijêre." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Peldanka pêşeka destpêkê ya ku dê kineriya bernameyê tê de were bicihkirin hilbijêre. Tu dikarî bi navekî nû peldankeke nû ava bikî." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Bêyî çêkirina kineriyê bidomîne" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Bernameya $(^NameDA) Rake" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Rakirina bernameya $(^NameDA) ji pergala te." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Tu bawer î ku dixwazî ji sazkirina $(^Name) derkevî?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Tu bawer î ku dixwazî dest ji rakirina bernameya $(^Name) berdî?" +!endif diff --git a/tools/Contrib/Language files/Latvian.nlf b/tools/Contrib/Language files/Latvian.nlf new file mode 100644 index 0000000..179fb73 --- /dev/null +++ b/tools/Contrib/Language files/Latvian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +1062 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1257 +# RTL - anything else than RTL means LTR +- +# Translation by Valdis GriÄ·is (valmiera-9@inbox.lv) +# Corrections by Kristaps Meņģelis / x-f (x-f 'AT' inbox.lv) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +'$(^Name)' UzstÄdÄ«Å¡ana +# ^UninstallCaption +'$(^Name)' AtinstalÄ“Å¡ana +# ^LicenseSubCaption +: Licences lÄ«gums +# ^ComponentsSubCaption +: UzstÄdÄ«Å¡anas opcijas +# ^DirSubCaption +: UzstÄdÄ«Å¡anas mape +# ^InstallingSubCaption +: Notiek uzstÄdÄ«Å¡ana +# ^CompletedSubCaption +: UzstÄdÄ«Å¡ana pabeigta. +# ^UnComponentsSubCaption +: AtinstalÄ“Å¡anas opcijas +# ^UnDirSubCaption +: AtinstalÄ“Å¡anas mape +# ^ConfirmSubCaption +: ApstiprinÄÅ¡ana +# ^UninstallingSubCaption +: Notiek atinstalÄ“Å¡ana +# ^UnCompletedSubCaption +: AtinstalÄ“Å¡ana pabeigta +# ^BackBtn +< &Atpakaļ +# ^NextBtn +&TÄlÄk > +# ^AgreeBtn +Es &piekrÄ«tu +# ^AcceptBtn +Es &piekrÄ«tu licences lÄ«guma noteikumiem +# ^DontAcceptBtn +Es &nepiekrÄ«tu licences lÄ«guma noteikumiem +# ^InstallBtn +&UzstÄdÄ«t +# ^UninstallBtn +&AtinstalÄ“t +# ^CancelBtn +Atcelt +# ^CloseBtn +Ai&zvÄ“rt +# ^BrowseBtn +PÄ&rlÅ«kot... +# ^ShowDetailsBtn +ParÄdÄ«t &detaļas +# ^ClickNext +Spiediet 'TÄlÄk', lai turpinÄtu. +# ^ClickInstall +Spiediet 'UzstÄdÄ«t', lai sÄktu uzstÄdÄ«Å¡anas procesu. +# ^ClickUninstall +Spiediet 'AtinstalÄ“t', lai sÄktu atinstalÄ“Å¡anas procesu. +# ^Name +VÄrds +# ^Completed +UzstÄdÄ«Å¡ana pabeigta +# ^LicenseText +LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' uzstÄdÄ«Å¡anas. Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad spiediet 'Es piekrÄ«tu'. +# ^LicenseTextCB +LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' uzstÄdÄ«Å¡anas. Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad atzÄ«mÄ“jiet izvÄ“les rÅ«tiņu. $_CLICK +# ^LicenseTextRB +LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' uzstÄdÄ«Å¡anas. Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad izvÄ“lieties pirmo zemÄkesoÅ¡o opciju. $_CLICK +# ^UnLicenseText +LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' atinstalÄ“Å¡anas. Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad spiediet 'Es piekrÄ«tu'. +# ^UnLicenseTextCB +LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' atinstalÄ“Å¡anas. Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad atzÄ«mÄ“jiet izvÄ“les rÅ«tiņu. $_CLICK +# ^UnLicenseTextRB +LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' atinstalÄ“Å¡anas. Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad izvÄ“lieties zemÄkesoÅ¡o opciju. $_CLICK +# ^Custom +PielÄgots +# ^ComponentsText +IzvÄ“lieties, kurus komponentus vÄ“laties uzstÄdÄ«t un neiezÄ«mÄ“jiet tos, kurus nevÄ“laties uzstÄdÄ«t. $_CLICK +# ^ComponentsSubText1 +IzvÄ“lieties uzstÄdÄ«Å¡anas veidu: +# ^ComponentsSubText2_NoInstTypes +IzvÄ“lieties uzstÄdÄmos komponentus: +# ^ComponentsSubText2 +Vai arÄ« – izvÄ“lieties tikai nepiecieÅ¡amos komponentus, kurus vÄ“laties uzstÄdÄ«t: +# ^UnComponentsText +IzvÄ“lieties, kurus komponentus atinstalÄ“t un neiezÄ«mÄ“jiet tos, kurus nevÄ“laties atinstalÄ“t. $_CLICK +# ^UnComponentsSubText1 +IzvÄ“lieties atinstalÄ“Å¡anas veidu: +# ^UnComponentsSubText2_NoInstTypes +IzvÄ“lieties atinstalÄ“jamos komponentus: +# ^UnComponentsSubText2 +Vai arÄ« – izvÄ“lieties tikai nepiecieÅ¡amos komponentus, kurus vÄ“laties atinstalÄ“t: +# ^DirText +'$(^NameDA)' tiks uzstÄdÄ«ta Å¡ajÄ mapÄ“. Lai to uzstÄdÄ«tu citÄ mapÄ“, nospiediet 'PÄrlÅ«kot' un izvÄ“lieties citu mapi. $_CLICK +# ^DirSubText +UzstÄdÄ«Å¡anas mape +# ^DirBrowseText +IzvÄ“lieties mapi, kurÄ uzstÄdÄ«t '$(^NameDA)': +# ^UnDirText +'$(^NameDA)' tiks atinstalÄ“ta no Å¡Ä«s mapes. Lai to atinstalÄ“tu no citas mapes, nospiediet 'PÄrlÅ«kot' un izvÄ“lieties citu mapi. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +IzvÄ“lieties mapi, no kuras atinstalÄ“t '$(^NameDA)': +# ^SpaceAvailable +"Pieejamais diska apjoms: " +# ^SpaceRequired +"NepiecieÅ¡amais diska apjoms: " +# ^UninstallingText +'$(^NameDA)' tiks atinstalÄ“ta no Å¡Ä«s mapes. $_CLICK +# ^UninstallingSubText +AtinstalÄ“Å¡ana no: +# ^FileError +Kļūda atverot failu rakstÄ«Å¡anai: \r\n\t"$0"\r\nNospiediet 'Atcelt', lai atceltu uzstÄdÄ«Å¡anas procesu,\r\n'MÄ“Ä£inÄt vÄ“lreiz', lai atkÄrtoti mÄ“Ä£inÄtu rakstÄ«t failÄ vai\r\n'IgnorÄ“t', lai izlaistu Å¡Ä« faila uzstÄdÄ«Å¡anu +# ^FileError_NoIgnore +Kļūda atverot failu rakstÄ«Å¡anai: \r\n\t"$0"\r\nNospiediet 'Atcelt', lai pÄrtrauktu uzstÄdÄ«Å¡anas procesu +# ^CantWrite +"Nevar ierakstÄ«t: " +# ^CopyFailed +KopÄ“Å¡ana neizdevÄs +# ^CopyTo +"KopÄ“ uz " +# ^Registering +"ReÄ£istrÄ“: " +# ^Unregistering +"AtreÄ£istrÄ“: " +# ^SymbolNotFound +"Simbols nav atrasts: " +# ^CouldNotLoad +"Nav iespÄ“jams ielÄdÄ“t: " +# ^CreateFolder +"Izveido mapi: " +# ^CreateShortcut +"Izveido saÄ«sni: " +# ^CreatedUninstaller +"Izveidots atinstalÄ“tÄjs: " +# ^Delete +"DzÄ“Å¡ failu: " +# ^DeleteOnReboot +"DzÄ“st pÄ“c pÄrstartÄ“Å¡anas: " +# ^ErrorCreatingShortcut +"Kļūda veidojot saÄ«sni: " +# ^ErrorCreating +"Kļūda veidojot: " +# ^ErrorDecompressing +Kļūda atkompresÄ“jot datus! BojÄta instalÄcija? +# ^ErrorRegistering +Kļūda reÄ£istrÄ“jot DLL failu +# ^ExecShell +"Izpilda ÄaulÄ: " +# ^Exec +"Izpilda: " +# ^Extract +"Atspiež: " +# ^ErrorWriting +"AtspieÅ¡ana: kļūda rakstot failÄ " +# ^InvalidOpcode +InstalÄcija bojÄta: nederÄ«gs CRC kods +# ^NoOLE +"Nav OLE priekÅ¡: " +# ^OutputFolder +"Izvades mape: " +# ^RemoveFolder +"DzÄ“Å¡ mapi: " +# ^RenameOnReboot +"PÄrsaukt pÄ“c pÄrstartÄ“Å¡anas: " +# ^Rename +"PÄrsaukt: " +# ^Skipped +"Izlaists: " +# ^CopyDetails +IekopÄ“t detaļas starpliktuvÄ“ +# ^LogInstall +IerakstÄ«t žurnÄla failÄ uzstÄdÄ«Å¡anas procesu +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Latvian.nsh b/tools/Contrib/Language files/Latvian.nsh new file mode 100644 index 0000000..4371e89 --- /dev/null +++ b/tools/Contrib/Language files/Latvian.nsh @@ -0,0 +1,122 @@ +;Language: LatvieÅ¡u [Latvian] - (1062) +;By Valdis GriÄ·is +;Corrections by Kristaps Meņģelis / x-f (x-f 'AT' inbox.lv) + +!insertmacro LANGFILE "Latvian" = "LatvieÅ¡u" "Latviesu" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Esiet sveicinÄti '$(^NameDA)' uzstÄdÄ«Å¡anas vednÄ«" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Å is uzstÄdÄ«Å¡anas vednis jums palÄ«dzÄ“s veikt '$(^NameDA)' uzstÄdÄ«Å¡anu.$\r$\n$\r$\nÄ»oti ieteicams aizvÄ“rt citas programmas pirms Å¡Ä«s programmas uzstÄdÄ«Å¡anas veikÅ¡anas. Tas ļaus atjaunot svarÄ«gus sistÄ“mas failus bez datora pÄrstartÄ“Å¡anas.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Esiet sveicinÄti '$(^NameDA)' atinstalÄ“Å¡anas vednÄ«" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Å is vednis jums palÄ«dzÄ“s veikt '$(^NameDA)' atinstalÄ“Å¡anu.$\r$\n$\r$\nPirms sÄkt atinstalÄ“Å¡anas procesu, pÄrliecinieties, vai '$(^NameDA)' paÅ¡laik nedarbojas.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licences lÄ«gums" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' uzstÄdÄ«Å¡anas." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ja piekrÄ«tat licences lÄ«guma noteikumiem, spiediet 'PiekrÄ«tu', lai turpinÄtu uzstÄdÄ«Å¡anu. Jums ir jÄpiekrÄ«t licences noteikumiem, lai uzstÄdÄ«tu '$(^NameDA)'." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad atzÄ«mÄ“jiet izvÄ“les rÅ«tiņu. Jums ir jÄpiekrÄ«t licences noteikumiem, lai uzstÄdÄ«tu '$(^NameDA)'. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad izvÄ“lieties pirmo zemÄkesoÅ¡o opciju. Jums ir jÄpiekrÄ«t licences noteikumiem, lai uzstÄdÄ«tu '$(^NameDA)'. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licences lÄ«gums" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "LÅ«dzu izlasiet licences lÄ«gumu pirms '$(^NameDA)' atinstalÄ“Å¡anas." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ja piekrÄ«tat licences noteikumiem, spiediet 'PiekrÄ«tu', lai turpinÄtu. Jums ir jÄpiekrÄ«t licences noteikumiem, lai atinstalÄ“tu '$(^NameDA)'." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad iezÄ«mÄ“jiet izvÄ“les rÅ«tiņu. Jums ir jÄpiekrÄ«t licences noteikumiem, lai atinstalÄ“tu '$(^NameDA)'. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ja piekrÄ«tat licences lÄ«guma noteikumiem, tad izvÄ“lieties pirmo zemÄkesoÅ¡o opciju. Jums ir jÄpiekrÄ«t licences noteikumiem, lai atinstalÄ“tu '$(^NameDA)'. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Spiediet 'Page Down', lai aplÅ«kotu visu lÄ«gumu." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "IzvÄ“lieties komponentus" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "IzvÄ“lieties nepiecieÅ¡amÄs '$(^NameDA)' sastÄvdaļas, kuras uzstÄdÄ«t." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "IzvÄ“lieties komponentus" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "IzvÄ“lieties nepiecieÅ¡amÄs '$(^NameDA)' sastÄvdaļas, kuras atinstalÄ“t." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Apraksts" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Novietojiet peles kursoru uz komponenta, lai tiktu parÄdÄ«ts tÄ apraksts." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "IzvÄ“lieties uzstÄdÄ«Å¡anas mapi" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "IzvÄ“lieties mapi, kurÄ uzstÄdÄ«t '$(^NameDA)'." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "IzvÄ“lieties atinstalÄ“Å¡anas mapi" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "IzvÄ“lieties mapi, no kuras notiks '$(^NameDA)' atinstalÄ“Å¡ana." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Notiek uzstÄdÄ«Å¡ana" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "LÅ«dzu uzgaidiet, kamÄ“r notiek '$(^NameDA)' uzstÄdÄ«Å¡ana." + ${LangFileString} MUI_TEXT_FINISH_TITLE "UzstÄdÄ«Å¡ana pabeigta" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "UzstÄdÄ«Å¡ana noritÄ“ja veiksmÄ«gi." + ${LangFileString} MUI_TEXT_ABORT_TITLE "UzstÄdÄ«Å¡ana atcelta" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "UzstÄdÄ«Å¡ana nenoritÄ“ja veiksmÄ«gi." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Notiek atinstalÄ“Å¡ana" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "LÅ«dzu uzgaidiet, kamÄ“r '$(^NameDA)' tiek atinstalÄ“ta." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "AtinstalÄ“Å¡ana pabeigta" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "AtinstalÄ“Å¡ana noritÄ“ja veiksmÄ«gi." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "AtinstalÄ“Å¡ana atcelta" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "AtinstalÄ“Å¡ana nenoritÄ“ja veiksmÄ«gi." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Tiek pabeigta '$(^NameDA)' uzstÄdÄ«Å¡ana" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "'$(^NameDA)' tika veiksmÄ«gi uzstÄdÄ«ta jÅ«su datorÄ.$\r$\n$\r$\nNospiediet 'Pabeigt', lai aizvÄ“rtu vedni." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "JÅ«su datoru ir nepiecieÅ¡ams pÄrstartÄ“t, lai pabeigtu '$(^NameDA)' uzstÄdÄ«Å¡anu. Vai vÄ“laties pÄrstartÄ“t datoru tÅ«lÄ«t?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Tiek pabeigta '$(^NameDA)' atinstalÄcija" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "'$(^NameDA)' tika veiksmÄ«gi izdzÄ“sta no jÅ«su datora.$\r$\n$\r$\nNospiediet 'Pabeigt', lai aizvÄ“rtu vedni." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "JÅ«su datoru nepiecieÅ¡ams pÄrstartÄ“t, lai pabeigtu '$(^NameDA)' atinstalÄ“Å¡anu. Vai vÄ“laties pÄrstartÄ“t datoru tÅ«lÄ«t?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "PÄrstartÄ“t tÅ«lÄ«t" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Es vÄ“los pÄrstartÄ“t pats vÄ“lÄk" + ${LangFileString} MUI_TEXT_FINISH_RUN "P&alaist '$(^NameDA)'" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Pa&rÄdÄ«t LasiMani failu" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Pabeigt" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "IzvÄ“lieties 'Start Menu' folderi" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "IzvÄ“lieties 'Start Menu' mapi '$(^NameDA)' saÄ«snÄ“m." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "IzvÄ“lieties 'Start Menu' mapi, kurÄ tiks izveidotas programmas saÄ«snes. Varat arÄ« pats izveidot jaunu mapi." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Neveidot saÄ«snes" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "'$(^NameDA)' atinstalÄ“Å¡ana" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "DzÄ“st '$(^NameDA)' no jÅ«su datora." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Vai tieÅ¡Äm vÄ“laties pÄrtraukt '$(^Name)' uzstÄdÄ«Å¡anu?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Vai tieÅ¡Äm vÄ“laties pÄrtraukt '$(^Name)' atinstalÄ“Å¡anu?" +!endif diff --git a/tools/Contrib/Language files/Lithuanian.nlf b/tools/Contrib/Language files/Lithuanian.nlf new file mode 100644 index 0000000..8a489a7 --- /dev/null +++ b/tools/Contrib/Language files/Lithuanian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +1063 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1257 +# RTL - anything else than RTL means LTR +- +# Translation by Vytautas Krivickas (Vytautas) +# Updated by Danielius Scepanskis (Daan daniel@takas.lt) 2004.03.24 +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Ä®diegimas +# ^UninstallCaption +$(^Name) Å alinti +# ^LicenseSubCaption +: Naudojimo sutartis +# ^ComponentsSubCaption +: Ä®diegimo nustatymai +# ^DirSubCaption +: Ä®diegimo katalogas +# ^InstallingSubCaption +: Ä®diegiama +# ^CompletedSubCaption +: Baigta +# ^UnComponentsSubCaption +: IÅ¡trinimo nustatymai +# ^UnDirSubCaption +: IÅ¡trinimo katalogas +# ^ConfirmSubCaption +: Patvirtinimas +# ^UninstallingSubCaption +: Panaikinama +# ^UnCompletedSubCaption +: Baigta +# ^BackBtn +< &Atgal +# ^NextBtn +&Toliau > +# ^AgreeBtn +AÅ¡ &sutinku +# ^AcceptBtn +AÅ¡ &sutinku su naudojimo sutarties sÄ…lygomis +# ^DontAcceptBtn +AÅ¡ &nesutinku su naudojimo sutarties sÄ…lygomis +# ^InstallBtn +&Ä®diegti +# ^UninstallBtn +&Panaikinti +# ^CancelBtn +Nutraukti +# ^CloseBtn +&Uždaryti +# ^BrowseBtn +P&asirinkti... +# ^ShowDetailsBtn +Parodyti &detales +# ^ClickNext +Paspauskite toliau +# ^ClickInstall +Paspauskite įdiegti +# ^ClickUninstall +Paspauskite iÅ¡trinti +# ^Name +Vardas +# ^Completed +Baigta +# ^LicenseText +PraÅ¡ome perskaityti sutartį prieÅ¡ įdiegdami $(^NameDA). Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, spauskite Sutinku. +# ^LicenseTextCB +PraÅ¡ome perskaityti sutartį prieÅ¡ įdiegdami $(^NameDA). Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, padÄ—kite varnelÄ™ tam skirtame laukelyje. $_CLICK +# ^LicenseTextRB +PraÅ¡ome perskaityti sutartį prieÅ¡ įdiegdami $(^NameDA). Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, pasirinkite pirmÄ… pasirinkimÄ… esantį žemiau. $_CLICK +# ^UnLicenseText +PraÅ¡ome perskaityti sutartį prieÅ¡ iÅ¡trinant $(^NameDA). Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, spauskite Sutinku. +# ^UnLicenseTextCB +PraÅ¡ome perskaityti sutartį prieÅ¡ iÅ¡trinant $(^NameDA). Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, padÄ—kite varnelÄ™ tam skirtame laukelyje. $_CLICK +# ^UnLicenseTextRB +PraÅ¡ome perskaityti sutartį prieÅ¡ iÅ¡trinant $(^NameDA). Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, pasirinkite pirmÄ… pasirinkimÄ… esantį žemiau. $_CLICK +# ^Custom +Kitoks +# ^ComponentsText +PadÄ—kite varneles laukeliuose komponentų kuriuos norite įdiegti ir nuimkite nuo kurių nenorite įdiegti. $_CLICK +# ^ComponentsSubText1 +Pasirinkite įdiegimo bÅ«dÄ…: +# ^ComponentsSubText2_NoInstTypes +Pasirinkite komponentus, kuriuos įdiegti: +# ^ComponentsSubText2 +Arba, pasirinkite neprivalomus komponentus, kuriuos jÅ«s norite įdiegti: +# ^UnComponentsText +PadÄ—kite varneles laukeliuose komponentų kuriuos norite paÅ¡alinti ir nuimkite nuo kurių nenorite paÅ¡alinti. $_CLICK +# ^UnComponentsSubText1 +Pasirinkite Å¡alinimo bÅ«dÄ…: +# ^UnComponentsSubText2_NoInstTypes +Pasirinkite komponentus, kuriuos Å¡alinti: +# ^UnComponentsSubText2 +Arba, pasirinkite neprivalomus komponentus, kuriuos jÅ«s norite paÅ¡alinti: +# ^DirText +Ä®diegimas dabar įdiegs $(^NameDA) Å¡iame kataloge. Jeigu norite pakeisti šį katalogÄ…, paspauskite Pasirinkti. $_CLICK +# ^DirSubText +Ä®diegimo katalogas +# ^DirBrowseText +Pasirinkite katalogÄ…, kur įdiegti $(^NameDA): +# ^UnDirText +Ä®diegimas dabar paÅ¡alins $(^NameDA) iÅ¡ Å¡io katalogo. Jeigu norite pakeisti šį katalogÄ… paspauskite Pasirinkti. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Pasirinkite katalogÄ… iÅ¡ kurio paÅ¡alinti $(^NameDA): +# ^SpaceAvailable +Yra vietos: +# ^SpaceRequired +Reikia vietos: +# ^UninstallingText +$(^NameDA) dabar bus paÅ¡alintas iÅ¡ Å¡io katalogo. $_CLICK +# ^UninstallingSubText +Trinama iÅ¡: +# ^FileError +Klaida atidarant failÄ… įraÅ¡ymui: \r\n\t"$0"\r\nPaspauskite Nutraukti, jei norite nutraukti įdiegimÄ…,\r\nPakartoti, jei norite pabandyti dar kartÄ… įraÅ¡yti failÄ…, ar\r\nIgnoruoti, jei norite praleisti šį failÄ… +# ^FileError_NoIgnore +Klaida atidarant failÄ… įraÅ¡ymui: \r\n\t"$0"\r\nPaspauskite Pakartoti, jei norite pabandyti dar kartÄ… įraÅ¡yti failÄ…, ar\r\nNutraukti, jei norite nutraukti įdiegimÄ…. +# ^CantWrite +"Negalima įraÅ¡yti: " +# ^CopyFailed +Kopijavimas nepavyko +# ^CopyTo +Kopijuoti į +# ^Registering +"Užregistruojama: " +# ^Unregistering +"IÅ¡registruojama: " +# ^SymbolNotFound +Nerastas simbolis: +# ^CouldNotLoad +Negaliu įkrauti: +# ^CreateFolder +Sukurti katalogÄ…: +# ^CreateShortcut +Sukurti nuorodÄ…: +# ^CreatedUninstaller +Sukurti panaikinimo programÄ…: +# ^Delete +IÅ¡trinti failÄ…: +# ^DeleteOnReboot +"IÅ¡trinti perkraunant: " +# ^ErrorCreatingShortcut +"Klaida kuriant nuorodÄ…: " +# ^ErrorCreating +"Klaida kuriant: " +# ^ErrorDecompressing +Klaida iÅ¡skleidžiant duomenis! Sugadintas įdiegimo failas? +# ^ErrorRegistering +Klaida užregistruojant DLL +# ^ExecShell +"VykdytiShell: " +# ^Exec +"Vykdyti: " +# ^Extract +"IÅ¡skleisti: " +# ^ErrorWriting +IÅ¡skleisti: klaida įraÅ¡ant į failÄ… +# ^InvalidOpcode +Ä®diegimo failas sugadintas: neteisingas opkodas +# ^NoOLE +"NÄ—ra OLE dÄ—l: " +# ^OutputFolder +"Paskirties katalogas: " +# ^RemoveFolder +"Panaikinti katalogÄ…: " +# ^RenameOnReboot +"Pervardinti perkraunant: " +# ^Rename +"Pervardinti: " +# ^Skipped +"Praleista: " +# ^CopyDetails +Kopijuoti detales į atmintį +# ^LogInstall +Ä®raÅ¡yti įdiegimo detales +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Lithuanian.nsh b/tools/Contrib/Language files/Lithuanian.nsh new file mode 100644 index 0000000..094e99a --- /dev/null +++ b/tools/Contrib/Language files/Lithuanian.nsh @@ -0,0 +1,121 @@ +;Language: Lithuanian (1063) +;By Vytautas Krivickas (Vytautas). Updated by Danielius Scepanskis (Daan daniel@takas.lt) 2004.01.09 + +!insertmacro LANGFILE "Lithuanian" = "Lietuvių" "Lietuviu" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Sveiki atvykÄ™ į $(^NameDA) įdiegimo programÄ…." + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Å i programa jums padÄ—s lengvai įdiegti $(^NameDA).$\r$\n$\r$\nRekomenduojama iÅ¡jungti visas programas, prieÅ¡ pradedant įdiegimÄ…. Tai leis atnaujinti sistemos failus neperkraunat kompiuterio.$\r$\n$\r$\n" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Sveiki atvykÄ™ į $(^NameDA) paÅ¡alinimo programÄ…." + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Å i programa jums padÄ—s lengvai iÅ¡trinti $(^NameDA).$\r$\n$\r$\nPrieÅ¡ pradedant pasitikrinkite kad $(^NameDA) yra iÅ¡jungta.$\r$\n$\r$\n" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Naudojimo sutartis" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "PraÅ¡ome perskaityti sutartį prieÅ¡ įdiegdami $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, spauskite Sutinku. JÅ«s privalote sutikti, jei norite įdiegti $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, padÄ—kite varnelÄ™ tam skirtame laukelyje. JÅ«s privalote sutikti, jei norite įdiegti $(^NameDA). " + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, pasirinkite pirmÄ… pasirinkimÄ… esantį žemiau. JÅ«s privalote sutikti, jei norite įdiegti $(^NameDA). " +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Naudojimo sutartis" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "PraÅ¡ome perskaityti sutartį prieÅ¡ $(^NameDA) paÅ¡alinimÄ…." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, spauskite Sutinku. JÅ«s privalote sutikti, jei norite iÅ¡trinti $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "s, padÄ—kite varnelÄ™ tam skirtame laukelyje. JÅ«s privalote sutikti, jei norite iÅ¡trinti $(^NameDA). " + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jei jÅ«s sutinkate su nurodytomis sÄ…lygomis, pasirinkite pirmÄ… pasirinkimÄ… esantį žemiau. JÅ«s privalote sutikti, jei norite iÅ¡trinti $(^NameDA)." +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Paspauskite Page Down ir perskaitykite visÄ… sutartį." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Pasirinkite" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Pasirinkite kokias $(^NameDA) galimybes jÅ«s norite įdiegti." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Pasirinkite" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Pasirinkite kokias $(^NameDA) galimybes jÅ«s norite paÅ¡alinti." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "PaaiÅ¡kinimas" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Užveskite pelÄ—s žymeklį ant komponento ir pamatysite jo apraÅ¡ymÄ…." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pasirinkite komponentį ir pamatysite jo apraÅ¡ymÄ…." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Pasirinkite įdiegimo vietÄ…" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Pasirinkite katalogÄ… į kÅ«ri įdiegsite $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Pasirinkite iÅ¡trinimo vietÄ…" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Pasirinkite katalogÄ… iÅ¡ kurio iÅ¡trinsite $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Diegiama" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "PraÅ¡ome palaukti, kol $(^NameDA) bus įdiegtas." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Ä®diegimas baigtas" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Ä®diegimas baigtas sekmingai." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Ä®diegimas nutrauktas" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Ä®diegimas nebuvo baigtas sekmingai." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Å alinama" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "PraÅ¡ome palaukti, kol $(^NameDA) bus paÅ¡alinta." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Programos paÅ¡alinimas baigtas" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "IÅ¡trynimas baigtas sekmingai." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "IÅ¡trynimas nutrauktas" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "IÅ¡trynimas nebuvo baigtas sekmingai." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Baigiu $(^NameDA) įdiegimo procesÄ…" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) buvo įdiegtas į jÅ«sų kompiuterį.$\r$\n$\r$\nPaspauskite Baigti." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "JÅ«sų kompiuteris turi bÅ«ti perkrautas, kad bÅ«tų baigtas $(^NameDA) įdiegimas. Ar jÅ«s norite perkrauti dabar?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Baigiu $(^NameDA) paÅ¡alinimo programÄ…." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) buvo iÅ¡trinta iÅ¡ jÅ«sų kompiuterio.$\r$\n$\r$\nPaspauskite Baigti." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "JÅ«sų kompiuteris turi bÅ«ti perkrautas, kad bÅ«tų baigtas $(^NameDA) paÅ¡alinimas. Ar jÅ«s norite perkrauti dabar?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Perkrauti dabar" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "AÅ¡ noriu perkrauti veliau pats" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Leisti $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Parodyti dokumentacijÄ…" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Baigti" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Pasirinkite Start Menu katalogÄ…" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Pasirinkite Start Menu katalogÄ…, kuriame bus sukurtos programos nuorodos." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Pasirinkite Start Menu katalogÄ…, kuriame bus sukurtos programos nuorodos. JÅ«s taip pat galite sukurti naujÄ… katalogÄ…." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nekurti nuorodų" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Panaikinti $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "IÅ¡trinti $(^NameDA) iÅ¡ jÅ«sų kompiuterio." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ar jÅ«s tikrai norite iÅ¡jungti $(^Name) įdiegimo programÄ…?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ar jÅ«s tikrai norite iÅ¡jungti $(^Name) paÅ¡alinimo programÄ…?" +!endif diff --git a/tools/Contrib/Language files/Luxembourgish.nlf b/tools/Contrib/Language files/Luxembourgish.nlf new file mode 100644 index 0000000..1b59a15 --- /dev/null +++ b/tools/Contrib/Language files/Luxembourgish.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +4103 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Jo Hoeser +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Installatioun +# ^UninstallCaption +$(^Name) Desinstallatioun +# ^LicenseSubCaption +: Lizenzofkommes +# ^ComponentsSubCaption +: Installatiouns-Optiounen +# ^DirSubCaption +: Zielverzeechnis +# ^InstallingSubCaption +: Installéieren +# ^CompletedSubCaption +: Färdeg +# ^UnComponentsSubCaption +: Desinstallatiuons-Optiounen +# ^UnDirSubCaption +: Quellverzeechnes +# ^ConfirmSubCaption +: Bestätegung +# ^UninstallingSubCaption +: Läschen +# ^UnCompletedSubCaption +: Färdeg +# ^BackBtn +< &Zréck +# ^NextBtn +&Weider > +# ^AgreeBtn +&Unhuelen +# ^AcceptBtn +Ech &huelen d'Lizenzofkommes un. +# ^DontAcceptBtn +Ech &lehnen d'Lizenzofkommes of. +# ^InstallBtn +&Installéieren +# ^UninstallBtn +&Desinstalléieren +# ^CancelBtn +Ofbriechen +# ^CloseBtn +&Zou maan +# ^BrowseBtn +&Duerchsichen... +# ^ShowDetailsBtn +&Details uweisen +# ^ClickNext +Klick op weider fir weiderzefueren +# ^ClickInstall +Klick op Installéieren, fir d'Installatioun unzefänken. +# ^ClickUninstall +Klick op Desinstalléieren, fir d'Desinstallatioun unzefänken. +# ^Name +Numm +# ^Completed +Färdeg +# ^LicenseText +W.e.g. d'Lizenzofkommes liesen, ierts de $(^NameDA) installéiers. Wanns de all Bedengungen vum Ofkommes akzeptéiers, klick op Unhuelen. +# ^LicenseTextCB +W.e.g. d'Lizenzofkommes liesen, ierts de $(^NameDA) installéiers. Wanns de all Bedengungen vum Ofkommes akzeptéiers, aktivéier d'Kontrollkeschtchen. $_CLICK +# ^LicenseTextRB +W.e.g. d'Lizenzofkommes liesen, ierts de $(^NameDA) installéiers. Wanns de all Bedengungen vum Ofkommes akzeptéiers, wiel d'entsprichend Optioun. $_CLICK +# ^UnLicenseText +W.e.g. d'Lizenzofkommes liesen, ierts de $(^NameDA) desinstalléiers. Wanns de all Bedengungen vum Ofkommes akzeptéiers, klick op Unhuelen. +# ^UnLicenseTextCB +W.e.g. d'Lizenzofkommes liesen, ierts de $(^NameDA) desinstalléiers. Wanns de all Bedengungen vum Ofkommes akzeptéiers, aktivéier d'Kontrollkeschtchen. $_CLICK +# ^UnLicenseTextRB +W.e.g. d'Lizenzoofkommes liesen, ierts de $(^NameDA) desinstalléiers. Wanns de all Bedengungen vum Oofkommes akzeptéiers, wiel d'entspriechend Optioun. $_CLICK +# ^Custom +Benutzerdefiniert +# ^ComponentsText +Wiel d'Komponenten aus, déis de wëlls installéieren an wiel déijéineg of, déis de net installéieren wëlls. $_CLICK +# ^ComponentsSubText1 +Installatiouns-Typ bestëmmen: +# ^ComponentsSubText2_NoInstTypes +Wiel d'Komponenten aus, déis de installéieren wëlls: +# ^ComponentsSubText2 +oder wiel zousätzlech Komponenten aus déis de installéieren wëlls: +# ^UnComponentsText +Wiel d'Komponenten aus déis de desinstalléieren wëlls an wiel déijéineg of, déis de net desinstalléieren wëlls. $_CLICK +# ^UnComponentsSubText1 +Deinstallatiouns-Typ bestëmmen: +# ^UnComponentsSubText2_NoInstTypes +Wiel d'Komponenten aus, déis de desinstalléieren wëlls: +# ^UnComponentsSubText2 +oder wiel zusätzlech Komponenten aus, déis de desinstalléieren wëlls: +# ^DirText +$(^NameDA) gëtt an den Dossier installéiert deen fierginn gouf. Wanns de et an een aneren Dossier installéieren wëlls, klick op Duechsichen an wiel een aneren Dossier aus. $_CLICK +# ^DirSubText +Zielverzeechnes +# ^DirBrowseText +Wiel en Dossier aus wuers de $(^NameDA) installéieren wëlls: +# ^UnDirText +$(^NameDA) gëtt an deem Dossier desinstalléiert, deen uginn gouf. Wann $(^NameDA) an engem aneren Dossier ass, klick op Duechsichen an wiel een aneren Dossier aus. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Wiel den Dossier aus wou $(^NameDA) dran installéiert ass: +# ^SpaceAvailable +"Verfügbaren Späicher: " +# ^SpaceRequired +"Gebrauchten Späicher: " +# ^UninstallingText +$(^NameDA) gëtt aus dem ausgewielten Dossier desinstalléiert. $_CLICK +# ^UninstallingSubText +Desinstalléieren aus: +# ^FileError +Fehler beim Iwwerschreiwen vun der Datei: \r\n\t"$0"\r\nKlick op ofbriechen fir den Setup ze verloossen,\r\nop Widderhuelen fir den Setup nach eng Kéier duechzeféieren\r\n oder op Ignoréieren fir des Datei ze iwwersprengen an weiderzefueren. +# ^FileError_NoIgnore +Fehler beim Iwwerschreiwen vun der Datei: \r\n\t"$0"\r\nKlick op Widderhuelen fir den Setup nach eng Kéier duechzeféieren,\r\noder op ofbriechen fir den Setup ze verloossen. +# ^CantWrite +"Fehler beim Schreiwen: " +# ^CopyFailed +Kopéieren fehlgeschloen +# ^CopyTo +"Kopéiere an " +# ^Registering +"Registréieren: " +# ^Unregistering +"Deregistréieren: " +# ^SymbolNotFound +"Symbol ass net do: " +# ^CouldNotLoad +"Fehler beim Lueden vun: " +# ^CreateFolder +"Maan Dossier: " +# ^CreateShortcut +"Maan Oofkierzung: " +# ^CreatedUninstaller +"Man Desinstallatiouns-Programm: " +# ^Delete +"Läschen Datei: " +# ^DeleteOnReboot +"Läschen Datei no engem Neistart: " +# ^ErrorCreatingShortcut +"Fehler beim man vun enger Oofkierzung: " +# ^ErrorCreating +"Fehler beim maan: " +# ^ErrorDecompressing +Fehler beim Dekompriméieren. Installations-Programm beschiedegt? +# ^ErrorRegistering +Fehler beim Registréieren vun der DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Starten: " +# ^Extract +"Dekompriméieren: " +# ^ErrorWriting +"Dekompriméierung: Fehler beim Schreiwen vun der Datei " +# ^InvalidOpcode +Installations-Programm Beschiedegt: net zoulässegen Befehlscode +# ^NoOLE +"Keen OLE fier: " +# ^OutputFolder +"Zieldossier: " +# ^RemoveFolder +"Läschen Dossier: " +# ^RenameOnReboot +"Gett no Neistart embenannt: " +# ^Rename +"Embenennen: " +# ^Skipped +"Iwwersprongen: " +# ^CopyDetails +Detailler an d'Zwëschenooflag kopéieren +# ^LogInstall +Installatioun protokolléieren +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Luxembourgish.nsh b/tools/Contrib/Language files/Luxembourgish.nsh new file mode 100644 index 0000000..61fb95d --- /dev/null +++ b/tools/Contrib/Language files/Luxembourgish.nsh @@ -0,0 +1,121 @@ +;Language: Luxembourgish (1031) +;By Snowloard, changes by Philo + +!insertmacro LANGFILE "Luxembourgish" = "Lëtzebuergesch" "Letzebuergesch" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Wëllkomm beim Installatiouns-$\r$\nAssistent vun $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Dësen Assistent wärt dech duech d'Installatioun vun $(^NameDA) begleeden.$\r$\n$\r$\nEt gëtt ugeroden alleguer d'Programmer di am Moment lafen zouzemaan, datt bestëmmt Systemdateien ouni Neistart ersat kënne ginn.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Wëllkomm am Desinstallatiouns-$\r$\n\Assistent fir $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Desen Assistent begleet dech duech d'Desinstallatioun vun $(^NameDA).$\r$\n$\r$\nW.e.g. maach $(^NameDA) zu, ierts de mat der Desinstallatioun ufänks.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lizenzofkommes" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "W.e.g. d'Lizenzoofkommes liesen, ierts de mat der Installatioun weiderfiers." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Wanns de alleguer d'Bedengungen vum Ofkommes akzeptéiers, klick op Unhuelen. Du muss alleguer d'Fuerderungen unerkennen, fir $(^NameDA) installéieren ze kënnen." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Wanns de alleguer d'Bedengungen vum Ofkommes akzeptéiers, aktivéier d'Këschtchen. Du muss alleguer d'Fuerderungen unerkennen, fir $(^NameDA) installéieren ze kënnen. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Wanns de alleguer d'Bedengungen vum Ofkommes akzeptéiers, wiel ënnen di entspriechend Äntwert aus. Du muss alleguer d'Fuerderungen unerkennen, fir $(^NameDA) installéieren ze kënnen. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lizenzofkommes" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "W.e.g. lies d'Lizenzofkommes duech ierts de mat der Desinstallatioun vun $(^NameDA) weiderfiers." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Wanns de d'Fuerderungen vum Ofkommes akzeptéiers, klick op unhuelen. Du muss d'Ofkommes akzeptéieren, fir $(^NameDA) kënnen ze desinstalléieren." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Wanns de d'Fuerderungen vum Ofkommes akzeptéiers, aktivéier d'Këschtchen. Du muss d'Ofkommes akzeptéieren, fir $(^NameDA) kënnen ze desinstalléieren. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Wanns de d'Fuerderungen vum Ofkommes akzeptéiers, wiel ënnen di entspriechend Optioun. Du muss d'Oofkommes akzeptéieren, fir $(^NameDA) kennen ze desinstalléieren. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Dréck d'PageDown-Tast fir den Rescht vum Ofkommes ze liesen." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Komponenten auswielen" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Wiel d'Komponenten aus, déis de wëlls installéieren." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Komponenten auswielen" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Wiel eng Komponent aus, déis de desinstalléieren wëlls." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschreiwung" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Hal den Mausfeil iwwer eng Komponent, fir d'Beschreiwung dervun ze gesinn." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Zielverzeechnes auswielen" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Wiel den Dossier aus, an deen $(^NameDA) installéiert soll ginn." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Dossier fir d'Desinstallatioun wielen" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Wiel den Dossier aus, aus dem $(^NameDA) desinstalléiert soll ginn." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installéieren..." + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Waard w.e.g während deem $(^NameDA) installéiert gëtt." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installatioun färdeg" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "D'Installatioun ass feelerfräi oofgeschloss ginn." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installatioun ofgebrach" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "D'Installatioun ass net komplett ofgeschloss ginn." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalléieren..." + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "W.e.g. waard, während deems $(^NameDA) desinstalléiert gëtt." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstallatioun ofgeschloss" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "D'Desinstallatioun ass erfollegräich ofgeschloss ginn." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstallatioun oofbriechen" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Desinstallatioun ass net erfollegräich ofgeschloss ginn." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "D'Installatioun vun $(^NameDA) gëtt ofgeschloss." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ass um Computer installéiert ginn.$\r$\n$\r$\nKlick op färdeg maan, fir den Installatiouns-Assistent zou ze maan.." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Den Windows muss nei gestart ginn, fir d'Installatioun vun $(^NameDA) ofzeschléissen. Wëlls de Windows lo néi starten?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Desinstallatioun vun $(^NameDA) gëtt ofgeschloss" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ass vum Computer desinstalléiert ginn.$\r$\n$\r$\nKlick op Ofschléissen fir den Assistent zou ze maan." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Windows muss néi gestart gin, fir d'Desinstallatioun vun $(^NameDA) ze vervollstännegen. Wëlls de Windows lo néi starten?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Lo néi starten" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Spéider manuell néi starten" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) op maan" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Liesmech op maan" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Färdeg man" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Startmenü-Dossier bestëmmen" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Bestëmm een Startmanü-Dossier an deen d'Programmofkierzungen kommen." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Bestëmm een Startmanü-Dossier an deen d'Programmofkierzungen kommen. Wanns de een néien Dossier man wells, gëff deem säin zukünftegen Numm an." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Keng Ofkierzungen man" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstallatioun vun $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) gett vum Computer desinstalléiert." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Bass de sécher, dass de d'Installatioun vun $(^Name) ofbriechen wëlls?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Bass de sécher, dass de d'Desinstallatioun vun $(^Name) ofbriechen wëlls?" +!endif diff --git a/tools/Contrib/Language files/Macedonian.nlf b/tools/Contrib/Language files/Macedonian.nlf new file mode 100644 index 0000000..8baef13 --- /dev/null +++ b/tools/Contrib/Language files/Macedonian.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1071 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by Sasko Zdravkin [wingman2083@yahoo.com] +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +ИнÑталирање на $(^Name) +# ^UninstallCaption +ДеинÑталирање на $(^Name) +# ^LicenseSubCaption +: Лиценцен Договор +# ^ComponentsSubCaption +: ИнÑталациони Опции +# ^DirSubCaption +: ИнÑталационен Директориум +# ^InstallingSubCaption +: ИнÑталира +# ^CompletedSubCaption +: Завршено +# ^UnComponentsSubCaption +: ДеинÑталациони Опции +# ^UnDirSubCaption +: ДеинÑталационен Директориум +# ^ConfirmSubCaption +: Потврда +# ^UninstallingSubCaption +: ДеинÑталира +# ^UnCompletedSubCaption +: Завршено +# ^BackBtn +< &Ðазад +# ^NextBtn +Ð&апред > +# ^AgreeBtn +&Да +# ^AcceptBtn +&Ги прифаќам уÑловите од Лиценцниот Договор +# ^DontAcceptBtn +Ð&е ги прифаќам уÑловите од Лиценцниот Договор +# ^InstallBtn +&ИнÑталирај +# ^UninstallBtn +&ДеинÑталирај +# ^CancelBtn +Откажи +# ^CloseBtn +&Затвори +# ^BrowseBtn +&Пребарувај... +# ^ShowDetailsBtn +П&окажи Детали +# ^ClickNext +ПритиÑнете 'Ðапред' за да продолжите. +# ^ClickInstall +ПритиÑнете 'ИнÑталирај' за да Ñе инÑталира. +# ^ClickUninstall +ПритиÑнете 'ДеинÑталирај' за да Ñе деинÑталира. +# ^Name +Име +# ^Completed +Завршено +# ^LicenseText +Ве молиме прочитајте го Лиценцниот Договор пред да Ñе инÑталира $(^NameDA). Ðко ги прифаќате Ñите уÑлови, притиÑнете 'Да'. +# ^LicenseTextCB +Ве молиме прочитајте го Лиценцниот Договор пред да Ñе инÑталира $(^NameDA). Ðко ги прифаќате Ñите уÑлови, притиÑнете го Check box-от подоле. $_CLICK +# ^LicenseTextRB +Ве молиме прочитајте го Лиценцниот Договор пред да Ñе инÑталира $(^NameDA). Ðко ги прифаќате Ñите уÑлови, одберете ја првата опција подоле. $_CLICK +# ^UnLicenseText +Ве молиме прочитајте го Лиценцниот Договор пред да Ñе деинÑталира $(^NameDA). Ðко ги прифаќате Ñите уÑлови, притиÑнете 'Да'. +# ^UnLicenseTextCB +Ве молиме прочитајте го Лиценцниот Договор пред да Ñе деинÑталира $(^NameDA). Ðко ги прифаќате Ñите уÑлови, притиÑнете го Check box-от подоле. $_CLICK +# ^UnLicenseTextRB +Ве молиме прочитајте го Лиценцниот Договор пред да Ñе деинÑталира $(^NameDA). Ðко ги прифаќате Ñите уÑлови, одберете ја првата опција подоле. $_CLICK +# ^Custom +ПодеÑено +# ^ComponentsText +Чекирајте ги компонентите што Ñакате да Ñе инÑталираат или дечекирајте ги тие што не Ñакате да Ñе инÑталираат. $_CLICK +# ^ComponentsSubText1 +Одберете вид на инÑталација: +# ^ComponentsSubText2_NoInstTypes +Одберете ги компонентите што ќе Ñе инÑталираат: +# ^ComponentsSubText2 +или, одберете други компоненти што Ñакате да Ñе инÑталираат: +# ^UnComponentsText +Чекирајте ги компонентите што Ñакате да Ñе деинÑталираат или дечекирајте ги тие што не Ñакате да Ñе деинÑталираат. $_CLICK +# ^UnComponentsSubText1 +Одберете го видот на деинÑталацијата: +# ^UnComponentsSubText2_NoInstTypes +Одберете ги компонентите што ќе Ñе деинÑталираат: +# ^UnComponentsSubText2 +или, одберете други компоненти што Ñакате да Ñе деинÑталираат: +# ^DirText +ИнÑталациониот програм ќе го инÑталира $(^NameDA) во Ñледниов директориум. За да инÑталирате во друг, притиÑнете 'Пребарувај' и одберете друг директориум. $_CLICK +# ^DirSubText +Директориум каде што ќе Ñе инÑталира +# ^DirBrowseText +Одберете директориум за инÑталирање на $(^NameDA): +# ^UnDirText +ИнÑталациониот програм ќе го деинÑталира $(^NameDA) од Ñледниов директориум. За да деинÑталирате од друг, притиÑнете 'Пребарувај' и одберете друг директориум. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Одберете го директориумот за деинÑталирање на $(^NameDA): +# ^SpaceAvailable +"Слободен проÑтор: " +# ^SpaceRequired +"Потребен проÑтор: " +# ^UninstallingText +$(^NameDA) ќе биде деинÑталиран од Ñледниов директориум. $_CLICK +# ^UninstallingSubText +ДеинÑталира од: +# ^FileError +Грешка при отварањето на датотеката за запишување: \r\n\t"$0"\r\nПритиÑнете 'Откажи' за да ја откажете инÑталацијата,\r\n'Пробај' за да проба да ја запише датотеката, или\r\n'Игнорирај' за да ја прерипа датотеката +# ^FileError_NoIgnore +Грешка при отварањето на датотеката за запишување: \r\n\t"$0"\r\nПритиÑнете 'Пробај' за да проба да ја запише датотеката, или\r\n'Откажи' за да ја откаже инÑталацијата +# ^CantWrite +"Ðе може да запише: " +# ^CopyFailed +Копирањето не уÑпеа +# ^CopyTo +"Копирај до " +# ^Registering +"РегиÑтрира: " +# ^Unregistering +"ДерегиÑтрира: " +# ^SymbolNotFound +"Ðе може да го најде Ñимболот: " +# ^CouldNotLoad +"Ðе може да лоадира: " +# ^CreateFolder +"Создади директориум: " +# ^CreateShortcut +"Создади кратеница: " +# ^CreatedUninstaller +"Создаден деинÑталатор: " +# ^Delete +"Избришана датотека: " +# ^DeleteOnReboot +"Избриши поÑле реÑтартирање: " +# ^ErrorCreatingShortcut +"Грешка при Ñоздавањето на Ñкратеницата: " +# ^ErrorCreating +"Грешка при Ñоздавањето: " +# ^ErrorDecompressing +Грешка при отпакувањето на податоците! РаÑипан инÑталационен програм? +# ^ErrorRegistering +Грешка при региÑтрирањето на DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Покрени: " +# ^Extract +"Отпакувано: " +# ^ErrorWriting +"Отпакувај: грешка при Ñнимањето во датотеката " +# ^InvalidOpcode +РаÑипан инÑталационен програм: погрешен код +# ^NoOLE +"Ðема OLE за: " +# ^OutputFolder +"ИнÑталационен директориум: " +# ^RemoveFolder +"Избришан директориум: " +# ^RenameOnReboot +"Преименувај поÑле реÑтартирање: " +# ^Rename +"Преименувај: " +# ^Skipped +"Прерипано: " +# ^CopyDetails +Копирај ги Деталите во Clipboard-от +# ^LogInstall +Сними лог за инÑталационите процеÑи +# ^Byte +б +# ^Kilo + К +# ^Mega + Ðœ +# ^Giga + Г diff --git a/tools/Contrib/Language files/Macedonian.nsh b/tools/Contrib/Language files/Macedonian.nsh new file mode 100644 index 0000000..1694fae --- /dev/null +++ b/tools/Contrib/Language files/Macedonian.nsh @@ -0,0 +1,121 @@ +;Language: Macedonian (1071) +;By Sasko Zdravkin [wingman2083@yahoo.com] + +!insertmacro LANGFILE "Macedonian" = "МакедонÑки" "Makedonski" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Добро дојдовте во инÑталацијата на $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Овој програм ќе ве води низ инÑталацијата на $(^NameDA).$\r$\n$\r$\nПрепорачано е да ги затворите Ñите програми пред да инÑталирате. Ова ќе дозволи инÑталациониот програм да обнови некои ÑиÑтемÑки датотеки без да го реÑтартира компјутерот.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Добро дојдовте во деинÑталацијата на $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Овој програм ќе ве води низ деинÑталацијата на $(^NameDA).$\r$\n$\r$\nПред да ја почнете деинÑталацијата на $(^NameDA) проверете дали е иÑклучена програмата.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Лиценцен Договор" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ве молиме проверете ги лиценцните уÑлови пред да го инÑталирате $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ðко ги прифаќате уÑловите од договорот, притиÑнете 'Да' за да продолжите. Мора да го прифатите договорот за да го инÑталирате $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ðко ги прифаќате уÑловите од договорот, чекирајте го check box-от подоле. Мора да го прифатите договорот за го инÑталирате $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ðко ги прифаќате уÑловите од договорот, одберете ја првата опција подоле. Мора да го прифатите договорот за го инÑталирате $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Лиценцен Договор" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Ве молиме проверете ги лиценцните уÑлови пред да го деинÑталирате $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ðко ги прифаќате уÑловите од договорот, притиÑнете 'Да' за да продолжите. Мора да го прифатите договорот за да го деинÑталирате $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ðко ги прифаќате уÑловите од договорот, чекирајте го check box-от подоле. Мора да го прифатите договорот за го деинÑталирате $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ðко ги прифаќате уÑловите од договорот, одберете ја првата опција подоле. Мора да го прифатите договорот за го деинÑталирате $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ПритиÑнете 'Page Down' за да го видете оÑтанатиот дел од договорот." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Одберете Компоненти" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Одберете кои работи од $(^NameDA) Ñакате да Ñе инÑталираат." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Одберете Компоненти" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Одберете кои работи од $(^NameDA) Ñакате да Ñе деинÑталираат." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ОбјаÑнение" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ОднеÑете го курÑорот до компонентата за да го видете нејзиното објаÑнение." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Одберете ја компонентата за да го видете нејзиното објаÑнение." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Одберете ја локацијата за инÑталирање" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Одберете го директориумот каде што Ñакате да Ñе инÑталира $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Одберете ја локацијата за деинÑталирање" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Одберете го директориумот од кој Ñакате да Ñе деинÑталира $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ИнÑталира" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Ве молиме почекајте додека $(^NameDA) Ñе инÑталира." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ИнÑталацијата е завршена" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "ИнÑталирањето беше уÑпешно." + ${LangFileString} MUI_TEXT_ABORT_TITLE "ИнÑталацијата е откажана" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ИнÑталирањето не беше уÑпешно завршено." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "ДеинÑталира" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Ве молиме почекајте додека $(^NameDA) Ñе деинÑталира." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "ДеинÑталацијата е завршена" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "ДеинÑталирањето беше уÑпешно." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "ДеинÑталацијата е откажана" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "ДеинÑталирањето не беше уÑпешно завршено." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Завршува инÑталирањето на $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) е инÑталиран на вашиот компјутер.$\r$\n$\r$\nПритиÑнете 'Крај' за да го затворите инÑталациониот програм." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Вашиот компјутер мора да Ñе реÑтартира за да заврши инÑталацијата на $(^NameDA). Дали Ñакате да Ñе реÑтартира Ñега?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Завршува деинÑталирањето на $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) е деинÑталиран од вашиот компјутер.$\r$\n$\r$\nПритиÑнете 'Крај' за да го затворите деинÑталациониот програм." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Вашиот компјутер мора да Ñе реÑтартира за да заврши деинÑталацијата на $(^NameDA). Дали Ñакате да Ñе реÑтартира Ñега?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "РеÑтартирај Ñега" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ðко Ñакате да го реÑтартирате подоцна" + ${LangFileString} MUI_TEXT_FINISH_RUN "Пок&рени го $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Отвор&и 'Прочитај Ме'" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Крај" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Одберете директориум за Старт Менито" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Одберете директориум во Старт Менито за креирање Ñкратеница на $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Одберете го директориумот во Старт Менито во кој Ñакате да Ñе креира Ñкратеница за програмата. ИÑто така можете да внеÑете друго име за да Ñе креира нов директориум." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ðе креирај Ñкратеница" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "ДеинÑталирај го $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "ОдÑтранете го $(^NameDA) од вашиот компјутер." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Сигурни ли Ñте дека Ñакате да Ñе откажете од инÑталацијата на $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Сигурни ли Ñте дека Ñакате да Ñе откажете од деинÑталацијата на $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Malay.nlf b/tools/Contrib/Language files/Malay.nlf new file mode 100644 index 0000000..6bf0a81 --- /dev/null +++ b/tools/Contrib/Language files/Malay.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1086 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation muhammadazwa@yahoo.com +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Setup $(^Name) +# ^UninstallCaption +Uninstall $(^Name) +# ^LicenseSubCaption +: Perlesenan +# ^ComponentsSubCaption +: Pilihan kemasukan +# ^DirSubCaption +: Folder kemasukan +# ^InstallingSubCaption +: Memasang +# ^CompletedSubCaption +: Selesai +# ^UnComponentsSubCaption +: Pilihan membuang +# ^UnDirSubCaption +: Folder Uninstal +# ^ConfirmSubCaption +: Kepastian +# ^UninstallingSubCaption +: Membuang +# ^UnCompletedSubCaption +: Tidak Selesai +# ^BackBtn +< &Ke Belakang +# ^NextBtn +&Ke Depan > +# ^AgreeBtn +Saya &setuju +# ^AcceptBtn +Saya s&etuju dengan Perlesenan +# ^DontAcceptBtn +Saya &tidak setuju dengan Perlesenan +# ^InstallBtn +&Masukkan +# ^UninstallBtn +&Buang +# ^CancelBtn +Batal +# ^CloseBtn +&Tutup +# ^BrowseBtn +S&elusur... +# ^ShowDetailsBtn +Buka &lagi +# ^ClickNext +Klik Ke Depan untuk teruskan. +# ^ClickInstall +Klik Masukkan untuk kemasukkan. +# ^ClickUninstall +Klik Uninstall untuk membuang. +# ^Name +Nama +# ^Completed +Selesai +# ^LicenseText +Sila baca lesen sebelum memasukkan $(^NameDA). Jika anda terima perlesenan, klik Saya setuju. +# ^LicenseTextCB +Sila baca lesen sebelum memasukkan $(^NameDA). Jika terima, beri tanda dicheckbox. $_CLICK +# ^LicenseTextRB +Sila baca lesen sebelum sebelum membuang $(^NameDA). Jika anda terima perlesenan, pilihlah salah satu item dibawah ini. $_CLICK +# ^UnLicenseText +Sila baca lesen sebelum sebelum membuang $(^NameDA). Jika anda terima perlesenan, klik Saya setuju. +# ^UnLicenseTextCB +Sila baca lesen sebelum memasukkan $(^NameDA). Jika terima, beri tanda dicheckbox. $_CLICK +# ^UnLicenseTextRB +Sila baca lesen sebelum sebelum membuang $(^NameDA).Jika anda terima perlesenan, pilihlah salah satu item dibawah ini. $_CLICK +# ^Custom +Custom +# ^ComponentsText +Beri tanda dicheckbox pada komponen yang ingin dimasukkan and hilangkan tanda pada komponen yang tidak perlu dimasukkan. $_CLICK +# ^ComponentsSubText1 +Pilih kemasukan: +# ^ComponentsSubText2_NoInstTypes +Pilih komponen-komponen untuk dimasukkan: +# ^ComponentsSubText2 +Atau, pilih komponen berikut untuk dimasukkan: +# ^UnComponentsText +Beri tanda dicheckbox pada komponen yang ingin dimasukkan and hilangkan tanda pada komponen yang tidak perlu dimasukkan. $_CLICK +# ^UnComponentsSubText1 +Pilih tipe un-kemasukan: +# ^UnComponentsSubText2_NoInstTypes +Pilih komponen-komponen untuk di buang: +# ^UnComponentsSubText2 +Atau, pilih komponen berikut untuk di buang: +# ^DirText +Setup akan memasukkan $(^NameDA) pada folder berikut. Untuk memilih folder lainnya, klik Selusur dan pilih folder pilihan anda. $_CLICK +# ^DirSubText +Folder tujuan +# ^DirBrowseText +Pilih folder untuk memasukkan $(^NameDA): +# ^UnDirText +Setup akan membuang $(^NameDA) dari folder berikut. Untuk memilih folder lainnya, klik Selusur dan pilih folder pilihan anda. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Pilih folder untuk dibuang $(^NameDA): +# ^SpaceAvailable +"Ruang cakera keras yang ada: " +# ^SpaceRequired +"Ruang cakera keras yang diperlukan: " +# ^UninstallingText +$(^NameDA) akan buang dari folder berikut. $_CLICK +# ^UninstallingSubText +Membuang: +# ^FileError +Tidak dapat menulis pada fail: \r\n\t"$0"\r\nKlik abort untuk membatalkan kemasukan,\r\nretry untuk cuba lagi, atau\r\nignore untuk abaikan fail ini. +# ^FileError_NoIgnore +Tidak dapat menulis pada fail: \r\n\t"$0"\r\nKlik retry untuk cuba lagi, atau\r\ncancel untuk batalkan kemasukan +# ^CantWrite +"Gagal menulis pada: " +# ^CopyFailed +Gagal menyalin +# ^CopyTo +"Menyalin ke " +# ^Registering +"Mendaftarkan modul: " +# ^Unregistering +"Melepaskan modul: " +# ^SymbolNotFound +"Symbol tidak jumpa : " +# ^CouldNotLoad +"Tidak dapat membuka: " +# ^CreateFolder +"Membuat folder: " +# ^CreateShortcut +"Membuat pintasan: " +# ^CreatedUninstaller +"Membuat program unistall: " +# ^Delete +"Memadam fail: " +# ^DeleteOnReboot +"Akan dipadam ketika reboot: " +# ^ErrorCreatingShortcut +"Tidak dapat membuat pintasan: " +# ^ErrorCreating +"Ralat penciptaan: " +# ^ErrorDecompressing +Ralat ketika membuka data! Program Installer rosak +# ^ErrorRegistering +Ralat mendaftarkan modul DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Menjalankan: " +# ^Extract +"Mengekstrak: " +# ^ErrorWriting +"Ekstrak: ralat ketika menulis ke fail " +# ^InvalidOpcode +Installer rosak: opcode tidak lengkap +# ^NoOLE +"OLE tidak ditemukan: " +# ^OutputFolder +"Folder tujuan: " +# ^RemoveFolder +"Menghapuskan folder: " +# ^RenameOnReboot +"Menamakan semula pada reboot: " +# ^Rename +"Menamakan semula: " +# ^Skipped +"Diabaikan: " +# ^CopyDetails +Salin terperinci ke clipboard +# ^LogInstall +Catat proses kemasukan +# ^Byte +Bait +# ^Kilo + Kilo +# ^Mega + Mega +# ^Giga + Giga diff --git a/tools/Contrib/Language files/Malay.nsh b/tools/Contrib/Language files/Malay.nsh new file mode 100644 index 0000000..81ae9de --- /dev/null +++ b/tools/Contrib/Language files/Malay.nsh @@ -0,0 +1,121 @@ +;Language: Malay (1086) +;By muhammadazwa@yahoo.com + +!insertmacro LANGFILE "Malay" = "Bahasa Melayu" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Assalamualaikum, Selamat datang ke $(^NameDA) Setup Wizard" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Setup Wizard akan membantu anda untuk memasukkan $(^NameDA).$\r$\n$\r$\nSila tutup program aplikasi yang lain sebelum Setup ini dimulakan. Ini supaya tiada proses reboot komputer diperlukan.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Selamat datang ke $(^NameDA) Uninstall Wizard" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Uninstall Wizard akan membantu anda pada proses membuang $(^NameDA).$\r$\n$\r$\nSebelum membuang, pastikan dulu $(^NameDA) dimatikan.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Perlesenan" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Sila baca teks lesen berikut sebelum memasukkan $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jika anda bersetuju, klik Saya setuju untuk teruskan. Anda mesti setuju untuk sebelum aplikasi dapat dimasukkan $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda bersetuju dengan syarat-syarat lesen, sila tanda dicheckbox. Anda mesti setuju sebelum memasukkan $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda terima semua yang ada di lesen, pilihlah salah satu item dibawah ini. Anda mesti setuju sebelum memasukkan $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Tentang Lesen" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Sila baca teks lesen sebelum membuang $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jika anda menerima lesen, klik Saya setuju untuk teruskan. Anda mesti setuju untuk dapat membuang $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda menerima semua yang ada di lesen, beri tanda dicheckbox. Anda mesti setuju untuk dapat membuang $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda menerima semua yang ada di lesen, pilihlah salah satu item dibawah ini. Anda mesti setuju untuk dapat membuang $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tekan Page Down untuk melihat teks selebihnya." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Pilih Komponen" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Pilih fungsi-fungsi dari $(^NameDA) yang ingin dimasukkan." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Pilih Komponen" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Pilih fungsi-fungsi $(^NameDA) yang ingin dibuang." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Penerangan" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Alihkan tetikus ke komponen untuk mengetahui penerangannya." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pilih komponen untuk mengetahui penerangannya." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Pilih Lokasi Kemasukan" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Pilih folder untuk memasukkan $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Pilih Lokasi Uninstall" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Pilih folder untuk meng-uninstall $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Pemasangan" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Sila tunggu ketika $(^NameDA) sedang dimasukkan." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Proses Selesai" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Setup sudah selesai." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Proses Dibatalkan" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Setup terbatal." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uninstall" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Sila tunggu ketika $(^NameDA) sedang di-buang." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Proses Uninstall Selesai" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Uninstall sudah selesai." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Proses Uninstall Dibatalkan" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Uninstall belum selesai secara sempurna." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Menyelesaikan $(^NameDA) Setup Wizard" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) sudah dimasukkan di komputer anda.$\r$\n$\r$\nKlik Selesai untuk menutup Setup Wizard." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Komputer anda harus direboot untuk menyelesaikan proses memasukkan $(^NameDA). Apakah anda hendak reboot sekarang juga?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Menyelesaikan $(^NameDA) Uninstall Wizard" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) sudah dibuang dari komputer anda.$\r$\n$\r$\nKlik Selesai untuk menutup Setup Wizard." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Komputer anda harus di reboot untuk menyelesaikan proses membuang $(^NameDA). Reboot sekarang?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reboot sekarang" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Reboot nanti" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Jalankan $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Buka fail Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Selesai" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Pilih Folder Start Menu" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Pilih folder Start Menu untuk meletakkan pintasan $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Pilih folder Start Menu untuk perletakkan pintasan aplikasi ini. Boleh cipta nama folder anda sendiri." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Tidak perlu pintasan" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Buang $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Padam $(^NameDA) dari komputer anda." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Adakan anda yakin ingin membatalkan Setup $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Adakan anda yakin ingin membatalkan proses buang $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Mongolian.nlf b/tools/Contrib/Language files/Mongolian.nlf new file mode 100644 index 0000000..5ea8431 --- /dev/null +++ b/tools/Contrib/Language files/Mongolian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1104 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by Bayarsaikhan Enkhtaivan. ebayaraa@gmail.com +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Суулгац +# ^UninstallCaption +$(^Name) СуулгаÑныг уÑтгах +# ^LicenseSubCaption +: Лицензийн зөвшөөрөл +# ^ComponentsSubCaption +: Суулгах Ñонголт +# ^DirSubCaption +: Суулгах Ð¥Ð°Ð²Ñ‚Ð°Ñ +# ^InstallingSubCaption +:Суулгаж байна +# ^CompletedSubCaption +: ДууÑлаа +# ^UnComponentsSubCaption +: СуулгаÑныг уÑтгахын Сонголт +# ^UnDirSubCaption +: СуулгаÑныг уÑтгах Ð¥Ð°Ð²Ñ‚Ð°Ñ +# ^ConfirmSubCaption +: Батламж +# ^UninstallingSubCaption +: СуулгаÑныг уÑтгаж байна +# ^UnCompletedSubCaption +: ДууÑлаа +# ^BackBtn +< &Буцах +# ^NextBtn +&Цааш> +# ^AgreeBtn +&Зөвшөөрлөө +# ^AcceptBtn +Би Лицензийн Зөвшөөрлийн зүйлүүдийг &зөвшөөрч байна +# ^DontAcceptBtn +Би Лицензийн Зөвшөөрлийн зүйлүүдийг &зөвшөөрөхгүй байна +# ^InstallBtn +&Суулга +# ^UninstallBtn +&УÑтга +# ^CancelBtn +Болих +# ^CloseBtn +&Xaax +# ^BrowseBtn +Ð¥&өтлөх... +# ^ShowDetailsBtn +&ДÑлгÑÑ€Ñнгүй +# ^ClickNext +Цааш дÑÑÑ€ дарвал үргÑлжилнÑ. +# ^ClickInstall +Суулга дÑÑÑ€ дарвал Ñуулгац ÑÑ…ÑлнÑ. +# ^ClickUninstall +УÑтга дÑÑÑ€ дарвал Ñуулгацын уÑтгалт ÑÑ…ÑлнÑ. +# ^Name +ÐÑÑ€ +# ^Completed +ДууÑлаа +# ^LicenseText +$(^NameDA)-г Ñуулгахын өмнө Лицензийн Зөвшөөрлийг уншина уу. Ð¥ÑÑ€Ñв та зөвшилцлийн зүйлүүдийг зөвшөөрч байвал, Зөвшөөрлөө-г дарна уу. +# ^LicenseTextCB +$(^NameDA)-г Ñуулгахын өмнө Лицензийн Зөвшөөрлийг уншина уу. Ð¥ÑÑ€Ñв та зөвшилцлийн зүйлүүдийг зөвшөөрч байвал, доорх нүдийг чагтална уу. $_CLICK +# ^LicenseTextRB +$(^NameDA)-г Ñуулгахын өмнө Лицензийн Зөвшөөрлийг уншина уу. Ð¥ÑÑ€Ñв та зөвшилцлийн зүйлүүдийг зөвшөөрч байвал, доорх Ñхний Ñонголтыг Ñонгоно уу. $_CLICK +# ^UnLicenseText +$(^NameDA)-г Ñуулгахын өмнө Лицензийн Зөвшөөрлийг уншина уу. Ð¥ÑÑ€Ñв та зөвшилцлийн зүйлүүдийг зөвшөөрч байвал, Зөвшөөрлөө-г дарна уу. +# ^UnLicenseTextCB +$(^NameDA)-г Ñуулгахын өмнө Лицензийн Зөвшөөрлийг уншина уу. Ð¥ÑÑ€Ñв та зөвшилцлийн зүйлүүдийг зөвшөөрч байвал, доорх нүдийг чагтална уу. $_CLICK +# ^UnLicenseTextRB +$(^NameDA)-г Ñуулгахын өмнө Лицензийн Зөвшөөрлийг уншина уу. Ð¥ÑÑ€Ñв та зөвшилцлийн зүйлүүдийг зөвшөөрч байвал, доорх Ñхний Ñонголтыг Ñонгоно уу. $_CLICK +# ^Custom +БуÑад +# ^ComponentsText +Суулгахыг Ñ…Ò¯ÑÑÑн нÑгдлÑÑ Ñ‡Ð°Ð³Ñ‚Ð»Ð°Ð°Ð´, Ñуулгахыг Ñ…Ò¯ÑÑхгүй буйгаа бүү чагтлаарай. $_CLICK +# ^ComponentsSubText1 +Суулгах төрлийг Ñонгоно уу: +# ^ComponentsSubText2_NoInstTypes +Суулгах нÑгдлийг Ñонгоно уу: +# ^ComponentsSubText2 +ЭÑвÑл, заавал Ñуулгахгүй байх нÑгдлүүдийг Ñонго: +# ^UnComponentsText +УÑтгахыг Ñ…Ò¯ÑÑÑн нÑгдлÑÑ Ñ‡Ð°Ð³Ñ‚Ð»Ð°Ð°Ð´, уÑтгахыг Ñ…Ò¯ÑÑхгүй байгаагаа бүү чагтлаарай. $_CLICK +# ^UnComponentsSubText1 +УÑтгах төрлийг Ñонгоно уу: +# ^UnComponentsSubText2_NoInstTypes +УÑтгах нÑгдлүүдийг Ñонгоно ууl: +# ^UnComponentsSubText2 +ЭÑвÑл, заавал уÑтгахгүй байх нÑгдлүүдийг Ñонго: +# ^DirText +$(^NameDA) нь дараах хавтÑанд Ñууна. Ó¨Ó©Ñ€ газар Ñуулгахыг Ñ…Ò¯ÑвÑл Хөтлөх товч дÑÑÑ€ даран Ó©Ó©Ñ€ Ñ…Ð°Ð²Ñ‚Ð°Ñ Ñонгоно уу. $_CLICK +# ^DirSubText +Зорилтот Ð¥Ð°Ð²Ñ‚Ð°Ñ +# ^DirBrowseText +$(^NameDA)-ыг Ñуулгах хавтÑыг Ñонгох: +# ^UnDirText +$(^NameDA)-г уг хавтаÑÐ½Ð°Ð°Ñ ÑƒÑтгана. Ó¨Ó©Ñ€ Ð³Ð°Ð·Ñ€Ð°Ð°Ñ ÑƒÑтгахыг Ñ…Ò¯ÑвÑл Хөтлөх товч дÑÑÑ€ даран Ó©Ó©Ñ€ Ñ…Ð°Ð²Ñ‚Ð°Ñ Ñонгоно уу. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA)-г уÑтгах хавтÑыг Ñонгох: +# ^SpaceAvailable +"Боломжит зай: " +# ^SpaceRequired +"Шаардагдах зай: " +# ^UninstallingText +$(^NameDA) нь уг хавтаÑÐ½Ð°Ð°Ñ ÑƒÑтгагдлаа. $_CLICK +# ^UninstallingSubText +УÑтгагдах газар: +# ^FileError +Файл бичихÑÑÑ€ нÑÑÑ…Ñд алдлаа: \r\n\t"$0"\r\nТаÑлах дарвал Ñуулгалт таÑлагдана,\r\nÐ”Ð°Ñ…ÑŒÑ Ð´Ð°Ñ€Ð²Ð°Ð» файлыг бичихÑÑÑ€ дахин оролдоно,\r\nÑÑвÑл Үл тоох дарвал уг файлыг алгаÑна +# ^FileError_NoIgnore +Файл бичихÑÑÑ€ нÑÑÑ…Ñд алдлаа: \r\n\t"$0"\r\nÐ”Ð°Ñ…Ð¸Ñ Ð´Ð°Ñ€Ð²Ð°Ð» файлыг бичихÑÑÑ€ дахин оролдоно, \r\nÑÑвÑл болих дарвал Ñуулгалт таÑлагдана +# ^CantWrite +"Бичиж чадÑангүй: " +# ^CopyFailed +Хуулалт бүтÑÑнгүй +# ^CopyTo +"Хуулах нь " +# ^Registering +"БүртгÑж байна: " +# ^Unregistering +"БүртгÑлийг арилгаж байна: " +# ^SymbolNotFound +"ТÑмдÑг хайгдÑангүй: " +# ^CouldNotLoad +"ДуудагдÑангүй: " +# ^CreateFolder +"Ò®Ò¯ÑгÑÑ… хавтаÑ: " +# ^CreateShortcut +"Ò®Ò¯ÑгÑÑ… shortcut: " +# ^CreatedUninstaller +"Ò®Ò¯ÑÑÑн uninstaller: " +# ^Delete +"Файл уÑтгах: " +# ^DeleteOnReboot +"Д.ачаалахад уÑтгах: " +# ^ErrorCreatingShortcut +"Shortcut Ò¯Ò¯ÑгÑÑ…Ñд алдлаа: " +# ^ErrorCreating +"Ò®Ò¯ÑгÑÑ… алдаа: " +# ^ErrorDecompressing +Өгөгдөл задлахад алдлаа! Суулгац ÑвдÑрчÑÑ? +# ^ErrorRegistering +DLL бүртгүүлÑÑ…Ñд алдлаа +# ^ExecShell +"Ðжиллуулах команд(ExecShell): " +# ^Exec +"Ðжиллуулах: " +# ^Extract +"Задлах: " +# ^ErrorWriting +"Задлалт:файл руу бичихÑд алдаа " +# ^InvalidOpcode +Суулгац ÑвдÑрчÑÑ: задлах код буруу +# ^NoOLE +"OLE байхгүй: " +# ^OutputFolder +"Гаргах хавтаÑ: " +# ^RemoveFolder +"УÑтгах хавтаÑ: " +# ^RenameOnReboot +"Д.ачаалахад дахин нÑрлÑÑ…: " +# ^Rename +"Дахин нÑрлÑÑ…: " +# ^Skipped +"ÐлгаÑÑан: " +# ^CopyDetails +ДÑлгÑÑ€Ñнгүйг Clipboard руу хуулах +# ^LogInstall +Суулгах Ñвцын баримт +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Mongolian.nsh b/tools/Contrib/Language files/Mongolian.nsh new file mode 100644 index 0000000..831f1be --- /dev/null +++ b/tools/Contrib/Language files/Mongolian.nsh @@ -0,0 +1,129 @@ +;Language: Mongolian (1104) +;By Bayarsaikhan Enkhtaivan + +!insertmacro LANGFILE "Mongolian" "Mongolian (Cyrillic)" "Монгол Кирилл" "Mongol kirill" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) Суулгацад тавтай морил" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "$(^NameDA) Ñуулгацын илбÑчинг та шууд ашиглаж болно.$\r$\n$\r$\nҮүнийг Ñуулгахын өмнө буÑад бүх програмуудаа хаахыг зөвлөж байна. СиÑтемийн файлуудыг шинÑчилбÑл компьютерÑÑ Ð´Ð°Ñ…Ð¸Ð½ ачаалахгүй байх боломжтой.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) Суулгацыг уÑтгах илбÑчинд тавтай морил" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "$(^NameDA) уÑтгацын илбÑчинг та шууд ашиглаж болно.$\r$\n$\r$\nУÑтгахын өмнө $(^NameDA) нь ажиллаагүй ÑÑÑхийг шалга.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Лицензийн зөвшөөрөл" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA)-ыг Ñуулгахынхаа өмнө зөвшилцлийн зүйлүүдийг уншина уу." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ð¥ÑÑ€Ñв зөвшилцлийн зүйлÑийг зөвшөөрч байвал, Зөвшөөрлөө товчийг даран үргÑÐ»Ð¶Ð»Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯. $(^NameDA)-ыг Ñуулгахын тулд заавал зөвшөөрөх шаардлагатай." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ð¥ÑÑ€Ñв зөвшилцлийн зүйлÑийг зөвшөөрч байвал, Зөвлөх хайрцгийг даран үргÑÐ»Ð¶Ð»Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯. $(^NameDA)-ыг Ñуулгахын тулд заавал зөвшөөрөх шаардлагатай. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ð¥ÑÑ€Ñв зөвшилцлийн зүйлÑийг зөвшөөрч байвал, Ð´Ð¾Ð¾Ñ€Ñ…Ð¾Ð¾Ñ Ñхнийг нь Ñонгон үргÑÐ»Ð¶Ð»Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯. $(^NameDA)-ыг Ñуулгахын тулд заавал зөвшөөрөх шаардлагатай. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Лицензийн зөвшөөрөл" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA) уÑтгахын өмнө зөвшилцлийн зүйлÑийг уншина уу." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ð¥ÑÑ€Ñв зөвшилцлийн зүйлÑийг зөвшөөрч байвал, Зөвшөөрлөө товчийг даран үргÑÐ»Ð¶Ð»Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯. $(^NameDA)-ыг уÑтгахын тулд заавал зөвшөөрөх шаардлагатай." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ð¥ÑÑ€Ñв зөвшилцлийн зүйлÑийг зөвшөөрч байвал, Зөвлөх хайрцгийг даран үргÑÐ»Ð¶Ð»Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯. $(^NameDA)-ыг уÑтгахын тулд заавал зөвшөөрөх шаардлагатай. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ð¥ÑÑ€Ñв зөвшилцлийн зүйлÑийг зөвшөөрч байвал, Ð´Ð¾Ð¾Ñ€Ñ…Ð¾Ð¾Ñ Ñхнийг нь Ñонгон үргÑÐ»Ð¶Ð»Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯. $(^NameDA)-ыг уÑтгахын тулд заавал зөвшөөрөх шаардлагатай. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Page Down товчийг даран зөвшилцлийг доош гүйлгÑÐ½Ñ Ò¯Ò¯." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ÐÑгдлийг Ñонгох" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "$(^NameDA)-ыг Ñуулгахад шаардагдах Ñ…ÑÑгийг Ñонгоно уу." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÐÑгдлийг Ñонгох" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA)-ын уÑтгах шаардлагатай нÑгдлийг Ñонгох." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Тайлбар" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Та хулганаараа нÑгдлийн дÑÑÑ€ очиход түүний тайлбарыг харуулна." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ÐÑгдлийг Ñонговол түүний тайлбарыг харна." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Суулгах байрлалыг Ñонгох" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA) Ñуулгацын Ñуулгах замыг Ñонго." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "УÑтгацын байрлалыг Ñонгох" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA)-ыг уÑтгах хавтÑыг Ñонгох." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Суулгаж байна" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA)-ыг Ñуулгаж дууÑтал түр хүлÑÑÐ½Ñ Ò¯Ò¯." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Суулгаж дууÑлаа" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Суулгац амжилттай болов." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Суулгалт таÑлагдлаа" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Суулгалт амжилтгүй болов." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "УÑтгаж байна" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) -ыг зайлуулж дууÑтал түр хүлÑÑÐ½Ñ Ò¯Ò¯." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "УÑтгаж дууÑлаа" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "УÑтгалт амжилттай дууÑлаа." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "УÑтгац таÑлагдлаа" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "УÑтгалт амжилтгүй боллоо." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) Суулгацын илбÑчин дууÑлаа" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) нь таны компьютерт Ñуулаа.$\r$\n$\r$\nТөгÑгөл дÑÑÑ€ дарвал хаана." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA)-ын Ñуулгацын дараалалд та компьютерÑÑ Ð´Ð°Ñ…Ð¸Ð½ ачаалÑнаар дууÑна. Та дахин ачаалахыг Ñ…Ò¯ÑÑж байна уу?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) УÑтгацын илбÑчин дууÑлаа" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) нь таны компьютерÑÑÑ Ð·Ð°Ð¹Ð»ÑƒÑƒÐ»Ð°Ð³Ð´Ð»Ð°Ð°.$\r$\n$\r$\nТөгÑгөл дÑÑÑ€ дарвал хаана." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) УÑтгацын дараалалд та компьютерÑÑ Ð´Ð°Ñ…Ð¸Ð½ ачаалÑнаар дууÑна. Та д.ачаалмаар байна уу?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Д.Ðчаал" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Би дараа д.ачаалахыг Ñ…Ò¯ÑÑж байна." + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) ажиллуулах" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Readme харуулах" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&ТөгÑгөл" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Start цÑÑний хавтÑыг Ñонго" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Start цÑÑ Ð´ÑÑ… $(^NameDA) shortcut-ын хавтÑыг Ñонго." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Start цÑÑÑнд програмын shortcut Ò¯Ò¯ÑгÑÑ… хавтÑыг Ñонго. ЭÑвÑл та ÑˆÐ¸Ð½Ñ Ð½ÑÑ€ÑÑÑ€ Ò¯Ò¯ÑгÑж болно." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Shortcut Ò¯Ò¯ÑгÑхгүй" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA)--ын УÑтгац" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) -ыг таны компьютерÑÑÑ Ð·Ð°Ð¹Ð»ÑƒÑƒÐ»Ð°Ñ…." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "$(^Name) -ын ÑÑƒÑƒÐ»Ð³Ð°Ñ†Ð°Ð°Ñ Ð³Ð°Ñ€Ð¼Ð°Ð°Ñ€ байна уу?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name) УÑÑ‚Ð³Ð°Ñ†Ð°Ð°Ñ Ð³Ð°Ñ€Ð¼Ð°Ð°Ñ€ байна уу?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Ð¥ÑÑ€ÑглÑгч Ñонгох" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "$(^NameDA)-ыг аль Ñ…ÑÑ€ÑглÑгчид зориулж Ñуулгах вÑ." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "$(^NameDA)-ыг зөвхөн өөртөө ÑÑвÑл ÑÐ½Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€ дÑÑрх бүх Ñ…ÑÑ€ÑглÑгчдÑд зориулж Ñуулгахыг Ñонго. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Ð­Ð½Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€ дÑÑрх бүх Ñ…ÑÑ€ÑглÑчдÑд Ñуулгах" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Зөвхөн өөртөө Ñуулгах" +!endif diff --git a/tools/Contrib/Language files/Norwegian.nlf b/tools/Contrib/Language files/Norwegian.nlf new file mode 100644 index 0000000..a4d6930 --- /dev/null +++ b/tools/Contrib/Language files/Norwegian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1044 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Jonas Lindstrøm (jonasc_88@hotmail.com). Reviewed and fixed by Jan Ivar Beddari +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) installasjon +# ^UninstallCaption +$(^Name) avinstallasjon +# ^LicenseSubCaption +: Lisensavtale +# ^ComponentsSubCaption +: Installasjonsvalg +# ^DirSubCaption +: Installasjonsmappe +# ^InstallingSubCaption +: Installerer +# ^CompletedSubCaption +: Ferdig +# ^UnComponentsSubCaption +: Avinstallasjonsvalg +# ^UnDirSubCaption +: Avinstallasjonsmappe +# ^ConfirmSubCaption +: Bekreft +# ^UninstallingSubCaption +: Avinstallerer +# ^UnCompletedSubCaption +: Ferdig +# ^BackBtn +< &Tilbake +# ^NextBtn +&Neste > +# ^AgreeBtn +&Godta +# ^AcceptBtn +Jeg &godtar vilkÃ¥rene i lisensavtalen +# ^DontAcceptBtn +Jeg godtar &ikke vilkÃ¥rene i lisensavtalen +# ^InstallBtn +&Installer +# ^UninstallBtn +&Avinstaller +# ^CancelBtn +Avbryt +# ^CloseBtn +&Lukk +# ^BrowseBtn +Bla &gjennom... +# ^ShowDetailsBtn +Vis &detaljer +# ^ClickNext +Trykk Neste for Ã¥ fortsette. +# ^ClickInstall +Trykk Installer for Ã¥ starte installasjonen. +# ^ClickUninstall +Trykk Avinstaller for Ã¥ starte avinstallasjonen. +# ^Name +Navn +# ^Completed +Ferdig +# ^LicenseText +Vennligst les gjennom lisensavtalen før du installerer $(^Name). Hvis du godtar vilkÃ¥rene i avtalen, trykk pÃ¥ Godta. +# ^LicenseTextCB +Vennligst les gjennom lisensavtalen før du installerer $(^Name). Hvis du godtar vilkÃ¥rene i avtalen, merk av under. $_CLICK +# ^LicenseTextRB +Vennligst les gjennom lisensavtalen før du installerer $(^Name). Hvis du godtar vilkÃ¥rene i avtalen, velg det første alternativet. $_CLICK +# ^UnLicenseText +Vennligst les gjennom lisensavtalen før du avinstallerer $(^Name). Hvis du godtar vilkÃ¥rene i avtalen, trykk pÃ¥ Godta. +# ^UnLicenseTextCB +Vennligst les gjennom lisensavtalen før du avinstallerer $(^Name). Hvis du godtar vilkÃ¥rene i avtalen, merk av under. $_CLICK +# ^UnLicenseTextRB +Vennligst les gjennom lisensavtalen før du avinstallerer $(^Name). Hvis du godtar vilkÃ¥rene i avtalen, velg det første alternativet. $_CLICK +# ^Custom +Egendefinert +# ^ComponentsText +Merk komponentene du vil installere og fjern merkingen for de du ikke vil installere. $_CLICK +# ^ComponentsSubText1 +Velg hvilken mÃ¥te du vil installere pÃ¥: +# ^ComponentsSubText2_NoInstTypes +Merk komponenter du vil installere: +# ^ComponentsSubText2 +Eller merk de valgfrie komponentene du ønsker Ã¥ installere: +# ^UnComponentsText +Merk komponentene du vil avinstallere og fjern merkingen for de du vil beholde. $_CLICK +# ^UnComponentsSubText1 +Velg hvilken mÃ¥te du vil avinstallere pÃ¥: +# ^UnComponentsSubText2_NoInstTypes +Merk komponenter du vil avinstallere: +# ^UnComponentsSubText2 +Eller merk de valgfrie komponentene du ønsker Ã¥ avinstallere: +# ^DirText +$(^Name) vil bli installert i følgende mappe. For Ã¥ velge en annen mappe, trykk Bla gjennom. $_CLICK +# ^DirSubText +MÃ¥lmappe +# ^DirBrowseText +Velg mappe du vil installere $(^Name) i: +# ^UnDirText +$(^Name) i følgende mappe vil bli avinstallert. For Ã¥ velge en annen mappe, trykk Bla gjennom. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Velg mappe du vil avinstallere $(^Name) fra: +# ^SpaceAvailable +"Ledig plass: " +# ^SpaceRequired +"Nødvendig plass: " +# ^UninstallingText +Denne veiviseren vil avinstallere $(^Name) fra din datamaskin. $_CLICK +# ^UninstallingSubText +Avinstallerer fra: +# ^FileError +Feil under Ã¥pning av fil for skriving: \r\n\t\"$0\"\r\nTrykk Avbryt for Ã¥ avbryte installasjonen,\r\nPrøv igjen for Ã¥ prøve igjen, eller\r\nIgnorer for Ã¥ hoppe over denne filen +# ^FileError_NoIgnore +Feil under Ã¥pning av fil for skriving: \r\n\t\"$0\"\r\nTrykk Prøv igjen for Ã¥ prøve igjen, or\r\neller Avbryt for Ã¥ avbryte installasjonen +# ^CantWrite +"Kan ikke skrive: " +# ^CopyFailed +Kopiering mislyktes +# ^CopyTo +"Kopier til " +# ^Registering +"Registrerer: " +# ^Unregistering +""Avregistrerer: " +# ^SymbolNotFound +"Kunne ikke finne symbol: " +# ^CouldNotLoad +"Kunne ikke laste: " +# ^CreateFolder +"Lag mappe: " +# ^CreateShortcut +"Lag snarvei: " +# ^CreatedUninstaller +"Avinstallasjon laget: " +# ^Delete +"Slett fil: " +# ^DeleteOnReboot +"Slett ved omstart: " +# ^ErrorCreatingShortcut +"Feil under opprettelse av snarvei: " +# ^ErrorCreating +"Feil under opprettelse av: " +# ^ErrorDecompressing +Feil under utpakking av data! Installasjonsprogrammet kan være skadet. +# ^ErrorRegistering +Feil under registrering av DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Kjøre: " +# ^Extract +"Pakk ut: " +# ^ErrorWriting +"Pakk ut: Feil under skriving til fil " +# ^InvalidOpcode +Installasjonsprogrammet er skadet: ukjent kode +# ^NoOLE +"Ingen OLE for: " +# ^OutputFolder +"Ut-mappe: " +# ^RemoveFolder +"Fjern mappe: " +# ^RenameOnReboot +"Gi nytt navn ved omstart: " +# ^Rename +"Gi nytt navn: " +# ^Skipped +"Hoppet over: " +# ^CopyDetails +Kopier detaljer til utklippstavlen +# ^LogInstall +Loggfør installasjonsprosessen +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Norwegian.nsh b/tools/Contrib/Language files/Norwegian.nsh new file mode 100644 index 0000000..a8cb181 --- /dev/null +++ b/tools/Contrib/Language files/Norwegian.nsh @@ -0,0 +1,129 @@ +;Language: Norwegian (2068) +;By Jonas Lindsrøm (jonasc_88@hotmail.com) Reviewed and fixed by Jan Ivar Beddari, d0der at online.no + +!insertmacro LANGFILE "Norwegian" = "Norsk" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Velkommen til veiviseren for installasjon av $(^NameDA) " + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Denne veiviseren vil lede deg gjennom installasjonen av $(^NameDA).$\r$\n$\r$\nDet anbefales at du avslutter alle andre programmer før du fortsetter. Dette vil la installasjonsprogrammet forandre pÃ¥ systemfiler uten at du mÃ¥ starte datamaskinen pÃ¥ nytt.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Velkommen til veiviseren for avinstallasjon av $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Denne veiviseren vil lede deg gjennom avinstallasjonen av $(^NameDA).$\r$\n$\r$\nFør du fortsetter mÃ¥ du forsikre deg om at $(^NameDA) ikke kjører.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisensavtale" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Vennligst les gjennom lisensavtalen før du starter installasjonen av $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Hvis du godtar lisensavtalen trykk Godta for Ã¥ fortsette. Du mÃ¥ godta lisensavtalen for Ã¥ installere $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Hvis du godtar lisensavtalen, kryss av pÃ¥ merket under. Du mÃ¥ godta lisensavtalen for Ã¥ installere $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du godtar lisensavtalen, velg det første alternativet ovenfor. Du mÃ¥ godta lisensavtalen for Ã¥ installere $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisensavtale" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Vennligst les gjennom lisensavtalen før du avinstallerer $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Hvis du godtar lisensavtalen trykk Godta for Ã¥ fortsette. Du mÃ¥ godta lisensavtalen for Ã¥ avintallere $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Hvis du godtar lisensavtalen, kryss av pÃ¥ merket under. Du mÃ¥ godta lisensavtalen for Ã¥ avinstallere $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du godtar lisensavtalen, velg det første alternativet ovenfor. Du mÃ¥ godta lisensavtalen for Ã¥ avinstallere $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Trykk Page Down knappen for Ã¥ se resten av lisensavtalen." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Velg komponenter" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Velg hvilke deler av $(^NameDA) du ønsker Ã¥ installere." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Velg komponenter" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Velg hvilke deler av $(^NameDA) du ønsker Ã¥ avinstallere." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivelse" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Beveg musen over komponentene for Ã¥ se beskrivelsen." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Velg en komponent for Ã¥ se beskrivelsen." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Velg installasjonsmappe" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Velg hvilken mappe du vil installere $(^NameDA) i." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Velg mappe for avinstallasjon" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Velg mappen du vil avinstallere $(^NameDA) fra." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installasjonen pÃ¥gÃ¥r" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vennligst vent mens $(^NameDA) blir installert." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installasjonen er ferdig" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Installasjonen ble fullført uten feil." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installasjonen er avbrutt" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Installasjonen ble ikke fullført riktig." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Avinstallasjon pÃ¥gÃ¥r" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vennligst vent mens $(^NameDA) blir avinstallert." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Avinstallasjon ferdig" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Avinstallasjonen ble utført uten feil." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Avinstallasjon avbrutt" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Avinstallasjonen ble ikke utført riktig." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Avslutter $(^NameDA) installasjonsveiviser" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) er klart til bruk pÃ¥ din datamskin.$\r$\n$\r$\nTrykk Ferdig for Ã¥ avslutte installasjonsprogrammet." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Du mÃ¥ starte datamaskinen pÃ¥ nytt for Ã¥ fullføre installasjonen av $(^NameDA). Vil du starte datamaskinen pÃ¥ nytt nÃ¥?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Fullfører avinstallasjonen av $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) har blitt avinstallert fra din datamaskin.$\r$\n$\r$\nTrykk pÃ¥ ferdig for Ã¥ avslutte denne veiviseren." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Datamaskinen mÃ¥ starte pÃ¥ nytt for Ã¥ fullføre avinstallasjonen av $(^NameDA). Vil du starte datamaskinen pÃ¥ nytt nÃ¥?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ja. Start datamaskinen pÃ¥ nytt nÃ¥" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Nei. Jeg vil starte datamaskinen pÃ¥ nytt senere" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Kjør $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Vis Readme filen" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Ferdig" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Velg plassering pÃ¥ startmenyen" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Velg hvilken mappe snarveiene til $(^NameDA) skal ligge i." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Velg mappe for snarveiene til programmet. Du kan ogsÃ¥ skrive inn et nytt navn for Ã¥ lage en ny mappe." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ikke lag snarveier" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Avinstaller $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Fjern $(^NameDA) fra din datamaskin." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Er du sikker pÃ¥ at du vil avslutte installasjonen av $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Er du sikker pÃ¥ at du vil avbryte avinstallasjonen av $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Velg brukere" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Velg hvilke brukere du vil installere $(^NameDA) for." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Velg om du vil installere $(^NameDA) bare for deg selv, eller for alle som bruker denne maskinen. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installer for alle som bruker denne maskinen" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installer bare for meg" +!endif diff --git a/tools/Contrib/Language files/NorwegianNynorsk.nlf b/tools/Contrib/Language files/NorwegianNynorsk.nlf new file mode 100644 index 0000000..f2a52d9 --- /dev/null +++ b/tools/Contrib/Language files/NorwegianNynorsk.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Language ID +2068 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Vebjørn Sture, vsture gmail com +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) installasjon +# ^UninstallCaption +$(^Name) avinstallasjon +# ^LicenseSubCaption +: Lisensavtale +# ^ComponentsSubCaption +: Installasjonsval +# ^DirSubCaption +: Installasjonsmappe +# ^InstallingSubCaption +: Installerer +# ^CompletedSubCaption +: Ferdig +# ^UnComponentsSubCaption +: Avinstallasjonsval +# ^UnDirSubCaption +: Avinstallasjonsmappe +# ^ConfirmSubCaption +: Stadfest +# ^UninstallingSubCaption +: Avinstallerer +# ^UnCompletedSubCaption +: Ferdig +# ^BackBtn +< &Attende +# ^NextBtn +&Neste > +# ^AgreeBtn +&Godta +# ^AcceptBtn +Eg &godtek vilkÃ¥ra i lisensavtalen +# ^DontAcceptBtn +Eg godtek &ikkje vilkÃ¥ra i lisensavtalen +# ^InstallBtn +&Installer +# ^UninstallBtn +&Avinstaller +# ^CancelBtn +Avbryt +# ^CloseBtn +&Lat att +# ^BrowseBtn +Bla &gjennom ... +# ^ShowDetailsBtn +Syn &detaljar +# ^ClickNext +Trykk Neste for Ã¥ halda fram. +# ^ClickInstall +Trykk Installer for Ã¥ starta installasjonen. +# ^ClickUninstall +Trykk Avinstaller for Ã¥ starta avinstallasjonen. +# ^Name +Namn +# ^Completed +Ferdig +# ^LicenseText +Ver grei og les gjennom lisensavtalen før du installerer $(^NameDA). Dersom du godtek vilkÃ¥ra i avtalen, trykk pÃ¥ Godta. +# ^LicenseTextCB +Ver grei og les gjennom lisensavtalen før du installerer $(^NameDA). Dersom du godtek vilkÃ¥ra i avtalen, merk av under. $_CLICK +# ^LicenseTextRB +Ver grei og les gjennom lisensavtalen før du installerer $(^NameDA). Dersom du godtek vilkÃ¥ra i avtalen, vel det fyrste alternativet. $_CLICK +# ^UnLicenseText +Ver grei og les gjennom lisensavtalen før du avinstallerer $(^NameDA). Dersom du godtek vilkÃ¥ra i avtalen, trykk pÃ¥ Godta. +# ^UnLicenseTextCB +Ver grei og les gjennom lisensavtalen før du avinstallerer $(^NameDA). Dersom du godtek vilkÃ¥ra i avtalen, merk av under. $_CLICK +# ^UnLicenseTextRB +Ver grei og les gjennom lisensavtalen før du avinstallerer $(^NameDA). Dersom du godtek vilkÃ¥ra i avtalen, vel det fyrste alternativet. $_CLICK +# ^Custom +Eigendefinert +# ^ComponentsText +Merk komponentane du vil installera og fjern merkinga for dei du ikkje vil installera. $_CLICK +# ^ComponentsSubText1 +Vel kva mÃ¥te du vil installera pÃ¥: +# ^ComponentsSubText2_NoInstTypes +Merk komponentar du vil installera: +# ^ComponentsSubText2 +Eller merk dei valfrie komponentane du ynskjer Ã¥ installera: +# ^UnComponentsText +Merk komponentane du vil avinstallera og fjern merkinga for dei du vil ta vare pÃ¥. $_CLICK +# ^UnComponentsSubText1 +Vel kva mÃ¥te du vil avinstallera pÃ¥: +# ^UnComponentsSubText2_NoInstTypes +Merk komponentar du vil avinstallera: +# ^UnComponentsSubText2 +Eller merk dei valfrie komponentane du ynskjer Ã¥ avinstallera: +# ^DirText +$(^NameDA) vil verta installert i fylgjande mappe. For Ã¥ velja ei anna mappe, trykk Bla gjennom. $_CLICK +# ^DirSubText +MÃ¥lmappe +# ^DirBrowseText +Vel mappe du vil installera $(^NameDA) i: +# ^UnDirText +$(^NameDA) i fylgjande mappe vil verta avinstallert. For Ã¥ velja ei anna mappe, trykk Bla gjennom. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Vel mappe du vil avinstallera $(^NameDA) frÃ¥: +# ^SpaceAvailable +"Ledig plass: " +# ^SpaceRequired +"Naudsynt plass: " +# ^UninstallingText +Denne vegvisaren vil avinstallera $(^NameDA) frÃ¥ din datamaskin. $_CLICK +# ^UninstallingSubText +Avinstallerer frÃ¥: +# ^FileError +Feil under opning av fil for skriving: \r\n\t\"$0\"\r\nTrykk Avbryt for Ã¥ avbryta installasjonen,\r\nPrøv igjen for Ã¥ prøva igjen, eller\r\nIgnorer for Ã¥ hoppa over denne fila +# ^FileError_NoIgnore +Feil under opning av fil for skriving: \r\n\t\"$0\"\r\nTrykk Prøv igjen for Ã¥ prøva igjen, or\r\neller Avbryt for Ã¥ avbryta installasjonen +# ^CantWrite +"Kan ikkje skriva: " +# ^CopyFailed +Kopiering mislukka +# ^CopyTo +"Kopier til " +# ^Registering +"Registrerer: " +# ^Unregistering +""Avregistrerer: " +# ^SymbolNotFound +"Kunne ikkje finna symbol: " +# ^CouldNotLoad +"Kunne ikkje lasta: " +# ^CreateFolder +"Lag mappe: " +# ^CreateShortcut +"Lag snarveg: " +# ^CreatedUninstaller +"Avinstallasjon laga: " +# ^Delete +"Slett fil: " +# ^DeleteOnReboot +"Slett ved omstart: " +# ^ErrorCreatingShortcut +"Feil under oppretting av snarveg: " +# ^ErrorCreating +"Feil under oppretting av: " +# ^ErrorDecompressing +Feil under utpakking av data! Installasjonsprogrammet kan vera skadd. +# ^ErrorRegistering +Feil under registrering av DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Køyra: " +# ^Extract +"Pakk ut: " +# ^ErrorWriting +"Pakk ut: Feil under skriving til fil " +# ^InvalidOpcode +Installasjonsprogrammet er skadd: ukjend kode +# ^NoOLE +"Ingen OLE for: " +# ^OutputFolder +"Ut-mappe: " +# ^RemoveFolder +"Fjern mappe: " +# ^RenameOnReboot +"Gje nytt namn ved omstart: " +# ^Rename +"Gje nytt namn: " +# ^Skipped +"Hoppa over: " +# ^CopyDetails +Kopier detaljar til utklyppstavla +# ^LogInstall +Loggfør installasjonsprosessen +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G + diff --git a/tools/Contrib/Language files/NorwegianNynorsk.nsh b/tools/Contrib/Language files/NorwegianNynorsk.nsh new file mode 100644 index 0000000..8a9398f --- /dev/null +++ b/tools/Contrib/Language files/NorwegianNynorsk.nsh @@ -0,0 +1,129 @@ +;Language: Norwegian nynorsk (2068) +;By Vebjoern Sture and HÃ¥vard Mork (www.firefox.no) + +!insertmacro LANGFILE "NorwegianNynorsk" "Norwegian (Nynorsk)" "Norsk (nynorsk)" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Velkommen til $(^NameDA) innstallasjonsvegvisar" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Denne vegvisaren vil leie deg gjennom installeringa av $(^NameDA).$\n$\nDet er tilrÃ¥dd at du avsluttar alle andre program før du held fram. Dette vil la installeringsprogrammet oppdatera systemfiler utan at du mÃ¥ starta datamaskinen pÃ¥ nytt.$\n$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Velkommen til avinstallering av $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Denne vegvisaren vil leie deg gjennom avinstalleringen av $(^NameDA).$\n$\nFør du fortsetter mÃ¥ du forsikre deg om at $(^NameDA) ikkje er opent.$\n$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisensavtale" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Les gjennom lisensavtalen før du startar installeringa av $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Trykk pÃ¥ «Godta» dersom du godtar betingelsane i avtala. Du mÃ¥ godta avtala for Ã¥ installere $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Trykk pÃ¥ avkryssingsboksen nedanfor nedanfor dersom du godtar betingelsane i avtala. Du mÃ¥ godta avtala for Ã¥ installere $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Vel det første alternativet nedanfor dersom du godtek vilkÃ¥ra i avtala. Du mÃ¥ godta avtala for Ã¥ installera $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisensavtale" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Les gjennom lisensavtalen før du startar avinstalleringa av $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Trykk pÃ¥ «Godta» dersom du godtar betingelsane i avtala. Du mÃ¥ godta avtala for Ã¥ avinstallera $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Trykk pÃ¥ avkryssingsboksen nedanfor nedanfor dersom du godtar betingelsane i avtala. Du mÃ¥ godta avtala for Ã¥ avinstallera $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Vel det første alternativet nedanfor dersom du godtar betingelsane i avtala. Du mÃ¥ godta avtala for Ã¥ avinstallera $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Trykk Page Down-knappen for Ã¥ sjÃ¥ resten av lisensavtala." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Vel komponentar" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Vel kva delar av $(^NameDA) du ynskjer Ã¥ installera." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Vel funksjonar" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Vel kva for funksjonar du vil avinstallera i $(^NameDA)." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskriving" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Beveg musa over komponentene for Ã¥ sjÃ¥ beskrivinga." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Vel ein komponent for Ã¥ sjÃ¥ beskrivinga." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Vel installasjonsmappe" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Vel kva mappe du vil installera $(^NameDA) i." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Vel avinstalleringplassering" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Vel mappa du vil avinstallere $(^NameDA) frÃ¥." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installerer" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vent mens $(^NameDA) blir installert." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installeringa er fullført" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Installeringa vart fullført." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installeringa vart avbroten" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Installeringa vart ikkje fullført." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Avinstallerer" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vent medan $(^NameDA) vert avinstallert." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Avinstallering ferdig" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Avinstallering ble utført uten feil." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Avinstallering broten" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Avinstallering ble ikkje utført riktig." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Installering fullført" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) er installert og klar til bruk.$\n$\nTrykk pÃ¥ «Fullfør» for Ã¥ avslutte installeringa." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Du mÃ¥ starta datamaskinen pÃ¥ nytt for Ã¥ fullføra installeringa av $(^NameDA). Vil du starta pÃ¥ nytt no?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Fullfører avinstalleringa av $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) er no avinstallert frÃ¥ datamaskina di.$\n$\nTrykk pÃ¥ «Fullfør» for Ã¥ avslutta denne vegvisaren." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Datamaskinen mÃ¥ starta pÃ¥ nytt for Ã¥ fullføra avinstalleringa av $(^NameDA). Vil du starta datamaskina pÃ¥ nytt no?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Start pÃ¥ nytt no" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Eg vil starta pÃ¥ nytt seinare" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Køyr $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Syn lesmeg" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fullfør" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Vel mappe pÃ¥ startmenyen" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Vel kva mappe snarvegane til $(^NameDA) skal liggja i." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vel mappa du vil oppretta snarvegane til programmet i. Du kan òg skriva inn eit nytt namn for Ã¥ laga ei ny mappe." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ikkje opprett snarvegar" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Avinstaller $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Slett $(^NameDA) frÃ¥ datamaskinen." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Er du viss pÃ¥ at du vil avslutta installeringa av $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Er du viss pÃ¥ at du vil avbryta avinstalleringa av $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Vel brukarar" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Vel kva brukarar du vil installere $(^NameDA) for." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Vel om du vil installere $(^NameDA) berre for deg, eller for alle som nyttar denne maskina. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installer for alle som nyttar maskina" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installer berre for me" +!endif diff --git a/tools/Contrib/Language files/Pashto.nlf b/tools/Contrib/Language files/Pashto.nlf new file mode 100644 index 0000000..5bb291d --- /dev/null +++ b/tools/Contrib/Language files/Pashto.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1123 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1256 +# RTL - anything else than RTL means LTR +RTL +# Translation by Pakhtosoft (www.pakhtosoft.com) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +امسته $(^Name) +# ^UninstallCaption +نالګاو $(^Name) +# ^LicenseSubCaption +: منښتليک تړون +# ^ComponentsSubCaption +: لګاو غوراوي +# ^DirSubCaption +: لګاو Ù¾ÙˆÚšÛ +# ^InstallingSubCaption +: Ù„Ú«ÙŠÚ–ÙŠ +# ^CompletedSubCaption +: بشپړ +# ^UnComponentsSubCaption +: نالګاو غوراوي +# ^UnDirSubCaption +: نالګاو Ù¾ÙˆÚšÛ +# ^ConfirmSubCaption +: باورول +# ^UninstallingSubCaption +: نالګيږي +# ^UnCompletedSubCaption +: بشپړ +# ^BackBtn +< &وروسته +# ^NextBtn +&Ù…Ø®Ú©ÚšÛ > +# ^AgreeBtn +زه &منم +# ^AcceptBtn +زه &د منښتليک توکي منم +# ^DontAcceptBtn +زه &د منښتليک توکي نه منم +# ^InstallBtn +&لګول +# ^UninstallBtn +&نالګول +# ^CancelBtn +بندول +# ^CloseBtn +&بندول +# ^BrowseBtn +...Ú†&Ú¼Ù„ +# ^ShowDetailsBtn +Ø®Ø¨Ø±ØªÙŠØ§ÙˆÛ &ښودل +# ^ClickNext +.Ù…Ø®Ú©ÚšÛ ØªÙ„Ùˆ لپاره Ù…Ø®Ú©ÚšÛ Ù¼Ú© وهئ +# ^ClickInstall +.لګاو Ù¾Ûلولو لپاره لګول Ù¼Ú© وهئ +# ^ClickUninstall +.نالګاو Ù¾Ûلولو لپاره نالګول Ù¼Ú© وهئ +# ^Name +نوم +# ^Completed +بشپړ +# ^LicenseText +.د لګولو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© وګورئ. Ú©Ù‡ Ú†ÛØ±Û ØªØ§Ø³Û Ø¯ منښتليک ټول توکي منئ، زه منم Ù¼Ú© وهئ $(^NameDA) د +# ^LicenseTextCB +$_CLICK .د لګولو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© وګورئ. Ú©Ù‡ Ú†ÛØ±Û ØªØ§Ø³Û Ø¯ منښتليک ټول توکي منئ، Ù„Ø§Ù†Ø¯Û Ø®ÙˆÚšØ¨Ú©Ø³ Ù¼Ú© وهئ $(^NameDA) د +# ^LicenseTextRB +$_CLICK .د لګولو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© وګورئ. Ú©Ù‡ Ú†ÛØ±Û ØªØ§Ø³Û Ø¯ منښتليک ټول توکي منئ، Ù„Ø§Ù†Ø¯Û Ù„Ù…Ú“ÛŒ غوراوی خوښ کړئ $(^NameDA) د +# ^UnLicenseText +.د نالګاو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© وګورئ. Ú©Ù‡ Ú†ÛØ±Û ØªØ§Ø³Û Ø¯ منښتليک ټول توکي منئ، زه منم Ù¼Ú© وهئ $(^NameDA) د +# ^UnLicenseTextCB +$_CLICK .د نالګاو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© وګورئ. Ú©Ù‡ Ú†ÛØ±Û ØªØ§Ø³Û Ø¯ منښتليک ټول توکي منئ، Ù„Ø§Ù†Ø¯Û Ø®ÙˆÚšØ¨Ú©Ø³ Ù¼Ú© وهئ $(^NameDA) د +# ^UnLicenseTextRB +$_CLICK .د نالګاو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© وګورئ. Ú©Ù‡ Ú†ÛØ±Û ØªØ§Ø³Û Ø¯ منښتليک ټول توکي منئ، Ù„Ø§Ù†Ø¯Û Ù„Ù…Ú“ÛŒ غوراوي خوښ کړئ $(^NameDA) د +# ^Custom +دوديز +# ^ComponentsText +$_CLICK .کوم رغتوکي Ú†Û Ù„Ú«ÙˆÙ„ غواړئ خوښ ÙŠÛ Ú©Ú“Ø¦ او کوم رغتوکي Ú†Û Ù†Ù‡ غواړئ ÙˆÙŠÛ Ù„Ú«ÙˆØ¦ مه ÙŠÛ Ø®ÙˆÚšÙˆØ¦ +# ^ComponentsSubText1 +:د لګاو ډول وټاکئ +# ^ComponentsSubText2_NoInstTypes +:د لګولو لپاره رغتوکي خوښ کړئ +# ^ComponentsSubText2 +:يا، هغه غوراويز رغتوکي Ú†Û Ù„Ú«ÙˆÙ„ ÙŠÛ ØºÙˆØ§Ú“Ø¦ وټاکئ +# ^UnComponentsText +$_CLICK .کوم رغتوکي Ú†Û Ù†Ø§Ù„Ú«ÙˆÙ„ غواړئ خوښ ÙŠÛ Ú©Ú“Ø¦ او کوم رغتوکي Ú†Û Ù†Ù‡ غواړئ ÙˆÙŠÛ Ù†Ø§Ù„Ú«ÙˆØ¦ مه ÙŠÛ Ø®ÙˆÚšÙˆØ¦ +# ^UnComponentsSubText1 +:د نالګاو ډول وټاکئ +# ^UnComponentsSubText2_NoInstTypes +:د نالګولو لپاره رغتوکي وټاکئ +# ^UnComponentsSubText2 +:يا، هغه غوراويز رغتوکي Ú†Û Ù†Ø§Ù„Ú«ÙˆÙ„ ÙŠÛ ØºÙˆØ§Ú“Ø¦ وټاکئ +# ^DirText +$_CLICK .په Ù„Ø§Ù†Ø¯Û Ù¾ÙˆÚšÛ Ú©ÚšÛ ÙˆÙ„Ú«ÙˆÙŠ. په Ø¨Ù„Û Ù¾ÙˆÚšÛ Ú©ÚšÛ ÙŠÛ Ø¯ لګولو لپاره، Ú†Ú¼Ù„ Ù¼Ú© وهئ او بله Ù¾ÙˆÚšÛ ÙˆÙ¼Ø§Ú©Ø¦ $(^NameDA) امسته به +# ^DirSubText +موخه Ù¾ÙˆÚšÛ +# ^DirBrowseText +:Ù¾Ú©ÚšÛ Ù„Ú«ÙˆÙ„ غواړئ وټاکئ $(^NameDA) هغه Ù¾ÙˆÚšÛ Ú†Û +# ^UnDirText +$_CLICK .د Ù„Ø§Ù†Ø¯Û Ù¾ÙˆÚšÛ Ù†Ù‡ ونالګوي. د Ø¨Ù„Û Ù¾ÙˆÚšÛ Ù†Û Ø¯ نالګولو لپاره، Ú†Ú¼Ù„ Ù¼Ú© وهئ او بله Ù¾ÙˆÚšÛ ÙˆÙ¼Ø§Ú©Ø¦ $(^NameDA) امسته به +# ^UnDirSubText +"" +# ^UnDirBrowseText +:ØªØ±Û Ù†Ø§Ù„Ú«ÙˆÙ„ غواړئ وټاکئ $(^NameDA) هغه Ù¾ÙˆÚšÛ Ú†Û +# ^SpaceAvailable +" :شته تشه" +# ^SpaceRequired +" :اړينه تشه" +# ^UninstallingText +$_CLICK .به د Ù„Ø§Ù†Ø¯Û Ù¾ÙˆÚšÛ Ù†Ù‡ ونالګول شي $(^NameDA) +# ^UninstallingSubText +:نالګيږي له +# ^FileError +:د ليکلو لپاره د Ø¯ÙˆØªÙ†Û Ù¾Ø±Ø§Ù†ÙŠØ³ØªÙ„Ùˆ Ú©ÚšÛ Ø³ØªÙˆÙ†Ø²Ù‡ \r\n\r\n$0\r\n\r\n،د لګاو د بندولو لپاره بندول Ù¼Ú© وهئ\r\nبياهڅه د بيا Ù‡Ú…Û Ú©ÙˆÙ„Ùˆ لپاره، يا\r\n.پرÛږده د Ø¯Û Ø¯ÙˆØªÙ†Û Ù¾Ø±Ûښودلو لپاره +# ^FileError_NoIgnore +:د ليکلو لپاره د Ø¯ÙˆØªÙ†Û Ù¾Ø±Ø§Ù†ÙŠØ³ØªÙ„Ùˆ Ú©ÚšÛ Ø³ØªÙˆÙ†Ø²Ù‡ \r\n\r\n$0\r\n\r\nد بيا Ù‡Ú…Û Ú©ÙˆÙ„Ùˆ لپاره بياهڅه Ù¼Ú© وهئ، يا\r\n.بندول د لګاو د بندولو لپاره +# ^CantWrite +" :نشي ليکلی" +# ^CopyFailed +لمÛسلو پاتÛينه +# ^CopyTo +"ته لمÛسل " +# ^Registering +" :نومکښليږي" +# ^Unregistering +" :نانومکښليږي" +# ^SymbolNotFound +" :Ù¾Ûلام نشي Ù¾Ûدا کولی" +# ^CouldNotLoad +" :نشي راوستلی" +# ^CreateFolder +" :Ù¾ÙˆÚšÛ Ø¬ÙˆÚ“ÙˆÙ„" +# ^CreateShortcut +" :لنډلاری جوړول" +# ^CreatedUninstaller +" :جوړ شوی نالګاند" +# ^Delete +" :Ø¯ÙˆØªÙ†Û Ú“Ù†Ú«ÙˆÙ„" +# ^DeleteOnReboot +" :پر بياپÛلات ړنګول" +# ^ErrorCreatingShortcut +" :د لنډاري جوړولو ستونزه" +# ^ErrorCreating +" :جوړولو ستونزه" +# ^ErrorDecompressing +اومتوک نازÛرلو ستونزه! اندرغل لګاند؟ +# ^ErrorRegistering +د ډلل نومکښلو ستونزه +# ^ExecShell +" :اکزک شل" +# ^Exec +" :Ù¾Ûلول" +# ^Extract +" :ÙˆÛستل" +# ^ErrorWriting +"ÙˆÛستل: Ø¯ÙˆØªÙ†Û Ú©ÚšÛ Ù„ÙŠÚ©Ù„Ùˆ ستونزه " +# ^InvalidOpcode +اندرغل لګاند: ناسم اپکوډ +# ^NoOLE +"No OLE for: " +# ^OutputFolder +" :ÙˆØªÙ†Û Ù¾ÙˆÚšÛ" +# ^RemoveFolder +" :Ù¾ÙˆÚšÛ Ú“Ù†Ú«ÙˆÙ„" +# ^RenameOnReboot +" :پر بياپÛلات بيانومول" +# ^Rename +" :بيانومول" +# ^Skipped +" :پرÛښودلي" +# ^CopyDetails +Ø®Ø¨Ø±ØªÙŠØ§ÙˆÛ Ù¼ÙˆÙ¼Û Ú‰Ú“Û ØªÙ‡ لمÛسل +# ^LogInstall +د لګاو بهير خبرالول +# ^Byte +ب +# ^Kilo + Ú© +# ^Mega + Ù… +# ^Giga + Ú« diff --git a/tools/Contrib/Language files/Pashto.nsh b/tools/Contrib/Language files/Pashto.nsh new file mode 100644 index 0000000..cfcd879 --- /dev/null +++ b/tools/Contrib/Language files/Pashto.nsh @@ -0,0 +1,121 @@ +;Language: Pashto (1123) +;By Pakhtosoft - www.pakhtosoft.com + +!insertmacro LANGFILE "Pashto" = "پښتو" "Pashto" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "امسته اسانګر ته ÚšÙ‡ راغلاست $(^NameDA) د " + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT ".Ù„Ú«ÙˆÙ†Û ØªÙ‡ يوسي $(^NameDA) دا اسانګر به ØªØ§Ø³Û Ø¯$\r$\n$\r$\n.د Ø§Ù…Ø³ØªÛ Ø¯ Ù¾Ûلولو نه Ù…Ø®Ú©ÚšÛ Ø¯ نورو ساوترو د بندولو سپارښتنه کوو. د Ø¯Û Ú©Ø§Ø± په کولو سره به دا شونه شي Ú†Û Ù¾Ø±ØªÙ‡ له کمپيوټر د بياپيلاته Ø§Ú“ÙŠÙ†Û ØºÙˆÙ†Ú‰Ø§Ù„ Ø¯ÙˆØªÙ†Û Ø§ÙˆØ³Ù…Ù‡Ø§Ù„Ù‡ شي$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "نالګاو اسانګر ته ÚšÙ‡ راغلاست $(^NameDA) د" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT ".Ù†Ø§Ù„Ú«ÙˆÙ†Û ØªÙ‡ يوسي $(^NameDA) دا اسانګر به ØªØ§Ø³Û Ø¯$\r$\n$\r$\n.نه وي پرانيستل شوی $(^NameDA) د نالګاو د Ù¾Ûلولو نه مخکښÛØŒ Úان ډاډمن کړﺉ Ú†Û$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "منښتليک تړون" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE ".لګولو نه Ù…Ø®Ú©ÚšÛ Ù…Ù†ÚšØªÙ„ÙŠÚ© توکي وګورﺉ $(^NameDA) د" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM ".د Ù„Ú«Ø§ÙˆÙ†Û Ù„Ù¾Ø§Ø±Ù‡ د تړون منل اړين دي $(^NameDA) Ú©Ù‡ Ú†ÛØ±Û ØªÚ“ÙˆÙ† توکي منئ، زه منم Ù¼Ú© وهئ Ú†Û Ù…Ø®Ú©ÚšÛ ÙˆÙ„Ø§Ú“ شئ. د" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX ".لګولو لپاره د تړون منل اړين دي $(^NameDA) Ú©Ù‡ Ú†ÛØ±Û Ø¯ تړون توکي منئ، نو Ù„Ø§Ù†Ø¯Û Ø®ÙˆÚšØ¨Ú©Ø³ Ù¼Ú© وهئ. د $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS ".لګولو لپاره د تړون منل اړين دي $(^NameDA) Ú©Ù‡ Ú†ÛØ±Û Ø¯ تړون توکي منئ، نو Ù„Ø§Ù†Ø¯Û Ù„Ù…Ú“ÛŒ غوراوی Ù¼Ú© وهئ. د $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "منښتليک تړون" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE ".نالګولو نه Ù…Ø®Ú©ÚšÛ Ø¯ منښتليک توکي وګورﺉ $(^NameDA) د" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM ".نالګولو لپاره د تړون منل اړين دي $(^NameDA) Ú©Ù‡ Ú†ÛØ±Û Ø¯ تړون توکي منئ، زه منم Ù¼Ú© وهئ Ú†Û Ù…Ø®Ú©ÚšÛ ÙˆÙ„Ø§Ú“ شئ. د" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX ".نالګولو لپاره د تړون منل اړين دي $(^NameDA) Ú©Ù‡ Ú†ÛØ±Û Ø¯ تړون توکي منئ، نو Ù„Ø§Ù†Ø¯Û Ø®ÙˆÚšØ¨Ú©Ø³ Ù¼Ú© وهئ. د $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS ".نالګولو لپاره د تړون منل اړين دي $(^NameDA) Ú©Ù‡ Ú†ÛØ±Û Ø¯ تړون توکي منئ، نو Ù„Ø§Ù†Ø¯Û Ù„Ù…Ú“ÛŒ غوراوی Ù¼Ú© وهئ. د $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP ".د تړون د Ù†ÙˆØ±Û Ø¨Ø±Ø®Û Ú©ØªÙ„Ùˆ لپاره Ù¾Ûج ډاون Ú©ÙŠÙ„Û ÙˆÙˆÙ‡Ø¦" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "رغتوکي خوښ کړﺉ" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE ".Ú©ÙˆÙ…Û ÚØ§Ù†Ú«Ú“ØªÙŠØ§ÙˆÛ Ú†Û Ù„Ú«ÙˆÙ„ غواړﺉ، خوښ ÙŠÛ Ú©Ú“ïº‰ $(^NameDA) د" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "رغتوکي خوښ کړﺉ" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE ".Ú©ÙˆÙ…Û ÚØ§Ù†Ú«Ú“ØªÙŠØ§ÙˆÛ Ú†Û Ù†Ø§Ù„Ú«ÙˆÙ„ غواړﺉ، خوښ ÙŠÛ Ú©Ú“ïº‰ $(^NameDA) د" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "سپړاوي" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO ".د رغتوکي سپړاوي کتلو لپاره موږک د Ù‡ØºÛ Ø¯Ù¾Ø§Ø³Ù‡ ودروﺉ" + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "لګاو Úای وټاکئ" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE ".لګول غواړﺉ ÙˆÙŠÛ Ù¼Ø§Ú©Ø¦ $(^NameDA) په کومه Ù¾ÙˆÚšÛ Ú©ÚšÛ Ú†Û" +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "نالګاو Úای وټاکئ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE ".نالګول غواړﺉ ÙˆÙŠÛ Ù¼Ø§Ú©Ø¦ $(^NameDA) د Ú©ÙˆÙ…Û Ù¾ÙˆÚšÛ Ù†Ù‡ Ú†Û" +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Ù„Ú«ÙŠÚ–ÙŠ" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE ".په بشپړه توګه ولګول شي $(^NameDA) مهرباني وکړﺉ Ù„Ú–Ù‡ تمه وکړﺉ ترڅو" + ${LangFileString} MUI_TEXT_FINISH_TITLE "لګونه بشپړه شوه" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE ".امسته په برياليتوب سرته ورسÛده" + ${LangFileString} MUI_TEXT_ABORT_TITLE "لګونه بنده شوه" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE ".امسته په برياليتوب سرته ونه رسÛده" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "نالګيږي" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE ".په بشپړه توګه ونالګول شي $(^NameDA) مهرباني وکړﺉ Ù„Ú–Ù‡ تمه وکړﺉ ترڅو" + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "نالګونه بشپړه شوه" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE ".نالګاو په برياليتوب سرته ورسÛدو" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "نالګونه بنده شوه" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE ".نالګاو په برياليتوب سرته ونه رسÛدو" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "امسته اسانګر بشپړيږي $(^NameDA) د" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT ".Ø³ØªØ§Ø³Û Ù¾Ù‡ کمپيوټر Ú©ÚšÛ ÙˆÙ„Ú«ÙˆÙ„ شو $(^NameDA)$\r$\n$\r$\nد Ø¯Û Ø§Ø³Ø§Ù†Ú«Ø± د بندولو لپاره پای ته Ù¼Ú© ورکړﺉ" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "لګاو بشپړولو لپاره Ø³ØªØ§Ø³Û Ú©Ù…Ù¾ÙŠÙˆÙ¼Ø± بياپÛلات ته اړتيا لري. ايا اوس بياپÛلون کول غواړﺉ؟ $(^NameDA) د" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "نالګاو اسانګر بشپړيږي $(^NameDA) د" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT ".Ø³ØªØ§Ø³Û Ù„Ù‡ کمپيوټر نه ونالګول شو $(^NameDA)$\r$\n$\r$\nد Ø¯Û Ø§Ø³Ø§Ù†Ú«Ø± د بندولو لپاره پای ته Ù¼Ú© ورکړﺉ" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT " نالګاو بشپړولو لپاره Ø³ØªØ§Ø³Û Ú©Ù…Ù¾ÙŠÙˆÙ¼Ø± بياپÛلات ته اړتيا لري. ايا اوس بياپÛلون کول غواړﺉ؟ $(^NameDA) د" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "سمدستي بياپÛلون" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "وروسته زه پخپله بياپÛلون کول غواړم" + ${LangFileString} MUI_TEXT_FINISH_RUN "&پرانيستل $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&ماولوله ښودل" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&پای" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Ù¾ÛÙ„ ØºÙˆØ±Ù†Û Ù¾ÙˆÚšÛ Ø®ÙˆÚšÙ‡ کړﺉ" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "د لنډلارو لپاره يو Ù¾ÛÙ„ ØºÙˆØ±Ù†Û Ù¾ÙˆÚšÛ Ø®ÙˆÚšÙ‡ کړﺉ $(^NameDA) د" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP ".د Ù¾ÛÙ„ ØºÙˆØ±Ù†Û Ù‡ØºÙ‡ Ù¾ÙˆÚšÛ Ú†Û Ø¯ ساوتري لنډلاري Ù¾Ú©ÚšÛ Ø¬ÙˆÚ“ÙˆÙ„ غواړﺉ خوښه کړﺉ. Ù†ÙˆÛ Ù¾ÙˆÚšÛ Ø¬ÙˆÚ“ÙˆÙ„Ùˆ لپاره نوم هم ليکلی شئ" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "لنډلاري مه جوړوه" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "نالګول $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE ".د خپل کمپيوټر نه ړنګول $(^NameDA)" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "امسته بندول غواړﺉ؟ $(^Name) ايا په ډاډمنه توګه د" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "نالګاو بندول غواړﺉ؟ $(^Name) ايا په ډاډمنه توګه د" +!endif diff --git a/tools/Contrib/Language files/Polish.nlf b/tools/Contrib/Language files/Polish.nlf new file mode 100644 index 0000000..1a34dcb --- /dev/null +++ b/tools/Contrib/Language files/Polish.nlf @@ -0,0 +1,195 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1045 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Piotr Murawski & RafaÅ‚ Lampe +# Updated by cube and SYSTEMsoft Group +# Corrected by Marek StÄ™pieÅ„ - http://www.aviary.pl +# Corrected by Mateusz Gola (aka Prozac) - http://www.avirecomp.com +# Updated by PaweÅ‚ Porwisz (http://www.pawelporwisz.pl) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalator $(^Name) +# ^UninstallCaption +Deinstalator $(^Name) +# ^LicenseSubCaption +: Umowa licencyjna +# ^ComponentsSubCaption +: Opcje instalacji +# ^DirSubCaption +: Folder instalacyjny +# ^InstallingSubCaption +: Instalowanie plików +# ^CompletedSubCaption +: ZakoÅ„czono +# ^UnComponentsSubCaption +: Opcje deinstalacji +# ^UnDirSubCaption +: Folder deinstalacyjny +# ^ConfirmSubCaption +: Potwierdzenie +# ^UnDirSubCaption +: Deinstalowanie plików +# ^UnCompletedSubCaption +: ZakoÅ„czono +# ^BackBtn +< &Wstecz +# ^NextBtn +&Dalej > +# ^AgreeBtn +&Zgadzam siÄ™ +# ^AcceptBtn +&AkceptujÄ™ warunki umowy licencyjnej +# ^DontAcceptBtn +&Nie akceptujÄ™ warunków umowy licencyjnej +# ^InstallBtn +&Zainstaluj +# ^UninstallBtn +&Odinstaluj +# ^CancelBtn +Anuluj +# ^CloseBtn +&Zamknij +# ^BrowseBtn +&PrzeglÄ…daj... +# ^ShowDetailsBtn +Pokaż &szczegóły +# ^ClickNext +Kliknij przycisk 'Dalej', aby kontynuować. +# ^ClickInstall +Kliknij przycisk 'Zainstaluj', aby rozpocząć instalacjÄ™. +# ^ClickUninstall +Kliknij przycisk 'Odinstaluj', aby rozpocząć deinstalacjÄ™. +# ^Name +Nazwa +# ^Completed +ZakoÅ„czono +# ^LicenseText +Przed instalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji. JeÅ›li akceptujesz wszystkie warunki umowy, kliknij przycisk 'Zgadzam siÄ™'. +# ^LicenseTextCB +Przed instalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji. JeÅ›li akceptujesz wszystkie warunki umowy, kliknij poniższe pole wyboru. $_CLICK. +# ^LicenseTextRB +Przed instalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji. JeÅ›li akceptujesz wszystkie warunki umowy, wybierz pierwszÄ… z poniższych opcji. $_CLICK. +# ^UnLicenseText +Przed deinstalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji. JeÅ›li akceptujesz wszystkie warunki umowy, kliknij przycisk 'Zgadzam siÄ™'. +# ^UnLicenseTextCB +Przed deinstalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji. JeÅ›li akceptujesz wszystkie warunki umowy, kliknij poniższe pole wyboru. $_CLICK. +# ^UnLicenseTextRB +Przed deinstalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji. JeÅ›li akceptujesz wszystkie warunki umowy, wybierz pierwszÄ… z poniższych opcji. $_CLICK. +# ^Custom +Użytkownika +# ^ComponentsText +Zaznacz komponenty, które chcesz zainstalować i odznacz te, których nie chcesz instalować. $_CLICK +# ^ComponentsSubText1 +Wybierz typ instalacji: +# ^ComponentsSubText2_NoInstTypes +Wybierz komponenty do zainstalowania: +# ^ComponentsSubText2 +Albo wybierz opcjonalne komponenty, które chcesz zainstalować: +# ^UnComponentsText +Zaznacz komponenty, które chcesz odinstalować i odznacz te, które nie zostanÄ… odinstalowane. $_CLICK +# ^UnComponentsSubText1 +Wybierz typ deinstalacji: +# ^UnComponentsSubText2_NoInstTypes +Wybierz komponenty do odinstalowania: +# ^UnComponentsSubText2 +Albo wybierz opcjonalne komponenty, które chcesz odinstalować: +# ^DirText +Instalator zainstaluje $(^NameDA) w podanym poniżej folderze docelowym (możesz także kliknąć przycisk 'PrzeglÄ…daj...' i wybrać inny folder). $_CLICK +# ^DirSubText +Folder docelowy +# ^DirBrowseText +Wybierz folder instalacyjny $(^NameDA): +# ^UnDirText +Deinstalator usunie $(^NameDA) z nastÄ™pujÄ…cego folderu. Aby odinstalować z innego folderu, kliknij przycisk 'PrzeglÄ…daj...' i wybierz folder. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Wybierz folder, z którego zostanie odinstalowany $(^NameDA): +# ^SpaceAvailable +"DostÄ™pne miejsce: " +# ^SpaceRequired +"Wymagane miejsce: " +# ^UninstallingText +Ten kreator odinstaluje $(^NameDA) z Twojego komputera. $_CLICK +# ^UninstallingSubText +Deinstalacja z: +# ^FileError +BÅ‚Ä…d otwarcia pliku do zapisu: \r\n\r\n$0\r\n\r\nWybierz 'Anuluj', aby przerwać instalacjÄ™,\r\n'Ponów', aby ponowić zapis do pliku lub\r\n'Ignoruj', aby pominąć ten plik. +# ^FileError_NoIgnore +BÅ‚Ä…d otwarcia pliku do zapisu: \r\n\r\n$0\r\n\r\nWybierz 'Ponów', aby ponowić zapis do pliku lub\r\n'Anuluj', aby przerwać instalacjÄ™. +# ^CantWrite +"Nie można zapisać: " +# ^CopyFailed +BÅ‚Ä…d kopiowania +# ^CopyTo +"Kopiuj do " +# ^Registering +"Rejestrowanie: " +# ^Unregistering +"Wyrejestrowywanie: " +# ^SymbolNotFound +"Nie można odnaleźć symbolu: " +# ^CouldNotLoad +"Nie można wczytać: " +#^CreateFolder +"Utwórz folder: " +# ^CreateShortcut +"Utwórz skrót: " +# ^CreatedUninstaller +"Utworzono deinstalator: " +# ^Delete +"UsuÅ„ plik: " +# ^DeleteOnReboot +"UsuÅ„ przy ponownym uruchomieniu: " +# ^ErrorCreatingShortcut +"BÅ‚Ä…d tworzenia skrótu: " +# ^ErrorCreating +"BÅ‚Ä…d tworzenia: " +# ^ErrorDecompressing +BÅ‚Ä…d wyodrÄ™bniania danych! Uszkodzony instalator? +# ^ErrorRegistering +BÅ‚Ä…d rejestracji pliku DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Uruchom: " +# ^Extract +"WyodrÄ™bnij: " +# ^ErrorWriting +"WyodrÄ™bnij: bÅ‚Ä…d zapisu do pliku " +# ^InvalidOpcode +Instalator uszkodzony: nieprawidÅ‚owy kod operacji +# ^NoOLE +"Brak OLE dla: " +# ^OutputFolder +"Folder wyjÅ›ciowy: " +# ^RemoveFolder +"UsuÅ„ folder: " +# ^RenameOnReboot +"ZmieÅ„ nazwÄ™ przy ponownym uruchomieniu: " +# ^Rename +"ZmieÅ„ nazwÄ™: " +# ^Skipped +"PominiÄ™te: " +# ^CopyDetails +Kopiuj szczegóły do schowka +# ^LogInstall +Rejestruj przebieg instalacji +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Polish.nsh b/tools/Contrib/Language files/Polish.nsh new file mode 100644 index 0000000..59987a8 --- /dev/null +++ b/tools/Contrib/Language files/Polish.nsh @@ -0,0 +1,132 @@ +;Language: Polish (1045) +;By Piotr Murawski & RafaÅ‚ Lampe +;Updated by cube and SYSTEMsoft Group +;Updated by Mateusz Gola (aka Prozac) - http://www.avirecomp.com +;Updated by PaweÅ‚ Porwisz (http://www.pawelporwisz.pl) + +!insertmacro LANGFILE "Polish" = "Polski" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Witamy w kreatorze instalacji $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Kreator ten pomoże Ci zainstalować $(^NameDA).$\r$\n$\r$\nZalecane jest zamkniÄ™cie wszystkich uruchomionych programów przed rozpoczÄ™ciem instalacji. Pozwoli to na uaktualnienie niezbÄ™dnych plików systemowych bez koniecznoÅ›ci ponownego uruchamiania komputera.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Witamy w kreatorze deinstalacji $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Kreator ten pomoże Ci odinstalować $(^NameDA).$\r$\n$\r$\nPrzed rozpoczÄ™ciem deinstalacji, upewnij siÄ™, że $(^NameDA) nie jest uruchomiony.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Umowa licencyjna" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Przed instalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jeżeli akceptujesz warunki umowy, kliknij przycisk 'Zgadzam siÄ™', aby kontynuować. Musisz zaakceptować warunki umowy, aby zainstalować $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jeżeli akceptujesz warunki umowy, zaznacz poniższe pole wyboru, aby kontynuować. Musisz zaakceptować warunki umowy, aby zainstalować $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jeżeli akceptujesz warunki umowy, wybierz pierwszÄ… z poniższych opcji, aby kontynuować. Musisz zaakceptować warunki umowy, aby zainstalować $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Umowa licencyjna" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Przed deinstalacjÄ… $(^NameDA) zapoznaj siÄ™ z warunkami licencji." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jeżeli akceptujesz warunki umowy, kliknij przycisk 'Zgadzam siÄ™', aby kontynuować. Musisz zaakceptować warunki umowy, aby odinstalować $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jeżeli akceptujesz warunki umowy, zaznacz poniższe pole wyboru, aby kontynuować. Musisz zaakceptować warunki umowy, aby odinstalować $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jeżeli akceptujesz warunki umowy, wybierz pierwszÄ… z poniższych opcji, aby kontynuować. Musisz zaakceptować warunki umowy, aby odinstalować $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "NaciÅ›nij klawisz Page Down, aby zobaczyć dalszÄ… część umowy." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Wybierz komponenty" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Wybierz komponenty $(^NameDA), które chcesz zainstalować." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Wybierz komponenty" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Wybierz, które elementy $(^NameDA) chcesz odinstalować." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "PrzesuÅ„ kursor myszy nad komponent, aby zobaczyć jego opis." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Wybierz komponent, aby zobaczyć jego opis." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Wybierz lokalizacjÄ™ dla instalacji" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Wybierz folder, w którym chcesz zainstalować $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Wybierz lokalizacjÄ™ dla deinstalacji" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Wybierz folder, z którego chcesz odinstalować $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalacja" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "ProszÄ™ czekać, trwa instalacja $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ZakoÅ„czono instalacjÄ™" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalacja zakoÅ„czona pomyÅ›lnie." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalacja przerwana" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalacja nie zostaÅ‚a zakoÅ„czona pomyÅ›lnie." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Deinstalacja" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "ProszÄ™ czekać, trwa deinstalacja $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "ZakoÅ„czono deinstalacjÄ™" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Odinstalowanie zakoÅ„czone pomyÅ›lnie." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Deinstalacja przerwana" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Deinstalacja nie zostaÅ‚a zakoÅ„czona pomyÅ›lnie." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "KoÅ„czenie pracy kreatora instalacji $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) zostaÅ‚ pomyÅ›lnie zainstalowany na Twoim komputerze.$\r$\n$\r$\nKliknij przycisk 'ZakoÅ„cz', aby zakoÅ„czyć dziaÅ‚anie instalatora." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Twój komputer musi zostać ponownie uruchomiony, aby zakoÅ„czyć instalacjÄ™ $(^NameDA). Czy chcesz teraz ponownie uruchomić komputer?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "KoÅ„czenie pracy kreatora deinstalacji $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) zostaÅ‚ odinstalowany z Twojego komputera.$\r$\n$\r$\nKliknij przycisk 'ZakoÅ„cz', aby zakoÅ„czyć dziaÅ‚anie deinstalatora." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Twój komputer musi zostać ponownie uruchomiony w celu zakoÅ„czenia deinstalacji $(^NameDA). Czy chcesz teraz ponownie uruchomić komputer?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Uruchom ponownie teraz" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Sam uruchomiÄ™ ponownie komputer później" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Uruchom $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Pokaż plik ReadMe" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&ZakoÅ„cz" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Wybierz folder w menu Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Wybierz folder menu Start, w którym zostanÄ… umieszczone skróty do $(^NameDA)" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Wybierz folder w menu Start, w którym chciaÅ‚byÅ› umieÅ›cić skróty do programu. Możesz także utworzyć nowy folder wpisujÄ…c jego nazwÄ™." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nie twórz skrótów" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Odinstaluj $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "UsuÅ„ $(^NameDA) z Twojego komputera." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Czy na pewno chcesz zakoÅ„czyć dziaÅ‚anie instalatora $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Czy na pewno chcesz przerwać proces deinstalacji $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Wybierz użytkowników" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Wybierz, dla których użytkowników chcesz zainstalować $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Wybierz, czy chcesz zainstalować $(^NameDA) tylko dla siebie, czy dla wszystkich użytkowników tego komputera. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Zainstaluj dla wszystkich użytkowników tego komputera" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Zainstaluj tylko dla mnie" +!endif diff --git a/tools/Contrib/Language files/Portuguese.nlf b/tools/Contrib/Language files/Portuguese.nlf new file mode 100644 index 0000000..c51d85e --- /dev/null +++ b/tools/Contrib/Language files/Portuguese.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +2070 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation v4.0.3 by DragonSoull with help from Dre` - Updated by Ramon +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalação de $(^Name) +# ^UninstallCaption +Desinstalação de $(^Name) +# ^LicenseSubCaption +: Contrato de Licença +# ^ComponentsSubCaption +: Opções de instalação +# ^DirSubCaption +: Diretório de instalação +# ^InstallingSubCaption +: Instalando Ficheiros +# ^CompletedSubCaption +: Concluído +# ^UnComponentsSubCaption +: Opções de Desinstalação +# ^UnDirSubCaption +: Pasta de Desinstalação +# ^ConfirmSubCaption +: Confirmação +# ^UninstallingSubCaption +: Desinstalando +# ^UnCompletedSubCaption +: Concluído +# ^BackBtn +< &Anterior +# ^NextBtn +&Seguinte > +# ^AgreeBtn +&Aceito +# ^AcceptBtn +Eu &aceito os termos do Contrato de Licença +# ^DontAcceptBtn +Eu &não aceito os termos do Contrato de Licença +# ^InstallBtn +&Instalar +# ^UninstallBtn +&Desinstalar +# ^CancelBtn +Cancelar +# ^CloseBtn +&Fechar +# ^BrowseBtn +&Procurar... +# ^ShowDetailsBtn +Ver &Detalhes +# ^ClickNext +Clique em 'Seguinte' para continuar. +# ^ClickInstall +Clique em 'Instalar' para iniciar a instalação. +# ^ClickUninstall +Clique em 'Desinstalar' para iniciar a desinstalação. +# ^Name +Nome +# ^Completed +Concluído +# ^LicenseText +Por favor reveja o acordo de licença antes de instalar $(^NameDA). Se concorda com todos os termos da licença, clique em 'Aceito'. +# ^LicenseTextCB +Por favor reveja o acordo de licença antes de instalar $(^NameDA). Se concorda com todos os termos da licença, clique na caixa de seleção abaixo. $_CLICK +# ^LicenseTextRB +Por favor reveja o acordo de licença antes de instalar $(^NameDA). Se concorda com todos os termos da licença, escolha a primeira opção abaixo. $_CLICK +# ^UnLicenseText +Por favor reveja o acordo de licença antes de desinstalar $(^NameDA). Se concorda com todos os termos da licença, clique em 'Aceito'. +# ^UnLicenseTextCB +Por favor reveja o acordo de licença antes de desinstalar $(^NameDA). Se concorda com todos os termos da licença, clique na caixa de seleção abaixo. $_CLICK +# ^UnLicenseTextRB +Por favor reveja o acordo de licença antes de desinstalar $(^NameDA). Se concorda com todos os termos da licença, escolha a primeira opção abaixo. $_CLICK +# ^Custom +Personalizado +# ^ComponentsText +Marque os componentes que deseja instalar e desmarque os componentes que não deseja instalar. $_CLICK +# ^ComponentsSubText1 +Escolha o tipo de instalação: +# ^ComponentsSubText2_NoInstTypes +Escolha os componentes para instalar: +# ^ComponentsSubText2 +Ou, escolha os componentes opcionais que deseja instalar: +# ^UnComponentsText +Marque os componentes que queira desinstalar e vice versa. $_CLICK +# ^UnComponentsSubText1 +Escolha o tipo de desinstalação: +# ^UnComponentsSubText2_NoInstTypes +Escolha os componentes para desinstalar: +# ^UnComponentsSubText2 +Ou, escolha os componentes opcionais que queira desinstalar: +# ^DirText +O $(^NameDA) será instalado na seguinte pasta. Para instalar numa pasta diferente, clique em 'Procurar...' e escolha outra pasta. $_CLICK +# ^DirSubText +Pasta de Destino +# ^DirBrowseText +Escolha uma pasta para instalar o $(^NameDA): +# ^UnDirText +O $(^NameDA) será desinstalado da seguinte pasta. Para desinstalar de uma pasta diferente, clique em 'Procurar...' e escolha outra pasta. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Escolha uma pasta de onde será desinstalado o $(^NameDA): +# ^SpaceAvailable +"Espaço disponível: " +# ^SpaceRequired +"Espaço necessário: " +# ^UninstallingText +$(^NameDA) será desinstalado da seguinte pasta. $_CLICK +# ^UninstallingSubText +Desinstalando de: +# ^FileError +Erro ao abrir ficheiro para escrita: \r\n\t"$0"\r\nClique em Abortar para abortar a instalação,\r\nRepetir para tentar novamente a escrita do ficheiro, ou\r\nIgnorar para ignorar este ficheiro. +# ^FileError_NoIgnore +Erro ao abrir ficheiro para escrita: \r\n\t"$0"\r\nClique em Repetir para tentar novamente a gravação do ficheiro, ou\r\nCancelar para abortar a instalação. +# ^CantWrite +"Não foi possível escrever: " +# ^CopyFailed +Falha ao copiar +# ^CopyTo +"Copiar para " +# ^Registering +"Registando: " +# ^Unregistering +"Desregistando: " +# ^SymbolNotFound +"Símbolo não encontrado: " +# ^CouldNotLoad +"Não foi possível carregar: " +# ^CreateFolder +"Criando diretório: " +# ^CreateShortcut +"Criando atalho: " +# ^CreatedUninstaller +"Criando desinstalador: " +# ^Delete +"Apagando ficheiro: " +# ^DeleteOnReboot +"Apagar ao reiniciar: " +# ^ErrorCreatingShortcut +"Erro ao criar atalho: " +# ^ErrorCreating +"Erro ao criar: " +# ^ErrorDecompressing +Erro ao descomprimir dados! Instalador corrompido? +# ^ErrorRegistering +Erro ao registar DLL +# ^ExecShell +"Executando pelo Shell: " +# ^Exec +"Executando: " +# ^Extract +"Extraindo: " +# ^ErrorWriting +"Extraindo: erro ao escrever ficheiro " +# ^InvalidOpcode +Instalador corrompido: código de operação inválido +# ^NoOLE +"Sem OLE para: " +# ^OutputFolder +"Pasta de destino: " +# ^RemoveFolder +"Removendo pasta: " +# ^RenameOnReboot +"Renomear ao reiniciar: " +# ^Rename +"Renomeando: " +# ^Skipped +"Ignorado: " +# ^CopyDetails +Copiar detalhes para a Ãrea de Transfêrencia +# ^LogInstall +Registar processo de instalação +# ^Byte +B +# kilo + K +# mega + M +# giga + G diff --git a/tools/Contrib/Language files/Portuguese.nsh b/tools/Contrib/Language files/Portuguese.nsh new file mode 100644 index 0000000..4633688 --- /dev/null +++ b/tools/Contrib/Language files/Portuguese.nsh @@ -0,0 +1,129 @@ +;Language: Portuguese (2070) +;By Ramon + +!insertmacro LANGFILE "Portuguese" = "Português" "Portugues" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bem vindo ao Assistente de Instalação do $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Este assistente ajudá-lo-á durante a instalação do $(^NameDA).$\r$\n$\r$\nÉ recomendado que feche todas as outras aplicações antes de iniciar a Instalação. Isto permitirá que o Instalador actualize ficheiros relacionados com o sistema sem necessidade de reiniciar o computador.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bem vindo ao Assistente de desinstalação do $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este assistente ajudá-lo-á durante a desinstalação do $(^NameDA).$\r$\n$\r$\nAntes de iniciar a desinstalação, certifique-se de que o $(^NameDA) não está em execução.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Contrato de Licença" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Por favor, verifique os termos da licença antes de instalar o $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se aceitar os termos da licença, clique em 'Aceito' para continuar. Deverá aceitar o contrato para instalar o $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se aceitar os termos da licença, clique na caixa de seleção abaixo. Deverá aceitar o contrato para instalar o $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se aceitar os termos da licença, selecione a primeira opção abaixo. Você deve aceitar o contrato para instalar o $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Contrato de Licença" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Por favor, verifique os termos da licença antes de desinstalar o $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se aceitar os termos da licença, clique em 'Aceito' para continuar. Deverá aceitar o contrato para desinstalar o $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se aceitar os termos da licença, clique na caixa de seleção abaixo. Deverá aceitar o contrato para desinstalar o $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se aceitar os termos da licença, selecione a primeira opção abaixo. Você deve aceitar o contrato para desinstalar o $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tecle Page Down para ver o restante da licença." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Escolha de Componentes" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Escolha quais as características do $(^NameDA) que deseja instalar." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Escolher Componentes" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Escolha quais as características do $(^NameDA) que deseja desinstalar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posicione o rato sobre um componente para ver a sua descrição." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Seleccione um componente para ver a sua descrição." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Escolha do Local da Instalação" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Escolha a pasta na qual deseja instalar o $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Escolha o Local de desinstalação" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Escolha a pasta de onde pretende desinstalar o $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalando" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Por favor, aguarde enquanto o $(^NameDA) está sendo instalado." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalação Completa" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "A instalação foi concluída com sucesso." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalação Abortada" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "A instalação não foi concluída com sucesso." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor, aguarde enquanto o $(^NameDA) está sendo desinstalado." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstalação Completa" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "A desinstalação foi concluída com sucesso." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstalação Abortada" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "A desinstalação não foi concluída com sucesso" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Concluindo o Assistente de Instalação do $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) foi instalado no seu computador.$\r$\n$\r$\nClique em Terminar para fechar este assistente." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "O seu computador deve ser reiniciado para concluír a instalação do $(^NameDA). Deseja reiniciar agora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Concluíndo o assistente de desisntalação do $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) foi removido do seu computador.$\r$\n$\r$\nClique em Terminar para fechar este assistente." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "O seu computador deve ser reiniciado para concluír a desinstalação do $(^NameDA). Deseja reiniciar agora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reiniciar Agora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Eu quero reiniciar manualmente depois" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Executar $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Mostrar Leiame" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Terminar" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Escolha uma Pasta do Menu Iniciar" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Escolha uma pasta do Menu Iniciar para os atalhos do programa." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Selecione uma pasta do Menu Iniciar em que deseja criar os atalhos do programa. Você pode também digitar um nome para criar uma nova pasta. " + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Não criar atalhos" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstalar $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Remover o $(^NameDA) do seu computador." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Deseja realmente cancelar a instalação do $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Deseja realmente cancelar a desinstalação do $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Escolha utilizadores" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Escolha para quais utilizadores deseja instalar o $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Escolha se deseja instalar o $(^NameDA) apenas para si ou para todos os utilizadores. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instalar para todos os utilizadores" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalar apenas para si" +!endif diff --git a/tools/Contrib/Language files/PortugueseBR.nlf b/tools/Contrib/Language files/PortugueseBR.nlf new file mode 100644 index 0000000..8cc4c32 --- /dev/null +++ b/tools/Contrib/Language files/PortugueseBR.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1046 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Diego Pedroso and Felipe, reviewed by Georger Araújo +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalação do $(^Name) +# ^UninstallCaption +Desinstalação do $(^Name) +# ^LicenseSubCaption +: Acordo de Licença +# ^ComponentsSubCaption +: Opções da Instalação +# ^DirSubCaption +: Pasta da Instalação +# ^InstallingSubCaption +: Instalando +# ^CompletedSubCaption +: Completado +# ^UnComponentsSubCaption +: Opções da Desinstalação +# ^UnDirSubCaption +: Pasta da Desinstalação +# ^ConfirmSubCaption +: Confirmação +# ^UninstallingSubCaption +: Desinstalando +# ^UnCompletedSubCaption +: Completado +# ^BackBtn +< &Voltar +# ^NextBtn +&Próximo > +# ^AgreeBtn +Eu &Concordo +# ^AcceptBtn +Eu &aceito os termos do Acordo de Licença +# ^DontAcceptBtn +Eu &não aceito os termos do Acordo de Licença +# ^InstallBtn +&Instalar +# ^UninstallBtn +&Desinstalar +# ^CancelBtn +Cancelar +# ^CloseBtn +&Fechar +# ^BrowseBtn +P&rocurar... +# ^ShowDetailsBtn +Mostrar &detalhes +# ^ClickNext +Clique em Próximo pra continuar. +# ^ClickInstall +Clique em Instalar pra iniciar a instalação. +# ^ClickUninstall +Clique em Desinstalar pra iniciar a desinstalação. +# ^Name +Nome +# ^Completed +Completado +# ^LicenseText +Por favor reveja o acordo de licença antes de instalar o $(^NameDA). Se você aceita todos os termos do acordo clique em Eu Concordo. +# ^LicenseTextCB +Por favor reveja o acordo de licença antes de instalar o $(^NameDA). Se você aceita todos os termos do acordo clique na caixa de seleção abaixo. $_CLICK +# ^LicenseTextRB +Por favor reveja o acordo de licença antes de instalar o $(^NameDA). Se você aceita todos os termos do acordo selecione a primeira opção abaixo. $_CLICK +# ^UnLicenseText +Por favor reveja o acordo de licença antes de desinstalar o $(^NameDA). Se você aceita todos os termos do acordo clique em Eu Concordo. +# ^UnLicenseTextCB +Por favor reveja o acordo de licença antes de desinstalar o $(^NameDA). Se você aceita todos os termos do acordo clique na caixa de seleção abaixo. $_CLICK +# ^UnLicenseTextRB +Por favor reveja o acordo de licença antes de desinstalar o $(^NameDA). Se você aceita todos os termos do acordo selecione a primeira opção abaixo. $_CLICK +# ^Custom +Personalizar +# ^ComponentsText +Marque os componentes que você quer instalar e desmarque os componentes que você não quer instalar. $_CLICK +# ^ComponentsSubText1 +Selecione o tipo de instalação: +# ^ComponentsSubText2_NoInstTypes +Selecione os componentes a instalar: +# ^ComponentsSubText2 +Ou selecione os componentes opcionais que você deseja instalar: +# ^UnComponentsText +Marque os componentes que você quer desinstalar e desmarque os componentes que você não quer desinstalar. $_CLICK +# ^UnComponentsSubText1 +Selecione o tipo de desinstalação: +# ^UnComponentsSubText2_NoInstTypes +Selecione os componentes a desinstalar: +# ^UnComponentsSubText2 +Ou selecione os componentes opcionais que você deseja desinstalar: +# ^DirText +O Instalador instalará o $(^NameDA) na seguinte pasta. Pra instalar em uma pasta diferente clique em Procurar e selecione outra pasta. $_CLICK +# ^DirSubText +Pasta Destino +# ^DirBrowseText +Selecione a pasta pra instalar o $(^NameDA): +# ^UnDirText +O Instalador desinstalará o $(^NameDA) da seguinte pasta. Pra desinstalar de uma pasta diferente clique em Procurar e selecione outra pasta. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Selecione a pasta pra desinstalar o $(^NameDA): +# ^SpaceAvailable +"Espaço disponível: " +# ^SpaceRequired +"Espaço requerido: " +# ^UninstallingText +O $(^NameDA) será desinstalado da seguinte pasta. $_CLICK +# ^UninstallingSubText +Desinstalando de: +# ^FileError +Erro ao abrir o arquivo pra gravação: \r\n\r\n$0\r\n\r\nClique em Abortar pra parar a instalação,\r\nRepetir pra tentar de novo ou em\r\nIgnorar pra ignorar este arquivo. +# ^FileError_NoIgnore +Erro ao abrir o arquivo pra gravação: \r\n\r\n$0\r\n\r\nClique em Repetir pra tentar de novo ou em\r\nCancelar pra parar a instalação. +# ^CantWrite +"Não pôde gravar: " +# ^CopyFailed +Falhou em copiar +# ^CopyTo +"Copiar para " +# ^Registering +"Registrando: " +# ^Unregistering +"Desfazendo o registro: " +# ^SymbolNotFound +"Não pôde achar o símbolo: " +# ^CouldNotLoad +"Não pôde carregar: " +# ^CreateFolder +"Criar pasta: " +# ^CreateShortcut +"Criar atalho: " +# ^CreatedUninstaller +"Desinstalador criado: " +# ^Delete +"Apagar o arquivo: " +# ^DeleteOnReboot +"Apagar ao reiniciar: " +# ^ErrorCreatingShortcut +"Erro ao criar o atalho: " +# ^ErrorCreating +"Erro ao criar: " +# ^ErrorDecompressing +Erro ao descomprimir os dados! Instalador corrompido? +# ^ErrorRegistering +Erro ao registar a DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Executar: " +# ^Extract +"Extrair: " +# ^ErrorWriting +"Extrair: erro ao gravar no arquivo " +# ^InvalidOpcode +Instalador corrompido: opcode inválido +# ^NoOLE +"Sem OLE para: " +# ^OutputFolder +"Pasta de saída: " +# ^RemoveFolder +"Remover a pasta: " +# ^RenameOnReboot +"Renomear ao reiniciar: " +# ^Rename +"Renomear: " +# ^Skipped +"Ignorado: " +# ^CopyDetails +Copiar os Detalhes pra Ãrea de Transferência +# ^LogInstall +Gravar no log o processo de instalação +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G \ No newline at end of file diff --git a/tools/Contrib/Language files/PortugueseBR.nsh b/tools/Contrib/Language files/PortugueseBR.nsh new file mode 100644 index 0000000..ba5bcf2 --- /dev/null +++ b/tools/Contrib/Language files/PortugueseBR.nsh @@ -0,0 +1,129 @@ +;Language: Brazilian Portuguese (1046) +;By Diego Pedroso and Felipe + +!insertmacro LANGFILE "PortugueseBR" "Brazilian Portuguese" "Português Brasileiro" "Portugues Brasileiro" ; Veja \Include\LangFile.nsh pra uma descriçaõ destes parâmetros + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bem-vindo ao Instalador do $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "O instalador guiará você através da instalação do $(^NameDA).$\r$\n$\r$\nÉ recomendado que você feche todos os outros aplicativos antes de iniciar o instalador. Isto tornará possível atualizar os arquivos de sistema relevantes sem ter que reiniciar seu computador.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bem-vindo ao Desinstalador do $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este assistente guiará você através da desinstalação do $(^NameDA).$\r$\n$\r$\nAntes de iniciar a desinstalação tenha certeza de que o $(^NameDA) não está em execução.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Acordo de Licença" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Por favor reveja os termos da licença antes de instalar o $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se você aceita os termos do acordo clique em Eu Concordo pra continuar. Você deve aceitar o acordo pra instalar o $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceita os termos do acordo clique na caixa de seleção abaixo. Você deve aceitar o acordo pra instalar o $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você aceita os termos do acordo selecione a primeira opção abaixo. Você deve aceitar o acordo pra instalar o $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Acordo de Licença" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Por favor reveja os termos da licença antes de desinstalar o $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se você aceita os termos do acordo clique em Eu Concordo pra continuar. Você deve aceitar o acordo pra desinstalar o $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceita os termos do acordo clique na caixa de seleção abaixo. Você deve aceitar o acordo pra desinstalar o $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você aceita os termos do acordo selecione a primeira opção abaixo. Você deve aceitar o acordo pra desinstalar o $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Pressione Page Down pra ver o resto do acordo." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Escolher Componentes" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Escolha quais funções do $(^NameDA) você quer instalar." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Escolher Componentes" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Escolha quais funções do $(^NameDA) você quer desinstalar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posicione seu mouse sobre um componente pra ver a descrição dele." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Selecione um componente pra ver a descrição dele." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Escolha o Local da Instalação" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Escolha a pasta na qual instalar o $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Escolha o Local da Desinstalação" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Escolha a pasta da qual desinstalar o $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalando" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Por favor espere enquanto o $(^NameDA) está sendo instalado." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalação Completa" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "A instalação foi completada com sucesso." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalação Abortada" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "A instalação não foi completada com sucesso." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor espere enquanto o $(^NameDA) está sendo desinstalado." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstalação Completa" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "A desinstalação foi completada com sucesso." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstalação Abortada" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "A desinstalação não foi completada com sucesso." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Completando a instalação do $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "O $(^NameDA) foi instalado no seu computador.$\r$\n$\r$\nClique em Concluir pra fechar o instalador." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Seu computador deve ser reiniciado a fim de completar a instalação do $(^NameDA). Você quer reiniciar agora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completando a desinstalação do $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "O $(^NameDA) foi desinstalado do seu computador.$\r$\n$\r$\nClique em Concluir pra fechar o instalador." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Seu computador deve ser reiniciado a fim de completar a desinstalação do $(^NameDA). Você quer reiniciar agora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reiniciar agora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Eu quero reiniciar manualmente mais tarde" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Executar o $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Mostrar o Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Concluir" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Escolha a Pasta do Menu Iniciar" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Escolha uma pasta do Menu Iniciar para os atalhos do $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Selecione a pasta do Menu Iniciar na qual você gostaria de criar os atalhos do programa. Você pode também inserir um nome pra criar uma nova pasta." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Não criar atalhos" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstalar o $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Remover o $(^NameDA) do seu computador." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Você tem certeza que você quer sair da Instalação do $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Você tem certeza que você quer sair da Desinstalação do $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Escolher Usuários" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Escolha pra quais usuários você quer instalar o $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Selecione se você quer instalar o $(^NameDA) só pra si mesmo ou pra todos os usuários deste computador. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instalar pra qualquer um usando este computador" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalar apenas pra mim" +!endif diff --git a/tools/Contrib/Language files/Romanian.nlf b/tools/Contrib/Language files/Romanian.nlf new file mode 100644 index 0000000..545e0a8 --- /dev/null +++ b/tools/Contrib/Language files/Romanian.nlf @@ -0,0 +1,202 @@ +# Header, don't edit +NLF v6 +# Language ID +1048 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Cristian Pirvu (pcristip@yahoo.com) v6 +# Revision by Sorin Sbarnea (sorin@intersol.ro) v5.1 +# and Sorin Sbarnea INTERSOL SRL (sorin@intersol.ro) v4 +# New revision by George Radu (georadu@hotmail.com) +# New revision by Iulian Dogariu (iulian@jayomega.net) +# - Use Romanian letters ăâîşţ +# - Use imperative forms on buttons +# - Replace some neologisms +# New revision by Vlad Rusu (vlad@bitattack.ro) +# - "RasfoieÅŸte" replaced with "Alege" - more appropriate +# - "Elimină" related terms replaced with more appropriate "Dezinstalează" +# - Fixed: Wrong translation in ^FileError and ^FileError_NoIgnore -> no translation +# needed Abort/Retry/Ignore, as these are not translated into local language, OS related +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalare $(^Name) +# ^UninstallCaption +Dezinstalare $(^Name) +# ^LicenseSubCaption +: Contract de licenţă +# ^ComponentsSubCaption +: OpÅ£iuni instalare +# ^DirSubCaption +: Directorul destinaÅ£ie +# ^InstallingSubCaption +: ÃŽn curs de instalare +# ^CompletedSubCaption +: Instalare terminată +# ^UnComponentsSubCaption +: OpÅ£iuni dezinstalare +# ^UnDirSubCaption +: Directorul de dezinstalare +# ^ConfirmSubCaption +: Confirmă +# ^UninstallingSubCaption +: ÃŽn curs de dezinstalare +# ^UnCompletedSubCaption +: Termină +# ^BackBtn +< ÃŽna&poi +# ^NextBtn +ÃŽna&inte > +# ^AgreeBtn +&De acord +# ^AcceptBtn +&Accept termenii contractului de licenţă +# ^DontAcceptBtn +Nu accept termenii contractului de licenţă +# ^InstallBtn +&Instalează +# ^UninstallBtn +&Dezinstalează +# ^CancelBtn +&Renunţă +# ^CloseBtn +ÃŽn&chide +# ^BrowseBtn +&Alege... +# ^ShowDetailsBtn +Arată &detalii +# ^ClickNext +ApăsaÅ£i ÃŽnainte pentru a continua. +# ^ClickInstall +ApăsaÅ£i Instalează pentru a începe instalarea. +# ^ClickUninstall +ApăsaÅ£i Dezinstalează pentru a începe dezinstalarea. +# ^Name +Nume +# ^Completed +Terminat +# ^LicenseText +CitiÅ£i cu atenÅ£ie contractul de licenţă înainte de a instala $(^NameDA). Dacă acceptaÅ£i termenii contractului de licenţă, apăsaÅ£i butonul De acord. +# ^LicenseTextCB +CitiÅ£i cu atenÅ£ie contractul de licenţă înainte de a instala $(^NameDA). Dacă acceptaÅ£i termenii contractului de licenţă, bifaÅ£i căsuÅ£a de mai jos. $_CLICK +# ^LicenseTextRB +CitiÅ£i cu atenÅ£ie contractul de licenţă înainte de a instala $(^NameDA). Dacă acceptaÅ£i termenii contractului de licenţă, selectaÅ£i prima opÅ£iune de mai jos. $_CLICK +# ^UnLicenseText +CitiÅ£i cu atenÅ£ie contractul de licenţă înainte de a dezinstala $(^NameDA). Dacă acceptaÅ£i termenii contractului de licenţă, apăsaÅ£i butonul De acord. +# ^UnLicenseTextCB +CitiÅ£i cu atenÅ£ie contractul de licenţă înainte de a dezinstala $(^NameDA). Dacă acceptaÅ£i termenii contractului de licenţă, bifaÅ£i căsuÅ£a de mai jos. $_CLICK +# ^UnLicenseTextRB +CitiÅ£i cu atenÅ£ie contractul de licenţă înainte de a dezinstala $(^NameDA). Dacă acceptaÅ£i termenii contractului de licenţă, selectaÅ£i prima opÅ£iune de mai jos. $_CLICK +# ^Custom +Personalizată +# ^ComponentsText +AlegeÅ£i componentele pe care doriÅ£i să le instalaÅ£i. $_CLICK +# ^ComponentsSubText1 +AlegeÅ£i tipul instalării: +# ^ComponentsSubText2_NoInstTypes +AlegeÅ£i componentele ce urmează a fi instalate: +# ^ComponentsSubText2 +Sau, alegeÅ£i componentele opÅ£ionale pe care doriÅ£i să le instalaÅ£i: +# ^UnComponentsText +AlegeÅ£i componentele pe care doriÅ£i să le dezinstalaÅ£i. $_CLICK +# ^UnComponentsSubText1 +AlegeÅ£i tipul de dezinstalare: +# ^UnComponentsSubText2_NoInstTypes +AlegeÅ£i componentele ce urmează a fi dezinstalate: +# ^UnComponentsSubText2 +Sau, alegeÅ£i componentele opÅ£ionale pe care doriÅ£i să le dezinstalaÅ£i: +# ^DirText +$(^NameDA) se va instala în următorul director. Pentru a alege altă destinaÅ£ie, apăsaÅ£i Alege ÅŸi alegeÅ£i alt director. $_CLICK +# ^DirSubText +Director destinaÅ£ie +# ^DirBrowseText +AlegeÅ£i directorul în care doriÅ£i să instalaÅ£i $(^NameDA): +# ^UnDirText +$(^NameDA) se va dezinstala din următorul director. Pentru a dezinstala din alt director, apăsaÅ£i Alege ÅŸi alegeÅ£i alt director. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +AlegeÅ£i directorul de dezinstalare al $(^NameDA): +# ^SpaceAvailable +"SpaÅ£iu disponibil: " +# ^SpaceRequired +"SpaÅ£iu necesar: " +# ^UninstallingText +Această aplicaÅ£ie va dezinstala $(^NameDA) din computerul Dv. $_CLICK +# ^UninstallingSubText +Dezinstalare din: +# ^FileError +Eroare la scrierea fiÅŸierului: \r\n\t"$0"\r\nApăsaÅ£i Abort pentru oprirea instalării,\r\nRetry pentru a mai încerca o dată scrierea fiÅŸierului, \r\nIgnore pentru a trece peste acest fiÅŸier. +# ^FileError_NoIgnore +Eroare la scrierea fiÅŸierului: \r\n\t"$0"\r\nApăsaÅ£i Retry pentru a mai încerca o dată, sau\r\nAbort pentru oprirea instalării. +# ^CantWrite +"Nu am putut scrie: " +# ^CopyFailed +Copierea a eÅŸuat +# ^CopyTo +"Copiere în " +# ^Registering +"Se înregistrează: " +# ^Unregistering +"Se dezînregistrează din registru: " +# ^SymbolNotFound +"Simbolul nu a fost găsit: " +# ^CouldNotLoad +"Nu am putut încărca: " +# ^CreateFolder +"Creare director: " +# ^CreateShortcut +"Creare comandă rapidă: " +# ^CreatedUninstaller +"S-a creat aplicaÅ£ia de dezinstalare: " +# ^Delete +"Åžtergere fiÅŸier: " +# ^DeleteOnReboot +"Åžtergere la repornire: " +# ^ErrorCreatingShortcut +"Eroare la crearea comenzii rapide: " +# ^ErrorCreating +"Eroare la creare: " +# ^ErrorDecompressing +Eroare la dezarhivarea datelor! Aplicatia de instalare este defectă? +# ^ErrorRegistering +Eroare la ÃŽnregistrarea DLL-ului +# ^ExecShell +"ExecShell: " +# ^Exec +"Executare: " +# ^Extract +"Extragere: " +# ^ErrorWriting +"Extragere: eroare la scriere în fiÅŸier " +# ^InvalidOpcode +AplicaÅ£ie de instalare defectă: opcode incorect +# ^NoOLE +"Nu există OLE pentru: " +# ^OutputFolder +"Directorul destinaÅ£ie: " +# ^RemoveFolder +"Åžtergere destinaÅ£ie: " +# ^RenameOnReboot +"Redenumire la repornirea computerului: " +# ^Rename +"Redenumire: " +# ^Skipped +"Sărite: " +# ^CopyDetails +Copiere detalii în clipboard +# ^LogInstall +Jurnal proces instalare +# ^Byte +O +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Romanian.nsh b/tools/Contrib/Language files/Romanian.nsh new file mode 100644 index 0000000..e98dd0c --- /dev/null +++ b/tools/Contrib/Language files/Romanian.nsh @@ -0,0 +1,128 @@ +;Language: Romanian (1048) +;Translated by Cristian Pirvu (pcristip@yahoo.com) +;Updates by Sorin Sbarnea - INTERSOL SRL (sbarneasorin@intersol.ro) - ROBO Design (www.robodesign.ro) +;New revision by George Radu (georadu@hotmail.com) http://mediatae.3x.ro +;New revision by Vlad Rusu (vlad@bitattack.ro) +; - Use Romanian letters ăâîşţ +; - ".. produsului" removed as unnecessary +; - "Elimină" related terms replaced with more appropriate "Dezinstalează" +; - Misc language tweaks + +!insertmacro LANGFILE "Romanian" = "Română" "Romana" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bine aÅ£i venit la instalarea $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Această aplicaÅ£ie va instala $(^NameDA).$\r$\n$\r$\nEste recomandat să închideÅ£i toate aplicaÅ£iile înainte de începerea procesului de instalare. Acest lucru vă poate asigura un proces de instalare fără erori sau situaÅ£ii neprevăzute.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bine aÅ£i venit la dezinstalarea $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Această aplicaÅ£ie va dezinstala $(^NameDA).$\r$\n$\r$\nEste recomandat să închideÅ£i toate aplicaÅ£iile înainte de începerea procesului de dezinstalare. Acest lucru vă poate asigura un proces de dezinstalare fără erori sau situaÅ£ii neprevăzute.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Contract de licenţă" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "CitiÅ£i cu atenÅ£ie termenii contractului de licenţă înainte de a instala $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Dacă acceptaÅ£i termenii contractului de licenţă, apăsati De Acord. Pentru a instala $(^NameDA) trebuie să acceptaÅ£i termenii din contractul de licenţă." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Dacă acceptaÅ£i termenii contractului de licenţă, bifaÅ£i căsuÅ£a de mai jos. Pentru a instala $(^NameDA) trebuie să acceptaÅ£i termenii din contractul de licenţă. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Dacă acceptaÅ£i termenii contractului de licenţă, selectaÅ£i prima opÅ£iune de mai jos. Pentru a instala $(^NameDA) trebuie să acceptaÅ£i termenii din contractul de licenţă. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Contract de licenţă" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "CitiÅ£i cu atenÅ£ie termenii contractului de licenţă înainte de a dezinstala $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Dacă acceptaÅ£i termenii contractului de licenţă, apăsati De Acord. Pentru a dezinstala $(^NameDA) trebuie să acceptaÅ£i termenii din contractul de licenţă." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Dacă acceptaÅ£i termenii contractului de licenţă, bifaÅ£i căsuÅ£a de mai jos. Pentru a dezinstala $(^NameDA) trebuie să acceptaÅ£i termenii din contractul de licenţă. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Dacă acceptaÅ£i termenii contractului de licenţă, selectaÅ£i prima opÅ£iune de mai jos. Pentru a dezinstala $(^NameDA) trebuie să acceptaÅ£i termenii din contractul de licenţă. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ApăsaÅ£i Page Down pentru a vizualiza restul contractului de licenţă." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selectare componente" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "SelectaÅ£i componentele $(^NameDA) pe care doriÅ£i să le instalaÅ£i." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selectare componente" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "SelectaÅ£i componentele $(^NameDA) pe care doriÅ£i să le dezinstalaÅ£i." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descriere" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "AÅŸezaÅ£i mouse-ul deasupra fiecărei componente pentru a vizualiza descrierea acesteia." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Selectare director destinaÅ£ie" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "SelectaÅ£i directorul în care doriÅ£i să instalaÅ£i $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Selectare director de dezinstalat" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "SelectaÅ£i directorul din care doriÅ£i să dezinstalaÅ£i $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ÃŽn curs de instalare" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vă rugăm să aÅŸteptaÅ£i, $(^NameDA) se instalează." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalare terminată" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalarea s-a terminat cu succes." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalare anulată" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalarea a fost anulată de utilizator." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "ÃŽn curs de dezinstalare" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vă rugăm să aÅŸteptaÅ£i, $(^NameDA) se dezinstalează." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Dezinstalare terminată" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Dezinstalarea s-a terminat cu succes." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Dezinstalare anulată" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Dezinstalarea fost anulată de utilizator." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Terminare instalare $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) a fost instalat.$\r$\n$\r$\nApăsaÅ£i Terminare pentru a încheia instalarea." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Trebuie să reporniÅ£i calculatorul pentru a termina instalarea. DoriÅ£i să-l reporniÅ£i acum?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Terminare dezinstalare $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) a fost dezinstalat.$\r$\n$\r$\nApăsaÅ£i Terminare pentru a încheia dezinstalarea." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Trebuie să reporniÅ£i calculatorul pentru a termina dezinstalarea. DoriÅ£i să-l reporniÅ£i acum?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "ReporneÅŸte acum" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Repornesc eu mai târziu" + ${LangFileString} MUI_TEXT_FINISH_RUN "Executare $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "AfiÅŸare fiÅŸier readme (citeÅŸte-mă)." + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Terminare" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Selectare grup Meniul Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "SelectaÅ£i un grup in Meniul Start pentru a crea comenzi rapide pentru produs." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "SelectaÅ£i grupul din Meniul Start în care vor fi create comenzi rapide pentru produs. PuteÅ£i de asemenea să creaÅ£i un grup nou." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nu doresc comenzi rapide" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Dezinstalare $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Dezinstalare $(^NameDA) din calculatorul dumneavoastră." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "SunteÅ£i sigur(ă) că doriÅ£i să anulaÅ£i instalarea $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "SunteÅ£i sigur(ă) că doriÅ£i să anulaÅ£i dezinstalarea $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/Russian.nlf b/tools/Contrib/Language files/Russian.nlf new file mode 100644 index 0000000..87642fc --- /dev/null +++ b/tools/Contrib/Language files/Russian.nlf @@ -0,0 +1,192 @@ +# Header, don't edit +NLF v6 +# Language ID +1049 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by Timon [ timon@front.ru ] + 20030919 +# Translation updated by Dmitry Yerokhin [erodim@mail.ru] (20050424) +# Minor updates by Oleksandr Gavenko (20100514 - patch #226) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +УÑтановка $(^Name) +# ^UninstallCaption +Удаление $(^Name) +# ^LicenseSubCaption +: Лицензионное Ñоглашение +# ^ComponentsSubCaption +: Параметры уÑтановки +# ^DirSubCaption +: Папка уÑтановки +# ^InstallingSubCaption +: Копирование файлов +# ^CompletedSubCaption +: ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð° +# ^UnComponentsSubCaption +: Параметры ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ +# ^UnDirSubCaption +: Папка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ +# ^ConfirmSubCaption +: Подтверждение +# ^UninstallingSubCaption +: Удаление файлов +# ^UnCompletedSubCaption +: ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð° +# ^BackBtn +< &Ðазад +# ^NextBtn +&Далее > +# ^AgreeBtn +Принима&ÑŽ +# ^AcceptBtn +Я &принимаю уÑÐ»Ð¾Ð²Ð¸Ñ ÑÐ¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ +# ^DontAcceptBtn +Я &не принимаю уÑÐ»Ð¾Ð²Ð¸Ñ ÑÐ¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ +# ^InstallBtn +&УÑтановить +# ^UninstallBtn +Уд&алить +# ^CancelBtn +Отмена +# ^CloseBtn +&Закрыть +# ^BrowseBtn +О&бзор ... +# ^ShowDetailsBtn +&Детали... +# ^ClickNext +Ðажмите кнопку "Далее" Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ. +# ^ClickInstall +Ðажмите кнопку "УÑтановить", чтобы уÑтановить программу. +# ^ClickUninstall +Ðажмите кнопку "Удалить", чтобы удалить программу. +# ^Name +Ð˜Ð¼Ñ +# ^Completed +Готово +# ^LicenseText +Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением. ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, нажмите кнопку "Принимаю". +# ^LicenseTextCB +Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением. ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, уÑтановите флажок ниже. $_CLICK +# ^LicenseTextRB +Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением. ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, выберите первый вариант из предложенных ниже. $_CLICK +# ^UnLicenseText +Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением. ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, нажмите кнопку "Принимаю". +# ^UnLicenseTextCB +Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением. ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, уÑтановите флажок ниже. $_CLICK +# ^UnLicenseTextRB +Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением. ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, выберите первый вариант из предложенных ниже. $_CLICK +# ^Custom +По выбору +# ^ComponentsText +Выберите компоненты программы, которые вы хотите уÑтановить. $_CLICK +# ^ComponentsSubText1 +Выберите тип уÑтановки: +# ^ComponentsSubText2_NoInstTypes +Выберите компоненты программы Ð´Ð»Ñ ÑƒÑтановки: +# ^ComponentsSubText2 +или выберите дополнительные компоненты Ð´Ð»Ñ ÑƒÑтановки: +# ^UnComponentsText +Выберите компоненты, которые вы хотите удалить. $_CLICK +# ^UnComponentsSubText1 +Выберите тип удалениÑ: +# ^UnComponentsSubText2_NoInstTypes +Выберите компоненты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ: +# ^UnComponentsSubText2 +или выберите дополнительные компоненты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ: +# ^DirText +Программа уÑтановит $(^NameDA) в указанную папку. Чтобы уÑтановить приложение в другую папку, нажмите кнопку "Обзор" и укажите ее. $_CLICK +# ^DirSubText +Папка уÑтановки +# ^DirBrowseText +Укажите папку Ð´Ð»Ñ ÑƒÑтановки $(^NameDA): +# ^UnDirText +Программа удалит $(^NameDA) из указанной папки. Чтобы выполнить удаление из другой папки, нажмите кнопку "Обзор" и укажите ее. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Укажите папку, из которой нужно удалить $(^NameDA): +# ^SpaceAvailable +"ДоÑтупно на диÑке: " +# ^SpaceRequired +"ТребуетÑÑ Ð½Ð° диÑке: " +# ^UninstallingText +Программа $(^NameDA) будет удалена из вашего ПК. $_CLICK +# ^UninstallingSubText +Удаление из: +# ^FileError +Ðевозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: \r\n\t"$0"\r\n"Прервать": оÑтановить уÑтановку;\r\n"Повтор": повторить попытку;\r\n"ПропуÑк": пропуÑтить Ñто дейÑтвие. +# ^FileError_NoIgnore +Ðевозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: \r\n\t"$0"\r\n"Повтор": повторить попытку;\r\n"Отмена": прервать процеÑÑ ÑƒÑтановки. +# ^CantWrite +"Ðевозможно запиÑать: " +# ^CopyFailed +Ошибка при копировании +# ^CopyTo +"Копирование в " +# ^Registering +"РегиÑтрациÑ: " +# ^Unregistering +"Де-региÑтрациÑ: " +# ^SymbolNotFound +"Ðевозможно найти Ñимвол: " +# ^CouldNotLoad +"Ðевозможно загрузить: " +# ^CreateFolder +"Создание папки: " +# ^CreateShortcut +"Создание Ñрлыка: " +# ^CreatedUninstaller +"Создание программы удалениÑ: " +# ^Delete +"Удаление файла: " +# ^DeleteOnReboot +"Удаление при перезагрузке ПК: " +# ^ErrorCreatingShortcut +"Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñрлыка: " +# ^ErrorCreating +"Ошибка ÑозданиÑ: " +# ^ErrorDecompressing +Ошибка раÑпаковки данных! Возможно, повреждён диÑтрибутив. +# ^ErrorRegistering +Ðевозможно зарегиÑтрировать библиотеку (DLL) +# ^ExecShell +"Выполнение команды оболочки: " +# ^Exec +"Выполнение: " +# ^Extract +"Извлечение: " +# ^ErrorWriting +"Извлечение: ошибка запиÑи файла " +# ^InvalidOpcode +ДиÑтрибутив поврежден: недопуÑтимый код +# ^NoOLE +"Ðет OLE длÑ: " +# ^OutputFolder +"Папка уÑтановки: " +# ^RemoveFolder +"Удаление папки: " +# ^RenameOnReboot +"Переименование при перезагрузке ПК: " +# ^Rename +"Переименование: " +# ^Skipped +"ПропуÑк: " +# ^CopyDetails +Копировать ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² буфер обмена +# ^LogInstall +ВеÑти отчет уÑтановки +# byte +байт +# kilo + К +# mega + Ðœ +# giga + Г \ No newline at end of file diff --git a/tools/Contrib/Language files/Russian.nsh b/tools/Contrib/Language files/Russian.nsh new file mode 100644 index 0000000..e14a0da --- /dev/null +++ b/tools/Contrib/Language files/Russian.nsh @@ -0,0 +1,129 @@ +;Language: Russian (1049) +;Translation updated by Dmitry Yerokhin [erodim@mail.ru] (050424) + +!insertmacro LANGFILE "Russian" = "РуÑÑкий" "Russkij" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð²ÐµÑ‚Ñтвует маÑтер уÑтановки $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Эта программа уÑтановит $(^NameDA) на ваш компьютер.$\r$\n$\r$\nПеред началом уÑтановки рекомендуетÑÑ Ð·Ð°ÐºÑ€Ñ‹Ñ‚ÑŒ вÑе работающие приложениÑ. Это позволит программе уÑтановки обновить ÑиÑтемные файлы без перезагрузки компьютера.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð²ÐµÑ‚Ñтвует маÑтер ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Эта программа удалит $(^NameDA) из вашего компьютера.$\r$\n$\r$\nПеред началом ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑƒÐ±ÐµÐ´Ð¸Ñ‚ÐµÑÑŒ, что программа $(^NameDA) не запущена.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Лицензионное Ñоглашение" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Перед уÑтановкой $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, нажмите кнопку $\"Принимаю$\". Чтобы уÑтановить программу, необходимо принÑÑ‚ÑŒ Ñоглашение." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, уÑтановите флажок ниже. Чтобы уÑтановить программу, необходимо принÑÑ‚ÑŒ Ñоглашение. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, выберите первый вариант из предложенных ниже. Чтобы уÑтановить программу, необходимо принÑÑ‚ÑŒ Ñоглашение. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Лицензионное Ñоглашение" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Перед удалением $(^NameDA) ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, нажмите кнопку $\"Принимаю$\". Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ принÑÑ‚ÑŒ Ñоглашение. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, уÑтановите флажок ниже. Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ принÑÑ‚ÑŒ Ñоглашение. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ЕÑли вы принимаете уÑÐ»Ð¾Ð²Ð¸Ñ ÑоглашениÑ, выберите первый вариант из предложенных ниже. Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ принÑÑ‚ÑŒ Ñоглашение. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ текÑту иÑпользуйте клавиши $\"PageUp$\" и $\"PageDown$\"." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Компоненты уÑтанавливаемой программы" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Выберите компоненты $(^NameDA), которые вы хотите уÑтановить." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Компоненты программы" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Выберите компоненты $(^NameDA), которые вы хотите удалить." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ОпиÑание" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ðаведите курÑор мыши на название компонента, чтобы прочеÑÑ‚ÑŒ его опиÑание." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Выберите компонент, чтобы увидеть его опиÑание." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Выбор папки уÑтановки" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Выберите папку Ð´Ð»Ñ ÑƒÑтановки $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Выбор папки Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Укажите папку, из которой нужно удалить $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Копирование файлов" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Подождите, идет копирование файлов $(^NameDA)..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "УÑтановка завершена" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "УÑтановка уÑпешно завершена." + ${LangFileString} MUI_TEXT_ABORT_TITLE "УÑтановка прервана" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "УÑтановка не завершена." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Удаление" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Подождите, идет удаление файлов $(^NameDA)..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Удаление завершено" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Удаление программы уÑпешно завершено." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Удаление прервано" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Удаление произведено не полноÑтью." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Завершение работы маÑтера уÑтановки $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "УÑтановка $(^NameDA) выполнена.$\r$\n$\r$\nÐажмите кнопку $\"Готово$\" Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из программы уÑтановки." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÑтановки $(^NameDA) необходимо перезагрузить компьютер. Хотите Ñделать Ñто ÑейчаÑ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Завершение работы маÑтера ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Программа $(^NameDA) удалена из вашего компьютера.$\r$\n$\r$\nÐажмите кнопку $\"Готово$\"Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из программы удалениÑ." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ $(^NameDA) нужно перезагрузить компьютер. Хотите Ñделать Ñто ÑейчаÑ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Да, перезагрузить ПК ÑейчаÑ" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Ðет, Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ¶Ñƒ ПК позже" + ${LangFileString} MUI_TEXT_FINISH_RUN "&ЗапуÑтить $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Показать файл ReadMe" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Готово" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Папка в меню $\"ПуÑк$\"" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Выберите папку в меню $\"ПуÑк$\" Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñрлыков программы." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Выберите папку в меню $\"ПуÑк$\", куда будут помещены Ñрлыки программы. Ð’Ñ‹ также можете ввеÑти другое Ð¸Ð¼Ñ Ð¿Ð°Ð¿ÐºÐ¸." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ðе Ñоздавать Ñрлыки" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Удаление $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Удаление $(^NameDA) из компьютера." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ð’Ñ‹ дейÑтвительно хотите отменить уÑтановку $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ð’Ñ‹ дейÑтвительно хотите отменить удаление $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Режим уÑтановки" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Выберите, Ð´Ð»Ñ ÐºÐ°ÐºÐ¸Ñ… пользователей вы хотите уÑтановить $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Выберите, будете ли вы уÑтанавливать $(^NameDA) только Ð´Ð»Ñ ÑÐµÐ±Ñ Ð¸Ð»Ð¸ Ð´Ð»Ñ Ð²Ñех пользователей данного компьютера. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "УÑтановить Ð´Ð»Ñ Ð²Ñех пользователей" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "УÑтановить только Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ пользователÑ" +!endif diff --git a/tools/Contrib/Language files/ScotsGaelic.nlf b/tools/Contrib/Language files/ScotsGaelic.nlf new file mode 100644 index 0000000..60c3aae --- /dev/null +++ b/tools/Contrib/Language files/ScotsGaelic.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1169 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by GunChleoc +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +A’ stàladh $(^Name) +# ^UninstallCaption +A’ dì-stàladh $(^Name) +# ^LicenseSubCaption +: Aonta ceadachais +# ^ComponentsSubCaption +: Roghainnean an stàlaidh +# ^DirSubCaption +: Pasgan an stàlaidh +# ^InstallingSubCaption +: ’Ga stàladh +# ^CompletedSubCaption +: Deiseil +# ^UnComponentsSubCaption +: Roghainnean an dì-stàlaidh +# ^UnDirSubCaption +: Pasgan an dì-stàlaidh +# ^ConfirmSubCaption +: Dearbhadh +# ^UninstallingSubCaption +: ’Ga dhì-stàladh +# ^UnCompletedSubCaption +: Deiseil +# ^BackBtn +< Air ai&s +# ^NextBtn +Air adha&rt > +# ^AgreeBtn +&Gabhaidh mi ris +# ^AcceptBtn +&Gabhaidh mi teirmichean an aonta cheadachais +# ^DontAcceptBtn +&Diùltaidh mi teirmichean an aonta ceadachais +# ^InstallBtn +&Stàlaich +# ^UninstallBtn +&Dì-stàlaich +# ^CancelBtn +Sguir dheth +# ^CloseBtn +&Dùin +# ^BrowseBtn +&Rùraich… +# ^ShowDetailsBtn +&Mion-fhiosrachadh +# ^ClickNext +Briog air “Air adhart†gus leantainn air adhart. +# ^ClickInstall +Briog air “Stàlaich†gus tòiseachadh air an stàladh. +# ^ClickUninstall +Briog air “Dì-stàlaich†gus tòiseachadh air an dì-stàladh. +# ^Name +Ainm +# ^Completed +Coileanta +# ^LicenseText +Feuch an doir thu sùil air an aonta cheadachais mus stàlaich thu $(^NameDA). Ma ghabhas tu ris a h-uile teirm san aonta, briog air “Gabhaidh mi risâ€. +# ^LicenseTextCB +Feuch an doir thu sùil air an aonta cheadachais mus stàlaich thu $(^NameDA). Ma ghabhas tu ris a h-uile teirm san aonta, cuir cromag sa bhogsa gu h-ìosal. $_CLICK +# ^LicenseTextRB +Feuch an doir thu sùil air an aonta cheadachais mus stàlaich thu $(^NameDA). Ma ghabhas tu ris a h-uile teirm san aonta, tagh a’ chiad roghainn gu h-ìosal. $_CLICK +# ^UnLicenseText +Feuch an doir thu sùil air an aonta cheadachais mus dì-stàlaich thu $(^NameDA). Ma ghabhas tu ris a h-uile teirm san aonta, Briog air “Gabhaidh mi risâ€. +# ^UnLicenseTextCB +Feuch an doir thu sùil air an aonta cheadachais mus dì-stàlaich thu $(^NameDA). Ma ghabhas tu ris a h-uile teirm san aonta, cuir cromag sa bhogsa gu h-ìosal. $_CLICK +# ^UnLicenseTextRB +Feuch an doir thu sùil air an aonta cheadachais mus dì-stàlaich thu $(^NameDA). Ma ghabhas tu ris a h-uile teirm san aonta, tagh a’ chiad roghainn gu h-ìosal. $_CLICK +# ^Custom +Gnàthaichte +# ^ComponentsText +Thoir cromag ann am bogsaichean nan co-phàirtean a tha thu airson stàladh is thoir air falbh i o bhogsaichean nan co-phàirtean nach eil thu ag iarraidh. $_CLICK +# ^ComponentsSubText1 +Tagh an seòrsa dhen stàladh: +# ^ComponentsSubText2_NoInstTypes +Tagh na co-phàirtean a tha thu airson stàladh: +# ^ComponentsSubText2 +No tagh na co-phàirtean roghainneil a tha thu airson stàladh: +# ^UnComponentsText +Thoir cromag ann am bogsaichean nan co-phàirtean a tha thu airson dì-stàladh is thoir air falbh i o bhogsaichean nan co-phàirtean a tha thu airson cumail. $_CLICK +# ^UnComponentsSubText1 +Tagh an seòrsa dhen dì-stàladh: +# ^UnComponentsSubText2_NoInstTypes +Tagh na co-phàirtean a tha thu airson dì-stàladh: +# ^UnComponentsSubText2 +No tagh na co-phàirtean roghainneil a tha thu airson dì-stàladh: +# ^DirText +Thèid $(^NameDA) a stàladh sa phasgan seo. Gus stàladh ann am pasgan eile, briog air “Rùraich†is tagh pasgan eile. $_CLICK +# ^DirSubText +Pasgan-uidhe +# ^DirBrowseText +Tagh am pasgan san dèid $(^NameDA) a stàladh: +# ^UnDirText +Thèid $(^NameDA) a dhì-stàladh on phasgan seo. Gus dì-stàladh o phasgan eile, briog air “Rùraich†is tagh pasgan eile. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Tagh am pasgan on a tha thu airson $(^NameDA) a dhì-stàladh: +# ^SpaceAvailable +"Àite ri fhaighinn: " +# ^SpaceRequired +"Àite air a bheil feum: " +# ^UninstallingText +Thèid $(^NameDA) a dhì-stàladh on phasgan seo. $_CLICK +# ^UninstallingSubText +’Ga dhì-stàladh o: +# ^FileError +Thachair mearachd a’ fosgladh an fhaidhle a chum sgrìobhaidh: \r\n\r\n$0\r\n\r\nBriog air “Sguir dheth†gus sgur dhen stàladh, air\r\n“Feuch ris a-rithist†gus feuchainn ris a-rithist no air\r\n“Leig seachad†gus leum a ghearradh thairis air an fhaidhle seo. +# ^FileError_NoIgnore +Thachair mearachd a’ fosgladh an fhaidhle seo a chum sgrìobhaidh: \r\n\r\n$0\r\n\r\nBriog air “Feuch ris a-rithist†gus feuchainn ris a-rithist no air\r\n“Sguir dheth†gus sgur dhen stàladh. +# ^CantWrite +"Cha ghabh sgrìobhadh ann: " +# ^CopyFailed +Cha deach leinn lethbhreac dheth a dhèanamh +# ^CopyTo +"Cuir lethbhreac gu " +# ^Registering +"A’ clàradh: " +# ^Unregistering +"A’ neo-chlàradh: " +# ^SymbolNotFound +"Cha deach an samhla a lorg: " +# ^CouldNotLoad +"Cha b’ urrainn dhuinn a luchdadh: " +# ^CreateFolder +"Cruthaich pasgan: " +# ^CreateShortcut +"Cruthaich ath-ghoirid: " +# ^CreatedUninstaller +"Dì-stàlaichear air a chruthachadh: " +# ^Delete +"Sguab às dhan fhaidhle: " +# ^DeleteOnReboot +"Sguab às leis an ath-thòiseachadh: " +# ^ErrorCreatingShortcut +"Mearachd le cruthachadh na h-ath-ghoirid: " +# ^ErrorCreating +"Mearachd le cruthachadh: " +# ^ErrorDecompressing +Thachair mearachd a’ dì-dhùmhlachadh an dàta! ’S dòcha gu bheil an t-inneal-stàlaidh coirbte. +# ^ErrorRegistering +Mearachd le clàradh DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Cuir àithne an gnìomh: " +# ^Extract +"Dì-dhùmhlaich: " +# ^ErrorWriting +"Dì-dhùmhlachadh: mearachd a’ sgrìobhadh gu faidhle " +# ^InvalidOpcode +Stàlaichear coirbte: opcode mì-dhligheach +# ^NoOLE +"Chan eil OLE ann airson: " +# ^OutputFolder +"Pasgan às-chuir: " +# ^RemoveFolder +"Thoir pasgan air falbh: " +# ^RenameOnReboot +"Cuir ainm ùr air leis an ath-thòiseachadh: " +# ^Rename +"Cuir ainm ùr air: " +# ^Skipped +"Air leum a ghearradh: " +# ^CopyDetails +Cuir lethbhreac dhen mhion-fhiosrachadh san stòr-bhòrd +# ^LogInstall +Dèan loga dhen stàladh +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/ScotsGaelic.nsh b/tools/Contrib/Language files/ScotsGaelic.nsh new file mode 100644 index 0000000..be440fa --- /dev/null +++ b/tools/Contrib/Language files/ScotsGaelic.nsh @@ -0,0 +1,129 @@ +;Language: Gàidhlig (1169) +;Le GunChleoc + +!insertmacro LANGFILE "ScotsGaelic" "Scottish Gaelic" "Gàidhlig" "Gaidhlig" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Fàilte gu stàladh $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Stiùiridh sinn tron stàladh aig $(^NameDA) thu.$\r$\n$\r$\nMholamaid gun dùin thu a h-uile aplacaid eile mus tòisich thu air an stàladh. Mar sin, ’s urrainn dhuinn faidhlichean iomchaidh an t-siostaim ùrachadh gun fheum air ath-thòiseachadh a’ choimpiutair agad.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Fàilte gun dì-stàladh aig $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Stiùiridh sinn tron dì-stàladh aig $(^NameDA) thu.$\r$\n$\r$\nMus tòisich thu air an dì-stàladh, dèan cinnteach nach eil $(^NameDA) a’ ruith.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Aonta ceadachais" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "An doir thu sùil air teirmichean a’ cheadachais mus stàlaich thu $(^NameDA)?" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ma ghabhas tu ri teirmichean an aonta, briog air “Gabhaidh mi ris†gus leantainn air adhart. Feumaidh tu gabhail ris an aonta mus urrainn dhut $(^NameDA) a stàladh." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ma ghabhas tu ri teirmichean an aonta, thoir cromag sa bhogsa gu h-ìosal. Feumaidh tu gabhail ris an aonta mus urrainn dhut $(^NameDA) a stàladh. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ma ghabhas tu ri teirmichean an aonta, tagh a’ chiad roghainn gu h-ìosal. Feumaidh tu gabhail ris an aonta mus urrainn dhut $(^NameDA) a stàladh. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Aonta ceadachais" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "An doir thu sùil air teirmichean a’ cheadachais mus dì-stàlaich thu $(^NameDA)?" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ma ghabhas tu ri teirmichean an aonta, briog air “Gabhaidh mi ris†gus leantainn air adhart. Feumaidh tu gabhail ris an aonta mus urrainn dhut $(^NameDA) a dhì-stàladh." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ma ghabhas tu ri teirmichean an aonta, cuir cromag sa bhogsa gu h-ìosal. Feumaidh tu gabhail ris an aonta mus urrainn dhut $(^NameDA) a dhì-stàladh. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ma ghabhas tu ri teirmichean an aonta, tagh a’ chiad roghainn gu h-ìosal. Feumaidh tu gabhail ris an aonta mus urrainn dhut $(^NameDA) a dhì-stàladh. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Brùth air Page Down gus an corr dhen aonta a shealltainn." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Tagh co-phàirtean" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Tagh na gleusan aig $(^NameDA) a tha thu airson stàladh." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Tagh co-phàirtean" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Tagh na gleusan aig $(^NameDA) a tha thu airson dì-stàladh." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Tuairisgeul" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Cuir an luchag agad air co-phàirt gus a tuairisgeul a shealltainn." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tagh co-phàirt gus a tuairisgeul a shealltainn." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Tagh ionad an stàlaidh" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Tagh am pasgan san dèid $(^NameDA) a stàladh." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Tagh ionad an dì-stàlaidh" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Tagh am pasgan on a thèid $(^NameDA) a dhì-stàladh." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "’Ga stàladh" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Fuirich ort fhad ’s a tha $(^NameDA) ’ga stàladh." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Stàladh deiseil" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Tha an stàladh deiseil." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Chaidh sgur dhen stàladh" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Cha deach an stàladh a choileanadh." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "’Ga dhì-stàladh" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Fuirich ort fhad ’s a tha $(^NameDA) ’ga dhì-stàladh." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Dì-stàladh deiseil" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Chaidh a dhì-stàladh." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Chaidh sgur dhen dì-stàladh" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Cha deach an dì-stàladh a choileanadh." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "A’ coileanadh an stàlaidh aig $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Chaidh $(^NameDA) a stàladh air a’ choimpiutair agad.$\r$\n$\r$\nBriog air “Crìochnaich†gus an t-inneal-stàlaidh a dhùnadh." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Tha ath-thòiseachadh a dhìth air a’ choimpiutair agad gus an stàladh aig $(^NameDA) a choileanadh. A bheil thu airson ath-thòiseachadh an-dràsta?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "A’ coileanadh an dì-stàlaidh aig $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Chaidh $(^NameDA) a dhì-stàladh on choimpiutair agad.$\r$\n$\r$\nBriog air “Crìochnaich†gus an t-inneal-stàlaidh a dhùnadh." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Tha ath-thòiseachadh a dhìth air a’ choimpiutair agad gus an dì-stàladh aig $(^NameDA) a choileanadh. A bheil thu airson ath-thòiseachadh an-dràsta?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ath-tòisich an-dràsta" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Nì mi fhìn ath-thòiseachadh a làimh uaireigin eile" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Ruith $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Seall am faidhle “Leughmiâ€" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Crìochnaich" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Tagh pasgan sa chlàr-taice tòiseachaidh" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Tagh pasgan sa chlàr-taice tòiseachaidh airson na h-ath-ghoiridean aig $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Tagh pasgan sa chlàr-taice tòiseachaidh sa bheil thu airson na h-ath-ghoiridean aig a’ phrògram a chruthachadh. ’S urrainn dhut cuideachd ainm a chur a-steach gus pasgan ùr a chruthachadh." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Na cruthaich ath-ghoiridean" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Dì-stàlaich $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Thoir $(^NameDA) air falbh on choimpiutair agad." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "A bheil thu cinnteach gu bheil thu airson an stàladh aig $(^Name) fhàgail?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "A bheil thu cinnteach gu bheil thu airson an dì-stàladh aig $(^Name) fhàgail?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Tagh cleachdaichean" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Tagh na cleachdaichean dhan a thèid $(^NameDA) a stàladh." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Tagh an stàlaich thu $(^NameDA) air do shon fhìn a-mhàin no airson a h-uile cleachdaiche air a’ choimpiutair seo. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Stàlaich airson duine sam bith a chleachdas an coimpiutair seo" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Na stàlaich ach air mo shon-sa" +!endif diff --git a/tools/Contrib/Language files/Serbian.nlf b/tools/Contrib/Language files/Serbian.nlf new file mode 100644 index 0000000..30786b2 --- /dev/null +++ b/tools/Contrib/Language files/Serbian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +3098 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by Срђан Обућина +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) ИнÑталација +# ^UninstallCaption +$(^Name) ДеинÑталација +# ^LicenseSubCaption +: Договор о праву коришћења +# ^ComponentsSubCaption +: Опције инÑталације +# ^DirSubCaption +: Избор фолдера за инÑталацију +# ^InstallingSubCaption +: ИнÑталација +# ^CompletedSubCaption +: Завршена инÑталација +# ^UnComponentsSubCaption +: Опције деинÑталације +# ^UnDirSubCaption +: Избор фолдера за деинÑталацију +# ^ConfirmSubCaption +: Потврђивање +# ^UninstallingSubCaption +: ДеинÑталација +# ^UnCompletedSubCaption +: Завршена деинÑталација +# ^BackBtn +< Ðазад +# ^NextBtn +Ðапред > +# ^AgreeBtn +Прихватам +# ^AcceptBtn +Прихватам уÑлове договора о праву коришћења +# ^DontAcceptBtn +Ðе прихватам уÑлове договора о праву коришћења +# ^InstallBtn +ИнÑталирај +# ^UninstallBtn +ДеинÑталирај +# ^CancelBtn +ОдуÑтани +# ^CloseBtn +Затвори +# ^BrowseBtn +Избор... +# ^ShowDetailsBtn +Детаљи +# ^ClickNext +ПритиÑните дугме „Ðапред“ за наÑтавак. +# ^ClickInstall +ПритиÑните дугме „ИнÑталирај“ за почетак инÑталације. +# ^ClickUninstall +ПритиÑните дугме „ДеинÑталирај“ за почетак деинÑталације. +# ^Name +Име +# ^Completed +Завршено +# ^LicenseText +Пажљиво прочитајте договор о праву коришћења пре инÑталације програма $(^NameDA). Ðко прихватате Ñве уÑлове договора, притиÑните дугме „Прихватам“. +# ^LicenseTextCB +Пажљиво прочитајте договор о праву коришћења пре инÑталације програма $(^NameDA). Ðко прихватате Ñве уÑлове договора, обележите квадратић иÑпод. $_CLICK +# ^LicenseTextRB +Пажљиво прочитајте договор о праву коришћења пре инÑталације програма $(^NameDA). Ðко прихватате Ñве уÑлове договора, изаберите прву опцију иÑпод. $_CLICK +# ^UnLicenseText +Пажљиво прочитајте договор о праву коришћења пре деинÑталације програма $(^NameDA). Ðко прихватате Ñве уÑлове договора, притиÑните дугме „Прихватам“. +# ^UnLicenseTextCB +Пажљиво прочитајте договор о праву коришћења пре деинÑталације програма $(^NameDA). Ðко прихватате Ñве уÑлове договора, обележите квадратић иÑпод. $_CLICK +# ^UnLicenseTextRB +Пажљиво прочитајте договор о праву коришћења пре деинÑталације програма $(^NameDA). Ðко прихватате Ñве уÑлове договора, изаберите прву опцију иÑпод. $_CLICK +# ^Custom +Прилагођавање +# ^ComponentsText +Изаберите компоненте за инÑталацију. ИнÑталирају Ñе Ñамо означене компоненте. $_CLICK +# ^ComponentsSubText1 +Изаберите тип инÑталације: +# ^ComponentsSubText2_NoInstTypes +Изаберите компоненте за инÑталацију: +# ^ComponentsSubText2 +Или, изаберите опционе компоненте које желите да инÑталирате: +# ^UnComponentsText +Изаберите компоненте за деинÑталацију. ДеинÑталирају Ñе Ñамо означене компоненте. $_CLICK +# ^UnComponentsSubText1 +Изаберите тип деинÑталације: +# ^UnComponentsSubText2_NoInstTypes +Изаберите компоненте за деинÑталацију: +# ^UnComponentsSubText2 +Или, изаберите опционе компоненте које желите да деинÑталирате: +# ^DirText +Програм $(^NameDA) ће бити инÑталиран у наведени фолдер. За инÑталацију у други фолдер притиÑните дугме „Избор...“ и изаберите фолдер. $_CLICK +# ^DirSubText +Фолдер +# ^DirBrowseText +Изаберите фолдер у који ћете инÑталирати програм $(^NameDA): +# ^UnDirText +Програм $(^NameDA) ће бити деинÑталиран из наведеног фолдера. За деинÑталацију из другог фолдера притиÑните дугме „Избор...“ и изаберите фолдер. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Изаберите фолдер из кога ћете деинÑталирати програм $(^NameDA): +# ^SpaceAvailable +"Слободан проÑтор: " +# ^SpaceRequired +"Потребан проÑтор: " +# ^UninstallingText +Програм $(^NameDA) ће бити деинÑталиран из наведеног фолдера. $_CLICK +# ^UninstallingSubText +ДеинÑталација из: +# ^FileError +Грешка при отварању фајла за пиÑање: \r\n\t"$0"\r\nПритиÑните дугме „ОдуÑтани“ за прекид инÑталације,\r\n„Понови“ за поновни покушај пиÑања у фајл, или\r\n„Игнориши“ за преÑкакање овог фајла. +# ^FileError_NoIgnore +Грешка при отварању фајла за пиÑање: \r\n\t"$0"\r\nПритиÑните дугме „Понови“ за поновни покушај пиÑања у фајл, или\r\n„ОдуÑтани“ за прекид инÑталирања. +# ^CantWrite +"Ðемогуће пиÑање: " +# ^CopyFailed +ÐеуÑпешно копирање +# ^CopyTo +"Копирање у " +# ^Registering +"РегиÑтровање: " +# ^Unregistering +"ДерегиÑтровање: " +# ^SymbolNotFound +"Симбол није нађен: " +# ^CouldNotLoad +"Ðемогуће учитавање: " +# ^CreateFolder +"Креирање фолдера: " +# ^CreateShortcut +"Креирање пречице: " +# ^CreatedUninstaller +"Креирање деинÑталера: " +# ^Delete +"БриÑање фајла: " +# ^DeleteOnReboot +"БриÑање при реÑтарту: " +# ^ErrorCreatingShortcut +"Грешка при креирању пречице: " +# ^ErrorCreating +"Грешка при креирању: " +# ^ErrorDecompressing +Грешка при отпакивању података! Оштећен инÑталациони програм? +# ^ErrorRegistering +Грешка при региÑтровању библиотеке +# ^ExecShell +"Извршавање у окружењу: " +# ^Exec +"Извршавање: " +# ^Extract +"Отпакивање: " +# ^ErrorWriting +"Отпакивање: грешка при упиÑу у фајл " +# ^InvalidOpcode +Оштећен инÑталациони програм: неиÑправна команда +# ^NoOLE +"Ðема OLE подршке за: " +# ^OutputFolder +"Излазни фолдер: " +# ^RemoveFolder +"БриÑање фолдера: " +# ^RenameOnReboot +"Преименовање при реÑтартовању: " +# ^Rename +"Преименован: " +# ^Skipped +"ПреÑкочен: " +# ^CopyDetails +Копирај детаље у клипборд +# ^LogInstall +Води запиÑник о процеÑу инÑталације +# ^Byte +B +# ^Kilo + k +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Serbian.nsh b/tools/Contrib/Language files/Serbian.nsh new file mode 100644 index 0000000..78a9141 --- /dev/null +++ b/tools/Contrib/Language files/Serbian.nsh @@ -0,0 +1,121 @@ +;Language: Serbian (3098) +;Translation by Срђан Обућина + +!insertmacro LANGFILE "Serbian" "Serbian (Cyrillic)" "СрпÑки" "Srpski (Cyrillic)" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Добродошли у водич за инÑталацију програма $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Бићете вођени кроз Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸Ð½Ñталације програма $(^NameDA).$\r$\n$\r$\nПрепоручљиво је да иÑкључите Ñве друге програме пре почетка инÑталације. Ово може омогућити ажурирање ÑиÑтемÑких фајлова без потребе за поновним покретањем рачунара.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Добродошли у деинÑталацију програма $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Бићете вођени кроз Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð´ÐµÐ¸Ð½Ñталације програма $(^NameDA).$\r$\n$\r$\nПре почетка деинÑталације, уверите Ñе да је програм $(^NameDA) иÑкључен. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Договор о праву коришћења" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Пажљиво прочитајте договор о праву коришћења пре инÑталације програма $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ðко прихватате Ñве уÑлове договора, притиÑните дугме „Прихватам“ за наÑтавак. Морате прихватити договор да биÑте инÑталирали програм $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ðко прихватате Ñве уÑлове договора, обележите квадратић иÑпод. Морате прихватити договор да биÑте инÑталирали програм $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ðко прихватате Ñве уÑлове договора, изаберите прву опцију иÑпод. Морате прихватити договор да биÑте инÑталирали програм $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Договор о праву коришћења" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Пажљиво прочитајте договор о праву коришћења пре деинÑталације програма $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ðко прихватате Ñве уÑлове договора, притиÑните дугме „Прихватам“ за наÑтавак. Морате прихватити договор да биÑте деинÑталирали програм $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ðко прихватате Ñве уÑлове договора, обележите квадратић иÑпод. Морате прихватити договор да биÑте деинÑталирали програм $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ðко прихватате Ñве уÑлове договора, изаберите прву опцију иÑпод. Морате прихватити договор да биÑте деинÑталирали програм $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ПритиÑните Page Down да биÑте видели оÑтатак договора." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Избор компоненти за инÑталацију" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Изаберите компоненте за инÑталацију. ИнÑталирају Ñе Ñамо означене компоненте." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Избор компоненти за деинÑталацију" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Изаберите компоненте за деинÑталацију. ДеинÑталирају Ñе Ñамо означене компоненте." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ОпиÑ" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Пређите курÑором миша преко имена компоненте да биÑте видели њен опиÑ." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Изаберите компоненту да биÑте видели њен опиÑ." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Избор фолдера за инÑталацију" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Изаберите фолдер у који ћете инÑталирати програм $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Избор фолдера за деинÑталaцију" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Изаберите фолдер из кога ћете деинÑталирати програм $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ИнÑталација" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Сачекајте док Ñе програм $(^NameDA) инÑталира." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Завршена инÑталација" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "ИнÑталација је уÑпешно завршена." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Прекинута инÑталација" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ИнÑталација је прекинута и није уÑпешно завршена." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "ДеинÑталација" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Сачекајте док Ñе програм $(^NameDA) деинÑталира." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Завршена деинÑталација" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "ДеинÑталација је уÑпешно завршена." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Прекинута деинÑталација" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "ДеинÑталација је прекинута и није уÑпешно завршена." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Завршена инÑталација програма $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Програм $(^NameDA) је инÑталиран на рачунар.$\r$\n$\r$\nПритиÑните дугме „Крај“ за затварање овог прозора." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Рачунар мора бити поново покренут да би Ñе Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸Ð½Ñталације програма $(^NameDA) уÑпешно завршио. Желите ли то одмах да урадите?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Завршена деинÑталација програма $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Програм $(^NameDA) је деинÑталиран Ñа рачунара.$\r$\n$\r$\nПритиÑните дугме „Крај“ за затварање овог прозора." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Рачунар мора бити поново покренут да би Ñе Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð´ÐµÐ¸Ð½Ñталације програма $(^NameDA) уÑпешно завршио. Желите ли то да урадите одмах?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Одмах поново покрени рачунар" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Без поновног покретања" + ${LangFileString} MUI_TEXT_FINISH_RUN "Покрени програм $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Прикажи ПрочитајМе фајл" + ${LangFileString} MUI_BUTTONTEXT_FINISH "Крај" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Избор фолдера у Старт менију" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Изаберите фолдер у Старт менију у коме ћете креирати пречице." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Изаберите фолдер у Старт менију у коме желите да буду креиране пречице програма. Можете упиÑати и име за креирање новог фолдера." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Без креирања пречица" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "ДеинÑталација програма $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "ДеинÑталација програма $(^NameDA) Ñа рачунара." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Сигурно желите да прекинете инÑталацију програма $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Сигурно желите да прекинете деинÑталацију програма $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/SerbianLatin.nlf b/tools/Contrib/Language files/SerbianLatin.nlf new file mode 100644 index 0000000..1d009fc --- /dev/null +++ b/tools/Contrib/Language files/SerbianLatin.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +2074 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by SrÄ‘an Obućina +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Instalacija +# ^UninstallCaption +$(^Name) Deinstalacija +# ^LicenseSubCaption +: Dogovor o pravu korišćenja +# ^ComponentsSubCaption +: Opcije instalacije +# ^DirSubCaption +: Izbor foldera za instalaciju +# ^InstallingSubCaption +: Instalacija +# ^CompletedSubCaption +: ZavrÅ¡ena instalacija +# ^UnComponentsSubCaption +: Opcije deinstalacije +# ^UnDirSubCaption +: Izbor foldera za deinstalaciju +# ^ConfirmSubCaption +: PotvrÄ‘ivanje +# ^UninstallingSubCaption +: Deinstalacija +# ^UnCompletedSubCaption +: ZavrÅ¡ena deinstalacija +# ^BackBtn +< Nazad +# ^NextBtn +Napred > +# ^AgreeBtn +Prihvatam +# ^AcceptBtn +Prihvatam uslove dogovora o pravu korišćenja +# ^DontAcceptBtn +Ne prihvatam uslove dogovora o pravu korišćenja +# ^InstallBtn +Instaliraj +# ^UninstallBtn +Deinstaliraj +# ^CancelBtn +Odustani +# ^CloseBtn +Zatvori +# ^BrowseBtn +Izbor... +# ^ShowDetailsBtn +Detalji +# ^ClickNext +Pritisnite dugme „Napred“ za nastavak. +# ^ClickInstall +Pritisnite dugme „Instaliraj“ za poÄetak instalacije. +# ^ClickUninstall +Pritisnite dugme „Deinstaliraj“ za poÄetak deinstalacije. +# ^Name +Ime +# ^Completed +ZavrÅ¡eno +# ^LicenseText +Pažlivo proÄitajte dogovor o pravu korišćenja pre instalacije programa $(^NameDA). Ako prihvatate sve uslove dogovora, pritisnite dugme „Prihvatam“. +# ^LicenseTextCB +Pažlivo proÄitajte dogovor o pravu korišćenja pre instalacije programa $(^NameDA). Ako prihvatate sve uslove dogovora, obeležite kvadratić ispod. $_CLICK +# ^LicenseTextRB +Pažlivo proÄitajte dogovor o pravu korišćenja pre instalacije programa $(^NameDA). Ako prihvatate sve uslove dogovora, izaberite prvu opciju ispod. $_CLICK +# ^UnLicenseText +Pažlivo proÄitajte dogovor o pravu korišćenja pre deinstalacije programa $(^NameDA). Ako prihvatate sve uslove dogovora, pritisnite dugme „Prihvatam“. +# ^UnLicenseTextCB +Pažlivo proÄitajte dogovor o pravu korišćenja pre deinstalacije programa $(^NameDA). Ako prihvatate sve uslove dogovora, obeležite kvadratić ispod. $_CLICK +# ^UnLicenseTextRB +Pažlivo proÄitajte dogovor o pravu korišćenja pre deinstalacije programa $(^NameDA). Ako prihvatate sve uslove dogovora, izaberite prvu opciju ispod. $_CLICK +# ^Custom +PrilagoÄ‘avanje +# ^ComponentsText +Izaberite komponente za instalaciju. Instaliraju se samo oznaÄene komponente. $_CLICK +# ^ComponentsSubText1 +Izaberite tip instalacije: +# ^ComponentsSubText2_NoInstTypes +Izaberite komponente za instalaciju: +# ^ComponentsSubText2 +Ili, izaberite opcione komponente koje želite da instalirate: +# ^UnComponentsText +Izaberite komponente za deinstalaciju. Deinstaliraju se samo oznaÄene komponente. $_CLICK +# ^UnComponentsSubText1 +Izaberite tip deinstalacije: +# ^UnComponentsSubText2_NoInstTypes +Izaberite komponente za deinstalaciju: +# ^UnComponentsSubText2 +Ili, izaberite opcione komponente koje želite da deinstalirate: +# ^DirText +Program $(^NameDA) će biti instaliran u navedeni folder. Za instalaciju u drugi folder pritisnite dugme „Izbor...“ i izaberite folder. $_CLICK +# ^DirSubText +Folder +# ^DirBrowseText +Izaberite folder u koji ćete instalirati program $(^NameDA): +# ^UnDirText +Program $(^NameDA) će biti deinstaliran iz navedenog foldera. Za deinstalaciju iz drugog foldera pritisnite dugme „Izbor...“ i izaberite folder. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Izaberite folder iz koga ćete deinstalirati program $(^NameDA): +# ^SpaceAvailable +"Slobodan prostor: " +# ^SpaceRequired +"Potreban prostor: " +# ^UninstallingText +Program $(^NameDA) će biti deinstaliran iz navedenog foldera. $_CLICK +# ^UninstallingSubText +Deinstalacija iz: +# ^FileError +GreÅ¡ka pri otvaranju fajla za pisanje: \r\n\t"$0"\r\nPritisnite dugme „Odustani“ za prekid instalacije,\r\n„Ponovi“ za ponovni pokuÅ¡aj pisanja u fajl, ili\r\n„IgnoriÅ¡i“ za preskakanje ovog fajla. +# ^FileError_NoIgnore +GreÅ¡ka pri otvaranju fajla za pisanje: \r\n\t"$0"\r\nPritisnite dugme „Ponovi“ za ponovni pokuÅ¡aj pisanja u fajl, ili\r\n„Odustani“ za prekid instaliranja. +# ^CantWrite +"Nemoguće pisanje: " +# ^CopyFailed +NeuspeÅ¡no kopiranje +# ^CopyTo +"Kopiranje u " +# ^Registering +"Registrovanje: " +# ^Unregistering +"Deregistrovanje: " +# ^SymbolNotFound +"Simbol nije naÄ‘en: " +# ^CouldNotLoad +"Nemoguće uÄitavanje: " +# ^CreateFolder +"Kreiranje foldera: " +# ^CreateShortcut +"Kreiranje preÄice: " +# ^CreatedUninstaller +"Kreiranje deinstalera: " +# ^Delete +"Brisanje fajla: " +# ^DeleteOnReboot +"Brisanje pri restartu: " +# ^ErrorCreatingShortcut +"GreÅ¡ka pri kreiranju preÄice: " +# ^ErrorCreating +"GreÅ¡ka pri kreiranju: " +# ^ErrorDecompressing +GreÅ¡ka pri otpakivanju podataka! OÅ¡tećen instalacioni program? +# ^ErrorRegistering +GreÅ¡ka pri registrovanju biblioteke +# ^ExecShell +"IzvrÅ¡avanje u okruženju: " +# ^Exec +"IzvrÅ¡avanje: " +# ^Extract +"Otpakivanje: " +# ^ErrorWriting +"Otpakivanje: greÅ¡ka pri upisu u fajl " +# ^InvalidOpcode +OÅ¡tećen instalacioni program: neispravna komanda +# ^NoOLE +"Nema OLE podrÅ¡ke za: " +# ^OutputFolder +"Izlazni folder: " +# ^RemoveFolder +"Brisanje foldera: " +# ^RenameOnReboot +"Preimenovanje pri restartu: " +# ^Rename +"Preimenovan: " +# ^Skipped +"PreskoÄen: " +# ^CopyDetails +Kopiraj detalje u klipbord +# ^LogInstall +Vodi zapisnik o procesu instalacije +# ^Byte +B +# ^Kilo + k +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/SerbianLatin.nsh b/tools/Contrib/Language files/SerbianLatin.nsh new file mode 100644 index 0000000..5ac473f --- /dev/null +++ b/tools/Contrib/Language files/SerbianLatin.nsh @@ -0,0 +1,121 @@ +;Language: Serbian Latin (2074) +;Translation by SrÄ‘an Obućina + +!insertmacro LANGFILE "SerbianLatin" "Serbian (Latin)" "Srpski" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li u vodiÄ za instalaciju programa $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Bićete voÄ‘eni kroz proces instalacije programa $(^NameDA).$\r$\n$\r$\nPreporuÄljivo je da iskljuÄite sve druge programe pre poÄetka instalacije. Ovo može omogućiti ažuriranje sistemskih fajlova bez potrebe za ponovnim pokretanjem raÄunara.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li u deinstalaciju programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Bićete voÄ‘eni kroz proces deinstalacije programa $(^NameDA).$\r$\n$\r$\nPre poÄetka deinstalacije, uverite se da je program $(^NameDA) iskljuÄen. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Dogovor o pravu korišćenja" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Pažljivo proÄitajte dogovor o pravu korišćenja pre instalacije programa $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ako prihvatate sve uslove dogovora, pritisnite dugme „Prihvatam“ za nastavak. Morate prihvatiti dogovor da biste instalirali program $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ako prihvatate sve uslove dogovora, obeležite kvadratić ispod. Morate prihvatiti dogovor da biste instalirali program $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ako prihvatate sve uslove dogovora, izaberite prvu opciju ispod. Morate prihvatiti dogovor da biste instalirali program $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Dogovor o pravu korišćenja" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Pažlivo proÄitajte dogovor o pravu korišćenja pre deinstalacije programa $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ako prihvatate sve uslove dogovora, pritisnite dugme „Prihvatam“ za nastavak. Morate prihvatiti dogovor da biste deinstalirali program $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ako prihvatate sve uslove dogovora, obeležite kvadratić ispod. Morate prihvatiti dogovor da biste deinstalirali program $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ako prihvatate sve uslove dogovora, izaberite prvu opciju ispod. Morate prihvatiti dogovor da biste deinstalirali program $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Pritisnite Page Down da biste videli ostatak dogovora." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Izbor komponenti za instalaciju" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Izaberite komponente za instalaciju. Instaliraju se samo oznaÄene komponente." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Izbor komponenti za deinstalaciju" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Izaberite komponente za deinstalaciju. Deinstaliraju se samo oznaÄene komponente." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "PreÄ‘ite kursorom miÅ¡a preko imena komponente da biste videli njen opis." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Izaberite komponentu da biste videli njen opis." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Izbor foldera za instalaciju" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Izaberite folder u koji ćete instalirati program $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Izbor foldera za deinstalaciju" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Izaberite folder iz koga ćete deinstalirati program $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalacija" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "SaÄekajte dok se program $(^NameDA) instalira." + ${LangFileString} MUI_TEXT_FINISH_TITLE "ZavrÅ¡ena instalacija" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalacija je uspeÅ¡no zavrÅ¡ena." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Prekinuta instalacija" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalacija je prekinuta i nije uspeÅ¡no zavrÅ¡ena." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Deinstalacija" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "SaÄekajte dok se program $(^NameDA) deinstalira." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "ZavrÅ¡ena deinstalacija" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Deinstalacija je uspeÅ¡no zavrÅ¡ena." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Prekinuta deinstalacija" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Deinstalacija je prekinuta i nije uspeÅ¡no zavrÅ¡ena." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "ZavrÅ¡ena instalacija programa $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) je instaliran na raÄunar.$\r$\n$\r$\nPritisnite dugme „Kraj“ za zatvaranje ovog prozora." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "RaÄunar mora biti ponovo pokrenut da bi se proces instalacije programa $(^NameDA) uspeÅ¡no zavrÅ¡io. Želite li to odmah da uradite?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "ZavrÅ¡ena deinstalacija programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Program $(^NameDA) je deinstaliran sa raÄunara.$\r$\n$\r$\nPritisnite dugme „Kraj“ za zatvaranje ovog prozora." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "RaÄunar mora biti ponovo pokrenut da bi se proces deinstalacije programa $(^NameDA) uspeÅ¡no zavrÅ¡io. Želite li to da uradite odmah?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Odmah ponovo pokreni raÄunar" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Bez ponovnog pokretanja" + ${LangFileString} MUI_TEXT_FINISH_RUN "Pokreni program $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Prikaži ProÄitajMe fajl" + ${LangFileString} MUI_BUTTONTEXT_FINISH "Kraj" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Izbor foldera u Start meniju" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Izaberite folder u Start meniju u kome ćete kreirati preÄice." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Izaberite folder u Start meniju u kome želite da budu kreirane preÄice programa. Možete upisati i ime za kreiranje novog foldera." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Bez kreiranja preÄica" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Deinstalacija programa $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Deinstalacija programa $(^NameDA) sa raÄunara." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Sigurno želite da prekinete instalaciju programa $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Sigurno želite da prekinete deinstalaciju programa $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/SimpChinese.nlf b/tools/Contrib/Language files/SimpChinese.nlf new file mode 100644 index 0000000..fbe1e11 --- /dev/null +++ b/tools/Contrib/Language files/SimpChinese.nlf @@ -0,0 +1,192 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +2052 +# Font and size - dash (-) means default 字体åç§°ä¸Žå¤§å° +宋体 +9 +# Codepage - dash (-) means ASCII code page ASCII å­—ç é¡µ +936 +# RTL - anything else than RTL means LTR ç”±å³è‡³å·¦ä¹¦å†™ +- +# Revision date: 2020-06-03 +# Translator: Kii Ali , , , Tyson Tan +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) 安装 +# ^UninstallCaption +$(^Name) å¸è½½ +# ^LicenseSubCaption +: 许å¯è¯åè®® +# ^ComponentsSubCaption +: 安装选项 +# ^DirSubCaption +: 安装目录 +# ^InstallingSubCaption +: 正在安装 +# ^CompletedSubCaption +: å·²å®Œæˆ +# ^UnComponentsSubCaption +: å¸è½½é€‰é¡¹ +# ^UnDirSubCaption +: å¸è½½æ–‡ä»¶å¤¹ +# ^ConfirmSubCaption +: 确认 +# ^UninstallingSubCaption +: 正在å¸è½½ +# ^UnCompletedSubCaption +: å®Œæˆ +# ^BackBtn +< 上一步(&P) +# ^NextBtn +下一步(&N) > +# ^AgreeBtn +我接å—(&I) +# ^AcceptBtn +我接å—许å¯è¯å议中的æ¡æ¬¾(&A) +# ^DontAcceptBtn +我ä¸æŽ¥å—许å¯è¯å议中的æ¡æ¬¾(&N) +# ^InstallBtn +安装(&I) +# ^UninstallBtn +å¸è½½(&U) +# ^CancelBtn +å–消(&C) +# ^CloseBtn +关闭(&L) +# ^BrowseBtn +æµè§ˆ(&B)... +# ^ShowDetailsBtn +显示详情(&D) +# ^ClickNext +点击 [下一步(N)] 继续。 +# ^ClickInstall +点击 [安装(I)] 开始安装。 +# ^ClickUninstall +点击 [å¸è½½(U)] 开始å¸è½½ã€‚ +# ^Name +å称 +# ^Completed +å·²å®Œæˆ +# ^LicenseText +请在安装 $(^NameDA) 之å‰é˜…读许å¯è¯å议。如果你接å—å议中所有æ¡æ¬¾ï¼Œç‚¹å‡» [我åŒæ„(I)] 。 +# ^LicenseTextCB +请在安装 $(^NameDA) 之å‰é˜…读许å¯è¯å议。如果你接å—å议中所有æ¡æ¬¾ï¼Œç‚¹å‡»ä¸‹æ–¹çš„选框。 $_CLICK +# ^LicenseTextRB +请在安装 $(^NameDA) 之å‰é˜…读许å¯è¯å议。如果你接å—å议中所有æ¡æ¬¾ï¼Œé€‰æ‹©ä¸‹æ–¹çš„第一个选项。 $_CLICK +# ^UnLicenseText +请在å¸è½½ $(^NameDA) 之å‰é˜…读许å¯è¯å议。如果你接å—å议中所有æ¡æ¬¾ï¼Œç‚¹å‡» [我åŒæ„(I)] 。 +# ^UnLicenseTextCB +请在å¸è½½ $(^NameDA) 之å‰é˜…读许å¯è¯å议。如果你接å—å议中所有æ¡æ¬¾ï¼Œç‚¹å‡»ä¸‹æ–¹çš„选框。 $_CLICK +# ^UnLicenseTextRB +请在å¸è½½ $(^NameDA) 之å‰é˜…读许å¯è¯å议。如果你接å—å议中所有æ¡æ¬¾ï¼Œé€‰æ‹©ä¸‹æ–¹çš„第一个选项。 $_CLICK +# ^Custom +自定义 +# ^ComponentsText +请勾选你想安装的组件,并å–消勾选你ä¸æƒ³å®‰è£…的组件。 $_CLICK +# ^ComponentsSubText1 +选定的安装的类型: +# ^ComponentsSubText2_NoInstTypes +选定安装的组件: +# ^ComponentsSubText2 +或者,自定义选定想安装的组件: +# ^UnComponentsText +请勾选你想å¸è½½çš„组件,并å–消勾选你ä¸æƒ³å¸è½½çš„组件。 $_CLICK +# ^UnComponentsSubText1 +选择å¸è½½çš„类型: +# ^UnComponentsSubText2_NoInstTypes +选择è¦å¸è½½çš„组件: +# ^UnComponentsSubText2 +或是,选择想è¦è§£é™¤å®‰è£…çš„å¯é€‰é¡¹ç»„件: +# ^DirText +安装程åºå°†æŠŠ $(^NameDA) 安装到以下目录。è¦å®‰è£…到å¦ä¸€ä¸ªç›®å½•ï¼Œè¯·ç‚¹å‡» [æµè§ˆ(B)...] 并选择其他的文件夹。 $_CLICK +# ^DirSubText +安装目录 +# ^DirBrowseText +选择安装此软件的 $(^NameDA) çš„ä½ç½®: +# ^UnDirText +安装程åºå°†æŠŠ $(^NameDA) 从以下目录å¸è½½ã€‚è¦ä»Žå¦ä¸€ä¸ªç›®å½•å¸è½½ï¼Œç‚¹å‡» [æµè§ˆ(B)...] 并选择其他目录。 $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +选择è¦å¸è½½ $(^NameDA) 的目录: +# ^SpaceAvailable +"å¯ç”¨ç©ºé—´: " +# ^SpaceRequired +"所需空间: " +# ^UninstallingText +æ­¤å‘导将从本机å¸è½½ $(^NameDA) 。 $_CLICK +# ^UninstallingSubText +å¸è½½ç›®å½•: +# ^FileError +无法打开è¦å†™å…¥çš„文件: \r\n\t"$0"\r\n点击 [Abort] åœæ­¢å®‰è£…,\r\n [Retry] é‡æ–°å°è¯•å†™å…¥æ–‡ä»¶ï¼Œæˆ–者\r\n [Ignore] 忽略这个文件。 +# ^FileError_NoIgnore +无法打开è¦å†™å…¥çš„文件: \r\n\t"$0"\r\n点击 [Retry] é‡æ–°å°è¯•å†™å…¥æ–‡ä»¶ï¼Œæˆ–者\r\n [Cancel] åœæ­¢å®‰è£…。 +# ^CantWrite +"无法写入: " +# ^CopyFailed +"å¤åˆ¶å¤±è´¥ " +# ^CopyTo +"å¤åˆ¶åˆ°: " +# ^Registering +"正在注册: " +# ^Unregistering +"正在å–消注册: " +# ^SymbolNotFound +"无法找到符å·: " +# ^CouldNotLoad +"无法加载: " +# ^CreateFolder +"创建文件夹: " +# ^CreateShortcut +"创建快æ·æ–¹å¼: " +# ^CreatedUninstaller +"创建å¸è½½ç¨‹åº: " +# ^Delete +"删除文件: " +# ^DeleteOnReboot +"é‡æ–°å¯åŠ¨åŽåˆ é™¤: " +# ^ErrorCreatingShortcut +"创建快æ·æ–¹å¼æ—¶å‘生错误: " +# ^ErrorCreating +"创建时å‘生错误: " +# ^ErrorDecompressing +"解压缩数æ®æ—¶å‘生错误ï¼è¯·æ£€æŸ¥å®‰è£…程åºæ˜¯å¦æŸå。" +# ^ErrorRegistering +"注册 DLL æ—¶å‘生错误" +# ^ExecShell +"执行外壳程åº: " +# ^Exec +"执行: " +# ^Extract +"解压缩: " +# ^ErrorWriting +"抽å–: 无法写入文件 " +# ^InvalidOpcode +"安装程åºæŸå: 无效的æ“ä½œä»£ç  " +# ^NoOLE +"没有 OLE 用于: " +# ^OutputFolder +"输出目录: " +# ^RemoveFolder +"删除目录: " +# ^RenameOnReboot +"é‡æ–°å¯åŠ¨ä¹‹åŽé‡å‘½å: " +# ^Rename +"é‡å‘½å: " +# ^Skipped +"已跳过: " +# ^CopyDetails +"å¤åˆ¶è¯¦æƒ…åˆ°å‰ªè´´æ¿ " +# ^LogInstall +"记录安装过程到日志" +# byte +B +# kilo + K +# mega + M +# giga + G diff --git a/tools/Contrib/Language files/SimpChinese.nsh b/tools/Contrib/Language files/SimpChinese.nsh new file mode 100644 index 0000000..a34f469 --- /dev/null +++ b/tools/Contrib/Language files/SimpChinese.nsh @@ -0,0 +1,130 @@ +;Language: 'Chinese (Simplified)' (2052) +;Translator: Kii Ali , , , Tyson Tan +;Revision date: 2020-06-03 + +!insertmacro LANGFILE "SimpChinese" "Chinese (Simplified)" "中文(简体)" "Hanyu (Jiantizi)" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "欢迎使用 $(^NameDA) 安装程åº" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "此程åºå°†å¼•å¯¼ä½ å®Œæˆ $(^NameDA) 的安装。$\r$\n$\r$\n在安装之å‰ï¼Œè¯·å…ˆå…³é—­å…¶ä»–所有应用程åºã€‚这将确ä¿å®‰è£…程åºèƒ½å¤Ÿæ›´æ–°æ‰€éœ€çš„系统文件,从而é¿å…在安装åŽé‡æ–°å¯åŠ¨è®¡ç®—机。$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "欢迎使用 $(^NameDA) å¸è½½ç¨‹åº" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "此程åºå°†å¼•å¯¼ä½ å®Œæˆ $(^NameDA) çš„å¸è½½ã€‚$\r$\n$\r$\n在å¸è½½ä¹‹å‰ï¼Œè¯·ç¡®è®¤ $(^NameDA) å·²ç»å…³é—­ã€‚$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "许å¯è¯åè®®" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "在安装 $(^NameDA) 之å‰ï¼Œè¯·é˜…读许å¯è¯æ¡æ¬¾ã€‚" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "如果你接å—许å¯è¯çš„æ¡æ¬¾ï¼Œè¯·ç‚¹å‡» [我åŒæ„(I)] 继续安装。你必须在åŒæ„åŽæ‰èƒ½å®‰è£… $(^NameDA) 。" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "如果你接å—许å¯è¯çš„æ¡æ¬¾ï¼Œè¯·ç‚¹å‡»å‹¾é€‰ä¸‹æ–¹çš„选框。你必须在åŒæ„åŽæ‰èƒ½å®‰è£… $(^NameDA)。$_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "如果你接å—许å¯è¯çš„æ¡æ¬¾ï¼Œè¯·é€‰æ‹©ä¸‹æ–¹ç¬¬ä¸€ä¸ªé€‰é¡¹ã€‚你必须在åŒæ„åŽæ‰èƒ½å®‰è£… $(^NameDA)。$_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "许å¯è¯åè®®" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "在å¸è½½ $(^NameDA) 之å‰ï¼Œè¯·é˜…读许å¯è¯æ¡æ¬¾ã€‚" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "如果你接å—许å¯è¯çš„æ¡æ¬¾ï¼Œè¯·ç‚¹å‡» [我åŒæ„(I)] 继续å¸è½½ã€‚如果你点击 [å–消(C)] ,å¸è½½ç¨‹åºå°†ä¼šå…³é—­ã€‚你必须在åŒæ„åŽæ‰èƒ½å¸è½½ $(^NameDA) 。" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "如果你接å—许å¯è¯çš„æ¡æ¬¾ï¼Œç‚¹å‡»å‹¾é€‰ä¸‹æ–¹çš„选框。你必须在åŒæ„åŽæ‰èƒ½å¸è½½ $(^NameDA)。$_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "如果你接å—许å¯è¯çš„æ¡æ¬¾ï¼Œè¯·é€‰æ‹©ä¸‹æ–¹ç¬¬ä¸€ä¸ªé€‰é¡¹ã€‚你必须在åŒæ„åŽæ‰èƒ½å¸è½½ $(^NameDA)。$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "è¦é˜…读å议的其余部分,请按 [PgDn] é”®å‘下翻页。" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "选择组件" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "选择你想安装的 $(^NameDA) 功能组件。" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "选择组件" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "选择你想å¸è½½çš„ $(^NameDA) 功能组件。" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "组件æè¿°" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "将光标悬åœåœ¨ç»„件å称之上,å³å¯æ˜¾ç¤ºå®ƒçš„功能æ述。" + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "点击选中组件,å³å¯æ˜¾ç¤ºå®ƒçš„功能æ述。" + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "选择安装ä½ç½®" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "选择 $(^NameDA) 的安装文件夹。" +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "选择å¸è½½ä½ç½®" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "选择 $(^NameDA) çš„å¸è½½æ–‡ä»¶å¤¹ã€‚" +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "正在安装" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) 正在安装,请ç¨å€™ã€‚" + ${LangFileString} MUI_TEXT_FINISH_TITLE "安装完æˆ" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "安装程åºæˆåŠŸå®Œæˆå®‰è£…。" + ${LangFileString} MUI_TEXT_ABORT_TITLE "安装中止" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "安装程åºæœªèƒ½å®Œæˆå®‰è£…。" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "正在å¸è½½" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) 正在å¸è½½ï¼Œè¯·ç¨å€™ã€‚" + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "å¸è½½å®Œæˆ" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "å¸è½½ç¨‹åºæˆåŠŸå®Œæˆå¸è½½ã€‚" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "å¸è½½ä¸­æ­¢" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "å¸è½½ç¨‹åºæœªèƒ½å®Œæˆå¸è½½ã€‚" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) 安装程åºç»“æŸ" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) å·²ç»æˆåŠŸå®‰è£…到本机。$\r$\n点击 [完æˆ(F)] 关闭安装程åºã€‚" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "å¿…é¡»é‡æ–°å¯åŠ¨æœ¬æœºæ‰èƒ½å®Œæˆ $(^NameDA) 的安装。是å¦ç«‹å³é‡æ–°å¯åŠ¨ï¼Ÿ" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) å¸è½½ç¨‹åºç»“æŸ" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) å·²ç»æˆåŠŸä»Žæœ¬æœºå¸è½½ã€‚$\r$\n$\r$\n点击 [完æˆ] 关闭å¸è½½ç¨‹åºã€‚" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "å¿…é¡»é‡æ–°å¯åŠ¨æœ¬æœºæ‰èƒ½å®Œæˆ $(^NameDA) çš„å¸è½½ã€‚是å¦ç«‹å³é‡æ–°å¯åŠ¨ï¼Ÿ" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "是,立å³é‡æ–°å¯åŠ¨(&Y)" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "å¦ï¼Œæˆ‘会在之åŽé‡æ–°å¯åŠ¨(&N)" + ${LangFileString} MUI_TEXT_FINISH_RUN "è¿è¡Œ $(^NameDA)(&R)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "显示自述文件(&M)" + ${LangFileString} MUI_BUTTONTEXT_FINISH "完æˆ(&F)" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "选择开始èœå•æ–‡ä»¶å¤¹" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "选择开始èœå•æ–‡ä»¶å¤¹ï¼Œç”¨äºŽåˆ›å»ºç¨‹åºçš„å¿«æ·æ–¹å¼ã€‚" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "选择开始èœå•æ–‡ä»¶å¤¹ï¼Œç”¨äºŽåˆ›å»ºç¨‹åºçš„å¿«æ·æ–¹å¼ã€‚你也å¯ä»¥è¾“入自定义å称,创建新文件夹。" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "ä¸è¦åˆ›å»ºå¿«æ·æ–¹å¼(&N)" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "å¸è½½ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "从本机å¸è½½ $(^NameDA) 。" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "确定è¦é€€å‡º $(^Name) 安装程åºå—?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "确定è¦é€€å‡º $(^Name) å¸è½½ç¨‹åºå—?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "选择用户" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "选择为哪些用户安装 $(^NameDA) 。" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "选择åªä¸ºè‡ªå·±å®‰è£… $(^NameDA) ,还是为本机的所有用户安装。 $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "为本机所有用户安装(&A)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "åªä¸ºæˆ‘自己安装(&M)" +!endif diff --git a/tools/Contrib/Language files/Slovak.nlf b/tools/Contrib/Language files/Slovak.nlf new file mode 100644 index 0000000..b7e58bd --- /dev/null +++ b/tools/Contrib/Language files/Slovak.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1051 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +#Translated by: Kypec (peter.dzugas@mahe.sk); edited by: Marián Hikaník (podnety@mojepreklady.net), Ivan Masár , 2008. +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +InÅ¡talácia programu $(^Name) +# ^UninstallCaption +OdinÅ¡talovanie programu $(^Name) +# ^LicenseSubCaption +: LicenÄná zmluva +# ^ComponentsSubCaption +: Možnosti inÅ¡talácie +# ^DirSubCaption +: InÅ¡talaÄný prieÄinok +# ^InstallingSubCaption +: Prebieha inÅ¡talácia +# ^CompletedSubCaption +: Hotovo +# ^UnComponentsSubCaption +: Možnosti odinÅ¡talovania +# ^UnDirSubCaption +: PrieÄinok s informáciami pre odinÅ¡talovanie +# ^ConfirmSubCaption +: Potvrdenie +# ^UninstallingSubCaption +: Prebieha odinÅ¡talácia +# ^UnCompletedSubCaption +: Hotovo +# ^BackBtn +< &Späť +# ^NextBtn +ÄŽ&alej > +# ^AgreeBtn +&Súhlasím +# ^AcceptBtn +&Súhlasím s podmienkami licenÄnej zmluvy +# ^DontAcceptBtn +N&esúhlasím s podmienkami licenÄnej zmluvy +# ^InstallBtn +&NainÅ¡talovaÅ¥ +# ^UninstallBtn +&OdinÅ¡talovaÅ¥ +# ^CancelBtn +ZruÅ¡iÅ¥ +# ^CloseBtn +&ZatvoriÅ¥ +# ^BrowseBtn +&PrehľadávaÅ¥... +# ^ShowDetailsBtn +&Podrobnosti +# ^ClickNext +V inÅ¡talácii pokraÄujte kliknutím na tlaÄidlo ÄŽalej. +# ^ClickInstall +Pre spustenie inÅ¡talácie kliknite na tlaÄidlo NainÅ¡talovaÅ¥. +# ^ClickUninstall +Pre spustenie procesu odinÅ¡talovania kliknite na tlaÄidlo OdinÅ¡talovaÅ¥. +# ^Name +Názov +# ^Completed +Hotovo +# ^LicenseText +Pred inÅ¡taláciou programu si prosím dôkladne preÄítajte licenÄnú zmluvu $(^NameDA). Ak súhlasíte so vÅ¡etkými jej podmienkami, kliknite na tlaÄidlo Súhlasím. +# ^LicenseTextCB +Pred inÅ¡taláciou programu si prosím dôkladne preÄítajte licenÄnú zmluvu $(^NameDA). Ak súhlasíte so vÅ¡etkými jej podmienkami, zaÅ¡krtnite nasledujúce políÄko. $_CLICK +# ^LicenseTextRB +Pred inÅ¡taláciou programu si prosím dôkladne preÄítajte licenÄnú zmluvu $(^NameDA). Ak súhlasíte so vÅ¡etkými jej podmienkami, oznaÄte prvú z nasledujúcich možností. $_CLICK +# ^UnLicenseText +Pred odinÅ¡talovaním programu si prosím dôkladne preÄítajte licenÄnú zmluvu $(^NameDA). Ak súhlasíte so vÅ¡etkými jej podmienkami, kliknite na tlaÄidlo Súhlasím. +# ^UnLicenseTextCB +Pred odinÅ¡talovaním programu si prosím dôkladne preÄítajte licenÄnú zmluvu $(^NameDA). Ak súhlasíte so vÅ¡etkými jej podmienkami, zaÅ¡krtnite nasledujúce políÄko. $_CLICK +# ^UnLicenseTextRB +Pred odinÅ¡talovaním programu si prosím dôkladne preÄítajte licenÄnú zmluvu $(^NameDA). Ak súhlasíte so vÅ¡etkými jej podmienkami, oznaÄte prvú z nasledujúcich možností. $_CLICK +# ^Custom +Voliteľná +# ^ComponentsText +OznaÄte súÄasti programu, ktoré chcete nainÅ¡talovaÅ¥ a odznaÄte tie, ktoré nainÅ¡talovaÅ¥ nechcete. $_CLICK +# ^ComponentsSubText1 +Vyberte si typ inÅ¡talácie: +# ^ComponentsSubText2_NoInstTypes +Vyberte si tie súÄasti programu, ktoré chcete nainÅ¡talovaÅ¥: +# ^ComponentsSubText2 +Alebo oznaÄte voliteľné doplnky, ktoré chcete nainÅ¡talovaÅ¥: +# ^UnComponentsText +OznaÄte súÄasti programu, ktoré chcete odinÅ¡talovaÅ¥ a odznaÄte tie, ktoré chcete ponechaÅ¥ nainÅ¡talované. $_CLICK +# ^UnComponentsSubText1 +Zvoľte typ deinÅ¡talácie: +# ^UnComponentsSubText2_NoInstTypes +Vyberte súÄasti, ktoré chcete odinÅ¡talovaÅ¥: +# ^UnComponentsSubText2 +Alebo oznaÄte voliteľné súÄasti, ktoré chcete odinÅ¡talovaÅ¥: +# ^DirText +$(^NameDA) bude nainÅ¡talovaný do nasledujúceho prieÄinka. InÅ¡talovaÅ¥ do iného prieÄinka môžete po kliknutí na tlaÄidlo PrehľadávaÅ¥ a vybraní iného prieÄinka. $_CLICK +# ^DirSubText +Cieľový prieÄinok +# ^DirBrowseText +Zvoľte prieÄinok, do ktorého sa nainÅ¡taluje program $(^NameDA): +# ^UnDirText +InÅ¡talátor odinÅ¡taluje program $(^NameDA) z nasledovného prieÄinka. Ak ho chcete odinÅ¡talovaÅ¥ z iného prieÄinka, kliknite na tlaÄidlo PrehľadávaÅ¥ a vyberte iný prieÄinok. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Zvoľte prieÄinok, z ktorého sa odinÅ¡taluje program $(^NameDA): +# ^SpaceAvailable +"Voľné miesto na disku: " +# ^SpaceRequired +"Potrebné miesto na disku: " +# ^UninstallingText +Program $(^NameDA) sa odinÅ¡taluje z nasledovného prieÄinka. $_CLICK +# ^UninstallingSubText +Prebieha odinÅ¡talovanie z: +# ^FileError +Chyba pri otváraní súboru na zápis: \r\n\r\n$0\r\n\r\n. Ak chcete inÅ¡taláciu ukonÄiÅ¥, kliknite na tlaÄidlo UkonÄiÅ¥,\r\ ak chcete zápis súboru zopakovaÅ¥, kliknite na tlaÄidlo OpakovaÅ¥ alebo kliknite na tlaÄidlo \r\nIgnorovaÅ¥, ak chcete inÅ¡taláciu tohto súboru vynechaÅ¥. +# ^FileError_NoIgnore +Chyba pri otváraní súboru na zápis: \r\n\r\n$0\r\n\r\n. Ak chcete zopakovaÅ¥ zápis súboru, kliknite na tlaÄidlo OpakovaÅ¥, alebo kliknite na tlaÄidlo \r\nZruÅ¡iÅ¥, v prípade, že chcete inÅ¡taláciu ukonÄiÅ¥. +# ^CantWrite +"Nemožno zapísaÅ¥ súbor: " +# ^CopyFailed +Kopírovanie zlyhalo. +# ^CopyTo +"KopírovaÅ¥ do " +# ^Registering +"Registruje sa: " +# ^Unregistering +"Vymazáva sa z registra: " +# ^SymbolNotFound +"Nemožno nájsÅ¥ symbol: " +# ^CouldNotLoad +"Nemožno naÄítaÅ¥: " +# ^CreateFolder +"Vytvorený prieÄinok: " +# ^CreateShortcut +"Vytvorený odkaz: " +# ^CreatedUninstaller +"Program pre odinÅ¡talovanie: " +# ^Delete +"Vymazaný súbor: " +# ^DeleteOnReboot +"VymazaÅ¥ po reÅ¡tartovaní systému: " +# ^ErrorCreatingShortcut +"Chyba pri vytváraní odkazu: " +# ^ErrorCreating +"Chyba pri vytváraní: " +# ^ErrorDecompressing +Chyba pri dekomprimovaní dát! InÅ¡talátor je pravdepodobne poÅ¡kodený... +# ^ErrorRegistering +Chyba pri registrácii súÄasti +# ^ExecShell +"VykonaÅ¥ príkaz: " +# ^Exec +"SpustiÅ¥: " +# ^Extract +"Extrahuje sa: " +# ^ErrorWriting +"Chyba pri zápise do súboru " +# ^InvalidOpcode +InÅ¡talátor je pravdepodobne poÅ¡kodený, pretože obsahuje neplatný operaÄný kód. +# ^NoOLE +"Žiadny zápis OLE pre: " +# ^OutputFolder +"Výstupný prieÄinok: " +# ^RemoveFolder +"OdstrániÅ¥ prieÄinok: " +# ^RenameOnReboot +"PremenovaÅ¥ po reÅ¡tartovaní systému: " +# ^Rename +"PremenovaÅ¥: " +# ^Skipped +"Vynechané: " +# ^CopyDetails +SkopírovaÅ¥ podrobnosti do schránky +# ^LogInstall +ZaznamenaÅ¥ priebeh inÅ¡talácie +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Slovak.nsh b/tools/Contrib/Language files/Slovak.nsh new file mode 100644 index 0000000..fdba1a5 --- /dev/null +++ b/tools/Contrib/Language files/Slovak.nsh @@ -0,0 +1,133 @@ +;Language: Slovak (1051) +;Translated by: +; Kypec (peter.dzugas@mahe.sk) +;edited by: +; Marián Hikaník (podnety@mojepreklady.net) +; Ivan Masár , 2008. + +!insertmacro LANGFILE "Slovak" = "SlovenÄina" "Slovencina" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Vitajte v sprievodcovi inÅ¡taláciou programu $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Tento sprievodca vás prevedie inÅ¡taláciou $(^NameDA).$\r$\n$\r$\nPred zaÄiatkom inÅ¡talácie sa odporúÄa ukonÄiÅ¥ vÅ¡etky ostatné programy. Tým umožníte aktualizovanie systémových súborov bez potreby reÅ¡tartovania vášho poÄítaÄa.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Vitajte v sprievodcovi odinÅ¡talovaním programu $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tento sprievodca vás prevedie procesom odinÅ¡talovania programu $(^NameDA).$\r$\n$\r$\nPred spustením procesu odinÅ¡talovania sa uistite, že program $(^NameDA) nie je práve aktívny.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "LicenÄná zmluva" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Pred inÅ¡taláciou $(^NameDA) si prosím preÅ¡tudujte licenÄné podmienky." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ak súhlasíte s podmienkami zmluvy, kliknite na tlaÄidlo Súhlasím a môžete pokraÄovaÅ¥ v inÅ¡talácii. Ak chcete v inÅ¡talácii pokraÄovaÅ¥, musíte odsúhlasiÅ¥ podmienky licenÄnej zmluvy $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ak súhlasíte s podmienkami zmluvy, zaÅ¡krtnite nižšie uvedené políÄko. Ak chcete v inÅ¡talácii pokraÄovaÅ¥, musíte odsúhlasiÅ¥ podmienky licenÄnej zmluvy $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ak súhlasíte s podmienkami zmluvy, oznaÄte prvú z nižšie uvedených možností. Ak chcete v inÅ¡talácii pokraÄovaÅ¥, musíte odsúhlasiÅ¥ podmienky licenÄnej zmluvy $(^NameDA)." +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "LicenÄná zmluva" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Pred odinÅ¡talovaním programu $(^NameDA) si prosím preÄítajte licenÄné podmienky." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ak súhlasíte s podmienkami zmluvy, zvoľte Súhlasím. LicenÄnú zmluvu musíte odsúhlasiÅ¥, ak chcete v odinÅ¡talovaní programu $(^NameDA) pokraÄovaÅ¥." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Ak súhlasíte s podmienkami zmluvy, zaÅ¡krtnite nižšie uvedené políÄko. LicenÄnú zmluvu musíte odsúhlasiÅ¥, ak chcete pokraÄovaÅ¥ v odinÅ¡talovaní programu $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Ak súhlasíte s podmienkami licenÄnej zmluvy, oznaÄte prvú z nižšie uvedených možností. LicenÄnú zmluvu musíte odsúhlasiÅ¥, ak chcete pokraÄovaÅ¥ v odinÅ¡talovaní programu $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "StlaÄením klávesu Page Down posuniete text licenÄnej zmluvy." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Voľba súÄastí programu" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Zvoľte si tie súÄasti programu $(^NameDA), ktoré chcete nainÅ¡talovaÅ¥." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Voľba súÄastí" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Zvoľte súÄasti programu $(^NameDA), ktoré chcete odinÅ¡talovaÅ¥." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Popis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pri prejdení kurzorom myÅ¡i nad názvom súÄasti sa zobrazí jej popis." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "OznaÄte nejakú súÄasÅ¥, ak chcete zobraziÅ¥ jej podrobnejší popis." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Voľba umiestnenia programu" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Vyberte si prieÄinok, do ktorého chcete nainÅ¡talovaÅ¥ program $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Umiestenie programu pre odinÅ¡talovanie" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Vyberte si prieÄinok, z ktorého chcete odinÅ¡talovaÅ¥ program $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "InÅ¡talácia" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "PoÄkajte prosím, kým prebehne inÅ¡talácia programu $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "UkonÄenie inÅ¡talácie" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "InÅ¡talácia bola dokonÄená úspeÅ¡ne." + ${LangFileString} MUI_TEXT_ABORT_TITLE "PreruÅ¡enie inÅ¡talácie" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "InÅ¡taláciu sa nepodarilo dokonÄiÅ¥." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "OdinÅ¡talovanie" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "ÄŒakajte prosím, kým prebehne odinÅ¡talovanie programu $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "UkonÄenie odinÅ¡talovania" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "OdinÅ¡talovanie bolo úspeÅ¡ne dokonÄené." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "PreruÅ¡enie odinÅ¡talovania" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "OdinÅ¡talovanie sa neukonÄilo úspeÅ¡ne." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "DokonÄenie inÅ¡talácie programu $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) bol nainÅ¡talovaný do vášho poÄítaÄa.$\r$\nKliknite na tlaÄidlo DokonÄiÅ¥ a tento sprievodca sa ukonÄí." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Pre úplné dokonÄenie inÅ¡talácie programu $(^NameDA) je potrebné reÅ¡tartovaÅ¥ váš poÄítaÄ. Chcete ho reÅ¡tartovaÅ¥ ihneÄ?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "DokonÄenie sprievodcu odinÅ¡talovaním" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Program $(^NameDA) bol odinÅ¡talovaný z vášho poÄítaÄa.$\r$\n$\r$\nKliknite na tlaÄidlo DokonÄiÅ¥ a tento sprievodca sa ukonÄí." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Pre úplné dokonÄenie odinÅ¡talovania programu $(^NameDA) je nutné reÅ¡tartovaÅ¥ váš poÄítaÄ. Chcete ho reÅ¡tartovaÅ¥ ihneÄ?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "ReÅ¡tartovaÅ¥ teraz" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "ReÅ¡tartovaÅ¥ neskôr (manuálne)" + ${LangFileString} MUI_TEXT_FINISH_RUN "&SpustiÅ¥ program $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&ZobraziÅ¥ súbor s informáciami" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&DokonÄiÅ¥" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Voľba umiestnenia v ponuke Å tart" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Vyberte si prieÄinok v ponuke Å tart, kam sa umiestnia odkazy na program $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vyberte si prieÄinok v ponuke Å tart, v ktorom chcete vytvoriÅ¥ odkazy na program. Takisto môžete napísaÅ¥ názov nového prieÄinka." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "NevytváraÅ¥ odkazy" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "OdinÅ¡talovanie programu $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Odstránenie programu $(^NameDA) z vášho poÄítaÄa." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Naozaj chcete ukonÄiÅ¥ inÅ¡taláciu programu $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Naozaj chcete ukonÄiÅ¥ proces odinÅ¡talovania programu $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "VybraÅ¥ používateľov" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Vyberte pre ktorých používateľov chcete nainÅ¡talovaÅ¥ $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Vyberte, Äi chcete nainÅ¡talovaÅ¥ program $(^NameDA) iba pre seba alebo pre vÅ¡etkých používateľov tohto poÄítaÄa. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "NainÅ¡talovaÅ¥ pre vÅ¡etkých používateľov tohto poÄítaÄa" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "NainÅ¡talovaÅ¥ iba pre mňa" +!endif \ No newline at end of file diff --git a/tools/Contrib/Language files/Slovenian.nlf b/tools/Contrib/Language files/Slovenian.nlf new file mode 100644 index 0000000..581b149 --- /dev/null +++ b/tools/Contrib/Language files/Slovenian.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1060 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1250 +# RTL - anything else than RTL means LTR +- +# Translation by Janez Dolinar, edited by Martin Srebotnjak - Lugos.si +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Namestitev $(^Name) +# ^UninstallCaption +Odstranitev $(^Name) +# ^LicenseSubCaption +: LicenÄna pogodba +# ^ComponentsSubCaption +: Možnosti namestitve +# ^DirSubCaption +: Mapa namestitve +# ^InstallingSubCaption +: NameÅ¡Äanje poteka +# ^CompletedSubCaption +: DokonÄano +# ^UnComponentsSubCaption +: Možnosti odstranitve +# ^UnDirSubCaption +: Mapa odstranitve +# ^ConfirmSubCaption +: Potrditev +# ^UninstallingSubCaption +: Odstranjevanje poteka +# ^UnCompletedSubCaption +: DokonÄano +# ^BackBtn +< &Nazaj +# ^NextBtn +N&aprej > +# ^AgreeBtn +Se &strinjam +# ^AcceptBtn +&Sprejmem pogoje licenÄne pogodbe +# ^DontAcceptBtn +&Ne sprejmem pogojev licenÄne pogodbe +# ^InstallBtn +&Namesti +# ^UninstallBtn +&Odstrani +# ^CancelBtn +PrekliÄi +# ^CloseBtn +&Zapri +# ^BrowseBtn +Prebrsk&aj ... +# ^ShowDetailsBtn +&Podrobnosti +# ^ClickNext +Kliknite Naprej za nadaljevanje. +# ^ClickInstall +Kliknite Namesti za zaÄetek namestitve. +# ^ClickUninstall +Kliknite Odstrani za odstranitev. +# ^NameIme +Ime +# ^Completed +DokonÄano +# ^LicenseText +Prosimo, da pred namestitvijo $(^NameDA) pregledate licenÄno pogodbo. ÄŒe se z njo strinjate, pritisnite Se strinjam. +# ^LicenseTextCB +Prosimo, da pred namestitvijo $(^NameDA) pregledate licenÄno pogodbo. ÄŒe sprejmete vse naÅ¡tete pogoje, potrdite spodnje polje. $_CLICK +# ^LicenseTextRB +Prosimo, da pred namestitvijo $(^NameDA) pregledate licenÄno pogodbo. ÄŒe sprejmete vse naÅ¡tete pogoje, izberite prvo spodaj podano možnost. $_CLICK +# ^UnLicenseText +Prosimo, da pred odstranitvijo $(^NameDA) pregledate licenÄno pogodbo. ÄŒe se z njo strinjate, pritisnite Se strinjam. +# ^UnLicenseTextCB +Prosimo, da pred odstranitvijo $(^NameDA) pregledate licenÄno pogodbo. ÄŒe sprejmete vse naÅ¡tete pogoje, potrdite spodnje polje. $_CLICK +# ^UnLicenseTextRB +Prosimo, da pred odstranitvijo $(^NameDA) pregledate licenÄno pogodbo. ÄŒe sprejmete vse naÅ¡tete pogoje, izberite prvo spodaj podano možnost. $_CLICK +# ^Custom +Po meri ... +# ^ComponentsText +OznaÄite komponente, ki jih želite namestiti, in pustite neoznaÄene tiste, katerih ne želite namestiti. $_CLICK +# ^ComponentsSubText1 +Izberite vrsto namestitve: +# ^ComponentsSubText2_NoInstTypes +Izberite komponente namestitve: +# ^ComponentsSubText2 +Ali pa izberite komponente, ki jih želite namestiti: +# ^UnComponentsText +OznaÄite komponente, ki jih želite odstraniti, in pustite neoznaÄene tiste, ki jih ne želite odstraniti. $_CLICK +# ^UnComponentsSubText1 +Izberite vrsto odstranitve: +# ^UnComponentsSubText2_NoInstTypes +Izberite komponente za odstranitev: +# ^UnComponentsSubText2 +Ali pa izberite komponente namestitve, ki jih želite odstraniti: +# ^DirText +$(^NameDA) boste namestili v sledeÄo mapo. Za izbiro druge mape kliknite tipko Prebrskaj in izberite drugo mapo. $_CLICK +# ^DirSubText +Ciljna mapa +# ^DirBrowseText +Izberite mapo, kamor želite namestiti $(^NameDA): +# ^UnDirText +Odstranili boste $(^NameDA) iz sledeÄe mape. Za izbiro druge mape kliknite tipko Prebrskaj in izberite drugo mapo. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Izberite mapo, od koder želite odstraniti $(^NameDA): +# ^SpaceAvailable +"Prostor na disku: " +# ^SpaceRequired +"Potreben prostor: " +# ^UninstallingText +$(^NameDA) bo odstranjen iz naslednje mape. $_CLICK +# ^UninstallingSubText +Odstranjevanje iz: +# ^FileError +Napaka pri odpiranju datoteke za pisanje: \r\n\r\n$0\r\n\r\nPritisnite Prekini za prekinitev namestitve,\r\nPonovi za ponoven poskus ali\r\nPrezri za izpust te datoteke. +# ^FileError_NoIgnore +Napaka pri odpiranju datoteke za pisanje: \r\n\r\n$0\r\n\r\nPritisnite Ponovi za ponoven poskus pisanja ali\r\PrekliÄi za prekinitev namestitve. +# ^CantWrite +"Ni mogoÄe pisati: " +# ^CopyFailed +Kopiranje neuspeÅ¡no +# ^CopyTo +"Kopiranje v " +# ^Registering +"Registracija: " +# ^Unregistering +"Preklic registracije: " +# ^SymbolNotFound +"Ni mogoÄe najti simbola: " +# ^CouldNotLoad +"Ni mogoÄe naložiti: " +# ^CreateFolder +"Ustvarjanje mape: " +# ^CreateShortcut +"Ustvarjanje bližnjice: " +# ^CreatedUninstaller +"Ustvarjena odstranitev: " +# ^Delete +"Brisanje datoteke: " +# ^DeleteOnReboot +"Brisanje ob ponovnem zagonu: " +# ^ErrorCreatingShortcut +"Napaka ustvarjanja bližnjice: " +# ^ErrorCreating +"Napaka ustvarjanja: " +# ^ErrorDecompressing +Napaka pri razÅ¡irjanju podatkov! Je namestitvena datoteka okvarjena? +# ^ErrorRegistering +Napaka registracije DLL +# ^ExecShell +"Izvajanje v lupini: " +# ^Exec +"Izvajanje: " +# ^Extract +"RazÅ¡irjanje: " +# ^ErrorWriting +"RazÅ¡irjanje: napaka pri pisanju v datoteko " +# ^InvalidOpcode +Namestitev neveljavna: napaÄen ukaz +# ^NoOLE +"NeobstojeÄi OLE za: " +# ^OutputFolder +"Ciljna mapa: " +# ^RemoveFolder +"Odstranjevanje mape: " +# ^RenameOnReboot +"Preimenovanje ob zagonu: " +# ^Rename +"Preimenovanje: " +# ^Skipped +"IzpuÅ¡Äeno: " +# ^CopyDetails +Kopiraj podrobnosti v odložiÅ¡Äe +# ^LogInstall +Shrani potek namestitve +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Slovenian.nsh b/tools/Contrib/Language files/Slovenian.nsh new file mode 100644 index 0000000..7a77901 --- /dev/null +++ b/tools/Contrib/Language files/Slovenian.nsh @@ -0,0 +1,130 @@ +;Language: Slovenian (1060) +;By Janez Dolinar, edited by Martin Srebotnjak - Lugos.si + +# We use "slovenski", the other alternative is "slovenÅ¡Äina" (Note: "slovenÄina" is the native name of Slovak) +!insertmacro LANGFILE "Slovenian" = "Slovenski" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li v Äarovniku namestitve $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ta Äarovnik vas vodi skozi namestitev programa $(^NameDA).$\r$\n$\r$\nPred namestitvijo je priporoÄeno zapreti vsa ostala okna in programe. S tem omogoÄite nemoteno namestitev programa in potrebnih sistemskih datotek brez ponovnega zagona raÄunalnika.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "DobrodoÅ¡li v Äarovniku za odstranitev $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ta Äarovnik vas bo vodil skozi odstranitev $(^NameDA).$\r$\n$\r$\nPreden priÄnete z odstranitvijo, se prepriÄajte, da program $(^NameDA) ni zagnan.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "LicenÄna pogodba" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Prosimo, da si ogledate pogoje licenÄne pogodbe pred namestitvijo $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "ÄŒe se strinjate s pogoji, pritisnite Se strinjam. Da bi lahko namestili $(^NameDA), se morate s pogodbo strinjati." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "ÄŒe se strinjate z licenÄnimi pogoji pogodbe, spodaj izberite ustrezno okence. Za namestitev $(^NameDA) se morate strinjati s pogoji pogodbe. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ÄŒe se strinjate z licenÄnimi pogoji pogodbe, spodaj izberite prvo možnost. Za namestitev $(^NameDA) se morate strinjati s pogoji pogodbe. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "LicenÄna pogodba" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Prosimo, da pred odstranitvijo $(^NameDA) pregledate pogoje licenÄne pogodbe." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "ÄŒe se strinjate s pogoji licenÄne pogodbe, izberite Se strinjam. Za odstranitev $(^NameDA) se morate strinjati s pogoji." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "ÄŒe se strinjate s pogoji licenÄne pogodbe, kliknite na okence spodaj. Za odstranitev $(^NameDA) se morate strinjati s pogoji. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ÄŒe se strinjate s pogoji licenÄne pogodbe, spodaj izberite prvo podano možnost. Za odstranitev $(^NameDA) se morate strinjati s pogoji. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Za preostali del pogodbe pritisnite tipko 'Page Down'." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Izbor komponent" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Izberite, katere komponente izdelka $(^NameDA) želite namestiti." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Izbor komponent" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Izberite komponente $(^NameDA), ki jih želite odstraniti." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Povlecite miÅ¡ko nad komponento, da vidite njen opis." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Izberite komponento za prikaz njenega opisa." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Izberite pot namestive" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Izberite mapo, v katero želite namestiti $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Izbor mape" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Izberite mapo, iz katere želite odstraniti $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "NameÅ¡Äanje poteka" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Prosimo, poÄakajte, $(^NameDA) se nameÅ¡Äa." + ${LangFileString} MUI_TEXT_FINISH_TITLE "DokonÄana namestitev" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Namestitev je uspeÅ¡no zakljuÄena." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Prekinjena namestitev" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Namestitev ni bila uspeÅ¡no zakljuÄena." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Odstranjevanje poteka" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Prosimo, poÄakajte, dokler se program $(^NameDA) odstranjuje." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Odstranitev konÄana" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Odstranitev je uspeÅ¡no konÄana." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Odstranitev prekinjena" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Odstranitev ni bila konÄana uspeÅ¡no." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "ZakljuÄevanje namestitve $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) je bil nameÅ¡Äen na vaÅ¡ raÄunalnik.$\r$\n$\r$\nPritisnite DokonÄaj za zaprtje Äarovnika." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Za dokonÄanje namestitve $(^NameDA) morate ponovno zagnati raÄunalnik. Želite zdaj ponovno zagnati raÄunalnik?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "ÄŒarovnik za odstranitev $(^NameDA) se zakljuÄuje" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Program $(^NameDA) je odstranjen z vaÅ¡ega raÄunalnika.$\r$\n$\r$\nKliknite DokonÄaj, da zaprete Äarovnika." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Da bi se namestitev $(^NameDA) dokonÄala, morate ponovno zagnati raÄunalnik. Želite zdaj znova zagnati raÄunalnik?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ponovni zagon" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "RaÄunalnik želim znova zagnati kasneje" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Zaženi $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Pokaži BeriMe" + ${LangFileString} MUI_BUTTONTEXT_FINISH "Do&konÄaj" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Izberite mapo menija Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Izberite mapo menija Start za bližnjice do $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Izberite mapo menija Start, kjer želite ustvariti bližnjico do programa. ÄŒe vpiÅ¡ete novo ime, boste ustvarili istoimensko mapo." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ne ustvari bližnjic" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Odstranitev $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Odstrani $(^NameDA) z vaÅ¡ega raÄunalnika." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ste prepriÄani, da želite prekiniti namestitev $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ste prepriÄani, da želite zapustiti odstranitev $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Izberite uporabnike" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Izberite uporabnike, za katere želite namestiti $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Izberite, ali želite namestiti $(^NameDA) le zase ali za vse uporabnike tega raÄunalnika. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Namesti za vse uporabnike tega raÄunalnika" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Namesti le zame" +!endif diff --git a/tools/Contrib/Language files/Spanish.nlf b/tools/Contrib/Language files/Spanish.nlf new file mode 100644 index 0000000..4f6e309 --- /dev/null +++ b/tools/Contrib/Language files/Spanish.nlf @@ -0,0 +1,191 @@ +# Header, don't edit ;Español - España (Alfabetización Tradicional) +NLF v6 +# Language ID +1034 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by MoNKi & Joel +# Review and minor corrections Darwin Rodrigo Toledo Cáceres (niwrad777@gmail.com) www.winamp-es.com +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalación de $(^Name) +# ^UninstallCaption +Desinstalación de $(^Name) +# ^LicenseSubCaption +: Acuerdo de Licencia +# ^ComponentsSubCaption +: Opciones de Instalación +# ^DirSubCaption +: Directorio de Instalación +# ^InstallingSubCaption +: Instalando +# ^CompletedSubCaption +: Completado +# ^UnComponentsSubCaption +: Opciones de Desinstalación +# ^UnDirSubCaption +: Directorio de Desinstalación +# ^ConfirmSubCaption +: Confirmación +# ^UninstallingSubCaption +: Desinstalando +# ^UnCompletedSubCaption +: Completado +# ^BackBtn +< &Atrás +# ^NextBtn +&Siguiente > +# ^AgreeBtn +A&cepto +# ^AcceptBtn +A&cepto los términos de la licencia +# ^DontAcceptBtn +&No acepto los términos de la licencia +# ^InstallBtn +&Instalar +# ^UninstallBtn +&Desinstalar +# ^CancelBtn +Cancelar +# ^CloseBtn +&Cerrar +# ^BrowseBtn +&Examinar... +# ^ShowDetailsBtn +Ver &detalles +# ^ClickNext +Presione Siguiente para continuar. +# ^ClickInstall +Presione Instalar para comenzar la instalación. +# ^ClickUninstall +Presione Desinstalar para comenzar la desinstalación. +# ^Name +Nombre +# ^Completed +Completado +# ^LicenseText +Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si acepta todos los términos del acuerdo, presione Acepto. +# ^LicenseTextCB +Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si acepta todos los términos del acuerdo, marque abajo la casilla. $_CLICK +# ^LicenseTextRB +Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si acepta todos los términos del acuerdo, seleccione abajo la primera opción. $_CLICK +# ^UnLicenseText +Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si acepta todos los términos del acuerdo, presione Acepto. +# ^UnLicenseTextCB +Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si acepta todos los términos del acuerdo, marque abajo la casilla. $_CLICK. +# ^UnLicenseTextRB +Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si acepta todos los términos del acuerdo, seleccione abajo la primera opción. $_CLICK +# ^Custom +Personalizada +# ^ComponentsText +Marque los componentes que desee instalar y desmarque los componentes que no desee instalar. $_CLICK +# ^ComponentsSubText1 +Tipos de instalación: +# ^ComponentsSubText2_NoInstTypes +Seleccione los componentes a instalar: +# ^ComponentsSubText2 +O seleccione los componentes opcionales que desee instalar: +# ^UnComponentsText +Marque los componentes que desee desinstalar y desmarque los componentes que no desee desinstalar. $_CLICK +# ^UnComponentsSubText1 +Tipos de desinstalación: +# ^UnComponentsSubText2_NoInstTypes +Seleccione los componentes a desinstalar: +# ^UnComponentsSubText2 +O seleccione los componentes opcionales que desee desinstalar: +# ^DirText +El programa de instalación instalará $(^NameDA) en el siguiente directorio. Para instalar en un directorio diferente, presione Examinar y seleccione otro directorio. $_CLICK +# ^DirSubText +Directorio de Destino +# ^DirBrowseText +Seleccione el directorio en el que instalará $(^NameDA): +# ^UnDirText +El programa de instalación desinstalará $(^NameDA) del siguiente directorio. Para desinstalar de un directorio diferente, presione Examinar y seleccione otro directorio. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Seleccione el directorio desde el cual desinstalará $(^NameDA): +# ^SpaceAvailable +Espacio disponible: +# ^SpaceRequired +Espacio requerido: +# ^UninstallingText +$(^NameDA) será desinstalado del siguiente directorio. $_CLICK +# ^UninstallingSubText +Desinstalando desde: +# ^FileError +Error abriendo archivo para escritura: \r\n\t"$0"\r\nPresione abortar para anular la instalación,\r\nreintentar para volver a intentar escribir el archivo, u\r\nomitir para ignorar este archivo +# ^FileError_NoIgnore +Error abriendo archivo para escritura: \r\n\t"$0"\r\nPresione reintentar para volver a intentar escribir el archivo, o\r\ncancelar para anular la instalación +# ^CantWrite +"No pudo escribirse: " +# ^CopyFailed +Falló la copia +# ^CopyTo +"Copiar a " +# ^Registering +"Registrando: " +# ^Unregistering +"Eliminando registro: " +# ^SymbolNotFound +"No pudo encontrarse símbolo: " +# ^CouldNotLoad +"No pudo cargarse: " +# ^CreateFolder +"Creando directorio: " +# ^CreateShortcut +"Creando acceso directo: " +# ^CreatedUninstaller +"Creando desinstalador: " +# ^Delete +"Borrar archivo: " +# ^DeleteOnReboot +"Borrar al reinicio: " +# ^ErrorCreatingShortcut +"Error creando acceso directo: " +# ^ErrorCreating +"Error creando: " +# ^ErrorDecompressing +¡Error descomprimiendo datos! ¿Instalador corrupto? +# ^ErrorRegistering +Error registrando DLL +# ^ExecShell +"Extrayendo comando: " +# ^Exec +"Extrayendo : " +# ^Extract +"Extraer: " +# ^ErrorWriting +"Extraer: error escribiendo al archivo " +# ^InvalidOpcode +Instalador corrupto: código de operación no válido +# ^NoOLE +"Sin OLE para: " +# ^OutputFolder +"Directorio de salida: " +# ^RemoveFolder +"Eliminar directorio: " +# ^RenameOnReboot +"Renombrar al reinicio: " +# ^Rename +"Renombrar: " +# ^Skipped +"Omitido: " +# ^CopyDetails +Copiar Detalles al Portapapeles +# ^LogInstall +Registrar proceso de instalación +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Spanish.nsh b/tools/Contrib/Language files/Spanish.nsh new file mode 100644 index 0000000..679a426 --- /dev/null +++ b/tools/Contrib/Language files/Spanish.nsh @@ -0,0 +1,130 @@ +;Language: Spanish (1034) +;By MoNKi & Joel +;Updates & Review Darwin Rodrigo Toledo Cáceres - www.winamp-es.com - niwrad777@gmail.com + +!insertmacro LANGFILE "Spanish" = "Español" "Espanol" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bienvenido al Asistente de Instalación de $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Este programa instalará $(^NameDA) en su ordenador.$\r$\n$\r$\nSe recomienda que cierre todas las demás aplicaciones antes de iniciar la instalación. Esto hará posible actualizar archivos relacionados con el sistema sin tener que reiniciar su ordenador.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bienvenido al Asistente de Desinstalación de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la desinstalación de $(^NameDA).$\r$\n$\r$\nAntes de comenzar la desinstalación, asegúrese de que $(^NameDA) no se está ejecutando.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Acuerdo de licencia" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Por favor revise los términos de la licencia antes de instalar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Si acepta todos los términos del acuerdo, seleccione Acepto para continuar. Debe aceptar el acuerdo para instalar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si acepta los términos del acuerdo, marque abajo la casilla. Debe aceptar los términos para instalar $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si acepta los términos del acuerdo, seleccione abajo la primera opción. Debe aceptar los términos para instalar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Acuerdo de licencia" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Por favor revise los términos de la licencia antes de desinstalar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Si acepta todos los términos del acuerdo, seleccione Acepto para continuar. Debe aceptar el acuerdo para desinstalar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si acepta los términos del acuerdo, marque abajo la casilla. Debe aceptar los términos para desinstalar $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si acepta los términos del acuerdo, seleccione abajo la primera opción. Debe aceptar los términos para desinstalar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Presione Avanzar Página para ver el resto del acuerdo." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selección de componentes" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Seleccione qué características de $(^NameDA) desea instalar." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selección de componentes" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Seleccione qué características de $(^NameDA) desea desinstalar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Sitúe el ratón encima de un componente para ver su descripción." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Seleccione un componente para ver su descripción." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Elegir lugar de instalación" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Elija el directorio para instalar $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Elegir lugar de desinstalación" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Elija el directorio desde el cual se desinstalará $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalando" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Por favor espere mientras $(^NameDA) se instala." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalación Completada" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "La instalación se ha completado correctamente." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalación Anulada" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "La instalación no se completó correctamente." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor espere mientras $(^NameDA) se desinstala." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstalación Completada" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La desinstalación se ha completado correctamente." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstalación Anulada" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La desinstalación no se completó correctamente." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Completando el Asistente de Instalación de $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ha sido instalado en su sistema.$\r$\n$\r$\nPresione Terminar para cerrar este asistente." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Su sistema debe ser reiniciado para que pueda completarse la instalación de $(^NameDA). ¿Desea reiniciar ahora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completando el Asistente de Desinstalación de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ha sido desinstalado de su sistema.$\r$\n$\r$\nPresione Terminar para cerrar este asistente." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Su ordenador debe ser reiniciado para completar la desinstalación de $(^NameDA). ¿Desea reiniciar ahora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reiniciar ahora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Deseo reiniciar manualmente más tarde" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Ejecutar $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Ver Léame" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Terminar" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Elegir Carpeta del Menú Inicio" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Elija una Carpeta del Menú Inicio para los accesos directos de $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Seleccione una carpeta del Menú Inicio en la que quiera crear los accesos directos del programa. También puede introducir un nombre para crear una nueva carpeta." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "No crear accesos directos" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstalar $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Elimina $(^NameDA) de su sistema." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "¿Está seguro de que desea salir de la instalación de $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "¿Está seguro de que desea salir de la desinstalación de $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Elegir Usuarios" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Elija los usuarios para los cuales Ud. desea instalar $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Seleccione si desea instalar $(^NameDA) sólo para Ud. o para todos los usuarios de este Ordenador.$(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instación para cualquier usuario de este ordenador" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalación solo para mí" +!endif diff --git a/tools/Contrib/Language files/SpanishInternational.nlf b/tools/Contrib/Language files/SpanishInternational.nlf new file mode 100644 index 0000000..281c576 --- /dev/null +++ b/tools/Contrib/Language files/SpanishInternational.nlf @@ -0,0 +1,191 @@ +# Header, don't edit ;Español (Alfabetización Internacional) +NLF v6 +# Language ID +3082 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Darwin Rodrigo Toledo Cáceres - www.winamp-es.com - nwrad777@gmail.com +# Base traslation by MoNKi & Joel +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Instalación de $(^Name) +# ^UninstallCaption +Desinstalación de $(^Name) +# ^LicenseSubCaption +: Acuerdo de Licencia +# ^ComponentsSubCaption +: Opciones de Instalación +# ^DirSubCaption +: Carpeta de Instalación +# ^InstallingSubCaption +: Instalando +# ^CompletedSubCaption +: Finalizado +# ^UnComponentsSubCaption +: Opciones de Desinstalación +# ^UnDirSubCaption +: Carpeta de Desinstalación +# ^ConfirmSubCaption +: Confirmación +# ^UninstallingSubCaption +: Desinstalando +# ^UnCompletedSubCaption +: Finalizado +# ^BackBtn +< &Atrás +# ^NextBtn +&Siguiente > +# ^AgreeBtn +&Acepto +# ^AcceptBtn +&Acepto las condiciones del Acuerdo de Licencia +# ^DontAcceptBtn +No &acepto las condiciones del Acuerdo de Licencia +# ^InstallBtn +&Instalar +# ^UninstallBtn +&Desinstalar +# ^CancelBtn +Cancelar +# ^CloseBtn +&Cerrar +# ^BrowseBtn +&Examinar... +# ^ShowDetailsBtn +Mostrar &detalles +# ^ClickNext +Presione Siguiente para continuar. +# ^ClickInstall +Presione Instalar para iniciar la instalación. +# ^ClickUninstall +Presione Desinstalar para iniciar la desinstalación. +# ^Name +Nombre +# ^Completed +Finalizado +# ^LicenseText +Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si usted acepta todas las condiciones del acuerdo, presione Acepto. +# ^LicenseTextCB +Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si usted acepta todas las condiciones del acuerdo, marque abajo la casilla. $_CLICK +# ^LicenseTextRB +Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si usted acepta todas las condiciones del acuerdo, seleccione abajo la primera opción. $_CLICK +# ^UnLicenseText +Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si usted acepta todas las condiciones del acuerdo, presione Acepto. +# ^UnLicenseTextCB +Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si usted acepta todas las condiciones del acuerdo, marque abajo la casilla. $_CLICK +# ^UnLicenseTextRB +Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si usted acepta todas las condiciones del acuerdo, seleccione abajo la primera opción. $_CLICK +# ^Custom +Personalizada +# ^ComponentsText +Marque los componentes que desee instalar y desmarque los componentes que no desee instalar. $_CLICK +# ^ComponentsSubText1 +Seleccione el tipo de instalación: +# ^ComponentsSubText2_NoInstTypes +Seleccione los componentes a instalar: +# ^ComponentsSubText2 +O seleccione los componentes opcionales que desee instalar: +# ^UnComponentsText +Marque los componentes que desee desinstalar y desmarque los componentes que no desee desinstalar. $_CLICK +# ^UnComponentsSubText1 +Seleccione el tipo de desinstalación: +# ^UnComponentsSubText2_NoInstTypes +Seleccione los componentes a desinstalar: +# ^UnComponentsSubText2 +O seleccione los componentes opcionales que desee desinstalar: +# ^DirText +El programa de instalación instalará $(^NameDA) en la siguiente carpeta. Para instalar en una carpeta diferente, presione Examinar y seleccione otra carpeta. $_CLICK +# ^DirSubText +Carpeta de Destino +# ^DirBrowseText +Seleccione la carpeta en la que instalará $(^NameDA): +# ^UnDirText +El programa de instalación desinstalará $(^NameDA) de la siguiente carpeta. Para desinstalar de una carpeta diferente, presione Examinar y seleccione otra carpeta. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Seleccione la carpeta desde la que desinstalará $(^NameDA): +# ^SpaceAvailable +Espacio disponible: +# ^SpaceRequired +Espacio requerido: +# ^UninstallingText +$(^NameDA) será desinstalado de la siguiente carpeta. $_CLICK +# ^UninstallingSubText +Desinstalando desde: +# ^FileError +Error abriendo archivo para escribir: \r\n\r\n$0\r\n\r\nPresione Abortar para detener la instalación,\r\nReintentar para probar otra vez, o\r\nOmitir para ignorar este archivo. +# ^FileError_NoIgnore +Error abriendo archivo para escribir: \r\n\r\n$0\r\n\r\nPresione Reintentar para probar otra vez, o\r\nCancelar para detener la instalación. +# ^CantWrite +"No pudo escribirse: " +# ^CopyFailed +Copia fallida +# ^CopyTo +"Copiar a " +# ^Registering +"Registrando: " +# ^Unregistering +"Eliminando registro: " +# ^SymbolNotFound +"No se encontró simbolo: " +# ^CouldNotLoad +"No pudo cargarse: " +# ^CreateFolder +"Creando carpeta: " +# ^CreateShortcut +"Creando acceso directo: " +# ^CreatedUninstaller +"Creando desinstalador: " +# ^Delete +"Borrar archivo: " +# ^DeleteOnReboot +"Borrar al reinicio: " +# ^ErrorCreatingShortcut +"Error creando acceso directo: " +# ^ErrorCreating +"Error creando: " +# ^ErrorDecompressing +¡Error descomprimiendo datos! ¿Instalador corrupto? +# ^ErrorRegistering +Error registrando DLL +# ^ExecShell +"Ejecutando comando: " +# ^Exec +"Ejecutando: " +# ^Extract +"Extrayendo: " +# ^ErrorWriting +"Extrayendo: error escribiendo al archivo " +# ^InvalidOpcode +Instalador corrupto: código de operación no válido +# ^NoOLE +"Sin OLE para: " +# ^OutputFolder +"Carpeta de salida: " +# ^RemoveFolder +"Eliminar carpeta: " +# ^RenameOnReboot +"Renombrar al reinicio: " +# ^Rename +"Renombrar: " +# ^Skipped +"Omitido: " +# ^CopyDetails +Copiar Detalles al Portapapeles +# ^LogInstall +Registrar proceso de instalación +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/SpanishInternational.nsh b/tools/Contrib/Language files/SpanishInternational.nsh new file mode 100644 index 0000000..24140c5 --- /dev/null +++ b/tools/Contrib/Language files/SpanishInternational.nsh @@ -0,0 +1,130 @@ +;Language: Spanish International (3082) +;By Darwin Rodrigo Toledo Cáceres - www.winamp-es.com - niwrad777@gmail.com +;Base by Monki y Joel + +!insertmacro LANGFILE "SpanishInternational" "Spanish (International)" "Español (Alfabetización Internacional)" "Espanol (Alfabetizacion Internacional)" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Bienvenido al Asistente de Instalación de $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Este asistente le guiará a través de la instalación de $(^NameDA).$\r$\n$\r$\nSe recomienda que cierre todas la demás aplicaciones antes de iniciar la instalación. Esto hará posible actualizar archivos de sistema sin tener que reiniciar su computadora.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Bienvenido al Asistente de Desinstalación de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la desinstalación de $(^NameDA).$\r$\n$\r$\nAntes de iniciar la desinstalación, asegúrese de que $(^NameDA) no se está ejecutando.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Acuerdo de licencia" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Por favor revise el acuerdo de licencia antes de instalar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Si acepta todas las condiciones del acuerdo, seleccione Acepto para continuar. Debe aceptar el acuerdo para instalar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si acepta las condiciones del acuerdo, marque abajo la casilla. Debe aceptar las condiciones para instalar $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si acepta las condiciones del acuerdo, seleccione abajo la primera opción. Debe aceptar las condiciones para instalar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Acuerdo de licencia" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Por favor revise el acuerdo de licencia antes de desinstalar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Si acepta todas las condiciones del acuerdo, seleccione Acepto para continuar. Debe aceptar el acuerdo para desinstalar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si acepta los términos del acuerdo, marque abajo la casilla. Debe aceptar los términos para desinstalar $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si acepta los términos del acuerdo, seleccione abajo la primera opción. Debe aceptar los términos para desinstalar $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Presione Avanzar Página para ver el resto del acuerdo." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selección de componentes" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Seleccione qué características de $(^NameDA) desea instalar." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selección de componentes" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Seleccione qué características de $(^NameDA) desea desinstalar." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Sitúe el ratón encima de un componente para ver su descripción." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Seleccione un componente para ver su descripción." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Elegir lugar de instalación" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Elija la carpeta para instalar $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Elegir lugar de desinstalación" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Elija la carpeta desde la cual desinstalará $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalando" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Por favor espere mientras $(^NameDA) se instala." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalación Finalizada" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "La instalación se ha finalizado correctamente." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalación Abortada" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "La instalación no se terminó correctamente." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor espere mientras $(^NameDA) se desinstala." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Desinstalación Finalizada" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La desinstalación se ha finalizado correctamente." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Desinstalación Abortada" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "La desinstalación no se terminó correctamente." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Finalizando el Asistente de Instalación de $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ha sido instalado en su sistema.$\r$\n$\r$\nPresione Terminar para cerrar este asistente." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Su sistema debe ser reiniciado para poder finalizar la instalación de $(^NameDA). ¿Desea reiniciar ahora?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completando el Asistente de Desinstalación de $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ha sido desinstalado de su sistema.$\r$\n$\r$\nPresione Terminar para cerrar este asistente." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Su computadora debe ser reiniciada para finalizar la desinstalación de $(^NameDA). ¿Desea reiniciar ahora?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reiniciar ahora" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Deseo reiniciar manualmente más tarde" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Ejecutar $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Mostrar Léame" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Terminar" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Elegir Carpeta del Menú Inicio" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Elija una Carpeta del Menú Inicio para los accesos directos de $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Seleccione una carpeta del Menú Inicio en la que quiera crear los accesos directos del programa. También puede introducir un nombre para crear una nueva carpeta." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "No crear accesos directos" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Desinstalar $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Elimina $(^NameDA) de su sistema." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "¿Está seguro de que desea salir de la instalación de $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "¿Está seguro de que desea salir de la desinstalación de $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Elegir Usuarios" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Elija los usuarios para los cuales Ud. desea instalar $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Elija una opción si desea instalar $(^NameDA) para sólo para Ud., o para todos los usuarios de esta computadora.$(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Instación para cualquier usuario de esta computadora" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Instalación solo para mí" +!endif diff --git a/tools/Contrib/Language files/Swedish.nlf b/tools/Contrib/Language files/Swedish.nlf new file mode 100644 index 0000000..87b9122 --- /dev/null +++ b/tools/Contrib/Language files/Swedish.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1053 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Magnus Bonnevier (magnus.bonnevier@telia.com) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Installation +# ^UninstallCaption +$(^Name) Avinstallation +# ^LicenseSubCaption +: Licensavtal +# ^ComponentsSubCaption +: Installationsval +# ^DirSubCaption +: Installationskatalog +# ^InstallingSubCaption +: Installerar +# ^CompletedSubCaption +: Slutförd +# ^UnComponentsSubCaption +: Avinstallationsval +# ^UnDirSubCaption +: Avinstallationskatalog +# ^ConfirmSubCaption +: Bekräftelse +# ^UninstallingSubCaption +: Avinstallerar +# ^UnCompletedSubCaption +: Slutförd +# ^BackBtn +< &Tillbaka +# ^NextBtn +&Nästa > +# ^AgreeBtn +Jag &Godkänner +# ^AcceptBtn +Jag &Godkänner villkoren i licensavtalet +# ^DontAcceptBtn +Jag &Godkänner inte villkoren i licensavtalet +# ^InstallBtn +&Installera +# ^UninstallBtn +&Avinstallera +# ^CancelBtn +Avbryt +# ^CloseBtn +&Stäng +# ^BrowseBtn +B&läddra... +# ^ShowDetailsBtn +Visa &detaljer +# ^ClickNext +Klicka pÃ¥ Nästa för att fortsätta. +# ^ClickInstall +Klicka pÃ¥ Installera för att starta installationen. +# ^ClickUninstall +Klicka pÃ¥ Avinstallera för att starta avinstallationen. +# ^Name +Namn +# ^Completed +Slutförd +# ^LicenseText +Var vänlig läs igenom licensvillkoren innan du installerar $(^NameDA). Om du accepterar villkoren i avtalet, klicka Jag Godkänner. +# ^LicenseTextCB +Var vänlig läs igenom licensvillkoren innan du installerar $(^NameDA). Om du accepterar villkoren i avtalet, klicka i checkrutan nedan. $_CLICK +# ^LicenseTextRB +Var vänlig läs igenom licensvillkoren innan du installerar $(^NameDA). Om du accepterar villkoren i avtalet, välj det första alternativet nedan. $_CLICK +# ^UnLicenseText +Var vänlig läs igenom licensvillkoren innan du avinstallerar $(^NameDA). Om du accepterar villkoren i avtalet, klicka Jag Godkänner. +# ^UnLicenseTextCB +Var vänlig läs igenom licensvillkoren innan du avinstallerar $(^NameDA). Om du accepterar villkoren i avtalet, klicka i checkrutan nedan. $_CLICK +# ^UnLicenseTextRB +Var vänlig läs igenom licensvillkoren innan du avinstallerar $(^NameDA). Om du accepterar villkoren i avtalet, välj det första alternativet nedan. $_CLICK +# ^Custom +Valfri +# ^ComponentsText +Markera de komponenter du vill installera och avmarkera de komponenter du inte vill installera. $_CLICK +# ^ComponentsSubText1 +Välj typ av installation: +# ^ComponentsSubText2_NoInstTypes +Välj komponenter att installera: +# ^ComponentsSubText2 +Eller, välj de alternativa komponenter du önskar installera: +# ^UnComponentsText +Markera de komponenter du vill avinstallera och avmarkera de komponenter du inte vill avinstallera. $_CLICK +# ^UnComponentsSubText1 +Välj typ av avinstallation: +# ^UnComponentsSubText2_NoInstTypes +Välj komponenter att avinstallera: +# ^UnComponentsSubText2 +Eller, välj de alternativa komponenter du önskar avinstallera: +# ^DirText +Guiden kommer att installera $(^NameDA) i följande katalog. För att installera i en annan katalog, klicka Bläddra och välj en alternativ katalog. $_CLICK +# ^DirSubText +MÃ¥lkatalog +# ^DirBrowseText +Välj katalog att installera $(^NameDA) i: +# ^UnDirText +Installationsguiden kommer att avinstallera $(^NameDA) frÃ¥n följande katalog. För att avinstallera frÃ¥n en annan katalog, klicka Bläddra och välj en annan katalog. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Välj katalog att avinstallera $(^NameDA) frÃ¥n: +# ^SpaceAvailable +"Utrymme tillgängligt: " +# ^SpaceRequired +"Utrymme som behövs: " +# ^UninstallingText +$(^NameDA) kommer att avinstalleras frÃ¥n följande katalog. $_CLICK +# ^UninstallingSubText +Avinstallerar frÃ¥n: +# ^FileError +Fel vid Öppning av fil för skrivning: \r\n\t"$0"\r\nKlicka pÃ¥ avbryt för att avbryta installationen,\r\nförsök igen för att försöka skriva till filen igen, eller\r\nIgnorera för att skippa denna fil +# ^FileError_NoIgnore +Fel vid Öppning av fil för skrivning: \r\n\t"$0"\r\nKlicka pÃ¥ försök igen för att skriva till filen igen, eller\r\navbryt för att avbryta installationen +# ^CantWrite +"Kan inte skriva: " +# ^CopyFailed +Kopiering misslyckades +# ^CopyTo +"Kopiera till " +# ^Registering +"Registrerar: " +# ^Unregistering +"Avregistrerar: " +# ^SymbolNotFound +"Kunde inte hitta symbol: " +# ^CouldNotLoad +"Kunde inte ladda: " +# ^CreateFolder +"Skapa katalog: " +# ^CreateShortcut +"Skapa genväg: " +# ^CreatedUninstaller +"Skapade avinstallationsprogram: " +# ^Delete +"Radera fil: " +# ^DeleteOnReboot +"Radera vid omstart: " +# ^ErrorCreatingShortcut +"Fel vid skapande av genväg: " +# ^ErrorCreating +"Fel vid skapande: " +# ^ErrorDecompressing +Fel vid uppackning av data! Skadat installationspaket? +# ^ErrorRegistering +Fel vid registrering av DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Kör: " +# ^Extract +"Extrahera: " +# ^ErrorWriting +"Extrahera: fel vid skrivning till fil " +# ^InvalidOpcode +Installationspaket skadat: ogiltig opcode +# ^NoOLE +"Ingen OLE för: " +# ^OutputFolder +"MÃ¥lkatalog: " +# ^RemoveFolder +"Ta bort katalog: " +# ^RenameOnReboot +"Döp om vid omstart: " +# ^Rename +"Döp om: " +# ^Skipped +"Ignorerad: " +# ^CopyDetails +Kopiera detaljinformation till klippbordet +# ^LogInstall +Logga installationsförfarandet +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Swedish.nsh b/tools/Contrib/Language files/Swedish.nsh new file mode 100644 index 0000000..b8eb9cd --- /dev/null +++ b/tools/Contrib/Language files/Swedish.nsh @@ -0,0 +1,130 @@ +;Compatible with Modern UI 1.72 +;Language: Swedish (1053) +;By Magnus Bonnevier (magnus.bonnevier@telia.com), updated by Rickard Angbratt (r.angbratt@home.se), updated by Ulf Axelsson (ulf.axelsson@gmail.com) + +!insertmacro LANGFILE "Swedish" = "Svenska" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Välkommen till installationsguiden för $(^NameDA)." + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Denna guide tar dig igenom installationen av $(^NameDA).$\r$\n$\r$\nDet rekommenderas att du avslutar alla andra program innan du fortsätter installationen. Detta tillÃ¥ter att installationen uppdaterar nödvändiga systemfiler utan att behöva starta om din dator.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Välkommen till avinstallationsguiden för $(^NameDA)." + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Denna guide tar dig igenom avinstallationen av $(^NameDA).$\r$\n$\r$\nInnan du startar avinstallationen, försäkra dig om att $(^NameDA) inte körs.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licensavtal" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Var vänlig läs igenom licensvillkoren innan du installerar $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Om du accepterar villkoren i avtalet, klicka Jag Godkänner för att fortsätta. Du mÃ¥ste acceptera avtalet för att installera $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Om du accepterar villkoren i avtalet, klicka i checkrutan nedan. Du mÃ¥ste acceptera avtalet för att installera $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Om du accepterar villkoren i avtalet, välj det första alternativet nedan. Du mÃ¥ste acceptera avtalet för att installera $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licensavtal" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Var vänlig läs igenom licensvillkoren innan du avinstallerar $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Om du accepterar villkoren i avtalet, klicka Jag Godkänner för att fortsätta. Du mÃ¥ste acceptera avtalet för att avinstallera $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Om du accepterar villkoren i avtalet, klicka i checkrutan nedan. Du mÃ¥ste acceptera avtalet för att avinstallera $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Om du accepterar villkoren i avtalet, välj det första alternativet nedan. Du mÃ¥ste acceptera avtalet för att avinstallera $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tryck Page Down för att se resten av licensavtalet." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Välj komponenter" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Välj vilka alternativ av $(^NameDA) som du vill installera." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Välj komponenter" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Välj vilka alternativ av $(^NameDA) som du vill avinstallera." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivning" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "HÃ¥ll muspekaren över ett alternativ för att se dess beskrivning." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Välj ett alternativ för att se dess beskrivning." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Välj installationsväg" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Välj katalog att installera $(^NameDA) i." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Välj avinstallationsväg" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Välj katalog att avinstallera $(^NameDA) frÃ¥n." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installerar" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Var vänlig vänta medan $(^NameDA) installeras." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Installationen är klar" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Guiden avslutades korrekt." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Installationen avbröts" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Guiden genomfördes inte korrekt." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Avinstallerar" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Var vänlig vänta medan $(^NameDA) avinstalleras." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Avinstallationen genomförd" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Avinstallationen genomfördes korrekt." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Avinstallationen avbruten" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Avinstallationen genomfördes inte korrekt." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Avslutar installationsguiden för $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) har installerats pÃ¥ din dator.$\r$\n$\r$\nKlicka pÃ¥ Slutför för att avsluta guiden." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Din dator mÃ¥ste startas om för att fullborda installationen av $(^NameDA). Vill du starta om nu?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Avslutar avinstallationsguiden för $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) komponenter har avinstallerats frÃ¥n din dator.$\r$\n$\r$\nKlicka pÃ¥ Slutför för att avsluta guiden." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Din dator mÃ¥ste startas om för att fullborda avinstallationen av $(^NameDA). Vill du starta om nu?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Starta om nu" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Jag vill starta om själv senare" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Kör $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Visa Readme-filen" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Slutför" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Välj Startmenykatalog" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Välj en Startmenykatalog för programmets genvägar." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Välj startmenykatalog i vilken du vill skapa programmets genvägar. Du kan ange ett eget namn för att skapa en ny katalog." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Skapa ej genvägar" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Avinstallera $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Ta bort $(^NameDA) frÃ¥n din dator." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Är du säker pÃ¥ att du vill avbryta installationen av $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Är du säker pÃ¥ att du vill avbryta avinstallationen av $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Välj användare" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Välj för vilka användare du vill installera $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Välj huruvida du vill installera $(^NameDA) enbart för dig själv eller för alla användare pÃ¥ denna dator. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Installera för alla som använder denna dator" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Installera bara för mig" +!endif diff --git a/tools/Contrib/Language files/Tatar.nlf b/tools/Contrib/Language files/Tatar.nlf new file mode 100644 index 0000000..aaf11bd --- /dev/null +++ b/tools/Contrib/Language files/Tatar.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1092 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- +# Translation by Bulat Azat uly [ bulat_ibrahim@mail.ru ] +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Урнаштыру $(^Name) +# ^UninstallCaption +Бетерү $(^Name) +# ^LicenseSubCaption +: Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ +# ^ComponentsSubCaption +: Урнаштыру шартлары +# ^DirSubCaption +: Урнаштыру папкаÑÑ‹ +# ^InstallingSubCaption +: Файлларны күчермәләү +# ^CompletedSubCaption +: Гамәл тәмамланды +# ^UnComponentsSubCaption +: Бетерү шартлары +# ^UnDirSubCaption +: Бетерү папкаÑÑ‹ +# ^ConfirmSubCaption +: РаÑлау +# ^UninstallingSubCaption +: Файлларны бетерү +# ^UnCompletedSubCaption +: Гамәл тәмамланды +# ^BackBtn +< &Ðртка +# ^NextBtn +&Ðлга > +# ^AgreeBtn +Кабул ит&әм +# ^AcceptBtn +Мин &килешү шартларын кабул итәм +# ^DontAcceptBtn +Мин &килешү шартларын кабул итими +# ^InstallBtn +&Урнаштырырга +# ^UninstallBtn +Бе&терергә +# ^CancelBtn +Баш тарту +# ^CloseBtn +&Ябарга +# ^BrowseBtn +К&арарга... +# ^ShowDetailsBtn +&Тулырак... +# ^ClickNext +Дәвам итү өчен 'Ðлга' төймәÑенә баÑыгыз. +# ^ClickInstall +Программаны урнаштыру өчен 'Урнаштырырга' төймәÑенә баÑыгыз. +# ^ClickUninstall +Программаны бетерү өчен 'Бетерергә' төймәÑенә баÑыгыз. +# ^Name +ИÑем +# ^Completed +Әзер +# ^LicenseText +$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз. Килешү шартларын кабул итÑәгез, 'Кабул итәм' төймәÑенә баÑыгыз. +# ^LicenseTextCB +$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз. Килешү шартларын кабул итÑәгез, түбәндә билге куегыз. $_CLICK +# ^LicenseTextRB +$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз. Килешү шартларын кабул итÑәгез, түбәндәге вариантлардан беренчеÑен Ñайлагыз. $_CLICK +# ^UnLicenseText +$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз. Килешү шартларын кабул итÑәгез, 'Кабул итәм' төймәÑенә баÑыгыз. +# ^UnLicenseTextCB +$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз. Килешү шартларын кабул итÑәгез, түбәндә билге куегыз. $_CLICK +# ^UnLicenseTextRB +$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз. Килешү шартларын кабул итÑәгез, түбәндәге вариантлардан беренчеÑен Ñайлагыз. $_CLICK +# ^Custom +Сайлап кына +# ^ComponentsText +Программаның урнаштырырга теләгән компонентларын Ñайлагыз. $_CLICK +# ^ComponentsSubText1 +Урнаштыру төрен Ñайлагыз: +# ^ComponentsSubText2_NoInstTypes +Урнаштыру өчен программаның компонентларын Ñайлагыз: +# ^ComponentsSubText2 +Ñки урнаштыру өчен Ó©Ñтәмә компонентлар Ñайлагыз: +# ^UnComponentsText +Бетерергә теләгән компонентларны Ñайлагыз. $_CLICK +# ^UnComponentsSubText1 +Бетерү төрен Ñайлагыз: +# ^UnComponentsSubText2_NoInstTypes +Бетерү өчен компонентларны Ñайлагыз: +# ^UnComponentsSubText2 +Ñки бетерү өчен Ó©Ñтәмә компонентларны Ñайлагыз: +# ^DirText +Программа $(^NameDA) программаÑын күрÑәтерлән папкага урнаштырачак. Башка папкага урнаштыру өчен, 'Карарга' төймәÑенә баÑыгыз һәм урын күрÑәтегез. $_CLICK +# ^DirSubText +Урнаштыру папкаÑÑ‹ +# ^DirBrowseText +$(^NameDA) урнаштыру өчен папка Ñайлагыз: +# ^UnDirText +Программа $(^NameDA) программаÑын күрÑәтелгән папкадан бетерәчәк. Башка папкадан бетерү өчен, 'Карарга' төймәÑенә баÑыгыз һәм урын күрÑәтегез. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA) бетерергә кирәк булган папканы күрÑәтегез: +# ^SpaceAvailable +"ДиÑкта буш урын: " +# ^SpaceRequired +"ДиÑкта кирәк урын: " +# ^UninstallingText +$(^NameDA) программаÑÑ‹ Ñанагыгыздан бетереләчәк. $_CLICK +# ^UninstallingSubText +Моннан бетерү: +# ^FileError +Яздыру өчен файлны ачып булмый: \r\n\t"$0"\r\n'Туктату': урнаштыруны туктатырга;\r\n"Кабатлау": омтылышны кабатларга;\r\n"Калдыру": бу гамәлне төшереп калдырырга. +# ^FileError_NoIgnore +Яздыру өчен файлны ачып булмый: \r\n\t"$0"\r\n'Кабатлау': омтылышны кабатларга;\r\n'Баш тарту': урнаштыру барышын туктатырга. +# ^CantWrite +"Яздырып булмый: " +# ^CopyFailed +Күчермә ÑÑауда хата +# ^CopyTo +"Монда күчермәләү: " +# ^Registering +"Теркәлү: " +# ^Unregistering +"Теркәүдән баш тарту: " +# ^SymbolNotFound +"Символны табып булмый: " +# ^CouldNotLoad +"Йөкләп булмый: " +# ^CreateFolder +"Папка ÑÑау: " +# ^CreateShortcut +"Сылтама ÑÑау: " +# ^CreatedUninstaller +"Бетерү программаÑын ÑÑау: " +# ^Delete +"Файлны бетерү: " +# ^DeleteOnReboot +"Санак Ñүндереп кабызылганда бетерү: " +# ^ErrorCreatingShortcut +"Сылтама ÑÑауда хата: " +# ^ErrorCreating +"ЯÑауда хата: " +# ^ErrorDecompressing +Мәгълүматларны чыгаруда хата! Урнаштыручы бозык булуы мөмкин. +# ^ErrorRegistering +DLL теркәүдә хата +# ^ExecShell +"Тышча командаÑын башкару: " +# ^Exec +"Башкару: " +# ^Extract +"Чыгару: " +# ^ErrorWriting +"Чыгару: файл Ñздыруда хата " +# ^InvalidOpcode +Урнаштыручы бозылган: мөмкин булмаган код +# ^NoOLE +"OLE моның өчен юк: " +# ^OutputFolder +"Урнаштыру папкаÑÑ‹: " +# ^RemoveFolder +"Папканы бетерү: " +# ^RenameOnReboot +"Санак Ñүндереп кабызылганда иÑемен үзгәртү: " +# ^Rename +"ИÑемен үзгәртү: " +# ^Skipped +"Калдыру: " +# ^CopyDetails +Мәгълүматларны алмашыну буферына күчермәләргә +# ^LogInstall +Урнаштыру хиÑабын алып барырга +# byte (байт) +б +# kilo + К +# mega + Ðœ +# giga + Г \ No newline at end of file diff --git a/tools/Contrib/Language files/Tatar.nsh b/tools/Contrib/Language files/Tatar.nsh new file mode 100644 index 0000000..a42d365 --- /dev/null +++ b/tools/Contrib/Language files/Tatar.nsh @@ -0,0 +1,129 @@ +;Language: Tatar (1092) +;Translation by Bulat Azat uly [bulat_ibrahim@mail.ru] + +!insertmacro LANGFILE "Tatar" = "Татарча" "Tatarcha" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) урнаштыручыга рәхим итегез" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Бу программа $(^NameDA) программаÑын Ñанагыгызга урнаштырыр.$\r$\n$\r$\nУрнаштыру алдыннан бөтен ачык кушымталарны Ñбарга тәкъдим ителә. Бу урнаштыру программаÑына ÑиÑтема файлларын Ñанакны Ñүндереп кабызмыйча Ñңартырга мөмкинлек бирә.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) бетерүчегә рәхим итегез" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Бу программа $(^NameDA) программаÑын Ñанагыгыздан бетерер.$\r$\n$\r$\nДәвам итү алдыннан $(^NameDA) җибәрелмәгәнлеген тикшерегез.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA) урнаштыру алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Килешү шартларын кабул итÑәгез, $\"Кабул итәм$\" төймәÑенә баÑыгыз. $(^NameDA) урнаштыру өчен, килешүне кабул итәргә кирәк." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Килешү шартларын кабул итÑәгез, түбәндә билге куегыз. $(^NameDA) урнаштыру өчен, килешүне кабул итәргә кирәк. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Килешү шартларын кабул итÑәгез, түбәндәге вариантлардан беренчеÑен Ñайлагыз. $(^NameDA) урнаштыру өчен, килешүне кабул итәргә кирәк. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA) бетерү алдыннан Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ ÐºÐ¸Ð»ÐµÑˆÒ¯Ðµ белән танышыгыз." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Килешү шартларын кабул итÑәгез, $\"Кабул итәм$\" төймәÑенә баÑыгыз. $(^NameDA) бетерү өчен, килешүне кабул итәргә кирәк." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Килешү шартларын кабул итÑәгез, түбәндә билге куегыз. $(^NameDA) бетерү өчен, килешүне кабул итәргә кирәк. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Килешү шартларын кабул итÑәгез, түбәндәге вариантлардан беренчеÑен Ñайлагыз. $(^NameDA) бетерү өчен, килешүне кабул итәргә кирәк. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ТекÑÑ‚ буенча күчү өчен, $\"PageUp$\" һәм $\"PageDown$\" төймәләренә баÑыгыз." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Урнаштырылучы программаның компонентлары" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Урнаштырырга теләгән $(^NameDA) компонентларын Ñайлагыз." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Программа компонентлары" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Бетерергә теләгән $(^NameDA) компонентларын Ñайлагыз." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ТаÑвирлама" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Компонентның таÑвирламаÑын уку өчен, аның иÑеменә тычкан курÑорын китерегез." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Компонентның таÑвирламаÑын уку өчен, аны билгеләгез." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Урнаштыру папкаÑын Ñайлау" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA) урнаштыру өчен папка Ñайлагыз." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Бетерү папкаÑын Ñайлау" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA) бетерергә кирәк булган папканы Ñайлагыз." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Файлларны күчермәләү" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) файллары күчермәләнә, көтегез..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Урнаштыру тәмамланды" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Урнаштыру уңышлы тәмамланды." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Урнаштыру туктатылды" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Урнаштыру уңышÑыз тәмамланды." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Бетерү" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) файллары бетерелә, көтегез..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Бетерү тәмамланды" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Программаны бетерү уңышлы тәмамланды." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Бетерү туктатылды" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Бетерү тулыÑынча башкарылмады." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) урнаштыручы Ñшен тәмамлау" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) Ñанагыгызга урнаштырылды.$\r$\n$\r$\nУрнаштыру программаÑыннан чыгу өчен $\"Тәмам$\" төймәÑенә баÑыгыз." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) урнаштыруын тәмамлау өчен, Ñанакны Ñүндереп кабызырга кирәк. Ðны хәзер башкарыргамы?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) бетерүче Ñшен тәмамлау" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) Ñанагыгыздан бетерелде.$\r$\n$\r$\nБетерү программаÑыннан чыгу өчен $\"Тәмам$\" төймәÑенә баÑыгыз." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) бетерүен тәмамлау өчен, Ñанакны Ñүндереп кабызырга кирәк. Ðны хәзер башкарыргамы?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Әйе, Ñанакны хәзер Ñүндереп кабызырга" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Юк, мин Ñоңрак Ñүндереп кабызырмын" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) программаÑын җибәр&ергә" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&ReadMe файлын күрÑәтергә" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Тәмам" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "$\"Башлау$\" менюÑында папка" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "$\"Башлау$\" менюÑында программа Ñылтамаларын урнаштыру өчен папка Ñайлагыз." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "$\"Башлау$\" менюÑында программа Ñылтамалары урнаштырылачак папканы Ñайлагыз. Шулай ук папкага башка иÑем бирә алаÑыз." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Сылтамалар ÑÑамаÑка" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA) бетерү" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Санактан $(^NameDA) бетерү." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Чыннан да $(^Name) урнаштыруын туктатыргамы?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Чыннан да $(^Name) бетерүен туктатыргамы?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Урнаштыру режимы" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "КайÑÑ‹ кулланучылар өчен $(^NameDA) урнаштырырга телиÑез, Ñайлагыз." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "$(^NameDA) программаÑын үзегезгә генә Ñки бөтен кулланучылар өчен дә урнаштырачагыгызны Ñайлагыз. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Бөтен кулланучылар өчен урнаштырырга" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Минем өчен генә урнаштырырга" +!endif diff --git a/tools/Contrib/Language files/Thai.nlf b/tools/Contrib/Language files/Thai.nlf new file mode 100644 index 0000000..d866de3 --- /dev/null +++ b/tools/Contrib/Language files/Thai.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1054 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +874 +# RTL - anything else than RTL means LTR +- +# Translation by SoKoOLz, TuW@nNu (asdfuae) +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) ติดตั้ง +# ^UninstallCaption +$(^Name) ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^LicenseSubCaption +: ข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธิ์ +# ^ComponentsSubCaption +: ตัวเลือà¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^DirSubCaption +: à¹à¸Ÿà¹‰à¸¡à¸—ี่ติดตั้ง +# ^InstallingSubCaption +: à¸à¸³à¸¥à¸±à¸‡à¸•à¸´à¸”ตั้ง +# ^CompletedSubCaption +: เสร็จสิ้น +# ^UnComponentsSubCaption +: ตัวเลือà¸à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^UnDirSubCaption +: à¹à¸Ÿà¹‰à¸¡à¸—ี่ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^ConfirmSubCaption +: ยืนยัน +# ^UninstallingSubCaption +: à¸à¸³à¸¥à¸±à¸‡à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^UnCompletedSubCaption +: เสร็จสิ้น +# ^BackBtn +< &à¸à¸¥à¸±à¸šà¹„ป +# ^NextBtn +&ต่อไป > +# ^AgreeBtn +&ตà¸à¸¥à¸‡ +# ^AcceptBtn +&ตà¸à¸¥à¸‡à¸¢à¸­à¸¡à¸£à¸±à¸šà¸‚้อต่างๆในหัวข้อลิขสิทธิ์ +# ^DontAcceptBtn +&ไม่ยอมรับข้อต่างๆในหัวข้อลิขสิทธิ์ +# ^InstallBtn +&ติดตั้ง +# ^UninstallBtn +&ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^CancelBtn +ยà¸à¹€à¸¥à¸´à¸ +# ^CloseBtn +&ปิด +# ^BrowseBtn +เ&รียà¸à¸”ู... +# ^ShowDetailsBtn +&รายละเอียด +# ^ClickNext +à¸à¸” ต่อไป เพื่อเริ่มระบบอัติโนมัติ +# ^ClickInstall +à¸à¸” ติดตั้ง เพื่อทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^ClickUninstall +à¸à¸” ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง เพื่อยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^Name +ชื่อ +# ^Completed +เสร็จสิ้นà¹à¸¥à¹‰à¸§ +# ^LicenseText +โปรดอ่านทวนเรื่องà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸¥à¸´à¸‚สิทธิ์à¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹ƒà¸™à¸—ุà¸à¹†à¸”้าน, à¸à¸” ฉันยอมรับ +# ^LicenseTextCB +โปรดอ่านทวนเรื่องà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸¥à¸´à¸‚สิทธิ์à¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹ƒà¸™à¸—ุà¸à¹†à¸”้าน, à¸à¸”เลือà¸à¸—ี่à¸à¸¥à¹ˆà¸­à¸‡à¸”้านล่าง. $_CLICK +# ^LicenseTextRB +โปรดอ่านทวนเรื่องà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸¥à¸´à¸‚สิทธิ์à¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹ƒà¸™à¸—ุà¸à¹†à¸”้าน, เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¹à¸£à¸à¸‚้างล่าง. $_CLICK +# ^UnLicenseText +โปรดอ่านทวนเรื่องà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸¥à¸´à¸‚สิทธิ์à¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸•à¸´à¸”ตั้ง $(^NameDA). ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹ƒà¸™à¸—ุà¸à¹†à¸”้าน, à¸à¸” ฉันยอมรับ +# ^UnLicenseTextCB +โปรดอ่านทวนเรื่องà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸¥à¸´à¸‚สิทธิ์à¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸•à¸´à¸”ตั้ง $(^NameDA). ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹ƒà¸™à¸—ุà¸à¹†à¸”้าน, à¸à¸”เลือà¸à¸—ี่à¸à¸¥à¹ˆà¸­à¸‡à¸”้านล่าง. $_CLICK +# ^UnLicenseTextRB +โปรดอ่านทวนเรื่องà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸¥à¸´à¸‚สิทธิ์à¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸•à¸´à¸”ตั้ง $(^NameDA). ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹ƒà¸™à¸—ุà¸à¹†à¸”้าน, เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¹à¸£à¸à¸‚้างล่าง. $_CLICK +# ^Custom +à¸à¸³à¸«à¸™à¸”เอง +# ^ComponentsText +เลื่อà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้งà¹à¸¥à¸°à¹„ม่เลือà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณไม่ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $_CLICK +# ^ComponentsSubText1 +เลือà¸à¸§à¸´à¸˜à¸µà¸à¸²à¸£à¸à¸²à¸£à¸•à¸´à¸”ตั้ง: +# ^ComponentsSubText2_NoInstTypes +เลือà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง: +# ^ComponentsSubText2 +หรือ, เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¸—ี่คุณต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง: +# ^UnComponentsText +เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¸—ี่คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งà¹à¸¥à¸°à¹„ม่เลือà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณไม่ต้องà¸à¸²à¸£à¸ˆà¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง $_CLICK +# ^UnComponentsSubText1 +เลือà¸à¸§à¸´à¸˜à¸µà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง: +# ^UnComponentsSubText2_NoInstTypes +เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¸—ี่ต้องà¸à¸²à¸£à¸ˆà¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง: +# ^UnComponentsSubText2 +หรือ, เลือà¸à¸ˆà¸²à¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¸­à¸·à¹ˆà¸™à¹†à¸—ี่คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง: +# ^DirText +ตัวติดตั้งจะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA) ลงในà¹à¸Ÿà¹‰à¸¡à¸”ังต่อไปนี้, ถ้าต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้งลงในà¹à¸Ÿà¹‰à¸¡à¸­à¸·à¹ˆà¸™, à¸à¸” เรียà¸à¸”ูà¹à¸¥à¸°à¹€à¸¥à¸·à¸­à¸à¹à¸Ÿà¹‰à¸¡à¸­à¸·à¹ˆà¸™ $_CLICK +# ^DirSubText +à¹à¸Ÿà¹‰à¸¡à¸—ี่ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^DirBrowseText +เลือà¸à¹à¸Ÿà¹‰à¸¡à¸—ี่ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA) ใน: +# ^UnDirText +ตัวติดตั้งจะทำà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA) จาà¸à¹à¸Ÿà¹‰à¸¡à¸”ังต่อไปนี้, ถ้าต้องà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งจาà¸à¹à¸Ÿà¹‰à¸¡à¸­à¸·à¹ˆà¸™, à¸à¸” เรียà¸à¸”ู à¹à¸¥à¸°à¹€à¸¥à¸·à¸­à¸à¹à¸Ÿà¹‰à¸¡à¸­à¸·à¹ˆà¸™ $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +เลือà¸à¹à¸Ÿà¹‰à¸¡à¸—ี่ต้องà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA) จาà¸: +# ^SpaceAvailable +"มีพื้นที่เหลือ: " +# ^SpaceRequired +"ต้องà¸à¸²à¸£à¸žà¸·à¹‰à¸™à¸—ี่: " +# ^UninstallingText +$(^NameDA) จะถูà¸à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งจาà¸à¹à¸Ÿà¹‰à¸¡à¸•à¹ˆà¸­à¹„ปนี้. $_CLICK +# ^UninstallingSubText +ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งจาà¸: +# ^FileError +ไม่สามารถเปิดไฟล์สำหรับเขียนได้: \r\n\r\n$0\r\n\r\nà¸à¸” ยà¸à¹€à¸¥à¸´à¸ เพื่อหยุดà¸à¸²à¸£à¸•à¸´à¸”ตั้ง,\r\nลองอีà¸à¸„รั้ง เพื่อลองอีà¸à¸„รั้ง, หรือ\r\nเพิà¸à¹€à¸‰à¸¢ เพื่อข้ามไฟล์นี้. +# ^FileError_NoIgnore +ไม่สามารถเปิดไฟล์สำหรับเขียนได้: \r\n\r\n$0\r\n\r\nà¸à¸” ลองอีà¸à¸„รั้ง เพื่อลองอีà¸à¸„รั้ง, หรือ\r\nยà¸à¹€à¸¥à¸´à¸à¹€à¸žà¸·à¹ˆà¸­à¸«à¸¢à¸¸à¸”à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^CantWrite +"ไม่สามารถเขียน: " +# ^CopyFailed +คัดลอà¸à¸œà¸´à¸”พลาด +# ^CopyTo +"คัดลอà¸à¹„ปยัง " +# ^Registering +"à¸à¸³à¸¥à¸±à¸‡à¸¥à¸‡à¸—ะเบียน: " +# ^Unregistering +"ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน: " +# ^SymbolNotFound +"ไม่สามารถหาสัà¸à¸¥à¸±à¸à¸©à¸“์ได้: " +# ^CouldNotLoad +"ไม่สามารถโหลดได้: " +# ^CreateFolder +"สร้างà¹à¸Ÿà¹‰à¸¡: " +# ^CreateShortcut +"สร้างชอร์ตคัท: " +# ^CreatedUninstaller +"สร้างตัวยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง: " +# ^Delete +"ลบไฟล์: " +# ^DeleteOnReboot +"ลบตอนรีบูท: " +# ^ErrorCreatingShortcut +"มีปัà¸à¸«à¸²à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์ชอร์ตคัท: " +# ^ErrorCreating +"มีปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์: " +# ^ErrorDecompressing +มีปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸„ลายข้อมูล! เà¸à¸´à¸”ข้อผิดพลาดจาà¸à¸•à¸±à¸§à¸•à¸´à¸”ตั้ง? +# ^ErrorRegistering +มีปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน DLL +# ^ExecShell +"รันเชลล์ไฟล์: " +# ^Exec +"รันไฟล์: " +# ^Extract +"à¹à¸•à¸à¹„ฟล์: " +# ^ErrorWriting +"à¹à¸•à¸à¹„ฟล์: เà¸à¸´à¸”ปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¹€à¸‚ียนไฟล์" +# ^InvalidOpcode +ตัวติดตั้งมีปัà¸à¸«à¸²: รหัส opcode ผิดพลาด +# ^NoOLE +"ไม่มี OLE สำหรับ: " +# ^OutputFolder +"à¹à¸Ÿà¹‰à¸¡à¸—ีติดตั้ง: " +# ^RemoveFolder +"ลบà¹à¸Ÿà¹‰à¸¡: " +# ^RenameOnReboot +"เปลี่ยนชื่อตอนรีบูท: " +# ^Rename +"เปลี่ยนชื่อ: " +# ^Skipped +"ข้าม: " +# ^CopyDetails +คัดลอà¸à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”ลงคลิปบอร์ด +# ^LogInstall +บันทึà¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Thai.nsh b/tools/Contrib/Language files/Thai.nsh new file mode 100644 index 0000000..99dc77d --- /dev/null +++ b/tools/Contrib/Language files/Thai.nsh @@ -0,0 +1,121 @@ +;Language: Thai (1054) +;By SoKoOLz, TuW@nNu (asdfuae) + +!insertmacro LANGFILE "Thai" = "ไทย" /* TODO: ISO 11940? */ "Thai" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "ยินดีต้อนรับเข้าสู่à¸à¸²à¸£à¸•à¸´à¸”ตั้งโปรà¹à¸à¸£à¸¡ $(^NameDA) " + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "ตัวติดตั้งอัติโนมัติจะนำคุณไปสู่à¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^NameDA).$\r$\n$\r$\nเราขอà¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¸›à¸´à¸”โปรà¹à¸à¸£à¸¡à¸­à¸·à¹ˆà¸™à¹†à¹ƒà¸«à¹‰à¸«à¸¡à¸”à¸à¹ˆà¸­à¸™à¸—ี่จะเริ่มติดตั้ง, นี่จะเป็นà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ทไฟล์ได้ง่ายขึ้นโดยคุณไม่จำเป็นต้องทำà¸à¸²à¸£à¸£à¸µà¸šà¸¹à¸—คอมพิวเตอร์ของคุณ$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "ยินดีต้อนรับสู่à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งอัติโนมัติของ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "ตัวติดตั้งอัติโนมัตินี้จะนำคุณไปสู่à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^NameDA).$\r$\n$\r$\nà¸à¸²à¸£à¸ˆà¸°à¹€à¸£à¸´à¹ˆà¸¡à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งนี้, โปรดตรวจสอบว่า $(^NameDA) ไม่ได้ใช้อยู่$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "ข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธิ์" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "โปรดอ่านทวนลิขสิทธิ์ในหัวข้อต่างๆอีà¸à¸„รั้งà¸à¹ˆà¸­à¸™à¸—ี่คุณจะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธิ์, à¸à¸” ฉันยอมรับ เพื่อทำต่อไป, คุณต้องยอมรับในข้อตà¸à¸¥à¸‡à¸¥à¸´à¸‚สิทธิ์เพื่อที่จะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธ, à¸à¸”เลือà¸à¹ƒà¸™à¸à¸¥à¹ˆà¸­à¸‡à¸‚้างล่างนี้ คุณต้องยอมรับในข้อตà¸à¸¥à¸‡à¸¥à¸´à¸‚สิทธิ์เพื่อที่จะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธ, เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¹à¸£à¸à¸”้านล่างนี้ คุณต้องยอมรับในข้อตà¸à¸¥à¸‡à¸¥à¸´à¸‚สิทธิ์เพื่อที่จะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "ข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธิ์" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "à¸à¸£à¸¸à¸“าอ่านข้อตà¸à¸¥à¸‡à¸”้านลิขสิทธิ์à¸à¹ˆà¸­à¸™à¸•à¸´à¸”ตั้งโปรà¹à¸à¸£à¸¡ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "ถ้าคุณยอมรับในข้อตà¸à¸¥à¸‡à¸™à¸µà¹‰ à¸à¸£à¸¸à¸“าà¸à¸”ปุ่ม ฉันยอมรับ à¹à¸¥à¸°à¸„ุณจะต้องตà¸à¸¥à¸‡à¸à¹ˆà¸­à¸™à¸—ี่จะเริ่มà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸•à¸´à¸”ตั้งโปรà¹à¸à¸£à¸¡ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธิ์, à¸à¸”เลือà¸à¹ƒà¸™à¸à¸¥à¹ˆà¸­à¸‡à¸‚้างล่างนี้ คุณต้องยอมรับในข้อตà¸à¸¥à¸‡à¸¥à¸´à¸‚สิทธิ์เพื่อที่จะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "ถ้าคุณยอมรับข้อตà¸à¸¥à¸‡à¹€à¸£à¸·à¹ˆà¸­à¸‡à¸¥à¸´à¸‚สิทธิ์, เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¹à¸£à¸à¸”้านล่างนี้ คุณต้องยอมรับในข้อตà¸à¸¥à¸‡à¸¥à¸´à¸‚สิทธิ์เพื่อที่จะทำà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "à¸à¸” Page Down เพื่ออ่านข้อตà¸à¸¥à¸‡à¸—ั้งหมด" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "เลือà¸à¸ªà¹ˆà¸§à¸™à¸›à¸£à¸°à¸à¸­à¸š" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "เลือà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ˆà¸²à¸ $(^NameDA) ที่คุณต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "เลือà¸à¸ªà¹ˆà¸§à¸™à¸›à¸£à¸°à¸à¸­à¸š" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "เลือà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ˆà¸²à¸ $(^NameDA) ที่คุณต้องยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "รายละเอียด" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ขยับเมาส์ของคุณเหนือส่วนประà¸à¸­à¸šà¹€à¸žà¸·à¹ˆà¸­à¸”ูรายละเอียด" + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "เลือà¸à¸ªà¹ˆà¸§à¸™à¸›à¸£à¸°à¸à¸­à¸šà¸—ี่คุณต้องà¸à¸²à¸£à¸”ูรายละเอียด" + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "เลือà¸à¸—ี่ที่ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "เลือà¸à¹à¸œà¹‰à¸¡à¸—ี่ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "เลือà¸à¹à¸Ÿà¹‰à¸¡à¸—ี่ต้องà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "เลือà¸à¹à¸Ÿà¹‰à¸¡à¸—ี่คุณต้องà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "à¸à¸³à¸¥à¸±à¸‡à¸•à¸´à¸”ตั้ง" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "โปรดรอในขณะที่ $(^NameDA) à¸à¸³à¸¥à¸±à¸‡à¸–ูà¸à¸•à¸´à¸”ตั้ง" + ${LangFileString} MUI_TEXT_FINISH_TITLE "à¸à¸²à¸£à¸•à¸´à¸”ตั้งเสร็จสิ้น" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "à¸à¸²à¸£à¸•à¸´à¸”ตั้งเสร็จสมบูรณ์" + ${LangFileString} MUI_TEXT_ABORT_TITLE "à¸à¸²à¸£à¸•à¸´à¸”ตั้งถูà¸à¸¢à¸à¹€à¸¥à¸´à¸" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "à¸à¸²à¸£à¸•à¸´à¸”ตั้งไม่เสร็จสมบูรณ์" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "à¸à¸³à¸¥à¸±à¸‡à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "โปรดรอในขณะที่ $(^NameDA) à¸à¸³à¸¥à¸±à¸‡à¸–ูà¸à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งเสร็จสิ้น" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งเสร็จสิ้นโดยสมบูรณ์" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งถูà¸à¸¢à¸à¹€à¸¥à¸´à¸" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งไม่สำเร็จ" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "à¸à¸²à¸£à¸•à¸´à¸”ตั้งอัติโนมัติของ $(^NameDA) à¸à¸³à¸¥à¸±à¸‡à¹€à¸ªà¸£à¹‡à¸ˆà¸ªà¸´à¹‰à¸™" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ได้ถูà¸à¸•à¸´à¸”ตั้งลงในเครื่องคอมพิวเตอร์ของคุณà¹à¸¥à¹‰à¸§$\r$\n$\r$\nà¸à¸” เสร็จสิ้นเพื่อปิดตัวติดตั้งอัติโนมัติ" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "เครื่องคอมพิวเตอร์ของคุณจำเป็นต้องรีสตารท์เพื่อà¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^NameDA) จะเรียบร้อย, คุณต้องà¸à¸²à¸£à¸ˆà¸° รีบูท เดี๋ยวนี้ไหม?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งอัติโนมัติของ $(^NameDA) à¸à¸³à¸¥à¸±à¸‡à¹€à¸ªà¸£à¹‡à¸ˆà¸ªà¸¡à¸šà¸¹à¸£à¸“์" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ได้ถูà¸à¸¢à¸à¹€à¸¥à¸´à¸à¸­à¸­à¸à¸ˆà¸²à¸à¹€à¸„รื่องคอมพิวเตอร์ของคุณà¹à¸¥à¹‰à¸§ $\r$\n$\r$\nà¸à¸” เสร็จสิ้น เพื่อปิดหน้าจอติดตั้งอัติโนมัติ" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "เครื่องคอมพิวเตอร์ของคุณจำเป็นต้องรีสตาร์ทในà¸à¸²à¸£à¸—ี่จะทำà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^NameDA) เสร็จสิ้น, คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸£à¸µà¸šà¸¹à¸—เดี๋ยวนี้ไหม?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "รีบูท เดี๋ยวนี้" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "ฉันต้องà¸à¸²à¸£ รีบูทด้วยตนเอง ทีหลัง" + ${LangFileString} MUI_TEXT_FINISH_RUN "&รัน $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&à¹à¸ªà¸”งรายละเอียด" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&เสร็จสิ้น" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "เลือà¸à¹à¸Ÿà¹‰à¸¡ Start Menu" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "เลือà¸à¹à¸Ÿà¹‰à¸¡ Start Menu เพื่อสร้างชอร์ตคัทของ $(^NameDA). " + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "เลือà¸à¹à¸œà¹‰à¸¡ Start Menu ที่คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸­à¸£à¹Œà¸•à¸„ัทของโปรà¹à¸à¸£à¸¡, คุณยังสามารถà¸à¸³à¸«à¸™à¸”ชื่อเพื่อสร้างà¹à¸Ÿà¹‰à¸¡à¹ƒà¸«à¸¡à¹ˆà¹„ด้อีà¸à¸”้วย" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "ไม่ต้องสร้าง ชอร์ตคัท" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้ง $(^NameDA) จาà¸à¹€à¸„รื่องคอมพิวเตอร์ของคุณ" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¸§à¹ˆà¸²à¸„ุณต้องà¸à¸²à¸£à¸ˆà¸°à¸­à¸­à¸à¸ˆà¸²à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¸§à¹ˆà¸²à¸„ุณต้องà¸à¸²à¸£à¸­à¸­à¸à¸ˆà¸²à¸à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•à¸´à¸”ตั้งของ $(^Name)?" +!endif diff --git a/tools/Contrib/Language files/TradChinese.nlf b/tools/Contrib/Language files/TradChinese.nlf new file mode 100644 index 0000000..81ce2b5 --- /dev/null +++ b/tools/Contrib/Language files/TradChinese.nlf @@ -0,0 +1,194 @@ +# Header, don't edit +NLF v6 +# Language ID +1028 +# Font and size - dash (-) means default å­—åž‹åç¨±èˆ‡å¤§å° +新細明體 +9 +# Codepage - dash (-) means ASCII code page ASCII å­—ç¢¼é  +950 +# RTL - anything else than RTL means LTR ç”±å³è‡³å·¦æ›¸å¯« +- +# Revision date: 2017-03-17 +# Translators: +## Kii Ali , , +## Walter Cheuk +# +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) å®‰è£ +# ^UninstallCaption +$(^Name) è§£é™¤å®‰è£ +# ^LicenseSubCaption +: 授權å”è­° +# ^ComponentsSubCaption +: 安è£é¸é … +# ^DirSubCaption +: 安è£è³‡æ–™å¤¾ +# ^InstallingSubCaption +: æ­£åœ¨å®‰è£ +# ^CompletedSubCaption +: å·²å®Œæˆ +# ^UnComponentsSubCaption +: 解除安è£é¸é … +# ^UnDirSubCaption +: 解除安è£è³‡æ–™å¤¾ +# ^ConfirmSubCaption +: ç¢ºèª +# ^UninstallingSubCaption +: æ­£åœ¨è§£é™¤å®‰è£ +# ^UnCompletedSubCaption +: å®Œæˆ +# ^BackBtn +< 上一步(&B) +# ^NextBtn +下一步(&N) > +# ^AgreeBtn +我åŒæ„(&A) +# ^AcceptBtn +我接å—「授權å”è­°ã€çš„æ¢æ¬¾(&A) +# ^DontAcceptBtn +我ä¸æŽ¥å—「授權å”è­°ã€çš„æ¢æ¬¾(&D) +# ^InstallBtn +安è£(&I) +# ^UninstallBtn +解除安è£(&U) +# ^CancelBtn +å–消 +# ^CloseBtn +關閉(&C) +# ^BrowseBtn +ç€è¦½(&R)... +# ^ShowDetailsBtn +顯示細節(&D) +# ^ClickNext +按「下一步(N)ã€ç¹¼çºŒã€‚ +# ^ClickInstall +按「安è£(I)ã€é–‹å§‹å®‰è£ã€‚ +# ^ClickUninstall +按「解除安è£(U)ã€é–‹å§‹è§£é™¤å®‰è£ã€‚ +# ^Name +å稱 +# ^Completed +å·²å®Œæˆ +# ^LicenseText +åœ¨å®‰è£ $(^NameDA) 之å‰è«‹æª¢é–±æŽˆæ¬Šå”議。如果接å—å”議所有æ¢æ¬¾ï¼ŒæŒ‰ã€Œæˆ‘åŒæ„(A)ã€ã€‚ +# ^LicenseTextCB +åœ¨å®‰è£ $(^NameDA) 之å‰è«‹æª¢é–±æŽˆæ¬Šå”議。如果接å—å”議所有æ¢æ¬¾ï¼ŒæŒ‰ä¸‹æ–¹çš„勾é¸æ¡†ã€‚ $_CLICK +# ^LicenseTextRB +åœ¨å®‰è£ $(^NameDA) 之å‰è«‹æª¢é–±æŽˆæ¬Šå”議。如果接å—å”議所有æ¢æ¬¾ï¼Œé¸æ“‡ä¸‹æ–¹çš„第一個é¸é …。 $_CLICK +# ^UnLicenseText +åœ¨è§£é™¤å®‰è£ $(^NameDA) 之å‰è«‹æª¢é–±æŽˆæ¬Šå”議。如果接å—å”議中所有æ¢æ¬¾ï¼ŒæŒ‰ã€Œæˆ‘åŒæ„(A)ã€ã€‚ +# ^UnLicenseTextCB +åœ¨è§£é™¤å®‰è£ $(^NameDA) 之å‰è«‹æª¢é–±æŽˆæ¬Šå”議。如果接å—å”議中所有æ¢æ¬¾ï¼ŒæŒ‰ä¸‹æ–¹çš„勾é¸æ¡†ã€‚ $_CLICK +# ^UnLicenseTextRB +åœ¨è§£é™¤å®‰è£ $(^NameDA) 之å‰è«‹æª¢é–±æŽˆæ¬Šå”議。如果接å—å”議中所有æ¢æ¬¾ï¼Œé¸æ“‡çš„第一個é¸é …。 $_CLICK +# ^Custom +自訂 +# ^ComponentsText +勾é¸æƒ³è¦å®‰è£çš„元件,並解除勾é¸ä¸æƒ³å®‰è£çš„元件。 $_CLICK +# ^ComponentsSubText1 +é¸å–安è£çš„é¡žåž‹: +# ^ComponentsSubText2_NoInstTypes +é¸å–安è£çš„元件: +# ^ComponentsSubText2 +åˆæˆ–者,自訂é¸å–想安è£çš„元件: +# ^UnComponentsText +勾é¸æƒ³è¦è§£é™¤å®‰è£çš„元件,並解除勾é¸ä¸æƒ³è§£é™¤å®‰è£çš„元件。 $_CLICK +# ^UnComponentsSubText1 +é¸å–解除安è£çš„é¡žåž‹: +# ^UnComponentsSubText2_NoInstTypes +é¸å–è¦è§£é™¤å®‰è£çš„元件: +# ^UnComponentsSubText2 +åˆæˆ–者,é¸æ“‡æƒ³è¦è§£é™¤å®‰è£çš„å¯é¸é …元件: +# ^DirText +安è£ç¨‹å¼æœƒå°‡ $(^NameDA) 安è£åœ¨ä»¥ä¸‹è³‡æ–™å¤¾ã€‚è¦å®‰è£åˆ°ä¸åŒçš„資料夾,按「ç€è¦½(B)...ã€ä¸¦é¸æ“‡å…¶ä»–資料夾。 $_CLICK +# ^DirSubText +目標資料夾 +# ^DirBrowseText +é¸å–è¦å®‰è£ $(^NameDA) 的資料夾: +# ^UnDirText +安è£ç¨‹å¼æœƒè‡ªä»¥ä¸‹è³‡æ–™å¤¾è§£é™¤å®‰è£ $(^NameDA) 。è¦è§£é™¤å®‰è£ä¸åŒçš„資料夾,按「ç€è¦½(B)...ã€ä¸¦é¸æ“‡å…¶ä»–資料夾。 $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +é¸å–è¦è§£é™¤å®‰è£ $(^NameDA) 的資料夾: +# ^SpaceAvailable +"å¯ç”¨ç©ºé–“: " +# ^SpaceRequired +"所需空間: " +# ^UninstallingText +æœƒè‡ªä»¥ä¸‹è³‡æ–™å¤¾è§£é™¤å®‰è£ $(^NameDA) 。 $_CLICK +# ^UninstallingSubText +解除安è£ç›®éŒ„: +# ^FileError +無法開啟è¦å¯«å…¥çš„檔案: \r\n\t"$0"\r\n按「中止ã€åœæ­¢å®‰è£ï¼Œ\r\n「é‡è©¦ã€é‡æ–°å˜—試寫入檔案,或\r\n「忽略ã€ç•¥éŽæ­¤æª”案。 +# ^FileError_NoIgnore +無法開啟è¦å¯«å…¥çš„檔案: \r\n\t"$0"\r\n按「é‡è©¦ã€é‡æ–°å˜—試寫入檔案,或\r\n「å–消ã€åœæ­¢å®‰è£ã€‚ +# ^CantWrite +"無法寫入: " +# ^CopyFailed +"複製失敗 " +# ^CopyTo +"複製到: " +# ^Registering +"正在註冊: " +# ^Unregistering +"正在解除註冊: " +# ^SymbolNotFound +"無法找到符號: " +# ^CouldNotLoad +"無法載入: " +# ^CreateFolder +"建立資料夾: " +# ^CreateShortcut +"建立æ·å¾‘: " +# ^CreatedUninstaller +"建立解除安è£ç¨‹å¼: " +# ^Delete +"刪除檔案: " +# ^DeleteOnReboot +"é‡æ–°é–‹æ©Ÿå¾Œåˆªé™¤: " +# ^ErrorCreatingShortcut +"建立æ·å¾‘時發生錯誤: " +# ^ErrorCreating +"建立時發生錯誤: " +# ^ErrorDecompressing +"解壓縮資料發生錯誤ï¼å®‰è£ç¨‹å¼æ˜¯å¦å·²æ壞?" +# ^ErrorRegistering +"註冊 DLL 時發生錯誤" +# ^ExecShell +"執行殼層程å¼: " +# ^Exec +"執行: " +# ^Extract +"抽å–: " +# ^ErrorWriting +"抽å–: 無法寫入檔案 " +# ^InvalidOpcode +"安è£ç¨‹å¼æ毀: 無效的作業代碼 " +# ^NoOLE +"沒有 OLE 用於: " +# ^OutputFolder +"輸出資料夾: " +# ^RemoveFolder +"移除資料夾: " +# ^RenameOnReboot +"é‡æ–°é–‹æ©Ÿå¾Œé‡æ–°å‘½å: " +# ^Rename +"é‡æ–°å‘½å: " +# ^Skipped +"已略éŽ: " +# ^CopyDetails +"複製細節到剪貼簿 " +# ^LogInstall +"將安è£é€²ç¨‹è¨˜å…¥æ—¥èªŒ" +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/TradChinese.nsh b/tools/Contrib/Language files/TradChinese.nsh new file mode 100644 index 0000000..2e8e28e --- /dev/null +++ b/tools/Contrib/Language files/TradChinese.nsh @@ -0,0 +1,131 @@ +;Language: 'Chinese (Traditional)' (1028) +;Translator: Kii Ali , , +;Translator: Walter Cheuk +;Revision date: 2017-03-17 + +!insertmacro LANGFILE "TradChinese" "Chinese (Traditional)" "中文(ç¹é«”)" "Hanyu (Fantizi)" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "歡迎使用 $(^NameDA) 安è£ç²¾éˆ" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "本精éˆæœƒå¼•å°Žæ‚¨å®Œæˆå®‰è£ $(^NameDA)。$\r$\n$\r$\n在開始安è£ä¹‹å‰ï¼Œå»ºè­°å…ˆé—œé–‰å…¶ä»–所有應用程å¼ã€‚這將å…許安è£ç¨‹å¼æ›´æ–°ç›¸é—œçš„系統檔案,而ä¸éœ€è¦é‡æ–°å•Ÿå‹•é›»è…¦ã€‚$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "歡迎使用 $(^NameDA) 解除安è£ç²¾éˆ" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "本精éˆæœƒå¼•å°Žæ‚¨è§£é™¤å®‰è£ $(^NameDA)。$\r$\n$\r$\n在開始解除安è£ä¹‹å‰ï¼Œè«‹ç¢ºèª $(^NameDA) 並未有執行。$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "授權å”è­°" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "åœ¨å®‰è£ $(^NameDA) 之å‰ï¼Œè«‹æª¢é–±æŽˆæ¬Šæ¢æ¬¾ã€‚" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "如果接å—å”è­°çš„æ¢æ¬¾ï¼ŒæŒ‰ [我åŒæ„(A)] 繼續安è£ã€‚å¿…é ˆè¦æŽ¥å—å”è­°æ‰èƒ½å®‰è£ $(^NameDA) 。" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "如果接å—å”è­°çš„æ¢æ¬¾ï¼ŒæŒ‰ä¸‹æ–¹çš„勾é¸æ¡†ã€‚å¿…é ˆè¦æŽ¥å—å”è­°æ‰èƒ½å®‰è£ $(^NameDA)。$_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "如果接å—å”議中的æ¢æ¬¾ï¼Œé¸æ“‡ä¸‹æ–¹ç¬¬ä¸€å€‹é¸é …。必須è¦æŽ¥å—å”è­°æ‰èƒ½å®‰è£ $(^NameDA)。$_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "授權å”è­°" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "åœ¨è§£é™¤å®‰è£ $(^NameDA) 之å‰ï¼Œè«‹æª¢é–±æŽˆæ¬Šæ¢æ¬¾ã€‚" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "如果接å—å”è­°çš„æ¢æ¬¾ï¼ŒæŒ‰ [我åŒæ„(A)] 繼續解除安è£ã€‚如果é¸å– [å–消] ,安è£ç¨‹å¼æœƒé—œé–‰ã€‚å¿…é ˆè¦æŽ¥å—å”è­°æ‰èƒ½è§£é™¤å®‰è£ $(^NameDA) 。" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "如果接å—å”è­°çš„æ¢æ¬¾ï¼ŒæŒ‰ä¸‹æ–¹çš„勾é¸æ¡†ã€‚å¿…é ˆè¦æŽ¥å—å”è­°æ‰èƒ½è§£é™¤å®‰è£ $(^NameDA)。$_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "如果接å—å”è­°çš„æ¢æ¬¾ï¼Œé¸æ“‡ä¸‹æ–¹ç¬¬ä¸€å€‹é¸é …。必須è¦æŽ¥å—å”è­°æ‰èƒ½è§£é™¤å®‰è£ $(^NameDA)。$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "檢閱å”議的其餘部分,按 [PgDn] 往下æ²å‹•é é¢ã€‚" +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "é¸æ“‡å…ƒä»¶" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "é¸æ“‡æƒ³è¦å®‰è£ $(^NameDA) 的功能。" +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "é¸å–元件" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "é¸å– $(^NameDA) 當中想è¦è§£é™¤çš„功能。" +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "說明" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "將滑鼠指標åœæ‡¸åˆ°å…ƒä»¶ä¹‹ä¸Šï¼Œå³å¯è¦‹åˆ°å…¶èªªæ˜Žã€‚" + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "é¸å–元件,å³å¯è¦‹åˆ°å…¶èªªæ˜Žã€‚" + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "é¸å–安è£ä½ç½®" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "é¸å– $(^NameDA) è¦å®‰è£çš„資料夾。" +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "é¸å–解除安è£ä½ç½®" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "é¸å– $(^NameDA) è¦è§£é™¤å®‰è£çš„資料夾。" +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "安è£" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) 正在安è£ï¼Œè«‹ç¨å€™ã€‚" + ${LangFileString} MUI_TEXT_FINISH_TITLE "完æˆå®‰è£" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "安è£å·²å®Œæˆã€‚" + ${LangFileString} MUI_TEXT_ABORT_TITLE "已中止安è£" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "安è£ä¸¦æœªå®Œæˆã€‚" +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "解除安è£" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) 正在解除安è£ï¼Œè«‹ç¨å€™ã€‚" + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "完æˆè§£é™¤å®‰è£" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "解除安è£å·²å®Œæˆã€‚" + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "已中止解除安è£" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "解除安è£ä¸¦æœªå®Œæˆã€‚" +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "å³å°‡å®Œæˆå®‰è£ $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "å·²åœ¨é›»è…¦å®‰è£ $(^NameDA) 。$\r$\n按 [完æˆ(F)] 關閉安è£ç¨‹å¼ã€‚" + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "電腦需è¦é‡æ–°é–‹æ©Ÿï¼Œæ‰èƒ½å®Œæˆå®‰è£ $(^NameDA) 。è¦é¦¬ä¸Šé‡æ–°é–‹æ©Ÿå—Žï¼Ÿ" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "å³å°‡å®Œæˆè§£é™¤å®‰è£ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "å·²è‡ªé›»è…¦è§£é™¤å®‰è£ $(^NameDA) 。$\r$\n$\r$\n按 [完æˆ(F)] 關閉安è£ç¨‹å¼ã€‚" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "電腦需è¦é‡æ–°é–‹æ©Ÿï¼Œæ‰èƒ½å®Œæˆè§£é™¤å®‰è£ $(^NameDA) 。è¦é¦¬ä¸Šé‡æ–°é–‹æ©Ÿå—Žï¼Ÿ" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "是,馬上é‡æ–°é–‹æ©Ÿ(&Y)" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "å¦ï¼Œæˆ‘ç¨å¾Œå†è‡ªè¡Œé‡æ–°é–‹æ©Ÿ(&N)" + ${LangFileString} MUI_TEXT_FINISH_RUN "執行 $(^NameDA)(&R)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "顯示「讀我檔案ã€(&S)" + ${LangFileString} MUI_BUTTONTEXT_FINISH "完æˆ(&F)" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "é¸æ“‡ã€Œé–‹å§‹åŠŸèƒ½è¡¨ã€è³‡æ–™å¤¾" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "é¸æ“‡ã€Œé–‹å§‹åŠŸèƒ½è¡¨ã€è³‡æ–™å¤¾ï¼Œç”¨æ–¼ç¨‹å¼çš„æ·å¾‘。" + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "é¸æ“‡ã€Œé–‹å§‹åŠŸèƒ½è¡¨ã€è³‡æ–™å¤¾ï¼Œä»¥ä¾¿å»ºç«‹ç¨‹å¼çš„æ·å¾‘。你也å¯ä»¥è¼¸å…¥å稱,建立新資料夾。" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "ä¸è¦å»ºç«‹æ·å¾‘(&N)" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "è§£é™¤å®‰è£ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "è‡ªé›»è…¦è§£é™¤å®‰è£ $(^NameDA) 。" +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "確定è¦çµæŸ $(^Name) 的安è£ç¨‹å¼å—Žï¼Ÿ" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "確定è¦çµæŸ $(^Name) 的解除安è£ç¨‹å¼å—Žï¼Ÿ" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "é¸æ“‡ä½¿ç”¨è€…" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "é¸æ“‡è¦å°‡ $(^NameDA) 安è£çµ¦å“ªä½ä½¿ç”¨è€…。" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "é¸æ“‡åƒ…å°‡ $(^NameDA) 安è£çµ¦è‡ªå·±ä½¿ç”¨ï¼Œé‚„是此電腦的所有使用者皆å¯ä½¿ç”¨ã€‚ $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "安è£çµ¦æ­¤é›»è…¦çš„所有使用者" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "僅安è£çµ¦è‡ªå·±" +!endif diff --git a/tools/Contrib/Language files/Turkish.nlf b/tools/Contrib/Language files/Turkish.nlf new file mode 100644 index 0000000..6ec8dee --- /dev/null +++ b/tools/Contrib/Language files/Turkish.nlf @@ -0,0 +1,192 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1055 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1254 +# RTL - anything else than RTL means LTR +- +# Translation by ?atay Dilsiz(chagy) (amigos_cagi@hotmail.com) +# Corrections by Mozilla Türkiye YerelleÅŸtirme TopluluÄŸu tarafından çevrilmiÅŸtir. http://mozilla.org.tr +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +$(^Name) Kurulumu +# ^UninstallCaption +$(^Name) Kaldırma +# ^LicenseSubCaption +: Lisans SözleÅŸmesi +# ^ComponentsSubCaption +: Kurulum Seçenekleri +# ^DirSubCaption +: Kurulum Dizini +# ^InstallingSubCaption +: Kuruluyor +# ^CompletedSubCaption +: Tamamlandı +# ^UnComponentsSubCaption +: Kaldırma Seçenekleri +# ^UnDirSubCaption +: Kaldırılacak Dizin +# ^ConfirmSubCaption +: Onay +# ^UninstallingSubCaption +: Kaldırılıyor +# ^UnCompletedSubCaption +: Tamamlandı +# ^BackBtn +< &Geri +# ^NextBtn +Ä°&leri > +# ^AgreeBtn +&Katılıyorum +# ^AcceptBtn +Lisans SözleÅŸmesi'nin koÅŸullarını &kabul ediyorum +# ^DontAcceptBtn +Lisans SözleÅŸmesi'nin koÅŸullarını kabul et&miyorum +# ^InstallBtn +&Kur +# ^UninstallBtn +&Kaldır +# ^CancelBtn +Vazgeç +# ^CloseBtn +&Kapat +# ^BrowseBtn +&Gözat... +# ^ShowDetailsBtn +&Ayrıntıları göster +# ^ClickNext +Devam etmek için Ä°leri düğmesine basın. +# ^ClickInstall +Kurulumu baÅŸlatmak için Kur düğmesine basın. +# ^ClickUninstall +Kaldırmayı baÅŸlatmak için Kaldır düğmesine basın. +# ^Name +Ad +# ^Completed +Tamamlandı +# ^LicenseText +Lütfen $(^NameDA) uygulamasını kurmadan önce lisans sözleÅŸmesini gözden geçirin. SözleÅŸmedeki bütün koÅŸulları kabul ediyorsanız Kabul Ediyorum düğmesine basın. +# ^LicenseTextCB +Lütfen $(^NameDA) uygulamasını kurmadan önce lisans sözleÅŸmesini gözden geçirin. SözleÅŸmedeki bütün koÅŸulları kabul ediyorsanız aÅŸağıdaki kutuya iÅŸaret koyun. $_CLICK +# ^LicenseTextRB +Lütfen $(^NameDA) uygulamasını kurmadan önce lisans sözleÅŸmesini gözden geçirin. SözleÅŸmedeki bütün koÅŸulları kabul ediyorsanız aÅŸağıdaki ilk seçeneÄŸi seçin. $_CLICK +# ^UnLicenseText +Lütfen $(^NameDA) uygulamasını kaldırmadan önce lisans sözleÅŸmesini gözden geçirin. SözleÅŸmedeki bütün koÅŸulları kabul ediyorsanız Kabul Ediyorum düğmesine basın. +# ^UnLicenseTextCB +Lütfen $(^NameDA) uygulamasını kaldırmadan önce lisans sözleÅŸmesini gözden geçirin. SözleÅŸmedeki bütün koÅŸulları kabul ediyorsanız aÅŸağıdaki kutuya iÅŸaret koyun. $_CLICK +# ^UnLicenseTextRB +Lütfen $(^NameDA) uygulamasını kaldırmadan önce lisans sözleÅŸmesini gözden geçirin. SözleÅŸmedeki bütün koÅŸulları kabul ediyorsanız aÅŸağıdaki ilk seçeneÄŸi seçin. $_CLICK +# ^Custom +Özel +# ^ComponentsText +Kurmak istediÄŸiniz bileÅŸenleri iÅŸaretleyip kurmak istemediklerinizi iÅŸaretlemeden bırakın. $_CLICK +# ^ComponentsSubText1 +Kurulum türünü seçin: +# ^ComponentsSubText2_NoInstTypes +Kurulacak bileÅŸenleri seçin: +# ^ComponentsSubText2 +ya da isteÄŸe baÄŸlı olarak kurmak istediÄŸiniz bileÅŸenleri seçin: +# ^UnComponentsText +Kaldırmak istediÄŸiniz bileÅŸenleri iÅŸaretleyip kaldırmak istemediklerinizi iÅŸaretlemeden bırakın. $_CLICK +# ^UnComponentsSubText1 +Kaldırma türünü seçin: +# ^UnComponentsSubText2_NoInstTypes +Kaldırılacak bileÅŸenleri seçin: +# ^UnComponentsSubText2 +ya da isteÄŸe baÄŸlı olarak kaldırmak istediÄŸiniz bileÅŸenleri seçin: +# ^DirText +$(^NameDA) aÅŸağıdaki dizinde kurulacak. Farklı bir dizinde kurmak için Gözat düğmesine basıp baÅŸka bir dizin seçin. $_CLICK +# ^DirSubText +Hedef Dizin +# ^DirBrowseText +$(^NameDA) uygulamasının kurulacağı dizini seçin: +# ^UnDirText +$(^NameDA) aÅŸağıdaki dizinden kaldırılacak. Farklı bir dizinden kaldırmak için Gözat düğmesine basıp baÅŸka bir dizin seçin. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA) uygulamasının kaldırılacağı dizini seçin: +# ^SpaceAvailable +"Kullanılabilir boÅŸ alan: " +# ^SpaceRequired +"Gereken boÅŸ alan: " +# ^UninstallingText +$(^NameDA) aÅŸağıdaki dizinden kaldırılacak. $_CLICK +# ^UninstallingSubText +Kaldırılan yer: +# ^FileError +Dosya yazmak için açılırken hata meydana geldi: \r\n\r\n$0\r\n\r\nKurulumu durdurmak için Dur düğmesine,\r\nyeniden denemek için Yeniden Dene düğmesine,\r\nbu dosyayı atlamak için Yoksay düğmesine basın. +# ^FileError_NoIgnore +Dosya yazmak için açılırken hata meydana geldi: \r\n\r\n$0\r\n\r\nYeniden denemek için Yeniden Dene düğmesine,\r\nkurulumu durdurmak için Vazgeç düğmesine basın. +# ^CantWrite +"Yazılamadı: " +# ^CopyFailed +Kopyalama baÅŸarısız oldu +# ^CopyTo +"Kayıt: " +# ^Registering +"Kaydediliyor: " +# ^Unregistering +"Kayıt siliniyor: " +# ^SymbolNotFound +"Simge bulunamadı: " +# ^CouldNotLoad +"Yüklenemedi: " +# ^CreateFolder +"Dizin oluÅŸtur: " +# ^CreateShortcut +"Kısayol oluÅŸtur: " +# ^CreatedUninstaller +"Kaldırma uygulaması oluÅŸtur: " +# ^Delete +"Dosya sil: " +# ^DeleteOnReboot +"Açılışta sil: " +# ^ErrorCreatingShortcut +"Kısayol oluÅŸturulurken hata meydana geldi: " +# ^ErrorCreating +"OluÅŸturma hatası: " +# ^ErrorDecompressing +Veriyi açarken hata meydana geldi! Acaba kurulum uygulaması mı bozuk? +# ^ErrorRegistering +DLL kaydedilirken hata meydana geldi +# ^ExecShell +"ExecShell: " +# ^Exec +"Çalıştır: " +# ^Extract +"Aç: " +# ^ErrorWriting +"Açma: Dosyaya yazarken hata meydana geldi " +# ^InvalidOpcode +Kurulum bozuk: Geçersiz kod +# ^NoOLE +"OLE yok: " +# ^OutputFolder +"Çıktı dizini: " +# ^RemoveFolder +"Dizini sil: " +# ^RenameOnReboot +"Açılışta adını deÄŸiÅŸtir: " +# ^Rename +"Ad deÄŸiÅŸtir: " +# ^Skipped +"Atlandı: " +# ^CopyDetails +Ayrıntıları panoya kopyala +# ^LogInstall +Kurulum sürecinin kaydını tut +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Turkish.nsh b/tools/Contrib/Language files/Turkish.nsh new file mode 100644 index 0000000..c4d1358 --- /dev/null +++ b/tools/Contrib/Language files/Turkish.nsh @@ -0,0 +1,122 @@ +;Language: Turkish (1055) +;By Çagatay Dilsiz(Chagy) +;Updated by Fatih BOY (fatih_boy@yahoo.com) + +!insertmacro LANGFILE "Turkish" = "Türkçe" "Turkce" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) Kurulum sihirbazına hoÅŸ geldiniz" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Bu sihirbaz size $(^NameDA) kurulumu boyunca rehberlik edecektir.$\r$\n$\r$\nKurulumu baÅŸlatmadan önce çalışan diÄŸer programlari kapatmanızı öneririz. Böylece bilgisayarınızı yeniden baÅŸlatmadan bazı sistem dosyaları sorunsuz kurulabilir.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) Programını Kaldırma Sihirbazına HoÅŸ Geldiniz" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Bu sihirbaz size $(^NameDA) programının kadırılımı boyunca rehberlik edecektir.$\r$\n$\r$\nKaldırım iÅŸlemeni baÅŸlatmadan önce çalışan diÄŸer programlari kapatmanızı öneririz. Böylece bilgisayarınızı yeniden baÅŸlatmadan bazı sistem dosyaları sorunsuz kaldırılabilir.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisans SözleÅŸmesi" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Lütfen $(^NameDA) programını kurmadan önce sözleÅŸmeyi okuyunuz." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "SözleÅŸme koÅŸullarını kabul ediyorsanız, 'Kabul Ediyorum'a basınız. $(^NameDA) programını kurmak için sözleÅŸme koÅŸullarını kabul etmelisiniz." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "SözleÅŸme koÅŸullarını kabul ediyorsanız, aÅŸağıdaki onay kutusunu doldurunuz. $(^NameDA) programını kurmak için sözleÅŸme koÅŸullarını kabul etmelisiniz. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "SözleÅŸme koÅŸullarını kabul ediyorsanız, asagidaki onay düğmesini seçiniz. $(^NameDA) programını kurmak için sözleÅŸme koÅŸullarını kabul etmelisiniz. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisans SözleÅŸmesi" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Lütfen $(^NameDA) programını sisteminizden kaldırmadan önce sözleÅŸmeyi okuyunuz." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "SözleÅŸme koÅŸullarını kabul ediyorsanız, 'Kabul Ediyorum'a basınız. $(^NameDA) programını sisteminizden kaldırmak için sözleÅŸme koÅŸullarını kabul etmelisiniz." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "SözleÅŸme koÅŸullarını kabul ediyorsanız, aÅŸağıdaki onay kutusunu doldurunuz. $(^NameDA) programını sisteminizden kaldırmak için sözleÅŸme koÅŸullarını kabul etmelisiniz. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "SözleÅŸme koÅŸullarını kabul ediyorsanız, asagidaki onay düğmesini seçiniz. $(^NameDA) programını sisteminizden kaldırmak için sözleÅŸme koÅŸullarını kabul etmelisiniz. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "SözleÅŸmenin geri kalanını okumak için 'page down' tuÅŸuna basabilirsiniz." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "BileÅŸen seçimi" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Lütfen $(^NameDA) için kurmak istediginiz bileÅŸenleri seçiniz." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "BileÅŸen Åžeçimi" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Lütfen kaldırmak istediÄŸiniz $(^NameDA) program bileÅŸenini seçiniz." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Açıklama" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "BileÅŸenlerin açıklamalarını görmek için imleci bileÅŸen üzerine götürün." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Hedef dizini seçimi" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA) programını kurmak istediÄŸiniz dizini ÅŸeçiniz." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Kaldırılıcak Dizin Seçimi" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA) programını kaldırmak istediginiz dizini seçiniz." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Kuruluyor" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Lütfen $(^NameDA) kurulurken bekleyiniz." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Kurulum Tamamlandı" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Kurulum baÅŸarıyla tamamlandı." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Kurulum Ä°ptal Edildi" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Kurulum tam olarak tamamlanmadı." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Kaldırılıyor" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Litfen $(^NameDA) programı sisteminizden kaldırılırken bekleyiniz." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Kaldırma Ä°ÅŸlemi Tamamlandır" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Kaldırma iÅŸlemi baÅŸarıyla tamamlandı." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Kaldırma Ä°ÅŸlemi Ä°ptal Edildi" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Kaldırma Ä°ÅŸlemi tamamlanamadı." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) Kurulum sihirbazı tamamlanıyor." + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) bilgisayariniza yüklendi.$\r$\n$\r$\nLütfen 'Bitir'e basarak kurulumu sonlandırın." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) kurulumunun tamamlanması için bilgisayarınızı yeniden baÅŸlatmanız gerekiyor.Bilgisayarınızı yeniden baÅŸlatmak istiyor musunuz?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) Programı Kaldırma Sihirbazı Tamamlanıyor" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) programı sisteminizden kaldırıldı.$\r$\n$\r$\nSihirbazı kapatmak için 'bitir'e basınız." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) programını kaldırma iÅŸleminin tamamlanması için bilgisayarınızın yeniden baÅŸlatılması gerekiyor. Bilgisayarınızın ÅŸimdi yeniden baÅŸlatılmasını ister misiniz?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Yeniden baÅŸlat" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Bilgisayarımı daha sonra baÅŸlatacağım." + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) programını çalıştır" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "beni oku/readme dosyasını &göster" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Bitir" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "BaÅŸlat Menüsü Klasör Seçimi" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "$(^NameDA) kısayollarının konulacagı baÅŸlat menüsü klasörünü seçiniz." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Programın kısayollarının konulacağı baÅŸlat menüsü klasörünü seçiniz. Farklı bir isim girerek yeni bir klasör yaratabilirsiniz." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Kısayolları oluÅŸturmadan devam et" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA) Programını Kaldır" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA) programını sisteminizden kaldırma." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "$(^Name) kurulumundan çıkmak istediÄŸinize emin misiniz?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name) Programi Kaldırma iÅŸleminden çıkmak istediÄŸinize emin misiniz?" +!endif diff --git a/tools/Contrib/Language files/Ukrainian.nlf b/tools/Contrib/Language files/Ukrainian.nlf new file mode 100644 index 0000000..186d963 --- /dev/null +++ b/tools/Contrib/Language files/Ukrainian.nlf @@ -0,0 +1,192 @@ +# Header, don't edit +NLF v6 +# Language ID +1058 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1251 +# RTL - anything else than RTL means LTR +- + +# Translation by Yuri Holubow, Nash-Soft.com, Dmitriy Kononchuk [gri3ly.kiev.ua], Osidach Vitaly and others + +# ^Branding +СиÑтема вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Nullsoft %s +# ^SetupCaption +Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^Name) +# ^UninstallCaption +Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^Name) +# ^LicenseSubCaption +: Ліцензійна угода +# ^ComponentsSubCaption +: Опції вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ +# ^DirSubCaption +: Тека вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ +# ^InstallingSubCaption +: Триває вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ +# ^CompletedSubCaption +: Завершено +# ^UnComponentsSubCaption +: Опції Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ +# ^UnDirSubCaption +: Тека Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ +# ^ConfirmSubCaption +: ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ +# ^UninstallingSubCaption +: Триває Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ +# ^UnCompletedSubCaption +: Завершено +# ^BackBtn +< &Ðазад +# ^NextBtn +&Далі > +# ^AgreeBtn +&ПогоджуюÑÑ +# ^AcceptBtn +Я &приймаю умови Ліцензійної угоди +# ^DontAcceptBtn +Я &не приймаю умови Ліцензійної угоди +# ^InstallBtn +&Ð’Ñтановити +# ^UninstallBtn +&Видалити +# ^CancelBtn +СкаÑувати +# ^CloseBtn +&Закрити +# ^BrowseBtn +О&глÑд... +# ^ShowDetailsBtn +&Подробиці +# ^ClickNext +ÐатиÑніть «Далі» Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ. +# ^ClickInstall +ÐатиÑніть «ВÑтановити», щоб запуÑтити Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²ÑтановленнÑ. +# ^ClickUninstall +ÐатиÑніть «Видалити», щоб запуÑтити Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ. +# ^Name +Ðазва +# ^Completed +Завершено +# ^LicenseText +ОзнайомтеÑÑ Ð· ліцензійною угодою перед вÑтановленнÑм $(^NameDA). Якщо ви згодні з уÑіма умовами угоди, натиÑніть «ПогоджуюÑÑ». +# ^LicenseTextCB +ОзнайомтеÑÑ Ð· ліцензійною угодою перед вÑтановленнÑм $(^NameDA). Якщо ви приймаєте умови угоди, вÑтановіть прапорець нижче. $_CLICK +# ^LicenseTextRB +ОзнайомтеÑÑ Ð· ліцензійною угодою перед вÑтановленнÑм $(^NameDA). Якщо ви приймаєте умови угоди, оберіть перший варіант нижче. $_CLICK +# ^UnLicenseText +ОзнайомтеÑÑ Ð· ліцензійною угодою перед видаленнÑм $(^NameDA). Якщо ви згодні з уÑіма умовами угоди, натиÑніть «ПогоджуюÑÑ». +# ^UnLicenseTextCB +ОзнайомтеÑÑ Ð· ліцензійною угодою перед видаленнÑм $(^NameDA). Якщо ви приймаєте умови угоди, вÑтановіть прапорець нижче. $_CLICK +# ^UnLicenseTextRB +ОзнайомтеÑÑ Ð· ліцензійною угодою перед видаленнÑм $(^NameDA). Якщо ви приймаєте умови угоди, оберіть перший варіант нижче. $_CLICK +# ^Custom +ВлаÑний вибір +# ^ComponentsText +Позначте компоненти, Ñкі ви хочете вÑтановити, та приберіть позначки з непотрібних. $_CLICK +# ^ComponentsSubText1 +Виберіть тип вÑтановленнÑ: +# ^ComponentsSubText2_NoInstTypes +Виберіть компоненти Ð´Ð»Ñ Ð²ÑтановленнÑ: +# ^ComponentsSubText2 +Ðбо виберіть необов'Ñзкові компоненти, Ñкі ви бажаєте вÑтановити: +# ^UnComponentsText +Позначте компоненти, Ñкі ви хочете видалити, та приберіть позначки з тих, що потрібно залишити. $_CLICK +# ^UnComponentsSubText1 +Виберіть тип видаленнÑ: +# ^UnComponentsSubText2_NoInstTypes +Виберіть компоненти Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ: +# ^UnComponentsSubText2 +Ðбо виберіть необов'Ñзкові компоненти, Ñкі ви бажаєте видалити: +# ^DirText +Програму $(^NameDA) буде вÑтановлено в зазначену теку. Щоб вÑтановити в іншу теку, натиÑніть «ОглÑд» Ñ– вкажіть потрібну теку. $_CLICK +# ^DirSubText +Тека Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +# ^DirBrowseText +Виберіть теку Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA): +# ^UnDirText +Програму $(^NameDA) буде видалено із зазначеної теки. Щоб виконати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð· іншої теки, натиÑніть «ОглÑд» Ñ– вкажіть потрібну теку. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Виберіть теку, з Ñкої потрібно видалити $(^NameDA): +# ^SpaceAvailable +"ДоÑтупно міÑцÑ: " +# ^SpaceRequired +"Потрібно міÑцÑ: " +# ^UninstallingText +$(^NameDA) буде видалено з вказаної теки. $_CLICK +# ^UninstallingSubText +Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·: +# ^FileError +Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ñƒ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: \r\n\r\n$0\r\n\r\nÐатиÑніть «Перервати», щоб зупинити вÑтановленнÑ,\r\n«Повторити», щоб Ñпробувати знову, або\r\n«Ігнорувати», щоб пропуÑтити цей файл. +# ^FileError_NoIgnore +Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ñƒ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: \r\n\r\n$0\r\n\r\nÐатиÑніть «Повторити», щоб Ñпробувати знову, або\r\n«СкаÑувати», щоб зупинити вÑтановленнÑ. +# ^CantWrite +"Ðеможливо запиÑати: " +# ^CopyFailed +Ðе вдалоÑÑ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ñ‚Ð¸ +# ^CopyTo +"Копіювати до " +# ^Registering +"РеєÑтраціÑ: " +# ^Unregistering +"СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації: " +# ^SymbolNotFound +"Ðеможливо знайти Ñимвол: " +# ^CouldNotLoad +"Ðеможливо завантажити: " +# ^CreateFolder +"Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÐ¸: " +# ^CreateShortcut +"Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñрлика: " +# ^CreatedUninstaller +"Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ видаленнÑ: " +# ^Delete +"Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ: " +# ^DeleteOnReboot +"Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ: " +# ^ErrorCreatingShortcut +"Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñрлика: " +# ^ErrorCreating +"Помилка ÑтвореннÑ: " +# ^ErrorDecompressing +Помилка Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…! Можливо, пошкоджений файл вÑтановленнÑ. +# ^ErrorRegistering +Помилка реєÑтрації бібліотеки (DLL) +# ^ExecShell +"Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ оболонки: " +# ^Exec +"ВиконаннÑ: " +# ^Extract +"РозпакуваннÑ: " +# ^ErrorWriting +"РозпакуваннÑ: помилка запиÑу даних у файл " +# ^InvalidOpcode +Пошкоджений файл вÑтановленнÑ: неприпуÑтимий код відповіді +# ^NoOLE +"Ðемає OLE длÑ: " +# ^OutputFolder +"Тека призначеннÑ: " +# ^RemoveFolder +"Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÐ¸: " +# ^RenameOnReboot +"Перейменувати піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ: " +# ^Rename +"ПерейменуваннÑ: " +# ^Skipped +"Пропущено: " +# ^CopyDetails +Копіювати подробиці до буфера обміну +# ^LogInstall +Зберегти журнал процеÑу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ +# ^Byte +Б +# ^Kilo + К +# ^Mega + Ðœ +# ^Giga + Г diff --git a/tools/Contrib/Language files/Ukrainian.nsh b/tools/Contrib/Language files/Ukrainian.nsh new file mode 100644 index 0000000..58ab77c --- /dev/null +++ b/tools/Contrib/Language files/Ukrainian.nsh @@ -0,0 +1,130 @@ +;Language: Ukrainian (1058) +;By Yuri Holubow, Nash-Soft.com +;Corrections by Osidach Vitaly (Vit_Os2) and others + +!insertmacro LANGFILE "Ukrainian" = "УкраїнÑька" "Ukrayins'ka" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "ЛаÑкаво проÑимо до вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° допоможе вам вÑтановити $(^NameDA).$\r$\n$\r$\nРадимо закрити вÑÑ– інші програми, перш ніж почати вÑтановленнÑ. ЗавдÑки цьому будуть оновлені відповідні ÑиÑтемні файли без потреби перезапуÑкати комп’ютер.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "ЛаÑкаво проÑимо до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° допоможе вам видалити $(^NameDA).$\r$\n$\r$\nПеред початком Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¾Ð²â€™Ñзково закрийте $(^NameDA).$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Ліцензійна угода" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "ОзнайомтеÑÑ Ð· умовами ліцензійної угоди перед вÑтановленнÑм $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Якщо ви згодні з умовами угоди, натиÑніть кнопку «ПогоджуюÑÑ», щоб продовжити. Ви маєте погодитиÑÑ Ð· угодою Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Якщо ви згодні з умовами угоди, вÑтановіть позначку нижче. Ви маєте погодитиÑÑ Ð· угодою Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Якщо ви згодні з умовами угоди, виберіть перший варіант нижче. Ви маєте погодитиÑÑ Ð· угодою Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Ліцензійна угода" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "ОзнайомтеÑÑ Ð· умовами ліцензійної угоди перед видаленнÑм $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Якщо ви згодні з умовами угоди, натиÑніть «ПогоджуюÑÑ» Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ. Ви маєте погодитиÑÑ Ð· угодою Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Якщо ви згодні з умовами угоди, вÑтановіть позначку нижче. Ви маєте погодитиÑÑ Ð· угодою Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Якщо ви згодні з умовами угоди, виберіть перший варіант нижче. Ви маєте погодитиÑÑ Ð· угодою Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ÐатиÑніть клавішу PageDown, щоб переглÑнути угоду далі." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Оберіть компоненти" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Оберіть, Ñкі компоненти $(^NameDA) ви хочете вÑтановити." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Оберіть компоненти" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Оберіть, Ñкі компоненти $(^NameDA) ви хочете видалити." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ОпиÑ" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ðаведіть мишу на компонент, щоб побачити його опиÑ." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Оберіть компонент, щоб побачити його опиÑ." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Оберіть теку вÑтановленнÑ" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Оберіть теку, в Ñку потрібно вÑтановити $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Оберіть теку видаленнÑ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Оберіть теку, з Ñкої потрібно видалити $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Ð’ÑтановленнÑ" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Будь лаÑка, зачекайте поки триває вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA)." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно завершено." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ було завершено." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "ВидаленнÑ" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Будь лаÑка, зачекайте поки триває Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA)." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно завершено." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½Ðµ було завершено." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) вÑтановлено на ваш комп’ютер.$\r$\n$\r$\nÐатиÑніть «Завершити» Ð´Ð»Ñ Ð²Ð¸Ñ…Ð¾Ð´Ñƒ." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Щоб завершити вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^NameDA), потрібно перезапуÑтити комп’ютер. Хочете перезапуÑтити зараз?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) видалено з вашого комп’ютера.$\r$\n$\r$\nÐатиÑніть «Завершити» Ð´Ð»Ñ Ð²Ð¸Ñ…Ð¾Ð´Ñƒ." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Щоб завершити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA), потрібно перезапуÑтити комп’ютер. Хочете перезапуÑтити зараз?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "ПерезапуÑтити" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Я хочу перезапуÑтити влаÑноруч згодом" + ${LangFileString} MUI_TEXT_FINISH_RUN "&ЗапуÑтити $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Показати інформацію про програму" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Завершити" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Тека в меню ПуÑк" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Оберіть «Тека в меню ПуÑк» Ð´Ð»Ñ Ñрликів програми $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Оберіть теку в меню ПуÑк, в Ñкій ви бажаєте Ñтворити Ñрлики Ð´Ð»Ñ Ð²Ñтановленої програми. Можна також ввеÑти назву Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— теки." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Ðе Ñтворювати Ñрлики" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^NameDA) з вашого комп’ютера." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ви дійÑно хочете вийти з вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ви дійÑно хочете вийти з Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ $(^Name)?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Оберіть кориÑтувачів" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Оберіть кориÑтувачів, Ð´Ð»Ñ Ñких потрібно вÑтановити $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Оберіть, чи хочете ви вÑтановити $(^NameDA) лише Ð´Ð»Ñ Ñебе, чи Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів цього комп’ютера. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Ð’Ñтановити Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів цього комп’ютера" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Ð’Ñтановити лише Ð´Ð»Ñ Ð¼ÐµÐ½Ðµ" +!endif \ No newline at end of file diff --git a/tools/Contrib/Language files/Uzbek.nlf b/tools/Contrib/Language files/Uzbek.nlf new file mode 100644 index 0000000..8d32284 --- /dev/null +++ b/tools/Contrib/Language files/Uzbek.nlf @@ -0,0 +1,190 @@ +# Header, don't edit +NLF v6 +# Language ID +1091 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Emil Garipov [emil.garipov@gmail.com] +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +O'rnatish $(^Name) +# ^UninstallCaption +O'chirish $(^Name) +# ^LicenseSubCaption +: Lisenzion kelishuv +# ^ComponentsSubCaption +: O'rnatish parametrlari +# ^DirSubCaption +: O'rnatish papkasi +# ^InstallingSubCaption +: Fayllarni kopiya qilish +# ^CompletedSubCaption +: Operatsiya yakunlandi +# ^UnComponentsSubCaption +: O'chirish parametrlari +# ^UnDirSubCaption +: O'chirsh papkasi +# ^ConfirmSubCaption +: Tasdiqlash +# ^UninstallingSubCaption +: Fayllarni o'chirish +# ^UnCompletedSubCaption +: Operatsiya yakunlandi +# ^BackBtn +< &Orqaga +# ^NextBtn +&Oldinga > +# ^AgreeBtn +&Qabul qilaman +# ^AcceptBtn +Men &kelishuv shartlarini qabul qilaman +# ^DontAcceptBtn +Men &kelishuv shartlarini qabul qilmayman +# ^InstallBtn +&O'rnatish +# ^UninstallBtn +&O'chirish +# ^CancelBtn +Bekor qilish +# ^CloseBtn +&Yopish +# ^BrowseBtn +&Ko'rish ... +# ^ShowDetailsBtn +&Äåòàëè... +# ^ClickNext +Davom etish uchun 'Oldinga'tugmachasini bosing. +# ^ClickInstall +Dasturni o'rnatish uchun'O'rnatish' tugmachasini bosing. +# ^ClickUninstall +Dasturni o'chirish uchun 'O'chirsh' tugmachasini bosing. +# ^Name +Ism +# ^Completed +Tayor +# ^LicenseText +$(^NameDA)ni o'rnatishdan oldin lisenzion kelishuv bilan tanishib oling. Kelishuv shartlarini qabul qilsangiz 'Qabul qilaman' tugmachasini bosing. +# ^LicenseTextCB +$(^NameDA)ni o'rnatishdan oldin lisenzion kelishuv bilan tanishib oling. Kelishuv shartlarini qabul qilsangiz bayroqchani joylashtiring. $_CLICK +# ^LicenseTextRB +$(^NameDA)ni o'rnatishdan oldin lisenzion kelishuv bilan tanishib oling. Kelishuv shartlarini qabul qilsangiz quyida taklif etilganlardan birinchi variantni tanlang. $_CLICK +# ^UnLicenseText +$(^NameDA)ni o'rnatishdan oldin lisenzion kelishuv bilan tanishib oling. Kelishuv shartlarini qabul qilsangiz 'Qabul qilaman' tugmachasini bosing. +# ^UnLicenseTextCB +$(^NameDA)ni o'rnatishdan oldin lisenzion kelishuv bilan tanishib oling. Kelishuv shartlarini qabul qilsangiz bayroqchani joylashtiring. $_CLICK +# ^UnLicenseTextRB +$(^NameDA)ni o'rnatishdan oldin lisenzion kelishuv bilan tanishib oling. Kelishuv shartlarini qabul qilsangiz quyida taklif etilganlardan birinchi variantni tanlang. $_CLICK +# ^Custom +Tanlash bo'icha +# ^ComponentsText +O'rnatish ucun dastur komponentlarini tanlang. $_CLICK +# ^ComponentsSubText1 +O'rnatish jarayonini tanlang: +# ^ComponentsSubText2_NoInstTypes +O'rnatish uchun dastur komponentlarini tanlang: +# ^ComponentsSubText2 +Yoki o'rnatish uchun qushimcha komponentlarini tanlang: +# ^UnComponentsText +O'chirish uchun dastur komponentlarini tanlang. $_CLICK +# ^UnComponentsSubText1 +O'chirish jarayonini tanlang: +# ^UnComponentsSubText2_NoInstTypes +O'chirish uchun dastur komponentlarini tanlang: +# ^UnComponentsSubText2 +Yoki o'chirish uchun qushimcha komponentlarini tanlang: +# ^DirText +Dastur $(^NameDA)ni ko'rsatilgan papkaga o'rnatadi. Boshqa papkaga o'rnatish uchun, 'Ko'rish'tugmachasini bosing va uni ko'rsatib bering. $_CLICK +# ^DirSubText +O'rnatish papkasi +# ^DirBrowseText +O'rnatish papkasini ko'rsating $(^NameDA): +# ^UnDirText +Dastur $(^NameDA)ni ko'rsatilgan papkadan o'chiradi. Boshqa papkaga o'rnatish uchun, 'Ko'rish'tugmachasini bosing va uni ko'rsatib bering. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +$(^NameDA)ni o'chirish uchun papkani ko'rsating: +# ^SpaceAvailable +"Diskda joriy qilingan: " +# ^SpaceRequired +"Diskda talab qilinadigan: " +# ^UninstallingText +$(^NameDA) dasturi kompyuterizdan uchiriladi. $_CLICK +# ^UninstallingSubText +O'chirilish: +# ^FileError +Yozish uchun faylni ochish imkoniyati yuq: \r\n\t"$0"\r\n'Tuxtashish': O'rnatishni tuxtatish;\r\n"Takrorlash":yana bir o'rinib ko'rish;\r\n"Taylab ketish": shu xarakatni taylab ketish. +# ^FileError_NoIgnore +Yozish uchun faylni ochish imkoniyati yuq: \r\n\t"$0"\r\n'Takrorlash': yana bir o'rinib ko'rish;\r\n'Bekor qilish': o'rnatish protsessini bekor qilish. +# ^CantWrite +"Yozish uchun imkoniyat yuq: " +# ^CopyFailed +Kopiya qilganda xato bor +# ^CopyTo +"Kopiya qilish " +# ^Registering +"Ro'yxatga olish: " +# ^Unregistering +"Ro'xatdan chiqish: " +# ^SymbolNotFound +"Simvolni topish imkoniyati yuq: " +# ^CouldNotLoad +"Zagruzka qilish imkoniyati yuq: " +# ^CreateFolder +"Papkani yaratish: " +# ^CreateShortcut +"Belgini yaratish: " +# ^CreatedUninstaller +"O'chirish dasturini yaratish: " +# ^Delete +"Faylni o'chirish: " +# ^DeleteOnReboot +"Kompyuter qayta yuklash jaraonida o'chirish: " +# ^ErrorCreatingShortcut +"Belgini yaratish jarayonida xato: " +# ^ErrorCreating +"Yaratish xatosi: " +# ^ErrorDecompressing +Ma'lumotlarni asilga qaytarish xatosi! Distributiv ziyonlangan bulishi mumkin. +# ^ErrorRegistering +Kutubxonani ro'xatga olish imkoniyati yuq (DLL) +# ^ExecShell +"Qoplang'ich komandasini bajarish: " +# ^Exec +"Bajarish: " +# ^Extract +"Ichidan olish: " +# ^ErrorWriting +"Ichidan olish: fayl yozish xatosi " +# ^InvalidOpcode +Distributiv ziyonlangan: ruxsatlanmangan kod +# ^NoOLE +"Quydagilarga OLE yuq: " +# ^OutputFolder +"Papkani o'rnatish: " +# ^RemoveFolder +"Papkani o'chirish: " +# ^RenameOnReboot +"Kompyuter qayta yuklanish jarayonida ismni qaita quyish: " +# ^Rename +"Ismni qayta quyish: " +# ^Skipped +"O'tkazib yuborish: " +# ^CopyDetails +Bufer obmenaga ma'lumotlarni kopiya qilish +# ^LogInstall +O'rnatish xisobotini chiqorish +# byte +áàéò +# kilo + Ê +# mega + ÃŒ +# giga + à \ No newline at end of file diff --git a/tools/Contrib/Language files/Uzbek.nsh b/tools/Contrib/Language files/Uzbek.nsh new file mode 100644 index 0000000..b60afd5 --- /dev/null +++ b/tools/Contrib/Language files/Uzbek.nsh @@ -0,0 +1,121 @@ +;Language: Uzbek (1091) +;Translation updated by Emil Garipov [emil.garipov@gmail.com] + +!insertmacro LANGFILE "Uzbek" = "O‘zbek" "O'zbek" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Sizni o'rnatish dastur tabriklaydi $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Bu dastur sizning komputeringizga $(^NameDA) dasturni o'rnatadi.$\r$\n$\r$\nO'rnatishdan oldin ishlayotgan barcha ilovalarni yopish tavsiya etiladi. Bu o'rnatuvchi dasturga kompyuterni qayta yuklamasdan sistemali fayllarni yangilash imkonini beradi.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Sizni $(^NameDA)ni o'chirish dasturi tabriklaydi" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Bu dastur $(^NameDA)ni sizning kompyuteringizdan o'chiradi.$\r$\n$\r$\nO'chirishdan oldin $(^NameDA) dasturni ishlamayotganligini aniqlang.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisenzion kelishuv" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA) dasturini o'rnatishdan oldin lisenzion kelishuv bilan tanishib chiking." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Agar kelishuv shartlariga rozi bo'lsangiz $\"Qabul kilaman$\" tugmasini bosing.Dasturni o'rnatish uchun,kelishuv shartlarini qabul qilish kerak." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Agar siz kelishuv shartlarini qabul kilsangiz,bayroqchani joylashtiring. Dasturni o'rnatish uchun kelisuv shartlarini qabul qilish kerak. $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Kelishuv shartlarini qabul qilsangiz quida taklif etilganlardan birinchi variantni tanlang. Dasturni o'rnatish uchun kelisuv shartlarini qabul qilish kerak. $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisenzion kelishuv" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA)ni o'chirishdan oldin lesinzion kelishuv bilan tanishing." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Agar siz kelishuv shartlariniqabul qilsangiz $\"Qabul qilaman$\" tugmasini bosing. O'chirish uchun kelishuv shartlarini qabul qilishingiz kerak. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Agar shartlarni qabul qilsangiz, bayroqchani o'rnating.O'chirish uchun kelishuv shartlarini qabul qilishingiz kerak. $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Kelishuv shartlarini qabul qilsangiz, taklif etilganlardan birinchi variantni tanlang.O'chirish uchun kelishuv shartlarini qabul qilishingiz kerak. $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Matn bo'icha silgish uchun $\"PageUp$\" va $\"PageDown$\" tugmasidan foydalaning." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "O'rnatilayotgan dastur komponentlari" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "$(^NameDA) dasturning o'zingizga kerak bo'lgan komponentasini tanlang." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Dastur komponentlari" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA)ning o'chirish kerak bo'lgan komponentlarini tanlang." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Tasvir" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Sichqonchaning kursorini komponent tasvirini o'qish uchun ustiga quying." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tasvirini o'qish o'chun, komponentni tanlang." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "O'rnatish papkasini tanlash" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA)ni o'rnatish uchun papka tanlang." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "O'chiriladigan papkani tanlash" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA) o'chiriladigan papkasini ko'rsating." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Fayllarni ko'chirish" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Biror kuting, $(^NameDA) fayllari ko'chirilmoqda..." + ${LangFileString} MUI_TEXT_FINISH_TITLE "O'rnatish jarayoni tugadi" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "O'rnatish jarayoni muvaffaqiyat bilan tugadi." + ${LangFileString} MUI_TEXT_ABORT_TITLE "O'rnatish jarayoni uzildi" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "O'rnatish jarayoni tugamadi." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "O'chirish" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Biror kutib turing, $(^NameDA) fayllarini o'chirish bajarilmoqda..." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "O'chirish tuganlandi" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Dasturni o'chirish muvaffaqiyatli yakunlandi." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "O'chirish jarayoni uzildi" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "O'chirish to'la bajarilmadi." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA)ni o'rnatuvci dasturi o'z ishini tugatmoqda" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA)ni o'rnatish bajarildi.$\r$\n$\r$\nO'rnatuvchi dasturdan chiqish uchun $\"Tayor$\" tugmasini bosing." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) dasturini o'rnatish jarayonini tugatish uchun Kompyuterni qayta yuklash kerak.Shu ishni bajarishni xoziroq istaysizmi?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA)ni o'chirish dasturi o'z ishini tugatdi." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) dasturi kompyuteringizdan o'chirildi.$\r$\n$\r$\nO'chirish dasturidan chiqish uchun $\"Tayor$\"tugmasini bosing." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) dasturini o'chirishni tugatish uchun kompyuterni qayta yuklash kerak.shu ishni xozir bajarasizmi?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ha, kompyuter hozir qayta yuklansin" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Yo'q, bu ishni keyinroq bajaraman" + ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA) &Ishga tushirilsin" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Readme fayli ko'rsatilsin" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Tayor" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Papka $\"Ãóñê$\" menyusida" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Dastur belgilarini joylashtirish uchun $\"Ãóñê$\" menyusidan papka tanlang." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "$\"Ãóñê$\" menyusidan dastur belgilari joylashadigan papka tanlang. Siz papkaning boshqa ismini kiritishingiz mumkin" + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Belgilar yaratilmasin" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA)ni o'chirish" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA)ni kompyuterdan o'chirish." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Haqiqatdan ham siz $(^Name)ni o'rnatishni bekor qilmoqchimisiz?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name)ni o'chirish jarayonini bekor qilmoqchisizmi?" +!endif diff --git a/tools/Contrib/Language files/Vietnamese.nlf b/tools/Contrib/Language files/Vietnamese.nlf new file mode 100644 index 0000000..3e90576 --- /dev/null +++ b/tools/Contrib/Language files/Vietnamese.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1066 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1258 +# RTL - anything else than RTL means LTR +- +# Translation by NGUYỄN MaÌ£nh HuÌ€ng +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +CaÌ€i đặt $(^Name) +# ^UninstallCaption +Gỡ bỏ $(^Name) +# ^LicenseSubCaption +: Thỏa thuận GiâÌy pheÌp +# ^ComponentsSubCaption +: TuÌ€y choÌ£n CaÌ€i đặt +# ^DirSubCaption +: ThÆ° muÌ£c CaÌ€i đặt +# ^InstallingSubCaption +: CaÌ€i đặt +# ^CompletedSubCaption +: HoaÌ€n thaÌ€nh +# ^UnComponentsSubCaption +: TuÌ€y choÌ£n Gỡ bỏ +# ^UnDirSubCaption +: ThÆ° muÌ£c Gỡ bỏ +# ^ConfirmSubCaption +: XaÌc nhận +# ^UninstallingSubCaption +: Gỡ bỏ +# ^UnCompletedSubCaption +: HoaÌ€n thaÌ€nh +# ^BackBtn +< &LuÌ€i +# ^NextBtn +&TiêÌn > +# ^AgreeBtn +Tô&i đồng yÌ +# ^AcceptBtn +Tô&i châÌp thuận caÌc Ä‘iều khoản của Thỏa thuận GiâÌy pheÌp +# ^DontAcceptBtn +Tôi &không châÌp thuận caÌc Ä‘iều khoản của Thỏa thuận GiâÌy pheÌp +# ^InstallBtn +&CaÌ€i đặt +# ^UninstallBtn +&Gỡ bỏ +# ^CancelBtn +Hủy bỏ +# ^CloseBtn +ÄoÌn&g +# ^BrowseBtn +Du&yệt... +# ^ShowDetailsBtn +&Hiện chi tiêÌt +# ^ClickNext +NhâÌn TiêÌn để tiêÌp tuÌ£c. +# ^ClickInstall +NhâÌn “CaÌ€i đặt†để băÌt đầu việc caÌ€i đặt. +# ^ClickUninstall +NhâÌn “Gỡ bỏ†để băÌt đầu việc gỡ bỏ. +# ^Name +Tên +# ^Completed +HoaÌ€n thaÌ€nh +# ^LicenseText +Vui loÌ€ng xem xeÌt thỏa thuận giâÌy pheÌp trÆ°Æ¡Ìc khi caÌ€i đặt $(^NameDA). NêÌu baÌ£n châÌp thuận tâÌt cả caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn “Tôi đồng yÌâ€. +# ^LicenseTextCB +Vui loÌ€ng xem xeÌt thỏa thuận giâÌy pheÌp trÆ°Æ¡Ìc khi caÌ€i đặt $(^NameDA). NêÌu baÌ£n châÌp thuận tâÌt cả caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn ô bên dÆ°Æ¡Ìi. $_CLICK +# ^LicenseTextRB +Vui loÌ€ng xem xeÌt thỏa thuận giâÌy pheÌp trÆ°Æ¡Ìc khi caÌ€i đặt $(^NameDA). NêÌu baÌ£n châÌp thuận tâÌt cả caÌc Ä‘iều khoản của thỏa thuận, hãy choÌ£n ô đầu tiên bên dÆ°Æ¡Ìi. $_CLICK +# ^UnLicenseText +Vui loÌ€ng xem xeÌt thỏa thuận giâÌy pheÌp trÆ°Æ¡Ìc khi gỡ bỏ $(^NameDA). NêÌu baÌ£n châÌp thuận tâÌt cả caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn “Tôi đồng yÌâ€. +# ^UnLicenseTextCB +Vui loÌ€ng xem xeÌt thỏa thuận giâÌy pheÌp trÆ°Æ¡Ìc khi gỡ bỏ $(^NameDA). NêÌu baÌ£n châÌp thuận tâÌt cả caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn ô bên dÆ°Æ¡Ìi. $_CLICK +# ^UnLicenseTextRB +Vui loÌ€ng xem xeÌt thỏa thuận giâÌy pheÌp trÆ°Æ¡Ìc khi gỡ bỏ $(^NameDA). NêÌu baÌ£n châÌp thuận tâÌt cả caÌc Ä‘iều khoản của thỏa thuận, hãy choÌ£n ô đầu tiên bên dÆ°Æ¡Ìi. $_CLICK +# ^Custom +TuÌ€y biêÌn +# ^ComponentsText +ChoÌ£n thaÌ€nh phần maÌ€ baÌ£n muôÌn caÌ€i đặt vaÌ€ không choÌ£n caÌc thaÌ€nh phần maÌ€ baÌ£n không muôÌn caÌ€i đặt. $_CLICK +# ^ComponentsSubText1 +ChoÌ£n kiểu caÌ€i đặt: +# ^ComponentsSubText2_NoInstTypes +ChoÌ£n thaÌ€nh phần để caÌ€i đặt: +# ^ComponentsSubText2 +Hoặc, choÌ£n thaÌ€nh phần phuÌ£ maÌ€ baÌ£n muôÌn caÌ€i đặt: +# ^UnComponentsText +ChoÌ£n thaÌ€nh phần maÌ€ baÌ£n muôÌn gỡ bỏ vaÌ€ không choÌ£n caÌc thaÌ€nh phần maÌ€ baÌ£n không muôÌn gỡ bỏ. $_CLICK +# ^UnComponentsSubText1 +ChoÌ£n kiểu gỡ bỏ: +# ^UnComponentsSubText2_NoInstTypes +ChoÌ£n thaÌ€nh phần để gỡ bỏ: +# ^UnComponentsSubText2 +Hoặc, choÌ£n thaÌ€nh phần phuÌ£ maÌ€ baÌ£n muôÌn gỡ bỏ: +# ^DirText +TriÌ€nh trÆ¡Ì£ liÌ sẽ caÌ€i đặt $(^NameDA) vaÌ€o thÆ° muÌ£c sau. Äể caÌ€i đặt vaÌ€o một thÆ° muÌ£c khaÌc, hãy nhâÌn Duyệt để choÌ£n thÆ° muÌ£c. $_CLICK +# ^DirSubText +ThÆ° muÌ£c Ä‘iÌch +# ^DirBrowseText +ChoÌ£n thÆ° muÌ£c để caÌ€i đặt $(^NameDA): +# ^UnDirText +TriÌ€nh trÆ¡Ì£ liÌ sẽ gỡ bỏ $(^NameDA) khỏi thÆ° muÌ£c sau. Äể gỡ bỏ khỏi một thÆ° muÌ£c khaÌc, hãy nhâÌn Duyệt để choÌ£n thÆ° muÌ£c. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +ChoÌ£n thÆ° muÌ£c để gỡ bỏ $(^NameDA): +# ^SpaceAvailable +"Dung lÆ°Æ¡Ì£ng hiện coÌ: " +# ^SpaceRequired +"Dung lÆ°Æ¡Ì£ng yêu cầu: " +# ^UninstallingText +$(^NameDA) sẽ biÌ£ gỡ bỏ khỏi thÆ° muÌ£c sau. $_CLICK +# ^UninstallingSubText +Äang gỡ bỏ khỏi: +# ^FileError +Lỗi khi mở tập tin để ghi: \r\n\r\n$0\r\n\r\nNhâÌn “Hủy bỏ†để ngÆ°Ì€ng việc caÌ€i đặt,\r\n“Thử laÌ£i†để thử lần nữa, hoặc\r\n“Bỏ qua†để bỏ qua tập tin naÌ€y. +# ^FileError_NoIgnore +Lỗi khi mở tập tin để ghi: \r\n\r\n$0\r\n\r\nNhâÌn “Thử laÌ£i†để thử lần nữa, hoặc\r\n“Hủy bỏ†để ngÆ°Ì€ng việc caÌ€i đặt. +# ^CantWrite +"Không thể ghi: " +# ^CopyFailed +Sao cheÌp biÌ£ thâÌt baÌ£i +# ^CopyTo +"Sao cheÌp vaÌ€o " +# ^Registering +"Äang đăng kiÌ: " +# ^Unregistering +"Äang hủy đăng kiÌ: " +# ^SymbolNotFound +"Không thể tiÌ€m thâÌy biểu tÆ°Æ¡Ì£ng: " +# ^CouldNotLoad +"Không thể naÌ£p: " +# ^CreateFolder +"TaÌ£o thÆ° muÌ£c: " +# ^CreateShortcut +"TaÌ£o lôÌi tăÌt: " +# ^CreatedUninstaller +"TaÌ£o triÌ€nh gỡ bỏ: " +# ^Delete +"XoÌa tập tin: " +# ^DeleteOnReboot +"XoÌa khi khởi động laÌ£i: " +# ^ErrorCreatingShortcut +"Lỗi khi taÌ£o lôÌi tăÌt: " +# ^ErrorCreating +"Lỗi khi taÌ£o: " +# ^ErrorDecompressing +Lỗi khi giải neÌn dữ liệu! CoÌ thể triÌ€nh caÌ€i đặt Ä‘ã biÌ£ hỏng? +# ^ErrorRegistering +Lỗi khi đăng kiÌ DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"ThÆ°Ì£c thi: " +# ^Extract +"TriÌch xuâÌt: " +# ^ErrorWriting +"TriÌch xuâÌt: lôi khi ghi vaÌ€o tập tin " +# ^InvalidOpcode +TriÌ€nh caÌ€i đặt biÌ£ hỏng: mã taÌc vuÌ£ bâÌt hÆ¡Ì£p lệ +# ^NoOLE +"Không coÌ OLE cho: " +# ^OutputFolder +"ThÆ° muÌ£c đầu ra: " +# ^RemoveFolder +"XoÌa thÆ° muÌ£c: " +# ^RenameOnReboot +"Äổi tên khi khởi động laÌ£i: " +# ^Rename +"Äổi tên: " +# ^Skipped +"Äã bỏ qua: " +# ^CopyDetails +Sao cheÌp Chi tiêÌt vaÌ€o Clipboard +# ^LogInstall +LÆ°u kiÌ quaÌ triÌ€nh caÌ€i đặt +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Vietnamese.nsh b/tools/Contrib/Language files/Vietnamese.nsh new file mode 100644 index 0000000..a9468c9 --- /dev/null +++ b/tools/Contrib/Language files/Vietnamese.nsh @@ -0,0 +1,129 @@ +;Language: Vietnamese (1066) +;By NGUYỄN MaÌ£nh HuÌ€ng + +!insertmacro LANGFILE "Vietnamese" = "Tiếng Việt" "Tieng Viet" + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "ChaÌ€o mÆ°Ì€ng đêÌn vÆ¡Ìi TrÆ¡Ì£ liÌ CaÌ€i đặt $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "TriÌ€nh trÆ¡Ì£ liÌ sẽ hÆ°Æ¡Ìng dẫn baÌ£n việc caÌ€i đặt $(^NameDA).$\r$\n$\r$\nBaÌ£n nên Ä‘oÌng tâÌt cả caÌc chÆ°Æ¡ng triÌ€nh khaÌc trÆ°Æ¡Ìc khi băÌt đầu caÌ€i đặt. Äiều naÌ€y coÌ thể giuÌp cập nhật caÌc tập tin hệ thôÌng maÌ€ không cần phải khởi động laÌ£i maÌy tiÌnh.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "ChaÌ€o mÆ°Ì€ng đêÌn vÆ¡Ìi TrÆ¡Ì£ liÌ Gỡ bỏ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "TriÌ€nh trÆ¡Ì£ liÌ sẽ hÆ°Æ¡Ìng dẫn baÌ£n việc gỡ bỏ $(^NameDA).$\r$\n$\r$\nTrÆ°Æ¡Ìc khi băÌt đầu gỡ bỏ, hãy chăÌc chăÌn rằng $(^NameDA) Ä‘ang không chaÌ£y.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Thỏa thuận GiâÌy pheÌp" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Vui loÌ€ng xem xeÌt caÌc Ä‘iều khoản giâÌy pheÌp trÆ°Æ¡Ìc khi caÌ€i đặt $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "NêÌu baÌ£n châÌp thuận caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn “Tôi đồng y̆để tiêÌp tuÌ£c. BaÌ£n phải châÌp thuận bản thỏa thuận để caÌ€i đặt $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "NêÌu baÌ£n châÌp thuận caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn ô bên dÆ°Æ¡Ìi. BaÌ£n phải châÌp thuận bản thỏa thuận để caÌ€i đặt $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "NêÌu baÌ£n châÌp thuận caÌc Ä‘iều khoản của thỏa thuận, hãy choÌ£n ô đầu tiên bên dÆ°Æ¡Ìi. BaÌ£n phải châÌp thuận bản thỏa thuận để caÌ€i đặt $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Thỏa thuận GiâÌy pheÌp" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Vui loÌ€ng xem xeÌt caÌc Ä‘iều khoản giâÌy pheÌp trÆ°Æ¡Ìc khi gỡ bỏ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "NêÌu baÌ£n châÌp thuận caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn “Tôi đồng y̆để tiêÌp tuÌ£c. BaÌ£n phải châÌp thuận bản thỏa thuận để gỡ bỏ $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "NêÌu baÌ£n châÌp thuận caÌc Ä‘iều khoản của thỏa thuận, hãy nhâÌn ô bên dÆ°Æ¡Ìi. BaÌ£n phải châÌp thuận bản thỏa thuận để gỡ bỏ $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "NêÌu baÌ£n châÌp thuận caÌc Ä‘iều khoản của thỏa thuận, hãy choÌ£n ô đầu tiên bên dÆ°Æ¡Ìi. BaÌ£n phải châÌp thuận bản thỏa thuận để gỡ bỏ $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "ÂÌn Page Down để xem phần coÌ€n laÌ£i của thỏa thuận." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ChoÌ£n thaÌ€nh phần" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "ChoÌ£n caÌc tiÌnh năng của $(^NameDA) maÌ€ baÌ£n muôÌn caÌ€i đặt." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ChoÌ£n thaÌ€nh phần" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ChoÌ£n caÌc tiÌnh năng của $(^NameDA) maÌ€ baÌ£n muôÌn gỡ bỏ." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Mô tả" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Rê chuột lên trên một thaÌ€nh phần để thâÌy mô tả của noÌ." + !else + #FIXME:MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "ChoÌ£n thÆ° muÌ£c caÌ€i đặt" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "ChoÌ£n thÆ° muÌ£c để caÌ€i đặt $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "ChoÌ£n thÆ° muÌ£c gỡ bỏ" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "ChoÌ£n thÆ° muÌ£c để gỡ bỏ $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "CaÌ€i đặt" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vui loÌ€ng Ä‘Æ¡Ì£i trong khi $(^NameDA) Ä‘ang Ä‘Æ°Æ¡Ì£c caÌ€i đặt." + ${LangFileString} MUI_TEXT_FINISH_TITLE "CaÌ€i đặt hoaÌ€n tâÌt" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Việc caÌ€i đặt Ä‘ã hoaÌ€n tâÌt thaÌ€nh công." + ${LangFileString} MUI_TEXT_ABORT_TITLE "CaÌ€i đặt biÌ£ hủy" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Việc caÌ€i đặt không hoaÌ€n tâÌt thaÌ€nh công." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Gỡ bỏ" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vui loÌ€ng Ä‘Æ¡Ì£i trong khi $(^NameDA) Ä‘ang Ä‘Æ°Æ¡Ì£c gỡ bỏ." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Gỡ bỏ hoaÌ€n tâÌt" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Việc gỡ bỏ Ä‘ã hoaÌ€n tâÌt thaÌ€nh công." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Gỡ bỏ biÌ£ hủy" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Việc gỡ bỏ không hoaÌ€n tâÌt thaÌ€nh công." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "HoaÌ€n tâÌt CaÌ€i đặt $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) Ä‘ã Ä‘Æ°Æ¡Ì£c caÌ€i đặt vaÌ€o maÌy tiÌnh của baÌ£n.$\r$\n$\r$\nNhâÌn “HoaÌ€n thaÌ€nh†để Ä‘oÌng TriÌ€nh trÆ¡Ì£ liÌ." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "MaÌy tiÌnh của baÌ£n phải Ä‘Æ°Æ¡Ì£c khởi động laÌ£i để hoaÌ€n tâÌt việc caÌ€i đặt $(^NameDA). BaÌ£n coÌ muôÌn khởi động laÌ£i ngay không?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "HoaÌ€n tâÌt Gỡ bỏ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) Ä‘ã Ä‘Æ°Æ¡Ì£c gỡ bỏ khỏi maÌy tiÌnh của baÌ£n.$\r$\n$\r$\nNhâÌn “HoaÌ€n thaÌ€nh†để Ä‘oÌng TriÌ€nh trÆ¡Ì£ liÌ." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "MaÌy tiÌnh của baÌ£n phải Ä‘Æ°Æ¡Ì£c khởi động laÌ£i để hoaÌ€n tâÌt việc gỡ bỏ $(^NameDA). BaÌ£n coÌ muôÌn khởi động laÌ£i ngay không?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Khởi động laÌ£i ngay" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Tôi muôÌn khởi động laÌ£i sau" + ${LangFileString} MUI_TEXT_FINISH_RUN "&ChaÌ£y $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Hiện &Readme" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&HoaÌ€n thaÌ€nh" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "ChoÌ£n thÆ° muÌ£c TriÌ€nh Ä‘Æ¡n Start" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "ChoÌ£n một thÆ° muÌ£c trên TriÌ€nh Ä‘Æ¡n Start để taÌ£o lôÌi tăÌt cho $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "ChoÌ£n thÆ° muÌ£c trên TriÌ€nh Ä‘Æ¡n Start maÌ€ baÌ£n muôÌn taÌ£o lôÌi tăÌt cho chÆ°Æ¡ng triÌ€nh. BaÌ£n cũng coÌ thể nhập tên để taÌ£o thÆ° muÌ£c mÆ¡Ìi." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Không taÌ£o lôÌi tăÌt" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Gỡ bỏ $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Gỡ bỏ $(^NameDA) khỏi maÌy tiÌnh của baÌ£n." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "BaÌ£n coÌ thật sÆ°Ì£ muôÌn thoaÌt triÌ€nh CaÌ€i đặt $(^Name) không?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "BaÌ£n coÌ thật sÆ°Ì£ muôÌn thoaÌt triÌ€nh Gỡ bỏ $(^Name) không?" +!endif + +!ifdef MULTIUSER_INSTALLMODEPAGE + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "ChoÌ£n ngÆ°Æ¡Ì€i duÌ€ng" + ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "ChoÌ£n ngÆ°Æ¡Ì€i duÌ€ng maÌ€ baÌ£n muôÌn caÌ€i đặt $(^NameDA)." + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "ChoÌ£n giữa việc caÌ€i đặt $(^NameDA) cho riêng baÌ£n hoặc cho tâÌt cả ngÆ°Æ¡Ì€i duÌ€ng của maÌy tiÌnh naÌ€y. $(^ClickNext)" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "CaÌ€i đặt cho bâÌt kiÌ€ ngÆ°Æ¡Ì€i naÌ€o sử duÌ£ng maÌy tiÌnh naÌ€y" + ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Chỉ caÌ€i đặt cho riêng tôi" +!endif diff --git a/tools/Contrib/Language files/Welsh.nlf b/tools/Contrib/Language files/Welsh.nlf new file mode 100644 index 0000000..516e1e9 --- /dev/null +++ b/tools/Contrib/Language files/Welsh.nlf @@ -0,0 +1,191 @@ +# Header, don't edit +NLF v6 +# Start editing here +# Language ID +1106 +# Font and size - dash (-) means default +- +- +# Codepage - dash (-) means ASCII code page +1252 +# RTL - anything else than RTL means LTR +- +# Translation by Rhoslyn Prys, Meddal.com +# ^Branding +Nullsoft Install System %s +# ^SetupCaption +Rhaglen Osod $(^Name) +# ^UninstallCaption +Rhaglen Dadosod $(^Name) +# ^LicenseSubCaption +: Cytundeb Trwyddedu +# ^ComponentsSubCaption +: Dewisiadau Gosod +# ^DirSubCaption +: Ffolder Gosod +# ^InstallingSubCaption +: Gosod +# ^CompletedSubCaption +: Cwblhawyd +# ^UnComponentsSubCaption +: Dewisiadau Dadosod +# ^UnDirSubCaption +: Ffolder Dadosod +# ^ConfirmSubCaption +: Cadarnhad +# ^UninstallingSubCaption +: Dadosod +# ^UnCompletedSubCaption +: Cwblhawyd +# ^BackBtn +< &Nôl +# ^NextBtn +&Nesaf > +# ^AgreeBtn +&Cytuno +# ^AcceptBtn +Rwy'n &derbyn Amodau'r Drwydded +# ^DontAcceptBtn +Rwy'n &gwrthod Amodau'r Drwydded +# ^InstallBtn +&Gosod +# ^UninstallBtn +&Dadosod +# ^CancelBtn +Diddymu +# ^CloseBtn +C&au +# ^BrowseBtn +&Pori... +# ^ShowDetailsBtn +&Dangos manylion +# ^ClickNext +Cliciwch Nesaf i barhau. +# ^ClickInstall +Cliciwch Gosod i gychwyn gosod. +# ^ClickUninstall +Cliciwch Dadosod i gychwyn dadosod. +# ^Name +Enw +# ^Completed +Cwblhawyd +# ^LicenseText +Darllenwch y cytundeb trwyddedu cyn gosod $(^NameDA). Os ydych yn derbyn holl amodau'r cytundeb, cliciwch Cytuno. +# ^LicenseTextCB +Darllenwch y cytundeb trwyddedu cyn gosod $(^NameDA). Os ydych yn derbyn holl amodau'r cytundeb, cliciwch y blwch ticio isod. $_CLICK +# ^LicenseTextRB +Darllenwch y cytundeb trwyddedu cyn gosod $(^NameDA). Os ydych yn derbyn holl amodau'r cytundeb, ticiwch y dewis cyntaf isod. $_CLICK +# ^UnLicenseText +Darllenwch y cytundeb trwyddedu cyn dadosod $(^NameDA). Os ydych yn derbyn holl amodau'r cytundeb, cliciwch Cytuno. +# ^UnLicenseTextCB +Darllenwch y cytundeb trwyddedu cyn dadosod $(^NameDA). Os ydych yn derbyn holl amodau'r cytundeb, cliciwch y blwch ticio isod. $_CLICK +# ^UnLicenseTextRB +Darllenwch y cytundeb trwyddedu cyn dadosod $(^NameDA). Os ydych yn derbyn holl amodau'r cytundeb, ticiwch y dewis cyntaf isod. $_CLICK +# ^Custom +Addasu +# ^ComponentsText +Ticiwch y cydrannau rydych am eu gosod a dad-dicio'r cydrannau nad ydych am eu gosod. $_CLICK +# ^ComponentsSubText1 +Dewis y math o osod: +# ^ComponentsSubText2_NoInstTypes +Dewis cydrannau i'w gosod: +# ^ComponentsSubText2 +Neu, ddewis y cydrannau ychwanegol i'w gosod: +# ^UnComponentsText +Ticiwch y cydrannau rydych am eu dadosod a dad-dicio'r cydrannau nad ydych am eu dadosod. $_CLICK +# ^UnComponentsSubText1 +Dewis y math o ddadosod: +# ^UnComponentsSubText2_NoInstTypes +Dewis cydrannau i'w dadosod: +# ^UnComponentsSubText2 +Neu, ddewis y cydrannau ychwanegol i'w dadosod: +# ^DirText +Bydd y Rhaglen Osod yn gosod $(^NameDA) yn y ffolder canlynol. I'w osod mewn ffolder gwahanol, cliciwch Pori a dewis ffolder arall. $_CLICK +# ^DirSubText +Ffolder Cyrchfan +# ^DirBrowseText +Dewis y ffolder i osod $(^NameDA) ynddo: +# ^UnDirText +Bydd y Rhegen Osod yn dadosod $(^NameDA) o'r ffolder canlynol. I ddadosod o ffolder gwahanol, cliciwch Pori a dewis ffolder arall. $_CLICK +# ^UnDirSubText +"" +# ^UnDirBrowseText +Dewis ffolder i ddadosod $(^NameDA) ohono: +# ^SpaceAvailable +"Lle ar gael: " +# ^SpaceRequired +"Lle angenrheidiol: " +# ^UninstallingText +Bydd $(^NameDA) yn cael ei ddadosod o'r ffolder canlynol. $_CLICK +# ^UninstallingSubText +Dadosod o: +# ^FileError +Gwall agor ffeil i'w hysgrifennu: \r\n\r\n$0\r\n\r\nCliciwch Atal i atal y gosod,\r\nEto i geisio eto, neu\r\nAnwybyddu i hepgor y ffeil. +# ^FileError_NoIgnore +Gwall agor ffeil i'w hysgrifennu: \r\n\r\n$0\r\n\r\nCliciwch Eto i geisio eto, neu\r\nDiddymu i atal y gosod. +# ^CantWrite +"Methu ysgrifennu: " +# ^CopyFailed +Methu Copïo +# ^CopyTo +"Copïo i " +# ^Registering +"Cofrestru: " +# ^Unregistering +"Dadgofrestru: " +# ^SymbolNotFound +"Methu canfod symbol: " +# ^CouldNotLoad +"Methu llwytho: " +# ^CreateFolder +"Creu ffolder: " +# ^CreateShortcut +"Creu llwybr byr: " +# ^CreatedUninstaller +"Creu dadosodwr: " +# ^Delete +"Dileu ffeil: " +# ^DeleteOnReboot +"Dileu wrth ailgychwyn: " +# ^ErrorCreatingShortcut +"Gwall wrth greu llwybr byr: " +# ^ErrorCreating +"Gwall wrth greu: " +# ^ErrorDecompressing +Gwall wrth ddatgywasgu data! Gosodwr llwgr? +# ^ErrorRegistering +Gwall cofrestru DLL +# ^ExecShell +"ExecShell: " +# ^Exec +"Gweithredu: " +# ^Extract +"Echdynnu: " +# ^ErrorWriting +"Echdynnu: gwall ysgrifennu i ffeil " +# ^InvalidOpcode +Gosodwr llwgr: opcode annilys +# ^NoOLE +"Dim OLE ar gyfer: " +# ^OutputFolder +"Ffolder allbwn: " +# ^RemoveFolder +"Tynnu ffolder: " +# ^RenameOnReboot +"Ailenwi wrth ailgychwyn: " +# ^Rename +"Ailenwi: " +# ^Skipped +"Hepgor: " +# ^CopyDetails +Copïo Manylion i'r Clipfwrdd +# ^LogInstall +Cofnodi'r brosed gosod +# ^Byte +B +# ^Kilo + K +# ^Mega + M +# ^Giga + G diff --git a/tools/Contrib/Language files/Welsh.nsh b/tools/Contrib/Language files/Welsh.nsh new file mode 100644 index 0000000..1aeabf1 --- /dev/null +++ b/tools/Contrib/Language files/Welsh.nsh @@ -0,0 +1,121 @@ +;Language: Welsh (1106) +;By Rhoslyn Prys, Meddal.com + +!insertmacro LANGFILE "Welsh" = "Cymraeg" = + +!ifdef MUI_WELCOMEPAGE + ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Croeso i Ddewin Gosod $(^NameDA)" + ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Bydd y dewin yn eich arwain drwy osodiad $(^NameDA).$\r$\n$\r$\nCaewch pob rhaglen cyn cychwyn y rhaglen osod. Bydd hyn yn ei gwneud yn bosibl i ddiweddaru'r ffeiliau system berthnasol heb fod angen ailgychwyn eich cyfrifiadur.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_UNWELCOMEPAGE + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Croeso i Ddewin Dadosod $(^NameDA)" + ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Bydd y dewin yn eich arwain drwy ddadosod $(^NameDA).$\r$\n$\r$\nCyn cychwyn dadosod, gwnewch yn siwr nad yw $(^NameDA) yn rhedeg.$\r$\n$\r$\n$_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE + ${LangFileString} MUI_TEXT_LICENSE_TITLE "Cytundeb Trwyddedu" + ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Darllenwch amodau'r drwydded cyn gosod $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Os ydych yn derbyn amodau'r cytundeb, cliciwch Cytuno i barhau. Mae'n rhaid i chi dderbyn amodau'r cytundeb er mwyn gosod $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Os ydych yn derbyn amodau'r cytundeb, cliciwch y blwch ticio isod. Mae'n rhaid i chi dderbyn amodau'r cytundeb er mwyn gosod $(^NameDA). $_CLICK" + ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Os ydych yn derbyn amodau'r cytundeb, cliciwch y dewis cyntaf isod. Mae'n rhaid i chi dderbyn amodau'r cytundeb er mwyn gosod $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_UNLICENSEPAGE + ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Cytundeb Trwyddedu" + ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Darllenwch amodau'r drwydded cyn dadosod $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Os ydych yn derbyn amodau'r cytundeb, cliciwch Cytuno i barhau. Mae'n rhaid i chi dderbyn amodau'r cytundeb er mwyn dadosod $(^NameDA)." + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Os ydych yn derbyn amodau'r cytundeb, cliciwch y blwch ticio isod. Mae'n rhaid i chi dderbyn amodau'r cytundeb er mwyn dadosod $(^NameDA). $_CLICK" + ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Os ydych yn derbyn amodau'r cytundeb, cliciwch y dewis cyntaf isod. Mae'n rhaid i chi dderbyn amodau'r cytundeb er mwyn dadosod $(^NameDA). $_CLICK" +!endif + +!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE + ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Pwyswch Page Down i ddarllen gweddill y cytundeb." +!endif + +!ifdef MUI_COMPONENTSPAGE + ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Dewis Cydrannau" + ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Dewis pa nodweddion o $(^NameDA) rydych am eu gosod." +!endif + +!ifdef MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Dewis Cydrannau" + ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Dewis pa nodweddion o $(^NameDA) i'w dadoso." +!endif + +!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Disgrifiad" + !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Gosod eich llygoden dros gydran i weld ei ddisgrifiad." + !else + ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Dewis cydran i weld ei ddisgrifiad." + !endif +!endif + +!ifdef MUI_DIRECTORYPAGE + ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Dewis Lleoliad Gosod" + ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Dewis y ffolder i osod $(^NameDA)." +!endif + +!ifdef MUI_UNDIRECTORYPAGE + ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Dewis Lleoliad Dadosod" + ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Dewis y ffolder i ddadosod $(^NameDA)." +!endif + +!ifdef MUI_INSTFILESPAGE + ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Gosod" + ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Arhoswch tra fo $(^NameDA) yn cael ei osod." + ${LangFileString} MUI_TEXT_FINISH_TITLE "Cwblhawyd y Gosod" + ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Mae'r Gosod wedi ei gwblhau'n llwyddiannus." + ${LangFileString} MUI_TEXT_ABORT_TITLE "Ataliwyd y Gosod" + ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Methwyd â chwblhau'r gosod yn llwyddiannus." +!endif + +!ifdef MUI_UNINSTFILESPAGE + ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Dadosod" + ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Arhoswch tra bo $(^NameDA) yn cael ei ddadosod." + ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Cwblhawyd y Dadosod" + ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Mae'r Dadosod wedi ei gwblhau'n llwyddiannus." + ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Ataliwyd y Dadosod" + ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Methwyd â chwblhau'r dadosod yn llwyddiannus." +!endif + +!ifdef MUI_FINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Cwblhau Dewin Gosod $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Mae $(^NameDA) wedi cael ei osod ar eich cyfrifiadur.$\r$\n$\r$\nCliciwch Gorffen i gau'r dewin." + ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Rhaid ailgychwyn eich cyfrifiadur i gwblhau gosod $(^NameDA). Hoffech chi ailgychwyn?" +!endif + +!ifdef MUI_UNFINISHPAGE + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Cwblhau Dewin Dadosod $(^NameDA)" + ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "Mae $(^NameDA) wedi ei ddadosod oddi ar eich cyfrifiadur.$\r$\n$\r$\nCliciwch Gorffen i gau'r dewin." + ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Rhaid ailgychwyn eich cyfrifiadur i gwblhau gosod $(^NameDA). Hoffech chi ailgychwyn?" +!endif + +!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE + ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ailgychwyn" + ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Rwyf am ailgychwyn yn hwyrach" + ${LangFileString} MUI_TEXT_FINISH_RUN "&Rhedeg $(^NameDA)" + ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Dangos Darllenfi" + ${LangFileString} MUI_BUTTONTEXT_FINISH "&Gorffen" +!endif + +!ifdef MUI_STARTMENUPAGE + ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Dewis Ffolder Dewislen Cychwyn" + ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Dewis ffolder Dewislen Cychwyn ar gyfer llwybrau byr $(^NameDA)." + ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Dewis ffolder Dewislen Cychwyn i greu llwybrau byr y rhaglen. Gallwch roi enw i greu ffolder newydd." + ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Peidio creu llwybrau byr" +!endif + +!ifdef MUI_UNCONFIRMPAGE + ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Dadosod $(^NameDA)" + ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Tynnu $(^NameDA) oddiar eich cyfrifiadur." +!endif + +!ifdef MUI_ABORTWARNING + ${LangFileString} MUI_TEXT_ABORTWARNING "Ydych chi'n si?r eich bod am adael Rhaglen Osod $(^Name)?" +!endif + +!ifdef MUI_UNABORTWARNING + ${LangFileString} MUI_UNTEXT_ABORTWARNING "Ydych chi'n siwr eich bod am adael Rhaglen Dadosod $(^Name)?" +!endif diff --git a/tools/Contrib/Modern UI 2/Deprecated.nsh b/tools/Contrib/Modern UI 2/Deprecated.nsh new file mode 100644 index 0000000..85339f2 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Deprecated.nsh @@ -0,0 +1,86 @@ +/* + +NSIS Modern User Interface +Deprecated code - display warnings + +*/ + + +!macro MUI_LEGACY_MAP_NOSTRETCH NAME R + !if "${R}" != "" + !ifdef ${NAME}NOSTRETCH + !define /IfNDef ${NAME}STRETCH NoStretchNoCropNoAlign + !endif + !else + !insertmacro ${__MACRO__} ${NAME}BITMAP_ 1 + !insertmacro ${__MACRO__} ${NAME}BITMAP_RTL_ 1 + !insertmacro ${__MACRO__} ${NAME}UNBITMAP_ 1 + !insertmacro ${__MACRO__} ${NAME}UNBITMAP_RTL_ 1 + !endif +!macroend + + +;-------------------------------- +;InstallOptions + +!define INSTALLOPTIONS_ERROR "MUI_INSTALLOPTIONS_* macros are no longer a part of MUI2. Include InstallOptions.nsh and use INSTALLOPTIONS_* macros instead. It is also recommended to upgrade to nsDialogs." + +!macro MUI_INSTALLOPTIONS_EXTRACT FILE + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_EXTRACT_AS FILE FILENAME + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_DISPLAY FILE + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_DISPLAY_RETURN FILE + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_INITDIALOG FILE + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_SHOW + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_SHOW_RETURN + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_READ VAR FILE SECTION KEY + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE + + !error "${INSTALLOPTIONS_ERROR}" + +!macroend + +!macro MUI_RESERVEFILE_INSTALLOPTIONS + + !error `MUI_RESERVEFILE_INSTALLOPTIONS is no longer supported as InstallOptions is no longer used by MUI2. Instead, use "ReserveFile /plugin InstallOptions.dll". It is also recommended to upgrade to nsDialogs.` + +!macroend diff --git a/tools/Contrib/Modern UI 2/Interface.nsh b/tools/Contrib/Modern UI 2/Interface.nsh new file mode 100644 index 0000000..ee858bd --- /dev/null +++ b/tools/Contrib/Modern UI 2/Interface.nsh @@ -0,0 +1,363 @@ +/* + +NSIS Modern User Interface +Interface code for all pages + +*/ + +;-------------------------------- +;Variables + +Var mui.Header.Text +Var mui.Header.Text.Font +Var mui.Header.SubText +Var mui.Header.Background +Var mui.Header.Image + +Var mui.Branding.Text +Var mui.Branding.Background + +Var mui.Line.Standard +Var mui.Line.FullWindow + +Var mui.Button.Next +Var mui.Button.Cancel +Var mui.Button.Back + + +;-------------------------------- +;General interface settings + +!macro MUI_INTERFACE + + !ifndef MUI_INTERFACE + + !define MUI_INTERFACE + + ;These values are set after the interface settings in the script, + ;so the script itself can override all values. + + ;Default interface settings in nsisconf.nsh + !ifdef MUI_INSERT_NSISCONF + !insertmacro MUI_NSISCONF + !endif + + ;Default interface settings + !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe" + !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe" + !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe" + !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" + !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" + !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF" + !insertmacro MUI_DEFAULT MUI_TEXTCOLOR "000000" + + ;Map *_NOSTRETCH legacy define to the correct *_STRETCH value + !verbose push 2 + !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_HEADERIMAGE_ "" + !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_WELCOMEFINISHPAGE_ "" + !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_UNWELCOMEFINISHPAGE_ "" + !verbose pop + + ;Default header images + !ifdef MUI_HEADERIMAGE + + !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" + !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP_STRETCH "FitControl" + !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH} + + !ifndef MUI_HEADERIMAGE_UNBITMAP + !define MUI_HEADERIMAGE_UNBITMAP "${MUI_HEADERIMAGE_BITMAP}" + !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH} + !endif + + !if "${MUI_HEADERIMAGE_BITMAP}" == "" + !error "Invalid MUI_HEADERIMAGE_BITMAP" + !endif + !if "${MUI_HEADERIMAGE_UNBITMAP}" == "" + !error "Invalid MUI_HEADERIMAGE_UNBITMAP" + !endif + + !ifdef MUI_HEADERIMAGE_BITMAP_RTL + !ifndef MUI_HEADERIMAGE_UNBITMAP_RTL + !define MUI_HEADERIMAGE_UNBITMAP_RTL "${MUI_HEADERIMAGE_BITMAP_RTL}" + !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_RTL_STRETCH} + !endif + + !if "${MUI_HEADERIMAGE_BITMAP_RTL}" == "" + !error "Invalid MUI_HEADERIMAGE_BITMAP_RTL" + !endif + !if "${MUI_HEADERIMAGE_UNBITMAP_RTL}" == "" + !error "Invalid MUI_HEADERIMAGE_UNBITMAP_RTL" + !endif + !endif + + !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_UNBITMAP_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH} + !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_RTL_STRETCH} + + !endif + + ;Default texts + !insertmacro MUI_DEFAULT MUI_ABORTWARNING_TEXT "$(MUI_TEXT_ABORTWARNING)" + !insertmacro MUI_DEFAULT MUI_UNABORTWARNING_TEXT "$(MUI_UNTEXT_ABORTWARNING)" + + ;Apply settings + + XPStyle On ;XP style setting in manifest resource + + ;Dialog resources + ChangeUI all "${MUI_UI}" + !ifdef MUI_HEADERIMAGE + !ifndef MUI_HEADERIMAGE_RIGHT + ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE}" + !else + ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE_RIGHT}" + !endif + !endif + + ;Icons + Icon "${MUI_ICON}" + UninstallIcon "${MUI_UNICON}" + + !endif + +!macroend + + +;-------------------------------- +;Abort warning message box + +!macro MUI_ABORTWARNING + + !ifdef MUI_ABORTWARNING_CANCEL_DEFAULT + MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit + !else + MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit + !endif + + Abort + mui.Quit: + +!macroend + +!macro MUI_UNABORTWARNING + + !ifdef MUI_UNABORTWARNING_CANCEL_DEFAULT + MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit + !else + MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit + !endif + + Abort + mui.Quit: + +!macroend + + +;-------------------------------- +;Initialization of GUI + +!macro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO MACRO + + !ifdef MUI_HEADERIMAGE_RIGHT + !ifndef MUI_OPTIMIZE_ALWAYSLTR ; Undocumented + ${if} $(^RTL) == 1 + !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Left Leak + ${Else} + !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Right Leak + ${EndIf} + !else + !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Right Leak + !endif + !else + !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Auto Leak + !endif + +!macroend +!macro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE UN RTL IMGRESID PATH + + GetDlgItem $mui.Header.Image $HWNDPARENT ${IMGRESID} ; This variable is not used by every mode but we have to reference it to avoid a compiler warning. + + !if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "NoStretchNoCropNoAlign" + + SetBrandingImage /IMGID=${IMGRESID} "${PATH}" + + !else if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "NoStretchNoCrop" + + !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO \ + MUI_LOADANDXALIGNIMAGE + + !else if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "AspectFitHeight" + + !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO \ + MUI_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT + + !else + + !if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" != "FitControl" + !warning 'MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH set to unknown value, defaulting to FitControl' + !endif + SetBrandingImage /IMGID=${IMGRESID} /RESIZETOFIT "${PATH}" + + !endif + +!macroend + +!macro MUI_HEADERIMAGE_INIT UN IMGRESID + + ;Load and display header image + + !ifdef MUI_HEADERIMAGE + + InitPluginsDir + + !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL + ${if} $(^RTL) == 1 + + File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}" + !pragma verifyloadimage "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}" + !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "_RTL" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp" + + ${else} + !endif + + File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP}" + !pragma verifyloadimage "${MUI_HEADERIMAGE_${UN}BITMAP}" + !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp" + + !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL + ${endif} + !endif + + !endif + +!macroend + +!macro MUI_GUIINIT_OUTERDIALOG UNINSTALLER + + ;Initialize outer dialog (fonts & colors) + + ;Header + GetDlgItem $mui.Header.Text $HWNDPARENT 1037 + CreateFont $mui.Header.Text.Font "$(^Font)" "$(^FontSize)" "700" + SendMessage $mui.Header.Text ${WM_SETFONT} $mui.Header.Text.Font 0 + + GetDlgItem $mui.Header.SubText $HWNDPARENT 1038 + + !ifndef MUI_HEADER_TRANSPARENT_TEXT + SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + !else + SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "transparent" + SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "transparent" + !endif + + ;Header image + !insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}" 1046 + + ;Header background + GetDlgItem $mui.Header.Background $HWNDPARENT 1034 + SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}" + + ;Header icon image background + !ifndef MUI_HEADERIMAGE + GetDlgItem $mui.Header.Image $HWNDPARENT 1039 + SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}" + !endif + + ;Branding text + GetDlgItem $mui.Branding.Background $HWNDPARENT 1028 + SetCtlColors $mui.Branding.Background /BRANDING + GetDlgItem $mui.Branding.Text $HWNDPARENT 1256 + SetCtlColors $mui.Branding.Text /BRANDING + SendMessage $mui.Branding.Text ${WM_SETTEXT} 0 "STR:$(^Branding) " + + ;Lines + GetDlgItem $mui.Line.Standard $HWNDPARENT 1035 + GetDlgItem $mui.Line.FullWindow $HWNDPARENT 1045 + + ;Buttons + GetDlgItem $mui.Button.Next $HWNDPARENT 1 + GetDlgItem $mui.Button.Cancel $HWNDPARENT 2 + GetDlgItem $mui.Button.Back $HWNDPARENT 3 + +!macroend + + +;-------------------------------- +;Interface functions + +!macro MUI_FUNCTION_GUIINIT + + Function .onGUIInit + + !insertmacro MUI_GUIINIT_OUTERDIALOG "" + + !ifdef MUI_PAGE_FUNCTION_GUIINIT + Call "${MUI_PAGE_FUNCTION_GUIINIT}" + !endif + + !ifdef MUI_CUSTOMFUNCTION_GUIINIT + Call "${MUI_CUSTOMFUNCTION_GUIINIT}" + !endif + + FunctionEnd + +!macroend + +!macro MUI_UNFUNCTION_GUIINIT + + Function un.onGUIInit + + !insertmacro MUI_GUIINIT_OUTERDIALOG UN + + !ifdef MUI_UNPAGE_FUNCTION_GUIINIT + Call "${MUI_UNPAGE_FUNCTION_GUIINIT}" + !endif + + !ifdef MUI_CUSTOMFUNCTION_UNGUIINIT + Call "${MUI_CUSTOMFUNCTION_UNGUIINIT}" + !endif + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_ABORTWARNING + + Function .onUserAbort + + !ifdef MUI_PAGE_FUNCTION_ABORTWARNING + Call ${MUI_PAGE_FUNCTION_ABORTWARNING} + !endif + + !ifdef MUI_ABORTWARNING + !insertmacro MUI_ABORTWARNING + !endif + + !ifdef MUI_CUSTOMFUNCTION_ABORT + Call "${MUI_CUSTOMFUNCTION_ABORT}" + !endif + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_UNABORTWARNING + + Function un.onUserAbort + + !ifdef MUI_UNPAGE_FUNCTION_ABORTWARNING + Call ${MUI_UNPAGE_FUNCTION_ABORTWARNING} + !endif + + !ifdef MUI_UNABORTWARNING + !insertmacro MUI_UNABORTWARNING + !endif + + !ifdef MUI_CUSTOMFUNCTION_UNABORT + Call "${MUI_CUSTOMFUNCTION_UNABORT}" + !endif + + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI 2/Localization.nsh b/tools/Contrib/Modern UI 2/Localization.nsh new file mode 100644 index 0000000..1f02b18 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Localization.nsh @@ -0,0 +1,198 @@ +/* + +NSIS Modern User Interface +Localization + +*/ + +;-------------------------------- +;Variables + +!macro MUI_LANGDLL_VARIABLES + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + !ifndef MUI_LANGDLL_REGISTRY_VARIABLES + !define MUI_LANGDLL_REGISTRY_VARIABLES + + ;/GLOBAL because the macros are included in a function + Var /GLOBAL mui.LangDLL.RegistryLanguage + + !endif + !endif + +!macroend + + +;-------------------------------- +;Include language files + +!macro MUI_LANGUAGEEX LangDir NLFID + + !verbose push ${MUI_VERBOSE} + + !ifndef MUI_PAGE_UNINSTALLER_PREFIX + !ifndef MUI_DISABLE_INSERT_LANGUAGE_AFTER_PAGES_WARNING ; Define this to avoid the warning if you only have custom pages + !warning "MUI_LANGUAGE[EX] should be inserted after the MUI_[UN]PAGE_* macros" + !endif + !endif + + !insertmacro MUI_INSERT + + ;Include a language + LoadLanguageFile "${LangDir}\${NLFID}.nlf" + + ;Include MUI language file + !insertmacro LANGFILE_INCLUDE_WITHDEFAULT \ + "${LangDir}\${NLFID}.nsh" "${NSISDIR}\Contrib\Language files\English.nsh" + + ;Add language to list of languages for selection dialog + !define /ifndef MUI_LANGDLL_LANGUAGES "" + !define /redef MUI_LANGDLL_LANGUAGES \ + `"${LANGFILE_${NLFID}_LANGDLL}" "${LANG_${NLFID}}" ${MUI_LANGDLL_LANGUAGES}` + !define /ifndef MUI_LANGDLL_LANGUAGES_CP "" + !define /redef MUI_LANGDLL_LANGUAGES_CP \ + `"${LANGFILE_${NLFID}_LANGDLL}" "${LANG_${NLFID}}" "${LANG_${NLFID}_CP}" ${MUI_LANGDLL_LANGUAGES_CP}` + + !verbose pop + +!macroend + +!macro MUI_LANGUAGE NLFID + + !verbose push ${MUI_VERBOSE} + + !insertmacro MUI_LANGUAGEEX "${NSISDIR}\Contrib\Language files" "${NLFID}" + + !verbose pop + +!macroend + + +;-------------------------------- +;Language selection + +!macro MUI_LANGDLL_DISPLAY + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifndef MUI_LANGDLL_LANGUAGES + !warning "MUI_LANGDLL_DISPLAY should only be used after inserting the MUI_LANGUAGE macro(s)" + !endif + + !insertmacro MUI_LANGDLL_VARIABLES + + !insertmacro MUI_DEFAULT MUI_LANGDLL_WINDOWTITLE "Installer Language" + !insertmacro MUI_DEFAULT MUI_LANGDLL_INFO "Please select a language." + + !ifdef MUI_LANGDLL_REGISTRY_VARIABLES + + ReadRegStr $mui.LangDLL.RegistryLanguage "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" + + ${if} $mui.LangDLL.RegistryLanguage != "" + ;Set default language to registry language + StrCpy $LANGUAGE $mui.LangDLL.RegistryLanguage + ${endif} + + !endif + + !ifdef NSIS_CONFIG_SILENT_SUPPORT + ${unless} ${Silent} + !endif + + !ifndef MUI_LANGDLL_ALWAYSSHOW + !ifdef MUI_LANGDLL_REGISTRY_VARIABLES + ${if} $mui.LangDLL.RegistryLanguage == "" + !endif + !endif + + ;Show language selection dialog + !ifdef MUI_LANGDLL_ALLLANGUAGES + LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" A ${MUI_LANGDLL_LANGUAGES} "" + !else + LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" AC ${MUI_LANGDLL_LANGUAGES_CP} "" + !endif + + Pop $LANGUAGE + ${if} $LANGUAGE == "cancel" + Abort + ${endif} + + !ifndef MUI_LANGDLL_ALWAYSSHOW + !ifdef MUI_LANGDLL_REGISTRY_VARIABLES + ${endif} + !endif + !endif + + + !ifdef NSIS_CONFIG_SILENT_SUPPORT + ${endif} + !endif + + !verbose pop + +!macroend + +!macro MUI_LANGDLL_SAVELANGUAGE + + ;Save language in registry + + !ifndef MUI_PAGE_UNINSTALLER + + IfAbort mui.langdllsavelanguage_abort + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + WriteRegStr "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" $LANGUAGE + !endif + + mui.langdllsavelanguage_abort: + + !endif + +!macroend + +!macro MUI_UNGETLANGUAGE + + ;Get language from registry in uninstaller + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_LANGDLL_VARIABLES + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + + ReadRegStr $mui.LangDLL.RegistryLanguage "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" + + ${if} $mui.LangDLL.RegistryLanguage = "" + + !endif + + !insertmacro MUI_LANGDLL_DISPLAY + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + + ${else} + StrCpy $LANGUAGE $mui.LangDLL.RegistryLanguage + ${endif} + + !endif + + !verbose pop + +!macroend + + +;-------------------------------- +;Rerserve LangDLL file + +!macro MUI_RESERVEFILE_LANGDLL + + !verbose push + !verbose ${MUI_VERBOSE} + + ReserveFile /plugin LangDLL.dll + + !verbose pop + +!macroend diff --git a/tools/Contrib/Modern UI 2/MUI2.nsh b/tools/Contrib/Modern UI 2/MUI2.nsh new file mode 100644 index 0000000..94cea26 --- /dev/null +++ b/tools/Contrib/Modern UI 2/MUI2.nsh @@ -0,0 +1,117 @@ +/* + +NSIS Modern User Interface - Version 2.1 +Copyright 2002-2023 Joost Verburg +Contributors: Amir Szekely, Anders Kjersem + +*/ + +!ifndef MUI_INCLUDED +!verbose push 3 +!define MUI_INCLUDED +!define MUI_SYSVERSION "2.1" +!verbose pop +!echo "NSIS Modern User Interface version ${MUI_SYSVERSION} - Copyright 2002-2023 Joost Verburg" + +;-------------------------------- +!verbose push 3 +!define /IfNDef MUI_VERBOSE 3 +!verbose ${MUI_VERBOSE} + +!addincludedir "${NSISDIR}\Contrib\Modern UI 2" + +;-------------------------------- +;Header files required by MUI + +!include WinMessages.nsh +!include LogicLib.nsh +!include nsDialogs.nsh +!include LangFile.nsh + + +;-------------------------------- +;Macros for compile-time defines + +!macro MUI_DEFAULT SYMBOL CONTENT + + ;Define symbol if not yet defined + ;For setting default values + + !ifndef "${SYMBOL}" + !define "${SYMBOL}" "${CONTENT}" + !endif + +!macroend + +!macro MUI_SET SYMBOL CONTENT + + ;Define symbol and undefine if necessary + + !insertmacro MUI_UNSET "${SYMBOL}" + !define "${SYMBOL}" "${CONTENT}" + +!macroend + +!macro MUI_UNSET SYMBOL + + ;Undefine symbol if defined + + !ifdef "${SYMBOL}" + !undef "${SYMBOL}" + !endif + +!macroend + + +;-------------------------------- +;MUI interface + +!include "Deprecated.nsh" +!include "Interface.nsh" +!include "Localization.nsh" +!include "Pages.nsh" + + +;-------------------------------- +;Pages + +!include "Pages\Components.nsh" +!include "Pages\Directory.nsh" +!include "Pages\Finish.nsh" +!include "Pages\InstallFiles.nsh" +!include "Pages\License.nsh" +!include "Pages\StartMenu.nsh" +!include "Pages\UninstallConfirm.nsh" +!include "Pages\Welcome.nsh" + + +;-------------------------------- +;Insert MUI code in script + +!macro MUI_INSERT + + !ifndef MUI_INSERT + !define MUI_INSERT + + ;This macro is included when the first language file is included, + ;after the pages. + + ;Interface settings + !insertmacro MUI_INTERFACE + + ;Interface functions - Installer + !insertmacro MUI_FUNCTION_GUIINIT + !insertmacro MUI_FUNCTION_ABORTWARNING + + ;Interface functions - Uninstaller + !ifdef MUI_UNINSTALLER + !insertmacro MUI_UNFUNCTION_GUIINIT + !insertmacro MUI_FUNCTION_UNABORTWARNING + !endif + + !endif + +!macroend + +!verbose pop +!endif ;~ MUI_INCLUDED diff --git a/tools/Contrib/Modern UI 2/Pages.nsh b/tools/Contrib/Modern UI 2/Pages.nsh new file mode 100644 index 0000000..7a3c377 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages.nsh @@ -0,0 +1,324 @@ +/* + +NSIS Modern User Interface +Support code for all pages + +*/ + +;-------------------------------- +;Page initialization + +!macro MUI_PAGE_INIT + + !ifdef MUI_INSERT + !warning "MUI_PAGE_* inserted after MUI_LANGUAGE" + !endif + + ;Include interface settings if necessary + !insertmacro MUI_INTERFACE + + ;Define settings for installer page + !insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER + !insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER_PREFIX + !insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER_FUNCPREFIX + + !insertmacro MUI_SET MUI_PAGE_UNINSTALLER_PREFIX "" + !insertmacro MUI_SET MUI_PAGE_UNINSTALLER_FUNCPREFIX "" + + ;Generate unique ID + !insertmacro MUI_UNSET MUI_UNIQUEID + !define MUI_UNIQUEID ${__LINE__} + +!macroend + +!macro MUI_UNPAGE_INIT + + !ifdef MUI_INSERT + !warning "MUI_UNPAGE_* inserted after MUI_LANGUAGE" + !endif + + ;Include interface settings + !insertmacro MUI_INTERFACE + + ;Define prefixes for uninstaller page + !insertmacro MUI_SET MUI_UNINSTALLER "" + + !insertmacro MUI_SET MUI_PAGE_UNINSTALLER "" + !insertmacro MUI_SET MUI_PAGE_UNINSTALLER_PREFIX "UN" + !insertmacro MUI_SET MUI_PAGE_UNINSTALLER_FUNCPREFIX "un." + + ;Generate unique ID + !insertmacro MUI_UNSET MUI_UNIQUEID + !define MUI_UNIQUEID ${__LINE__} + +!macroend + + +;-------------------------------- +;Header text for standard MUI page + +!macro MUI_HEADER_TEXT_PAGE TEXT SUBTEXT + + !ifdef MUI_PAGE_HEADER_TEXT & MUI_PAGE_HEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${MUI_PAGE_HEADER_TEXT}" "${MUI_PAGE_HEADER_SUBTEXT}" + !else ifdef MUI_PAGE_HEADER_TEXT + !insertmacro MUI_HEADER_TEXT "${MUI_PAGE_HEADER_TEXT}" "${SUBTEXT}" + !else ifdef MUI_PAGE_HEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${TEXT}" "${MUI_PAGE_HEADER_SUBTEXT}" + !else + !insertmacro MUI_HEADER_TEXT "${TEXT}" "${SUBTEXT}" + !endif + + !insertmacro MUI_UNSET MUI_PAGE_HEADER_TEXT + !insertmacro MUI_UNSET MUI_PAGE_HEADER_SUBTEXT + +!macroend + + +;-------------------------------- +;Header text for custom page + +!macro MUI_HEADER_TEXT TEXT SUBTEXT ;Called from script + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifdef MUI_HEADER_TRANSPARENT_TEXT + LockWindow on + !endif + + SendMessage $mui.Header.Text ${WM_SETTEXT} 0 "STR:${TEXT}" + SendMessage $mui.Header.SubText ${WM_SETTEXT} 0 "STR:${SUBTEXT}" + + !ifdef MUI_HEADER_TRANSPARENT_TEXT + LockWindow off + !endif + + !verbose pop + +!macroend + + +;-------------------------------- +;Custom page functions + +!macro MUI_PAGE_FUNCTION_CUSTOM TYPE + + !ifdef MUI_PAGE_CUSTOMFUNCTION_${TYPE} + Call "${MUI_PAGE_CUSTOMFUNCTION_${TYPE}}" + !undef MUI_PAGE_CUSTOMFUNCTION_${TYPE} + !endif + +!macroend + + +;-------------------------------- +;Support for full window pages (like welcome/finish page) + +!macro MUI_PAGE_FUNCTION_FULLWINDOW + + !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_FULLWINDOW + !define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_FULLWINDOW + + Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageLoadFullWindow + + LockWindow on + + ;The branding text needs to be hidden because the full windows page + ;overlaps with it. + ShowWindow $mui.Branding.Background ${SW_HIDE} + ShowWindow $mui.Branding.Text ${SW_HIDE} + + ;The texts need to be hidden because otherwise they may show through + ;the page above when the Alt key is pressed. + ShowWindow $mui.Header.Text ${SW_HIDE} + ShowWindow $mui.Header.SubText ${SW_HIDE} + ShowWindow $mui.Header.Image ${SW_HIDE} + + ;Show line below full width of page + ShowWindow $mui.Line.Standard ${SW_HIDE} + ShowWindow $mui.Line.FullWindow ${SW_NORMAL} + + LockWindow off + + FunctionEnd + + Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageUnloadFullWindow + + ;Set everything back to normal again + + LockWindow on + + ShowWindow $mui.Branding.Background ${SW_NORMAL} + ShowWindow $mui.Branding.Text ${SW_NORMAL} + + ShowWindow $mui.Header.Text ${SW_NORMAL} + ShowWindow $mui.Header.SubText ${SW_NORMAL} + ShowWindow $mui.Header.Image ${SW_NORMAL} + + ShowWindow $mui.Line.Standard ${SW_NORMAL} + ShowWindow $mui.Line.FullWindow ${SW_HIDE} + + LockWindow off + + FunctionEnd + + !endif + +!macroend + +!macro MUI_INTERNAL_FULLWINDOW_LOADWIZARDIMAGE _un _hwndImg _ImgPath _RetImgHandle + + !ifdef MUI_${_un}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH + !insertmacro MUI_DEFAULT MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH NoStretchNoCropNoAlign ; Legacy compatibility + !endif + !insertmacro MUI_DEFAULT MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH FitControl + + !if "${MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH}" == "NoStretchNoCropNoAlign" + + ${NSD_SetImage} ${_hwndImg} "${_ImgPath}" "${_RetImgHandle}" + + !else if "${MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH}" == "NoStretchNoCrop" + + !insertmacro MUI_LOADANDXALIGNIMAGE ${_hwndImg} "${_ImgPath}" Auto "${_RetImgHandle}" + + !else if "${MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH}" == "AspectFitHeight" + + !insertmacro MUI_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT ${_hwndImg} "${_ImgPath}" Auto "${_RetImgHandle}" + + !else + + !if "${MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH}" != "FitControl" + !warning 'MUI_${_un}WELCOMEFINISHPAGE_BITMAP_STRETCH set to unknown value, defaulting to FitControl' + !endif + ${NSD_SetStretchedImage} ${_hwndImg} "${_ImgPath}" "${_RetImgHandle}" + + !endif + +!macroend + + +;-------------------------------- +;Helper macros + +!include Util.nsh + +!macro MUI_INTERNAL_LOADANDSIZEIMAGE _macro _hwndImg _ImgPath _XAlign _RetImgHandle + !if "${_XAlign}" == "Auto" + ${if} $(^RTL) == 1 + Push "*${_ImgPath}" + ${Else} + Push "${_ImgPath}" + ${EndIf} + !else if "${_XAlign}" == "Right" + Push "*${_ImgPath}" + !else + Push "${_ImgPath}" + !endif + Push "${_hwndImg}" + ${CallArtificialFunction} ${_macro} + !if "${_RetImgHandle}" == "Leak" + !insertmacro _LOGICLIB_TEMP + Pop $_LOGICLIB_TEMP + !else if "${_RetImgHandle}" != "Stack" + Pop ${_RetImgHandle} + !endif +!macroend + +!macro MUI_LOADANDXALIGNIMAGE _hwndImg _ImgPath _XAlign _RetImgHandle +!insertmacro MUI_INTERNAL_LOADANDSIZEIMAGE \ + MUI_INTERNAL_LOADANDXALIGNIMAGE "${_hwndImg}" "${_ImgPath}" "${_XAlign}" "${_RetImgHandle}" +!macroend +!macro MUI_INTERNAL_LOADANDXALIGNIMAGE + System::Store "S" + System::Call 'USER32::GetWindowRect(psr0,@r1)' + System::Call 'USER32::MapWindowPoints(p0,p$hwndparent,pr1,i2)' ; Note: Assuming control is not in inner dialog + System::Call '*$1(i.r5,i.r6,i.r7,i.r8)' + IntOp $7 $7 - $5 + IntOp $8 $8 - $6 + + Pop $1 + StrCpy $3 $1 1 + ${If} $3 == "*" ; Move control to the right? + StrCpy $1 $1 "" 1 + ${Endif} + System::Call 'USER32::LoadImage(p0,tr1,i${IMAGE_BITMAP},i0,i0,i${LR_LOADFROMFILE})p.r2' + SendMessage $0 ${STM_SETIMAGE} ${IMAGE_BITMAP} $2 $1 + Push $2 ; Return value + System::Call 'GDI32::DeleteObject(pr1)' ; Note: Assuming the previous image (if any) was a bitmap + System::Call 'USER32::GetClientRect(pr0,@r1)' + System::Call '*$1(i,i,i.r1,i.r2)' + + ${If} $3 == "*" + ${AndIf} $1 < $7 ; ImgW < CtlW + IntOp $3 $7 - $1 + IntOp $5 $5 + $3 + System::Call 'USER32::SetWindowPos(pr0,p0,ir5,ir6,i,i,i0x15)' + ${EndIf} + + System::Store "L" +!macroend + +!macro MUI_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT _hwndImg _ImgPath _XAlign _RetImgHandle +!insertmacro MUI_INTERNAL_LOADANDSIZEIMAGE \ + MUI_INTERNAL_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT "${_hwndImg}" "${_ImgPath}" "${_XAlign}" "${_RetImgHandle}" +!macroend +!macro MUI_INTERNAL_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT + System::Store "S" + System::Call 'USER32::GetWindowRect(psr0,@r1)' + System::Call 'USER32::MapWindowPoints(p0,p$hwndparent,pr1,i2)' ; Note: Assuming control is not in inner dialog + System::Call '*$1(i.r5,i.r6,i.r7,i.r8)' + IntOp $7 $7 - $5 + IntOp $8 $8 - $6 + + Pop $1 + StrCpy $3 $1 1 + ${If} $3 == "*" ; Move control to the right? + StrCpy $1 $1 "" 1 + ${Endif} + System::Call 'USER32::LoadImage(p0,tr1,i${IMAGE_BITMAP},i0,i0,i${LR_LOADFROMFILE})p.r2' + SendMessage $0 ${STM_SETIMAGE} ${IMAGE_BITMAP} $2 $1 + Push $2 ; Return value + System::Call 'GDI32::DeleteObject(pr1)' ; Note: Assuming the previous image (if any) was a bitmap + System::Call 'USER32::GetClientRect(pr0,@r1)' + System::Call '*$1(i,i,i.r1,i.r2)' + + IntOp $R7 $7 * 10000 + IntOp $R8 $8 * 10000 + IntOp $R1 $1 * 10000 + IntOp $R2 $2 * 10000 + IntOp $R3 $R1 / $2 + StrCpy $R4 10000 + ${If} $R1 > $R2 + StrCpy $R3 10000 + IntOp $R4 $R2 / $1 + ${EndIf} + + ${DoWhile} $R2 > $R8 ; ImgH > CtlH + IntOp $R1 $R1 - $R3 + IntOp $R2 $R2 - $R4 + ${Loop} + ${DoWhile} $R2 < $R8 ; ImgH < CtlH + IntOp $R1 $R1 + $R3 + IntOp $R2 $R2 + $R4 + ${Loop} + IntOp $1 $R1 / 10000 + IntOp $2 $R2 / 10000 + + ${If} $1 < $7 + ${AndIf} $3 == "*" + IntOp $R3 $7 - $1 + IntOp $5 $5 + $R3 + ${EndIf} + + ${DoWhile} $2 > $8 ; Non-aspect-maintained stretch to make it a pixel perfect match + IntOp $2 $2 - 1 + IntOp $1 $1 - 1 + ${IfThen} $3 == "*" ${|} IntOp $5 $5 + 1 ${|} + ${Loop} + + System::Call 'USER32::SetWindowPos(pr0,p0,ir5,ir6,ir1,ir2,i0x14)' + System::Store "L" +!macroend + + diff --git a/tools/Contrib/Modern UI 2/Pages/Components.nsh b/tools/Contrib/Modern UI 2/Pages/Components.nsh new file mode 100644 index 0000000..5003e5e --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/Components.nsh @@ -0,0 +1,242 @@ +/* + +NSIS Modern User Interface +Components page + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_COMPONENTSPAGE_INTERFACE + + !ifndef MUI_COMPONENTSPAGE_INTERFACE + !define MUI_COMPONENTSPAGE_INTERFACE + Var mui.ComponentsPage + + Var mui.ComponentsPage.Text + Var mui.ComponentsPage.InstTypesText + Var mui.ComponentsPage.ComponentsText + + Var mui.ComponentsPage.InstTypes + Var mui.ComponentsPage.Components + + Var mui.ComponentsPage.DescriptionTitle + Var mui.ComponentsPage.DescriptionText.Info + Var mui.ComponentsPage.DescriptionText + + Var mui.ComponentsPage.SpaceRequired + + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" + + !insertmacro MUI_DEFAULT MUI_UI_COMPONENTSPAGE_SMALLDESC "${NSISDIR}\Contrib\UIs\modern_smalldesc.exe" + !insertmacro MUI_DEFAULT MUI_UI_COMPONENTSPAGE_NODESC "${NSISDIR}\Contrib\UIs\modern_nodesc.exe" + + ;Apply settings + + !ifdef MUI_COMPONENTSPAGE_SMALLDESC + ChangeUI IDD_SELCOM "${MUI_UI_COMPONENTSPAGE_SMALLDESC}" + !else ifdef MUI_COMPONENTSPAGE_NODESC + ChangeUI IDD_SELCOM "${MUI_UI_COMPONENTSPAGE_NODESC}" + !endif + + CheckBitmap "${MUI_COMPONENTSPAGE_CHECKBITMAP}" + + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_COMPONENTS + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}COMPONENTSPAGE "" + !insertmacro MUI_COMPONENTSPAGE_INTERFACE + + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_TOP "" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_COMPLIST "" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_INSTTYPE "" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE)" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO)" + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}components + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsLeave_${MUI_UNIQUEID} + + Caption " " + + ComponentText "${MUI_COMPONENTSPAGE_TEXT_TOP}" "${MUI_COMPONENTSPAGE_TEXT_INSTTYPE}" "${MUI_COMPONENTSPAGE_TEXT_COMPLIST}" + + PageExEnd + + !insertmacro MUI_FUNCTION_COMPONENTSPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsLeave_${MUI_UNIQUEID} + + !undef MUI_COMPONENTSPAGE_TEXT_TOP + !undef MUI_COMPONENTSPAGE_TEXT_COMPLIST + !undef MUI_COMPONENTSPAGE_TEXT_INSTTYPE + !insertmacro MUI_UNSET MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE + !insertmacro MUI_UNSET MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO + +!macroend + +!macro MUI_PAGE_COMPONENTS + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_COMPONENTS + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_COMPONENTS + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_COMPONENTS + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_COMPONENTSPAGE PRE SHOW LEAVE + + Function "${PRE}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_COMPONENTS_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_COMPONENTS_SUBTITLE) + FunctionEnd + + Function "${SHOW}" + + ;Get control handles + FindWindow $mui.ComponentsPage "#32770" "" $HWNDPARENT + GetDlgItem $mui.ComponentsPage.Text $mui.ComponentsPage 1006 + GetDlgItem $mui.ComponentsPage.InstTypesText $mui.ComponentsPage 1021 + GetDlgItem $mui.ComponentsPage.ComponentsText $mui.ComponentsPage 1022 + GetDlgItem $mui.ComponentsPage.InstTypes $mui.ComponentsPage 1017 + GetDlgItem $mui.ComponentsPage.Components $mui.ComponentsPage 1032 + GetDlgItem $mui.ComponentsPage.DescriptionTitle $mui.ComponentsPage 1042 + GetDlgItem $mui.ComponentsPage.DescriptionText $mui.ComponentsPage 1043 + GetDlgItem $mui.ComponentsPage.SpaceRequired $mui.ComponentsPage 1023 + + ;Default text in description textbox + SendMessage $mui.ComponentsPage.DescriptionTitle ${WM_SETTEXT} 0 "STR:${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}" + EnableWindow $mui.ComponentsPage.DescriptionText 0 + SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}" + + StrCpy $mui.ComponentsPage.DescriptionText.Info "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}" ;Text for current components page + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + + +;-------------------------------- +;Script functions for components descriptions + +!macro MUI_DESCRIPTION_BEGIN + + ${if} $0 == -1 + ;No mouse hover over component in list + SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:" + EnableWindow $mui.ComponentsPage.DescriptionText 0 + SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:$mui.ComponentsPage.DescriptionText.Info" + +!macroend + +!macro MUI_DESCRIPTION_TEXT VAR TEXT + + !verbose push + !verbose ${MUI_VERBOSE} + + ${elseif} $0 == ${VAR} + SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:" + EnableWindow $mui.ComponentsPage.DescriptionText 1 + SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:${TEXT}" + + !verbose pop + +!macroend + +!macro MUI_DESCRIPTION_END + + !verbose push + !verbose ${MUI_VERBOSE} + + ${endif} + + !verbose pop + +!macroend + +!macro MUI_FUNCTION_DESCRIPTION_BEGIN + + !verbose push + !verbose ${MUI_VERBOSE} + + Function .onMouseOverSection + !insertmacro MUI_DESCRIPTION_BEGIN + + !verbose pop + +!macroend + +!macro MUI_FUNCTION_DESCRIPTION_END + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_DESCRIPTION_END + !ifdef MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION + Call "${MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION}" + !endif + FunctionEnd + + !verbose pop + +!macroend + +!macro MUI_UNFUNCTION_DESCRIPTION_BEGIN + + !verbose push + !verbose ${MUI_VERBOSE} + + Function un.onMouseOverSection + !insertmacro MUI_DESCRIPTION_BEGIN + + !verbose pop + +!macroend + +!macro MUI_UNFUNCTION_DESCRIPTION_END + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_DESCRIPTION_END + !ifdef MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION + Call "${MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION}" + !endif + FunctionEnd + + !verbose pop + +!macroend diff --git a/tools/Contrib/Modern UI 2/Pages/Directory.nsh b/tools/Contrib/Modern UI 2/Pages/Directory.nsh new file mode 100644 index 0000000..6209357 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/Directory.nsh @@ -0,0 +1,126 @@ +/* + +NSIS Modern User Interface +Directory page + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_DIRECTORYPAGE_INTERFACE + + !ifndef MUI_DIRECTORYPAGE_INTERFACE + !define MUI_DIRECTORYPAGE_INTERFACE + Var mui.DirectoryPage + + Var mui.DirectoryPage.Text + + Var mui.DirectoryPage.DirectoryBox + Var mui.DirectoryPage.Directory + Var mui.DirectoryPage.BrowseButton + + Var mui.DirectoryPage.SpaceRequired + Var mui.DirectoryPage.SpaceAvailable + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_DIRECTORY + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}DIRECTORYPAGE "" + !insertmacro MUI_DIRECTORYPAGE_INTERFACE + + !insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_TOP "" + !insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_DESTINATION "" + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}directory + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID} + + Caption " " + + DirText "${MUI_DIRECTORYPAGE_TEXT_TOP}" "${MUI_DIRECTORYPAGE_TEXT_DESTINATION}" + + !ifdef MUI_DIRECTORYPAGE_VARIABLE + DirVar "${MUI_DIRECTORYPAGE_VARIABLE}" + !endif + + !ifdef MUI_DIRECTORYPAGE_VERIFYONLEAVE + DirVerify leave + !endif + + PageExEnd + + !insertmacro MUI_FUNCTION_DIRECTORYPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID} + + !undef MUI_DIRECTORYPAGE_TEXT_TOP + !undef MUI_DIRECTORYPAGE_TEXT_DESTINATION + !insertmacro MUI_UNSET MUI_DIRECTORYPAGE_VARIABLE + !insertmacro MUI_UNSET MUI_DIRECTORYPAGE_VERIFYONLEAVE + +!macroend + +!macro MUI_PAGE_DIRECTORY + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_DIRECTORY + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_DIRECTORY + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_DIRECTORY + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_DIRECTORYPAGE PRE SHOW LEAVE + + Function "${PRE}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_DIRECTORY_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_DIRECTORY_SUBTITLE) + FunctionEnd + + Function "${SHOW}" + + ;Get control handles + FindWindow $mui.DirectoryPage "#32770" "" $HWNDPARENT + GetDlgItem $mui.DirectoryPage.Text $mui.DirectoryPage 1006 + GetDlgItem $mui.DirectoryPage.DirectoryBox $mui.DirectoryPage 1020 + GetDlgItem $mui.DirectoryPage.Directory $mui.DirectoryPage 1019 + GetDlgItem $mui.DirectoryPage.BrowseButton $mui.DirectoryPage 1001 + GetDlgItem $mui.DirectoryPage.SpaceRequired $mui.DirectoryPage 1023 + GetDlgItem $mui.DirectoryPage.SpaceAvailable $mui.DirectoryPage 1024 + + !ifdef MUI_DIRECTORYPAGE_BGCOLOR + !insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXTCOLOR "" + SetCtlColors $mui.DirectoryPage.Directory "${MUI_DIRECTORYPAGE_TEXTCOLOR}" "${MUI_DIRECTORYPAGE_BGCOLOR}" + !endif + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + FunctionEnd + + Function "${LEAVE}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI 2/Pages/Finish.nsh b/tools/Contrib/Modern UI 2/Pages/Finish.nsh new file mode 100644 index 0000000..493c1e0 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/Finish.nsh @@ -0,0 +1,510 @@ + /* + +NSIS Modern User Interface +Finish page (implemented using nsDialogs) + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_FINISHPAGE_INTERFACE + + !ifndef MUI_FINISHPAGE_INTERFACE + !define MUI_FINISHPAGE_INTERFACE + Var mui.FinishPage + + Var mui.FinishPage.Image + Var mui.FinishPage.Image.Bitmap + + Var mui.FinishPage.Title + Var mui.FinishPage.Title.Font + + Var mui.FinishPage.Text + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + !ifndef MUI_FINISHPAGE_RETURNVALUE_VARIABLES + !define MUI_FINISHPAGE_RETURNVALUE_VARIABLES + Var mui.FinishPage.ReturnValue + !endif + !else ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME + !ifndef MUI_FINISHPAGE_RETURNVALUE_VARIABLES + !define MUI_FINISHPAGE_RETURNVALUE_VARIABLES + Var mui.FinishPage.ReturnValue + !endif + !endif + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + !ifndef MUI_FINISHPAGE_CANCEL_ENABLED_VARIABLES + !define MUI_FINISHPAGE_CANCEL_ENABLED_VARIABLES + Var mui.FinishPage.DisableAbortWarning + !endif + !endif + + !ifdef MUI_FINISHPAGE_RUN + !ifndef MUI_FINISHPAGE_RUN_VARIABLES + !define MUI_FINISHPAGE_RUN_VARIABLES + Var mui.FinishPage.Run + !endif + !endif + + !ifdef MUI_FINISHPAGE_SHOWREADME + !ifndef MUI_FINISHPAGE_SHOWREADME_VARIABLES + !define MUI_FINISHPAGE_SHOWREADME_VARIABLES + Var mui.FinishPage.ShowReadme + !endif + !endif + + !ifdef MUI_FINISHPAGE_LINK + !ifndef MUI_FINISHPAGE_LINK_VARIABLES + !define MUI_FINISHPAGE_LINK_VARIABLES + Var mui.FinishPage.Link + !endif + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + !ifndef MUI_FINISHPAGE_REBOOT_VARIABLES + !define MUI_FINISHPAGE_REBOOT_VARIABLES + Var mui.FinishPage.RebootNow + Var mui.FinishPage.RebootLater + !endif + !endif + + !insertmacro MUI_DEFAULT MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp" + !if "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}" == "" + !error "Invalid MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP" + !endif + +!macroend + + +;-------------------------------- +;Interface initialization + +!macro MUI_FINISHPAGE_GUIINIT + + !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_GUINIT + !define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_GUINIT + + Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.GUIInit + + InitPluginsDir + File "/oname=$PLUGINSDIR\modern-wizard.bmp" "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}" + !pragma verifyloadimage "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}" + + !ifdef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT + Call "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT}" + !endif + + !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE_NOAUTOCLOSE + SetAutoClose true + !endif + + FunctionEnd + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.GUIInit + + !endif + +!macroend + + +;-------------------------------- +;Abort warning + +!macro MUI_FINISHPAGE_ABORTWARNING + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + + !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE_ABORTWARNING + !define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE_ABORTWARNING + + Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.AbortWarning + + ${if} $mui.FinishPage.DisableAbortWarning == "1" + Quit + ${endif} + + !ifdef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_ABORTWARNING + Call ${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_ABORTWARNING} + !endif + + FunctionEnd + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_ABORTWARNING ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.AbortWarning + + !endif + + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_FINISH + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE "" + !insertmacro MUI_FINISHPAGE_INTERFACE + + !insertmacro MUI_FINISHPAGE_GUIINIT + !insertmacro MUI_FINISHPAGE_ABORTWARNING + + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_TITLE "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_TITLE)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_TEXT)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_BUTTON "$(MUI_BUTTONTEXT_FINISH)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_REBOOT)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTNOW "$(MUI_TEXT_FINISH_REBOOTNOW)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTLATER "$(MUI_TEXT_FINISH_REBOOTLATER)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_RUN_TEXT "$(MUI_TEXT_FINISH_RUN)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_SHOWREADME_TEXT "$(MUI_TEXT_FINISH_SHOWREADME)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_LINK_COLOR "000080" + + !insertmacro MUI_PAGE_FUNCTION_FULLWINDOW + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Pre_${MUI_UNIQUEID} \ + ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Leave_${MUI_UNIQUEID} + + Caption " " + + PageExEnd + + !insertmacro MUI_FUNCTION_FINISHPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Pre_${MUI_UNIQUEID} \ + ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Leave_${MUI_UNIQUEID} \ + ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Link_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE + !insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE_3LINES + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_LARGE + !insertmacro MUI_UNSET MUI_FINISHPAGE_BUTTON + !insertmacro MUI_UNSET MUI_FINISHPAGE_CANCEL_ENABLED + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOT + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOTNOW + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOTLATER + !insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTLATER_DEFAULT + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_TEXT + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_PARAMETERS + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_NOTCHECKED + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_FUNCTION + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_TEXT + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_NOTCHECKED + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_FUNCTION + !insertmacro MUI_UNSET MUI_FINISHPAGE_LINK + !insertmacro MUI_UNSET MUI_FINISHPAGE_LINK_LOCATION + !insertmacro MUI_UNSET MUI_FINISHPAGE_LINK_COLOR + !insertmacro MUI_UNSET MUI_FINISHPAGE_NOREBOOTSUPPORT + + !insertmacro MUI_UNSET MUI_FINISHPAGE_ABORTWARNINGCHECK + !insertmacro MUI_UNSET MUI_FINISHPAGE_CURFIELD_TOP + !insertmacro MUI_UNSET MUI_FINISHPAGE_CURFIELD_BOTTOM + +!macroend + +!macro MUI_PAGE_FINISH + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_FINISH + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_FINISH + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_FINISH + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_FINISHPAGE PRE LEAVE LINK + + !ifdef MUI_FINISHPAGE_LINK + + Function "${LINK}" + + ExecShell open "${MUI_FINISHPAGE_LINK_LOCATION}" + + FunctionEnd + + !endif + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + + ;Set text on Next button + SendMessage $mui.Button.Next ${WM_SETTEXT} 0 "STR:${MUI_FINISHPAGE_BUTTON}" + + ;Enable cancel button if set in script + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + EnableWindow $mui.Button.Cancel 1 + !endif + + ;Create dialog + nsDialogs::Create 1044 + Pop $mui.FinishPage + nsDialogs::SetRTL $(^RTL) + SetCtlColors $mui.FinishPage "" "${MUI_BGCOLOR}" + + ;Image control + ${NSD_CreateBitmap} 0u 0u 109u 193u "" + Pop $mui.FinishPage.Image + !insertmacro MUI_INTERNAL_FULLWINDOW_LOADWIZARDIMAGE "${MUI_PAGE_UNINSTALLER_PREFIX}" $mui.FinishPage.Image $PLUGINSDIR\modern-wizard.bmp $mui.FinishPage.Image.Bitmap + + ;Positiong of controls + + ;Title + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !define MUI_FINISHPAGE_TITLE_HEIGHT 28 + !else + !define MUI_FINISHPAGE_TITLE_HEIGHT 38 + !endif + + ;Text + ;17 = 10 (top margin) + 7 (distance between texts) + !define /math MUI_FINISHPAGE_TEXT_TOP 17 + ${MUI_FINISHPAGE_TITLE_HEIGHT} + + ;Height if space required for radio buttons or check boxes + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !define MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS 40 + !else + !define MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS 60 + !endif + + !define /math MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS ${MUI_FINISHPAGE_TEXT_TOP} + ${MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS} + + ;Positioning of radio buttons to ask for a reboot + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + !define /math MUI_FINISHPAGE_REBOOTNOW_TOP ${MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS} + 5 ;Distance between text and options + ;25 = 10 (height of first radio button) + 15 (distance between buttons) + !define /math MUI_FINISHPAGE_REBOOTLATER_TOP ${MUI_FINISHPAGE_REBOOTNOW_TOP} + 25 + !endif + + ;Positioning of checkboxes + !ifdef MUI_FINISHPAGE_RUN + !define /math MUI_FINISHPAGE_RUN_TOP ${MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS} + 5 ;Distance between text and options + !endif + !ifdef MUI_FINISHPAGE_SHOWREADME + !ifdef MUI_FINISHPAGE_RUN + ;25 = 10 (height of run checkbox) + 10 (distance between checkboxes) + !define /math MUI_FINISHPAGE_SHOWREADME_TOP ${MUI_FINISHPAGE_RUN_TOP} + 20 + !else + !define /math MUI_FINISHPAGE_SHOWREADME_TOP ${MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS} + 5 ;Distance between text and options + !endif + !endif + + !ifndef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME + ;Height if full space is available for text and link + !ifndef MUI_FINISHPAGE_LINK + !define MUI_FINISHPAGE_TEXT_HEIGHT 130 + !else + !define MUI_FINISHPAGE_TEXT_HEIGHT 120 + !endif + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + + ${if} ${RebootFlag} + + ;Title text + ${NSD_CreateLabel} 120u 10u 195u ${MUI_FINISHPAGE_TITLE_HEIGHT}u "${MUI_FINISHPAGE_TITLE}" + Pop $mui.FinishPage.Title + SetCtlColors $mui.FinishPage.Title "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + CreateFont $mui.FinishPage.Title.Font "$(^Font)" "12" "700" + SendMessage $mui.FinishPage.Title ${WM_SETFONT} $mui.FinishPage.Title.Font 0 + + ;Finish text + ${NSD_CreateLabel} 120u ${MUI_FINISHPAGE_TEXT_TOP}u 195u ${MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS}u "${MUI_FINISHPAGE_TEXT_REBOOT}" + Pop $mui.FinishPage.Text + SetCtlColors $mui.FinishPage.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + ;Radio buttons for reboot page + ${NSD_CreateRadioButton} 120u ${MUI_FINISHPAGE_REBOOTNOW_TOP}u 195u 10u "${MUI_FINISHPAGE_TEXT_REBOOTNOW}" + Pop $mui.FinishPage.RebootNow + SetCtlColors $mui.FinishPage.RebootNow "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + ${NSD_CreateRadioButton} 120u ${MUI_FINISHPAGE_REBOOTLATER_TOP}u 195u 10u "${MUI_FINISHPAGE_TEXT_REBOOTLATER}" + Pop $mui.FinishPage.RebootLater + SetCtlColors $mui.FinishPage.RebootLater "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + !ifndef MUI_FINISHPAGE_REBOOTLATER_DEFAULT + SendMessage $mui.FinishPage.RebootNow ${BM_SETCHECK} ${BST_CHECKED} 0 + !else + SendMessage $mui.FinishPage.RebootLater ${BM_SETCHECK} ${BST_CHECKED} 0 + !endif + ${NSD_SetFocus} $mui.FinishPage.RebootNow + + ${else} + + !endif + + ;Title text + ${NSD_CreateLabel} 120u 10u 195u ${MUI_FINISHPAGE_TITLE_HEIGHT}u "${MUI_FINISHPAGE_TITLE}" + Pop $mui.FinishPage.Title + SetCtlColors $mui.FinishPage.Title "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + CreateFont $mui.FinishPage.Title.Font "$(^Font)" "12" "700" + SendMessage $mui.FinishPage.Title ${WM_SETFONT} $mui.FinishPage.Title.Font 0 + + ;Finish text + !ifndef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME + ${NSD_CreateLabel} 120u ${MUI_FINISHPAGE_TEXT_TOP}u 195u ${MUI_FINISHPAGE_TEXT_HEIGHT}u "${MUI_FINISHPAGE_TEXT}" + !else + ${NSD_CreateLabel} 120u ${MUI_FINISHPAGE_TEXT_TOP}u 195u ${MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS}u "${MUI_FINISHPAGE_TEXT}" + !endif + Pop $mui.FinishPage.Text + SetCtlColors $mui.FinishPage.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + ;Checkboxes + !ifdef MUI_FINISHPAGE_RUN + ${NSD_CreateCheckbox} 120u ${MUI_FINISHPAGE_RUN_TOP}u 195u 10u "${MUI_FINISHPAGE_RUN_TEXT}" + Pop $mui.FinishPage.Run + SetCtlColors $mui.FinishPage.Run "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + !ifndef MUI_FINISHPAGE_RUN_NOTCHECKED + SendMessage $mui.FinishPage.Run ${BM_SETCHECK} ${BST_CHECKED} 0 + !endif + ${NSD_SetFocus} $mui.FinishPage.Run + !endif + !ifdef MUI_FINISHPAGE_SHOWREADME + ${NSD_CreateCheckbox} 120u ${MUI_FINISHPAGE_SHOWREADME_TOP}u 195u 10u "${MUI_FINISHPAGE_SHOWREADME_TEXT}" + Pop $mui.FinishPage.ShowReadme + SetCtlColors $mui.FinishPage.ShowReadme "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + !ifndef MUI_FINISHPAGE_SHOWREADME_NOTCHECKED + SendMessage $mui.FinishPage.ShowReadme ${BM_SETCHECK} ${BST_CHECKED} 0 + !endif + !ifndef MUI_FINISHPAGE_RUN + ${NSD_SetFocus} $mui.FinishPage.ShowReadme + !endif + !endif + + ;Link + !ifdef MUI_FINISHPAGE_LINK + ${NSD_CreateLink} 120u 175u 195u 10u "${MUI_FINISHPAGE_LINK}" + Pop $mui.FinishPage.Link + SetCtlColors $mui.FinishPage.Link "${MUI_FINISHPAGE_LINK_COLOR}" "${MUI_BGCOLOR}" + ${NSD_OnClick} $mui.FinishPage.Link "${LINK}" + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + ${endif} + !endif + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + StrCpy $mui.FinishPage.DisableAbortWarning "1" + !endif + + !ifndef MUI_FORCECLASSICCONTROLS + ${If} ${IsHighContrastModeActive} + !endif + ; SetCtlColors does not change the check/radio text color (bug #443) + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + System::Call 'UXTHEME::SetWindowTheme(p$mui.FinishPage.RebootNow,w" ",w" ")' + System::Call 'UXTHEME::SetWindowTheme(p$mui.FinishPage.RebootLater,w" ",w" ")' + !endif + !ifdef MUI_FINISHPAGE_RUN + System::Call 'UXTHEME::SetWindowTheme(p$mui.FinishPage.Run,w" ",w" ")' + !endif + !ifdef MUI_FINISHPAGE_SHOWREADME + System::Call 'UXTHEME::SetWindowTheme(p$mui.FinishPage.ShowReadme,w" ",w" ")' + !endif + !ifndef MUI_FORCECLASSICCONTROLS + ${EndIf} + !endif + + ;Show page + Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageLoadFullWindow + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + nsDialogs::Show + !insertmacro MUI_PAGE_FUNCTION_CUSTOM DESTROYED + Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageUnloadFullWindow + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + StrCpy $mui.FinishPage.DisableAbortWarning "" + !endif + + ;Delete image from memory + ${NSD_FreeImage} $mui.FinishPage.Image.Bitmap + + !insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE_HEIGHT + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_TOP + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_HEIGHT + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS + !insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTNOW_TOP + !insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTLATER_TOP + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_TOP + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_TOP + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + + ;Check whether the user has chosen to reboot the computer + ${if} ${RebootFlag} + SendMessage $mui.FinishPage.RebootNow ${BM_GETCHECK} 0 0 $mui.FinishPage.ReturnValue + ${if} $mui.FinishPage.ReturnValue = ${BST_CHECKED} + Reboot + ${else} + Return + ${endif} + ${endif} + + !endif + + ;Run functions depending on checkbox state + + !ifdef MUI_FINISHPAGE_RUN + + SendMessage $mui.FinishPage.Run ${BM_GETCHECK} 0 0 $mui.FinishPage.ReturnValue + + ${if} $mui.FinishPage.ReturnValue = ${BST_CHECKED} + !ifndef MUI_FINISHPAGE_RUN_FUNCTION + !ifndef MUI_FINISHPAGE_RUN_PARAMETERS + Exec "$\"${MUI_FINISHPAGE_RUN}$\"" + !else + Exec "$\"${MUI_FINISHPAGE_RUN}$\" ${MUI_FINISHPAGE_RUN_PARAMETERS}" + !endif + !else + Call "${MUI_FINISHPAGE_RUN_FUNCTION}" + !endif + ${endif} + + !endif + + !ifdef MUI_FINISHPAGE_SHOWREADME + + SendMessage $mui.FinishPage.ShowReadme ${BM_GETCHECK} 0 0 $mui.FinishPage.ReturnValue + + ${if} $mui.FinishPage.ReturnValue = ${BST_CHECKED} + !ifndef MUI_FINISHPAGE_SHOWREADME_FUNCTION + ExecShell open "${MUI_FINISHPAGE_SHOWREADME}" + !else + Call "${MUI_FINISHPAGE_SHOWREADME_FUNCTION}" + !endif + ${endif} + + !endif + + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI 2/Pages/InstallFiles.nsh b/tools/Contrib/Modern UI 2/Pages/InstallFiles.nsh new file mode 100644 index 0000000..868ae17 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/InstallFiles.nsh @@ -0,0 +1,149 @@ +/* + +NSIS Modern User Interface +InstallFiles page + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_INSTFILESPAGE_INTERFACE + + !ifndef MUI_INSTFILESYPAGE_INTERFACE + !define MUI_INSTFILESYPAGE_INTERFACE + + !insertmacro MUI_DEFAULT MUI_INSTFILESPAGE_COLORS "/windows" + !insertmacro MUI_DEFAULT MUI_INSTFILESPAGE_PROGRESSBAR "smooth" + + Var mui.InstFilesPage + + Var mui.InstFilesPage.Text + Var mui.InstFilesPage.ProgressBar + Var mui.InstFilesPage.ShowLogButton + Var mui.InstFilesPage.Log + + ;Apply settings + InstallColors ${MUI_INSTFILESPAGE_COLORS} + InstProgressFlags ${MUI_INSTFILESPAGE_PROGRESSBAR} + SubCaption 4 " " + UninstallSubCaption 2 " " + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_INSTFILES + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INSTFILESPAGE "" + !insertmacro MUI_INSTFILESPAGE_INTERFACE + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}instfiles + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesLeave_${MUI_UNIQUEID} + + Caption " " + + PageExEnd + + !insertmacro MUI_FUNCTION_INSTFILESPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_FINISHHEADER_TEXT + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_ABORTWARNING_TEXT + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_ABORTWARNING_SUBTEXT + +!macroend + +!macro MUI_PAGE_INSTFILES + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_INSTFILES + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_INSTFILES + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_INSTFILES + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_INSTFILESPAGE PRE SHOW LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLING_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLING_SUBTITLE) + + FunctionEnd + + Function "${SHOW}" + + ;Get controls handles + FindWindow $mui.InstFilesPage "#32770" "" $HWNDPARENT + GetDlgItem $mui.InstFilesPage.Text $mui.InstFilesPage 1006 + GetDlgItem $mui.InstFilesPage.ProgressBar $mui.InstFilesPage 1004 + GetDlgItem $mui.InstFilesPage.ShowLogButton $mui.InstFilesPage 1027 + GetDlgItem $mui.InstFilesPage.Log $mui.InstFilesPage 1016 + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + ;Set text on completed page header + + IfAbort mui.endheader_abort + + !ifdef MUI_INSTFILESPAGE_FINISHHEADER_TEXT & MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_FINISHHEADER_TEXT}" "${MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT}" + !else ifdef MUI_INSTFILESPAGE_FINISHHEADER_TEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_FINISHHEADER_TEXT}" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SUBTITLE)" + !else ifdef MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_TITLE)" "${MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT}" + !else + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_TITLE)" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SUBTITLE)" + !endif + + Goto mui.endheader_done + + mui.endheader_abort: + + !ifdef MUI_INSTFILESPAGE_ABORTHEADER_TEXT & MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_ABORTHEADER_TEXT}" "${MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT}" + !else ifdef MUI_INSTFILESPAGE_ABORTHEADER_TEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_ABORTHEADER_TEXT}" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_SUBTITLE)" + !else ifdef MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_TITLE)" "${MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT}" + !else + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_TITLE)" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_SUBTITLE)" + !endif + + mui.endheader_done: + + !insertmacro MUI_LANGDLL_SAVELANGUAGE + + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI 2/Pages/License.nsh b/tools/Contrib/Modern UI 2/Pages/License.nsh new file mode 100644 index 0000000..a74214a --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/License.nsh @@ -0,0 +1,143 @@ +/* + +NSIS Modern User Interface +License page + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_LICENSEPAGE_INTERFACE + + !ifndef MUI_LICENSEPAGE_INTERFACE + !define MUI_LICENSEPAGE_INTERFACE + Var mui.LicensePage + + Var mui.Licensepage.TopText + Var mui.Licensepage.Text + Var mui.Licensepage.LicenseText + + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_BGCOLOR "/windows" + + ;Apply settings + LicenseBkColor "${MUI_LICENSEPAGE_BGCOLOR}" + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_LICENSE LICENSEDATA + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}LICENSEPAGE "" + !insertmacro MUI_LICENSEPAGE_INTERFACE + + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_TEXT_TOP "$(MUI_INNERTEXT_LICENSE_TOP)" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_BUTTON "" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_CHECKBOX_TEXT "" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "" + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}license + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicensePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseLeave_${MUI_UNIQUEID} + + Caption " " + + LicenseData "${LICENSEDATA}" + + !ifndef MUI_LICENSEPAGE_TEXT_BOTTOM + !ifndef MUI_LICENSEPAGE_CHECKBOX & MUI_LICENSEPAGE_RADIOBUTTONS + LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM)" "${MUI_LICENSEPAGE_BUTTON}" + !else ifdef MUI_LICENSEPAGE_CHECKBOX + LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM_CHECKBOX)" "${MUI_LICENSEPAGE_BUTTON}" + !else + LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS)" "${MUI_LICENSEPAGE_BUTTON}" + !endif + !else + LicenseText "${MUI_LICENSEPAGE_TEXT_BOTTOM}" "${MUI_LICENSEPAGE_BUTTON}" + !endif + + !ifdef MUI_LICENSEPAGE_CHECKBOX + LicenseForceSelection checkbox "${MUI_LICENSEPAGE_CHECKBOX_TEXT}" + !else ifdef MUI_LICENSEPAGE_RADIOBUTTONS + LicenseForceSelection radiobuttons "${MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT}" "${MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE}" + !endif + + PageExEnd + + !insertmacro MUI_FUNCTION_LICENSEPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicensePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_LICENSEPAGE_TEXT_TOP + !insertmacro MUI_UNSET MUI_LICENSEPAGE_TEXT_BOTTOM + !insertmacro MUI_UNSET MUI_LICENSEPAGE_BUTTON + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT + !insertmacro MUI_UNSET MUI_LICENSEPAGE_RADIOBUTTONS + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT_ACCEPT + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT_DECLINE + +!macroend + +!macro MUI_PAGE_LICENSE LICENSEDATA + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_LICENSE "${LICENSEDATA}" + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_LICENSE LICENSEDATA + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_LICENSE "${LICENSEDATA}" + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_LICENSEPAGE PRE SHOW LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_LICENSE_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_LICENSE_SUBTITLE) + + FunctionEnd + + Function "${SHOW}" + + ;Get control handles + FindWindow $mui.LicensePage "#32770" "" $HWNDPARENT + GetDlgItem $mui.LicensePage.TopText $mui.LicensePage 1040 + GetDlgItem $mui.LicensePage.Text $mui.LicensePage 1006 + GetDlgItem $mui.LicensePage.LicenseText $mui.LicensePage 1000 + + ;Top text + SendMessage $mui.LicensePage.TopText ${WM_SETTEXT} 0 "STR:${MUI_LICENSEPAGE_TEXT_TOP}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI 2/Pages/StartMenu.nsh b/tools/Contrib/Modern UI 2/Pages/StartMenu.nsh new file mode 100644 index 0000000..71c41bb --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/StartMenu.nsh @@ -0,0 +1,236 @@ +/* + +NSIS Modern User Interface +Start Menu folder page + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_STARTMENUPAGE_INTERFACE + + !ifndef MUI_STARTMENUPAGE_INTERFACE + !define MUI_STARTMENUPAGE_INTERFACE + Var mui.StartMenuPage + Var mui.StartMenuPage.Location + Var mui.StartMenuPage.FolderList + + Var mui.StartMenuPage.Temp + !endif + + !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME + !ifndef MUI_STARTMENUPAGE_REGISTRY_VARIABLES + !define MUI_STARTMENUPAGE_REGISTRY_VARIABLES + Var mui.StartMenuPage.RegistryLocation + !endif + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_STARTMENU ID VAR + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}STARTMENUPAGE "" + !insertmacro MUI_STARTMENUPAGE_INTERFACE + + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)" + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_TOP "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_TOP)" + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_CHECKBOX "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_CHECKBOX)" + + !define MUI_STARTMENUPAGE_VARIABLE "${VAR}" + !define "MUI_STARTMENUPAGE_${ID}_VARIABLE" "${MUI_STARTMENUPAGE_VARIABLE}" + !define "MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT + !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" + !endif + !ifdef MUI_STARTMENUPAGE_REGISTRY_KEY + !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" + !endif + !ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME + !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}" + !endif + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID} + + Caption " " + + PageExEnd + + !insertmacro MUI_FUNCTION_STARTMENUPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID} + + !undef MUI_STARTMENUPAGE_VARIABLE + !undef MUI_STARTMENUPAGE_TEXT_TOP + !undef MUI_STARTMENUPAGE_TEXT_CHECKBOX + !undef MUI_STARTMENUPAGE_DEFAULTFOLDER + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_NODISABLE + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_ROOT + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_KEY + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_VALUENAME + +!macroend + +!macro MUI_PAGE_STARTMENU ID VAR + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_STARTMENU "${ID}" "${VAR}" + + !verbose pop + +!macroend + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_STARTMENUPAGE PRE LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + + !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME + + ;Get Start Menu location from registry + + ${if} "${MUI_STARTMENUPAGE_VARIABLE}" == "" + + ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}" + ${if} $mui.StartMenuPage.RegistryLocation != "" + StrCpy "${MUI_STARTMENUPAGE_VARIABLE}" $mui.StartMenuPage.RegistryLocation + ${endif} + + ClearErrors + + ${endif} + + !endif + + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE) + + ${if} $(^RTL) == "0" + !ifndef MUI_STARTMENUPAGE_NODISABLE + StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !else + StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !endif + ${else} + !ifndef MUI_STARTMENUPAGE_NODISABLE + StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !else + StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !endif + ${endif} + + Pop $mui.StartMenuPage + + ;Get control handles + GetDlgItem $mui.StartMenuPage.Location $mui.StartMenuPage 1002 + GetDlgItem $mui.StartMenuPage.FolderList $mui.StartMenuPage 1004 + + !ifdef MUI_STARTMENUPAGE_BGCOLOR + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXTCOLOR "" + SetCtlColors $mui.StartMenuPage.Location "${MUI_STARTMENUPAGE_TEXTCOLOR}" "${MUI_STARTMENUPAGE_BGCOLOR}" + SetCtlColors $mui.StartMenuMenu.FolderList "${MUI_STARTMENUPAGE_TEXTCOLOR}" "${MUI_STARTMENUPAGE_BGCOLOR}" + !endif + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + StartMenu::Show + !insertmacro MUI_PAGE_FUNCTION_CUSTOM DESTROYED + + Pop $mui.StartMenuPage.Temp + ${if} $mui.StartMenuPage.Temp == "success" + Pop "${MUI_STARTMENUPAGE_VARIABLE}" + ${endif} + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + + +;-------------------------------- +;Script macros to get Start Menu folder + +!macro MUI_STARTMENU_GETFOLDER ID VAR + + !verbose push + !verbose ${MUI_VERBOSE} + + ;Get Start Menu folder from registry + ;Can be called from the script in the uninstaller + + !ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME + + ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}" + + ${if} $mui.StartMenuPage.RegistryLocation != "" + StrCpy "${VAR}" $mui.StartMenuPage.RegistryLocation + ${else} + StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}" + ${endif} + + !else + + StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}" + + !endif + + !verbose pop + +!macroend + +!macro MUI_STARTMENU_WRITE_BEGIN ID + + ;The code in the script to write the shortcuts should be put between the + ;MUI_STARTMENU_WRITE_BEGIN and MUI_STARTMENU_WRITE_END macros + + !verbose push + !verbose ${MUI_VERBOSE} + + !define MUI_STARTMENUPAGE_CURRENT_ID "${ID}" + + StrCpy $mui.StartMenuPage.Temp "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1 + + ;If the folder start with >, the user has chosen not to create a shortcut + ${if} $mui.StartMenuPage.Temp != ">" + + ${if} "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" == "" + ;Get folder from registry if the variable doesn't contain anything + !insertmacro MUI_STARTMENU_GETFOLDER "${MUI_STARTMENUPAGE_CURRENT_ID}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" + ${endif} + + !verbose pop + +!macroend + +!macro MUI_STARTMENU_WRITE_END + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifdef MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME + ;Write folder to registry + WriteRegStr "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" + !endif + + ${endif} + + !undef MUI_STARTMENUPAGE_CURRENT_ID + + !verbose pop + +!macroend + diff --git a/tools/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh b/tools/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh new file mode 100644 index 0000000..1ebe927 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh @@ -0,0 +1,100 @@ +/* + +NSIS Modern User Interface +Uninstall confirmation page + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_UNCONFIRMPAGE_INTERFACE + + !ifndef MUI_UNCONFIRMPAGE_INTERFACE + !define MUI_UNCONFIRMPAGE_INTERFACE + Var mui.UnConfirmPage + + Var mui.UnConfirmPage.Text + Var mui.UnConfirmPage.DirectoryText + Var mui.UnConfirmPage.Directory + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_CONFIRM + + !insertmacro MUI_SET MUI_UNCONFIRMPAGE "" + !insertmacro MUI_UNCONFIRMPAGE_INTERFACE + + !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_TOP "" + !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_LOCATION "" + + PageEx un.uninstConfirm + + PageCallbacks un.mui.ConfirmPre_${MUI_UNIQUEID} un.mui.ConfirmShow_${MUI_UNIQUEID} un.mui.ConfirmLeave_${MUI_UNIQUEID} + + Caption " " + + UninstallText "${MUI_UNCONFIRMPAGE_TEXT_TOP}" "${MUI_UNCONFIRMPAGE_TEXT_LOCATION}" + + !ifdef MUI_UNCONFIRMPAGE_VARIABLE + DirVar "${MUI_UNCONFIRMPAGE_VARIABLE}" + !endif + + PageExEnd + + !insertmacro MUI_UNFUNCTION_CONFIRMPAGE un.mui.ConfirmPre_${MUI_UNIQUEID} un.mui.ConfirmShow_${MUI_UNIQUEID} un.mui.ConfirmLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_UNCONFIRMPAGE_TEXT_TOP + !insertmacro MUI_UNSET MUI_UNCONFIRMPAGE_TEXT_LOCATION + +!macroend + +!macro MUI_UNPAGE_CONFIRM + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_CONFIRM + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_UNFUNCTION_CONFIRMPAGE PRE SHOW LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_UNTEXT_CONFIRM_TITLE) $(MUI_UNTEXT_CONFIRM_SUBTITLE) + + FunctionEnd + + Function "${SHOW}" + + ;Get controls handles + FindWindow $mui.UnConfirmPage "#32770" "" $HWNDPARENT + GetDlgItem $mui.UnConfirmPage.Text $mui.UnConfirmPage 1006 + GetDlgItem $mui.UnConfirmPage.DirectoryText $mui.UnConfirmPage 1029 + GetDlgItem $mui.UnConfirmPage.Directory $mui.UnConfirmPage 1000 + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI 2/Pages/Welcome.nsh b/tools/Contrib/Modern UI 2/Pages/Welcome.nsh new file mode 100644 index 0000000..0839b94 --- /dev/null +++ b/tools/Contrib/Modern UI 2/Pages/Welcome.nsh @@ -0,0 +1,181 @@ +/* + +NSIS Modern User Interface +Welcome page (implemented using nsDialogs) + +*/ + +;-------------------------------- +;Page interface settings and variables + +!macro MUI_WELCOMEPAGE_INTERFACE + + !ifndef MUI_WELCOMEPAGE_INTERFACE + !define MUI_WELCOMEPAGE_INTERFACE + Var mui.WelcomePage + + Var mui.WelcomePage.Image + Var mui.WelcomePage.Image.Bitmap + + Var mui.WelcomePage.Title + Var mui.WelcomePage.Title.Font + + Var mui.WelcomePage.Text + !endif + + !insertmacro MUI_DEFAULT MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp" + !if "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}" == "" + !error "Invalid MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP" + !endif + +!macroend + + +;-------------------------------- +;Interface initialization + +!macro MUI_WELCOMEPAGE_GUIINIT + + !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEWELCOMEPAGE_GUINIT + !define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEWELCOMEPAGE_GUINIT + + Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePage.GUIInit + + InitPluginsDir + File "/oname=$PLUGINSDIR\modern-wizard.bmp" "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}" + !pragma verifyloadimage "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}" + + !ifdef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT + Call "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT}" + !endif + + FunctionEnd + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePage.GUIInit + + !endif + +!macroend + + +;-------------------------------- +;Page declaration + +!macro MUI_PAGEDECLARATION_WELCOME + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEPAGE "" + !insertmacro MUI_WELCOMEPAGE_INTERFACE + + !insertmacro MUI_WELCOMEPAGE_GUIINIT + + !insertmacro MUI_DEFAULT MUI_WELCOMEPAGE_TITLE "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TITLE)" + !insertmacro MUI_DEFAULT MUI_WELCOMEPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TEXT)" + + !insertmacro MUI_PAGE_FUNCTION_FULLWINDOW + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomeLeave_${MUI_UNIQUEID} + + PageExEnd + + !insertmacro MUI_FUNCTION_WELCOMEPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomeLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_3LINES + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TEXT + +!macroend + +!macro MUI_PAGE_WELCOME + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + !insertmacro MUI_PAGEDECLARATION_WELCOME + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_WELCOME + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + !insertmacro MUI_PAGEDECLARATION_WELCOME + + !verbose pop + +!macroend + + +;-------------------------------- +;Page functions + +!macro MUI_FUNCTION_WELCOMEPAGE PRE LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + + ;Create dialog + nsDialogs::Create 1044 + Pop $mui.WelcomePage + nsDialogs::SetRTL $(^RTL) + SetCtlColors $mui.WelcomePage "" "${MUI_BGCOLOR}" + + ;Image control + ${NSD_CreateBitmap} 0u 0u 109u 193u "" + Pop $mui.WelcomePage.Image + !insertmacro MUI_INTERNAL_FULLWINDOW_LOADWIZARDIMAGE "${MUI_PAGE_UNINSTALLER_PREFIX}" $mui.WelcomePage.Image $PLUGINSDIR\modern-wizard.bmp $mui.WelcomePage.Image.Bitmap + + ;Positiong of controls + + ;Title + !ifndef MUI_WELCOMEPAGE_TITLE_3LINES + !define MUI_WELCOMEPAGE_TITLE_HEIGHT 28 + !else + !define MUI_WELCOMEPAGE_TITLE_HEIGHT 38 + !endif + + ;Text + ;17 = 10 (top margin) + 7 (distance between texts) + !define /math MUI_WELCOMEPAGE_TEXT_TOP 17 + ${MUI_WELCOMEPAGE_TITLE_HEIGHT} + + ;Title + ${NSD_CreateLabel} 120u 10u 195u ${MUI_WELCOMEPAGE_TITLE_HEIGHT}u "${MUI_WELCOMEPAGE_TITLE}" + Pop $mui.WelcomePage.Title + SetCtlColors $mui.WelcomePage.Title "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + CreateFont $mui.WelcomePage.Title.Font "$(^Font)" "12" "700" + SendMessage $mui.WelcomePage.Title ${WM_SETFONT} $mui.WelcomePage.Title.Font 0 + + ;Welcome text + ${NSD_CreateLabel} 120u ${MUI_WELCOMEPAGE_TEXT_TOP}u 195u 130u "${MUI_WELCOMEPAGE_TEXT}" + Pop $mui.WelcomePage.Text + SetCtlColors $mui.WelcomePage.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + ;Show page + Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageLoadFullWindow + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + nsDialogs::Show + !insertmacro MUI_PAGE_FUNCTION_CUSTOM DESTROYED + Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageUnloadFullWindow + + ;Delete image from memory + ${NSD_FreeImage} $mui.WelcomePage.Image.Bitmap + + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_HEIGHT + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TEXT_TOP + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend diff --git a/tools/Contrib/Modern UI/System.nsh b/tools/Contrib/Modern UI/System.nsh new file mode 100644 index 0000000..4646b44 --- /dev/null +++ b/tools/Contrib/Modern UI/System.nsh @@ -0,0 +1,2255 @@ +/* + +NSIS Modern User Interface - Version 1.81 +Copyright 2002-2023 Joost Verburg + +*/ + +!ifndef MUI_INCLUDED +!verbose push 3 +!define MUI_INCLUDED +!define MUI_SYSVERSION "1.81" +!verbose pop +!echo "NSIS Modern User Interface version ${MUI_SYSVERSION} - Copyright 2002-2023 Joost Verburg" + +;-------------------------------- +!verbose push 3 +!define /IfNDef MUI_VERBOSE 3 +!verbose ${MUI_VERBOSE} + +;-------------------------------- +;HEADER FILES, DECLARATIONS + +!include InstallOptions.nsh +!include LangFile.nsh +!include WinMessages.nsh + +Var MUI_TEMP1 +Var MUI_TEMP2 + +;-------------------------------- +;INSERT CODE + +!macro MUI_INSERT + + !ifndef MUI_INSERT + !define MUI_INSERT + + !ifdef MUI_PRODUCT | MUI_VERSION + !warning "The MUI_PRODUCT and MUI_VERSION defines have been removed. Use a normal Name command now." + !endif + + !insertmacro MUI_INTERFACE + + !insertmacro MUI_FUNCTION_GUIINIT + !insertmacro MUI_FUNCTION_ABORTWARNING + + !ifdef MUI_IOCONVERT_USED + !insertmacro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT + !endif + + !ifdef MUI_UNINSTALLER + !insertmacro MUI_UNFUNCTION_GUIINIT + !insertmacro MUI_FUNCTION_UNABORTWARNING + + !ifdef MUI_UNIOCONVERT_USED + !insertmacro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT + !endif + !endif + + !endif + +!macroend + +;-------------------------------- +;GENERAL + +!macro MUI_DEFAULT SYMBOL CONTENT + + !ifndef "${SYMBOL}" + !define "${SYMBOL}" "${CONTENT}" + !endif + +!macroend + +!macro MUI_DEFAULT_IOCONVERT SYMBOL CONTENT + + !ifndef "${SYMBOL}" + !define "${SYMBOL}" "${CONTENT}" + !insertmacro MUI_SET "${SYMBOL}_DEFAULTSET" + !insertmacro MUI_SET "MUI_${MUI_PAGE_UNINSTALLER_PREFIX}IOCONVERT_USED" + !else + !insertmacro MUI_UNSET "${SYMBOL}_DEFAULTSET" + !endif + +!macroend + +!macro MUI_SET SYMBOL + + !ifndef "${SYMBOL}" + !define "${SYMBOL}" + !endif + +!macroend + +!macro MUI_UNSET SYMBOL + + !ifdef "${SYMBOL}" + !undef "${SYMBOL}" + !endif + +!macroend + +;-------------------------------- +;INTERFACE - COMPILE TIME SETTINGS + +!macro MUI_INTERFACE + + !ifndef MUI_INTERFACE + !define MUI_INTERFACE + + !ifdef MUI_INSERT_NSISCONF + !insertmacro MUI_NSISCONF + !endif + + !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe" + !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe" + !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe" + !insertmacro MUI_DEFAULT MUI_UI_COMPONENTSPAGE_SMALLDESC "${NSISDIR}\Contrib\UIs\modern_smalldesc.exe" + !insertmacro MUI_DEFAULT MUI_UI_COMPONENTSPAGE_NODESC "${NSISDIR}\Contrib\UIs\modern_nodesc.exe" + !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" + !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_BGCOLOR "/windows" + !insertmacro MUI_DEFAULT MUI_INSTFILESPAGE_COLORS "/windows" + !insertmacro MUI_DEFAULT MUI_INSTFILESPAGE_PROGRESSBAR "smooth" + !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF" + !insertmacro MUI_DEFAULT MUI_TEXTCOLOR "000000" + !insertmacro MUI_DEFAULT MUI_WELCOMEFINISHPAGE_INI "${NSISDIR}\Contrib\Modern UI\ioSpecial.ini" + !insertmacro MUI_DEFAULT MUI_UNWELCOMEFINISHPAGE_INI "${NSISDIR}\Contrib\Modern UI\ioSpecial.ini" + !insertmacro MUI_DEFAULT MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp" + !insertmacro MUI_DEFAULT MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp" + !if "${MUI_WELCOMEFINISHPAGE_BITMAP}" == "" + !error "Invalid MUI_WELCOMEFINISHPAGE_BITMAP" + !endif + !if "${MUI_UNWELCOMEFINISHPAGE_BITMAP}" == "" + !error "Invalid MUI_UNWELCOMEFINISHPAGE_BITMAP" + !endif + + !ifdef MUI_HEADERIMAGE + + !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" + + !ifndef MUI_HEADERIMAGE_UNBITMAP + !define MUI_HEADERIMAGE_UNBITMAP "${MUI_HEADERIMAGE_BITMAP}" + !ifdef MUI_HEADERIMAGE_BITMAP_NOSTRETCH + !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH + !endif + !endif + + !if "${MUI_HEADERIMAGE_BITMAP}" == "" + !error "Invalid MUI_HEADERIMAGE_BITMAP" + !endif + !if "${MUI_HEADERIMAGE_UNBITMAP}" == "" + !error "Invalid MUI_HEADERIMAGE_UNBITMAP" + !endif + + !ifdef MUI_HEADERIMAGE_BITMAP_RTL + !ifndef MUI_HEADERIMAGE_UNBITMAP_RTL + !define MUI_HEADERIMAGE_UNBITMAP_RTL "${MUI_HEADERIMAGE_BITMAP_RTL}" + !ifdef MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH + !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH + !endif + !endif + + !if "${MUI_HEADERIMAGE_BITMAP_RTL}" == "" + !error "Invalid MUI_HEADERIMAGE_BITMAP_RTL" + !endif + !if "${MUI_HEADERIMAGE_UNBITMAP_RTL}" == "" + !error "Invalid MUI_HEADERIMAGE_UNBITMAP_RTL" + !endif + !endif + + !endif + + XPStyle On + + ChangeUI all "${MUI_UI}" + !ifdef MUI_HEADERIMAGE + !ifndef MUI_HEADERIMAGE_RIGHT + ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE}" + !else + ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE_RIGHT}" + !endif + !endif + !ifdef MUI_COMPONENTSPAGE_SMALLDESC + ChangeUI IDD_SELCOM "${MUI_UI_COMPONENTSPAGE_SMALLDESC}" + !else ifdef MUI_COMPONENTSPAGE_NODESC + ChangeUI IDD_SELCOM "${MUI_UI_COMPONENTSPAGE_NODESC}" + !endif + + Icon "${MUI_ICON}" + UninstallIcon "${MUI_UNICON}" + + CheckBitmap "${MUI_COMPONENTSPAGE_CHECKBITMAP}" + LicenseBkColor "${MUI_LICENSEPAGE_BGCOLOR}" + InstallColors ${MUI_INSTFILESPAGE_COLORS} + InstProgressFlags ${MUI_INSTFILESPAGE_PROGRESSBAR} + + SubCaption 4 " " + UninstallSubCaption 2 " " + + !insertmacro MUI_DEFAULT MUI_ABORTWARNING_TEXT "$(MUI_TEXT_ABORTWARNING)" + !insertmacro MUI_DEFAULT MUI_UNABORTWARNING_TEXT "$(MUI_UNTEXT_ABORTWARNING)" + + !endif + +!macroend + +;-------------------------------- +;INTERFACE - RUN-TIME + +!macro MUI_INNERDIALOG_TEXT CONTROL TEXT + + !verbose push + !verbose ${MUI_VERBOSE} + + FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT + GetDlgItem $MUI_TEMP1 $MUI_TEMP1 ${CONTROL} + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:${TEXT}" + + !verbose pop + +!macroend + +!macro MUI_HEADER_TEXT_INTERNAL ID TEXT + + GetDlgItem $MUI_TEMP1 $HWNDPARENT "${ID}" + + !ifdef MUI_HEADER_TRANSPARENT_TEXT + + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + !endif + + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:${TEXT}" + + !ifdef MUI_HEADER_TRANSPARENT_TEXT + + ShowWindow $MUI_TEMP1 ${SW_SHOWNA} + + !endif + +!macroend + +!macro MUI_HEADER_TEXT TEXT SUBTEXT + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifdef MUI_HEADER_TRANSPARENT_TEXT + + LockWindow on + + !endif + + !insertmacro MUI_HEADER_TEXT_INTERNAL 1037 "${TEXT}" + !insertmacro MUI_HEADER_TEXT_INTERNAL 1038 "${SUBTEXT}" + + !ifdef MUI_HEADER_TRANSPARENT_TEXT + + LockWindow off + + !endif + + !verbose pop + +!macroend + +!macro MUI_HEADER_TEXT_PAGE TEXT SUBTEXT + + !ifdef MUI_PAGE_HEADER_TEXT & MUI_PAGE_HEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${MUI_PAGE_HEADER_TEXT}" "${MUI_PAGE_HEADER_SUBTEXT}" + !else ifdef MUI_PAGE_HEADER_TEXT + !insertmacro MUI_HEADER_TEXT "${MUI_PAGE_HEADER_TEXT}" "${SUBTEXT}" + !else ifdef MUI_PAGE_HEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${TEXT}" "${MUI_PAGE_HEADER_SUBTEXT}" + !else + !insertmacro MUI_HEADER_TEXT "${TEXT}" "${SUBTEXT}" + !endif + + !insertmacro MUI_UNSET MUI_PAGE_HEADER_TEXT + !insertmacro MUI_UNSET MUI_PAGE_HEADER_SUBTEXT + +!macroend + +!macro MUI_DESCRIPTION_BEGIN + + FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT + GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1043 + + StrCmp $0 -1 0 mui.description_begin_done + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:" + EnableWindow $MUI_TEMP1 0 + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:$MUI_TEXT" + Goto mui.description_done + mui.description_begin_done: + +!macroend + +!macro MUI_DESCRIPTION_TEXT VAR TEXT + + !verbose push + !verbose ${MUI_VERBOSE} + + StrCmp $0 ${VAR} 0 mui.description_${VAR}_done + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:" + EnableWindow $MUI_TEMP1 1 + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:${TEXT}" + Goto mui.description_done + mui.description_${VAR}_done: + + !verbose pop + +!macroend + +!macro MUI_DESCRIPTION_END + + !verbose push + !verbose ${MUI_VERBOSE} + + mui.description_done: + + !verbose pop + +!macroend + +!macro MUI_ENDHEADER + + IfAbort mui.endheader_abort + + !ifdef MUI_INSTFILESPAGE_FINISHHEADER_TEXT & MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_FINISHHEADER_TEXT}" "${MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT}" + !else ifdef MUI_INSTFILESPAGE_FINISHHEADER_TEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_FINISHHEADER_TEXT}" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SUBTITLE)" + !else ifdef MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_TITLE)" "${MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT}" + !else + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_TITLE)" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SUBTITLE)" + !endif + + Goto mui.endheader_done + + mui.endheader_abort: + + !ifdef MUI_INSTFILESPAGE_ABORTHEADER_TEXT & MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_ABORTHEADER_TEXT}" "${MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT}" + !else ifdef MUI_INSTFILESPAGE_ABORTHEADER_TEXT + !insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_ABORTHEADER_TEXT}" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_SUBTITLE)" + !else ifdef MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_TITLE)" "${MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT}" + !else + !insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_TITLE)" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_SUBTITLE)" + !endif + + mui.endheader_done: + +!macroend + +!macro MUI_ABORTWARNING + + !ifdef MUI_FINISHPAGE_ABORTWARNINGCHECK + StrCmp $MUI_NOABORTWARNING "1" mui.quit + !endif + + !ifdef MUI_ABORTWARNING_CANCEL_DEFAULT + MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_ABORTWARNING_TEXT}" IDYES mui.quit + !else + MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_ABORTWARNING_TEXT}" IDYES mui.quit + !endif + + Abort + mui.quit: + +!macroend + +!macro MUI_UNABORTWARNING + + !ifdef MUI_UNABORTWARNING_CANCEL_DEFAULT + MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_UNABORTWARNING_TEXT}" IDYES mui.quit + !else + MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_UNABORTWARNING_TEXT}" IDYES mui.quit + !endif + + Abort + mui.quit: + +!macroend + +!macro MUI_GUIINIT + + !insertmacro MUI_WELCOMEFINISHPAGE_INIT "" + !insertmacro MUI_HEADERIMAGE_INIT "" + + !insertmacro MUI_GUIINIT_BASIC + +!macroend + +!macro MUI_UNGUIINIT + + !insertmacro MUI_WELCOMEFINISHPAGE_INIT "UN" + !insertmacro MUI_HEADERIMAGE_INIT "UN" + + !insertmacro MUI_GUIINIT_BASIC + + !ifdef MUI_UNFINISHPAGE + !ifndef MUI_UNFINISHPAGE_NOAUTOCLOSE + SetAutoClose true + !endif + !endif + +!macroend + +!macro MUI_GUIINIT_BASIC + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1037 + CreateFont $MUI_TEMP2 "$(^Font)" "$(^FontSize)" "700" + SendMessage $MUI_TEMP1 ${WM_SETFONT} $MUI_TEMP2 0 + + !ifndef MUI_HEADER_TRANSPARENT_TEXT + + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + !else + + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "transparent" + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "transparent" + + !endif + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1034 ; Header background + SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}" + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039 ; Header image + SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}" + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1028 + SetCtlColors $MUI_TEMP1 /BRANDING + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1256 + SetCtlColors $MUI_TEMP1 /BRANDING + SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:$(^Branding) " + +!macroend + +!macro MUI_WELCOMEFINISHPAGE_INIT UNINSTALLER + + !ifdef MUI_${UNINSTALLER}WELCOMEPAGE | MUI_${UNINSTALLER}FINISHPAGE + + !insertmacro INSTALLOPTIONS_EXTRACT_AS "${MUI_${UNINSTALLER}WELCOMEFINISHPAGE_INI}" "ioSpecial.ini" + File "/oname=$PLUGINSDIR\modern-wizard.bmp" "${MUI_${UNINSTALLER}WELCOMEFINISHPAGE_BITMAP}" + !pragma verifyloadimage "${MUI_${UNINSTALLER}WELCOMEFINISHPAGE_BITMAP}" + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 1" "Text" "$PLUGINSDIR\modern-wizard.bmp" + + !ifdef MUI_${UNINSTALLER}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 1" "Flags" "" + !endif + + !endif + +!macroend + +!macro MUI_HEADERIMAGE_INIT UNINSTALLER + + !ifdef MUI_HEADERIMAGE + + InitPluginsDir + + !ifdef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL + + StrCmp $(^RTL) 0 mui.headerimageinit_nortl + + File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL}" + !pragma verifyloadimage "${MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL}" + + !ifndef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL_NOSTRETCH + SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\modern-header.bmp" + !else + SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header.bmp" + !endif + + Goto mui.headerimageinit_done + + mui.headerimageinit_nortl: + + !endif + + File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UNINSTALLER}BITMAP}" + !pragma verifyloadimage "${MUI_HEADERIMAGE_${UNINSTALLER}BITMAP}" + + !ifndef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_NOSTRETCH + SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\modern-header.bmp" + !else + SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header.bmp" + !endif + + !ifdef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL + + mui.headerimageinit_done: + + !endif + + !endif + +!macroend + +;-------------------------------- +;INTERFACE - FUNCTIONS + +!macro MUI_FUNCTION_GUIINIT + + Function .onGUIInit + + !insertmacro MUI_GUIINIT + + !ifdef MUI_CUSTOMFUNCTION_GUIINIT + Call "${MUI_CUSTOMFUNCTION_GUIINIT}" + !endif + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_DESCRIPTION_BEGIN + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifndef MUI_VAR_TEXT + Var MUI_TEXT + !define MUI_VAR_TEXT + !endif + + Function .onMouseOverSection + !insertmacro MUI_DESCRIPTION_BEGIN + + !verbose pop + +!macroend + +!macro MUI_FUNCTION_DESCRIPTION_END + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_DESCRIPTION_END + !ifdef MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION + Call "${MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION}" + !endif + FunctionEnd + + !verbose pop + +!macroend + +!macro MUI_UNFUNCTION_DESCRIPTION_BEGIN + + !verbose push + !verbose ${MUI_VERBOSE} + + Function un.onMouseOverSection + !insertmacro MUI_DESCRIPTION_BEGIN + + !verbose pop + +!macroend + +!macro MUI_UNFUNCTION_DESCRIPTION_END + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_DESCRIPTION_END + !ifdef MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION + Call "${MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION}" + !endif + FunctionEnd + + !verbose pop + +!macroend + +!macro MUI_FUNCTION_ABORTWARNING + + Function .onUserAbort + !ifdef MUI_ABORTWARNING + !insertmacro MUI_ABORTWARNING + !endif + !ifdef MUI_CUSTOMFUNCTION_ABORT + Call "${MUI_CUSTOMFUNCTION_ABORT}" + !endif + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_UNABORTWARNING + + Function un.onUserAbort + !ifdef MUI_UNABORTWARNING + !insertmacro MUI_UNABORTWARNING + !endif + !ifdef MUI_CUSTOMFUNCTION_UNABORT + Call "${MUI_CUSTOMFUNCTION_UNABORT}" + !endif + FunctionEnd + +!macroend + +!macro MUI_UNFUNCTION_GUIINIT + + Function un.onGUIInit + + !insertmacro MUI_UNGUIINIT + + !ifdef MUI_CUSTOMFUNCTION_UNGUIINIT + Call "${MUI_CUSTOMFUNCTION_UNGUIINIT}" + !endif + + FunctionEnd + +!macroend + +!macro MUI_FUNCTIONS_DESCRIPTION_BEGIN + + ;1.65 compatibility + + !warning "Modern UI macro name has changed. Please change MUI_FUNCTIONS_DESCRIPTION_BEGIN to MUI_FUNCTION_DESCRIPTION_BEGIN." + + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + +!macroend + +!macro MUI_FUNCTIONS_DESCRIPTION_END + + ;1.65 compatibility + + !warning "Modern UI macro name has changed. Please change MUI_FUNCTIONS_DESCRIPTION_END to MUI_FUNCTION_DESCRIPTION_END." + + !insertmacro MUI_FUNCTION_DESCRIPTION_END + +!macroend + +;-------------------------------- +;START MENU FOLDER + +!macro MUI_STARTMENU_GETFOLDER ID VAR + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME + + ReadRegStr $MUI_TEMP1 "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}" + StrCmp $MUI_TEMP1 "" +3 + StrCpy "${VAR}" $MUI_TEMP1 + Goto +2 + + StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}" + + !else + + StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}" + + !endif + + !verbose pop + +!macroend + +!macro MUI_STARTMENU_WRITE_BEGIN ID + + !verbose push + !verbose ${MUI_VERBOSE} + + !define MUI_STARTMENUPAGE_CURRENT_ID "${ID}" + + StrCpy $MUI_TEMP1 "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1 + StrCmp $MUI_TEMP1 ">" mui.startmenu_write_${MUI_STARTMENUPAGE_CURRENT_ID}_done + + StrCmp "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" "" 0 mui.startmenu_writebegin_${MUI_STARTMENUPAGE_CURRENT_ID}_notempty + + !insertmacro MUI_STARTMENU_GETFOLDER "${MUI_STARTMENUPAGE_CURRENT_ID}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" + + mui.startmenu_writebegin_${MUI_STARTMENUPAGE_CURRENT_ID}_notempty: + + !verbose pop + +!macroend + +!macro MUI_STARTMENU_WRITE_END + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifdef MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME + WriteRegStr "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" + !endif + + mui.startmenu_write_${MUI_STARTMENUPAGE_CURRENT_ID}_done: + + !undef MUI_STARTMENUPAGE_CURRENT_ID + + !verbose pop + +!macroend + +;-------------------------------- +;PAGES + +!macro MUI_PAGE_INIT + + !ifdef MUI_INSERT + !warning "MUI_[UN]PAGE_* inserted after MUI_LANGUAGE" + !endif + + !insertmacro MUI_INTERFACE + + !insertmacro MUI_DEFAULT MUI_PAGE_UNINSTALLER_PREFIX "" + !insertmacro MUI_DEFAULT MUI_PAGE_UNINSTALLER_FUNCPREFIX "" + + !insertmacro MUI_UNSET MUI_UNIQUEID + + !define MUI_UNIQUEID ${__LINE__} + +!macroend + +!macro MUI_UNPAGE_INIT + + !ifndef MUI_UNINSTALLER + !define MUI_UNINSTALLER + !endif + + !define MUI_PAGE_UNINSTALLER + + !insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER_PREFIX + !insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER_FUNCPREFIX + + !define MUI_PAGE_UNINSTALLER_PREFIX "UN" + !define MUI_PAGE_UNINSTALLER_FUNCPREFIX "un." + +!macroend + +!macro MUI_UNPAGE_END + + !undef MUI_PAGE_UNINSTALLER + !undef MUI_PAGE_UNINSTALLER_PREFIX + !undef MUI_PAGE_UNINSTALLER_FUNCPREFIX + +!macroend + +!macro MUI_PAGE_WELCOME + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEPAGE + + !insertmacro MUI_DEFAULT_IOCONVERT MUI_WELCOMEPAGE_TITLE "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TITLE)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_WELCOMEPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TEXT)" + + !ifndef MUI_VAR_HWND + Var MUI_HWND + !define MUI_VAR_HWND + !endif + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomeLeave_${MUI_UNIQUEID} + + PageExEnd + + !insertmacro MUI_FUNCTION_WELCOMEPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomeLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_3LINES + !insertmacro MUI_UNSET MUI_WELCOMEPAGE_TEXT + + !verbose pop + +!macroend + +!macro MUI_PAGE_LICENSE LICENSEDATA + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}LICENSEPAGE + + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_TEXT_TOP "$(MUI_INNERTEXT_LICENSE_TOP)" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_BUTTON "" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_CHECKBOX_TEXT "" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "" + !insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "" + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}license + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicensePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseLeave_${MUI_UNIQUEID} + + Caption " " + + LicenseData "${LICENSEDATA}" + + !ifndef MUI_LICENSEPAGE_TEXT_BOTTOM + !ifndef MUI_LICENSEPAGE_CHECKBOX & MUI_LICENSEPAGE_RADIOBUTTONS + LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM)" "${MUI_LICENSEPAGE_BUTTON}" + !else ifdef MUI_LICENSEPAGE_CHECKBOX + LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM_CHECKBOX)" "${MUI_LICENSEPAGE_BUTTON}" + !else + LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS)" "${MUI_LICENSEPAGE_BUTTON}" + !endif + !else + LicenseText "${MUI_LICENSEPAGE_TEXT_BOTTOM}" "${MUI_LICENSEPAGE_BUTTON}" + !endif + + !ifdef MUI_LICENSEPAGE_CHECKBOX + LicenseForceSelection checkbox "${MUI_LICENSEPAGE_CHECKBOX_TEXT}" + !else ifdef MUI_LICENSEPAGE_RADIOBUTTONS + LicenseForceSelection radiobuttons "${MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT}" "${MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE}" + !endif + + PageExEnd + + !insertmacro MUI_FUNCTION_LICENSEPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicensePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_LICENSEPAGE_TEXT_TOP + !insertmacro MUI_UNSET MUI_LICENSEPAGE_TEXT_BOTTOM + !insertmacro MUI_UNSET MUI_LICENSEPAGE_BUTTON + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT + !insertmacro MUI_UNSET MUI_LICENSEPAGE_RADIOBUTTONS + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT_ACCEPT + !insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT_DECLINE + + !verbose pop + +!macroend + +!macro MUI_PAGE_COMPONENTS + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}COMPONENTSPAGE + + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_TOP "" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_COMPLIST "" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_INSTTYPE "" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE)" + !insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO)" + + !ifndef MUI_VAR_TEXT + Var MUI_TEXT + !define MUI_VAR_TEXT + !endif + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}components + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsLeave_${MUI_UNIQUEID} + + Caption " " + + ComponentText "${MUI_COMPONENTSPAGE_TEXT_TOP}" "${MUI_COMPONENTSPAGE_TEXT_INSTTYPE}" "${MUI_COMPONENTSPAGE_TEXT_COMPLIST}" + + PageExEnd + + !insertmacro MUI_FUNCTION_COMPONENTSPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsLeave_${MUI_UNIQUEID} + + !undef MUI_COMPONENTSPAGE_TEXT_TOP + !undef MUI_COMPONENTSPAGE_TEXT_COMPLIST + !undef MUI_COMPONENTSPAGE_TEXT_INSTTYPE + !insertmacro MUI_UNSET MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE + !insertmacro MUI_UNSET MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO + + !verbose pop + +!macroend + +!macro MUI_PAGE_DIRECTORY + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}DIRECTORYPAGE + + !insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_TOP "" + !insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_DESTINATION "" + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}directory + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID} + + Caption " " + + DirText "${MUI_DIRECTORYPAGE_TEXT_TOP}" "${MUI_DIRECTORYPAGE_TEXT_DESTINATION}" + + !ifdef MUI_DIRECTORYPAGE_VARIABLE + DirVar "${MUI_DIRECTORYPAGE_VARIABLE}" + !endif + + !ifdef MUI_DIRECTORYPAGE_VERIFYONLEAVE + DirVerify leave + !endif + + PageExEnd + + !insertmacro MUI_FUNCTION_DIRECTORYPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID} + + !undef MUI_DIRECTORYPAGE_TEXT_TOP + !undef MUI_DIRECTORYPAGE_TEXT_DESTINATION + !insertmacro MUI_UNSET MUI_DIRECTORYPAGE_BGCOLOR + !insertmacro MUI_UNSET MUI_DIRECTORYPAGE_VARIABLE + !insertmacro MUI_UNSET MUI_DIRECTORYPAGE_VERIFYONLEAVE + + !verbose pop + +!macroend + +!macro MUI_PAGE_STARTMENU ID VAR + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}STARTMENUPAGE + + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)" + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_TOP "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_TOP)" + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_CHECKBOX "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_CHECKBOX)" + + !define MUI_STARTMENUPAGE_VARIABLE "${VAR}" + !define "MUI_STARTMENUPAGE_${ID}_VARIABLE" "${MUI_STARTMENUPAGE_VARIABLE}" + !define "MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT + !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" + !endif + !ifdef MUI_STARTMENUPAGE_REGISTRY_KEY + !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" + !endif + !ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME + !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}" + !endif + + !ifndef MUI_VAR_HWND + Var MUI_HWND + !define MUI_VAR_HWND + !endif + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID} + + Caption " " + + PageExEnd + + !insertmacro MUI_FUNCTION_STARTMENUPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID} + + !undef MUI_STARTMENUPAGE_VARIABLE + !undef MUI_STARTMENUPAGE_TEXT_TOP + !undef MUI_STARTMENUPAGE_TEXT_CHECKBOX + !undef MUI_STARTMENUPAGE_DEFAULTFOLDER + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_NODISABLE + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_ROOT + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_KEY + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_VALUENAME + !insertmacro MUI_UNSET MUI_STARTMENUPAGE_BGCOLOR + + !verbose pop + +!macroend + +!macro MUI_PAGE_INSTFILES + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INSTFILESPAGE + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}instfiles + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesLeave_${MUI_UNIQUEID} + + Caption " " + + PageExEnd + + !insertmacro MUI_FUNCTION_INSTFILESPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_FINISHHEADER_TEXT + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_ABORTWARNING_TEXT + !insertmacro MUI_UNSET MUI_INSTFILESPAGE_ABORTWARNING_SUBTEXT + + !verbose pop + +!macroend + +!macro MUI_PAGE_FINISH + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE + + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_TITLE "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_TITLE)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_TEXT)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_BUTTON "$(MUI_BUTTONTEXT_FINISH)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_TEXT_REBOOT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_REBOOT)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_TEXT_REBOOTNOW "$(MUI_TEXT_FINISH_REBOOTNOW)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_TEXT_REBOOTLATER "$(MUI_TEXT_FINISH_REBOOTLATER)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_RUN_TEXT "$(MUI_TEXT_FINISH_RUN)" + !insertmacro MUI_DEFAULT_IOCONVERT MUI_FINISHPAGE_SHOWREADME_TEXT "$(MUI_TEXT_FINISH_SHOWREADME)" + !insertmacro MUI_DEFAULT MUI_FINISHPAGE_LINK_COLOR "000080" + + !ifndef MUI_VAR_HWND + Var MUI_HWND + !define MUI_VAR_HWND + !endif + + !ifndef MUI_PAGE_UNINSTALLER + !ifndef MUI_FINISHPAGE_NOAUTOCLOSE + AutoCloseWindow true + !endif + !endif + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + !ifndef MUI_VAR_NOABORTWARNING + !define MUI_VAR_NOABORTWARNING + Var MUI_NOABORTWARNING + !endif + !endif + + PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom + + PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishLeave_${MUI_UNIQUEID} + + Caption " " + + PageExEnd + + !insertmacro MUI_FUNCTION_FINISHPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE + !insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE_3LINES + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_LARGE + !insertmacro MUI_UNSET MUI_FINISHPAGE_BUTTON + !insertmacro MUI_UNSET MUI_FINISHPAGE_CANCEL_ENABLED + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOT + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOTNOW + !insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOTLATER + !insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTLATER_DEFAULT + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_TEXT + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_PARAMETERS + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_NOTCHECKED + !insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_FUNCTION + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_TEXT + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_NOTCHECKED + !insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_FUNCTION + !insertmacro MUI_UNSET MUI_FINISHPAGE_LINK + !insertmacro MUI_UNSET MUI_FINISHPAGE_LINK_LOCATION + !insertmacro MUI_UNSET MUI_FINISHPAGE_LINK_COLOR + !insertmacro MUI_UNSET MUI_FINISHPAGE_NOREBOOTSUPPORT + + !insertmacro MUI_UNSET MUI_FINISHPAGE_CURFIELD_TOP + !insertmacro MUI_UNSET MUI_FINISHPAGE_CURFIELD_BOTTOM + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_WELCOME + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + + !insertmacro MUI_PAGE_WELCOME + + !insertmacro MUI_UNPAGE_END + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_CONFIRM + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifndef MUI_UNINSTALLER + !define MUI_UNINSTALLER + !endif + + !insertmacro MUI_PAGE_INIT + + !insertmacro MUI_SET MUI_UNCONFIRMPAGE + + !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_TOP "" + !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_LOCATION "" + + PageEx un.uninstConfirm + + PageCallbacks un.mui.ConfirmPre_${MUI_UNIQUEID} un.mui.ConfirmShow_${MUI_UNIQUEID} un.mui.ConfirmLeave_${MUI_UNIQUEID} + + Caption " " + + UninstallText "${MUI_UNCONFIRMPAGE_TEXT_TOP}" "${MUI_UNCONFIRMPAGE_TEXT_LOCATION}" + + !ifdef MUI_UNCONFIRMPAGE_VARIABLE + DirVar "${MUI_UNCONFIRMPAGE_VARIABLE}" + !endif + + PageExEnd + + !insertmacro MUI_UNFUNCTION_CONFIRMPAGE un.mui.ConfirmPre_${MUI_UNIQUEID} un.mui.ConfirmShow_${MUI_UNIQUEID} un.mui.ConfirmLeave_${MUI_UNIQUEID} + + !insertmacro MUI_UNSET MUI_UNCONFIRMPAGE_TEXT_TOP + !insertmacro MUI_UNSET MUI_UNCONFIRMPAGE_TEXT_LOCATION + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_LICENSE LICENSEDATA + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + + !insertmacro MUI_PAGE_LICENSE "${LICENSEDATA}" + + !insertmacro MUI_UNPAGE_END + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_COMPONENTS + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + + !insertmacro MUI_PAGE_COMPONENTS + + !insertmacro MUI_UNPAGE_END + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_DIRECTORY + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + + !insertmacro MUI_PAGE_DIRECTORY + + !insertmacro MUI_UNPAGE_END + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_INSTFILES + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_END + + !verbose pop + +!macroend + +!macro MUI_UNPAGE_FINISH + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro MUI_UNPAGE_INIT + + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_END + + !verbose pop + +!macroend + +;-------------------------------- +;PAGE FUNCTIONS + +!macro MUI_PAGE_FUNCTION_CUSTOM TYPE + + !ifdef MUI_PAGE_CUSTOMFUNCTION_${TYPE} + Call "${MUI_PAGE_CUSTOMFUNCTION_${TYPE}}" + !undef MUI_PAGE_CUSTOMFUNCTION_${TYPE} + !endif + +!macroend + +!macro MUI_WELCOMEFINISHPAGE_FUNCTION_CUSTOM + + !ifdef MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT + Call "${MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT}" + !undef MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT + !endif + +!macroend + +!macro MUI_FUNCTION_WELCOMEPAGE PRE LEAVE + + Function "${PRE}" + + !insertmacro MUI_WELCOMEFINISHPAGE_FUNCTION_CUSTOM + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "NumFields" "3" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "NextButtonText" "" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "CancelEnabled" "" + + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 2" "Text" MUI_WELCOMEPAGE_TITLE + + !ifndef MUI_WELCOMEPAGE_TITLE_3LINES + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 2" "Bottom" "38" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Top" "45" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 2" "Bottom" "48" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Top" "55" + !endif + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "185" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 3" "Text" MUI_WELCOMEPAGE_TEXT + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + + LockWindow on + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1028 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1256 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1035 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1037 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1045 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + LockWindow off + + !insertmacro INSTALLOPTIONS_INITDIALOG "ioSpecial.ini" + Pop $MUI_HWND + SetCtlColors $MUI_HWND "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + GetDlgItem $MUI_TEMP1 $MUI_HWND 1201 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + CreateFont $MUI_TEMP2 "$(^Font)" "12" "700" + SendMessage $MUI_TEMP1 ${WM_SETFONT} $MUI_TEMP2 0 + + GetDlgItem $MUI_TEMP1 $MUI_HWND 1202 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + !insertmacro INSTALLOPTIONS_SHOW + + LockWindow on + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1028 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1256 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1035 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1037 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1045 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + LockWindow off + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_LICENSEPAGE PRE SHOW LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_LICENSE_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_LICENSE_SUBTITLE) + + FunctionEnd + + Function "${SHOW}" + + !insertmacro MUI_INNERDIALOG_TEXT 1040 "${MUI_LICENSEPAGE_TEXT_TOP}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_COMPONENTSPAGE PRE SHOW LEAVE + + Function "${PRE}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_COMPONENTS_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_COMPONENTS_SUBTITLE) + FunctionEnd + + Function "${SHOW}" + + !insertmacro MUI_INNERDIALOG_TEXT 1042 "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}" + + FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT + GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1043 + EnableWindow $MUI_TEMP1 0 + + !insertmacro MUI_INNERDIALOG_TEXT 1043 "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}" + StrCpy $MUI_TEXT "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_DIRECTORYPAGE PRE SHOW LEAVE + + Function "${PRE}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_DIRECTORY_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_DIRECTORY_SUBTITLE) + FunctionEnd + + Function "${SHOW}" + !ifdef MUI_DIRECTORYPAGE_BGCOLOR + !insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXTCOLOR "" + FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT + GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1019 + SetCtlColors $MUI_TEMP1 "${MUI_DIRECTORYPAGE_TEXTCOLOR}" "${MUI_DIRECTORYPAGE_BGCOLOR}" + !endif + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + FunctionEnd + + Function "${LEAVE}" + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_STARTMENUPAGE PRE LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + + !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME + + StrCmp "${MUI_STARTMENUPAGE_VARIABLE}" "" 0 +4 + + ReadRegStr $MUI_TEMP1 "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}" + StrCmp $MUI_TEMP1 "" +2 + StrCpy "${MUI_STARTMENUPAGE_VARIABLE}" $MUI_TEMP1 + + !endif + + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE) + + StrCmp $(^RTL) 0 mui.startmenu_nortl + !ifndef MUI_STARTMENUPAGE_NODISABLE + StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !else + StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !endif + Goto mui.startmenu_initdone + mui.startmenu_nortl: + !ifndef MUI_STARTMENUPAGE_NODISABLE + StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !else + StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" + !endif + mui.startmenu_initdone: + + Pop $MUI_HWND + + !ifdef MUI_STARTMENUPAGE_BGCOLOR + !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXTCOLOR "" + GetDlgItem $MUI_TEMP1 $MUI_HWND 1002 + SetCtlColors $MUI_TEMP1 "${MUI_STARTMENUPAGE_TEXTCOLOR}" "${MUI_STARTMENUPAGE_BGCOLOR}" + GetDlgItem $MUI_TEMP1 $MUI_HWND 1004 + SetCtlColors $MUI_TEMP1 "${MUI_STARTMENUPAGE_TEXTCOLOR}" "${MUI_STARTMENUPAGE_BGCOLOR}" + !endif + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + StartMenu::Show + !insertmacro MUI_PAGE_FUNCTION_CUSTOM DESTROYED + + Pop $MUI_TEMP1 + StrCmp $MUI_TEMP1 "success" 0 +2 + Pop "${MUI_STARTMENUPAGE_VARIABLE}" + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_INSTFILESPAGE PRE SHOW LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLING_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLING_SUBTITLE) + + FunctionEnd + + Function "${SHOW}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + !insertmacro MUI_ENDHEADER + !insertmacro MUI_LANGDLL_SAVELANGUAGE + + FunctionEnd + +!macroend + +!macro MUI_FUNCTION_FINISHPAGE PRE LEAVE + + Function "${PRE}" + + !insertmacro MUI_WELCOMEFINISHPAGE_FUNCTION_CUSTOM + + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Settings" "NextButtonText" MUI_FINISHPAGE_BUTTON + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "CancelEnabled" "1" + !endif + + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 2" "Bottom" "38" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Top" "45" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 2" "Bottom" "48" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Top" "55" + !endif + + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 2" "Text" MUI_FINISHPAGE_TITLE + + !ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "85" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "115" + !endif + !else + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "95" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "125" + !endif + !endif + !else + !ifndef MUI_FINISHPAGE_LINK + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "185" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "175" + !endif + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + + IfRebootFlag 0 mui.finish_noreboot_init + + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "85" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "115" + !endif + !else + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "95" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "125" + !endif + !endif + + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 3" "Text" MUI_FINISHPAGE_TEXT_REBOOT + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "5" + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Type" "RadioButton" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 4" "Text" MUI_FINISHPAGE_TEXT_REBOOTNOW + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Left" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Right" "321" + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "90" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "100" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "130" + !endif + !else + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "100" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "110" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "130" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "140" + !endif + !endif + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Type" "RadioButton" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 5" "Text" MUI_FINISHPAGE_TEXT_REBOOTLATER + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Left" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Right" "321" + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Top" "110" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Bottom" "120" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Top" "110" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "Bottom" "120" + !endif + !ifdef MUI_FINISHPAGE_REBOOTLATER_DEFAULT + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "0" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "State" "1" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "1" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "State" "0" + !endif + + Goto mui.finish_load + + mui.finish_noreboot_init: + + !endif + + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 3" "Text" MUI_FINISHPAGE_TEXT + + !ifdef MUI_FINISHPAGE_RUN + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Type" "CheckBox" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field 4" "Text" MUI_FINISHPAGE_RUN_TEXT + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Left" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Right" "315" + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "90" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "100" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "130" + !endif + !else + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "100" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "110" + !else + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "130" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "140" + !endif + !endif + !ifndef MUI_FINISHPAGE_RUN_NOTCHECKED + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "1" + !endif + + !endif + + !ifdef MUI_FINISHPAGE_SHOWREADME + + !ifdef MUI_FINISHPAGE_CURFIELD_NO + !undef MUI_FINISHPAGE_CURFIELD_NO + !endif + + !ifndef MUI_FINISHPAGE_RUN + !define MUI_FINISHPAGE_CURFIELD_NO 4 + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !define MUI_FINISHPAGE_CURFIELD_TOP 90 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 100 + !else + !define MUI_FINISHPAGE_CURFIELD_TOP 120 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 130 + !endif + !else + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !define MUI_FINISHPAGE_CURFIELD_TOP 100 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 110 + !else + !define MUI_FINISHPAGE_CURFIELD_TOP 130 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 140 + !endif + !endif + !else + !define MUI_FINISHPAGE_CURFIELD_NO 5 + !ifndef MUI_FINISHPAGE_TITLE_3LINES + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !define MUI_FINISHPAGE_CURFIELD_TOP 110 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 120 + !else + !define MUI_FINISHPAGE_CURFIELD_TOP 140 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 150 + !endif + !else + !ifndef MUI_FINISHPAGE_TEXT_LARGE + !define MUI_FINISHPAGE_CURFIELD_TOP 120 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 130 + !else + !define MUI_FINISHPAGE_CURFIELD_TOP 150 + !define MUI_FINISHPAGE_CURFIELD_BOTTOM 160 + !endif + !endif + !endif + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Type" "CheckBox" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Text" MUI_FINISHPAGE_SHOWREADME_TEXT + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Left" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Right" "315" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Top" ${MUI_FINISHPAGE_CURFIELD_TOP} + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Bottom" ${MUI_FINISHPAGE_CURFIELD_BOTTOM} + !ifndef MUI_FINISHPAGE_SHOWREADME_NOTCHECKED + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "State" "1" + !endif + + !endif + + !ifdef MUI_FINISHPAGE_LINK + + !ifdef MUI_FINISHPAGE_CURFIELD_NO + !undef MUI_FINISHPAGE_CURFIELD_NO + !endif + + !ifdef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME + !define MUI_FINISHPAGE_CURFIELD_NO 6 + !else ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME + !define MUI_FINISHPAGE_CURFIELD_NO 5 + !else + !define MUI_FINISHPAGE_CURFIELD_NO 4 + !endif + + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Type" "Link" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Text" MUI_FINISHPAGE_LINK + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Left" "120" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Right" "315" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Top" "175" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "Bottom" "185" + !insertmacro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT "ioSpecial.ini" "Field ${MUI_FINISHPAGE_CURFIELD_NO}" "State" MUI_FINISHPAGE_LINK_LOCATION + + !endif + + !ifdef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME & MUI_FINISHPAGE_LINK + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "6" + !else ifdef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "5" + !else ifdef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_LINK + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "5" + !else ifdef MUI_FINISHPAGE_SHOWREADME & MUI_FINISHPAGE_LINK + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "5" + !else ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME | MUI_FINISHPAGE_LINK + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "4" + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + mui.finish_load: + !endif + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + + LockWindow on + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1028 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1256 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1035 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1037 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1045 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + LockWindow off + + !insertmacro INSTALLOPTIONS_INITDIALOG "ioSpecial.ini" + Pop $MUI_HWND + SetCtlColors $MUI_HWND "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + GetDlgItem $MUI_TEMP1 $MUI_HWND 1201 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + CreateFont $MUI_TEMP2 "$(^Font)" "12" "700" + SendMessage $MUI_TEMP1 ${WM_SETFONT} $MUI_TEMP2 0 + + GetDlgItem $MUI_TEMP1 $MUI_HWND 1202 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + + IfRebootFlag 0 mui.finish_noreboot_show + + GetDlgItem $MUI_TEMP1 $MUI_HWND 1203 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + GetDlgItem $MUI_TEMP1 $MUI_HWND 1204 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + + Goto mui.finish_show + + mui.finish_noreboot_show: + + !endif + + !ifdef MUI_FINISHPAGE_RUN + GetDlgItem $MUI_TEMP1 $MUI_HWND 1203 + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + !endif + + !ifdef MUI_FINISHPAGE_SHOWREADME + !ifndef MUI_FINISHPAGE_RUN + GetDlgItem $MUI_TEMP1 $MUI_HWND 1203 + !else + GetDlgItem $MUI_TEMP1 $MUI_HWND 1204 + !endif + SetCtlColors $MUI_TEMP1 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}" + !endif + + !ifdef MUI_FINISHPAGE_LINK + !ifdef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME + GetDlgItem $MUI_TEMP1 $MUI_HWND 1205 + !else ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME + GetDlgItem $MUI_TEMP1 $MUI_HWND 1204 + !else + GetDlgItem $MUI_TEMP1 $MUI_HWND 1203 + !endif + SetCtlColors $MUI_TEMP1 "${MUI_FINISHPAGE_LINK_COLOR}" "${MUI_BGCOLOR}" + !endif + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + mui.finish_show: + !endif + + !ifndef MUI_FORCECLASSICCONTROLS + ${If} ${IsHighContrastModeActive} + !endif + ; SetCtlColors does not change the check/radio text color (bug #443) + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + GetDlgItem $MUI_TEMP1 $MUI_HWND 1203 + System::Call 'UXTHEME::SetWindowTheme(p$MUI_TEMP1,w" ",w" ")' + GetDlgItem $MUI_TEMP1 $MUI_HWND 1204 + System::Call 'UXTHEME::SetWindowTheme(p$MUI_TEMP1,w" ",w" ")' + !else ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME + GetDlgItem $MUI_TEMP1 $MUI_HWND 1203 + System::Call 'UXTHEME::SetWindowTheme(p$MUI_TEMP1,w" ",w" ")' + !ifdef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME + GetDlgItem $MUI_TEMP1 $MUI_HWND 1204 + System::Call 'UXTHEME::SetWindowTheme(p$MUI_TEMP1,w" ",w" ")' + !endif + !endif + !ifndef MUI_FORCECLASSICCONTROLS + ${EndIf} + !endif + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + StrCpy $MUI_NOABORTWARNING "1" + !endif + + !insertmacro INSTALLOPTIONS_SHOW + + !ifdef MUI_FINISHPAGE_CANCEL_ENABLED + StrCpy $MUI_NOABORTWARNING "" + !endif + + LockWindow on + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1028 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1256 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1035 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1037 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039 + ShowWindow $MUI_TEMP1 ${SW_NORMAL} + + GetDlgItem $MUI_TEMP1 $HWNDPARENT 1045 + ShowWindow $MUI_TEMP1 ${SW_HIDE} + LockWindow off + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT + + IfRebootFlag "" mui.finish_noreboot_end + + !insertmacro INSTALLOPTIONS_READ $MUI_TEMP1 "ioSpecial.ini" "Field 4" "State" + + StrCmp $MUI_TEMP1 "1" 0 +2 + Reboot + + Return + + mui.finish_noreboot_end: + + !endif + + !ifdef MUI_FINISHPAGE_RUN + + !insertmacro INSTALLOPTIONS_READ $MUI_TEMP1 "ioSpecial.ini" "Field 4" "State" + + StrCmp $MUI_TEMP1 "1" 0 mui.finish_norun + !ifndef MUI_FINISHPAGE_RUN_FUNCTION + !ifndef MUI_FINISHPAGE_RUN_PARAMETERS + StrCpy $MUI_TEMP1 "$\"${MUI_FINISHPAGE_RUN}$\"" + !else + StrCpy $MUI_TEMP1 "$\"${MUI_FINISHPAGE_RUN}$\" ${MUI_FINISHPAGE_RUN_PARAMETERS}" + !endif + Exec "$MUI_TEMP1" + !else + Call "${MUI_FINISHPAGE_RUN_FUNCTION}" + !endif + + mui.finish_norun: + + !endif + + !ifdef MUI_FINISHPAGE_SHOWREADME + + !ifndef MUI_FINISHPAGE_RUN + !insertmacro INSTALLOPTIONS_READ $MUI_TEMP1 "ioSpecial.ini" "Field 4" "State" + !else + !insertmacro INSTALLOPTIONS_READ $MUI_TEMP1 "ioSpecial.ini" "Field 5" "State" + !endif + + StrCmp $MUI_TEMP1 "1" 0 mui.finish_noshowreadme + !ifndef MUI_FINISHPAGE_SHOWREADME_FUNCTION + ExecShell "open" "${MUI_FINISHPAGE_SHOWREADME}" + !else + Call "${MUI_FINISHPAGE_SHOWREADME_FUNCTION}" + !endif + + mui.finish_noshowreadme: + + !endif + + FunctionEnd + +!macroend + +!macro MUI_UNFUNCTION_CONFIRMPAGE PRE SHOW LEAVE + + Function "${PRE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE + !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_UNTEXT_CONFIRM_TITLE) $(MUI_UNTEXT_CONFIRM_SUBTITLE) + + FunctionEnd + + Function "${SHOW}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW + + FunctionEnd + + Function "${LEAVE}" + + !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE + + FunctionEnd + +!macroend + +;-------------------------------- +;INSTALL OPTIONS (CUSTOM PAGES) + +!macro MUI_INSTALLOPTIONS_EXTRACT FILE + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_EXTRACT "${FILE}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_EXTRACT_AS FILE FILENAME + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_EXTRACT_AS "${FILE}" "${FILENAME}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_DISPLAY FILE + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_DISPLAY "${FILE}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_DISPLAY_RETURN FILE + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_DISPLAY_RETURN "${FILE}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_INITDIALOG FILE + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_INITDIALOG "${FILE}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_SHOW + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_SHOW + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_SHOW_RETURN + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_SHOW_RETURN + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_READ VAR FILE SECTION KEY + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_READ "${VAR}" "${FILE}" "${SECTION}" "${KEY}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE + + !verbose push + !verbose ${MUI_VERBOSE} + + !insertmacro INSTALLOPTIONS_WRITE "${FILE}" "${SECTION}" "${KEY}" "${VALUE}" + + !verbose pop + +!macroend + +!macro MUI_INSTALLOPTIONS_WRITE_DEFAULTCONVERT FILE SECTION KEY SYMBOL + + ;Converts default strings from language files to InstallOptions format + ;Only for use inside MUI + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifndef "${SYMBOL}_DEFAULTSET" + !insertmacro INSTALLOPTIONS_WRITE "${FILE}" "${SECTION}" "${KEY}" "${${SYMBOL}}" + !else + Push "${${SYMBOL}}" + Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}Nsis2Io + Pop $MUI_TEMP1 + !insertmacro INSTALLOPTIONS_WRITE "${FILE}" "${SECTION}" "${KEY}" $MUI_TEMP1 + !endif + + !verbose pop + +!macroend + +;-------------------------------- +;RESERVE FILES + +!macro MUI_RESERVEFILE_INSTALLOPTIONS + + !verbose push + !verbose ${MUI_VERBOSE} + + ReserveFile /plugin InstallOptions.dll + + !verbose pop + +!macroend + +!macro MUI_RESERVEFILE_LANGDLL + + !verbose push + !verbose ${MUI_VERBOSE} + + ReserveFile /plugin LangDLL.dll + + !verbose pop + +!macroend + +;-------------------------------- +;LANGUAGES + +!macro MUI_LANGUAGE NLFID + + ;Include a language + + !verbose push + !verbose ${MUI_VERBOSE} + + ; MUI_PAGE_UNINSTALLER_PREFIX is undefined by uninstaller pages so we check MUI_UNINSTALLER as well + !ifndef MUI_PAGE_UNINSTALLER_PREFIX && MUI_UNINSTALLER + !ifndef MUI_DISABLE_INSERT_LANGUAGE_AFTER_PAGES_WARNING ; Define this to avoid the warning if you only have custom pages + !warning "MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros" + !endif + !endif + + !insertmacro MUI_INSERT + + LoadLanguageFile "${NSISDIR}\Contrib\Language files\${NLFID}.nlf" + + ;Include language file + !insertmacro LANGFILE_INCLUDE_WITHDEFAULT \ + "${NSISDIR}\Contrib\Language files\${NLFID}.nsh" "${NSISDIR}\Contrib\Language files\English.nsh" + + ;Add language to list of languages for selection dialog + !define /ifndef MUI_LANGDLL_LANGUAGES "" + !define /redef MUI_LANGDLL_LANGUAGES \ + `"${LANGFILE_${NLFID}_LANGDLL}" "${LANG_${NLFID}}" ${MUI_LANGDLL_LANGUAGES}` + !define /ifndef MUI_LANGDLL_LANGUAGES_CP "" + !define /redef MUI_LANGDLL_LANGUAGES_CP \ + `"${LANGFILE_${NLFID}_LANGDLL}" "${LANG_${NLFID}}" "${LANG_${NLFID}_CP}" ${MUI_LANGDLL_LANGUAGES_CP}` + + !verbose pop + +!macroend + +;-------------------------------- +;LANGUAGE SELECTION DIALOG + +!macro MUI_LANGDLL_DISPLAY + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifndef MUI_LANGDLL_LANGUAGES + !warning "MUI_LANGDLL_DISPLAY should only be used after inserting the MUI_LANGUAGE macro(s)" + !endif + + !insertmacro MUI_DEFAULT MUI_LANGDLL_WINDOWTITLE "Installer Language" + !insertmacro MUI_DEFAULT MUI_LANGDLL_INFO "Please select a language." + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + + ReadRegStr $MUI_TEMP1 "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" + StrCmp $MUI_TEMP1 "" mui.langdll_show + StrCpy $LANGUAGE $MUI_TEMP1 + !ifndef MUI_LANGDLL_ALWAYSSHOW + Goto mui.langdll_done + !endif + mui.langdll_show: + + !endif + + !ifdef NSIS_CONFIG_SILENT_SUPPORT + IfSilent mui.langdll_done + !endif + + !ifdef MUI_LANGDLL_ALLLANGUAGES + LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" A ${MUI_LANGDLL_LANGUAGES} "" + !else + LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" AC ${MUI_LANGDLL_LANGUAGES_CP} "" + !endif + + Pop $LANGUAGE + StrCmp $LANGUAGE "cancel" 0 +2 + Abort + + !ifdef NSIS_CONFIG_SILENT_SUPPORT + mui.langdll_done: + !else ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + mui.langdll_done: + !endif + + !verbose pop + +!macroend + +!macro MUI_LANGDLL_SAVELANGUAGE + + !ifndef MUI_PAGE_UNINSTALLER + + IfAbort mui.langdllsavelanguage_abort + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + WriteRegStr "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" $LANGUAGE + !endif + + mui.langdllsavelanguage_abort: + + !endif + +!macroend + +!macro MUI_UNGETLANGUAGE + + !verbose push + !verbose ${MUI_VERBOSE} + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + + ReadRegStr $MUI_TEMP1 "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" + StrCmp $MUI_TEMP1 "" 0 mui.ungetlanguage_setlang + + !endif + + !insertmacro MUI_LANGDLL_DISPLAY + + !ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME + + Goto mui.ungetlanguage_done + + mui.ungetlanguage_setlang: + StrCpy $LANGUAGE $MUI_TEMP1 + + mui.ungetlanguage_done: + + !endif + + !verbose pop + +!macroend + +;-------------------------------- +;END + +!verbose pop +!endif diff --git a/tools/Contrib/Modern UI/ioSpecial.ini b/tools/Contrib/Modern UI/ioSpecial.ini new file mode 100644 index 0000000..c8dfe6e --- /dev/null +++ b/tools/Contrib/Modern UI/ioSpecial.ini @@ -0,0 +1,19 @@ +[Settings] +Rect=1044 +NumFields=3 +[Field 1] +Type=bitmap +Left=0 +Right=109 +Top=0 +Bottom=193 +Flags=RESIZETOFIT +[Field 2] +Type=label +Left=120 +Right=315 +Top=10 +[Field 3] +Type=label +Left=120 +Right=315 \ No newline at end of file diff --git a/tools/Contrib/UIs/default.exe b/tools/Contrib/UIs/default.exe new file mode 100644 index 0000000000000000000000000000000000000000..947c21b2b28451964653f96cf168fb49c9067b58 GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/UIs/modern_headerbmpr.exe b/tools/Contrib/UIs/modern_headerbmpr.exe new file mode 100644 index 0000000000000000000000000000000000000000..fbf85a6f228646c96dd4b541bbe643585199c9ca GIT binary patch literal 4608 zcmeHKZ)h9m8GlZZGR5&9Wr>DIyYAvRkU?Xd$Qdb)ix%rznON!7a%6jLdb#LMzSHEB zb~-r@Y~WStR-qU|(TA>dTTI42?ZZA48b&G3JTg*J2y0lv7D_*iRiW+{NJz>Ed-r?q zq*xfIFvdncf}NkX)fq9ZT2|f>kL#jcvP9DoV=pAdnY^a=b#%1#HcB6TIs1pN z5BY0No$cwYeHH#&+uLg0u(Lf>djj^)d#7q4H!e_n1~&23fXjb8=yUCunKpQhX2-Hb zG%EOM_{LeSiG4y{!e(Kkcd>0AdS?r42r6dk##2uJw7xFTb0IG`a&;&~5j!{rd< zZINh>PohM}yaew3_aYLV{*o$vjy~sr|202U-XHJz!9`#W5z$hgt*MUMhy&op1Yuhw zithWoFbWDF`l0+<+Mz8HC0gpUi*_2Ad#wQ6dY!N>5=Ffh_wn=**n#rUC;d2-Qpo6q zW#OP0rE?sr#(IOh_v6&>U4LTf-jy8z4*o7gN2)93l~7e`PwftY?K<@jTt&R=wH$Ze zl|pgn$#~r9j@(VLQjmo;)Jw6j0dsQ%A(5p_`G+B)tG2WdBPIm;QT60z=GvRP5KtcC zP{7{II{4(~HeiciU>3PMc+vTa%)&X;TI5{Hpb&b-G6S!L;In;q_!urAVDREOp44^f zD%x9+Zpp?!@kF>SIiOKy4u%sh_5(QCa0)%&VWnFswvQ*X@F@-lo8HUtZk|HDWc6rp zqB=AQ-6J@34i+Y0I4r;M9x9&mb|A##$k-F&CTlh~<``h_ z2(!#M1IIYKHA>ndE{SBVvXk5LijhoBRP=h}FO{SBvp!{lg?Axzs@!oO3$Str?SWz8 zrvX+wZUL*{ocmpG#q|~kxI^ds2&{h_oj>!9>mW+)#+z7*rP_j2li9w%!dZ~smKUTm(6cx)8Ht9Urw~tB;_d#vcX5<2*FSi>w6&bL&#H-A zTBQRNDX+YAX}MB5ohd)tQ<65^W6-TocEy@p;w_dpnrpMxq&)=ht9)y zpvR$O&;!su=u^;k=w-y*hc<;lrf`?cKzm#8-(VgRiMF+1@AEmZTnqLFYEA-svITnw zSPa>p7pTKt}OiRn37{^xukT-luBY(n!@a(Mea=u8k$Cpgox^9iuvyL@64!b=A>hrkcx7%PKzlu*Od*rWYMMf3mTR--qJPizU-( zbVe6RvNSJ=enH;kV1BMq;7C#$YhK^C8Y>*MOGRVE(oCCo@qBEg5%3Wy`kd)doRrCQ z!FkTiIl4_FJ{P1<1?5C~M$1`v87az%Y2BGoO-r?>ajji~Vp^ty@EIzDE$U9G2uF1c z-L{E-MvAIsOGQV?Xyz>8HL55DMM>vp_!lfu-t#k__am=@q818@bFu*b1KwF$FF1;! zT3SxGBSeX0YItniJGplWwJdB?E>j?SmG5gJua$Co+zrP*p66K7QEjJG7_l;WK>r8H zU=6&8Xd0S@eh^Zv##OQTzfG>Xt(>VwTSdJ^2~ zkB9$k2LuWrp}X;$u$n7ir`^y0`BjY11lojeoj7L4q8NP8H6pnGDm^eB{9xYuOK?c| zxDglRR!F#aM-per@2MQlI);&-@v3Z)e?^yY%ANSB#Qn(TS1ETU$k!V@Kl}CgErOTN z+g!{0$rtUyUG}tan%pl%_NrU8IdGoO4+$4&8?KqH;X~w;19XADBM7wlAw1Cz8VBFL zK9BkrTt2)GkIhB>_voMyr26{&WRvILpKJT$`Mm#8VF$H6gm1&?U!ykacnIHxKa_uj acCN$YT;)$uU&A$iZ5^Jk{a7Bo9r!l^I?tB? literal 0 HcmV?d00001 diff --git a/tools/Contrib/UIs/modern_nodesc.exe b/tools/Contrib/UIs/modern_nodesc.exe new file mode 100644 index 0000000000000000000000000000000000000000..f460983f376d96794dc0f8dde8ec536676411205 GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/tools/Contrib/UIs/sdbarker_tiny.exe b/tools/Contrib/UIs/sdbarker_tiny.exe new file mode 100644 index 0000000000000000000000000000000000000000..4acb780ee9e733ec33ea7454fd2fad6cbf98f147 GIT binary patch literal 6656 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 KeyColor=0xFF6410), + use KeyColor=-1 if there is no transparent color in your image. +FileName - splash bitmap filename (without the .bmp). The BMP file used will be + this parameter.bmp, and the wave file used (if present) will be this + parameter.wav. + +(If you already have an .onInit function, put that in it) + +Note 1: fadein/fadeout supported only on win2k/winxp systems, all other systems +will show simple splash screen with Delay = Delay + FadeIn + FadeOut. Also, I've +noted my winXP uses no transparent color at 16 bpp, so at bpps lower than 32 +for images with transparent color no fading effect will occur. + +Note 2: the return value of splash is 1 if the user closed the splash +screen early (pop it from the stack) + +-Justin +Converted to a plugin DLL by Amir Szekely (kichik) +Fading and transparency by Nik Medved (brainsucker) \ No newline at end of file diff --git a/tools/Docs/Banner/Readme.txt b/tools/Docs/Banner/Readme.txt new file mode 100644 index 0000000..b114e5e --- /dev/null +++ b/tools/Docs/Banner/Readme.txt @@ -0,0 +1,47 @@ +BANNER PLUG-IN +-------------- + +The Banner plug-in shows a banner with customizable text. It uses the IDD_VERIFY dialog of the UI. + +There are three functions - show, getWindow and destroy. + +Usage +----- + +Banner::show "Text to show" + +[optional] Banner::getWindow + +Banner::destroy + +See Example.nsi for an example. + +Modern UI +--------- + +The Modern UI has two labels on the IDD_VERIFY dialog. To change all the texts, use: + +Banner::show /set 76 "Text 1 (replaces Please wait while Setup is loading...)" "Normal text" + +Custom UI +--------- + +If you have more labels on your IDD_VERIFY dialog, you can use multiple /set parameters to change the texts. + +Example: + +Banner::show /set 76 "bah #1" /set 54 "bah #2" "Normal text" + +The second parameter for /set is the ID of the control. + +Some More Tricks +---------------- + +If you use /set to set the main string (IDC_STR, 1030) you can specify a different string for the window's caption and for the main string. + +If you use an empty string as the main string (Banner::show "") the banner window will not show on the taskbar. + +Credits +------- + +A joint effort of brainsucker and kichik in honor of the messages dropped during the battle \ No newline at end of file diff --git a/tools/Docs/BgImage/BgImage.txt b/tools/Docs/BgImage/BgImage.txt new file mode 100644 index 0000000..7018570 --- /dev/null +++ b/tools/Docs/BgImage/BgImage.txt @@ -0,0 +1,92 @@ +BgImage.DLL - NSIS extension DLL +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Displays an image or a gradient with user defined texts and/or images behind the NSIS window. +Can also play WAVs. + +See Example.nsi for a usage example. + +Usage +~~~~~ + +1) Call SetBg to set the background +2) Call AddText, or AddImage to add texts and images +3) Call Redraw to update the background window +4) Optional - repeat steps 2-3 to add more images + -or- + call Clear and repeat steps 1-3 for a completely new background. +5) Call Destroy when the background is no longer required (.onGUIEnd for example) + +Notes +~~~~~ + +* This plugin requires NSIS 2.42 and above. + +* Do not call SetBg (which creates the window) from a section or a function called by a section. + BgImge must be run from the GUI thread as the installation thread is not built to handle GUI. + +Available functions +~~~~~~~~~~~~~~ + +SetBg [/FILLSCREEN|/TILED] path_to_bitmap +SetBg /GRADIENT R G B R G B + Sets the background and creates the window if necessary + Use /FILLSCREEN to make the image fill the screen + Use /TILED to set a tiled background + Use /GRADIENT to set a gradient background + + If SetReturn on was called returns "success" on the stack + or an error string if there was an error + + Do not use in .onInit! + +AddImage [/TRANSPARENT R G B] path_to_bitmap X Y + Adds an image to the background window at (X,Y) + X and Y can be negative to specify distance from right/bottom + Use /TRANSPARENT to make BgImage draw the image transparently + Define the transparent color using R G B + + If SetReturn on was called returns "success" on the stack + or an error string if there was an error + +AddText text font_handle R G B X Y X Y + Adds text to the background window + Use NSIS's CreateFont to create a font and pass it as font_handle + Use R G B to set the text color + The first X Y is for the top left corner of the text box + The second X Y is for the bottom right corner of the text box + X and Y can be negative to specify distance from right/bottoms + + If SetReturn on was called returns "success" on the stack + or an error string if there was an error + +Clear + Clears all of the current background, images and texts + +Destroy + Destroys the current background window + Destroy calls Clear automatically + +Sound [/WAIT|/LOOP] path_to_wav +Sound /STOP + Plays a wave file + Use /WAIT to wait for the sound to finish playing + Use /LOOP to loop the sound + Use Sound /STOP to stop the loop + +SetReturn on|off + Enable return values from SetBg, AddImage and AddText + Default value is off because all of the possible errors + are either things you should handle when debugging your script + such as "can't load bitmap" or errors you can do nothing about + such as "memory allocation error" + +Credits +~~~~~~~ + +Coded by Amir Szekely, aka KiCHiK + +Ximon Eighteen, aka Sunjammer - Fixed window title bar issues +iceman_k - Text idea and original implementation +Lajos Molnar, aka orfanik - Tile idea and original implementation +Jason Reis - Coding help \ No newline at end of file diff --git a/tools/Docs/Dialer/Dialer.txt b/tools/Docs/Dialer/Dialer.txt new file mode 100644 index 0000000..7e067d7 --- /dev/null +++ b/tools/Docs/Dialer/Dialer.txt @@ -0,0 +1,121 @@ +DIALER PLUGIN +------------- + +Written by Amir Szekely aka KiCHiK +Readme by Joost Verburg + +The Dialer plugin for NSIS provides five functions related to internet connections. + +To download files from the internet, use the NSISdl plugin. + +USAGE +----- + +Example of usage: + +ClearErrors ;Clear the error flag +Dialer::FunctionName ;Call Dialer function +IfErrors "" +3 ;Check for errors + MessageBox MB_OK "Function not available" + Quit +Pop $R0 ;Get the return value from the stack +MessageBox MB_OK $R0 ;Display the return value + +EXAMPLE FUNCTION +---------------- + +; ConnectInternet (uses Dialer plugin) +; Written by Joost Verburg +; +; This function attempts to make a connection to the internet if there is no +; connection available. If you are not sure that a system using the installer +; has an active internet connection, call this function before downloading +; files with NSISdl. +; +; The function requires Internet Explorer 3, but asks to connect manually if +; IE3 is not installed. + +Function ConnectInternet + + Push $R0 + + ClearErrors + Dialer::AttemptConnect + IfErrors noie3 + + Pop $R0 + StrCmp $R0 "online" connected + MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet." + Quit ;Remove to make error not fatal + + noie3: + + ; IE3 not installed + MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now." + + connected: + + Pop $R0 + +FunctionEnd + +FUNCTIONS +--------- + +If a function is not available on the system, the error flag will be set. + +* AttemptConnect + + Attempts to make a connection to the Internet if the system is not connected. + + online - already connected / connection successful + offline - connection failed + + Requires Internet Explorer 3 or later + +* AutodialOnline + + Causes the modem to automatically dial the default Internet connection if the system + is not connected to the internet. If the system is not set up to automatically + connect, it will prompt the user. + + Return values: + + online - already connected / connection successful + offline - connection failed + + Requires Internet Explorer 4 or later + +* AutodialUnattended + + Causes the modem to automatically dial the default Internet connection if the system + is not connected to the internet. The user will not be prompted. + + Return values: + + online - already connected / connection successful + offline - connection failed + + Requires Internet Explorer 4 or later + +* AutodialHangup + + Disconnects an automatic dial-up connection. + + Return values: + + success - disconnection successful + failure - disconnection failed + + Requires Internet Explorer 4 or later + +* GetConnectedState + + Checks whether the system is connected to the internet. + + Return values: + + online - system is online + offline - system is offline + + Requires Internet Explorer 4 or later \ No newline at end of file diff --git a/tools/Docs/InstallOptions/Changelog.txt b/tools/Docs/InstallOptions/Changelog.txt new file mode 100644 index 0000000..27e6952 --- /dev/null +++ b/tools/Docs/InstallOptions/Changelog.txt @@ -0,0 +1,144 @@ +DLL version 2.47 (4/27/2007) +* Line breaks support in Link control +* Added HLine and VLine controls + +DLL version 2.46 (3/31/2007) +* Use installer's name for message boxes + +DLL version 2.45 (1/23/2007) +* Added FOCUS flag for setting focus to a control other than the first + +DLL version 2.44 (10/11/2005) +* Added HWND and HWND2 entries to the INI file to avoid messy calculations of the correct control id + +DLL version 2.43 (10/4/2005) +* Fixed alteration of the working directory by FileRequest +* Added WS_EX_LEFTSCROLLBAR in RTL mode + +DLL version 2.42 (1/21/2005) +* Added TRANSPARENT flag for BITMAP fields (funded by Chris Morgan) + +DLL version 2.41 (8/5/2004) +* Bitmaps are now automatically centered +* Fixed a bug which prevented enabling the next button from the leave function of InstallOptions pages +* Fixed a rare freeze + +DLL version 2.4 (1/4/2004) +* Initial focus is set in "initDialog" making it possible to override it from NSIS prior to calling "show" +* When initial focus is to a Text field InstallOptions now follows standard Windows behaviour by having the text selected +* Label and other static fields no longer have State= written to the INI file when leaving the dialog +* NOTIFY flag can now be used with Link fields (State should be omitted in this case) +* Likewise, State can now be used with Button fields (behaves the same as with Link fields) +* NOTIFY flag can also now be used with ListBox and DropList fields to have NSIS notified when the selection changes +* Meaning of RIGHT flag is now reversed in right-to-left language mode +* HSCROLL and VSCROLL flags are no longer restricted to Text fields +* Various Link field fixes + +DLL version 2.3 (12/4/2003) +* Added new control type "Button" +* Added new flag "NOTIFY" +* Added new flag "NOWORDWRAP" for multi-line text boxes +* Reduced size down to 12K +* Better RTL support + +DLL version 2.2 (6/10/2003) +* Added New control type LINK +* \r\n converts to newline in Multiline edit box +* Support for multiline edit box +* Better tab order in DirRequest and FileRequest +* Added READONLY option to text box +* Minor fixes + +DLL version 2.1 (3/15/2003) +* \r\n converts to newline in both label Text and ValidateText +* New browse dialog style (modern) +* Word wrapping for check boxes and radio buttons +* No ugly border for edit fields under XP +* Scroll bar for list boxes +* Works with SetStaticBkColor +* DISABLED dir and file request fields now disable the browse button too +* No more STATE value for labels +* Minor fixes + +DLL version 2.0 (1/4/2003) +* Supports custom font and DPI settings (by Joost Verburg) +* INI files should contain dialog units now, no pixels (by Joost Verburg) +* RESIZETOFIT flag for Bitmap control (by Amir Szekely) +* New documentation (by Joost Verburg) +* New GROUP/NOTABSTOP/DISABLED flags + +DLL version 1.7 beta (11/2/2002) +* Added initDialog and show DLL functions + +DLL version 1.6 beta (9/30/2002) +* CancelConfirmIcon becomes CancelConfirmFlags and can now take the other common MessageBox flags + +DLL version 1.5 beta (9/26/2002) +* Made close [x] button behave like Cancel (thanks brainsucker) + +DLL version 1.4 beta (9/4/2002) +* Added Icon and Bitmap controls (by Amir Szekely) + +DLL version 1.3 beta (8/15/2002) +* Added CancelShow (by ORTIM) +* Added pixel transformation for widgets (by ORTIM) + +DLL version 1.2 beta (7/31/2002) +* Added CancelEnabled (by ORTIM) +* Added CancelConfirmCaption and CancelConfirmIcon (by Amir Szekely) + +DLL version 1.1 beta (7/22/2002) +* Font is now taken from the main NSIS window (by Amir Szekely) + +DLL version 1.0 beta (12/16/2001) +* Moved to DLL, no longer need parentwnd ini writing +* Tons of changes - no longer fully compatible (see source for a big list) +* removed support for silent installers (it seems the old version would bring up it's own dialog) + +version 1.4 (11/18/2001) +* Added Listbox controls. +* Added MULTISELECT flag. +* Made the HWND list for the parent window controls dynamically allocated. This prevents a crash if NSIS ever gets more than 150 controls on it's main window. +* The TEXT property of DirRequest control can be used to specify an initial directory. The current directory is automatically selected when clicking the browse button of the DirRequest control. +* Added ROOT property to DirRequest which can be used to set the root directory (mostly due to felfert) +* Edit controls will now auto scroll (thanks felfert) +* Fixed a problem where the window wouldn't draw properly on some systems (thanks felfert) + +version 1.3 (11/03/2001) +* Got rid of the call to RedrawWindow() because it's no longer needed with the WS_CLIPCHILDREN flag for NSIS. +* Removed a few hardcoded limits of buffer sizes +* Added Checkbox and RadioButton controls +* Added RIGHT and CHECKED flags + +version 1.2.2 (10/30/2001) +* Additional size reductions. Further reduced the size down to 8k. +* The text parameter to a combobox can now be used to specify the initial value +* Changed from InvalidateRect() to RedrawWindow() to force a redraw after a browse dialog +* On startup, set the flags of the NSIS window to include WS_CLIPCHILDREN. Otherwise, our controls don't get drawn right. + +version 1.2.1 (10/28/2001) +* Bug fix. ControlID for the caption and the OK button were reused by the first two controls. (Thanks Schultz) + +version 1.2j (10/28/2001) +* 8.5kb from 44kb. heh. (by Justin Frankel) + +version 1.2 (10/28/2001) +* Still 44k +* Added the "FileRequest" and "DirRequest" control types (thanks Schultz) +* Added "MinLen", "MaxLen", and "ValidateText" properties to fields +* Added "Flags" as a way to specify additional parameters for controls +* Few more changes to the documentation +* Cleaned the code in a few places...still trying to make it smaller + +version 1.1 (10/27/2001) +* Added the "Title" option (thanks Alex) +* Moved the OK button so it is in the same location as the buttons on the main NSIS window (thanks Alex) +* Pressing "ENTER" will now automatically select the OK button (thanks Alex) +* Slightly improved the documentation + +version 1.01 (10/25/2001) +* Fixed the SetFocus loop so it exits after the first control like it was supposed to +* Added the license to the documentation + +version 1.0 (10/25/2001) +* Barely qualifies as a distribution diff --git a/tools/Docs/InstallOptions/Readme.html b/tools/Docs/InstallOptions/Readme.html new file mode 100644 index 0000000..bfd0432 --- /dev/null +++ b/tools/Docs/InstallOptions/Readme.html @@ -0,0 +1,909 @@ + + + + InstallOptions 2 + + + + + + + +
+

+ InstallOptions 2

+
+

+ The InstallOptions plug-in is deprecated. For new scripts, it is recommended to + use the new nsDialogs plug-in instead.

+
+
+

+ Introduction

+
+

+ InstallOptions is an NSIS plugin which allows you to create custom pages for NSIS + installers, to prompt the user for extra information.

+

+ The dialogs created by InstallOptions are based on INI files which define the controls + on the dialog and their properties. These INI files can be modified from the script + to adjust the dialogs at runtime.

+

+ The format of INI files is described in a + Wikipedia article.

+
+

+ INI file structure

+
+

+ The INI file has one required section. This section includes the number of controls + to be created as well as general window attributes. The INI file also includes a + variable number of Field sections which are used to create the controls to be displayed.

+

+ The required section is named "Settings". It can contain the + following values:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ NumFields + (required) + The number of control elements to be displayed on the dialog window.
+ Title + (optional) + If specified, gives the text to set the titlebar to. Otherwise, the titlebar text + is not changed.
+ CancelEnabled + (optional) + If specified, overrides NSIS settings and enables or disables the cancel button. + If set to 1, the cancel button will be enabled. If set to 0, the cancel button will + be disabled.
+ CancelShow + (optional) + If specified, overrides NSIS settings and shows or hides the cancel button If set + to 1, the cancel button will be shown. If set to 0, the cancel button will be hidden.
+ BackEnabled + (optional) + If specified, overrides NSIS settings and enables or disables the back button. If + set to 1, the back button will be enabled. If set to 0, the back button will be + disabled.
+ CancelButtonText + (optional) + Overrides the text for the cancel button. If not specified, the cancel button text + will not be changed.
+ NextButtonText + (optional) + Overrides the text for the next button. If not specified, the next button text will + not be changed.
+ BackButtonText + (optional) + Overrides the text for the back button. If not specified, the back button text will + not be changed.
+ Rect + (optional) + Overrides the default rect ID to run over. This will make IO resize itself according + to a different rect than NSIS's dialogs rect.
+ RTL + (optional) + If 1 is specified the dialog will be mirrored and all texts will be aligned to the + right. The INSTALLOPTIONS_EXTRACT macros automatically set this field to the right + value for the current installer language as given by the NSIS string $(^RTL).
+ State + (output) + This is not something you have to supply yourself but is set by InstallOptions, + before calling your custom page validation function, to the field number of the + custom Button control (or other control having the Notify flag) the user pressed, + if any.
+

+ Each field section has the heading "Field #" where # must be sequential + numbers from 1 to NumFields. Each Field section can contain the following values:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Type + (required) + Type of control to be created. Valid values are "Label", "Text", + "Password", "Combobox", "DropList", + "Listbox", "CheckBox", "RadioButton", + "FileRequest", "DirRequest" "Icon", + "Bitmap", "GroupBox", "HLine", + "VLine", "Link" or "Button".
+
+ A "Label" is used to display static text. (i.e. a caption for + a textbox)
+ A "Text" and "Password" accept text input + from the user. "Password" masks the input with * characters.
+ A "Combobox" allows the user to type text not in the popup list, + a "Droplist" only allows selection of items in the list.
+ A "Listbox" shows multiple items and can optionally allow the + user to select more than one item.
+ A "CheckBox" control displays a check box with label.
+ A "RadioButton" control displays a radio button with label.
+ A "FileRequest" control displays a textbox and a browse button. + Clicking the browse button will display a file requester where the user can browse + for a file.
+ A "DirRequest" control displays a textbox and a browse button. + Clicking the browse button will display a directory requester where the user can + browse for a directory.
+ An "Icon" control displays an icon. Use no Text to use the installer + icon.
+ A "Bitmap" control displays a bitmap.
+ A "GroupBox" control displays a frame to group controls.
+ A "HLine" control displays a horizontal line to separate controls.
+ A "VLine" control displays a vertical line to separate controls.
+ A "Link" control displays a static hot text. When the user clicks + the control the contents of State (e.g. http://...) will be executed + using ShellExecute. Alternatively State can be omitted and the + NOTIFY flag used to have your NSIS script called. See the "NOTIFY" + flag below for more information.
+ A "Button" control displays a push button that can be used in + the same way as the "Link" control above.
+ Text + (optional) + Specifies the caption of a label, checkbox, or radio button control. For DirRequest + control this specifies the title of the browse dialog. For icon and bitmaps control + this specifies the path to the image.
+
+ Note: For labels, \r\n will be converted to a newline. To use a + back-slash in your text you have to escape it using another back-slash - \\. Described + below are NSIS functions for converting text to/from this + format.
+ State + (optional) + Specifies the state of the control. This is updated when the user closes the window, + so you can read from it from NSIS. For edit texts and dir and file request boxes, + this is the string that is specified. For radio button and check boxes, this can + be '0' or '1' (for unchecked or checked). For list boxes, combo boxes and drop lists + this is the selected items separated by pipes ('|'). For Links and Buttons this + can specify something to be executed or opened (using ShellExecute).
+
+ Note: For Text fields with the MULTILINE flag, \r\n will be converted + to a newline. To use a back-slash in your text you have to escape it using another + back-slash - \\. Described below are NSIS functions for + converting text to/from this format.
+ ListItems + (optional) + A list of items to display in a combobox, droplist, or listbox.
+ This is a single line of text with each item separated by a pipe character '|'
+ MaxLen + (optional) + Causes validation on the selected control to limit the maximum length of text.
+ If the user specifies more text than this, a message box will appear when they click + "OK" and the dialog will not be dismissed.
+ You should not use this on a "combobox" since the user can not + control what is selected.
+ This should be set to a maximum of 260 for "FileRequest" and + "DirRequest" controls.
+ Ignored on "Label" controls.
+ MinLen + (optional) + Causes validation on the selected control to force the user to enter a minimum amount + of text.
+ If the user specifies less text than this, a message box will appear when they click + "OK" and the dialog will not be dismissed.
+ Unlike MaxLen, this is useful for "Combobox" controls. By setting + this to a value of "1" the program will force the user to select an item.
+ Ignored on "Label" controls.
+ ValidateText + (optional) + If the field fails the test for "MinLen" or "MaxLen", + a messagebox will be displayed with this text.
+
+ Note: \r\n will be converted to a newline, two back-slashes will + be converted to one - \\. Described below are NSIS functions + for converting text to/from this format.
+ Left
+ Right
+ Top
+ Bottom
+ (required) + The position on the dialog where this control appears. All sizes should be set in + dialog units. To get the right dimensions for your controls, design your dialog + using a resource editor and copy the dimensions to the INI file.
+
+ Note: You can specify negative coordinates to specify the distance + from the right or bottom edge.
+
+ Note (2): For combobox or droplist, the "bottom" + value is not used in the same way.
+ In this case, the bottom value is the maximum size of the window when the pop-up + list is being displayed. All other times, the combobox is automatically sized to + be one element tall. If you have trouble where you can not see the combobox drop-down, + then check the bottom value and ensure it is large enough. A rough guide for the + height required is the number of items in the list multiplied by 8, plus 20.
+
+ Note (3): FileRequest and DirRequest controls will allocate 15 + dialog units to the browse button. Make this control wide enough the contents of + the textbox can be seen.
+ Filter + (optional) + Specifies the filter to be used in the "FileRequest" control.
+ This is constructed by putting pairs of entries together, each item separated by + a | character.
+ The first value in each pair is the text to display for the filter.
+ The second value is the pattern to use to match files.
+ For example, you might specify:
+ Filter=Text Files|*.txt|Programs|*.exe;*.com|All Files|*.*
+ If not specified, then the filter defaults to All Files|*.*
+
+ Note: you should not put any extra spaces around the | characters.
+ Root + (optional) + Used by DirRequest controls to specify the root directory of the + search. By default, this allows the user to browse any directory on the computer. + This will limit the search to a particular directory on the system.
+ Flags + (optional) + This specifies additional flags for the display of different controls. Each value + should be separated by a | character, and you should be careful not to put any spaces + around the | character.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Value + Meaning
+ REQ_SAVE + This causes "FileRequest" controls to display a Save As dialog. + If not specified, an Open dialog is used.
+ FILE_MUST_EXIST + Used by "FileRequest" to determine if the selected file must + exist.
+ This only applies if an "Open" dialog is being displayed.
+ This currently does not force the file to exist other than through the browse button.
+ FILE_EXPLORER + Used by "FileRequest", enables new file request look (recommended)
+ FILE_HIDEREADONLY + Used by "FileRequest", hides "open read only" checkbox + in open dialog.
+ WARN_IF_EXIST + Used by "FileRequest" to display a warning message if the selected + file already exists.
+ The warning message is only displayed for files selected with the browse button.
+ PATH_MUST_EXIST + Used by "FileRequest" to force the path to exist. Prevents the + user from typing a non-existent path into the browse dialog window.
+ This only validates path's selected with the browse button.
+ PROMPT_CREATE + Used by "FileRequest" to display a warning if the selected file + does not exist. However, it still allows the user to select the file.
+ This only displays the warning for files selected with the browse button.
+ Doesn't work along with REQ_SAVE.
+ RIGHT + Used by "Checkbox" and "Radiobutton" controls + to specify you want the checkbox to the right of the text instead of the left as + is the default.
+ MULTISELECT + Used by "Listbox" controls. Turns string selection on or off + each time the user clicks or double-clicks a string in the list box. The user can + select any number of strings. If this flag and EXTENDEDSELCT are not specified, + only one item can be selected from the list.
+ EXTENDEDSELCT + Used by "Listbox" controls. Allows multiple items to be selected + by using the SHIFT key and the mouse or special key combinations. If this flag and + MULTISELECT are not specified, only one item can be selected from the list.
+ RESIZETOFIT + This causes "Bitmap" controls to resize the image to the size + of the control. Also useful to support custom DPI settings. Without this, the image + will be centered within the specified area.
+ TRANSPARENT + Used by "Bitmap" controls. Hides every pixel with the same color + as of the top left pixel. This allows to see-through to controls behind it. This + flag doesn't work well with a combination of the RESIZETOFIT flag and bitmaps with + more than 256 colors.
+ GROUP + Add this flag to the first control of a group of controls to group them. Grouping + controls allows you to create multiple groups of radio button and makes keyboard + navigation using arrow keys easier.
+ FOCUS + Sets focus on the specified control, instead of the first focusable control. If + more than one field is specified with this flag, only the first one will receive + focus.
+ NOTABSTOP + Do not stop on the control when the user pressed the Tab key. Add NOTABSTOP to all + controls of a group except the first one to allow navigation between groups with + the Tab key.
+ DISABLED + Causes a control to be disabled.
+ ONLY_NUMBERS + Used by "Text" controls. Forces the user to enter only numbers + into the edit box.
+ MULTILINE + Used by "Text" controls. Causes the control to accept multiple-lines.
+ WANTRETURN + Used by "Text" controls with multiple-line. Specifies that a + carriage return be inserted when the user presses the ENTER key while entering text + into the text box.
+ NOWORDWRAP + Used by "Text" controls with multiple-line. Disables the word-wrap + that occurs when long lines are entered. Long lines instead scroll off to the side. + Specifying the HSCROLL flag also has this effect.
+ HSCROLL + Show a horizontal scrollbar. When used by "Text" controls with + multiple-lines this also disables word-wrap.
+ VSCROLL + Show a vertical scrollbar.
+ READONLY + Used by "Text" controls. Prevents the user from entering or editing + text in the edit control, but allow the user to select and copy the text.
+ NOTIFY + Used by "Button", "Link", "CheckBox", + "RadioButton", "ListBox" and "DropList" + controls. Causes InstallOptions to call your NSIS custom page validation/leave function + whenever the control's selection changes. Your validation/leave function can read + the "State" value from the "Settings" section + to determine which control caused the notification, if any, and perform some appropriate + action followed by an Abort instruction (to tell NSIS to return to the page). The + Examples\InstallOptions folder contains an example script showing how this might + be used.
+
+ TxtColor + (optional) + Used by Link controls to specify the foreground color of the text. + Format: 0xBBGGRR (hexadecimal).
+ HWND
+ HWND2
+ (output) + After initDialog returns, this will contain the HWND of the control created by this + field. It can be used instead of FindWindow and GetDlgItem. HWND2 contains the HWND + of an additional control, such as the browse button.
+
+

+ Header file

+
+

+ The InstallOptions header files provides macros and functions to easily create custom + dialogs. You can include it on the top of your script as follows: +

+!include InstallOptions.nsh
+
+
+

+ Creating dialogs

+
+

+ Extracting the INI file

+
+

+ First, you have to extract your InstallOptions INI files in the .onInit function + (or un.onInit for the uninstaller) using the INSTALLOPTIONS_EXTRACT macro. The files + will be extracted to a temporary folder (the NSIS plug-ins folder) that is automatically + created.

+
+Function .onInit
+  !insertmacro INSTALLOPTIONS_EXTRACT "ioFile.ini"
+FunctionEnd
+
+

+ If the INI file is located in another directory, use INSTALLOPTIONS_EXTRACT_AS. + The second parameter is the filename in the temporary folder, which is the filename + that should be used as input for the other macros.

+
+Function .onInit
+  !insertmacro INSTALLOPTIONS_EXTRACT_AS "..\ioFile.ini" "ioFile.ini"
+FunctionEnd
+
+
+

+ Displaying the dialog

+
+

+ You can call InstallOptions in a page function defined with the Page or UninstPage + command. Check the NSIS documentation (Scripting Reference -> Pages) for information + about the page system.

+
+Page custom CustomPageFunction
+

+ To display the dialog, use the INSTALLOPTIONS_DISPLAY macro:

+Function CustomPageFunction ;Function name defined with Page command
+  !insertmacro INSTALLOPTIONS_DISPLAY "ioFile.ini"
+FunctionEnd
+
+
+
+

+ User input

+
+

+ To get the input of the user, read the State value of a Field using the INSTALLOPTIONS_READ + macro:

+
+!insertmacro INSTALLOPTIONS_READ $VAR "ioFile.ini" "Field #" "Name"
+
+
+

+ Writing to INI files

+
+

+ The INSTALLOPTIONS_WRITE macro allows you to write values to the INI file to change + texts or control settings at runtime: +

+!insertmacro INSTALLOPTIONS_WRITE "ioFile.ini" "Field #" "Name" "Value"
+
+
+

+ Escaped values

+
+

+ Some InstallOptions values are escaped (in a similar manner to "C" strings) + to allow characters to be used that are not normally valid in INI file values. The + affected values are:

+
    +
  • The ValidateText field
  • +
  • The Text value of Label fields
  • +
  • The State value of Text fields that have the MULTILINE flag
  • +
+

+ The escape character is the back-slash character ("\") and the available + escape sequences are:

+ + + + + + + + + + + + + + + + + +
+ "\\" + Back-slash
+ "\r" + Carriage return (ASCII 13)
+ "\n" + Line feed (ASCII 10)
+ "\t" + Tab (ASCII 9)
+

+ The INSTALLOPTIONS_READ_CONVERT and INSTALLOPTIONS_WRITE_CONVERT macros automatically + convert these characters in installer code. In uninstaller code, use INSTALLOPTIONS_READ_UNCONVERT + and INSTALLOPTIONS_WRITE_UNCONVERT.

+

+ To use these macros in your script, the conversion functions need to be included:

+
+;For INSTALLOPTIONS_READ_CONVERT
+  !insertmacro INSTALLOPTIONS_FUNCTION_READ_CONVERT
+;For INSTALLOPTIONS_WRITE_CONVERT
+  !insertmacro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT
+;For INSTALLOPTIONS_READ_UNCONVERT
+  !insertmacro INSTALLOPTIONS_UNFUNCTION_READ_CONVERT
+;For INSTALLOPTIONS_WRITE_UNCONVERT
+  !insertmacro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT
+
+
+

+ Input validation

+
+

+ To validate the user input (for example, to check whether the user has filled in + a textbox) use the leave function of the Page command and Abort when the validation + has failed:

+
+Function ValidateCustom
+
+  !insertmacro INSTALLOPTIONS_READ $R0 "test.ini" "Field 1" "State"
+  StrCmp $R0 "" 0 +3
+    MessageBox MB_ICONEXCLAMATION|MB_OK "Please enter your name."
+    Abort
+
+FunctionEnd
+
+
+

+ Return value

+
+ After a dialog is created (using display or show), a return value is available:

+
    +
  • success - The user has pressed the Next button
  • +
  • back - The user has pressed the Back button
  • +
  • cancel - The user has pressed the Cancel button
  • +
  • error - An error has occurred, the dialog cannot be displayed.
  • +
+

+ You only have to check this value if you need something really special, such as + doing something when the user pressed the Back button.

+

+ If you need the return value, use the INSTALLOPTIONS_DISPLAY_RETURN or INSTALLOPTIONS_SHOW_RETURN + macro. The return value will be added to the stack, so you can use the Pop command + to get it.

+
+

+ Reserve files

+
+

+ When using solid compression, it's important that files which are being extracted + in user interface functions are located before other files in the data block. Otherwise + there may be a delay before a page can be displayed.

+

+ To ensure that this is the case, add ReserveFile commands for InstallOptions and + the INI files before all sections and functions:

+
+ReserveFile "test.ini"
+ReserveFile /plugin InstallOptions.dll
+
+
+

+ Fonts and colors

+
+

+ To customize fonts or colors on InstallOptions dialogs, the INSTALLOPTIONS_INITDIALOG + and INSTALLOPTIONS_SHOW macro can be used.

+

+ INSTALLOPTIONS_INITDIALOG creates the dialog in memory, but does not show it. After + inserting this macro, you can set the fonts and colors, and then insert INSTALLOPTIONS_SHOW + to show the dialog.

+

+ The INSTALLOPTIONS_INITDIALOG macro also pushes the HWND of the custom dialog to + the stack. Control HWND's are available for each control in the HWND entry of the + corresponding field in the INI file.

+

+ Example of using a custom font:

+
+Var HWND
+Var DLGITEM
+Var FONT
+
+Function FunctionName ;FunctionName defined with Page command
+
+  !insertmacro INSTALLOPTIONS_INITDIALOG "ioFile.ini"
+  Pop $HWND ;HWND of dialog
+    
+  !insertmacro INSTALLOPTIONS_READ $DLGITEM "ioFile.ini" "Field 1" "HWND"
+    
+  ;$DLGITEM contains the HWND of the first field
+  CreateFont $FONT "Tahoma" 10 700 
+  SendMessage $DLGITEM ${WM_SETFONT} $FONT 0
+        
+  !insertmacro INSTALLOPTIONS_SHOW
+
+FunctionEnd
+
+
+

+ Credits

+
+

+ Original version by Michael Bishop
+ DLL version by Nullsoft, Inc.
+ DLL version 2 by Amir Szekely, ORTIM, Joost Verburg
+ New documentation by Joost Verburg

+
+

+ License

+
+
+Original version Copyright © 2001 Michael Bishop
+DLL version 1 Copyright © 2001-2002 Nullsoft, Inc., ORTIM
+DLL version 2 Copyright © 2003-2023 Amir Szekely, Joost Verburg, Dave Laundon
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute
+it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented;
+   you must not claim that you wrote the original software.
+   If you use this software in a product, an acknowledgment in the
+   product documentation would be appreciated but is not required.
+2. Altered versions must be plainly marked as such,
+   and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any distribution.
+
+
+
+ + diff --git a/tools/Docs/Math/Math.txt b/tools/Docs/Math/Math.txt new file mode 100644 index 0000000..f351f75 --- /dev/null +++ b/tools/Docs/Math/Math.txt @@ -0,0 +1,197 @@ +Math::Script NSIS plugin. + +C-like style scripting (operators at least). +Tip1: plugin watches the case of the letters. +Tip2: plugin makes almost no error checks. So YOU should check your script +twice before run :) + +New HOW TO USE: run the MathTest.Exe, and try yourself. After spending +some minutes your should be able to write your script by yourself. +To include it to your NSIS script just insert that: + Math::Script "YourScript1" + Math::Script "YourScript2" + Math::Script "YourScriptFinal" + +How to use it? Simple: + Strcpy $0 "Brainsucker" + Math::Script "a = 'Math'; B = 'Script'; r0 += ' wants to use ' + a + '::' + b +'!'" + DetailPrint "$0" +That string will fill r0 with some stuff. + +Here are some other samples: + 10! (factorial, r0 will contain '10! = 362880'): + r0 = '10! = ' + (1*2*3*4*5*6*7*8*9) + the same: + a = b = 1; #{++a <= 10, b = b*a}; r0 = (a-1) + '! = ' + b + Some floating point: + Strcpy $R0 "1e1" + Math::Script "pi = 3.14159; R1 = 2*pi*R0; r0 = 'Length of circle with radius ' + R0 + ' is equal to ' + R1 + '.'" + Detailprint "$0" + +Ok. Variables. +NSIS: r0-r9 -> $0-$9. R0-R9 -> $R0-$R9. +Also CL ($CMDLINE), ID ($INSTDIR), OD ($OUTDIR), LG ($LANG), ED ($EXEDIR). +User definable: name starting from character, up to 28 letters long. + +Stacks. Two stacks are supported: NSIS stack and plugin's own stack. I see no +reasons for using plugin stack, but if you will, remember - the plugin stores +variables used at function to that stack before function execution, and restores +after execution. Even less I recommend you to use NSIS stack. You should use it +only for input/output. +How to use? It's variable styled. Plugins stack is associated with S variable, +and NSIS stack associated with NS variable. To push to stack just do "S=0" or +"NS=0", to pop from stack "a=S" or "b=NS". Combined operations supported too: +"S += 1.5" will increment value at the top of stack by 1.5. + +Supported types: int (in fact that is __int64), float (double in fact), +string. +Int: just numbers, may include sign. +Float: -123.456, 123.456e-78, 123e-45 +String: something in quotes ("", '', ``). + +There is also an array type. It is actually a reference type, so if b is array +and you will perform "a=b", the a and b will reference a single array. +To create a copy of array, use ca func: dest = ca(source). Btw - you couldn't +control dimensions of arrays - they are autosized. +To declare array: +a = {}; +To declare array and initialize some items with values: +{"Hello!", "Use", "mixed types", 1.01e23, "like that" ,1234}; +To access array: +a[index] = "Cool"; + +Also [] operation could be used to strings. str[x] gives you a single char with +index x (zero-based) as new string. str[-x] - the same, but x counts from the +string end (so the last char is -1). str[x,y] gives you characters in range x-y +(inclusive), both x and y could be <0 - in this case they counted from the end +of the string. + +The function could be useful - is conversion of arrays to strings and back. +Example: +a = a("Hello"); str = s(a); +After running such script array a will contain 6 integers (chars and last zero +- end of string), and str will contain your string back. + +Operators (some binary, some unary): +>>= <<= -= += /= *= |= &= ^= %= -- ++ >> << && || <= =< >= => != == += + - * / % < > & | ^ ~ ! +Only some are applicable to float (logic & arithmetic) and string (+ and logic) +of course. +Additional case: reference/de-reference operators (& and *). & will +give you the reference to argument which should be a variable (NSIS, user, array +item, stack), and * will convert it back to original variable. For example +(a=&b; *a=10) will set b to 10. Expression (*&a) is equal to simple (a). + +Script is set of expressions (mathematical in general) delimited with ';'. +Processing is mathematically right (2+2*2 will give 6), operations are performed +in a C like order (precedence). + +Flow control: + if-then-else like: #[if-expression, then-expr, else-expr] + example: + #[a==0, b=1; c=2, b *= (--c); c/=10] + C eq: + if (a==0) { b=1; c=2;} else { b*=(c++);c-=10; } + while (expr) do; like #{expr, do} + example: + #{(c<1.1e25)&&(b < 10), b++; c*=1.23} + C eq: + while ((c<1.1e25)&&(b<10)) { b++; c*=1.23; } + +WATCH OUT! Comma (,) separates if-expr, then-expr, and else-expr from each +other. All sub-expressions separated by (;) are the part of one expression, +and the result of the last one of these sub-exprs gives you the result of +expression. + +All the stuff (like variables and functions) will be saved between calls. + +Functions: + type conversions: + l(string) returns the length of string or array argument + s(source) converts source to string type + i(source) converts source to int type + f(source) converts source to float type + c(source) if source is string, returns int value of first + char, if source is int, returns string which consists + of a single char (source) (+0 terminator). + a(source) converts source to array (only string supported) + ff(float, format) converts float to string, with format + options. + options = precision + flags. + Precision shows how many digits after decimal point + will be shown. Flags: + 16 (or 0x10) - No Exponential View + (number will be shown as 123.123) + 32 (or 0x20) - Only exponential view + (number will be shown as 123.12e123) + 64 (or 0x40) - use 'E' character instead of 'e' + By default the plugin decides itself how to show your + number. + + math (description of all these functions is available at MSDN, use the + second given name for search): + sin(x), sin Sine of argument + cos(x), cos Cosine of argument + cel(x), ceil Ceil of argument (no fract. part) + csh(x), cosh Hyperbolic Cosine of Argument + exp(x), exp Exponential + abs(x), abs Absolute value (warning: float) + flr(x), floor Floor of argument (no fract. part) + asn(x), asin ArcSine of argument + acs(x), acos ArcCosine of argument + atn(x), atan ArcTangent of argument + ln(x), log Exponential Logarithm + log(x), log10 Decimal logarithm + snh(x), sinh Hyperbolic Sine of Argument + sqt(x), sqrt Square root of argument + tan(x), tan Tangent of argument + tnh(x), tanh Hyperbolic tangent of argument + + functions taking two arguments + at2(x, y) atan2 Arctangent of the value (y/x) + pow(x, y) pow power, x^y + fmd(x, y) fmod floating point remainder + fex(x, o) frexp Gets the mantissa (result = r) + and exponent (o) of floating-point + number (x): x = r*(2^o) + mdf(x, o) modf Splits a floating-point value into + fractional and integer parts. + +User-defined functions. +It's very simple. Example: + test(a,b) (a+b); +After that test(1,2) will give you 3. + test2(a,b) (a=a+b; b *= a); +The result of function is always the result of last expression. +As said before it better not to use stack (S) in between function calls. +It will be better to develop variable-safe functions, i.e. functions which will +not corrupt variables. For this you should either push/pop them to stack, or +declare as additional arguments, which will never be used. Example: + test3(a,b,c) (c=10; #{--c > 0, a=sqrt(a*b)}; a) +No matter how many arguments will be passed to function, the values of all three +vars (a,b,c) will be saved. +Such variable-safe functions could be recursive: + Math::Script 'rec(a) (#[a > 0, rec(a-1), 0]+a);' + Math::Script 'R1 = rec(10)' +will set R1 to right result 55. +Sometimes functions will need to return more than one value, in this case you +could declare argument as referent (b at example): + test4(a, &b) (*b = a*a; a*a*a) +In this case test4 will return a^3, and if we will call it like that test4(a,c), +it will place a^2 to c. BUT! Note: you should use de-referencer (*) with variable, +at example *b. CAUTION: never use the same variable as function internal reference +variable and external argument variable (for example test4(a,b)). It will surely +fail. Also: if you declared argument as reference - you should never supply +a constant expression to it. It could be either array item (array[1]), NSIS +register R0, any of the user variables (beside the variable with the same name:), +but never the constant. + +Another may-be-useful possibility is to redeclare the function (the usual +declaration at the time when function already defined will simply call that +function). For such task you could use "#name", like "func()(1); #func()(2);". +But beware, function declaration occurs at time of parsing, so it's not possible +to perform flow controlled declaration. +SUCH IS NOT POSSIBLE: "#[a<0, #func()(1), #func()(2)]" +IT WILL SIMPLY DEFINE #func as (2), as the latest variant. + +(c) Nik Medved (brainsucker) \ No newline at end of file diff --git a/tools/Docs/Modern UI 2/License.txt b/tools/Docs/Modern UI 2/License.txt new file mode 100644 index 0000000..3d66aa1 --- /dev/null +++ b/tools/Docs/Modern UI 2/License.txt @@ -0,0 +1,10 @@ +Copyright © 2002-2023 Joost Verburg + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any distribution. \ No newline at end of file diff --git a/tools/Docs/Modern UI 2/Readme.html b/tools/Docs/Modern UI 2/Readme.html new file mode 100644 index 0000000..020148f --- /dev/null +++ b/tools/Docs/Modern UI 2/Readme.html @@ -0,0 +1,1162 @@ + + + + NSIS Modern User Interface - Documentation + + + + + + + + + + + + +
+ +

+ [Expand all]   [Collapse + all]

+
+

+ Introduction

+
+

+ The Modern UI provides a user interface for NSIS installers with a modern wizard + style, similar to the wizards of recent Windows versions. It is based on the basic + user interface that is provided by the NSIS compiler itself and extends it with + more interface features and pages.

+

+ All standard NSIS pages (such as the pages to select components and the installation + folder) are supported as well as a number of additional pages. The welcome page + allows you to provide an introduction to the installation process, while the finish + page provides a way to let the user decide what steps should be performed after + the setup wizard is closed (for example, whether the application should be started + immediately). A finish page can also be used to ask for a system restart is necessary.

+

+ Open/Close section + Screenshots

+
+

+

+
+
+

+ Modern UI 2.1

+
+

+ This new version makes it easier to customize pages, because the same method can + be used to  change standard NSIS pages as well as additional pages provided + by the Modern UI. It is now also possible for other NSIS plug-ins to add new pages + to the Modern UI. You can expect to see examples of this soon.

+

+ The welcome and finish page are no longer implemented using InstallOptions. Instead, + the new nsDialogs plug-in is used. nsDialogs allows you to create custom pages or + customize existing pages directly from the script.

+

+ To upgrade a Modern UI 1.8 script, you should:

+
    +
  • Insert the MUI2.nsh header file instead of MUI.nsh.
  • +
  • The macros for InstallOptions have been moved to a separate header file unrelated + to the Modern UI. If you are still using InstallOptions for custom pages, insert + InstallOptions.nsh and use the INSTALLOPTIONS_* macros instead of the MUI_INSTALLOPTIONS_* + macros. The macros themselves have remained the same.
  • +
  • Rewrite customization code for the Modern UI 1.8 welcome and finish pages in which + the InstallOptions INI file is used. nsDialogs commands should be used instead.
  • +
  • Use the standard NSIS method to escape special characters in all texts. For example, + $\r$\n creates newline.
  • +
+
+

+ Script header

+
+

+ The settings for the Modern UI should be inserted in the header of the script file. + It's important to follow the same order as the items below. For example, + interface settings should be defined before you insert pages, because the pages + depend on the interface configuration. It may be useful to look at the + example scripts too see how this is done in actual script files.

+

+ Parameters are given in this format: required (option1 | option2) + [optional]

+
+

+ 1. Header file

+
+

+ First of all, add this line to the top of script to include the Modern UI:

+
+!include MUI2.nsh
+
+
+

+ 2. Interface configuration

+
+

+ Then, you may want to use interface settings to change the look and feel of the + installer. These settings apply to all pages.

+ The interface settings provided by the NSIS compiler itself (such as LicenseText, + Icon, CheckBitmap, InstallColors) should not be used in Modern UI scripts. The Modern + UI provides equalivent or extended versions of these settings.

+ Examples:

+
+!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
+!define MUI_UI "myUI.exe" ;Value
+!define MUI_INSTFILESPAGE_COLORS "FFFFFF 000000" ;Two colors
+
+

+ Open/Close section + Interface settings

+
+

+ Open/Close section + Page header

+
+

+ MUI_ICON icon_file
+ The icon for the installer.
+ Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico

+

+ MUI_UNICON icon_file
+ The icon for the uninstaller.
+ Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico

+

+ MUI_HEADERIMAGE
+ Display an image on the header of the page.

+
+

+ MUI_HEADERIMAGE_BITMAP bmp_file
+ Bitmap image to display on the header of installers pages (recommended size: 150x57 + pixels).
+ Default: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp

+
+

+ MUI_HEADERIMAGE_BITMAP_STRETCH mode
+

    +
  • FitControl (Default)
    + Stretch the image to fit the image control.

    +
  • NoStretchNoCropNoAlign
    + Do not stretch the image to fit the size of the image control. + You should not use this option if you have a full size bitmap that fits exactly because + the size of the field will be different if the user has a custom DPI setting or + if the installer is using a CJK language.

    +
  • NoStretchNoCrop
    + This is similar to NoStretchNoCropNoAlign but will align the image to the right edge when + using a RTL language or if MUI_HEADERIMAGE_RIGHT is defined.

    +
  • AspectFitHeight
    + Scale the image up or down until it is the same height as the image control while + maintaining the image aspect ratio.

    +
+

+

+ MUI_HEADERIMAGE_BITMAP_RTL bmp_file
+ Bitmap image to display on the header of installers pages when using a RTL language + (recommended size: 150x57 pixels).
+ Default: Non-RTL bitmap

+
+

+ MUI_HEADERIMAGE_BITMAP_RTL_STRETCH mode
+ See MUI_HEADERIMAGE_BITMAP_STRETCH for a list of the available stretch modes.

+
+
+

+ MUI_HEADERIMAGE_UNBITMAP bmp_file
+ Bitmap image to display on the header of uninstaller pages (recommended size: 150x57 + pixels).
+ Default: Installer header bitmap

+
+

+ MUI_HEADERIMAGE_UNBITMAP_STRETCH mode
+ See MUI_HEADERIMAGE_BITMAP_STRETCH for a list of the available stretch modes.

+

+ MUI_HEADERIMAGE_UNBITMAP_RTL bmp_file
+ Bitmap image to display on the header of uninstallers pages when using a RTL language + (recommended size: 150x57 pixels).
+ Default: Installer RTL header bitmap

+
+

+ MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH mode
+ See MUI_HEADERIMAGE_BITMAP_STRETCH for a list of the available stretch modes.

+
+
+

+ MUI_HEADERIMAGE_RIGHT
+ Display the header image on the right side instead of the left side (when using + a RTL language it will be displayed on the left side instead of the right side).

+
+

+ MUI_BGCOLOR (color: RRGGBBR hexadecimal)
+ Background color for the header, the Welcome page and the Finish page.
+ Default: FFFFFF

+

+ MUI_HEADER_TRANSPARENT_TEXT
+ Set a transparent background for the header's label controls. Useful for custom + user interfaces that set a bigger header image.

+

+ MUI_TEXTCOLOR (color: RRGGBBR hexadecimal)
+ Text color for the header, the Welcome page and the Finish page.
+ Default: 000000

+
+

+ Open/Close section + Interface resources

+
+

+ MUI_UI ui_file
+ The interface file with the dialog resources. Change this if you have made your + own customized UI.
+ Default: ${NSISDIR}\Contrib\UIs\modern.exe

+

+ MUI_UI_HEADERIMAGE ui_file
+ The interface files with the dialog resource IDD_INST that contains a bitmap control + and space for the header bitmap.
+ Default: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe

+

+ MUI_UI_HEADERIMAGE_RIGHT ui_file
+ The interface files with the dialog resource IDD_INST that contains a bitmap control + and space for the header bitmap on the right side.
+ Default: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe

+

+ MUI_UI_COMPONENTSPAGE_SMALLDESC ui_file
+ The interface files with a customized dialog resource IDD_SELCOM with a small description + area.
+ Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe

+

+ MUI_UI_COMPONENTSPAGE_NODESC ui_file
+ The interface files with a customized dialog resource IDD_SELCOM without a description + area.
+ Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe

+
+

+ Open/Close section + Installer welcome/finish page

+
+

+ MUI_WELCOMEFINISHPAGE_BITMAP bmp_file
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).
+ Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

+
+

+ MUI_WELCOMEFINISHPAGE_BITMAP_STRETCH mode
+ See MUI_HEADERIMAGE_BITMAP_STRETCH for a list of the available stretch modes.

+
+
+

+ Open/Close section + Uninstaller welcome/finish page

+
+

+ MUI_UNWELCOMEFINISHPAGE_BITMAP bmp_file
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).
+ Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

+
+

+ MUI_UNWELCOMEFINISHPAGE_BITMAP_STRETCH mode
+ See MUI_HEADERIMAGE_BITMAP_STRETCH for a list of the available stretch modes.

+
+
+

+ Open/Close section + License page

+
+

+ MUI_LICENSEPAGE_BGCOLOR (/windows | /grey | + (color: RRGGBB hexadecimal))
+ The background color for the license textbox. Use /windows for the Windows text + background color (usually white). Use the /grey for the window background color + (usually grey).
+ Default: /windows

+
+

+ Open/Close section + Components page

+
+

+ MUI_COMPONENTSPAGE_CHECKBITMAP bitmap_file
+ The bitmap with images for the checks of the component select treeview.
+ Default: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp

+

+ MUI_COMPONENTSPAGE_SMALLDESC
+ A small description area on the bottom of the page. Use this layout if you have + a lot of sections and don't need large descriptions.

+

+ MUI_COMPONENTSPAGE_NODESC
+ No description area.

+
+

+ Open/Close section + Directory page

+
+

+ MUI_DIRECTORYPAGE_BGCOLOR (color: RRGGBB hexadecimal)
+ The background color for the directory textbox.

+
+

+ Open/Close section + Start Menu folder page

+
+

+ MUI_STARTMENUPAGE_BGCOLOR (color: RRGGBB hexadecimal)
+ The background color for the startmenu directory list and textbox.

+
+

+ Open/Close section + Installation page

+
+

+ MUI_INSTFILESPAGE_COLORS (/windows | "(foreground + color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)")
+ The colors of the details screen. Use /windows for the default Windows colors.
+ Default: /windows

+

+ MUI_INSTFILESPAGE_PROGRESSBAR ("" + | colored | smooth)
+ The style of the progress bar. Colored makes it use the MUI_INSTALLCOLORS.
+ Default: smooth

+
+

+ Open/Close section + Installer finish page

+
+

+ MUI_FINISHPAGE_NOAUTOCLOSE
+ Do not automatically jump to the finish page, to allow the user to check the install + log.

+
+

+ Open/Close section + Uninstaller finish page

+
+

+ MUI_UNFINISHPAGE_NOAUTOCLOSE
+ Do not automatically jump to the finish page, to allow the user to check the uninstall + log.

+
+

+ Open/Close section + Abort warning

+
+

+ MUI_ABORTWARNING
+ Show a message box with a warning when the user wants to close the installer.

+
+

+ MUI_ABORTWARNING_TEXT text
+ Text to display on the abort warning message box.

+

+ MUI_ABORTWARNING_CANCEL_DEFAULT
+ Set the Cancel button as the default button on the message box.

+
+
+

+ Open/Close section + Uninstaller abort warning

+
+

+ MUI_UNABORTWARNING
+ Show a message box with a warning when the user wants to close the uninstaller.

+
+

+ MUI_UNABORTWARNING_TEXT text
+ Text to display on the abort warning message box.

+

+ MUI_UNABORTWARNING_CANCEL_DEFAULT
+ Set the Cancel button as the default button on the message box.

+
+
+
+
+

+ 3. Pages

+
+

+ Insert the following macros to set the pages you want to use. The pages will appear + in the order in which you insert them in the script. You can also insert custom + Page commands between the macros to add custom pages.

+

+ You can add multiple pages of certain types (for example, if you want the user to + specify multiple folders).

+

+ Examples:

+
+!insertmacro MUI_PAGE_LICENSE "License.rtf"
+!insertmacro MUI_PAGE_COMPONENTS
+
+Var StartMenuFolder
+!insertmacro MUI_PAGE_STARTMENU "Application" $StartMenuFolder
+
+

+ You will need the page ID for the Start Menu folder page when using the Start Menu + folder macros. The folder will be stored in the specified variable.

+

+ Installer pages
+ MUI_PAGE_WELCOME
+ MUI_PAGE_LICENSE textfile
+ MUI_PAGE_COMPONENTS
+ MUI_PAGE_DIRECTORY
+ MUI_PAGE_STARTMENU pageid variable
+ MUI_PAGE_INSTFILES
+ MUI_PAGE_FINISH

+

+ Uninstaller pages
+ MUI_UNPAGE_WELCOME
+ MUI_UNPAGE_CONFIRM
+ MUI_UNPAGE_LICENSE textfile
+ MUI_UNPAGE_COMPONENTS
+ MUI_UNPAGE_DIRECTORY
+ MUI_UNPAGE_INSTFILES
+ MUI_UNPAGE_FINISH

+

+ Open/Close section + Page settings

+
+

+ Page settings apply to a single page and should be set before inserting a page macro. + The same settings can be used for installer and uninstaller pages. You have to repeat + the setting if you want it to apply to multiple pages. Example:

+
+;Add a directory page to let the user specify a plug-ins folder
+;Store the folder in $PluginsFolder
+
+Var PLUGINS_FOLDER
+!define MUI_DIRECTORYPAGE_VARIABLE $PluginsFolder
+!insertmacro MUI_PAGE_DIRECTORY
+
+

+

+ All standard texts in the user interface are loaded from language files, which are + available for all languages supported by NSIS. So you only need to define these + texts if you want to change the default.

+

+ If the parameter is a text that should be different for each language, define a + language string using LangString and use $(LangStringName) as value. For a license + text in multiple languages, LicenseLangString can be used. Refer the NSIS Users + Manual for more information about installers with multiple languages.

+

+ In all text settings, the doublequote character (") should be escaped in the + following form: $\"

+

+ Open/Close section + General page settings

+
+

+ MUI_PAGE_HEADER_TEXT text
+ Text to display on the header of the page.

+

+ MUI_PAGE_HEADER_SUBTEXT text
+ Subtext to display on the header of the page.

+
+

+ Open/Close section + Welcome page settings

+
+

+ MUI_WELCOMEPAGE_TITLE title
+ Title to display on the top of the page.

+

+ MUI_WELCOMEPAGE_TITLE_3LINES
+ Extra space for the title area.

+

+ MUI_WELCOMEPAGE_TEXT text
+ Text to display on the page.

+
+

+ Open/Close section + License page settings

+
+

+ MUI_LICENSEPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_LICENSEPAGE_TEXT_BOTTOM text
+ Text to display on the bottom of the page.

+

+ MUI_LICENSEPAGE_BUTTON button_text
+ Text to display on the 'I Agree' button.

+

+ MUI_LICENSEPAGE_CHECKBOX
+ Display a checkbox the user has to check to agree with the license terms.

+
+

+ MUI_LICENSEPAGE_CHECKBOX_TEXT text
+ Text to display next to the checkbox to agree with the license terms.

+
+

+ MUI_LICENSEPAGE_RADIOBUTTONS
+ Display two radio buttons to allow the user to choose between accepting the license + terms or not.

+
+

+ MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT text
+ Text to display next to the checkbox to accept the license terms.

+

+ MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE text
+ Text to display next to the checkbox to decline the license terms.

+
+
+

+ Open/Close section + Components page settings

+
+

+ MUI_COMPONENTSPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_COMPONENTSPAGE_TEXT_COMPLIST text
+ Text to display on next to the components list.

+

+ MUI_COMPONENTSPAGE_TEXT_INSTTYPE text
+ Text to display on next to the installation type combo box.

+

+ MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE text
+ Text to display on the of the top of the description box.

+

+ MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO text
+ Text to display inside the description box when no section is selected.

+
+

+ Open/Close section + Directory page settings

+
+

+ MUI_DIRECTORYPAGE_TEXT_TOP text
+ Text to display on top of the page.

+

+ MUI_DIRECTORYPAGE_TEXT_DESTINATION text
+ Text to display on the destination folder frame.

+

+ MUI_DIRECTORYPAGE_VARIABLE variable
+ Variable in which to store the selected folder.
+ Default: $INSTDIR

+

+ MUI_DIRECTORYPAGE_VERIFYONLEAVE
+ Does not disable the Next button when a folder is invalid but allows you to use + GetInstDirError in the leave function to handle an invalid folder.

+
+

+ Open/Close section + Start Menu folder page settings

+
+

+ MUI_STARTMENUPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_STARTMENUPAGE_TEXT_CHECKBOX text
+ Text to display next to the checkbox to disable the Start Menu folder creation.

+

+ MUI_STARTMENUPAGE_DEFAULTFOLDER folder
+ The default Start Menu Folder.

+

+ MUI_STARTMENUPAGE_NODISABLE
+ Do not display the checkbox to disable the creation of Start Menu shortcuts.

+

+ MUI_STARTMENUPAGE_REGISTRY_ROOT root
+ MUI_STARTMENUPAGE_REGISTRY_KEY key
+ MUI_STARTMENUPAGE_REGISTRY_VALUENAME value_name
+ The registry key to store the Start Menu folder. The page will use it to remember + the users preference. You should also use for the uninstaller to remove the Start + Menu folders. Don't forget to remove this key during uninstallation.

+

+ For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu + folder:

+
+!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
+  Delete "$SMPROGRAMS\$R0\Your Shortcut.lnk"
+
+
+

+ Open/Close section + Installation page settings

+
+

+ MUI_INSTFILESPAGE_FINISHHEADER_TEXT text
+ Text to display on the header of the installation page when the installation has + been completed (won't be displayed when using a Finish page without MUI_(UN)FINISHPAGE_NOAUTOCLOSE).

+

+ MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT text
+ Subtext to display on the header of the installation page when the installation + has been completed (won't be displayed when using a Finish page without MUI_(UN)FINISHPAGE_NOAUTOCLOSE).

+

+ MUI_INSTFILESPAGE_ABORTHEADER_TEXT text
+ Text to display on the header of the installation page when the installation has + been aborted.

+

+ MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT text
+ Subext to display on the header of the installation page when the installation has + been aborted.

+
+

+ Open/Close section + Finish page settings

+
+

+ MUI_FINISHPAGE_TITLE title
+ Title to display on the top of the page.

+

+ MUI_FINISHPAGE_TITLE_3LINES
+ Extra space for the title area.

+

+ MUI_FINISHPAGE_TEXT text
+ Text to display on the page.

+

+ MUI_FINISHPAGE_TEXT_LARGE
+ Extra space for the text area (if using checkboxes).

+

+ MUI_FINISHPAGE_BUTTON text
+ Text to display on the Finish button.

+

+ MUI_FINISHPAGE_CANCEL_ENABLED
+ Enable the Cancel button so the user can skip any options displayed on the finish + page.

+

+ MUI_FINISHPAGE_TEXT_REBOOT text
+ Text to display on the finish page when asking for a system reboot.

+

+ MUI_FINISHPAGE_TEXT_REBOOTNOW text
+ Text to display next to the 'Reboot now' option button.

+

+ MUI_FINISHPAGE_TEXT_REBOOTLATER text
+ Text to display next to the 'Reboot later' option button.

+

+ MUI_FINISHPAGE_REBOOTLATER_DEFAULT
+ Sets the 'Reboot later' option as the default option.

+

+ MUI_FINISHPAGE_RUN exe_file
+ Application which the user can select to run using a checkbox. You don't need to + put quotes around the filename when it contains spaces.

+
+

+ MUI_FINISHPAGE_RUN_TEXT text
+ Texts to display next to the 'Run program' checkbox.

+

+ MUI_FINISHPAGE_RUN_PARAMETERS parameters
+ Parameters for the application to run. Don't forget to escape double quotes in the + value (use $\").

+

+ MUI_FINISHPAGE_RUN_NOTCHECKED
+ Do not check the 'Run program' checkbox by default

+

+ MUI_FINISHPAGE_RUN_FUNCTION function
+ Call a function instead of executing an application (define MUI_FINISHPAGE_RUN without + parameters). You can use the function to execute multiple applications or you can + change the checkbox name and use it for other things.

+
+

+ MUI_FINISHPAGE_SHOWREADME file/url
+ File or website which the user can select to view using a checkbox. You don't need + to put quotes around the filename when it contains spaces.

+
+

+ MUI_FINISHPAGE_SHOWREADME_TEXT text
+ Texts to display next to the 'Show Readme' checkbox.

+

+ MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+ Do not check the 'Show Readme' checkbox by default

+

+ MUI_FINISHPAGE_SHOWREADME_FUNCTION function
+ Call a function instead of showing a file (define MUI_FINISHPAGE_SHOWREADME without + parameters). You can use the function to show multiple files or you can change the + checkbox name and use it for other things.

+
+

+ MUI_FINISHPAGE_LINK link_text
+ Text for a link on the which the user can click to view a website or file.

+
+

+ MUI_FINISHPAGE_LINK_LOCATION file/url
+ Website or file which the user can select to view using the link. You don't need + to put quotes around the filename when it contains spaces.

+

+ MUI_FINISHPAGE_LINK_COLOR (color: RRGGBB hexadecimal)
+ Text color for the link on the Finish page.
+ Default: 000080

+
+

+ MUI_FINISHPAGE_NOREBOOTSUPPORT
+ Disables support for the page that allows the user to reboot the system. Define + this option to save some space if you are not using the /REBOOTOK flag or SetRebootFlag.

+
+

+ Open/Close section + Uninstall confirm page settings

+
+

+ MUI_UNCONFIRMPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_UNCONFIRMPAGE_TEXT_LOCATION text
+ Text to display next to the uninstall location text box.

+

+ MUI_UNCONFIRMPAGE_VARIABLE variable
+ Variable in which to store the uninstall source folder.
+ Default: $INSTDIR

+
+
+
+

+ 4. Language files

+
+

+ Insert the Modern UI language files for the languages to want to include.

+
+!insertmacro MUI_LANGUAGE "English"
+
+

+ The standard NSIS language files are loaded automatically, there is no need to use + LoadLanguageFile.

+
+

+ 5. Reserve files

+
+

+ If you are using solid compression, files that are required before the actual installation + should be stored first in the data block, because this will make your installer + start faster. Include reserve file commands for such files before your sections + and functions:

+
+ReserveFile /plugin MyPlugin.dll
+!insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
+...
+
+
+

+ Script code for pages

+
+

+ Some pages allow you to show additional information or can be used to get user input. + Here you can find the script code to use these features.

+

+ Components page descriptions

+
+

+ The Modern UI components page has a text box in which a description can be shown + when the user hovers the mouse over a component. If you don't want to use these + descriptions, insert the MUI_COMPONENTSPAGE_NODESC interface setting.

+

+ To set a description for a section, an additional parameter needs to be added to + Section command with a unique identifier for the section. This name can later be + used to set the description for this section.

+
+Section "Section Name 1" Section1
+   ...
+SectionEnd
+
+

+ After the sections, use these macros to set the descriptions:

+
+LangString DESC_Section1 ${LANG_ENGLISH} "Description of section 1."
+LangString DESC_Section2 ${LANG_ENGLISH} "Description of section 2."
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+  !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
+  !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+

+ For the uninstaller, use the MUI_UNFUNCTION_DESCRIPTION_BEGIN and MUI_UNFUNCTION_DESCRIPTION_END + macros.

+
+

+ Start Menu folder

+
+

+ Put the code to write the shortcuts (using CreateShortcut) between the MUI_STARTMENU_WRITE_BEGIN + and MUI_STARTMENU_WRITE_END macros:

+
+!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
+  ...create shortcuts...
+!insertmacro MUI_STARTMENU_WRITE_END
+
+

+ The page ID should be the ID of the page on which the user has selected the folder + for the shortcuts you want to write.

+

+ The variable which contains the folder and the page ID are set as parameters of + the page macro.

+
+
+

+ Language selection dialog

+
+

+ If you want the installer to display a language selection dialog (see the the MultiLanguage.nsi example), + insert the MUI_LANGDLL_DISPLAY macro in the .onInit function:

+
+Function .onInit
+
+  !insertmacro MUI_LANGDLL_DISPLAY
+
+FunctionEnd
+
+

+ This macro can also be used in the un.onInit function.

+

+ Open/Close section + Settings for registry storage of selected language

+
+

+ To remember the user's preference, you can define a registry key. These defines + should be set before inserting the installation page macro.

+

+ MUI_LANGDLL_REGISTRY_ROOT root
+ MUI_LANGDLL_REGISTRY_KEY key
+ MUI_LANGDLL_REGISTRY_VALUENAME value_name
+ The registry key to store the language. The users preference will be remembered. + You can also use it for the uninstaller to display the right language. Don't forget + to remove this key in the uninstaller.

+

+ For the uninstaller, insert the MUI_UNGETLANGUAGE macro in un.onInit to get the + stored language preference:

+
+Function un.onInit
+
+  !insertmacro MUI_UNGETLANGUAGE
+
+FunctionEnd
+
+
+

+ Open/Close section + Interface settings for selection dialog

+
+

+ To customize the language selection dialog interface, use these defines before inserting + the MUI_LANGDLL_DISPLAY macro.

+

+ MUI_LANGDLL_WINDOWTITLE text
+ The window title of the language selection dialog.

+

+ MUI_LANGDLL_INFO text
+ The text to display on the language selection dialog.

+

+ MUI_LANGDLL_ALWAYSSHOW
+ Always show the language selection dialog, even if a language has been stored in + the registry. The language stored in the registry will be selected by default.

+

+ MUI_LANGDLL_ALLLANGUAGES
+ Always show all available languages and don't filter according to their codepage.

+
+
+

+ Custom pages

+
+

+ If you want add your custom pages to your installer, you can insert your own page + commands between the page macros.

+
+!insertmacro MUI_PAGE_WELCOME
+Page custom FunctionName ;Custom page
+!insertmacro MUI_PAGE_COMPONENTS
+ 
+;Uninstaller
+!insertmacro MUI_UNPAGE_CONFIRM
+UninstPage custom un.FunctionName ;Custom page
+!insertmacro MUI_UNPAGE_INSTFILES
+
+

+ Use the MUI_HEADER_TEXT macro to set the text on the page header in a page function:

+
+LangString PAGE_TITLE ${LANG_ENGLISH} "Title"
+LangString PAGE_SUBTITLE ${LANG_ENGLISH} "Subtitle"
+
+Function CustomPageFunction
+  !insertmacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
+  nsDialogs::...
+  ...
+FunctionEnd
+
+
+

+ Custom functions

+
+

+ Interface functions provided by NSIS, like the .onGUIInit function and the page + functions are automatically included by the Modern UI and filled with code to support + new interface features. If you want to add additional code to these function, create + a function with the custom script code in the script use the Modern UI functions + call them.

+

+ Example:

+
+!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
+
+Function myGUIInit
+  ...
+FunctionEnd
+

+ Modern UI pages can also customized using custom functions.

+

+ Open/Close section + General Custom Functions

+
+

+ These defines should be set before inserting the language macros.

+

+ MUI_CUSTOMFUNCTION_GUIINIT function
+ MUI_CUSTOMFUNCTION_UNGUIINIT function
+ MUI_CUSTOMFUNCTION_ABORT function
+ MUI_CUSTOMFUNCTION_UNABORT function
+ MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION function
+ MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION function

+

+ Mouse over functions are only available when the description macros + (MUI_FUNCTION_DESCRIPTION_BEGIN) are used. When component page descriptions are not + used, regular .onMouseOverSection and un.onMouseOverSection must be used.

+
+

+ Open/Close section + Page Custom Functions

+
+

+ These defines should be set before inserting a page macro.

+

+ MUI_PAGE_CUSTOMFUNCTION_PRE function
+ MUI_PAGE_CUSTOMFUNCTION_SHOW function
+ MUI_PAGE_CUSTOMFUNCTION_LEAVE function
+ MUI_PAGE_CUSTOMFUNCTION_DESTROYED function
+

+

+ The pre function is called first and allows you to initialize variables or decide + whether the page should be skipped. Then, the show function is called, which can + be used to customize the interface. Finally, the user input can be validated in the + leave function. The NSIS Users Manual provides more information about these functions.

+

+ In the show function, the window handles of all controls on the page can be retrieved + from a Modern UI variable. A list of the variables names is not yet available. For + now, refer to the source files of the Modern UI 2. The variable declarations can + be found in the first lines of the header file for a certain page.

+

+ The destroyed function is called after a external/plug-in page has been destroyed. +

+
+

+ Example scripts

+
+

+ Basic: Basic.nsi
+ Welcome/Finish page: WelcomeFinish.nsi
+ Multiple languages: MultiLanguage.nsi
+ Header image: HeaderBitmap.nsi
+ Start Menu Folder page: StartMenu.nsi

+
+

+ Credits

+
+

+ Written by Joost Verburg.
+ Icons designed by Nikos Adamamas, aka adni18.
+ Thanks to Amir Szekely, aka KiCHiK, for his work on NSIS to make this possible.

+
+

+ License

+
+

+ The zlib/libpng license applies to the Modern UI.

+

+ Open/Close section + License Terms

+
+
+Copyright © 2002-2023 Joost Verburg
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute
+it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; 
+   you must not claim that you wrote the original software.
+   If you use this software in a product, an acknowledgment in the
+   product documentation would be appreciated but is not required.
+2. Altered versions must be plainly marked as such,
+   and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any distribution.
+
+
+
+
+
+ + diff --git a/tools/Docs/Modern UI 2/images/closed.gif b/tools/Docs/Modern UI 2/images/closed.gif new file mode 100644 index 0000000000000000000000000000000000000000..b45054ee8154b36b64d0bdbb9fe2b40d03ba1489 GIT binary patch literal 203 zcmZ?wbhEHb-oE{eQPhQI&^#bmMe?*-1zn9?~XGM zzy0|A_wT=qNe8Yzc>D3|&sQJ59l7$Xa^CUlkKQfZeSPiWJMAmZ#&_>2nt5dX(Yycu z|7So2ia%Mv0y-cPWG4fw$AZM(6iX?I32Sq-6C#$LE%7~QRI6ha$J`vZMvUW9-bR+y ujS-e6C%BTGrn;;USkW)0z)`&U-S%Y_J=qycRvoPq)%&nRCXR!V!5RQGW?{Dg literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI 2/images/header.gif b/tools/Docs/Modern UI 2/images/header.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8810d30cf58ad6ef9c0b14a8be67aabd2065e81 GIT binary patch literal 6023 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 literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI 2/images/open.gif b/tools/Docs/Modern UI 2/images/open.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fff60ed5c309677255f7c0abf53a6aec2f06f0f GIT binary patch literal 138 zcmZ?wbhEHbg&&pr1&=j$6CjqCKB^kigY*EL_h&?h4! z$6p;^X(_K_^21_&UY)2MRkT&e$g2OzQpapvg*m*{OuP-;9K1m`p7vxac5d(O?`pc( zINIym+t~Sg4A?7@kx`PpdHq(6w4A**Khn~(-8XZQTry83yKr^;$;sib78I_*=~w-@ zKG_Gd_vb?!1(<_#vbXEYBvRAxX*-EDG=-)3NCcwC!y~@65A4oO^mw%qovY`_v{rk{ zdkq{C$X>*gNbUEE?;Rc!PESv2x90YCH(tKXB71j4=34nFYCH=;NXn>NUe4ZFpWSfM zs`&MT(*A%*B*x^eCJxVOW+PfB&L};I%HK&}D^X;(z8QrdfWGAJV9u&~#z&I@o^g}S z5G1+U#Ki@HjJE){hipEoZ*(OqD{gV}__n@trtv_V>4AYVfQdG02S*Hj~X%7cw%F4OKF-mzh54_ZWPWq|BT|`=sFS!b8>n?TJ1%n(XaSha?zv@ajAla;T)D2GN)N` zlaA}!v)3Y)#x~nX=wngSo==5-WMt1b(aTF~t6XnaX>@m9n(s4P<5pYxXobU=%r;Ju z3rr@MYDK=|qn+n!Gq?lvC-qr6hm)J`XDTY;yTjpRir%o{2(r(gcee`nb|3@-(Ut6( zDj87QIx_i%_Rqql@-~cjJhV2w2bs4(#W{pHbk$GoxX+hVvc6r>6TU+Y}C+k!SW=SN{ z?$%uL*GWlZ77byY!aFs7-N=7ac*BGd9Ub?zHfS^qS9O`-kDt)-pQF&4%H;+JBKEZfL|KjfdwN|(;usRjz=#h=h4LA z_J)(4>>xRs(IhWq1)uwzBeo$g@A9&;Vb-m(fl}a4R}+0_GDCN_@sZiM8|6iT;rV)X z^?b}7Wqi41)ga|c+Q7=nK$=!ci&&0M4`uZE&{`gtc!mx+p0&DMuLiQr`0rMq5{%FL zchAsyJMuvf)`&*!wH-khxR<$=gLx+QTp_0?%Ka(nV$xuw=LPf!5NJ62X@bx*((GpD7kJdeeO-T zvjR`cM2dE zyY^+Vw9V)I2$?2QdQGv>GhiiK-pzggMIdEq+w+WS({{_98Kzt*C*^m;7a18D(qLPn zvR`jZM#H}S$jRO!z6%z{tn7yx1cO{?c0+=X#uvw3d-!S`-F7{92K$Y4ayTESHN#A6 zSH4WA%eXB3IVTStJ-I19Jp1~&MK#ZB89KMm8GEE)N59kXvvl{&PvGH`JuDPI0|ZA1 zX(cdmJYCnTTim+Ve9+gf$ig@$bRWO<8ETbhctBYl1R#8zd4SYO_(B1Z@Z@X#gkETH zrlCC7q*8Vu03RTEC7mXU&(c2!@R2c}Aj}f%Z-MHWF5+NBwRd!`!S`ngF@lks5m4h3oi5pKASxA1CrhXYkv{2taE|@|5K7T{hMRZp2OjH-u`m(4rXQL z$%9#C_NUhWXppROeqWX}TB_~mzRI`wAT8x>0D(hBdr*AUV@v{*|B=mC^!`M5k5Wc+ zHDhirH*w{gl^G2qXT8f}1+T2=>YiQ39IzxG4PuRVi6Pi1oTg$Z zxWN6?uQ*UqSL>#z;N(x14S!77?4Ue=b?1FEqN&?h3@`E&ufa#HBj9sdy`n7LT=Q7b z0oDOhH%bUBE%+O-?!uhV63!9WUKv7U_Zw|>3+$n}RT_+QOM{S(+yZYh=Rc(vEK;`C zsDD56Jfqq<(WqDnY1%I-hR>6JD~kAcaW#EXn_u*j_n*+ zNslDrSKWxjOW9?m<0(nl?mHj4?(1866Kh_H1n5K~Qr=BRi3&cyJ}B=;<)*`^Ttm?1 z89yg|ChnRJD!~0c)quo68PQigTdf>WvkEi0$ZNNH8Nc8q_65&V1+3qTtsBn zm1ckb$>RJZ;oiD3Ps_3&AZ@LzFOqjz4@<^-+$Pm>vl)0iBD);O91ybogM{#+v#s6I zV{TW%;X9x=4>A3dB9mVT^x1E_19i0)je?_7>VLWze{*|&Q>WM59eyx_Lr1W;*q6%*D#moP!4ix>Ge?| z|C|-*MBelC)feZYPGkC~3IZ8(Z#X-+v#$nRF%r$(Sz;79k{JpQBXstY>n$%BrM%zJ z)gPcdlcK+&I)W*Pjng;U@S>H4&mXAiAB#SFQNcU~~0=KSQiTN_Vo2mkAN$+$lDd zu%+ZD8vK*Nxk%G_!)rSvhXnT`BYuH)CK-%@U{pY`XHv{2CAf zOdXVecD7$MoE&o=Pu&s3^-u8@z1OX;=ta@%%|T9sp=nXrUV5I2wWLG<5#qMJQcIEF z-)#IFZm3nQc%zlEl`?hRwg3Dt7u`koH}JlG3I6E1jg5v;^@8*n0UOm@bzTmSUXT0Q zxqr4Xb>OCxeVTU*e-d~GG>#9UG{^UZDb2snRywwZ+1_G44v)Acq}=xo{N^z1D34_3 zzpnl2Lh(CVNJnX+UeeSALVOuD)6?^Y{Y2gq7uDUxfe!=ECi0kj-4MMTo9JrzMu>ZL zgSAz07W~+wI-Fa+0_{~U@uf0Y#|ijT<{oE=Np8RyDpy0wi|MzSAi$e)jz&rWAf zC_TQ5YnFZgFYO=-Oz#ZQq&cawSuqNX0VDT2g9j2cmB8X!z(06oCNw)>uHa~}cryJ9 z$nRvH%aDKfcb*k}1paXcMMc7m1OBIejzDpN@dpt6*LzwPmP4Hhd5gCet6T91-;?|{ z{M9sO)D^!Fa<_uu#|l*U@yL61gOoJM%kQ{YPpDFt^PmS3rx$&DvYb%-PE>Dmw^G7~ z{DgM#+0&7)S`l_jbqzsRjIp1WfVQpE4%y9EdB`pm?pQS`kBT~_^te%TpO5J zeQg6UpNsEP*7;Cp)NQCxRJDoTyc=Z=AK`E=omo{U4p_LmoAMnq!Hx0{ae6@PVpgm) z7Dx3R@n$OqoqNw{Ka%I*T8zXo+lX_RHy7{WH2_njvRj$LyEhFpxU;#r&1v~|b)_Q! zp%OhIlUvK)=Qm~!wEKQ1=2*Tw_UWVnw#J%PLjnra@GFXX?FQt29 z5zs0ykBPN~wY4?Hg2NxKv2(;2Tczy0XH8yc&>1Sn8b|@5-ZiWNW6mycu+qTbejd=v zu7#!0QVKlH2K@J$c$miFJXvn7aR*3f4LRVAabI%sWNB2M;Kr$${>{9I^`SfaF-Y*D;^2Jx?pq8+Yg6+g zz2!>o$Z@U``5&eVUFN)6`aO6{pJHU&lX5W6L*>NuUGB6^7v7aL?%ldVp)=}gG0Fv0UPSrY3 z_5JXrp;M{|x<_Awwzmc&FhYj4_o?f$8tS@{gk>k?t#C5 z#!xyw+MZWCLpxnsKa55-h; zBrH18T=D6R-r&afou+-4yYriUt*xznqJD|!T!aS?^q>fS+mYh}9`vKi_Q!xhQ|CoA zxP}KrPypNrTyuXzNTHP}Xyxc(Vj}Lw^LzummMvV(+8J!fMYN4#v>*x)@a@hfzeH}0 zk9WL~M?k$*((raGBadQZb|qESdrs|dlOx|}*Oqxh?aW4klQchEwiY2@`}#`#zBC8@ z%)G(gjQi9ZPtCx3r%$T7dLq>6nY{JAuD;JZZC(;%hUR6V=%2R{vs%|zW|X9y1nCtA(+ z4ihJRXM7+tsBI?`!(sU&iZ7cR;o%z&$$o3|^#FQ`9obnoCQ;h25!i!!8NG|Nhzx?5 zjE}F5BD4^6+8(|6i_~{VxXwOQw?Qk&rb>9+R~p4viT~l?kYtrgCk=P$)R62=NvFY} zw{PA+Z-oEF42{Z!B0#sNgr;Vhxnx8O^7AP=993BPGOTg5)!#SM0nuHyUxVpyZ&?g4 z?=>5oU7ExtOTzwWEm7bLJ}K>ecLH+|doGREH2jVZOP_$2hns1{%jCF5dMtsv5$Cw$ zb2TH~qs--e zzHPkJd3SE-q#3?p+kAd4q*Uci6{;|2<1C2feZAPMP2(s1w;yL%N&1Eu!I6*VD{FHB z7hG_?Vm)!7gs%c7VE;9y+gNE{=?2c#9e3wWFBy+wpwizn+ynG23e`uUb)hf!>FEA4 zT2Aivt)#$}3>Nqwp*5JDT-M^Ju=+eo1D8_M^Upk#YO3xeOUpdmf9i>Xx;`~R>@S) z-N(ebv!=W|@(yF{vWz^jzc+=UiuH5Pjzna(SY#oOV)yI=0rshBanQ`@sODEo6Nslq ziw3jMF0Hc6`o$UU7%dd_Nrczvrj@xl_syH0EU)~izfe;zsT|ZEn2z$UgnZ;qy`?8# z?K%5m1)F>s$T|xi_-%-ef#ogx2Ag?!XkM(JuGRydKc}~&JXA5Q^^ZFq@lDwOo1D|h ze^FlbcAgGW1$S$JA-U)X`y7%+l?$oV0TRMrnT1Cm^#z>qPy^`q@%I%6Y2MF^CpSHdY`JyIQ;ExENxOj5qyU{NTukUYWeTA>AcvJ zG{lChfn!sn-giQYHb{wsr_OHR=1)tOx)%d*mF*60k-cZw5g%V&PjP982S;GX!`VW? zzuuV=4i$f#(;9-WH;GwKZR)Y?buJn0#~{Gcb)|A0#PyW%Ia`YHC~s{1yaFrw*$&+? z9o^=}y^!?s&ApvnyZvj1vekcQb|W8IOTO#RDK#>FrSxNda51`)<&9+gO`55U*K5ck zshE;?nvz|<>E}x#%L{psN<@Jotaf=?BpUQpVB6=e$2KP$yGdS+e1Y=*eRmD$qEFJF z@_I-L144!#`*YM)Z_7xNbE;bjN)xW$kPI;6M{fRj{qlkqPF0rfQTbK|B?zMF-@Oi9 z{G3n>=b7Two>Q#>3cN`N3`_~Ri)>cSLQ)>K?rut3pt6+)at7?u*Y6!c1muY=wB3&% zYm%Ex*?pKA=ELWE)BYN?Tj(`<>Y_MkJT>uaBPQ`|ZB*RM(?l>0}I6!p{X8(?o`{RX(#{v6b)N`u1FU!BkCE z4(w`vY}TbGZG?VCGs5;^j@a}*#Mk4GsXK@I|#q?(9(IDtM*8KY);p)!<+5r+K z6s~OtAHBTtJCSUWhO*Z}^CmnyU6U@j`?DL&tGbhC^EPrcY+ueW}$hFZMCC_1r- zjNj4I`}h#gAU#zT11cY{TC}uM+`iw?*3{GM3374!gFO*42(FUP+zj#j38ZZ zzO}LI95GYr!)Y#E?$Llv+q}p5Ve&BxGpU2_v zXgXUK`rt0UZ#Ce7$Qaw+yG?o9tZoL(US9hmYM&mz+iIvHMqq@1+bmv@dntv@0Iy86-CFt2~?AI?!) z;YzTYUu+C24*Q+8vz%y|!2_a^50pyXq6>^z-L};_tfP>ve{8O%_zUXy^=Wj$-pgL! zz1`rCZ#6>_v@C2RED|m*(ea_R$gQF^-21SM^)Jr&ih63~D&@}i4ljU$zy1E8f+?1c ziRPD)hWyiC5SCDU31V+?-d-bY-L_~xOfkjB!s4Zx5pTR5>+_=TgKM_|V&f8^G23mg zC)qhom#vqlY4h`@asHo`qpz#C3H&U)&(M&Yen+2KG7};z!k^Og_}TFxDssg2-IKwj znw_pC!Km4z2-vm51Gz{&+qD+2IJsZf^(2^*qDo}~?tEd;J2mTxKC*-@8v@;K<*e9R zy?!`)A8zM=VEW7g#}uQGgS_=lbUbA1*QieF?t>sc8T3gYSHFn_Mg@{Pw@K3CoExM?aBm7j!%Ebqnr%yw^Iic9T(RliKG0mWOrN~%Sw^Zg8+g6?(r zWkHlqKSZ={*sF44%&}kS;yK@PsjpZ;)s8X_9f+9x;|K?HNf}q+5Nfrt?P{P9itm~UP$!l)2Y?h=^4wVvU%OZOJ zB%l;D`T-&RBGmZR(H9?IpN62E*3ho1WXsQPY#7@s5&Pi6g0=&A?0RRzO0bzwdWRnK z9NR?&vgv{`+zMb5Y-YF>Y?(0zdE9A{v5)HtM?}zJ{*xREd0g$;#O>m)*zH=7@B_8! zQN%B${0W;^7A*9AObVNdc3OAqH>MPXw{f~GkXa2pVI8>_5Do_Clr5S5sY&is+fPK` zv{r(-q-s>%L4MIZ8Q@8EtUEBJTjnBhAl0s6D&quYlJ)y_iIN7_@M9;XFJXSpY^w!b zhXSWYnGW&_FmICiDFw-tKD)HUVX`@{E-*#7n7k?7&PCxzw}DKJWS0nUrtj)&PJxNa zo)ateGI{F-IoDmDHbe6-9`$M^lB0YjFe(watI zub5BY%bzoGKeiNUqhiviPt3bv&eD8Ns>vSw;_RU8d+|1Y+Fao}+Wvz9U+LC0-&Zp# z%_?5kE@Wy`52ruSYY*{dQh}7knjVTAT-Hy01Bd~1xYp>bsSUA*3rf~^&c5p#*$Qne zNfxhd7nnj-jOxqTI#uC@8lf}^w%#eQrm6j`STNAvCezSMNtI^ex$jbz4)I-X>Ei9h zX9jncd9y9`lGRdf;z??w`ClYOC0}0ej~5Yf!t-Sc0=!#Y4?Xtp#EZOJb>^FGzKPoL z*o#BvNKSLd2bb*p=Q+9?ADZij`r}b<95TkLDa?P}rBk&BG$gDN3JI!{pIXq%?FTuM zKrITrvf+0~#51n$2Z7Y;Z|fTkFqR6F-v{=jAg5 zdlM<+?!bzuzS7#M!|Bg1pXzdvYF{&-`n$-*UEKcr5jR-T&XpN9fHSzN?!l$=r6R=j z&y!%g=FsPFEg>}U(LYX&%rYquAGchmTRg_hP+U4}sv#CxhQD;BA+Uiv0j=))TO_o9$tWI{E;bDwU`^JA?Zy9(E0 zqV09nGs|fqYgQVTnRxgU3in};U#eA4L*@UvNuW%VNe+hjQ1d8&kvB&q|(F=FLu(Iqx)AE}ZM24C2FRok5ts z0;a=BA+IC2KX=%668_=Vu&X=UJ3J?-=nV~i-?K&M04EyXiAlT7+w(y|{yK&^>~W}a zFn`6%v{(}}*_z`soviToyxe6z>|1ZA4|3646RFrtVX_0{xf9=k;5e2u6 zkZ&6OXVH2FE9(vTsfhh`9qhc=nB|lqs6lXVIIcjtTI*KqEJ(}VtZZ!!Y*~*))N0%Q zV6h6y+BAaGRIK>y^s(QDThzDdiejNvZp&>Jo%i{dR+thqUnveQ{j#V)VmNmG2J$?i znMQB??X}=-k5}lG{?&c9RDI%8&oRR6c$s_+MQC^$y{xR9m{2Bl-B`!zgU2_O-K=}f zO<%!S9}AX1SAh$G=9G4}A5TC0lBOu;7}YHYZ4Z^4yzkcKOoe%Ve8RK}daBKnDgjj0 zTyI{>L1M1q+g|UHA;h4zPei-B`Vo_iXvamg=45PKz+m=z*x{G$hVF|4URj-fcJCyB z4|F!yuj3bO$VTo^o$sSX`ANtmy168UQuDv~&dh zcPaD7(A~H>EFBp4F+q`MD;MEtB5jLxio{JG{ikgScu<9~EfY}9)OrWa18Vgehrtw6 zgzF>Q)!w}Eqob!^qsV7xxkF|jTaC`Vc^M0~o2@F<%^Th0q{|y^Zpv@U zj7n(k?Kl83`NTR`Zio(E)#GtUv6GP*&~5BsR1HI3p!WzrzHdKfl%Z4kDwWlqDto~N z(X^O-bHxqL5@_6oaUddOx>e4qcC4vuV+J}+7p4)NT#O4Fdn z5WAJ0rkmRR9E0$gdI?MqQ~EIW_#!SWG7tgj8iF0n&m|+L8Q~TN+|Y?n7hG!G zst>5WY2nUx2Kl$F=HKR(j$Zn=tTbKNCRV=LlE9K!oMiB+4RXvKRm7CuLN(+u^fAll z8!KeM!j|&ShB3TYV%BFVJ8S5#wrD!SCkoKknA$EhX$!BeM$q(>Z#cqd#jM(@WSw8; za0x?^@pPGtW-*gE&85|;6bPUM0jVmczD!v{2YcqnL|9rOezP8LJHN=( z+4xn>qGu_3zx`iZ9NhMpWDjL-?mNOHLL5qhpSV@eA2io*;7a-FT5qqi0INGG*3GWE z$R5+5#x~!SM5uz5=KI7N9>s4~TX5yi0vhY%$>Oj>jO@oZ=yEvMpBbgdrO38B#Fp6T zR<)~aTz&1k?Cy&te(+DMtUEf_@u0?@a)3v2t<1A=)cNT(y4j=QAeEn@hC}k5Nq|U9h{Ai80G<9-d1(sdv2z@YSl;sx!Xt z2J#z0@*B1$)gQ%kO4NtK#b%Ir)V{KIl*OtsOO@RVe4* zy~Ylj6)IKWVSfZQ&w>_~Uhj1(RRvt0i|0VtE zI^<@yjSud2%RNVyK@C~`_m3arVzX5!9Zeke@5QAORPaWA%sZF$^Vm^DJE>vzH=DRQ zEnIsK2DLciWov3{^c|wjC&mhcJIAAIBh7uhT^JcB7W4l7=N1U=q+DjQh^=3qQ@0Kp9(#H8QOxhLM9Zo&MPQgdYvs zci(9e->*YJe7K&3b^uV8o8E!%TFm=fM2hYR7fZ{(RHcf2-CmKLwayZ3WHMChD`UjE zRNzT=-RbAKKjY4y7IX9q?9-Dhjl1}Z=@65qeAu=`B`0Qv$dvuLKP4Pg2&KX=dQ0TgMB= z!)8MPx>I6p!{0juN*2U4`F_PVJ|DEd8Ayrh)_;fOfr8V)ddUqz&46)&bM;c7WVd({ zLgQq4!I>m*$~_}=aKL^VF3*O%cG``k&4_F#oqL5~sEo{nzC?S8i^R5ok!8=YPqyz@ z5lI29FxS`740GIkQ{d7~lIt(f8BMeC@_&ka0>#6qq%nMqp_Z5W63@cm);wbYA;~S7 z4c+}lm|Ju2bIYqs8qU|M|3(|BVV`6e6;r1NNrm9Uh)?qdbS#rI5O{o4w%;+I;62E3 zHh?bW!y&K=wBF+LO2WRj0`xsb_gHVngs1iyB2y5Hr8{~_In^6e-jFQzEfzSza~^yVJ98&6#u=SUdz+0A%Z;ox*0#P-6vyq5C`(hNAxK> zK-PG@nV>ss*w(coMnnk&;)PLO@W?%mGDPsrZV@ya6o^$Pq20NAWv@UW z;``rvM>0|<_RZJd(8o}{mUHVQ*UOtl%H>5#Jy&BmPX=nEPGXW^Vwz^ zg2jc!1|n>MTx07mWYG&$zZUqGKsYle9pEZs+C^R&A%La6pe8iNx8I)+g<(ed2VLZJ zzqV6aoW@{^<{1Wl0b19~;&F(FvnYBfSMTxwrR~?)<8Q_g$RxvndOc=8IZ9zvgBFMt zIlzy;vzk?a5>)*Wz-@FIT5by5G6reyS+m0wDqSkgSh)4O-_!zH3_G~9z~f<%KFfUFs@CDzN(e@m0PSYbnSc&c*Kz6gSgQnVpXUG zEQfkrjN|5oZ|i5suRIWIh;gk}0Mx+!fwZ@?-g_Fxt2Kdt>7L8&U3GYIVYOptA@V~I=bNy!#T=a~Fp&2l|>~-0qSdCVGzKH3nI_d3S zzCFF|X>rBWM2>N4U-i+e7#PZ*^sPJQu$9k?4dvgyp1YI2=XA+G=lTx{@~3F~AaHMj z0n2gl7jaos4`IPS_*?B0JVRR2bOa4Nu9*>TmZ-3HucRSpEAyNlUEbXU9ZM^F58F#(!&^ODk>x zOY&DO2B;3hPiflc8R{OaxcH66mS~9jKO$da&)jVIZOVx z9>qX~YY(SVU>{mQ^oPWM(1=mY+bRRws;SN##a6`(?e|fB5U@xK1Yl`TGX>Fh1QEG4 z<`sJfHD(_cWsM&$g zPjguu!$!134|Se^_K=e-QdYb*sUWNLtkrKD{8L&y{0cz*fcHFL6j@`rxj0m073;a4 z^B$A%_QA(hDLG);hT?sYmGPw_mU{U~A&$SeP4@_MwW727q{YK=#fR|+Ak8`sYfDsB zj>J{I<536g9rh;+N&2&>Yz3Kod=q|%omr-u!A` zo(pt(o22+h@tJg1O}2X2h(--!=TrPuUaKlel`r|KFVIQg<;n2NKYS-4Ag3CC+~O$O zyZKx}xNc`_vh)ieP+c&Z=+S6oCwu-TNw%N=Pyj@cFsDWWk;?K)4_tKe9Oioc*oeJ3 zQ^Yie%Vjli)@ZkqEL$gfV{6fu zku9LsezK-``&&K3dcz4)k5$4jUKQQ+49g#Cg5Sw0mBB*0u;;B~?LdXFp@@ib)0jW~ zHo-Q@`G_wq%+L6tW|es*L7CT%tWM=d{@&et>aNB%hPq@^9<2>dWULv7g=E_CoXCul z$Xu^C`l1_02P~AU*;k1?4!8)XJl2xhPdq@R@-xSMC!KU6*7xff?}j4r03@|60Virx zD)56)z7DBhA1{r;1S4$$RvJYF#HG7(U0Oj z!XXz{u+;gCme8Sor7LaB7q4BDdqFffVE-9$&MF;gok zLw>CXE+A;8;Hss4lXS>5+{A6zEP?~SeZXQf3Vk&q6Aexn`;uzzL#k9Rz2#-Vsn}tm zSz%SaWf$+Uz2;qaeqC;^VC56!2h+)VU(l{m%jl=Uj>}HH0?z~<$7YYfYN_DG`V~ZU z-EWXT@tK*;!_xjL0~R@E{Dq=DEAJE}SS&VEQhpp_i>czt4pZ`v1$^dw2@koRY#)8J zU~M%Pw&-4Z=F7I(!@&cRGi!X8GCAq%u5)IuW}n@@MQlMnT8Rt;C!-}YX02VN_BU0B z;|?hYXT`K_>H7qPHbS-ZSzmX#GYp z#?^oot{M4>YZnF9b;_V$Cnvm6uJc`0?jCf?6vmF~`bS*^8YU0sgxCc0B2lG}F`twN z0agRcBbt6@W`1P_Ds9qpObaET=7hQ5H4GirI-S`MfJI*q*)S0wlOJjndVd4(Zr=3~ z2GD<}x+zu0aH`~--pK-*i+LI~8r3+anoB)&7$qp}B2ZZqCgu2M#^ixjg^JVe#|_7S zX5*-AqvMxzNe#wC<#g9^&ckiF4Yph^2!r;a+S{~V*Oda#nf{H8`FGy{mBWghKc)7P zTIzZJY-Qh=9N?Y~d2DrS@GyPtZ)>0D+Z9An41}ujZ42R4eTv#s$05DbrtHOhKMpDPNc(Fe%4tQe8eWWbG|!t#Pc=p`4MJmW!HDBPRKOHWPD!XWpA`4U;J@4(y;sJ7QKIHB26Ao_qhQg=z@!#Tk$nvDC zhtDAe@+R5;tQUt$cawRzc~s*o^Nciw*~NJNF)F+3(l6VX#(Jc|LzuUN+QFGi2h={qJ-#Ci9)g ziF_aZRo)hPK0v>o$a$s*N!w9yut>d9G~Kb;|6`5-(TH4K)-D*hTrq*UPrHCpx?+(v zi6sF03>}`ZhD-ibB>WtklS5#WpHTsd)MpN@cf_0@nPm!Us89IOQaLMUKA)WOd#wys z*!aq~I>M;WsQ|>sW6-!Eor~uFzQ{rW-Zr_u`^456o%nD2H=-M8_3ifOY_7-NX5{>L z%it|4Bl+#-QYmcUY4=k~svtq_I0})x0w=|%6FsVT=YFGOxuxe+aL0z{o_}7rCcG`P!^-h=Jta-M?r}$eU!tc~*pE8<*U`7QC=~ zJlDz3pS6C%d!{<{r;{n0xg@*o67CZW{9mQ_)W6f>Kf)P2BJb)zP=l^Il`YuPoh<-= zE>E{VT44~cA=Uwjg08gzT|Yk#30w|;jDPKp*S&?MyYqk9Q#GToAjXT$wgivA@{5My zK8%=fBXwDIPX4WoR}<{=^Xy74jxX?Td!=0nP~QJ%W>ss46o%$crX= z#C;}x_Ga2M-wC)$*Mce5Z)J$^pbhc>K{p+7A&UZ5!@kIGf zAg*#|L3&nJgb?J(0#EM6cM6N!zEYE{95nx~et>(b@gSn^P6m6?nquFhW^fjy!s`ct zojMu;8`N zRk@FHZq~Aunv;h2(?Y}r8}dOr>^z`yb)q`FLF-dXIg`1j&9rAJ%9B$Jq&au|Lkj872L8~0hu=|x{?@Nf`eFL%+EaAKC=vVG2-zmLlt`s+N6=Z*Hd z44ST5BqJ#3&h0>|VC3{rXNjGiW!;u;%9G2Tnlf|P+|KM4*%eIKE6Mco8-aH*ZV9N3 zzwHH9>l?ff!hZ`}7&>RrHF1&lOc*}yDDmWXX$J3-MIai|eZqxAT?IT6yhF5>?z^;H z#ZrUz?Du9KG02^-(uU1X6OzFGXWw02&056pGp-%`Hx9@m@<7LRRm>frae?2Gs}$FKHegVd(LQN?UV$F*l)eTJv zm|U}f0yD7~FQ|NxS=+!L39q5Ak5Zgqzt~0yPhC=~9pNCE#bGA)Qq{r`XhBa{w;Qi+tA4K5&j!6nE4A(yWjvl|pvre7@`;=M5SU zF6WOx$ zO)R)JY)mk?tc=Qz$F<+x>iu{PApRN3;Wic9NAs}RSwh78wi$u;SotQpNKQB05|C!< z!r>D*6+8WS&5eU$Z#J>Tc*n7OyWtER-<5eZ{ppceLKj*~1$$x^Q@`dK@>xj7VKrX# z(5Ckw%r?siWbO4i6mnA6$1yKt^ly1>l{It*__XNfM_gx`U?<}~+}?MfTmuma7kazt zIJupe&~A_x4x0Qr<|HKPR{L49#4WL%YuEoWoSqAFqB(=^?wn@gq@^AW^j1YC?<1{K zYVsmdlh}Fk|1IZuCJ=sd4&w6jIlad`)C4ET^w#$Z%xO^d+aGN)0Jd$m4hwxKBD?GG zE9iHd!w;bj_P1|%%bV-}h$s)#2kZXtk9$&*Fh|Czz!JGmUavMtV(*UWQj(M9uM z%XX~F*An!xLLCwGHcG?^L^gBLs>qW#}p2v@%1e;vdB>{R%#lNcCF7(|LN56kB_6n7~! t-KnC&7(|>EXftL!9Om02QL&S;@>Xbylnt?5{h~~!siyOy>bZ63{{iZv#Vr5; literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI 2/images/screen2.png b/tools/Docs/Modern UI 2/images/screen2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fccd41c85c2b8ed59c1782801027f273245ccbb GIT binary patch literal 18437 zcmb5Wby%Chw=No_NTJ0Fw79#JQe4~OF2x-R6n6XT(7>qh1}|NWUrpo z#nD#WnQy_8anQP6*KU~iguWo%CU!MISJ7}g0CT!)9hAP0$i$#li0s_bGUKEmS~!0oiIK_JD;Q_sVj>6qp0EnGs* zhVc3h+o`Id1v=x?py^bt+Jhfo*7Gp=M_DGZr{|Mi>a?-4T7xbB;)j=too2mNi4%S~ zTwHjQlP3Q6J}ZS;zWqqpk+HVc*5#tJp6kIG-HTNw8R3Cf@@GNAT=1WYu5XetXL0vrsQBm*0oLPoWat3mVy#@lw{- zK8WkmhuW+7%~t@1K541o`qp+|F}E)gb4_KcLY>R|j={*Uo1ERo>R1=_1XY|qU*6oj zL%#JE2}rlnO1yKbzgxwRm3C{r*AYUeVs!>b#Mry>)O_zZdmK$a$1Fx<3#ErlwuVC0 z$fc>GVBrm~#8k5h#%;}$KOw=vS4b4G$Bf$4DycDwV9^#f<4gOM%4_Wv8lFF=SVQ z8>xx;!6(mgg6vf|)T{nh)g?x8-X4hq)k)2qB^r%B|65qVXf(*sgbK{Ie94{@AQo~n z@n`QSZ*|K2$3@K82S6nRHwlooj)ceu57}bV%H)4j!D#DH8$A51= z2knINglnB5e_$KeW;BvdzcV|oU@eIGZWVl~-7J{hxviz?hPy6svO(X>&EoEN zknqthV=*}du~<3CaDQ4g{qnk;EFp~|2{oF9*1(pz)0DDA%cK6{zm~YP%KmtcH=s6}Q;gK9)A`$0u)`A%dl?rw6go;E1|~oTB;p6WRVu}Kpf$}W5uhsQ znW-|{j%k`Us^e)DTrw13!>4H6zdBh_04qnoX(}yw$7WSm@P>*C`C9ms z1K~QxiCuX;RsZPzu_c;@gZ*IP@G)}O4dNg>SG9Tb!4l@PA&rH#G6&h6$+s*o$mR!e zFtZ7YV*sd~DG^pAR`hFLhnzbKd#iMnE?+K3W@6$;{{Iatdg9P=LYD_)|yBfZ`v!Iu0mkS%M7Fv zqyV+&$e;KWNHzdW)QR~0Z;)O~o)1xmN(QH^Ehf~wD~#^wUY?xIX{O(Eta%8=rNK_O zb#DilG|_}tb}R~kO^0Javt>_ z>)@9I$iM+%(U^Ornavxui@BvGC;
e?YPWN_&^zLmh&ePE2D5 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 M07*qoM6N<$g8wU>6aWAK literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI/Changelog.txt b/tools/Docs/Modern UI/Changelog.txt new file mode 100644 index 0000000..d827d77 --- /dev/null +++ b/tools/Docs/Modern UI/Changelog.txt @@ -0,0 +1,268 @@ +NSIS Modern User Interface +Version History + +1.81 +* Added MUI_TEXTCOLOR (2018-09-09) +* Added MUI_PAGE_CUSTOMFUNCTION_DESTROYED (2017-04-03) +* Added support for MUI_UNCONFIRMPAGE_VARIABLE (RFE #511) (2016-12-30) + +1.8 - August 9, 2007 +* Uses the new language files +* Updated documentation +* Although MUI_DIRECTORYPAGE_BGCOLOR and MUI_STARTMENUPAGE_BGCOLOR are documented as interface + settings that apply to every directory page or Start Menu folder page, they were actually + implemented as page specific settings. They have been changed to interface settings. +* MUI_LANGDLL_DISPLAY now also reads a previously saved language from the registry if the + installation is silent. +* InstallOptions macros have been moved to a separate header file (InstallOptions.nsh). + The MUI_INSTALLOPTIONS_* macros are still provided for backwards compatibility and insert the + equalivent INSTALLOPTIONS_* macros. +* Added MUI_CUSTOMFUNCTION_MOUSEOVERSECTION + +1.78 - June 8, 2007 +* Added MUI_STARTMENUPAGE_BGCOLOR +* Added MUI_DIRECTORYPAGE_BGCOLOR +* Added MUI_LANGDLL_ALLLANGUAGES + +1.77 - April 27, 2007 +* Added MUI_FINISHPAGE_CANCEL_ENABLED +* Added MUI_FINISHPAGE_REBOOTLATER_DEFAULT +* Block unsupported languages in the language selection dialog +* Cancel button no longer enabled by default on the finish page +* Reduced flicker caused by MUI_HEADER_TRANSPARENT_TEXT + +1.76 - September 23, 2006 +* Added MUI_ABORTWARNING_CANCEL_DEFAULT + +1.75 - April 1, 2006 +* Added show function for the start menu page +* Added MUI_HEADER_TRANSPARENT_TEXT for transparent header texts + +1.74 - September 4, 2005 +* Fixed compile error when checkboxes are used on multiple finish page pages + +1.73 - August 6, 2005 +* The checkboxes to run an application or show a Readme file can now also be used on an uninstaller + finish pages or multiple finish pages + +1.72 - November 27, 2004 +* Fixed state of Finish page Cancel button when both an installer and uninstaller page is included + +1.71 - October 14, 2004 +* The selected language is only stored in the registry when installation was successful + +1.70 - February 6, 2004 +* Improved documentation +* New Init custom function for Welcome and Finish page + +1.69 - January 7, 2004 +* All uninstaller pages work without installer pages +* Fixed top text on uninstaller license page + +1.68 - November 24, 2003 +* New settings for extra space for title and text on Welcome and Finish page. +* Improved handling of verbose settings. Define MUI_VERBOSE the set the Modern UI verbose level (1-4). +* Language file string for uninstaller reboot information +* Setting for folder validation in leave function +* Fixed finish page text settings for multiple pages + +1.67 - November 18, 2003 +* Support for uninstaller Welcome pages and Finish pages +* Improved and changed text settings +* ID for Start Menu Folder pages, easier to use multiple pages +* Renamed a few settings +* Default header image +* Support for uninstaller abort warning +* Setting for 3 line text on Welcome and Finish page + (NOTE: New settings have been introduced in version 1.68) +* Language file backwards compatibility: English for missing strings +* Support for different uninstaller header image +* Language selection dialog not displayed if installer is silent +* Cancel button on Finish page when there are options +* Full RTL support + +1.66 - October 7, 2003 +* New system for page settings and custom pages +* Support for uninstaller components page +* Support for multiple pages of the same type +* New position for interface settings +* Changed macro and setting names +* Updated language system, new language files and settings +* Removed MUI_BRANDINGTEXT. You can use the standard BrandingText instruction. +* Removed MUI_PRODUCT and MUI VERSION. You can use the standard Name instruction. + +1.65 - July 16, 2003 +* New page configuration system, no different system for installers with custom pages +* Default windows color for the license text background +* Example script updates (new format, user variables) +* Improved registry storage for Start Menu folder +* ReserveFile macro for StartMenu plug-in +* Option to always show the language selection dialog (even if a language has been stored in the registry) +* Checkboxes on Finish page can be used to call a function +* Support for custom leave functions for Start Menu Folder, Welcome and Finish pages +* Support for a link on the Finish page +* New macro to get Start Menu folder in uninstaller +* Options to disable bitmap stretching +* Components page description box info text: always displayed + when mouse is outside box, disabled style + +1.64 - April 27, 2003 +* Support for license page with checkbox or radiobuttons to let the user accept the agreement or not +* Macros for finish headers don't have to be inserted anymore +* Language preference stored when installation has completed, no problems anymore when the users selects the wrong language +* Header text for aborted installation +* New macros: get language for uninstaller, delete shortcuts +* Language specific fonts +* Welcome/Finish page INI files can be modified in pre functions +* More texts can be customized + +1.63 - March 9, 2003 +* Support for a bitmap in the wizard header +* New defines to change the components page interface +* MUI_SYSTEM inserted automatically +* Single macro for language selection dialog +* Removed page description in window title +* Easier to customize resource files +* New system for custom functions +* Start Menu folder registry key automatically written +* New InstallOptions macros that do not remove the return value from the stack +* Support for custom pages before the finish page +* Renamed Start Menu page defines +* 'Do not create shortcuts' checkbox can be removed +* 'MS Shell Dlg' font for header title +* RTL support +* Documentation updates +* Minor fixes + +1.62 - February 2, 2003 +* New language strings for Finish page +* Possibility to let a Modern UI Function call your own function +* No problems anymore when using both 'Run program' and 'Show Readme' on the Finish page +* Default state of checkboxes on the finish page can be changed +* Welcome / Finish page compatible with custom DPI settings +* Converted Install Options INI files to use dialog units +* More ReserveFile macros + (NOTE: Some of these macros have been removed in later versions) +* Background color can be changed with a define +* Support for multilingual branding texts +* Start Menu / Finish page window titles also work when using custom page commands +* Language files should be inserted after inserting the MUI_SYSTEM macro + (NOTE: The MUI_SYSTEM macro has been removed in version 1.63) +* Define MUI_MANUALVERBOSE if you don't want the Modern UI to change the verbose settings during compilation + (NOTE: This setting has been changed in version 1.68) + +1.61 - December 5, 2002 +* modern3.exe UI without description area + (NOTE: This setting has been changed in version 1.63) +* Added define to show uninstall confirm page +* Added language string for finish page title and continue to uninstall +* Define for parameters for the application to run on the finish page +* Minor fixes + +1.6 - November 18, 2002 +* Welcome / Finish page +* Automatic ask for reboot on finish page +* Create no shortcut option on the Start Menu Folder selection page +* Customizing GUIInit functions easier +* Minor font / UI changes + +1.5 - November 11, 2002 +* New language file format +* Language strings can be changed in the script without editing languagefiles +* Start Menu Folder selection page +* 'Click Next to continue' and 'Click Install to start the installation' texts automatically change to the page order +* Install Options macros updated. MUI_INSTALLOPTIONS_DISPLAY is the standard macro now. + Use MUI_INSTALLOPTIONS_INITDIALOG and MUI_INSTALLOPTIONS_SHOW if you want to customize dialog controls. +* No more writing window titles & abort warnings to Install Options INI Files +* Compatible with updated paging system +* Renamed macros and defines +* Minor fixes + +1.4 - November 4, 2002 +* Uses new NSIS Page command +* Macro System updates (smaller) +* Macro System a lot easier +* Modern UI Language Files load NLF language files +* Renamed macros and defines + +1.3 - October 27, 2002 +* Easier macro system for basic scripts +* New MultiLanguage system using Modern UI Language Files +* New directory structure (header/language files in Contrib\Modern UI) +* Small bugfixes & typo corrections +* SetPage function should be set using defines +* Different NextPage/PrevPage/FinishHeader macros for install/uninstall + (NOTE: These macros have been removed in version 1.4) +* Interface settings can be defined (for example, MUI_ICON), no parameters for MUI_INTERFACE anymore +* New Install Options macros to read/write IO INI file value + +1.21 - September 30, 2002 +* Temp vars set in Modern UI header +* Currentpage & Install Options vars should be set using + parameters of the MUI_INTERFACE and * MUI_INSTALLOPTIONS macros + (NOTE: The MUI_INTERFACE macro has been removed in version 1.3) +* MultiLanguage.nsi uses the new language strings + +1.2 - September 22, 2002 + (NOTE: All macros mentioned here have been removed in version 1.4) + +* Lots of macro system updates & fixes +* InstallOptions support in macro system +* Added Modern UI + InstallOptions example (InstallOptions.nsi) +* MUI_NEXTPAGE_OUTER integrated in MUI_NEXTPAGE +* No hard-coded function names anymore (you should give + MUI_PREVPAGE a parameter with the set page function name + (for example, MUI_PREVPAGE SetPage) +* Examples use ReserveFile for faster startup + +1.19 - Semtember 19, 2002 +* Renamed some macros +* Custom code can be used between page start/stop macros + (NOTE: These macros have been removed in version 1.4) + +1.18 - Semtember 13, 2002 +* Uses the new Sendmessage string option + +1.17 - Semtember 10, 2002 +* Win9x font weight bug fixed (font of title in white rect) + +1.16 - Semtember 6, 2002 +* Change text 'Scroll down' on license page to 'Press Page Down', + because the RichEdit control has focus by default now + +1.15 - Semtember 4, 2002 +* Multilanguage example: changed LangDialog to LangDLL::LangDialog (using the DLL name is now required) + (NOTE: A new macro for the language selection dialog has been introduced in version 1.63) + +1.14 - Semtember 3, 2002 +* Small grammar fix (thanks eccles) +* UI files updated by Justin for better RichEdit usage + +1.13 - Semtember 2, 2002 +* Added 16 color icons + +1.12 - August 30, 2002 +* Verifying installer & Unpacking data dialog has no titlebar anymore + +1.11 - August 29, 2002 +* Finish header for uninstaller can also be set using MUI_FINISHHEADER + (NOTE: The MUI_FINISHHEADER macro has been removed in version 1.64) + +1.1 - August 29, 2002 + (NOTE: All settings mentioned here do not exist anymore) + +* Header file with macros, it's now very easy to use the UI in your scripts +* Added the modern2.exe UI, with an other location of the Description frame, for installers with a lot of subsections (thanks rainwater) +* Updated example scripts +* Added Multilanguage.nsi example (Multilanguage & LangDLL) +* Fixed background color issue with some custom XP themes +* Removed WS_VISIBLE from black rect for inner dialog (fixes display issues) +* Changed size of description area +* Example script: Added instructions for the user on the Description frame +* Auto sizing branding text +* Used modern.bmp for the checks (thanks rainwater) +* Using the new NSIS version, descriptions work using the keyboard and you can give descriptions to subsections +* Correct font size using High-DPI fonts + +1.0 - August 26, 2002 +* Initial release \ No newline at end of file diff --git a/tools/Docs/Modern UI/License.txt b/tools/Docs/Modern UI/License.txt new file mode 100644 index 0000000..04eea9b --- /dev/null +++ b/tools/Docs/Modern UI/License.txt @@ -0,0 +1,10 @@ +Copyright 2002-2023 Joost Verburg + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any distribution. diff --git a/tools/Docs/Modern UI/Readme.html b/tools/Docs/Modern UI/Readme.html new file mode 100644 index 0000000..461fe7c --- /dev/null +++ b/tools/Docs/Modern UI/Readme.html @@ -0,0 +1,1160 @@ + + + + NSIS Modern User Interface - Documentation + + + + + + + + + + + + +
+ +

+ [Expand all]   [Collapse + all]

+
+

+ Introduction

+
+

+ The Modern UI provides a user interface for NSIS installers with a modern wizard + style, similar to the wizards of recent Windows versions. It is based on the basic + user interface that is provided by the NSIS compiler itself and extends it with + more interface features and pages.

+

+ All standard NSIS pages (such as the pages to select components and the installation + folder) are supported as well as a number of additional pages. The welcome page + allows you to provide an introduction to the installation process, while the finish + page provides a way to let the user decide what steps should be performed after + the setup wizard is closed (for example, whether the application should be started + immediately). A finish page can also be used to ask for a system restart is necessary.

+

+ Open/Close section + Screenshots

+
+

+

+
+
+

+ Script header

+
+

+ The settings for the Modern UI should be inserted in the header of the script file. + It's important to follow the same order as the items below. For example, + interface settings should be defined before you insert pages, because the pages + depend on the interface configuration. It may be useful to look at the + example scripts too see how this is done in actual script files.

+

+ Parameters are given in this format: required (option1 | option2) + [optional]

+

+ 1. Header file

+
+

+ First of all, add this line to the top of script to include the Modern UI:

+
+!include "MUI.nsh"
+
+
+

+ 2. Interface configuration

+
+

+ Then, you may want to use interface settings to change the look and feel of the + installer. These settings apply to all pages.

+ The interface settings provided by the NSIS compiler itself (such as LicenseText, + Icon, CheckBitmap, InstallColors) should not be used in Modern UI scripts. The Modern + UI provides equalivent or extended versions of these settings.

+ Examples:

+
+!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
+!define MUI_UI "myUI.exe" ;Value
+!define MUI_INSTFILESPAGE_COLORS "FFFFFF 000000" ;Two colors
+
+

+ Open/Close section + Interface settings

+
+

+ Open/Close section + Page header

+
+

+ MUI_ICON icon_file
+ The icon for the installer.
+ Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico

+

+ MUI_UNICON icon_file
+ The icon for the uninstaller.
+ Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico

+

+ MUI_HEADERIMAGE
+ Display an image on the header of the page.

+
+

+ MUI_HEADERIMAGE_BITMAP bmp_file
+ Bitmap image to display on the header of installers pages (recommended size: 150x57 + pixels).
+ Default: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp

+
+

+ MUI_HEADERIMAGE_BITMAP_NOSTRETCH
+ Do not stretch the installer header bitmap to fit the size of the field. Use this + option only if you have an image that does not use the whole space. If you have + a full size bitmap that fits exactly, you should not use this option because the + size of the field will be different if the user has a custom DPI setting.

+

+ MUI_HEADERIMAGE_BITMAP_RTL bmp_file
+ Bitmap image to display on the header of installers pages when using a RTL language + (recommended size: 150x57 pixels).
+ Default: Non-RTL bitmap

+
+

+ MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH
+ Do not stretch the installer header bitmap when using a RTL language to fit the + size of the field. Use this option only if you have an image that does not use the + whole space. If you have a full size bitmap that fits exactly, you should not use + this option because the size of the field will be different if the user has a custom + DPI setting.

+
+
+

+ MUI_HEADERIMAGE_UNBITMAP bmp_file
+ Bitmap image to display on the header of uninstaller pages (recommended size: 150x57 + pixels).
+ Default: Installer header bitmap

+
+

+ MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH
+ Do not stretch the uninstaller header bitmap to fit the size of the field. Use this + option only if you have an image that does not use the whole space. If you have + a full size bitmap that fits exactly, you should not use this option because the + size of the field will be different if the user has a custom DPI setting.

+

+ MUI_HEADERIMAGE_UNBITMAP_RTL bmp_file
+ Bitmap image to display on the header of uninstallers pages when using a RTL language + (recommended size: 150x57 pixels).
+ Default: Installer RTL header bitmap

+
+

+ MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH
+ Do not stretch the uninstaller header bitmap when using a RTL language to fit the + size of the field. Use this option only if you have an image that does not use the + whole space. If you have a full size bitmap that fits exactly, you should not use + this option because the size of the field will be different if the user has a custom + DPI setting.

+
+
+

+ MUI_HEADERIMAGE_RIGHT
+ Display the header image on the right side instead of the left side (when using + a RTL language it will be displayed on the left side instead of the right side).

+
+

+ MUI_BGCOLOR (color: RRGGBBR hexadecimal)
+ Background color for the header, the Welcome page and the Finish page.
+ Default: FFFFFF

+

+ MUI_HEADER_TRANSPARENT_TEXT
+ Set a transparent background for the header's label controls. Useful for custom + user interfaces that set a bigger header image.

+

+ MUI_TEXTCOLOR (color: RRGGBBR hexadecimal)
+ Text color for the header, the Welcome page and the Finish page.
+ Default: 000000

+
+

+ Open/Close section + Interface resources

+
+

+ MUI_UI ui_file
+ The interface file with the dialog resources. Change this if you have made your + own customized UI.
+ Default: ${NSISDIR}\Contrib\UIs\modern.exe

+

+ MUI_UI_HEADERIMAGE ui_file
+ The interface files with the dialog resource IDD_INST that contains a bitmap control + and space for the header bitmap.
+ Default: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe

+

+ MUI_UI_HEADERIMAGE_RIGHT ui_file
+ The interface files with the dialog resource IDD_INST that contains a bitmap control + and space for the header bitmap on the right side.
+ Default: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe

+

+ MUI_UI_COMPONENTSPAGE_SMALLDESC ui_file
+ The interface files with a customized dialog resource IDD_SELCOM with a small description + area.
+ Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe

+

+ MUI_UI_COMPONENTSPAGE_NODESC ui_file
+ The interface files with a customized dialog resource IDD_SELCOM without a description + area.
+ Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe

+
+

+ Open/Close section + Installer welcome/finish page

+
+

+ MUI_WELCOMEFINISHPAGE_BITMAP bmp_file
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).
+ Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

+
+

+ MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
+ Do not stretch the bitmap for the Welcome and Finish page to fit the size of the + field. Use this option only if you have an image that does not use the whole space. + If you have a full size bitmap that fits exactly, you should not use this option + because the size of the field will be different if the user has a custom DPI setting.

+
+

+ MUI_WELCOMEFINISHPAGE_INI ini_file
+ InstallOptions INI file for the Welcome page and the Finish page.
+ Default: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini

+
+

+ Open/Close section + Uninstaller welcome/finish page

+
+

+ MUI_UNWELCOMEFINISHPAGE_BITMAP bmp_file
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).
+ Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

+
+

+ MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
+ Do not stretch the bitmap for the Welcome and Finish page to fit the size of the + field. Use this option only if you have an image that does not use the whole space. + If you have a full size bitmap that fits exactly, you should not use this option + because the size of the field will be different if the user has a custom DPI setting.

+
+

+ MUI_UNWELCOMEFINISHPAGE_INI ini_file
+ InstallOptions INI file for the uninstaller Welcome page and the Finish page.
+ Default: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini

+
+

+ Open/Close section + License page

+
+

+ MUI_LICENSEPAGE_BGCOLOR (/windows | /grey | + (color: RRGGBB hexadecimal))
+ The background color for the license textbox. Use /windows for the Windows text + background color (usually white). Use the /grey for the window background color + (usually grey).
+ Default: /windows

+
+

+ Open/Close section + Components page

+
+

+ MUI_COMPONENTSPAGE_CHECKBITMAP bitmap_file
+ The bitmap with images for the checks of the component select treeview.
+ Default: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp

+

+ MUI_COMPONENTSPAGE_SMALLDESC
+ A small description area on the bottom of the page. Use this layout if you have + a lot of sections and don't need large descriptions.

+

+ MUI_COMPONENTSPAGE_NODESC
+ No description area.

+
+

+ Open/Close section + Directory page

+
+

+ MUI_DIRECTORYPAGE_BGCOLOR (color: RRGGBB hexadecimal)
+ The background color for the directory textbox.

+
+

+ Open/Close section + Start Menu folder page

+
+

+ MUI_STARTMENUPAGE_BGCOLOR (color: RRGGBB hexadecimal)
+ The background color for the startmenu directory list and textbox.

+
+

+ Open/Close section + Installation page

+
+

+ MUI_INSTFILESPAGE_COLORS (/windows | "(foreground + color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)")
+ The colors of the details screen. Use /windows for the default Windows colors.
+ Default: /windows

+

+ MUI_INSTFILESPAGE_PROGRESSBAR ("" + | colored | smooth)
+ The style of the progress bar. Colored makes it use the MUI_INSTALLCOLORS.
+ Default: smooth

+
+

+ Open/Close section + Installer finish page

+
+

+ MUI_FINISHPAGE_NOAUTOCLOSE
+ Do not automatically jump to the finish page, to allow the user to check the install + log.

+
+

+ Open/Close section + Uninstaller finish page

+
+

+ MUI_UNFINISHPAGE_NOAUTOCLOSE
+ Do not automatically jump to the finish page, to allow the user to check the uninstall + log.

+
+

+ Open/Close section + Abort warning

+
+

+ MUI_ABORTWARNING
+ Show a message box with a warning when the user wants to close the installer.

+
+

+ MUI_ABORTWARNING_TEXT text
+ Text to display on the abort warning message box.

+

+ MUI_ABORTWARNING_CANCEL_DEFAULT
+ Set the Cancel button as the default button on the message box.

+
+
+

+ Open/Close section + Uninstaller abort warning

+
+

+ MUI_UNABORTWARNING
+ Show a message box with a warning when the user wants to close the uninstaller.

+
+

+ MUI_UNABORTWARNING_TEXT text
+ Text to display on the abort warning message box.

+

+ MUI_UNABORTWARNING_CANCEL_DEFAULT
+ Set the Cancel button as the default button on the message box.

+
+
+
+
+

+ 3. Pages

+
+

+ Insert the following macros to set the pages you want to use. The pages will appear + in the order in which you insert them in the script. You can also insert custom + Page commands between the macros to add custom pages.

+

+ You can add multiple pages of certain types (for example, if you want the user to + specify multiple folders).

+

+ Examples:

+
+!insertmacro MUI_PAGE_LICENSE "License.rtf"
+!insertmacro MUI_PAGE_COMPONENTS
+
+Var StartMenuFolder
+!insertmacro MUI_PAGE_STARTMENU "Application" $StartMenuFolder
+
+

+ You will need the page ID for the Start Menu folder page when using the Start Menu + folder macros. The folder will be stored in the specified variable.

+

+ Installer pages
+ MUI_PAGE_WELCOME
+ MUI_PAGE_LICENSE textfile
+ MUI_PAGE_COMPONENTS
+ MUI_PAGE_DIRECTORY
+ MUI_PAGE_STARTMENU pageid variable
+ MUI_PAGE_INSTFILES
+ MUI_PAGE_FINISH

+

+ Uninstaller pages
+ MUI_UNPAGE_WELCOME
+ MUI_UNPAGE_CONFIRM
+ MUI_UNPAGE_LICENSE textfile
+ MUI_UNPAGE_COMPONENTS
+ MUI_UNPAGE_DIRECTORY
+ MUI_UNPAGE_INSTFILES
+ MUI_UNPAGE_FINISH

+

+ Open/Close section + Page settings

+
+

+ Page settings apply to a single page and should be set before inserting a page macro. + The same settings can be used for installer and uninstaller pages. You have to repeat + the setting if you want it to apply to multiple pages. Example:

+
+;Add a directory page to let the user specify a plug-ins folder
+;Store the folder in $PluginsFolder
+
+Var PLUGINS_FOLDER
+!define MUI_DIRECTORYPAGE_VARIABLE $PluginsFolder
+!insertmacro MUI_PAGE_DIRECTORY
+
+

+

+ All standard texts in the user interface are loaded from language files, which are + available for all languages supported by NSIS. So you only need to define these + texts if you want to change the default.

+

+ If the parameter is a text that should be different for each language, define a + language string using LangString and use $(LangStringName) as value. For a license + text in multiple languages, LicenseLangString can be used. Refer the NSIS Users + Manual for more information about installers with multiple languages.

+

+ In all text settings, the doublequote character (") should be escaped in the + following form: $\"

+

+ Open/Close section + General page settings

+
+

+ MUI_PAGE_HEADER_TEXT text
+ Text to display on the header of the page.

+

+ MUI_PAGE_HEADER_SUBTEXT text
+ Subtext to display on the header of the page.

+
+

+ Open/Close section + Welcome page settings

+
+

+ To add a newline to any of these texts, use \r\n instead of $\r$\n.

+

+ MUI_WELCOMEPAGE_TITLE title
+ Title to display on the top of the page.

+

+ MUI_WELCOMEPAGE_TITLE_3LINES
+ Extra space for the title area.

+

+ MUI_WELCOMEPAGE_TEXT text
+ Text to display on the page.

+
+

+ Open/Close section + License page settings

+
+

+ MUI_LICENSEPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_LICENSEPAGE_TEXT_BOTTOM text
+ Text to display on the bottom of the page.

+

+ MUI_LICENSEPAGE_BUTTON button_text
+ Text to display on the 'I Agree' button.

+

+ MUI_LICENSEPAGE_CHECKBOX
+ Display a checkbox the user has to check to agree with the license terms.

+
+

+ MUI_LICENSEPAGE_CHECKBOX_TEXT text
+ Text to display next to the checkbox to agree with the license terms.

+
+

+ MUI_LICENSEPAGE_RADIOBUTTONS
+ Display two radio buttons to allow the user to choose between accepting the license + terms or not.

+
+

+ MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT text
+ Text to display next to the checkbox to accept the license terms.

+

+ MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE text
+ Text to display next to the checkbox to decline the license terms.

+
+
+

+ Open/Close section + Components page settings

+
+

+ MUI_COMPONENTSPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_COMPONENTSPAGE_TEXT_COMPLIST text
+ Text to display on next to the components list.

+

+ MUI_COMPONENTSPAGE_TEXT_INSTTYPE text
+ Text to display on next to the installation type combo box.

+

+ MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE text
+ Text to display on the of the top of the description box.

+

+ MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO text
+ Text to display inside the description box when no section is selected.

+
+

+ Open/Close section + Directory page settings

+
+

+ MUI_DIRECTORYPAGE_TEXT_TOP text
+ Text to display on top of the page.

+

+ MUI_DIRECTORYPAGE_TEXT_DESTINATION text
+ Text to display on the destination folder frame.

+

+ MUI_DIRECTORYPAGE_VARIABLE variable
+ Variable in which to store the selected folder.
+ Default: $INSTDIR

+

+ MUI_DIRECTORYPAGE_VERIFYONLEAVE
+ Does not disable the Next button when a folder is invalid but allows you to use + GetInstDirError in the leave function to handle an invalid folder.

+
+

+ Open/Close section + Start Menu folder page settings

+
+

+ MUI_STARTMENUPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_STARTMENUPAGE_TEXT_CHECKBOX text
+ Text to display next to the checkbox to disable the Start Menu folder creation.

+

+ MUI_STARTMENUPAGE_DEFAULTFOLDER folder
+ The default Start Menu Folder.

+

+ MUI_STARTMENUPAGE_NODISABLE
+ Do not display the checkbox to disable the creation of Start Menu shortcuts.

+

+ MUI_STARTMENUPAGE_REGISTRY_ROOT root
+ MUI_STARTMENUPAGE_REGISTRY_KEY key
+ MUI_STARTMENUPAGE_REGISTRY_VALUENAME value_name
+ The registry key to store the Start Menu folder. The page will use it to remember + the users preference. You should also use for the uninstaller to remove the Start + Menu folders. Don't forget to remove this key during uninstallation.

+

+ For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu + folder:

+
+!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
+  Delete "$SMPROGRAMS\$R0\Your Shortcut.lnk"
+
+
+

+ Open/Close section + Installation page settings

+
+

+ MUI_INSTFILESPAGE_FINISHHEADER_TEXT text
+ Text to display on the header of the installation page when the installation has + been completed (won't be displayed when using a Finish page without MUI_(UN)FINISHPAGE_NOAUTOCLOSE).

+

+ MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT text
+ Subtext to display on the header of the installation page when the installation + has been completed (won't be displayed when using a Finish page without MUI_(UN)FINISHPAGE_NOAUTOCLOSE).

+

+ MUI_INSTFILESPAGE_ABORTHEADER_TEXT text
+ Text to display on the header of the installation page when the installation has + been aborted.

+

+ MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT text
+ Subext to display on the header of the installation page when the installation has + been aborted.

+
+

+ Open/Close section + Finish page settings

+
+

+ To add a newline to any of these texts, use \r\n instead of $\r$\n.

+

+ MUI_FINISHPAGE_TITLE title
+ Title to display on the top of the page.

+

+ MUI_FINISHPAGE_TITLE_3LINES
+ Extra space for the title area.

+

+ MUI_FINISHPAGE_TEXT text
+ Text to display on the page.

+

+ MUI_FINISHPAGE_TEXT_LARGE
+ Extra space for the text area (if using checkboxes).

+

+ MUI_FINISHPAGE_BUTTON text
+ Text to display on the Finish button.

+

+ MUI_FINISHPAGE_CANCEL_ENABLED
+ Enable the Cancel button so the user can skip any options displayed on the finish + page.

+

+ MUI_FINISHPAGE_TEXT_REBOOT text
+ Text to display on the finish page when asking for a system reboot.

+

+ MUI_FINISHPAGE_TEXT_REBOOTNOW text
+ Text to display next to the 'Reboot now' option button.

+

+ MUI_FINISHPAGE_TEXT_REBOOTLATER text
+ Text to display next to the 'Reboot later' option button.

+

+ MUI_FINISHPAGE_REBOOTLATER_DEFAULT
+ Sets the 'Reboot later' option as the default option.

+

+ MUI_FINISHPAGE_RUN exe_file
+ Application which the user can select to run using a checkbox. You don't need to + put quotes around the filename when it contains spaces.

+
+

+ MUI_FINISHPAGE_RUN_TEXT text
+ Texts to display next to the 'Run program' checkbox.

+

+ MUI_FINISHPAGE_RUN_PARAMETERS parameters
+ Parameters for the application to run. Don't forget to escape double quotes in the + value (use $\").

+

+ MUI_FINISHPAGE_RUN_NOTCHECKED
+ Do not check the 'Run program' checkbox by default

+

+ MUI_FINISHPAGE_RUN_FUNCTION function
+ Call a function instead of executing an application (define MUI_FINISHPAGE_RUN without + parameters). You can use the function to execute multiple applications or you can + change the checkbox name and use it for other things.

+
+

+ MUI_FINISHPAGE_SHOWREADME file/url
+ File or website which the user can select to view using a checkbox. You don't need + to put quotes around the filename when it contains spaces.

+
+

+ MUI_FINISHPAGE_SHOWREADME_TEXT text
+ Texts to display next to the 'Show Readme' checkbox.

+

+ MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+ Do not check the 'Show Readme' checkbox by default

+

+ MUI_FINISHPAGE_SHOWREADME_FUNCTION function
+ Call a function instead of showing a file (define MUI_FINISHPAGE_SHOWREADME without + parameters). You can use the function to show multiple files or you can change the + checkbox name and use it for other things.

+
+

+ MUI_FINISHPAGE_LINK link_text
+ Text for a link on the which the user can click to view a website or file.

+
+

+ MUI_FINISHPAGE_LINK_LOCATION file/url
+ Website or file which the user can select to view using the link. You don't need + to put quotes around the filename when it contains spaces.

+

+ MUI_FINISHPAGE_LINK_COLOR (color: RRGGBB hexadecimal)
+ Text color for the link on the Finish page.
+ Default: 000080

+
+

+ MUI_FINISHPAGE_NOREBOOTSUPPORT
+ Disables support for the page that allows the user to reboot the system. Define + this option to save some space if you are not using the /REBOOTOK flag or SetRebootFlag.

+
+

+ Open/Close section + Uninstall confirm page settings

+
+

+ MUI_UNCONFIRMPAGE_TEXT_TOP text
+ Text to display on the top of the page.

+

+ MUI_UNCONFIRMPAGE_TEXT_LOCATION text
+ Text to display next to the uninstall location text box.

+

+ MUI_UNCONFIRMPAGE_VARIABLE variable
+ Variable in which to store the uninstall source folder.
+ Default: $INSTDIR

+
+
+
+

+ 4. Language files

+
+

+ Insert the Modern UI language files for the languages to want to include.

+
+!insertmacro MUI_LANGUAGE "English"
+
+

+ The standard NSIS language files are loaded automatically, there is no need to use + LoadLanguageFile.

+
+

+ 5. Reserve files

+
+

+ If you are using solid compression, files that are required before the actual installation + should be stored first in the data block, because this will make your installer + start faster. Include reserve file commands for such files before your sections + and functions:

+
+ReserveFile "ioFile.ini" ;Your own InstallOptions INI files
+!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions plug-in
+!insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
+
+
+
+

+ Script code for pages

+
+

+ Some pages allow you to show additional information or can be used to get user input. + Here you can find the script code to use these features.

+

+ Components page descriptions

+
+

+ The Modern UI components page has a text box in which a description can be shown + when the user hovers the mouse over a component. If you don't want to use these + descriptions, insert the MUI_COMPONENTSPAGE_NODESC interface setting.

+

+ To set a description for a section, an additional parameter needs to be added to + Section command with a unique identifier for the section. This name can later be + used to set the description for this section.

+
+Section "Section Name 1" Section1
+   ...
+SectionEnd
+
+

+ After the sections, use these macros to set the descriptions:

+
+LangString DESC_Section1 ${LANG_ENGLISH} "Description of section 1."
+LangString DESC_Section2 ${LANG_ENGLISH} "Description of section 2."
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+  !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
+  !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+

+ For the uninstaller, use the MUI_UNFUNCTION_DESCRIPTION_BEGIN and MUI_UNFUNCTION_DESCRIPTION_END + macros.

+
+

+ Start Menu folder

+
+

+ Put the code to write the shortcuts (using CreateShortcut) between the MUI_STARTMENU_WRITE_BEGIN + and MUI_STARTMENU_WRITE_END macros:

+
+!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
+  ...create shortcuts...
+!insertmacro MUI_STARTMENU_WRITE_END
+
+

+ The page ID should be the ID of the page on which the user has selected the folder + for the shortcuts you want to write.

+

+ The variable which contains the folder and the page ID are set as parameters of + the page macro.

+
+
+

+ Language selection dialog

+
+

+ If you want the installer to display a language selection dialog (see the the MultiLanguage.nsi example), + insert the MUI_LANGDLL_DISPLAY macro in the .onInit function:

+
+Function .onInit
+
+  !insertmacro MUI_LANGDLL_DISPLAY
+
+FunctionEnd
+
+

+ This macro can also be used in the un.onInit function.

+

+ Open/Close section + Settings for registry storage of selected language

+
+

+ To remember the user's preference, you can define a registry key. These defines + should be set before inserting the installation page macro.

+

+ MUI_LANGDLL_REGISTRY_ROOT root
+ MUI_LANGDLL_REGISTRY_KEY key
+ MUI_LANGDLL_REGISTRY_VALUENAME value_name
+ The registry key to store the language. The users preference will be remembered. + You can also use it for the uninstaller to display the right language. Don't forget + to remove this key in the uninstaller.

+

+ For the uninstaller, insert the MUI_UNGETLANGUAGE macro in un.onInit to get the + stored language preference:

+
+Function un.onInit
+
+  !insertmacro MUI_UNGETLANGUAGE
+
+FunctionEnd
+
+
+

+ Open/Close section + Interface settings for selection dialog

+
+

+ To customize the language selection dialog interface, use these defines before inserting + the MUI_LANGDLL_DISPLAY macro.

+

+ MUI_LANGDLL_WINDOWTITLE text
+ The window title of the language selection dialog.

+

+ MUI_LANGDLL_INFO text
+ The text to display on the language selection dialog.

+

+ MUI_LANGDLL_ALWAYSSHOW
+ Always show the language selection dialog, even if a language has been stored in + the registry. The language stored in the registry will be selected by default.

+

+ MUI_LANGDLL_ALLLANGUAGES
+ Always show all available languages and don't filter according to their codepage.

+
+
+

+ Custom pages

+
+

+ If you want add your custom pages to your installer, you can insert your own page + commands between the page macros. The InstallOptions + documentation provides information about creating custom pages using InstallOptions.

+
+!insertmacro MUI_PAGE_WELCOME
+Page custom FunctionName ;Custom page
+!insertmacro MUI_PAGE_COMPONENTS
+ 
+;Uninstaller
+!insertmacro MUI_UNPAGE_CONFIRM
+UninstPage custom un.FunctionName ;Custom page
+!insertmacro MUI_UNPAGE_INSTFILES
+
+

+ Use the MUI_HEADER_TEXT macro to set the text on the page header in a page function:

+
+LangString PAGE_TITLE ${LANG_ENGLISH} "Title"
+LangString PAGE_SUBTITLE ${LANG_ENGLISH} "Subtitle"
+
+Function CustomPageFunction
+  !insertmacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
+  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "ioFile.ini"
+FunctionEnd
+
+
+

+ Custom functions

+
+

+ Interface functions provided by NSIS, like the .onGUIInit function and the page + functions are automatically included by the Modern UI and filled with code to support + new interface features. If you want to add additional code to these function, create + a function with the custom script code in the script use the Modern UI functions + call them.

+

+ Example:

+
+!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
+
+Function myGUIInit
+  ...your own code...
+FunctionEnd
+
+

+ Open/Close section + General Custom Functions

+
+

+ These defines should be set before inserting the language macros.

+

+ MUI_CUSTOMFUNCTION_GUIINIT function
+ MUI_CUSTOMFUNCTION_UNGUIINIT function
+ MUI_CUSTOMFUNCTION_ABORT function
+ MUI_CUSTOMFUNCTION_UNABORT function
+ MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION function
+ MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION function

+

+ Mouse over functions are only available when the description macros + (MUI_FUNCTION_DESCRIPTION_BEGIN) are used. When component page descriptions are not + used, regular .onMouseOverSection and un.onMouseOverSection must be used.

+
+

+ Open/Close section + Page Custom Functions

+
+

+ These defines should be set before inserting a page macro.

+

+ MUI_PAGE_CUSTOMFUNCTION_PRE function
+ MUI_PAGE_CUSTOMFUNCTION_SHOW function
+ MUI_PAGE_CUSTOMFUNCTION_LEAVE function

+

+ Notes:

+
    +
  • In the Pre function of the Welcome page and the Finish page, you can write to the + InstallOptions INI file of the page (ioSpecial.ini)
  • +
  • In the Show function of the Welcome, Finish and StartMenu pages, $MUI_HWND contains + the HWND of the inner dialog
  • +
+
+

+ Open/Close section + Welcome/Finish Page Custom Functions

+
+

+ This define should be inserted before a single Welcome or Finish page.

+

+ MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT function

+

+ This Init function is called before the InstallOptions INI file for the page is + written, so you can use it to initialize any variables used in the page settings.

+
+
+

+ Example scripts

+
+

+ Basic: Basic.nsi
+ Welcome/Finish page: WelcomeFinish.nsi
+ Multiple languages: MultiLanguage.nsi
+ Header image: HeaderBitmap.nsi
+ Custom pages: InstallOptions.nsi
+ Start Menu Folder page: StartMenu.nsi

+
+

+ Credits

+
+

+ Written by Joost Verburg.
+ Icons designed by Nikos Adamamas, aka adni18.
+ Thanks to Amir Szekely, aka KiCHiK, for his work on NSIS to make this possible.

+
+

+ License

+
+

+ The zlib/libpng license applies to the Modern UI.

+

+ Open/Close section + License Terms

+
+
+Copyright © 2002-2023 Joost Verburg
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute
+it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; 
+   you must not claim that you wrote the original software.
+   If you use this software in a product, an acknowledgment in the
+   product documentation would be appreciated but is not required.
+2. Altered versions must be plainly marked as such,
+   and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any distribution.
+
+
+
+
+
+ + diff --git a/tools/Docs/Modern UI/images/closed.gif b/tools/Docs/Modern UI/images/closed.gif new file mode 100644 index 0000000000000000000000000000000000000000..b45054ee8154b36b64d0bdbb9fe2b40d03ba1489 GIT binary patch literal 203 zcmZ?wbhEHb-oE{eQPhQI&^#bmMe?*-1zn9?~XGM zzy0|A_wT=qNe8Yzc>D3|&sQJ59l7$Xa^CUlkKQfZeSPiWJMAmZ#&_>2nt5dX(Yycu z|7So2ia%Mv0y-cPWG4fw$AZM(6iX?I32Sq-6C#$LE%7~QRI6ha$J`vZMvUW9-bR+y ujS-e6C%BTGrn;;USkW)0z)`&U-S%Y_J=qycRvoPq)%&nRCXR!V!5RQGW?{Dg literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI/images/header.gif b/tools/Docs/Modern UI/images/header.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8810d30cf58ad6ef9c0b14a8be67aabd2065e81 GIT binary patch literal 6023 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 literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI/images/open.gif b/tools/Docs/Modern UI/images/open.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fff60ed5c309677255f7c0abf53a6aec2f06f0f GIT binary patch literal 138 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 literal 0 HcmV?d00001 diff --git a/tools/Docs/Modern UI/images/screen2.png b/tools/Docs/Modern UI/images/screen2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fccd41c85c2b8ed59c1782801027f273245ccbb GIT binary patch literal 18437 zcmb5Wby%Chw=No_NTJ0Fw79#JQe4~OF2x-R6n6XT(7>qh1}|NWUrpo z#nD#WnQy_8anQP6*KU~iguWo%CU!MISJ7}g0CT!)9hAP0$i$#li0s_bGUKEmS~!0oiIK_JD;Q_sVj>6qp0EnGs* zhVc3h+o`Id1v=x?py^bt+Jhfo*7Gp=M_DGZr{|Mi>a?-4T7xbB;)j=too2mNi4%S~ zTwHjQlP3Q6J}ZS;zWqqpk+HVc*5#tJp6kIG-HTNw8R3Cf@@GNAT=1WYu5XetXL0vrsQBm*0oLPoWat3mVy#@lw{- zK8WkmhuW+7%~t@1K541o`qp+|F}E)gb4_KcLY>R|j={*Uo1ERo>R1=_1XY|qU*6oj zL%#JE2}rlnO1yKbzgxwRm3C{r*AYUeVs!>b#Mry>)O_zZdmK$a$1Fx<3#ErlwuVC0 z$fc>GVBrm~#8k5h#%;}$KOw=vS4b4G$Bf$4DycDwV9^#f<4gOM%4_Wv8lFF=SVQ z8>xx;!6(mgg6vf|)T{nh)g?x8-X4hq)k)2qB^r%B|65qVXf(*sgbK{Ie94{@AQo~n z@n`QSZ*|K2$3@K82S6nRHwlooj)ceu57}bV%H)4j!D#DH8$A51= z2knINglnB5e_$KeW;BvdzcV|oU@eIGZWVl~-7J{hxviz?hPy6svO(X>&EoEN zknqthV=*}du~<3CaDQ4g{qnk;EFp~|2{oF9*1(pz)0DDA%cK6{zm~YP%KmtcH=s6}Q;gK9)A`$0u)`A%dl?rw6go;E1|~oTB;p6WRVu}Kpf$}W5uhsQ znW-|{j%k`Us^e)DTrw13!>4H6zdBh_04qnoX(}yw$7WSm@P>*C`C9ms z1K~QxiCuX;RsZPzu_c;@gZ*IP@G)}O4dNg>SG9Tb!4l@PA&rH#G6&h6$+s*o$mR!e zFtZ7YV*sd~DG^pAR`hFLhnzbKd#iMnE?+K3W@6$;{{Iatdg9P=LYD_)|yBfZ`v!Iu0mkS%M7Fv zqyV+&$e;KWNHzdW)QR~0Z;)O~o)1xmN(QH^Ehf~wD~#^wUY?xIX{O(Eta%8=rNK_O zb#DilG|_}tb}R~kO^0Javt>_ z>)@9I$iM+%(U^Ornavxui@BvGC;
e?YPWN_&^zLmh&ePE2D5 z-IwI+*R=|=_p4AU?WPgDEyt-LcWM3FDsO%Zv_VTGxwd6@X))vY{#6nRX!p&3y1XNU<8PJE|ssyGg>dVH5WVOQ&9Ayr^89?4T>@u@?ZhaV_Sda z_2u!@y_VifIsoh9o1!DpygkR8bS;a-RW)Fgtq#TIfKUU%_DQb7e|Aj69QU^0^cTAx zb?_7YWTjU^diyAgu|fBjB;AAA>kqa;P|mZ#W!B(bF_>?0^g`{nuQC5VBNx5#>)vkq z*fC&pBrZ2RSS{krEBOfMI|jbxDsfa)b!T%m`I=6WL5-hkQj|fX_d{KApaf%xJY76^ z4KMG=OVEI5!YkI&L(HzB%H=vs0Q=Kj@NL(~06RPMEjE5rG0sDk|Iw08;V8^#-r@Yc zB!&GlxaH-?knDh$*#%W^o%)_f?XX8yGP7Y{ptQUUkjD<_eUqcfq0GFkAP$h2soO!a z{@Js-w4r8T*KIT5cNqHVv{_d-bwMaxNv1VhG-OZdBu`Iqi|s2CEs1^@lJTMz;j@(F zgqz693*;|GZsg`p-vKZ5h{tssvTyXt>>Pu=a#~#umqy zaM2G8Mch8fj(u{$;nZu+3O^v0$Exz$L*Cr9TWok1fNSLfAyRxZt;c~Apq4PDV{9NP zkoT|~p*DMJkNFy{@nT)0@bRO9|IPgyHyp9gau~&4Cu2**k{40Go~0N_nZFX?v>Pwh zxmq-TsP=AEG@!gIPW+LU$u=AlqLdSaAAs~d@JA%!rC~cVZV#pYt*yN+A2>LtC&cr3 zGS}(XX($0;0txvnoN>72HeyDdIB~P>v+j>)UFW~sbSjOH7IK;AT0Cd}+#_MihpV-(V&xX3UpR#joq2#PcxXwO{w1H#!xnKX7 zHFi)untx!R1;~k-*mSb>tguKFd>28T^I`&i+9eM9zVN5-TCz4WewadG-+4{1S;+i5 zTCJ#waQJ}t)=rtXO^61p^ zOeMhzS3s=?aq;X?wTj1dmIe{BUwUi$Kv!R0Mi z*b1wFwq9&-N$e%H??aI`3pfIJsiY@xnL)lXqG)@Si*My}`VRG1&O5E56kWcm3)~y6EGo} zLc`rvhXjzdz~^=`U;($GL(s5M%3lz+1KrG7sM9n@bmPv3x+j6xp(S|o;yLL80!UuW zlFnD#B*Q6m=jp~Ido0v%@0;yT|ELLD@J@#on z?x@a7;xN}U+djUjv?8T!v(Yghx?|R}WV=7RJRxi!s4dM>bIg8qWVGctbj%WG&M-B} zP5jHw`{>lbt$8Zp_5v(Q`nba8Fm)#oR6^1+G5$U$9tu@u21strex{y~Jw+R%)6y$1 zXkY~|35OMw{GgMCP#fbuU-d9wWQ%OfPlFVELCNk01Tth7vjB81z+DWZ=&wkJ(nVz? zB)$|aJod_(e|==4r(=;&^I1=%{o*(p%l{X4Q!2G3FR>=2PI|(`g1><_{J}g2`9-~V z9IvRT2($lWmPgX8gF;r5xeD2z>gE=tp@9nk_qrLg7TwsLZgY`PP3(`f_4V*is&p(| zofxnZ=qC*37LSi{^}T>#+=qmrcpB~iH|wMHA^e1&0)SWh%UF~3eubKuW9Ga}%N34m?EV%D>h5Oy#V9LLK^=%qL zfm{S2cTs%kc?M?XrdW9UgTXNI`CWU(1&BH?@Yu#cfn<;#m06+-$L(CdLjok|VML%V zg_Yx8Oot?XfnN6W0EY?3kMZj%2rL|~(yIGRCdo14mR2rh+8n*M)Fhjy*`so9RS)8y zF?Hd4a_`Y`bC5tfP|?!fYT}R_k|l__;mpaF<)exQ5Rc2irxf1A&nBA)#$#b!=3swB z-!*s9SSL90d+)obPEz+XpN+b1s(lznD=~b<(v< zGT0^*Qi|Mkks4QAZ07Cmd0x-cK3azzKqn7sqAUa3ETm{dt$9L7bmA3S_^?f1hvI(2 zRl6E;k6Q0+wFF)Bok!ObO;$F!*WiAH+}pg61yP}5aIwma=x53}Zxh(|e&u9~H;-OgnG+1}VKg^NF zPe97bSRnbakT@n^0Ph?%H%*PuhjL0&q=F$sOXrey7&NMvqSp%}&L7Zp{ zwk*n)N=Xc3`K+{wCY)MK6mKj7uS3AkQT~peCNE#|rd;dJbaMeh^##n|XFinN1(sH7 z>G$ogyrS{fCn=&MUvY=v3)eGnPToLI_{eLv z@$Fl|?raZcfkNhddA;qeUb|>ZfRz_tAKHg{w@{~oz7LkH*OV6(BD^shZT{ea4EABK z6feE83@g5Ph0j0s7K$@c!GEfcS?FZ2h?v%2^NvK}>#+YJ@=#SR>}UtP$R;!CdhvP| zv-0gKvJ!3q&o}(G>^O&cOWfAC-~R9({#+;Vk^s&3ss#5#N3V@?4WIL=r98&tdOYUPKlv3n}69`vv2!Jj~}P=JPupD zwQPG7Nj)wO(XYZDJ+C?8<6^fL8AdmG$}uPa;kyxk(K-U&72&fPNN26jUo3%Z^fE{o zl3)vdtnlN3o`>J=xajq`_~7#J^vbz@%WQLO#Ar-~r*MI{b(6>m2c|gk&Q4_CI@#g! zBg7%rsP#T#obsB%_q&LI#&xeEn3T^p(mx+;Qp`;eE3h*+(Qp9CA7t5Gy2DZ?zpg+9 zY*sKD$sB`P8pQ5;X^kj>Hmn~hkH@TKjG$hx)%$?Q^Aieof@+)v8(#;f1(%rw4k zJDkqH8IAU07hO0H_yIqp`~A*Bgh2LlP4o@Z9@!fw=&?Qq$N+e=CF`eFlf?o>C#B&m zA-+eswJGTiG(hlDdD~UFw~&_Cg~-iat%FeiDQ{Ya5xdCU$E{syN>ANOQ~=V>&fd`h z>ecay7zIh;v27OR?PT@S5KG>l$aJVlI7lV#g?UTmA#LlhkWP2EN@Vf$<I-VzpzyO;fVo&**H!eD*-U~l_&*cN+QD=0q}+In-e?#;Kv zwCuLY$7kO*)Ycu&g|48h+va#7GUvXSS?(0T8fBTxd%S;$7Erpq((L)m5)uf_WQ{uA zK3A|Jz4Wu)X1Lj&@mSHm3&<1CL(}|um_yHZesOqc62k7yhNkUwekVj+x#K_3aGVp0 z#P+y15@OU1@@=$>!Bpz~r$=RfKVvmh54Id{t1RSy_nfqEog>Mp)#qa5)>t=JZ}0_{ zgUfgYN_*Y7ycW@lh`)xz*t=Jt)MVQr=DH;d%ayIUO5*KtIA&36V;`$OeAURnd)>S6 zkJM+y@rs~!5gANXr}=E74pAnbjpjU@JE*i)C2|+#!|!7Z@ZE;keexjz8`9jw6!-Z? zGTaD=4Pbe^nTowUpIp7{2|NC4cQ&KtU%@&P6T`Q?jegvT4)D86S&L=7DC6MtaCMc* z2xVQk4+#M1GPK_67h5&#lOu#^>B_%V!ENrz9Zq<@Qd=Z zO6W2=Dr=a-yvNt5F82>6ma^c?xy)GdIa&&gDYVieX!GMmMnxXuyAdmmvc_W-2f&7J zjI%CNoxp6Xx7lE7yF$(3Qp0T*uT5a>&2`Li%Xvcv*XB1SuPr>c)43nNe(eMPE+60P zh3BoK0!&8~eSDK9aB?_1;TC`81jYY|@Jb*DltMHCg7(2PF-kS~tJswl6@GOKNC;U# zKPrC2?ajg@=5n%j3Nj$w;Sce`0`dBF2L=8m(ye}dLa2V2H;0uOx?qmmouhgX}S1Xf1itgJ&UHOrboif9yY*9Oy*yC;r%MR>8m1$ z7+-2-LrnN`7h>3sn&HL7f(-0nceu3qDE{sskeG=0C8glp%E`IlLezfn=j;oc3jYd@_ykCo0vZNHY%@tQ;3U-F)OQ z>~{GsPKA3IoaXJ}a}D;-Yt`9?egsKV;f6PK`?d>p4OYP~##eN;J#o;V1&UKGpbTwZ z+#VgG1Nhw!iedY#12H1c0D$NAkRA|1$31N5kPJ+FU!Kek1z_~vd;#W*O~Wxzk?V!+ zRl&5l7}M}3N%mNADi!bsQN1v7pg4Q1-v87g8#KUf4Mar_)TL-Fg5hDHS_7AIpWG^f zIYsGG1d9I;9sXZ-iX79h|0D7dVqJ18g%L9#o=E`a<;r>T8HjWT_R#X;?XF%^tAO)B z4h0}fzV--sAr{P5~NK0Wqxj9tI zRm~I@ut9{bzB-7wae9pHSmV7y{o&PckS@xHKr&~rKrrv#H0gkRod(r)XC%bmGizKh)u(qxkuNE?HT(jH%> z>|6Avix(kAg6x%@F#R%GYk1VP#|8UVLck9Wb!#_Fj#ck2OEA2=cJ&YovwNNyuY*pz%w`%%&eZei)cPJlTSt6x6mUL(*GJO=!$piT@Ym&KfvGz|ArM7qPb%pyI= zt!7{a4$sh6nJ5tR4ReEAV&|Eq+L9yme|W=gK=!6&OvTzK zhg}+;*H0ywBc3LaC%#6L-e36OW<3r4UH`g&Pw0=Ba5{1TeA6mPGoGB{B{0V4b}qol zp6HuLG?7el9nr21ag9$jTO|_}nB^DJqNWC+qz)};oG$`qxy|z<1T}j!$sm?x+zJp8 zsy{jZoO$?ATu{R`-{C9&Gnlggw>BDJkb?Z%yyNy)@)(!!is?i^ECMvkcjm+ip^TujgU}_ywn)F&`^Qx zOI6^Dan;4|E=g;CTC6W6Crj1~m_eG<2IqyCOPkVWh zJ}3LUcP6*5VPg6vT{LVs<%`m@G0`n?^H*9tVqDMPv%GDavp3UJjCvr)l+d7w$8kjD zTRRQ7R?(C&4Vq-0X+w2&sbQ4fJ3>0!Pfguu9b}VzfkVINGH|^`NK6W%5 zo|7Y)u6Yv<^?9FlSkT#IPn%cY9BLCPvL!zT0ms$?&o)lQ8~V3~qVMXChTx)_s-VIW zLyeig`bJYf-?JX=VCR~-=EBaHAr+T6RF9hSuHShHC zOqFo-&wN)!Nngi`@$FL{iPbtW@cwV?$sARS9}!lGCx~vEzcN*XZT{BhGDWhLu95Sz z)F5E+s{<&Oq`SH;x{^>bj*gihf`g5X8;^6XL8Q|mIw5DZ7ie{m=*9#2u8B7YmpS37 z7S<*^ip*s)k@WqEk=|e1_B)Irw@>xE06q6o3U}%vGfTL59b@i~0fyASFrAsS%2OcI zD{&J?r9?Mxz~(71;9IVE9el1x!1pF0rSa3KY*1bbmmA%Wm2{0CsoL7ymhPth&$F=s zdFs}xAfzU;&pt0H%(^YD{gLtE@85i2LBOw((JP~N5V3$`7g3-((<{1Saax!3#g92% z6qu8faNXTR(J6=Z;19dbljgH>Q^rbv`7Cx^Fk42fBBTV#1Rd}K#X&|MuZ$=`=r$Cj zv}Mpm#-7pGXl!uWx4BGlDGvBY=-Qu2avC2RRHDeA>do-bjozbji^uWe(1bqlxG9~r ziOvig!5O*G?JYhpEvgc;d|K`byCG`@N?Dl+yT9YjG}|AX++`in^&%Xwo}{lfS}Zo0 zbhEf{mZ-W+Q%-(JVZLQ-Y$rRB!|KQD6!#HJ9AXLqL4LRCbbCR;9jUVhSG^V+hNRH~ zfVR}D9wXY}1^#!3@7P!BAfmrJ(q#olnJwcHHukFJEQX~X2g2ffaSun~lhPtOnUP*L zFVjG#zyx7nMdR@FM#{Utr{d(mN^4{@9qy1M`ED)w+8ZGm>#JVOz2TG$h=PAKe@=49 z&xDJ!uMu%p57%D`_R?!6g_F;-nNW%ZZa5NBUl*c$5#`4V=lyaG63@^P^}JU-n*$6= zu6fP0XgX}-f2;sYV){X@+d4UO60Ctr+zFUBn-x3}z~2|p-vY5^Ud!zjp=I15;u1kH zy=RJM*D}_?Qtlr3&`in9vxq(tVUg)8WFaA=+@(|z7E%&_*OL5Oo3_q2>tA(>J}#)^ zYNX*Vt~9uV@IiPc54dI|*D1FTPGoXSWKeq{k8#aGY;JLrnGSotN8<0U=D+_}ZD!;V zbv_dI#yps0{(=@4PikWWwipc4&^V5=ob%>6$HD#qU|X5<1ePaK>~Cqyx%}_%0;Cc7 zb1EXRq9}kPxwwWB4?i0ZY|psq%&&e2$%>D)FmZjAtO3<=g6ADiDkLioX8H5nq zQR_EvKoEg+a7)@qBDLOH#t~x1xP9VT&96FPG;XH*^_!npXWvZ63W)BW{NNJZO`UQu z7=aNrZ@m{HX4>3Kv?O!bEqkLxM;y@yEx!M74?mF6Jbd*f&JXvn56+HG2}(A91F*2L zcpieB0cMenrz4bLBg=h2YzHjcC|_!eLv~76udN0wHISwR)lcD+M(jyddF){d%F0n< z^ST{-H#e$Hp;t8)>OSXEYq@L(0mzYL;lVh75TvJjK|M`b`%Joiry?gde^o)%7 zqbI38IBez|QQ7HG=s>GAGyDAEh6<${4IsAQUm6j1)z|UWwZN6L4{3$0~(@+09evek5ug zC8A2Kt_bwI7H3oFe68w+0IH5kGoPW-9 zZoaX_B4ACL{kXfkZGcRiI#`9!VaE;dgKmg<@ddro{Z-6YvQ=95yRG3re3$}lAYwsB z+^4#98lLXVC%kp%p_;~Mp!$l0^LW#%WGdvEVc9@X5HX7eOg_fO*%UgiKM-~77vL9Q zt90K|&#d>K^VX7*U~M1f?&FHPNL3%Z5|&m~;WS(NlZr<{nA|5swfh4W2Q$!yf=oj9 zJcy)>vsdOc+lPZEUlu~^lN18Z??WJHCiV9KbSTTZu!<`iIx9;4B=nDwT= zOjkq0itDM`&YjT_RogVb9GVDsBhg^KA+j!UkY#y|oL=xL+h1NS(7AmL=mAdnw0t?e zah$mgKyZq?$)BFrt8A4Lp(lrBEVB62sM+GMHV+G9+G%GC3n>ka3$$!7&_wtb8`w38 z$xN<1jb5YgKV$-dMr=6QGV!QvWSLpJEK6$2A{!p7!pH7@h3gqWi)la#q6DTz@Dk(e zE$0+ckF+@Mk;jTkWEl)q4ewxVcID;$*|Ib7_KRtAhu%K)4UeaQCmGmQB-BnJyJ!&g z32_o$YN9eDbGO3i6N;|h*2Zme9R&TDe!e?bUD)4|Bz7XPwz%@3s~!YPDnMVJ@_g;9 zPsiMg5(w6oMOj;ZS$K_2mU+pdK%ZV5qU#ljU{Lr*ccz)n-e>hbwPgI%i9F|X6Ktn3 zGe(E>%egix|B1^6e6C@0-H-A_k-o~aSH4#nVToIz!Nrj9w!W_abN(Mnbj|b?_=`Hz z>%UmeX}yogn@&kWjwj+Y*{^H(TjK~$W`DTJhV%^Y2y(cUeR*A$bM%S6Lg8vBek|p(bf=X3?2t|7QTejSYohgBFu4 zzTuPU7cUZJTkqU^?G7&kPT3I6J4isOgeVu6cS*k0FZI0ngv94{YPz|D#k_8x9%tot zU5gXVo+%UwLRG88vSZwg!n@x%Uh|*}JgY!k zB&}RbqTP8(PS%;@LL$tI4k)zifq7BY2y=XTZI|OwBj$2<^~L`e)6^|{%5Ej@$HDI2 zgX~kkd?w4S82pbr)cw&s7=#~H6D7|REiYpU)P`bSQlQ@q6vtZ}FrG1*Bt*oWM0~b3 z4g9f-$DW)nB%7x5I#XE5#&KZ-n!Z7Q-(=5Rd^T_Fme))R?>z2`-(pj z$ea8+WmbB^bLd?uoC4LQYp7ddc)v^_?4xJR6~~;lW>5xl+HZS^#&RWDAWmfsOH-o@{HG;FF=`Bljg0th^2}f&JIfc_QY>(2+OjP^As?6!XD#%pT zV&-=_5ME)4-Or+_A@jiFR_U~?kjW39bV1wib3`ac=d-AM@81eC!9D|;wG)>Y%%vDY zL)BpdieE!reA4^c(zvJBSBpgPyDJ1rVQ5Q)Qb>y`;mWhYr|}rR&)d?p^H>LNr#&C{ zxb%PHNPs*X>(pvP!relrdy%!K<{c?47_WZ3LTRB7Z z{_@rP*|w7CSi{P^E_hDN$K2R&D20`sWv$QarV?NWs&4>4Z6}qKK?XQvBxv{I5HFt` zrD!!b2HUu!P3sE$hT(d(ihQI&$(pxurd|^U#kCFXHlUaYoYH?(bTTn@|Iv|jq2=oE zcA1(yYhM}2e--TJ#8VJONc00Gy7G=SCiCVjY383^5VRf2eF zTCUtAx@IWegoe_9ZGd}j4?clu>MrhHMPcni(aYNv+c+XqGhr^L#w zS<&a+v*a6AmRZi@zt}Mdv)4rQXLW777I>m!7MY?`op?!>axTn(T`J&5hvS31MV4{Y zM;YE<>=D;8U^;~*!?pK#+TzB-O|lsE8zU5Nlv|EWhm~rl=6_c#(%lCXM~_dCt5~A_ z#GU#$USOr}?GFBUIiZOD$=X!T)P?{bA7Aw2<|;!|OW711J3Rqe7{33`5hWzv+;{G# zsU^O`uQM;t%xL8ndf8EV)*4H(d^_i;P;O@ad7jN}g0Z3|Jambjy(2m&l7rOO-a`}Z zv(?fX%JFUdCw*58nm0uK1G?Iw)x^^S3Nk1Wy9BBO{WRAZTREB ztr-`UdZIF(cT3=syAiECP4%OC=!XejyOYE#3%Q0|&F|R^XOLaO>~EZGi3A9Xd- zK7Kek`=M=R>%wDqQIbLGOHOLNZkOqESl;9-&$*kZKv;|VZRnlWcz~dKwZO0Ha`PI$ z?~SePzsgl*%ib;5T}Uq1kIv968{(;=_ZIj5JlVmE0C3~);-mQyzdnNIddMnv1djX~PK~s=JLbr*+!cmK&D$r{9 z=u*NPxlY+K7UvU7A5hPC4rQWdle-VN4yB_Fle>J)ZHm;|nN6af@^w{Ni@o$xb}mC- zHqucln*VyPv92+KPx#BF;inM<@qLU0B@rQW@pJdv^hmX-)%}YSl!_LXT1(-@^KMg| zZaQ|mf|W2m6_E5xQd(+YLGS!)~;6crnY&XXKz z29hRzhB3~VZTqL{+eHuC_Gr}S^k^9zPSH-&u}(4byr^-?tIUzY`&ICvr8THHQirun zvJ;Jlh=Cu>J@(m^u(?UzVrSg8vb`yYN+YetX_lGeEjS8K@;leV=DuDkSwq3ls#O>b zO|%_*gSB33YtPD-^NznuV_j1o-Qre_mN zrqX`DKy-tUB%y}N7h5^D(rYJ*Si?%#e?O~cXjJgZH;Kx9oa-3fg$TV7*{B}tP#?g5 z?%6}k@E%-kQNrjmT_Qo(|6Q7oqE;-T?ZOo2TW0nA&RLp)24kCUO1rUy(N2!01(D2b|yst#@E8QB2I{RgvU?5 zc2r4@%OC?l<0z8^5JcpR71C!24J^GgY&L}S+j_N6O)g^vVoYWIe?k9e1knLWPHhT6 zm9UctEp`B`+6O7(=?c_X^OP8~YahaPV<5tTXB1CH2jH4SPeZaf;7xLOBXSHT)>lCc zP60Lp0tWpfxgD-`GQI_k5c@`^i@Mm4ul+vszBRfi2I~)}62e#=n9}_F^!tee5DMFg zI|&T96Ydm(4RS8g8FPXKa9h&YlMB+Of z**mxYt{N?EP7sP&knWRSJRHV#`nvBliz(er+Ba&g)O{U|go}is7xFrKT=6JQy&qkv z8lBuTKR~JyjvO}!JFF}|68pQ?Q}lHT*Z41nJf40yxsH~8gf*`STQ(BUA6|6oyN_P9 z-*Yv59@byu^86AYR@Ll&6JPB1Z98<3-g>*GATyIe`f32RzP6#Ew$|+ighv`Gid2+Q zpHpBhfP#dW4Q<0s^DN!!O%@T!)6I#5;|u|phaeo$wzsnn!wjv<_OUbvT zk$a;$9^OfVAlkx5q=yzI4GAxwG4|8~tB03Xx{%_?#+k{@y{Y7@61{eOvxq-Uzj_Xj z{@N_mCHg5(iDwj8rOrbBbZ}{^%cYcBiW91O*tyipG-^pqBRR3OaR9)lGprz^Ej2^R zyNt}JPG7^G-IdIT`(r4%-{Z>TQ2|lfs72!<4jH-bR_d017=@IB>y6u+(jZZ*%2{H; zR4*^I&v;IJ(@Zopa*9E%mf{-dzDF@HG=9?`E<<i$mp!f#3PVDyKQ>Mq&BV^D5~EnyGS;#OXUl-7+MO}1$B6AQciFyi{-ATo z!xb@Sj@vgpil-h;ZfRkh>0i{7b_Xi?|3BbvNQAf-gh9zke2M36&Uf@HKbGyYyib-o zIUb$;^NuS>k6Es@BStNbz3&e#jRb4pp*2k9yhl3;)*_e{iOpWAyaSkhGX{%Zx_c$v zvk|Rd;I-WWf>D!ZwnfwL2m7NtLP;bOQ_*&h7>rP!eVDCGzNETYYP`E+-Lh}L9Lo~* z&mJ`V>^nsxLR=|*;#=8yzll}()H3JMrD+HEm=?6HCx0NnQEpJt@03(Nc(3@-k|!t8 zJ!`c)Wy*<%*q!?{?QA?et~QM9j0kOd-tESPvPV9c-SQSvfL1*P9fdR9(3nyFBnTEBwcbv%vwIjdC_yy0vzS3E~yMwdd$NFwlmIv;n z8(2Ste9lX8cI+9=KCxxty0_Z7^{xAgwcLXCD<6zHy$<_ZJ1(a(gTR&Q7xz0yi2G7i zSe)9@w#ui18A=Nmw=N&)G(94pkv}dn91cL<#Oj5ISUuqk0vZ0{%s)&*tneq$!v!Hw z3+JEY9~S+$HpCnu+F}uNg+QgQr`||U`si#p|K{)iv?2OD;Tez(2e4(_?T>m!X9Xln zYz2w=ZY^c@1T9`(bRMWDHz)G24r@VGcpoF1zjGqcquR$$PxSvmse9|kv__3Y(Z^L{ zF(aVc@$bg}15=+6=vn>+IR1T{sLtouW}s2@)SvRMlJ#*h8C1!{*}iE;X#l)0d~B}X zI;n)*k8fXIcDT2RuZSZs$F8tMtZ+U&@cx6XaRp37R##Ln_l)i|9j?R9$?ktM(u|mq zhwjL6Hcq3jjl_h6g#TW|h~K{UyE8^5%{kX`h00k1#JZic1yg%Gngy@fGw_U?s(cvO zk7cD!&|3a5Igwt?({nzdn(=6KR*Yubvf-D;#Zr6yI*aRi@0U2Cvny-Ij;%s>3k57t z6TmYwpz^!O*hasGUV|ObN=IYomK1%#`uTQ?ImC8lF-wK2*nL*1{|e!Ksg}`OS-V2P zW(!N3s{y2X7Xx)=f+bLE=A8){ZX@HYS23(lETE@Ca z5~&Pbe*)EM6~^<2OYEXa>G!8x3^U_%2zb$5vUxYbZ= zgBfby_~^W%hrrJ9rSSDcq?yG-7Z$`om5Ze>oAyd14$ItZZT{{%nTIXboygdA);j#M z5e?m>{eBGj_=UL7@oydrbxETY9mZ~XhW=Ep@aNo zja+wSmtr^J>*QwtQd_i!%r=e!jtYN55(G5)EbM#l4hl_1`olxC8lm2nSL9XoFYlu| zb}^lQDR@bE#HukIidsg~_~citC6JYtcWW4a0btaTZ#QM@3oN6j2Bw> zOtOq^>Y!gzKYKzs8btPMX)2nBO0`qGRt{9jS73pAzRXN7$X{LKO7J&rNu<+vt}uE- zF|!w12M%$+P2cmai1CU}F8TP&5m*0Z1H#!)>in#SxVi8=PgX0*J?=L6Iy(>Dxnr=@l$q>RQbbk>pya{9Y;uvW68aLno*SS@|%@)ptudKd4`yD3PYu{L2q1|>Y z?Qtw1e6<->>2USH?M0r}@Tm5QJk7Cf`Hm4Q>B}sM{T|)6yOU?v`Ia#`lKr3yD0Tvrk3DV%GzrCS-C27arsF^hG}*G-!M} zx^h=$4dT=1$YfjgOj=E0s5ko!2mD9|jsLz9nX)8*Qa8O$k8iEk>_%*4 zh{R<@yq!;w_n7fg!$&-Z1h8t0O0RpIE{DO8x^6(@_IH_tNG6CRy#iZmoy3dWdj1hI z{EzGQ{l_V%$>?AdacXU7LPBKhPSOx)9LvfSh?uL8D-p%z5yxRXg38VjEQcqVL&G|E zxk2n?GnMj7|9ZqONW~7`j#(EOx*T{9-mdxdFZ)(~-hcLGQ&k%nw=2>65T574TqI7e z=a7czv;G-&iM;%hjZ=&{mY{VBL^vih2-nf_*`gSdn$Nr=76GAm!QaG{ZDy{k|Hxn* zcQ``W&=ysX4W(qgzvN(ePK?k2$}>YzCrO(;5Ybw99O^96?3^&S3a8z6xnlSKP?) zau;G{A&gi>aI!`!uV`kLK|52IeGw#W9Hp<2^3ohwV{VxLXT|>{A{jE>_sdm6>Uq2L9F4(Tgips(efg2+vncH!71pLjMUdk67 z1jqrx4L(wY4h1`>5Lb#IDNI0B8?ZSQJ7Q#^rU%i#0Va~tnal{m=f7rs;*|4^!kFnJ zzDG!ic#CZ|@q9V{F-z|A^5PUcR!p)dXHK68XK2<-M0l1}`GH@u8?bYgtrHQnG|ef_ zyMR^`pa0)|F$Je{tV!xZm~t?DCMV(Gr~gEnr&Cem#ZtU%=o}FWmWA-|YsHxBH$U@G z5rNyB_sOjO{KtfA_o>hcXrDUa*Za&S$swZyx`q*_K_~!YrziRgh|+@+fWn4+pNMnS zQ&v6m+5SVGfyO`tEe8-GLLqzVCwh+>6V~*EJ4bq=leYVac5hQBq~{eV+0);a_ks&G(-C>d=Lj=qGrHtTUq0Q$Sej=kG7T~@28B=O00`7k z$0Wn~7cRxS^BoER4O{Gvh|cizQ(h9DK0h6U%r>;WUc-`5Mx@;t0{;dp_bjGI94CPI z6h37ld%sSz#d~)SF#ZO^YiD%etd}?gyp1StzJ3@L^D*wZIo8w!aUoJayV@1_VfnBx zN77^Y+`Ru8po<0MFaBsU3_mVnd`*m)8xu=|-`>T+=&N<(^tD)Li{uWlwN6-73n%jp{ z%K=7~vGF(n06q8V{{r+A)U|~az6PU=JUno+;1A5i$a6IJl1RI*b%(5Ei27a}v?d!| z$SS5?onUoX8hYODmakO*DZAG={d6k#(*M_mMFD^Diy`nQYUhW$W?K1PaSY+y<4x4^0H2u8c*^C&RlB5??iTR0=hAl3x2&k?Co=;G{pT}9EbZO11w4J5ZUcT3GypS?#>! z7t@dG_n$xlOfzDyeojdATGVp&A#TnmG1)JW09l`^ARb0IMhpUnulr^E9ULCR*FZRk zKm7ZukZ>S8t>j_1z1YuFbQ9K(LPC&%ya_}4?#FoSW5$2A*gafNh*dL%cqSFF&g8pa z?xD8y@aX2}Cwn?pywbURx=(*-l>GRhzfqVA`EDr6k;<^}^R?TXyqco3$;U%(hbyJS zeZf_nvGwwELf~C71{fuOXd(w{vRwif$azLDueIM9b9UMBN34eGK)FEI5D~|=n2bg( zQrwJQtfD0p!W zcg}ZNiT>^Pdhof;A1s`Mqc*gDGnoF+CqazyBt!yWz%c@;h6Fy279>EkH{xqRk%RHsM;B9!9R_(Cgn z^o*#Tt&Jdh_hZj~G4>Q{guZlZ_m6%EG|un5OnNA_9~-kF1f$Sp3AEz+Ac$&gqk5zGG+o_{GQh)6evO1uz89``GEItY2iIx4cD>~q@q_^1Rl8UK^37t8uDd@}I!-~Q9G`@Snf zPeiRYHkw{6{|`TT-J}^VxpZy}`%j-l5h+>f)F*82r6v05A$(d#hKI#}qAQr(7sold z6w3qT1*H}BYfl||s_Vezvt(E1l#~n)og3+YW#>B!SFc?>NB4g06GP>~cMcpHGVoiz z@d;7=Lw+^Y_;);@1!Qb=d@N$gxJ)gdw&b&I{y((I-iQD6vM%$koD|N-38A z@e98G+WPui4QJ>kB!~ja_r!PxAgnfsMXR#ag)sqztC3;mBDgmIuf$N*1qLyI6(}_4dyV580;j@{Y>-@;M^clsu&`DOuo z7}~t*ANs*_CMk2y;@eis^EZxC)Wa;WG<>hV7 z&G&Eq;R74ifA_w>{|fI~C=gDZc>B8RueaWD9eMN3g$oyb_`$IAtN-JB-~PMD@40!$ zj)T@XwA$J~|K|4(eEZSwpZa<0g$ttvKE;Ww`Ow2Z(cMlg4`47|p%^eoef?VVyDx>5kk0~kzJoE}X;L~)e<+qOL^xA5vA zf5eipv9W9&j^Zd?|LA_9S{arHNRSH`E?j)^#TGlF;E%Q|FaNlRtbcTW$Ir@?6@%*D zynkN*=%9#PdHKhSii()xq#!R3g~)sFo&Ly2imdcsCiH(KG&(vlZ{GaT3m5`gz};?I*WejzpXvRWNZLt=d#N_ne6}1%omD_ zFR~XE-_x+F^{@Ve-EPlx9{Zx=3~FR-T(6^Jv)ROEvuOeC{rAr?#aJGopwTpKbaZTV zbc~?@;oesO04xsx09YOX0I)m&0AP6l0KoD90D$EI0I)m&0AP6l0KoD90FXOORybHy zv+|*bf5LD809b=nH7loC{`T8f-G2Kj#svVtV%VCS?`ISM0IbUY2RYQsJp6n%*8l(j M07*qoM6N<$g8wU>6aWAK literal 0 HcmV?d00001 diff --git a/tools/Docs/MultiUser/Readme.html b/tools/Docs/MultiUser/Readme.html new file mode 100644 index 0000000..7e50d97 --- /dev/null +++ b/tools/Docs/MultiUser/Readme.html @@ -0,0 +1,391 @@ + + + + + + + Multi-User Header File (MultiUser.nsh) + + + +

Multi-User Header File (MultiUser.nsh)

+

Installer configuration for multi-user Windows environments

+

Table of Contents

+
+

Introduction

+

+ Modern Windows versions support multiple users accounts on a single computer, each + with different privileges. For security reasons, the privileges of applications + can also be limited. For an installer, the execution level and installation + mode are important. The execution level determines the privileges of the + installer application. For example, to install hardware drivers, administrator privileges + are required. Applications can also be installed for a single user or for all users + on a computer, which is determined by the installation mode. Installation for all + users requires a higher execution level as compared with a single user setup. The + MultiUser.nsh header files provides the features to automatically handle all these + aspects related to user accounts and installer privileges.

+

+ Note that all settings need to be set before including the MultiUser.nsh header + file.

+

Initialization and Execution Level 

+

+ Before the MultiUser.nsh file is included, the MULTIUSER_EXECUTIONLEVEL define should + be set to one of the following values depending on the execution level that is required:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Value + + Description + + Typical application +
+ Admin + + Administrator privileges are required + + Access data of all users accounts +
+ Power + + Power User privileges are required
+ (Power Users no longer exist in Windows Vista. For Vista this is equivalent to Admin) +
+ Installation for all users (writing to "Program Files" or HKLM registry + keys), driver installation +
+ Highest + + Request the highest possible execution level for the current user + + Mixed-mode installer that can both be installed per-machine or per-user +
+ Standard + + No special rights required + + Installation for current user only +
+

+ Insert the MULTIUSER_INIT and MULTIUSER_UNINT macros in the .onInit and un.onInit + function to verify these privileges. If no uninstaller is created in the script, + define MULTIUSER_NOUNINSTALL.

+
!define MULTIUSER_EXECUTIONLEVEL Highest
+;!define MULTIUSER_NOUNINSTALL ;Uncomment if no uninstaller is created
+!include MultiUser.nsh
+
+...
+
+Function .onInit
+  !insertmacro MULTIUSER_INIT
+FunctionEnd
+
+Function un.onInit
+  !insertmacro MULTIUSER_UNINIT
+FunctionEnd
+

+ Whether the required privileges can be obtained depends on the user that starts + the installer:

+
    +
  • Windows NT 4/2000/XP/2003 give the installer the same privileges as the user itself. + If the privileges of the user are not sufficient (e.g. Admin level is required is + set but the user has no administrator rights), the macros will display an error + message and quit the installer. If is however possible to manually run the installer + with an administrator account.
  • +
  • Windows Vista restricts the privileges of all applications by default. Depending + on requested execution level, MultiUser.nsh will set the RequestExecutionLevel flag + to request privileges. The user will be asked for confirmation and (if necessary) + for an administrator password.
  • +
  • Windows 95/98/98 do not set any restrictions on users or applications. Administrator + rights are always available.
  • +
+

+ It is recommended to insert these initialization macros before macros that require + user intervention. For example, it does not make sense to ask a user for an installer + language if the installer will quit afterwards because the user account does not + have the required privileges. After the macros are inserted, the variable $MultiUser.Privileges + will contain the current execution level (Admin, Power, User or Guest).

+

+ The following additional settings are available to customize the initialization:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
SettingDescription
+ MULTIUSER_INIT_TEXT_ADMINREQUIRED + + Error message to be displayed when administrator rights are required but not available. +
+ MULTIUSER_INIT_TEXT_POWERREQUIRED + + Error message to be displayed when Power User rights are required but not available. +
+ MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE + + Error message to be displayed when administrator or Power User rights are required + because of an installation mode setting on the command line (see below) but are + not available. +
+ MULTIUSER_USE_PROGRAMFILES64 + + Use $PROGRAMFILES64 instead of $PROGRAMFILES as the default all users directory. +
+ MULTIUSER_INIT_FUNCTIONQUIT
+ MULTIUSER_INIT_UNFUNCTIONQUIT +
+ A custom function to be called when the installer is closed due to insufficient + privileges. +
+

Installation Mode

+

+ As mentioned before, applications can both be installed for a single users or for + all users on a computer. Applications for all users are typically installed in the + Program Files folder and appear in the Start Menu of every user. On the contrary, + applications for a single user are usually installed in the local Application Data + folder and only a appear in the Start Menu of the user who installed the application.

+

+ By default, MultiUser.nsh will set the installation mode for a per-machine installation + if Administrator or Power User rights are available (this is always the case if + the execution level is set to Admin or Power, if Highest is set it depends on the + user account). For the Standard execution level the installation will always be + for a single user. On Windows 95/98/Me installation for a single user is not possible, a per-machine installation will be performed.

+

+ The following settings are available to change the default installation mode: + + + + + + + + + + + + + +
SettingDescription
+ MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER + + Set default to a per-user installation, even if the rights for a per-machine installation + are available. +
+ MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME + + Non-empty registry key that is created during the installation in either HKCU or + HKLM. The default installation mode will automatically be set to the previously + selected mode depending on the location of the key. +
+

+ After initialization, the variable $MultiUser.InstallMode will contain the current + installation mode (AllUsers or CurrentUser). +

+

Mixed-Mode Installation

+

+ For the Admin and Power levels, both a per-machine as well as a per-user installation + is possible. If the Highest level is set and the user is an Administrator or Power + User, both options are also available.

+

+ Usually it's a good thing to give the user to choice between these options. For + users of the Modern UI version 2, a page is provided that asks the user for the + installation mode. To use this page, define MULTIUSER_MUI before including MultiUser.nsh. + Then, the MULTIUSER_PAGE_INSTALLMODE macro can be used just like a normal Modern + UI page (this page will automatically be skipped when running Windows 95/98/Me):

+
!define MULTIUSER_EXECUTIONLEVEL Highest
+!define MULTIUSER_MUI
+!define MULTIUSER_INSTALLMODE_COMMANDLINE
+!include MultiUser.nsh
+!include MUI2.nsh
+
+!insertmacro MULTIUSER_PAGE_INSTALLMODE
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES 
+
+!insertmacro MUI_LANGUAGE English
+
+...
+
+Function .onInit
+  !insertmacro MULTIUSER_INIT
+FunctionEnd
+
+Function un.onInit
+  !insertmacro MULTIUSER_UNINIT
+FunctionEnd
+

+ The MULTIUSER_INSTALLMODE_COMMANDLINE setting that also appears in this example + enables the installation mode to be set using the /AllUsers or /CurrentUser command + line parameters. This is especially useful for silent setup.

+

+ The following settings can be used to customize the texts on the page (in addition + to the general Modern UI page settings):

+ + + + + + + + + + + + + + + + + + + + + +
SettingDescription
MULTIUSER_INSTALLMODEPAGE_TEXT_TOPText to display on the top of the page.
MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERSText to display on the radio button for a per-machine installation.
MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSERText to display on the radio button for a per-user installation.
MULTIUSER_INSTALLMODEPAGE_SHOWUSERNAMEAppend the username to the per-user radio button.
+

Installation Mode Initialization

+

+ The SetShellVarContext flag (which determines the folders for e.g. shortcuts, like + $DESKTOP) is automatically set depending on the installation mode. In addition, + the following settings can be used to perform additional actions when the installation + mode is initialized:

+ + + + + + + + + + + + + + + + +
SettingDescription
MULTIUSER_INSTALLMODE_INSTDIR + Name of the folder in which to install the application, without a path. This folder + will be located in Program Files for a per-machine installation and in the local + Application Data folder for a per-user installation (if supported). +
MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME + Registry key from which to obtain a previously stored installation folder. It will + be retrieved from HKCU for per-user and HKLM for per-machine. +
+ MULTIUSER_INSTALLMODE_FUNCTION
+ MULTIUSER_INSTALLMODE_UNFUNCTION +
+ A custom function to be called during the initialization of the installation mode + to set additional installer settings that depend on the mode +
+

+ To set the installation mode manually, call one of these four functions:

+ + + + + + + + + + + + + + + + + + +
+ Function name + + Installation mode +
+ MultiUser.InstallMode.AllUsers + + Installer: Per-machine installation +
+ MultiUser.InstallMode.CurrentUser + + Installer: Per-user installation +
+ un.MultiUser.InstallMode.AllUsers + Uninstaller: Per-machine installation +
+ un.MultiUser.InstallMode.CurrentUser + Uninstaller: Per-user installation +
+ +

Example

+ Basic: MultiUser.nsi
+ + diff --git a/tools/Docs/NSISdl/License.txt b/tools/Docs/NSISdl/License.txt new file mode 100644 index 0000000..642304f --- /dev/null +++ b/tools/Docs/NSISdl/License.txt @@ -0,0 +1,18 @@ +NSISdl 1.1 - HTTP downloading plugin for NSIS +Copyright (C) 2001-2002 Yaroslav Faybishenko & Justin Frankel + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/tools/Docs/NSISdl/ReadMe.txt b/tools/Docs/NSISdl/ReadMe.txt new file mode 100644 index 0000000..4e1a706 --- /dev/null +++ b/tools/Docs/NSISdl/ReadMe.txt @@ -0,0 +1,92 @@ +NSISdl 1.3 - HTTP downloading plugin for NSIS +--------------------------------------------- + +Copyright (C) 2001-2002 Yaroslav Faybishenko & Justin Frankel + +This plugin can be used from NSIS to download files via HTTP. +Note: HTTPS is not supported, only plain HTTP! + +To connect to the internet, use the Dialer plugin. + +USAGE +----- + +NSISdl::download http://www.domain.com/file localfile.exe + +You can also pass /TIMEOUT to set the timeout in milliseconds: + +NSISdl::download /TIMEOUT=30000 http://www.domain.com/file localfile.exe + +The return value is pushed to the stack: + + "cancel" if cancelled + "success" if success + otherwise, an error string describing the error + +If you don't want the progress window to appear, use NSISdl::download_quiet. + +Example of usage: + +NSISdl::download http://www.domain.com/file localfile.exe +Pop $R0 ;Get the return value + StrCmp $R0 "success" +3 + MessageBox MB_OK "Download failed: $R0" + Quit + +For another example, see waplugin.nsi in the examples directory. + +PROXIES +------- + +NSISdl supports only basic configurations of proxies. It doesn't support +proxies which require authentication, automatic configuration script, etc. +NSISdl reads the proxy configuration from Internet Explorer's registry key +under HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings. It +reads and parses ProxyEnable and ProxyServer. + +If you don't want NSISdl to use Internet Explorer's settings, use the +/NOIEPROXY flag. /NOIEPROXY should be used after /TRANSLATE and +/TIMEOUT. For example: + +If you want to specify a proxy on your own, use the /PROXY flag. + +NSISdl::download /NOIEPROXY http://www.domain.com/file localfile.exe +NSISdl::download /TIMEOUT=30000 /NOIEPROXY http://www.domain.com/file localfile.exe +NSISdl::download /PROXY proxy.whatever.com http://www.domain.com/file localfile.exe +NSISdl::download /PROXY proxy.whatever.com:8080 http://www.domain.com/file localfile.exe + +TRANSLATE +--------- + +To translate NSISdl add the following values to the call line: + +/TRANSLATE2 downloading connecting second minute hour seconds minutes hours progress + +Default values are: + + downloading - "Downloading %s" + connecting - "Connecting ..." + second - " (1 second remaining)" + minute - " (1 minute remaining)" + hour - " (1 hour remaining)" + seconds - " (%u seconds remaining)" + minutes - " (%u minutes remaining)" + hours - " (%u hours remaining)" + progress - "%skB (%d%%) of %skB @ %u.%01ukB/s" + +The old /TRANSLATE method still works for backward compatibility. + +/TRANSLATE downloading connecting second minute hour plural progress remaining + +Default values are: + + downloading - "Downloading %s" + connecting - "Connecting ..." + second - "second" + minute - "minute" + hour - "hour" + plural - "s" + progress - "%dkB (%d%%) of %ukB @ %d.%01dkB/s" + remaining - " (%d %s%s remaining)" + +/TRANSLATE and /TRANSLATE2 must come before /TIMEOUT. diff --git a/tools/Docs/Splash/splash.txt b/tools/Docs/Splash/splash.txt new file mode 100644 index 0000000..44fc0e9 --- /dev/null +++ b/tools/Docs/Splash/splash.txt @@ -0,0 +1,41 @@ +Splash.dll - small (4k), simple plugin that lets you throw +up a splash screen in NSIS installers. + +--- UPDATED in 2.0b0 - will break old scripts --- + +To use: + +Create a .BMP file of your splash screen. +(optional) Create a .WAV file to play while your splash screen shows. + +Add the following lines to your .NSI file: + +Function .onInit + SetOutPath $TEMP + File /oname=spltmp.bmp "my_splash.bmp" + +; optional +; File /oname=spltmp.wav "my_splashsound.wav" + + splash::show 1000 $TEMP\spltmp + + Pop $0 ; $0 has '1' if the user closed the splash screen early, + ; '0' if everything closed normally, and '-1' if some error occurred. + + Delete $TEMP\spltmp.bmp +; Delete $TEMP\spltmp.wav +FunctionEnd + +Note that the first parameter to splash.exe is the length to show the +screen for (in milliseconds), and the second is the splash bitmap filename (without +the .bmp). The BMP file used will be this parameter.bmp, and the wave file used +(if present) will be this parameter.wav. + +(If you already have an .onInit function, put that in it) + +Note: the return value of splash is 1 if the user closed the splash +screen early (pop it from the stack) + +-Justin + +Converted to a plugin DLL by Amir Szekely (kichik) diff --git a/tools/Docs/StartMenu/Readme.txt b/tools/Docs/StartMenu/Readme.txt new file mode 100644 index 0000000..7432998 --- /dev/null +++ b/tools/Docs/StartMenu/Readme.txt @@ -0,0 +1,47 @@ +StartMenu.dll shows a custom page that lets the user select a start menu program +folder to put shortcuts in. + +To show the dialog use the Select function. This function has one required parameter +which is the program group default name, and some more optional switches: + /autoadd - automatically adds the program name to the selected folder + /noicon - doesn't show the icon in the top left corner + /text [please select...] - sets the top text to something else than + "Select the Start Menu folder in which..." + /lastused [folder] - sets the edit box to a specific value folder. + Use this to make this plug-in remember the last + folder selected by the user + /checknoshortcuts text - Shows a check box with the text "text". If + the user checks this box, the return value + will have > as its first character and you + should not create the program group. + /rtl - sets the direction of every control on the selection dialog + to RTL. This means every text shown on the page will be + justified to the right. + +The order of the switches doesn't matter but the required parameter must come after +all of them. Every switch after the required parameter will be ignored and left +on the stack. + +The function pushes "success", "cancel" or an error to the stack. If there was no +error and the user didn't press on cancel it will push the selected folder name +after "success". If the user checked the no shortcuts checkbox the result will be +prefixed with '>'. The function does not push the full path but only the selected +sub-folder. It's up to you to decide if to put it in the current user or all +users start menu. + +To set properties of the controls on the page, such as colors and fonts use Init +and Show instead of Select. Init will push the HWND of the page on the stack, +or an error string. For example: + +StartMenu::Init "Test" +Pop $0 +IntCmp $0 0 failed +GetDlgItem $0 $0 1003 +SetCtlColors $0 "" FF0000 +StartMenu::Show +# continue as with Select here +failed: + +Look at Example.nsi for a full example (without Init and Select). + +Created by Amir Szekely (aka KiCHiK) \ No newline at end of file diff --git a/tools/Docs/StrFunc/StrFunc.txt b/tools/Docs/StrFunc/StrFunc.txt new file mode 100644 index 0000000..f479b7f --- /dev/null +++ b/tools/Docs/StrFunc/StrFunc.txt @@ -0,0 +1,705 @@ +String Functions Header File Readme +----------------------------------- + +String Functions Header File contains a set of good string manipulation +functions in a much simpler way to include and call in NSIS scripts. + +How to use +---------- + + Basic Syntax + ------------ + + Parameters are specified in this format: + required (required) (option1 | option2) [optional or add. options] + [option1 | option2] + + The stars in command titles (*****) are the function usefulness in my + opinion. The more starts, the more useful it is. 5 stars (*****) is the + most useful. + + Any time when is mentioned "Default is" means that you can use the value + mentioned or keep it blank, the result is the same. + + If you want a certain value (e.g. a text) to be language-specific, set a + language string (using LangString) and define $(STRINGNAME) as value. + + If you want to add ` to a string, you should always escape it using $\` + because the header file macro functions use ` to separate parameters. + + 1. Include Header file + ---------------------- + + !include "StrFunc.nsh" + + StrFunc.nsh is inside the Include directory, so you don't have to + specify a path. + + You have to put this command before any command used in this header file. + + 2. Defines + ---------- + + This header file contains defines that automate the life of some who + fear a lot of changes sometimes imposed in this header file, or who have + applications that put it to work at maximum capacity. Before you try + these, take a look at the information below: + + - Every item on a define value is separated by a "|", and every subitem + (items in an item) is separated by " ". + + - Use ${StrTok} $var "${DefineName}" "|" "$counter" "0" to get every + item inside the define. For subitems, use ${StrTok} $var2 "$var" " " + "$counter2" "0" after getting the value for a desired item. + + - ${StrFunc_List} is automatically made by the header file. The rest + is manually added to the header. + + 2.1 Defines List: + ----------------- + + StrFunc_List - Lists all function names currently available on StrFunc + header file. + + *_List - Lists all parameter names currently available for "*" + function. (* = function name - i.e. StrTok_List). + + *_TypeList - Lists the types of all parameters on "*" function. + (* = function name - i.e. StrTok_List). Possible types + for each parameter: + + - Output - Needs a variable to output a function result. + + - Text - Needs text or number to be input. + + - Mixed - Needs text, number or option to be input. + Each subitem following the "Mixed" word is an + option. The first option is ever the default + one. Two following spaces " " means that + that subitem is empty. + + - Option - Needs an option to be input. Each subitem + following the "Option" word is an option. + The first option is ever the default one. Two + following spaces " " means that that subitem + is empty. + + 3. Commands + ----------- + + Some commands have special specifications to work. Consult command's + documentation on "3.3 Commands" section. + + 3.1 How To Use Commands In Install Sections and Functions + --------------------------------------------------------- + + Every command used in install sections and functions have to be declared + before (and outside of) any sections and functions, and without + parameters. + + Example: + -------- + + ${UsingStrFunc} StrStr + + 3.2 How To Use Commands In Uninstall Sections and Functions + ----------------------------------------------------------- + + Commands for uninstall sections and functions have "Un" before + the name. + + Example: + -------- + + ${UsingStrFunc} UnStrStr + + A complete example with both Install and Uninstall Commands: + ------------------------------------------------------------ + + + !include "StrFunc.nsh" + + ${UsingStrFunc} StrStr # Supportable for Install Sections and Functions + + ${UsingStrFunc} UnStrStr # Supportable for Uninstall Sections and Functions + + Section + + ${StrStr} $0 "OK! Now what?" "wh" + + SectionEnd + + Section Uninstall + + ${UnStrStr} $0 "OK! Now what?" "wh" + + SectionEnd + + 3.3 Commands + ------------ + + ========================================================================= + ** ${StrCase} + ------------------------------------------------------------------------- + ResultVar String Type(|L|U|T|S|<>) + ========================================================================= + Converts "String" to "Type" Case. Uses LogicLib. + + Parameters: + + ResultVar + Destination where result is returned. + + String + String to convert to "Type" case. + + Type + Type of string case to convert to: + + - "" = Original Case (same as "String") + - L = Lower Case (this is just an example. a very simple one.) + - U = Upper Case (THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE.) + - T = Title Case (This Is Just An Example. A Very Simple One.) + - S = Sentence Case (This is just an example. A very simple one.) + - <> = Switch Case (This is just an example. A very simple one.) + + Default value is "" (Original Case). + + Result Value -> ResultVar: + + "String" in "Type" case. + + Example: + + ${StrCase} $0 '"Você" is "You" in English.' "U" + [__(_)__()___()__()__(____)_] + + $0 = '"VOCÊ" IS "YOU" IN ENGLISH.' + + ========================================================================= + * ${StrClb} + ------------------------------------------------------------------------- + ResultVar String Action(|>|<|<>) + ========================================================================= + Makes an action with the clipboard depending on value of parameter + "Action". Uses LogicLib. + + Parameters: + + String + If "Action" = ">" or "<>" - String to put on the clipboard. + + Action + Can be one of the following values: + + - "" = Cleans the clipboard. + - ">" = Set string to clipboard. + - "<" = Get string from clipboard. + - "<>" = Swap string with clipboard's. + + Result Value -> ResultVar: + + If "Action" = "<" or "<>" - String found on the clipboard. + + ========================================================================= + *** ${StrIOToNSIS} + ------------------------------------------------------------------------- + ResultVar String + ========================================================================= + Convert "String" from Install Options plugin to be supported by NSIS. + Escape, back-slash, carriage return, line feed and tab characters are + converted. + + Parameters: + + ResultVar + Destination where result is returned. + + String + String to convert to be supportable for NSIS. + + Result Value -> ResultVar: + + "String" supportable for NSIS. + + Example: + + ${StrIOToNSIS} $0 "\r\n\t\\This is just an example\\" + [()()()()_______________________()] + + $0 = "$\r$\n$\t\This is just an example\" + + ========================================================================= + * ${StrLoc} + ------------------------------------------------------------------------- + ResultVar String StrToSearchFor CounterDirection(>|<) + ========================================================================= + Searches for "StrToSearchFor" in "String" and returns its location, + according to "CounterDirection". + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search "StrToSearchFor". + + StrToSearchFor + String to search in "String". + + CounterDirection(>|<) + Direction where the counter increases to. Default is ">". + (> = increases from left to right, < = increases from right to left) + + Result Value -> ResultVar: + + Where "StrToSearchFor" is, according to "OffsetDirection". + + Example: + + ${StrLoc} $0 "This is just an example" "just" "<" + (__)<<<<<<<<<<< + + $0 = "11" + + ========================================================================= + *** ${StrNSISToIO} + ------------------------------------------------------------------------- + ResultVar String + ========================================================================= + Converts "String" from NSIS to be supported by Install Options plugin. + Escape, back-slash, carriage return, line feed and tab characters are + converted. + + Parameters: + + ResultVar + Destination where result is returned. + + String + String to convert to be supportable for Install Options plugin. + + Result Value -> ResultVar: + + "String" supportable for Install Options plugin. + + Example: + + ${StrNSISToIO} $0 "$\r$\n$\t\This is just an example\" + [(_)(_)(_)^_______________________^] + + $0 = "\r\n\t\\This is just an example\\" + + ========================================================================= + ***** ${StrRep} + ------------------------------------------------------------------------- + ResultVar String StrToReplace ReplacementString + ========================================================================= + Searches for all "StrToReplace" in "String" replacing those with + "ReplacementString". + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search "StrToReplace". + + StrToReplaceFor + String to search in "String". + + StringToBeReplacedWith + String to replace "StringToReplace" when it is found in "String". + + Result Value -> ResultVar: + + "String" with all occurrences of "StringToReplace" replaced with + "ReplacementString". + + Example: + + ${StrRep} $0 "This is just an example" "an" "one" + [____________()_______] + + $0 = "This is just one example" + + ========================================================================= + *** ${StrSort} + ------------------------------------------------------------------------- + ResultVar String CenterStr LeftStr RightStr IncludeLeftStr(1|0) + IncludeCenterStr(1|0) IncludeRightStr(1|0) + ========================================================================= + Searches for "CenterStr" in "String", and returns only the value + between "LeftStr" and "RightStr", including or not the "CenterStr" using + "IncludeCenterStr" and/or the "LeftStr" using "IncludeLeftStr" and + "RightStr" using "IncludeRightStr". + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search "CenterStr". + + CenterStr + String to search in "String". + + LeftStr + The first occurrence of "LeftStr" on the left of "CenterStr". + If it is an empty value, or was not found, will return + everything on the left of "CenterStr". + + RightStr + The first occurrence of "RightStr" on the right of "CenterStr". + If it is an empty value, or was not found, will return + everything on the right of "CenterStr". + + IncludeLeftStr(1|0) + Include or not the "LeftStr" in the result value. Default is 1 + (True). (1 = True, 0 = False) + + IncludeCenterStr(1|0) + Include or not the "CenterStr" in the result value. Default is 1 + (True). (1 = True, 0 = False) + + IncludeRightStr(1|0) + Include or not the "RightStr" in the result value. Default is 1 + (True). (1 = True, 0 = False) + + Result Value -> ResultVar: + + String between "LeftStr" and "RightStr" of a found "CenterStr" + including or not the "LeftStr" and "RightStr" if + "IncludeLeftRightStr" is 1 and/or the "CenterStr" if + "IncludeCenterStr" is 1. + + Example: + + ${StrSort} $0 "This is just an example" " just" "" "ple" "0" "0" "0" + [_______(___)_______]( ) + C R + + $0 = "This is an exam" + + ========================================================================= + ***** ${StrStr} + ------------------------------------------------------------------------- + ResultVar String StrToSearchFor + ========================================================================= + Searches for "StrToSearchFor" in "String". + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search "StrToSearchFor". + + StrToSearchFor + String to search in "String". + + Result Value -> ResultVar: + + "StrToSearchFor" + the string after where "StrToSearchFor" was found in + "String". + + Example: + + ${StrStr} $0 "This is just an example" "just" + >>>>>>>>>{_)____________] + + $0 = "just an example" + + ========================================================================= + ***** ${StrStrAdv} + ------------------------------------------------------------------------- + ResultVar String StrToSearchFor SearchDirection(>|<) + ResultStrDirection(>|<) DisplayStrToSearch(1|0) Loops CaseSensitive(0|1) + ========================================================================= + Searches for "StrToSearchFor" in "String" in the direction specified by + "SearchDirection" and looping "Loops" times. + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search "StrToSearchFor". + + StrToSearchFor + String to search in "String". + + SearchDirection (>|<) + Where do you want to direct the search. Default is ">" (to right). + (< = To left, > = To right) + + ResultStrDirection (>|<) + Where the result string will be based on in relation of + "StrToSearchFor" + position. Default is ">" (to right). (< = To left, > = To right) + + DisplayStrToSearch (1|0) + Display "StrToSearchFor" in the result. Default is "1" (True). + (1 = True, 0 = False) + + Loops + Number of times the code will search "StrToSearchFor" in "String" not + including the original execution. Default is "0" (1 code execution). + + CaseSensitive(0|1) + If "1" the search will be case-sensitive (differentiates between cases). + If "0" it is case-insensitive (does not differentiate between cases). + Default is "0" (Case-Insensitive). + + + Result Value -> ResultVar: + + "StrToSearchFor" if "DisplayStrToSearch" is 1 + the result string after + or before "StrToSearchFor", depending on "ResultStrDirection". + + Result with Errors: + + When "StrToSearchFor" was not found, will return an empty string. + + When you put nothing in "StrToSearchFor", will return "String" and set + error flag. + + When you put nothing in "String", will return an empty string and set + error flag. + + Example: + + ${StrStrAdv} $0 "This IS really just an example" "IS " ">" ">" "0" "0" "1" + >>>>>( )[____________________] + + + $0 = "really just an example" + + ========================================================================= + **** ${StrTok} + ------------------------------------------------------------------------- + ResultVar String Separators ResultPart[L] SkipEmptyParts(1|0) + ========================================================================= + Returns the part "ResultPart" between two "Separators" inside + "String". + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search for "Separators". + + Separators + Characters to find on "String". + + ResultPart[L] + The part want to be found on "StrToTokenize" between two "Separators". + Can be any number, starting at 0, and "L" that is the last part. + Default is L (Last part). + + SkipEmptyParts(1|0) + Skips empty string parts between two "Separators". Default is 1 (True). + (1 = True, 0 = False) + + Result Value -> ResultVar: + + "String" part number "Part" between two "Separators". + + Examples: + + 1) ${StrTok} $0 "This is, or is not, just an example" " ," "4" "1" + ( ) () () () [_] ( ) () ( ) + 0 1 2 3 4 5 6 7 + $0 = "not" + + 2) ${StrTok} $0 "This is, or is not, just an example" " ," "4" "0" + ( ) () ^() [] ( ) ^( ) () ( ) + 0 1 23 4 5 67 8 9 + $0 = "is" + + ========================================================================= + * ${StrTrimNewLines} + ------------------------------------------------------------------------- + ResultVar String + ========================================================================= + Deletes unnecessary new lines at end of "String". + + Parameters: + + ResultVar + Destination where result is returned. + + String + String where to search unnecessary new lines at end of "String". + + Result Value -> ResultVar: + + "String" with unnecessary end new lines removed. + + Example: + + ${StrTrimNewLines} $0 "$\r$\nThis is just an example$\r$\n$\r$\n" + [_____________________________(_)(_)(_)(_)] + + $0 = "$\r$\nThis is just an example" + +Functions included and not included +-------------------------------------------------- + +11 functions have been included + They are not available on Archive + They are on LogicLib format + +15 functions have not been included + 12 were not included because of better functions + 6 were not included because of AdvStrTok (called here as StrTok) + First String Part Function + Save on Variables Function + Sort Strings (1, 2 and 3) Functions + StrTok Function + 2 were not included because of StrCase + StrLower Function + StrUpper Function + 2 were not included because of StrClb + StrClbSet Function + StrClbGet Function + 1 was not included because of NSISToIO and IOToNSIS + Convert / to // in Paths Function + 1 was not included because of original String Replace Function (called + here as StrRep) + Another String Replace Function + 2 were not included because they aren't useful anymore + Slash <-> Backslash Converter Function + Trim Function + 1 was not included because of bugs + Number to String Converter Function + +Version History +--------------- + +1.09 - 10/22/2004 + +- Fixed stack problems involving: StrCase, StrRep, StrSort, StrTok. +- Fixed StrClb: When "Action" = "<>", handle was wrongly output as text. +- Fixed StrSort, StrStrAdv documentation examples. +- Fixed StrIOToNSIS, StrLoc, StrNSISToIO, StrRep, StrStr: sometimes + didn't find "StrToSearch" at all. + +1.08 - 10/12/2004 + +- Converted all the functions to LogicLib. +- StrSort: Totally remade and it can break old scripts. See + documentation for details. +- StrTok: "ResultPart" has to start from 0 and it can break old scripts. + See documentation for details. +- Added defines: StrFunc_List, *_List and *_TypeList. +- Fixed StrStrAdv: Variables $R0-$R3 couldn't be used in scripts before calling. +- StrRep: Cut down some variables. +- Arranged correctly the order of StrSort on the documentation. + +1.07 - 09/21/2004 + +- Removed ${UnStrFunc} command. Now you can just include uninstall + functions commands like ${UnStrStr} to be supported by uninstall functions + and sections. +- Added case-sensitive comparison option for StrStrAdv. +- StrCase now uses System.dll which makes case conversions effective with +all latin letters (i.e. ê). +- Added switch case and original case for StrCase. +- StrClbSet and StrClbGet removed, added StrClb. +- Made compact the most usual operations inside the header file. File size +reduced. + +1.06 - 03/26/2004 + +- StrNumToStr removed due to complex number handling on some languages. +- Fixed the bug where the old string was attached to string returned by + StrCase when $R5 variable was used. + +1.05 - 03/17/2004 + +- Fixed a bug with StrCase, Title Case wasn't working as should be. +- Fixed a bug with StrStrAdv, previous fix created another bug, string not + returned correctly when using backwards search with "DisplayStrToSearch" as + "0". + +1.04 - 03/07/2004 + +- Added new StrCase, removed StrLower and StrUpper. +- Organized by name commands inside header and readme files. + +1.03 - 02/12/2004 + +- Added commands support for uninstall sections and functions. +- Fixed variables switch in "StrLoc" and "StrTok" after using these. + +1.02 - 02/07/2004 + +- Fixed StrLoc. +- Fixed Documentation about StrLoc. "Direction" is really "OffsetDirection". +- Added my new AdvStrSort, and removed the old one. + +1.01 - 02/05/2004 + +- Fixed Documentation about StrSort and StrTok. +- Fixed StrTok default value for the string part. Now it's "L". +- Fixed StrStrAdv fixed wrong search when had a combination of same + substrings one after another in a string. +- Fixed StrLoc: when a string isn't found, don't return any value at all. + +1.00 - 02/01/2004 + +- Added documentation. +- Renamed header file to "StrFunc.nsh". +- Added 1 function, StrLoc. +- Modified StrStrAdv, removed some lines. +- Fixed StrTok, 2 simple numbers made it loop every time. +- Fixed some small issues on the header file. + +0.02 - 01/24/2004 + +- Completed StrFunc.nsh file. Need some tests and the readme. + +0.01 - 01/22/2004 + +- First version to test ideas... + +Credits +------- + + Made by Diego Pedroso (aka deguix). + +Functions Credits +----------------- + +- All functions are made by Diego Pedroso on LogicLib format. They + are based on functions by Amir Szekely, Dave Laundon, Hendri + Adriaens, Nik Medved, Joost Verburg, Stuart Welch, Ximon Eighteen, + "bigmac666" and "bluenet". "bluenet"'s version of StrIOToNSIS and + StrNSISToIO on LogicLib format were included. + +License +------- + +This header file is provided 'as-is', without any express or implied +warranty. In no event will the author be held liable for any damages +arising from the use of this header file. + +Permission is granted to anyone to use this header file for any purpose, +including commercial applications, and to alter it and redistribute +it freely, subject to the following restrictions: + +1. The origin of this header file must not be misrepresented; + you must not claim that you wrote the original header file. + If you use this header file in a product, an acknowledgment in the + product documentation would be appreciated but is not required. +2. Altered versions must be plainly marked as such, + and must not be misrepresented as being the original header file. +3. This notice may not be removed or altered from any distribution. \ No newline at end of file diff --git a/tools/Docs/System/System.html b/tools/Docs/System/System.html new file mode 100644 index 0000000..4d0fd34 --- /dev/null +++ b/tools/Docs/System/System.html @@ -0,0 +1,898 @@ + + + + + + +System Plug-in (NSIS) + + + +

NSIS System Plug-in

+

+Copyright © 2002 brainsucker (Nik Medved)
Copyright © 2002-2023 NSIS Contributors +

+ +

Table of Contents

+ + + +

Introduction

+ +

The System plug-in gives developers the ability to call any exported function from any DLL. For example, you can use it to call GetLogicalDriveStrings to get a list of available drives on the user's computer.

+ +

The System plug-in also allows the developer to allocate, free and copy memory; interact with COM objects and perform mathematical operations on 64-bit integers.

+ +

Programming knowledge is highly recommended for good understanding of the System plug-in.

+ +

Usage Examples From The Wiki

+ + + +

Available Functions

+ +

Memory Related Functions

+ +
+
    + +
  • +Alloc SIZE +
    +

    Allocates SIZE bytes and returns a memory address on the stack.

    +

    Usage Example

    +
    +System::Alloc 64
    +Pop $0
    +DetailPrint "64 bytes allocated at $0"
    +System::Free $0
    +
    +
    +
  • +
  • +StrAlloc SIZE +
    +

    Allocates a string buffer for SIZE TCHARs and returns a memory address on the stack. This is extremely useful if you want to write an NSI script that will work for both ANSI and Unicode NSIS.

    +

    Usage Example

    +
    +System::StrAlloc 64 ; String buffer for 63 characters and \0 termination.
    +Pop $0
    +DetailPrint "A string buffer for 64 characters allocated at $0"
    +System::Free $0
    +
    +
    +
  • +
  • +Copy [/SIZE] DESTINATION SOURCE +
    +

    Copies SIZE bytes from SOURCE to DESTINATION. If SIZE is not specified, SOURCE's size will queried using GlobalSize. This means that if you don't allocate SOURCE using System::Alloc, System::Call or GlobalAlloc, you must specify SIZE. If DESTINATION is zero it will be allocated and its address will be pushed on the stack.

    +

    Usage example

    +
    +# allocate a buffer and put 'test string' and an int in it
    +System::Call "*(&t1024 'test string', i 5) p .s"
    +Pop $0
    +# copy to an automatically created buffer
    +System::Copy 0 $0
    +Pop $1
    +# get string and int in $1 buffer
    +System::Call "*$1(&t1024 .r2, i .r3)"
    +# free buffer
    +System::Free $1
    +# print result
    +DetailPrint $2
    +DetailPrint $3
    +# copy to our own buffer
    +System::Alloc 1028
    +Pop $1
    +System::Copy $1 $0
    +# get string and int in $1 buffer
    +System::Call "*$1(&t1024 .r2, i .r3)"
    +# free
    +System::Free $0
    +System::Free $1
    +# print result
    +DetailPrint $2
    +DetailPrint $3
    +
    +
    + +
  • + +
  • +Free ADDRESS +
    +

    Frees ADDRESS.

    +

    Usage Example

    +
    +System::Alloc 64
    +Pop $0
    +DetailPrint "64 bytes allocated at $0"
    +System::Free $0
    +
    +
    +
  • + +
  • +Store "OPERATION [OPERATION [OPERATION ...]]" +
    +

    Performs stack operations. An operation can be pushing or popping a single register from the NSIS stack or pushing or popping all of the registers ($0-$9 and $R0-$R9) from System's private stack. Operations can be separated by any character.

    +

    Available Operations

    +
      +
    • To push $#, use p#, where # is a digit from 0 to 9.
    • +
    • To pop $#, use r#, where # is a digit from 0 to 9.
    • +
    • To push $R#, use P#, where # is a digit from 0 to 9.
    • +
    • To pop $R#, use R#, where # is a digit from 0 to 9.
    • +
    • To push $0-$9 and $R0-$R9 to System's private stack, use s or S.
    • +
    • To pop $0-$9 and $R0-$R9 from System's private stack, use l or L.
    • +
    • To push the internal NSIS flags state (exec_flags_t in api.h) to the stack, use F.
    • +
    • To pop the internal NSIS flags state (exec_flags_t in api.h) from the stack, use f.
    • +
    +

    Usage Examples

    +
    +StrCpy $0 "test"
    +System::Store "p0"
    +Pop $1
    +DetailPrint "$0 = $1"
    +
    +
    +StrCpy $2 "test"
    +System::Store "p2 R2"
    +DetailPrint "$2 = $R2"
    +
    +
    +StrCpy $3 "test"
    +System::Store "s"
    +StrCpy $3 "another test"
    +System::Store "l"
    +DetailPrint $3
    +
    +
    +System::Store "r4" "test"
    +DetailPrint $4
    +
    +
    +
  • +
+ +
+ +

Calling Functions

+ +
+ +
    +
  • Call PROC [( PARAMS ) [RETURN [? OPTIONS]]]
  • +
  • Get PROC [( PARAMS ) [RETURN [? OPTIONS]]] +
    +

    Call and get both share a common syntax. As the names suggest, Call calls and Get gets. What does it call or get? It depends on PROC's value.

    + +

    PARAMS is a list of parameters and what do to with them. You can pass data in the parameters and you can also get data from them. The parameters list is separated by commas. Each parameter is combined of three values: type, source and destination. Type can be an integer, a string, etc. Source, which is the source of the parameter value, can be a NSIS register ($0, $1, $INSTDIR), the NSIS stack, a concrete value (5, "test", etc.) or nothing (null). Destination, which is the destination of the parameter value after the call returns, can be a NSIS register, the NSIS stack or nothing which means no output is required. Either one of source or destination can also be a dot (`.') if it is not needed.

    + +

    RETURN is like a single parameter definition, but source is only used when creating callback functions. Normally source is a dot.

    + +

    OPTIONS is a list of options which control the way System plug-in behaves. Each option can be turned off by prefixing with an exclamation mark. For example: ?!e.

    + +

    PARAMS, RETURN and OPTIONS can be repeated many times in one Get/Call line. When repeating, a lot can be omitted, and only what you wish to change can be used. Type, source and/or destination can be omitted for each parameter, even the return value. Options can be added or removed. This allows you to define function prototypes and save on some typing. The last two examples show this.

    + +

    PROC can also be repeated but it must be prefixed with a hash sign (`#') except if the hash sign is preceded by a double colon (shell32::#18) in which case it is interpreted as a function ordinal.

    + +

    Possible PROC Values and Meanings

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ValueMeaningExample
    DLL::FUNCFUNC exported from DLLuser32::MessageBox
    ::ADDRFunction located at ADDRsee below
    *ADDRStructure located at ADDRsee below
    *New structuresee below
    IPTR->IDXMember indexed IDX from
    interface pointed by IPTR
    see below
    <nothing>New callback functionsee below
    PROCPROC returned by Getsee below
    +
    + +

    Available Parameter Types

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeMeaning
    vvoid (generally for return)
    ppointer (and other pointer sized types like handles and HWNDs)
    bint8, byte
    hint16, short
    iint32 (includes char, byte, short and so on when used as a pointer)
    lint64, large integer
    mANSI text, string. (FYI: 'm' for multibyte string or 'w' flipped over.)
    ttext, string (pointer to first character). Like TCHAR*, it is a Unicode string in Unicode NSIS.
    wWCHAR text, Unicode string
    gGUID
    kcallback
    @Direct register memory access (Buffer is limited to (NSIS_MAX_STRLEN - 24) * NSIS_CHAR_SIZE bytes)
    &vNN bytes padding (structures only)
    &iNinteger of N bytes (structures only)
    &lstructure size (structures only)
    &tNarray of N TCHAR text characters (structures only)
    &mNarray of N CHAR ANSI characters (structures only)
    &wNarray of N WCHAR Unicode characters (structures only)
    &g1616 bytes of GUID (structures only)
    +

    Additionally, each type (except b, h, k and @) can be prefixed with an asterisk to denote a pointer. When using an asterisk, the System plug-in still expects the value of the parameter, rather than the pointer's address. To pass a direct address, use `p' with no asterisk. A usage example is available. Alloc returns addresses and its return value should therefore be used with `p', without an asterisk.

    +
    + +

    Available Sources and Destinations

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeMeaning
    .ignored
    numberconcrete hex, decimal or octal integer value. several integers can be or'ed using the pipe symbol (`|')
    'string'
    "string"
    `string`
    concrete string value
    r0 through r9$0 through $9 respectively
    r10 through r19
    R0 through R9
    $R0 through $R9 respectively
    c$CMDLINE
    d$INSTDIR
    o$OUTDIR
    e$EXEDIR
    a$LANGUAGE
    sNSIS stack
    nnull for source, no output required for destination
    +

    Source is required when using the @ type and must be a register. When the call returns the source register already contains the memory address in string form so using destination is usually not necessary. +

    + +

    Callbacks

    + +
    +

    Callback functions are simply functions which are passed to a function and called back by it. They are frequently used to pass a possibly large set of data item by item. For example, EnumChildWindows uses a callback function. As NSIS functions are not quite regular functions, the System plug-in provides its own mechanism to support callback functions. It allows you to create callback functions and notifies you each time a callback function was called.

    + +

    Creation of callback functions is done using Get and the callback creation syntax. As you will not call the callbacks yourself, the source of the parameters should be omitted using a dot. When the callback is called, the destination of the parameters will be filled with the values passed on to the callback. The value the callback will return is set by the source of the return "parameter". The destination of the return "parameter" should always be set as that's where System will notify you the callback was called.

    + +
    System::Get "(i .r0, i .r1) iss"
    + +

    To pass a callback to a function, use the k type.

    + +
    System::Get "(i .r0, i .r1) isR0"
    +Pop $0
    +System::Call "dll::UseCallback(k r0)"
    + +

    Each time the callback is called, the string callback#, where # is the number of the callback, will be placed in the destination of the return "parameter". The number of the first callback created is 1, the second's is 2, the third's is 3 and so on. As System is single threaded, a callback can only be called while calling another function. For example, EnumChildWindows's callback can only be called when EnumChildWindows is being called. You should therefore check for callback# after each function call that might call your callback.

    + +
    System::Get "(i .r0, i .r1) isR0"
    +Pop $0
    +System::Call "dll::UseCallback(k r0)"
    +StrCmp $R0 "callback1" 0 +2
    +DetailPrint "UseCallback passed ($0, $1) to the callback"
    +
    + +

    After you've processed the callback call, you should use Call, passing it the value returned by Get - the callback. This tells System to return from the callback. Destination of the return "parameter" must be cleared prior to calling a function, to avoid false detection of a callback call. If you've specified a source for the return "parameter" when the callback was created, you should fill that source with the appropriate return value. Callbacks are not automatically freed, don't forget to free it after you've finished using it.

    + +
    System::Get "(i .r0, i .r1) isR0"
    +Pop $0
    +System::Call "dll::UseCallback(k r0)"
    +loop:
    +	StrCmp $R0 "callback1" 0 done
    +	DetailPrint "UseCallback passed ($0, $1) to the callback"
    +	Push 1 # return value of the callback
    +	StrCpy $R0 "" # clear $R0 in case there are no more callback calls
    +	System::Call $0 # tell system to return from the callback
    +	Goto loop
    +done:
    +System::Free $0
    +
    + +

    A complete working example is available in the usage examples section.

    + +
    + +

    Notes

    + +
    +
      +
    • To find out the index of a member in a COM interface, you need to search for the definition of this COM interface in the header files that come with Visual C/C++ or the Platform SDK. The index is zero based.
    • +
    • If a function can't be found or the t parameter type was used, an `A' or `W' will be appended to its name and it will be looked up again. This is done because a lot of Windows API functions have two versions, one for ANSI strings and one for Unicode strings. The ANSI version of the function is marked with `A' and the Unicode version is marked with `W'. For example: lstrcpyA and lstrcpyW.
    • +
    • Libraries in the system32 directory can be loaded without a path. All other libraries should be loaded with a quoted full path.
    • +
    +
    + +

    Available Options

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    OptionMeaning
    ccdecl calling convention (the stack restored by caller). By default stdcall calling convention is used on x86 (the stack restored by callee).
    rAlways return (for GET means you should pop result and proc, for CALL means you should pop result (at least)). By default result is returned for errors only (for GET you will pop either error result or right proc, and for CALL you will get either your return or result at defined return place).
    nNo redefine. Whenever this proc will be used it will never be redefined either by GET or CALL. This options is never inherited to children.
    sUse general Stack. Whenever the first callback defined the system starts using the temporary stacks for function calls.
    eCall GetLastError() after procedure end and push result on stack.
    uUnload DLL after call (using FreeLibrary, so you'll be able to delete it for example).
    2Experimental v2 syntax
    +
    + +

    Experimental v2 syntax

    + +
      +
    • Struct types in uppercase are aligned to their natural alignment. Lowercased types are packed without alignment. +
    • Callback id based on the allocated callback +
    + +

    Usage Examples

    + +
    +System::Call 'user32::MessageBox(p $HWNDPARENT, t "NSIS System Plug-in", t "Test", i 0)'
    +System::Call '"$SysDir\MyLibrary.dll"::MyFunction(i 42)'
    +
    +
    +System::Call "kernel32::GetModuleHandle(t 'user32.dll') p .s"
    +System::Call "kernel32::GetProcAddress(p s, m 'MessageBoxA') p .r0"
    +System::Call "::$0(p $HWNDPARENT, m 'GetProcAddress test', m 'NSIS System Plug-in', i 0)"
    +
    +
    +System::Get "user32::MessageBox(p $HWNDPARENT, t 'This is a default text', t 'Default', i 0)"
    +Pop $0
    +System::Call "$0"
    +
    +
    +System::Get "user32::MessageBox(p $HWNDPARENT, t 'This is a default text', \
    +	t 'Default', i 0x1|0x10)"
    +Pop $0
    +System::Call "$0(, 'This is a System::Get test', 'NSIS System Plug-in',)"
    +
    +
    +System::Call "advapi32::GetUserName(t .r0, *i ${NSIS_MAX_STRLEN} r1) i.r2"
    +DetailPrint "User name - $0"
    +DetailPrint "String length - $1"
    +DetailPrint "Return value - $2"
    +
    +
    +System::Alloc 4
    +Pop $0
    +System::Call "*$0(i 5)" ; Write
    +System::Call "*$0(i .r1)" ; Read
    +System::Free $0
    +DetailPrint $1
    +
    +
    +System::Call "*(i 5) p .r0"
    +System::Call "*$0(i .r1)"
    +System::Free $0
    +DetailPrint $1
    +
    +
    +System::Call '*0(p, &l.r2, &t2)' ; &l. is not part of the struct
    +DetailPrint "Struct size=$2" 
    +
    +
    +System::Call '*(&l4,i,i,i,i,&t128)p.r1' ; Fills dwOSVersionInfoSize with the struct size as a int32
    +${If} $1 Z<> 0
    +	System::Call 'kernel32::GetVersionEx(pr1)i.r0'
    +	System::Call '*$1(i,i.R1,i.R2,i.R3)'
    +	System::Free $1
    +	${IfThen} $0 <> 0 ${|} DetailPrint "v$R1.$R2.$R3" ${|}
    +${EndIf}
    +
    +
    +System::Call "user32::GetClientRect(p $hwndparent, @ r0)"
    +System::Call "*$0(i,i,i.r1,i.r2)"
    +DetailPrint ClientRect=$1x$2
    +
    +
    +# defines
    +!define CLSCTX_INPROC_SERVER 1
    +!define CLSID_ActiveDesktop {75048700-EF1F-11D0-9888-006097DEACF9}
    +!define IID_IActiveDesktop {F490EB00-1240-11D1-9888-006097DEACF9}
    +# create IActiveDesktop interface
    +System::Call "ole32::CoCreateInstance( \
    +	g '${CLSID_ActiveDesktop}', p 0, \
    +	i ${CLSCTX_INPROC_SERVER}, \
    +	g '${IID_IActiveDesktop}', *p .r0) i.r1"
    +StrCmp $1 0 0 end
    +# call IActiveDesktop->GetWallpaper
    +System::Call "$0->4(w .r2, i ${NSIS_MAX_STRLEN}, i 0)"
    +# call IActiveDesktop->Release
    +System::Call "$0->2()"
    +# print result
    +DetailPrint $2
    +end:
    +
    +
    +InitPluginsDir
    +File "/oname=$PLUGINSDIR\MyDLL.dll" MyDLL.dll
    +System::Call 'KERNEL32::AddDllDirectory(w "$PLUGINSDIR")'
    +System::Call 'KERNEL32::LoadLibrary(t "$PLUGINSDIR\MyDLL.dll")p.r1'
    +System::Call 'MyDLL::MyFunc(i 5) ? u'
    +System::Call 'KERNEL32::FreeLibrary(pr1)'
    +Delete $PLUGINSDIR\MyDLL.dll
    +
    +
    +System::Get "(p.r1, p) iss"
    +Pop $R0
    +System::Call "user32::EnumChildWindows(p $HWNDPARENT, k R0, p) i.s"
    +loop:
    +	Pop $0
    +	StrCmp $0 "callback1" 0 done
    +	System::Call "user32::GetWindowText(pr1,t.r2,i${NSIS_MAX_STRLEN})"
    +	System::Call "user32::GetClassName(pr1,t.r3,i${NSIS_MAX_STRLEN})"
    +	IntFmt $1 "0x%X" $1
    +	DetailPrint "$1 - [$3] $2"
    +	Push 1 # callback's return value
    +	System::Call "$R0"
    +	Goto loop
    +done:
    +System::Free $R0
    +DetailPrint "EnumChildWindows returned $0"
    +
    +
    +System::Get '(m.r1)ir2r0 ?2' ; v2 syntax
    +Pop $9
    +System::Call 'kernel32::EnumSystemLocalesA(k r9, i 0)'
    +loop:
    +	StrCmp $0 "callback$9" 0 done
    +	DetailPrint "Locale: $1"
    +	StrCpy $2 1 ; EnumLocalesProc return value
    +	System::Call $9 ; return from EnumLocalesProc
    +	Goto loop
    +done:
    +System::Free $9
    +
    +
    +System::Call '*(&t50 "!")p.r2' ; DecimalSep
    +System::Call '*(&t50 "`")p.r3' ; ThousandSep
    +System::Call '*(i 2, i 0, i 3, P r2, P r3, i 1)p.r1 ?2'
    +System::Call 'kernel32::GetNumberFormat(i 0, i 0, t "1337.666" r4, p r1, t.r5, i ${NSIS_MAX_STRLEN})'
    +DetailPrint "Custom formatted $4: $5"
    +System::Free $3
    +System::Free $2
    +System::Free $1
    +
    +
    +!define MB "user32::MessageBox(p$HWNDPARENT,t,t'NSIS System Plug-in',i0)"
    +System::Call "${MB}(,'my message',,)"
    +System::Call "${MB}(,'another message',,) i.r0"
    +MessageBox MB_OK "last call returned $0"
    +
    +
    +System::Call "user32::SendMessage(p $HWNDPARENT, t 'test', t 'test', p 0) p.s ? \
    +	e (,t'test replacement',,) i.r0 ? !e #user32::MessageBox"
    +DetailPrint $0
    +ClearErrors
    +Pop $0
    +IfErrors good
    +MessageBox MB_OK "this message box will never be reached"
    +good:
    +
    +
    +
  • +
+ +
+ +

64-bit Functions

+ +
+ +
    + +
  • +Int64Op ARG1 OP [ARG2] +
    +

    Performs OP on ARG1 and optionally ARG2 and returns the result on the stack. Both ARG1 and ARG2 are 64-bit integers. This means they can range between -2^63 and 2^63 - 1.

    +

    Available Operations

    +
      +
    • Addition -- +
    • +
    • Subtraction -- -
    • +
    • Multiplication -- *
    • +
    • Division -- /
    • +
    • Modulo -- %
    • +
    • Shift left -- <<
    • +
    • Arithmetic shift right -- >>
    • +
    • Logical shift right -- >>>
    • +
    • Bitwise or -- |
    • +
    • Bitwise and -- &
    • +
    • Bitwise xor -- ^
    • +
    • Bitwise not (one argument) -- ~
    • +
    • Logical not (one argument) -- !
    • +
    • Logical or -- ||
    • +
    • Logical and -- &&
    • +
    • Less than -- <
    • +
    • Equals -- =
    • +
    • Greater than -- >
    • +
    + +

    Usage Examples

    + +
    +System::Int64Op 5 + 5
    +Pop $0
    +DetailPrint "5 + 5 = $0" # 10
    +
    +
    +System::Int64Op 526355 * 1565487
    +Pop $0
    +DetailPrint "526355 * 1565487 = $0" # 824001909885
    +
    +
    +System::Int64Op 5498449498849818 / 3
    +Pop $0
    +DetailPrint "5498449498849818 / 3 = $0" # 1832816499616606
    +
    +
    +System::Int64Op 0x89498A198E4566C % 157
    +Pop $0
    +DetailPrint "0x89498A198E4566C % 157 = $0" # 118
    +
    +
    +System::Int64Op 1 << 62
    +Pop $0
    +DetailPrint "1 << 62 = $0" # 4611686018427387904
    +
    +
    +System::Int64Op 0x4000000000000000 >> 62
    +Pop $0
    +DetailPrint "0x4000000000000000 >> 62 = $0" # 1
    +
    +System::Int64Op 0x8000000000000000 >> 1
    +Pop $0
    +DetailPrint "0x8000000000000000 >> 1 = $0" # -4611686018427387904 (0xC000000000000000)
    +
    +System::Int64Op 0x8000000000000000 >>> 1
    +Pop $0
    +DetailPrint "0x8000000000000000 >>> 1 = $0" # 4611686018427387904 (0x4000000000000000)
    +
    +
    +System::Int64Op 0x12345678 & 0xF0F0F0F0
    +Pop $0
    +# IntFmt is 32-bit, this is just for the example
    +IntFmt $0 "0x%X" $0
    +DetailPrint "0x12345678 & 0xF0F0F0F0 = $0" # 0x10305070
    +
    +
    +System::Int64Op 1 ^ 0
    +Pop $0
    +DetailPrint "1 ^ 0 = $0" # 1
    +
    +
    +System::Int64Op 1 || 0
    +Pop $0
    +DetailPrint "1 || 0 = $0" # 1
    +
    +
    +System::Int64Op 1 && 0
    +Pop $0
    +DetailPrint "1 && 0 = $0" # 0
    +
    +
    +System::Int64Op 9302157012375 < 570197509190760
    +Pop $0
    +DetailPrint "9302157012375 < 570197509190760 = $0" # 1
    +
    +
    +System::Int64Op 5168 > 89873
    +Pop $0
    +DetailPrint "5168 > 89873 = $0" # 0
    +
    +
    +System::Int64Op 189189 = 189189
    +Pop $0
    +DetailPrint "189189 = 189189 = $0" # 1
    +
    +
    +System::Int64Op 156545668489 ~
    +Pop $0
    +DetailPrint "156545668489 ~ = $0" # -156545668490
    +
    +
    +System::Int64Op 1 !
    +Pop $0
    +DetailPrint "1 ! = $0" # 0
    +
    +
    +
  • + +
+ +
+ +

FAQ

+ +
+ +
    + +
  • +Q: How can I pass structs to functions? +
    +

    A: First of all, you must allocate the struct. This can be done in two ways. You can either use Alloc or Call with the special struct allocation syntax. Next, if you need to pass data in the struct, you must fill it with data. Then you call the function with a pointer to the struct. Finally, if you want to read data from the struct which might have been written by the called function, you must use Call with the struct handling syntax. After all is done, it's important to remember to free the struct.

    + +

    Allocation

    + +

    To allocate the struct using Alloc, you must know the size of the struct in bytes. Therefore, it would normally be easier to use Call. In this case it's easy to see the required size is 16 bytes, but other cases might not be that trivial. In both cases, the struct address will be located on the top of the stack and should be retrieved using Pop.

    + +
    +System::Alloc 16
    +
    + +
    +System::Call "*(i, i, i, t)p.s"
    +
    + +
    + +

    Setting Data

    + +

    Setting data can be done using Call. It can be done in the allocation stage, or in another stage using the struct handling syntax.

    + +
    +System::Call "*(i 5, i 2, i 513, t 'test')p.s"
    +
    + +
    +# assuming the struct's memory address is kept in $0
    +System::Call "*$0(i 5, i 2, i 513, t 'test')"
    +
    + +
    + +

    Passing to the Function

    + +

    As all allocation methods return an address, the type of the passed data should be an integer, an address in memory.

    + +
    +# assuming the struct's memory address is kept in $0
    +System::Call "dll::func(p r0)"
    +
    + +
    + +

    Reading Data

    + +

    Reading data from the struct can be done using the same syntax as setting it. The only difference is that the destination part of the parameter will be set and the source part will be omitted using a dot.

    + +
    +# assuming the struct's memory address is kept in $0
    +System::Call "*$0(i .r0, i .r1, i .r2, t .r3)"
    +DetailPrint "first int = $0"
    +DetailPrint "second int = $1"
    +DetailPrint "third int = $2"
    +DetailPrint "string = $3"
    +
    + +
    + +

    Freeing Memory

    + +

    Memory is freed using Free.

    + +
    +# assuming the struct's memory address is kept in $0
    +System::Free $0
    +
    + +
    + +

    A Complete Example

    + +
    +# allocate
    +System::Call "*(i,i,p,p,p,p,p,p)p.r1"
    +# call
    +System::Call "Kernel32::GlobalMemoryStatus(p r1)"
    +# get
    +System::Call "*$1(i.r2, i.r3, p.r4, p.r5, p.r6, p.r7, p.r8, p.r9)"
    +# free
    +System::Free $1
    +# print
    +DetailPrint "Structure size: $2 bytes"
    +DetailPrint "Memory load: $3%"
    +DetailPrint "Total physical memory: $4 bytes"
    +DetailPrint "Free physical memory: $5 bytes"
    +DetailPrint "Total page file: $6 bytes"
    +DetailPrint "Free page file: $7 bytes"
    +DetailPrint "Total virtual: $8 bytes"
    +DetailPrint "Free virtual: $9 bytes"
    +
    + +
    +
  • + +
+ +
+ + + diff --git a/tools/Docs/System/WhatsNew.txt b/tools/Docs/System/WhatsNew.txt new file mode 100644 index 0000000..959c734 --- /dev/null +++ b/tools/Docs/System/WhatsNew.txt @@ -0,0 +1,46 @@ +release 2. +1. Syntax, with inline input +2. Int64 full support (conversion/operations/comparison) +3. Structures support +4. Callbacks support, including multilevel callbacks +5. Some useful routines (Alloc, Free, Copy) +6. CDecl and StdCall calling conventions + +release 3, 22 march 2003. +1. Custom Message Boxes (with icons etc) -> bug in case of GetModuleHandle and +call to FreeLibrary (sysfunc.nsh) +2. GetFileSysTime -> No SystemTimeToTzSpecificLocalTime at win9x bug, +changed to use FileTimeToLocalFileTime (sysfunc.nsh) +3. Incorrect automatic structure size (&l) bug, value actually never filled +into the structure (strange -> winxp takes no care of the structure size +members, such as cbSize, and win98 does...) (system.c) +4. Changed Secondary Stack Allocation behavior - now we just leave 65kb of the +stack NSIS give to us to the NSIS itself, and use the other part as the stack +for our calls. (system.c) +5. Secondary Stack Optimization - in case of no more pending callback procs - +"free" the secondary stack pointer. (system.c) +6. PlaySound("", 0, 0) plays the default windows sound at win9x, so changed to +PlaySound(NULL, 0, 0) for effective sound stopping after splash (sysfunc.nsh). + +release 4, 3 september 2003. +1. Division by zero fatal error at Int64Op killed. +2. bool type removed (use int instead). +3. GUID (g) and LPWSTR (w) types added. +4. Memory cleanup after using t (string), g (guid) and w (unicode string) added. +5. Automatic A-letter at proc name discovery. +6. COM optimized: new proc specification "x->y", where x is interface ptr, and +y is vtable member index. For such procs Interface pointer passed as first arg +automatically. + +release 5, 11 september 2003. +1. u flag - unload dll after procedure call. +2. some changes to asm to turn on Whole Program Optimization. +3. Dll shrunk by 1 kb. + +bug-fix-release, 4.06.2004 +1. System::Copy /SIZE fixed (Kichik). +2. System::Copy with destination auto-allocation now pushes destination +address on stack. +3. Callbacks fixed (Kichik's kick is awesome). +4. Bug with proc call parts redefinition, # for example (pointed by Kichik). +5. Bug with memory protection during callback processing (Kichik). \ No newline at end of file diff --git a/tools/Docs/VPatch/Readme.html b/tools/Docs/VPatch/Readme.html new file mode 100644 index 0000000..5746379 --- /dev/null +++ b/tools/Docs/VPatch/Readme.html @@ -0,0 +1,310 @@ + + + + + + +VPatch 3 + + + +

VPatch 3.1

+
+

Introduction

+
+

VPatch allows to create a patch file to update previous versions + of your software. The GenPat utility generates the patch file. + The plug-in can use the patch to update a file. Using a patch, you can + reduce the download size of your updates because only the differences + between the files are included in the patch file.

+
+

How to use

+
+

Generate the patch file

+
+

Make sure you have the source file (original version) and the target + file (version to update to). For example, DATA.DTA (currently on user + system) and DATA_20.DTA (version 2.0 of this data file). Now call + the command line tool GenPat.exe:

+
GENPAT oldfile.txt newfile.txt patch.pat
+

Now, the patch will be generated, this will take some time.

+

Using the /B=(BlockSize) parameter of the GenPat utility (put it + after the filenames), you can use a different block size. A smaller + block size may result in a smaller patch, but the generation will + take more time (the default blocksize is 64).

+

If you have trouble using this command-line utility, you can download + a GUI (graphical user interface) for VPatch from its own website: + http://www.tibed.net/vpatch.

+
+

Update the file during installation

+
+

Use the VPatch plug-in to update a file using a patch file:

+
vpatch::vpatchfile "patch.pat" "oldfile.txt" "temporary_newfile.txt"
+

The result of the patch operating will be added to the stack and + can be one of the following texts:

+
    +
  • OK
  • +
  • OK, new version already installed
  • +
  • An error occurred while patching
  • +
  • Patch data is invalid or corrupt
  • +
  • No suitable patches were found
  • +
+

Check example.nsi for an example. + You +should check whether the stack string starts with "OK" + because then the patch has succeeded and you can rename "temporary_newfile.txt" + to "oldfile.txt" to replace the original, if you want.

+
+

Multiple patches in one file

+
+

GenPat appends a patch to the file you specified. If there is already + a patch for the same original file, with the same CRC/MD5, in the patch file, + + the patch will be replaced. For example, if you want to be able to upgrade + version 1 and 2 to version 3, + you can put a 1 > 3 and 2 > 3 patch in +one file.

+

You can also put patches for different files in one patch file, for + example, a patch from file A version 1 to file A version 2 and a patch + from file B version 1 to file B version 2. Just call the plug-in multiple + times with the same patch file. It will automatically select the right + patch (based on the file CRC).

+
+

Patch generator (GenPat) exit codes

+
+

In version 3 the following exit codes (known as error levels in + the DOS period) can be returned by GenPat. GenPat will return an + exit code based on success of the patch generation. Here is a list + of the possible exit codes:

+ + + + + + + + + + + + + + + + + + + + + +
Exit codeDescription
0Success
1Arguments missing
2Other error
3Source file already has a patch in specified patch file (ERROR), + use /R switch to override
+

These exit codes can be useful when you generate patch files through + a NSIS script.

+
+
+
+
+

Source code

+
+

Source code is available in the original package and in the SVN repository of NSIS.

+ +

NSIS plug-in (C++)

+
+

The source of the NSIS plug-in that applies patches can be found + in the Source\Plugin folder.

+
+

Patch Generator (C++)

+
+

The most interesting part of VPatch, the actual patch generation + algorithm, can be found in Source\GenPat\PatchGenerator.cpp. + The +header of that file contains a brief explanation of the algorithm as well. +

+
+

User interface (Delphi)

+
+

A user interface is included as well, which you will have to build + yourself because the GUI executable was too large to include. Besides + Borland Delphi 6 or higher (you can use the freely available Personal + edition), you will also need to install the VirtualTreeView component by Mike Lischke.

+
+
+

Version history

+
+
    +
  • 3.1 +
      +
    • GenPat now compiles on POSIX platforms (MinGW/GCC), Visual + C++ 6 and Borland C++.
    • +
    • More test cases to verify functionality of GenPat.
    • +
    +
  • +
  • 3.0 +
      +
    • Final: Updates to the GUI, installer
    • +
    • RC8: GenPat will now flag replacement of a patch (e.g. + the source file has the same contents as a previous patch inside + a patch file) as an error. You can specifically allow it using + the /R switch. Added license to source files.
    • +
    • RC7: Fixed critical bug in GenPat with multiple patches + in a single file. Fixed serious bug in stand-alone EXE runtime: + process kept on running forever. Included case testing through + a Python script to test common usage (and prevent bugs like + the one in GenPat in the future).
    • +
    • RC6: Upgraded to non-beta compiler. Added /A switch + to change block match limit and /O to deactivate the limit. + Updated GUI to support the /O switch.
    • +
    • RC4a to RC5a: input block size is now checked for power + of 2 and fixed if incorrect. When patch file does not yet exist, + no longer forgets to create the header. No longer tries to allocate + memory when there are no chunks. Fixed memory leaks.
    • +
    • Target file date is now preserved inside a patch and restored + on the user system.
    • +
    • MD5 checksums are now used instead of CRC32 checksums, unless + existing patches in a file already are in CRC32 mode.
    • +
    • The patch generator, GenPat, has been completely rewritten + in C++. It no longer needs to keep the entire files in memory, + instead memory usage is a certain percentage of the source file + size. The percentage is based on the block size, larger block + sizes will reduce memory usage.
    • +
    • All runtimes now share a common codebase, perform proper error + checking and don't leave behind files if the input file was + already up to date.
    • +
    • Bug Fix: The patch generator algorithm no longer reduces to + a quadratic runtime if there are many blocks with the same content + in the files to patch.
    • +
    • Bug Fix: The documentation of the command-line utilities was + incorrect and no warnings would be given by the runtimes, causing + the patch not to work (this does not apply to NSIS patches).
    • +
    +
  • +
  • 2.1 +
      +
    • Added argument checking and error handling to GenPat. Now + returns exit codes as well to indicate success/failure (and + the reason for failure). Only GenPat has changed in this version + compared to 2.0 final.
    • +
    • Bug Fix: GenPat no longer gives an Access Violation when attempting + to patch a file smaller than 64 bytes into a file larger than + 64 bytes.
    • +
    +
  • +
  • 2.0 final +
      +
    • Cleaned up source code for the patch generator, which is now + included (this code is written in Borland Delphi 6 and compiles + with the freely available Personal edition).
    • +
    +
  • +
  • 2.0 beta 2 +
      +
    • All new algorithm used in the patch generator: much faster + (up to 90%) while using smaller block sizes (higher compression)
    • +
    • Created a NSIS 2 plugin
    • +
    • Works with small files
    • +
    • Replaces existing patch in file if original file CRC is identical
    • +
    +
  • +
+
+

Credits

+
+

Written by Koen van de Sande.
+ C plug-in initially by Edgewize, updated by Koen van de Sande.
+ New documentation and example by Joost Verburg and Koen van de Sande.

+
+

License

+
+Copyright (C) 2001-2005 Koen van de Sande / Van de Sande Productions
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute
+it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; 
+   you must not claim that you wrote the original software.
+   If you use this software in a product, an acknowledgment in the
+   product documentation would be appreciated but is not required.
+2. Altered versions must be plainly marked as such,
+   and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any distribution.
+
+
+ + + diff --git a/tools/Docs/makensisw/License.txt b/tools/Docs/makensisw/License.txt new file mode 100644 index 0000000..ccb71be --- /dev/null +++ b/tools/Docs/makensisw/License.txt @@ -0,0 +1,17 @@ +Copyright (c) 2002 Robert Rainwater + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. diff --git a/tools/Docs/makensisw/Readme.txt b/tools/Docs/makensisw/Readme.txt new file mode 100644 index 0000000..192b252 --- /dev/null +++ b/tools/Docs/makensisw/Readme.txt @@ -0,0 +1,245 @@ +---------------------------------------------------- +MakeNSISW - MakeNSIS Windows Wrapper +---------------------------------------------------- + + +About MakeNSISW +--------------- +MakeNSISW is a wrapper for the NSIS compiler (MakeNSIS). +MakeNSISW allows you to compile NSIS scripts using a Windows GUI interface. + + +Requirements +------------ +MakeNSISW requires NSIS be installed on your system. The default +directory for this installation is $PROGRAMFILES\NSIS\Contrib\MakeNSISW. + + +Usage: +------ +If you installed the Shell Extensions option during the installation, then +all that is required is that you choose 'Compile NSI' from the right- +click menu on a NSIS script. This will invoke MakeNSISW. + +The format of the parameters when calling MakeNSISW from the commandline is: + makensisw [options] [script.nsi | - [...]] + +For the options, please see the MakeNSIS documentation. + + +Shortcut Keys +------------- +Ctrl+A: Select all text +Ctrl+B: Open Script Folder +Ctrl+C: Copy selected text +Ctrl+D: Open the Define Symbols dialog +Ctrl+E: Edit the script +Ctrl+F: Find text +Ctrl+K: Abort compiler +Ctrl+L: Load a script +Ctrl+R, F7: Recompile the script +Ctrl+T, Ctrl+F5: Test the installer +Ctrl+W: Clear log window +Ctrl+<+|-|0>: Zoom log window +Alt+X: Exit the application +F1: View Documentation +F5: Recompile and Test + + +Version History +--------------- +0.1 + - Initial Release + +0.2 + - Added ability to save output and copy output + +0.3 + - Added option to recompile script (F2 or File|Recompile) + - Added Help Menu + - Return code is now always set + - Added Accelerator key support for Exit and Recompile + - No longer uses NSIS's version string + - Made clearer status message in title bar + - Disabled menu/accelerator functions during compile + +0.4 + - Fixed Copy Selected bug + +0.5 + - Minor Makefile changes (mingw) + - Moved strings into global strings to make editing easier + - Added Clear Log Command under Edit menu + - Recompile no longer clears the log window (use F5) + - Close is now the default button when you hit enter + - added VC++ project, updated resources to work with VC++ + - rearranged directory structure + - makefiles now target ../../makensisw.exe + - removed makensisw home link in help menu (hope this is ok, + doesn't really seem needed to me) + - made display use a fixed width font (Some people may not like + this, but I do) + - added 'test' button (peeks output for 'Output' line) + - made it so that the log shows the most recent 32k. + - made it so that the log always clears on a recompile. + - compiled with VC++ so no longer needs msvcrt.dll + - made the compiler name be a full path (for more flexibility) + +0.6 + - print correct usage if unable to execute compiler + - removed mingw warnings + - set title/branding before errors + - some docs changes + - Added Edit|Edit Script function + +0.7 + - Edit Script should now work for output>32k + - Added resize support (thanks to felfert) + - Added window position saving (thanks to felfert) + - Disable some items when exec of makensis failed + +0.8 + - Added window size constraints (thanks to bcheck) + - Cleaned up the resource file + +0.9 + - Removed global strings (moved into #defines) + - Some GUI changes + - No longer focused Close button (its default anyways) + - Fixed resize bug on minimize/restore (thanks to felfert) + - Made window placement stored in HKLM instead of HKCU, cause + I hate things that get littered in HKCU. + +1.0 + - Fixed bug with large output causing crash + +1.1 + - Crash may actually be fixed + +1.2 + - XP visual style support + +1.3 + - Added Documentation menu item + - Fix GUI problem with About dialog + +1.4 + - Edit Script command will now work with or without file associations + - Added default filename for save dialog + - Use standard fonts + - Documentation menuitem caused recompile + +1.5 + - Fixed Copy All function + +1.6 + - Reduced size from 44k to 12k (kichik) + - Editbox not limited to 32k (now using richedit control) + - Made the log window font-size smaller. + +1.7 + - Added check for warnings + - Added sound for successful compilations + - Update home page and documentation menu items to Sourceforge page + +1.8 + - Contents of log window are now streamed in + - Empty log window check (to prevent random crashes) + +1.9 + - Text always scrolls to bottom (kichik) + - Updated link to new docs + - Makensisw now takes the same parameters as makensis.exe + - Fixed some random crashes + - Drag and Drop Support into the Makensisw window + - Updated icon to more sexy one + - Added Load Script option on File menu + - Added Search Dialog (Ctrl+F) (kichik) + - Added Select All (Ctrl+A), Copy (Ctrl+C), Exit (Alt+X) keys + - Branding text now reflects NSIS version + - Added some simple tool tips + - Added Context Menu in log window + - Added resize gripper + - Ctrl+L loads a script + - Added Clear Log (Ctrl+W) + - Browse Script (Ctrl+B) launches explorer in script directory + - Check for Update command + - Added link to the NSIS Forum under Help menu + - Bunch of other stuff not worth mentioning + - Define Symbols menu (Ctrl+D) + +2.0 + - Improved user interface + - Define Symbols is available even if a script is not loaded + - Defined Symbols are saved on exit and reloaded on start + - Added NSIS Update menu + - Added toolbar for commonly used menus + - Made the Toolbar style flat + - Added option for compile & run + - Added compressor setting option + - Added support for lzma compression + - Added named Symbols sets. + +2.1 + - Added "Cancel compilation" menu item + +2.2 +- Settings saved in HKCU instead of HKLM +- Added menu accelerators to MRU list + +2.3 +- Escape button closes MakeNSISw + +2.3.1 +- Fixed broken command line parameter handling + +2.3.2 +- The size gripper can be used to resize the window + +2.3.3 +- Update check switched from JNetLib to WinInet +- New file type icons + +2.3.4 +- Added Window Info/Spy feature +- System DPI aware +- New toolbar images + +2.3.5 +- Added log window colors +- Basic AppEvents custom sound support for BuildComplete, BuildWarning and BuildError + +2.3.6 +- Added GUID generator tool + +2.4 +- Added Lookup tool +- Use Consolas font if it exists + +2.4.1 +- Close button transforms to Abort when appropriate +- Prevent user from modifying the log +- Log zoom + + +Copyright Information +--------------------- +Copyright (c) 2002 Robert Rainwater +Contributors: Justin Frankel, Fritz Elfert, Amir Szekely, + Sunil Kamath, Joost Verburg, Anders Kjersem. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. diff --git a/tools/Docs/nsDialogs/Readme.html b/tools/Docs/nsDialogs/Readme.html new file mode 100644 index 0000000..a366dd5 --- /dev/null +++ b/tools/Docs/nsDialogs/Readme.html @@ -0,0 +1,878 @@ + + + + + + +nsDialogs + + + + +

NSIS nsDialogs Plug-in

+

Next generation of user interface design

+ +

Table of Contents

+ + + +

Introduction

+ +

nsDialogs allows creation of custom pages in the installer. On top of the built-in pages, nsDialogs can create pages with any type of controls in any order and arrangement. It can create everything from a simple page with one label to form which reacts to user's actions. Modern UI 2, for example, uses nsDialogs to create the welcome and finish pages.

+ +

nsDialogs is a NSIS plug-in, introduced in version 2.29 as a replacement for InstallOptions. nsDialogs doesn't use INI files, so it's way faster than InstallOptions. Integration with the script is tighter and more natural - creating controls is done using plug-in functions and notification is done by directly calling a function in the script. Unlike InstallOptions, there isn't a predefined set of available control type and by providing a lower level access to Windows API, every type of control can be created and pages can be more customizable.

+ +

The same thing that makes nsDialogs more flexible can also make it more complicated for users with no knowledge of Win32 API. This is solved by creating a library of predefined functions, defined in script, that allow creation and handling of controls. This way, novices get easy access to the flexibility, while advanced users still get access to the core functionality by modifying the library or simply avoid using it.

+ +

Step-by-Step Tutorial

+ +

Custom Page

+ +

Before you can start adding controls you need to create a nsDialogs custom page. nsDialogs pages can only be created in a custom page's creator function, not in sections nor regular functions. Lets create a basic script with a empty nsDialogs page as our skeleton:

+ +
!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+XPStyle on
+
+
+Var Dialog
+
+Page custom nsDialogsPage
+Page instfiles
+
+Function nsDialogsPage
+	nsDialogs::Create 1018
+	Pop $Dialog
+
+	${If} $Dialog == error
+		Abort
+	${EndIf}
+
+	nsDialogs::Show
+FunctionEnd
+
+Section
+SectionEnd
+ +

The first call must always be to nsDialogs::Create. It will create a new dialog in the page and return its HWND on the stack. The result must be popped from the stack to prevent stack corruption. If the result is error, the dialog couldn't be created and the page must be aborted!

+

nsDialogs::Create accepts one parameter. It has a very specific function, but to keep things simple for this tutorial, it must always be 1018.

+

HWND is a number that uniquely identifies the dialog and can be used with SendMessage, SetCtlColors and Win32 API functions.

+

The dialog is not fully constructed at this point and you can make modifications to it before it is displayed. To finalize and display the dialog you must call nsDialogs::Show. This function will not return until the user clicks Next, Back or Cancel.

+
+ + +

Adding Controls

+ + +

Compiling the last script and running it results in an empty page which is not very useful. So now we'll add some controls to it to. To do so, we'll use ${NSD_Create*} macros from nsDialogs.nsh. Each of those macros takes 5 parameters - x, y, width, height and text. Each macro also returns one value on the stack, which is the new control's HWND. Like the dialogs HWND, it must be popped from the stack and saved.

+ +

Each of the measurements that the macros take can use one of three unit types - pixels, dialog units or percentage of the dialog's size. It can also be negative to indicate it should be measured from the end. To use dialog units, the measurement must be suffixed with the letter u. To use percentage, the measurement must be suffixed with the percentage sign - %. Any other suffix, or no suffix, means pixels.

+ +

Dialog units allow creation of dialogs that scale well when different fonts or DPI is used. Its size in pixels is determined at runtime based on the font and the DPI. For example, standard pages in the classic NSIS user interface are 266 dialog units wide and 130 dialog units high. Pages in Modern UI are 300 dialogs units wide and 140 dialog units high. In different resolutions, using different fonts or DPI settings, the dialogs will always have the same size in dialog units, but different size in pixels.

+
+
!include nsDialogs.nsh
+!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+XPStyle on
+
+Var Dialog
+Var Label
+Var Text
+
+Page custom nsDialogsPage
+Page instfiles
+
+Function nsDialogsPage
+
+	nsDialogs::Create 1018
+	Pop $Dialog
+
+	${If} $Dialog == error
+		Abort
+	${EndIf}
+
+	${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
+	Pop $Label
+
+	${NSD_CreateText} 0 13u 100% -13u "Type something here..."
+	Pop $Text
+
+	nsDialogs::Show
+
+FunctionEnd
+
+Section
+SectionEnd
+ +

Available control types that can be created with ${NSD_Create*} are: +HLine, +VLine, +Label, +Icon, +Bitmap, +BrowseButton, +Link, +Button, +GroupBox, +CheckBox, +RadioButton (FirstRadioButton and AdditionalRadioButton), +Text, +MLText, +Password, +Number, +FileRequest, +DirRequest, +RichEdit, +ComboBox, +DropList, +ListBox, +SortedListBox, +ProgressBar, +Animation, +HTrackBar, +VTrackBar, +UpDown, +HotKey, +DatePicker, +IPAddress, +NetAddress. +

+ +

Control State

+ + +

Now that we have some controls that the user can interact with, it's time to see what the user actually does with them. For that, we'll first add a "leave callback function" to our page. In that function, we'll query the state of the text control we've created and display it to the user. To do so, we'll use the ${NSD_GetText} macro. Use the ${NSD_GetState} macro for RadioButton and CheckBox controls.

+ +

Note that not all controls support ${NSD_GetText} and some require special handling with specific messages defined in WinMessages.nsh. For example, the ListBox control requires usage of LB_GETCURSEL and LB_GETTEXT. With time, the library of macros in nsDialogs.nsh will fill with more and more macros that'll handle more cases like this.

+
+
!include nsDialogs.nsh
+!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+XPStyle on
+
+Var Dialog
+Var Label
+Var Text
+
+Page custom nsDialogsPage nsDialogsPageLeave
+Page instfiles
+
+Function nsDialogsPage
+
+	nsDialogs::Create 1018
+	Pop $Dialog
+
+	${If} $Dialog == error
+		Abort
+	${EndIf}
+
+	${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
+	Pop $Label
+
+	${NSD_CreateText} 0 13u 100% -13u "Type something here..."
+	Pop $Text
+
+	nsDialogs::Show
+
+FunctionEnd
+
+Function nsDialogsPageLeave
+
+	${NSD_GetText} $Text $0
+	MessageBox MB_OK "You typed:$\n$\n$0"
+
+FunctionEnd
+
+Section
+SectionEnd
+ +

Real-time Notification

+ + +

One of the more exciting new features of nsDialogs is callback function notification of changes to the dialog. nsDialogs can call a function defined in a script in response to a user action such as changing of a text field or click of a button. To make nsDialogs notify us of events, we'll use ${NSD_OnClick} and ${NSD_OnChange}. Not every control supports both of the events. For example, there is nothing to notify about label changes, only clicks.

+ +

When the callback function is called, the control's HWND will be waiting on the stack and must be popped to prevent stack corruption. In this simple example, this is not so useful. But in case of a bigger script where several controls are associated with the same callback function, the HWND can shed some light on which control originated the event.

+ +

The new example will respond to the user typing "hello" in the text box.

+
+
!include nsDialogs.nsh
+!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+XPStyle on
+
+Var Dialog
+Var Label
+Var Text
+
+Page custom nsDialogsPage nsDialogsPageLeave
+Page instfiles
+
+Function nsDialogsPage
+
+	nsDialogs::Create 1018
+	Pop $Dialog
+
+	${If} $Dialog == error
+		Abort
+	${EndIf}
+
+	${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
+	Pop $Label
+
+	${NSD_CreateText} 0 13u 100% -13u "Type something here..."
+	Pop $Text
+	${NSD_OnChange} $Text nsDialogsPageTextChange
+
+	nsDialogs::Show
+
+FunctionEnd
+
+Function nsDialogsPageLeave
+
+	${NSD_GetText} $Text $0
+	MessageBox MB_OK "You typed:$\n$\n$0"
+
+FunctionEnd
+
+Function nsDialogsPageTextChange
+
+	Pop $1 # $1 == $ Text
+
+	${NSD_GetText} $Text $0
+
+	${If} $0 == "hello"
+
+		MessageBox MB_OK "right back at ya!"
+
+	${EndIf}
+
+FunctionEnd
+
+Section
+SectionEnd
+ +

Memory

+ +

So far we have a page that has some basic input controls. But what happens when the user goes to the next page and comes back? With the current code, the user's input will not be remembered. To remember, we'll use the already present leave callback function to store the user's choice in variables and pass these values when creating the controls the next time. For a better example, we'll also add a checkbox to the page and use ${NSD_GetState} and ${NSD_SetState} to get and set its state.

+ +

For clarity, we'll remove some of the notifications from the previous step.

+ +
!include nsDialogs.nsh
+!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+XPStyle on
+
+Var Dialog
+Var Label
+Var Text
+Var Text_State
+Var Checkbox
+Var Checkbox_State
+
+Page custom nsDialogsPage nsDialogsPageLeave
+Page license
+Page instfiles
+
+Function .onInit
+
+	StrCpy $Text_State "Type something here..."
+
+FunctionEnd
+
+Function nsDialogsPage
+
+	nsDialogs::Create 1018
+	Pop $Dialog
+
+	${If} $Dialog == error
+		Abort
+	${EndIf}
+
+	${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
+	Pop $Label
+
+	${NSD_CreateText} 0 13u 100% 12u $Text_State
+	Pop $Text
+
+	${NSD_CreateCheckbox} 0 30u 100% 10u "&Something"
+	Pop $Checkbox
+
+	${If} $Checkbox_State == ${BST_CHECKED}
+		${NSD_Check} $Checkbox
+	${EndIf}
+
+	# alternative for the above ${If}:
+	#${NSD_SetState} $Checkbox_State
+
+	nsDialogs::Show
+
+FunctionEnd
+
+Function nsDialogsPageLeave
+
+	${NSD_GetText} $Text $Text_State
+	${NSD_GetState} $Checkbox $Checkbox_State
+
+FunctionEnd
+
+Section
+SectionEnd
+ +

Function Reference

+ +

Create

+

nsDialogs::Create rect

+

Creates a new dialog. rect specific the identifier of the control whose location will be mimiced. This should usually be 1018, which is control mimiced for creation of built-in pages. The Modern UI also has control 1044 for the welcome and the finish page.

+

Returns the new dialog's HWND on the stack or error.

+ +

CreateControl

+

nsDialogs::CreateControl class style extended_style x y width height text

+

Create a new control in the current dialog. A dialog must exist for this to work, so nsDialogs::Create must be called prior to this function.

+

Returns the new control's HWND on the stack or error.

+ +

Show

+

nsDialogs::Show

+

Displays the page. Call this once finished with nsDialogs::Create, nsDialogs::CreateControl and the rest.

+

Returns nothing.

+ +

SelectFileDialog

+

nsDialogs::SelectFileDialog mode initial_selection filter

+

Displays a file selection dialog to the user. If mode is set to save, displays a file save dialog. If mode is set to open, displays a file open dialog. +

initial_selection can be used to provide the user with a default file to look for and/or a default folder to look in. If initial_selection is empty no default filename will be provided for the user and the dialog will start in the current working directory. If initial_selection specifies just a filename, for example "test.exe", the dialog will be set up to look for a file called test.exe in the current working directory. If initial_selection specifies just a directory, for example "C:\Program Files", the dialog starts in the provided directory with no file name provided. If initial_selection specifies a directory and a filename, for example "C:\Windows\System32\calc.exe", the dialog will be set up to look for a file called calc.exe in the directory C:\Windows\System32.

+

filter is a list of available file filter pairs separated by pipes. A filter pair consists of a display string and a DOS-style wildcard pattern. If an empty string is passed, the default is used ("All Files|*.*").

+

Returns the selected file on the stack or an empty string if the user canceled the operation.

+
+nsDialogs::SelectFileDialog open "$DOCUMENTS\Config.ini" ".ini files|*.ini|All Files|*.*"
+Pop $0
+StrCmp $0 "" ...
+
+ +

SelectFolderDialog

+

nsDialogs::SelectFolderDialog title initial_selection

+

Displays a directory selection dialog to the user.

+

Returns the selected directory on the stack or "error" in case the user canceled the operation or an error occurred.

+ +

SetRTL

+

nsDialogs::SetRTL rtl_setting

+

Sets right-to-left mode on or off. If rtl_setting is 0, it's set to off. If rtl_setting is 1, it's set to on. This function must be called before any calls to nsDialogs::CreateControl.

+

Returns nothing.

+ +

GetUserData

+

nsDialogs::GetUserData control_HWND

+

Returns user data associated with the control on the stack. Use nsDialogs::SetUserData to set this data.

+ +

SetUserData

+

nsDialogs::SetUserData control_HWND data

+

Associates data with the control. Use nsDialogs::GetUserData to get this data.

+

Returns nothing.

+ +

OnBack

+

nsDialogs::OnBack function_address

+

Sets the callback function for the Back button. This function will be called when the user clicks the back button. Call Abort in this function to prevent the user from going back to the last page.

+

Use GetFunctionAddress to get the address of the desired callback function.

+

Returns nothing.

+ +

OnChange

+

nsDialogs::OnChange control_HWND function_address

+

Sets a change notification callback function for the given control. Whenever the control changes, the function will be called and the control's HWND will be waiting on its stack.

+

Use GetFunctionAddress to get the address of the desired callback function.

+

Returns nothing.

+ +

OnClick

+

nsDialogs::OnClick control_HWND function_address

+

Sets a click notification callback function for the given control. Whenever the control is clicked, the function will be called and the control's HWND will be waiting on its stack.

+

Use GetFunctionAddress to get the address of the desired callback function.

+

Returns nothing.

+ +

OnNotify

+

nsDialogs::OnNotify control_HWND function_address

+

Sets a notification callback function for the given control. Whenever the control receives the WM_NOTIFY message, the function will be called and the control's HWND, notification code and a pointer to the NMHDR structure will be waiting on its stack. Use ${NSD_Return} to return a value.

+

Use GetFunctionAddress to get the address of the desired callback function.

+

Returns nothing.

+ +

CreateTimer

+

nsDialogs::CreateTimer function_address timer_interval

+

Sets a timer that'd call the callback function for the given control every in a constant interval. Interval times are specified in milliseconds.

+

Use GetFunctionAddress to get the address of the desired callback function.

+

Returns nothing.

+ +

KillTimer

+

nsDialogs::KillTimer function_address

+

Kills a previously set timer.

+

Use GetFunctionAddress to get the address of the desired callback function.

+

Returns nothing.

+ +

Macro Reference

+

nsDialogs.nsh contains a lot of macros that can make nsDialogs usage a lot easier. Below is a description of each of those macros including purpose, syntax, input and output.

+ +

NSD_Create*

+

${NSD_Create*} x y width height text

+

Create a new control in the current dialog. A dialog must exist for this to work, so nsDialogs::Create must be called prior to this function.

+

Available variants:

+
    +
  • ${NSD_CreateHLine}
  • +
  • ${NSD_CreateVLine}
  • +
  • ${NSD_CreateLabel}
  • +
  • ${NSD_CreateIcon}
  • +
  • ${NSD_CreateBitmap}
  • +
  • ${NSD_CreateBrowseButton}
  • +
  • ${NSD_CreateLink}
  • +
  • ${NSD_CreateButton}
  • +
  • ${NSD_CreateGroupBox}
  • +
  • ${NSD_CreateCheckBox}
  • +
  • ${NSD_CreateRadioButton} (${NSD_CreateFirstRadioButton} and ${NSD_CreateAdditionalRadioButton})
  • +
  • ${NSD_CreateText}
  • +
  • ${NSD_CreateMLText}
  • +
  • ${NSD_CreatePassword}
  • +
  • ${NSD_CreateNumber}
  • +
  • ${NSD_CreateFileRequest}
  • +
  • ${NSD_CreateDirRequest}
  • +
  • ${NSD_CreateRichEdit}
  • +
  • ${NSD_CreateComboBox}
  • +
  • ${NSD_CreateDropList}
  • +
  • ${NSD_CreateListBox}
  • +
  • ${NSD_CreateSortedListBox}
  • +
  • ${NSD_CreateProgressBar}
  • +
  • ${NSD_CreateAnimation}
  • +
  • ${NSD_CreateHTrackBar}
  • +
  • ${NSD_CreateVTrackBar}
  • +
  • ${NSD_CreateUpDown}
  • +
  • ${NSD_CreateHotKey}
  • +
  • ${NSD_CreateDatePicker} (Requires IE 3.1 and ${NSD_InitCommonControlsEx})
  • +
  • ${NSD_CreateIPAddress} (Requires IE 4 and ${NSD_InitCommonControl_IPAddress})
  • +
  • ${NSD_CreateNetAddress} (Requires Vista and ${NSD_InitCommonControl_NetAddress})
  • +
+

Returns the new control's HWND on the stack or error

+ +

NSD_OnBack

+

${NSD_OnBack} function_name

+

See OnBack for more details.

+ +

NSD_OnChange

+

${NSD_OnChange} control_HWND function_name

+

See OnChange for more details.

+

See Real-time Notification for usage example.

+ +

NSD_OnClick

+

${NSD_OnClick} control_HWND function_name

+

See OnClick for more details.

+ +

NSD_OnNotify

+

${NSD_OnNotify} control_HWND function_name

+

See OnNotify for more details.

+ +

NSD_Return

+

${NSD_Return} value

+

Used to return a value back to Windows from a OnNotify callback.

+ +

NSD_SetFocus

+

${NSD_SetFocus} control_HWND

+

Sets focus to a control.

+ +

NSD_CreateTimer

+

${NSD_CreateTimer} function_name timer_interval

+

See CreateTimer for more details.

+ +

NSD_KillTimer

+

${NSD_KillTimer} function_name

+

See KillTimer for more details.

+ +

NSD_AddStyle

+

${NSD_AddStyle} control_HWND style

+

Adds one or more window styles to a control. Multiple styles should be separated with pipes `|'.

+

See MSDN for shared and per-control style descriptions.

+ +

NSD_AddExStyle

+

${NSD_AddExStyle} control_HWND style

+

Adds one or more extended window styles to a control. Multiple styles should be separated with pipes `|'.

+

See MSDN for style descriptions.

+ +

NSD_RemoveStyle

+

${NSD_RemoveStyle} control_HWND style

+

Removes one or more window styles from a control.

+ +

NSD_RemoveExStyle

+

${NSD_RemoveExStyle} control_HWND style

+

Removes one or more extended window styles from a control.

+ +

NSD_GetText

+

${NSD_GetText} control_HWND $output_variable

+

Retrieves the text of a control and stores it into output_variable. Especially useful for textual controls.

+

See Control State for usage example.

+ +

NSD_SetText

+

${NSD_SetText} control_HWND text

+

Sets the text of a control.

+ +

NSD_Edit_SetTextLimit

+

${NSD_Edit_SetTextLimit} control_HWND limit

+

Sets the input length limit for a text control.

+ +

NSD_Edit_SetReadOnly

+

${NSD_Edit_SetReadOnly} control_HWND readonly

+

1 to make the text control read-only or 0 to allow the user to input data.

+ +

NSD_Edit_SetCueBannerText

+

${NSD_Edit_SetCueBannerText} control_HWND displaywhenfocused text

+

Set a text hint displayed when the control is empty. The text is only visible on WinXP and later. Requires XPStyle on.

+ +

NSD_RichEd_SetTextLimit

+

${NSD_RichEd_SetTextLimit} control_HWND limit

+

Sets the input length limit.

+ +

NSD_RichEd_SetEventMask

+

${NSD_RichEd_SetEventMask} control_HWND eventmask

+ +

NSD_RichEd_SetCustomBackgroundColor

+

${NSD_RichEd_SetCustomBackgroundColor} control_HWND COLORREF

+ +

NSD_GetState

+

${NSD_GetState} control_HWND $output_variable

+

Retrieves the state of a check box or a radio button control. Possible outputs are ${BST_CHECKED} and ${BST_UNCHECKED}.

+

See Memory for usage example.

+ +

NSD_SetState

+

${NSD_SetState} control_HWND state

+

Sets the state of a check box or a radio button control. Possible values for state are ${BST_CHECKED} and ${BST_UNCHECKED}.

+

See Memory for usage example.

+ +

NSD_Check

+

${NSD_Check} control_HWND

+

Checks a check box or a radio button control. Same as calling ${NSD_SetState} with ${BST_CHECKED}.

+ +

NSD_Uncheck

+

${NSD_Uncheck} control_HWND

+

Unchecks a check box or a radio button control. Same as calling ${NSD_SetState} with ${BST_UNCHECKED}.

+

See Memory for usage example.

+ +

NSD_CB_AddString

+

${NSD_CB_AddString} combo_HWND string

+

Adds a string to a combo box.

+ +

NSD_CB_InsertString

+

${NSD_CB_InsertString} combo_HWND index string

+

${NSD_CB_PrependString} combo_HWND string

+

${NSD_CB_AppendString} combo_HWND string

+

Insert a string in a specified position in a combo box.

+ +

NSD_CB_SelectString

+

${NSD_CB_SelectString} combo_HWND string

+

Selects a string in a combo box.

+ +

NSD_CB_GetCount

+

${NSD_CB_GetCount} combo_HWND $output_variable

+ +

NSD_LB_AddString

+

${NSD_LB_AddString} listbox_HWND string

+

Adds a string to a list box.

+ +

NSD_LB_InsertString

+

${NSD_LB_InsertString} listbox_HWND index string

+

${NSD_LB_PrependString} listbox_HWND string

+

${NSD_LB_AppendString} listbox_HWND string

+

Insert a string in a specified position in a list box.

+ +

NSD_LB_DelString

+

${NSD_LB_DelString} listbox_HWND string

+

Deletes a string from a list box.

+ +

NSD_LB_DelItem

+

${NSD_LB_DelItem} listbox_HWND itemindex

+

Deletes a string from a list box.

+ +

NSD_LB_Clear

+

${NSD_LB_Clear} listbox_HWND

+

Deletes all strings from a list box.

+ +

NSD_LB_GetCount

+

${NSD_LB_GetCount} listbox_HWND $output_variable

+

Retrieves the number of strings from a list box.

+ +

NSD_LB_SelectString

+

${NSD_LB_SelectString} listbox_HWND string

+

Selects a string in a list box.

+ +

NSD_LB_GetSelection

+

${NSD_LB_GetSelection} listbox_HWND $output_variable

+

Retrieves the selected string from a list box. Returns an empty string if no string is selected.

+ +

NSD_Anim_OpenFile

+

${NSD_Anim_OpenFile} anim_HWND avi_path

+

Opens the specified (silent) .AVI movie clip.

+ +

NSD_Anim_Play

+

${NSD_Anim_Play} anim_HWND

+

Plays the movie clip repeatedly.

+ +

NSD_Anim_Stop

+

${NSD_Anim_Stop} anim_HWND

+

Stops playback.

+ +

NSD_TrackBar_GetPos

+

${NSD_TrackBar_GetPos} track_HWND $output

+ +

NSD_TrackBar_SetPos

+

${NSD_TrackBar_SetPos} track_HWND pos

+ +

NSD_TrackBar_SetRangeMin

+

${NSD_TrackBar_SetRangeMin} track_HWND minpos

+ +

NSD_TrackBar_SetRangeMax

+

${NSD_TrackBar_SetRangeMax} track_HWND maxpos

+ +

NSD_TrackBar_SetTicFreq

+

${NSD_TrackBar_SetTicFreq} track_HWND frequency

+

Sets the interval frequency for tick marks.

+ +

NSD_UD_SetBuddy

+

${NSD_UD_SetBuddy} ud_HWND buddy_HWND

+ +

NSD_UD_GetPos

+

${NSD_UD_GetPos} ud_HWND $output

+ +

NSD_UD_SetPos

+

${NSD_UD_SetPos} ud_HWND pos

+ +

NSD_UD_SetPackedRange

+

${NSD_UD_SetPackedRange} ud_HWND packedrange

+

Sets the min-max range. Two signed 16-bit numbers packed into 32-bits.

+ +

NSD_HK_GetHotKey

+

${NSD_HK_GetHotKey} hk_HWND $output

+

Bits 0..7 specify the virtual key code and bits 8..15 specify the HOTKEYF modifier flags.

+ +

NSD_HK_SetHotKey

+

${NSD_HK_SetHotKey} hk_HWND packedhotkey

+ +

NSD_Date_GetDateFields

+

${NSD_Date_GetDateFields} HWND

+

Returns the month, day and year on the stack.

+ +

NSD_SetBitmap

+

${NSD_SetBitmap} control_HWND image_path $output_variable

+

Loads a bitmap from image_path and displays it on control_HWND created by ${NSD_CreateBitmap}. The image handle is stored in output_variable and should be freed using ${NSD_FreeBitmap} once no longer necessary.

+

The image must be extracted to the user's computer prior to calling this macro. A good place to extract images is $PLUGINSDIR.

+
!include nsDialogs.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+
+Page custom nsDialogsImage
+Page instfiles
+
+Var Dialog
+Var ImageCtrl
+Var BmpHandle
+
+Function .onInit
+	InitPluginsDir
+	File /oname=$PLUGINSDIR\image.bmp "${NSISDIR}\Contrib\Graphics\Header\nsis-r.bmp"
+FunctionEnd
+
+Function nsDialogsImage
+	nsDialogs::Create 1018
+	Pop $Dialog
+
+	${If} $Dialog == error
+		Abort
+	${EndIf}
+
+	${NSD_CreateBitmap} 0 0 100% 100% ""
+	Pop $ImageCtrl
+	${NSD_SetBitmap} $ImageCtrl $PLUGINSDIR\image.bmp $BmpHandle
+
+	nsDialogs::Show
+
+	${NSD_FreeBitmap} $BmpHandle
+FunctionEnd
+
+Section
+SectionEnd
+ +

NSD_SetStretchedBitmap

+

${NSD_SetStretchedBitmap} control_HWND image_path $output_variable

+

Loads and displays a bitmap just like ${NSD_SetImage} but stretches the image to fit the control.

+ +

NSD_ClearBitmap

+

${NSD_ClearBitmap} control_HWND

+

Clears a bitmap from a image control.

+ +

NSD_FreeBitmap

+

${NSD_FreeImage} image_handle

+

Frees an image handle previously loaded with ${NSD_SetImage} or ${NSD_SetStretchedBitmap}.

+ +

NSD_SetIcon

+

${NSD_SetIcon} control_HWND image_path $output_variable

+

Same as ${NSD_SetImage}, but used for loading and setting an icon in a control created by ${NSD_CreateIcon}. The image handle is stored in output_variable and should be freed using ${NSD_FreeIcon} once no longer necessary.

+ +

NSD_SetIconFromInstaller

+

${NSD_SetIconFromInstaller} control_HWND $output_variable

+

Loads the icon used in the installer and displays it on control_HWND created by ${NSD_CreateIcon}. The image handle is stored in output_variable and should be freed using ${NSD_FreeIcon} once no longer necessary.

+ +

NSD_ClearIcon

+

${NSD_ClearIcon} control_HWND

+

Clears an icon from a control.

+ +

NSD_FreeIcon

+

${NSD_FreeIcon} icon_handle

+

Frees an icon handle previously loaded with ${NSD_SetIcon} or ${NSD_SetIconFromInstaller}.

+ + +

FAQ

+
+
    +
  • +Q: Can nsDialogs handle InstallOptions INI files? +
    +

    A: nsDialogs.nsh contains a function called CreateDialogFromINI that can create nsDialogs' dialog from an INI file. It can handle every type of control InstallOptions supports, but doesn't handle the flags or notifications. Examples\nsDialogs\InstallOptions.nsi shows a usage example of this function.

    +
    +
  • +
+
+ + + diff --git a/tools/Docs/nsExec/nsExec.txt b/tools/Docs/nsExec/nsExec.txt new file mode 100644 index 0000000..c87923d --- /dev/null +++ b/tools/Docs/nsExec/nsExec.txt @@ -0,0 +1,55 @@ +nsExec +------ +nsExec will execute command-line based programs and capture the output +without opening a dos box. + + +Usage +----- +nsExec::Exec [/MBCS] [/OEM] [/TIMEOUT=x] path +Pop $0 + +-or- + +nsExec::ExecToLog [/MBCS] [/OEM] [/TIMEOUT=x] path +Pop $0 + +-or- + +nsExec::ExecToStack [/MBCS] [/OEM] [/TIMEOUT=x] path +Pop $0 ; Return +Pop $1 ; Output + +All functions are the same except ExecToLog will print the output +to the log window and ExecToStack will push up to ${NSIS_MAX_STRLEN} +characters of output onto the stack after the return value. + +Use the /MBCS switch to disable Unicode detection and always treat the text as ANSI. + +Use the /OEM switch to convert the output text from OEM to ANSI. + +The timeout value is optional. The timeout is the time in +milliseconds nsExec will wait for output. If output from the +process is received, the timeout value is reset and it will +again wait for more output using the timeout value. See Return +Value for how to check if there was a timeout. + +To ensure that command are executed without problems on all windows versions, +is recommended to use the following syntax: + + nsExec::ExecToStack [OPTIONS] '"PATH" param1 param2 paramN' + +This way the application path may contain non 8.3 paths (with spaces) + +Return Value +------------ +If nsExec is unable to execute the process, it will return "error" +on the top of the stack, if the process timed out it will return +"timeout", else it will return the return code from the +executed process. + + +Copyright Info +-------------- +Copyright (c) 2002 Robert Rainwater +Thanks to Justin Frankel and Amir Szekely \ No newline at end of file diff --git a/tools/Examples/AdvSplash/Example.nsi b/tools/Examples/AdvSplash/Example.nsi new file mode 100644 index 0000000..751c836 --- /dev/null +++ b/tools/Examples/AdvSplash/Example.nsi @@ -0,0 +1,35 @@ +Name "AdvSplash.dll test" + +OutFile "AdvSplash Test.exe" + +XPStyle on + +Function .onInit + # the plugins dir is automatically deleted when the installer exits + InitPluginsDir + File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" + #optional + #File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav" + + MessageBox MB_OK "Fading" + + advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash + + Pop $0 ; $0 has '1' if the user closed the splash screen early, + ; '0' if everything closed normally, and '-1' if some error occurred. + + MessageBox MB_OK "Transparency" + File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp" + advsplash::show 2000 0 0 0x1856B1 $PLUGINSDIR\splash + Pop $0 + + MessageBox MB_OK "Transparency/Fading" + File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Graphics\Wizard\llama.bmp" + advsplash::show 1000 600 400 0x04025C $PLUGINSDIR\splash + Pop $0 + + Delete $PLUGINSDIR\splash.bmp +FunctionEnd + +Section +SectionEnd \ No newline at end of file diff --git a/tools/Examples/AppGen.nsi b/tools/Examples/AppGen.nsi new file mode 100644 index 0000000..d0fd977 --- /dev/null +++ b/tools/Examples/AppGen.nsi @@ -0,0 +1,78 @@ +/* +Note: This is not a installer example script, it's a script for a simple application used by some of the other examples. +*/ + +!define /math ARCBITS ${NSIS_PTR_SIZE} * 8 +Name "${NAME}" +!define /IfNDef OUTFILE "" +OutFile "${OUTFILE}" +Unicode True +!define /IfNDef REL User +RequestExecutionLevel ${REL} +XPStyle On +ManifestDPIAware True +AutoCloseWindow True +BrandingText " " +Caption "$(^Name) (${ARCBITS}-bit)" +MiscButtonText " " " " "E&xit" " " +LicenseBkColor /windows + +!ifdef COMPANY +!ifndef NOPEVI +!define /IfNDef VER 1.2.3.4 +VIProductVersion ${VER} +VIAddVersionKey /LANG=0 "FileVersion" "${VER}" +VIAddVersionKey /LANG=0 "CompanyName" "${COMPANY}" +VIAddVersionKey /LANG=0 "LegalCopyright" "${U+00A9} ${COMPANY}" +VIAddVersionKey /LANG=0 "FileDescription" "${NAME}" +!endif +!endif + +!include WinMessages.nsh +!include LogicLib.nsh + +PageEx License + Caption " " + LicenseText "$ExeFile$\n$ExePath" "E&xit" + PageCallbacks "" OnShow +PageExEnd +Page InstFiles + + +Function .onInit +!ifdef AUMI +System::Call 'SHELL32::SetCurrentProcessExplicitAppUserModelID(ws)' "${AUMI}" +!endif +FunctionEnd + + +Function OnShow +FindWindow $0 "#32770" "" $hWndParent +GetDlgItem $R9 $0 0x3E8 + +!ifdef MSG +SendMessage $R9 ${EM_REPLACESEL} "" "STR:${MSG}$\r$\n$\r$\n" +!endif + +!ifdef TMPLDATA +${IfNot} ${FileExists} "$AppData\${NAME}\*" + ; Copy template data from the shared source to this users profile + CreateDirectory "$AppData\${NAME}" + CopyFiles /Silent "${TMPLDATA}\*" "$AppData\${NAME}" +${EndIf} +ReadIniStr $2 "$AppData\${NAME}\Data.ini" Example Count +IntOp $2 $2 + 1 +WriteIniStr "$AppData\${NAME}\Data.ini" Example Count $2 +SendMessage $R9 ${EM_REPLACESEL} "" "STR:Launch Count=$2$\r$\n$\r$\n" +!endif + +SendMessage $R9 ${EM_REPLACESEL} "" "STR:CmdLine=$CmdLine$\r$\n" +ReadEnvStr $2 "USERNAME" +SendMessage $R9 ${EM_REPLACESEL} "" "STR:%USERNAME%=$2$\r$\n" +ReadEnvStr $2 "__COMPAT_LAYER" +StrCmp $2 "" +2 +SendMessage $R9 ${EM_REPLACESEL} "" "STR:Compatibility=$2$\r$\n" +FunctionEnd + +Section +SectionEnd diff --git a/tools/Examples/Banner/Example.nsi b/tools/Examples/Banner/Example.nsi new file mode 100644 index 0000000..2a98e87 --- /dev/null +++ b/tools/Examples/Banner/Example.nsi @@ -0,0 +1,38 @@ +# Look at Readme.txt for usage alongside with the Modern UI + +!include "WinMessages.nsh" + +Name "Banner.dll test" + +OutFile "Banner Test.exe" + +ShowInstDetails show + +Function .onInit + Banner::show "Calculating important stuff..." + + Banner::getWindow + Pop $1 + + again: + IntOp $0 $0 + 1 + Sleep 1 + StrCmp $0 100 0 again + + GetDlgItem $2 $1 1030 + SendMessage $2 ${WM_SETTEXT} 0 "STR:Calculating more important stuff..." + + again2: + IntOp $0 $0 + 1 + Sleep 1 + StrCmp $0 200 0 again2 + + Banner::destroy +FunctionEnd + +Section + DetailPrint "Using previous calculations to quickly calculate 1*2000..." + Sleep 1000 + DetailPrint "Eureka! It's $0!!!" + DetailPrint "" +SectionEnd \ No newline at end of file diff --git a/tools/Examples/BgImage/Example.nsi b/tools/Examples/BgImage/Example.nsi new file mode 100644 index 0000000..a0dc2ce --- /dev/null +++ b/tools/Examples/BgImage/Example.nsi @@ -0,0 +1,101 @@ +Name "BgImage.dll test" + +OutFile "BgImage Test.exe" + +XPStyle on +RequestExecutionLevel user + +!define DEBUG +!macro GetReturnValue +!ifdef DEBUG + Pop $R9 + StrCmp $R9 success +2 + DetailPrint "Error: $R9" +!endif +!macroend + +Function .onGUIInit + # the plugins dir is automatically deleted when the installer exits + InitPluginsDir + # lets extract some bitmaps... + File /oname=$PLUGINSDIR\1.bmp "${NSISDIR}\Contrib\Graphics\Wizard\llama.bmp" + File /oname=$PLUGINSDIR\2.bmp "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" + +!ifdef DEBUG + # turn return values on if in debug mode + BgImage::SetReturn on +!endif + + # set the initial background for images to be drawn on + # we will use a gradient from drak green to dark red + BgImage::SetBg /GRADIENT 0 0x80 0 0x80 0 0 + !insertmacro GetReturnValue + # add an image @ (150,0) + BgImage::AddImage $PLUGINSDIR\2.bmp 150 0 + !insertmacro GetReturnValue + # add the same image only transparent (magenta wiped) @ (150,16) + BgImage::AddImage /TRANSPARENT 255 0 255 $PLUGINSDIR\2.bmp 150 16 + !insertmacro GetReturnValue + # create the font for the following text + CreateFont $R0 "Comic Sans MS" 50 700 + # add a blue shadow for the text + BgImage::AddText "Testing 1... 2... 3..." $R0 0 0 255 48 48 798 198 + !insertmacro GetReturnValue + # add a green shadow for the text + BgImage::AddText "Testing 1... 2... 3..." $R0 0 255 0 52 52 802 202 + !insertmacro GetReturnValue + # add the text + BgImage::AddText "Testing 1... 2... 3..." $R0 255 0 0 50 50 800 200 + !insertmacro GetReturnValue + # show our creation to the world! + BgImage::Redraw + # Refresh doesn't return any value + +FunctionEnd + +ShowInstDetails show + +Section + # play some sounds + FindFirst $0 $1 $WINDIR\Media\*.wav + StrCmp $0 "" skipSound + moreSounds: + StrCmp $1 "" noMoreSounds + BgImage::Sound /WAIT $WINDIR\Media\$1 + # Sound doesn't return any value either + MessageBox MB_YESNO "Another sound?" IDNO noMoreSounds + FindNext $0 $1 + Goto moreSounds + + noMoreSounds: + FindClose $0 + skipSound: + + # change the background image to Mike, tiled + BgImage::SetBg /TILED $PLUGINSDIR\1.bmp + !insertmacro GetReturnValue + # we have to redraw to reflect the changes + BgImage::Redraw + + MessageBox MB_OK "Mike the llama" + + # clear everything + BgImage::Clear + # Clear doesn't return any value + # set another gradient + BgImage::SetBg /GRADIENT 0xFF 0xFA 0xBA 0xAA 0xA5 0x65 + !insertmacro GetReturnValue + # add some text + BgImage::AddText "A Desert for Mike" $R0 0 0 0 50 50 800 150 + !insertmacro GetReturnValue + # add mike as an image + BgImage::AddImage $PLUGINSDIR\1.bmp 50 150 + !insertmacro GetReturnValue + # again, we have to call redraw to reflect changes + BgImage::Redraw +SectionEnd + +Function .onGUIEnd + BgImage::Destroy + # Destroy doesn't return any value +FunctionEnd \ No newline at end of file diff --git a/tools/Examples/FileFunc.ini b/tools/Examples/FileFunc.ini new file mode 100644 index 0000000..5b227f4 --- /dev/null +++ b/tools/Examples/FileFunc.ini @@ -0,0 +1,91 @@ +[Settings] +NumFields=11 +NextButtonText=&Enter + +[Field 1] +Type=Droplist +Flags=NOTIFY +State=" 1. Locate" +ListItems=| 1. Locate| 2. GetSize (file)| (directory)| (no size, no subdir)| 3. DriveSpace| 4. GetDrives (by type)| (all by letter)| 5. GetTime (local time)| (file time)| 6. GetFileAttributes| 7. GetFileVersion| 8. GetExeName| 9. GetExePath|10. GetParameters|11. GetOptions|12. GetRoot|13. GetParent|14. GetFileName|15. GetBaseName|16. GetFileExt|17. BannerTrimPath|18. DirState|19. RefreshShellIcons +Left=44 +Right=190 +Top=1 +Bottom=210 + +[Field 2] +Type=FileRequest +Left=44 +Right=-10 +Top=22 +Bottom=33 + +[Field 3] +Type=DirRequest +Left=44 +Right=-10 +Top=22 +Bottom=33 + +[Field 4] +Type=Text +Left=44 +Right=-10 +Top=36 +Bottom=49 + +[Field 5] +Type=Text +State=LocateCallback +Left=44 +Right=232 +Top=53 +Bottom=66 + +[Field 6] +Type=Button +Text=view +Flags=NOTIFY +Left=236 +Right=255 +Top=54 +Bottom=65 + +[Field 7] +Type=Text +Flags=MULTILINE|VSCROLL|HSCROLL|READONLY +Left=44 +Right=-10 +Top=73 +Bottom=128 + +[Field 8] +Type=Label +Text=Path +Left=10 +Right=43 +Top=24 +Bottom=36 + +[Field 9] +Type=Label +Text=Options +Left=10 +Right=43 +Top=40 +Bottom=52 + +[Field 10] +Type=Label +Text=Function +Left=10 +Right=44 +Top=56 +Bottom=67 + +[Field 11] +Type=Label +Text=Result: +Left=12 +Right=42 +Top=94 +Bottom=102 diff --git a/tools/Examples/FileFunc.nsi b/tools/Examples/FileFunc.nsi new file mode 100644 index 0000000..f109ec7 --- /dev/null +++ b/tools/Examples/FileFunc.nsi @@ -0,0 +1,732 @@ +;_____________________________________________________________________________ +; +; File Functions +;_____________________________________________________________________________ +; +; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + +Name "File Functions" +OutFile "FileFunc.exe" +Caption "$(^Name)" +XPStyle on +RequestExecutionLevel user + +!include "WinMessages.nsh" +!include "FileFunc.nsh" + +Var INI +Var HWND +Var STATE +Var FUNCTION +Var LOCATE1 +Var LOCATE2 +Var GETSIZE1 +Var GETSIZE2 +Var GETSIZE3 +Var GETSIZE4 +Var GETSIZE5 +Var GETSIZE6 +Var DRIVESPACE1 +Var DRIVESPACE2 +Var GETDRIVES1 +Var GETTIME1 +Var GETTIME2 +Var GETFILEATTRIBUTES1 +Var GETFILEATTRIBUTES2 +Var GETFILEVERSION1 +Var GETOPTIONS1 +Var GETOPTIONS2 +Var GETROOT1 +Var GETPARENT1 +Var GETFILENAME1 +Var GETBASENAME1 +Var GETFILEEXT1 +Var BANNERTRIMPATH1 +Var BANNERTRIMPATH2 +Var DIRSTATE1 + +Page Custom ShowCustom LeaveCustom + +Function ShowCustom + InstallOptions::initDialog "$INI" + Pop $hwnd + GetDlgItem $1 $HWND 1201 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1202 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1206 + EnableWindow $1 0 + SendMessage $1 ${WM_ENABLE} 1 0 + StrCpy $LOCATE1 $DOCUMENTS + StrCpy $LOCATE2 '/L=FD /M=*.* /S=0B /G=1 /B=0' + StrCpy $GETSIZE1 '$WINDIR' + StrCpy $GETSIZE2 '/M=Explorer.exe /S=0K /G=0' + StrCpy $GETSIZE3 '$PROGRAMFILES\Common Files' + StrCpy $GETSIZE4 '/S=0M' + StrCpy $GETSIZE5 '$WINDIR' + StrCpy $GETSIZE6 '/G=0' + StrCpy $DRIVESPACE1 'C:\' + StrCpy $DRIVESPACE2 '/D=F /S=M' + StrCpy $GETDRIVES1 'FDD+CDROM' + StrCpy $GETTIME1 '$WINDIR\Explorer.exe' + StrCpy $GETTIME2 'C' + StrCpy $GETFILEATTRIBUTES1 'C:\IO.SYS' + StrCpy $GETFILEATTRIBUTES2 'ALL' + StrCpy $GETFILEVERSION1 '$WINDIR\Explorer.exe' + StrCpy $GETOPTIONS1 '/SILENT=yes /INSTDIR="$PROGRAMFILES\Common Files"' + StrCpy $GETOPTIONS2 '/INSTDIR=' + StrCpy $GETROOT1 'C:\path\file.dll' + StrCpy $GETPARENT1 'C:\path\file.dll' + StrCpy $GETFILENAME1 'C:\path\file.dll' + StrCpy $GETBASENAME1 'C:\path\file.dll' + StrCpy $GETFILEEXT1 'C:\path\file.dll' + StrCpy $BANNERTRIMPATH1 'C:\Server\Documents\Terminal\license.htm' + StrCpy $BANNERTRIMPATH2 '34A' + StrCpy $DIRSTATE1 '$TEMP' + + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE1" + GetDlgItem $1 $HWND 1205 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE2" + InstallOptions::show + Pop $0 +FunctionEnd + +Function LeaveCustom + ReadINIStr $STATE $INI "Field 1" "State" + ReadINIStr $R1 $INI "Field 2" "State" + ReadINIStr $R2 $INI "Field 3" "State" + ReadINIStr $R3 $INI "Field 4" "State" + ReadINIStr $R4 $INI "Field 5" "State" + ReadINIStr $0 $INI "Settings" "State" + StrCmp $0 6 view + StrCmp $0 0 Enter + goto main + + view: + StrCpy $0 '$$' + StrCpy $1 'n' + StrCpy $2 'r' + StrCmp $R4 "LocateCallback" 0 +3 + StrCpy $R0 `Function LocateCallback$\r$\n MessageBox MB_OKCANCEL '$0$$R9 "path\name"=[$$R9]$0\$1$0$$R8 "path" =[$$R8]$0\$1$0$$R7 "name" =[$$R7]$0\$1$0$$R6 "size" =[$$R6]' IDOK +2$\r$\n StrCpy $$R0 StopLocate$\r$\n$\r$\n Push $$R0$\r$\nFunctionEnd` + goto send + StrCmp $R4 "GetDrivesCallback" 0 error + StrCpy $R0 `Function GetDrivesCallback$\r$\n MessageBox MB_OKCANCEL '$0$$9 "drive letter"=[$$9]$0\$1$0$$8 "drive type" =[$$8]' IDOK +2$\r$\n StrCpy $$R0 StopGetDrives$\r$\n StrCpy $$R5 '$$R5$$9 [$$8 Drive]$$\$2$$\$1'$\r$\n$\r$\n Push $$R0$\r$\nFunctionEnd` + goto send + + main: + StrCmp $FUNCTION '' DefaultSend + StrCmp $FUNCTION Locate 0 +4 + StrCpy $LOCATE1 $R2 + StrCpy $LOCATE2 $R3 + goto DefaultSend + StrCmp $FUNCTION GetSize1 0 +4 + StrCpy $GETSIZE1 $R2 + StrCpy $GETSIZE2 $R3 + goto DefaultSend + StrCmp $FUNCTION GetSize2 0 +4 + StrCpy $GETSIZE3 $R2 + StrCpy $GETSIZE4 $R3 + goto DefaultSend + StrCmp $FUNCTION GetSize3 0 +4 + StrCpy $GETSIZE5 $R2 + StrCpy $GETSIZE6 $R3 + goto DefaultSend + StrCmp $FUNCTION DriveSpace 0 +4 + StrCpy $DRIVESPACE1 $R1 + StrCpy $DRIVESPACE2 $R3 + goto DefaultSend + StrCmp $FUNCTION GetDrives 0 +3 + StrCpy $GETDRIVES1 $R1 + goto DefaultSend + StrCmp $FUNCTION GetTime 0 +4 + StrCpy $GETTIME1 $R1 + StrCpy $GETTIME2 $R3 + goto DefaultSend + StrCmp $FUNCTION GetFileAttributes 0 +4 + StrCpy $GETFILEATTRIBUTES1 $R1 + StrCpy $GETFILEATTRIBUTES2 $R3 + goto DefaultSend + StrCmp $FUNCTION GetFileVersion 0 +3 + StrCpy $GETFILEVERSION1 $R1 + goto DefaultSend + StrCmp $FUNCTION GetOptions 0 +4 + StrCpy $GETOPTIONS1 $R1 + StrCpy $GETOPTIONS2 $R3 + goto DefaultSend + StrCmp $FUNCTION GetRoot 0 +3 + StrCpy $GETROOT1 $R1 + goto DefaultSend + StrCmp $FUNCTION GetParent 0 +3 + StrCpy $GETPARENT1 $R1 + goto DefaultSend + StrCmp $FUNCTION GetFileName 0 +3 + StrCpy $GETFILENAME1 $R1 + goto DefaultSend + StrCmp $FUNCTION GetBaseName 0 +3 + StrCpy $GETBASENAME1 $R1 + goto DefaultSend + StrCmp $FUNCTION GetFileExt 0 +3 + StrCpy $GETFILEEXT1 $R1 + goto DefaultSend + StrCmp $FUNCTION BannerTrimPath 0 +4 + StrCpy $BANNERTRIMPATH1 $R1 + StrCpy $BANNERTRIMPATH2 $R3 + goto DefaultSend + StrCmp $FUNCTION DirState 0 +2 + StrCpy $DIRSTATE1 $R2 + + DefaultSend: + GetDlgItem $1 $HWND 1201 + EnableWindow $1 1 + ShowWindow $1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1202 + EnableWindow $1 1 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1203 + EnableWindow $1 1 + ShowWindow $1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1204 + EnableWindow $1 1 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1205 + EnableWindow $1 1 + GetDlgItem $1 $HWND 1206 + ShowWindow $1 0 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1207 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + + ReadINIStr $0 $INI "Field 1" "State" + StrCmp $0 " 1. Locate" 0 GetSize1Send + StrCpy $FUNCTION Locate + GetDlgItem $1 $HWND 1203 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE1" + GetDlgItem $1 $HWND 1204 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE2" + GetDlgItem $1 $HWND 1206 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:LocateCallback" + GetDlgItem $1 $HWND 1207 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Path" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Options" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Function" + abort + + GetSize1Send: + StrCmp $0 " 2. GetSize (file)" 0 GetSize2Send + StrCpy $FUNCTION 'GetSize1' + GetDlgItem $1 $HWND 1203 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE1" + GetDlgItem $1 $HWND 1204 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE2" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:File" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Options" + Abort + + GetSize2Send: + StrCmp $0 " (directory)" 0 GetSize3Send + StrCpy $FUNCTION 'GetSize2' + GetDlgItem $1 $HWND 1203 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE3" + GetDlgItem $1 $HWND 1204 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE4" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Directory" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Options" + Abort + + GetSize3Send: + StrCmp $0 " (no size, no subdir)" 0 DriveSpaceSend + StrCpy $FUNCTION 'GetSize3' + GetDlgItem $1 $HWND 1203 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE5" + GetDlgItem $1 $HWND 1204 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE6" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Directory" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Options" + Abort + + DriveSpaceSend: + StrCmp $0 " 3. DriveSpace" 0 GetDrivesSend + StrCpy $FUNCTION DriveSpace + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$DRIVESPACE1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$DRIVESPACE2" + GetDlgItem $1 $HWND 1206 + ShowWindow $1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1207 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Drive" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Options" + abort + + GetDrivesSend: + StrCmp $0 " 4. GetDrives (by type)" 0 GetDrives2Send + StrCpy $FUNCTION GetDrives + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETDRIVES1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1206 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:GetDrivesCallback" + GetDlgItem $1 $HWND 1207 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Function" + abort + + GetDrives2Send: + StrCmp $0 " (all by letter)" 0 GetTime1Send + StrCpy $FUNCTION '' + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + EnableWindow $1 0 + SendMessage $1 ${WM_ENABLE} 1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:ALL" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1206 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:GetDrivesCallback" + GetDlgItem $1 $HWND 1207 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Function" + abort + + GetTime1Send: + StrCmp $0 " 5. GetTime (local time)" 0 GetTime2Send + StrCpy $FUNCTION '' + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + EnableWindow $1 0 + SendMessage $1 ${WM_ENABLE} 1 0 + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + EnableWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:L" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + Abort + + GetTime2Send: + StrCmp $0 " (file time)" 0 GetFileAttributesSend + StrCpy $FUNCTION GetTime + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETTIME1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETTIME2" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:File" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + Abort + + GetFileAttributesSend: + StrCmp $0 " 6. GetFileAttributes" 0 GetFileVersionSend + StrCpy $FUNCTION GetFileAttributes + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEATTRIBUTES1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEATTRIBUTES2" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Path" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Attrib" + Abort + + GetFileVersionSend: + StrCmp $0 " 7. GetFileVersion" 0 GetCmdSend + StrCpy $FUNCTION GetFileVersion + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEVERSION1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:File" + Abort + + GetCmdSend: + StrCmp $0 " 8. GetExeName" +3 + StrCmp $0 " 9. GetExePath" +2 + StrCmp $0 "10. GetParameters" 0 GetOptionsSend + StrCpy $FUNCTION '' + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + Abort + + GetOptionsSend: + StrCmp $0 "11. GetOptions" 0 GetRootSend + StrCpy $FUNCTION GetOptions + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETOPTIONS1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETOPTIONS2" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Parameters" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + Abort + + GetRootSend: + StrCmp $0 "12. GetRoot" 0 GetParentSend + StrCpy $FUNCTION GetRoot + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETROOT1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:FullPath" + Abort + + GetParentSend: + StrCmp $0 "13. GetParent" 0 GetFileNameSend + StrCpy $FUNCTION GetParent + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETPARENT1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:PathString" + Abort + + GetFileNameSend: + StrCmp $0 "14. GetFileName" 0 GetBaseNameSend + StrCpy $FUNCTION GetFileName + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILENAME1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:PathString" + Abort + + GetBaseNameSend: + StrCmp $0 "15. GetBaseName" 0 GetFileExtSend + StrCpy $FUNCTION GetBaseName + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETBASENAME1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:FileString" + Abort + + GetFileExtSend: + StrCmp $0 "16. GetFileExt" 0 BannerTrimPathSend + StrCpy $FUNCTION GetFileExt + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEEXT1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:FileString" + Abort + + BannerTrimPathSend: + StrCmp $0 "17. BannerTrimPath" 0 DirStateSend + StrCpy $FUNCTION BannerTrimPath + GetDlgItem $1 $HWND 1201 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$BANNERTRIMPATH1" + GetDlgItem $1 $HWND 1202 + ShowWindow $1 1 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$BANNERTRIMPATH2" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:PathString" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + Abort + + DirStateSend: + StrCmp $0 "18. DirState" 0 RefreshShellIconsSend + StrCpy $FUNCTION DirState + GetDlgItem $1 $HWND 1203 + ShowWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$DIRSTATE1" + GetDlgItem $1 $HWND 1204 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Directory" + Abort + + RefreshShellIconsSend: + StrCmp $0 "19. RefreshShellIcons" 0 Abort + StrCpy $FUNCTION '' + GetDlgItem $1 $HWND 1205 + ShowWindow $1 0 + + Abort: + Abort + +;=Enter= + Enter: + StrCpy $R0 '' + StrCpy $R5 '' + + StrCmp $STATE " 1. Locate" Locate + StrCmp $STATE " 2. GetSize (file)" GetSize + StrCmp $STATE " (directory)" GetSize + StrCmp $STATE " (no size, no subdir)" GetSize + StrCmp $STATE " 3. DriveSpace" DriveSpace + StrCmp $STATE " 4. GetDrives (by type)" GetDrives + StrCmp $STATE " (all by letter)" GetDrives + StrCmp $STATE " 5. GetTime (local time)" GetTime + StrCmp $STATE " (file time)" GetTime + StrCmp $STATE " 6. GetFileAttributes" GetFileAttributes + StrCmp $STATE " 7. GetFileVersion" GetFileVersion + StrCmp $STATE " 8. GetExeName" GetExeName + StrCmp $STATE " 9. GetExePath" GetExePath + StrCmp $STATE "10. GetParameters" GetParameters + StrCmp $STATE "11. GetOptions" GetOptions + StrCmp $STATE "12. GetRoot" GetRoot + StrCmp $STATE "13. GetParent" GetParent + StrCmp $STATE "14. GetFileName" GetFileName + StrCmp $STATE "15. GetBaseName" GetBaseName + StrCmp $STATE "16. GetFileExt" GetFileExt + StrCmp $STATE "17. BannerTrimPath" BannerTrimPath + StrCmp $STATE "18. DirState" DirState + StrCmp $STATE "19. RefreshShellIcons" RefreshShellIcons + Abort + + Locate: + ${Locate} "$R2" "$R3" "LocateCallback" + IfErrors error + StrCmp $R0 StopLocate 0 +3 + StrCpy $R0 'stopped' + goto send + StrCpy $R0 'done' + goto send + + GetSize: + ${GetSize} "$R2" "$R3" $0 $1 $2 + IfErrors error + StrCpy $R0 "Size=$0$\r$\nFiles=$1$\r$\nFolders=$2" + goto send + + DriveSpace: + ${DriveSpace} "$R1" "$R3" $0 + IfErrors error + StrCpy $R0 "$0" + goto send + + GetDrives: + ${GetDrives} "$R1" "GetDrivesCallback" + StrCmp $R0 StopGetDrives 0 +3 + StrCpy $R0 '$R5stopped' + goto send + StrCpy $R0 '$R5done' + goto send + + GetTime: + ${GetTime} "$R1" "$R3" $0 $1 $2 $3 $4 $5 $6 + IfErrors error + StrCpy $R0 'Date=$0/$1/$2 ($3)$\r$\nTime=$4:$5:$6' + goto send + + GetFileAttributes: + ${GetFileAttributes} "$R1" "$R3" $0 + IfErrors error + StrCpy $R0 '$0' + goto send + + GetFileVersion: + ${GetFileVersion} "$R1" $0 + IfErrors error + StrCpy $R0 '$0' + goto send + + GetExeName: + ${GetExeName} $0 + StrCpy $R0 '$0' + goto send + + GetExePath: + ${GetExePath} $0 + StrCpy $R0 '$0' + goto send + + GetParameters: + ${GetParameters} $0 + StrCpy $R0 '$0' + StrCmp $R0 '' 0 send + StrCpy $R0 'no parameters' + goto send + + GetOptions: + ${GetOptions} "$R1" "$R3" $0 + IfErrors error + StrCpy $R0 '$0' + goto send + + GetRoot: + ${GetRoot} "$R1" $0 + StrCpy $R0 '$0' + goto send + + GetParent: + ${GetParent} "$R1" $0 + StrCpy $R0 '$0' + goto send + + GetFileName: + ${GetFileName} "$R1" $0 + StrCpy $R0 '$0' + goto send + + GetBaseName: + ${GetBaseName} "$R1" $0 + StrCpy $R0 '$0' + goto send + + GetFileExt: + ${GetFileExt} "$R1" $0 + StrCpy $R0 '$0' + goto send + + BannerTrimPath: + ${BannerTrimPath} "$R1" "$R3" $0 + StrCpy $R0 '$0' + goto send + + DirState: + ${DirState} "$R2" $0 + StrCpy $R0 '$0' + goto send + + RefreshShellIcons: + ${RefreshShellIcons} + StrCpy $R0 'done' + goto send + + error: + StrCpy $R0 'error' + + send: + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$R0" + + abort +FunctionEnd + +Function LocateCallback + MessageBox MB_OKCANCEL '$$R9 "path\name"=[$R9]$\n$$R8 "path" =[$R8]$\n$$R7 "name" =[$R7]$\n$$R6 "size" =[$R6]' IDOK +2 + StrCpy $R0 StopLocate + + Push $R0 +FunctionEnd + +Function GetDrivesCallback + MessageBox MB_OKCANCEL '$$9 "drive letter"=[$9]$\n$$8 "drive type" =[$8]' IDOK +2 + StrCpy $R0 StopGetDrives + StrCpy $R5 '$R5$9 [$8 Drive]$\r$\n' + + Push $R0 +FunctionEnd + +Function .onInit + InitPluginsDir + GetTempFileName $INI $PLUGINSDIR + File /oname=$INI "FileFunc.ini" +FunctionEnd + +Page instfiles + +Section "Empty" +SectionEnd diff --git a/tools/Examples/FileFuncTest.nsi b/tools/Examples/FileFuncTest.nsi new file mode 100644 index 0000000..0a2db35 --- /dev/null +++ b/tools/Examples/FileFuncTest.nsi @@ -0,0 +1,572 @@ +;_____________________________________________________________________________ +; +; File Functions Test +;_____________________________________________________________________________ +; +; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + +Name "File Functions Test" +OutFile "FileFuncTest.exe" +Caption "$(^Name)" +ShowInstDetails show +XPStyle on +RequestExecutionLevel user + +Var FUNCTION +Var OUT1 +Var OUT2 +Var OUT3 +Var OUT4 +Var OUT5 +Var OUT6 +Var OUT7 + +!include "FileFunc.nsh" +!include "LogicLib.nsh" + +;############### INSTALL ############### + +!define StackVerificationStart `!insertmacro StackVerificationStart` +!macro StackVerificationStart _FUNCTION + StrCpy $FUNCTION ${_FUNCTION} + Call StackVerificationStart +!macroend + +!define StackVerificationEnd `!insertmacro StackVerificationEnd` +!macro StackVerificationEnd + Call StackVerificationEnd +!macroend + +Function StackVerificationStart + StrCpy $0 !0 + StrCpy $1 !1 + StrCpy $2 !2 + StrCpy $3 !3 + StrCpy $4 !4 + StrCpy $5 !5 + StrCpy $6 !6 + StrCpy $7 !7 + StrCpy $8 !8 + StrCpy $9 !9 + StrCpy $R0 !R0 + StrCpy $R1 !R1 + StrCpy $R2 !R2 + StrCpy $R3 !R3 + StrCpy $R4 !R4 + StrCpy $R5 !R5 + StrCpy $R6 !R6 + StrCpy $R7 !R7 + StrCpy $R8 !R8 + StrCpy $R9 !R9 +FunctionEnd + +Function StackVerificationEnd + IfErrors +3 + DetailPrint 'PASSED $FUNCTION no errors' + goto +2 + DetailPrint 'FAILED $FUNCTION error' + + StrCmp $0 '!0' 0 error + StrCmp $1 '!1' 0 error + StrCmp $2 '!2' 0 error + StrCmp $3 '!3' 0 error + StrCmp $4 '!4' 0 error + StrCmp $5 '!5' 0 error + StrCmp $6 '!6' 0 error + StrCmp $7 '!7' 0 error + StrCmp $8 '!8' 0 error + StrCmp $9 '!9' 0 error + StrCmp $R0 '!R0' 0 error + StrCmp $R1 '!R1' 0 error + StrCmp $R2 '!R2' 0 error + StrCmp $R3 '!R3' 0 error + StrCmp $R4 '!R4' 0 error + StrCmp $R5 '!R5' 0 error + StrCmp $R6 '!R6' 0 error + StrCmp $R7 '!R7' 0 error + StrCmp $R8 '!R8' 0 error + StrCmp $R9 '!R9' 0 error + DetailPrint 'PASSED $FUNCTION stack' + goto end + + error: + DetailPrint 'FAILED $FUNCTION stack' +; MessageBox MB_OKCANCEL '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}' IDOK +2 +; quit + + end: +FunctionEnd + + + +Section Locate + ${StackVerificationStart} Locate + + ${Locate} '$DOCUMENTS' '/L=FD /M=*.* /S=0B /G=0' 'LocateCallback' + + ${StackVerificationEnd} +SectionEnd + +Function LocateCallback +; MessageBox MB_YESNO '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}$\n$\nContinue?' IDYES +2 +; StrCpy $0 StopLocate + + Push $0 +FunctionEnd + + +Section GetSize + ${StackVerificationStart} GetSize + + ${GetSize} '$WINDIR' '/M=Explorer.exe /S=0K /G=0' $OUT1 $OUT2 $OUT3 + + ${StackVerificationEnd} +SectionEnd + + +Section DriveSpace + ${StackVerificationStart} DriveSpace + + ${DriveSpace} 'C:\' '/D=F /S=M' $OUT1 + + ${StackVerificationEnd} +SectionEnd + + +Section GetDrives + ${StackVerificationStart} GetDrives + + ${GetDrives} 'FDD+CDROM' 'GetDrivesCallback' + + ${StackVerificationEnd} +SectionEnd + +Function GetDrivesCallback +; MessageBox MB_YESNO '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}$\n$\nContinue?' IDYES +2 +; StrCpy $0 StopGetDrives + + Push $0 +FunctionEnd + + +Section GetTime + ${StackVerificationStart} GetTime + + ${GetTime} '' 'L' $OUT1 $OUT2 $OUT3 $OUT4 $OUT5 $OUT6 $OUT7 + + ${StackVerificationEnd} +SectionEnd + + +Section GetFileAttributes + ${StackVerificationStart} GetFileAttributes + + ${GetFileAttributes} '$WINDIR\explorer.exe' 'ALL' $OUT1 + + ${StackVerificationEnd} +SectionEnd + + +Section GetFileVersion + ${StackVerificationStart} GetFileVersion + + ${GetFileVersion} '$WINDIR\explorer.exe' $OUT1 + + ${StackVerificationEnd} +SectionEnd + + +Section GetExeName + ${StackVerificationStart} GetExeName + + ${GetExeName} $OUT1 + + ${StackVerificationEnd} +SectionEnd + + +Section GetExePath + ${StackVerificationStart} GetExePath + + ${GetExePath} $OUT1 + + ${StackVerificationEnd} +SectionEnd + + +Section GetParameters + ${StackVerificationStart} GetParameters + + # basic stuff + + StrCpy $CMDLINE '"$PROGRAMFILES\Something\Hello.exe"' + ${GetParameters} $OUT1 + StrCpy $CMDLINE '"$PROGRAMFILES\Something\Hello.exe" test' + ${GetParameters} $OUT2 + StrCpy $CMDLINE '"$PROGRAMFILES\Something\Hello.exe" "test"' + ${GetParameters} $OUT3 + StrCpy $CMDLINE 'C:\Hello.exe' + ${GetParameters} $OUT4 + StrCpy $CMDLINE 'C:\Hello.exe test' + ${GetParameters} $OUT5 + StrCpy $CMDLINE 'C:\Hello.exe "test"' + ${GetParameters} $OUT6 + StrCpy $CMDLINE 'C:\Hello.exe test test ' + ${GetParameters} $OUT7 + + ${If} $OUT1 != "" + ${OrIf} $OUT2 != "test" + ${OrIf} $OUT3 != '"test"' + ${OrIf} $OUT4 != "" + ${OrIf} $OUT5 != "test" + ${OrIf} $OUT6 != '"test"' + ${OrIf} $OUT7 != 'test test' + SetErrors + ${EndIf} + + # some corner cases + + StrCpy $CMDLINE '' + ${GetParameters} $OUT1 + StrCpy $CMDLINE '"' + ${GetParameters} $OUT2 + StrCpy $CMDLINE '""' + ${GetParameters} $OUT3 + StrCpy $CMDLINE '"" test' + ${GetParameters} $OUT4 + StrCpy $CMDLINE ' test' + ${GetParameters} $OUT5 + StrCpy $CMDLINE ' test' # left over bug(?) from old GetParameters + # it starts looking for ' ' from the third char + ${GetParameters} $OUT6 + StrCpy $CMDLINE ' ' + ${GetParameters} $OUT7 + + ${If} $OUT1 != "" + ${OrIf} $OUT2 != "" + ${OrIf} $OUT3 != "" + ${OrIf} $OUT4 != "" + ${OrIf} $OUT5 != "" + ${OrIf} $OUT6 != "" + ${OrIf} $OUT7 != "" + SetErrors + ${EndIf} + + ${StackVerificationEnd} +SectionEnd + + +Section GetOptions + ${StackVerificationStart} GetOptions + + ${GetOptions} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1 + StrCmp $OUT1 'C:\Program Files\Common Files' 0 error + + ${GetOptions} '-TMP=temp.tmp -INSTDIR="C:/Program Files/Common Files" -SILENT=yes' '-INSTDIR=' $OUT1 + StrCmp $OUT1 'C:/Program Files/Common Files' 0 error + + ${GetOptions} "/INSTDIR='C:/Program Files/Common Files' /SILENT=yes" '/INSTDIR=' $OUT1 + StrCmp $OUT1 'C:/Program Files/Common Files' 0 error + + StrCpy $OUT1 '/INSTDIR=`C:/Program Files/Common Files` /SILENT=yes' + ${GetOptions} '$OUT1' '/INSTDIR=' $OUT1 + StrCmp $OUT1 'C:/Program Files/Common Files' 0 error + + ${GetOptions} '/SILENT=yes /INSTDIR=C:\Program Files\Common Files' '/INSTDIR=' $OUT1 + StrCmp $OUT1 'C:\Program Files\Common Files' 0 error + + ${GetOptions} "/INSTDIR=common directory: 'C:\Program Files\Common Files' /SILENT=yes" '/INSTDIR=' $OUT1 + StrCmp $OUT1 "common directory: 'C:\Program Files\Common Files'" 0 error + + ${GetOptions} '/INSTDIR=WxxxW /SILENT=yes' '/INSTDIR=' $OUT1 + StrCmp $OUT1 'WxxxW' 0 error + + ${GetOptions} "/Prm='/D=True' /D=1" '/D=' $OUT1 + StrCmp $OUT1 "1" 0 error + + ${GetOptions} "/D=1 /Prm='/D=True'" '/Prm=' $OUT1 + StrCmp $OUT1 "/D=True" 0 error + + ${GetOptions} `/D=1 /Prm='/D="True" /S="/Temp"'` '/Prm=' $OUT1 + StrCmp $OUT1 '/D="True" /S="/Temp"' 0 error + + ${GetOptions} `/INSTDIR='"C:/Program Files/Common Files"' /SILENT=yes` '/INSTDIR=' $OUT1 + StrCmp $OUT1 '"C:/Program Files/Common Files"' 0 error + + ${GetOptions} `/INSTDIR='"C:/Program Files/Common Files"' /SILENT=yes` '/INSTDIR*=' $OUT1 + IfErrors 0 error + StrCmp $OUT1 '' 0 error + + ${GetOptions} `/INSTDIR="C:/Program Files/Common Files" /SILENT=yes` '' $OUT1 + IfErrors 0 error + StrCmp $OUT1 '' 0 error + + ${GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT' '/SILENT' $OUT1 + IfErrors error + StrCmp $OUT1 '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section GetOptionsS + ${StackVerificationStart} GetOptionsS + + ${GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1 + IfErrors error + StrCmp $OUT1 'C:\Program Files\Common Files' 0 error + + ${GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/Instdir=' $OUT1 + IfErrors 0 error + StrCmp $OUT1 '' 0 error + + ${GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT' '/SILENT' $OUT1 + IfErrors error + StrCmp $OUT1 '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section GetRoot + ${StackVerificationStart} GetRoot + + ${GetRoot} 'C:\Program Files\NSIS' $OUT1 + StrCmp $OUT1 'C:' 0 error + + ${GetRoot} '\\SuperPimp\NSIS\Source\exehead\Ui.c' $OUT1 + StrCmp $OUT1 '\\SuperPimp\NSIS' 0 error + + ${GetRoot} '\\Program Files\NSIS' $OUT1 + StrCmp $OUT1 '\\Program Files\NSIS' 0 error + + ${GetRoot} '\\Program Files\NSIS\' $OUT1 + StrCmp $OUT1 '\\Program Files\NSIS' 0 error + + ${GetRoot} '\\Program Files\NSIS\Source\exehead\Ui.c' $OUT1 + StrCmp $OUT1 '\\Program Files\NSIS' 0 error + + ${GetRoot} '\Program Files\NSIS' $OUT1 + StrCmp $OUT1 '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section GetParent + ${StackVerificationStart} GetParent + + ${GetParent} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + StrCmp $OUT1 'C:\Program Files\Winamp' 0 error + + ${GetParent} 'C:\Program Files\Winamp\plugins' $OUT1 + StrCmp $OUT1 'C:\Program Files\Winamp' 0 error + + ${GetParent} 'C:\Program Files\Winamp\plugins\' $OUT1 + StrCmp $OUT1 'C:\Program Files\Winamp' 0 error + + ${GetParent} 'C:\' $OUT1 + StrCmp $OUT1 '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section GetFileName + ${StackVerificationStart} GetFileName + + ${GetFileName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + StrCmp $OUT1 'uninstwa.exe' 0 error + + ${GetFileName} 'uninstwa.exe' $OUT1 + StrCmp $OUT1 'uninstwa.exe' 0 error + + ${GetFileName} 'C:\Program Files\Winamp\plugins' $OUT1 + StrCmp $OUT1 'plugins' 0 error + + ${GetFileName} 'C:\Program Files\Winamp\plugins\' $OUT1 + StrCmp $OUT1 'plugins' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section GetBaseName + ${StackVerificationStart} GetBaseName + + ${GetBaseName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + StrCmp $OUT1 'uninstwa' 0 error + + ${GetBaseName} 'uninstwa.exe' $OUT1 + StrCmp $OUT1 'uninstwa' 0 error + + ${GetBaseName} 'C:\Program Files\Winamp\plugins' $OUT1 + StrCmp $OUT1 'plugins' 0 error + + ${GetBaseName} 'C:\Program Files\Winamp\plugins\' $OUT1 + StrCmp $OUT1 '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section GetFileExt + ${StackVerificationStart} GetFileExt + + ${GetFileExt} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + StrCmp $OUT1 'exe' 0 error + + ${GetFileExt} 'uninstwa.exe' $OUT1 + StrCmp $OUT1 'exe' 0 error + + ${GetFileExt} 'C:\Program Files\Winamp\plugins' $OUT1 + StrCmp $OUT1 '' 0 error + + ${GetFileExt} 'C:\Program Files\Winamp\plugins\' $OUT1 + StrCmp $OUT1 '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section BannerTrimPath + ${StackVerificationStart} BannerTrimPath + + ${BannerTrimPath} 'C:\Server\Documents\Terminal\license.htm' '35A' $OUT1 + StrCmp $OUT1 'C:\Server\...\Terminal\license.htm' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '3A' $OUT1 + StrCmp $OUT1 '' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '4A' $OUT1 + StrCmp $OUT1 'C...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '11A' $OUT1 + StrCmp $OUT1 'C:\12\...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '13A' $OUT1 + StrCmp $OUT1 'C:\12\...\789' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '14A' $OUT1 + StrCmp $OUT1 'C:\12\3456\789' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '14A' $OUT1 + StrCmp $OUT1 'C:\12\3456\789' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '11B' $OUT1 + StrCmp $OUT1 'C:\12\...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '5B' $OUT1 + StrCmp $OUT1 'C:...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '5B' $OUT1 + StrCmp $OUT1 'C:...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '11C' $OUT1 + StrCmp $OUT1 'C:\12\34...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '9D' $OUT1 + StrCmp $OUT1 'C:\12\...' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '10D' $OUT1 + StrCmp $OUT1 'C:\...\789' 0 error + + ${BannerTrimPath} 'C:\12\3456\789' '11D' $OUT1 + StrCmp $OUT1 'C:\1...\789' 0 error + + ${BannerTrimPath} '123456789' '5D' $OUT1 + StrCmp $OUT1 '12...' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section DirState + ${StackVerificationStart} DirState + + ${DirState} '$TEMP' $OUT1 + + ${StackVerificationEnd} +SectionEnd + + +Section RefreshShellIcons + ${StackVerificationStart} RefreshShellIcons + + ${RefreshShellIcons} + + ${StackVerificationEnd} +SectionEnd + + +Section WriteUninstaller + goto +2 + WriteUninstaller '$EXEDIR\un.FileFuncTest.exe' +SectionEnd + + + +;############### UNINSTALL ############### + +Section un.Uninstall + ${Locate} '$DOCUMENTS' '/L=FD /M=*.* /S=0B /G=0' 'un.LocateCallback' + ${GetSize} '$WINDIR' '/M=Explorer.exe /S=0K /G=0' $OUT1 $OUT2 $OUT3 + ${DriveSpace} 'C:\' '/D=F /S=M' $OUT1 + ${GetDrives} 'FDD+CDROM' 'un.GetDrivesCallback' + ${GetTime} '' 'L' $OUT1 $OUT2 $OUT3 $OUT4 $OUT5 $OUT6 $OUT7 + ${GetFileAttributes} '$WINDIR\explorer.exe' 'ALL' $OUT1 + ${GetFileVersion} '$WINDIR\explorer.exe' $OUT1 + ${GetExeName} $OUT1 + ${GetExePath} $OUT1 + ${GetParameters} $OUT1 + ${GetOptions} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1 + ${GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1 + ${GetRoot} 'C:\Program Files\NSIS' $OUT1 + ${GetParent} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + ${GetFileName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + ${GetBaseName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + ${GetFileExt} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1 + ${BannerTrimPath} 'C:\Server\Documents\Terminal\license.htm' '35A' $OUT1 + ${DirState} '$TEMP' $OUT1 + ${RefreshShellIcons} +SectionEnd + +Function un.LocateCallback + Push $0 +FunctionEnd + +Function un.GetDrivesCallback + Push $0 +FunctionEnd diff --git a/tools/Examples/InstallOptions/test.ini b/tools/Examples/InstallOptions/test.ini new file mode 100644 index 0000000..da743e8 --- /dev/null +++ b/tools/Examples/InstallOptions/test.ini @@ -0,0 +1,76 @@ +[Settings] +NumFields=8 + +[Field 1] +Type=GroupBox +Left=0 +Right=-1 +Top=0 +Bottom=-5 +Text=" This is a group box... " + +[Field 2] +Type=checkbox +Text=Install support for X +Left=10 +Right=-10 +Top=17 +Bottom=25 +State=0 +Flags=GROUP + +[Field 3] +Type=checkbox +Text=Install support for Y +Left=10 +Right=-10 +Top=30 +Bottom=38 +State=1 +Flags=NOTABSTOP + +[Field 4] +Type=checkbox +Text=Install support for Z +Left=10 +Right=-10 +Top=43 +Bottom=51 +State=0 +Flags=NOTABSTOP + +[Field 5] +Type=FileRequest +State=C:\dummy.xyz +Left=10 +Right=-10 +Top=56 +Bottom=68 +Filter=XYZ Files|*.xyz|All files|*.* +Flags=GROUP|FILE_MUST_EXIST|FILE_EXPLORER|FILE_HIDEREADONLY + +[Field 6] +Type=DirRequest +Left=10 +Right=-10 +Top=73 +Bottom=85 +Text=Select a directory... +State=C:\Program Files\NSIS + +[Field 7] +Type=Label +Left=10 +Right=-10 +Top=90 +Bottom=98 +Text=This is a label... + +[Field 8] +Type=Text +Left=10 +Right=-10 +Top=98 +Bottom=120 +State="Multiline\r\nedit..." +Flags=MULTILINE|VSCROLL|WANTRETURN \ No newline at end of file diff --git a/tools/Examples/InstallOptions/test.nsi b/tools/Examples/InstallOptions/test.nsi new file mode 100644 index 0000000..30b15c4 --- /dev/null +++ b/tools/Examples/InstallOptions/test.nsi @@ -0,0 +1,84 @@ +;InstallOptions Test Script +;Written by Joost Verburg +;-------------------------- + +!define TEMP1 $R0 ;Temp variable + +;The name of the installer +Name "InstallOptions Test" + +;The file to write +OutFile "Test.exe" + +; Show install details +ShowInstDetails show + +;Things that need to be extracted on startup (keep these lines before any File command!) +;Only useful for BZIP2 compression +;Use ReserveFile for your own InstallOptions INI files too! + +ReserveFile /plugin InstallOptions.dll +ReserveFile "test.ini" + +;Order of pages +Page custom SetCustom ValidateCustom ": Testing InstallOptions" ;Custom page. InstallOptions gets called in SetCustom. +Page instfiles + +Section "Components" + + ;Get Install Options dialog user input + + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 2" "State" + DetailPrint "Install X=${TEMP1}" + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 3" "State" + DetailPrint "Install Y=${TEMP1}" + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 4" "State" + DetailPrint "Install Z=${TEMP1}" + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 5" "State" + DetailPrint "File=${TEMP1}" + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 6" "State" + DetailPrint "Dir=${TEMP1}" + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 8" "State" + DetailPrint "Info=${TEMP1}" + +SectionEnd + +Function .onInit + + ;Extract InstallOptions files + ;$PLUGINSDIR will automatically be removed when the installer closes + + InitPluginsDir + File /oname=$PLUGINSDIR\test.ini "test.ini" + +FunctionEnd + +Function SetCustom + + ;Display the InstallOptions dialog + + Push ${TEMP1} + + InstallOptions::dialog "$PLUGINSDIR\test.ini" + Pop ${TEMP1} + + Pop ${TEMP1} + +FunctionEnd + +Function ValidateCustom + + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 2" "State" + StrCmp ${TEMP1} 1 done + + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 3" "State" + StrCmp ${TEMP1} 1 done + + ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 4" "State" + StrCmp ${TEMP1} 1 done + MessageBox MB_ICONEXCLAMATION|MB_OK "You must select at least one install option!" + Abort + + done: + +FunctionEnd diff --git a/tools/Examples/InstallOptions/testimgs.ini b/tools/Examples/InstallOptions/testimgs.ini new file mode 100644 index 0000000..381a986 --- /dev/null +++ b/tools/Examples/InstallOptions/testimgs.ini @@ -0,0 +1,65 @@ +[Settings] +NumFields=8 + +[Field 1] +Type=GroupBox +Left=0 +Right=-1 +Top=0 +Bottom=-5 +Text=" Images " + +[Field 2] +Type=Bitmap +Left=10 +Right=-10 +Top=10 +Bottom=30 +Flags=TRANSPARENT + +[Field 3] +Type=Bitmap +Left=10 +Right=-10 +Top=35 +Bottom=45 +Flags=TRANSPARENT + +[Field 4] +Type=Bitmap +Left=10 +Right=-10 +Top=50 +Bottom=70 +Flags=RESIZETOFIT|TRANSPARENT + +[Field 5] +Type=Bitmap +Left=10 +Right=-10 +Top=75 +Bottom=95 +Flags=RESIZETOFIT|TRANSPARENT + +[Field 6] +Type=Icon +Left=10 +Right=40 +Top=100 +Bottom=120 + +[Field 7] +Type=Icon +Left=50 +Right=80 +Top=100 +Bottom=120 + +[Field 8] +Type=Label +Left=10 +Right=-10 +Top=10 +Bottom=-10 +Text=ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ + diff --git a/tools/Examples/InstallOptions/testimgs.nsi b/tools/Examples/InstallOptions/testimgs.nsi new file mode 100644 index 0000000..3d0f4ec --- /dev/null +++ b/tools/Examples/InstallOptions/testimgs.nsi @@ -0,0 +1,59 @@ +;InstallOptions Test Script +;Written by Joost Verburg +;-------------------------- + +;The name of the installer +Name "InstallOptions Test" + +;The file to write +OutFile "Test.exe" + +; Show install details +ShowInstDetails show + +;Things that need to be extracted on startup (keep these lines before any File command!) +;Only useful for BZIP2 compression +;Use ReserveFile for your own InstallOptions INI files too! + +ReserveFile /plugin InstallOptions.dll +ReserveFile "testimgs.ini" +ReserveFile "${NSISDIR}\Contrib\Graphics\Checks\colorful.bmp" +ReserveFile "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" +ReserveFile "${NSISDIR}\Contrib\Graphics\Icons\pixel-install.ico" + +;Order of pages +Page custom SetCustom "" ": Testing InstallOptions" ;Custom page. InstallOptions gets called in SetCustom. +Page instfiles + +Section +SectionEnd + +Function .onInit + + ;Extract InstallOptions files + ;$PLUGINSDIR will automatically be removed when the installer closes + + InitPluginsDir + File /oname=$PLUGINSDIR\testimgs.ini "testimgs.ini" + File /oname=$PLUGINSDIR\image.bmp "${NSISDIR}\Contrib\Graphics\Checks\colorful.bmp" + File /oname=$PLUGINSDIR\image2.bmp "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" + File /oname=$PLUGINSDIR\icon.ico "${NSISDIR}\Contrib\Graphics\Icons\pixel-install.ico" + + ;Write image paths to the INI file + + WriteINIStr $PLUGINSDIR\testimgs.ini "Field 2" "Text" $PLUGINSDIR\image.bmp + WriteINIStr $PLUGINSDIR\testimgs.ini "Field 3" "Text" $PLUGINSDIR\image2.bmp + WriteINIStr $PLUGINSDIR\testimgs.ini "Field 4" "Text" $PLUGINSDIR\image.bmp + WriteINIStr $PLUGINSDIR\testimgs.ini "Field 5" "Text" $PLUGINSDIR\image2.bmp + WriteINIStr $PLUGINSDIR\testimgs.ini "Field 6" "Text" $PLUGINSDIR\icon.ico + ;No Text for Field 7 so it'll show the installer's icon + +FunctionEnd + +Function SetCustom + + ;Display the InstallOptions dialog + InstallOptions::dialog "$PLUGINSDIR\testimgs.ini" + Pop $0 + +FunctionEnd diff --git a/tools/Examples/InstallOptions/testlink.ini b/tools/Examples/InstallOptions/testlink.ini new file mode 100644 index 0000000..77078a4 --- /dev/null +++ b/tools/Examples/InstallOptions/testlink.ini @@ -0,0 +1,44 @@ +[Settings] +NumFields=5 + +[Field 1] +Type=Label +Left=10 +Right=-40 +Top=10 +Bottom=18 +Text=This custom page demonstrates the "Link" control + +[Field 2] +Type=Link +Left=20 +Right=-40 +Top=40 +Bottom=50 +Text=* Run notepad + +[Field 3] +Type=Link +Left=20 +Right=-40 +Top=55 +Bottom=65 +State=mailto:someone@anywhere.com +Text=* Send E-mail + +[Field 4] +Type=Link +Left=20 +Right=-40 +Top=70 +Bottom=80 +State=https://nsis.sourceforge.io/ +Text=* Homepage https://nsis.sourceforge.io/ + +[Field 5] +Type=Text +Left=20 +Right=-40 +Top=85 +Bottom=98 +State=Just to test proper interaction with the other fields diff --git a/tools/Examples/InstallOptions/testlink.nsi b/tools/Examples/InstallOptions/testlink.nsi new file mode 100644 index 0000000..9096590 --- /dev/null +++ b/tools/Examples/InstallOptions/testlink.nsi @@ -0,0 +1,58 @@ +;InstallOptions Test Script +;Written by Ramon +;This script demonstrates the power of the new control "LINK" +;that allows you to execute files, send mails, open wepsites, etc. +;-------------------------- + +!define TEMP1 $R0 ;Temp variable + +;The name of the installer +Name "InstallOptions Test Link" + +;The file to write +OutFile "TestLink.exe" + +; Show install details +ShowInstDetails show + +;Things that need to be extracted on startup (keep these lines before any File command!) +;Only useful for BZIP2 compression +;Use ReserveFile for your own InstallOptions INI files too! + +ReserveFile /plugin InstallOptions.dll +ReserveFile "testlink.ini" + +;Order of pages +Page custom SetCustom +Page instfiles + +Section "Components" + + ;Get Install Options dialog user input + +SectionEnd + +Function .onInit + + ;Extract InstallOptions files + ;$PLUGINSDIR will automatically be removed when the installer closes + + InitPluginsDir + File /oname=$PLUGINSDIR\test.ini "testlink.ini" + WriteIniStr $PLUGINSDIR\test.ini "Field 2" "State" "$WINDIR\Notepad.exe" + +FunctionEnd + +Function SetCustom + + ;Display the InstallOptions dialog + + Push ${TEMP1} + + InstallOptions::dialog "$PLUGINSDIR\test.ini" + Pop ${TEMP1} + + Pop ${TEMP1} + +FunctionEnd + diff --git a/tools/Examples/InstallOptions/testnotify.ini b/tools/Examples/InstallOptions/testnotify.ini new file mode 100644 index 0000000..956e8cd --- /dev/null +++ b/tools/Examples/InstallOptions/testnotify.ini @@ -0,0 +1,105 @@ +[Settings] +NumFields=11 + +[Field 1] +Type=Groupbox +Text="This is a group box..." +Left=0 +Right=-1 +Top=0 +Bottom=-4 + +[Field 2] +Type=Checkbox +Text=Install support for X +Flags=NOTIFY +State=1 +Left=10 +Right=100 +Top=17 +Bottom=25 + +[Field 3] +Type=Checkbox +Text=Install support for Y +State=0 +Left=10 +Right=100 +Top=30 +Bottom=38 + +[Field 4] +Type=Checkbox +Text=Install support for Z +Flags=RIGHT +State=0 +Left=10 +Right=100 +Top=43 +Bottom=51 + +[Field 5] +Type=FileRequest +Flags=GROUP|FILE_MUST_EXIST|FILE_EXPLORER|FILE_HIDEREADONLY +State=C:\dummy.xyz +Filter=XYZ Files|*.xyz|All files|*.* +Left=10 +Right=-10 +Top=56 +Bottom=69 + +[Field 6] +Type=DirRequest +Text=Select a directory... +State=C:\Program Files\NSIS +Left=10 +Right=-10 +Top=74 +Bottom=87 + +[Field 7] +Type=Label +Text=This is a label... +Left=10 +Right=-10 +Top=89 +Bottom=97 + +[Field 8] +Type=Text +Flags=MULTILINE|VSCROLL|WANTRETURN|NOWORDWRAP +State="Multiline\r\nedit..." +Left=10 +Right=-10 +Top=97 +Bottom=118 +MinLen=1 +ValidateText=Please enter some text before proceeding. + +[Field 9] +Type=Button +Flags=NOTIFY +Text=&Clear +Left=-60 +Right=-10 +Top=19 +Bottom=33 + +[Field 10] +Type=Button +Text=&Email +State=mailto:someone@anywhere.com +Left=-60 +Right=-10 +Top=35 +Bottom=49 + +[Field 11] +Type=DROPLIST +ListItems=Show|Hide +State=Show +Flags=NOTIFY +Left=120 +Right=-80 +Top=20 +Bottom=56 diff --git a/tools/Examples/InstallOptions/testnotify.nsi b/tools/Examples/InstallOptions/testnotify.nsi new file mode 100644 index 0000000..a8ab734 --- /dev/null +++ b/tools/Examples/InstallOptions/testnotify.nsi @@ -0,0 +1,133 @@ +; InstallOptions script demonstrating custom buttons +;---------------------------------------------------- + +!include WinMessages.nsh + +; The name of the installer +Name "InstallOptions Test" + +; The file to write +OutFile "TestNotify.exe" + +; Show install details +ShowInstDetails show + +; Called before anything else as installer initialises +Function .onInit + + ; Extract InstallOptions files + ; $PLUGINSDIR will automatically be removed when the installer closes + InitPluginsDir + File /oname=$PLUGINSDIR\test.ini "testnotify.ini" + +FunctionEnd + +; Our custom page +Page custom ShowCustom LeaveCustom ": Testing InstallOptions" + +Function ShowCustom + + ; Initialise the dialog but don't show it yet + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Test the right-to-left version?" IDNO +2 + WriteINIStr "$PLUGINSDIR\test.ini" "Settings" "RTL" "1" + InstallOptions::initDialog "$PLUGINSDIR\test.ini" + ; In this mode InstallOptions returns the window handle so we can use it + Pop $0 + ; Now show the dialog and wait for it to finish + InstallOptions::show + ; Finally fetch the InstallOptions status value (we don't care what it is though) + Pop $0 + +FunctionEnd + +Function LeaveCustom + + ; At this point the user has either pressed Next or one of our custom buttons + ; We find out which by reading from the INI file + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Settings" "State" + StrCmp $0 0 validate ; Next button? + StrCmp $0 2 supportx ; "Install support for X"? + StrCmp $0 9 clearbtn ; "Clear" button? + StrCmp $0 11 droplist ; "Show|Hide" drop-list? + Abort ; Return to the page + +supportx: + ; Make the FileRequest field depend on the first checkbox + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State" + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 5" "HWND" + EnableWindow $1 $0 + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 5" "HWND2" + EnableWindow $1 $0 + ; Add the disabled flag too so when we return to this page it's disabled again + StrCmp $0 0 0 +3 + + WriteINIStr "$PLUGINSDIR\test.ini" "Field 5" "Flags" "GROUP|FILE_MUST_EXIST|FILE_EXPLORER|FILE_HIDEREADONLY|DISABLED" + Goto +2 + + WriteINIStr "$PLUGINSDIR\test.ini" "Field 5" "Flags" "GROUP|FILE_MUST_EXIST|FILE_EXPLORER|FILE_HIDEREADONLY" + Abort ; Return to the page + +clearbtn: + ; Clear all text fields + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 5" "HWND" + SendMessage $1 ${WM_SETTEXT} 0 "STR:" + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 6" "HWND" + SendMessage $1 ${WM_SETTEXT} 0 "STR:" + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 8" "HWND" + SendMessage $1 ${WM_SETTEXT} 0 "STR:" + Abort ; Return to the page + +droplist: + ; Make the DirRequest field depend on the droplist + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 11" "State" + StrCmp $0 "Show" +3 + StrCpy $0 0 + Goto +2 + StrCpy $0 1 + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 6" "HWND" + EnableWindow $1 $0 + ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 6" "HWND2" + EnableWindow $1 $0 + ; Add the disabled flag too so when we return to this page it's disabled again + StrCmp $0 0 0 +3 + + WriteINIStr "$PLUGINSDIR\test.ini" "Field 6" "Flags" "DISABLED" + Goto +2 + + WriteINIStr "$PLUGINSDIR\test.ini" "Field 6" "Flags" "" + Abort ; Return to the page + +validate: + ; At this point we know the Next button was pressed, so perform any validation + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State" + StrCmp $0 1 done + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 3" "State" + StrCmp $0 1 done + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 4" "State" + StrCmp $0 1 done + MessageBox MB_ICONEXCLAMATION|MB_OK "You must select at least one install option!" + Abort +done: + +FunctionEnd + +; Installation page +Page instfiles + +Section + + ;Get Install Options dialog user input + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State" + DetailPrint "Install X=$0" + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 3" "State" + DetailPrint "Install Y=$0" + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 4" "State" + DetailPrint "Install Z=$0" + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 5" "State" + DetailPrint "File=$0" + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 6" "State" + DetailPrint "Dir=$0" + ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 8" "State" + DetailPrint "Info=$0" + +SectionEnd diff --git a/tools/Examples/Library.nsi b/tools/Examples/Library.nsi new file mode 100644 index 0000000..cffc973 --- /dev/null +++ b/tools/Examples/Library.nsi @@ -0,0 +1,130 @@ +# This example tests the compile time aspect of the Library macros +# more than the runtime aspect. It is more of a syntax example, +# rather than a usage example. + +!include "Library.nsh" + +Name "Library Test" +OutFile "Library Test.exe" + +InstallDir "$TEMP\Library Test" + +Page directory +Page instfiles + +XPStyle on + +RequestExecutionLevel user + + +!define TestDLL '"${NSISDIR}\Plugins\${NSIS_CPU}-unicode\LangDLL.dll"' +!define TestEXE '"${NSISDIR}\Contrib\UIs\default.exe"' + +Section + +!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib DLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib TLB NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib TLB NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib TLB NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib TLB NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib REGDLLTLB NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLLTLB NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLLTLB NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLLTLB NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib DLL $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib DLL $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib DLL $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib DLL $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib REGDLL $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLL $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLL $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLL $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib TLB $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib TLB $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib TLB $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib TLB $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib REGDLLTLB $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLLTLB $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLLTLB $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR +!insertmacro InstallLib REGDLLTLB $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR + +!insertmacro InstallLib REGEXE $0 REBOOT_PROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR +!insertmacro InstallLib REGEXE $0 NOREBOOT_PROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR +!insertmacro InstallLib REGEXE $0 REBOOT_NOTPROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR +!insertmacro InstallLib REGEXE $0 NOREBOOT_NOTPROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR + +WriteUninstaller $INSTDIR\uninstall.exe + +SectionEnd + +Section uninstall + +!insertmacro UninstallLib DLL NOTSHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib DLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib REGDLL NOTSHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib TLB NOTSHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib TLB NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib TLB NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib TLB NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib TLB NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib DLL SHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib DLL SHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib DLL SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib DLL SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib DLL SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib REGDLL SHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL SHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib TLB SHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib TLB SHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib TLB SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib TLB SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib TLB SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib REGDLLTLB SHARED NOREMOVE $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB SHARED REBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll +!insertmacro UninstallLib REGDLLTLB SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll + +!insertmacro UninstallLib REGEXE SHARED NOREMOVE $INSTDIR\test.exe +!insertmacro UninstallLib REGEXE SHARED REBOOT_PROTECTED $INSTDIR\test.exe +!insertmacro UninstallLib REGEXE SHARED NOREBOOT_PROTECTED $INSTDIR\test.exe +!insertmacro UninstallLib REGEXE SHARED REBOOT_NOTPROTECTED $INSTDIR\test.exe +!insertmacro UninstallLib REGEXE SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.exe + +SectionEnd diff --git a/tools/Examples/LogicLib.nsi b/tools/Examples/LogicLib.nsi new file mode 100644 index 0000000..ce7574b --- /dev/null +++ b/tools/Examples/LogicLib.nsi @@ -0,0 +1,619 @@ +!verbose 2 + +Name "NSIS LogicLib Example" +OutFile "LogicLib.exe" +ShowInstDetails show +RequestExecutionLevel user + +!include "LogicLib.nsh" + +;!undef LOGICLIB_VERBOSITY +;!define LOGICLIB_VERBOSITY 4 ; For debugging - watch what logiclib does with your code! + +Page components "" "" ComponentsLeave +Page instfiles + +Section /o "Run tests" TESTS + + ; kinds of if other than "value1 comparison value2" + ClearErrors + FindFirst $R1 $R2 "$PROGRAMFILES\*" + ${Unless} ${Errors} + ${Do} + ${Select} $R2 + ${Case2} "." ".." + ; Do nothing + ${CaseElse} + DetailPrint "Found $PROGRAMFILES\$R2" + ${EndSelect} + FindNext $R1 $R2 + ${LoopUntil} ${Errors} + FindClose $R1 + ${EndUnless} + + ${If} ${FileExists} "${__FILE__}" + DetailPrint 'Source file "${__FILE__}" still exists' + ${Else} + DetailPrint 'Source file "${__FILE__}" has gone' + ${EndIf} + + ; if..endif + StrCpy $R1 1 + StrCpy $R2 "" + ${If} $R1 = 1 + StrCpy $R2 $R2A + ${EndIf} + ${If} $R1 = 2 + StrCpy $R2 $R2B + ${EndIf} + ${If} $R1 < 2 + StrCpy $R2 $R2C + ${EndIf} + ${If} $R1 < -2 + StrCpy $R2 $R2D + ${EndIf} + ${If} $R1 > 2 + StrCpy $R2 $R2E + ${EndIf} + ${If} $R1 > -2 + StrCpy $R2 $R2F + ${EndIf} + ${If} $R1 <> 1 + StrCpy $R2 $R2G + ${EndIf} + ${If} $R1 <> 2 + StrCpy $R2 $R2H + ${EndIf} + ${If} $R1 >= 2 + StrCpy $R2 $R2I + ${EndIf} + ${If} $R1 >= -2 + StrCpy $R2 $R2J + ${EndIf} + ${If} $R1 <= 2 + StrCpy $R2 $R2K + ${EndIf} + ${If} $R1 <= -2 + StrCpy $R2 $R2L + ${EndIf} + ${If} $R2 == "ACFHJK" + DetailPrint "PASSED If..EndIf test" + ${Else} + DetailPrint "FAILED If..EndIf test" + ${EndIf} + + ; if..elseif..else..endif + StrCpy $R1 A + StrCpy $R2 "" + ${If} $R1 == A + StrCpy $R2 $R2A + ${ElseIf} $R1 == B + StrCpy $R2 $R2B + ${ElseUnless} $R1 != C + StrCpy $R2 $R2C + ${Else} + StrCpy $R2 $R2D + ${EndIf} + ${If} $R1 == D + StrCpy $R2 $R2D + ${ElseIf} $R1 == A + StrCpy $R2 $R2A + ${ElseUnless} $R1 != B + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2C + ${EndIf} + ${If} $R1 == C + StrCpy $R2 $R2C + ${ElseIf} $R1 == D + StrCpy $R2 $R2D + ${ElseUnless} $R1 != A + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} $R1 == B + StrCpy $R2 $R2B + ${ElseIf} $R1 == C + StrCpy $R2 $R2C + ${ElseUnless} $R1 != D + StrCpy $R2 $R2D + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} $R2 == "$R1$R1$R1$R1" + DetailPrint "PASSED If..ElseIf..Else..EndIf test" + ${Else} + DetailPrint "FAILED If..ElseIf..Else..EndIf test" + ${EndIf} + + ; if..andif..orif..endif + StrCpy $R2 "" + ${If} 1 = 1 + ${AndIf} 2 = 2 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 1 + ${AndIf} 2 = 3 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 2 + ${AndIf} 2 = 2 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 2 + ${AndIf} 2 = 3 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + + ${If} 1 = 1 + ${OrIf} 2 = 2 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 1 + ${OrIf} 2 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 2 + ${OrIf} 2 = 2 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 2 + ${OrIf} 2 = 3 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + + ${If} 1 = 1 + ${AndIf} 2 = 2 + ${OrIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 1 + ${AndIf} 2 = 3 + ${OrIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 2 + ${AndIf} 2 = 2 + ${OrIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 2 + ${AndIf} 2 = 3 + ${OrIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 1 + ${AndIf} 2 = 2 + ${OrIf} 3 = 4 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 1 + ${AndIf} 2 = 3 + ${OrIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 2 + ${AndIf} 2 = 2 + ${OrIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 2 + ${AndIf} 2 = 3 + ${OrIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + + ${If} 1 = 1 + ${OrIf} 2 = 2 + ${AndIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 1 + ${OrIf} 2 = 3 + ${AndIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 2 + ${OrIf} 2 = 2 + ${AndIf} 3 = 3 + StrCpy $R2 $R2A + ${Else} + StrCpy $R2 $R2B + ${EndIf} + ${If} 1 = 2 + ${OrIf} 2 = 3 + ${AndIf} 3 = 3 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 1 + ${OrIf} 2 = 2 + ${AndIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 1 + ${OrIf} 2 = 3 + ${AndIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 2 + ${OrIf} 2 = 2 + ${AndIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + ${If} 1 = 2 + ${OrIf} 2 = 3 + ${AndIf} 3 = 4 + StrCpy $R2 $R2B + ${Else} + StrCpy $R2 $R2A + ${EndIf} + + ${If} $R2 == "AAAAAAAAAAAAAAAAAAAAAAAA" + DetailPrint "PASSED If..AndIf..OrIf..Else..EndIf test" + ${Else} + DetailPrint "FAILED If..AndIf..OrIf..Else..EndIf test" + ${EndIf} + + ; ifthen..|..| + StrCpy $R1 1 + StrCpy $R2 "" + ${IfThen} $R1 = 1 ${|} StrCpy $R2 $R2A ${|} + ${IfThen} $R1 = 2 ${|} StrCpy $R2 $R2B ${|} + ${IfNotThen} $R1 = 1 ${|} StrCpy $R2 $R2C ${|} + ${IfNotThen} $R1 = 2 ${|} StrCpy $R2 $R2D ${|} + ${If} $R2 == "AD" + DetailPrint "PASSED IfThen test" + ${Else} + DetailPrint "FAILED IfThen test" + ${EndIf} + + ; ifcmd..||..| and if/unless cmd + StrCpy $R2 "" + ${IfCmd} MessageBox MB_YESNO "Please click Yes" IDYES ${||} StrCpy $R2 $R2A ${|} + ${Unless} ${Cmd} `MessageBox MB_YESNO|MB_DEFBUTTON2 "Please click No" IDYES` + StrCpy $R2 $R2B + ${EndUnless} + ${If} $R2 == "AB" + DetailPrint "PASSED IfCmd/If Cmd test" + ${Else} + DetailPrint "FAILED IfCmd/If Cmd test" + ${EndIf} + + ; select..case..case2..case3..case4..case5..caseelse..endselect + StrCpy $R1 1 + StrCpy $R2 "" + ${Select} $R1 + ${Case} "1" + StrCpy $R2 $R2A + ${Case} "2" + StrCpy $R2 $R2B + ${Case2} "3" "4" + StrCpy $R2 $R2C + ${CaseElse} + StrCpy $R2 $R2D + ${EndSelect} + ${Select} $R1 + ${Case} "2" + StrCpy $R2 $R2A + ${Case} "3" + StrCpy $R2 $R2B + ${Case2} "4" "5" + StrCpy $R2 $R2C + ${CaseElse} + StrCpy $R2 $R2D + ${EndSelect} + ${Select} $R1 + ${Case} "3" + StrCpy $R2 $R2A + ${Case} "4" + StrCpy $R2 $R2B + ${Case2} "5" "1" + StrCpy $R2 $R2C + ${CaseElse} + StrCpy $R2 $R2D + ${EndSelect} + ${Select} $R1 + ${Case} "4" + StrCpy $R2 $R2A + ${Case} "5" + StrCpy $R2 $R2B + ${Case2} "1" "2" + StrCpy $R2 $R2C + ${CaseElse} + StrCpy $R2 $R2D + ${EndSelect} + ${If} $R2 == "ADCC" + DetailPrint "PASSED Select..Case*..EndSelect test" + ${Else} + DetailPrint "FAILED Select..Case*..EndSelect test" + ${EndIf} + + ; switch..case..caseelse..endswitch + StrCpy $R2 "" + ${For} $R1 1 10 + ${Switch} $R1 + ${Case} 3 + StrCpy $R2 $R2A + ${Case} 4 + StrCpy $R2 $R2B + ${Break} + ${Case} 5 + StrCpy $R2 $R2C + ${EndSwitch} + ${Switch} $R1 + ${Case} 1 + StrCpy $R2 $R2D + ${Default} + StrCpy $R2 $R2E + ${Break} + ${Case} 2 + StrCpy $R2 $R2F + ${EndSwitch} + ${Switch} $R1 + ${Case} 6 + ${Case} 7 + StrCpy $R2 $R2G + ${If} $R1 = 6 + ${Case} 8 + StrCpy $R2 $R2H + ${Switch} $R1 + ${Case} 6 + StrCpy $R2 $R2I + ${Break} + ${Case} 8 + StrCpy $R2 $R2J + ${EndSwitch} + ${EndIf} + StrCpy $R2 $R2K + ${Break} + ${Default} + StrCpy $R2 $R2L + ${Case} 9 + StrCpy $R2 $R2M + ${EndSwitch} + ${Next} + ${If} $R2 == "DELMFLMABELMBELMCELMEGHIKEGKEHJKEMELM" + DetailPrint "PASSED Switch..Case*..EndSwitch test" + ${Else} + DetailPrint "FAILED Switch..Case*..EndSwitch test" + ${EndIf} + + ; for[each]..exitfor..next + StrCpy $R2 "" + ${For} $R1 1 5 + StrCpy $R2 $R2$R1 + ${Next} + ${ForEach} $R1 10 1 - 1 + StrCpy $R2 $R2$R1 + ${Next} + ${For} $R1 1 0 + StrCpy $R2 $R2$R1 + ${Next} + ${If} $R2 == "1234510987654321" + DetailPrint "PASSED For[Each]..Next test" + ${Else} + DetailPrint "FAILED For[Each]..Next test" + ${EndIf} + + ; do..loop + StrCpy $R1 0 + Call DoLoop + ${If} $R1 == 5 + DetailPrint "PASSED Do..Loop test" + ${Else} + DetailPrint "FAILED Do..Loop test" + ${EndIf} + + ; do..exitdo..loop + StrCpy $R1 0 + StrCpy $R2 "" + ${Do} + StrCpy $R2 $R2$R1 + IntOp $R1 $R1 + 1 + ${If} $R1 > 10 + ${ExitDo} + ${EndIf} + ${Loop} + ${If} $R2 == "012345678910" + DetailPrint "PASSED Do..ExitDo..Loop test" + ${Else} + DetailPrint "FAILED Do..ExitDo..Loop test" + ${EndIf} + + ; do..exitdo..loopuntil + StrCpy $R1 0 + StrCpy $R2 "" + ${Do} + StrCpy $R2 $R2$R1 + IntOp $R1 $R1 + 1 + ${LoopUntil} $R1 >= 5 + ${If} $R2 == "01234" + DetailPrint "PASSED Do..ExitDo..LoopUntil test" + ${Else} + DetailPrint "FAILED Do..ExitDo..LoopUntil test" + ${EndIf} + + ; dountil..exitdo..loop + StrCpy $R1 0 + StrCpy $R2 "" + ${DoUntil} $R1 >= 5 + StrCpy $R2 $R2$R1 + IntOp $R1 $R1 + 1 + ${Loop} + ${If} $R2 == "01234" + DetailPrint "PASSED DoUntil..ExitDo..Loop test" + ${Else} + DetailPrint "FAILED DoUntil..ExitDo..Loop test" + ${EndIf} + + ; nested do test + StrCpy $R1 0 + StrCpy $R2 0 + StrCpy $R3 "" + ${Do} + StrCpy $R3 $R3$R1$R2 + IntOp $R1 $R1 + 1 + ${If} $R1 > 5 + ${ExitDo} + ${EndIf} + StrCpy $R2 0 + ${Do} + StrCpy $R3 $R3$R1$R2 + IntOp $R2 $R2 + 1 + ${If} $R2 >= 5 + ${ExitDo} + ${EndIf} + ${Loop} + ${Loop} + ${If} $R3 == "00101112131415202122232425303132333435404142434445505152535455" + DetailPrint "PASSED nested Do test" + ${Else} + DetailPrint "FAILED nested Do test" + ${EndIf} + + ; while..exitwhile..endwhile (exact replica of dowhile..enddo} + StrCpy $R1 0 + StrCpy $R2 "" + ${While} $R1 < 5 + StrCpy $R2 $R2$R1 + IntOp $R1 $R1 + 1 + ${EndWhile} + ${If} $R2 == "01234" + DetailPrint "PASSED While..ExitWhile..EndWhile test" + ${Else} + DetailPrint "FAILED While..ExitWhile..EndWhile test" + ${EndIf} + + ; Unsigned integer tests + StrCpy $R2 "" + ${If} -1 < 1 + StrCpy $R2 $R2A + ${EndIf} + ${If} -1 U< 1 + StrCpy $R2 $R2B + ${EndIf} + ${If} 0xFFFFFFFF > 1 + StrCpy $R2 $R2C + ${EndIf} + ${If} 0xFFFFFFFF U> 1 + StrCpy $R2 $R2D + ${EndIf} + ${If} $R2 == "AD" + DetailPrint "PASSED unsigned integer test" + ${Else} + DetailPrint "FAILED unsigned integer test" + ${EndIf} + + ; 64-bit integer tests (uses System.dll) + StrCpy $R2 "" + ${If} 0x100000000 L= 4294967296 + StrCpy $R2 $R2A + ${EndIf} + ${If} 0x100000000 L< 0x200000000 + StrCpy $R2 $R2B + ${EndIf} + ${If} 0x500000000 L>= 0x500000000 + StrCpy $R2 $R2C + ${EndIf} + ${If} $R2 == "ABC" + DetailPrint "PASSED 64-bit integer test" + ${Else} + DetailPrint "FAILED 64-bit integer test" + ${EndIf} + + ; Extra string tests (uses System.dll) + StrCpy $R2 "" + ${If} "A" S< "B" + StrCpy $R2 $R2A + ${EndIf} + ${If} "b" S> "A" + StrCpy $R2 $R2B + ${EndIf} + ${If} "a" S<= "B" + StrCpy $R2 $R2C + ${EndIf} + ${If} "B" S< "B" + StrCpy $R2 $R2D + ${EndIf} + ${If} "A" S== "A" + StrCpy $R2 $R2E + ${EndIf} + ${If} "A" S== "a" + StrCpy $R2 $R2F + ${EndIf} + ${If} "A" S!= "a" + StrCpy $R2 $R2G + ${EndIf} + ${If} $R2 == "ABCEG" + DetailPrint "PASSED extra string test" + ${Else} + DetailPrint "FAILED extra string test" + ${EndIf} + +SectionEnd + +Function ComponentsLeave + ; Section flags tests (requires sections.nsh be included) + ${Unless} ${SectionIsSelected} ${TESTS} + MessageBox MB_OK "Please select the component" + Abort + ${EndIf} +FunctionEnd + +Function DoLoop + + ${Do} + IntOp $R1 $R1 + 1 + ${If} $R1 == 5 + Return + ${EndIf} + ${Loop} + +FunctionEnd + +!verbose 3 diff --git a/tools/Examples/Math/math.nsi b/tools/Examples/Math/math.nsi new file mode 100644 index 0000000..a32ab3c --- /dev/null +++ b/tools/Examples/Math/math.nsi @@ -0,0 +1,33 @@ +; This is just an example of Math plugin +; +; (c) brainsucker, 2002 +; (r) BSForce + +Name "Math Plugin Example" +OutFile "math.exe" +ShowInstDetails show +XPStyle on + +Section "ThisNameIsIgnoredSoWhyBother?" + Math::Script 'SaR(s,fa,ra, i,f,r,e,p) (i=0;#{i=0, (NS=s[p+4,]; NS=#[p>0,s[,p-1],'']), (NS='';NS=s)])" + + Math::Script "a = 'Hello \r\n World \r\n!!!'; a = SaR(a,{'\r','\n'},{'$\r','$\n'}); R0 = a" + Math::Script "NS = '$\"In quotes$\"'; TQ(); R1=NS; R3=P(s(R1),'qu')" + Math::Script "NS = 'No quotes'; TQ(); R2=NS" + Math::Script "NS='123\r\n456\r\n789'; DL(); R4=NS; DL(); R5=NS; DL(); R6=NS; R7=NS" + + + DetailPrint "'$R0'" + DetailPrint "'$R1'" + DetailPrint "'$R2'" + DetailPrint "'$R3'" + DetailPrint "'$R4'" + DetailPrint "'$R5'" + DetailPrint "'$R6'" + DetailPrint "'$R7'" +SectionEnd + +; eof diff --git a/tools/Examples/Math/mathtest.ini b/tools/Examples/Math/mathtest.ini new file mode 100644 index 0000000..f18075b --- /dev/null +++ b/tools/Examples/Math/mathtest.ini @@ -0,0 +1,101 @@ +[Settings] +NumFields=10 +NextButtonText=Execute +CancelButtonText=Quit +BackButtonText=Readme + +[Field 1] +Type=label +Text=Enter your script here: +Left=0 +Right=-1 +Top=0 +Bottom=8 + +[Field 2] +Type=text +Left=0 +Right=-1 +Top=9 +Bottom=55 +flags=MULTILINE|WANTRETURN|HSCROLL +State="" + +[Field 3] +Type=text +Left=53 +Right=175 +Top=56 +Bottom=140 +flags=MULTILINE|READONLY +State="" + +[Field 4] +Type=text +Left=175 +Right=-1 +Top=56 +Bottom=140 +flags=MULTILINE|READONLY +State="" + +[Field 5] +Type=RadioButton +Left=0 +Right=-1 +Top=70 +Bottom=80 +flags=GROUP +Text="Your script" +State=1 + +[Field 6] +Type=RadioButton +Left=0 +Right=-1 +Top=80 +Bottom=90 +flags= +Text="Sample 1" +State=0 + +[Field 7] +Type=RadioButton +Left=0 +Right=-1 +Top=90 +Bottom=100 +flags= +Text="Sample 2" +State=0 + +[Field 8] +Type=RadioButton +Left=0 +Right=-1 +Top=100 +Bottom=110 +flags= +Text="Sample 3" +State=0 + +[Field 9] +Type=RadioButton +Left=0 +Right=-1 +Top=110 +Bottom=120 +flags= +Text="Sample 4" +State=0 + +[Field 10] +Type=RadioButton +Left=0 +Right=-1 +Top=120 +Bottom=130 +flags= +Text="Sample 5" +State=0 + diff --git a/tools/Examples/Math/mathtest.nsi b/tools/Examples/Math/mathtest.nsi new file mode 100644 index 0000000..191fa8b --- /dev/null +++ b/tools/Examples/Math/mathtest.nsi @@ -0,0 +1,171 @@ +;NSIS Modern User Interface version 1.65 +;InstallOptions Example Script +;Written by Joost Verburg + + !define MUI_BUTTONTEXT_NEXT "Execute" + +;--------------------- +;Include Modern UI + + !include "MUI.nsh" + +;-------------------------------- +;Product Info + +Name "Math::Script Test" + +;-------------------------------- +;Configuration + + ;General + OutFile "MathTest.exe" + +;-------------------------------- +;Variables + + Var TEMP1 + Var TEMP2 + Var TEMP3 + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_LICENSE "mathtest.txt" + Page custom ScriptPageEnter + Page instfiles + +;-------------------------------- +;Modern UI Configuration + +; !define MUI_ABORTWARNING + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Reserve Files + + ;Things that need to be extracted on first (keep these lines before any File command!) + ;Only for BZIP2 compression + + ReserveFile "MathTest.ini" + !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Functions + +LangString SCRIPTSAMPLE0 ${LANG_ENGLISH} "r0 = 'Hello'; r1 = 'Math::Script'\r\nr0 += ' from the ' + r1 + '!'; r1=''" +LangString SCRIPTSAMPLE1 ${LANG_ENGLISH} "a =0; b=1.0\r\n#{a++ < 100, b *= a}\r\nr0 = a; R0 = b; R1 = ff(b, 15)\r\nr1 = (a-1) + '! = ' + b" +LangString SCRIPTSAMPLE2 ${LANG_ENGLISH} 'pi=3.14159; \r\nangle = pi/4;\r\ntext = "x = " + ff(angle,16+3) \r\nr0 = text += ", sin x = " + sin(angle)' +LangString SCRIPTSAMPLE3 ${LANG_ENGLISH} "v1 = 123.456; v2 = 123456789.1011\r\nr0 = v1; r1 = v2\r\nr2 = ff(v1, 3); r3 = ff(v2, 3); r4 = ff(v1, 3+16); r5 = ff(v2, 3+16)\r\nr6 = ff(v1, 3+32); r7 = ff(v2, 3+32); r8 = ff(v1, 3+32+64); r9 = ff(v2, 3+32+64)\r\n" +LangString SCRIPTSAMPLE4 ${LANG_ENGLISH} "a = 10000; b = 0; #{--a > 0, b+= a}; r0 = a; r1 = b\r\nz = 1.55; r2 = #[z > 1.5, 'Its greater', 'Its lower']\r\nz = 1.45; r3 = #[z > 1.5, 'Its greater', 'Its lower']" +LangString SCRIPTSAMPLE5 ${LANG_ENGLISH} 'r0 = "123a123"\r\nr1 = r0; \r\nr2 = s(r0); r3 = f(r0); r4 = i(r0); r5 = l(r0)' + +Function .onInit + + ;Extract InstallOptions INI files + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "MathTest.ini" + + Strcpy "$TEMP1" "$(SCRIPTSAMPLE0)" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 2" "State" $TEMP1 + +FunctionEnd + +LangString TEXT_IO_TITLE ${LANG_ENGLISH} "MathTest Script Page" +LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "Try your scripting capapibilites or test one of sample scripts" + + +Function DumpVariables + Strcpy "$TEMP1" "$$0='$0'\r\n$$1='$1'\r\n$$2='$2'\r\n$$3='$3'\r\n$$4='$4'\r\n$$5='$5'\r\n$$6='$6'\r\n$$7='$7'\r\n$$8='$8'\r\n$$9='$9'" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 3" "State" $TEMP1 + Strcpy "$TEMP1" "$$R0='$R0'\r\n$$R1='$R1'\r\n$$R2='$R2'\r\n$$R3='$R3'\r\n$$R4='$R4'\r\n$$R5='$R5'\r\n$$R6='$R6'\r\n$$R7='$R7'\r\n$$R8='$R8'\r\n$$R9='$R9'" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 4" "State" $TEMP1 +FunctionEnd + +Function ClearVariables + Math::Script "r0=r1=r2=r3=r4=r5=r6=r7=r8=r9=R0=R1=R2=R3=R4=R5=R6=R7=R8=R9=''" +FunctionEnd + +Function GetLine + push $TEMP1 + Math::Script "mtsDL()" + pop $TEMP2 + pop $TEMP1 +FunctionEnd + +Function ExecuteScript + !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 2" "State" + + Math::Script "mtsTQ(s) (s = s(NS); #[s[0]=='$\"',s=s[1,]]; #[s[-1]=='$\"',s=s[,-2]]; NS = s)" + Math::Script "mtsP(s,e, p,i) (p=-1;i=0; #{(i=0, (NS=s[p+4,]; NS=#[p>0,s[,p-1],'']), (NS='';NS=s)])" + + push $TEMP1 + ; remove "" + Math::Script "mtsTQ()" + pop $TEMP1 + + ; script at $TEMP1 +Go: + StrLen $TEMP3 $TEMP1 + IntCmp $TEMP3 0 End + ; get single line to $TEMP2 + Call GetLine +; MessageBox MB_OK "'$TEMP2' '$TEMP1'" + Math::Script "$TEMP2" + goto Go +End: + Math::Script "" +FunctionEnd + +Function ScriptPageEnter + + !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)" + +Again: + Call ClearVariables + Call ExecuteScript + Call DumpVariables + + !insertmacro MUI_INSTALLOPTIONS_DISPLAY_RETURN "mathtest.ini" + pop $TEMP3 + + !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 5" "State" + IntCmp $TEMP1 1 Test + + Strcpy "$TEMP2" "$(SCRIPTSAMPLE1)" + !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 6" "State" + IntCmp $TEMP1 1 Write + + Strcpy "$TEMP2" "$(SCRIPTSAMPLE2)" + !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 7" "State" + IntCmp $TEMP1 1 Write + + Strcpy "$TEMP2" "$(SCRIPTSAMPLE3)" + !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 8" "State" + IntCmp $TEMP1 1 Write + + Strcpy "$TEMP2" "$(SCRIPTSAMPLE4)" + !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 9" "State" + IntCmp $TEMP1 1 Write + + Strcpy "$TEMP2" "$(SCRIPTSAMPLE5)" + +Write: + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 2" "State" "$TEMP2" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 5" "State" "1" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 6" "State" "0" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 7" "State" "0" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 8" "State" "0" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 9" "State" "0" + !insertmacro MUI_INSTALLOPTIONS_WRITE "MathTest.ini" "Field 10" "State" "0" + +Test: + Strcmp $TEMP3 "success" Again + +FunctionEnd + +Section "Dummy Section" SecDummy +SectionEnd diff --git a/tools/Examples/Math/mathtest.txt b/tools/Examples/Math/mathtest.txt new file mode 100644 index 0000000..f911e66 --- /dev/null +++ b/tools/Examples/Math/mathtest.txt @@ -0,0 +1,7 @@ +Math Tester. + +This demo allows you to test your Math::Script expressions without need to compile anything. Just enter your expressions into multiline editbox (every single line is a separate call to Math::Script) or select one of sample expressions and press Execute. + +Every call to Math::Script can accept up to 1kb of script, but this demo is limited to the summ of 1 kb at all lines. And... watch your scripts. No.... Watch your errors at scripts! + +(c) Brainsucker, 2003. diff --git a/tools/Examples/Memento.nsi b/tools/Examples/Memento.nsi new file mode 100644 index 0000000..531bc57 --- /dev/null +++ b/tools/Examples/Memento.nsi @@ -0,0 +1,79 @@ +!include LogicLib.nsh +!include Memento.nsh + +Name Memento +OutFile Memento.exe + +XPStyle on + +ShowInstDetails show + +Page components +Page instfiles + +RequestExecutionLevel user + +# settings + +!define MEMENTO_REGISTRY_ROOT HKCU +!define MEMENTO_REGISTRY_KEY "Software\NSIS\Memento Test" + +# restore + +Function .onInit + + ${If} ${Cmd} `MessageBox MB_YESNO "Would you like to load an example state?" IDYES` + + DeleteRegKey HKCU "Software\NSIS\Memento Test" + + WriteRegStr HKCU "Software\NSIS\Memento Test" MementoSectionUsed "" + WriteRegDWORD HKCU "Software\NSIS\Memento Test" MementoSection_sec_horse 1 + WriteRegDWORD HKCU "Software\NSIS\Memento Test" MementoSection_sec_chicken 1 + WriteRegDWORD HKCU "Software\NSIS\Memento Test" MementoSection_sec_donkey 0 + WriteRegDWORD HKCU "Software\NSIS\Memento Test" MementoSection_sec_croc 0 + + ${EndIf} + + ${MementoSectionRestore} + +FunctionEnd + +# sections + +${MementoSection} horse sec_horse +${MementoSectionEnd} + +${MementoSection} donkey sec_donkey +${MementoSectionEnd} + +${MementoSection} chicken sec_chicken +${MementoSectionEnd} + +SectionGroup /e group + + SectionGroup /e group + + ${MementoSection} croc sec_croc + ${MementoSectionEnd} + + ${MementoSection} cow sec_cow + ${MementoSectionEnd} + + SectionGroupEnd + +SectionGroupEnd + +${MementoUnselectedSection} dinosaur sec_dinosaur +${MementoSectionEnd} + +# done... + +${MementoSectionDone} + +# save + +Function .onInstSuccess + + ${MementoSectionSave} + +FunctionEnd diff --git a/tools/Examples/Modern UI/Basic.nsi b/tools/Examples/Modern UI/Basic.nsi new file mode 100644 index 0000000..eb76d2b --- /dev/null +++ b/tools/Examples/Modern UI/Basic.nsi @@ -0,0 +1,89 @@ +;NSIS Modern User Interface +;Basic Example Script +;Written by Joost Verburg + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Name and file + Name "Modern UI Test" + OutFile "Basic.exe" + Unicode True + + ;Default installation folder + InstallDir "$LOCALAPPDATA\Modern UI Test" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\Modern UI Test" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel user + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Installer Sections + +Section "Dummy Section" SecDummy + + SetOutPath "$INSTDIR" + + ;ADD YOUR OWN FILES HERE... + + ;Store installation folder + WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + +SectionEnd + +;-------------------------------- +;Descriptions + + ;Language strings + LangString DESC_SecDummy ${LANG_ENGLISH} "A test section." + + ;Assign language strings to sections + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) + !insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ;ADD YOUR OWN FILES HERE... + + Delete "$INSTDIR\Uninstall.exe" + + RMDir "$INSTDIR" + + DeleteRegKey /ifempty HKCU "Software\Modern UI Test" + +SectionEnd \ No newline at end of file diff --git a/tools/Examples/Modern UI/HeaderBitmap.nsi b/tools/Examples/Modern UI/HeaderBitmap.nsi new file mode 100644 index 0000000..0aa9ea1 --- /dev/null +++ b/tools/Examples/Modern UI/HeaderBitmap.nsi @@ -0,0 +1,91 @@ +;NSIS Modern User Interface +;Header Bitmap Example Script +;Written by Joost Verburg + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Name and file + Name "Modern UI Test" + OutFile "HeaderBitmap.exe" + Unicode True + + ;Default installation folder + InstallDir "$LOCALAPPDATA\Modern UI Test" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\Modern UI Test" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel user + +;-------------------------------- +;Interface Configuration + + !define MUI_HEADERIMAGE + !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" ; optional + !define MUI_ABORTWARNING + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Installer Sections + +Section "Dummy Section" SecDummy + + SetOutPath "$INSTDIR" + + ;ADD YOUR OWN FILES HERE... + + ;Store installation folder + WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + +SectionEnd + +;-------------------------------- +;Descriptions + + ;Language strings + LangString DESC_SecDummy ${LANG_ENGLISH} "A test section." + + ;Assign language strings to sections + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) + !insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ;ADD YOUR OWN FILES HERE... + + Delete "$INSTDIR\Uninstall.exe" + + RMDir "$INSTDIR" + + DeleteRegKey /ifempty HKCU "Software\Modern UI Test" + +SectionEnd \ No newline at end of file diff --git a/tools/Examples/Modern UI/MultiLanguage.nsi b/tools/Examples/Modern UI/MultiLanguage.nsi new file mode 100644 index 0000000..0014a99 --- /dev/null +++ b/tools/Examples/Modern UI/MultiLanguage.nsi @@ -0,0 +1,204 @@ +;NSIS Modern User Interface +;Multilingual Example Script +;Written by Joost Verburg + +!pragma warning error all + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Properly display all languages (Installer will not work on Windows 95, 98 or ME!) + Unicode true + + ;Name and file + Name "Modern UI Test" + OutFile "MultiLanguage.exe" + + ;Default installation folder + InstallDir "$LOCALAPPDATA\Modern UI Test" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\Modern UI Test" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel user + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + + ;Show all languages, despite user's codepage + !define MUI_LANGDLL_ALLLANGUAGES + +;-------------------------------- +;Language Selection Dialog Settings + + ;Remember the installer language + !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" + !define MUI_LANGDLL_REGISTRY_KEY "Software\Modern UI Test" + !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_WELCOME + !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" + !insertmacro MUI_UNPAGE_COMPONENTS + !insertmacro MUI_UNPAGE_DIRECTORY + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" ; The first language is the default language + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Spanish" + !insertmacro MUI_LANGUAGE "SpanishInternational" + !insertmacro MUI_LANGUAGE "SimpChinese" + !insertmacro MUI_LANGUAGE "TradChinese" + !insertmacro MUI_LANGUAGE "Japanese" + !insertmacro MUI_LANGUAGE "Korean" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro MUI_LANGUAGE "Norwegian" + !insertmacro MUI_LANGUAGE "NorwegianNynorsk" + !insertmacro MUI_LANGUAGE "Finnish" + !insertmacro MUI_LANGUAGE "Greek" + !insertmacro MUI_LANGUAGE "Russian" + !insertmacro MUI_LANGUAGE "Portuguese" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !insertmacro MUI_LANGUAGE "Polish" + !insertmacro MUI_LANGUAGE "Ukrainian" + !insertmacro MUI_LANGUAGE "Czech" + !insertmacro MUI_LANGUAGE "Slovak" + !insertmacro MUI_LANGUAGE "Croatian" + !insertmacro MUI_LANGUAGE "Bulgarian" + !insertmacro MUI_LANGUAGE "Hungarian" + !insertmacro MUI_LANGUAGE "Thai" + !insertmacro MUI_LANGUAGE "Romanian" + !insertmacro MUI_LANGUAGE "Latvian" + !insertmacro MUI_LANGUAGE "Macedonian" + !insertmacro MUI_LANGUAGE "Estonian" + !insertmacro MUI_LANGUAGE "Turkish" + !insertmacro MUI_LANGUAGE "Lithuanian" + !insertmacro MUI_LANGUAGE "Slovenian" + !insertmacro MUI_LANGUAGE "Serbian" + !insertmacro MUI_LANGUAGE "SerbianLatin" + !insertmacro MUI_LANGUAGE "Arabic" + !insertmacro MUI_LANGUAGE "Farsi" + !insertmacro MUI_LANGUAGE "Hebrew" + !insertmacro MUI_LANGUAGE "Indonesian" + !insertmacro MUI_LANGUAGE "Mongolian" + !insertmacro MUI_LANGUAGE "Luxembourgish" + !insertmacro MUI_LANGUAGE "Albanian" + !insertmacro MUI_LANGUAGE "Breton" + !insertmacro MUI_LANGUAGE "Belarusian" + !insertmacro MUI_LANGUAGE "Icelandic" + !insertmacro MUI_LANGUAGE "Malay" + !insertmacro MUI_LANGUAGE "Bosnian" + !insertmacro MUI_LANGUAGE "Kurdish" + !insertmacro MUI_LANGUAGE "Irish" + !insertmacro MUI_LANGUAGE "Uzbek" + !insertmacro MUI_LANGUAGE "Galician" + !insertmacro MUI_LANGUAGE "Afrikaans" + !insertmacro MUI_LANGUAGE "Catalan" + !insertmacro MUI_LANGUAGE "Esperanto" + !insertmacro MUI_LANGUAGE "Asturian" + !insertmacro MUI_LANGUAGE "Basque" + !insertmacro MUI_LANGUAGE "Pashto" + !insertmacro MUI_LANGUAGE "ScotsGaelic" + !insertmacro MUI_LANGUAGE "Georgian" + !insertmacro MUI_LANGUAGE "Vietnamese" + !insertmacro MUI_LANGUAGE "Welsh" + !insertmacro MUI_LANGUAGE "Armenian" + !insertmacro MUI_LANGUAGE "Corsican" + !insertmacro MUI_LANGUAGE "Tatar" + !insertmacro MUI_LANGUAGE "Hindi" + +;-------------------------------- +;Reserve Files + + ;If you are using solid compression, files that are required before + ;the actual installation should be stored first in the data block, + ;because this will make your installer start faster. + + !insertmacro MUI_RESERVEFILE_LANGDLL + +;-------------------------------- +;Installer Sections + +Section "Dummy Section" SecDummy + + SetOutPath "$INSTDIR" + + ;ADD YOUR OWN FILES HERE... + + ;Store installation folder + WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + +SectionEnd + +;-------------------------------- +;Installer Functions + +Function .onInit + + !insertmacro MUI_LANGDLL_DISPLAY + +FunctionEnd + +;-------------------------------- +;Descriptions + + ;USE A LANGUAGE STRING IF YOU WANT YOUR DESCRIPTIONS TO BE LANGUAGE SPECIFIC + + ;Assign descriptions to sections + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} "A test section." + !insertmacro MUI_FUNCTION_DESCRIPTION_END + + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ;ADD YOUR OWN FILES HERE... + + Delete "$INSTDIR\Uninstall.exe" + + RMDir "$INSTDIR" + + DeleteRegKey /ifempty HKCU "Software\Modern UI Test" + +SectionEnd + +;-------------------------------- +;Uninstaller Functions + +Function un.onInit + + !insertmacro MUI_UNGETLANGUAGE + +FunctionEnd \ No newline at end of file diff --git a/tools/Examples/Modern UI/StartMenu.nsi b/tools/Examples/Modern UI/StartMenu.nsi new file mode 100644 index 0000000..fad6df5 --- /dev/null +++ b/tools/Examples/Modern UI/StartMenu.nsi @@ -0,0 +1,115 @@ +;NSIS Modern User Interface +;Start Menu Folder Selection Example Script +;Written by Joost Verburg + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Name and file + Name "Modern UI Test" + OutFile "StartMenu.exe" + Unicode True + + ;Default installation folder + InstallDir "$LOCALAPPDATA\Modern UI Test" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\Modern UI Test" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel user + +;-------------------------------- +;Variables + + Var StartMenuFolder + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Modern UI Test" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + + !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder + + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Installer Sections + +Section "Dummy Section" SecDummy + + SetOutPath "$INSTDIR" + + ;ADD YOUR OWN FILES HERE... + + ;Store installation folder + WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$StartMenuFolder" + CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + !insertmacro MUI_STARTMENU_WRITE_END + +SectionEnd + +;-------------------------------- +;Descriptions + + ;Language strings + LangString DESC_SecDummy ${LANG_ENGLISH} "A test section." + + ;Assign language strings to sections + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) + !insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ;ADD YOUR OWN FILES HERE... + + Delete "$INSTDIR\Uninstall.exe" + + RMDir "$INSTDIR" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + + Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" + RMDir "$SMPROGRAMS\$StartMenuFolder" + + DeleteRegKey /ifempty HKCU "Software\Modern UI Test" + +SectionEnd \ No newline at end of file diff --git a/tools/Examples/Modern UI/WelcomeFinish.nsi b/tools/Examples/Modern UI/WelcomeFinish.nsi new file mode 100644 index 0000000..7fa92e5 --- /dev/null +++ b/tools/Examples/Modern UI/WelcomeFinish.nsi @@ -0,0 +1,93 @@ +;NSIS Modern User Interface +;Welcome/Finish Page Example Script +;Written by Joost Verburg + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Name and file + Name "Modern UI Test" + OutFile "WelcomeFinish.exe" + Unicode True + + ;Default installation folder + InstallDir "$LOCALAPPDATA\Modern UI Test" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\Modern UI Test" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel user + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_WELCOME + !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Installer Sections + +Section "Dummy Section" SecDummy + + SetOutPath "$INSTDIR" + + ;ADD YOUR OWN FILES HERE... + + ;Store installation folder + WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + +SectionEnd + +;-------------------------------- +;Descriptions + + ;Language strings + LangString DESC_SecDummy ${LANG_ENGLISH} "A test section." + + ;Assign language strings to sections + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) + !insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ;ADD YOUR OWN FILES HERE... + + Delete "$INSTDIR\Uninstall.exe" + + RMDir "$INSTDIR" + + DeleteRegKey /ifempty HKCU "Software\Modern UI Test" + +SectionEnd diff --git a/tools/Examples/MultiUser.nsi b/tools/Examples/MultiUser.nsi new file mode 100644 index 0000000..80286a3 --- /dev/null +++ b/tools/Examples/MultiUser.nsi @@ -0,0 +1,58 @@ +Name "MultiUser example" +OutFile "MultiUser.exe" + +!define UNINSTKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" +!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "${UNINSTKEY}" +!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "CurrentUser" +!define MULTIUSER_INSTALLMODE_INSTDIR "$(^Name)" +!define MULTIUSER_INSTALLMODE_COMMANDLINE +!define MULTIUSER_EXECUTIONLEVEL Highest +!define MULTIUSER_MUI + +!include "LogicLib.nsh" +!include "MultiUser.nsh" +!include "MUI2.nsh" + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MULTIUSER_PAGE_INSTALLMODE +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_LANGUAGE "English" + +Function .onInit + !insertmacro MULTIUSER_INIT +FunctionEnd + +Function un.onInit + !insertmacro MULTIUSER_UNINIT +FunctionEnd + +Section + SetOutPath "$InstDir" + WriteUninstaller "$InstDir\Uninstall.exe" + WriteRegStr ShCtx "${UNINSTKEY}" DisplayName "$(^Name)" + WriteRegStr ShCtx "${UNINSTKEY}" UninstallString '"$InstDir\Uninstall.exe"' + WriteRegStr ShCtx "${UNINSTKEY}" $MultiUser.InstallMode 1 ; Write MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME so the correct context can be detected in the uninstaller. + + !tempfile APP + !makensis '-v2 "-DOUTFILE=${APP}" "-DNAME=NsisMultiUserExample" -DCOMPANY=Nullsoft "AppGen.nsi"' = 0 + File "/oname=$InstDir\MyApp.exe" "${APP}" ; Pretend that we have a real application to install + !delfile "${APP}" +SectionEnd + +Section "Start Menu shortcut" + CreateShortcut /NoWorkingDir "$SMPrograms\$(^Name).lnk" "$InstDir\MyApp.exe" +SectionEnd + +Section "-Uninstall" + Delete "$SMPrograms\$(^Name).lnk" + + Delete "$InstDir\MyApp.exe" + Delete "$InstDir\Uninstall.exe" + DeleteRegKey ShCtx "${UNINSTKEY}" + RMDir $InstDir +SectionEnd diff --git a/tools/Examples/NSISMenu.nsi b/tools/Examples/NSISMenu.nsi new file mode 100644 index 0000000..be94410 --- /dev/null +++ b/tools/Examples/NSISMenu.nsi @@ -0,0 +1,358 @@ +OutFile "NSIS.exe" +Name "NSIS Menu" +Unicode True +RequestExecutionLevel User +XPStyle On +ManifestDPIAware System +SetCompressor LZMA +ChangeUI IDD_INST "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe" +Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis-menu.ico" +BrandingText " " +MiscButtonText " " " " " " " " +InstallButtonText " " +CompletedText " " +LangString ^ClickInstall 0 " " +Caption "$(^Name)" + +!macro UNPACKVERFIELD out in shr mask fmt +!define /redef /math ${out} ${in} >>> ${shr} +!define /redef /math ${out} ${${out}} & ${mask} +!define /redef /intfmt ${out} "${fmt}" ${${out}} +!macroend + +!ifndef VER_MAJOR & VER_MINOR +!ifdef NSIS_PACKEDVERSION +!insertmacro UNPACKVERFIELD VER_MAJOR ${NSIS_PACKEDVERSION} 24 0x0ff "%X" +!insertmacro UNPACKVERFIELD VER_MINOR ${NSIS_PACKEDVERSION} 12 0xfff "%X" +!insertmacro UNPACKVERFIELD VER_REVISION ${NSIS_PACKEDVERSION} 4 255 "%X" +!insertmacro UNPACKVERFIELD VER_BUILD ${NSIS_PACKEDVERSION} 00 0x00f "%X" +!endif +!endif +!ifdef VER_MAJOR & VER_MINOR +!define /ifndef VER_REVISION 0 +!define /ifndef VER_BUILD 0 +!searchreplace VERSTR "${NSIS_VERSION}" "v" "" +VIProductVersion ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD} +VIAddVersionKey "ProductName" "NSIS" +VIAddVersionKey "ProductVersion" "${VERSTR}" +VIAddVersionKey "FileVersion" "${VERSTR}" +VIAddVersionKey "FileDescription" "NSIS Menu" +VIAddVersionKey "LegalCopyright" "http://nsis.sf.net/License" +!endif + +!include nsDialogs.nsh +!include WinMessages.nsh +!include LogicLib.nsh +!define /IfNDef IDC_CHILDRECT 1018 +!define QUIT_ON_EXECUTE +!define PR $ExeDir ; Local root path +!define PD "Docs" ; Local with WWW fallback (located at the same relative path) +!define WWW "http://nsis.sf.net" + +!define CB_HEADER '0x755585 0x222222' +!define UY_HEADER 28 +!define CT_PAGE '0x000000 0xaaaaaa' +!define CB_PAGE '0xffffff 0x111111' +!define CT_SECTION '0x666666 0xeeeeee' +!define CB_SECTION '${CB_PAGE}' +!define UY_SECTION 11 ; Height of a section +!define UY_SECTIONBPAD 2 ; Extra padding on the bottom of section headers +!define UY_TXT 9 ; Height of a normal item +!define UY_TXTBPAD 1 ; Extra padding on the bottom of normal items +!define UX_COLPAD 7 ; Spacing between columns +!define UY_ROW2 104 ; Absolute position of the 2nd row +!define CT_LINK '0x0c6e97 0x0c6e97' ; SYSCLR:HOTLIGHT +!define /Math UX_PAGE 00 + ${UX_COLPAD} +!define /Math UY_PAGE ${UY_HEADER} + 20 +!define UX ${UX_PAGE} +!define CB_FOOTERLINE '0xc4c4c4 0x333333' +!define CT_FOOTER '0xbbbbbb 0x444444' + +Var UseLightTheme + +Function .onGUIInit +ReadRegDWORD $UseLightTheme HKCU "Software\NSIS" "UseLightTheme" +StrCmp $UseLightTheme "" 0 +2 +ReadRegDWORD $UseLightTheme HKCU "Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" "AppsUseLightTheme" +StrCmp $UseLightTheme "" 0 +2 +StrCpy $UseLightTheme 1 ; Default + +StrCmp $UseLightTheme "0" 0 +5 +System::Call 'DWMAPI::DwmSetWindowAttribute(p$hWndParent,i20,*i1,i4)i.r0' ; 20H1 +IntCmp $0 0 +3 +3 +System::Call 'DWMAPI::DwmSetWindowAttribute(p$hWndParent,i19,*i1,i4)i.r0' ; ; 19H1 +System::Call 'USER32::SetProp(p$hWndParent,t"UseImmersiveDarkModeColors",i1)' ; 1809 +FunctionEnd + +!define SetCtlColors "!insertmacro SetCtlColors " +!macro SetCtlColors hWnd ctlig ctdar cblig cbdar +StrCmp $UseLightTheme "0" 0 +3 +SetCtlColors ${hWnd} "${ctdar}" ${cbdar} +Goto +2 +SetCtlColors ${hWnd} "${ctlig}" ${cblig} +!macroend + + +Function PageLeave +System::Call 'USER32::GetFocus()p.r0' +System::Call 'USER32::GetDlgCtrlID(pr0)i.r1' +System::Call 'USER32::GetParent(pr0)p.r2' +SendMessage $2 ${WM_COMMAND} $1 $0 ; Handle in dialog by pretending it was a click on the active control +Abort +FunctionEnd + +Function PageCreate +GetDlgItem $0 $hWndParent 1 +ShowWindow $0 0 +GetDlgItem $0 $hWndParent 2 +ShowWindow $0 0 + +System::Call 'USER32::GetClientRect(p$hWndParent,@r0)' +System::Call '*$0(i,i,i.r3,i.r4)' +GetDlgItem $0 $hWndParent ${IDC_CHILDRECT} +System::Call 'USER32::MoveWindow(pr0,i0,i0,ir3,ir4,i0)' + +nsDialogs::Create ${IDC_CHILDRECT} +Pop $R9 +${SetCtlColors} $R9 ${CT_PAGE} ${CB_PAGE} + +!macro StartColumn W +!define /ReDef UY ${UY_PAGE} +!define /ReDef UX_W ${W} +!ifdef UX_INTERNAL_PREV_W +!define /ReDef /Math UX ${UX} + ${UX_INTERNAL_PREV_W} +!define /ReDef /Math UX ${UX} + ${UX_COLPAD} +!define /ReDef UX_INTERNAL_PREV_W ${UX_W} +!else +!define /Math UX_INTERNAL_PREV_W 0 + ${UX_W} +!endif +!macroend +!macro CreateHeader Txt W +!define /ReDef /Math W ${W} + 4 ; Make it slightly wider +${NSD_CreateLabel} ${UX}u ${UY}u ${W}u ${UY_SECTION}u "${Txt}" +Pop $0 +${SetCtlColors} $0 ${CT_SECTION} transparent transparent +SendMessage $0 ${WM_SETFONT} ${HF_HEADER} 1 +!define /ReDef /Math UY ${UY} + ${UY_SECTION} +!define /ReDef /Math UY ${UY} + ${UY_SECTIONBPAD} +!macroend +!macro CreateControl Class Txt W H +${NSD_Create${Class}} ${UX}u ${UY}u ${W}u ${H}u "${Txt}" +!define /ReDef /Math UY ${UY} + ${H} +!define /ReDef /Math UY ${UY} + ${UY_TXTBPAD} +!macroend +!macro CreateSimpleLinkHelper Txt Url W +!insertmacro CreateControl Link "${Txt}|${Url}" ${W} ${UY_TXT} +!macroend +!macro CreateSimpleLink Txt Url W +!insertmacro CreateSimpleLinkHelper "${Txt}" "${Url}" ${W} +Call ConfigureLink +!macroend + + +; --- Header --- +!define HF_HEADER $R8 +CreateFont ${HF_HEADER} "Arial" ${UY_SECTION} 700 + +nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE} ${__NSD_Label_EXSTYLE} 33u 0 -33u ${UY_HEADER}u "" +Pop $0 +${SetCtlColors} $0 0xffffff 0xffffff ${CB_HEADER} + +; CCv5 does not paint the background outside of the icon correctly when SS_CENTERIMAGE is used so we have to overlay a small icon on top of the background +nsDialogs::CreateControl ${__NSD_Icon_CLASS} ${__NSD_Icon_STYLE} ${__NSD_Icon_EXSTYLE} 4u 4u 33u ${UY_HEADER}u "" +Pop $0 +${SetCtlColors} $0 "" "" ${CB_HEADER} +${NSD_SetIconFromInstaller} $0 $1 +nsDialogs::CreateControl ${__NSD_Icon_CLASS} ${__NSD_Icon_STYLE}|${SS_CENTERIMAGE}|${SS_CENTER} ${__NSD_Icon_EXSTYLE} 0 0 33u ${UY_HEADER}u "" +Pop $0 +${SetCtlColors} $0 "" "" ${CB_HEADER} + +CreateFont $1 "Trebuchet MS" 17 +!searchreplace VERSTR "${NSIS_VERSION}" "v" "" +nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_ENDELLIPSIS} ${__NSD_Label_EXSTYLE} 34u 1u -34u ${UY_HEADER}u "nullsoft scriptable install system ${VERSTR}" +Pop $0 +SetCtlColors $0 0x3A2A42 transparent +SendMessage $0 ${WM_SETFONT} $1 1 +nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_ENDELLIPSIS} ${__NSD_Label_EXSTYLE} 33u 0 -33u ${UY_HEADER}u "nullsoft scriptable install system ${VERSTR}" +Pop $0 +SetCtlColors $0 0xffffff transparent +SendMessage $0 ${WM_SETFONT} $1 1 + + +; --- Page --- +!insertmacro StartColumn 90 +!insertmacro CreateHeader "Compiler" ${UX_W} +!insertmacro CreateSimpleLink "Compile NSI scripts" "${PR}\MakeNSISW" ${UX_W} +!insertmacro CreateSimpleLink "Installer based on .ZIP file" "${PR}\bin\Zip2Exe" ${UX_W} + + +!define /ReDef UY ${UY_ROW2} +!insertmacro CreateHeader "Developer Center" ${UX_W} +!define /ReDef UY_MULTILINE 42 +!insertmacro CreateControl Label "Many more examples, tutorials, plug-ins and NSIS-related software are available at the online Developer Center." ${UX_W} ${UY_MULTILINE} +Pop $0 +${SetCtlColors} $0 ${CT_PAGE} ${CB_PAGE} + + +!insertmacro StartColumn 80 +!insertmacro CreateHeader "Documentation" ${UX_W} +!insertmacro CreateSimpleLink "NSIS Users Manual" "${PR}\NSIS.chm|${WWW}/Docs/" ${UX_W} +!insertmacro CreateSimpleLink "Example scripts" "${PR}\Examples|${WWW}/Examples" ${UX_W} +!insertmacro CreateSimpleLink "Modern UI 2" "${PD}\Modern UI 2\Readme.html" ${UX_W} + + +!define /ReDef UY ${UY_ROW2} +!insertmacro CreateHeader "Online Help" ${UX_W} +!insertmacro CreateSimpleLink "Developer Center" "${WWW}/Developer_Center" ${UX_W} +!insertmacro CreateSimpleLink "FAQ" "${WWW}/FAQ" ${UX_W} +!insertmacro CreateSimpleLink "Forum" "http://forums.winamp.com/forumdisplay.php?forumid=65" ${UX_W} +;"Project Tracker" "http://sourceforge.net/tracker/?group_id=22049" +!insertmacro CreateSimpleLink "Bug Tracker" "http://sourceforge.net/tracker/?group_id=22049&atid=373085" ${UX_W} +!insertmacro CreateSimpleLink "Stackoverflow" "http://stackoverflow.com/questions/tagged/nsis" ${UX_W} +!insertmacro CreateSimpleLink "Chat" "${WWW}/r/Chat" ${UX_W} +;insertmacro CreateSimpleLink "IRC channel" "irc://irc.landoleet.org/nsis" ${UX_W} +;"Pastebin" "http://nsis.pastebin.com/index/1FtyKP89" +;"Search" "http://www.google.com/cse/home?cx=005317984255499820329:c_glv1-6a6a" + + +!insertmacro StartColumn 130 +!insertmacro CreateHeader "Plug-ins" ${UX_W} +!macro CreatePluginLink Name Desc Url +!define /ReDef SAVE_UY ${UY} +!insertmacro CreateSimpleLinkHelper "${Name}" "${Url}" ${UX_W} ; AdjustLinkPair will configure this link +!define /ReDef UY ${SAVE_UY} +!insertmacro CreateControl Label "${Name} - ${Desc}" ${UX_W} ${UY_TXT} +Call AdjustLinkPair +!macroend +!insertmacro CreatePluginLink "AdvSplash" "splash with fade in/out" "${PD}\AdvSplash\advsplash.txt" +!insertmacro CreatePluginLink "Banner" "banner with custom text" "${PD}\Banner\Readme.txt" +!insertmacro CreatePluginLink "BgImage" "background image" "${PD}\BgImage\BgImage.txt" +!insertmacro CreatePluginLink "Dialer" "internet connection" "${PD}\Dialer\Dialer.txt" +!insertmacro CreatePluginLink "Math" "math operations" "${PD}\Math\Math.txt" +!insertmacro CreatePluginLink "nsDialogs" "custom wizard pages" "${PD}\nsDialogs\Readme.html" +!insertmacro CreatePluginLink "nsExec" "launch command line tools" "${PD}\nsExec\nsExec.txt" +!insertmacro CreatePluginLink "NSISdl" "download files" "${PD}\NSISdl\Readme.txt" +!insertmacro CreatePluginLink "Splash" "splash screen" "${PD}\Splash\splash.txt" +!insertmacro CreatePluginLink "StartMenu" "Start Menu folder selection" "${PD}\StartMenu\Readme.txt" +!insertmacro CreatePluginLink "System" "Windows API calls" "${PD}\System\System.html" +!insertmacro CreatePluginLink "VPatch" "update existing files" "${PD}\VPatch\Readme.html" + + +; --- Footer --- +${NSD_CreateLabel} 0 -22u 100% 1 "" +Pop $0 +${SetCtlColors} $0 000000 000000 ${CB_FOOTERLINE} + +nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_NOTIFY} ${__NSD_Label_EXSTYLE} -110u -20u 100% 20u "nsis.sourceforge.net" +Pop $0 +${SetCtlColors} $0 ${CT_FOOTER} transparent transparent +SendMessage $0 ${WM_SETFONT} ${HF_HEADER} 1 +nsDialogs::SetUserData $0 "https://nsis.sourceforge.io" +${NSD_OnClick} $0 OnLinkClick + +nsDialogs::Show +FunctionEnd + +Function OnLinkClick +Pop $1 ; HWND +nsDialogs::GetUserData $1 +Call SplitPipe +Pop $0 ; First URL in UserData from SplitPipe +StrCpy $3 "" +StrCpy $1 $0 4 ; Copy length of ${PD} +${IfThen} $1 == "${PD}" ${|} StrCpy $3 "${PR}\" ${|} +!ifdef QUIT_ON_EXECUTE +System::Call 'USER32::GetKeyState(i0x11)i.r9' ; VK_CONTROL +!endif +ClearErrors +ExecShell "" "$3$0" +Pop $1 ; ... the rest of SplitPipe ... +${If} $1 != "" ; ... might contain a fallback location + StrCpy $0 $1 + StrCpy $3 "" +${ElseIf} $3 != "" ; Local docs path failed, use WWW fallback + StrCpy $3 0 + slashconvloop: + StrCpy $2 $0 1 $3 + ${If} $2 == "\" + StrCpy $2 $0 $3 + IntOp $3 $3 + 1 + StrCpy $0 $0 "" $3 + StrCpy $0 "$2/$0" + ${Else} + IntOp $3 $3 + 1 + ${EndIf} + StrCmp $2 "" 0 slashconvloop + StrCpy $3 "${WWW}/" +${EndIf} +${If} "$3$1" != "" +${AndIf} ${Errors} + ExecShell "" "$3$0" +${EndIf} +${If} ${Errors} + !ifdef QUIT_ON_EXECUTE + StrCpy $9 0 ; Don't allow close + !endif + MessageBox MB_IconStop 'Error: Unable to open "$0"!' +${EndIf} +!ifdef QUIT_ON_EXECUTE +${IfThen} $9 < 0 ${|} SendMessage $hWndParent ${WM_CLOSE} 0 0 ${|} +!endif +FunctionEnd + +Function ConfigureLink +Pop $1 ; HWND +${NSD_OnClick} $1 OnLinkClick +${SetCtlColors} $1 ${CT_LINK} ${CB_PAGE} +${NSD_GetText} $1 $4 +Push $4 +Call SplitPipe +Pop $4 +Pop $2 +${NSD_SetText} $1 $4 +nsDialogs::SetUserData $1 $2 +System::Call 'USER32::GetDC(pr1)p.r3' +SendMessage $1 ${WM_GETFONT} 0 0 $5 +System::Call 'GDI32::SelectObject(pr3,pr5)p.s' +StrLen $5 $4 +System::Call 'GDI32::GetTextExtentPoint32(pr3,tr4,ir5,@r5)' +System::Call '*$5(i.r6)' +System::Call 'GDI32::SelectObject(pr3,ps)' +System::Call 'USER32::ReleaseDC(pr1,pr3)' +System::Call 'USER32::GetWindowRect(pr1,@r3)' +System::Call '*$3(i,i.r5,i,i.r7)' +IntOp $7 $7 - $5 +IntOp $6 $6 + 4 ; Padding for focus rect +System::Call 'USER32::SetWindowPos(pr1,p,i,i,ir6,ir7,i0x16)' +FunctionEnd + +Function AdjustLinkPair +Pop $2 ; Label +${SetCtlColors} $2 ${CT_PAGE} ${CB_PAGE} +Call ConfigureLink +FunctionEnd + +Function SplitPipe +Exch $0 +Push $1 +Push $2 +StrCpy $2 0 +findSep: +StrCpy $1 $0 1 $2 +IntOp $2 $2 + 1 +StrCmp $1 "" +2 +StrCmp $1 "|" "" findSep +StrCpy $1 $0 "" $2 +IntOp $2 $2 - 1 +StrCpy $0 $0 $2 +Pop $2 +Exch $1 +Exch +Exch $0 +FunctionEnd + +Section +SectionEnd + +Page Custom PageCreate PageLeave +!pragma warning disable 8000 ; Page instfiles not used \ No newline at end of file diff --git a/tools/Examples/Plugin/exdll-vs2008.sln b/tools/Examples/Plugin/exdll-vs2008.sln new file mode 100644 index 0000000..7b03ddc --- /dev/null +++ b/tools/Examples/Plugin/exdll-vs2008.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exdll", "exdll-vs2008.vcproj", "{5E3E2AFD-1D6B-4997-A9B5-8ECBC8F6C31A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5E3E2AFD-1D6B-4997-A9B5-8ECBC8F6C31A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5E3E2AFD-1D6B-4997-A9B5-8ECBC8F6C31A}.Debug|Win32.Build.0 = Debug|Win32 + {5E3E2AFD-1D6B-4997-A9B5-8ECBC8F6C31A}.Release|Win32.ActiveCfg = Release|Win32 + {5E3E2AFD-1D6B-4997-A9B5-8ECBC8F6C31A}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tools/Examples/Plugin/exdll-vs2008.vcproj b/tools/Examples/Plugin/exdll-vs2008.vcproj new file mode 100644 index 0000000..e4bb417 --- /dev/null +++ b/tools/Examples/Plugin/exdll-vs2008.vcproj @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/Examples/Plugin/exdll.c b/tools/Examples/Plugin/exdll.c new file mode 100644 index 0000000..e4e807e --- /dev/null +++ b/tools/Examples/Plugin/exdll.c @@ -0,0 +1,42 @@ +#include +#include // nsis plugin + +HINSTANCE g_hInstance; +HWND g_hwndParent; + +// To work with Unicode version of NSIS, please use TCHAR-type +// functions for accessing the variables and the stack. + +void __declspec(dllexport) myFunction(HWND hwndParent, int string_size, + LPTSTR variables, stack_t **stacktop, + extra_parameters *extra, ...) +{ + EXDLL_INIT(); + g_hwndParent = hwndParent; + + + // note if you want parameters from the stack, pop them off in order. + // i.e. if you are called via exdll::myFunction file.dat read.txt + // calling popstring() the first time would give you file.dat, + // and the second time would give you read.txt. + // you should empty the stack of your parameters, and ONLY your + // parameters. + + // do your stuff here + { + LPTSTR msgbuf = (LPTSTR) GlobalAlloc(GPTR, (3 + string_size + 1) * sizeof(*msgbuf)); + if (msgbuf) + { + wsprintf(msgbuf, TEXT("$0=%s"), getuservariable(INST_0)); + MessageBox(g_hwndParent, msgbuf, TEXT("Message from example plugin"), MB_OK); + GlobalFree(msgbuf); + } + } +} + + +BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) +{ + g_hInstance = hInst; + return TRUE; +} diff --git a/tools/Examples/Plugin/exdll.dpr b/tools/Examples/Plugin/exdll.dpr new file mode 100644 index 0000000..ec70b10 --- /dev/null +++ b/tools/Examples/Plugin/exdll.dpr @@ -0,0 +1,118 @@ +{ + NSIS ExDLL example + (C) 2001 - Peter Windridge + + Fixed and formatted by Brett Dever + http://editor.nfscheats.com/ + + Tested in Delphi 7.0 +} + +library exdll; + +uses Windows; + +type + VarConstants = ( + INST_0, + INST_1, // $1 + INST_2, // $2 + INST_3, // $3 + INST_4, // $4 + INST_5, // $5 + INST_6, // $6 + INST_7, // $7 + INST_8, // $8 + INST_9, // $9 + INST_R0, // $R0 + INST_R1, // $R1 + INST_R2, // $R2 + INST_R3, // $R3 + INST_R4, // $R4 + INST_R5, // $R5 + INST_R6, // $R6 + INST_R7, // $R7 + INST_R8, // $R8 + INST_R9, // $R9 + INST_CMDLINE, // $CMDLINE + INST_INSTDIR, // $INSTDIR + INST_OUTDIR, // $OUTDIR + INST_EXEDIR, // $EXEDIR + INST_LANG, // $LANGUAGE + __INST_LAST + ); + TVariableList = INST_0..__INST_LAST; + pstack_t = ^stack_t; + stack_t = record + next: pstack_t; + text: PChar; + end; + +var + g_stringsize: integer; + g_stacktop: ^pstack_t; + g_variables: PChar; + g_hwndParent: HWND; + +function PopString(): string; +var + th: pstack_t; +begin + if integer(g_stacktop^) <> 0 then begin + th := g_stacktop^; + Result := PChar(@th.text); + g_stacktop^ := th.next; + GlobalFree(HGLOBAL(th)); + end; +end; + +procedure PushString(const str: string=''); +var + th: pstack_t; +begin + if integer(g_stacktop) <> 0 then begin + th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + g_stringsize)); + lstrcpyn(@th.text, PChar(str), g_stringsize); + th.next := g_stacktop^; + g_stacktop^ := th; + end; +end; + +function GetUserVariable(const varnum: TVariableList): string; +begin + if (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then + Result := g_variables + integer(varnum) * g_stringsize + else + Result := ''; +end; + +procedure SetUserVariable(const varnum: TVariableList; const value: string); +begin + if (value <> '') and (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then + lstrcpy(g_variables + integer(varnum) * g_stringsize, PChar(value)) +end; + +procedure NSISDialog(const text, caption: string; const buttons: integer); +begin + MessageBox(g_hwndParent, PChar(text), PChar(caption), buttons); +end; + +procedure ex_dll(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl; +begin + // setup global variables + g_stringsize := string_size; + g_hwndParent := hwndParent; + g_stacktop := stacktop; + g_variables := variables; + // end global variable setup + + NSISDialog(GetUserVariable(INST_0), 'The value of $0', MB_OK); + NSISDialog(PopString, 'pop', MB_OK); + PushString('Hello, this is a push'); + SetUserVariable(INST_0, 'This is user var $0'); +end; + +exports ex_dll; + +begin +end. diff --git a/tools/Examples/Plugin/exdll.dsp b/tools/Examples/Plugin/exdll.dsp new file mode 100644 index 0000000..81dc4a4 --- /dev/null +++ b/tools/Examples/Plugin/exdll.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="exdll" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=exdll - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "exdll.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "exdll.mak" CFG="exdll - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "exdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "exdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "exdll - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXDLL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O1 /I "." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXDLL_EXPORTS" /D NSISCALL=__stdcall /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib /nologo /dll /machine:I386 +# ADD LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib nsis\pluginapi.lib /nologo /entry:"DllMain" /dll /machine:I386 /nodefaultlib /out:"../../Plugins/exdll.dll" /opt:nowin98 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "exdll - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXDLL_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXDLL_EXPORTS" /D NSISCALL=__stdcall /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib nsis\pluginapi.lib /nologo /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "exdll - Win32 Release" +# Name "exdll - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\exdll.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\nsis\pluginapi.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/tools/Examples/Plugin/exdll.dsw b/tools/Examples/Plugin/exdll.dsw new file mode 100644 index 0000000..e8a07c1 --- /dev/null +++ b/tools/Examples/Plugin/exdll.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "exdll"=.\exdll.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/tools/Examples/Plugin/exdll_with_unit.dpr b/tools/Examples/Plugin/exdll_with_unit.dpr new file mode 100644 index 0000000..d9268d5 --- /dev/null +++ b/tools/Examples/Plugin/exdll_with_unit.dpr @@ -0,0 +1,100 @@ +{ + NSIS ExDLL2 example + Original is ExDLL + (C) 2001 - Peter Windridge + + Changed with delphi unit nsis.pas + by bernhard mayer + + Tested in Delphi 7.0 +} + +// Example NSIS code +{ +Section + exdll_with_unit::registerplugincallback + + StrCpy $3 "Hello" + Push "World" + exdll_with_unit::pop_dlg_push + Pop $1 + DetailPrint $$1=$1 + DetailPrint $$3=$3 + + GetFunctionAddress $0 nsistest + Push $0 + exdll_with_unit::callnsisfunc +SectionEnd + +Function nsistest + DetailPrint "Hello from NSIS function" +FunctionEnd +} + + +library exdll; + +uses + nsis, windows; + +{$IFDEF UNICODE} +type TString = System.WideString; // UnicodeString? +type PTChar = PWideChar; +{$ELSE} +type TString = AnsiString; +type PTChar = PAnsiChar; +{$ENDIF} + +procedure pop_dlg_push(const hwndParent: HWND; const string_size: integer; const variables: PTChar; const stacktop: pointer); cdecl; +begin + // set up global variables + Init(hwndParent, string_size, variables, stacktop); + + NSISDialog(GetUserVariable(INST_3), 'The value of $3', MB_OK); + NSISDialog(PopString, 'pop', MB_OK); + PushString('Hello, this is a push'); + SetUserVariable(INST_3, 'This is user var $3'); +end; + + +procedure callnsisfunc(const hwndParent: HWND; const string_size: integer; const variables: PTChar; const stacktop: pointer; const extraparameters: pointer); cdecl; +var + FuncAddr : TString; +begin + Init(hwndParent, string_size, variables, stacktop, extraparameters); + + FuncAddr := PopString(); + Call(FuncAddr); +end; + + +function mynsiscallback(const NSPIM: TNSPIM): Pointer; cdecl; +begin + Result := nil; + if NSPIM = NSPIM_UNLOAD then + begin + NSISDialog(PTChar('NSPIM_UNLOAD is the final callback, goodbye...'), PTChar('mynsiscallback'), MB_OK); + end; +end; + + +procedure registerplugincallback(const hwndParent: HWND; const string_size: integer; const variables: PTChar; const stacktop: pointer; const extraparameters: pointer); cdecl; +var + ThisDllInstance : HMODULE; +begin + Init(hwndParent, string_size, variables, stacktop, extraparameters); + + if g_extraparameters <> nil then + begin + ThisDllInstance := hInstance; + TRegisterPluginCallback(g_extraparameters.RegisterPluginCallback)(ThisDllInstance, @mynsiscallback); + end; +end; + + +exports pop_dlg_push; +exports callnsisfunc; +exports registerplugincallback; + +begin +end. diff --git a/tools/Examples/Plugin/extdll.inc b/tools/Examples/Plugin/extdll.inc new file mode 100644 index 0000000..e3b7476 --- /dev/null +++ b/tools/Examples/Plugin/extdll.inc @@ -0,0 +1,145 @@ +;################################################################ +; ExtDLL header for MASM32 +; +; Author: Ramon +; +; Obs: This header must be included after windows.inc and kernel32.inc +; because it need the prototypes for lstrcpy, lstrcpyn, +; GlobalAlloc and GlobalFree +; +;################################################################ +stack_t struct + next dd ? + text dd ? ; 1 DUP(?) ; this should be the length of string_size +stack_t ends + +.const +; For page showing plug-ins +WM_NOTIFY_OUTER_NEXT equ (WM_USER+0x8) +WM_NOTIFY_CUSTOM_READY equ (WM_USER+0xd) +NOTIFY_BYE_BYE equ 'x' + +INST_0 EQU 0 ; $0 +INST_1 EQU 1 ; $1 +INST_2 EQU 2 ; $2 +INST_3 EQU 3 ; $3 +INST_4 EQU 4 ; $4 +INST_5 EQU 5 ; $5 +INST_6 EQU 6 ; $6 +INST_7 EQU 7 ; $7 +INST_8 EQU 8 ; $8 +INST_9 EQU 9 ; $9 +INST_R0 EQU 10 ; $R0 +INST_R1 EQU 11 ; $R1 +INST_R2 EQU 12 ; $R2 +INST_R3 EQU 13 ; $R3 +INST_R4 EQU 14 ; $R4 +INST_R5 EQU 15 ; $R5 +INST_R6 EQU 16 ; $R6 +INST_R7 EQU 17 ; $R7 +INST_R8 EQU 18 ; $R8 +INST_R9 EQU 19 ; $R9 +INST_CMDLINE EQU 20 ; $CMDLINE +INST_INSTDIR EQU 21 ; $INSTDIR +INST_OUTDIR EQU 22 ; $OUTDIR +INST_EXEDIR EQU 23 ; $EXEDIR +INST_LANG EQU 24 ; $LANGUAGE +__INST_LAST EQU 25 + +.data? +g_stringsize dd ? +g_stacktop dd ? +g_variables dd ? + +m2m MACRO M1, M2 + push M2 + pop M1 +ENDM + +EXDLL_INIT MACRO + m2m g_stringsize, string_size + m2m g_stacktop, stacktop + m2m g_variables, variables +ENDM + +.code + +; utility functions (not required but often useful) +popstring proc uses edi pStr:DWORD + + LOCAL th:DWORD + + mov edi, g_stacktop + cmp edi, 0 + jz STACK_ERR + mov edi, [edi] + cmp edi, 0 + jz STACK_ERR + + ASSUME edi:PTR stack_t + invoke lstrcpy, pStr, ADDR [edi].text + mov th , edi + mov edi, [edi].next + mov eax, g_stacktop + mov [eax], edi + invoke GlobalFree, th + ASSUME edi:PTR NOTHING + mov eax, 0 + ret + +STACK_ERR: + mov eax, 1 + ret + +popstring endp + +pushstring proc uses edi pStr:DWORD + + cmp g_stacktop, 0 + jz STACK_ERR + + mov eax, sizeof stack_t + add eax, g_stringsize + invoke GlobalAlloc, GPTR, eax + + mov edi, eax + assume edi:PTR stack_t + + invoke lstrcpyn, ADDR [edi].text, pStr, g_stringsize + mov eax, g_stacktop + push DWORD PTR[eax] + mov [eax], edi + pop eax + ;lea edi, [edi].next ; Not needed [edi].next == edi + mov DWORD PTR[edi], eax + ASSUME edi:PTR NOTHING + +STACK_ERR: + ret + +pushstring endp + +getuservariable proc varnum:DWORD + + .if varnum < 0 || varnum >= __INST_LAST + xor eax, eax + .else + mov eax, varnum + imul eax, g_stringsize + add eax, g_variables + .endif + ret + +getuservariable endp + +setuservariable proc varnum:DWORD, var:DWORD + + .if (var != NULL && varnum >= 0 && varnum < __INST_LAST) + mov eax, varnum + imul eax, g_stringsize + add eax, g_variables + invoke lstrcpy, eax, var + .endif + ret + +setuservariable endp diff --git a/tools/Examples/Plugin/nsis.pas b/tools/Examples/Plugin/nsis.pas new file mode 100644 index 0000000..1648472 --- /dev/null +++ b/tools/Examples/Plugin/nsis.pas @@ -0,0 +1,236 @@ +{ + Original Code from + (C) 2001 - Peter Windridge + + Code in separate unit and some changes + 2003 by Bernhard Mayer + + Fixed and formatted by Brett Dever + http://editor.nfscheats.com/ + + simply include this unit in your plugin project and export + functions as needed +} + +unit nsis; + +interface + +uses + windows, SysUtils +{$IFNDEF FPC} + ,CommCtrl +{$ENDIF} +{$IF FPC_FULLVERSION < 30000} ; This is probably wrong + ,CommCtrl +{$ENDIF} + ; + +{$IFDEF UNICODE} +type NSISTString = System.WideString; // UnicodeString? +type NSISPTChar = PWideChar; +{$ELSE} +type NSISTString = AnsiString; +type NSISPTChar = PAnsiChar; +{$ENDIF} + +type + VarConstants = ( + INST_0, // $0 + INST_1, // $1 + INST_2, // $2 + INST_3, // $3 + INST_4, // $4 + INST_5, // $5 + INST_6, // $6 + INST_7, // $7 + INST_8, // $8 + INST_9, // $9 + INST_R0, // $R0 + INST_R1, // $R1 + INST_R2, // $R2 + INST_R3, // $R3 + INST_R4, // $R4 + INST_R5, // $R5 + INST_R6, // $R6 + INST_R7, // $R7 + INST_R8, // $R8 + INST_R9, // $R9 + INST_CMDLINE, // $CMDLINE + INST_INSTDIR, // $INSTDIR + INST_OUTDIR, // $OUTDIR + INST_EXEDIR, // $EXEDIR + INST_LANG, // $LANGUAGE + __INST_LAST + ); + TVariableList = INST_0..__INST_LAST; + +type + PluginCallbackMessages = ( + NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup + NSPIM_GUIUNLOAD // Called after .onGUIEnd + ); + TNSPIM = NSPIM_UNLOAD..NSPIM_GUIUNLOAD; + + //TPluginCallback = function (const NSPIM: Integer): Pointer; cdecl; + + TExecuteCodeSegment = function (const funct_id: Integer; const parent: HWND): Integer; stdcall; + Tvalidate_filename = procedure (const filename: NSISPTChar); stdcall; + TRegisterPluginCallback = function (const DllInstance: HMODULE; const CallbackFunction: Pointer): Integer; stdcall; + + pexec_flags_t = ^exec_flags_t; + exec_flags_t = record + autoclose: Integer; + all_user_var: Integer; + exec_error: Integer; + abort: Integer; + exec_reboot: Integer; + reboot_called: Integer; + XXX_cur_insttype: Integer; + plugin_api_version: Integer; + silent: Integer; + instdir_error: Integer; + rtl: Integer; + errlvl: Integer; + alter_reg_view: Integer; + status_update: Integer; + end; + + pextrap_t = ^extrap_t; + extrap_t = record + exec_flags: Pointer; // exec_flags_t; + exec_code_segment: TExecuteCodeSegment; // TFarProc; + validate_filename: Pointer; // Tvalidate_filename; + RegisterPluginCallback: Pointer; //TRegisterPluginCallback; + end; + + pstack_t = ^stack_t; + stack_t = record + next: pstack_t; + text: NSISPTChar; + end; + +var + g_stringsize: integer; + g_stacktop: ^pstack_t; + g_variables: NSISPTChar; + g_hwndParent: HWND; + g_hwndList: HWND; + g_hwndLogList: HWND; + g_extraparameters: pextrap_t; + +procedure Init(const hwndParent: HWND; const string_size: integer; const variables: NSISPTChar; const stacktop: pointer; const extraparameters: pointer = nil); +function LogMessage(Msg : String): BOOL; +function Call(NSIS_func : String) : Integer; +function PopString(): NSISTString; +procedure PushString(const str: NSISTString=''); +function GetUserVariable(const varnum: TVariableList): NSISTString; +procedure SetUserVariable(const varnum: TVariableList; const value: NSISTString); +procedure NSISDialog(const text, caption: NSISTString; const buttons: integer); + +implementation + +procedure Init(const hwndParent: HWND; const string_size: integer; const variables: NSISPTChar; const stacktop: pointer; const extraparameters: pointer = nil); +begin + g_stringsize := string_size; + g_hwndParent := hwndParent; + g_stacktop := stacktop; + g_variables := variables; + g_hwndList := FindWindowEx(FindWindowEx(g_hwndParent, 0, '#32770', nil), 0,'SysListView32', nil); + g_extraparameters := extraparameters; +end; + + +function Call(NSIS_func : String) : Integer; +var + codeoffset: Integer; //The ID of nsis function +begin + Result := 0; + codeoffset := StrToIntDef(NSIS_func, 0); + if (codeoffset <> 0) and (g_extraparameters <> nil) then + begin + codeoffset := codeoffset - 1; + Result := g_extraparameters.exec_code_segment(codeoffset, g_hwndParent); + end; +end; + +function LogMessage(Msg : String): BOOL; +var + ItemCount : Integer; + item: TLVItem; +begin + Result := FAlse; + if g_hwndList = 0 then exit; + FillChar( item, sizeof(item), 0 ); + ItemCount := SendMessage(g_hwndList, LVM_GETITEMCOUNT, 0, 0); + item.iItem := ItemCount; + item.mask := LVIF_TEXT; + item.pszText := PChar(Msg); // Unicode bug? + ListView_InsertItem(g_hwndList, item); + ListView_EnsureVisible(g_hwndList, ItemCount, not 0); +end; + +function PopString(): NSISTString; +var + th: pstack_t; +begin + if NativeUInt(g_stacktop^) <> 0 then begin + th := g_stacktop^; + Result := NSISPTChar(@th.text); + g_stacktop^ := th.next; + GlobalFree(HGLOBAL(th)); + end; +end; + +procedure PushString(const str: NSISTString=''); +var + th: pstack_t; +begin + if NativeUInt(g_stacktop) <> 0 then begin +{$IFDEF UNICODE} + th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + (g_stringsize * 2))); + lstrcpynW(@th.text, PWideChar(str), g_stringsize); +{$ELSE} + th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + (g_stringsize ))); + lstrcpynA(@th.text, PAnsiChar(str), g_stringsize); +{$ENDIF} + th.next := g_stacktop^; + g_stacktop^ := th; + end; +end; + +function GetUserVariable(const varnum: TVariableList): NSISTString; +begin + if (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then + Result := g_variables + integer(varnum) * g_stringsize + else + Result := ''; +end; + +procedure SetUserVariable(const varnum: TVariableList; const value: NSISTString); +begin + if (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then +{$IFDEF UNICODE} + lstrcpyW(g_variables + integer(varnum) * (g_stringsize), PWideChar(value)) +{$ELSE} + lstrcpyA(g_variables + integer(varnum) * (g_stringsize), PAnsiChar(value)) +{$ENDIF} +end; + +procedure NSISDialog(const text, caption: NSISTString; const buttons: integer); +var + hwndOwner: HWND; +begin + hwndOwner := g_hwndParent; + if not IsWindow(g_hwndParent) then hwndOwner := 0; // g_hwndParent is not valid in NSPIM_[GUI]UNLOAD +{$IFDEF UNICODE} + MessageBoxW(hwndOwner, PWideChar(text), PWideChar(caption), buttons); +{$ELSE} + MessageBoxA(hwndOwner, PAnsiChar(text), PAnsiChar(caption), buttons); +{$ENDIF} +end; + +begin + +end. + diff --git a/tools/Examples/Plugin/nsis/api.h b/tools/Examples/Plugin/nsis/api.h new file mode 100644 index 0000000..8157f34 --- /dev/null +++ b/tools/Examples/Plugin/nsis/api.h @@ -0,0 +1,85 @@ +/* + * apih + * + * This file is a part of NSIS. + * + * Copyright (C) 1999-2023 Nullsoft and Contributors + * + * Licensed under the zlib/libpng license (the "License"); + * you may not use this file except in compliance with the License. + * + * Licence details can be found in the file COPYING. + * + * This software is provided 'as-is', without any express or implied + * warranty. + */ + +#ifndef _NSIS_EXEHEAD_API_H_ +#define _NSIS_EXEHEAD_API_H_ + +// Starting with NSIS 2.42, you can check the version of the plugin API in exec_flags->plugin_api_version +// The format is 0xXXXXYYYY where X is the major version and Y is the minor version (MAKELONG(y,x)) +// When doing version checks, always remember to use >=, ex: if (pX->exec_flags->plugin_api_version >= NSISPIAPIVER_1_0) {} + +#define NSISPIAPIVER_1_0 0x00010000 +#define NSISPIAPIVER_CURR NSISPIAPIVER_1_0 + +// NSIS Plug-In Callback Messages +enum NSPIM +{ + NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup + NSPIM_GUIUNLOAD, // Called after .onGUIEnd +}; + +// Prototype for callbacks registered with extra_parameters->RegisterPluginCallback() +// Return NULL for unknown messages +// Should always be __cdecl for future expansion possibilities +typedef UINT_PTR (*NSISPLUGINCALLBACK)(enum NSPIM); + +// extra_parameters data structure containing other interesting stuff +// besides the stack, variables and HWND passed on to plug-ins. +typedef struct +{ + int autoclose; // SetAutoClose + int all_user_var; // SetShellVarContext: User context = 0, Machine context = 1 + int exec_error; // IfErrors/ClearErrors/SetErrors + int abort; // IfAbort + int exec_reboot; // IfRebootFlag/SetRebootFlag (NSIS_SUPPORT_REBOOT) + int reboot_called; // NSIS_SUPPORT_REBOOT + int XXX_cur_insttype; // Deprecated + int plugin_api_version; // Plug-in ABI. See NSISPIAPIVER_CURR (Note: used to be XXX_insttype_changed) + int silent; // IfSilent/SetSilent (NSIS_CONFIG_SILENT_SUPPORT) + int instdir_error; // GetInstDirError + int rtl; // IfRtlLanguage: 1 if $LANGUAGE is a RTL language + int errlvl; // SetErrorLevel + int alter_reg_view; // SetRegView: Default View = 0, Alternative View = (sizeof(void*) > 4 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY) + int status_update; // SetDetailsPrint +} exec_flags_t; + +#ifndef NSISCALL +# define NSISCALL __stdcall +#endif +#if !defined(_WIN32) && !defined(LPTSTR) +# define LPTSTR TCHAR* +#endif + +typedef struct { + exec_flags_t *exec_flags; + int (NSISCALL *ExecuteCodeSegment)(int, HWND); + void (NSISCALL *validate_filename)(LPTSTR); + int (NSISCALL *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK); // returns 0 on success, 1 if already registered and < 0 on errors +} extra_parameters; + +// Definitions for page showing plug-ins +// See Ui.c to understand better how they're used + +// sent to the outer window to tell it to go to the next inner window +#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8) + +// custom pages should send this message to let NSIS know they're ready +#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd) + +// sent as wParam with WM_NOTIFY_OUTER_NEXT when user cancels - heed its warning +#define NOTIFY_BYE_BYE 'x' + +#endif /* _NSIS_EXEHEAD_API_H_ */ diff --git a/tools/Examples/Plugin/nsis/nsis_tchar.h b/tools/Examples/Plugin/nsis/nsis_tchar.h new file mode 100644 index 0000000..ba39d2a --- /dev/null +++ b/tools/Examples/Plugin/nsis/nsis_tchar.h @@ -0,0 +1,229 @@ +/* + * nsis_tchar.h + * + * This file is a part of NSIS. + * + * Copyright (C) 1999-2023 Nullsoft and Contributors + * + * This software is provided 'as-is', without any express or implied + * warranty. + * + * For Unicode support by Jim Park -- 08/30/2007 + */ + +// Jim Park: Only those we use are listed here. + +#pragma once + +#ifdef _UNICODE + +#ifndef _T +#define __T(x) L ## x +#define _T(x) __T(x) +#define _TEXT(x) __T(x) +#endif + +#ifndef _TCHAR_DEFINED +#define _TCHAR_DEFINED +#if !defined(_NATIVE_WCHAR_T_DEFINED) && !defined(_WCHAR_T_DEFINED) +typedef unsigned short TCHAR; +#else +typedef wchar_t TCHAR; +#endif +#endif + + +// program +#define _tenviron _wenviron +#define __targv __wargv + +// printfs +#define _ftprintf fwprintf +#define _sntprintf _snwprintf +#if (defined(_MSC_VER) && (_MSC_VER<=1310||_MSC_FULL_VER<=140040310)) || defined(__MINGW32__) +# define _stprintf swprintf +#else +# define _stprintf _swprintf +#endif +#define _tprintf wprintf +#define _vftprintf vfwprintf +#define _vsntprintf _vsnwprintf +#if defined(_MSC_VER) && (_MSC_VER<=1310) +# define _vstprintf vswprintf +#else +# define _vstprintf _vswprintf +#endif + +// scanfs +#define _tscanf wscanf +#define _stscanf swscanf + +// string manipulations +#define _tcscat wcscat +#define _tcschr wcschr +#define _tcsclen wcslen +#define _tcscpy wcscpy +#define _tcsdup _wcsdup +#define _tcslen wcslen +#define _tcsnccpy wcsncpy +#define _tcsncpy wcsncpy +#define _tcsrchr wcsrchr +#define _tcsstr wcsstr +#define _tcstok wcstok + +// string comparisons +#define _tcscmp wcscmp +#define _tcsicmp _wcsicmp +#define _tcsncicmp _wcsnicmp +#define _tcsncmp wcsncmp +#define _tcsnicmp _wcsnicmp + +// upper / lower +#define _tcslwr _wcslwr +#define _tcsupr _wcsupr +#define _totlower towlower +#define _totupper towupper + +// conversions to numbers +#define _tcstoi64 _wcstoi64 +#define _tcstol wcstol +#define _tcstoul wcstoul +#define _tstof _wtof +#define _tstoi _wtoi +#define _tstoi64 _wtoi64 +#define _ttoi _wtoi +#define _ttoi64 _wtoi64 +#define _ttol _wtol + +// conversion from numbers to strings +#define _itot _itow +#define _ltot _ltow +#define _i64tot _i64tow +#define _ui64tot _ui64tow + +// file manipulations +#define _tfopen _wfopen +#define _topen _wopen +#define _tremove _wremove +#define _tunlink _wunlink + +// reading and writing to i/o +#define _fgettc fgetwc +#define _fgetts fgetws +#define _fputts fputws +#define _gettchar getwchar + +// directory +#define _tchdir _wchdir + +// environment +#define _tgetenv _wgetenv +#define _tsystem _wsystem + +// time +#define _tcsftime wcsftime + +#else // ANSI + +#ifndef _T +#define _T(x) x +#define _TEXT(x) x +#endif + +#ifndef _TCHAR_DEFINED +#define _TCHAR_DEFINED +typedef char TCHAR; +#endif + +// program +#define _tenviron environ +#define __targv __argv + +// printfs +#define _ftprintf fprintf +#define _sntprintf _snprintf +#define _stprintf sprintf +#define _tprintf printf +#define _vftprintf vfprintf +#define _vsntprintf _vsnprintf +#define _vstprintf vsprintf + +// scanfs +#define _tscanf scanf +#define _stscanf sscanf + +// string manipulations +#define _tcscat strcat +#define _tcschr strchr +#define _tcsclen strlen +#define _tcscnlen strnlen +#define _tcscpy strcpy +#define _tcsdup _strdup +#define _tcslen strlen +#define _tcsnccpy strncpy +#define _tcsrchr strrchr +#define _tcsstr strstr +#define _tcstok strtok + +// string comparisons +#define _tcscmp strcmp +#define _tcsicmp _stricmp +#define _tcsncmp strncmp +#define _tcsncicmp _strnicmp +#define _tcsnicmp _strnicmp + +// upper / lower +#define _tcslwr _strlwr +#define _tcsupr _strupr + +#define _totupper toupper +#define _totlower tolower + +// conversions to numbers +#define _tcstol strtol +#define _tcstoul strtoul +#define _tstof atof +#define _tstoi atoi +#define _tstoi64 _atoi64 +#define _tstoi64 _atoi64 +#define _ttoi atoi +#define _ttoi64 _atoi64 +#define _ttol atol + +// conversion from numbers to strings +#define _i64tot _i64toa +#define _itot _itoa +#define _ltot _ltoa +#define _ui64tot _ui64toa + +// file manipulations +#define _tfopen fopen +#define _topen _open +#define _tremove remove +#define _tunlink _unlink + +// reading and writing to i/o +#define _fgettc fgetc +#define _fgetts fgets +#define _fputts fputs +#define _gettchar getchar + +// directory +#define _tchdir _chdir + +// environment +#define _tgetenv getenv +#define _tsystem system + +// time +#define _tcsftime strftime + +#endif + +// is functions (the same in Unicode / ANSI) +#define _istgraph isgraph +#define _istascii __isascii + +#define __TFILE__ _T(__FILE__) +#define __TDATE__ _T(__DATE__) +#define __TTIME__ _T(__TIME__) diff --git a/tools/Examples/Plugin/nsis/pluginapi-x86-ansi.lib b/tools/Examples/Plugin/nsis/pluginapi-x86-ansi.lib new file mode 100644 index 0000000000000000000000000000000000000000..26072329391081ba4eca0a8d68e0325b4e6aa203 GIT binary patch literal 7004 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" skip + + CreateDirectory $SMPROGRAMS\$R0 + CreateShortcut $SMPROGRAMS\$R0\MakeNSISw.lnk $INSTDIR\makensisw.exe + + SetShellVarContext All + CreateDirectory $SMPROGRAMS\$R0 + CreateShortcut "$SMPROGRAMS\$R0\All users MakeNSISw.lnk" $INSTDIR\makensisw.exe + + skip: +SectionEnd \ No newline at end of file diff --git a/tools/Examples/StrFunc.nsi b/tools/Examples/StrFunc.nsi new file mode 100644 index 0000000..2c52231 --- /dev/null +++ b/tools/Examples/StrFunc.nsi @@ -0,0 +1,562 @@ +Name "NSIS StrFunc Example" +OutFile "StrFunc.exe" +ShowInstDetails show +ShowUninstDetails show +XPStyle on +RequestExecutionLevel user + +!include "StrFunc.nsh" + +# Declare used functions +${StrCase} +${StrClb} +${StrIOToNSIS} +${StrLoc} +${StrNSISToIO} +${StrRep} +${StrStr} +${StrStrAdv} +${StrTok} +${StrTrimNewLines} +${StrSort} + +${UnStrCase} +${UnStrClb} +${UnStrIOToNSIS} +${UnStrLoc} +${UnStrNSISToIO} +${UnStrRep} +${UnStrStr} +${UnStrStrAdv} +${UnStrTok} +${UnStrTrimNewLines} +${UnStrSort} + + +Var SFPass +Var SFTotl +!macro EndStrFuncTestEx lbl name + IfErrors ${lbl} + DetailPrint "PASSED ${name} test" + IntOp $SFPass $SFPass + 1 + IntOp $SFTotl $SFTotl + 1 + Goto +3 +${lbl}: + DetailPrint "FAILED ${name} test" + IntOp $SFTotl $SFTotl + 1 +!macroend +!macro EndStrFuncTest name + !insertmacro EndStrFuncTestEx "${name}error" "${name}" +!macroend + +CompletedText "Passed $SFPass of $SFTotl tests" +!macro CompletedAllTests + StrCmp $SFPass $SFTotl +2 + SetErrorLevel 42 +!macroend + +!macro StackVerificationStart + StrCpy $0 S0 + StrCpy $1 S1 + StrCpy $2 S2 + StrCpy $3 S3 + StrCpy $4 S4 + StrCpy $5 S5 + StrCpy $6 S6 + StrCpy $7 S7 + StrCpy $8 S8 + StrCpy $9 S9 + StrCpy $R0 SR0 + StrCpy $R1 SR1 + StrCpy $R2 SR2 + StrCpy $R3 SR3 + StrCpy $R4 SR4 + StrCpy $R5 SR5 + StrCpy $R6 SR6 + StrCpy $R7 SR7 + StrCpy $R8 SR8 + StrCpy $R9 SR9 +!macroend + +!macro StackVerificationEnd + ClearErrors + ${If} $1 != "S1" + ${OrIf} $2 != "S2" + ${OrIf} $3 != "S3" + ${OrIf} $4 != "S4" + ${OrIf} $5 != "S5" + ${OrIf} $6 != "S6" + ${OrIf} $7 != "S7" + ${OrIf} $8 != "S8" + ${OrIf} $9 != "S9" + ${OrIf} $R0 != "SR0" + ${OrIf} $R1 != "SR1" + ${OrIf} $R2 != "SR2" + ${OrIf} $R3 != "SR3" + ${OrIf} $R4 != "SR4" + ${OrIf} $R5 != "SR5" + ${OrIf} $R6 != "SR6" + ${OrIf} $R7 != "SR7" + ${OrIf} $R8 != "SR8" + ${OrIf} $R9 != "SR9" + SetErrors + ${EndIf} +!macroend + +Section + + # Test case conversion + !insertmacro StackVerificationStart + ${StrCase} $0 "This is just an example. A very simple one." "" + StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror + ${StrCase} $0 "THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE." "S" + StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror + ${StrCase} $0 "This is just an example. A very simple one." "L" + StrCmp $0 "this is just an example. a very simple one." 0 strcaseerror + ${StrCase} $0 "This is just an example. A very simple one." "U" + StrCmp $0 "THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE." 0 strcaseerror + ${StrCase} $0 "This is just an example. A very simple one." "T" + StrCmp $0 "This Is Just An Example. A Very Simple One." 0 strcaseerror + ${StrCase} $0 "This is just an example. A very simple one." "<>" + StrCmp $0 "tHIS IS JUST AN EXAMPLE. a VERY SIMPLE ONE." 0 strcaseerror + ${StrCase} $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" "S" + StrCmp $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" 0 strcaseerror + ${StrCase} $0 "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#%^&*()abcdefghijklmnopqrstuvwxyz-_=+[]{};:,./<>?" "<>" + StrCmp $0 "123456789abcdefghijklmnopqrstuvwxyz!@#%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ-_=+[]{};:,./<>?" 0 strcaseerror + ${StrCase} $0 "what about taking a shower tomorrow? it's late to do so now! try to sleep now. Good Night!" "S" + StrCmp $0 "What about taking a shower tomorrow? It's late to do so now! Try to sleep now. Good night!" 0 strcaseerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrCase + + # Test clipboard function + !insertmacro StackVerificationStart + !verbose push 4 + ${StrClb} $0 "StrFunc clipboard test" ">" + !verbose pop + StrCmp $0 "" 0 strclberror + ${StrClb} $0 "StrFunc clipboard test #2" "<>" + StrCmp $0 "StrFunc clipboard test" 0 strclberror + ${StrClb} $0 "" "<" + StrCmp $0 "StrFunc clipboard test #2" 0 strclberror + ${StrClb} $0 "" "" + StrCmp $0 "" 0 strclberror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrClb + + # Test IO functions + !insertmacro StackVerificationStart + !macro testio str + ${StrNSISToIO} $0 "${str}" + ${StrIOToNSIS} $0 $0 + StrCmp $0 "${str}" 0 ioerror + !macroend + !insertmacro testio "$\rtest$\n" + !insertmacro testio "test$\n" + !insertmacro testio "$\rtest" + !insertmacro testio "test" + !insertmacro testio "$\r\$\t$\n" + !insertmacro testio "$\r \ $\t $\n $$" + !insertmacro testio "" + !insertmacro testio " " + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTestEx ioerror "StrNSISToIO/StrIOToNSIS" + + # Test string search functions + !insertmacro StackVerificationStart + ${StrLoc} $0 "This is just an example" "just" "<" + StrCmp $0 "11" 0 strlocerror + ${StrLoc} $0 a abc < + StrCmp $0 "" 0 strlocerror + ${StrLoc} $0 a abc > + StrCmp $0 "" 0 strlocerror + ${StrLoc} $0 abc a > + StrCmp $0 "0" 0 strlocerror + ${StrLoc} $0 abc b > + StrCmp $0 "1" 0 strlocerror + ${StrLoc} $0 abc c > + StrCmp $0 "2" 0 strlocerror + ${StrLoc} $0 abc a < + StrCmp $0 "2" 0 strlocerror + ${StrLoc} $0 abc b < + StrCmp $0 "1" 0 strlocerror + ${StrLoc} $0 abc c < + StrCmp $0 "0" 0 strlocerror + ${StrLoc} $0 abc d < + StrCmp $0 "" 0 strlocerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrLoc + + # Test string replacement + !insertmacro StackVerificationStart + ${StrRep} $0 "This is just an example" "an" "one" + StrCmp $0 "This is just one example" 0 strreperror + ${StrRep} $0 "test... test... 1 2 3..." "test" "testing" + StrCmp $0 "testing... testing... 1 2 3..." 0 strreperror + ${StrRep} $0 "" "test" "testing" + StrCmp $0 "" 0 strreperror + ${StrRep} $0 "test" "test" "testing" + StrCmp $0 "testing" 0 strreperror + ${StrRep} $0 "test" "test" "" + StrCmp $0 "" 0 strreperror + ${StrRep} $0 "test" "" "abc" + StrCmp $0 "test" 0 strreperror + ${StrRep} $0 "test" "" "" + StrCmp $0 "test" 0 strreperror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrRep + + # Test sorting + !insertmacro StackVerificationStart + ${StrSort} $0 "This is just an example" "" " just" "ple" "0" "0" "0" + StrCmp $0 "This is an exam" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "j" " " "0" "" "0" + StrCmp $0 "just" 0 strsorterror + ${StrSort} $0 "This is just an example" "" "j" "" "0" "1" "0" + StrCmp $0 "This is just an example" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "us" "" "0" "1" "0" + StrCmp $0 "just an example" 0 strsorterror + ${StrSort} $0 "This is just an example" "" "u" " " "0" "1" "0" + StrCmp $0 "This is just" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "just" " " "0" "1" "0" + StrCmp $0 "just" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "t" " " "0" "1" "0" + StrCmp $0 "This" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "le" " " "0" "1" "0" + StrCmp $0 "example" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "le" " " "1" "0" "0" + StrCmp $0 " examp" 0 strsorterror + ${StrSort} $0 "an error has occurred" " " "e" " " "0" "1" "0" + StrCmp $0 "error" 0 strsorterror + ${StrSort} $0 "" " " "something" " " "0" "1" "0" + StrCmp $0 "" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "j" " " "" "" "" + StrCmp $0 " just " 0 strsorterror + ${StrSort} $0 "This is just an example" " " "j" " " "1" "0" "1" + StrCmp $0 " ust " 0 strsorterror + ${StrSort} $0 "This is just an example" "" "j" "" "0" "0" "1" + StrCmp $0 "This is ust an example" 0 strsorterror + ${StrSort} $0 "This is just an example" " " "us" "" "1" "0" "0" + StrCmp $0 " jt an example" 0 strsorterror + ${StrSort} $0 "This is just an example" "" "u" " " "0" "0" "1" + StrCmp $0 "This is jst " 0 strsorterror + ${StrSort} $0 "This is just an example" " " "just" " " "1" "0" "1" + StrCmp $0 " " 0 strsorterror + ${StrSort} $0 "an error has occurred" " " "e" "h" "1" "0" "0" + StrCmp $0 " rror " 0 strsorterror + ${StrSort} $0 "" " " "something" " " "1" "0" "1" + StrCmp $0 "" 0 strsorterror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrSort + + !insertmacro StackVerificationStart + ${StrStr} $0 "abcefghijklmnopqrstuvwxyz" "g" + StrCmp $0 "ghijklmnopqrstuvwxyz" 0 strstrerror + ${StrStr} $0 "abcefghijklmnopqrstuvwxyz" "ga" + StrCmp $0 "" 0 strstrerror + ${StrStr} $0 "abcefghijklmnopqrstuvwxyz" "" + StrCmp $0 "abcefghijklmnopqrstuvwxyz" 0 strstrerror + ${StrStr} $0 "a" "abcefghijklmnopqrstuvwxyz" + StrCmp $0 "" 0 strstrerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrStr + + !insertmacro StackVerificationStart + ${StrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "0" "0" + StrCmp $0 "abcabcabc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "1" "0" + StrCmp $0 "abcabc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "2" "0" + StrCmp $0 "abc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "3" "0" + StrCmp $0 "" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "abc" ">" "<" "1" "1" "0" + StrCmp $0 "abcabc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "abc" ">" "<" "0" "1" "0" + StrCmp $0 "abc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "abc" "<" "<" "1" "0" "0" + StrCmp $0 "abcabcabc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "abc" "<" "<" "0" "0" "0" + StrCmp $0 "abcabc" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "abc" "<" ">" "0" "0" "0" + StrCmp $0 "" 0 strstradverror + ${StrStrAdv} $0 "abcabcabc" "abc" "<" ">" "0" "1" "0" + StrCmp $0 "abc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "0" "1" + StrCmp $0 "abcabc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "1" "1" + StrCmp $0 "abc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "2" "1" + StrCmp $0 "" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "3" "1" + StrCmp $0 "" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "abc" ">" "<" "1" "1" "1" + StrCmp $0 "ABCabcabc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "abc" ">" "<" "0" "1" "1" + StrCmp $0 "ABCabc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "abc" "<" "<" "1" "0" "1" + StrCmp $0 "ABCabcabc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "abc" "<" "<" "0" "0" "1" + StrCmp $0 "ABCabc" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "abc" "<" ">" "0" "0" "1" + StrCmp $0 "" 0 strstradverror + ${StrStrAdv} $0 "ABCabcabc" "abc" "<" ">" "0" "1" "1" + StrCmp $0 "abc" 0 strstradverror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrStrAdv + + # Test tokenizer + !insertmacro StackVerificationStart + ${StrTok} $0 "This is, or is not, just an example" " ," "4" "1" + StrCmp $0 "not" 0 strtokerror + ${StrTok} $0 "This is, or is not, just an example" " ," "4" "0" + StrCmp $0 "is" 0 strtokerror + ${StrTok} $0 "This is, or is not, just an example" " ," "152" "0" + StrCmp $0 "" 0 strtokerror + ${StrTok} $0 "This is, or is not, just an example" " ," "" "0" + StrCmp $0 "example" 0 strtokerror + ${StrTok} $0 "This is, or is not, just an example" " ," "L" "0" + StrCmp $0 "example" 0 strtokerror + ${StrTok} $0 "This is, or is not, just an example" " ," "0" "0" + StrCmp $0 "This" 0 strtokerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrTok + + # Test trim new lines + !insertmacro StackVerificationStart + ${StrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n" + StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrTrimNewlines + + InitPluginsDir + WriteUninstaller $PluginsDir\UnStrFunc.exe + ExecWait '"$PluginsDir\UnStrFunc.exe" _?=$PluginsDir' + + !insertmacro CompletedAllTests +SectionEnd + +Section Uninstall + + # Test case conversion + !insertmacro StackVerificationStart + ${UnStrCase} $0 "This is just an example. A very simple one." "" + StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror + ${UnStrCase} $0 "THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE." "S" + StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror + ${UnStrCase} $0 "This is just an example. A very simple one." "L" + StrCmp $0 "this is just an example. a very simple one." 0 strcaseerror + ${UnStrCase} $0 "This is just an example. A very simple one." "U" + StrCmp $0 "THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE." 0 strcaseerror + ${UnStrCase} $0 "This is just an example. A very simple one." "T" + StrCmp $0 "This Is Just An Example. A Very Simple One." 0 strcaseerror + ${UnStrCase} $0 "This is just an example. A very simple one." "<>" + StrCmp $0 "tHIS IS JUST AN EXAMPLE. a VERY SIMPLE ONE." 0 strcaseerror + ${UnStrCase} $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" "S" + StrCmp $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" 0 strcaseerror + ${UnStrCase} $0 "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#%^&*()abcdefghijklmnopqrstuvwxyz-_=+[]{};:,./<>?" "<>" + StrCmp $0 "123456789abcdefghijklmnopqrstuvwxyz!@#%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ-_=+[]{};:,./<>?" 0 strcaseerror + ${UnStrCase} $0 "what about taking a shower tomorrow? it's late to do so now! try to sleep now. Good Night!" "S" + StrCmp $0 "What about taking a shower tomorrow? It's late to do so now! Try to sleep now. Good night!" 0 strcaseerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrCase + + # Test clipboard function + !insertmacro StackVerificationStart + ${UnStrClb} $0 "StrFunc clipboard test" ">" + StrCmp $0 "" 0 strclberror + ${UnStrClb} $0 "StrFunc clipboard test #2" "<>" + StrCmp $0 "StrFunc clipboard test" 0 strclberror + ${UnStrClb} $0 "" "<" + StrCmp $0 "StrFunc clipboard test #2" 0 strclberror + ${UnStrClb} $0 "" "" + StrCmp $0 "" 0 strclberror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrClb + + # Test IO functions + !insertmacro StackVerificationStart + !macro untestio str + ${UnStrNSISToIO} $0 "${str}" + ${UnStrIOToNSIS} $0 $0 + StrCmp $0 "${str}" 0 ioerror + !macroend + !insertmacro untestio "$\rtest$\n" + !insertmacro untestio "test$\n" + !insertmacro untestio "$\rtest" + !insertmacro untestio "test" + !insertmacro untestio "$\r\$\t$\n" + !insertmacro untestio "$\r \ $\t $\n $$" + !insertmacro untestio "" + !insertmacro untestio " " + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTestEx ioerror "StrNSISToIO/StrIOToNSIS" + + # Test string search functions + !insertmacro StackVerificationStart + ${UnStrLoc} $0 "This is just an example" "just" "<" + StrCmp $0 "11" 0 strlocerror + ${UnStrLoc} $0 a abc < + StrCmp $0 "" 0 strlocerror + ${UnStrLoc} $0 a abc > + StrCmp $0 "" 0 strlocerror + ${UnStrLoc} $0 abc a > + StrCmp $0 "0" 0 strlocerror + ${UnStrLoc} $0 abc b > + StrCmp $0 "1" 0 strlocerror + ${UnStrLoc} $0 abc c > + StrCmp $0 "2" 0 strlocerror + ${UnStrLoc} $0 abc a < + StrCmp $0 "2" 0 strlocerror + ${UnStrLoc} $0 abc b < + StrCmp $0 "1" 0 strlocerror + ${UnStrLoc} $0 abc c < + StrCmp $0 "0" 0 strlocerror + ${UnStrLoc} $0 abc d < + StrCmp $0 "" 0 strlocerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrLoc + + # Test string replacement + !insertmacro StackVerificationStart + ${UnStrRep} $0 "This is just an example" "an" "one" + StrCmp $0 "This is just one example" 0 strreperror + ${UnStrRep} $0 "test... test... 1 2 3..." "test" "testing" + StrCmp $0 "testing... testing... 1 2 3..." 0 strreperror + ${UnStrRep} $0 "" "test" "testing" + StrCmp $0 "" 0 strreperror + ${UnStrRep} $0 "test" "test" "testing" + StrCmp $0 "testing" 0 strreperror + ${UnStrRep} $0 "test" "test" "" + StrCmp $0 "" 0 strreperror + ${UnStrRep} $0 "test" "" "abc" + StrCmp $0 "test" 0 strreperror + ${UnStrRep} $0 "test" "" "" + StrCmp $0 "test" 0 strreperror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrRep + + # Test sorting + !insertmacro StackVerificationStart + ${UnStrSort} $0 "This is just an example" "" " just" "ple" "0" "0" "0" + StrCmp $0 "This is an exam" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "j" " " "0" "" "0" + StrCmp $0 "just" 0 strsorterror + ${UnStrSort} $0 "This is just an example" "" "j" "" "0" "1" "0" + StrCmp $0 "This is just an example" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "us" "" "0" "1" "0" + StrCmp $0 "just an example" 0 strsorterror + ${UnStrSort} $0 "This is just an example" "" "u" " " "0" "1" "0" + StrCmp $0 "This is just" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "just" " " "0" "1" "0" + StrCmp $0 "just" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "t" " " "0" "1" "0" + StrCmp $0 "This" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "le" " " "0" "1" "0" + StrCmp $0 "example" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "le" " " "1" "0" "0" + StrCmp $0 " examp" 0 strsorterror + ${UnStrSort} $0 "an error has occurred" " " "e" " " "0" "1" "0" + StrCmp $0 "error" 0 strsorterror + ${UnStrSort} $0 "" " " "something" " " "0" "1" "0" + StrCmp $0 "" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "j" " " "" "" "" + StrCmp $0 " just " 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "j" " " "1" "0" "1" + StrCmp $0 " ust " 0 strsorterror + ${UnStrSort} $0 "This is just an example" "" "j" "" "0" "0" "1" + StrCmp $0 "This is ust an example" 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "us" "" "1" "0" "0" + StrCmp $0 " jt an example" 0 strsorterror + ${UnStrSort} $0 "This is just an example" "" "u" " " "0" "0" "1" + StrCmp $0 "This is jst " 0 strsorterror + ${UnStrSort} $0 "This is just an example" " " "just" " " "1" "0" "1" + StrCmp $0 " " 0 strsorterror + ${UnStrSort} $0 "an error has occurred" " " "e" "h" "1" "0" "0" + StrCmp $0 " rror " 0 strsorterror + ${UnStrSort} $0 "" " " "something" " " "1" "0" "1" + StrCmp $0 "" 0 strsorterror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrSort + + !insertmacro StackVerificationStart + ${UnStrStr} $0 "abcefghijklmnopqrstuvwxyz" "g" + StrCmp $0 "ghijklmnopqrstuvwxyz" 0 strstrerror + ${UnStrStr} $0 "abcefghijklmnopqrstuvwxyz" "ga" + StrCmp $0 "" 0 strstrerror + ${UnStrStr} $0 "abcefghijklmnopqrstuvwxyz" "" + StrCmp $0 "abcefghijklmnopqrstuvwxyz" 0 strstrerror + ${UnStrStr} $0 "a" "abcefghijklmnopqrstuvwxyz" + StrCmp $0 "" 0 strstrerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrStr + + !insertmacro StackVerificationStart + ${UnStrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "0" "0" + StrCmp $0 "abcabcabc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "1" "0" + StrCmp $0 "abcabc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "2" "0" + StrCmp $0 "abc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "3" "0" + StrCmp $0 "" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "abc" ">" "<" "1" "1" "0" + StrCmp $0 "abcabc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "abc" ">" "<" "0" "1" "0" + StrCmp $0 "abc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "abc" "<" "<" "1" "0" "0" + StrCmp $0 "abcabcabc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "abc" "<" "<" "0" "0" "0" + StrCmp $0 "abcabc" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "abc" "<" ">" "0" "0" "0" + StrCmp $0 "" 0 strstradverror + ${UnStrStrAdv} $0 "abcabcabc" "abc" "<" ">" "0" "1" "0" + StrCmp $0 "abc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "0" "1" + StrCmp $0 "abcabc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "1" "1" + StrCmp $0 "abc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "2" "1" + StrCmp $0 "" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "3" "1" + StrCmp $0 "" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "abc" ">" "<" "1" "1" "1" + StrCmp $0 "ABCabcabc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "abc" ">" "<" "0" "1" "1" + StrCmp $0 "ABCabc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "abc" "<" "<" "1" "0" "1" + StrCmp $0 "ABCabcabc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "abc" "<" "<" "0" "0" "1" + StrCmp $0 "ABCabc" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "abc" "<" ">" "0" "0" "1" + StrCmp $0 "" 0 strstradverror + ${UnStrStrAdv} $0 "ABCabcabc" "abc" "<" ">" "0" "1" "1" + StrCmp $0 "abc" 0 strstradverror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrStrAdv + + # Test tokenizer + !insertmacro StackVerificationStart + ${UnStrTok} $0 "This is, or is not, just an example" " ," "4" "1" + StrCmp $0 "not" 0 strtokerror + ${UnStrTok} $0 "This is, or is not, just an example" " ," "4" "0" + StrCmp $0 "is" 0 strtokerror + ${UnStrTok} $0 "This is, or is not, just an example" " ," "152" "0" + StrCmp $0 "" 0 strtokerror + ${UnStrTok} $0 "This is, or is not, just an example" " ," "" "0" + StrCmp $0 "example" 0 strtokerror + ${UnStrTok} $0 "This is, or is not, just an example" " ," "L" "0" + StrCmp $0 "example" 0 strtokerror + ${UnStrTok} $0 "This is, or is not, just an example" " ," "0" "0" + StrCmp $0 "This" 0 strtokerror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrTok + + # Test trim new lines + !insertmacro StackVerificationStart + ${UnStrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n" + StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror + !insertmacro StackVerificationEnd + !insertmacro EndStrFuncTest StrTrimNewLines + + !insertmacro CompletedAllTests +SectionEnd diff --git a/tools/Examples/System/Resource.dll b/tools/Examples/System/Resource.dll new file mode 100644 index 0000000000000000000000000000000000000000..a111cfd48b04a379d7cb43589d199c7b4071392e GIT binary patch literal 31744 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 now it gets full installer.exe path +; input - nothing, output -> full path at the top of the stack +Function GetInstallerExeName + Push $R0 + Push $R1 + Push $R2 + StrCpy $R0 $CMDLINE 1 + StrCpy $R1 '"' + StrCpy $R2 1 + StrCmp $R0 '"' loop + StrCpy $R1 ' ' ; we're scanning for a space instead of a quote + loop: + StrCpy $R0 $CMDLINE 1 $R2 + StrCmp $R0 $R1 loop2 + StrCmp $R0 "" loop2 + IntOp $R2 $R2 + 1 + Goto loop + loop2: + + ; Ok, have we found last exename character or string end? + StrCmp $R0 "" "" +2 + IntOp $R2 $R2 - 1 ; last exename char + StrCmp $R1 ' ' +3 ; was first character the '"', or something other? + StrCpy $R1 1 ; it was quote + Goto +2 + StrCpy $R1 0 + IntOp $R2 $R2 - $R1 + StrCpy $R0 $CMDLINE $R2 $R1 + + SearchPath $R0 $R0 ; expand file name to full path + + Pop $R2 + Pop $R1 + Exch $R0 +FunctionEnd + +; ================= systemGetFileSysTime implementation ================= + +!macro smGetFileSysTime FILENAME + Push ${FILENAME} + Call systemGetFileSysTime + Pop $R0 +!macroend + +; ----------------------------------------------------------------- +; systemGetFileSysTime (params on stack): +; FILENAME - name of file to get file time +; returns to stack (SYSTEMTIME struct addr) +; ----------------------------------------------------------------- + +; uses original method from NSIS +Function systemGetFileSysTime + System::Store "s r1" + + StrCpy $R0 0 + + ; create WIN32_FIND_DATA struct + System::Call '*${stWIN32_FIND_DATA} .r2' + + ; Find file info + System::Call '${sysFindFirstFile}(r1, r2) .r3' + + ; ok? + IntCmp $3 ${INVALID_HANDLE_VALUE} sgfst_exit + + ; close file search + System::Call '${sysFindClose}(r3)' + + ; Create systemtime struct for local time + System::Call '*${stSYSTEMTIME} .R0' + + ; Get File time + System::Call '*$2${stWIN32_FIND_DATA} (,,, .r3)' + + ; Convert file time (UTC) to local file time + System::Call '${sysFileTimeToLocalFileTime}(r3, .r1)' + + ; Convert file time to system time + System::Call '${sysFileTimeToSystemTime}(r1, R0)' + +sgfst_exit: + ; free used memory for WIN32_FIND_DATA struct + System::Free $2 + + System::Store "P0 l" +FunctionEnd + +; ================= systemMessageBox implementation ================= + +; return to $R0 +!macro smMessageBox MODULE MSG CAPTION STYLE ICON + Push "${ICON}" + Push "${STYLE}" + Push "${CAPTION}" + Push "${MSG}" + Push "${MODULE}" + Call systemMessageBox + Pop $R0 +!macroend + +; ----------------------------------------------------------------- +; systemMessageBox (params on stack): +; Module: either handle ("i HANDLE", HANDLE could be 0) or "modulename" +; Msg: text of message +; Caption: caption of message box window +; Style: style, buttons etc +; Icon: either icon handle ("i HANDLE") or resource name +; returns to stack +; ----------------------------------------------------------------- +Function systemMessageBox + System::Store "s r2r3r4r5r6" + + ; may be Module is module handle? + StrCpy $1 $2 + IntCmp $1 0 0 smbnext smbnext + + ; Get module handle + System::Call '${sysGetModuleHandle}($2) .r1' + IntCmp $1 0 loadlib libnotloaded libnotloaded + +loadlib: + ; Load module and get handle + System::Call '${sysLoadLibrary}($2) .r1' + IntCmp $1 0 0 smbnext smbnext + +libnotloaded: + ; Indicate that LoadLibrary wasn't used + StrCpy $2 1 + +smbnext: + ; Create MSGBOXPARAMS structure + System::Call '*${stMSGBOXPARAMS}(, $HWNDPARENT, r1, r3, r4, "$5|${MB_USERICON}", $6, _) .r0' + ; call MessageBoxIndirect + System::Call '${sysMessageBoxIndirect}(r0) .R0' + ; free MSGBOXPARAMS structure + + System::Free $0 + + ; have we used load library at start? + IntCmp $2 0 0 smbskipfree smbskipfree + ; No, then free the module + System::Call '${sysFreeLibrary}(r1)' + +smbskipfree: + System::Store "P0 l" +FunctionEnd + +; ================= systemSplash implementation ================= + +; returns to $R0 +!macro smSystemSplash DELAY FILE + Push ${FILE} + Push ${DELAY} + call systemSplash + Pop $R0 +!macroend + +; ----------------------------------------------------------------- +; systemSplash (params on stack): +; Delay - time in ms to show the splash +; File - bitmap (& audio) file name (without extension) +; returns to stack +; ----------------------------------------------------------------- + +Function _systemSplashWndCB + ; Callback receives 4 values + System::Store "s r2r5r7r9" + + ; Message branching + IntCmp $5 ${WM_CLOSE} m_Close + IntCmp $5 ${WM_TIMER} m_Timer + IntCmp $5 ${WM_LBUTTONDOWN} m_Lbtn + IntCmp $5 ${WM_CREATE} m_Create + IntCmp $5 ${WM_PAINT} m_Paint + goto default + +m_Create: + ; Create structures + System::Call "*${stRECT} (_) .R8" + System::Call "*${stBITMAP} (_, &l0 .R7) .R9" + + ; Get bitmap info + System::Call "${sysGetObject} (r6, R7, R9)" + + ; Get desktop info + System::Call "${sysSystemParametersInfo} (${SPI_GETWORKAREA}, 0, R8, 0)" + + ; Style (callbacked) + System::Call "${sysSetWindowLong} (r2, ${GWL_STYLE}, 0) .s" + !insertmacro SINGLE_CALLBACK 5 $R7 1 _systemSplashWndCB + + ; Calculate and set window pos + + ; Get bmWidth(R2) and bmHeight(R3) + System::Call "*$R9${stBITMAP} (,.R2,.R3)" + ; Get left(R4), top(R5), right(R6), bottom(R7) + System::Call "*$R8${stRECT} (.R4,.R5,.R6,.R7)" + + ; Left pos + IntOp $R0 $R6 - $R4 + IntOp $R0 $R0 - $R2 + IntOp $R0 $R0 / 2 + IntOp $R0 $R0 + $R4 + + ; Top pos + IntOp $R1 $R7 - $R5 + IntOp $R1 $R1 - $R3 + IntOp $R1 $R1 / 2 + IntOp $R1 $R1 + $R5 + + System::Call "${sysSetWindowPos} (r2, 0, R0, R1, R2, R3, ${SWP_NOZORDER}) .s" + !insertmacro SINGLE_CALLBACK 6 $R7 1 _systemSplashWndCB + + ; Show window + System::Call "${sysShowWindow} (r2, ${SW_SHOW}) .s" + !insertmacro SINGLE_CALLBACK 7 $R7 1 _systemSplashWndCB + + ; Set Timer + System::Call "${sysSetTimer} (r2, 1, r8,)" + + ; Free used memory + System::Free $R8 + System::Free $R9 + + StrCpy $R0 0 + goto exit + +m_Paint: + ; Create structures + System::Call "*${stRECT} (_) .R8" + System::Call "*${stPAINTSTRUCT} (_) .R9" + + ; Begin Paint + System::Call "${sysBeginPaint} (r2, R9) .R7" + + ; CreateCompatibleDC + System::Call "${sysCreateCompatibleDC} (R7) .R6" + + ; GetClientRect + System::Call "${sysGetClientRect} (r2, R8)" + + ; Select new bitmap + System::Call "${sysSelectObject} (R6, r6) .R5" + + ; Get left(R0), top(R1), right(R2), bottom(R3) + System::Call "*$R8${stRECT} (.R0,.R1,.R2,.R3)" + + ; width=right-left + IntOp $R2 $R2 - $R0 + ; height=bottom-top + IntOp $R3 $R3 - $R1 + + System::Call "${sysBitBlt} (R7, R0, R1, R2, R3, R6, 0, 0, ${SRCCOPY})" + + ; Select old bitmap + System::Call "${sysSelectObject} (R6, R5)" + + ; Delete compatible DC + System::Call "${sysDeleteDC} (R6)" + + ; End Paint + System::Call "${sysEndPaint} (r2, R9)" + + ; Free used memory + System::Free $R8 + System::Free $R9 + + StrCpy $R0 0 + goto exit + +m_Timer: +m_Lbtn: + StrCpy $4 0 + IntCmp $5 ${WM_TIMER} destroy + StrCpy $4 1 + +destroy: + System::Call "${sysDestroyWindow} (r2) .s" + !insertmacro SINGLE_CALLBACK 12 $R4 1 _systemSplashWndCB + +default: + ; Default + System::Call "${sysDefWindowProc} (r2, r5, r7, r9) .s" + !insertmacro SINGLE_CALLBACK 14 $R0 1 _systemSplashWndCB + goto exit + +m_Close: + StrCpy $R0 0 + goto exit + +exit: + ; Restore + System::Store "p4P0 l R0r4" + + ; Return from callback + System::Call "$3" $R0 +FunctionEnd + +Function systemSplash + + ; Save registers and get input + System::Store "s r8r9" + + ; Get module instance + System::Call "${sysGetModuleHandle} (p) .r7" + + ; Get arrow cursor + System::Call "${sysLoadCursor} (0, p ${IDC_ARROW}) .R9" + + ; Get callback + System::Get "${sysWNDPROC}" + Pop $3 + + ; Create window class + System::Call "*${stWNDCLASS} (0,r3,0,0,r7,0,R9,0,p 0,'_sp') .R9" + + ; Register window class + System::Call "${sysRegisterClass} (R9) .R9" + IntCmp $R9 0 errorexit ; Class registered ok? + + ; Load Image (LR_CREATEDIBSECTION|LR_LOADFROMFILE = 0x2010) + System::Call '${sysLoadImage} (, s, ${IMAGE_BITMAP}, 0, 0, ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) .r6' "$9.bmp" + IntCmp $6 0 errorexit ; Image loaded ok? + + ; Start the sound (SND_ASYNC|SND_FILENAME|SND_NODEFAULT = 0x20003) + System::Call "${sysPlaySound} (s,,${SND_ASYNC}|${SND_FILENAME}|${SND_NODEFAULT})" "$9.wav" + + ; Create window + System::Call "${sysCreateWindowEx} (${WS_EX_TOOLWINDOW}, s, s,,,,,, $HWNDPARENT,,r7,) .s" "_sp" "_sp" + !insertmacro SINGLE_CALLBACK 1 $5 1 _systemSplashWndCB + + ; Create MSG struct + System::Call "*${stMSG} (_) p.R9" + + ; ------------------------- +repeat: + ; Check for window + System::Call "${sysIsWindow} (r5) .s" + !insertmacro SINGLE_CALLBACK 2 $R8 1 _systemSplashWndCB + IntCmp $R8 0 finish + + ; Get message + System::Call "${sysGetMessage} (R9, r5,_) .s" + !insertmacro SINGLE_CALLBACK 3 $R8 1 _systemSplashWndCB + IntCmp $R8 0 finish + + ; Dispatch message + System::Call "${sysDispatchMessage} (R9) .s" + !insertmacro SINGLE_CALLBACK 4 $R8 1 _systemSplashWndCB + + ; Repeat dispatch cycle + goto repeat + ; ------------------------- + +finish: + ; Stop the sound + System::Call "${sysPlaySound} (p 0, p 0, i 0)" + + ; Delete bitmap object + System::Call "${sysDeleteObject} (r6)" + + ; Delete the callback queue + System::Free $3 + + ; Dialog return + StrCpy $R0 $4 + goto exit + +; Exit in case of error +errorexit: + StrCpy $R0 -1 + goto exit + +exit: + ; Restore register and put output + System::Store "P0 l" +FunctionEnd + +!endif +!verbose pop \ No newline at end of file diff --git a/tools/Examples/System/System.nsh b/tools/Examples/System/System.nsh new file mode 100644 index 0000000..ec1506b --- /dev/null +++ b/tools/Examples/System/System.nsh @@ -0,0 +1,413 @@ +; Some useful functions, structures, constants +; +; (c) brainsucker, 2002 +; (r) BSForce + +!verbose push 3 +!ifndef System.NSH.Included +!define System.NSH.Included + +!include WinCore.nsh + +; ------------- Functions -------------- + +; LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +!define sysWNDPROC "(p.s, i.s, p.s, p.s) pss" + +; LRESULT DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +!define sysDefWindowProc "user32::DefWindowProc(p, i, p, p) p" + +!define sysMessageBox "user32::MessageBox(p, t, t, i) i" + +!define sysMessageBeep "user32::MessageBeep(i) i" + +!define sysMessageBoxIndirect 'user32::MessageBoxIndirect(p) i' + +; HMODULE GetModuleHandle(LPCTSTR lpModuleName); +!define sysGetModuleHandle "kernel32::GetModuleHandle(t) i" + +; HMODULE LoadLibrary(LPCTSTR lpFileName); +!define sysLoadLibrary "kernel32::LoadLibrary(t) p" + +; BOOL FreeLibrary(HMODULE hModule); +!define sysFreeLibrary "kernel32::FreeLibrary(p) i" + +; HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName); +!define sysLoadCursor "user32::LoadCursor(p, t) p" + +; ATOM RegisterClass(CONST WNDCLASS *lpWndClass); +!define sysRegisterClass "user32::RegisterClass(p) i" + +; HANDLE LoadImage(HINSTANCE hinst, LPCTSTR lpszName, UINT uType, +; int cxDesired, int cyDesired, UINT fuLoad); +!define sysLoadImage "user32::LoadImage(p, t, i, i, i, i) p" + +; BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound); +!define sysPlaySound "winmm.dll::PlaySound(t, p, i) i" + +; HWND CreateWindowEx(DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, +; DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, +; HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); +!define sysCreateWindowEx "user32::CreateWindowEx(i, t, t, i, i, i, i, i, p, p, p, p) p" + +; BOOL IsWindow(HWND hWnd); +!define sysIsWindow "user32::IsWindow(p) i" + +; LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong); +!define sysSetWindowLong "user32::SetWindowLong(p, i, p) p" + +; BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags); +!define sysSetWindowPos "user32::SetWindowPos(p, p, i, i, i, i, i) i" + +; BOOL ShowWindow(HWND hWnd, int nCmdShow); +!define sysShowWindow "user32::ShowWindow(p, i) i" + +; BOOL DestroyWindow(HWND hWnd); +!define sysDestroyWindow "user32::DestroyWindow(p) i" + +; BOOL GetClientRect(HWND hWnd, LPRECT lpRect); +!define sysGetClientRect "user32::GetClientRect(p, p) i" + +; BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax); +!define sysGetMessage "user32::GetMessage(p, p, i, i) i" + +; LRESULT DispatchMessage(CONST MSG *lpmsg); +!define sysDispatchMessage "user32::DispatchMessage(p) p" + +; BOOL DeleteObject(HGDIOBJ hObject); +!define sysDeleteObject "gdi32::DeleteObject(p) i" + +; int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject); +!define sysGetObject "gdi32::GetObject(p, i, p) i" + +; HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj); +!define sysSelectObject "gdi32::SelectObject(p, p) p" + +; HDC CreateCompatibleDC(HDC hdc); +!define sysCreateCompatibleDC "gdi32::CreateCompatibleDC(p) p" + +; BOOL DeleteDC(HDC hdc); +!define sysDeleteDC "gdi32::DeleteDC(p) i" + +; BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, +; HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop); +!define sysBitBlt "gdi32::BitBlt(p, i, i, i, i, p, i, i, i) i" + +; proposed by abgandar +; int AddFontResource(LPCTSTR lpszFilename); +!define sysAddFontResource "gdi32::AddFontResource(t) i" + +; HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint); +!define sysBeginPaint "user32::BeginPaint(p, p) p" + +; BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint); +!define sysEndPaint "user32::EndPaint(p, p) i" + +; BOOL SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni); +!define sysSystemParametersInfo "user32::SystemParametersInfo(i, i, p, i) i" + +; UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); +!define sysSetTimer "user32::SetTimer(p, p, i, k) i" + +; DWORD GetLogicalDriveStrings(DWORD nBufferLength, LPTSTR LpBuffer); +!define sysGetLogicalDriveStrings 'kernel32::GetLogicalDriveStrings(i, p) i' + +!define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceEx(t, *l, *l, *l) i' + +; UINT GetDriveType(LPCTSTR lpRootPathName); +!define sysGetDriveType 'kernel32::GetDriveType(t) i' + +; HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData); +!define sysFindFirstFile 'kernel32::FindFirstFile(t, p) p' + +; BOOL FindClose(HANDLE hFindFile); +!define sysFindClose 'kernel32::FindClose(p) i' + +; BOOL FileTimeToSystemTime(CONST FILETIME *lpFileTime, +; LPSYSTEMTIME lpSystemTime); +!define sysFileTimeToSystemTime 'kernel32::FileTimeToSystemTime(*l, p) i' + +; BOOL FileTimeToLocalFileTime( +; CONST FILETIME *lpFileTime, +; LPFILETIME lpLocalFileTime); +!define sysFileTimeToLocalFileTime 'kernel32::FileTimeToLocalFileTime(*l, *l) i' + +; BOOL SystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION lpTimeZone, +; LPSYSTEMTIME lpUniversalTime, LPSYSTEMTIME lpLocalTime); +!define sysSystemTimeToTzSpecificLocalTime 'kernel32::SystemTimeToTzSpecificLocalTime(p, p, p) i' + +!define syslstrlen 'kernel32::lstrlen(t) i' + +; int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...); +!define syswsprintf "user32::wsprintf(t, t) i ? c" + +; ------------- Structures -------------- + +; typedef struct _WNDCLASS { +; UINT style; +; WNDPROC lpfnWndProc; +; int cbClsExtra; +; int cbWndExtra; +; HINSTANCE hInstance; +; HICON hIcon; +; HCURSOR hCursor; +; HBRUSH hbrBackground; +; LPCTSTR lpszMenuName; +; LPCTSTR lpszClassName; +; } WNDCLASS, *PWNDCLASS; +!define stWNDCLASS "(i, k, i, i, p, p, p, p, t, t) p" + +; typedef struct tagMSG { +; HWND hwnd; +; UINT message; +; WPARAM wParam; +; LPARAM lParam; +; DWORD time; +; POINT pt; -> will be presented as two separate px and py +; } MSG, *PMSG; +!define stMSG "(p, i, p, p, i, i, i) p" + +; typedef struct tagBITMAP { +; LONG bmType; +; LONG bmWidth; +; LONG bmHeight; +; LONG bmWidthBytes; +; WORD bmPlanes; +; WORD bmBitsPixel; +; LPVOID bmBits; +; } BITMAP, *PBITMAP; +!define stBITMAP "(i, i, i, i, i, i, p) p" + +; typedef struct _RECT { +; LONG left; +; LONG top; +; LONG right; +; LONG bottom; +; } RECT, *PRECT; +!define stRECT "(i, i, i, i) p" + +; typedef struct tagPAINTSTRUCT { +; HDC hdc; +; BOOL fErase; +; RECT rcPaint; (rcl, rct, rcr, rcb) +; BOOL fRestore; +; BOOL fIncUpdate; +; BYTE rgbReserved[32]; +; } PAINTSTRUCT, *PPAINTSTRUCT; +!define stPAINTSTRUCT "(p, i, i, i, i, i, i, i, &v32) p" + +; typedef struct { +; UINT cbSize; +; HWND hwndOwner; +; HINSTANCE hInstance; +; LPCTSTR lpszText; +; LPCTSTR lpszCaption; +; DWORD dwStyle; +; LPCTSTR lpszIcon; +; DWORD_PTR dwContextHelpId; +; MSGBOXCALLBACK lpfnMsgBoxCallback; +; DWORD dwLanguageId; +; } MSGBOXPARAMS, *PMSGBOXPARAMS; +!define stMSGBOXPARAMS '(&l4, p, p, t, t, i, t, p, k, i) p' + +; typedef struct _SYSTEMTIME { +; WORD wYear; +; WORD wMonth; +; WORD wDayOfWeek; +; WORD wDay; +; WORD wHour; +; WORD wMinute; +; WORD wSecond; +; WORD wMilliseconds; +; } SYSTEMTIME, *PSYSTEMTIME; +!define stSYSTEMTIME '(&i2, &i2, &i2, &i2, &i2, &i2, &i2, &i2) p' + +; Maximal windows path +!define /ifndef MAX_PATH 260 + +; typedef struct _WIN32_FIND_DATA { +; DWORD dwFileAttributes; +; FILETIME ftCreationTime; +; FILETIME ftLastAccessTime; +; FILETIME ftLastWriteTime; +; DWORD nFileSizeHigh; +; DWORD nFileSizeLow; +; DWORD dwReserved0; +; DWORD dwReserved1; +; TCHAR cFileName[ MAX_PATH ]; +; TCHAR cAlternateFileName[ 14 ]; +; } WIN32_FIND_DATA, *PWIN32_FIND_DATA; +!define stWIN32_FIND_DATA '(i, l, l, l, i, i, i, i, &t${MAX_PATH}, &t14) p' + +; ------------- Constants -------------- + +; == Other == +!define /ifndef INVALID_HANDLE_VALUE -1 + +; == Sounds == + +!define SND_SYNC 0x0000 +!define SND_ASYNC 0x0001 +!define SND_NODEFAULT 0x0002 +!define SND_MEMORY 0x0004 +!define SND_LOOP 0x0008 +!define SND_NOSTOP 0x0010 + +!define SND_NOWAIT 0x00002000 +!define SND_ALIAS 0x00010000 +!define SND_ALIAS_ID 0x00110000 +!define SND_FILENAME 0x00020000 +!define SND_RESOURCE 0x00040004 +!define SND_PURGE 0x0040 +!define SND_APPLICATION 0x0080 + +; == Windows == + +!define /ifndef WS_OVERLAPPED 0x00000000 +!define /ifndef WS_POPUP 0x80000000 +!define /ifndef WS_CHILD 0x40000000 +!define /ifndef WS_MINIMIZE 0x20000000 +!define /ifndef WS_VISIBLE 0x10000000 +!define /ifndef WS_DISABLED 0x08000000 +!define /ifndef WS_CLIPSIBLINGS 0x04000000 +!define /ifndef WS_CLIPCHILDREN 0x02000000 +!define /ifndef WS_MAXIMIZE 0x01000000 +!define /ifndef WS_CAPTION 0x00C00000 +!define /ifndef WS_BORDER 0x00800000 +!define /ifndef WS_DLGFRAME 0x00400000 +!define /ifndef WS_VSCROLL 0x00200000 +!define /ifndef WS_HSCROLL 0x00100000 +!define /ifndef WS_SYSMENU 0x00080000 +!define /ifndef WS_THICKFRAME 0x00040000 +!define /ifndef WS_GROUP 0x00020000 +!define /ifndef WS_TABSTOP 0x00010000 +!define /ifndef WS_MINIMIZEBOX 0x00020000 +!define /ifndef WS_MAXIMIZEBOX 0x00010000 +!define /ifndef WS_TILED ${WS_OVERLAPPED} +!define /ifndef WS_ICONIC ${WS_MINIMIZE} +!define /ifndef WS_SIZEBOX ${WS_THICKFRAME} +!define /ifndef WS_OVERLAPPEDWINDOW 0x00CF0000 +!define /ifndef WS_TILEDWINDOW ${WS_OVERLAPPEDWINDOW} +!define /ifndef WS_POPUPWINDOW 0x80880000 +!define /ifndef WS_CHILDWINDOW ${WS_CHILD} +!define /ifndef WS_EX_DLGMODALFRAME 0x00000001 +!define /ifndef WS_EX_NOPARENTNOTIFY 0x00000004 +!define /ifndef WS_EX_TOPMOST 0x00000008 +!define /ifndef WS_EX_ACCEPTFILES 0x00000010 +!define /ifndef WS_EX_TRANSPARENT 0x00000020 +!define /ifndef WS_EX_MDICHILD 0x00000040 +!define /ifndef WS_EX_TOOLWINDOW 0x00000080 +!define /ifndef WS_EX_WINDOWEDGE 0x00000100 +!define /ifndef WS_EX_CLIENTEDGE 0x00000200 +!define /ifndef WS_EX_CONTEXTHELP 0x00000400 +!define /ifndef WS_EX_RIGHT 0x00001000 +!define /ifndef WS_EX_LEFT 0x00000000 +!define /ifndef WS_EX_RTLREADING 0x00002000 +!define /ifndef WS_EX_LTRREADING 0x00000000 +!define /ifndef WS_EX_LEFTSCROLLBAR 0x00004000 +!define /ifndef WS_EX_RIGHTSCROLLBAR 0x00000000 +!define /ifndef WS_EX_CONTROLPARENT 0x00010000 +!define /ifndef WS_EX_STATICEDGE 0x00020000 +!define /ifndef WS_EX_APPWINDOW 0x00040000 +!define /ifndef WS_EX_OVERLAPPEDWINDOW 0x00000300 +!define /ifndef WS_EX_PALETTEWINDOW 0x00000188 +!define /ifndef WS_EX_LAYERED 0x00080000 +!define /ifndef WS_EX_NOINHERITLAYOUT 0x00100000 +!define /ifndef WS_EX_LAYOUTRTL 0x00400000 +!define /ifndef WS_EX_COMPOSITED 0x02000000 +!define /ifndef WS_EX_NOACTIVATE 0x08000000 + + +; == System Parameters Info == + +!define SPI_GETWORKAREA 0x0030 + +; == Window swap == + +!define SWP_NOSIZE 0x0001 +!define SWP_NOMOVE 0x0002 +!define SWP_NOZORDER 0x0004 +!define SWP_NOREDRAW 0x0008 +!define SWP_NOACTIVATE 0x0010 +!define SWP_FRAMECHANGED 0x0020 +!define SWP_SHOWWINDOW 0x0040 +!define SWP_HIDEWINDOW 0x0080 +!define SWP_NOCOPYBITS 0x0100 +!define SWP_NOOWNERZORDER 0x0200 +!define SWP_NOSENDCHANGING 0x0400 + +!define SWP_DRAWFRAME ${SWP_FRAMECHANGED} +!define SWP_NOREPOSITION ${SWP_NOOWNERZORDER} +!define SWP_DEFERERASE 0x2000 +!define SWP_ASYNCWINDOWPOS 0x4000 + +; == Bit Copy == + +!define SRCCOPY 0x00CC0020 +!define SRCPAINT 0x00EE0086 +!define SRCAND 0x008800C6 +!define SRCINVERT 0x00660046 +!define SRCERASE 0x00440328 +!define NOTSRCCOPY 0x00330008 +!define NOTSRCERASE 0x001100A6 +!define MERGECOPY 0x00C000CA +!define MERGEPAINT 0x00BB0226 +!define PATCOPY 0x00F00021 +!define PATPAINT 0x00FB0A09 +!define PATINVERT 0x005A0049 +!define DSTINVERT 0x00550009 +!define BLACKNESS 0x00000042 +!define WHITENESS 0x00FF0062 + +; == Message Box == + +!define MB_OK 0x00000000 +!define MB_OKCANCEL 0x00000001 +!define MB_ABORTRETRYIGNORE 0x00000002 +!define MB_YESNOCANCEL 0x00000003 +!define MB_YESNO 0x00000004 +!define MB_RETRYCANCEL 0x00000005 +!define MB_CANCELTRYCONTINUE 0x00000006 +!define MB_ICONHAND 0x00000010 +!define MB_ICONQUESTION 0x00000020 +!define MB_ICONEXCLAMATION 0x00000030 +!define MB_ICONASTERISK 0x00000040 +!define MB_USERICON 0x00000080 +!define MB_ICONWARNING ${MB_ICONEXCLAMATION} +!define MB_ICONERROR ${MB_ICONHAND} + +!define MB_ICONINFORMATION ${MB_ICONASTERISK} +!define MB_ICONSTOP ${MB_ICONHAND} + +!define MB_DEFBUTTON1 0x00000000 +!define MB_DEFBUTTON2 0x00000100 +!define MB_DEFBUTTON3 0x00000200 +!define MB_DEFBUTTON4 0x00000300 + +!define MB_APPLMODAL 0x00000000 +!define MB_SYSTEMMODAL 0x00001000 +!define MB_TASKMODAL 0x00002000 +!define MB_HELP 0x00004000 + +!define MB_NOFOCUS 0x00008000 +!define MB_SETFOREGROUND 0x00010000 +!define MB_DEFAULT_DESKTOP_ONLY 0x00020000 + +!define MB_TOPMOST 0x00040000 +!define MB_RIGHT 0x00080000 +!define MB_RTLREADING 0x00100000 + + +; == Callbacks == + +!macro SINGLE_CALLBACK CHKN RES INDEX FUNC +CheckCB_${CHKN}: + Pop ${RES} + StrCmp ${RES} "callback${INDEX}" 0 ExitCB_${CHKN} + Call ${FUNC} + Goto CheckCB_${CHKN} +ExitCB_${CHKN}: +!macroend + +!endif +!verbose pop \ No newline at end of file diff --git a/tools/Examples/System/System.nsi b/tools/Examples/System/System.nsi new file mode 100644 index 0000000..7725fc4 --- /dev/null +++ b/tools/Examples/System/System.nsi @@ -0,0 +1,161 @@ +; This is just an example of System Plugin +; +; (c) brainsucker, 2002 +; (r) BSForce + +Name "System Plugin Example" +OutFile "System.exe" +RequestExecutionLevel User +Unicode True + +!include "SysFunc.nsh" + +Section "ThisNameIsIgnoredSoWhyBother?" + SetOutPath $TEMP + + ; ----- Sample 1 ----- Message box with custom icon ----- + + ; there are no default beeps for custom message boxes, use sysMessageBeep + ; in case you need it (see next message box example) + !insertmacro smMessageBox "i 0" "Message box with custom icon!" "System Example 1a" ${MB_OK} "i 103" + ; i 0 - installer exe as module + ; i 103 - icon ID + + ; The same example but using icon from resource.dll. + ; You could use this dll for storing your resources, just replace FAR icon + ; with something you really need. + File "Resource.dll" + System::Call '${sysMessageBeep} (${MB_ICONHAND})' ; custom beep + !insertmacro smMessageBox "`$TEMP\resource.dll`" "Message box with custom icon from resource.dll!" "System Example 1b" ${MB_OKCANCEL} "i 103" + Delete $TEMP\resource.dll + + ; ----- Sample 2 ----- Fixed disks size/space ----- + + StrCpy $7 ' Disk, Size, Free, Free for user:$\n$\n' + + ; Memory for paths + System::StrAlloc 1024 + Pop $1 + ; Get drives + System::Call '${sysGetLogicalDriveStrings}(1024, r1)' +enumok: + ; One more drive? + System::Call '${syslstrlen}(i r1) .r2' + IntCmp $2 0 enumex + + ; Is it DRIVE_FIXED? + System::Call '${sysGetDriveType} (i r1) .r3' + StrCmp $3 ${DRIVE_FIXED} 0 enumnext + + ; Drive space + System::Call '${sysGetDiskFreeSpaceEx}(i r1, .r3, .r4, .r5)' + + ; Pretty KBs will be saved on stack + System::Int64Op $3 / 1048576 + System::Int64Op $5 / 1048576 + System::Int64Op $4 / 1048576 + + ; Get pretty drive path string + System::Call '*$1(&t1024 .r6)' + System::Call '${syswsprintf} (.r7, "%s%20s %20s mb %20s mb %20s mb$\n", tr7, tr6, ts, ts, ts)' + +enumnext: + ; Next drive path + IntOp $2 $2 * ${NSIS_CHAR_SIZE} + IntOp $1 $1 + $2 + IntOp $1 $1 + ${NSIS_CHAR_SIZE} + goto enumok +enumex: ; End of drives or user cancel + ; Free memory for paths + System::Free $1 + + ; Message box + System::Call '${sysMessageBox}($HWNDPARENT, s, "System Example 2", ${MB_OKCANCEL})' "$7" + + ; ----- Sample 3 ----- Direct proc definition ----- + + ; Direct specification demo + System::Call 'user32::MessageBox(p $HWNDPARENT, t "Just direct MessageBox specification demo ;)", t "System Example 3", i ${MB_OK}) i.s' + Pop $0 + + ; ----- Sample 4 ----- Int64, mixed definition demo ----- + + ; Long int demo + StrCpy $2 "12312312" + StrCpy $3 "12345678903" + System::Int64Op $2 "*" $3 + Pop $4 + + ; Cdecl demo (uses 3 definitions (simple example)) + System::Call "${syswsprintf}(.R1, s,,, t, ir0) .R0 (,,tr2,tr3,$4_)" "Int64 ops and strange definition demo, %s x %s == %s, and previous msgbox result = %d" + MessageBox MB_OKCANCEL "Cool: '$R1'" + + ; ----- Sample 5 ----- Small structure example ----- + + ; Create & Fill structure + System::Call "*(i 123123123, &t10 'Hello', &i1 0x123dd, &i2 0xffeeddccaa) i.s" + Pop $1 + ; Read data from structure + System::Call "*$1(i .r2, &t10 .r3, &i1 .r4, &i2 .r5, &l0 .r6)" + ; Show data and delete structure + MessageBox MB_OK "Structure example: $\nint == $2 $\nstring == $3 $\nbyte == $4 $\nshort == $5 $\nsize == $6" + System::Free $1 + + ; ----- Sample 6 ----- systemGetFileSysTime demo ----- + Call GetInstallerExeName + pop $0 + + !insertmacro smGetFileSysTime $0 + System::Call '*$R0${stSYSTEMTIME}(.r1, .r2, .r3, .r4, .r5, .r6, .r7, .r8)' + + MessageBox MB_OK "GetFileSysTime example: file '$0', year $1, month $2, dow $3, day $4, hour $5, min $6, sec $7, ms $8" + + ; free memory from SYSTEMTIME + System::Free $R0 + + ; ----- Sample 7 ----- systemSplash -> Callbacks demonstration ----- + + ; Logo + File /oname=spltmp.bmp "${NSISDIR}\Contrib\Graphics\Header\orange-nsis.bmp" +; File /oname=spltmp.wav "d:\Windows\Media\tada.wav" + + ; I. systemSplash variant + !insertmacro smSystemSplash 2000 "$TEMP\spltmp" + + ; II. Splash Plugin variant +; splash::show 2000 $TEMP\spltmp +; Pop $R0 ; $R0 has '1' if the user closed the splash screen early, + + ; remove logo + Delete $TEMP\spltmp.bmp +; Delete $TEMP\spltmp.wav + + ; Display splash result + pop $0 + MessageBox MB_OK "Splash (callbacks) demo result $R0" + +SectionEnd + + +Section "Quoted path" + + !define /IfNDef CSIDL_FONTS 0x14 + StrCpy $9 "$PluginsDir\N(S # I)S" ; Directory with '(', ' ', '#' or ')' needs to be quoted + CreateDirectory "$9" + CopyFiles /Silent /FilesOnly "$sysdir\shfolder.dll" "$9\" ; This could fail on 95 & NT4? + + System::Call '"$9\shfolder.dll"::SHGetFolderPathA(p $hWndParent, i ${CSIDL_FONTS}, p 0, i 0, m "?" r1) ?u' + DetailPrint Fonts=$1 + +SectionEnd + + +Section "Ordinal" + + System::Call 'OLEAUT32::#2(w "OLE string")p.r0' ; SysAllocString + System::Call 'USER32::MessageBoxW(p $hWndParent, p r0, w "OLE:", i 0)' + System::Call 'OLEAUT32::#6(p r0)' + +SectionEnd + +; eof diff --git a/tools/Examples/TextFunc.ini b/tools/Examples/TextFunc.ini new file mode 100644 index 0000000..5b9a7bc --- /dev/null +++ b/tools/Examples/TextFunc.ini @@ -0,0 +1,130 @@ +[Settings] +NumFields=15 +NextButtonText=&Enter + +[Field 1] +Type=Droplist +Flags=NOTIFY +State=1. LineFind +ListItems=1. LineFind|2. LineRead|3. FileReadFromEnd|4. LineSum|5. FileJoin|6. TextCompare|7. ConfigRead|8. ConfigWrite|9. FileRecode +Left=44 +Right=139 +Top=9 +Bottom=100 + +[Field 2] +Type=FileRequest +Left=44 +Right=-17 +Top=30 +Bottom=41 + +[Field 3] +Type=FileRequest +Left=44 +Right=-17 +Top=46 +Bottom=57 + +[Field 4] +Type=FileRequest +State=3:-1 +Left=44 +Right=-17 +Top=62 +Bottom=75 + +[Field 5] +Type=Droplist +Flags=NOTIFY +State=Example1 (delete first two symbols) +ListItems=Example1 (delete first two symbols)|Example2 (show changed lines)|Example3 (delete lines)|Example4 (insert lines)|Example5 (replace in file - WordFunc.nsh required)|Example6 (line string to cut or delete)|Example7 (read lines) +Left=44 +Right=-36 +Top=81 +Bottom=155 + +[Field 6] +Type=Droplist +Flags=NOTIFY +State=Example1 (Different or Equal) +ListItems=Example1 (Different or Equal)|Example2 (Compare line-by-line - Different)|Example3 (Compare line-by-line - Equal)|Example4 (Compare all lines - Different)|Example5 (Compare all lines - Equal) +Left=44 +Right=-36 +Top=81 +Bottom=140 + +[Field 7] +Type=Droplist +State=FileReadFromEndCallback +ListItems=FileReadFromEndCallback +Left=44 +Right=-36 +Top=81 +Bottom=92 + +[Field 8] +Type=Text +Flags=READONLY +Left=9 +Right=-36 +Top=108 +Bottom=120 + +[Field 9] +Type=Button +Text=Edit +Flags=NOTIFY +Left=234 +Right=256 +Top=81 +Bottom=92 + +[Field 10] +Type=Button +Text=Log +Flags=NOTIFY|DISABLED +Left=234 +Right=256 +Top=108 +Bottom=120 + +[Field 11] +Type=Label +Text=InputFile +Left=10 +Right=43 +Top=32 +Bottom=44 + +[Field 12] +Type=Label +Text=OutputFile +Left=10 +Right=43 +Top=48 +Bottom=60 + +[Field 13] +Type=Label +Text=Range +Left=10 +Right=44 +Top=65 +Bottom=75 + +[Field 14] +Type=Label +Text=Function +Left=10 +Right=43 +Top=81 +Bottom=92 + +[Field 15] +Type=Label +Text=Result: +Left=10 +Right=229 +Top=97 +Bottom=105 diff --git a/tools/Examples/TextFunc.nsi b/tools/Examples/TextFunc.nsi new file mode 100644 index 0000000..e05b7f7 --- /dev/null +++ b/tools/Examples/TextFunc.nsi @@ -0,0 +1,834 @@ +;_____________________________________________________________________________ +; +; Text Functions +;_____________________________________________________________________________ +; +; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + +Name "Text Functions" +OutFile "TextFunc.exe" +Caption "$(^Name)" +XPStyle on +RequestExecutionLevel user + +!include "WinMessages.nsh" +!include "TextFunc.nsh" + +Var HWND +Var INI +Var LOG +Var PROJECT +Var CALLBACK +Var VIEW +Var FUNCTION +Var LINEFIND1 +Var LINEFIND2 +Var LINEFIND3 +Var LINEREAD1 +Var LINEREAD2 +Var FILEREADFROMEND1 +Var LINESUM1 +Var FILEJOIN1 +Var FILEJOIN2 +Var FILEJOIN3 +Var TEXTCOMPARE1 +Var TEXTCOMPARE2 +Var TEXTCOMPARE3 +Var CONFIGREAD1 +Var CONFIGREAD2 +Var CONFIGWRITE1 +Var CONFIGWRITE2 +Var CONFIGWRITE3 +Var FILERECODE1 +Var FILERECODE2 + +Page Custom ShowCustom LeaveCustom + +Function ShowCustom + InstallOptions::initDialog "$INI" + Pop $hwnd + GetDlgItem $0 $HWND 1206 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1208 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1209 + ShowWindow $0 0 + StrCpy $FUNCTION LineFind + StrCpy $LINEREAD2 10 + StrCpy $TEXTCOMPARE3 FastDiff + StrCpy $CONFIGREAD1 "$WINDIR\system.ini" + StrCpy $CONFIGREAD2 "shell=" + StrCpy $FILERECODE2 CharToOem + InstallOptions::show + Pop $0 +FunctionEnd + +Function LeaveCustom + ReadINIStr $0 $INI "Settings" "State" + ReadINIStr $R0 $INI "Field 1" "State" + ReadINIStr $R1 $INI "Field 2" "State" + ReadINIStr $R2 $INI "Field 3" "State" + ReadINIStr $R3 $INI "Field 4" "State" + ReadINIStr $R4 $INI "Field 5" "State" + ReadINIStr $R5 $INI "Field 6" "State" + StrCpy $R4 $R4 8 + StrCpy $R5 $R5 8 + StrCpy $6 0 + StrCpy $7 '$${' + StrCpy $8 'r' + StrCpy $9 'n' + + StrCmp $0 10 Log + StrCmp $0 9 ViewOrEdit + StrCmp $0 0 Enter + goto MainSend + + Log: + Exec 'notepad.exe $LOG' + Abort + + ViewOrEdit: + StrCmp $FUNCTION FileReadFromEnd 0 Edit + StrCmp $VIEW '' 0 ViewFileReadFromEndCallback + GetTempFileName $VIEW $PLUGINSDIR + StrCpy $7 '$$' + FileOpen $0 $VIEW w + FileWrite $0 `Function FileReadFromEndCallback$\r$\n` + FileWrite $0 ` MessageBox MB_OKCANCEL '$7$$9 "Line"=[$$9]$7\$9$7$$8 "#"=[$$8]$7\$9$7$$7 "-#"=[$$7]' IDOK +2$\r$\n` + FileWrite $0 ` StrCpy $$R0 StopFileReadFromEnd$\r$\n$\r$\n` + FileWrite $0 ` Push $$R0$\r$\n` + FileWrite $0 `FunctionEnd$\r$\n` + FileClose $0 + StrCpy $7 '$${' + SetFileAttributes $VIEW READONLY + ViewFileReadFromEndCallback: + Exec 'notepad.exe $VIEW' + Abort + + Edit: + StrCmp $CALLBACK '' +5 + StrCmp $6$R6 '0$R0$R4$R5' showproject + StrCmp $R6 '$R0$R4$R5' +3 + Delete $CALLBACK + StrCpy $CALLBACK '' + StrCpy $R6 '$R0$R4$R5' + + #Project# + StrCmp $6$R0 "01. LineFind" 0 +5 + IfFileExists $CALLBACK +2 + GetTempFileName $CALLBACK $PLUGINSDIR + FileOpen $0 $CALLBACK w + goto function + IfFileExists $PROJECT +2 + GetTempFileName $PROJECT $PLUGINSDIR + FileOpen $0 $PROJECT w + + #Name# + FileWrite $0 'Name "$FUNCTION"$\r$\n' + FileWrite $0 'OutFile "$PROJECT.exe"$\r$\n$\r$\n' + + #!include# + StrCmp $R0$R4 '1. LineFindExample5' 0 TextFuncInclude + IfFileExists '$EXEDIR\WordFunc.nsh' 0 +3 + FileWrite $0 '!include "$EXEDIR\WordFunc.nsh"$\r$\n' + goto +2 + FileWrite $0 '!include "WordFunc.nsh"$\r$\n' + FileWrite $0 '!insertmacro WordFind$\r$\n' + FileWrite $0 '!insertmacro WordFindS$\r$\n' + FileWrite $0 '!insertmacro WordFind2X$\r$\n' + FileWrite $0 '!insertmacro WordFind2XS$\r$\n' + FileWrite $0 '!insertmacro WordFind3X$\r$\n' + FileWrite $0 '!insertmacro WordFind3XS$\r$\n' + FileWrite $0 '!insertmacro WordReplace$\r$\n' + FileWrite $0 '!insertmacro WordReplaceS$\r$\n' + FileWrite $0 '!insertmacro WordAdd$\r$\n' + FileWrite $0 '!insertmacro WordAddS$\r$\n' + FileWrite $0 '!insertmacro WordInsert$\r$\n' + FileWrite $0 '!insertmacro WordInsertS$\r$\n' + FileWrite $0 '!insertmacro StrFilter$\r$\n' + FileWrite $0 '!insertmacro StrFilterS$\r$\n' + TextFuncInclude: + IfFileExists '$EXEDIR\TextFunc.nsh' 0 +3 + FileWrite $0 '!include "$EXEDIR\TextFunc.nsh"$\r$\n' + goto +2 + FileWrite $0 '!include "TextFunc.nsh"$\r$\n' + FileWrite $0 '!insertmacro $FUNCTION$\r$\n' + StrCmp $FUNCTION TextCompare +2 + FileWrite $0 '!insertmacro TrimNewLines$\r$\n' + + #Section# + FileWrite $0 '$\r$\nSection -empty$\r$\n' + FileWrite $0 'SectionEnd$\r$\n$\r$\n' + + #Function .onInit# + FileWrite $0 'Function .onInit$\r$\n' + StrCmp $R0$R5 "6. TextCompareExample1" 0 TextCompareExample235 + FileWrite $0 ' StrCpy $$R0 ""$\r$\n' + FileWrite $0 ' $7TextCompare} "$R1" "$R2" "$R3" "$R5"$\r$\n' + FileWrite $0 ' IfErrors error$\r$\n' + FileWrite $0 ' StrCmp $$R0 NotEqual 0 +2$\r$\n' + FileWrite $0 ' MessageBox MB_OK " Files differ" IDOK +2$\r$\n' + FileWrite $0 ' MessageBox MB_OK " Files identical"$\r$\n' + FileWrite $0 ' goto end$\r$\n$\r$\n' + goto endoninit + TextCompareExample235: + StrCmp $R0$R5 "6. TextCompareExample2" +3 + StrCmp $R0$R5 "6. TextCompareExample3" +2 + StrCmp $R0$R5 "6. TextCompareExample5" 0 TextCompareExample4 + FileWrite $0 ' StrCpy $$R0 "$R1"$\r$\n' + FileWrite $0 ' StrCpy $$R1 "$R2"$\r$\n$\r$\n' + FileWrite $0 ' GetTempFileName $$R2$\r$\n' + FileWrite $0 ' FileOpen $$R3 $$R2 w$\r$\n' + FileWrite $0 ' FileWrite $$R3 "$$R0 | $$R1$$\$8$$\$9"$\r$\n' + FileWrite $0 ' $7TextCompare} "$$R0" "$$R1" "$R3" "$R5"$\r$\n' + FileWrite $0 ' IfErrors error$\r$\n' + FileWrite $0 ' Exec "notepad.exe $$R2"$\r$\n' + FileWrite $0 ' goto end$\r$\n$\r$\n' + goto endoninit + TextCompareExample4: + StrCmp $R0$R5 "6. TextCompareExample4" 0 LineFindExample123456 + FileWrite $0 ' StrCpy $$R0 "$R1"$\r$\n' + FileWrite $0 ' StrCpy $$R1 "$R2"$\r$\n$\r$\n' + FileWrite $0 ' GetTempFileName $$R2$\r$\n' + FileWrite $0 ' FileOpen $$R3 $$R2 w$\r$\n' + FileWrite $0 ' FileWrite $$R3 "$$R0 | $$R1$$\$8$$\$9"$\r$\n' + FileWrite $0 ' $7TextCompare} "$$R0" "$$R1" "$R3" "$R5"$\r$\n' + FileWrite $0 ' IfErrors error$\r$\n' + FileWrite $0 ' FileWrite $$R3 "$$\$8$$\$9$$R1 | $$R0$$\$8$$\$9"$\r$\n' + FileWrite $0 ' $7TextCompare} "$$R1" "$$R0" "$R3" "$R5"$\r$\n' + FileWrite $0 ' FileClose $$R3$\r$\n' + FileWrite $0 ' IfErrors error$\r$\n' + FileWrite $0 ' Exec "notepad.exe $$R2"$\r$\n$\r$\n' + FileWrite $0 ' goto end$\r$\n$\r$\n' + goto endoninit + LineFindExample123456: + FileWrite $0 ' $7$FUNCTION} "$R1" "$R2" "$R3" "$R4"$\r$\n' + FileWrite $0 ' IfErrors error$\r$\n' + FileWrite $0 ' MessageBox MB_YESNO " Open output file?" IDNO end$\r$\n' + FileWrite $0 ' StrCmp "$R2" "" 0 +3$\r$\n' + FileWrite $0 ` Exec 'notepad.exe "$R1"'$\r$\n` + FileWrite $0 ' goto end$\r$\n' + FileWrite $0 ' SearchPath $$R2 "$R2"$\r$\n' + FileWrite $0 ` Exec 'notepad.exe "$$R2"'$\r$\n` + FileWrite $0 ' goto end$\r$\n$\r$\n' + endoninit: + FileWrite $0 ' error:$\r$\n' + FileWrite $0 ' MessageBox MB_OK "Error"$\r$\n$\r$\n' + FileWrite $0 ' end:$\r$\n' + FileWrite $0 ' Quit$\r$\n' + FileWrite $0 'FunctionEnd$\r$\n$\r$\n' + #FunctionEnd# + + + #Function CallBack# + StrCmp $CALLBACK '' 0 close + function: + StrCmp $R0 '1. LineFind' 0 +8 + FileWrite $0 'Function $R4$\r$\n' + StrCmp $R4 "Example1" Example1LF + StrCmp $R4 "Example2" Example2LF + StrCmp $R4 "Example3" Example3LF + StrCmp $R4 "Example4" Example4LF + StrCmp $R4 "Example5" Example5LF + StrCmp $R4 "Example6" Example6LF + + FileWrite $0 'Function $R5$\r$\n' + StrCmp $R5 "Example1" Example1TC + StrCmp $R5 "Example2" Example2TC + StrCmp $R5 "Example3" Example3TC + StrCmp $R5 "Example4" Example4TC + StrCmp $R5 "Example5" Example3TC + + Example1LF: + FileWrite $0 " $7TrimNewLines} '$$R9' $$R9$\r$\n" + FileWrite $0 " StrCpy $$R9 $$R9 '' 2 ;delete first two symbols$\r$\n" + FileWrite $0 " StrCpy $$R9 '$$R9$$\$8$$\$9'$\r$\n$\r$\n" + goto endwrite + Example2LF: + FileWrite $0 " $7TrimNewLines} '$$R9' $$R9$\r$\n" + FileWrite $0 " StrCpy $$R9 '$$R9 ~Changed line ($$R8)~$$\$8$$\$9'$\r$\n$\r$\n" + goto endwrite + Example3LF: + FileWrite $0 " StrCpy $$0 SkipWrite$\r$\n$\r$\n" + goto endwrite + Example4LF: + FileWrite $0 " FileWrite $$R4 '---First Line---$$\$8$$\$9'$\r$\n" + FileWrite $0 " FileWrite $$R4 '---Second Line ...---$$\$8$$\$9'$\r$\n$\r$\n" + goto endwrite + Example5LF: + FileWrite $0 " ; You can use:$\r$\n" + FileWrite $0 " ; $7WordFind}|$7WordFindS}|$7WordFind2X}|$7WordFind2XS}|$\r$\n" + FileWrite $0 " ; $7WordFind3X}|$7WordFind3XS}|$7WordReplace}|$7WordReplaceS}|$\r$\n" + FileWrite $0 " ; $7WordAdd}|$7WordAddS}|$7WordInsert}|$7WordInsertS}|$\r$\n" + FileWrite $0 " ; $7StrFilter}|$7StrFilterS}$\r$\n$\r$\n" + FileWrite $0 " $7WordReplace} '$$R9' ' ' '_' '+*' $$R9$\r$\n$\r$\n" + goto endwrite + Example6LF: + FileWrite $0 ' ;(Cut lines from a line to another line (also including that line))$\r$\n' + FileWrite $0 ' StrCmp $$R0 finish stop$\r$\n' + FileWrite $0 ' StrCmp $$R0 start finish$\r$\n' + FileWrite $0 ' StrCmp $$R9 "Start Line$$\$8$$\$9" 0 skip$\r$\n' + FileWrite $0 ' StrCpy $$R0 start$\r$\n' + FileWrite $0 ' StrCpy $$R1 $$R9$\r$\n' + FileWrite $0 ' goto code$\r$\n' + FileWrite $0 ' finish:$\r$\n' + FileWrite $0 ' StrCmp $$R9 "Finish Line$$\$8$$\$9" 0 code$\r$\n' + FileWrite $0 ' StrCpy $$R0 finish$\r$\n' + FileWrite $0 ' StrCpy $$R2 $$R8$\r$\n' + FileWrite $0 ' goto code$\r$\n' + FileWrite $0 ' skip:$\r$\n' + FileWrite $0 ' StrCpy $$0 SkipWrite$\r$\n' + FileWrite $0 ' goto output$\r$\n' + FileWrite $0 ' stop:$\r$\n' + FileWrite $0 ' StrCpy $$0 StopLineFind$\r$\n' + FileWrite $0 ' goto output$\r$\n$\r$\n' + FileWrite $0 ' ;;(Delete lines from a line to another line (also including that line))$\r$\n' + FileWrite $0 ' ; StrCmp $$R0 finish code$\r$\n' + FileWrite $0 ' ; StrCmp $$R0 start finish$\r$\n' + FileWrite $0 ' ; StrCmp $$R9 "Start Line$$\$8$$\$9" 0 code$\r$\n' + FileWrite $0 ' ; StrCpy $$R0 start$\r$\n' + FileWrite $0 ' ; StrCpy $$R1 $$R8$\r$\n' + FileWrite $0 ' ; goto skip$\r$\n' + FileWrite $0 ' ; finish:$\r$\n' + FileWrite $0 ' ; StrCmp $$R9 "Finish Line$$\$8$$\$9" 0 skip$\r$\n' + FileWrite $0 ' ; StrCpy $$R0 finish$\r$\n' + FileWrite $0 ' ; StrCpy $$R2 $$R8$\r$\n' + FileWrite $0 ' ; skip:$\r$\n' + FileWrite $0 ' ; StrCpy $$0 SkipWrite$\r$\n' + FileWrite $0 ' ; goto output$\r$\n$\r$\n' + FileWrite $0 ' code:$\r$\n' + FileWrite $0 ' ;...$\r$\n$\r$\n' + FileWrite $0 ' output:$\r$\n' + goto endwrite + Example1TC: + FileWrite $0 " StrCpy $$R0 NotEqual$\r$\n" + FileWrite $0 " StrCpy $$0 StopTextCompare$\r$\n$\r$\n" + goto endwrite + Example2TC: + FileWrite $0 " FileWrite $$R3 '$$8=$$9'$\r$\n" + FileWrite $0 " FileWrite $$R3 '$$6=$$7$$\$8$$\$9'$\r$\n$\r$\n" + goto endwrite + Example3TC: + FileWrite $0 " FileWrite $$R3 '$$8|$$6=$$9'$\r$\n$\r$\n" + goto endwrite + Example4TC: + FileWrite $0 " FileWrite $$R3 '$$8=$$9'$\r$\n$\r$\n" + goto endwrite + endwrite: + FileWrite $0 ' Push $$0$\r$\n' + FileWrite $0 'FunctionEnd$\r$\n' + close: + FileClose $0 + goto $6 + #FunctionEnd# + + showproject: + StrCmp $R0 '1. LineFind' 0 +3 + ExecWait 'notepad.exe $CALLBACK' + goto +4 + SetFileAttributes $PROJECT READONLY + ExecWait 'notepad.exe $PROJECT' + SetFileAttributes $PROJECT NORMAL + Abort + + MainSend: + GetDlgItem $0 $HWND 1210 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 1 + EnableWindow $0 1 + GetDlgItem $0 $HWND 1204 + ShowWindow $0 1 + EnableWindow $0 1 + GetDlgItem $0 $HWND 1205 + EnableWindow $0 1 + GetDlgItem $0 $HWND 1206 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1207 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1208 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1209 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1211 + EnableWindow $0 1 + + StrCmp $FUNCTION LineFind 0 +5 + StrCpy $LINEFIND1 $R1 + StrCpy $LINEFIND2 $R2 + StrCpy $LINEFIND3 $R3 + goto LineFindSend + StrCmp $FUNCTION LineRead 0 +4 + StrCpy $LINEREAD1 $R1 + StrCpy $LINEREAD2 $R2 + goto LineFindSend + StrCmp $FUNCTION FileReadFromEnd 0 +3 + StrCpy $FILEREADFROMEND1 $R1 + goto LineFindSend + StrCmp $FUNCTION LineSum 0 +3 + StrCpy $LINESUM1 $R1 + goto LineFindSend + StrCmp $FUNCTION FileJoin 0 +5 + StrCpy $FILEJOIN1 $R1 + StrCpy $FILEJOIN2 $R2 + StrCpy $FILEJOIN3 $R3 + goto LineFindSend + StrCmp $FUNCTION TextCompare 0 +5 + StrCpy $TEXTCOMPARE1 $R1 + StrCpy $TEXTCOMPARE2 $R2 + StrCpy $TEXTCOMPARE3 $R3 + goto LineFindSend + StrCmp $FUNCTION ConfigRead 0 +4 + StrCpy $CONFIGREAD1 $R1 + StrCpy $CONFIGREAD2 $R2 + goto LineFindSend + StrCmp $FUNCTION ConfigWrite 0 +5 + StrCpy $CONFIGWRITE1 $R1 + StrCpy $CONFIGWRITE2 $R2 + StrCpy $CONFIGWRITE3 $R3 + goto LineFindSend + StrCmp $FUNCTION FileRecode 0 +3 + StrCpy $FILERECODE1 $R1 + StrCpy $FILERECODE2 $R2 + + LineFindSend: + StrCmp $R0 "1. LineFind" 0 LineReadSend + StrCmp $FUNCTION LineFind 0 LineFindSend2 + StrCmp $R4 "Example1" 0 +3 + StrCpy $LINEFIND3 "3:-1" + goto LineFindSend2 + StrCmp $R4 "Example2" 0 +3 + StrCpy $LINEFIND3 "{5:12 15 -6:-5 -1}" + goto LineFindSend2 + StrCmp $R4 "Example3" 0 +3 + StrCpy $LINEFIND3 "2:3 10:-5 -3:-2" + goto LineFindSend2 + StrCmp $R4 "Example4" 0 +3 + StrCpy $LINEFIND3 "10" + goto LineFindSend2 + StrCmp $R4 "Example5" 0 +3 + StrCpy $LINEFIND3 "1:-1" + goto LineFindSend2 + StrCmp $R4 "Example6" 0 +3 + StrCpy $LINEFIND3 "" + goto LineFindSend2 + StrCmp $R4 "Example7" 0 +2 + StrCpy $LINEFIND3 "1:-1" + + LineFindSend2: + StrCpy $FUNCTION LineFind + StrCmp $LINEFIND2 '/NUL' 0 +2 + StrCpy $LINEFIND2 '' + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEFIND1" + GetDlgItem $0 $HWND 1203 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEFIND2" + GetDlgItem $0 $HWND 1205 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEFIND3" + GetDlgItem $0 $HWND 1207 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Edit" + GetDlgItem $0 $HWND 1212 + ShowWindow $0 1 + StrCmp $LOG '' +2 + EnableWindow $0 1 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:OutputFile" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Range" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Function" + + StrCmp $R4 "Example7" 0 +9 + GetDlgItem $0 $HWND 1203 + EnableWindow $0 0 + SendMessage $0 ${WM_ENABLE} 1 0 + SendMessage $0 ${WM_SETTEXT} 1 "STR:/NUL" + GetDlgItem $0 $HWND 1204 + EnableWindow $0 0 + GetDlgItem $0 $HWND 1211 + EnableWindow $0 0 + abort + + + LineReadSend: + StrCmp $R0 "2. LineRead" 0 FileReadFromEndSend + StrCpy $FUNCTION LineRead + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEREAD1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEREAD2" + GetDlgItem $0 $HWND 1204 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Line #" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + Abort + + FileReadFromEndSend: + StrCmp $R0 "3. FileReadFromEnd" 0 LineSumSend + StrCpy $FUNCTION FileReadFromEnd + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEREADFROMEND1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1204 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1209 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:View" + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Function" + Abort + + LineSumSend: + StrCmp $R0 "4. LineSum" 0 FileJoinSend + StrCpy $FUNCTION LineSum + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINESUM1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1204 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + Abort + + FileJoinSend: + StrCmp $R0 "5. FileJoin" 0 TextCompareSend + StrCpy $FUNCTION FileJoin + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEJOIN1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEJOIN2" + GetDlgItem $0 $HWND 1204 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 1 + EnableWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEJOIN3" + GetDlgItem $0 $HWND 1206 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile1" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile2" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:OutputFile" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + Abort + + TextCompareSend: + StrCmp $R0 "6. TextCompare" 0 ConfigReadSend + StrCmp $FUNCTION TextCompare 0 TextCompareSend2 + StrCmp $R5 "Example1" 0 +3 + StrCpy $TEXTCOMPARE3 "FastDiff" + goto TextCompareSend2 + StrCmp $R5 "Example2" 0 +3 + StrCpy $TEXTCOMPARE3 "FastDiff" + goto TextCompareSend2 + StrCmp $R5 "Example3" 0 +3 + StrCpy $TEXTCOMPARE3 "FastEqual" + goto TextCompareSend2 + StrCmp $R5 "Example4" 0 +3 + StrCpy $TEXTCOMPARE3 "SlowDiff" + goto TextCompareSend2 + StrCmp $R5 "Example5" 0 +2 + StrCpy $TEXTCOMPARE3 "SlowEqual" + + TextCompareSend2: + StrCpy $FUNCTION TextCompare + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$TEXTCOMPARE1" + GetDlgItem $0 $HWND 1203 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$TEXTCOMPARE2" + GetDlgItem $0 $HWND 1204 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 1 + EnableWindow $0 0 + SendMessage $0 ${WM_ENABLE} 1 0 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$TEXTCOMPARE3" + GetDlgItem $0 $HWND 1208 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:View" + GetDlgItem $0 $HWND 1212 + ShowWindow $0 1 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:TextFile1" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:TextFile2" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Option" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Function" + abort + + ConfigReadSend: + StrCmp $R0 "7. ConfigRead" 0 ConfigWriteSend + StrCpy $FUNCTION ConfigRead + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGREAD1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGREAD2" + GetDlgItem $0 $HWND 1204 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Entry" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + Abort + + ConfigWriteSend: + StrCmp $R0 "8. ConfigWrite" 0 FileRecodeSend + StrCpy $FUNCTION ConfigWrite + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGWRITE1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGWRITE2" + GetDlgItem $0 $HWND 1204 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGWRITE3" + GetDlgItem $0 $HWND 1211 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Entry" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Value" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + Abort + + FileRecodeSend: + StrCmp $R0 "9. FileRecode" 0 Abort + StrCpy $FUNCTION FileRecode + GetDlgItem $0 $HWND 1201 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILERECODE1" + GetDlgItem $0 $HWND 1203 + ShowWindow $0 1 + SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILERECODE2" + GetDlgItem $0 $HWND 1204 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1205 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1211 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1212 + ShowWindow $0 0 + GetDlgItem $0 $HWND 1213 + SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile" + GetDlgItem $0 $HWND 1214 + SendMessage $0 ${WM_SETTEXT} 1 "STR:Format" + GetDlgItem $0 $HWND 1215 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $0 $HWND 1216 + SendMessage $0 ${WM_SETTEXT} 1 "STR:" + Abort + +;=Enter= + Enter: + StrCmp $R1 '' 0 +3 + StrCpy $0 'Choose InputFile' + goto send + IfFileExists $R1 +3 + StrCpy $0 'InputFile is not exist' + goto send + + StrCmp $R0 "1. LineFind" LineFindRead + StrCmp $R0 "2. LineRead" LineRead + StrCmp $R0 "3. FileReadFromEnd" FileReadFromEnd + StrCmp $R0 "4. LineSum" LineSum + StrCmp $R0 "5. FileJoin" FileJoin + StrCmp $R0 "6. TextCompare" LineFind-TextCompare + StrCmp $R0 "7. ConfigRead" ConfigRead + StrCmp $R0 "8. ConfigWrite" ConfigWrite + StrCmp $R0 "9. FileRecode" FileRecode + Abort + + LineFindRead: + StrCmp $R4 "Example7" 0 LineFind-TextCompare + ${LineFind} '$R1' '/NUL' '$R3' LineFindCallback + IfErrors error + StrCmp $R0 StopLineFind 0 done + StrCpy $0 'stopped' + goto send + + LineFind-TextCompare: + GetLabelAddress $6 LineFindBack + goto Edit + LineFindBack: + FileClose $0 + StrCmp $R0 "6. TextCompare" Compile + StrCmp $CALLBACK '' Compile + ${FileJoin} "$PROJECT" "$CALLBACK" "" + + Compile: + StrCmp $LOG '' 0 +4 + GetTempFileName $LOG $PLUGINSDIR + GetDlgItem $0 $HWND 1212 + EnableWindow $0 1 + ReadRegStr $0 HKLM "SOFTWARE\NSIS" "" + IfErrors 0 +2 + StrCpy $0 "${NSISDIR}" + nsExec::Exec '"$0\makensis.exe" /O$LOG $PROJECT' + Pop $0 + StrCmp $0 0 0 +6 + ExecWait '$PROJECT.exe' $0 + Delete $PROJECT + Delete $PROJECT.exe + StrCpy $PROJECT '' + goto done + MessageBox MB_YESNO|MB_ICONEXCLAMATION "Compile error. Open log?" IDNO +2 + Exec 'notepad.exe $LOG' + StrCpy $0 "Compile Error" + goto send + + LineRead: + ${LineRead} "$R1" "$R2" $0 + IfErrors error send + + FileReadFromEnd: + ${FileReadFromEnd} "$R1" "FileReadFromEndCallback" + IfErrors error + StrCmp $R0 StopFileReadFromEnd 0 done + StrCpy $0 'stopped' + goto send + + LineSum: + ${LineSum} "$R1" $0 + IfErrors error send + + FileJoin: + ${FileJoin} "$R1" "$R2" "$R3" + IfErrors error + MessageBox MB_YESNO " Open output file?" IDNO done + StrCmp $R3 '' 0 +3 + Exec '"notepad.exe" "$R1"' + goto done + Exec '"notepad.exe" "$R3"' + goto done + + ConfigRead: + ${ConfigRead} "$R1" "$R2" $0 + IfErrors error send + + ConfigWrite: + ${ConfigWrite} "$R1" "$R2" "$R3" $0 + IfErrors error + MessageBox MB_YESNO " Open output file?" IDNO send + Exec '"notepad.exe" "$R1"' + goto send + + FileRecode: + ${FileRecode} "$R1" "$R2" + IfErrors error + MessageBox MB_YESNO " Open output file?" IDNO done + Exec '"notepad.exe" "$R1"' + goto done + + error: + StrCpy $0 'error' + goto send + + done: + StrCpy $0 'Done' + + send: + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$0" + + abort: + Abort +FunctionEnd + +Function LineFindCallback + MessageBox MB_OKCANCEL '$$R9 "Line"=[$R9]$\n$$R8 "#"=[$R8]$\n$$R7 "-#"=[$R7]$\n$$R6 "Range"=[$R6]$\n$$R5 "Read"=[$R5]$\n$$R4 "Write"=[$R4]' IDOK +2 + StrCpy $R0 StopLineFind + + Push $R0 +FunctionEnd + +Function FileReadFromEndCallback + MessageBox MB_OKCANCEL '$$9 "Line"=[$9]$\n$$8 "#"=[$8]$\n$$7 "-#"=[$7]' IDOK +2 + StrCpy $R0 StopFileReadFromEnd + + Push $R0 +FunctionEnd + +Function .onInit + InitPluginsDir + GetTempFileName $INI $PLUGINSDIR + File /oname=$INI "TextFunc.ini" +FunctionEnd + +Page instfiles + +Section -Empty +SectionEnd diff --git a/tools/Examples/TextFuncTest.nsi b/tools/Examples/TextFuncTest.nsi new file mode 100644 index 0000000..359cdec --- /dev/null +++ b/tools/Examples/TextFuncTest.nsi @@ -0,0 +1,414 @@ +;_____________________________________________________________________________ +; +; Text Functions Test +;_____________________________________________________________________________ +; +; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + +Name "Text Functions Test" +OutFile "TextFuncTest.exe" +Caption "$(^Name)" +ShowInstDetails show +XPStyle on +RequestExecutionLevel user + +Var FUNCTION +Var TEMPFILE1 +Var TEMPFILE2 +Var TEMPFILE3 +Var HANDLE +Var OUT + +!include "TextFunc.nsh" + +;############### INSTALL ############### + +!define StackVerificationStart `!insertmacro StackVerificationStart` +!macro StackVerificationStart _FUNCTION + StrCpy $FUNCTION ${_FUNCTION} + Call StackVerificationStart +!macroend + +!define StackVerificationEnd `!insertmacro StackVerificationEnd` +!macro StackVerificationEnd + Call StackVerificationEnd +!macroend + +Function StackVerificationStart + StrCpy $0 !0 + StrCpy $1 !1 + StrCpy $2 !2 + StrCpy $3 !3 + StrCpy $4 !4 + StrCpy $5 !5 + StrCpy $6 !6 + StrCpy $7 !7 + StrCpy $8 !8 + StrCpy $9 !9 + StrCpy $R0 !R0 + StrCpy $R1 !R1 + StrCpy $R2 !R2 + StrCpy $R3 !R3 + StrCpy $R4 !R4 + StrCpy $R5 !R5 + StrCpy $R6 !R6 + StrCpy $R7 !R7 + StrCpy $R8 !R8 + StrCpy $R9 !R9 +FunctionEnd + +Function StackVerificationEnd + IfErrors +3 + DetailPrint 'PASSED $FUNCTION no errors' + goto +2 + DetailPrint 'FAILED $FUNCTION error' + + StrCmp $0 '!0' 0 error + StrCmp $1 '!1' 0 error + StrCmp $2 '!2' 0 error + StrCmp $3 '!3' 0 error + StrCmp $4 '!4' 0 error + StrCmp $5 '!5' 0 error + StrCmp $6 '!6' 0 error + StrCmp $7 '!7' 0 error + StrCmp $8 '!8' 0 error + StrCmp $9 '!9' 0 error + StrCmp $R0 '!R0' 0 error + StrCmp $R1 '!R1' 0 error + StrCmp $R2 '!R2' 0 error + StrCmp $R3 '!R3' 0 error + StrCmp $R4 '!R4' 0 error + StrCmp $R5 '!R5' 0 error + StrCmp $R6 '!R6' 0 error + StrCmp $R7 '!R7' 0 error + StrCmp $R8 '!R8' 0 error + StrCmp $R9 '!R9' 0 error + DetailPrint 'PASSED $FUNCTION stack' + goto end + + error: + DetailPrint 'FAILED $FUNCTION stack' +; MessageBox MB_OKCANCEL '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}' IDOK +2 +; quit + + end: +FunctionEnd + + + +Section CreateTestFile + GetTempFileName $TEMPFILE1 + FileOpen $HANDLE $TEMPFILE1 w + FileWrite $HANDLE '1A=a$\r$\n' + FileWrite $HANDLE '2B=b$\r$\n' + FileWrite $HANDLE '3C=c$\r$\n' + FileWrite $HANDLE '4D=d$\r$\n' + FileWrite $HANDLE '5E=e$\r$\n' + FileClose $HANDLE + GetTempFileName $TEMPFILE2 + GetTempFileName $TEMPFILE3 +SectionEnd + + +Section LineFind + ${StackVerificationStart} LineFind + + ${LineFind} '$TEMPFILE1' '/NUL' '1:-4 3 -1' 'LineFindCallback1' + IfErrors error + StrCmp $OUT '|1:2|-5|1|1A=a$\r$\n|1:2|-4|2|2B=b$\r$\n|3:3|-3|3|3C=c$\r$\n' 0 error + + StrCpy $OUT '' + SetDetailsPrint none + ${LineFind} '$TEMPFILE1' '$TEMPFILE2' '1:-1' 'LineFindCallback2' + SetDetailsPrint both + IfErrors error + StrCmp $OUT '|1:-1||1|1A=a$\r$\n|1:-1||2|4D=d$\r$\n|1:-1||3|3C=c$\r$\n|1:-1||4|2B=B$\r$\n|1:-1||5|5E=e$\r$\n' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + +Function LineFindCallback1 + StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9' + StrCmp $R8 3 0 +2 + StrCpy $0 StopLineFind + + Push $0 +FunctionEnd + +Function LineFindCallback2 + StrCmp $R8 2 0 +2 + StrCpy $R9 '4D=d$\r$\n' + StrCmp $R8 4 0 +2 + StrCpy $R9 '2B=B$\r$\n' + + StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9' + + Push $0 +FunctionEnd + + +Section LineRead + ${StackVerificationStart} LineRead + + ${LineRead} '$TEMPFILE1' '-1' $OUT + IfErrors error + StrCmp $OUT '5E=e$\r$\n' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section FileReadFromEnd + ${StackVerificationStart} FileReadFromEnd + + StrCpy $OUT '' + ${FileReadFromEnd} '$TEMPFILE1' 'FileReadFromEndCallback' + IfErrors error + StrCmp $OUT '|-1|5|5E=e$\r$\n|-2|4|4D=d$\r$\n|-3|3|3C=c$\r$\n|-4|2|2B=b$\r$\n' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + +Function FileReadFromEndCallback + StrCpy $OUT '$OUT|$7|$8|$9' + StrCmp $8 2 0 +2 + StrCpy $0 StopFileReadFromEnd + + Push $0 +FunctionEnd + + +Section LineSum + ${StackVerificationStart} LineSum + + ${LineSum} '$TEMPFILE1' $OUT + IfErrors error + StrCmp $OUT '5' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section FileJoin + ${StackVerificationStart} FileJoin + + SetDetailsPrint none + ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3' + SetDetailsPrint both + + ${StackVerificationEnd} +SectionEnd + + +Section TextCompare + ${StackVerificationStart} TextCompare + + StrCpy $OUT '' + ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'TextCompareCallback' + StrCmp $OUT '|2|4D=d$\r$\n|2|2B=b$\r$\n|4|2B=B$\r$\n|4|4D=d$\r$\n' 0 error + + StrCpy $OUT '' + ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastEqual' 'TextCompareCallback' + StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error + + StrCpy $OUT '' + ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback' + StrCmp $OUT '' 0 error + + StrCpy $OUT '' + ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback' + StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|4|2B=B$\r$\n|2|2B=b$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|2|4D=d$\r$\n|4|4D=d$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + +Section TextCompareS + ${StackVerificationStart} TextCompareS + + StrCpy $OUT '' + ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback' + StrCmp $OUT '|||2|2B=b$\r$\n' 0 error + + StrCpy $OUT '' + ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback' + StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|2|4D=d$\r$\n|4|4D=d$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + +Function TextCompareCallback + StrCpy $OUT '$OUT|$6|$7|$8|$9' + + Push $0 +FunctionEnd + + +Section ConfigRead + ${StackVerificationStart} ConfigRead + + ${ConfigRead} '$TEMPFILE1' '3c=' $OUT + StrCmp $OUT 'c' 0 error + + ${ConfigRead} '$TEMPFILE1' '6F=' $OUT + StrCmp $OUT '' 0 error + + ${ConfigRead} '$TEMPFILE1' 'FF=' $OUT + IfErrors 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section ConfigReadS + ${StackVerificationStart} ConfigReadS + + ${ConfigReadS} '$TEMPFILE1' '3C=' $OUT + StrCmp $OUT 'c' 0 error + + ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT + IfErrors 0 error + StrCmp $OUT '' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section ConfigWrite + ${StackVerificationStart} ConfigWrite + + ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT + StrCmp $OUT 'CHANGED' 0 error + + ${ConfigWrite} '$TEMPFILE1' '2B=' '' $OUT + StrCmp $OUT 'DELETED' 0 error + + ${ConfigWrite} '$TEMPFILE1' '3c=' 'c' $OUT + StrCmp $OUT 'SAME' 0 error + + ${ConfigWrite} '$TEMPFILE1' '6F=' '*' $OUT + StrCmp $OUT 'ADDED' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section ConfigWriteS + ${StackVerificationStart} ConfigWriteS + + ${ConfigWriteS} '$TEMPFILE1' '5e=' 'e**' $OUT + StrCmp $OUT 'ADDED' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section FileRecode + ${StackVerificationStart} FileRecode + + ${FileRecode} '$TEMPFILE1' 'CharToOem' + + ${StackVerificationEnd} +SectionEnd + + +Section TrimNewLines + ${StackVerificationStart} TrimNewLines + + ${TrimNewLines} 'Text Line$\r$\n' $OUT + StrCmp $OUT 'Text Line' 0 error + + ${TrimNewLines} 'Text Line' $OUT + StrCmp $OUT 'Text Line' 0 error + + ${TrimNewLines} 'Text Line$\n' $OUT + StrCmp $OUT 'Text Line' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WriteUninstaller + SetDetailsPrint none + Delete $TEMPFILE1 + Delete $TEMPFILE2 + Delete $TEMPFILE3 + SetDetailsPrint both + goto +2 + WriteUninstaller '$EXEDIR\un.TextFuncTest.exe' +SectionEnd + + + +;############### UNINSTALL ############### + +Section un.Uninstall + ${LineFind} '$TEMPFILE1' '/NUL' '1:-1' 'un.LineFindCallback' + ${LineRead} '$TEMPFILE1' '-1' $OUT + ${FileReadFromEnd} '$TEMPFILE1' 'un.FileReadFromEndCallback' + ${LineSum} '$TEMPFILE1' $OUT + ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3' + ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback' + ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback' + ${ConfigRead} '$TEMPFILE1' '3c=' $OUT + ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT + ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT + ${ConfigWriteS} '$TEMPFILE1' '5E=' 'e**' $OUT + ${FileRecode} '$TEMPFILE1' 'CharToOem' + ${TrimNewLines} 'Text Line$\r$\n' $OUT +SectionEnd + +Function un.LineFindCallback + Push $0 +FunctionEnd + +Function un.FileReadFromEndCallback + Push $0 +FunctionEnd + +Function un.TextCompareCallback + Push $0 +FunctionEnd diff --git a/tools/Examples/UserInfo/UserInfo.nsi b/tools/Examples/UserInfo/UserInfo.nsi new file mode 100644 index 0000000..427f0c3 --- /dev/null +++ b/tools/Examples/UserInfo/UserInfo.nsi @@ -0,0 +1,45 @@ +Name "UserInfo.dll test" +OutFile UserInfo.exe +RequestExecutionLevel Highest + +!define REALMSG "$\nOriginal non-restricted account type: $2" + +Section + ClearErrors + UserInfo::GetName + IfErrors PluginFail + Pop $0 + StrCmp $0 "" 0 +2 ; GetName can return a empty string on Win9x + StrCpy $0 "?" + UserInfo::GetAccountType + Pop $1 + # GetOriginalAccountType will check the tokens of the original user of the + # current thread/process. If the user tokens were elevated or limited for + # this process, GetOriginalAccountType will return the non-restricted + # account type. + # On Vista with UAC, for example, this is not the same value when running + # with `RequestExecutionLevel user`. GetOriginalAccountType will return + # "admin" while GetAccountType will return "user". + UserInfo::GetOriginalAccountType + Pop $2 + StrCmp $1 "Admin" 0 +3 ; Note: Win9x always returns "Admin" + MessageBox MB_OK 'User "$0" is in the Administrators group${REALMSG}' + Goto done + StrCmp $1 "Power" 0 +3 + MessageBox MB_OK 'User "$0" is in the Power Users group${REALMSG}' + Goto done + StrCmp $1 "User" 0 +3 + MessageBox MB_OK 'User "$0" is just a regular user${REALMSG}' + Goto done + StrCmp $1 "Guest" 0 +3 + MessageBox MB_OK 'User "$0" is a guest${REALMSG}' + Goto done + MessageBox MB_OK "Unknown error" + Goto done + + PluginFail: + MessageBox MB_OK "Error! Unable to call plug-in!" + + done: +SectionEnd + diff --git a/tools/Examples/VPatch/example.nsi b/tools/Examples/VPatch/example.nsi new file mode 100644 index 0000000..081420e --- /dev/null +++ b/tools/Examples/VPatch/example.nsi @@ -0,0 +1,62 @@ +;VPatch example +;Written by Joost Verburg + +;-------------------------------- + +; The name of the installer +Name "VPatch Test" + +; The file to write +OutFile "vpatchtest.exe" + +; The default installation directory +InstallDir "$PROGRAMFILES\VPatch Test" + +; The text to prompt the user to enter a directory +DirText "Choose a folder in which to install the VPatch Test!" + +; Show details +ShowInstDetails show + +;-------------------------------- +; The normal way to use VPatch +;-------------------------------- +!include "VPatchLib.nsh" + +Section "Update file" + ; Set output path to the installation directory + SetOutPath $INSTDIR + + ; Extract the old file under name 'updatefile.txt' + File /oname=updatefile.txt oldfile.txt + + ; Update the file - it will be replaced with the new version + DetailPrint "Updating updatefile.txt using patch..." + !insertmacro VPatchFile "patch.pat" "$INSTDIR\updatefile.txt" "$INSTDIR\temporaryfile.txt" + +SectionEnd + +;------------------------------- +; The hard way to use VPatch +;------------------------------- +Section "New version in separate file" + + ; Set output path to the installation directory + SetOutPath $INSTDIR + + ; Extract the old file + File oldfile.txt + + ; Extract the patch to the plug-ins folder (temporary) + InitPluginsDir + File /oname=$PLUGINSDIR\patch.pat patch.pat + + ; Update the old file to the new file using the patch + DetailPrint "Updating oldfile.txt using patch to newfile.txt..." + vpatch::vpatchfile "$PLUGINSDIR\patch.pat" "$INSTDIR\oldfile.txt" "$INSTDIR\newfile.txt" + + ; Show result + Pop $R0 + DetailPrint "Result: $R0" + +SectionEnd \ No newline at end of file diff --git a/tools/Examples/VPatch/newfile.txt b/tools/Examples/VPatch/newfile.txt new file mode 100644 index 0000000..2369a70 --- /dev/null +++ b/tools/Examples/VPatch/newfile.txt @@ -0,0 +1,6 @@ +*** THIS IS A TEST FILE FOR THE VPATCH EXAMPLE *** +*** COMPILE EXAMPLE.NSI TO TEST *** + +newfile - vpatch + +67890 - GHIJKL \ No newline at end of file diff --git a/tools/Examples/VPatch/oldfile.txt b/tools/Examples/VPatch/oldfile.txt new file mode 100644 index 0000000..a378cf3 --- /dev/null +++ b/tools/Examples/VPatch/oldfile.txt @@ -0,0 +1,6 @@ +*** THIS IS A TEST FILE FOR THE VPATCH EXAMPLE *** +*** COMPILE EXAMPLE.NSI TO TEST *** + +oldfile - vpatch + +12345 - ABCDEF \ No newline at end of file diff --git a/tools/Examples/VPatch/patch.pat b/tools/Examples/VPatch/patch.pat new file mode 100644 index 0000000000000000000000000000000000000000..e1e5304adc80a6aa747187ac77e8c0a26b57f568 GIT binary patch literal 99 zcmWFwa13E&U}#`wU|_iOTl*qw*q`1@4eOWHW{G6oGq&|s-;v{Uzpwrm3+v$wW1t$w zXduDBs+5;no|c)Ds-UY-R*+bdoWaY*%VlP6VQByqarf}_^7i@9&@A56Eq|C10Cj91 AO8@`> literal 0 HcmV?d00001 diff --git a/tools/Examples/VersionInfo.nsi b/tools/Examples/VersionInfo.nsi new file mode 100644 index 0000000..1ff449d --- /dev/null +++ b/tools/Examples/VersionInfo.nsi @@ -0,0 +1,29 @@ +; VersionInfo.nsi +; +; This script shows you how to add version information to an installer. +; Windows shows this information on the Version tab of the File properties. + +;-------------------------------- + +Name "Version Info" + +OutFile "VersionInfo.exe" + +LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf" +;-------------------------------- +;Version Information + + VIProductVersion "1.2.3.4" + VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Test Application" + VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A test comment" + VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Fake company" + VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Test Application is a trademark of Fake company" + VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright Fake company" + VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Test Application" + VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "1.2.3" + +;-------------------------------- + +Section "" + +SectionEnd diff --git a/tools/Examples/WordFunc.ini b/tools/Examples/WordFunc.ini new file mode 100644 index 0000000..38c748d --- /dev/null +++ b/tools/Examples/WordFunc.ini @@ -0,0 +1,107 @@ +[Settings] +NumFields=13 +NextButtonText=&Enter + +[Field 1] +Type=Droplist +Flags=NOTIFY +State=1. WordFind (Find word by number) +ListItems=1. WordFind (Find word by number)| (Delimiter exclude)| (Sum of words)| (Sum of delimiters)| (Find word number)| ( }} )| ( {} )| ( *} )|2. WordFind2X|3. WordReplace (Replace)| (Delete)| (Multiple-replace)|4. WordAdd (Add)| (Delete) |5. WordInsert|6. StrFilter (UpperCase)| (LowerCase)| (Filter)|7. VersionCompare|8. VersionConvert +Left=44 +Right=190 +Top=10 +Bottom=191 + +[Field 2] +Type=Text +State=C:\io.sys|C:\logo.sys|C:\Program Files|C:\WINDOWS +Left=44 +Right=-10 +Top=30 +Bottom=41 + +[Field 3] +Type=Text +State=|C:\ +Left=44 +Right=-10 +Top=46 +Bottom=59 + +[Field 4] +Type=Text +Flags=DISABLED +Left=44 +Right=-10 +Top=62 +Bottom=75 + +[Field 5] +Type=Text +State=-4 +Left=44 +Right=-10 +Top=80 +Bottom=92 + +[Field 6] +Type=Text +Left=10 +Right=-30 +Top=108 +Bottom=120 + +[Field 7] +Type=Text +Left=-22 +Right=-10 +Top=108 +Bottom=120 + +[Field 8] +Type=Label +Text=String +Left=10 +Right=43 +Top=32 +Bottom=44 + +[Field 9] +Type=Label +Text=Delimiter +Left=10 +Right=43 +Top=48 +Bottom=60 + +[Field 10] +Type=Label +Left=10 +Right=44 +Top=65 +Bottom=76 + +[Field 11] +Type=Label +Text=Word # +Left=10 +Right=43 +Top=81 +Bottom=94 + +[Field 12] +Type=Label +Text=Result (Word): +Left=10 +Right=236 +Top=97 +Bottom=110 + +[Field 13] +Type=Label +Text=EL +Left=-21 +Right=-10 +Top=97 +Bottom=110 + diff --git a/tools/Examples/WordFunc.nsi b/tools/Examples/WordFunc.nsi new file mode 100644 index 0000000..a0e9f99 --- /dev/null +++ b/tools/Examples/WordFunc.nsi @@ -0,0 +1,535 @@ +;_____________________________________________________________________________ +; +; Word Functions +;_____________________________________________________________________________ +; +; 2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + +Name "Word Functions" +OutFile "WordFunc.exe" +Caption "$(^Name)" +XPStyle on +RequestExecutionLevel user + +Var INI +Var HWND +Var STATE + +!include "WinMessages.nsh" +!include "WordFunc.nsh" + +Page Custom ShowCustom LeaveCustom + +Function ShowCustom + InstallOptions::initDialog "$INI" + Pop $hwnd + InstallOptions::show + Pop $0 +FunctionEnd + +Function LeaveCustom + ReadINIStr $0 $INI "Settings" "State" + StrCmp $0 0 Enter + + GetDlgItem $1 $HWND 1202 + EnableWindow $1 1 + GetDlgItem $1 $HWND 1203 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1204 + ShowWindow $1 1 + GetDlgItem $1 $HWND 1206 + EnableWindow $1 1 + GetDlgItem $1 $HWND 1205 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1206 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + + ReadINIStr $0 $INI "Field 1" "State" + StrCmp $0 "1. WordFind (Find word by number)" 0 WordFind2Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:-4" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Word):" + goto WordFindSend + + WordFind2Send: + StrCmp $0 " (Delimiter exclude)" 0 WordFind3Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E-2{" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Before{ or }after delimiter):" + goto WordFindSend + + WordFind3Send: + StrCmp $0 " (Sum of words)" 0 WordFind4Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:#" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Sum of words):" + goto WordFindSend + + WordFind4Send: + StrCmp $0 " (Sum of delimiters)" 0 WordFind5Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E*" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Option" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Sum of delimiters):" + goto WordFindSend + + WordFind5Send: + StrCmp $0 " (Find word number)" 0 WordFind6Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:/Program Files" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:/Word" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Word #):" + goto WordFindSend + + WordFind6Send: + StrCmp $0 " ( }} )" 0 WordFind7Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E+2}}" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Before{{ or }}after word):" + goto WordFindSend + + WordFind7Send: + StrCmp $0 " ( {} )" 0 WordFind8Send + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:+2{}" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Without word):" + goto WordFindSend + + WordFind8Send: + StrCmp $0 " ( *} )" 0 WordFind2XSend + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|C:\" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E+2*}" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Before{* or *}after word with word):" + goto WordFindSend + + WordFind2XSend: + StrCmp $0 "2. WordFind2X" 0 WordReplace1Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:[C:\" + GetDlgItem $1 $HWND 1203 + EnableWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:];" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E+2" + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Delimiter1" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Delimiter2" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (Word):" + abort + + WordReplace1Send: + StrCmp $0 "3. WordReplace (Replace)" 0 WordReplace2Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\io.sys|C:\logo.sys|C:\WINDOWS" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:SYS" + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:bmp" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:+2" + goto WordReplaceSend + + WordReplace2Send: + StrCmp $0 " (Delete)" 0 WordReplace3Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\io.sys|C:\logo.sys|C:\WINDOWS" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:SYS" + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E+" + goto WordReplaceSend + + WordReplace3Send: + StrCmp $0 " (Multiple-replace)" 0 WordAdd1Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\io.sys||||||C:\logo.sys|||C:\WINDOWS" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|" + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:+1*" + goto WordReplaceSend + + WordAdd1Send: + StrCmp $0 "4. WordAdd (Add)" 0 WordAdd2Send + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:+C:\WINDOWS|C:\config.sys|C:\IO.SYS" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (String1 + String2):" + goto WordAddSend + + WordAdd2Send: + StrCmp $0 " (Delete) " 0 WordInsertSend + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E-C:\WINDOWS|C:\config.sys|C:\IO.SYS" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (String1 - String2):" + goto WordAddSend + + WordInsertSend: + StrCmp $0 "5. WordInsert" 0 StrFilter1Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\io.sys|C:\WINDOWS" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|" + GetDlgItem $1 $HWND 1203 + EnableWindow $1 1 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\logo.sys" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:E+2" + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Delimiter" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result:" + abort + + StrFilter1Send: + StrCmp $0 "6. StrFilter (UpperCase)" 0 StrFilter2Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:123abc 456DEF 7890|%#" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:+" + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (String in uppercase):" + goto StrFilterSend + + StrFilter2Send: + StrCmp $0 " (LowerCase)" 0 StrFilter3Send + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:123abc 456DEF 7890|%#" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:-" + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:ef" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (String in lowercase except EF):" + goto StrFilterSend + + StrFilter3Send: + StrCmp $0 " (Filter)" 0 VersionCompareSend + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:123abc 456DEF 7890|%#" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:+12" + GetDlgItem $1 $HWND 1203 + SendMessage $1 ${WM_SETTEXT} 1 "STR:b" + GetDlgItem $1 $HWND 1204 + SendMessage $1 ${WM_SETTEXT} 1 "STR:def" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (String Digits + Letters + b - def):" + goto StrFilterSend + + VersionCompareSend: + StrCmp $0 "7. VersionCompare" 0 VersionConvertSend + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:1.1.1.9" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:1.1.1.01" + GetDlgItem $1 $HWND 1203 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1204 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1206 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Version1" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Version2" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (0-equal 1-newer 2-older):" + abort + + VersionConvertSend: + StrCmp $0 "8. VersionConvert" 0 Abort + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:9.0c" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1203 + ShowWindow $1 0 + GetDlgItem $1 $HWND 1204 + ShowWindow $1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1206 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Version" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:CharList" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result (numerical version format):" + abort + + Abort: + Abort + + WordFindSend: + GetDlgItem $1 $HWND 1203 + EnableWindow $1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\io.sys|C:\logo.sys|C:\Program Files|C:\WINDOWS" + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Delimiter" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + Abort + + WordReplaceSend: + GetDlgItem $1 $HWND 1203 + EnableWindow $1 1 + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Replace it" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR: with" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Word #" + GetDlgItem $1 $HWND 1211 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Result:" + Abort + + WordAddSend: + GetDlgItem $1 $HWND 1203 + EnableWindow $1 0 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1201 + SendMessage $1 ${WM_SETTEXT} 1 "STR:C:\io.sys|C:\logo.sys|C:\WINDOWS" + GetDlgItem $1 $HWND 1202 + SendMessage $1 ${WM_SETTEXT} 1 "STR:|" + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String1" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Delimiter" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String2" + Abort + + StrFilterSend: + GetDlgItem $1 $HWND 1203 + EnableWindow $1 1 + GetDlgItem $1 $HWND 1206 + EnableWindow $1 0 + GetDlgItem $1 $HWND 1207 + SendMessage $1 ${WM_SETTEXT} 1 "STR:String" + GetDlgItem $1 $HWND 1208 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Filter" + GetDlgItem $1 $HWND 1209 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Include" + GetDlgItem $1 $HWND 1210 + SendMessage $1 ${WM_SETTEXT} 1 "STR:Exclude" + Abort + +;=Enter= + Enter: + StrCpy $0 '' + ReadINIStr $STATE $INI "Field 1" "State" + ReadINIStr $R1 $INI "Field 2" "State" + ReadINIStr $R2 $INI "Field 3" "State" + ReadINIStr $R3 $INI "Field 4" "State" + ReadINIStr $R4 $INI "Field 5" "State" + + StrCmp $STATE "1. WordFind (Find word by number)" WordFind + StrCmp $STATE " (Delimiter exclude)" WordFind + StrCmp $STATE " (Find in string)" WordFind + StrCmp $STATE " (Sum of words)" WordFind + StrCmp $STATE " (Sum of delimiters)" WordFind + StrCmp $STATE " (Find word number)" WordFind + StrCmp $STATE " ( }} )" WordFind + StrCmp $STATE " ( {} )" WordFind + StrCmp $STATE " ( *} )" WordFind + StrCmp $STATE "2. WordFind2X" WordFind2X + StrCmp $STATE "3. WordReplace (Replace)" WordReplace + StrCmp $STATE " (Delete)" WordReplace + StrCmp $STATE " (Multiple-replace)" WordReplace + StrCmp $STATE "4. WordAdd (Add)" WordAdd + StrCmp $STATE " (Delete) " WordAdd + StrCmp $STATE "5. WordInsert" WordInsert + StrCmp $STATE "6. StrFilter (UpperCase)" StrFilter + StrCmp $STATE " (LowerCase)" StrFilter + StrCmp $STATE " (Filter)" StrFilter + StrCmp $STATE "7. VersionCompare" VersionCompare + StrCmp $STATE "8. VersionConvert" VersionConvert + Abort + + WordFind: + ${WordFind} "$R1" "$R2" "$R4" $R0 + IfErrors 0 Send + StrCpy $0 $R0 + StrCmp $R0 3 0 +3 + StrCpy $3 '"+1" "-1" "+1}" "+1{" "#" "/word"' + goto error3 + StrCmp $R0 2 0 error1 + StrCpy $R4 $R4 '' 1 + StrCpy $1 $R4 1 + StrCmp $1 / 0 error2 + StrCpy $R4 $R4 '' 1 + StrCpy $R0 '"$R4" no such word.' + goto Send + + WordFind2X: + ${WordFind2X} "$R1" "$R2" "$R3" "$R4" $R0 + IfErrors 0 Send + StrCpy $0 $R0 + StrCmp $R0 3 0 +3 + StrCpy $3 '"+1" "-1"' + goto error3 + StrCmp $R0 2 +3 + StrCpy $R0 '"$R2...$R3" no words found.' + goto Send + StrCpy $R4 $R4 '' 1 + StrCpy $1 $R4 1 + StrCmp $1 / 0 +2 + StrCpy $R4 $R4 '' 1 + StrCpy $R0 '"$R4" no such word.' + goto Send + + WordReplace: + ${WordReplace} "$R1" "$R2" "$R3" "$R4" $R0 + IfErrors 0 Send + StrCpy $0 $R0 + StrCmp $R0 3 0 +3 + StrCpy $3 '"+1" "+1*" "+" "+*" "{}"' + goto error3 + StrCmp $R0 2 0 error1 + StrCpy $R4 $R4 '' 1 + goto error2 + + WordAdd: + ${WordAdd} "$R1" "$R2" "$R4" $R0 + IfErrors 0 Send + StrCpy $0 $R0 + StrCmp $R0 3 0 error1empty + StrCpy $3 '"+text" "-text"' + goto error3 + + WordInsert: + ${WordInsert} "$R1" "$R2" "$R3" "$R4" $R0 + IfErrors 0 Send + StrCpy $0 $R0 + StrCmp $R0 3 0 +3 + StrCpy $3 '"+1" "-1"' + goto error3 + StrCmp $R0 2 0 error1empty + StrCpy $R4 $R4 '' 1 + goto error2 + + StrFilter: + ${StrFilter} "$R1" "$R2" "$R3" "$R4" $R0 + IfErrors 0 Send + StrCpy $R0 'Syntax error' + goto Send + + VersionCompare: + ${VersionCompare} "$R1" "$R2" $R0 + goto Send + + VersionConvert: + ${VersionConvert} "$R1" "$R2" $R0 + goto Send + + error3: + StrCpy $R0 '"$R4" syntax error ($3)' + goto Send + error2: + StrCpy $R0 '"$R4" no such word number' + goto Send + error1empty: + StrCpy $R0 '"$R2" delimiter is empty' + goto Send + error1: + StrCpy $R0 '"$R2" delimiter not found in string' + goto Send + + Send: + GetDlgItem $1 $HWND 1205 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$R0" + GetDlgItem $1 $HWND 1206 + SendMessage $1 ${WM_SETTEXT} 1 "STR:$0" + abort +FunctionEnd + +Function .onInit + InitPluginsDir + GetTempFileName $INI $PLUGINSDIR + File /oname=$INI "WordFunc.ini" +FunctionEnd + +Page instfiles + +Section "Empty" +SectionEnd diff --git a/tools/Examples/WordFuncTest.nsi b/tools/Examples/WordFuncTest.nsi new file mode 100644 index 0000000..e9d1160 --- /dev/null +++ b/tools/Examples/WordFuncTest.nsi @@ -0,0 +1,610 @@ +;_____________________________________________________________________________ +; +; Word Functions Test +;_____________________________________________________________________________ +; +; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + +Name "Word Functions Test" +OutFile "WordFuncTest.exe" +Caption "$(^Name)" +ShowInstDetails show +XPStyle on +RequestExecutionLevel user + +Var FUNCTION +Var OUT + +!include "WordFunc.nsh" + +;############### INSTALL ############### + +!define StackVerificationStart `!insertmacro StackVerificationStart` +!macro StackVerificationStart _FUNCTION + StrCpy $FUNCTION ${_FUNCTION} + Call StackVerificationStart +!macroend + +!define StackVerificationEnd `!insertmacro StackVerificationEnd` +!macro StackVerificationEnd + Call StackVerificationEnd +!macroend + +Function StackVerificationStart + StrCpy $0 !0 + StrCpy $1 !1 + StrCpy $2 !2 + StrCpy $3 !3 + StrCpy $4 !4 + StrCpy $5 !5 + StrCpy $6 !6 + StrCpy $7 !7 + StrCpy $8 !8 + StrCpy $9 !9 + StrCpy $R0 !R0 + StrCpy $R1 !R1 + StrCpy $R2 !R2 + StrCpy $R3 !R3 + StrCpy $R4 !R4 + StrCpy $R5 !R5 + StrCpy $R6 !R6 + StrCpy $R7 !R7 + StrCpy $R8 !R8 + StrCpy $R9 !R9 +FunctionEnd + +Function StackVerificationEnd + IfErrors +3 + DetailPrint 'PASSED $FUNCTION no errors' + goto +2 + DetailPrint 'FAILED $FUNCTION error' + + StrCmp $0 '!0' 0 error + StrCmp $1 '!1' 0 error + StrCmp $2 '!2' 0 error + StrCmp $3 '!3' 0 error + StrCmp $4 '!4' 0 error + StrCmp $5 '!5' 0 error + StrCmp $6 '!6' 0 error + StrCmp $7 '!7' 0 error + StrCmp $8 '!8' 0 error + StrCmp $9 '!9' 0 error + StrCmp $R0 '!R0' 0 error + StrCmp $R1 '!R1' 0 error + StrCmp $R2 '!R2' 0 error + StrCmp $R3 '!R3' 0 error + StrCmp $R4 '!R4' 0 error + StrCmp $R5 '!R5' 0 error + StrCmp $R6 '!R6' 0 error + StrCmp $R7 '!R7' 0 error + StrCmp $R8 '!R8' 0 error + StrCmp $R9 '!R9' 0 error + DetailPrint 'PASSED $FUNCTION stack' + goto end + + error: + DetailPrint 'FAILED $FUNCTION stack' +; MessageBox MB_OKCANCEL '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}' IDOK +2 +; quit + + end: +FunctionEnd + + + +Section WordFind + ${StackVerificationStart} WordFind + + ${WordFind} '||io.sys|||Program Files|||WINDOWS' '||' '-02' $OUT + StrCmp $OUT '|Program Files' 0 error + + ${WordFind} '||io.sys||||Program Files||||WINDOWS' '||' '-2' $OUT + StrCmp $OUT 'Program Files' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '-2}' $OUT + StrCmp $OUT '|logo.sys|||WINDOWS' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '#' $OUT + StrCmp $OUT '3' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '*' $OUT + StrCmp $OUT '2' 0 error + + ${WordFind} 'C:\io.sys|||Program Files|||WINDOWS' '||' '/|Program Files' $OUT + StrCmp $OUT '2' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '+2}}' $OUT + StrCmp $OUT '|||WINDOWS' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '+2{}' $OUT + StrCmp $OUT 'C:\io.sys|||WINDOWS' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '+2*}' $OUT + StrCmp $OUT '|logo.sys|||WINDOWS' 0 error + + ${WordFind} 'C:\\Program Files\\NSIS\\NSIS.chm' '\' '-2{*' $OUT + StrCmp $OUT 'C:\\Program Files\\NSIS' 0 error + + ${WordFind} 'C:\io.sys|||Program Files|||WINDOWS|||' '||' '-1' $OUT + StrCmp $OUT '|' 0 error + + ${WordFind} '||C:\io.sys|||logo.sys|||WINDOWS||' '||' '-1}' $OUT + StrCmp $OUT '' 0 error + + ${WordFind} '||C:\io.sys|||logo.sys|||WINDOWS||' '||' '+1{' $OUT + StrCmp $OUT '' 0 error + + ${WordFind} 'C:\io.sys|||logo.sys' '_' 'E+1' $OUT + IfErrors 0 error + StrCmp $OUT 1 0 error + + ${WordFind} 'C:\io.sys|||logo.sys|||' '\' 'E+3' $OUT + IfErrors 0 error + StrCmp $OUT 2 0 error + + ${WordFind} 'C:\io.sys|||logo.sys' '\' 'E1' $OUT + IfErrors 0 error + StrCmp $OUT 3 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordFindS + ${StackVerificationStart} WordFindS + + ${WordFindS} 'C:\io.sys|||Program Files|||WINDOWS' '||' '/|PROGRAM FILES' $OUT + StrCmp $OUT 'C:\io.sys|||Program Files|||WINDOWS' 0 error + + ${WordFindS} 'C:\io.sys|||Program Files|||WINDOWS' '||' '/|Program Files' $OUT + StrCmp $OUT '2' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordFind2X + ${StackVerificationStart} WordFind2X + + ${WordFind2X} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT + StrCmp $OUT 'logo.sys' 0 error + + ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1' $OUT + StrCmp $OUT 'logo' 0 error + + ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1{{' $OUT + StrCmp $OUT 'C:\WINDOWS C:\io.sys C:' 0 error + + ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1{}' $OUT + StrCmp $OUT 'C:\WINDOWS C:\io.sys C:sys' 0 error + + ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1{*' $OUT + StrCmp $OUT 'C:\WINDOWS C:\io.sys C:\logo.' 0 error + + ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '/logo' $OUT + StrCmp $OUT '2' 0 error + + ${WordFind2X} '||a||b||c' '||' '||' 'E+1' $OUT + StrCmp $OUT 'a' 0 error + + ${WordFind2X} '[io.sys];[C:\logo.sys]' '\' '];' 'E+1' $OUT + IfErrors 0 error + StrCmp $OUT 1 0 error + + ${WordFind2X} '[io.sys];[C:\logo.sys]' '[' '];' 'E+2' $OUT + IfErrors 0 error + StrCmp $OUT 2 0 error + + ${WordFind2X} '[io.sys];[C:\logo.sys]' '\' '];' 'E2' $OUT + IfErrors 0 error + StrCmp $OUT 3 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordFind2XS + ${StackVerificationStart} WordFind2XS + + ${WordFind2XS} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '/LOGO' $OUT + StrCmp $OUT 'C:\WINDOWS C:\io.sys C:\logo.sys' 0 error + + ${WordFind2XS} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '/logo' $OUT + StrCmp $OUT '2' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordFind3X + ${StackVerificationStart} WordFind3X + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT + StrCmp $OUT '1.AAB' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1' $OUT + StrCmp $OUT '2.BAA' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1{{' $OUT + StrCmp $OUT '[1.AAB];' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1{}' $OUT + StrCmp $OUT '[1.AAB];[3.BBB];' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1{*' $OUT + StrCmp $OUT '[1.AAB];[2.BAA];' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '/2.BAA' $OUT + StrCmp $OUT '2' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'XX' '];' 'E+1' $OUT + IfErrors 0 error + StrCmp $OUT '1' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' 'E+3' $OUT + IfErrors 0 error + StrCmp $OUT '2' 0 error + + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' 'E3' $OUT + IfErrors 0 error + StrCmp $OUT '3' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordFind3XS + ${StackVerificationStart} WordFind3XS + + ${WordFind3XS} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '/2.baa' $OUT + StrCmp $OUT '[1.AAB];[2.BAA];[3.BBB];' 0 error + + ${WordFind3XS} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '/2.BAA' $OUT + StrCmp $OUT '2' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordReplace + ${StackVerificationStart} WordReplace + + ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.bmp C:\WINDOWS' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' '' '+' $OUT + StrCmp $OUT 'C:\io. C:\logo. C:\WINDOWS' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'C:\io.sys' '' '+' $OUT + StrCmp $OUT ' C:\logo.sys C:\WINDOWS' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' ' ' '+1*' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.sys C:\WINDOWS' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sysSYSsys C:\WINDOWS' 'sys' 'bmp' '+*' $OUT + StrCmp $OUT 'C:\io.bmp C:\logo.bmp C:\WINDOWS' 0 error + + ${WordReplace} 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '{' $OUT + StrCmp $OUT '||C:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 0 error + + ${WordReplace} 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '}' $OUT + StrCmp $OUT 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWS|||' 0 error + + ${WordReplace} 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '{}' $OUT + StrCmp $OUT '||C:\io.sys C:\logo.sys C:\WINDOWS|||' 0 error + + ${WordReplace} 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '{*' $OUT + StrCmp $OUT '|C:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 0 error + + ${WordReplace} 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '}*' $OUT + StrCmp $OUT 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWS|' 0 error + + ${WordReplace} 'SYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '{}*' $OUT + StrCmp $OUT '|C:\io.sys C:\logo.sys C:\WINDOWS|' 0 error + + ${WordReplace} 'sysSYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '{}*' $OUT + StrCmp $OUT '|C:\io.sys C:\logo.sys C:\WINDOWS|' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sys' '#sys' '|sys|' 'E+1' $OUT + IfErrors 0 error + StrCmp $OUT '1' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sys' '.sys' '|sys|' 'E+3' $OUT + IfErrors 0 error + StrCmp $OUT '2' 0 error + + ${WordReplace} 'C:\io.sys C:\logo.sys' '.sys' '|sys|' 'E3' $OUT + IfErrors 0 error + StrCmp $OUT '3' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordReplaceS + ${StackVerificationStart} WordReplaceS + + ${WordReplaceS} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.sys C:\WINDOWS' 0 error + + ${WordReplaceS} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'sys' 'bmp' '+2' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.bmp C:\WINDOWS' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordAdd + ${StackVerificationStart} WordAdd + + ${WordAdd} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT + StrCmp $OUT 'C:\io.sys C:\WINDOWS C:\config.sys' 0 error + + ${WordAdd} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' '-C:\WINDOWS C:\config.sys C:\IO.SYS' $OUT + StrCmp $OUT 'C:\logo.sys' 0 error + + ${WordAdd} 'C:\io.sys' ' ' '+C:\WINDOWS C:\config.sys C:\IO.SYS' $OUT + StrCmp $OUT 'C:\io.sys C:\WINDOWS C:\config.sys' 0 error + + ${WordAdd} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' '-C:\WINDOWS' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.sys' 0 error + + ${WordAdd} 'C:\io.sys C:\logo.sys' ' ' '+C:\logo.sys' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.sys' 0 error + + ${WordAdd} 'C:\io.sys C:\logo.sys' ' ' 'E-' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.sys' 0 error + IfErrors error + + ${WordAdd} 'C:\io.sys C:\logo.sys' '' 'E-C:\logo.sys' $OUT + IfErrors 0 error + StrCmp $OUT '1' 0 error + + ${WordAdd} 'C:\io.sys C:\logo.sys' '' 'EC:\logo.sys' $OUT + IfErrors 0 error + StrCmp $OUT '3' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordAddS + ${StackVerificationStart} WordAddS + + ${WordAddS} 'C:\io.sys C:\WINDOWS' ' ' '+C:\windows C:\config.sys' $OUT + StrCmp $OUT 'C:\io.sys C:\WINDOWS C:\windows C:\config.sys' 0 error + + ${WordAddS} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT + StrCmp $OUT 'C:\io.sys C:\WINDOWS C:\config.sys' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordInsert + ${StackVerificationStart} WordInsert + + ${WordInsert} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT + StrCmp $OUT 'C:\io.sys C:\logo.sys C:\WINDOWS' 0 error + + ${WordInsert} 'C:\io.sys' ' ' 'C:\WINDOWS' '+2' $OUT + StrCmp $OUT 'C:\io.sys C:\WINDOWS' 0 error + + ${WordInsert} '' ' ' 'C:\WINDOWS' '+1' $OUT + StrCmp $OUT 'C:\WINDOWS ' 0 error + + ${WordInsert} 'C:\io.sys C:\logo.sys' '' 'C:\logo.sys' 'E+1' $OUT + IfErrors 0 error + StrCmp $OUT '1' 0 error + + ${WordInsert} 'C:\io.sys C:\logo.sys' ' ' 'C:\logo.sys' 'E+4' $OUT + IfErrors 0 error + StrCmp $OUT '2' 0 error + + ${WordInsert} 'C:\io.sys C:\logo.sys' '' 'C:\logo.sys' 'E1' $OUT + IfErrors 0 error + StrCmp $OUT '3' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WordInsertS + ${StackVerificationStart} WordInsertS + + ${WordInsertS} 'C:\io.sys x C:\logo.sys' ' X ' 'C:\NTLDR' '+2' $OUT + StrCmp $OUT 'C:\io.sys x C:\logo.sys X C:\NTLDR' 0 error + + ${WordInsertS} 'C:\io.sys x C:\logo.sys' ' x ' 'C:\NTLDR' '+2' $OUT + StrCmp $OUT 'C:\io.sys x C:\NTLDR x C:\logo.sys' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section StrFilter + ${StackVerificationStart} StrFilter + + ${StrFilter} '123abc 456DEF 7890|%#' '+' '' '' $OUT + IfErrors error + StrCmp $OUT '123ABC 456DEF 7890|%#' 0 error + + ${StrFilter} '123abc 456DEF 7890|%#' '-' 'ef' '' $OUT + IfErrors error + StrCmp $OUT '123abc 456dEF 7890|%#' 0 error + + ${StrFilter} '123abc 456DEF 7890|%#' '2' '|%' '' $OUT + IfErrors error + StrCmp $OUT 'abcDEF|%' 0 error + + ${StrFilter} '123abc 456DEF 7890|%#' '13' 'af' '4590' $OUT + IfErrors error + StrCmp $OUT '123a 6F 78|%#' 0 error + + ${StrFilter} '123abc 456DEF 7890|%#' '+12' 'b' 'def' $OUT + IfErrors error + StrCmp $OUT '123AbC4567890' 0 error + + ${StrFilter} '123abc 456DEF 7890|%#' '+12' 'b' 'def' $OUT + IfErrors error + StrCmp $OUT '123AbC4567890' 0 error + + ${StrFilter} '123abc 456DEF 7890|%#' '123' 'b' 'def' $OUT + IfErrors 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section StrFilterS + ${StackVerificationStart} StrFilterS + + ${StrFilterS} '123abc 456DEF 7890|%#' '13' 'af' '4590' $OUT + IfErrors error + StrCmp $OUT '123a 6 78|%#' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section VersionCompare + ${StackVerificationStart} VersionCompare + + ${VersionCompare} '1.1.1.9' '1.1.1.01' $OUT + StrCmp $OUT '1' 0 error + + ${VersionCompare} '1.1.1.1' '1.1.1.10' $OUT + StrCmp $OUT '2' 0 error + + ${VersionCompare} '91.1.1.1' '101.1.1.9' $OUT + StrCmp $OUT '2' 0 error + + ${VersionCompare} '1.1.1.1' '1.1.1.1' $OUT + StrCmp $OUT '0' 0 error + + ${VersionCompare} '1.1.1.9' '1.1.1.10' $OUT + StrCmp $OUT '2' 0 error + + ${VersionCompare} '1.1.1.0' '1.1.1' $OUT + StrCmp $OUT '0' 0 error + + ${VersionCompare} '1.1.0.0' '1.1' $OUT + StrCmp $OUT '0' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section VersionConvert + ${StackVerificationStart} VersionConvert + + ${VersionConvert} '9.0a' '' $OUT + StrCmp $OUT '9.0.01' 0 error + + ${VersionConvert} '9.0c' '' $OUT + StrCmp $OUT '9.0.03' 0 error + + ${VersionConvert} '0.15c-9m' '' $OUT + StrCmp $OUT '0.15.03.9.13' 0 error + + ${VersionConvert} '0.15c+' 'abcdefghijklmnopqrstuvwxyz+' $OUT + StrCmp $OUT '0.15.0327' 0 error + + ${VersionConvert} '0.0xa12.x.ax|.|.|x|a|.3|a.4.||5.|' '' $OUT + StrCmp $OUT '0.0.2401.12.24.0124.24.01.3.01.4.5' 0 error + + goto +2 + error: + SetErrors + + ${StackVerificationEnd} +SectionEnd + + +Section WriteUninstaller + goto +2 + WriteUninstaller '$EXEDIR\un.WordFuncTest.exe' +SectionEnd + + + +;############### UNINSTALL ############### + +Section un.Uninstall + ${WordFind} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT + ${WordFindS} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT + ${WordFind2X} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT + ${WordFind2XS} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT + ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT + ${WordFind3XS} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT + ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT + ${WordReplaceS} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT + ${WordAdd} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT + ${WordAddS} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT + ${WordInsert} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT + ${WordInsertS} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT + ${StrFilter} '123abc 456DEF 7890|%#' '+' '' '' $OUT + ${StrFilterS} '123abc 456DEF 7890|%#' '+' '' '' $OUT + ${VersionCompare} '1.1.1.9' '1.1.1.01' $OUT + ${VersionConvert} '9.0a' '' $OUT +SectionEnd diff --git a/tools/Examples/bigtest.nsi b/tools/Examples/bigtest.nsi new file mode 100644 index 0000000..c4bcb04 --- /dev/null +++ b/tools/Examples/bigtest.nsi @@ -0,0 +1,330 @@ +; bigtest.nsi +; +; This script attempts to test most of the functionality of the NSIS exehead. + +;-------------------------------- + +!ifdef HAVE_UPX +!packhdr tmp.dat "upx\upx -9 tmp.dat" +!endif + +!ifdef NOCOMPRESS +SetCompress off +!endif + +;-------------------------------- + +Name "BigNSISTest" +Caption "NSIS Big Test" +Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-install.ico" +OutFile "bigtest.exe" + +SetDateSave on +SetDatablockOptimize on +CRCCheck on +SilentInstall normal +BGGradient 000000 800000 FFFFFF +InstallColors FF8080 000030 +XPStyle on + +InstallDir "$PROGRAMFILES\NSISTest\BigNSISTest" +InstallDirRegKey HKLM "Software\NSISTest\BigNSISTest" "Install_Dir" + +CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp" + +LicenseText "A test text, make sure it's all there" +LicenseData "bigtest.nsi" + +RequestExecutionLevel admin +ManifestSupportedOS all + +;-------------------------------- + +Page license +Page components +Page directory +Page instfiles + +UninstPage uninstConfirm +UninstPage instfiles + +;-------------------------------- + +!ifndef NOINSTTYPES ; only if not defined + InstType "Most" + InstType "Full" + InstType "More" + InstType "Base" + ;InstType /NOCUSTOM + ;InstType /COMPONENTSONLYONCUSTOM +!endif + +AutoCloseWindow false +ShowInstDetails show + +;-------------------------------- + +Section "" ; empty string makes it hidden, so would starting with - + + ; write reg info + StrCpy $1 "Hello World" + DetailPrint "I like to be able to see what is going on (debug) $1" + WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "Install_Dir" "$INSTDIR" + + ; write uninstall strings + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "DisplayName" "BigNSISTest (remove only)" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "UninstallString" '"$INSTDIR\bt-uninst.exe"' + + SetOutPath $INSTDIR + File /a "silent.nsi" + CreateDirectory "$INSTDIR\MyProjectFamily\MyProject" ; 2 recursively create a directory for fun. + WriteUninstaller "$INSTDIR\bt-uninst.exe" + + Nop ; for fun + +SectionEnd + +Section "TempTest" + +SectionIn 1 2 3 + Start: MessageBox MB_OK "Start:" + + MessageBox MB_YESNO "Goto MyLabel" IDYES MyLabel + + MessageBox MB_OK "Right before MyLabel:" + + MyLabel: MessageBox MB_OK "MyLabel:" + + MessageBox MB_OK "Right after MyLabel:" + + MessageBox MB_YESNO "Goto Start:?" IDYES Start + +SectionEnd + +SectionGroup /e SectionGroup1 + +Section "Test Registry/INI functions" + +SectionIn 1 4 3 + + WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "StrTest_INSTDIR" "$INSTDIR" + WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0xDEADBEEF" 0xdeadbeef + WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_123456" 123456 + WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0123" 0123 + WriteRegBin HKLM SOFTWARE\NSISTest\BigNSISTest "BinTest_deadbeef01f00dbeef" "DEADBEEF01F00DBEEF" + StrCpy $8 "$SYSDIR\IniTest" + WriteINIStr "$INSTDIR\test.ini" "MySection" "Value1" $8 + WriteINIStr "$INSTDIR\test.ini" "MySectionIni" "Value1" $8 + WriteINIStr "$INSTDIR\test.ini" "MySectionIni" "Value2" $8 + WriteINIStr "$INSTDIR\test.ini" "IniOn" "Value1" $8 + + Call MyFunctionTest + + DeleteINIStr "$INSTDIR\test.ini" "IniOn" "Value1" + DeleteINISec "$INSTDIR\test.ini" "MySectionIni" + + ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1" + StrCmp $1 "" INIDelSuccess + MessageBox MB_OK "DeleteINISec failed" + INIDelSuccess: + + ClearErrors + ReadRegStr $1 HKCR "software\microsoft" xyz_cc_does_not_exist + IfErrors 0 NoError + MessageBox MB_OK "could not read from HKCR\software\microsoft\xyz_cc_does_not_exist" + Goto ErrorYay + NoError: + MessageBox MB_OK "read '$1' from HKCR\software\microsoft\xyz_cc_does_not_exist" + ErrorYay: + +SectionEnd + +Section "Test CreateShortcut" + + SectionIn 1 2 3 + + Call CSCTest + +SectionEnd + +SectionGroup Group2 + +!define ASSERT `!insertmacro ASSERT "${U+24}{__FILE__}" ${U+24}{__LINE__} ` +!macro ASSERT __file __line __xpr +${__xpr} +2 +MessageBox MB_ICONSTOP `ASSERT: ${__xpr} (${__file}:${__line})` +!macroend + +Section "Integer" +IntOp $0 0xffffffff >> 31 +${ASSERT} `IntCmpU $0 -1` +IntOp $0 0xffffffff >>> 31 +${ASSERT} `IntCmpU $0 1` +IntOp $0 1 << 31 +${ASSERT} `IntCmpU $0 0x80000000` +IntOp $0 0x80000000 ^ 0x40000000 +${ASSERT} `IntCmpU $0 0xC0000000` +ClearErrors +IntOp $0 1 / 0 +${ASSERT} `IfErrors ` ; Division by zero must set the error flag +${ASSERT} `IntCmpU $0 0` ; Unspecified result, hopefully it's zero +SectionEnd + +Section "Test Branching" + + BeginTestSection: + SectionIn 1 2 3 + + SetOutPath $INSTDIR + + IfFileExists "$INSTDIR\LogicLib.nsi" 0 BranchTest69 + + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to overwrite $INSTDIR\LogicLib.nsi?" IDNO NoOverwrite ; skipped if file doesn't exist + + BranchTest69: + + SetOverwrite ifnewer ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS + + NoOverwrite: + + File "LogicLib.nsi" ; skipped if answered no + SetOverwrite try ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS + + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to skip the rest of this section?" IDYES EndTestBranch + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to go back to the beginning of this section?" IDYES BeginTestSection + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to hide the installer and wait five seconds?" IDNO NoHide + + HideWindow + Sleep 5000 + BringToFront + + NoHide: + + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to call the function 5 times?" IDNO NoRecurse + + StrCpy $1 "x" + + LoopTest: + + Call myfunc + StrCpy $1 "x$1" + StrCmp $1 "xxxxxx" 0 LoopTest + + NoRecurse: + + EndTestBranch: + +SectionEnd + +SectionGroupEnd + +Section "Test CopyFiles" + + SectionIn 1 2 3 + + SetOutPath $INSTDIR\cpdest + CopyFiles "$WINDIR\*.ini" "$INSTDIR\cpdest" 0 + +SectionEnd + +SectionGroupEnd + +Section "Test Exec functions" TESTIDX + + SectionIn 1 2 3 + + SearchPath $1 notepad.exe + + MessageBox MB_OK "notepad.exe=$1" + Exec '"$1"' + ExecShell "open" '"$INSTDIR"' + Sleep 500 + BringToFront + +SectionEnd + +Section "Test ActiveX control registration" + + SectionIn 2 + + UnRegDLL "$SYSDIR\spin32.ocx" + Sleep 1000 + RegDLL "$SYSDIR\spin32.ocx" + Sleep 1000 + +SectionEnd + +;-------------------------------- + +Function "CSCTest" + + CreateDirectory "$SMPROGRAMS\Big NSIS Test" + SetOutPath $INSTDIR ; for working directory + CreateShortcut "$SMPROGRAMS\Big NSIS Test\Uninstall BIG NSIS Test.lnk" "$INSTDIR\bt-uninst.exe" ; use defaults for parameters, icon, etc. + ; this one will use notepad's icon, start it minimized, and give it a hotkey (of Ctrl+Shift+Q) + CreateShortcut "$SMPROGRAMS\Big NSIS Test\silent.nsi.lnk" "$INSTDIR\silent.nsi" "" "$WINDIR\notepad.exe" 0 SW_SHOWMINIMIZED CONTROL|SHIFT|Q + CreateShortcut "$SMPROGRAMS\Big NSIS Test\TheDir.lnk" "$INSTDIR\" "" "" 0 SW_SHOWMAXIMIZED CONTROL|SHIFT|Z + +FunctionEnd + +Function myfunc + + StrCpy $2 "MyTestVar=$1" + MessageBox MB_OK "myfunc: $2" + +FunctionEnd + +Function MyFunctionTest + + ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1" + StrCmp $1 $8 NoFailedMsg + MessageBox MB_OK "WriteINIStr failed" + + NoFailedMsg: + +FunctionEnd + +Function .onSelChange + + SectionGetText ${TESTIDX} $0 + StrCmp $0 "" e + SectionSetText ${TESTIDX} "" + Goto e2 +e: + SectionSetText ${TESTIDX} "TextInSection" +e2: + +FunctionEnd + +;-------------------------------- + +; Uninstaller + +UninstallText "This will uninstall example2. Hit next to continue." +UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-uninstall.ico" + +Section "Uninstall" + + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" + DeleteRegKey HKLM "SOFTWARE\NSISTest\BigNSISTest" + Delete "$INSTDIR\silent.nsi" + Delete "$INSTDIR\LogicLib.nsi" + Delete "$INSTDIR\bt-uninst.exe" + Delete "$INSTDIR\test.ini" + Delete "$SMPROGRAMS\Big NSIS Test\*.*" + RMDir "$SMPROGRAMS\BiG NSIS Test" + + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to remove the directory $INSTDIR\cpdest?" IDNO NoDelete + Delete "$INSTDIR\cpdest\*.*" + RMDir "$INSTDIR\cpdest" ; skipped if no + NoDelete: + + RMDir "$INSTDIR\MyProjectFamily\MyProject" + RMDir "$INSTDIR\MyProjectFamily" + RMDir "$INSTDIR" + + IfFileExists "$INSTDIR" 0 NoErrorMsg + MessageBox MB_OK "Note: $INSTDIR could not be removed!" IDOK 0 ; skipped if file doesn't exist + NoErrorMsg: + +SectionEnd diff --git a/tools/Examples/example1.nsi b/tools/Examples/example1.nsi new file mode 100644 index 0000000..e2a3802 --- /dev/null +++ b/tools/Examples/example1.nsi @@ -0,0 +1,45 @@ +; example1.nsi +; +; This script is perhaps one of the simplest NSIs you can make. All of the +; optional settings are left to their default settings. The installer simply +; prompts the user asking them where to install, and drops a copy of example1.nsi +; there. +; +; example2.nsi expands on this by adding a uninstaller and start menu shortcuts. + +;-------------------------------- + +; The name of the installer +Name "Example1" + +; The file to write +OutFile "example1.exe" + +; Request application privileges for Windows Vista +RequestExecutionLevel user + +; Build Unicode installer +Unicode True + +; The default installation directory +InstallDir $DESKTOP\Example1 + +;-------------------------------- + +; Pages + +Page directory +Page instfiles + +;-------------------------------- + +; The stuff to install +Section "" ;No components page, name is not important + + ; Set output path to the installation directory. + SetOutPath $INSTDIR + + ; Put file there + File example1.nsi + +SectionEnd diff --git a/tools/Examples/example2.nsi b/tools/Examples/example2.nsi new file mode 100644 index 0000000..0e179ef --- /dev/null +++ b/tools/Examples/example2.nsi @@ -0,0 +1,98 @@ +; example2.nsi +; +; This script is based on example1.nsi but it remembers the directory, +; has uninstall support and (optionally) installs start menu shortcuts. +; +; It will install example2.nsi into a directory that the user selects. +; +; See install-shared.nsi for a more robust way of checking for administrator rights. +; See install-per-user.nsi for a file association example. + +;-------------------------------- + +; The name of the installer +Name "Example2" + +; The file to write +OutFile "example2.exe" + +; Request application privileges for Windows Vista and higher +RequestExecutionLevel admin + +; Build Unicode installer +Unicode True + +; The default installation directory +InstallDir $PROGRAMFILES\Example2 + +; Registry key to check for directory (so if you install again, it will +; overwrite the old one automatically) +InstallDirRegKey HKLM "Software\NSIS_Example2" "Install_Dir" + +;-------------------------------- + +; Pages + +Page components +Page directory +Page instfiles + +UninstPage uninstConfirm +UninstPage instfiles + +;-------------------------------- + +; The stuff to install +Section "Example2 (required)" + + SectionIn RO + + ; Set output path to the installation directory. + SetOutPath $INSTDIR + + ; Put file there + File "example2.nsi" + + ; Write the installation path into the registry + WriteRegStr HKLM SOFTWARE\NSIS_Example2 "Install_Dir" "$INSTDIR" + + ; Write the uninstall keys for Windows + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example2" "DisplayName" "NSIS Example2" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example2" "UninstallString" '"$INSTDIR\uninstall.exe"' + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example2" "NoModify" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example2" "NoRepair" 1 + WriteUninstaller "$INSTDIR\uninstall.exe" + +SectionEnd + +; Optional section (can be disabled by the user) +Section "Start Menu Shortcuts" + + CreateDirectory "$SMPROGRAMS\Example2" + CreateShortcut "$SMPROGRAMS\Example2\Uninstall.lnk" "$INSTDIR\uninstall.exe" + CreateShortcut "$SMPROGRAMS\Example2\Example2 (MakeNSISW).lnk" "$INSTDIR\example2.nsi" + +SectionEnd + +;-------------------------------- + +; Uninstaller + +Section "Uninstall" + + ; Remove registry keys + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example2" + DeleteRegKey HKLM SOFTWARE\NSIS_Example2 + + ; Remove files and uninstaller + Delete $INSTDIR\example2.nsi + Delete $INSTDIR\uninstall.exe + + ; Remove shortcuts, if any + Delete "$SMPROGRAMS\Example2\*.lnk" + + ; Remove directories + RMDir "$SMPROGRAMS\Example2" + RMDir "$INSTDIR" + +SectionEnd diff --git a/tools/Examples/gfx.nsi b/tools/Examples/gfx.nsi new file mode 100644 index 0000000..05af852 --- /dev/null +++ b/tools/Examples/gfx.nsi @@ -0,0 +1,123 @@ +; gfx.nsi +; +; This script shows some examples of using all of the new +; graphic related additions introduced in NSIS 2 +; +; Written by Amir Szkeley 22nd July 2002 + +;-------------------------------- + +!macro BIMAGE IMAGE PARMS + Push $0 + GetTempFileName $0 + File /oname=$0 "${IMAGE}" + SetBrandingImage ${PARMS} $0 + Delete $0 + Pop $0 +!macroend + +;-------------------------------- + +Name "Graphical effects" + +OutFile "gfx.exe" + +; Adds an XP manifest to the installer +XPStyle on + +; Add branding image to the installer (an image placeholder on the side). +; It is not enough to just add the placeholder, we must set the image too... +; We will later set the image in every pre-page function. +; We can also set just one persistent image in .onGUIInit +AddBrandingImage left 100u + +; Sets the font of the installer +SetFont "Comic Sans MS" 8 + +; Just to make it three pages... +SubCaption 0 ": Yet another page..." +SubCaption 2 ": Yet another page..." +LicenseText "License page" +LicenseData "gfx.nsi" +DirText "Lets make a third page!" + +; Install dir +InstallDir "${NSISDIR}\Examples" + +; Request application privileges for Windows Vista +RequestExecutionLevel user + +;-------------------------------- + +; Pages +Page license licenseImage +Page custom customPage +Page directory dirImage +Page instfiles instImage + +;-------------------------------- + +Section "" + ; You can also use the BI_NEXT macro here... + MessageBox MB_YESNO "We can change the branding image from within a section too!$\nDo you want me to change it?" IDNO done + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Wizard\nsis.bmp" "" + done: + WriteUninstaller $INSTDIR\uninst.exe +SectionEnd + +;-------------------------------- + +Function licenseImage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" /RESIZETOFIT + MessageBox MB_YESNO 'Would you like to skip the license page?' IDNO no + Abort + no: +FunctionEnd + +Function customPage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" /RESIZETOFIT + MessageBox MB_OK 'This is a nice custom "page" with yet another image :P' + #insert install options/start menu/ here +FunctionEnd + +Function dirImage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Header\win.bmp" /RESIZETOFIT +FunctionEnd + +Function instImage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Wizard\llama.bmp" /RESIZETOFIT +FunctionEnd + +;-------------------------------- + +; Uninstall pages + +UninstPage uninstConfirm un.uninstImage +UninstPage custom un.customPage +UninstPage instfiles un.instImage + +Function un.uninstImage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp" /RESIZETOFIT +FunctionEnd + +Function un.customPage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Header\win.bmp" /RESIZETOFIT + MessageBox MB_OK 'This is a nice uninstaller custom "page" with yet another image :P' + #insert install options/start menu/ here +FunctionEnd + +Function un.instImage + !insertmacro BIMAGE "${NSISDIR}\Contrib\Graphics\Wizard\llama.bmp" /RESIZETOFIT +FunctionEnd + +;-------------------------------- + +; Uninstaller + +; Another page for uninstaller +UninstallText "Another page..." + +Section uninstall + MessageBox MB_OK "Bla" +SectionEnd + diff --git a/tools/Examples/install-per-user.nsi b/tools/Examples/install-per-user.nsi new file mode 100644 index 0000000..f925ac1 --- /dev/null +++ b/tools/Examples/install-per-user.nsi @@ -0,0 +1,181 @@ +/* + +This example script installs a simple application for a single user. + +If multiple users on the same machine run this installer, each user +will end up with a separate install that is not affected by +update/removal operations performed by other users. + +Per-user installers should only write to HKCU and +folders inside the users profile. + +*/ + +!define NAME "Per-user example" +!define REGPATH_UNINSTSUBKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" +Name "${NAME}" +OutFile "Install ${NAME}.exe" +Unicode True +RequestExecutionLevel User ; We don't need UAC elevation +InstallDir "" ; Don't set a default $InstDir so we can detect /D= and InstallDirRegKey +InstallDirRegKey HKCU "${REGPATH_UNINSTSUBKEY}" "UninstallString" + +!include LogicLib.nsh +!include WinCore.nsh +!include Integration.nsh + + +Page Directory +Page InstFiles + +Uninstpage UninstConfirm +Uninstpage InstFiles + + +Function .onInit + SetShellVarContext Current + + ${If} $InstDir == "" ; No /D= nor InstallDirRegKey? + GetKnownFolderPath $InstDir ${FOLDERID_UserProgramFiles} ; This folder only exists on Win7+ + StrCmp $InstDir "" 0 +2 + StrCpy $InstDir "$LocalAppData\Programs" ; Fallback directory + + StrCpy $InstDir "$InstDir\$(^Name)" + ${EndIf} +FunctionEnd + +Function un.onInit + SetShellVarContext Current +FunctionEnd + + +Section "Program files (Required)" + SectionIn Ro + + SetOutPath $InstDir + WriteUninstaller "$InstDir\Uninst.exe" + WriteRegStr HKCU "${REGPATH_UNINSTSUBKEY}" "DisplayName" "${NAME}" + WriteRegStr HKCU "${REGPATH_UNINSTSUBKEY}" "DisplayIcon" "$InstDir\MyApp.exe,0" + WriteRegStr HKCU "${REGPATH_UNINSTSUBKEY}" "UninstallString" '"$InstDir\Uninst.exe"' + WriteRegStr HKCU "${REGPATH_UNINSTSUBKEY}" "QuietUninstallString" '"$InstDir\Uninst.exe" /S' + WriteRegDWORD HKCU "${REGPATH_UNINSTSUBKEY}" "NoModify" 1 + WriteRegDWORD HKCU "${REGPATH_UNINSTSUBKEY}" "NoRepair" 1 + + !tempfile APP + !makensis '-v2 "-DOUTFILE=${APP}" "-DNAME=NSISPerUserAppExample" -DCOMPANY=Nullsoft "AppGen.nsi"' = 0 + File "/oname=$InstDir\MyApp.exe" "${APP}" ; Pretend that we have a real application to install + !delfile "${APP}" +SectionEnd + +Section "Start Menu shortcut" + CreateShortcut /NoWorkingDir "$SMPrograms\${NAME}.lnk" "$InstDir\MyApp.exe" +SectionEnd + +/* +This Section registers a fictional .test-nullsoft file extension and the Nullsoft.Test ProgId. +Proprietary file types are encouraged (by Microsoft) to use long file extensions and ProgIds that include the company name. + +When registering with "Open With" your executable should ideally have a somewhat unique name, +otherwise there could be a naming collision with a different application (with the same name) installed on the same machine. + +REGISTER_DEFAULTPROGRAMS is not defined because proprietary file types do not typically use the Default Programs functionality. +If your application registers a standard file type such as .mp3 or .html or a protocol like HTTP it should register as a Default Program. +It should also register as a client (https://docs.microsoft.com/en-us/windows/win32/shell/reg-middleware-apps#common-registration-elements-for-all-client-types). +*/ +!define ASSOC_EXT ".test-nullsoft" +!define ASSOC_PROGID "Nullsoft.Test" +!define ASSOC_VERB "MyApp" +!define ASSOC_APPEXE "MyApp.exe" +Section -ShellAssoc + # Register file type + WriteRegStr ShCtx "Software\Classes\${ASSOC_PROGID}\DefaultIcon" "" "$InstDir\${ASSOC_APPEXE},0" + ;WriteRegStr ShCtx "Software\Classes\${ASSOC_PROGID}\shell\${ASSOC_VERB}" "" "Nullsoft Test App" [Optional] + ;WriteRegStr ShCtx "Software\Classes\${ASSOC_PROGID}\shell\${ASSOC_VERB}" "MUIVerb" "@$InstDir\${ASSOC_APPEXE},-42" ; WinXP+ [Optional] Localizable verb display name + WriteRegStr ShCtx "Software\Classes\${ASSOC_PROGID}\shell\${ASSOC_VERB}\command" "" '"$InstDir\${ASSOC_APPEXE}" "%1"' + WriteRegStr ShCtx "Software\Classes\${ASSOC_EXT}" "" "${ASSOC_PROGID}" + + # Register "Open With" [Optional] + WriteRegNone ShCtx "Software\Classes\${ASSOC_EXT}\OpenWithList" "${ASSOC_APPEXE}" ; Win2000+ [Optional] + ;WriteRegNone ShCtx "Software\Classes\${ASSOC_EXT}\OpenWithProgids" "${ASSOC_PROGID}" ; WinXP+ [Optional] + WriteRegStr ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}\shell\open\command" "" '"$InstDir\${ASSOC_APPEXE}" "%1"' + WriteRegStr ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}" "FriendlyAppName" "Nullsoft Test App" ; [Optional] + WriteRegStr ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}" "ApplicationCompany" "Nullsoft" ; [Optional] + WriteRegNone ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}\SupportedTypes" "${ASSOC_EXT}" ; [Optional] Only allow "Open With" with specific extension(s) on WinXP+ + + # Register "Default Programs" [Optional] + !ifdef REGISTER_DEFAULTPROGRAMS + WriteRegStr ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}\Capabilities" "ApplicationDescription" "Shell association example test application" + WriteRegStr ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}\Capabilities\FileAssociations" "${ASSOC_EXT}" "${ASSOC_PROGID}" + WriteRegStr ShCtx "Software\RegisteredApplications" "Nullsoft Test App" "Software\Classes\Applications\${ASSOC_APPEXE}\Capabilities" + !endif + + ${NotifyShell_AssocChanged} +SectionEnd + + +Section -un.ShellAssoc + # Unregister file type + ClearErrors + DeleteRegKey ShCtx "Software\Classes\${ASSOC_PROGID}\shell\${ASSOC_VERB}" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\${ASSOC_PROGID}\shell" + ${IfNot} ${Errors} + DeleteRegKey ShCtx "Software\Classes\${ASSOC_PROGID}\DefaultIcon" + ${EndIf} + ReadRegStr $0 ShCtx "Software\Classes\${ASSOC_EXT}" "" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\${ASSOC_PROGID}" + ${IfNot} ${Errors} + ${AndIf} $0 == "${ASSOC_PROGID}" + DeleteRegValue ShCtx "Software\Classes\${ASSOC_EXT}" "" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\${ASSOC_EXT}" + ${EndIf} + + # Unregister "Open With" + DeleteRegKey ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}" + DeleteRegValue ShCtx "Software\Classes\${ASSOC_EXT}\OpenWithList" "${ASSOC_APPEXE}" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\${ASSOC_EXT}\OpenWithList" + DeleteRegValue ShCtx "Software\Classes\${ASSOC_EXT}\OpenWithProgids" "${ASSOC_PROGID}" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\${ASSOC_EXT}\OpenWithProgids" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\${ASSOC_EXT}" + + # Unregister "Default Programs" + !ifdef REGISTER_DEFAULTPROGRAMS + DeleteRegValue ShCtx "Software\RegisteredApplications" "Nullsoft Test App" + DeleteRegKey ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}\Capabilities" + DeleteRegKey /IfEmpty ShCtx "Software\Classes\Applications\${ASSOC_APPEXE}" + !endif + + # Attempt to clean up junk left behind by the Windows shell + DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Search\JumplistData" "$InstDir\${ASSOC_APPEXE}" + DeleteRegValue HKCU "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache" "$InstDir\${ASSOC_APPEXE}.FriendlyAppName" + DeleteRegValue HKCU "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache" "$InstDir\${ASSOC_APPEXE}.ApplicationCompany" + DeleteRegValue HKCU "Software\Microsoft\Windows\ShellNoRoam\MUICache" "$InstDir\${ASSOC_APPEXE}" ; WinXP + DeleteRegValue HKCU "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store" "$InstDir\${ASSOC_APPEXE}" + DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "${ASSOC_PROGID}_${ASSOC_EXT}" + DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "Applications\${ASSOC_APPEXE}_${ASSOC_EXT}" + DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${ASSOC_EXT}\OpenWithProgids" "${ASSOC_PROGID}" + DeleteRegKey /IfEmpty HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${ASSOC_EXT}\OpenWithProgids" + DeleteRegKey /IfEmpty HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${ASSOC_EXT}\OpenWithList" + DeleteRegKey /IfEmpty HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${ASSOC_EXT}" + ;DeleteRegKey HKCU "Software\Microsoft\Windows\Roaming\OpenWith\FileExts\${ASSOC_EXT}" + ;DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\${ASSOC_EXT}" + + ${NotifyShell_AssocChanged} +SectionEnd + +!macro DeleteFileOrAskAbort path + ClearErrors + Delete "${path}" + IfErrors 0 +3 + MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP 'Unable to delete "${path}"!' IDRETRY -3 IDIGNORE +2 + Abort "Aborted" +!macroend + +Section -Uninstall + !insertmacro DeleteFileOrAskAbort "$InstDir\MyApp.exe" + Delete "$InstDir\Uninst.exe" + RMDir "$InstDir" + DeleteRegKey HKCU "${REGPATH_UNINSTSUBKEY}" + + ${UnpinShortcut} "$SMPrograms\${NAME}.lnk" + Delete "$SMPrograms\${NAME}.lnk" +SectionEnd diff --git a/tools/Examples/install-shared.nsi b/tools/Examples/install-shared.nsi new file mode 100644 index 0000000..01e1fe1 --- /dev/null +++ b/tools/Examples/install-shared.nsi @@ -0,0 +1,95 @@ +/* + +This example script installs a simple application for all users on a machine. + +All-users installers should only write to HKLM, $ProgramFiles, $CommonFiles and the +"All context" versions of $LocalAppData, $Templates, $SMPrograms etc. + +It should not write to HKCU nor any folders in the users profile! +If the application requires writable template data in $AppData it +must copy the required files from a shared location the +first time a user launches the application. + +*/ + +!define NAME "All-users example" +!define REGPATH_UNINSTSUBKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" +Name "${NAME}" +OutFile "Install ${NAME}.exe" +Unicode True +RequestExecutionLevel Admin ; Request admin rights on WinVista+ (when UAC is turned on) +InstallDir "$ProgramFiles\$(^Name)" +InstallDirRegKey HKLM "${REGPATH_UNINSTSUBKEY}" "UninstallString" + +!include LogicLib.nsh +!include Integration.nsh + + +Page Directory +Page InstFiles + +Uninstpage UninstConfirm +Uninstpage InstFiles + + +!macro EnsureAdminRights + UserInfo::GetAccountType + Pop $0 + ${If} $0 != "admin" ; Require admin rights on WinNT4+ + MessageBox MB_IconStop "Administrator rights required!" + SetErrorLevel 740 ; ERROR_ELEVATION_REQUIRED + Quit + ${EndIf} +!macroend + +Function .onInit + SetShellVarContext All + !insertmacro EnsureAdminRights +FunctionEnd + +Function un.onInit + SetShellVarContext All + !insertmacro EnsureAdminRights +FunctionEnd + + +Section "Program files (Required)" + SectionIn Ro + + SetOutPath $InstDir + WriteUninstaller "$InstDir\Uninst.exe" + WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "DisplayName" "${NAME}" + WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "DisplayIcon" "$InstDir\MyApp.exe,0" + WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "UninstallString" '"$InstDir\Uninst.exe"' + WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "QuietUninstallString" '"$InstDir\Uninst.exe" /S' + WriteRegDWORD HKLM "${REGPATH_UNINSTSUBKEY}" "NoModify" 1 + WriteRegDWORD HKLM "${REGPATH_UNINSTSUBKEY}" "NoRepair" 1 + + !tempfile APP + !makensis '-v2 "-DOUTFILE=${APP}" "-DNAME=NSISSharedAppExample" -DCOMPANY=Nullsoft "AppGen.nsi"' = 0 + File "/oname=$InstDir\MyApp.exe" "${APP}" ; Pretend that we have a real application to install + !delfile "${APP}" +SectionEnd + +Section "Start Menu shortcut" + CreateShortcut /NoWorkingDir "$SMPrograms\${NAME}.lnk" "$InstDir\MyApp.exe" +SectionEnd + + +!macro DeleteFileOrAskAbort path + ClearErrors + Delete "${path}" + IfErrors 0 +3 + MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP 'Unable to delete "${path}"!' IDRETRY -3 IDIGNORE +2 + Abort "Aborted" +!macroend + +Section -Uninstall + !insertmacro DeleteFileOrAskAbort "$InstDir\MyApp.exe" + Delete "$InstDir\Uninst.exe" + RMDir "$InstDir" + DeleteRegKey HKLM "${REGPATH_UNINSTSUBKEY}" + + ${UnpinShortcut} "$SMPrograms\${NAME}.lnk" + Delete "$SMPrograms\${NAME}.lnk" +SectionEnd diff --git a/tools/Examples/languages.nsi b/tools/Examples/languages.nsi new file mode 100644 index 0000000..f6bd39c --- /dev/null +++ b/tools/Examples/languages.nsi @@ -0,0 +1,192 @@ +; languages.nsi +; +; This is an example of a multilingual installer +; The user can select the language on startup + +!pragma warning error all + +;-------------------------------- + +OutFile languages.exe + +XPStyle on + +RequestExecutionLevel user + +Unicode True +;-------------------------------- + +Page license +Page components +Page instfiles + +;-------------------------------- + +; First is default +LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Czech.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Dutch.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\French.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\German.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Korean.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Russian.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Spanish.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Swedish.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\TradChinese.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf" +LoadLanguageFile "${NSISDIR}\Contrib\Language files\Slovak.nlf" + +; License data +; Not exactly translated, but it shows what's needed +LicenseLangString myLicenseData ${LANG_ENGLISH} "bigtest.nsi" +LicenseLangString myLicenseData ${LANG_CZECH} "WordFuncTest.nsi" +LicenseLangString myLicenseData ${LANG_DUTCH} "waplugin.nsi" +LicenseLangString myLicenseData ${LANG_FRENCH} "example1.nsi" +LicenseLangString myLicenseData ${LANG_GERMAN} "example2.nsi" +LicenseLangString myLicenseData ${LANG_KOREAN} "gfx.nsi" +LicenseLangString myLicenseData ${LANG_RUSSIAN} "languages.nsi" +LicenseLangString myLicenseData ${LANG_SPANISH} "LogicLib.nsi" +LicenseLangString myLicenseData ${LANG_SWEDISH} "makensis.nsi" +LicenseLangString myLicenseData ${LANG_TRADCHINESE} "one-section.nsi" +LicenseLangString myLicenseData ${LANG_SIMPCHINESE} "primes.nsi" +LicenseLangString myLicenseData ${LANG_SLOVAK} "silent.nsi" + +LicenseData $(myLicenseData) + +; Set name using the normal interface (Name command) +LangString Name ${LANG_ENGLISH} "English" +LangString Name ${LANG_CZECH} "Czech" +LangString Name ${LANG_DUTCH} "Dutch" +LangString Name ${LANG_FRENCH} "French" +LangString Name ${LANG_GERMAN} "German" +LangString Name ${LANG_KOREAN} "Korean" +LangString Name ${LANG_RUSSIAN} "Russian" +LangString Name ${LANG_SPANISH} "Spanish" +LangString Name ${LANG_SWEDISH} "Swedish" +LangString Name ${LANG_TRADCHINESE} "Traditional Chinese" +LangString Name ${LANG_SIMPCHINESE} "Simplified Chinese" +LangString Name ${LANG_SLOVAK} "Slovak" + +Name $(Name) + +; Directly change the inner lang strings (Same as ComponentText) +LangString ^ComponentsText ${LANG_ENGLISH} "English component page" +LangString ^ComponentsText ${LANG_CZECH} "Czech component page" +LangString ^ComponentsText ${LANG_DUTCH} "Dutch component page" +LangString ^ComponentsText ${LANG_FRENCH} "French component page" +LangString ^ComponentsText ${LANG_GERMAN} "German component page" +LangString ^ComponentsText ${LANG_KOREAN} "Korean component page" +LangString ^ComponentsText ${LANG_RUSSIAN} "Russian component page" +LangString ^ComponentsText ${LANG_SPANISH} "Spanish component page" +LangString ^ComponentsText ${LANG_SWEDISH} "Swedish component page" +LangString ^ComponentsText ${LANG_TRADCHINESE} "Traditional Chinese component page" +LangString ^ComponentsText ${LANG_SIMPCHINESE} "Simplified Chinese component page" +LangString ^ComponentsText ${LANG_SLOVAK} "Slovak component page" + +; Set one text for all languages (simply don't use a LangString) +CompletedText "Languages example completed" + +; A LangString for the section name +LangString Sec1Name ${LANG_ENGLISH} "English section #1" +LangString Sec1Name ${LANG_CZECH} "Czech section #1" +LangString Sec1Name ${LANG_DUTCH} "Dutch section #1" +LangString Sec1Name ${LANG_FRENCH} "French section #1" +LangString Sec1Name ${LANG_GERMAN} "German section #1" +LangString Sec1Name ${LANG_KOREAN} "Korean section #1" +LangString Sec1Name ${LANG_RUSSIAN} "Russian section #1" +LangString Sec1Name ${LANG_SPANISH} "Spanish section #1" +LangString Sec1Name ${LANG_SWEDISH} "Swedish section #1" +LangString Sec1Name ${LANG_TRADCHINESE} "Traditional Chinese section #1" +LangString Sec1Name ${LANG_SIMPCHINESE} "Simplified Chinese section #1" +LangString Sec1Name ${LANG_SLOVAK} "Slovak section #1" + +; A multilingual message +LangString Message ${LANG_ENGLISH} "English message" +LangString Message ${LANG_CZECH} "Czech message" +LangString Message ${LANG_DUTCH} "Dutch message" +LangString Message ${LANG_FRENCH} "French message" +LangString Message ${LANG_GERMAN} "German message" +LangString Message ${LANG_KOREAN} "Korean message" +LangString Message ${LANG_RUSSIAN} "Russian message" +LangString Message ${LANG_SPANISH} "Spanish message" +LangString Message ${LANG_SWEDISH} "Swedish message" +LangString Message ${LANG_TRADCHINESE} "Traditional Chinese message" +LangString Message ${LANG_SIMPCHINESE} "Simplified Chinese message" +LangString Message ${LANG_SLOVAK} "Slovak message" + +;-------------------------------- + +;Section names set by Language strings +;It works with ! too +Section !$(Sec1Name) sec1 + MessageBox MB_OK $(Message) +SectionEnd + +; The old, slow, wasteful way +; Look at this section and see why LangString is so much easier +Section "Section number two" + StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +2 + MessageBox MB_OK "Installing English stuff" + StrCmp $LANGUAGE ${LANG_CZECH} 0 +2 + MessageBox MB_OK "Installing Czech stuff" + StrCmp $LANGUAGE ${LANG_DUTCH} 0 +2 + MessageBox MB_OK "Installing Dutch stuff" + StrCmp $LANGUAGE ${LANG_FRENCH} 0 +2 + MessageBox MB_OK "Installing French stuff" + StrCmp $LANGUAGE ${LANG_GERMAN} 0 +2 + MessageBox MB_OK "Installing German stuff" + StrCmp $LANGUAGE ${LANG_KOREAN} 0 +2 + MessageBox MB_OK "Installing Korean stuff" + StrCmp $LANGUAGE ${LANG_RUSSIAN} 0 +2 + MessageBox MB_OK "Installing Russian stuff" + StrCmp $LANGUAGE ${LANG_SPANISH} 0 +2 + MessageBox MB_OK "Installing Spanish stuff" + StrCmp $LANGUAGE ${LANG_SWEDISH} 0 +2 + MessageBox MB_OK "Installing Swedish stuff" + StrCmp $LANGUAGE ${LANG_TRADCHINESE} 0 +2 + MessageBox MB_OK "Installing Traditional Chinese stuff" + StrCmp $LANGUAGE ${LANG_SIMPCHINESE} 0 +2 + MessageBox MB_OK "Installing Simplified Chinese stuff" + StrCmp $LANGUAGE ${LANG_SLOVAK} 0 +2 + MessageBox MB_OK "Installing Slovak stuff" +SectionEnd + +;-------------------------------- + +Function .onInit + + ;Language selection dialog + + Push "" + Push ${LANG_ENGLISH} + Push English + Push ${LANG_CZECH} + Push Czech + Push ${LANG_DUTCH} + Push Dutch + Push ${LANG_FRENCH} + Push French + Push ${LANG_GERMAN} + Push German + Push ${LANG_KOREAN} + Push Korean + Push ${LANG_RUSSIAN} + Push Russian + Push ${LANG_SPANISH} + Push Spanish + Push ${LANG_SWEDISH} + Push Swedish + Push ${LANG_TRADCHINESE} + Push "Traditional Chinese" + Push ${LANG_SIMPCHINESE} + Push "Simplified Chinese" + Push ${LANG_SLOVAK} + Push Slovak + Push A ; A means auto count languages + ; for the auto count to work the first empty push (Push "") must remain + LangDLL::LangDialog "Installer Language" "Please select the language of the installer" + + Pop $LANGUAGE + StrCmp $LANGUAGE "cancel" 0 +2 + Abort +FunctionEnd \ No newline at end of file diff --git a/tools/Examples/makensis.nsi b/tools/Examples/makensis.nsi new file mode 100644 index 0000000..df0ecd0 --- /dev/null +++ b/tools/Examples/makensis.nsi @@ -0,0 +1,1093 @@ +;NSIS Setup Script +;-------------------------------- + +!pragma warning error all +!pragma warning warning 7010 ; File /NonFatal + +!ifdef VER_MAJOR & VER_MINOR + !define /ifndef VER_REVISION 0 + !define /ifndef VER_BUILD 0 +!endif + +!define /ifndef VERSION 'anonymous-build' + +;-------------------------------- +;Configuration + +!if ${NSIS_PTR_SIZE} > 4 + !define BITS 64 + !define NAMESUFFIX " (64 bit)" +!else + !define BITS 32 + !define NAMESUFFIX "" +!endif + +!ifndef OUTFILE + !define OUTFILE "..\nsis${BITS}-${VERSION}-setup.exe" + !searchreplace OUTFILE "${OUTFILE}" nsis32 nsis +!endif + +OutFile "${OUTFILE}" +Unicode true +SetCompressor /SOLID lzma + +InstType "Full" +InstType "Lite" +InstType "Minimal" + +InstallDir $PROGRAMFILES${BITS}\NSIS +InstallDirRegKey HKLM Software\NSIS "" + +RequestExecutionLevel admin + +;-------------------------------- +;Header Files + +!include "MUI2.nsh" +!include "Sections.nsh" +!include "LogicLib.nsh" +!include "Memento.nsh" +!include "WordFunc.nsh" +!include "Util.nsh" +!include "Integration.nsh" + +;-------------------------------- +;Configuration + +;Names +Name "NSIS" +Caption "NSIS ${VERSION}${NAMESUFFIX} Setup" + +!define REG_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" + +;Memento Settings +!define MEMENTO_REGISTRY_ROOT HKLM +!define MEMENTO_REGISTRY_KEY "${REG_UNINST_KEY}" + +;Interface Settings +!define MUI_ABORTWARNING + +!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\nsis3-install.ico" +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\nsis3-uninstall.ico" + +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_RIGHT +!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis3-branding-r.bmp" +!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\nsis3-branding.bmp" + +!define MUI_COMPONENTSPAGE_SMALLDESC + +;Pages +!define MUI_WELCOMEPAGE_TITLE "Welcome to the NSIS ${VERSION} Setup Wizard" +!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of NSIS (Nullsoft Scriptable Install System) ${VERSION}, the next generation of the Windows installer and uninstaller system that doesn't suck and isn't huge.$\r$\n$\r$\nNSIS includes a Modern User Interface, LZMA compression, support for multiple languages and an easy plug-in system.$\r$\n$\r$\n$_CLICK" + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "..\COPYING" +!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD +Page custom PageReinstall PageLeaveReinstall +!endif +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES + +!define MUI_FINISHPAGE_LINK "Visit the NSIS site for the latest news, FAQs and support" +!define MUI_FINISHPAGE_LINK_LOCATION "http://nsis.sf.net/" + +!define MUI_FINISHPAGE_RUN "$INSTDIR\NSIS.exe" +!define MUI_FINISHPAGE_NOREBOOTSUPPORT + +!define MUI_FINISHPAGE_SHOWREADME +!define MUI_FINISHPAGE_SHOWREADME_TEXT "Show release notes" +!define MUI_FINISHPAGE_SHOWREADME_FUNCTION ShowReleaseNotes + +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + +!insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Version information + +!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD +VIProductVersion ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD} +VIAddVersionKey "FileVersion" "${VERSION}" +VIAddVersionKey "FileDescription" "NSIS Setup" +VIAddVersionKey "LegalCopyright" "http://nsis.sf.net/License" +!endif + +;-------------------------------- +;Installer Sections + +!macro InstallPlugin pi + !if ${BITS} >= 64 + File "/oname=$InstDir\Plugins\amd64-unicode\${pi}.dll" ..\Plugins\amd64-unicode\${pi}.dll + !else + File "/oname=$InstDir\Plugins\x86-ansi\${pi}.dll" ..\Plugins\x86-ansi\${pi}.dll + File "/oname=$InstDir\Plugins\x86-unicode\${pi}.dll" ..\Plugins\x86-unicode\${pi}.dll + !endif +!macroend + +!macro InstallStub stub + !if ${BITS} >= 64 + File ..\Stubs\${stub}-amd64-unicode + !else + File ..\Stubs\${stub}-x86-ansi + File ..\Stubs\${stub}-x86-unicode + !endif +!macroend + +${MementoSection} "NSIS Core Files (required)" SecCore + + SetDetailsPrint textonly + DetailPrint "Installing NSIS Core Files..." + SetDetailsPrint listonly + + SectionIn 1 2 3 RO + SetOutPath $INSTDIR + + IfFileExists $INSTDIR\nsisconf.nsi "" +2 + Rename $INSTDIR\nsisconf.nsi $INSTDIR\nsisconf.nsh + SetOverwrite off + File ..\nsisconf.nsh + + SetOverwrite on + File ..\makensis.exe + File ..\makensisw.exe + File ..\COPYING + File ..\NSIS.chm + !pragma verifychm "..\NSIS.chm" + !if /FileExists "..\NSIS.exe" + !if /FileExists "..\NSIS.exe.manifest" + File "..\NSIS.exe.manifest" + !endif + !else + !define NO_NSISMENU_HTML 1 + !makensis '-v2 "NSISMenu.nsi" "-XOutFile ..\NSIS.exe"' = 0 + !endif + File ..\NSIS.exe + + SetOutPath $INSTDIR\Bin + File ..\Bin\makensis.exe +!ifdef USE_NEW_ZLIB + File ..\Bin\zlib.dll +!else + File ..\Bin\zlib1.dll +!endif + + SetOutPath $INSTDIR\Stubs + File ..\Stubs\uninst + !insertmacro InstallStub bzip2 + !insertmacro InstallStub bzip2_solid + !insertmacro InstallStub lzma + !insertmacro InstallStub lzma_solid + !insertmacro InstallStub zlib + !insertmacro InstallStub zlib_solid + + + SetOutPath $INSTDIR\Include + File ..\Include\WinMessages.nsh + File ..\Include\Sections.nsh + File ..\Include\Library.nsh + File ..\Include\UpgradeDLL.nsh + File ..\Include\LogicLib.nsh + File ..\Include\StrFunc.nsh + File ..\Include\Colors.nsh + File ..\Include\FileFunc.nsh + File ..\Include\TextFunc.nsh + File ..\Include\WordFunc.nsh + File ..\Include\WinVer.nsh + File ..\Include\x64.nsh + File ..\Include\Memento.nsh + File ..\Include\LangFile.nsh + File ..\Include\InstallOptions.nsh + File ..\Include\MultiUser.nsh + File ..\Include\VB6RunTime.nsh + File ..\Include\Util.nsh + File ..\Include\Integration.nsh + File ..\Include\WinCore.nsh + + SetOutPath $INSTDIR\Include\Win + File ..\Include\Win\WinDef.nsh + File ..\Include\Win\WinError.nsh + File ..\Include\Win\WinNT.nsh + File ..\Include\Win\WinUser.nsh + File ..\Include\Win\COM.nsh + File ..\Include\Win\Propkey.nsh + File ..\Include\Win\RestartManager.nsh + + SetOutPath $INSTDIR\Docs\StrFunc + File ..\Docs\StrFunc\StrFunc.txt + + SetOutPath $INSTDIR\Docs\MultiUser + File ..\Docs\MultiUser\Readme.html + + SetOutPath $INSTDIR\Docs\makensisw + File ..\Docs\makensisw\*.txt + + !ifndef NO_NSISMENU_HTML + SetOutPath $INSTDIR\Menu + File ..\Menu\*.html + SetOutPath $INSTDIR\Menu\images + File ..\Menu\images\header.gif + File ..\Menu\images\line.gif + File ..\Menu\images\site.gif + !endif + + Delete $INSTDIR\makensis.htm + Delete $INSTDIR\Docs\*.html + Delete $INSTDIR\Docs\style.css + RMDir $INSTDIR\Docs + + SetOutPath $INSTDIR\Bin + !if ${BITS} >= 64 + File /NonFatal ..\Bin\RegTool-x86.bin + File ..\Bin\RegTool-amd64.bin + !else + File ..\Bin\RegTool-x86.bin + !if /FileExists ..\Bin\RegTool-amd64.bin ; It is unlikely that this exists, avoid the /NonFatal warning. + File ..\Bin\RegTool-amd64.bin + !endif + !endif + + CreateDirectory $INSTDIR\Plugins\x86-ansi + CreateDirectory $INSTDIR\Plugins\x86-unicode + !if ${BITS} >= 64 + CreateDirectory $INSTDIR\Plugins\amd64-unicode + !endif + !insertmacro InstallPlugin TypeLib + + ReadRegStr $R0 HKCR ".nsi" "" + StrCmp $R0 "NSISFile" 0 +2 + DeleteRegKey HKCR "NSISFile" + + WriteRegStr HKCR ".nsi" "" "NSIS.Script" + WriteRegStr HKCR ".nsi" "PerceivedType" "text" + WriteRegStr HKCR "NSIS.Script" "" "NSIS Script File" + WriteRegStr HKCR "NSIS.Script\DefaultIcon" "" "$INSTDIR\makensisw.exe,1" + ReadRegStr $R0 HKCR "NSIS.Script\shell\open\command" "" + ${If} $R0 == "" + WriteRegStr HKCR "NSIS.Script\shell" "" "open" + WriteRegStr HKCR "NSIS.Script\shell\open\command" "" 'notepad.exe "%1"' + ${EndIf} + WriteRegStr HKCR "NSIS.Script\shell\compile" "" "Compile NSIS Script" + WriteRegStr HKCR "NSIS.Script\shell\compile\command" "" '"$INSTDIR\makensisw.exe" "%1"' + WriteRegStr HKCR "NSIS.Script\shell\compile-compressor" "" "Compile NSIS Script (Choose Compressor)" + WriteRegStr HKCR "NSIS.Script\shell\compile-compressor\command" "" '"$INSTDIR\makensisw.exe" /ChooseCompressor "%1"' + + ReadRegStr $R0 HKCR ".nsh" "" + StrCmp $R0 "NSHFile" 0 +2 + DeleteRegKey HKCR "NSHFile" + + WriteRegStr HKCR ".nsh" "" "NSIS.Header" + WriteRegStr HKCR ".nsh" "PerceivedType" "text" + WriteRegStr HKCR "NSIS.Header" "" "NSIS Header File" + WriteRegStr HKCR "NSIS.Header\DefaultIcon" "" "$INSTDIR\makensisw.exe,2" + ReadRegStr $R0 HKCR "NSIS.Header\shell\open\command" "" + ${If} $R0 == "" + WriteRegStr HKCR "NSIS.Header\shell" "" "open" + WriteRegStr HKCR "NSIS.Header\shell\open\command" "" 'notepad.exe "%1"' + ${EndIf} + + ${NotifyShell_AssocChanged} + +${MementoSectionEnd} + +${MementoSection} "Script Examples" SecExample + + SetDetailsPrint textonly + DetailPrint "Installing Script Examples..." + SetDetailsPrint listonly + + SectionIn 1 2 + SetOutPath $INSTDIR\Examples + File ..\Examples\makensis.nsi + File ..\Examples\example1.nsi + File ..\Examples\example2.nsi + File ..\Examples\AppGen.nsi + File ..\Examples\install-per-user.nsi + File ..\Examples\install-shared.nsi + File ..\Examples\waplugin.nsi + File ..\Examples\bigtest.nsi + File ..\Examples\primes.nsi + File ..\Examples\rtest.nsi + File ..\Examples\gfx.nsi + File ..\Examples\one-section.nsi + File ..\Examples\languages.nsi + File ..\Examples\Library.nsi + File ..\Examples\VersionInfo.nsi + File ..\Examples\LogicLib.nsi + File ..\Examples\silent.nsi + File ..\Examples\StrFunc.nsi + File ..\Examples\FileFunc.nsi + File ..\Examples\FileFunc.ini + File ..\Examples\FileFuncTest.nsi + File ..\Examples\TextFunc.nsi + File ..\Examples\TextFunc.ini + File ..\Examples\TextFuncTest.nsi + File ..\Examples\WordFunc.nsi + File ..\Examples\WordFunc.ini + File ..\Examples\WordFuncTest.nsi + File ..\Examples\Memento.nsi + File ..\Examples\MultiUser.nsi + File ..\Examples\unicode.nsi + File ..\Examples\NSISMenu.nsi + + SetOutPath $INSTDIR\Examples\Plugin + File ..\Examples\Plugin\exdll.c + File ..\Examples\Plugin\exdll.dpr + File ..\Examples\Plugin\exdll.dsp + File ..\Examples\Plugin\exdll.dsw + File ..\Examples\Plugin\exdll_with_unit.dpr + File ..\Examples\Plugin\exdll-vs2008.sln + File ..\Examples\Plugin\exdll-vs2008.vcproj + File ..\Examples\Plugin\extdll.inc + File ..\Examples\Plugin\nsis.pas + + SetOutPath $INSTDIR\Examples\Plugin\nsis + File ..\Examples\Plugin\nsis\pluginapi.h + File /nonfatal ..\Examples\Plugin\nsis\pluginapi*.lib + File ..\Examples\Plugin\nsis\api.h + File ..\Examples\Plugin\nsis\nsis_tchar.h + +${MementoSectionEnd} + +${MementoSection} "Start Menu Shortcut" SecShortcuts + + SetDetailsPrint textonly + DetailPrint "Installing Start Menu shortcut..." + SetDetailsPrint listonly + + SectionIn 1 2 + SetOutPath $INSTDIR + CreateShortcut "$SMPROGRAMS\NSIS${NAMESUFFIX}.lnk" "$INSTDIR\NSIS.exe" + +${MementoSectionEnd} + +SectionGroup "User Interfaces" SecInterfaces + +${MementoSection} "Modern User Interface" SecInterfacesModernUI + + SetDetailsPrint textonly + DetailPrint "Installing User Interfaces | Modern User Interface..." + SetDetailsPrint listonly + + SectionIn 1 2 + + SetOutPath "$INSTDIR\Examples\Modern UI" + File "..\Examples\Modern UI\Basic.nsi" + File "..\Examples\Modern UI\HeaderBitmap.nsi" + File "..\Examples\Modern UI\MultiLanguage.nsi" + File "..\Examples\Modern UI\StartMenu.nsi" + File "..\Examples\Modern UI\WelcomeFinish.nsi" + + SetOutPath "$INSTDIR\Contrib\Modern UI" + File "..\Contrib\Modern UI\System.nsh" + File "..\Contrib\Modern UI\ioSpecial.ini" + + SetOutPath "$INSTDIR\Docs\Modern UI" + File "..\Docs\Modern UI\Readme.html" + File "..\Docs\Modern UI\Changelog.txt" + File "..\Docs\Modern UI\License.txt" + + SetOutPath "$INSTDIR\Docs\Modern UI\images" + File "..\Docs\Modern UI\images\header.gif" + File "..\Docs\Modern UI\images\screen1.png" + File "..\Docs\Modern UI\images\screen2.png" + File "..\Docs\Modern UI\images\open.gif" + File "..\Docs\Modern UI\images\closed.gif" + + SetOutPath $INSTDIR\Contrib\UIs + File "..\Contrib\UIs\modern.exe" + File "..\Contrib\UIs\modern_headerbmp.exe" + File "..\Contrib\UIs\modern_headerbmpr.exe" + File "..\Contrib\UIs\modern_nodesc.exe" + File "..\Contrib\UIs\modern_smalldesc.exe" + + SetOutPath $INSTDIR\Include + File "..\Include\MUI.nsh" + + SetOutPath "$INSTDIR\Contrib\Modern UI 2" + File "..\Contrib\Modern UI 2\Deprecated.nsh" + File "..\Contrib\Modern UI 2\Interface.nsh" + File "..\Contrib\Modern UI 2\Localization.nsh" + File "..\Contrib\Modern UI 2\MUI2.nsh" + File "..\Contrib\Modern UI 2\Pages.nsh" + + SetOutPath "$INSTDIR\Contrib\Modern UI 2\Pages" + File "..\Contrib\Modern UI 2\Pages\Components.nsh" + File "..\Contrib\Modern UI 2\Pages\Directory.nsh" + File "..\Contrib\Modern UI 2\Pages\Finish.nsh" + File "..\Contrib\Modern UI 2\Pages\InstallFiles.nsh" + File "..\Contrib\Modern UI 2\Pages\License.nsh" + File "..\Contrib\Modern UI 2\Pages\StartMenu.nsh" + File "..\Contrib\Modern UI 2\Pages\UninstallConfirm.nsh" + File "..\Contrib\Modern UI 2\Pages\Welcome.nsh" + + SetOutPath "$INSTDIR\Docs\Modern UI 2" + File "..\Docs\Modern UI 2\Readme.html" + File "..\Docs\Modern UI 2\License.txt" + + SetOutPath "$INSTDIR\Docs\Modern UI 2\images" + File "..\Docs\Modern UI 2\images\header.gif" + File "..\Docs\Modern UI 2\images\screen1.png" + File "..\Docs\Modern UI 2\images\screen2.png" + File "..\Docs\Modern UI 2\images\open.gif" + File "..\Docs\Modern UI 2\images\closed.gif" + + SetOutPath $INSTDIR\Include + File "..\Include\MUI2.nsh" + +${MementoSectionEnd} + +${MementoSection} "Default User Interface" SecInterfacesDefaultUI + + SetDetailsPrint textonly + DetailPrint "Installing User Interfaces | Default User Interface..." + SetDetailsPrint listonly + + SectionIn 1 + + SetOutPath "$INSTDIR\Contrib\UIs" + File "..\Contrib\UIs\default.exe" + +${MementoSectionEnd} + +${MementoSection} "Tiny User Interface" SecInterfacesTinyUI + + SetDetailsPrint textonly + DetailPrint "Installing User Interfaces | Tiny User Interface..." + SetDetailsPrint listonly + + SectionIn 1 + + SetOutPath "$INSTDIR\Contrib\UIs" + File "..\Contrib\UIs\sdbarker_tiny.exe" + +${MementoSectionEnd} + +SectionGroupEnd + +${MementoSection} "Graphics" SecGraphics + + SetDetailsPrint textonly + DetailPrint "Installing Graphics..." + SetDetailsPrint listonly + + SectionIn 1 + + Delete $INSTDIR\Contrib\Icons\*.ico + Delete $INSTDIR\Contrib\Icons\*.bmp + RMDir $INSTDIR\Contrib\Icons + SetOutPath $INSTDIR\Contrib\Graphics + File /r "..\Contrib\Graphics\*.ico" + File /r "..\Contrib\Graphics\*.bmp" +${MementoSectionEnd} + +${MementoSection} "Language Files" SecLangFiles + + SetDetailsPrint textonly + DetailPrint "Installing Language Files..." + SetDetailsPrint listonly + + SectionIn 1 + + SetOutPath "$INSTDIR\Contrib\Language files" + File "..\Contrib\Language files\*.nlf" + + SetOutPath $INSTDIR\Bin + File ..\Bin\MakeLangID.exe + + ${If} ${SectionIsSelected} ${SecInterfacesModernUI} + SetOutPath "$INSTDIR\Contrib\Language files" + File "..\Contrib\Language files\*.nsh" + ${EndIf} + +${MementoSectionEnd} + +SectionGroup "Tools" SecTools + +${MementoSection} "Zip2Exe" SecToolsZ2E + + SetDetailsPrint textonly + DetailPrint "Installing Tools | Zip2Exe..." + SetDetailsPrint listonly + + SectionIn 1 + + SetOutPath $INSTDIR\Bin + File ..\Bin\zip2exe.exe + SetOutPath $INSTDIR\Contrib\zip2exe + File ..\Contrib\zip2exe\Base.nsh + File ..\Contrib\zip2exe\Modern.nsh + File ..\Contrib\zip2exe\Classic.nsh + +${MementoSectionEnd} + +SectionGroupEnd + +SectionGroup "Plug-ins" SecPluginsPlugins + +${MementoSection} "Banner" SecPluginsBanner + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | Banner..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin Banner + SetOutPath $INSTDIR\Docs\Banner + File ..\Docs\Banner\Readme.txt + SetOutPath $INSTDIR\Examples\Banner + File ..\Examples\Banner\Example.nsi +${MementoSectionEnd} + +${MementoSection} "Language DLL" SecPluginsLangDLL + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | Language DLL..." + SetDetailsPrint listonly + + SectionIn 1 + !insertmacro InstallPlugin LangDLL +${MementoSectionEnd} + +${MementoSection} "nsExec" SecPluginsnsExec + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | nsExec..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin nsExec + SetOutPath $INSTDIR\Docs\nsExec + File ..\Docs\nsExec\nsExec.txt + SetOutPath $INSTDIR\Examples\nsExec + File ..\Examples\nsExec\test.nsi +${MementoSectionEnd} + +${MementoSection} "Splash" SecPluginsSplash + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | Splash..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin Splash + SetOutPath $INSTDIR\Docs\Splash + File ..\Docs\Splash\splash.txt + SetOutPath $INSTDIR\Examples\Splash + File ..\Examples\Splash\Example.nsi +${MementoSectionEnd} + +${MementoSection} "AdvSplash" SecPluginsSplashT + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | AdvSplash..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin AdvSplash + SetOutPath $INSTDIR\Docs\AdvSplash + File ..\Docs\AdvSplash\advsplash.txt + SetOutPath $INSTDIR\Examples\AdvSplash + File ..\Examples\AdvSplash\Example.nsi +${MementoSectionEnd} + +${MementoSection} "BgImage" SecPluginsBgImage + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | BgImage..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin BgImage + SetOutPath $INSTDIR\Docs\BgImage + File ..\Docs\BgImage\BgImage.txt + SetOutPath $INSTDIR\Examples\BgImage + File ..\Examples\BgImage\Example.nsi +${MementoSectionEnd} + +${MementoSection} "InstallOptions" SecPluginsIO + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | InstallOptions..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin InstallOptions + SetOutPath $INSTDIR\Docs\InstallOptions + File ..\Docs\InstallOptions\Readme.html + File ..\Docs\InstallOptions\Changelog.txt + SetOutPath $INSTDIR\Examples\InstallOptions + File ..\Examples\InstallOptions\test.ini + File ..\Examples\InstallOptions\test.nsi + File ..\Examples\InstallOptions\testimgs.ini + File ..\Examples\InstallOptions\testimgs.nsi + File ..\Examples\InstallOptions\testlink.ini + File ..\Examples\InstallOptions\testlink.nsi + File ..\Examples\InstallOptions\testnotify.ini + File ..\Examples\InstallOptions\testnotify.nsi +${MementoSectionEnd} + +${MementoSection} "nsDialogs" SecPluginsDialogs + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | nsDialogs..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin nsDialogs + SetOutPath $INSTDIR\Examples\nsDialogs + File ..\Examples\nsDialogs\example.nsi + File ..\Examples\nsDialogs\InstallOptions.nsi + File ..\Examples\nsDialogs\timer.nsi + File ..\Examples\nsDialogs\welcome.nsi + SetOutPath $INSTDIR\Include + File ..\Include\nsDialogs.nsh + SetOutPath $INSTDIR\Docs\nsDialogs + File ..\Docs\nsDialogs\Readme.html +${MementoSectionEnd} + +${MementoSection} "Math" SecPluginsMath + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | Math..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin Math + SetOutPath $INSTDIR\Docs\Math + File ..\Docs\Math\Math.txt + SetOutPath $INSTDIR\Examples\Math + File ..\Examples\Math\math.nsi + File ..\Examples\Math\mathtest.txt + File ..\Examples\Math\mathtest.nsi + File ..\Examples\Math\mathtest.ini + +${MementoSectionEnd} + +${MementoSection} "NSISdl" SecPluginsNSISDL + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | NSISdl..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin NSISdl + SetOutPath $INSTDIR\Docs\NSISdl + File ..\Docs\NSISdl\ReadMe.txt + File ..\Docs\NSISdl\License.txt +${MementoSectionEnd} + +${MementoSection} "System" SecPluginsSystem + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | System..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin System + SetOutPath $INSTDIR\Docs\System + File ..\Docs\System\System.html + File ..\Docs\System\WhatsNew.txt + SetOutPath $INSTDIR\Examples\System + File ..\Examples\System\Resource.dll + File ..\Examples\System\SysFunc.nsh + File ..\Examples\System\System.nsh + File ..\Examples\System\System.nsi +${MementoSectionEnd} + +${MementoSection} "StartMenu" SecPluginsStartMenu + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | StartMenu..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin StartMenu + SetOutPath $INSTDIR\Docs\StartMenu + File ..\Docs\StartMenu\Readme.txt + SetOutPath $INSTDIR\Examples\StartMenu + File ..\Examples\StartMenu\Example.nsi +${MementoSectionEnd} + +${MementoSection} "UserInfo" SecPluginsUserInfo + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | UserInfo..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin UserInfo + SetOutPath $INSTDIR\Examples\UserInfo + File ..\Examples\UserInfo\UserInfo.nsi +${MementoSectionEnd} + +${MementoSection} "Dialer" SecPluginsDialer + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | Dialer..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin Dialer + SetOutPath $INSTDIR\Docs\Dialer + File ..\Docs\Dialer\Dialer.txt +${MementoSectionEnd} + +${MementoSection} "VPatch" SecPluginsVPatch + + SetDetailsPrint textonly + DetailPrint "Installing Plug-ins | VPatch..." + SetDetailsPrint listonly + + SectionIn 1 + + !insertmacro InstallPlugin VPatch + SetOutPath $INSTDIR\Examples\VPatch + File ..\Examples\VPatch\example.nsi + File ..\Examples\VPatch\oldfile.txt + File ..\Examples\VPatch\newfile.txt + File ..\Examples\VPatch\patch.pat + SetOutPath $INSTDIR\Docs\VPatch + File ..\Docs\VPatch\Readme.html + SetOutPath $INSTDIR\Bin + File ..\Bin\GenPat.exe + SetOutPath $INSTDIR\Include + File ..\Include\VPatchLib.nsh +${MementoSectionEnd} + +${MementoSectionDone} + +SectionGroupEnd + +Section -post + + ; When Modern UI is installed: + ; * Always install the English language file + ; * Always install default icons / bitmaps + + ${If} ${SectionIsSelected} ${SecInterfacesModernUI} + + SetDetailsPrint textonly + DetailPrint "Configuring Modern UI..." + SetDetailsPrint listonly + + ${IfNot} ${SectionIsSelected} ${SecLangFiles} + SetOutPath "$INSTDIR\Contrib\Language files" + File "..\Contrib\Language files\English.nlf" + File "..\Contrib\Language files\English.nsh" + ${EndIf} + + ${IfNot} ${SectionIsSelected} ${SecGraphics} + SetOutPath $INSTDIR\Contrib\Graphics\Checks + File "..\Contrib\Graphics\Checks\modern.bmp" + SetOutPath $INSTDIR\Contrib\Graphics\Icons + File "..\Contrib\Graphics\Icons\modern-install.ico" + File "..\Contrib\Graphics\Icons\modern-uninstall.ico" + SetOutPath $INSTDIR\Contrib\Graphics\Header + File "..\Contrib\Graphics\Header\nsis.bmp" + SetOutPath $INSTDIR\Contrib\Graphics\Wizard + File "..\Contrib\Graphics\Wizard\win.bmp" + ${EndIf} + + ${EndIf} + + SetDetailsPrint textonly + DetailPrint "Creating Registry Keys..." + SetDetailsPrint listonly + + SetOutPath $INSTDIR + + WriteRegStr HKLM "Software\NSIS" "" $INSTDIR +!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD + WriteRegDword HKLM "Software\NSIS" "VersionMajor" "${VER_MAJOR}" + WriteRegDword HKLM "Software\NSIS" "VersionMinor" "${VER_MINOR}" + WriteRegDword HKLM "Software\NSIS" "VersionRevision" "${VER_REVISION}" + WriteRegDword HKLM "Software\NSIS" "VersionBuild" "${VER_BUILD}" +!endif + + WriteRegStr HKLM "${REG_UNINST_KEY}" "UninstallString" '"$INSTDIR\uninst-nsis.exe"' + WriteRegStr HKLM "${REG_UNINST_KEY}" "QuietUninstallString" '"$INSTDIR\uninst-nsis.exe" /S' + WriteRegStr HKLM "${REG_UNINST_KEY}" "InstallLocation" "$INSTDIR" + WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayName" "Nullsoft Install System${NAMESUFFIX}" + WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayIcon" "$INSTDIR\uninst-nsis.exe,0" + WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayVersion" "${VERSION}" +!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD + WriteRegDWORD HKLM "${REG_UNINST_KEY}" "VersionMajor" "${VER_MAJOR}" ; Required by WACK + WriteRegDWORD HKLM "${REG_UNINST_KEY}" "VersionMinor" "${VER_MINOR}" ; Required by WACK +!endif + WriteRegStr HKLM "${REG_UNINST_KEY}" "Publisher" "Nullsoft and Contributors" ; Required by WACK + WriteRegStr HKLM "${REG_UNINST_KEY}" "URLInfoAbout" "https://nsis.sourceforge.io/" + WriteRegStr HKLM "${REG_UNINST_KEY}" "HelpLink" "https://nsis.sourceforge.io/Support" + WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoModify" "1" + WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoRepair" "1" + ${MakeARPInstallDate} $1 + WriteRegStr HKLM "${REG_UNINST_KEY}" "InstallDate" $1 + + WriteUninstaller $INSTDIR\uninst-nsis.exe + + ${MementoSectionSave} + + SetDetailsPrint both + +SectionEnd + +;-------------------------------- +;Descriptions + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "The core files required to use NSIS (compiler etc.)" + !insertmacro MUI_DESCRIPTION_TEXT ${SecExample} "Example installation scripts that show you how to use NSIS" + !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} "Add icon to your start menu for easy access" + !insertmacro MUI_DESCRIPTION_TEXT ${SecInterfaces} "User interface designs that can be used to change the installer look and feel" + !insertmacro MUI_DESCRIPTION_TEXT ${SecInterfacesModernUI} "A modern user interface like the wizards of recent Windows versions" + !insertmacro MUI_DESCRIPTION_TEXT ${SecInterfacesDefaultUI} "The default NSIS user interface which you can customize to make your own UI" + !insertmacro MUI_DESCRIPTION_TEXT ${SecInterfacesTinyUI} "A tiny version of the default user interface" + !insertmacro MUI_DESCRIPTION_TEXT ${SecTools} "Tools that help you with NSIS development" + !insertmacro MUI_DESCRIPTION_TEXT ${SecToolsZ2E} "A utility that converts a ZIP file to a NSIS installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecGraphics} "Icons, checkbox images and other graphics" + !insertmacro MUI_DESCRIPTION_TEXT ${SecLangFiles} "Language files used to support multiple languages in an installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsPlugins} "Useful plugins that extend NSIS's functionality" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsBanner} "Plugin that lets you show a banner before installation starts" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsLangDLL} "Plugin that lets you add a language select dialog to your installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsnsExec} "Plugin that executes console programs and prints its output in the NSIS log window or hides it" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsSplash} "Splash screen add-on that lets you add a splash screen to an installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsSplashT} "Splash screen add-on with transparency support that lets you add a splash screen to an installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsSystem} "Plugin that lets you call Win32 API or external DLLs" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsMath} "Plugin that lets you evaluate complicated mathematical expressions" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsDialer} "Plugin that provides internet connection functions" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsIO} "Plugin that lets you add custom pages to an installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsDialogs} "Plugin that lets you add custom pages to an installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsStartMenu} "Plugin that lets the user select the start menu folder" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsBgImage} "Plugin that lets you show a persistent background image plugin and play sounds" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsUserInfo} "Plugin that that gives you the user name and the user account type" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsNSISDL} "Plugin that lets you create a web based installer" + !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsVPatch} "Plugin that lets you create patches to upgrade older files" +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +;Installer Functions + +Function .onInit + + ${MementoSectionRestore} + +FunctionEnd + +!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD + +Var ReinstallPageCheck + +Function PageReinstall + + ReadRegStr $R0 HKLM "Software\NSIS" "" + ReadRegStr $R1 HKLM "${REG_UNINST_KEY}" "UninstallString" + ${IfThen} "$R0$R1" == "" ${|} Abort ${|} + + StrCpy $R4 "older" + ReadRegDWORD $R0 HKLM "Software\NSIS" "VersionMajor" + ReadRegDWORD $R1 HKLM "Software\NSIS" "VersionMinor" + ReadRegDWORD $R2 HKLM "Software\NSIS" "VersionRevision" + ReadRegDWORD $R3 HKLM "Software\NSIS" "VersionBuild" + ${IfThen} $R0 = 0 ${|} StrCpy $R4 "unknown" ${|} ; Anonymous builds have no version number + StrCpy $R0 $R0.$R1.$R2.$R3 + + ${VersionCompare} ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD} $R0 $R0 + ${If} $R0 == 0 + StrCpy $R1 "NSIS ${VERSION} is already installed. Select the operation you want to perform and click Next to continue." + StrCpy $R2 "Add/Reinstall components" + StrCpy $R3 "Uninstall NSIS" + !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose the maintenance option to perform." + StrCpy $R0 "2" + ${ElseIf} $R0 == 1 + StrCpy $R1 "An $R4 version of NSIS is installed on your system. It's recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue." + StrCpy $R2 "Uninstall before installing" + StrCpy $R3 "Do not uninstall" + !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install NSIS." + StrCpy $R0 "1" + ${ElseIf} $R0 == 2 + StrCpy $R1 "A newer version of NSIS is already installed! It is not recommended that you install an older version. If you really want to install this older version, it's better to uninstall the current version first. Select the operation you want to perform and click Next to continue." + StrCpy $R2 "Uninstall before installing" + StrCpy $R3 "Do not uninstall" + !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install NSIS." + StrCpy $R0 "1" + ${Else} + Abort + ${EndIf} + + nsDialogs::Create 1018 + Pop $R4 + + ${NSD_CreateLabel} 0 0 100% 24u $R1 + Pop $R1 + + ${NSD_CreateRadioButton} 30u 50u -30u 8u $R2 + Pop $R2 + ${NSD_OnClick} $R2 PageReinstallUpdateSelection + + ${NSD_CreateRadioButton} 30u 70u -30u 8u $R3 + Pop $R3 + ${NSD_OnClick} $R3 PageReinstallUpdateSelection + + ${If} $ReinstallPageCheck != 2 + SendMessage $R2 ${BM_SETCHECK} ${BST_CHECKED} 0 + ${Else} + SendMessage $R3 ${BM_SETCHECK} ${BST_CHECKED} 0 + ${EndIf} + + ${NSD_SetFocus} $R2 + + nsDialogs::Show + +FunctionEnd + +Function PageReinstallUpdateSelection + + Pop $R1 + + ${NSD_GetState} $R2 $R1 + + ${If} $R1 == ${BST_CHECKED} + StrCpy $ReinstallPageCheck 1 + ${Else} + StrCpy $ReinstallPageCheck 2 + ${EndIf} + +FunctionEnd + +Function PageLeaveReinstall + + ${NSD_GetState} $R2 $R1 + + StrCmp $R0 "1" 0 +2 ; Existing install is not the same version? + StrCmp $R1 "1" reinst_uninstall reinst_done + + StrCmp $R1 "1" reinst_done ; Same version, skip to add/reinstall components? + + reinst_uninstall: + ReadRegStr $R1 HKLM "${REG_UNINST_KEY}" "UninstallString" + + ;Run uninstaller + HideWindow + + ClearErrors + ExecWait '$R1 _?=$INSTDIR' $0 + + BringToFront + + ${IfThen} ${Errors} ${|} StrCpy $0 2 ${|} ; ExecWait failed, set fake exit code + + ${If} $0 <> 0 + ${OrIf} ${FileExists} "$INSTDIR\Bin\makensis.exe" + ${If} $0 = 1 ; User aborted uninstaller? + StrCmp $R0 "2" 0 +2 ; Is the existing install the same version? + Quit ; ...yes, already installed, we are done + Abort + ${EndIf} + MessageBox MB_ICONEXCLAMATION "Unable to uninstall!" + Abort + ${Else} + StrCpy $0 $R1 1 + ${IfThen} $0 == '"' ${|} StrCpy $R1 $R1 -1 1 ${|} ; Strip quotes from UninstallString + Delete $R1 + RMDir $INSTDIR + ${EndIf} + + reinst_done: + +FunctionEnd + +!endif # VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD + +Function ShowReleaseNotes + StrCpy $0 $WINDIR\hh.exe + ${IfNotThen} ${FileExists} $0 ${|} SearchPath $0 hh.exe ${|} + ${If} ${FileExists} $0 + Exec '"$0" mk:@MSITStore:$INSTDIR\NSIS.chm::/SectionF.1.html' + ${Else} + ExecShell "" "https://nsis.sourceforge.io/Docs/AppendixF.html#F.1" + ${EndIf} +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section Uninstall + + SetDetailsPrint textonly + DetailPrint "Uninstalling NSI Development Shell Extensions..." + SetDetailsPrint listonly + + IfFileExists $INSTDIR\Bin\makensis.exe nsis_installed + MessageBox MB_YESNO "It does not appear that NSIS is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?" IDYES nsis_installed + Abort "Uninstall aborted by user" + nsis_installed: + + SetDetailsPrint textonly + DetailPrint "Deleting Registry Keys..." + SetDetailsPrint listonly + + !macro AssocDeleteFileExtAndProgId _hkey _dotext _pid + ReadRegStr $R0 ${_hkey} "Software\Classes\${_dotext}" "" + StrCmp $R0 "${_pid}" 0 +2 + DeleteRegKey ${_hkey} "Software\Classes\${_dotext}" + + DeleteRegKey ${_hkey} "Software\Classes\${_pid}" + !macroend + + !insertmacro AssocDeleteFileExtAndProgId HKLM ".nsi" "NSIS.Script" + !insertmacro AssocDeleteFileExtAndProgId HKLM ".nsh" "NSIS.Header" + + ${NotifyShell_AssocChanged} + + DeleteRegKey HKLM "${REG_UNINST_KEY}" + DeleteRegKey HKLM "Software\NSIS" + + SetDetailsPrint textonly + DetailPrint "Deleting Files..." + SetDetailsPrint listonly + + Delete "$SMPROGRAMS\NSIS${NAMESUFFIX}.lnk" + Delete "$DESKTOP\NSIS${NAMESUFFIX}.lnk" ; Remove legacy shortcut + Delete $INSTDIR\makensis.exe + Delete $INSTDIR\makensisw.exe + Delete $INSTDIR\NSIS.exe + Delete $INSTDIR\NSIS.exe.manifest + Delete $INSTDIR\license.txt + Delete $INSTDIR\COPYING + Delete $INSTDIR\uninst-nsis.exe + Delete $INSTDIR\nsisconf.nsi + Delete $INSTDIR\nsisconf.nsh + Delete $INSTDIR\NSIS.chm + RMDir /r $INSTDIR\Bin + RMDir /r $INSTDIR\Contrib + RMDir /r $INSTDIR\Docs + RMDir /r $INSTDIR\Examples + RMDir /r $INSTDIR\Include + RMDir /r $INSTDIR\Menu + RMDir /r $INSTDIR\Plugins + RMDir /r $INSTDIR\Stubs + RMDir $INSTDIR + + SetDetailsPrint both + +SectionEnd diff --git a/tools/Examples/nsDialogs/InstallOptions.nsi b/tools/Examples/nsDialogs/InstallOptions.nsi new file mode 100644 index 0000000..68a68f9 --- /dev/null +++ b/tools/Examples/nsDialogs/InstallOptions.nsi @@ -0,0 +1,47 @@ +!include LogicLib.nsh +!include WinMessages.nsh + +Name "nsDialogs IO" +OutFile "nsDialogs IO.exe" + +Page custom nsDialogsIO UpdateINIState +Page instfiles + +XPStyle on + +ShowInstDetails show + +!include nsDialogs.nsh +!insertmacro NSD_FUNCTION_INIFILE + +Function nsDialogsIO + + InitPluginsDir + File /oname=$PLUGINSDIR\io.ini "..\InstallOptions\test.ini" + + ${If} ${Cmd} `MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Test the right-to-left version?" IDYES` + WriteINIStr $PLUGINSDIR\io.ini Settings RTL 1 + ${EndIf} + + StrCpy $0 $PLUGINSDIR\io.ini + + Call CreateDialogFromINI + +FunctionEnd + +Section + + ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 2" "State" + DetailPrint "Install X=$0" + ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 3" "State" + DetailPrint "Install Y=$0" + ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 4" "State" + DetailPrint "Install Z=$0" + ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 5" "State" + DetailPrint "File=$0" + ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 6" "State" + DetailPrint "Dir=$0" + ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 8" "State" + DetailPrint "Info=$0" + +SectionEnd diff --git a/tools/Examples/nsDialogs/example.nsi b/tools/Examples/nsDialogs/example.nsi new file mode 100644 index 0000000..766a0d0 --- /dev/null +++ b/tools/Examples/nsDialogs/example.nsi @@ -0,0 +1,299 @@ +Name "nsDialogs Example" +OutFile "nsDialogs Example.exe" +Caption "$(^Name)" + +Unicode True +XPStyle on +RequestExecutionLevel user + +!include nsDialogs.nsh +!include LogicLib.nsh +!include WinCore.nsh ; MAKELONG + +LicenseText "All the action takes place on the next page..." "Start" +SubCaption 0 ": Ready?" + +Page license +Page custom nsDialogsPage +Page custom LBPage +Page custom RangesPage +Page custom NotifyPage +Page custom RadioPage RadioLeave +!pragma warning disable 8000 ; "Page instfiles not used, no sections will be executed!" + +Var BUTTON +Var EDIT +Var CHECKBOX + +Function nsDialogsPage + nsDialogs::Create 1018 + Pop $0 + + GetFunctionAddress $0 OnBack + nsDialogs::OnBack $0 + + ${NSD_CreateButton} 0 0 100% 12u Test + Pop $BUTTON + GetFunctionAddress $0 OnClick + nsDialogs::OnClick $BUTTON $0 + + ${NSD_CreateText} 0 35 100% 12u hello + Pop $EDIT + GetFunctionAddress $0 OnChange + nsDialogs::OnChange $EDIT $0 + ${NSD_Edit_SetCueBannerText} $EDIT 0 "Type 'hello there' and get a free surprise" + + ${NSD_CreateCheckbox} 0 -50 100% 8u Test + Pop $CHECKBOX + GetFunctionAddress $0 OnCheckbox + nsDialogs::OnClick $CHECKBOX $0 + + ${NSD_CreateLabel} 0 40u 75% 40u "* Type `hello there` above.$\n* Click the button.$\n* Check the checkbox.$\n* Hit the Back button." + Pop $0 + + nsDialogs::Show +FunctionEnd + +Function OnClick + Pop $0 # HWND + MessageBox MB_OK clicky +FunctionEnd + +Function OnChange + Pop $0 # HWND + + System::Call user32::GetWindowText(p$EDIT,t.r0,i${NSIS_MAX_STRLEN}) + ${If} $0 == "hello there" + MessageBox MB_OK "right back at ya" + ${EndIf} +FunctionEnd + +Function OnBack + MessageBox MB_YESNO "are you sure?" IDYES +2 + Abort +FunctionEnd + +Function OnCheckbox + Pop $0 # HWND + MessageBox MB_OK "checkbox clicked" +FunctionEnd + +!macro BeginControlsTestPage title + nsDialogs::Create 1018 + Pop $0 + ${NSD_SetText} $hWndParent "$(^Name): ${title}" +!macroend + +!macro CreateButton x y w h txt var handler data + ${NSD_CreateButton} ${x} ${y} ${w} ${h} "${txt}" + Pop ${var} + nsDialogs::SetUserData ${var} ${data} + ${NSD_OnClick} ${var} ${handler} +!macroend + + +Function LBPage + !insertmacro BeginControlsTestPage "ListBox" + + ${NSD_CreateSortedListBox} 1u 0 -2u 70u "" + Pop $1 + ${NSD_LB_AddString} $1 "Foo" + ${NSD_LB_AddString} $1 "Bar" + + StrCpy $9 1 + ${NSD_CreateText} 1u 75u -2u 12u "New item #$9" + Pop $EDIT + !insertmacro CreateButton 1u 90u 50u 12u "Add (&Sorted)" $0 LBAction Add + !insertmacro CreateButton 53u 90u 50u 12u "&Prepend" $0 LBAction Prepend + !insertmacro CreateButton 105u 90u 50u 12u "&Append" $0 LBAction Append + !insertmacro CreateButton 160u 90u 50u 12u "&Delete Last" $0 LBAction DL + !insertmacro CreateButton 215u 90u 50u 12u "&Clear" $0 LBAction Clear + + nsDialogs::Show +FunctionEnd + +Function LBAction + Pop $0 + nsDialogs::GetUserData $0 + Pop $0 + ${NSD_GetText} $EDIT $8 + + ${Select} $0 + ${Case} "Add" + ${NSD_LB_AddString} $1 $8 + ${Case} "Prepend" + ${NSD_LB_PrependString} $1 $8 + ${Case} "Append" + ${NSD_LB_AppendString} $1 $8 + ${Case} "DL" + ${NSD_LB_GetCount} $1 $8 + ${If} $8 U> 0 + IntOp $8 $8 - 1 + ${NSD_LB_DelItem} $1 $8 + ${EndIf} + Return + ${Case} "Clear" + ${NSD_LB_Clear} $1 + Return + ${EndSelect} + + IntOp $9 $9 + 1 + ${NSD_SetText} $EDIT "New item #$9" +FunctionEnd + + +Function RangesPage + !insertmacro BeginControlsTestPage "Ranges" + + ${NSD_CreateHTrackBar} 1 0 -2 20u "" + Pop $1 + ${NSD_TrackBar_SetRangeMax} $1 10 + ${NSD_TrackBar_SetTicFreq} $1 1 + ${NSD_TrackBar_SetPos} $1 3 + + StrCpy $9 20 ; Progress pos + ${NSD_CreateProgressBar} 1 25u -2 8u "" + Pop $2 + ${NSD_CreateTimer} RangesTimer 1000 + + ${NSD_CreateNumber} 1 40u 50u 12u "42" + Pop $3 + ${NSD_CreateUpDown} 0 0 0 0 "" + Pop $4 + ${NSD_UD_SetBuddy} $4 $3 + ${MAKELONG} $5 $0 50 0 ; 0..50 + ${NSD_UD_SetPackedRange} $4 $5 + + nsDialogs::Show +FunctionEnd + +Function RangesTimer + IntOp $9 $9 + 5 + ${IfThen} $9 > 100 ${|} StrCpy $9 0 ${|} + ${NSD_ProgressBar_SetPos} $2 $9 +FunctionEnd + + +Function NotifyPage + !insertmacro BeginControlsTestPage "WM_NOTIFY" + + nsDialogs::CreateControl "${__NSD_RichEdit_CLASS_20A}" "${__NSD_RichEdit_STYLE}" "${__NSD_RichEdit_EXSTYLE}" 1 1 -2 50u "" ; Forcing ANSI control, see forums.winamp.com/showthread.php?p=3169999 + Pop $9 + ${NSD_OnNotify} $9 OnNotify + IntOp $8 ${ENM_LINK} | ${ENM_KEYEVENTS} + ${NSD_RichEd_SetEventMask} $9 $8 + SendMessage $9 ${EM_AUTOURLDETECT} 1 0 + ${NSD_SetText} $9 "{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard http://nsis.sf.net\par {\b Click the link!}\par\par Type something and I will block every other character...}" + + ${NSD_InitCommonControlsEx} ${ICC_DATE_CLASSES} + ${NSD_CreateDatePicker} 1% 55u 48% 12u "" + Pop $1 + ${NSD_OnNotify} $1 onDateTimeNotify + ${NSD_CreateLabel} 51% 56u 48% 12u "Change the date..." + Pop $9 + + /* + ${NSD_CreateCalendar} 1% 23% 150u 90u "" + Pop $1 + ${NSD_AddStyle} $1 ${MCS_NOTODAY} + System::Call 'USER32::SendMessage(p$1, i${MCM_GETMINREQRECT}, p0, @r2)' + System::Call '*$2(i,i,i.r2,i.r3)' + #System::Call 'USER32::SendMessage(p$1, i${MCM_GETMAXTODAYWIDTH}, p0, *i0r4)' + #${IfThen} $4 > $2 ${|} StrCpy $2 $4 ${|} + System::Call 'USER32::SetWindowPos(p$1,p0,i,i,ir2,ir3,i0x16)' + */ + + nsDialogs::Show +FunctionEnd + +Function OnNotify + Pop $1 ; HWND + Pop $2 ; Code + Pop $3 ; NMHDR* + ${If} $2 = ${EN_LINK} + System::Call '*$3(p,p,p,p.r2,p,p,i.r4,i.r5)' ; Extract from ENLINK* + ${IfThen} $2 <> ${WM_LBUTTONDOWN} ${|} Return ${|} + IntOp $2 $5 - $4 + System::Call '*(ir4,ir5,l,&t$2,i)p.r2' ; Create TEXTRANGE and a text buffer + ${If} $2 P<> 0 + IntPtrOp $3 $2 + 16 ; Find buffer + System::Call '*$2(i,i,p$3)' ; Set buffer in TEXTRANGE + SendMessage $1 ${EM_GETTEXTRANGE} "" $2 $4 + ${If} $4 <> 0 + System::Call 'SHELL32::ShellExecute(p$hWndParent, p0, pr3, p0, p0, i 1)' + ${EndIf} + System::Free $2 + ${EndIf} + ${ElseIf} $2 = ${EN_MSGFILTER} + Var /Global Toggle + System::Call '*$3(p,i,i,i.r4)' ; MSGFILTER->msg + ${If} $4 = ${WM_CHAR} + IntOp $Toggle $Toggle ^ 1 + ${If} $Toggle & 1 + ${NSD_Return} 1 + ${EndIf} + ${EndIf} + ${EndIf} +FunctionEnd + +Function onDateTimeNotify +Pop $1 ; HWND +Pop $2 ; Code +Pop $3 ; NMHDR* +${If} $2 = ${DTN_DATETIMECHANGE} + System::Call 'USER32::SendMessage(p$1, i${DTM_GETSYSTEMTIME}, p0, @r3)i.r0' + ${If} $0 = ${GDT_VALID} + System::Call '*$3(&i2.R1, &i2.R2, &i2, &i2.R3, &i2, &i2, &i2, &i2)' ; SYSTEMTIME + StrCpy $0 "$R1/$R2/$R3" + ${Else} + StrCpy $0 "N/A" + ${EndIf} + ${NSD_SetText} $9 $0 +${EndIf} +FunctionEnd + + +Function RadioPage + !insertmacro BeginControlsTestPage "Radio buttons" + + ; Group 1 + ${NSD_CreateFirstRadioButton} 4u 0 40% 6% "NPR" + Pop $1 + ${NSD_OnClick} $1 onStationChanged + ${NSD_CreateAdditionalRadioButton} 4u 12% 40% 6% "BBC" + Pop $2 + ${NSD_OnClick} $2 onStationChanged + ${NSD_CreateLabel} 4u 30u 80% 12u "" + Pop $3 + + ; Group 2 + ${NSD_CreateFirstRadioButton} 4u 50u 50% 12u "FM" + Pop $4 + ${NSD_CreateAdditionalRadioButton} 4u 64u 50% 12u "AM" + Pop $5 + + SendMessage $4 ${BM_CLICK} "" "" ; Must select a default + SendMessage $2 ${BM_CLICK} "" "" ; Must select a default + nsDialogs::Show +FunctionEnd + +Function onStationChanged +Pop $0 +${NSD_GetText} $0 $0 +${If} $0 == "NPR" + ${NSD_SetText} $3 "America, f*(# yeah!" +${Else} + ${NSD_SetText} $3 "Keep Calm and Carry On" +${EndIf} +FunctionEnd + +Function RadioLeave +${NSD_GetChecked} $5 $0 +${If} $0 <> 0 + MessageBox MB_YESNO "Are you sure you want to keep living in the past?" IDYES +2 + Abort +${EndIf} +FunctionEnd + +Section +SectionEnd diff --git a/tools/Examples/nsDialogs/timer.nsi b/tools/Examples/nsDialogs/timer.nsi new file mode 100644 index 0000000..c24ef2c --- /dev/null +++ b/tools/Examples/nsDialogs/timer.nsi @@ -0,0 +1,107 @@ +!include LogicLib.nsh +!include nsDialogs.nsh +!include WinMessages.nsh + +Name "nsDialogs Timer Example" +OutFile "nsDialogs Timer Example.exe" +XPStyle on +RequestExecutionLevel user + +Var DIALOG +Var TEXT +Var PROGBAR +Var PROGBAR2 +Var PROGBAR3 +Var BUTTON +Var BUTTON2 + +Page custom nsDialogsPage +!pragma warning disable 8000 ; "Page instfiles not used, no sections will be executed!" + +Function OnTimer + + SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1 + ${If} $1 = 100 + SendMessage $PROGBAR ${PBM_SETPOS} 0 0 + ${Else} + SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0 + ${EndIf} + +FunctionEnd + +Function OnTimer2 + + SendMessage $PROGBAR2 ${PBM_GETPOS} 0 0 $1 + ${If} $1 = 100 + SendMessage $PROGBAR2 ${PBM_SETPOS} 0 0 + ${Else} + SendMessage $PROGBAR2 ${PBM_DELTAPOS} 5 0 + ${EndIf} + +FunctionEnd + +Function OnTimer3 + + SendMessage $PROGBAR3 ${PBM_GETPOS} 0 0 $1 + ${If} $1 >= 100 + ${NSD_KillTimer} OnTimer3 + MessageBox MB_OK "Timer 3 killed" + ${Else} + SendMessage $PROGBAR3 ${PBM_DELTAPOS} 2 0 + ${EndIf} + +FunctionEnd + +Function OnClick + + Pop $0 + + ${NSD_KillTimer} OnTimer + +FunctionEnd + +Function OnClick2 + + Pop $0 + + ${NSD_KillTimer} OnTimer2 + +FunctionEnd + +Function nsDialogsPage + + nsDialogs::Create 1018 + Pop $DIALOG + + ${NSD_CreateLabel} 0u 0u 100% 9u "nsDialogs timer example" + Pop $TEXT + + ${NSD_CreateProgressBar} 0u 10u 100% 12u "" + Pop $PROGBAR + + ${NSD_CreateButton} 0u 25u 100u 14u "Kill Timer 1" + Pop $BUTTON + ${NSD_OnClick} $BUTTON OnClick + + ${NSD_CreateProgressBar} 0u 52u 100% 12u "" + Pop $PROGBAR2 + SendMessage $PROGBAR2 ${PBM_SETBARCOLOR} 0 0x0000FF ; No visual styles + SendMessage $PROGBAR2 ${PBM_SETSTATE} ${PBST_ERROR} 0 ; Vista+ + + ${NSD_CreateButton} 0u 67u 100u 14u "Kill Timer 2" + Pop $BUTTON2 + ${NSD_OnClick} $BUTTON2 OnClick2 + + ${NSD_CreateProgressBar} 0u 114u 100% 12u "" + Pop $PROGBAR3 + + ${NSD_CreateTimer} OnTimer 1000 + ${NSD_CreateTimer} OnTimer2 100 + ${NSD_CreateTimer} OnTimer3 200 + + nsDialogs::Show + +FunctionEnd + +Section +SectionEnd diff --git a/tools/Examples/nsDialogs/welcome.nsi b/tools/Examples/nsDialogs/welcome.nsi new file mode 100644 index 0000000..d8c2cd7 --- /dev/null +++ b/tools/Examples/nsDialogs/welcome.nsi @@ -0,0 +1,214 @@ +!include MUI.nsh +!include LogicLib.nsh +!include nsDialogs.nsh +!include WinMessages.nsh +!include FileFunc.nsh + +Name "nsDialogs Welcome" +OutFile "nsDialogs Welcome.exe" + +Page custom nsDialogsWelcome +Page custom nsDialogsDirectory +!insertmacro MUI_PAGE_INSTFILES + +!insertmacro MUI_LANGUAGE English + + +Var DIALOG +Var HEADLINE +Var TEXT +Var IMAGECTL +Var IMAGE +Var DIRECTORY +Var FREESPACE + +Var HEADLINE_FONT + +Function .onInit + + CreateFont $HEADLINE_FONT "$(^Font)" "14" "700" + + InitPluginsDir + File /oname=$PLUGINSDIR\welcome.bmp "${NSISDIR}\Contrib\Graphics\Wizard\orange-nsis.bmp" + +FunctionEnd + +Function HideControls + + LockWindow on + GetDlgItem $0 $HWNDPARENT 1028 + ShowWindow $0 ${SW_HIDE} + + GetDlgItem $0 $HWNDPARENT 1256 + ShowWindow $0 ${SW_HIDE} + + GetDlgItem $0 $HWNDPARENT 1035 + ShowWindow $0 ${SW_HIDE} + + GetDlgItem $0 $HWNDPARENT 1037 + ShowWindow $0 ${SW_HIDE} + + GetDlgItem $0 $HWNDPARENT 1038 + ShowWindow $0 ${SW_HIDE} + + GetDlgItem $0 $HWNDPARENT 1039 + ShowWindow $0 ${SW_HIDE} + + GetDlgItem $0 $HWNDPARENT 1045 + ShowWindow $0 ${SW_NORMAL} + LockWindow off + +FunctionEnd + +Function ShowControls + + LockWindow on + GetDlgItem $0 $HWNDPARENT 1028 + ShowWindow $0 ${SW_NORMAL} + + GetDlgItem $0 $HWNDPARENT 1256 + ShowWindow $0 ${SW_NORMAL} + + GetDlgItem $0 $HWNDPARENT 1035 + ShowWindow $0 ${SW_NORMAL} + + GetDlgItem $0 $HWNDPARENT 1037 + ShowWindow $0 ${SW_NORMAL} + + GetDlgItem $0 $HWNDPARENT 1038 + ShowWindow $0 ${SW_NORMAL} + + GetDlgItem $0 $HWNDPARENT 1039 + ShowWindow $0 ${SW_NORMAL} + + GetDlgItem $0 $HWNDPARENT 1045 + ShowWindow $0 ${SW_HIDE} + LockWindow off + +FunctionEnd + +Function nsDialogsWelcome + + nsDialogs::Create 1044 + Pop $DIALOG + + nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS}|${SS_BITMAP} 0 0 0 109u 193u "" + Pop $IMAGECTL + + StrCpy $0 $PLUGINSDIR\welcome.bmp + System::Call 'user32::LoadImage(p 0, t r0, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE})p.s' + Pop $IMAGE + + SendMessage $IMAGECTL ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE + + nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS} 0 120u 10u -130u 20u "Welcome to nsDialogs!" + Pop $HEADLINE + + SendMessage $HEADLINE ${WM_SETFONT} $HEADLINE_FONT 0 + + nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS} 0 120u 32u -130u -32u "nsDialogs is the next generation of user interfaces in NSIS. It gives the developer full control over custom pages. Some of the features include control text containing variables, callbacks directly into script functions and creation of any type of control. Create boring old edit boxes or load some external library and create custom controls with no need of creating your own plug-in.$\r$\n$\r$\nUnlike InstallOptions, nsDialogs doesn't use INI files to communicate with the script. By interacting directly with the script, nsDialogs can perform much faster without the need of costly, old and inefficient INI operations. Direct interaction also allows direct calls to functions defined in the script and removes the need of conversion functions like Io2Nsis.$\r$\n$\r$\nHit the Next button to see how it all fits into a mock directory page." + Pop $TEXT + + SetCtlColors $DIALOG 0 0xffffff + SetCtlColors $HEADLINE 0 0xffffff + SetCtlColors $TEXT 0 0xffffff + + Call HideControls + + nsDialogs::Show + + Call ShowControls + + System::Call gdi32::DeleteObject(p$IMAGE) + +FunctionEnd + +!define SHACF_FILESYSTEM 1 + +Function nsDialogsDirectory + + !insertmacro MUI_HEADER_TEXT "Choose Install Location" "Choose the folder in which to install $(^NameDA)." + + GetDlgItem $0 $HWNDPARENT 1 + EnableWindow $0 0 + + nsDialogs::Create 1018 + Pop $DIALOG + + nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS}|${SS_CENTER} 0 0 0 100% 30 "Directory page" + Pop $HEADLINE + + SendMessage $HEADLINE ${WM_SETFONT} $HEADLINE_FONT 0 + + nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS} 0 0 30 100% 40 "Select the installation directory of NSIS to continue. $_CLICK" + Pop $TEXT + + nsDialogs::CreateControl EDIT ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS}|${ES_AUTOHSCROLL}|${WS_TABSTOP} ${WS_EX_CLIENTEDGE} 0 75 100% 12u "" + Pop $DIRECTORY + + SendMessage $HWNDPARENT ${WM_NEXTDLGCTL} $DIRECTORY 1 + + GetFunctionAddress $0 DirChange + nsDialogs::OnChange $DIRECTORY $0 + + System::Call shlwapi::SHAutoComplete(p$DIRECTORY,i${SHACF_FILESYSTEM}) + + nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS} 0 0 -10u 100% 10u "" + Pop $FREESPACE + + Call UpdateFreeSpace + + nsDialogs::Show + +FunctionEnd + +Function UpdateFreeSpace + + ${GetRoot} $INSTDIR $0 + StrCpy $1 " bytes" + + System::Call kernel32::GetDiskFreeSpaceEx(tr0,*l,*l,*l.r0) + + ${If} $0 > 1024 + ${OrIf} $0 < 0 + System::Int64Op $0 / 1024 + Pop $0 + StrCpy $1 "kb" + ${If} $0 > 1024 + ${OrIf} $0 < 0 + System::Int64Op $0 / 1024 + Pop $0 + StrCpy $1 "mb" + ${If} $0 > 1024 + ${OrIf} $0 < 0 + System::Int64Op $0 / 1024 + Pop $0 + StrCpy $1 "gb" + ${EndIf} + ${EndIf} + ${EndIf} + + SendMessage $FREESPACE ${WM_SETTEXT} 0 "STR:Free space: $0$1" + +FunctionEnd + +Function DirChange + + Pop $0 # dir hwnd + + GetDlgItem $0 $HWNDPARENT 1 + + System::Call user32::GetWindowText(p$DIRECTORY,t.d,i${NSIS_MAX_STRLEN}) + + ${If} ${FileExists} $INSTDIR\makensis.exe + EnableWindow $0 1 + ${Else} + EnableWindow $0 0 + ${EndIf} + + Call UpdateFreeSpace + +FunctionEnd + +Section +SectionEnd diff --git a/tools/Examples/nsExec/test.nsi b/tools/Examples/nsExec/test.nsi new file mode 100644 index 0000000..5a0c931 --- /dev/null +++ b/tools/Examples/nsExec/test.nsi @@ -0,0 +1,31 @@ +Name "nsExec Test" + +OutFile "nsExec Test.exe" + +ShowInstDetails show + +Section "Silent MakeNSIS" + nsExec::Exec '"${NSISDIR}\makensis.exe"' + Pop $0 # return value/error/timeout + DetailPrint "" + DetailPrint " Return value: $0" + DetailPrint "" +SectionEnd + +Section "MakeNSIS commands help" + nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP' + Pop $0 # return value/error/timeout + DetailPrint "" + DetailPrint " Return value: $0" + DetailPrint "" +SectionEnd + +Section "Output to variable" + nsExec::ExecToStack '"${NSISDIR}\makensis.exe" /VERSION' + Pop $0 # return value/error/timeout + Pop $1 # printed text, up to ${NSIS_MAX_STRLEN} + DetailPrint '"${NSISDIR}\makensis.exe" /VERSION printed: $1' + DetailPrint "" + DetailPrint " Return value: $0" + DetailPrint "" +SectionEnd \ No newline at end of file diff --git a/tools/Examples/one-section.nsi b/tools/Examples/one-section.nsi new file mode 100644 index 0000000..ef3779b --- /dev/null +++ b/tools/Examples/one-section.nsi @@ -0,0 +1,80 @@ +; one-section.nsi +; +; This example demonstrates how to control section selection. +; It allows only one of the sections of a group to be selected. + +;-------------------------------- + +; Section define/macro header file +; See this header file for more info + +!include "Sections.nsh" + +;-------------------------------- + +Name "One Section" +OutFile "one-section.exe" +RequestExecutionLevel user + +;-------------------------------- + +; Pages + +Page Components +Page InstFiles + +;-------------------------------- + +; Sections + +Section !Required + SectionIn RO +SectionEnd + +Section "Group 1 - Option 1" g1o1 +SectionEnd + +Section /o "Group 1 - Option 2" g1o2 +SectionEnd + +Section /o "Group 1 - Option 3" g1o3 +SectionEnd + +Section "Group 2 - Option 1" g2o1 +SectionEnd + +Section /o "Group 2 - Option 2" g2o2 +SectionEnd + +Section /o "Group 2 - Option 3" g2o3 +SectionEnd + +;-------------------------------- + +; Functions + +; $1 stores the status of group 1 +; $2 stores the status of group 2 + +Function .onInit + + StrCpy $1 ${g1o1} ; Group 1 - Option 1 is selected by default + StrCpy $2 ${g2o1} ; Group 2 - Option 1 is selected by default + +FunctionEnd + +Function .onSelChange + + !insertmacro StartRadioButtons $1 + !insertmacro RadioButton ${g1o1} + !insertmacro RadioButton ${g1o2} + !insertmacro RadioButton ${g1o3} + !insertmacro EndRadioButtons + + !insertmacro StartRadioButtons $2 + !insertmacro RadioButton ${g2o1} + !insertmacro RadioButton ${g2o2} + !insertmacro RadioButton ${g2o3} + !insertmacro EndRadioButtons + +FunctionEnd \ No newline at end of file diff --git a/tools/Examples/primes.nsi b/tools/Examples/primes.nsi new file mode 100644 index 0000000..1d8f196 --- /dev/null +++ b/tools/Examples/primes.nsi @@ -0,0 +1,70 @@ +; primes.nsi +; +; This is an example of the possibilities of the NSIS Script language. +; It calculates prime numbers. + +;-------------------------------- + +Name "primes" +AllowRootDirInstall true +OutFile "primes.exe" +Caption "Prime number generator" +ShowInstDetails show +AllowRootDirInstall true +InstallDir "$EXEDIR" +RequestExecutionLevel user + +DirText "Select a directory to write primes.txt. $_CLICK" + +;-------------------------------- + +;Pages + +Page directory +Page instfiles + +;-------------------------------- + +Section "" + SetOutPath $INSTDIR + Call DoPrimes +SectionEnd + +;-------------------------------- + +Function DoPrimes + +; we put this in here so it doesn't update the progress bar (faster) + +!define PPOS $0 ; position in prime searching +!define PDIV $1 ; divisor +!define PMOD $2 ; the result of the modulus +!define PCNT $3 ; count of how many we've printed + FileOpen $9 $INSTDIR\primes.txt w + + DetailPrint "2 is prime!" + FileWrite $9 "2 is prime!$\r$\n" + DetailPrint "3 is prime!" + FileWrite $9 "3 is prime!$\r$\n" + Strcpy ${PPOS} 3 + Strcpy ${PCNT} 2 +outerloop: + StrCpy ${PDIV} 3 + innerloop: + IntOp ${PMOD} ${PPOS} % ${PDIV} + IntCmp ${PMOD} 0 notprime + IntOp ${PDIV} ${PDIV} + 2 + IntCmp ${PDIV} ${PPOS} 0 innerloop 0 + DetailPrint "${PPOS} is prime!" + FileWrite $9 "${PPOS} is prime!$\r$\n" + IntOp ${PCNT} ${PCNT} + 1 + IntCmp ${PCNT} 100 0 innerloop + StrCpy ${PCNT} 0 + MessageBox MB_YESNO "Process more?" IDNO stop + notprime: + IntOp ${PPOS} ${PPOS} + 2 + Goto outerloop + stop: + FileClose $9 + +FunctionEnd \ No newline at end of file diff --git a/tools/Examples/rtest.nsi b/tools/Examples/rtest.nsi new file mode 100644 index 0000000..0a94515 --- /dev/null +++ b/tools/Examples/rtest.nsi @@ -0,0 +1,93 @@ +; rtest.nsi +; +; This script tests some advanced NSIS functions. + +;-------------------------------- + +Name "rtest" +OutFile "rtest.exe" + +ComponentText "Select tests!" +ShowInstDetails show + +RequestExecutionLevel user + +;-------------------------------- + +Section "Test 1" + + StrCpy $R0 "a" + + GetFunctionAddress $R1 test1 + Call $R1 + + StrCmp $R0 "a182345678" success + + DetailPrint "Test 1 failed (output: $R0)" + Goto end + + success: + DetailPrint "Test 1 succeeded (output: $R0)" + + end: + +SectionEnd + +Function test1 + + GetLabelAddress $9 skip + + IntOp $9 $9 - 1 + StrCpy $R0 $R01 + + Call $9 + + StrCpy $R0 $R02 + StrCpy $R0 $R03 + StrCpy $R0 $R04 + StrCpy $R0 $R05 + StrCpy $R0 $R06 + StrCpy $R0 $R07 + StrCpy $R0 $R08 + + skip: + +FunctionEnd + +;-------------------------------- + +Section "Test 2" + + StrCpy $R0 "0" + StrCpy $R1 "11" + + Call test2 + + StrCmp $R1 "11,10,9,8,7,6,5,4,3,2,1" success + + DetailPrint "Test 2 failed (output: $R1)" + Goto end + + success: + DetailPrint "Test 2 succeeded (output: $R1)" + + end: + +SectionEnd + +Function test2 + + IntOp $R0 $R0 + 1 + IntCmp $R0 10 done + + Push $R0 + + GetFunctionAddress $R2 test2 + Call $R2 + + Pop $R0 + + done: + StrCpy $R1 "$R1,$R0" + +FunctionEnd \ No newline at end of file diff --git a/tools/Examples/silent.nsi b/tools/Examples/silent.nsi new file mode 100644 index 0000000..d0492ce --- /dev/null +++ b/tools/Examples/silent.nsi @@ -0,0 +1,63 @@ +# This example shows how to handle silent installers. +# In short, you need IfSilent and the /SD switch for MessageBox to make your installer +# really silent when the /S switch is used. + +Name "Silent" +OutFile "silent.exe" +RequestExecutionLevel user + +# uncomment the following line to make the installer silent by default. +; SilentInstall silent + +Function .onInit + # `/SD IDYES' tells MessageBox to automatically choose IDYES if the installer is silent + # in this case, the installer can only be silent if the user used the /S switch or if + # you've uncommented line number 5 + MessageBox MB_YESNO|MB_ICONQUESTION "Would you like the installer to be silent from now on?" \ + /SD IDYES IDNO no IDYES yes + + # SetSilent can only be used in .onInit and doesn't work well along with `SetSilent silent' + + yes: + SetSilent silent + Goto done + no: + SetSilent normal + done: +FunctionEnd + +Section + IfSilent 0 +2 + MessageBox MB_OK|MB_ICONINFORMATION 'This is a "silent" installer' + + # there is no need to use IfSilent for this one because the /SD switch takes care of that + MessageBox MB_OK|MB_ICONINFORMATION "This is not a silent installer" /SD IDOK + + # when `SetOverwrite on' (which is the default) is used, the installer will show a message + # if it can't open a file for writing. On silent installers, the ignore option will be + # automatically selected. if `AllowSkipFiles off' (default is on) was used, there is no + # ignore option and the cancel option will be automatically selected. + + # on is default + ; AllowSkipFiles on + + # lock file + FileOpen $0 $TEMP\silentOverwrite w + # try to extract - will fail + File /oname=$TEMP\silentOverwrite silent.nsi + # unlcok + FileClose $0 + + # this will always show on silent installers because ignore is the option automatically + # selected when a file can't be opened for writing on a silent installer + MessageBox MB_OK|MB_ICONINFORMATION "This message box always shows if the installer is silent" + + AllowSkipFiles off + + # lock file + FileOpen $0 $TEMP\silentOverwrite w + # try to extract - will fail + File /oname=$TEMP\silentOverwrite silent.nsi + # unlcok + FileClose $0 +SectionEnd \ No newline at end of file diff --git a/tools/Examples/unicode.nsi b/tools/Examples/unicode.nsi new file mode 100644 index 0000000..6c604f3 --- /dev/null +++ b/tools/Examples/unicode.nsi @@ -0,0 +1,47 @@ +; Unicode installers will not be able to run on Windows 9x! +Unicode true + +Name "Unicode Games" +OutFile "unicode.exe" +RequestExecutionLevel User +ShowInstDetails show +XPStyle on + + +Section "Unicode in UI" + + DetailPrint "Hello World!" + DetailPrint "×©×œ×•× ×¢×•×œ×!" + DetailPrint "مرحبا العالم!" + DetailPrint "ã“ã‚“ã«ã¡ã¯ã€ä¸–ç•Œï¼" + DetailPrint "你好世界ï¼" + DetailPrint "привет мир!" + DetailPrint "안녕하세요!" + + DetailPrint "${U+00A9}" # arbitrary unicode chars + +SectionEnd + + +Section "Unicode in Files" + + Var /Global Message + + InitPluginsDir + FileOpen $0 "$PluginsDir\Test.txt" w + IfErrors done + FileWriteUTF16LE /BOM $0 "Hello World " + FileWriteWord $0 0xD83C # Manually write ${U+1F30D} + FileWriteWord $0 0xDF0D # as surrogate-pair + FileWriteUTF16LE $0 " and Sun ${U+2600}$\r$\n" + FileClose $0 + + FileOpen $0 "$PluginsDir\Test.txt" r + IfErrors done + FileReadUTF16LE $0 $Message + FileClose $0 + + DetailPrint "Message: $Message" + done: + +SectionEnd diff --git a/tools/Examples/waplugin.nsi b/tools/Examples/waplugin.nsi new file mode 100644 index 0000000..37d74d5 --- /dev/null +++ b/tools/Examples/waplugin.nsi @@ -0,0 +1,205 @@ +; waplugin.nsi +; +; This script will generate an installer that installs a Winamp 2 plug-in. +; +; This installer will automatically alert the user that installation was +; successful, and ask them whether or not they would like to make the +; plug-in the default and run Winamp. + +;-------------------------------- + +; Uncomment the next line to enable auto Winamp download +; !define WINAMP_AUTOINSTALL + +; The name of the installer +Name "TinyVis Plug-in" + +; The file to write +OutFile "waplugin.exe" + +; The default installation directory +InstallDir $PROGRAMFILES\Winamp + +; detect winamp path from uninstall string if available +InstallDirRegKey HKLM \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" \ + "UninstallString" + +; The text to prompt the user to enter a directory +DirText "Please select your Winamp path below (you will be able to proceed when Winamp is detected):" +# currently doesn't work - DirShow hide + +; automatically close the installer when done. +AutoCloseWindow true + +; hide the "show details" box +ShowInstDetails nevershow + +; Request application privileges for Windows Vista +RequestExecutionLevel admin + +;-------------------------------- + +;Pages + +Page directory +Page instfiles + +;-------------------------------- + +; The stuff to install + +Section "" + +!ifdef WINAMP_AUTOINSTALL + Call MakeSureIGotWinamp +!endif + + Call QueryWinampVisPath + SetOutPath $1 + + ; File to extract + #File "C:\program files\winamp\plugins\vis_nsfs.dll" + File /oname=vis_nsfs.dll "${NSISDIR}\Plugins\x86-ansi\TypeLib.dll" # dummy plug-in + + ; prompt user, and if they select no, go to NoWinamp + MessageBox MB_YESNO|MB_ICONQUESTION \ + "The plug-in was installed. Would you like to run Winamp now with TinyVis as the default plug-in?" \ + IDNO NoWinamp + WriteINIStr "$INSTDIR\Winamp.ini" "Winamp" "visplugin_name" "vis_nsfs.dll" + WriteINIStr "$INSTDIR\Winamp.ini" "Winamp" "visplugin_num" "0" + Exec '"$INSTDIR\Winamp.exe"' + NoWinamp: + +SectionEnd + +;-------------------------------- + +Function .onVerifyInstDir + +!ifndef WINAMP_AUTOINSTALL + + ;Check for Winamp installation + + IfFileExists $INSTDIR\Winamp.exe Good + Abort + Good: + +!endif ; WINAMP_AUTOINSTALL + +FunctionEnd + +Function QueryWinampVisPath ; sets $1 with vis path + + StrCpy $1 $INSTDIR\Plugins + ; use DSPDir instead of VISDir to get DSP plugins directory + ReadINIStr $9 $INSTDIR\winamp.ini Winamp VisDir + StrCmp $9 "" End + IfFileExists $9 0 End + StrCpy $1 $9 ; update dir + End: + +FunctionEnd + +!ifdef WINAMP_AUTOINSTALL + +Function GetWinampInstPath + + Push $0 + Push $1 + Push $2 + ReadRegStr $0 HKLM \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" \ + "UninstallString" + StrCmp $0 "" fin + + StrCpy $1 $0 1 0 ; get firstchar + StrCmp $1 '"' "" getparent + ; if first char is ", let's remove "'s first. + StrCpy $0 $0 "" 1 + StrCpy $1 0 + rqloop: + StrCpy $2 $0 1 $1 + StrCmp $2 '"' rqdone + StrCmp $2 "" rqdone + IntOp $1 $1 + 1 + Goto rqloop + rqdone: + StrCpy $0 $0 $1 + getparent: + ; the uninstall string goes to an EXE, let's get the directory. + StrCpy $1 -1 + gploop: + StrCpy $2 $0 1 $1 + StrCmp $2 "" gpexit + StrCmp $2 "\" gpexit + IntOp $1 $1 - 1 + Goto gploop + gpexit: + StrCpy $0 $0 $1 + + StrCmp $0 "" fin + IfFileExists $0\winamp.exe fin + StrCpy $0 "" + fin: + Pop $2 + Pop $1 + Exch $0 + +FunctionEnd + +Function MakeSureIGotWinamp + + Call GetWinampInstPath + + Pop $0 + StrCmp $0 "" getwinamp + Return + + getwinamp: + + Call ConnectInternet ;Make an internet connection (if no connection available) + + StrCpy $2 "$TEMP\Winamp Installer.exe" + NSISdl::download http://download.nullsoft.com/winamp/client/winamp281_lite.exe $2 + Pop $0 + StrCmp $0 success success + SetDetailsView show + DetailPrint "download failed: $0" + Abort + success: + ExecWait '"$2" /S' + Delete $2 + Call GetWinampInstPath + Pop $0 + StrCmp $0 "" skip + StrCpy $INSTDIR $0 + skip: + +FunctionEnd + +Function ConnectInternet + + Push $R0 + + ClearErrors + Dialer::AttemptConnect + IfErrors noie3 + + Pop $R0 + StrCmp $R0 "online" connected + MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet." + Quit + + noie3: + + ; IE3 not installed + MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now." + + connected: + + Pop $R0 + +FunctionEnd + +!endif ; WINAMP_AUTOINSTALL \ No newline at end of file diff --git a/tools/Include/Colors.nsh b/tools/Include/Colors.nsh new file mode 100644 index 0000000..64ca3a1 --- /dev/null +++ b/tools/Include/Colors.nsh @@ -0,0 +1,75 @@ +!ifndef COLORS_NSH +!define COLORS_NSH + +!verbose push +!verbose 3 + +# Squad +# Rob Segal +# Joel +# Yathosho + + +# Predefined HTML Hex colors +!define WHITE "FFFFFF" +!define BLACK "000000" +!define YELLOW "FFFF00" +!define RED "FF0000" +!define GREEN "00FF00" +!define BLUE "0000FF" +!define MAGENTA "FF00FF" +!define CYAN "00FFFF" + +# Function to convert red , green and blue integer values to HTML Hex format +!define RGB '!insertmacro rgb2hex' + +# Function to convert red, green and blue integer values to Hexadecimal (0xRRGGBB) format +!define HEX '!insertmacro rgb2hex2' + +# Function to get the r value from a RGB number +!define GetRvalue '!insertmacro redvalue' + +# Function to get the g value from a RGB number +!define GetGvalue '!insertmacro greenvalue' + +# Function to get the b value from a RGB number +!define GetBvalue '!insertmacro bluevalue' + +# Function to get the r value from a Hex number +!define GetRvalueX '!insertmacro bluevalue' + +# Function to get the g value from a Hex number +!define GetGvalueX '!insertmacro greenvalue' + +# Function to get the r value from a HEX number +!define GetBvalueX '!insertmacro redvalue' + +!macro rgb2hex output R G B +IntFmt "${output}" "%02X" "${R}" +IntFmt "${output}" "${output}%02X" "${G}" +IntFmt "${output}" "${output}%02X" "${B}" +!macroend + +!macro rgb2hex2 output R G B +IntFmt "${output}" "%02X" "${B}" +IntFmt "${output}" "${output}%02X" "${G}" +IntFmt "${output}" "${output}%02X" "${R}" +!macroend + +!macro redvalue output hexval +StrCpy ${output} ${hexval} 2 0 +IntFmt "${output}" "%02i" "0x${output}" +!macroend + +!macro greenvalue output hexval +StrCpy ${output} ${hexval} 2 2 +IntFmt "${output}" "%02i" "0x${output}" +!macroend + +!macro bluevalue output hexval +StrCpy ${output} ${hexval} 2 4 +IntFmt "${output}" "%02i" "0x${output}" +!macroend + +!verbose pop +!endif \ No newline at end of file diff --git a/tools/Include/FileFunc.nsh b/tools/Include/FileFunc.nsh new file mode 100644 index 0000000..f993da4 --- /dev/null +++ b/tools/Include/FileFunc.nsh @@ -0,0 +1,2012 @@ +/* +_____________________________________________________________________________ + + File Functions Header v3.4 +_____________________________________________________________________________ + + 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + + See documentation for more information about the following functions. + + Usage in script: + 1. !include "FileFunc.nsh" + 2. [Section|Function] + ${FileFunction} "Param1" "Param2" "..." $var + [SectionEnd|FunctionEnd] + + + FileFunction=[Locate|GetSize|DriveSpace|GetDrives|GetTime|GetFileAttributes| + GetFileVersion|GetExeName|GetExePath|GetParameters|GetOptions| + GetOptionsS|GetRoot|GetParent|GetFileName|GetBaseName|GetFileExt| + BannerTrimPath|DirState|RefreshShellIcons] + +_____________________________________________________________________________ + + Thanks to: +_____________________________________________________________________________ + +GetSize + KiCHiK (Function "FindFiles") +DriveSpace + sunjammer (Function "CheckSpaceFree") +GetDrives + deguix (Based on his idea of Function "DetectDrives") +GetTime + Takhir (Script "StatTest") and deguix (Function "FileModifiedDate") +GetFileVersion + KiCHiK (Based on his example for command "GetDLLVersion") +GetParameters + sunjammer (Based on his Function "GetParameters") +GetRoot + KiCHiK (Based on his Function "GetRoot") +GetParent + sunjammer (Based on his Function "GetParent") +GetFileName + KiCHiK (Based on his Function "GetFileName") +GetBaseName + comperio (Based on his idea of Function "GetBaseName") +GetFileExt + opher (author) +RefreshShellIcons + jerome tremblay (author) +*/ + + +;_____________________________________________________________________________ +; +; Macros +;_____________________________________________________________________________ +; +; Change log window verbosity (default: 3=no script) +; +; Example: +; !include "FileFunc.nsh" +; !insertmacro Locate +; ${FILEFUNC_VERBOSE} 4 # all verbosity +; !insertmacro VersionCompare +; ${FILEFUNC_VERBOSE} 3 # no script + +!ifndef FILEFUNC_INCLUDED + +!verbose push 3 +!define /IfNDef _FILEFUNC_VERBOSE 3 +!verbose ${_FILEFUNC_VERBOSE} +!define FILEFUNC_VERBOSE `!insertmacro FILEFUNC_VERBOSE` + +!define FILEFUNC_INCLUDED + +!include Util.nsh + + +!macro FILEFUNC_VERBOSE _VERBOSE + !verbose push 3 + !define /ReDef _FILEFUNC_VERBOSE ${_VERBOSE} + !verbose pop +!macroend + +!macro LocateCall _PATH _OPTIONS _FUNC + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push $0 + Push `${_PATH}` + Push `${_OPTIONS}` + GetFunctionAddress $0 `${_FUNC}` + Push `$0` + ${CallArtificialFunction} Locate_ + Pop $0 + !verbose pop +!macroend + +!macro GetSizeCall _PATH _OPTIONS _RESULT1 _RESULT2 _RESULT3 + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PATH}` + Push `${_OPTIONS}` + ${CallArtificialFunction} GetSize_ + Pop ${_RESULT1} + Pop ${_RESULT2} + Pop ${_RESULT3} + !verbose pop +!macroend + +!macro DriveSpaceCall _DRIVE _OPTIONS _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_DRIVE}` + Push `${_OPTIONS}` + ${CallArtificialFunction} DriveSpace_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetDrivesCall _DRV _FUNC + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push $0 + Push `${_DRV}` + GetFunctionAddress $0 `${_FUNC}` + Push `$0` + ${CallArtificialFunction} GetDrives_ + Pop $0 + !verbose pop +!macroend + +!macro GetTimeCall _FILE _OPTION _RESULT1 _RESULT2 _RESULT3 _RESULT4 _RESULT5 _RESULT6 _RESULT7 + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_FILE}` + Push `${_OPTION}` + ${CallArtificialFunction} GetTime_ + Pop ${_RESULT1} + Pop ${_RESULT2} + Pop ${_RESULT3} + Pop ${_RESULT4} + Pop ${_RESULT5} + Pop ${_RESULT6} + Pop ${_RESULT7} + !verbose pop +!macroend + +!macro GetFileAttributesCall _PATH _ATTR _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PATH}` + Push `${_ATTR}` + ${CallArtificialFunction} GetFileAttributes_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetFileVersionCall _FILE _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_FILE}` + ${CallArtificialFunction} GetFileVersion_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetExeNameCall _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + ${CallArtificialFunction} GetExeName_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetExePathCall _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + ${CallArtificialFunction} GetExePath_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetParametersCall _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + ${CallArtificialFunction} GetParameters_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetOptionsCall _PARAMETERS _OPTION _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PARAMETERS}` + Push `${_OPTION}` + ${CallArtificialFunction} GetOptions_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetOptionsSCall _PARAMETERS _OPTION _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PARAMETERS}` + Push `${_OPTION}` + ${CallArtificialFunction} GetOptionsS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetRootCall _FULLPATH _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_FULLPATH}` + ${CallArtificialFunction} GetRoot_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetParentCall _PATHSTRING _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PATHSTRING}` + ${CallArtificialFunction} GetParent_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetFileNameCall _PATHSTRING _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PATHSTRING}` + ${CallArtificialFunction} GetFileName_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetBaseNameCall _FILESTRING _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_FILESTRING}` + ${CallArtificialFunction} GetBaseName_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro GetFileExtCall _FILESTRING _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_FILESTRING}` + ${CallArtificialFunction} GetFileExt_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro BannerTrimPathCall _PATH _LENGHT _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PATH}` + Push `${_LENGHT}` + ${CallArtificialFunction} BannerTrimPath_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro DirStateCall _PATH _RESULT + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + Push `${_PATH}` + ${CallArtificialFunction} DirState_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro RefreshShellIconsCall + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + ${CallArtificialFunction} RefreshShellIcons_ + !verbose pop +!macroend + +!define Locate `!insertmacro LocateCall` +!define un.Locate `!insertmacro LocateCall` + +!macro Locate +!macroend + +!macro un.Locate +!macroend + +!macro Locate_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R6 + Push $R7 + Push $R8 + Push $R9 + ClearErrors + + StrCpy $3 '' + StrCpy $4 '' + StrCpy $5 '' + StrCpy $6 '' + StrCpy $7 '' + StrCpy $8 0 + StrCpy $R7 '' + + StrCpy $R9 $0 1 -1 + StrCmp $R9 '\' 0 +3 + StrCpy $0 $0 -1 + goto -3 + IfFileExists '$0\*.*' 0 FileFunc_Locate_error + + FileFunc_Locate_option: + StrCpy $R9 $1 1 + StrCpy $1 $1 '' 1 + StrCmp $R9 ' ' -2 + StrCmp $R9 '' FileFunc_Locate_sizeset + StrCmp $R9 '/' 0 -4 + StrCpy $9 -1 + IntOp $9 $9 + 1 + StrCpy $R9 $1 1 $9 + StrCmp $R9 '' +2 + StrCmp $R9 '/' 0 -3 + StrCpy $R8 $1 $9 + StrCpy $R8 $R8 '' 2 + StrCpy $R9 $R8 '' -1 + StrCmp $R9 ' ' 0 +3 + StrCpy $R8 $R8 -1 + goto -3 + StrCpy $R9 $1 2 + StrCpy $1 $1 '' $9 + + StrCmp $R9 'L=' 0 FileFunc_Locate_mask + StrCpy $3 $R8 + StrCmp $3 '' +6 + StrCmp $3 'FD' +5 + StrCmp $3 'F' +4 + StrCmp $3 'D' +3 + StrCmp $3 'DE' +2 + StrCmp $3 'FDE' 0 FileFunc_Locate_error + goto FileFunc_Locate_option + + FileFunc_Locate_mask: + StrCmp $R9 'M=' 0 FileFunc_Locate_size + StrCpy $4 $R8 + goto FileFunc_Locate_option + + FileFunc_Locate_size: + StrCmp $R9 'S=' 0 FileFunc_Locate_gotosubdir + StrCpy $6 $R8 + goto FileFunc_Locate_option + + FileFunc_Locate_gotosubdir: + StrCmp $R9 'G=' 0 FileFunc_Locate_banner + StrCpy $7 $R8 + StrCmp $7 '' +3 + StrCmp $7 '1' +2 + StrCmp $7 '0' 0 FileFunc_Locate_error + goto FileFunc_Locate_option + + FileFunc_Locate_banner: + StrCmp $R9 'B=' 0 FileFunc_Locate_error + StrCpy $R7 $R8 + StrCmp $R7 '' +3 + StrCmp $R7 '1' +2 + StrCmp $R7 '0' 0 FileFunc_Locate_error + goto FileFunc_Locate_option + + FileFunc_Locate_sizeset: + StrCmp $6 '' FileFunc_Locate_default + StrCpy $9 0 + StrCpy $R9 $6 1 $9 + StrCmp $R9 '' +4 + StrCmp $R9 ':' +3 + IntOp $9 $9 + 1 + goto -4 + StrCpy $5 $6 $9 + IntOp $9 $9 + 1 + StrCpy $1 $6 1 -1 + StrCpy $6 $6 -1 $9 + StrCmp $5 '' +2 + IntOp $5 $5 + 0 + StrCmp $6 '' +2 + IntOp $6 $6 + 0 + + StrCmp $1 'B' 0 +3 + StrCpy $1 1 + goto FileFunc_Locate_default + StrCmp $1 'K' 0 +3 + StrCpy $1 1024 + goto FileFunc_Locate_default + StrCmp $1 'M' 0 +3 + StrCpy $1 1048576 + goto FileFunc_Locate_default + StrCmp $1 'G' 0 FileFunc_Locate_error + StrCpy $1 1073741824 + + FileFunc_Locate_default: + StrCmp $3 '' 0 +2 + StrCpy $3 'FD' + StrCmp $4 '' 0 +2 + StrCpy $4 '*.*' + StrCmp $7 '' 0 +2 + StrCpy $7 '1' + StrCmp $R7 '' 0 +2 + StrCpy $R7 '0' + StrCpy $7 'G$7B$R7' + + StrCpy $8 1 + Push $0 + SetDetailsPrint textonly + + FileFunc_Locate_nextdir: + IntOp $8 $8 - 1 + Pop $R8 + + StrCpy $9 $7 2 2 + StrCmp $9 'B0' +3 + GetLabelAddress $9 FileFunc_Locate_findfirst + goto call + DetailPrint 'Search in: $R8' + + FileFunc_Locate_findfirst: + FindFirst $0 $R7 '$R8\$4' + IfErrors FileFunc_Locate_subdir + StrCmp $R7 '.' 0 FileFunc_Locate_dir + FindNext $0 $R7 + StrCmp $R7 '..' 0 FileFunc_Locate_dir + FindNext $0 $R7 + IfErrors 0 FileFunc_Locate_dir + FindClose $0 + goto FileFunc_Locate_subdir + + FileFunc_Locate_dir: + IfFileExists '$R8\$R7\*.*' 0 FileFunc_Locate_file + StrCpy $R6 '' + StrCmp $3 'DE' +4 + StrCmp $3 'FDE' +3 + StrCmp $3 'FD' FileFunc_Locate_precall + StrCmp $3 'F' FileFunc_Locate_findnext FileFunc_Locate_precall + FindFirst $9 $R9 '$R8\$R7\*.*' + StrCmp $R9 '.' 0 +4 + FindNext $9 $R9 + StrCmp $R9 '..' 0 +2 + FindNext $9 $R9 + FindClose $9 + IfErrors FileFunc_Locate_precall FileFunc_Locate_findnext + + FileFunc_Locate_file: + StrCmp $3 'FDE' +3 + StrCmp $3 'FD' +2 + StrCmp $3 'F' 0 FileFunc_Locate_findnext + StrCpy $R6 0 + StrCmp $5$6 '' FileFunc_Locate_precall + FileOpen $9 '$R8\$R7' r + IfErrors +3 + FileSeek $9 0 END $R6 + FileClose $9 + System::Int64Op $R6 / $1 + Pop $R6 + StrCmp $5 '' +2 + IntCmp $R6 $5 0 FileFunc_Locate_findnext + StrCmp $6 '' +2 + IntCmp $R6 $6 0 0 FileFunc_Locate_findnext + + FileFunc_Locate_precall: + StrCpy $9 0 + StrCpy $R9 '$R8\$R7' + + call: + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R7 + Push $R8 + StrCmp $9 0 +4 + StrCpy $R6 '' + StrCpy $R7 '' + StrCpy $R9 '' + Call $2 + Pop $R9 + Pop $R8 + Pop $R7 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + IfErrors 0 +3 + FindClose $0 + goto FileFunc_Locate_error + StrCmp $R9 'StopLocate' 0 +3 + FindClose $0 + goto FileFunc_Locate_clearstack + goto $9 + + FileFunc_Locate_findnext: + FindNext $0 $R7 + IfErrors 0 FileFunc_Locate_dir + FindClose $0 + + FileFunc_Locate_subdir: + StrCpy $9 $7 2 + StrCmp $9 'G0' FileFunc_Locate_end + FindFirst $0 $R7 '$R8\*.*' + StrCmp $R7 '.' 0 FileFunc_Locate_pushdir + FindNext $0 $R7 + StrCmp $R7 '..' 0 FileFunc_Locate_pushdir + FindNext $0 $R7 + IfErrors 0 FileFunc_Locate_pushdir + FindClose $0 + StrCmp $8 0 FileFunc_Locate_end FileFunc_Locate_nextdir + + FileFunc_Locate_pushdir: + IfFileExists '$R8\$R7\*.*' 0 +3 + Push '$R8\$R7' + IntOp $8 $8 + 1 + FindNext $0 $R7 + IfErrors 0 FileFunc_Locate_pushdir + FindClose $0 + StrCmp $8 0 FileFunc_Locate_end FileFunc_Locate_nextdir + + FileFunc_Locate_error: + SetErrors + + FileFunc_Locate_clearstack: + StrCmp $8 0 FileFunc_Locate_end + IntOp $8 $8 - 1 + Pop $R8 + goto FileFunc_Locate_clearstack + + FileFunc_Locate_end: + SetDetailsPrint both + Pop $R9 + Pop $R8 + Pop $R7 + Pop $R6 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + !verbose pop +!macroend + +!define GetSize `!insertmacro GetSizeCall` +!define un.GetSize `!insertmacro GetSizeCall` + +!macro GetSize +!macroend + +!macro un.GetSize +!macroend + +!macro GetSize_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + Push $R7 + Push $R8 + Push $R9 + ClearErrors + + StrCpy $R9 $0 1 -1 + StrCmp $R9 '\' 0 +3 + StrCpy $0 $0 -1 + goto -3 + IfFileExists '$0\*.*' 0 FileFunc_GetSize_error + + StrCpy $3 '' + StrCpy $4 '' + StrCpy $5 '' + StrCpy $6 '' + StrCpy $8 0 + StrCpy $R3 '' + StrCpy $R4 '' + StrCpy $R5 '' + + FileFunc_GetSize_option: + StrCpy $R9 $1 1 + StrCpy $1 $1 '' 1 + StrCmp $R9 ' ' -2 + StrCmp $R9 '' FileFunc_GetSize_sizeset + StrCmp $R9 '/' 0 -4 + + StrCpy $9 -1 + IntOp $9 $9 + 1 + StrCpy $R9 $1 1 $9 + StrCmp $R9 '' +2 + StrCmp $R9 '/' 0 -3 + StrCpy $8 $1 $9 + StrCpy $8 $8 '' 2 + StrCpy $R9 $8 '' -1 + StrCmp $R9 ' ' 0 +3 + StrCpy $8 $8 -1 + goto -3 + StrCpy $R9 $1 2 + StrCpy $1 $1 '' $9 + + StrCmp $R9 'M=' 0 FileFunc_GetSize_size + StrCpy $4 $8 + goto FileFunc_GetSize_option + + FileFunc_GetSize_size: + StrCmp $R9 'S=' 0 FileFunc_GetSize_gotosubdir + StrCpy $6 $8 + goto FileFunc_GetSize_option + + FileFunc_GetSize_gotosubdir: + StrCmp $R9 'G=' 0 FileFunc_GetSize_error + StrCpy $7 $8 + StrCmp $7 '' +3 + StrCmp $7 '1' +2 + StrCmp $7 '0' 0 FileFunc_GetSize_error + goto FileFunc_GetSize_option + + FileFunc_GetSize_sizeset: + StrCmp $6 '' FileFunc_GetSize_default + StrCpy $9 0 + StrCpy $R9 $6 1 $9 + StrCmp $R9 '' +4 + StrCmp $R9 ':' +3 + IntOp $9 $9 + 1 + goto -4 + StrCpy $5 $6 $9 + IntOp $9 $9 + 1 + StrCpy $1 $6 1 -1 + StrCpy $6 $6 -1 $9 + StrCmp $5 '' +2 + IntOp $5 $5 + 0 + StrCmp $6 '' +2 + IntOp $6 $6 + 0 + + StrCmp $1 'B' 0 +4 + StrCpy $1 1 + StrCpy $2 bytes + goto FileFunc_GetSize_default + StrCmp $1 'K' 0 +4 + StrCpy $1 1024 + StrCpy $2 Kb + goto FileFunc_GetSize_default + StrCmp $1 'M' 0 +4 + StrCpy $1 1048576 + StrCpy $2 Mb + goto FileFunc_GetSize_default + StrCmp $1 'G' 0 FileFunc_GetSize_error + StrCpy $1 1073741824 + StrCpy $2 Gb + + FileFunc_GetSize_default: + StrCmp $4 '' 0 +2 + StrCpy $4 '*.*' + StrCmp $7 '' 0 +2 + StrCpy $7 '1' + + StrCpy $8 1 + Push $0 + SetDetailsPrint textonly + + FileFunc_GetSize_nextdir: + IntOp $8 $8 - 1 + Pop $R8 + FindFirst $0 $R7 '$R8\$4' + IfErrors FileFunc_GetSize_show + StrCmp $R7 '.' 0 FileFunc_GetSize_dir + FindNext $0 $R7 + StrCmp $R7 '..' 0 FileFunc_GetSize_dir + FindNext $0 $R7 + IfErrors 0 FileFunc_GetSize_dir + FindClose $0 + goto FileFunc_GetSize_show + + FileFunc_GetSize_dir: + IfFileExists '$R8\$R7\*.*' 0 FileFunc_GetSize_file + IntOp $R5 $R5 + 1 + goto FileFunc_GetSize_findnext + + FileFunc_GetSize_file: + StrCpy $R6 0 + StrCmp $5$6 '' 0 +3 + IntOp $R4 $R4 + 1 + goto FileFunc_GetSize_findnext + FileOpen $9 '$R8\$R7' r + IfErrors +3 + FileSeek $9 0 END $R6 + FileClose $9 + StrCmp $5 '' +2 + IntCmp $R6 $5 0 FileFunc_GetSize_findnext + StrCmp $6 '' +2 + IntCmp $R6 $6 0 0 FileFunc_GetSize_findnext + IntOp $R4 $R4 + 1 + System::Int64Op $R3 + $R6 + Pop $R3 + + FileFunc_GetSize_findnext: + FindNext $0 $R7 + IfErrors 0 FileFunc_GetSize_dir + FindClose $0 + + FileFunc_GetSize_show: + StrCmp $5$6 '' FileFunc_GetSize_nosize + System::Int64Op $R3 / $1 + Pop $9 + DetailPrint 'Size:$9 $2 Files:$R4 Folders:$R5' + goto FileFunc_GetSize_subdir + FileFunc_GetSize_nosize: + DetailPrint 'Files:$R4 Folders:$R5' + + FileFunc_GetSize_subdir: + StrCmp $7 0 FileFunc_GetSize_preend + FindFirst $0 $R7 '$R8\*.*' + StrCmp $R7 '.' 0 FileFunc_GetSize_pushdir + FindNext $0 $R7 + StrCmp $R7 '..' 0 FileFunc_GetSize_pushdir + FindNext $0 $R7 + IfErrors 0 FileFunc_GetSize_pushdir + FindClose $0 + StrCmp $8 0 FileFunc_GetSize_preend FileFunc_GetSize_nextdir + + FileFunc_GetSize_pushdir: + IfFileExists '$R8\$R7\*.*' 0 +3 + Push '$R8\$R7' + IntOp $8 $8 + 1 + FindNext $0 $R7 + IfErrors 0 FileFunc_GetSize_pushdir + FindClose $0 + StrCmp $8 0 FileFunc_GetSize_preend FileFunc_GetSize_nextdir + + FileFunc_GetSize_preend: + StrCmp $R3 '' FileFunc_GetSize_nosizeend + System::Int64Op $R3 / $1 + Pop $R3 + FileFunc_GetSize_nosizeend: + StrCpy $2 $R4 + StrCpy $1 $R5 + StrCpy $0 $R3 + goto FileFunc_GetSize_end + + FileFunc_GetSize_error: + SetErrors + StrCpy $0 '' + StrCpy $1 '' + StrCpy $2 '' + + FileFunc_GetSize_end: + SetDetailsPrint both + Pop $R9 + Pop $R8 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Exch $2 + Exch + Exch $1 + Exch 2 + Exch $0 + + !verbose pop +!macroend + +!define DriveSpace `!insertmacro DriveSpaceCall` +!define un.DriveSpace `!insertmacro DriveSpaceCall` + +!macro DriveSpace +!macroend + +!macro un.DriveSpace +!macroend + +!macro DriveSpace_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + ClearErrors + + StrCpy $2 $0 1 -1 + StrCmp $2 '\' 0 +3 + StrCpy $0 $0 -1 + goto -3 + IfFileExists '$0\NUL' 0 FileFunc_DriveSpace_error + + StrCpy $5 '' + StrCpy $6 '' + + FileFunc_DriveSpace_option: + StrCpy $2 $1 1 + StrCpy $1 $1 '' 1 + StrCmp $2 ' ' -2 + StrCmp $2 '' FileFunc_DriveSpace_default + StrCmp $2 '/' 0 -4 + StrCpy $3 -1 + IntOp $3 $3 + 1 + StrCpy $2 $1 1 $3 + StrCmp $2 '' +2 + StrCmp $2 '/' 0 -3 + StrCpy $4 $1 $3 + StrCpy $4 $4 '' 2 + StrCpy $2 $4 1 -1 + StrCmp $2 ' ' 0 +3 + StrCpy $4 $4 -1 + goto -3 + StrCpy $2 $1 2 + StrCpy $1 $1 '' $3 + + StrCmp $2 'D=' 0 FileFunc_DriveSpace_unit + StrCpy $5 $4 + StrCmp $5 '' +4 + StrCmp $5 'T' +3 + StrCmp $5 'O' +2 + StrCmp $5 'F' 0 FileFunc_DriveSpace_error + goto FileFunc_DriveSpace_option + + FileFunc_DriveSpace_unit: + StrCmp $2 'S=' 0 FileFunc_DriveSpace_error + StrCpy $6 $4 + goto FileFunc_DriveSpace_option + + FileFunc_DriveSpace_default: + StrCmp $5 '' 0 +2 + StrCpy $5 'T' + StrCmp $6 '' 0 +3 + StrCpy $6 '1' + goto FileFunc_DriveSpace_getspace + + StrCmp $6 'B' 0 +3 + StrCpy $6 1 + goto FileFunc_DriveSpace_getspace + StrCmp $6 'K' 0 +3 + StrCpy $6 1024 + goto FileFunc_DriveSpace_getspace + StrCmp $6 'M' 0 +3 + StrCpy $6 1048576 + goto FileFunc_DriveSpace_getspace + StrCmp $6 'G' 0 FileFunc_DriveSpace_error + StrCpy $6 1073741824 + + FileFunc_DriveSpace_getspace: + System::Call 'kernel32::GetDiskFreeSpaceEx(t, *l, *l, *l)i(r0,.r2,.r3,.)' + + StrCmp $5 T 0 +3 + StrCpy $0 $3 + goto FileFunc_DriveSpace_getsize + StrCmp $5 O 0 +4 + System::Int64Op $3 - $2 + Pop $0 + goto FileFunc_DriveSpace_getsize + StrCmp $5 F 0 +2 + StrCpy $0 $2 + + FileFunc_DriveSpace_getsize: + System::Int64Op $0 / $6 + Pop $0 + goto FileFunc_DriveSpace_end + + FileFunc_DriveSpace_error: + SetErrors + StrCpy $0 '' + + FileFunc_DriveSpace_end: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetDrives `!insertmacro GetDrivesCall` +!define un.GetDrives `!insertmacro GetDrivesCall` + +!macro GetDrives +!macroend + +!macro un.GetDrives +!macroend + +!macro GetDrives_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $8 + Push $9 + + System::StrAlloc 1024 + Pop $2 + System::Call 'kernel32::GetLogicalDriveStrings(i,i) i(1024, r2)' + + StrCmp $0 ALL FileFunc_GetDrives_drivestring + StrCmp $0 '' 0 FileFunc_GetDrives_typeset + StrCpy $0 ALL + goto FileFunc_GetDrives_drivestring + + FileFunc_GetDrives_typeset: + StrCpy $6 -1 + IntOp $6 $6 + 1 + StrCpy $8 $0 1 $6 + StrCmp $8$0 '' FileFunc_GetDrives_enumex + StrCmp $8 '' +2 + StrCmp $8 '+' 0 -4 + StrCpy $8 $0 $6 + IntOp $6 $6 + 1 + StrCpy $0 $0 '' $6 + + StrCmp $8 'FDD' 0 +3 + StrCpy $6 2 + goto FileFunc_GetDrives_drivestring + StrCmp $8 'HDD' 0 +3 + StrCpy $6 3 + goto FileFunc_GetDrives_drivestring + StrCmp $8 'NET' 0 +3 + StrCpy $6 4 + goto FileFunc_GetDrives_drivestring + StrCmp $8 'CDROM' 0 +3 + StrCpy $6 5 + goto FileFunc_GetDrives_drivestring + StrCmp $8 'RAM' 0 FileFunc_GetDrives_typeset + StrCpy $6 6 + + FileFunc_GetDrives_drivestring: + StrCpy $3 $2 + + FileFunc_GetDrives_enumok: + System::Call 'kernel32::lstrlen(t) i(i r3) .r4' + StrCmp $4$0 '0ALL' FileFunc_GetDrives_enumex + StrCmp $4 0 FileFunc_GetDrives_typeset + System::Call 'kernel32::GetDriveType(t) i(i r3) .r5' + + StrCmp $0 ALL +2 + StrCmp $5 $6 FileFunc_GetDrives_letter FileFunc_GetDrives_enumnext + StrCmp $5 2 0 +3 + StrCpy $8 FDD + goto FileFunc_GetDrives_letter + StrCmp $5 3 0 +3 + StrCpy $8 HDD + goto FileFunc_GetDrives_letter + StrCmp $5 4 0 +3 + StrCpy $8 NET + goto FileFunc_GetDrives_letter + StrCmp $5 5 0 +3 + StrCpy $8 CDROM + goto FileFunc_GetDrives_letter + StrCmp $5 6 0 FileFunc_GetDrives_enumex + StrCpy $8 RAM + + FileFunc_GetDrives_letter: + System::Call '*$3(&t1024 .r9)' + + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $8 + Call $1 + Pop $9 + Pop $8 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + StrCmp $9 'StopGetDrives' FileFunc_GetDrives_enumex + + FileFunc_GetDrives_enumnext: + IntOp $4 $4 * ${NSIS_CHAR_SIZE} + IntOp $3 $3 + $4 + IntOp $3 $3 + ${NSIS_CHAR_SIZE} + goto FileFunc_GetDrives_enumok + + FileFunc_GetDrives_enumex: + System::Free $2 + + Pop $9 + Pop $8 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + !verbose pop +!macroend + +!define GetTime `!insertmacro GetTimeCall` +!define un.GetTime `!insertmacro GetTimeCall` + +!macro GetTime +!macroend + +!macro un.GetTime +!macroend + +!macro GetTime_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + ClearErrors + + StrCmp $1 'L' FileFunc_GetTime_gettime + StrCmp $1 'A' FileFunc_GetTime_getfile + StrCmp $1 'C' FileFunc_GetTime_getfile + StrCmp $1 'M' FileFunc_GetTime_getfile + StrCmp $1 'LS' FileFunc_GetTime_gettime + StrCmp $1 'AS' FileFunc_GetTime_getfile + StrCmp $1 'CS' FileFunc_GetTime_getfile + StrCmp $1 'MS' FileFunc_GetTime_getfile + goto FileFunc_GetTime_error + + FileFunc_GetTime_getfile: + IfFileExists $0 0 FileFunc_GetTime_error + System::Call '*(i,l,l,l,i,i,i,i,&t260,&t14) p .r6' + System::Call 'kernel32::FindFirstFile(t,p)p(r0,r6) .r2' + System::Call 'kernel32::FindClose(i)i(r2)' + + FileFunc_GetTime_gettime: + System::Call '*(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2) p .r7' + StrCmp $1 'L' 0 FileFunc_GetTime_systemtime + System::Call 'kernel32::GetLocalTime(p)i(r7)' + goto FileFunc_GetTime_convert + FileFunc_GetTime_systemtime: + StrCmp $1 'LS' 0 FileFunc_GetTime_filetime + System::Call 'kernel32::GetSystemTime(p)i(r7)' + goto FileFunc_GetTime_convert + + FileFunc_GetTime_filetime: + System::Call '*$6(i,l,l,l,i,i,i,i,&t260,&t14)p(,.r4,.r3,.r2)' + System::Free $6 + StrCmp $1 'A' 0 +3 + StrCpy $2 $3 + goto FileFunc_GetTime_tolocal + StrCmp $1 'C' 0 +3 + StrCpy $2 $4 + goto FileFunc_GetTime_tolocal + StrCmp $1 'M' FileFunc_GetTime_tolocal + + StrCmp $1 'AS' FileFunc_GetTime_tosystem + StrCmp $1 'CS' 0 +3 + StrCpy $3 $4 + goto FileFunc_GetTime_tosystem + StrCmp $1 'MS' 0 +3 + StrCpy $3 $2 + goto FileFunc_GetTime_tosystem + + FileFunc_GetTime_tolocal: + System::Call 'kernel32::FileTimeToLocalFileTime(*l,*l)i(r2,.r3)' + FileFunc_GetTime_tosystem: + System::Call 'kernel32::FileTimeToSystemTime(*l,i)i(r3,r7)' + + FileFunc_GetTime_convert: + System::Call '*$7(&i2.r5,&i2.r6,&i2.r4,&i2.r0,&i2.r3,&i2.r2,&i2.r1,&i2)' + System::Free $7 + + IntFmt $6 "%.2u" $6 ; Month + IntFmt $0 "%.2u" $0 ; Day + IntFmt $3 "%.2u" $3 ; Hour + IntFmt $2 "%.2u" $2 ; Minute + IntFmt $1 "%.2u" $1 ; Second + + StrCmp $4 0 0 +3 + StrCpy $4 Sunday + goto FileFunc_GetTime_end + StrCmp $4 1 0 +3 + StrCpy $4 Monday + goto FileFunc_GetTime_end + StrCmp $4 2 0 +3 + StrCpy $4 Tuesday + goto FileFunc_GetTime_end + StrCmp $4 3 0 +3 + StrCpy $4 Wednesday + goto FileFunc_GetTime_end + StrCmp $4 4 0 +3 + StrCpy $4 Thursday + goto FileFunc_GetTime_end + StrCmp $4 5 0 +3 + StrCpy $4 Friday + goto FileFunc_GetTime_end + StrCmp $4 6 0 FileFunc_GetTime_error + StrCpy $4 Saturday + goto FileFunc_GetTime_end + + FileFunc_GetTime_error: + SetErrors + StrCpy $0 '' + StrCpy $1 '' + StrCpy $2 '' + StrCpy $3 '' + StrCpy $4 '' + StrCpy $5 '' + StrCpy $6 '' + + FileFunc_GetTime_end: + Pop $7 + Exch $6 + Exch + Exch $5 + Exch 2 + Exch $4 + Exch 3 + Exch $3 + Exch 4 + Exch $2 + Exch 5 + Exch $1 + Exch 6 + Exch $0 + + !verbose pop +!macroend + +!define GetFileAttributes `!insertmacro GetFileAttributesCall` +!define un.GetFileAttributes `!insertmacro GetFileAttributesCall` + +!macro GetFileAttributes +!macroend + +!macro un.GetFileAttributes +!macroend + +!macro GetFileAttributes_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + + System::Call 'kernel32::GetFileAttributes(t r0)i .r2' + StrCmp $2 -1 FileFunc_GetFileAttributes_error + StrCpy $3 '' + + IntOp $0 $2 & 0x4000 + IntCmp $0 0 +2 + StrCpy $3 'ENCRYPTED|' + + IntOp $0 $2 & 0x2000 + IntCmp $0 0 +2 + StrCpy $3 'NOT_CONTENT_INDEXED|$3' + + IntOp $0 $2 & 0x1000 + IntCmp $0 0 +2 + StrCpy $3 'OFFLINE|$3' + + IntOp $0 $2 & 0x0800 + IntCmp $0 0 +2 + StrCpy $3 'COMPRESSED|$3' + + IntOp $0 $2 & 0x0400 + IntCmp $0 0 +2 + StrCpy $3 'REPARSE_POINT|$3' + + IntOp $0 $2 & 0x0200 + IntCmp $0 0 +2 + StrCpy $3 'SPARSE_FILE|$3' + + IntOp $0 $2 & 0x0100 + IntCmp $0 0 +2 + StrCpy $3 'TEMPORARY|$3' + + IntOp $0 $2 & 0x0080 + IntCmp $0 0 +2 + StrCpy $3 'NORMAL|$3' + + IntOp $0 $2 & 0x0040 + IntCmp $0 0 +2 + StrCpy $3 'DEVICE|$3' + + IntOp $0 $2 & 0x0020 + IntCmp $0 0 +2 + StrCpy $3 'ARCHIVE|$3' + + IntOp $0 $2 & 0x0010 + IntCmp $0 0 +2 + StrCpy $3 'DIRECTORY|$3' + + IntOp $0 $2 & 0x0004 + IntCmp $0 0 +2 + StrCpy $3 'SYSTEM|$3' + + IntOp $0 $2 & 0x0002 + IntCmp $0 0 +2 + StrCpy $3 'HIDDEN|$3' + + IntOp $0 $2 & 0x0001 + IntCmp $0 0 +2 + StrCpy $3 'READONLY|$3' + + StrCpy $0 $3 -1 + StrCmp $1 '' FileFunc_GetFileAttributes_end + StrCmp $1 'ALL' FileFunc_GetFileAttributes_end + + FileFunc_GetFileAttributes_attrcmp: + StrCpy $5 0 + IntOp $5 $5 + 1 + StrCpy $4 $1 1 $5 + StrCmp $4 '' +2 + StrCmp $4 '|' 0 -3 + StrCpy $2 $1 $5 + IntOp $5 $5 + 1 + StrCpy $1 $1 '' $5 + StrLen $3 $2 + StrCpy $5 -1 + IntOp $5 $5 + 1 + StrCpy $4 $0 $3 $5 + StrCmp $4 '' FileFunc_GetFileAttributes_notfound + StrCmp $4 $2 0 -3 + StrCmp $1 '' 0 FileFunc_GetFileAttributes_attrcmp + StrCpy $0 1 + goto FileFunc_GetFileAttributes_end + + FileFunc_GetFileAttributes_notfound: + StrCpy $0 0 + goto FileFunc_GetFileAttributes_end + + FileFunc_GetFileAttributes_error: + SetErrors + StrCpy $0 '' + + FileFunc_GetFileAttributes_end: + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetFileVersion `!insertmacro GetFileVersionCall` +!define un.GetFileVersion `!insertmacro GetFileVersionCall` + +!macro GetFileVersion +!macroend + +!macro un.GetFileVersion +!macroend + +!macro GetFileVersion_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + ClearErrors + + GetDllVersion '$0' $1 $2 + IfErrors FileFunc_GetFileVersion_error + IntOp $3 $1 >> 16 + IntOp $3 $3 & 0x0000FFFF + IntOp $4 $1 & 0x0000FFFF + IntOp $5 $2 >> 16 + IntOp $5 $5 & 0x0000FFFF + IntOp $6 $2 & 0x0000FFFF + StrCpy $0 '$3.$4.$5.$6' + goto FileFunc_GetFileVersion_end + + FileFunc_GetFileVersion_error: + SetErrors + StrCpy $0 '' + + FileFunc_GetFileVersion_end: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetExeName `!insertmacro GetExeNameCall` +!define un.GetExeName `!insertmacro GetExeNameCall` + +!macro GetExeName +!macroend + +!macro un.GetExeName +!macroend + +!macro GetExeName_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Push $0 + Push $1 + Push $2 + System::Call 'kernel32::GetModuleFileName(p 0, t.r0, i ${NSIS_MAX_STRLEN})' + System::Call 'kernel32::GetLongPathName(t r0, t.r1, i ${NSIS_MAX_STRLEN})i.r2' + StrCmp $2 error +2 + StrCpy $0 $1 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetExePath `!insertmacro GetExePathCall` +!define un.GetExePath `!insertmacro GetExePathCall` + +!macro GetExePath +!macroend + +!macro un.GetExePath +!macroend + +!macro GetExePath_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Push $0 + Push $1 + Push $2 + StrCpy $0 $EXEDIR + System::Call 'kernel32::GetLongPathName(t r0, t.r1, i ${NSIS_MAX_STRLEN})i.r2' + StrCmp $2 error +2 + StrCpy $0 $1 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetParameters `!insertmacro GetParametersCall` +!define un.GetParameters `!insertmacro GetParametersCall` + +!macro GetParameters +!macroend + +!macro un.GetParameters +!macroend + +!macro GetParameters_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + ;cmdline-check + StrCmp $CMDLINE "" 0 +3 + Push "" + Return + + ;vars + Push $0 ;tmp + Push $1 ;length + Push $2 ;parameter offset + Push $3 ;separator + + ;length/offset + StrLen $1 $CMDLINE + StrCpy $2 2 ;start with third character + + ;separator + StrCpy $3 $CMDLINE 1 ;first character + StrCmp $3 '"' +2 + StrCpy $3 ' ' + + FileFunc_GetParameters_token: ;finding second separator + IntCmp $2 $1 FileFunc_GetParameters_strip 0 FileFunc_GetParameters_strip + StrCpy $0 $CMDLINE 1 $2 + IntOp $2 $2 + 1 + StrCmp $3 $0 0 FileFunc_GetParameters_token + + FileFunc_GetParameters_strip: ;strip white space + IntCmp $2 $1 FileFunc_GetParameters_copy 0 FileFunc_GetParameters_copy + StrCpy $0 $CMDLINE 1 $2 + StrCmp $0 ' ' 0 FileFunc_GetParameters_copy + IntOp $2 $2 + 1 + Goto FileFunc_GetParameters_strip + + FileFunc_GetParameters_copy: + StrCpy $0 $CMDLINE "" $2 + + ;strip white spaces from end + FileFunc_GetParameters_rstrip: + StrCpy $1 $0 1 -1 + StrCmp $1 ' ' 0 FileFunc_GetParameters_done + StrCpy $0 $0 -1 + Goto FileFunc_GetParameters_rstrip + + FileFunc_GetParameters_done: + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!macro GetOptionsBody _FILEFUNC_S + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + ClearErrors + + StrCpy $2 $1 '' 1 + StrCpy $1 $1 1 + StrLen $3 $2 + StrCpy $7 0 + + FileFunc_GetOptions${_FILEFUNC_S}_begin: + StrCpy $4 -1 + StrCpy $6 '' + + FileFunc_GetOptions${_FILEFUNC_S}_quote: + IntOp $4 $4 + 1 + StrCpy $5 $0 1 $4 + StrCmp${_FILEFUNC_S} $5$7 '0' FileFunc_GetOptions${_FILEFUNC_S}_notfound + StrCmp${_FILEFUNC_S} $5 '' FileFunc_GetOptions${_FILEFUNC_S}_trimright + StrCmp${_FILEFUNC_S} $5 '"' 0 +7 + StrCmp${_FILEFUNC_S} $6 '' 0 +3 + StrCpy $6 '"' + goto FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $6 '"' 0 +3 + StrCpy $6 '' + goto FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $5 `'` 0 +7 + StrCmp${_FILEFUNC_S} $6 `` 0 +3 + StrCpy $6 `'` + goto FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $6 `'` 0 +3 + StrCpy $6 `` + goto FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $5 '`' 0 +7 + StrCmp${_FILEFUNC_S} $6 '' 0 +3 + StrCpy $6 '`' + goto FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $6 '`' 0 +3 + StrCpy $6 '' + goto FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $6 '"' FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $6 `'` FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $6 '`' FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $5 $1 0 FileFunc_GetOptions${_FILEFUNC_S}_quote + StrCmp${_FILEFUNC_S} $7 0 FileFunc_GetOptions${_FILEFUNC_S}_trimleft FileFunc_GetOptions${_FILEFUNC_S}_trimright + + FileFunc_GetOptions${_FILEFUNC_S}_trimleft: + IntOp $4 $4 + 1 + StrCpy $5 $0 $3 $4 + StrCmp${_FILEFUNC_S} $5 '' FileFunc_GetOptions${_FILEFUNC_S}_notfound + StrCmp${_FILEFUNC_S} $5 $2 0 FileFunc_GetOptions${_FILEFUNC_S}_quote + IntOp $4 $4 + $3 + StrCpy $0 $0 '' $4 + StrCpy $4 $0 1 + StrCmp${_FILEFUNC_S} $4 ' ' 0 +3 + StrCpy $0 $0 '' 1 + goto -3 + StrCpy $7 1 + goto FileFunc_GetOptions${_FILEFUNC_S}_begin + + FileFunc_GetOptions${_FILEFUNC_S}_trimright: + StrCpy $0 $0 $4 + StrCpy $4 $0 1 -1 + StrCmp${_FILEFUNC_S} $4 ' ' 0 +3 + StrCpy $0 $0 -1 + goto -3 + StrCpy $3 $0 1 + StrCpy $4 $0 1 -1 + StrCmp${_FILEFUNC_S} $3 $4 0 FileFunc_GetOptions${_FILEFUNC_S}_end + StrCmp${_FILEFUNC_S} $3 '"' +3 + StrCmp${_FILEFUNC_S} $3 `'` +2 + StrCmp${_FILEFUNC_S} $3 '`' 0 FileFunc_GetOptions${_FILEFUNC_S}_end + StrCpy $0 $0 -1 1 + goto FileFunc_GetOptions${_FILEFUNC_S}_end + + FileFunc_GetOptions${_FILEFUNC_S}_notfound: + SetErrors + StrCpy $0 '' + + FileFunc_GetOptions${_FILEFUNC_S}_end: + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + +!macroend + +!define GetOptions `!insertmacro GetOptionsCall` +!define un.GetOptions `!insertmacro GetOptionsCall` + +!macro GetOptions +!macroend + +!macro un.GetOptions +!macroend + +!macro GetOptions_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + !insertmacro GetOptionsBody '' + + !verbose pop +!macroend + +!define GetOptionsS `!insertmacro GetOptionsSCall` +!define un.GetOptionsS `!insertmacro GetOptionsSCall` + +!macro GetOptionsS +!macroend + +!macro un.GetOptionsS +!macroend + +!macro GetOptionsS_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + !insertmacro GetOptionsBody 'S' + + !verbose pop +!macroend + +!define GetRoot `!insertmacro GetRootCall` +!define un.GetRoot `!insertmacro GetRootCall` + +!macro GetRoot +!macroend + +!macro un.GetRoot +!macroend + +!macro GetRoot_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + Push $3 + + StrCpy $1 $0 2 + StrCmp $1 '\\' FileFunc_GetRoot_UNC + StrCpy $2 $1 1 1 + StrCmp $2 ':' 0 FileFunc_GetRoot_empty + StrCpy $0 $1 + goto FileFunc_GetRoot_end + + FileFunc_GetRoot_UNC: + StrCpy $2 1 + StrCpy $3 '' + + FileFunc_GetRoot_loop: + IntOp $2 $2 + 1 + StrCpy $1 $0 1 $2 + StrCmp $1$3 '' FileFunc_GetRoot_empty + StrCmp $1 '' +5 + StrCmp $1 '\' 0 FileFunc_GetRoot_loop + StrCmp $3 '1' +3 + StrCpy $3 '1' + goto FileFunc_GetRoot_loop + StrCpy $0 $0 $2 + StrCpy $2 $0 1 -1 + StrCmp $2 '\' 0 FileFunc_GetRoot_end + + FileFunc_GetRoot_empty: + StrCpy $0 '' + + FileFunc_GetRoot_end: + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetParent `!insertmacro GetParentCall` +!define un.GetParent `!insertmacro GetParentCall` + +!macro GetParent +!macroend + +!macro un.GetParent +!macroend + +!macro GetParent_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + + StrCpy $2 $0 1 -1 + StrCmp $2 '\' 0 +3 + StrCpy $0 $0 -1 + goto -3 + + StrCpy $1 0 + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 '\' +2 + StrCmp $2 '' 0 -3 + StrCpy $0 $0 $1 + + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetFileName `!insertmacro GetFileNameCall` +!define un.GetFileName `!insertmacro GetFileNameCall` + +!macro GetFileName +!macroend + +!macro un.GetFileName +!macroend + +!macro GetFileName_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + + StrCpy $2 $0 1 -1 + StrCmp $2 '\' 0 +3 + StrCpy $0 $0 -1 + goto -3 + + StrCpy $1 0 + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 '' FileFunc_GetFileName_end + StrCmp $2 '\' 0 -3 + IntOp $1 $1 + 1 + StrCpy $0 $0 '' $1 + + FileFunc_GetFileName_end: + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetBaseName `!insertmacro GetBaseNameCall` +!define un.GetBaseName `!insertmacro GetBaseNameCall` + +!macro GetBaseName +!macroend + +!macro un.GetBaseName +!macroend + +!macro GetBaseName_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + Push $3 + + StrCpy $1 0 + StrCpy $3 '' + + FileFunc_GetBaseName_loop: + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 '' FileFunc_GetBaseName_trimpath + StrCmp $2 '\' FileFunc_GetBaseName_trimpath + StrCmp $3 'noext' FileFunc_GetBaseName_loop + StrCmp $2 '.' 0 FileFunc_GetBaseName_loop + StrCpy $0 $0 $1 + StrCpy $3 'noext' + StrCpy $1 0 + goto FileFunc_GetBaseName_loop + + FileFunc_GetBaseName_trimpath: + StrCmp $1 -1 FileFunc_GetBaseName_empty + IntOp $1 $1 + 1 + StrCpy $0 $0 '' $1 + goto FileFunc_GetBaseName_end + + FileFunc_GetBaseName_empty: + StrCpy $0 '' + + FileFunc_GetBaseName_end: + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define GetFileExt `!insertmacro GetFileExtCall` +!define un.GetFileExt `!insertmacro GetFileExtCall` + +!macro GetFileExt +!macroend + +!macro un.GetFileExt +!macroend + +!macro GetFileExt_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + + StrCpy $1 0 + + FileFunc_GetFileExt_loop: + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 '' FileFunc_GetFileExt_empty + StrCmp $2 '\' FileFunc_GetFileExt_empty + StrCmp $2 '.' 0 FileFunc_GetFileExt_loop + + StrCmp $1 -1 FileFunc_GetFileExt_empty + IntOp $1 $1 + 1 + StrCpy $0 $0 '' $1 + goto FileFunc_GetFileExt_end + + FileFunc_GetFileExt_empty: + StrCpy $0 '' + + FileFunc_GetFileExt_end: + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define BannerTrimPath `!insertmacro BannerTrimPathCall` +!define un.BannerTrimPath `!insertmacro BannerTrimPathCall` + +!macro BannerTrimPath +!macroend + +!macro un.BannerTrimPath +!macroend + +!macro BannerTrimPath_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + + StrCpy $3 $1 1 -1 + IntOp $1 $1 + 0 + StrLen $2 $0 + IntCmp $2 $1 FileFunc_BannerTrimPath_end FileFunc_BannerTrimPath_end + IntOp $1 $1 - 3 + IntCmp $1 0 FileFunc_BannerTrimPath_empty FileFunc_BannerTrimPath_empty + StrCmp $3 'A' FileFunc_BannerTrimPath_A-trim + StrCmp $3 'B' FileFunc_BannerTrimPath_B-trim + StrCmp $3 'C' FileFunc_BannerTrimPath_C-trim + StrCmp $3 'D' FileFunc_BannerTrimPath_D-trim + + FileFunc_BannerTrimPath_A-trim: + StrCpy $3 $0 1 1 + StrCpy $2 0 + StrCmp $3 ':' 0 +2 + IntOp $2 $2 + 2 + + FileFunc_BannerTrimPath_loopleft: + IntOp $2 $2 + 1 + StrCpy $3 $0 1 $2 + StrCmp $2 $1 FileFunc_BannerTrimPath_C-trim + StrCmp $3 '\' 0 FileFunc_BannerTrimPath_loopleft + StrCpy $3 $0 $2 + IntOp $2 $2 - $1 + IntCmp $2 0 FileFunc_BannerTrimPath_B-trim 0 FileFunc_BannerTrimPath_B-trim + + FileFunc_BannerTrimPath_loopright: + IntOp $2 $2 + 1 + StrCpy $4 $0 1 $2 + StrCmp $2 0 FileFunc_BannerTrimPath_B-trim + StrCmp $4 '\' 0 FileFunc_BannerTrimPath_loopright + StrCpy $4 $0 '' $2 + StrCpy $0 '$3\...$4' + goto FileFunc_BannerTrimPath_end + + FileFunc_BannerTrimPath_B-trim: + StrCpy $2 $1 + IntOp $2 $2 - 1 + StrCmp $2 -1 FileFunc_BannerTrimPath_C-trim + StrCpy $3 $0 1 $2 + StrCmp $3 '\' 0 -3 + StrCpy $0 $0 $2 + StrCpy $0 '$0\...' + goto FileFunc_BannerTrimPath_end + + FileFunc_BannerTrimPath_C-trim: + StrCpy $0 $0 $1 + StrCpy $0 '$0...' + goto FileFunc_BannerTrimPath_end + + FileFunc_BannerTrimPath_D-trim: + StrCpy $3 -1 + IntOp $3 $3 - 1 + StrCmp $3 -$2 FileFunc_BannerTrimPath_C-trim + StrCpy $4 $0 1 $3 + StrCmp $4 '\' 0 -3 + StrCpy $4 $0 '' $3 + IntOp $3 $1 + $3 + IntCmp $3 2 FileFunc_BannerTrimPath_C-trim FileFunc_BannerTrimPath_C-trim + StrCpy $0 $0 $3 + StrCpy $0 '$0...$4' + goto FileFunc_BannerTrimPath_end + + FileFunc_BannerTrimPath_empty: + StrCpy $0 '' + + FileFunc_BannerTrimPath_end: + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define DirState `!insertmacro DirStateCall` +!define un.DirState `!insertmacro DirStateCall` + +!macro DirState +!macroend + +!macro un.DirState +!macroend + +!macro DirState_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + Exch $0 + Push $1 + ClearErrors + + FindFirst $1 $0 '$0\*.*' + IfErrors 0 +3 + StrCpy $0 -1 + goto FileFunc_DirState_end + StrCmp $0 '.' 0 +4 + FindNext $1 $0 + StrCmp $0 '..' 0 +2 + FindNext $1 $0 + FindClose $1 + IfErrors 0 +3 + StrCpy $0 0 + goto FileFunc_DirState_end + StrCpy $0 1 + + FileFunc_DirState_end: + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define RefreshShellIcons `!insertmacro RefreshShellIconsCall` +!define un.RefreshShellIcons `!insertmacro RefreshShellIconsCall` + +!macro RefreshShellIcons +!macroend + +!macro un.RefreshShellIcons +!macroend + +!macro RefreshShellIcons_ + !verbose push + !verbose ${_FILEFUNC_VERBOSE} + + System::Call 'shell32::SHChangeNotify(i 0x08000000, i 0, i 0, i 0)' + + !verbose pop +!macroend + +!verbose pop +!endif diff --git a/tools/Include/InstallOptions.nsh b/tools/Include/InstallOptions.nsh new file mode 100644 index 0000000..04cd5b9 --- /dev/null +++ b/tools/Include/InstallOptions.nsh @@ -0,0 +1,244 @@ +/* + +InstallOptions.nsh +Macros and conversion functions for InstallOptions + +*/ + +!ifndef ___NSIS__INSTALL_OPTIONS__NSH___ +!define ___NSIS__INSTALL_OPTIONS__NSH___ + +!include LogicLib.nsh + +!macro INSTALLOPTIONS_FUNCTION_READ_CONVERT + !insertmacro INSTALLOPTIONS_FUNCTION_IO2NSIS "" +!macroend + +!macro INSTALLOPTIONS_UNFUNCTION_READ_CONVERT + !insertmacro INSTALLOPTIONS_FUNCTION_IO2NSIS un. +!macroend + +!macro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT + !insertmacro INSTALLOPTIONS_FUNCTION_NSIS2IO "" +!macroend + +!macro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT + !insertmacro INSTALLOPTIONS_FUNCTION_NSIS2IO un. +!macroend + +!macro INSTALLOPTIONS_FUNCTION_NSIS2IO UNINSTALLER_FUNCPREFIX + + ; Convert an NSIS string to a form suitable for use by InstallOptions + ; Usage: + ; Push + ; Call Nsis2Io + ; Pop + + Function ${UNINSTALLER_FUNCPREFIX}Nsis2Io + + Exch $0 ; The source + Push $1 ; The output + Push $2 ; Temporary char + Push $3 ; Length + Push $4 ; Loop index + StrCpy $1 "" ; Initialise the output + + StrLen $3 $0 + IntOp $3 $3 - 1 + + ${For} $4 0 $3 + StrCpy $2 $0 1 $4 + ${If} $2 == '\' + StrCpy $2 '\\' + ${ElseIf} $2 == '$\r' + StrCpy $2 '\r' + ${ElseIf} $2 == '$\n' + StrCpy $2 '\n' + ${ElseIf} $2 == '$\t' + StrCpy $2 '\t' + ${EndIf} + StrCpy $1 $1$2 + ${Next} + + StrCpy $0 $1 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + FunctionEnd + +!macroend + +!macro INSTALLOPTIONS_FUNCTION_IO2NSIS UNINSTALLER_FUNCPREFIX + + ; Convert an InstallOptions string to a form suitable for use by NSIS + ; Usage: + ; Push + ; Call Io2Nsis + ; Pop + + Function ${UNINSTALLER_FUNCPREFIX}Io2Nsis + + Exch $0 ; The source + Push $1 ; The output + Push $2 ; Temporary char + Push $3 ; Length + Push $4 ; Loop index + StrCpy $1 "" ; Initialise the output + + StrLen $3 $0 + IntOp $3 $3 - 1 + + ${For} $4 0 $3 + StrCpy $2 $0 2 $4 + ${If} $2 == '\\' + StrCpy $2 '\' + IntOp $4 $4 + 1 + ${ElseIf} $2 == '\r' + StrCpy $2 '$\r' + IntOp $4 $4 + 1 + ${ElseIf} $2 == '\n' + StrCpy $2 '$\n' + IntOp $4 $4 + 1 + ${ElseIf} $2 == '\t' + StrCpy $2 '$\t' + IntOp $4 $4 + 1 + ${EndIf} + StrCpy $2 $2 1 + StrCpy $1 $1$2 + ${Next} + + StrCpy $0 $1 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + FunctionEnd + +!macroend + +!macro INSTALLOPTIONS_EXTRACT FILE + + InitPluginsDir + File "/oname=$PLUGINSDIR\${FILE}" "${FILE}" +!ifdef NSIS_UNICODE + InstallOptions::make_unicode "$PLUGINSDIR\${FILE}" +!endif + !insertmacro INSTALLOPTIONS_WRITE "${FILE}" "Settings" "RTL" "$(^RTL)" + +!macroend + +!macro INSTALLOPTIONS_EXTRACT_AS FILE FILENAME + + InitPluginsDir + File "/oname=$PLUGINSDIR\${FILENAME}" "${FILE}" +!ifdef NSIS_UNICODE + InstallOptions::make_unicode "$PLUGINSDIR\${FILENAME}" +!endif + !insertmacro INSTALLOPTIONS_WRITE "${FILENAME}" "Settings" "RTL" "$(^RTL)" + +!macroend + +!macro INSTALLOPTIONS_DISPLAY FILE + + Push $0 + + InstallOptions::dialog "$PLUGINSDIR\${FILE}" + Pop $0 + + Pop $0 + +!macroend + +!macro INSTALLOPTIONS_DISPLAY_RETURN FILE + + InstallOptions::dialog "$PLUGINSDIR\${FILE}" + +!macroend + +!macro INSTALLOPTIONS_INITDIALOG FILE + + InstallOptions::initDialog "$PLUGINSDIR\${FILE}" + +!macroend + +!macro INSTALLOPTIONS_SHOW + + Push $0 + + InstallOptions::show + Pop $0 + + Pop $0 + +!macroend + +!macro INSTALLOPTIONS_SHOW_RETURN + + InstallOptions::show + +!macroend + +!macro INSTALLOPTIONS_READ VAR FILE SECTION KEY + + ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" + +!macroend + +!macro INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE + + WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" "${VALUE}" + +!macroend + +!macro INSTALLOPTIONS_READ_CONVERT VAR FILE SECTION KEY + + ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" + Push ${VAR} + Call Io2Nsis + Pop ${VAR} + +!macroend + +!macro INSTALLOPTIONS_READ_UNCONVERT VAR FILE SECTION KEY + + ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" + Push ${VAR} + Call un.Io2Nsis + Pop ${VAR} + +!macroend + +!macro INSTALLOPTIONS_WRITE_CONVERT FILE SECTION KEY VALUE + + Push $0 + StrCpy $0 "${VALUE}" + Push $0 + Call Nsis2Io + Pop $0 + + WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" $0 + + Pop $0 + +!macroend + +!macro INSTALLOPTIONS_WRITE_UNCONVERT FILE SECTION KEY VALUE + + Push $0 + StrCpy $0 "${VALUE}" + Push $0 + Call un.Nsis2Io + Pop $0 + + WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" $0 + + Pop $0 + +!macroend + +!endif # ___NSIS__INSTALL_OPTIONS__NSH___ diff --git a/tools/Include/Integration.nsh b/tools/Include/Integration.nsh new file mode 100644 index 0000000..f25c312 --- /dev/null +++ b/tools/Include/Integration.nsh @@ -0,0 +1,44 @@ +!verbose push 3 +!ifndef INTEGRATION_INCLUDED +!define INTEGRATION_INCLUDED 1 + +!include "Util.nsh" + + +!define NotifyShell_AssocChanged `System::Call 'SHELL32::SHChangeNotify(i0x8000000,i0,p0,p0)'` ; Notify the shell with SHCNE_ASSOCCHANGED + + +!define UnpinShortcut "!insertmacro UnpinShortcut " +!macro UnpinShortcut lnkpath +Push "${lnkpath}" +${CallArtificialFunction} UnpinShortcut_Implementation +!macroend +!macro UnpinShortcut_Implementation +!include "LogicLib.nsh" +!include "Win\COM.nsh" +Exch $0 +Push $1 +!insertmacro ComHlpr_CreateInProcInstance ${CLSID_StartMenuPin} ${IID_IStartMenuPinnedList} r1 "" +${If} $1 P<> 0 + System::Call 'SHELL32::SHCreateItemFromParsingName(wr0,p0,g"${IID_IShellItem}",*p0r0)' + ${If} $0 P<> 0 + ${IStartMenuPinnedList::RemoveFromList} $1 '(r0)' + ${IUnknown::Release} $0 "" + ${EndIf} + ${IUnknown::Release} $1 "" +!ifdef NSIS_IX86 | NSIS_AMD64 +${Else} + !insertmacro ComHlpr_CreateInProcInstance ${CLSID_StartMenuPin} "{ec35e37a-6579-4f3c-93cd-6e62c4ef7636}" r1 "" + ${If} $1 P<> 0 + ExecShellWait /INVOKEIDLIST "unpin" $0 ; WinXP + ${IUnknown::Release} $1 "" + ${EndIf} +!endif +${EndIf} +Pop $1 +Pop $0 +!macroend + + +!endif #!INCLUDED +!verbose pop diff --git a/tools/Include/LangFile.nsh b/tools/Include/LangFile.nsh new file mode 100644 index 0000000..767028b --- /dev/null +++ b/tools/Include/LangFile.nsh @@ -0,0 +1,191 @@ +/* + +LangFile.nsh + +Header file to create language files that can be +included with a single command. + +Copyright 2008-2023 Joost Verburg, Anders Kjersem + +* Either LANGFILE_INCLUDE or LANGFILE_INCLUDE_WITHDEFAULT + can be called from the script to include a language file. + + - LANGFILE_INCLUDE takes the language file name as parameter. + - LANGFILE_INCLUDE_WITHDEFAULT takes as additional second + parameter, the default language file to load missing strings from. + +* Language strings in the language file have the format: + ${LangFileString} LANGSTRING_NAME "Text" + +* There are two types of language header files: + + - NSIS multi-lang support; these must start with the LANGFILE macro and + provide strings for features like MUI and MultiUser. If you are adding + support for a new language to NSIS you should make a copy of English.nsh + and translate this .nsh along with the .nlf. + - Custom installer strings; these must start with the LANGFILE_EXT macro and + contain translated versions of + custom strings used in a particular installer. + This is useful if you want to put the translations for each language in + their own separate file. + +* Example: + + ; Setup.nsi + !include "MUI.nsh" + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro LANGFILE_INCLUDE "DanishExtra.nsh" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro LANGFILE_INCLUDE "SwedishExtra.nsh" + Section + MessageBox MB_OK "$(myCustomString)" + SectionEnd + + ; SwedishExtra.nsh + !insertmacro LANGFILE_EXT Swedish + ${LangFileString} myCustomString "Bork bork" + +*/ + +!ifndef LANGFILE_INCLUDED +!define LANGFILE_INCLUDED + +!macro LANGFILE_INCLUDE FILENAME + + ;Called from script: include a language file + + !ifdef LangFileString + !undef LangFileString + !endif + + !define LangFileString "!insertmacro LANGFILE_SETSTRING" + + !define LANGFILE_SETNAMES + !include "${FILENAME}" + !undef LANGFILE_SETNAMES + + ;Create language strings + !define /redef LangFileString "!insertmacro LANGFILE_LANGSTRING" + !include "${FILENAME}" + +!macroend + +!macro LANGFILE_INCLUDE_WITHDEFAULT FILENAME FILENAME_DEFAULT + + ;Called from script: include a language file + ;Obtains missing strings from a default file + + !ifdef LangFileString + !undef LangFileString + !endif + + !define LangFileString "!insertmacro LANGFILE_SETSTRING" + + !define LANGFILE_SETNAMES + !include "${FILENAME}" + !undef LANGFILE_SETNAMES + + ;Include default language for missing strings + !define LANGFILE_PRIV_INCLUDEISFALLBACK "${FILENAME_DEFAULT}" + !include "${FILENAME_DEFAULT}" + !undef LANGFILE_PRIV_INCLUDEISFALLBACK + + ;Create language strings + !define /redef LangFileString "!insertmacro LANGFILE_LANGSTRING" + !include "${FILENAME_DEFAULT}" + +!macroend + +!macro LANGFILE NLFID ENGNAME NATIVENAME NATIVEASCIINAME + + ;Start of standard NSIS language file + + ; NLFID: Must match the name of the .nlf file + ; ENGNAME: English name of language, "=" if it is the same as NLFID + ; NATIVENAME: Native name of language. (In Unicode) + ; NATIVEASCIINAME: Native name of language using only ASCII, "=" if it is the same as NATIVENAME + + ; Example: LANGFILE "Swedish" = "Svenska" = (This is the same as LANGFILE "Swedish" "Swedish" "Svenska" "Svenska") + ; For more examples, see French.nsh, Greek.nsh and PortugueseBR.nsh + + !ifdef LANGFILE_SETNAMES + + !ifdef LANGFILE_IDNAME + !undef LANGFILE_IDNAME + !endif + + !define LANGFILE_IDNAME "${NLFID}" + + ; ModernUI or the .nsi can change LANGFILE_LANGDLL_FMT if desired + !ifndef LANGFILE_LANGDLL_FMT + !ifndef NSIS_UNICODE + !define LANGFILE_LANGDLL_FMT "%ENGNAME% / %NATIVEASCIINAME%" + !endif + !define /ifndef LANGFILE_LANGDLL_FMT "%NATIVENAME%" + !endif + + !ifndef "LANGFILE_${NLFID}_NAME" + !if "${ENGNAME}" == "=" + !define /redef ENGNAME "${NLFID}" + !endif + !if "${NATIVEASCIINAME}" == "=" + !define /redef NATIVEASCIINAME "${NATIVENAME}" + !endif + + !define "LANGFILE_${NLFID}_ENGLISHNAME" "${ENGNAME}" + !ifdef NSIS_UNICODE + !define "LANGFILE_${NLFID}_NAME" "${NATIVENAME}" + !else + !define "LANGFILE_${NLFID}_NAME" "${NATIVEASCIINAME}" + !endif + + !searchreplace LANGFILE_${NLFID}_LANGDLL "${LANGFILE_LANGDLL_FMT}" %NATIVEASCIINAME% "${NATIVEASCIINAME}" + !searchreplace LANGFILE_${NLFID}_LANGDLL "${LANGFILE_${NLFID}_LANGDLL}" %NATIVENAME% "${NATIVENAME}" + !searchreplace LANGFILE_${NLFID}_LANGDLL "${LANGFILE_${NLFID}_LANGDLL}" %ENGNAME% "${ENGNAME}" + + !endif + + !endif + +!macroend + +!macro LANGFILE_EXT IDNAME + + ;Start of installer language file + + !ifdef LANGFILE_SETNAMES + + !ifdef LANGFILE_IDNAME + !undef LANGFILE_IDNAME + !endif + + !define LANGFILE_IDNAME "${IDNAME}" + + !endif + +!macroend + +!macro LANGFILE_SETSTRING NAME VALUE + + ;Set define with translated string + + !ifndef ${NAME} + !define "${NAME}" "${VALUE}" + !ifdef LANGFILE_PRIV_INCLUDEISFALLBACK + !warning 'LangString "${NAME}" for language ${LANGFILE_IDNAME} is missing, using fallback from "${LANGFILE_PRIV_INCLUDEISFALLBACK}"' + !endif + !endif + +!macroend + +!macro LANGFILE_LANGSTRING NAME DUMMY + + ;Create a language string from a define and undefine + + LangString "${NAME}" "${LANG_${LANGFILE_IDNAME}}" "${${NAME}}" + !undef "${NAME}" + +!macroend + +!endif diff --git a/tools/Include/Library.nsh b/tools/Include/Library.nsh new file mode 100644 index 0000000..ff3ee33 --- /dev/null +++ b/tools/Include/Library.nsh @@ -0,0 +1,885 @@ +# +# Library.nsh +# +# A system for the installation and uninstallation of dynamic +# link libraries (DLL) and type libraries (TLB). Using this +# system you can handle the complete setup with one single +# line of code: +# +# * File copying +# * File copying on reboot +# * Version checks +# * Registration and unregistration +# * Registration and unregistration on reboot +# * Shared DLL counting +# * Windows File Protection checks +# +# For more information, read appendix B in the documentation. +# + +!verbose push +!verbose 3 + +!ifndef LIB_INCLUDED + +!define LIB_INCLUDED + +!ifndef SHCNE_ASSOCCHANGED + !define SHCNE_ASSOCCHANGED 0x08000000 +!endif +!ifndef SHCNF_IDLIST + !define SHCNF_IDLIST 0x0000 +!endif + +!define REGTOOL_VERSION v3 +!define REGTOOL_KEY NSIS.Library.RegTool.${REGTOOL_VERSION} + +!include LogicLib.nsh +!include x64.nsh + +### GetParent macro, don't pass $1 or $2 as INPUT or OUTPUT +!macro __InstallLib_Helper_GetParent INPUT OUTPUT + + # Copied from FileFunc.nsh + + StrCpy ${OUTPUT} ${INPUT} + + Push $1 + Push $2 + + StrCpy $2 ${OUTPUT} 1 -1 + StrCmp $2 '\' 0 +3 + StrCpy ${OUTPUT} ${OUTPUT} -1 + goto -3 + + StrCpy $1 0 + IntOp $1 $1 - 1 + StrCpy $2 ${OUTPUT} 1 $1 + StrCmp $2 '\' +2 + StrCmp $2 '' 0 -3 + StrCpy ${OUTPUT} ${OUTPUT} $1 + + Pop $2 + Pop $1 + +!macroend + +### Initialize session id (GUID) +!macro __InstallLib_Helper_InitSession + + !ifndef __InstallLib_SessionGUID_Defined + + !define __InstallLib_SessionGUID_Defined + + Var /GLOBAL __INSTALLLLIB_SESSIONGUID + + !endif + + !define __InstallLib_Helper_InitSession_Label "Library_${__FILE__}${__LINE__}" + + StrCmp $__INSTALLLLIB_SESSIONGUID '' 0 "${__InstallLib_Helper_InitSession_Label}" + + System::Call 'ole32::CoCreateGuid(g .s)' + Pop $__INSTALLLLIB_SESSIONGUID + + "${__InstallLib_Helper_InitSession_Label}:" + + !undef __InstallLib_Helper_InitSession_Label + +!macroend + +### Add a RegTool entry to register after reboot +!macro __InstallLib_Helper_AddRegToolEntry mode filename tempdir + + Push $R0 + Push $R1 + Push $R2 + Push $R3 + + ;------------------------ + ;Copy the parameters + + Push "${filename}" + Push "${tempdir}" + + Pop $R2 ; temporary directory + Pop $R1 ; file name to register + + ;------------------------ + ;Initialize session id + + !insertmacro __InstallLib_Helper_InitSession + + ;------------------------ + ;Advance counter + + StrCpy $R0 0 + ReadRegDWORD $R0 HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count" + IntOp $R0 $R0 + 1 + WriteRegDWORD HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count" "$R0" + + ;------------------------ + ;Setup RegTool + + !if ! /FileExists "${NSISDIR}\Bin\RegTool-${NSIS_CPU}.bin" + !error "Missing RegTool for ${NSIS_CPU}!" + !endif + + ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "${REGTOOL_KEY}" + StrCpy $R3 $R3 -4 1 + IfFileExists $R3 +3 + + File /oname=$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe "${NSISDIR}\Bin\RegTool-${NSIS_CPU}.bin" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \ + "${REGTOOL_KEY}" '"$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe" /S' + + ;------------------------ + ;Add RegTool entry + + WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.file" "$R1" + WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.mode" "${mode}" + + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + +!macroend + +!macro __InstallLib_Helper_CmpPackedVer64 oldhi oldlo newhi newlo jeq jle jgt + + IntCmpU ${oldhi} ${newhi} "0" "${jle}" "${jgt}" + IntCmpU ${oldlo} ${newlo} "${jeq}" "${jle}" "${jgt}" + +!macroend + +### Get library version +!macro __InstallLib_Helper_GetVersion TYPE FILE + + !if "${TYPE}" == "D" + !getdllversion /NoErrors /Packed "${FILE}" LIBRARY_VERSION_ + !else if "${TYPE}" == "T" + !gettlbversion /NoErrors /Packed "${FILE}" LIBRARY_VERSION_ + !endif + + ; Emulate the old LibraryLocal defines + !ifndef LIBRARY_VERSION_HIGH + !define LIBRARY_VERSION_FILENOTFOUND + !else if "${LIBRARY_VERSION_HIGH}" == "" + !define LIBRARY_VERSION_NONE + !undef LIBRARY_VERSION_HIGH + !undef LIBRARY_VERSION_LOW + !endif + +!macroend + +### Install library +!macro InstallLib libtype shared install localfile destfile tempbasedir + + !verbose push + !verbose 3 + + Push $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + + ;------------------------ + ;Define + + !define INSTALLLIB_UNIQUE "${__FILE__}${__LINE__}" + + !define INSTALLLIB_LIBTYPE_${libtype} + !define INSTALLLIB_LIBTYPE_SET INSTALLLIB_LIBTYPE_${libtype} + !define INSTALLLIB_SHARED_${shared} + !define INSTALLLIB_SHARED_SET INSTALLLIB_SHARED_${shared} + !define INSTALLLIB_INSTALL_${install} + !define INSTALLLIB_INSTALL_SET INSTALLLIB_INSTALL_${install} + + ;------------------------ + ;Validate + + !ifndef INSTALLLIB_LIBTYPE_DLL & INSTALLLIB_LIBTYPE_REGDLL & INSTALLLIB_LIBTYPE_TLB & \ + INSTALLLIB_LIBTYPE_REGDLLTLB & INSTALLLIB_LIBTYPE_REGEXE + !error "InstallLib: Incorrect setting for parameter: libtype" + !endif + + !ifndef INSTALLLIB_INSTALL_REBOOT_PROTECTED & INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED & \ + INSTALLLIB_INSTALL_NOREBOOT_PROTECTED & INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED + !error "InstallLib: Incorrect setting for parameter: install" + !endif + + ;------------------------ + ;x64 settings + + !ifdef LIBRARY_X64 + + ${DisableX64FSRedirection} + + !endif + + ;------------------------ + ;Copy the parameters used on run-time to a variable + ;This allows the usage of variables as parameter + + StrCpy $R4 "${destfile}" + StrCpy $R5 "${tempbasedir}" + + ;------------------------ + ;Shared library count + + !ifndef INSTALLLIB_SHARED_NOTSHARED + + StrCmp ${shared} "" 0 "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}" + + !ifdef LIBRARY_X64 + + SetRegView 64 + + !endif + + ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4 + ClearErrors + IntOp $R0 $R0 + 1 + WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4 $R0 + + !ifdef LIBRARY_X64 + + SetRegView lastused + + !endif + + "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}:" + + !endif + + ;------------------------ + ;Check Windows File Protection + + !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_PROTECTED + + !define LIBRARY_DEFINE_DONE_LABEL + + System::Call "sfc::SfcIsFileProtected(i 0, w R4) i.R0" + + StrCmp $R0 "error" "installlib.notprotected_${INSTALLLIB_UNIQUE}" + StrCmp $R0 "0" "installlib.notprotected_${INSTALLLIB_UNIQUE}" + + Goto "installlib.done_${INSTALLLIB_UNIQUE}" + + "installlib.notprotected_${INSTALLLIB_UNIQUE}:" + + !endif + + ;------------------------ + ;Check file + + IfFileExists $R4 0 "installlib.copy_${INSTALLLIB_UNIQUE}" + + ;------------------------ + ;Get version information + + !ifndef LIBRARY_IGNORE_VERSION + + !insertmacro __InstallLib_Helper_GetVersion D "${LOCALFILE}" + + !ifdef LIBRARY_VERSION_FILENOTFOUND + !error "InstallLib: The library ${LOCALFILE} could not be found." + !endif + + !ifndef LIBRARY_VERSION_NONE + + !define LIBRARY_DEFINE_UPGRADE_LABEL + !define LIBRARY_DEFINE_REGISTER_LABEL + + StrCpy $R0 ${LIBRARY_VERSION_HIGH} + StrCpy $R1 ${LIBRARY_VERSION_LOW} + + GetDLLVersion $R4 $R2 $R3 + + !undef LIBRARY_VERSION_HIGH + !undef LIBRARY_VERSION_LOW + + !ifndef INSTALLLIB_LIBTYPE_TLB & INSTALLLIB_LIBTYPE_REGDLLTLB + + !ifdef LIBRARY_INSTALL_EQUAL_VERSION + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 "installlib.upgrade_${INSTALLLIB_UNIQUE}" \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + !else + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + !endif + + !else + + !insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}" + + !ifdef LIBRARY_VERSION_FILENOTFOUND + !error "InstallLib: The library ${LOCALFILE} could not be found." + !endif + + !ifndef LIBRARY_VERSION_NONE + + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 0 \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + + !else + + !ifdef LIBRARY_INSTALL_EQUAL_VERSION + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 "installlib.upgrade_${INSTALLLIB_UNIQUE}" \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + !else + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + !endif + + !endif + + !endif + + !else + + !undef LIBRARY_VERSION_NONE + + !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB + + !insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}" + + !endif + + !endif + + !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB + + !ifndef LIBRARY_VERSION_NONE + + !ifndef LIBRARY_DEFINE_UPGRADE_LABEL + + !define LIBRARY_DEFINE_UPGRADE_LABEL + + !endif + + !ifndef LIBRARY_DEFINE_REGISTER_LABEL + + !define LIBRARY_DEFINE_REGISTER_LABEL + + !endif + + StrCpy $R0 ${LIBRARY_VERSION_HIGH} + StrCpy $R1 ${LIBRARY_VERSION_LOW} + + TypeLib::GetLibVersion $R4 + Pop $R3 + Pop $R2 + + !ifdef LIBRARY_INSTALL_EQUAL_VERSION + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 "installlib.upgrade_${INSTALLLIB_UNIQUE}" \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + !else + !insertmacro __InstallLib_Helper_CmpPackedVer64 $R0 $R1 $R2 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" \ + "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}" + !endif + + !undef LIBRARY_VERSION_HIGH + !undef LIBRARY_VERSION_LOW + + !else + + !undef LIBRARY_VERSION_NONE + + !endif + + !endif + + !endif ;~LIBRARY_IGNORE_VERSION + + ;------------------------ + ;Upgrade + + !ifdef LIBRARY_DEFINE_UPGRADE_LABEL + + !undef LIBRARY_DEFINE_UPGRADE_LABEL + + "installlib.upgrade_${INSTALLLIB_UNIQUE}:" + + !endif + + ;------------------------ + ;Copy + + !ifdef INSTALLLIB_INSTALL_NOREBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED + + "installlib.copy_${INSTALLLIB_UNIQUE}:" + + StrCpy $R0 $R4 + Call ":installlib.file_${INSTALLLIB_UNIQUE}" + + !else + + !ifndef LIBRARY_DEFINE_REGISTER_LABEL + + !define LIBRARY_DEFINE_REGISTER_LABEL + + !endif + + !ifndef LIBRARY_DEFINE_DONE_LABEL + + !define LIBRARY_DEFINE_DONE_LABEL + + !endif + + ClearErrors + + StrCpy $R0 $R4 + Call ":installlib.file_${INSTALLLIB_UNIQUE}" + + IfErrors 0 "installlib.register_${INSTALLLIB_UNIQUE}" + + SetOverwrite lastused + + ;------------------------ + ;Copy on reboot + + GetTempFileName $R0 $R5 + Call ":installlib.file_${INSTALLLIB_UNIQUE}" + Rename /REBOOTOK $R0 $R4 + + ;------------------------ + ;Register on reboot + + Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}" + + Goto "installlib.done_${INSTALLLIB_UNIQUE}" + + "installlib.copy_${INSTALLLIB_UNIQUE}:" + StrCpy $R0 $R4 + Call ":installlib.file_${INSTALLLIB_UNIQUE}" + + !endif + + ;------------------------ + ;Register + + !ifdef LIBRARY_DEFINE_REGISTER_LABEL + + !undef LIBRARY_DEFINE_REGISTER_LABEL + + "installlib.register_${INSTALLLIB_UNIQUE}:" + + !endif + + !ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB | INSTALLLIB_LIBTYPE_REGEXE + + !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED + + IfRebootFlag 0 "installlib.regnoreboot_${INSTALLLIB_UNIQUE}" + + Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}" + + Goto "installlib.registerfinish_${INSTALLLIB_UNIQUE}" + + "installlib.regnoreboot_${INSTALLLIB_UNIQUE}:" + + !endif + + !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB + + TypeLib::Register $R4 + + !endif + + !ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB + + !ifndef LIBRARY_X64 + + RegDll $R4 + + !else + + ExecWait '"$SYSDIR\regsvr32.exe" /s "$R4"' + + !endif + + !endif + + !ifdef INSTALLLIB_LIBTYPE_REGEXE + + ExecWait '"$R4" /regserver' + + !endif + + !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED + + "installlib.registerfinish_${INSTALLLIB_UNIQUE}:" + + !endif + + !endif + + !ifdef LIBRARY_SHELL_EXTENSION + + System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)' + + !endif + + !ifdef LIBRARY_COM + + System::Call 'Ole32::CoFreeUnusedLibraries()' + + !endif + + ;------------------------ + ;Done + + !ifdef LIBRARY_DEFINE_DONE_LABEL + + !undef LIBRARY_DEFINE_DONE_LABEL + + "installlib.done_${INSTALLLIB_UNIQUE}:" + + !endif + + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + + ;------------------------ + ;End + + Goto "installlib.end_${INSTALLLIB_UNIQUE}" + + ;------------------------ + ;Extract + + !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED + + SetOverwrite try + + !else + + SetOverwrite on + + !endif + + "installlib.file_${INSTALLLIB_UNIQUE}:" + SetFileAttributes $R0 FILE_ATTRIBUTE_NORMAL + ClearErrors + File /oname=$R0 "${LOCALFILE}" + Return + + SetOverwrite lastused + + ;------------------------ + ;Register on reboot + + !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED + + "installlib.regonreboot_${INSTALLLIB_UNIQUE}:" + + !ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB + !ifndef LIBRARY_X64 + !insertmacro __InstallLib_Helper_AddRegToolEntry 'D' "$R4" "$R5" + !else + !insertmacro __InstallLib_Helper_AddRegToolEntry 'DX' "$R4" "$R5" + !endif + !endif + + !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB + !insertmacro __InstallLib_Helper_AddRegToolEntry 'T' "$R4" "$R5" + !endif + + !ifdef INSTALLLIB_LIBTYPE_REGEXE + !insertmacro __InstallLib_Helper_AddRegToolEntry 'E' "$R4" "$R5" + !endif + + Return + + !endif + + ;------------------------ + ;End label + + "installlib.end_${INSTALLLIB_UNIQUE}:" + + !ifdef LIBRARY_X64 + + ${EnableX64FSRedirection} + + !endif + + ;------------------------ + ;Undefine + + !undef INSTALLLIB_UNIQUE + + !undef ${INSTALLLIB_LIBTYPE_SET} + !undef INSTALLLIB_LIBTYPE_SET + !undef ${INSTALLLIB_SHARED_SET} + !undef INSTALLLIB_SHARED_SET + !undef ${INSTALLLIB_INSTALL_SET} + !undef INSTALLLIB_INSTALL_SET + + !verbose pop + +!macroend + +### Uninstall library +!macro UnInstallLib libtype shared uninstall file + + !verbose push + !verbose 3 + + Push $R0 + Push $R1 + + ;------------------------ + ;Define + + !define UNINSTALLLIB_UNIQUE "${__FILE__}${__LINE__}" + + !define UNINSTALLLIB_LIBTYPE_${libtype} + !define UNINSTALLLIB_LIBTYPE_SET UNINSTALLLIB_LIBTYPE_${libtype} + !define UNINSTALLLIB_SHARED_${shared} + !define UNINSTALLLIB_SHARED_SET UNINSTALLLIB_SHARED_${shared} + !define UNINSTALLLIB_UNINSTALL_${uninstall} + !define UNINSTALLLIB_UNINSTALL_SET UNINSTALLLIB_UNINSTALL_${uninstall} + + ;------------------------ + ;Validate + + !ifndef UNINSTALLLIB_LIBTYPE_DLL & UNINSTALLLIB_LIBTYPE_REGDLL & UNINSTALLLIB_LIBTYPE_TLB & \ + UNINSTALLLIB_LIBTYPE_REGDLLTLB & UNINSTALLLIB_LIBTYPE_REGEXE + !error "UnInstallLib: Incorrect setting for parameter: libtype" + !endif + + !ifndef UNINSTALLLIB_SHARED_NOTSHARED & UNINSTALLLIB_SHARED_SHARED + !error "UnInstallLib: Incorrect setting for parameter: shared" + !endif + + !ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE & UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED & \ + UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED & UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED & \ + UNINSTALLLIB_UNINSTALL_NOREBOOT_NOTPROTECTED + !error "UnInstallLib: Incorrect setting for parameter: uninstall" + !endif + + ;------------------------ + ;x64 settings + + !ifdef LIBRARY_X64 + + ${DisableX64FSRedirection} + + !endif + + ;------------------------ + ;Copy the parameters used on run-time to a variable + ;This allows the usage of variables as parameter + + StrCpy $R1 "${file}" + + ;------------------------ + ;Shared library count + + !ifdef UNINSTALLLIB_SHARED_SHARED + + !define UNINSTALLLIB_DONE_LABEL + + !ifdef LIBRARY_X64 + + SetRegView 64 + + !endif + + ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 + StrCmp $R0 "" "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}" + + IntOp $R0 $R0 - 1 + IntCmp $R0 0 "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" \ + "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}" + + "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}:" + DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 + !ifndef UNINSTALLLIB_SHARED_SHAREDNOREMOVE + Goto "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}" + !endif + + "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}:" + WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0 + + !ifdef LIBRARY_X64 + + SetRegView lastused + + !endif + + Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}" + + "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}:" + + !ifdef LIBRARY_X64 + + SetRegView lastused + + !endif + + !endif + + ;------------------------ + ;Remove + + !ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE + + ;------------------------ + ;Check Windows File Protection + + !ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED + + !ifndef UNINSTALLLIB_DONE_LABEL + + !define UNINSTALLLIB_DONE_LABEL + + !endif + + System::Call "sfc::SfcIsFileProtected(i 0, w $R1) i.R0" + + StrCmp $R0 "error" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}" + StrCmp $R0 "0" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}" + + Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}" + + "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}:" + + !endif + + ;------------------------ + ;Unregister + + !ifdef UNINSTALLLIB_LIBTYPE_REGDLL | UNINSTALLLIB_LIBTYPE_REGDLLTLB + + !ifndef LIBRARY_X64 + + UnRegDLL $R1 + + !else + + ExecWait '"$SYSDIR\regsvr32.exe" /s /u "$R1"' + + !endif + + !endif + + !ifdef UNINSTALLLIB_LIBTYPE_REGEXE + + ExecWait '"$R1" /unregserver' + + !endif + + !ifdef UNINSTALLLIB_LIBTYPE_TLB | UNINSTALLLIB_LIBTYPE_REGDLLTLB + + TypeLib::UnRegister $R1 + + !endif + + !ifdef LIBRARY_SHELL_EXTENSION + + System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)' + + !endif + + !ifdef LIBRARY_COM + + System::Call 'Ole32::CoFreeUnusedLibraries()' + + !endif + + ;------------------------ + ;Delete + + Delete $R1 + + !ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED + + ${If} ${FileExists} $R1 + # File is in use, can't just delete. + # Move file to another location before using Delete /REBOOTOK. This way, if + # the user installs a new version of the DLL, it won't be deleted after + # reboot. See bug #1097642 for more information on this. + + # Try moving to $TEMP. + GetTempFileName $R0 + Delete $R0 + Rename $R1 $R0 + + ${If} ${FileExists} $R1 + # Still here, delete temporary file, in case the file was copied + # and not deleted. This happens when moving from network drives, + # for example. + Delete $R0 + + # Try moving to directory containing the file. + !insertmacro __InstallLib_Helper_GetParent $R1 $R0 + GetTempFileName $R0 $R0 + Delete $R0 + Rename $R1 $R0 + + ${If} ${FileExists} $R1 + # Still here, delete temporary file. + Delete $R0 + + # Give up moving, simply Delete /REBOOTOK the file. + StrCpy $R0 $R1 + ${EndIf} + ${EndIf} + + # Delete the moved file. + Delete /REBOOTOK $R0 + ${EndIf} + + !endif + + !endif + + ;------------------------ + ;Done + + !ifdef UNINSTALLLIB_DONE_LABEL + + !undef UNINSTALLLIB_DONE_LABEL + + "uninstalllib.done_${UNINSTALLLIB_UNIQUE}:" + + !endif + + !ifdef LIBRARY_X64 + + ${EnableX64FSRedirection} + + !endif + + Pop $R1 + Pop $R0 + + ;------------------------ + ;Undefine + + !undef UNINSTALLLIB_UNIQUE + + !undef ${UNINSTALLLIB_LIBTYPE_SET} + !undef UNINSTALLLIB_LIBTYPE_SET + !undef ${UNINSTALLLIB_SHARED_SET} + !undef UNINSTALLLIB_SHARED_SET + !undef ${UNINSTALLLIB_UNINSTALL_SET} + !undef UNINSTALLLIB_UNINSTALL_SET + + !verbose pop + +!macroend + +!endif + +!verbose pop diff --git a/tools/Include/LogicLib.nsh b/tools/Include/LogicLib.nsh new file mode 100644 index 0000000..c338852 --- /dev/null +++ b/tools/Include/LogicLib.nsh @@ -0,0 +1,899 @@ +; NSIS LOGIC LIBRARY - LogicLib.nsh +; Version 2.6 - 08/12/2007 +; By dselkirk@hotmail.com +; and eccles@users.sf.net +; with IfNot support added by Message +; +; Questions/Comments - +; See http://forums.winamp.com/showthread.php?s=&postid=1116241 +; +; Description: +; Provides the use of various logic statements within NSIS. +; +; Usage: +; The following "statements" are available: +; If|IfNot|Unless..{ElseIf|ElseIfNot|ElseUnless}..[Else]..EndIf|EndUnless +; - Conditionally executes a block of statements, depending on the value +; of an expression. IfNot and Unless are equivalent and +; interchangeable, as are ElseIfNot and ElseUnless. +; AndIf|AndIfNot|AndUnless|OrIf|OrIfNot|OrUnless +; - Adds any number of extra conditions to If, IfNot, Unless, ElseIf, +; ElseIfNot and ElseUnless statements. +; IfThen|IfNotThen..|..| +; - Conditionally executes an inline statement, depending on the value +; of an expression. +; IfCmd..||..| +; - Conditionally executes an inline statement, depending on a true +; value of the provided NSIS function. +; Select..{Case[2|3|4|5]}..[CaseElse|Default]..EndSelect +; - Executes one of several blocks of statements, depending on the value +; of an expression. +; Switch..{Case|CaseElse|Default}..EndSwitch +; - Jumps to one of several labels, depending on the value of an +; expression. +; Do[While|Until]..{ExitDo|Continue|Break}..Loop[While|Until] +; - Repeats a block of statements until stopped, or depending on the +; value of an expression. +; While..{ExitWhile|Continue|Break}..EndWhile +; - An alias for DoWhile..Loop (for backwards-compatibility) +; For[Each]..{ExitFor|Continue|Break}..Next +; - Repeats a block of statements varying the value of a variable. +; +; The following "expressions" are available: +; Standard (built-in) string tests (which are case-insensitive): +; a == b; a != b +; Additional case-insensitive string tests (using System.dll): +; a S< b; a S>= b; a S> b; a S<= b +; Case-sensitive string tests: +; a S== b; a S!= b +; Standard (built-in) signed integer tests: +; a = b; a <> b; a < b; a >= b; a > b; a <= b; a & b +; Standard (built-in) unsigned integer tests: +; a U< b; a U>= b; a U> b; a U<= b +; 64-bit integer tests (using System.dll): +; a L= b; a L<> b; a L< b; a L>= b; a L> b; a L<= b +; ptrdiff_t integer tests +; a P= b; a P<> b; a P< b; a P>= b; a P> b; a P<= b +; size_t integer tests +; a Z= b; a Z<> b; a Z< b; a Z>= b; a Z> b; a Z<= b +; Built-in NSIS flag tests: +; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}; ${RtlLanguage}; +; ${ShellVarContextAll} +; Built-in NSIS other tests: +; ${FileExists} a +; Any conditional NSIS instruction test: +; ${Cmd} a +; Section flag tests: +; ${SectionIsSelected} a; ${SectionIsSectionGroup} a; +; ${SectionIsSectionGroupEnd} a; ${SectionIsBold} a; +; ${SectionIsReadOnly} a; ${SectionIsExpanded} a; +; ${SectionIsPartiallySelected} a +; Additional tests: +; HK RegKeyIsEmpty SubKey +; +; Examples: +; See LogicLib.nsi in the Examples folder for lots of example usage. + +!verbose push +!verbose 3 +!ifndef LOGICLIB_VERBOSITY + !define LOGICLIB_VERBOSITY 3 +!endif +!define _LOGICLIB_VERBOSITY ${LOGICLIB_VERBOSITY} +!undef LOGICLIB_VERBOSITY +!verbose ${_LOGICLIB_VERBOSITY} + +!ifndef LOGICLIB + !define LOGICLIB + !define | "'" + !define || "' '" + !define LOGICLIB_COUNTER 0 + + !include Sections.nsh + + !macro _LOGICLIB_TEMP + !ifndef _LOGICLIB_TEMP + !define _LOGICLIB_TEMP + Var /GLOBAL _LOGICLIB_TEMP ; Temporary variable to aid the more elaborate logic tests + !endif + !macroend + + !macro LogicLib_JumpToBranch _Jump _Skip + !if `${_Jump}${_Skip}` != `` + StrCmp "" "" `${_Jump}` ${_Skip} + !endif + !macroend + + !macro _IncreaseCounter + !define /redef /math LOGICLIB_COUNTER `${LOGICLIB_COUNTER}` + 1 + !macroend + + !macro _PushLogic + !insertmacro _PushScope Logic _LogicLib_Label_${LOGICLIB_COUNTER} + !insertmacro _IncreaseCounter + !macroend + + !macro _PopLogic + !insertmacro _PopScope Logic + !macroend + + !macro _PushScope Type label + !ifdef _${Type} ; If we already have a statement + !define _Cur${Type} ${_${Type}} + !undef _${Type} + !define _${Type} ${label} + !define ${_${Type}}Prev${Type} ${_Cur${Type}} ; Save the current logic + !undef _Cur${Type} + !else + !define _${Type} ${label} ; Initialise for first statement + !endif + !macroend + + !macro _PopScope Type + !ifndef _${Type} + !error "Cannot use _Pop${Type} without a preceding _Push${Type}" + !endif + !ifdef ${_${Type}}Prev${Type} ; If a previous statement was active then restore it + !define _Cur${Type} ${_${Type}} + !undef _${Type} + !define _${Type} ${${_Cur${Type}}Prev${Type}} + !undef ${_Cur${Type}}Prev${Type} + !undef _Cur${Type} + !else + !undef _${Type} + !endif + !macroend + + !macro _LogicLib_AlwaysTrue _a _b _t _f + !insertmacro LogicLib_JumpToBranch `${_t}` `${_f}` + !macroend + !macro _LogicLib_AlwaysFalse _a _b _t _f + !insertmacro LogicLib_JumpToBranch `${_f}` `${_t}` + !macroend + + ; String tests + !macro _== _a _b _t _f + StrCmp `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + + !macro _!= _a _b _t _f + !insertmacro _== `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + ; Case-sensitive string tests + !macro _S== _a _b _t _f + StrCmpS `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + + !macro _S!= _a _b _t _f + !insertmacro _S== `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + ; Extra string tests (cannot do these case-sensitively - I tried and lstrcmp still ignored the case) + !macro _StrCmpI _a _b _e _l _m + !insertmacro _LOGICLIB_TEMP + System::Call `kernel32::lstrcmpi(ts, ts) i.s` `${_a}` `${_b}` + Pop $_LOGICLIB_TEMP + IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}` + !macroend + + !macro _S< _a _b _t _f + !insertmacro _StrCmpI `${_a}` `${_b}` `${_f}` `${_t}` `${_f}` + !macroend + + !macro _S>= _a _b _t _f + !insertmacro _S< `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _S> _a _b _t _f + !insertmacro _StrCmpI `${_a}` `${_b}` `${_f}` `${_f}` `${_t}` + !macroend + + !macro _S<= _a _b _t _f + !insertmacro _S> `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + ; Integer tests + !macro _= _a _b _t _f + IntCmp `${_a}` `${_b}` `${_t}` `${_f}` `${_f}` + !macroend + + !macro _<> _a _b _t _f + !insertmacro _= `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _< _a _b _t _f + IntCmp `${_a}` `${_b}` `${_f}` `${_t}` `${_f}` + !macroend + + !macro _>= _a _b _t _f + !insertmacro _< `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _> _a _b _t _f + IntCmp `${_a}` `${_b}` `${_f}` `${_f}` `${_t}` + !macroend + + !macro _<= _a _b _t _f + !insertmacro _> `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _& _a _b _t _f + !insertmacro _LOGICLIB_TEMP + IntOp $_LOGICLIB_TEMP `${_a}` & `${_b}` + !insertmacro _<> $_LOGICLIB_TEMP 0 `${_t}` `${_f}` + !macroend + + ; Unsigned integer tests (NB: no need for extra equality tests) + !macro _U< _a _b _t _f + IntCmpU `${_a}` `${_b}` `${_f}` `${_t}` `${_f}` + !macroend + + !macro _U>= _a _b _t _f + !insertmacro _U< `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _U> _a _b _t _f + IntCmpU `${_a}` `${_b}` `${_f}` `${_f}` `${_t}` + !macroend + + !macro _U<= _a _b _t _f + !insertmacro _U> `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + ; Int64 tests + !macro _Int64Cmp _a _o _b _t _f + !insertmacro _LOGICLIB_TEMP + System::Int64Op `${_a}` `${_o}` `${_b}` + Pop $_LOGICLIB_TEMP + !insertmacro _= $_LOGICLIB_TEMP 0 `${_f}` `${_t}` + !macroend + + !macro _L= _a _b _t _f + !insertmacro _Int64Cmp `${_a}` = `${_b}` `${_t}` `${_f}` + !macroend + + !macro _L<> _a _b _t _f + !insertmacro _L= `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _L< _a _b _t _f + !insertmacro _Int64Cmp `${_a}` < `${_b}` `${_t}` `${_f}` + !macroend + + !macro _L>= _a _b _t _f + !insertmacro _L< `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + !macro _L> _a _b _t _f + !insertmacro _Int64Cmp `${_a}` > `${_b}` `${_t}` `${_f}` + !macroend + + !macro _L<= _a _b _t _f + !insertmacro _L> `${_a}` `${_b}` `${_f}` `${_t}` + !macroend + + ; ptrdiff_t & size_t tests + !macro LogicLib_PtrDiffTest _o _a _b _t _f + !if "${NSIS_PTR_SIZE}" <= 4 + !insertmacro _${_o} `${_a}` `${_b}` `${_t}` `${_f}` + !else + !insertmacro _L${_o} `${_a}` `${_b}` `${_t}` `${_f}` + !endif + !macroend + !macro _P= _a _b _t _f + !insertmacro LogicLib_PtrDiffTest = `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _P<> _a _b _t _f + !insertmacro LogicLib_PtrDiffTest <> `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _P< _a _b _t _f + !insertmacro LogicLib_PtrDiffTest < `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _P>= _a _b _t _f + !insertmacro LogicLib_PtrDiffTest >= `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _P> _a _b _t _f + !insertmacro LogicLib_PtrDiffTest > `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _P<= _a _b _t _f + !insertmacro LogicLib_PtrDiffTest <= `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !include Util.nsh + !macro _Z= _a _b _t _f + !insertmacro LogicLib_PtrDiffTest = `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _Z<> _a _b _t _f + !insertmacro LogicLib_PtrDiffTest <> `${_a}` `${_b}` `${_t}` `${_f}` + !macroend + !macro _Z< _a _b _t _f + !insertmacro IntPtrCmpU `${_a}` `${_b}` `${_f}` `${_t}` `${_f}` + !macroend + !macro _Z>= _a _b _t _f + !insertmacro IntPtrCmpU `${_a}` `${_b}` `${_t}` `${_f}` `${_t}` + !macroend + !macro _Z> _a _b _t _f + !insertmacro IntPtrCmpU `${_a}` `${_b}` `${_f}` `${_f}` `${_t}` + !macroend + !macro _Z<= _a _b _t _f + !insertmacro IntPtrCmpU `${_a}` `${_b}` `${_t}` `${_t}` `${_f}` + !macroend + + ; Flag tests + !macro _Abort _a _b _t _f + IfAbort `${_t}` `${_f}` + !macroend + !define Abort `"" Abort ""` + + !macro _Errors _a _b _t _f + IfErrors `${_t}` `${_f}` + !macroend + !define Errors `"" Errors ""` + + !macro _FileExists _a _b _t _f + IfFileExists `${_b}` `${_t}` `${_f}` + !macroend + !define FileExists `"" FileExists` + + !macro _RebootFlag _a _b _t _f + IfRebootFlag `${_t}` `${_f}` + !macroend + !define RebootFlag `"" RebootFlag ""` + + !macro _Silent _a _b _t _f + IfSilent `${_t}` `${_f}` + !macroend + !define Silent `"" Silent ""` + + !macro _ShellVarContextAll _a _b _t _f + IfShellVarContextAll `${_t}` `${_f}` + !macroend + !define ShellVarContextAll `"" ShellVarContextAll ""` + + !macro _RtlLanguage _a _b _t _f + IfRtlLanguage `${_t}` `${_f}` + !macroend + !define RtlLanguage `"" RtlLanguage ""` + + !macro _AltRegView _a _b _t _f + IfAltRegView `${_t}` `${_f}` + !macroend + !define AltRegView `"" AltRegView ""` + + !macro _RegKeyIsEmpty _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ClearErrors + EnumRegValue $_LOGICLIB_TEMP ${_a} `${_b}` "" + !if `${_f}` != `` + IfErrors "" `${_f}` ; Skip calls to EnumRegKey and _== if possible + !else + IfErrors +3 + StrCpy $_LOGICLIB_TEMP "1" ; The default value is also named "", make sure we don't mistake it as empty + Goto +2 + !endif + EnumRegKey $_LOGICLIB_TEMP ${_a} `${_b}` "" + !insertmacro _== $_LOGICLIB_TEMP "" `${_t}` `${_f}` + !macroend + !define RegKeyIsEmpty `RegKeyIsEmpty` + + ; "Any instruction" test + !macro _Cmd _a _b _t _f + !define _t=${_t} + !ifdef _t= ; If no true label then make one + !define __t _LogicLib_Label_${LOGICLIB_COUNTER} + !insertmacro _IncreaseCounter + !else + !define __t ${_t} + !endif + ${_b} ${__t} + !define _f=${_f} + !ifndef _f= ; If a false label then go there + Goto ${_f} + !endif + !undef _f=${_f} + !ifdef _t= ; If we made our own true label then place it + ${__t}: + !endif + !undef __t + !undef _t=${_t} + !macroend + !define Cmd `"" Cmd` + + ; Section flag test + !macro _SectionFlagIsSet _a _b _t _f + !insertmacro _LOGICLIB_TEMP + SectionGetFlags `${_b}` $_LOGICLIB_TEMP + IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & `${_a}` + !insertmacro _= $_LOGICLIB_TEMP `${_a}` `${_t}` `${_f}` + !macroend + !define SectionIsSelected `${SF_SELECTED} SectionFlagIsSet` + !define SectionIsSubSection `${SF_SUBSEC} SectionFlagIsSet` + !define SectionIsSubSectionEnd `${SF_SUBSECEND} SectionFlagIsSet` + !define SectionIsSectionGroup `${SF_SECGRP} SectionFlagIsSet` + !define SectionIsSectionGroupEnd `${SF_SECGRPEND} SectionFlagIsSet` + !define SectionIsBold `${SF_BOLD} SectionFlagIsSet` + !define SectionIsReadOnly `${SF_RO} SectionFlagIsSet` + !define SectionIsExpanded `${SF_EXPAND} SectionFlagIsSet` + !define SectionIsPartiallySelected `${SF_PSELECTED} SectionFlagIsSet` + + !define IfCmd `!insertmacro _IfThen "" Cmd ${|}` + + !macro _If _c _a _o _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !insertmacro _PushLogic + !define ${_Logic}If + !define ${_Logic}Else _LogicLib_ElseLabel_${LOGICLIB_COUNTER} ; Get a label for the Else + !insertmacro _IncreaseCounter + !define _c=${_c} + !ifdef _c=true ; If is true + !insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else} + !else ; If condition is false + !insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} "" + !endif + !undef _c=${_c} + !verbose pop + !macroend + !define If `!insertmacro _If true` + !define Unless `!insertmacro _If false` + !define IfNot `!insertmacro _If false` + + !macro _And _c _a _o _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}If + !error "Cannot use And without a preceding If or IfNot/Unless" + !endif + !ifndef ${_Logic}Else + !error "Cannot use And following an Else" + !endif + !define _c=${_c} + !ifdef _c=true ; If is true + !insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else} + !else ; If condition is false + !insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} "" + !endif + !undef _c=${_c} + !verbose pop + !macroend + !define AndIf `!insertmacro _And true` + !define AndUnless `!insertmacro _And false` + !define AndIfNot `!insertmacro _And false` + + !macro _Or _c _a _o _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}If + !error "Cannot use Or without a preceding If or IfNot/Unless" + !endif + !ifndef ${_Logic}Else + !error "Cannot use Or following an Else" + !endif + !define _label _LogicLib_Label_${LOGICLIB_COUNTER} ; Skip this test as we already + !insertmacro _IncreaseCounter + Goto ${_label} ; have a successful result + ${${_Logic}Else}: ; Place the Else label + !undef ${_Logic}Else ; and remove it + !define ${_Logic}Else _LogicLib_ElseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new If + !insertmacro _IncreaseCounter + !define _c=${_c} + !ifdef _c=true ; If is true + !insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else} + !else ; If condition is false + !insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} "" + !endif + !undef _c=${_c} + ${_label}: + !undef _label + !verbose pop + !macroend + !define OrIf `!insertmacro _Or true` + !define OrUnless `!insertmacro _Or false` + !define OrIfNot `!insertmacro _Or false` + + !macro _Else + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}If + !error "Cannot use Else without a preceding If or IfNot/Unless" + !endif + !ifndef ${_Logic}Else + !error "Cannot use Else following an Else" + !endif + !ifndef ${_Logic}EndIf ; First Else for this If? + !define ${_Logic}EndIf _LogicLib_EndIfLabel_${LOGICLIB_COUNTER} ; Get a label for the EndIf + !insertmacro _IncreaseCounter + !endif + Goto ${${_Logic}EndIf} ; Go to the EndIf + ${${_Logic}Else}: ; Place the Else label + !undef ${_Logic}Else ; and remove it + !verbose pop + !macroend + !define Else `!insertmacro _Else` + + !macro _ElseIf _c _a _o _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${Else} ; Perform the Else + !define ${_Logic}Else _LogicLib_ElseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new If + !insertmacro _IncreaseCounter + !define _c=${_c} + !ifdef _c=true ; If is true + !insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else} + !else ; If condition is false + !insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} "" + !endif + !undef _c=${_c} + !verbose pop + !macroend + !define ElseIf `!insertmacro _ElseIf true` + !define ElseUnless `!insertmacro _ElseIf false` + !define ElseIfNot `!insertmacro _ElseIf false` + + !macro _EndIf _n + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}If + !error "Cannot use End${_n} without a preceding If or IfNot/Unless" + !endif + !ifdef ${_Logic}Else + ${${_Logic}Else}: ; Place the Else label + !undef ${_Logic}Else ; and remove it + !endif + !ifdef ${_Logic}EndIf + ${${_Logic}EndIf}: ; Place the EndIf + !undef ${_Logic}EndIf ; and remove it + !endif + !undef ${_Logic}If + !insertmacro _PopLogic + !verbose pop + !macroend + !define EndIf `!insertmacro _EndIf If` + !define EndUnless `!insertmacro _EndIf Unless` + + !macro _IfThen _a _o _b _t + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${If} `${_a}` `${_o}` `${_b}` + ${_t} + ${EndIf} + !verbose pop + !macroend + !define IfThen `!insertmacro _IfThen` + + !macro _IfNotThen _a _o _b _t + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${IfNot} `${_a}` `${_o}` `${_b}` + ${_t} + ${EndIf} + !verbose pop + !macroend + !define IfNotThen `!insertmacro _IfNotThen` + + !macro _ForEach _v _f _t _o _s + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + StrCpy "${_v}" "${_f}" ; Assign the initial value + Goto +2 ; Skip the loop expression for the first iteration + !define _DoLoopExpression `IntOp "${_v}" "${_v}" "${_o}" "${_s}"` ; Define the loop expression + !define _o=${_o} + !ifdef _o=+ ; Check the loop expression operator + !define __o > ; to determine the correct loop condition + !else ifdef _o=- + !define __o < + !else + !error "Unsupported ForEach step operator (must be + or -)" + !endif + !undef _o=${_o} + !insertmacro _Do For false `${_v}` `${__o}` `${_t}` ; Let Do do the rest + !undef __o + !verbose pop + !macroend + !define ForEach `!insertmacro _ForEach` + + !macro _For _v _f _t + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${ForEach} `${_v}` `${_f}` `${_t}` + 1 ; Pass on to ForEach + !verbose pop + !macroend + !define For `!insertmacro _For` + + !define ExitFor `!insertmacro _Goto ExitFor For` + + !define Next `!insertmacro _Loop For Next "" "" "" ""` + + !define While `!insertmacro _Do While true` + + !define ExitWhile `!insertmacro _Goto ExitWhile While` + + !define EndWhile `!insertmacro _Loop While EndWhile "" "" "" ""` + + !macro _Do _n _c _a _o _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !insertmacro _PushLogic + !define ${_Logic}${_n} _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the start of the loop + !insertmacro _IncreaseCounter + ${${_Logic}${_n}}: + !insertmacro _PushScope Exit${_n} _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the end of the loop + !insertmacro _IncreaseCounter + !insertmacro _PushScope Break ${_Exit${_n}} ; Break goes to the end of the loop + !ifdef _DoLoopExpression + ${_DoLoopExpression} ; Special extra parameter for inserting code + !undef _DoLoopExpression ; between the Continue label and the loop condition + !endif + !define _c=${_c} + !ifdef _c= ; No starting condition + !insertmacro _PushScope Continue _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for Continue at the end of the loop + !insertmacro _IncreaseCounter + !else + !insertmacro _PushScope Continue ${${_Logic}${_n}} ; Continue goes to the start of the loop + !ifdef _c=true ; If is true + !insertmacro _${_o} `${_a}` `${_b}` "" ${_Exit${_n}} + !else ; If condition is false + !insertmacro _${_o} `${_a}` `${_b}` ${_Exit${_n}} "" + !endif + !endif + !undef _c=${_c} + !define ${_Logic}Condition ${_c} ; Remember the condition used + !verbose pop + !macroend + !define Do `!insertmacro _Do Do "" "" "" ""` + !define DoWhile `!insertmacro _Do Do true` + !define DoUntil `!insertmacro _Do Do false` + + !macro _Goto _n _s + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _${_n} + !error "Cannot use ${_n} without a preceding ${_s}" + !endif + Goto ${_${_n}} + !verbose pop + !macroend + !define ExitDo `!insertmacro _Goto ExitDo Do` + + !macro _Loop _n _e _c _a _o _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}${_n} + !error "Cannot use ${_e} without a preceding ${_n}" + !endif + !define _c=${${_Logic}Condition} + !ifdef _c= ; If Do had no condition place the Continue label + ${_Continue}: + !endif + !undef _c=${${_Logic}Condition} + !define _c=${_c} + !ifdef _c= ; No ending condition + Goto ${${_Logic}${_n}} + !else ifdef _c=true ; If condition is true + !insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}${_n}} ${_Exit${_n}} + !else ; If condition is false + !insertmacro _${_o} `${_a}` `${_b}` ${_Exit${_n}} ${${_Logic}${_n}} + !endif + !undef _c=${_c} + Goto ${_Continue} ; Just to ensure it is referenced at least once + Goto ${_Exit${_n}} ; Just to ensure it is referenced at least once + ${_Exit${_n}}: ; Place the loop exit point + !undef ${_Logic}Condition + !insertmacro _PopScope Continue + !insertmacro _PopScope Break + !insertmacro _PopScope Exit${_n} + !undef ${_Logic}${_n} + !insertmacro _PopLogic + !verbose pop + !macroend + !define Loop `!insertmacro _Loop Do Loop "" "" "" ""` + !define LoopWhile `!insertmacro _Loop Do LoopWhile true` + !define LoopUntil `!insertmacro _Loop Do LoopUntil false` + + !define Continue `!insertmacro _Goto Continue "For or Do or While"` + !define Break `!insertmacro _Goto Break "For or Do or While"` + + !macro _Select _a + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !insertmacro _PushLogic + !define ${_Logic}Select `${_a}` ; Remember the left hand side of the comparison + !verbose pop + !macroend + !define Select `!insertmacro _Select` + + !macro _Select_CaseElse + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}Select + !error "Cannot use Case without a preceding Select" + !endif + !ifdef ${_Logic}EndSelect ; This is set only after the first case + !ifndef ${_Logic}Else + !error "Cannot use Case following a CaseElse" + !endif + Goto ${${_Logic}EndSelect} ; Go to EndSelect (Ends the previous Case) + !define /IfNDef _LogicLib_EndSelectLabelUsed_${_Logic} + ${${_Logic}Else}: ; Place the Else label + !undef ${_Logic}Else ; and remove it + !else + !define ${_Logic}EndSelect _LogicLib_EndSelectLabel_${LOGICLIB_COUNTER} ; Get a label for the EndSelect + !insertmacro _IncreaseCounter + !endif + !verbose pop + !macroend + !define CaseElse `!insertmacro _CaseElse` + !define Case_Else `!insertmacro _CaseElse` ; Compatibility with 2.2 and earlier + !define Default `!insertmacro _CaseElse` ; For the C-minded + + !macro _Select_Case _a + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${CaseElse} ; Perform the CaseElse + !define ${_Logic}Else _LogicLib_NextSelectCaseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case + !insertmacro _IncreaseCounter + !insertmacro _== `${${_Logic}Select}` `${_a}` "" ${${_Logic}Else} + !verbose pop + !macroend + !define Case `!insertmacro _Case` + + !macro _Case2 _a _b + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${CaseElse} ; Perform the CaseElse + !define ${_Logic}Else _LogicLib_NextSelectCaseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case + !insertmacro _IncreaseCounter + !insertmacro _== `${${_Logic}Select}` `${_a}` +2 "" + !insertmacro _== `${${_Logic}Select}` `${_b}` "" ${${_Logic}Else} + !verbose pop + !macroend + !define Case2 `!insertmacro _Case2` + + !macro _Case3 _a _b _c + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${CaseElse} ; Perform the CaseElse + !define ${_Logic}Else _LogicLib_NextSelectCaseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case + !insertmacro _IncreaseCounter + !insertmacro _== `${${_Logic}Select}` `${_a}` +3 "" + !insertmacro _== `${${_Logic}Select}` `${_b}` +2 "" + !insertmacro _== `${${_Logic}Select}` `${_c}` "" ${${_Logic}Else} + !verbose pop + !macroend + !define Case3 `!insertmacro _Case3` + + !macro _Case4 _a _b _c _d + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${CaseElse} ; Perform the CaseElse + !define ${_Logic}Else _LogicLib_NextSelectCaseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case + !insertmacro _IncreaseCounter + !insertmacro _== `${${_Logic}Select}` `${_a}` +4 "" + !insertmacro _== `${${_Logic}Select}` `${_b}` +3 "" + !insertmacro _== `${${_Logic}Select}` `${_c}` +2 "" + !insertmacro _== `${${_Logic}Select}` `${_d}` "" ${${_Logic}Else} + !verbose pop + !macroend + !define Case4 `!insertmacro _Case4` + + !macro _Case5 _a _b _c _d _e + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + ${CaseElse} ; Perform the CaseElse + !define ${_Logic}Else _LogicLib_NextSelectCaseLabel_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case + !insertmacro _IncreaseCounter + !insertmacro _== `${${_Logic}Select}` `${_a}` +5 "" + !insertmacro _== `${${_Logic}Select}` `${_b}` +4 "" + !insertmacro _== `${${_Logic}Select}` `${_c}` +3 "" + !insertmacro _== `${${_Logic}Select}` `${_d}` +2 "" + !insertmacro _== `${${_Logic}Select}` `${_e}` "" ${${_Logic}Else} + !verbose pop + !macroend + !define Case5 `!insertmacro _Case5` + + !macro _EndSelect + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}Select + !error "Cannot use EndSelect without a preceding Select" + !endif + !ifdef ${_Logic}Else + ${${_Logic}Else}: ; Place the Else label + !undef ${_Logic}Else ; and remove it + !endif + !ifdef ${_Logic}EndSelect ; This won't be set if there weren't any cases + !ifdef _LogicLib_EndSelectLabelUsed_${_Logic} ; There is no jump to ${${_Logic}EndSelect}: if there is only one Case + ${${_Logic}EndSelect}: ; Place the EndSelect + !undef _LogicLib_EndSelectLabelUsed_${_Logic} + !endif + !undef ${_Logic}EndSelect ; and remove it + !endif + !undef ${_Logic}Select + !insertmacro _PopLogic + !verbose pop + !macroend + !define EndSelect `!insertmacro _EndSelect` + + !macro _Switch _a + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !insertmacro _PushLogic + !insertmacro _PushScope Switch ${_Logic} ; Keep a separate stack for switch data + !insertmacro _PushScope Break _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for beyond the end of the switch + !insertmacro _IncreaseCounter + !define ${_Switch}Var `${_a}` ; Remember the left hand side of the comparison + !tempfile ${_Switch}Tmp ; Create a temporary file + !if "${NSIS_CHAR_SIZE}" > 1 + !appendfile /CHARSET=UTF8SIG "${${_Switch}Tmp}" "" ; Make sure the file uses Unicode + !endif + !define ${_Logic}Switch _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the end of the switch + !insertmacro _IncreaseCounter + Goto ${${_Logic}Switch} ; and go there + !verbose pop + !macroend + !define Switch `!insertmacro _Switch` + + !macro _Case _a + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifdef _Logic & ${_Logic}Select ; Check for an active Select + !insertmacro _Select_Case `${_a}` + !else ifndef _Switch ; If not then check for an active Switch + !error "Cannot use Case without a preceding Select or Switch" + !else + !define _label _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for this case, + !insertmacro _IncreaseCounter + ${_label}: ; place it and add it's check to the temp file + !appendfile "${${_Switch}Tmp}" `!insertmacro _== $\`${${_Switch}Var}$\` $\`${_a}$\` ${_label} ""$\n` + !undef _label + !endif + !verbose pop + !macroend + + !macro _CaseElse + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifdef _Logic & ${_Logic}Select ; Check for an active Select + !insertmacro _Select_CaseElse + !else ifndef _Switch ; If not then check for an active Switch + !error "Cannot use Case without a preceding Select or Switch" + !else ifdef ${_Switch}Else ; Already had a default case? + !error "Cannot use CaseElse following a CaseElse" + !else + !define ${_Switch}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the default case, + !insertmacro _IncreaseCounter + ${${_Switch}Else}: ; and place it + !endif + !verbose pop + !macroend + + !macro _EndSwitch + !verbose push + !verbose ${LOGICLIB_VERBOSITY} + !ifndef _Logic | ${_Logic}Switch + !error "Cannot use EndSwitch without a preceding Switch" + !endif + Goto ${_Break} ; Skip the jump table + ${${_Logic}Switch}: ; Place the end of the switch + !undef ${_Logic}Switch + !include "${${_Switch}Tmp}" ; Include the jump table + !delfile "${${_Switch}Tmp}" ; and clear it up + !ifdef ${_Switch}Else ; Was there a default case? + Goto ${${_Switch}Else} ; then go there if all else fails + !undef ${_Switch}Else + !endif + !undef ${_Switch}Tmp + !undef ${_Switch}Var + ${_Break}: ; Place the break label + !insertmacro _PopScope Break + !insertmacro _PopScope Switch + !insertmacro _PopLogic + !verbose pop + !macroend + !define EndSwitch `!insertmacro _EndSwitch` + +!endif ; LOGICLIB +!verbose 3 +!define LOGICLIB_VERBOSITY ${_LOGICLIB_VERBOSITY} +!undef _LOGICLIB_VERBOSITY +!verbose pop diff --git a/tools/Include/MUI.nsh b/tools/Include/MUI.nsh new file mode 100644 index 0000000..c2b2a71 --- /dev/null +++ b/tools/Include/MUI.nsh @@ -0,0 +1 @@ +!include "${NSISDIR}\Contrib\Modern UI\System.nsh" \ No newline at end of file diff --git a/tools/Include/MUI2.nsh b/tools/Include/MUI2.nsh new file mode 100644 index 0000000..0e76adb --- /dev/null +++ b/tools/Include/MUI2.nsh @@ -0,0 +1 @@ +!include "${NSISDIR}\Contrib\Modern UI 2\MUI2.nsh" \ No newline at end of file diff --git a/tools/Include/Memento.nsh b/tools/Include/Memento.nsh new file mode 100644 index 0000000..3381c85 --- /dev/null +++ b/tools/Include/Memento.nsh @@ -0,0 +1,553 @@ +!verbose push +!verbose 3 + +!include LogicLib.nsh +!include Sections.nsh + +!ifndef ___MEMENTO_NSH___ +!define ___MEMENTO_NSH___ + +##################################### +### Memento ### +##################################### + +/* + +Memento is a set of macros that allow installers to remember user selection +across separate runs of the installer. Currently, it can remember the state +of sections and mark new sections as bold. In the future, it'll integrate +InstallOptions and maybe even the Modern UI. + +A usage example can be found in `Examples\Memento.nsi`. + +*/ + +##################################### +### Usage Instructions ### +##################################### + +/* + +1. Declare usage of Memento by including Memento.nsh at the top of the script. + + !include Memento.nsh + +2. Define MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY with the a registry key + where sections' state should be saved. + + !define MEMENTO_REGISTRY_ROOT HKLM + !define MEMENTO_REGISTRY_KEY \ + Software\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram + +3. Replace Section with ${MementoSection} and SectionEnd with ${MementoSectionEnd} + for sections that whose state should be remembered by Memento. + + For sections that should be unselected by default, use ${MementoSection}'s + brother - ${MementoUnselectedSection}. + + Sections that don't already have an identifier must be assigned one. + + Section identifiers must stay the same across different versions of the + installer or their state will be forgotten. + +4. Use ${MementoSectionDone} after the last ${MementoSection}. + +5. Add a call to ${MementoSectionRestore} to .onInit to restore the state + of all sections from the registry. + + Function .onInit + + ${MementoSectionRestore} + + FunctionEnd + +6. Add a call to ${MementoSectionSave} to .onInstSuccess to save the state + of all sections to the registry. + + Function .onInstSuccess + + ${MementoSectionSave} + + FunctionEnd + +7. Tattoo the location of the chosen registry key on your arm. + +*/ + +##################################### +### User API ### +##################################### + +; +; ${MementoSection} +; +; Defines a section whose state is remembered by Memento. +; +; Usage is similar to Section. +; +; ${MementoSection} "name" "some_id" +; + +!define MementoSection "!insertmacro MementoSection" + +; +; ${MementoSectionEnd} +; +; Ends a section previously opened using ${MementoSection}. +; +; Usage is similar to SectionEnd. +; +; ${MementoSection} "name" "some_id" +; # some code... +; ${MementoSectionEnd} +; + +; +; ${MementoUnselectedSection} +; +; Defines a section whose state is remembered by Memento and is +; unselected by default. +; +; Usage is similar to Section with the /o switch. +; +; ${MementoUnselectedSection} "name" "some_id" +; + +!define MementoUnselectedSection "!insertmacro MementoUnselectedSection" + +; +; ${MementoSectionEnd} +; +; Ends a section previously opened using ${MementoSection}. +; +; Usage is similar to SectionEnd. +; +; ${MementoSection} "name" "some_id" +; # some code... +; ${MementoSectionEnd} +; + +!define MementoSectionEnd "!insertmacro MementoSectionEnd" + +; +; ${MementoSectionDone} +; +; Used after all ${MementoSection} have been set. +; +; ${MementoSection} "name1" "some_id1" +; # some code... +; ${MementoSectionEnd} +; +; ${MementoSection} "name2" "some_id2" +; # some code... +; ${MementoSectionEnd} +; +; ${MementoSection} "name3" "some_id3" +; # some code... +; ${MementoSectionEnd} +; +; ${MementoSectionDone} +; + +!define MementoSectionDone "!insertmacro MementoSectionDone" + +; +; ${MementoSectionRestore} +; +; Restores the state of all Memento sections from the registry. +; +; Commonly used in .onInit. +; +; Function .onInit +; +; ${MementoSectionRestore} +; +; FunctionEnd +; + +!define MementoSectionRestore "!insertmacro MementoSectionRestore" + +; +; ${MementoSectionSave} +; +; Saves the state of all Memento sections to the registry. +; +; Commonly used in .onInstSuccess. +; +; Function .onInstSuccess +; +; ${MementoSectionSave} +; +; FunctionEnd +; + +!define MementoSectionSave "!insertmacro MementoSectionSave" + +; +; MementoSection +; +; Replaceable macros that allow custom storage methods to be used. +; + +!ifmacrondef MementoSectionReadInt +!define __MementoSectionStdRegReadWrite + +!macro MementoSectionReadInt outvar name +ReadRegDWord ${outvar} ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection${name}` +!macroend + +!macro MementoSectionWriteInt name val +WriteRegDWord ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection${name}` `${val}` +!macroend + +!macro MementoSectionReadMarker outvar name +ReadRegStr ${outvar} ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection${name}` +!macroend + +!macro MementoSectionWriteMarker name +WriteRegStr ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection${name}` `` +!macroend + +!endif + +##################################### +### Internal Defines ### +##################################### + +!define __MementoSectionIndex 1 + +##################################### +### Internal Macros ### +##################################### + +!macro __MementoCheckSettings + + !ifdef __MementoSectionStdRegReadWrite + !ifndef MEMENTO_REGISTRY_ROOT | MEMENTO_REGISTRY_KEY + + !error "MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY must be defined before using any of Memento's macros" + + !endif + !endif + +!macroend + +!macro __MementoSection flags name id + + !insertmacro __MementoCheckSettings + + !ifndef __MementoSectionIndex + + !error "MementoSectionDone already used!" + + !endif + + !define __MementoSectionLastSectionId `${id}` + + !verbose pop + + Section ${flags} `${name}` `${id}` + + !verbose push + !verbose 3 + +!macroend + +##################################### +### User Macros ### +##################################### + +!macro MementoSection name id + + !verbose push + !verbose 3 + + !insertmacro __MementoSection "" `${name}` `${id}` + + !verbose pop + +!macroend + +!macro MementoUnselectedSection name id + + !verbose push + !verbose 3 + + !insertmacro __MementoSection /o `${name}` `${id}` + + !define __MementoSectionUnselected + + !verbose pop + +!macroend + +!macro MementoSectionEnd + + SectionEnd + + !verbose push + !verbose 3 + + !insertmacro __MementoCheckSettings + + !ifndef __MementoSectionIndex + + !error "MementoSectionDone already used!" + + !endif + + !define /MATH __MementoSectionIndexNext \ + ${__MementoSectionIndex} + 1 + + Function __MementoSectionMarkNew${__MementoSectionIndex} + + ClearErrors + !insertmacro MementoSectionReadInt $0 `_${__MementoSectionLastSectionId}` + + ${If} ${Errors} + + !insertmacro SetSectionFlag `${${__MementoSectionLastSectionId}}` ${SF_BOLD} + + ${EndIf} + + GetFunctionAddress $0 __MementoSectionMarkNew${__MementoSectionIndexNext} + Goto $0 + + FunctionEnd + + Function __MementoSectionRestoreStatus${__MementoSectionIndex} + + ClearErrors + !insertmacro MementoSectionReadInt $0 `_${__MementoSectionLastSectionId}` + + !ifndef __MementoSectionUnselected + + ${If} ${Errors} + ${OrIf} $0 != 0 + + !insertmacro SelectSection `${${__MementoSectionLastSectionId}}` + + ${Else} + + !insertmacro UnselectSection `${${__MementoSectionLastSectionId}}` + + ${EndIf} + + !else + + !undef __MementoSectionUnselected + + ${If} ${Errors} + ${OrIf} $0 == 0 + + !insertmacro UnselectSection `${${__MementoSectionLastSectionId}}` + + ${Else} + + !insertmacro SelectSection `${${__MementoSectionLastSectionId}}` + + ${EndIf} + + !endif + + GetFunctionAddress $0 __MementoSectionRestoreStatus${__MementoSectionIndexNext} + Goto $0 + + FunctionEnd + + Function __MementoSectionSaveStatus${__MementoSectionIndex} + + ${If} ${SectionIsSelected} `${${__MementoSectionLastSectionId}}` + + !insertmacro MementoSectionWriteInt `_${__MementoSectionLastSectionId}` 1 + + ${Else} + + !insertmacro MementoSectionWriteInt `_${__MementoSectionLastSectionId}` 0 + + ${EndIf} + + GetFunctionAddress $0 __MementoSectionSaveStatus${__MementoSectionIndexNext} + Goto $0 + + FunctionEnd + + !undef __MementoSectionIndex + !define __MementoSectionIndex ${__MementoSectionIndexNext} + !undef __MementoSectionIndexNext + + !undef __MementoSectionLastSectionId + + !verbose pop + +!macroend + +!macro MementoSectionDone + + !verbose push + !verbose 3 + + !insertmacro __MementoCheckSettings + + Function __MementoSectionMarkNew${__MementoSectionIndex} + FunctionEnd + + Function __MementoSectionRestoreStatus${__MementoSectionIndex} + FunctionEnd + + Function __MementoSectionSaveStatus${__MementoSectionIndex} + FunctionEnd + + !undef __MementoSectionIndex + + !verbose pop + +!macroend + +!macro MementoSectionRestore + + !verbose push + !verbose 3 + + !insertmacro __MementoCheckSettings + + Push $0 + Push $1 + Push $2 + Push $3 + + # check for first usage + + ClearErrors + !insertmacro MementoSectionReadMarker $0 `Used` + + ${If} ${Errors} + + # use script defaults on first run + Goto done + + ${EndIf} + + # mark new components in bold + + Call __MementoSectionMarkNew1 + + # mark section groups in bold + + StrCpy $0 0 + StrCpy $1 "" + StrCpy $2 "" + StrCpy $3 "" + + loop: + + ClearErrors + + ${If} ${SectionIsBold} $0 + + ${If} $1 != "" + + !insertmacro SetSectionFlag $1 ${SF_BOLD} + + ${EndIf} + + ${If} $2 != "" + + !insertmacro SetSectionFlag $2 ${SF_BOLD} + + ${EndIf} + + ${If} $3 != "" + + !insertmacro SetSectionFlag $3 ${SF_BOLD} + + ${EndIf} + + ${ElseIf} ${Errors} + + Goto loop_end + + ${EndIf} + + ${If} ${SectionIsSectionGroup} $0 + + ${If} $1 == "" + + StrCpy $1 $0 + + ${ElseIf} $2 == "" + + StrCpy $2 $0 + + ${ElseIf} $3 == "" + + StrCpy $3 $0 + + ${EndIf} + + ${EndIf} + + ${If} ${SectionIsSectionGroupEnd} $0 + + ${If} $3 != "" + + StrCpy $3 "" + + ${ElseIf} $2 != "" + + StrCpy $2 "" + + ${ElseIf} $1 != "" + + StrCpy $1 "" + + ${EndIf} + + ${EndIf} + + IntOp $0 $0 + 1 + + Goto loop + loop_end: + + # restore sections' status + + Call __MementoSectionRestoreStatus1 + + # all done + + done: + + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + !verbose pop + +!macroend + +!macro MementoSectionSave + + !verbose push + !verbose 3 + + !insertmacro __MementoCheckSettings + + Push $0 + + !insertmacro MementoSectionWriteMarker `Used` + + Call __MementoSectionSaveStatus1 + + Pop $0 + + !verbose pop + +!macroend + + + +!endif # ___MEMENTO_NSH___ + +!verbose pop diff --git a/tools/Include/MultiUser.nsh b/tools/Include/MultiUser.nsh new file mode 100644 index 0000000..7c59c73 --- /dev/null +++ b/tools/Include/MultiUser.nsh @@ -0,0 +1,505 @@ +/* + +MultiUser.nsh + +Installer configuration for multi-user Windows environments + +Copyright 2008-2023 Joost Verburg + +*/ + +!ifndef MULTIUSER_INCLUDED +!define MULTIUSER_INCLUDED 20210216 +!verbose push 3 + +;Standard NSIS header files + +!ifdef MULTIUSER_MUI + !include MUI2.nsh +!endif +!include LogicLib.nsh +!include WinVer.nsh +!include FileFunc.nsh + +!if ${NSIS_PTR_SIZE} > 4 +!define /IfNDef MULTIUSER_MINWIN 0x501 +!else +!define /IfNDef MULTIUSER_MINWIN 0x400 +!endif + +;Variables + +Var MultiUser.Privileges +Var MultiUser.InstallMode + +;Command line installation mode setting + +!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE + !include StrFunc.nsh + ${Using:StrFunc} StrStr + !ifndef MULTIUSER_NOUNINSTALL + ${Using:StrFunc} UnStrStr + !endif + + Var MultiUser.Parameters + Var MultiUser.Result +!endif + +;Installation folder stored in registry + +!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME + Var MultiUser.InstDir +!endif + +!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME + Var MultiUser.DefaultKeyValue +!endif + +;Windows Vista UAC setting + +!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin + RequestExecutionLevel admin + !define MULTIUSER_EXECUTIONLEVEL_ALLUSERS +!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power + RequestExecutionLevel admin + !define MULTIUSER_EXECUTIONLEVEL_ALLUSERS +!else if "${MULTIUSER_EXECUTIONLEVEL}" == Highest + RequestExecutionLevel highest + !define MULTIUSER_EXECUTIONLEVEL_ALLUSERS +!else + RequestExecutionLevel user + !ifndef MULTIUSER_EXECUTIONLEVEL + !warning "MULTIUSER_EXECUTIONLEVEL not set!" + !endif +!endif + +/* + +Install modes + +*/ + +!macro MULTIUSER_INSTALLMODE_ALLUSERS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX + + ;Install mode initialization - per-machine + + ${ifnot} ${IsNT} + ${orif} $MultiUser.Privileges == "Admin" + ${orif} $MultiUser.Privileges == "Power" + + StrCpy $MultiUser.InstallMode AllUsers + + SetShellVarContext all + + !if "${UNINSTALLER_PREFIX}" != UN + ;Set default installation location for installer + !ifdef MULTIUSER_INSTALLMODE_INSTDIR + !ifdef MULTIUSER_USE_PROGRAMFILES64 + StrCpy $INSTDIR "$PROGRAMFILES64\${MULTIUSER_INSTALLMODE_INSTDIR}" + !else + StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}" + !endif + !endif + !endif + + !ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME + + ReadRegStr $MultiUser.InstDir HKLM "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}" + + ${if} $MultiUser.InstDir != "" + StrCpy $INSTDIR $MultiUser.InstDir + ${endif} + + !endif + + !ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION + Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}" + !endif + + ${endif} + +!macroend + +!macro MULTIUSER_INSTALLMODE_CURRENTUSER UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX + + ;Install mode initialization - per-user + + !if ${MULTIUSER_MINWIN} < 0x500 + ${if} ${IsNT} + !endif + + StrCpy $MultiUser.InstallMode CurrentUser + SetShellVarContext current + + !if "${UNINSTALLER_PREFIX}" != UN + ;Set default installation location for installer + !ifdef MULTIUSER_INSTALLMODE_INSTDIR + !if ${MULTIUSER_MINWIN} < 0x490 + ${if} ${AtLeastWin2000} + !endif + GetKnownFolderPath $INSTDIR {5CD7AEE2-2219-4A67-B85D-6C9CE15660CB} ; FOLDERID_UserProgramFiles + StrCmp $INSTDIR "" 0 +2 + StrCpy $INSTDIR "$LocalAppData\Programs" ; Fallback directory + StrCpy $INSTDIR "$INSTDIR\${MULTIUSER_INSTALLMODE_INSTDIR}" + !if ${MULTIUSER_MINWIN} < 0x490 + ${else} + StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}" + ${endif} + !endif + !endif + !endif + + !ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME + ReadRegStr $MultiUser.InstDir HKCU "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}" + ${if} $MultiUser.InstDir != "" + StrCpy $INSTDIR $MultiUser.InstDir + ${endif} + !endif + + !ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION + Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}" + !endif + + !if ${MULTIUSER_MINWIN} < 0x500 + ${endif} + !endif + +!macroend + +Function MultiUser.InstallMode.AllUsers + !insertmacro MULTIUSER_INSTALLMODE_ALLUSERS "" "" +FunctionEnd + +Function MultiUser.InstallMode.CurrentUser + !insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER "" "" +FunctionEnd + +!ifndef MULTIUSER_NOUNINSTALL + +Function un.MultiUser.InstallMode.AllUsers + !insertmacro MULTIUSER_INSTALLMODE_ALLUSERS UN .un +FunctionEnd + +Function un.MultiUser.InstallMode.CurrentUser + !insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER UN .un +FunctionEnd + +!endif + +/* + +Installer/uninstaller initialization + +*/ + +!macro MULTIUSER_INIT_QUIT UNINSTALLER_FUNCPREFIX + + !ifdef MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUNCTIONQUIT + Call "${MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUNCTIONQUIT}" + !else + Quit + !endif + +!macroend + +!macro MULTIUSER_INIT_TEXTS UNINSTALLER_PREFIX + + !if "${UNINSTALLER_PREFIX}" == "" + !define /ReDef MULTIUSER_TMPSTR_CAPTION "$(^SetupCaption)" + !else + !define /ReDef MULTIUSER_TMPSTR_CAPTION "$(^Name)" + !endif + + !define /IfNDef MULTIUSER_INIT_TEXT_ADMINREQUIRED "${MULTIUSER_TMPSTR_CAPTION} requires administrator privileges." + !define /IfNDef MULTIUSER_INIT_TEXT_POWERREQUIRED "${MULTIUSER_TMPSTR_CAPTION} requires at least Power User privileges." + !define /IfNDef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have sufficient privileges to install $(^Name) for all users of this computer." + + !undef MULTIUSER_TMPSTR_CAPTION + +!macroend + +!macro MULTIUSER_INIT_CHECKS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX + + ;Installer initialization - check privileges and set install mode + + !insertmacro MULTIUSER_INIT_TEXTS "${UNINSTALLER_PREFIX}" + + UserInfo::GetAccountType + Pop $MultiUser.Privileges + + !if ${MULTIUSER_MINWIN} < 0x500 + ${if} ${IsNT} + !endif + + ;Check privileges + + !if "${MULTIUSER_EXECUTIONLEVEL}" == Admin + + ${if} $MultiUser.Privileges != "Admin" + MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}" + !insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}" + ${endif} + + !else if "${MULTIUSER_EXECUTIONLEVEL}" == Power + + ${if} $MultiUser.Privileges != "Power" + ${andif} $MultiUser.Privileges != "Admin" + ${if} ${AtMostWinXP} + MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_POWERREQUIRED}" + ${else} + MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}" + ${endif} + !insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}" + ${endif} + + !endif + + !ifdef MULTIUSER_EXECUTIONLEVEL_ALLUSERS + + ;Default to per-machine installation if possible + + ${if} $MultiUser.Privileges == "Admin" + ${orif} $MultiUser.Privileges == "Power" + !ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers + !else + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser + !endif + + !ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME + + ;Set installation mode to setting from a previous installation + + !ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER + ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" + ${if} $MultiUser.DefaultKeyValue == "" + ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" + ${if} $MultiUser.DefaultKeyValue != "" + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser + ${endif} + ${endif} + !else + ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" + ${if} $MultiUser.DefaultKeyValue == "" + ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" + ${if} $MultiUser.DefaultKeyValue != "" + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers + ${endif} + ${endif} + !endif + + !endif + + ${else} + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser + ${endif} + + !else + + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser + + !endif + + !ifdef MULTIUSER_INSTALLMODE_COMMANDLINE + + ;Check for install mode setting on command line + + ${${UNINSTALLER_FUNCPREFIX}GetParameters} $MultiUser.Parameters + + ${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/CurrentUser" + + ${if} $MultiUser.Result != "" + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser + ${endif} + + ${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/AllUsers" + + ${if} $MultiUser.Result != "" + ${if} $MultiUser.Privileges == "Admin" + ${orif} $MultiUser.Privileges == "Power" + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers + ${else} + MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE}" + !insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}" + ${endif} + ${endif} + + !endif + + !if ${MULTIUSER_MINWIN} < 0x500 + ${else} + + ;Not running Windows NT, per-user installation not supported + Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers + + ${endif} + !endif + +!macroend + +!macro MULTIUSER_INIT + !verbose push 3 + !ifdef __UNINSTALL__ + !insertmacro MULTIUSER_UNINIT + !else + !insertmacro MULTIUSER_INIT_CHECKS "" "" + !endif + !verbose pop +!macroend + +!ifndef MULTIUSER_NOUNINSTALL +!macro MULTIUSER_UNINIT + !verbose push 3 + !insertmacro MULTIUSER_INIT_CHECKS Un un. + !verbose pop +!macroend +!endif + +/* + +Mode selection page + +*/ + +!macro MULTIUSER_PAGE_FUNCTION_CUSTOM TYPE + !ifmacrodef MUI_PAGE_FUNCTION_CUSTOM + !insertmacro MUI_PAGE_FUNCTION_CUSTOM "${TYPE}" + !endif + !ifdef MULTIUSER_PAGE_CUSTOMFUNCTION_${TYPE} + Call "${MULTIUSER_PAGE_CUSTOMFUNCTION_${TYPE}}" + !undef MULTIUSER_PAGE_CUSTOMFUNCTION_${TYPE} + !endif +!macroend + +!macro MULTIUSER_INSTALLMODEPAGE_INTERFACE + + !ifndef MULTIUSER_INSTALLMODEPAGE_INTERFACE + !define MULTIUSER_INSTALLMODEPAGE_INTERFACE + Var MultiUser.InstallModePage + + Var MultiUser.InstallModePage.Text + + Var MultiUser.InstallModePage.AllUsers + Var MultiUser.InstallModePage.CurrentUser + + !endif + +!macroend + +!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE UNPREFIX UNIQUEID + + !define /ReDef MULTIUSER_${UNPREFIX}INSTALLMODEPAGE "" ; Unlock strings in the language file(s) + !insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE + + !define /IfNDef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)" + !define /IfNDef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS "$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)" + !define /IfNDef MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER "$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)" + + PageEx custom + + PageCallbacks MultiUser.InstallModePre_${UNIQUEID} MultiUser.InstallModeLeave_${UNIQUEID} + + !define /IfNDef MULTIUSER_INSTALLMODEPAGE_CAPTION " " + Caption "${MULTIUSER_INSTALLMODEPAGE_CAPTION}" + + PageExEnd + + !insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE MultiUser.InstallModePre_${UNIQUEID} MultiUser.InstallModeLeave_${UNIQUEID} + + !undef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP + !undef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS + !undef MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER + +!macroend + +!macro MULTIUSER_PAGE_INSTALLMODE + + !verbose push 3 + + !ifndef MULTIUSER_EXECUTIONLEVEL_ALLUSERS + !error "A mixed-mode installation requires MULTIUSER_EXECUTIONLEVEL to be set to Admin, Power or Highest." + !endif + + !ifmacrodef MUI_PAGE_INIT + !insertmacro MUI_PAGE_INIT + !endif + !insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE "" ${__COUNTER__} + + !verbose pop + +!macroend + +!macro MULTIUSER_FUNCTION_INSTALLMODEPAGE PRE LEAVE + + !include nsDialogs.nsh + + Function "${PRE}" + + !if ${MULTIUSER_MINWIN} < 0x500 + ${ifnot} ${IsNT} + Abort + ${endif} + !endif + + ${if} $MultiUser.Privileges != "Power" + ${andif} $MultiUser.Privileges != "Admin" + Abort + ${endif} + + !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM PRE + !ifmacrodef MUI_HEADER_TEXT_PAGE + !insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) $(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE) + !endif + + nsDialogs::Create 1018 + Pop $MultiUser.InstallModePage + + ${NSD_CreateLabel} 0 2u 100% 42u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}" + Pop $MultiUser.InstallModePage.Text + + ${NSD_CreateRadioButton} 15u 50u -15u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}" + Pop $MultiUser.InstallModePage.AllUsers + + !ifdef MULTIUSER_INSTALLMODEPAGE_SHOWUSERNAME + !ifdef NOSYSTEMCALLS + ReadEnvStr $0 USERNAME + !else + System::Call 'ADVAPI32::GetUserName(t""r0,*i${NSIS_MAX_STRLEN})' + !endif + StrCmp $0 "" +2 + StrCpy $0 " ($0)" + ${NSD_CreateRadioButton} 15u 70u -15u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}$0" + !else + ${NSD_CreateRadioButton} 15u 70u -15u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}" + !endif + Pop $MultiUser.InstallModePage.CurrentUser + + ${if} $MultiUser.InstallMode == "AllUsers" + SendMessage $MultiUser.InstallModePage.AllUsers ${BM_SETCHECK} ${BST_CHECKED} 0 + ${else} + SendMessage $MultiUser.InstallModePage.CurrentUser ${BM_SETCHECK} ${BST_CHECKED} 0 + ${endif} + + !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM SHOW + nsDialogs::Show + !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM DESTROYED + + FunctionEnd + + Function "${LEAVE}" + SendMessage $MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 $0 + + ${if} $0 = ${BST_CHECKED} + Call MultiUser.InstallMode.AllUsers + ${else} + Call MultiUser.InstallMode.CurrentUser + ${endif} + + !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM LEAVE + FunctionEnd + +!macroend + + +!verbose pop +!endif diff --git a/tools/Include/Sections.nsh b/tools/Include/Sections.nsh new file mode 100644 index 0000000..7ae9f68 --- /dev/null +++ b/tools/Include/Sections.nsh @@ -0,0 +1,310 @@ +; Sections.nsh +; +; Defines and macros for section control +; +; Include in your script using: +; !include "Sections.nsh" + +;-------------------------------- + +!ifndef SECTIONS_INCLUDED + +!define SECTIONS_INCLUDED + +;-------------------------------- + +; Generic section defines + +# section or section group is selected +!define SF_SELECTED 1 +# section group +!define SF_SECGRP 2 +!define SF_SUBSEC 2 # deprecated +# section group end marker +!define SF_SECGRPEND 4 +!define SF_SUBSECEND 4 # deprecated +# bold text (Section !blah) +!define SF_BOLD 8 +# read only (SectionIn RO) +!define SF_RO 16 +# expanded section group (SectionGroup /e blah) +!define SF_EXPAND 32 +# section group is partially selected +!define SF_PSELECTED 64 # internal +# internal +!define SF_TOGGLED 128 # internal +!define SF_NAMECHG 256 # internal + +# mask to toggle off the selected flag +!define SECTION_OFF 0xFFFFFFFE + +;-------------------------------- + +; Select / unselect / reserve section + +!macro SelectSection SECTION + + Push $0 + Push $1 + StrCpy $1 "${SECTION}" + SectionGetFlags $1 $0 + IntOp $0 $0 | ${SF_SELECTED} + SectionSetFlags $1 $0 + Pop $1 + Pop $0 + +!macroend + +!macro UnselectSection SECTION + + Push $0 + Push $1 + StrCpy $1 "${SECTION}" + SectionGetFlags $1 $0 + IntOp $0 $0 & ${SECTION_OFF} + SectionSetFlags $1 $0 + Pop $1 + Pop $0 + +!macroend + +; If section selected, will unselect, if unselected, will select + +!macro ReverseSection SECTION + + Push $0 + Push $1 + StrCpy $1 "${SECTION}" + SectionGetFlags $1 $0 + IntOp $0 $0 ^ ${SF_SELECTED} + SectionSetFlags $1 $0 + Pop $1 + Pop $0 + +!macroend + +;-------------------------------- + +; Macros for mutually exclusive section selection +; Written by Tim Gallagher +; +; See one-section.nsi for an example of usage + +; Starts the Radio Button Block +; You should pass a variable that keeps the selected section +; as the first parameter for this macro. This variable should +; be initialized to the default section's index. +; +; As this macro uses $R0 and $R1 you can't use those two as the +; variable which will keep the selected section. + +!macro StartRadioButtons var + + !define StartRadioButtons_Var "${var}" + + Push $R0 + + SectionGetFlags "${StartRadioButtons_Var}" $R0 + IntOp $R0 $R0 & ${SECTION_OFF} + SectionSetFlags "${StartRadioButtons_Var}" $R0 + + Push $R1 + + StrCpy $R1 "${StartRadioButtons_Var}" + +!macroend + +; A radio button + +!macro RadioButton SECTION_NAME + + SectionGetFlags ${SECTION_NAME} $R0 + IntOp $R0 $R0 & ${SF_SELECTED} + IntCmp $R0 ${SF_SELECTED} 0 +2 +2 + StrCpy "${StartRadioButtons_Var}" ${SECTION_NAME} + +!macroend + +; Ends the radio button block + +!macro EndRadioButtons + + StrCmp $R1 "${StartRadioButtons_Var}" 0 +4 ; selection hasn't changed + SectionGetFlags "${StartRadioButtons_Var}" $R0 + IntOp $R0 $R0 | ${SF_SELECTED} + SectionSetFlags "${StartRadioButtons_Var}" $R0 + + Pop $R1 + Pop $R0 + + !undef StartRadioButtons_Var + +!macroend + +;-------------------------------- + +; These are two macros you can use to set a Section in an InstType +; or clear it from an InstType. +; +; Written by Robert Kehl +; +; For details, see https://nsis.sourceforge.io/wiki/SetSectionInInstType%2C_ClearSectionInInstType +; +; Use the defines below for the WANTED_INSTTYPE parameter. + +!define INSTTYPE_1 1 +!define INSTTYPE_2 2 +!define INSTTYPE_3 4 +!define INSTTYPE_4 8 +!define INSTTYPE_5 16 +!define INSTTYPE_6 32 +!define INSTTYPE_7 64 +!define INSTTYPE_8 128 +!define INSTTYPE_9 256 +!define INSTTYPE_10 512 +!define INSTTYPE_11 1024 +!define INSTTYPE_12 2048 +!define INSTTYPE_13 4096 +!define INSTTYPE_14 8192 +!define INSTTYPE_15 16384 +!define INSTTYPE_16 32768 +!define INSTTYPE_17 65536 +!define INSTTYPE_18 131072 +!define INSTTYPE_19 262144 +!define INSTTYPE_20 524288 +!define INSTTYPE_21 1048576 +!define INSTTYPE_22 2097152 +!define INSTTYPE_23 4194304 +!define INSTTYPE_24 8388608 +!define INSTTYPE_25 16777216 +!define INSTTYPE_26 33554432 +!define INSTTYPE_27 67108864 +!define INSTTYPE_28 134217728 +!define INSTTYPE_29 268435456 +!define INSTTYPE_30 536870912 +!define INSTTYPE_31 1073741824 +!define INSTTYPE_32 2147483648 + +!macro SetSectionInInstType SECTION_NAME WANTED_INSTTYPE + + Push $0 + Push $1 + StrCpy $1 "${SECTION_NAME}" + SectionGetInstTypes $1 $0 + IntOp $0 $0 | ${WANTED_INSTTYPE} + SectionSetInstTypes $1 $0 + Pop $1 + Pop $0 + +!macroend + +!macro ClearSectionInInstType SECTION_NAME WANTED_INSTTYPE + + Push $0 + Push $1 + Push $2 + StrCpy $2 "${SECTION_NAME}" + SectionGetInstTypes $2 $0 + StrCpy $1 ${WANTED_INSTTYPE} + IntOp $1 $1 ~ + IntOp $0 $0 & $1 + SectionSetInstTypes $2 $0 + Pop $2 + Pop $1 + Pop $0 + +!macroend + +;-------------------------------- + +; Set / clear / check bits in a section's flags +; Written by derekrprice + +; Set one or more bits in a sections's flags + +!macro SetSectionFlag SECTION BITS + + Push $R0 + Push $R1 + StrCpy $R1 "${SECTION}" + SectionGetFlags $R1 $R0 + IntOp $R0 $R0 | "${BITS}" + SectionSetFlags $R1 $R0 + Pop $R1 + Pop $R0 + +!macroend + +; Clear one or more bits in section's flags + +!macro ClearSectionFlag SECTION BITS + + Push $R0 + Push $R1 + Push $R2 + StrCpy $R2 "${SECTION}" + SectionGetFlags $R2 $R0 + IntOp $R1 "${BITS}" ~ + IntOp $R0 $R0 & $R1 + SectionSetFlags $R2 $R0 + Pop $R2 + Pop $R1 + Pop $R0 + +!macroend + +; Check if one or more bits in section's flags are set +; If they are, jump to JUMPIFSET +; If not, jump to JUMPIFNOTSET + +!macro SectionFlagIsSet SECTION BITS JUMPIFSET JUMPIFNOTSET + Push $R0 + SectionGetFlags "${SECTION}" $R0 + IntOp $R0 $R0 & "${BITS}" + IntCmp $R0 "${BITS}" +3 + Pop $R0 + StrCmp "" "${JUMPIFNOTSET}" +3 "${JUMPIFNOTSET}" + Pop $R0 + Goto "${JUMPIFSET}" +!macroend + +;-------------------------------- + +; Removes a section by unselecting and hiding it + +!macro RemoveSection SECTION + + Push $R0 + Push $R1 + StrCpy $R1 `${SECTION}` + SectionGetFlags $R1 $R0 + IntOp $R0 $R0 & ${SECTION_OFF} + SectionSetFlags $R1 $R0 + SectionSetText $R1 `` + Pop $R1 + Pop $R0 + +!macroend + +; Undoes the RemoveSection action + +!macro UnremoveSection SECTION SECTION_TEXT + + Push $R0 + Push $R1 + Push $R2 + StrCpy $R1 `${SECTION}` + StrCpy $R2 `${SECTION_TEXT}` + SectionGetFlags $R1 $R0 + IntOp $R0 $R0 | ${SF_SELECTED} + SectionSetFlags $R1 $R0 + SectionSetText $R1 $R2 + Pop $R2 + Pop $R1 + Pop $R0 + +!macroend + +;-------------------------------- + +!endif \ No newline at end of file diff --git a/tools/Include/StrFunc.nsh b/tools/Include/StrFunc.nsh new file mode 100644 index 0000000..b0448c0 --- /dev/null +++ b/tools/Include/StrFunc.nsh @@ -0,0 +1,1627 @@ +/* +o-----------------------------------------------------------------------------o +|String Functions Header File 1.10 | +(-----------------------------------------------------------------------------) +| By deguix / A Header file for NSIS 2.01 | +| -------------------------------| +| | +| This header file contains NSIS functions for string manipulation. | +| ---------| +| !include "StrFunc.nsh" / Example | +| ${Using:StrFunc} StrRep -----------| +| | +| Section | +| ${StrRep} $0 "Hello world!" "world" "everyone" | +| MessageBox mb_ok $0 | +| SectionEnd | +| | +o-----------------------------------------------------------------------------o +*/ + +!verbose push 3 +!define /IfNDef STRFUNC_VERBOSITY 3 +!define /IfNDef _STRFUNC_VERBOSITY ${STRFUNC_VERBOSITY} +!define /IfNDef _STRFUNC_CREDITVERBOSITY ${STRFUNC_VERBOSITY} +!undef STRFUNC_VERBOSITY +!verbose ${_STRFUNC_VERBOSITY} + +!include LogicLib.nsh + +!ifndef STRFUNC + + !define /IfNDef FALSE 0 + !define /IfNDef TRUE 1 + + ;Header File Identification + + !define STRFUNC `String Functions Header File` + ;define STRFUNC_SHORT `StrFunc` + !define STRFUNC_CREDITS `2004 Diego Pedroso` + + ;Header File Version + + !define STRFUNC_VERMAJ 1 + !define STRFUNC_VERMED 10 + ;!define STRFUNC_VERMIN 0 + ;!define STRFUNC_VERBLD 0 + + !define STRFUNC_VER `${STRFUNC_VERMAJ}.${STRFUNC_VERMED}` + + ;Header File Init Message Prefix and Postfix + + !define STRFUNC_INITMSGPRE `----------------------------------------------------------------------$\r$\n` + !define STRFUNC_INITMSGPOST `$\r$\n----------------------------------------------------------------------$\r$\n` + + ;Header File Init Message + + !verbose push ${_STRFUNC_CREDITVERBOSITY} + !echo `${STRFUNC_INITMSGPRE}NSIS ${STRFUNC} ${STRFUNC_VER} - Copyright ${STRFUNC_CREDITS}${STRFUNC_INITMSGPOST}` + !verbose pop + + ;Header File Function Macros + + !ifdef STRFUNC_USECALLARTIFICIALFUNCTION + !include Util.nsh + !endif + + !define "Using:StrFunc" `!insertmacro STRFUNC_USING ` + !macro STRFUNC_USING Name + !if "${STRFUNC_VERBOSITY}" > 4 + !verbose push 4 + !endif + !ifndef ${Name}_INCLUDED + !ifndef STRFUNC_USECALLARTIFICIALFUNCTION + ${${Name}} ; Invoke !insertmacro STRFUNC_MAKEFUNC + !endif + !endif + !if "${STRFUNC_VERBOSITY}" > 4 + !verbose pop + !endif + !macroend + + !macro STRFUNC_FUNCLIST_INSERT Name + !ifdef StrFunc_List + !define /ReDef StrFunc_List `${StrFunc_List}|${Name}` + !else + !define StrFunc_List `${Name}` + !endif + !macroend + + !macro STRFUNC_DEFFUNC Name List TypeList + !insertmacro STRFUNC_FUNCLIST_INSERT ${Name} + !define `${Name}_List` `${List}` + !define `${Name}_TypeList` `${TypeList}` + !ifdef STRFUNC_USECALLARTIFICIALFUNCTION + !define `${Name}` `!insertmacro STRFUNC_CALL_${Name} "" ` + !define `Un${Name}` `!insertmacro STRFUNC_CALL_${Name} Un ` + !else + !define `${Name}` `!insertmacro STRFUNC_MAKEFUNC ${Name} "" #` + !define `Un${Name}` `!insertmacro STRFUNC_MAKEFUNC ${Name} Un #` + !endif + !macroend + + !macro STRFUNC_MAKEFUNC basename un + !ifndef __GLOBAL__ + !error "You forgot ${U+24}{Using:StrFunc} ${un}${basename}" + !endif + !insertmacro STRFUNC_MAKEFUNC_${basename} + !macroend + + !macro STRFUNC_BEGINFUNC basename un credits + !verbose push ${_STRFUNC_CREDITVERBOSITY} + !echo `${U+24}{${un}${basename}} - Copyright ${credits}` + !verbose pop + !define /IfNDef ${un}${basename}_INCLUDED + !ifndef STRFUNC_USECALLARTIFICIALFUNCTION + !define /ReDef ${un}${basename} `!insertmacro STRFUNC_CALL_${basename} "${un}" ` + !if "${un}" != "" + Function un.${basename} + !else + Function ${basename} + !endif + !endif + !macroend + !macro STRFUNC_ENDFUNC + !ifndef STRFUNC_USECALLARTIFICIALFUNCTION + FunctionEnd + !endif + !macroend + + !macro STRFUNC_CALL basename un + !ifdef STRFUNC_USECALLARTIFICIALFUNCTION + ${CallArtificialFunction} STRFUNC_MAKEFUNC_${basename} + !else + !if "${un}" != "" + Call un.${basename} + !else + Call ${basename} + !endif + !endif + !macroend + + + ############################################################################ + # StrCase + !insertmacro STRFUNC_DEFFUNC StrCase `ResultVar|String|Type` `Output|Text|Option U L T S <>` + + !macro STRFUNC_CALL_StrCase un ResultVar String Type + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrCase} "${ResultVar}" "${String}" "${Type}"` + !verbose 2 + Push `${String}` + Push `${Type}` + !insertmacro STRFUNC_CALL StrCase "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrCase + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Dave Laundon` + /*After this point: + ------------------------------------------ + $0 = String (input) + $1 = Type (input) + $2 = StrLength (temp) + $3 = StartChar (temp) + $4 = EndChar (temp) + $5 = ResultStr (temp) + $6 = CurrentChar (temp) + $7 = LastChar (temp) + $8 = Temp (temp)*/ + + ;Get input from user + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + + ;Initialize variables + StrCpy $2 "" + StrCpy $3 "" + StrCpy $4 "" + StrCpy $5 "" + StrCpy $6 "" + StrCpy $7 "" + StrCpy $8 "" + + ;Upper and lower cases are simple to use + ${If} $1 == "U" + + ;Upper Case System: + ;------------------ + ; Convert all characters to upper case. + + System::Call "User32::CharUpper(t r0 r5)i" + Goto StrCase_End + ${ElseIf} $1 == "L" + + ;Lower Case System: + ;------------------ + ; Convert all characters to lower case. + + System::Call "User32::CharLower(t r0 r5)i" + Goto StrCase_End + ${EndIf} + + ;For the rest of cases: + ;Get "String" length + StrLen $2 $0 + + ;Make a loop until the end of "String" + ${For} $3 0 $2 + ;Add 1 to "EndChar" counter also + IntOp $4 $3 + 1 + + # Step 1: Detect one character at a time + + ;Remove characters before "StartChar" except when + ;"StartChar" is the first character of "String" + ${If} $3 <> 0 + StrCpy $6 $0 `` $3 + ${EndIf} + + ;Remove characters after "EndChar" except when + ;"EndChar" is the last character of "String" + ${If} $4 <> $2 + ${If} $3 = 0 + StrCpy $6 $0 1 + ${Else} + StrCpy $6 $6 1 + ${EndIf} + ${EndIf} + + # Step 2: Convert to the advanced case user chose: + + ${If} $1 == "T" + + ;Title Case System: + ;------------------ + ; Convert all characters after a non-alphabetic character to upper case. + ; Else convert to lower case. + + ;Use "IsCharAlpha" for the job + System::Call "*(&t1 r7) p .r8" + System::Call "*$8(&i1 .r7)" + System::Free $8 + System::Call "user32::IsCharAlpha(i r7) i .r8" + + ;Verify "IsCharAlpha" result and convert the character + ${If} $8 = 0 + System::Call "User32::CharUpper(t r6 r6)i" + ${Else} + System::Call "User32::CharLower(t r6 r6)i" + ${EndIf} + ${ElseIf} $1 == "S" + + ;Sentence Case System: + ;------------------ + ; Convert all characters after a ".", "!" or "?" character to upper case. + ; Else convert to lower case. Spaces or tabs after these marks are ignored. + + ;Detect current characters and ignore if necessary + ${If} $6 == " " + ${OrIf} $6 == "$\t" + Goto IgnoreLetter + ${EndIf} + + ;Detect last characters and convert + ${If} $7 == "." + ${OrIf} $7 == "!" + ${OrIf} $7 == "?" + ${OrIf} $7 == "" + System::Call "User32::CharUpper(t r6 r6)i" + ${Else} + System::Call "User32::CharLower(t r6 r6)i" + ${EndIf} + ${ElseIf} $1 == "<>" + + ;Switch Case System: + ;------------------ + ; Switch all characters cases to their inverse case. + + ;Use "IsCharUpper" for the job + System::Call "*(&t1 r6) p .r8" + System::Call "*$8(&i1 .r7)" + System::Free $8 + System::Call "user32::IsCharUpper(i r7) i .r8" + + ;Verify "IsCharUpper" result and convert the character + ${If} $8 = 0 + System::Call "User32::CharUpper(t r6 r6)i" + ${Else} + System::Call "User32::CharLower(t r6 r6)i" + ${EndIf} + ${EndIf} + + ;Write the character to "LastChar" + StrCpy $7 $6 + + IgnoreLetter: + ;Add this character to "ResultStr" + StrCpy $5 `$5$6` + ${Next} + + StrCase_End: + + /*After this point: + ------------------------------------------ + $0 = OutVar (output)*/ + + ; Copy "ResultStr" to "OutVar" + StrCpy $0 $5 + + ;Return output to user + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrClb + !insertmacro STRFUNC_DEFFUNC StrClb `ResultVar|String|Action` `Output|Text|Option > < <>` + + !macro STRFUNC_CALL_StrClb un ResultVar String Action + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrClb} "${ResultVar}" "${String}" "${Action}"` + !verbose 2 + Push `${String}` + Push `${Action}` + !insertmacro STRFUNC_CALL StrClb "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrClb + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Nik Medved` + + /*After this point: + ------------------------------------------ + $0 = String (input) + $1 = Action (input) + $2 = Lock/Unlock (temp) + $3 = Temp (temp) + $4 = Temp2 (temp)*/ + + ;Get input from user + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + + StrCpy $2 "" + StrCpy $3 "" + StrCpy $4 "" + + ;Open the clipboard to do the operations the user chose (kichik's fix) + System::Call 'user32::OpenClipboard(p $HWNDPARENT)' + + ${If} $1 == ">" ;Set + + ;Step 1: Clear the clipboard + System::Call 'user32::EmptyClipboard()' + + ;Step 2: Allocate global heap + StrLen $2 $0 + IntOp $2 $2 + 1 + !if "${NSIS_CHAR_SIZE}" > 1 + IntOp $2 $2 * ${NSIS_CHAR_SIZE} + !endif + System::Call 'kernel32::GlobalAlloc(i 2, i r2) p.r2' + + ;Step 3: Lock the handle + System::Call 'kernel32::GlobalLock(p r2) i.r3' + + ;Step 4: Copy the text to locked clipboard buffer + System::Call 'kernel32::lstrcpy(p r3, t r0)' + + ;Step 5: Unlock the handle again + System::Call 'kernel32::GlobalUnlock(p r2)' + + ;Step 6: Set the information to the clipboard + !if "${NSIS_CHAR_SIZE}" > 1 + System::Call 'user32::SetClipboardData(i 13, p r2)' + !else + System::Call 'user32::SetClipboardData(i 1, p r2)' + !endif + + StrCpy $0 "" + + ${ElseIf} $1 == "<" ;Get + + ;Step 1: Get clipboard data + !if "${NSIS_CHAR_SIZE}" > 1 + System::Call 'user32::GetClipboardData(i 13)p.r2' + !else + System::Call 'user32::GetClipboardData(i 1)p.r2' + !endif + + ;Step 2: Lock and copy data (kichik's fix) + System::Call 'kernel32::GlobalLock(p r2) t .r0' + + ;Step 3: Unlock (kichik's fix) + System::Call 'kernel32::GlobalUnlock(p r2)' + + ${ElseIf} $1 == "<>" ;Swap + + ;Step 1: Get clipboard data + !if "${NSIS_CHAR_SIZE}" > 1 + System::Call 'user32::GetClipboardData(i 13)p.r2' + !else + System::Call 'user32::GetClipboardData(i 1)p.r2' + !endif + + ;Step 2: Lock and copy data (kichik's fix) + System::Call 'kernel32::GlobalLock(p r2) t .r4' + + ;Step 3: Unlock (kichik's fix) + System::Call 'kernel32::GlobalUnlock(p r2)' + + ;Step 4: Clear the clipboard + System::Call 'user32::EmptyClipboard()' + + ;Step 5: Allocate global heap + StrLen $2 $0 + IntOp $2 $2 + 1 + !if "${NSIS_CHAR_SIZE}" > 1 + IntOp $2 $2 * ${NSIS_CHAR_SIZE} + !endif + System::Call 'kernel32::GlobalAlloc(i 2, i r2) p.r2' + + ;Step 6: Lock the handle + System::Call 'kernel32::GlobalLock(p r2) i.r3' + + ;Step 7: Copy the text to locked clipboard buffer + System::Call 'kernel32::lstrcpy(p r3, t r0)' + + ;Step 8: Unlock the handle again + System::Call 'kernel32::GlobalUnlock(p r2)' + + ;Step 9: Set the information to the clipboard + !if "${NSIS_CHAR_SIZE}" > 1 + System::Call 'user32::SetClipboardData(i 13, p r2)' + !else + System::Call 'user32::SetClipboardData(i 1, p r2)' + !endif + + StrCpy $0 $4 + ${Else} ;Clear + + ;Step 1: Clear the clipboard + System::Call 'user32::EmptyClipboard()' + + StrCpy $0 "" + ${EndIf} + + ;Close the clipboard + System::Call 'user32::CloseClipboard()' + + /*After this point: + ------------------------------------------ + $0 = OutVar (output)*/ + + ;Return result to user + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrIOToNSIS + !insertmacro STRFUNC_DEFFUNC StrIOToNSIS `ResultVar|String` `Output|Text` + + !macro STRFUNC_CALL_StrIOToNSIS un ResultVar String + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrIOToNSIS} "${ResultVar}" "${String}"` + !verbose 2 + Push `${String}` + !insertmacro STRFUNC_CALL StrIOToNSIS "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrIOToNSIS + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 "bluenet" - Based on functions by Amir Szekely, Joost Verburg, Dave Laundon and Diego Pedroso` + + /*After this point: + ------------------------------------------ + $R0 = String (input/output) + $R1 = StartCharPos (temp) + $R2 = StrLen (temp) + $R3 = TempStr (temp) + $R4 = TempRepStr (temp)*/ + + ;Get input from user + Exch $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + + ;Get "String" length + StrLen $R2 $R0 + + ;Loop until "String" end is reached + ${For} $R1 0 $R2 + ;Get the next "String" characters + StrCpy $R3 $R0 2 $R1 + + ;Detect if current character is: + ${If} $R3 == "\\" ;Back-slash + StrCpy $R4 "\" + ${ElseIf} $R3 == "\r" ;Carriage return + StrCpy $R4 "$\r" + ${ElseIf} $R3 == "\n" ;Line feed + StrCpy $R4 "$\n" + ${ElseIf} $R3 == "\t" ;Tab + StrCpy $R4 "$\t" + ${Else} ;Anything else + StrCpy $R4 "" + ${EndIf} + + ;Detect if "TempRepStr" is not empty + ${If} $R4 != "" + ;Replace the old characters with the new one + StrCpy $R3 $R0 $R1 + IntOp $R1 $R1 + 2 + StrCpy $R0 $R0 "" $R1 + StrCpy $R0 "$R3$R4$R0" + IntOp $R2 $R2 - 1 ;Decrease "StrLen" + IntOp $R1 $R1 - 2 ;Go back to the next character + ${EndIf} + ${Next} + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + !macroend + + ############################################################################ + # StrLoc + !insertmacro STRFUNC_DEFFUNC StrLoc `ResultVar|String|StrToSearchFor|CounterDirection` `Output|Text|Text|Option > <` + + !macro STRFUNC_CALL_StrLoc un ResultVar String StrToSearchFor OffsetDirection + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrLoc} "${ResultVar}" "${String}" "${StrToSearchFor}" "${OffsetDirection}"` + !verbose 2 + Push `${String}` + Push `${StrToSearchFor}` + Push `${OffsetDirection}` + !insertmacro STRFUNC_CALL StrLoc "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrLoc + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Ximon Eighteen` + + /*After this point: + ------------------------------------------ + $R0 = OffsetDirection (input) + $R1 = StrToSearch (input) + $R2 = String (input) + $R3 = StrToSearchLen (temp) + $R4 = StrLen (temp) + $R5 = StartCharPos (temp) + $R6 = TempStr (temp)*/ + + ;Get input from user + Exch $R0 + Exch + Exch $R1 + Exch 2 + Exch $R2 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + + ;Get "String" and "StrToSearch" length + StrLen $R3 $R1 + StrLen $R4 $R2 + ;Start "StartCharPos" counter + StrCpy $R5 0 + + ;Loop until "StrToSearch" is found or "String" reaches its end + ${Do} + ;Remove everything before and after the searched part ("TempStr") + StrCpy $R6 $R2 $R3 $R5 + + ;Compare "TempStr" with "StrToSearch" + ${If} $R6 == $R1 + ${If} $R0 == `<` + IntOp $R6 $R3 + $R5 + IntOp $R0 $R4 - $R6 + ${Else} + StrCpy $R0 $R5 + ${EndIf} + ${ExitDo} + ${EndIf} + ;If not "StrToSearch", this could be "String" end + ${If} $R5 >= $R4 + StrCpy $R0 `` + ${ExitDo} + ${EndIf} + ;If not, continue the loop + IntOp $R5 $R5 + 1 + ${Loop} + + ;Return output to user + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrNSISToIO + !insertmacro STRFUNC_DEFFUNC StrNSISToIO `ResultVar|String` `Output|Text` + + !macro STRFUNC_CALL_StrNSISToIO un ResultVar String + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrNSISToIO} "${ResultVar}" "${String}"` + !verbose 2 + Push `${String}` + !insertmacro STRFUNC_CALL StrNSISToIO "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrNSISToIO + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 "bluenet" - Based on functions by Amir Szekely, Joost Verburg, Dave Laundon and Diego Pedroso` + + /*After this point: + ------------------------------------------ + $R0 = String (input/output) + $R1 = StartCharPos (temp) + $R2 = StrLen (temp) + $R3 = TempStr (temp) + $R4 = TempRepStr (temp)*/ + + ;Get input from user + Exch $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + + ;Get "String" length + StrLen $R2 $R0 + + ;Loop until "String" end is reached + ${For} $R1 0 $R2 + ;Get the next "String" character + StrCpy $R3 $R0 1 $R1 + + ;Detect if current character is: + ${If} $R3 == "$\r" ;Back-slash + StrCpy $R4 "\r" + ${ElseIf} $R3 == "$\n" ;Carriage return + StrCpy $R4 "\n" + ${ElseIf} $R3 == "$\t" ;Line feed + StrCpy $R4 "\t" + ${ElseIf} $R3 == "\" ;Tab + StrCpy $R4 "\\" + ${Else} ;Anything else + StrCpy $R4 "" + ${EndIf} + + ;Detect if "TempRepStr" is not empty + ${If} $R4 != "" + ;Replace the old character with the new ones + StrCpy $R3 $R0 $R1 + IntOp $R1 $R1 + 1 + StrCpy $R0 $R0 "" $R1 + StrCpy $R0 "$R3$R4$R0" + IntOp $R2 $R2 + 1 ;Increase "StrLen" + ${EndIf} + ${Next} + + ;Return output to user + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + !macroend + + ############################################################################ + # StrRep + !insertmacro STRFUNC_DEFFUNC StrRep `ResultVar|String|StrToReplace|ReplacementString` `Output|Text|Text|Text` + + !macro STRFUNC_CALL_StrRep un ResultVar String StringToReplace ReplacementString + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrRep} "${ResultVar}" "${String}" "${StringToReplace}" "${ReplacementString}"` + !verbose 2 + Push `${String}` + Push `${StringToReplace}` + Push `${ReplacementString}` + !insertmacro STRFUNC_CALL StrRep "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrRep + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Hendri Adriaens` + + /*After this point: + ------------------------------------------ + $R0 = ReplacementString (input) + $R1 = StrToSearch (input) + $R2 = String (input) + $R3 = RepStrLen (temp) + $R4 = StrToSearchLen (temp) + $R5 = StrLen (temp) + $R6 = StartCharPos (temp) + $R7 = TempStrL (temp) + $R8 = TempStrR (temp)*/ + + ;Get input from user + Exch $R0 + Exch + Exch $R1 + Exch + Exch 2 + Exch $R2 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + Push $R7 + Push $R8 + + ;Return "String" if "StrToSearch" is "" + ${IfThen} $R1 == "" ${|} Goto Done ${|} + + ;Get "ReplacementString", "String" and "StrToSearch" length + StrLen $R3 $R0 + StrLen $R4 $R1 + StrLen $R5 $R2 + ;Start "StartCharPos" counter + StrCpy $R6 0 + + ;Loop until "StrToSearch" is found or "String" reaches its end + ${Do} + ;Remove everything before and after the searched part ("TempStrL") + StrCpy $R7 $R2 $R4 $R6 + + ;Compare "TempStrL" with "StrToSearch" + ${If} $R7 == $R1 + ;Split "String" to replace the string wanted + StrCpy $R7 $R2 $R6 ;TempStrL + + ;Calc: "StartCharPos" + "StrToSearchLen" = EndCharPos + IntOp $R8 $R6 + $R4 + + StrCpy $R8 $R2 "" $R8 ;TempStrR + + ;Insert the new string between the two separated parts of "String" + StrCpy $R2 $R7$R0$R8 + ;Now calculate the new "StrLen" and "StartCharPos" + StrLen $R5 $R2 + IntOp $R6 $R6 + $R3 + ${Continue} + ${EndIf} + + ;If not "StrToSearch", this could be "String" end + ${IfThen} $R6 >= $R5 ${|} ${ExitDo} ${|} + ;If not, continue the loop + IntOp $R6 $R6 + 1 + ${Loop} + + Done: + + /*After this point: + ------------------------------------------ + $R0 = OutVar (output)*/ + + ;Return output to user + StrCpy $R0 $R2 + Pop $R8 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrSort + !insertmacro STRFUNC_DEFFUNC StrSort `ResultVar|String|CenterStr|LeftStr|RightStr|IncludeLeftStr|IncludeCenterStr|IncludeRightStr` `Output|Text|Text|Text|Text|Option 1 0|Option 1 0|Option 1 0` + + !macro STRFUNC_CALL_StrSort un ResultVar String CenterStr LeftStr RightStr IncludeCenterStr IncludeLeftStr IncludeRightStr + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrSort} "${ResultVar}" "${String}" "${CenterStr}" "${LeftStr}" "${RightStr}" "${IncludeCenterStr}" "${IncludeLeftStr}" "${IncludeRightStr}"` + !verbose 2 + Push `${String}` + Push `${CenterStr}` + Push `${LeftStr}` + Push `${RightStr}` + Push `${IncludeCenterStr}` + Push `${IncludeLeftStr}` + Push `${IncludeRightStr}` + !insertmacro STRFUNC_CALL StrSort "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrSort + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Stuart Welch` + + /*After this point: + ------------------------------------------ + $R0 = String (input) + $R1 = LeftStr (input) + $R2 = CenterStr (input) + $R3 = RightStr (input) + $R4 = IncludeLeftStr (input) + $R5 = IncludeCenterStr (input) + $R6 = IncludeRightStr (input) + + $0 = StrLen (temp) + $1 = LeftStrLen (temp) + $2 = CenterStrLen (temp) + $3 = RightStrLen (temp) + $4 = StartPos (temp) + $5 = EndPos (temp) + $6 = StartCharPos (temp) + $7 = EndCharPos (temp) + $8 = TempStr (temp)*/ + + ;Get input from user + Exch $R6 + Exch + Exch $R5 + Exch + Exch 2 + Exch $R4 + Exch 2 + Exch 3 + Exch $R3 + Exch 3 + Exch 4 + Exch $R2 + Exch 4 + Exch 5 + Exch $R1 + Exch 5 + Exch 6 + Exch $R0 + Exch 6 + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + + ;Parameter defaults + ${IfThen} $R4 == `` ${|} StrCpy $R4 `1` ${|} + ${IfThen} $R5 == `` ${|} StrCpy $R5 `1` ${|} + ${IfThen} $R6 == `` ${|} StrCpy $R6 `1` ${|} + + ;Get "String", "CenterStr", "LeftStr" and "RightStr" length + StrLen $0 $R0 + StrLen $1 $R1 + StrLen $2 $R2 + StrLen $3 $R3 + ;Start "StartCharPos" counter + StrCpy $6 0 + ;Start "EndCharPos" counter based on "CenterStr" length + IntOp $7 $6 + $2 + + ;Loop until "CenterStr" is found or "String" reaches its end + ${Do} + ;Remove everything before and after the searched part ("TempStr") + StrCpy $8 $R0 $2 $6 + + ;Compare "TempStr" with "CenterStr" + ${IfThen} $8 == $R2 ${|} ${ExitDo} ${|} + ;If not, this could be "String" end + ${IfThen} $7 >= $0 ${|} Goto Done ${|} + ;If not, continue the loop + IntOp $6 $6 + 1 + IntOp $7 $7 + 1 + ${Loop} + + # "CenterStr" was found + + ;Remove "CenterStr" from "String" if the user wants + ${If} $R5 = ${FALSE} + StrCpy $8 $R0 $6 + StrCpy $R0 $R0 `` $7 + StrCpy $R0 $8$R0 + ${EndIf} + + ;"StartPos" and "EndPos" will record "CenterStr" coordinates for now + StrCpy $4 $6 + StrCpy $5 $7 + ;"StartCharPos" and "EndCharPos" should be before "CenterStr" + IntOp $6 $6 - $1 + IntOp $7 $6 + $1 + + ;Loop until "LeftStr" is found or "String" reaches its start + ${Do} + ;Remove everything before and after the searched part ("TempStr") + StrCpy $8 $R0 $1 $6 + + ;If "LeftStr" is empty + ${If} $R1 == `` + StrCpy $6 0 + StrCpy $7 0 + ${ExitDo} + ${EndIf} + + ;Compare "TempStr" with "LeftStr" + ${IfThen} $8 == $R1 ${|} ${ExitDo} ${|} + ;If not, this could be "String" start + ${IfThen} $6 <= 0 ${|} ${ExitDo} ${|} + ;If not, continue the loop + IntOp $6 $6 - 1 + IntOp $7 $7 - 1 + ${Loop} + + # "LeftStr" is found or "String" start was reached + + ;Remove "LeftStr" from "String" if the user wants + ${If} $R4 = ${FALSE} + IntOp $6 $6 + $1 + ${EndIf} + + ;Record "LeftStr" first character position on "TempStr" (temporarily) + StrCpy $8 $6 + + ;"StartCharPos" and "EndCharPos" should be after "CenterStr" + ${If} $R5 = ${FALSE} + StrCpy $6 $4 + ${Else} + IntOp $6 $4 + $2 + ${EndIf} + IntOp $7 $6 + $3 + + ;Record "LeftStr" first character position on "StartPos" + StrCpy $4 $8 + + ;Loop until "RightStr" is found or "String" reaches its end + ${Do} + ;Remove everything before and after the searched part ("TempStr") + StrCpy $8 $R0 $3 $6 + + ;If "RightStr" is empty + ${If} $R3 == `` + StrCpy $6 $0 + StrCpy $7 $0 + ${ExitDo} + ${EndIf} + + ;Compare "TempStr" with "RightStr" + ${IfThen} $8 == $R3 ${|} ${ExitDo} ${|} + ;If not, this could be "String" end + ${IfThen} $7 >= $0 ${|} ${ExitDo} ${|} + ;If not, continue the loop + IntOp $6 $6 + 1 + IntOp $7 $7 + 1 + ${Loop} + + ;Remove "RightStr" from "String" if the user wants + ${If} $R6 = ${FALSE} + IntOp $7 $7 - $3 + ${EndIf} + + ;Record "RightStr" last character position on "StartPos" + StrCpy $5 $7 + + ;As the positionment is relative... + IntOp $5 $5 - $4 + + ;Write the string and finish the job + StrCpy $R0 $R0 $5 $4 + Goto +2 + + Done: + StrCpy $R0 `` + + /*After this point: + ------------------------------------------ + $R0 = OutVar (output)*/ + + ;Return output to user + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrStr + !insertmacro STRFUNC_DEFFUNC StrStr `ResultVar|String|StrToSearchFor` `Output|Text|Text` + + !macro STRFUNC_CALL_StrStr un ResultVar String StrToSearchFor + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrStr} "${ResultVar}" "${String}" "${StrToSearchFor}"` + !verbose 2 + Push `${String}` + Push `${StrToSearchFor}` + !insertmacro STRFUNC_CALL StrStr "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrStr + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Ximon Eighteen` + + /*After this point: + ------------------------------------------ + $R0 = StrToSearch (input) + $R1 = String (input) + $R2 = StrToSearchLen (temp) + $R3 = StrLen (temp) + $R4 = StartCharPos (temp) + $R5 = TempStr (temp)*/ + + ;Get input from user + Exch $R0 + Exch + Exch $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + + ;Get "String" and "StrToSearch" length + StrLen $R2 $R0 + StrLen $R3 $R1 + ;Start "StartCharPos" counter + StrCpy $R4 0 + + ;Loop until "StrToSearch" is found or "String" reaches its end + ${Do} + ;Remove everything before and after the searched part ("TempStr") + StrCpy $R5 $R1 $R2 $R4 + + ;Compare "TempStr" with "StrToSearch" + ${IfThen} $R5 == $R0 ${|} ${ExitDo} ${|} + ;If not "StrToSearch", this could be "String" end + ${IfThen} $R4 >= $R3 ${|} ${ExitDo} ${|} + ;If not, continue the loop + IntOp $R4 $R4 + 1 + ${Loop} + + /*After this point: + ------------------------------------------ + $R0 = OutVar (output)*/ + + ;Remove part before "StrToSearch" on "String" (if there has one) + StrCpy $R0 $R1 `` $R4 + + ;Return output to user + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrStrAdv + !insertmacro STRFUNC_DEFFUNC StrStrAdv `ResultVar|String|StrToSearchFor|SearchDirection|ResultStrDirection|DisplayStrToSearch|Loops|CaseSensitive` `Output|Text|Text|Option > <|Option > <|Option 1 0|Text|Option 0 1` + + !macro STRFUNC_CALL_StrStrAdv un ResultVar String StrToSearchFor SearchDirection ResultStrDirection DisplayStrToSearch Loops CaseSensitive + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrStrAdv} "${ResultVar}" "${String}" "${StrToSearchFor}" "${SearchDirection}" "${ResultStrDirection}" "${DisplayStrToSearch}" "${Loops}" "${CaseSensitive}"` + !verbose 2 + Push `${String}` + Push `${StrToSearchFor}` + Push `${SearchDirection}` + Push `${ResultStrDirection}` + Push `${DisplayStrToSearch}` + Push `${Loops}` + Push `${CaseSensitive}` + !insertmacro STRFUNC_CALL StrStrAdv "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrStrAdv + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2003-2004 Diego Pedroso` + + /*After this point: + ------------------------------------------ + $0 = String (input) + $1 = StringToSearch (input) + $2 = DirectionOfSearch (input) + $3 = DirectionOfReturn (input) + $4 = ShowStrToSearch (input) + $5 = NumLoops (input) + $6 = CaseSensitive (input) + $7 = StringLength (temp) + $8 = StrToSearchLength (temp) + $9 = CurrentLoop (temp) + $R0 = EndCharPos (temp) + $R1 = StartCharPos (temp) + $R2 = OutVar (output) + $R3 = Temp (temp)*/ + + ;Get input from user + + Exch $6 + Exch + Exch $5 + Exch + Exch 2 + Exch $4 + Exch 2 + Exch 3 + Exch $3 + Exch 3 + Exch 4 + Exch $2 + Exch 4 + Exch 5 + Exch $1 + Exch 5 + Exch 6 + Exch $0 + Exch 6 + Push $7 + Push $8 + Push $9 + Push $R3 + Push $R2 + Push $R1 + Push $R0 + + ; Clean $R0-$R3 variables + StrCpy $R0 "" + StrCpy $R1 "" + StrCpy $R2 "" + StrCpy $R3 "" + + ; Verify if we have the correct values on the variables + ${If} $0 == `` + SetErrors ;AdvStrStr_StrToSearch not found + Goto AdvStrStr_End + ${EndIf} + + ${If} $1 == `` + SetErrors ;No text to search + Goto AdvStrStr_End + ${EndIf} + + ${If} $2 != < + StrCpy $2 > + ${EndIf} + + ${If} $3 != < + StrCpy $3 > + ${EndIf} + + ${If} $4 <> 0 + StrCpy $4 1 + ${EndIf} + + ${If} $5 <= 0 + StrCpy $5 0 + ${EndIf} + + ${If} $6 <> 1 + StrCpy $6 0 + ${EndIf} + + ; Find "AdvStrStr_String" length + StrLen $7 $0 + + ; Then find "AdvStrStr_StrToSearch" length + StrLen $8 $1 + + ; Now set up basic variables + + ${If} $2 == < + IntOp $R1 $7 - $8 + StrCpy $R2 $7 + ${Else} + StrCpy $R1 0 + StrCpy $R2 $8 + ${EndIf} + + StrCpy $9 0 ; First loop + + ;Let's begin the search + + ${Do} + ; Step 1: If the starting or ending numbers are negative + ; or more than AdvStrStr_StringLen, we return + ; error + + ${If} $R1 < 0 + StrCpy $R1 `` + StrCpy $R2 `` + StrCpy $R3 `` + SetErrors ;AdvStrStr_StrToSearch not found + Goto AdvStrStr_End + ${ElseIf} $R2 > $7 + StrCpy $R1 `` + StrCpy $R2 `` + StrCpy $R3 `` + SetErrors ;AdvStrStr_StrToSearch not found + Goto AdvStrStr_End + ${EndIf} + + ; Step 2: Start the search depending on + ; AdvStrStr_DirectionOfSearch. Chop down not needed + ; characters. + + ${If} $R1 <> 0 + StrCpy $R3 $0 `` $R1 + ${EndIf} + + ${If} $R2 <> $7 + ${If} $R1 = 0 + StrCpy $R3 $0 $8 + ${Else} + StrCpy $R3 $R3 $8 + ${EndIf} + ${EndIf} + + ; Step 3: Make sure that's the string we want + + ; Case-Sensitive Support <- Use "AdvStrStr_Temp" + ; variable because it won't be used anymore + + ${If} $6 == 1 + System::Call `kernel32::lstrcmp(ts, ts) i.s` `$R3` `$1` + Pop $R3 + ${If} $R3 = 0 + StrCpy $R3 1 ; Continue + ${Else} + StrCpy $R3 0 ; Break + ${EndIf} + ${Else} + ${If} $R3 == $1 + StrCpy $R3 1 ; Continue + ${Else} + StrCpy $R3 0 ; Break + ${EndIf} + ${EndIf} + + ; After the comparasion, confirm that it is the + ; value we want. + + ${If} $R3 = 1 + + ;We found it, return except if the user has set up to + ;search for another one: + ${If} $9 >= $5 + + ;Now, let's see if the user wants + ;AdvStrStr_StrToSearch to appear: + ${If} $4 == 0 + ;Return depends on AdvStrStr_DirectionOfReturn + ${If} $3 == < + ; RTL + StrCpy $R0 $0 $R1 + ${Else} + ; LTR + StrCpy $R0 $0 `` $R2 + ${EndIf} + ${Break} + ${Else} + ;Return depends on AdvStrStr_DirectionOfReturn + ${If} $3 == < + ; RTL + StrCpy $R0 $0 $R2 + ${Else} + ; LTR + StrCpy $R0 $0 `` $R1 + ${EndIf} + ${Break} + ${EndIf} + ${Else} + ;If the user wants to have more loops, let's do it so! + IntOp $9 $9 + 1 + + ${If} $2 == < + IntOp $R1 $R1 - 1 + IntOp $R2 $R2 - 1 + ${Else} + IntOp $R1 $R1 + 1 + IntOp $R2 $R2 + 1 + ${EndIf} + ${EndIf} + ${Else} + ; Step 4: We didn't find it, so do steps 1 thru 3 again + + ${If} $2 == < + IntOp $R1 $R1 - 1 + IntOp $R2 $R2 - 1 + ${Else} + IntOp $R1 $R1 + 1 + IntOp $R2 $R2 + 1 + ${EndIf} + ${EndIf} + ${Loop} + + AdvStrStr_End: + + ;Add 1 to AdvStrStr_EndCharPos to be supportable + ;by "StrCpy" + + IntOp $R2 $R2 - 1 + + ;Return output to user + + Exch $R0 + Exch + Pop $R1 + Exch + Pop $R2 + Exch + Pop $R3 + Exch + Pop $9 + Exch + Pop $8 + Exch + Pop $7 + Exch + Pop $6 + Exch + Pop $5 + Exch + Pop $4 + Exch + Pop $3 + Exch + Pop $2 + Exch + Pop $1 + Exch + Pop $0 + + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrTok + !insertmacro STRFUNC_DEFFUNC StrTok `ResultVar|String|Separators|ResultPart|SkipEmptyParts` `Output|Text|Text|Mixed L|Option 1 0` + + !macro STRFUNC_CALL_StrTok un ResultVar String Separators ResultPart SkipEmptyParts + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrTok} "${ResultVar}" "${String}" "${Separators}" "${ResultPart}" "${SkipEmptyParts}"` + !verbose 2 + Push `${String}` + Push `${Separators}` + Push `${ResultPart}` + Push `${SkipEmptyParts}` + !insertmacro STRFUNC_CALL StrTok "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrTok + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by "bigmac666"` + /*After this point: + ------------------------------------------ + $0 = SkipEmptyParts (input) + $1 = ResultPart (input) + $2 = Separators (input) + $3 = String (input) + $4 = StrToSearchLen (temp) + $5 = StrLen (temp) + $6 = StartCharPos (temp) + $7 = TempStr (temp) + $8 = CurrentLoop + $9 = CurrentSepChar + $R0 = CurrentSepCharNum + */ + + ;Get input from user + Exch $0 + Exch + Exch $1 + Exch + Exch 2 + Exch $2 + Exch 2 + Exch 3 + Exch $3 + Exch 3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R0 + + ;Parameter defaults + ${IfThen} $2 == `` ${|} StrCpy $2 `|` ${|} + ${IfThen} $1 == `` ${|} StrCpy $1 `L` ${|} + ${IfThen} $0 == `` ${|} StrCpy $0 `0` ${|} + + ;Get "String" and "StrToSearch" length + StrLen $4 $2 + StrLen $5 $3 + ;Start "StartCharPos" and "ResultPart" counters + StrCpy $6 0 + StrCpy $8 -1 + + ;Loop until "ResultPart" is met, "StrToSearch" is found or + ;"String" reaches its end + ResultPartLoop: ;"CurrentLoop" Loop + + ;Increase "CurrentLoop" counter + IntOp $8 $8 + 1 + + StrSearchLoop: + ${Do} ;"String" Loop + ;Remove everything before and after the searched part ("TempStr") + StrCpy $7 $3 1 $6 + + ;Verify if it's the "String" end + ${If} $6 >= $5 + ;If "CurrentLoop" is what the user wants, remove the part + ;after "TempStr" and itself and get out of here + ${If} $8 == $1 + ${OrIf} $1 == `L` + StrCpy $3 $3 $6 + ${Else} ;If not, empty "String" and get out of here + StrCpy $3 `` + ${EndIf} + StrCpy $R0 `End` + ${ExitDo} + ${EndIf} + + ;Start "CurrentSepCharNum" counter (for "Separators" Loop) + StrCpy $R0 0 + + ${Do} ;"Separators" Loop + ;Use one "Separators" character at a time + ${If} $R0 <> 0 + StrCpy $9 $2 1 $R0 + ${Else} + StrCpy $9 $2 1 + ${EndIf} + + ;Go to the next "String" char if it's "Separators" end + ${IfThen} $R0 >= $4 ${|} ${ExitDo} ${|} + + ;Or, if "TempStr" equals "CurrentSepChar", then... + ${If} $7 == $9 + StrCpy $7 $3 $6 + + ;If "String" is empty because this result part doesn't + ;contain data, verify if "SkipEmptyParts" is activated, + ;so we don't return the output to user yet + + ${If} $7 == `` + ${AndIf} $0 = ${TRUE} + IntOp $6 $6 + 1 + StrCpy $3 $3 `` $6 + StrCpy $6 0 + Goto StrSearchLoop + ${ElseIf} $8 == $1 + StrCpy $3 $3 $6 + StrCpy $R0 "End" + ${ExitDo} + ${EndIf} ;If not, go to the next result part + IntOp $6 $6 + 1 + StrCpy $3 $3 `` $6 + StrCpy $6 0 + Goto ResultPartLoop + ${EndIf} + + ;Increase "CurrentSepCharNum" counter + IntOp $R0 $R0 + 1 + ${Loop} + ${IfThen} $R0 == "End" ${|} ${ExitDo} ${|} + + ;Increase "StartCharPos" counter + IntOp $6 $6 + 1 + ${Loop} + + /*After this point: + ------------------------------------------ + $3 = OutVar (output)*/ + + ;Return output to user + + Pop $R0 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $0 + Pop $1 + Pop $2 + Exch $3 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + # StrTrimNewLines + !insertmacro STRFUNC_DEFFUNC StrTrimNewLines `ResultVar|String` `Output|Text` + + !macro STRFUNC_CALL_StrTrimNewLines un ResultVar String + !verbose push ${STRFUNC_VERBOSITY} + !echo `${U+24}{${un}StrTrimNewLines} "${ResultVar}" "${String}"` + !verbose 2 + Push `${String}` + !insertmacro STRFUNC_CALL StrTrimNewLines "${un}" + Pop ${ResultVar} + !verbose pop + !macroend + + !macro STRFUNC_MAKEFUNC_StrTrimNewLines + !insertmacro STRFUNC_BEGINFUNC ${basename} `${un}` `2004 Diego Pedroso - Based on functions by Ximon Eighteen` + + /*After this point: + ------------------------------------------ + $R0 = String (input) + $R1 = TrimCounter (temp) + $R2 = Temp (temp)*/ + + ;Get input from user + Exch $R0 + Push $R1 + Push $R2 + + ;Initialize trim counter + StrCpy $R1 0 + + loop: + ;Subtract to get "String"'s last characters + IntOp $R1 $R1 - 1 + + ;Verify if they are either $\r or $\n + StrCpy $R2 $R0 1 $R1 + ${If} $R2 == `$\r` + ${OrIf} $R2 == `$\n` + Goto loop + ${EndIf} + + ;Trim characters (if needed) + IntOp $R1 $R1 + 1 + ${If} $R1 < 0 + StrCpy $R0 $R0 $R1 + ${EndIf} + + /*After this point: + ------------------------------------------ + $R0 = OutVar (output)*/ + + ;Return output to user + Pop $R2 + Pop $R1 + Exch $R0 + !insertmacro STRFUNC_ENDFUNC + + !macroend + + ############################################################################ + +!endif +!verbose 3 +!define STRFUNC_VERBOSITY ${_STRFUNC_VERBOSITY} +!undef _STRFUNC_VERBOSITY +!verbose pop diff --git a/tools/Include/TextFunc.nsh b/tools/Include/TextFunc.nsh new file mode 100644 index 0000000..230835b --- /dev/null +++ b/tools/Include/TextFunc.nsh @@ -0,0 +1,1211 @@ +/* +_____________________________________________________________________________ + + Text Functions Header v2.4 +_____________________________________________________________________________ + + 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + + See documentation for more information about the following functions. + + Usage in script: + 1. !include "TextFunc.nsh" + 2. [Section|Function] + ${TextFunction} "File" "..." $var + [SectionEnd|FunctionEnd] + + + TextFunction=[LineFind|LineRead|FileReadFromEnd|LineSum|FileJoin| + TextCompare|TextCompareS|ConfigRead|ConfigReadS| + ConfigWrite|ConfigWriteS|FileRecode|TrimNewLines] + +_____________________________________________________________________________ + + Thanks to: +_____________________________________________________________________________ + +LineRead + Afrow UK (Based on his idea of Function "ReadFileLine") +LineSum + Afrow UK (Based on his idea of Function "LineCount") +FileJoin + Afrow UK (Based on his idea of Function "JoinFiles") +ConfigRead + vbgunz (His idea) +ConfigWrite + vbgunz (His idea) +TrimNewLines + sunjammer (Based on his Function "TrimNewLines") +*/ + + +;_____________________________________________________________________________ +; +; Macros +;_____________________________________________________________________________ +; +; Change log window verbosity (default: 3=no script) +; +; Example: +; !include "TextFunc.nsh" +; !insertmacro LineFind +; ${TEXTFUNC_VERBOSE} 4 # all verbosity +; !insertmacro LineSum +; ${TEXTFUNC_VERBOSE} 3 # no script + +!ifndef TEXTFUNC_INCLUDED + +!verbose push 3 +!define /IfNDef _TEXTFUNC_VERBOSE 3 +!verbose ${_TEXTFUNC_VERBOSE} +!define TEXTFUNC_VERBOSE `!insertmacro TEXTFUNC_VERBOSE` + +!define TEXTFUNC_INCLUDED + +!include FileFunc.nsh +!include Util.nsh + + +!macro TEXTFUNC_VERBOSE _VERBOSE + !verbose push 3 + !define /ReDef _TEXTFUNC_VERBOSE ${_VERBOSE} + !verbose pop +!macroend + +!macro LineFindCall _INPUT _OUTPUT _RANGE _FUNC + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push $0 + Push `${_INPUT}` + Push `${_OUTPUT}` + Push `${_RANGE}` + GetFunctionAddress $0 `${_FUNC}` + Push `$0` + ${CallArtificialFunction} LineFind_ + Pop $0 + !verbose pop +!macroend + +!macro LineReadCall _FILE _NUMBER _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + Push `${_NUMBER}` + ${CallArtificialFunction} LineRead_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro FileReadFromEndCall _FILE _FUNC + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push $0 + Push `${_FILE}` + GetFunctionAddress $0 `${_FUNC}` + Push `$0` + ${CallArtificialFunction} FileReadFromEnd_ + Pop $0 + !verbose pop +!macroend + +!macro LineSumCall _FILE _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + ${CallArtificialFunction} LineSum_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro FileJoinCall _FILE1 _FILE2 _FILE3 + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE1}` + Push `${_FILE2}` + Push `${_FILE3}` + ${CallArtificialFunction} FileJoin_ + !verbose pop +!macroend + +!macro TextCompareCall _FILE1 _FILE2 _OPTION _FUNC + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push $0 + Push `${_FILE1}` + Push `${_FILE2}` + Push `${_OPTION}` + GetFunctionAddress $0 `${_FUNC}` + Push `$0` + ${CallArtificialFunction} TextCompare_ + Pop $0 + !verbose pop +!macroend + +!macro TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push $0 + Push `${_FILE1}` + Push `${_FILE2}` + Push `${_OPTION}` + GetFunctionAddress $0 `${_FUNC}` + Push `$0` + ${CallArtificialFunction} TextCompareS_ + Pop $0 + !verbose pop +!macroend + +!macro ConfigReadCall _FILE _ENTRY _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + Push `${_ENTRY}` + ${CallArtificialFunction} ConfigRead_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro ConfigReadSCall _FILE _ENTRY _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + Push `${_ENTRY}` + ${CallArtificialFunction} ConfigReadS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro ConfigWriteCall _FILE _ENTRY _VALUE _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + Push `${_ENTRY}` + Push `${_VALUE}` + ${CallArtificialFunction} ConfigWrite_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + Push `${_ENTRY}` + Push `${_VALUE}` + ${CallArtificialFunction} ConfigWriteS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro FileRecodeCall _FILE _FORMAT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + Push `${_FORMAT}` + ${CallArtificialFunction} FileRecode_ + !verbose pop +!macroend + +!macro TrimNewLinesCall _FILE _RESULT + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + Push `${_FILE}` + ${CallArtificialFunction} TrimNewLines_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro _TextFunc_TempFileForFile _FILE _RESULT + # XXX replace with GetParent + Push `${_FILE}` + Exch $0 + Push $1 + Push $2 + + StrCpy $2 $0 1 -1 + StrCmp $2 '\' 0 +3 + StrCpy $0 $0 -1 + goto -3 + + StrCpy $1 0 + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 '\' +2 + StrCmp $2 '' 0 -3 + StrCpy $0 $0 $1 + + Pop $2 + Pop $1 + Exch $0 + Pop ${_RESULT} + # XXX + StrCmp ${_RESULT} "" 0 +2 + StrCpy ${_RESULT} $EXEDIR + GetTempFileName ${_RESULT} ${_RESULT} + StrCmp ${_RESULT} "" 0 +2 + GetTempFileName ${_RESULT} + ClearErrors +!macroend + +!define LineFind `!insertmacro LineFindCall` +!define un.LineFind `!insertmacro LineFindCall` + +!macro LineFind +!macroend + +!macro un.LineFind +!macroend + +!macro LineFind_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $3 + Exch + Exch $2 + Exch + Exch 2 + Exch $1 + Exch 2 + Exch 3 + Exch $0 + Exch 3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R4 + Push $R5 + Push $R6 + Push $R7 + Push $R8 + Push $R9 + ClearErrors + + IfFileExists '$0' 0 TextFunc_LineFind_error + StrCmp $1 '/NUL' TextFunc_LineFind_begin + StrCpy $8 0 + IntOp $8 $8 - 1 + StrCpy $9 $1 1 $8 + StrCmp $9 \ +2 + StrCmp $9 '' +3 -3 + StrCpy $9 $1 $8 + IfFileExists '$9\*.*' 0 TextFunc_LineFind_error + + TextFunc_LineFind_begin: + StrCpy $4 1 + StrCpy $5 -1 + StrCpy $6 0 + StrCpy $7 0 + StrCpy $R4 '' + StrCpy $R6 '' + StrCpy $R7 '' + StrCpy $R8 0 + + StrCpy $8 $2 1 + StrCmp $8 '{' 0 TextFunc_LineFind_delspaces + StrCpy $2 $2 '' 1 + StrCpy $8 $2 1 -1 + StrCmp $8 '}' 0 TextFunc_LineFind_delspaces + StrCpy $2 $2 -1 + StrCpy $R6 TextFunc_LineFind_cut + + TextFunc_LineFind_delspaces: + StrCpy $8 $2 1 + StrCmp $8 ' ' 0 +3 + StrCpy $2 $2 '' 1 + goto -3 + StrCmp $2$7 '0' TextFunc_LineFind_file + StrCpy $4 '' + StrCpy $5 '' + StrCmp $2 '' TextFunc_LineFind_writechk + + TextFunc_LineFind_range: + StrCpy $8 0 + StrCpy $9 $2 1 $8 + StrCmp $9 '' +5 + StrCmp $9 ' ' +4 + StrCmp $9 ':' +3 + IntOp $8 $8 + 1 + goto -5 + StrCpy $5 $2 $8 + IntOp $5 $5 + 0 + IntOp $8 $8 + 1 + StrCpy $2 $2 '' $8 + StrCmp $4 '' 0 +2 + StrCpy $4 $5 + StrCmp $9 ':' TextFunc_LineFind_range + + IntCmp $4 0 0 +2 + IntCmp $5 -1 TextFunc_LineFind_goto 0 TextFunc_LineFind_growthcmp + StrCmp $R7 '' 0 TextFunc_LineFind_minus2plus + StrCpy $R7 0 + FileOpen $8 $0 r + FileRead $8 $9 + IfErrors +3 + IntOp $R7 $R7 + 1 + Goto -3 + FileClose $8 + + TextFunc_LineFind_minus2plus: + IntCmp $4 0 +5 0 +5 + IntOp $4 $R7 + $4 + IntOp $4 $4 + 1 + IntCmp $4 0 +2 0 +2 + StrCpy $4 0 + IntCmp $5 -1 TextFunc_LineFind_goto 0 TextFunc_LineFind_growthcmp + IntOp $5 $R7 + $5 + IntOp $5 $5 + 1 + TextFunc_LineFind_growthcmp: + IntCmp $4 $5 TextFunc_LineFind_goto TextFunc_LineFind_goto + StrCpy $5 $4 + TextFunc_LineFind_goto: + goto $7 + + TextFunc_LineFind_file: + StrCmp $1 '/NUL' TextFunc_LineFind_notemp + !insertmacro _TextFunc_TempFileForFile $1 $R4 + Push $R4 + FileOpen $R4 $R4 w + TextFunc_LineFind_notemp: + FileOpen $R5 $0 r + IfErrors TextFunc_LineFind_preerror + + TextFunc_LineFind_loop: + IntOp $R8 $R8 + 1 + FileRead $R5 $R9 + IfErrors TextFunc_LineFind_handleclose + + TextFunc_LineFind_cmp: + StrCmp $2$4$5 '' TextFunc_LineFind_writechk + IntCmp $4 $R8 TextFunc_LineFind_call 0 TextFunc_LineFind_writechk + StrCmp $5 -1 TextFunc_LineFind_call + IntCmp $5 $R8 TextFunc_LineFind_call 0 TextFunc_LineFind_call + + GetLabelAddress $7 TextFunc_LineFind_cmp + goto TextFunc_LineFind_delspaces + + TextFunc_LineFind_call: + StrCpy $7 $R9 + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $R4 + Push $R5 + Push $R6 + Push $R7 + Push $R8 + StrCpy $R6 '$4:$5' + StrCmp $R7 '' +3 + IntOp $R7 $R8 - $R7 + IntOp $R7 $R7 - 1 + Call $3 + Pop $9 + Pop $R8 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + IfErrors TextFunc_LineFind_preerror + StrCmp $9 'StopLineFind' 0 +3 + IntOp $6 $6 + 1 + goto TextFunc_LineFind_handleclose + StrCmp $1 '/NUL' TextFunc_LineFind_loop + StrCmp $9 'SkipWrite' 0 +3 + IntOp $6 $6 + 1 + goto TextFunc_LineFind_loop + StrCmp $7 $R9 TextFunc_LineFind_write + IntOp $6 $6 + 1 + goto TextFunc_LineFind_write + + TextFunc_LineFind_writechk: + StrCmp $1 '/NUL' TextFunc_LineFind_loop + StrCmp $R6 TextFunc_LineFind_cut 0 TextFunc_LineFind_write + IntOp $6 $6 + 1 + goto TextFunc_LineFind_loop + + TextFunc_LineFind_write: + FileWrite $R4 $R9 + goto TextFunc_LineFind_loop + + TextFunc_LineFind_preerror: + SetErrors + + TextFunc_LineFind_handleclose: + StrCmp $1 '/NUL' +3 + FileClose $R4 + Pop $R4 + FileClose $R5 + IfErrors TextFunc_LineFind_error + + StrCmp $1 '/NUL' TextFunc_LineFind_end + StrCmp $1 '' 0 +2 + StrCpy $1 $0 + StrCmp $6 0 0 TextFunc_LineFind_rename + FileOpen $7 $0 r + FileSeek $7 0 END $8 + FileClose $7 + FileOpen $7 $R4 r + FileSeek $7 0 END $9 + FileClose $7 + IntCmp $8 $9 0 TextFunc_LineFind_rename + Delete $R4 + StrCmp $1 $0 TextFunc_LineFind_end + CopyFiles /SILENT $0 $1 + goto TextFunc_LineFind_end + + TextFunc_LineFind_rename: + Delete '$EXEDIR\$1' + Rename $R4 '$EXEDIR\$1' + IfErrors 0 TextFunc_LineFind_end + Delete $1 + Rename $R4 $1 + IfErrors 0 TextFunc_LineFind_end + + TextFunc_LineFind_error: + SetErrors + + TextFunc_LineFind_end: + Pop $R9 + Pop $R8 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + !verbose pop +!macroend + +!define LineRead `!insertmacro LineReadCall` +!define un.LineRead `!insertmacro LineReadCall` + +!macro LineRead +!macroend + +!macro un.LineRead +!macroend + +!macro LineRead_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + ClearErrors + + IfFileExists $0 0 TextFunc_LineRead_error + IntOp $1 $1 + 0 + IntCmp $1 0 TextFunc_LineRead_error 0 TextFunc_LineRead_plus + StrCpy $4 0 + FileOpen $2 $0 r + IfErrors TextFunc_LineRead_error + FileRead $2 $3 + IfErrors +3 + IntOp $4 $4 + 1 + Goto -3 + FileClose $2 + IntOp $1 $4 + $1 + IntOp $1 $1 + 1 + IntCmp $1 0 TextFunc_LineRead_error TextFunc_LineRead_error + + TextFunc_LineRead_plus: + FileOpen $2 $0 r + IfErrors TextFunc_LineRead_error + StrCpy $3 0 + IntOp $3 $3 + 1 + FileRead $2 $0 + IfErrors +4 + StrCmp $3 $1 0 -3 + FileClose $2 + goto TextFunc_LineRead_end + FileClose $2 + + TextFunc_LineRead_error: + SetErrors + StrCpy $0 '' + + TextFunc_LineRead_end: + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define FileReadFromEnd `!insertmacro FileReadFromEndCall` +!define un.FileReadFromEnd `!insertmacro FileReadFromEndCall` + +!macro FileReadFromEnd +!macroend + +!macro un.FileReadFromEnd +!macroend + +!macro FileReadFromEnd_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $7 + Push $8 + Push $9 + ClearErrors + + StrCpy $7 -1 + StrCpy $8 0 + IfFileExists $0 0 TextFunc_FileReadFromEnd_error + FileOpen $0 $0 r + IfErrors TextFunc_FileReadFromEnd_error + FileRead $0 $9 + IfErrors +4 + Push $9 + IntOp $8 $8 + 1 + goto -4 + FileClose $0 + + TextFunc_FileReadFromEnd_nextline: + StrCmp $8 0 TextFunc_FileReadFromEnd_end + Pop $9 + Push $1 + Push $7 + Push $8 + Call $1 + Pop $0 + Pop $8 + Pop $7 + Pop $1 + IntOp $7 $7 - 1 + IntOp $8 $8 - 1 + IfErrors TextFunc_FileReadFromEnd_error + StrCmp $0 'StopFileReadFromEnd' TextFunc_FileReadFromEnd_clearstack TextFunc_FileReadFromEnd_nextline + + TextFunc_FileReadFromEnd_error: + SetErrors + + TextFunc_FileReadFromEnd_clearstack: + StrCmp $8 0 TextFunc_FileReadFromEnd_end + Pop $9 + IntOp $8 $8 - 1 + goto TextFunc_FileReadFromEnd_clearstack + + TextFunc_FileReadFromEnd_end: + Pop $9 + Pop $8 + Pop $7 + Pop $1 + Pop $0 + + !verbose pop +!macroend + +!define LineSum `!insertmacro LineSumCall` +!define un.LineSum `!insertmacro LineSumCall` + +!macro LineSum +!macroend + +!macro un.LineSum +!macroend + +!macro LineSum_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + ClearErrors + + IfFileExists $0 0 TextFunc_LineSum_error + StrCpy $2 0 + FileOpen $0 $0 r + IfErrors TextFunc_LineSum_error + FileRead $0 $1 + IfErrors +3 + IntOp $2 $2 + 1 + Goto -3 + FileClose $0 + StrCpy $0 $2 + goto TextFunc_LineSum_end + + TextFunc_LineSum_error: + SetErrors + StrCpy $0 '' + + TextFunc_LineSum_end: + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define FileJoin `!insertmacro FileJoinCall` +!define un.FileJoin `!insertmacro FileJoinCall` + +!macro FileJoin +!macroend + +!macro un.FileJoin +!macroend + +!macro FileJoin_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Push $3 + Push $4 + Push $5 + ClearErrors + + IfFileExists $0 0 TextFunc_FileJoin_error + IfFileExists $1 0 TextFunc_FileJoin_error + StrCpy $3 0 + IntOp $3 $3 - 1 + StrCpy $4 $2 1 $3 + StrCmp $4 \ +2 + StrCmp $4 '' +3 -3 + StrCpy $4 $2 $3 + IfFileExists '$4\*.*' 0 TextFunc_FileJoin_error + + StrCmp $2 $0 0 +2 + StrCpy $2 '' + StrCmp $2 '' 0 +3 + StrCpy $4 $0 + Goto TextFunc_FileJoin_notemp + !insertmacro _TextFunc_TempFileForFile $2 $4 + CopyFiles /SILENT $0 $4 + TextFunc_FileJoin_notemp: + FileOpen $3 $4 a + IfErrors TextFunc_FileJoin_error + FileSeek $3 -1 END + FileRead $3 $5 + StrCmp $5 '$\r' +3 + StrCmp $5 '$\n' +2 + FileWrite $3 '$\r$\n' + + ;FileWrite $3 '$\r$\n--Divider--$\r$\n' + + FileOpen $0 $1 r + IfErrors TextFunc_FileJoin_error + FileRead $0 $5 + IfErrors +3 + FileWrite $3 $5 + goto -3 + FileClose $0 + FileClose $3 + StrCmp $2 '' TextFunc_FileJoin_end + Delete '$EXEDIR\$2' + Rename $4 '$EXEDIR\$2' + IfErrors 0 TextFunc_FileJoin_end + Delete $2 + Rename $4 $2 + IfErrors 0 TextFunc_FileJoin_end + + TextFunc_FileJoin_error: + SetErrors + + TextFunc_FileJoin_end: + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + !verbose pop +!macroend + +!macro TextCompareBody _TEXTFUNC_S + Exch $3 + Exch + Exch $2 + Exch + Exch 2 + Exch $1 + Exch 2 + Exch 3 + Exch $0 + Exch 3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + ClearErrors + + IfFileExists $0 0 TextFunc_TextCompare${_TEXTFUNC_S}_error + IfFileExists $1 0 TextFunc_TextCompare${_TEXTFUNC_S}_error + StrCmp $2 'FastDiff' +5 + StrCmp $2 'FastEqual' +4 + StrCmp $2 'SlowDiff' +3 + StrCmp $2 'SlowEqual' +2 + goto TextFunc_TextCompare${_TEXTFUNC_S}_error + + FileOpen $4 $0 r + IfErrors TextFunc_TextCompare${_TEXTFUNC_S}_error + FileOpen $5 $1 r + IfErrors TextFunc_TextCompare${_TEXTFUNC_S}_error + SetDetailsPrint textonly + + StrCpy $6 0 + StrCpy $8 0 + + TextFunc_TextCompare${_TEXTFUNC_S}_nextline: + StrCmp${_TEXTFUNC_S} $4 '' TextFunc_TextCompare${_TEXTFUNC_S}_fast + IntOp $8 $8 + 1 + FileRead $4 $9 + IfErrors 0 +4 + FileClose $4 + StrCpy $4 '' + StrCmp${_TEXTFUNC_S} $5 '' TextFunc_TextCompare${_TEXTFUNC_S}_end + StrCmp $2 'FastDiff' TextFunc_TextCompare${_TEXTFUNC_S}_fast + StrCmp $2 'FastEqual' TextFunc_TextCompare${_TEXTFUNC_S}_fast TextFunc_TextCompare${_TEXTFUNC_S}_slow + + TextFunc_TextCompare${_TEXTFUNC_S}_fast: + StrCmp${_TEXTFUNC_S} $5 '' TextFunc_TextCompare${_TEXTFUNC_S}_call + IntOp $6 $6 + 1 + FileRead $5 $7 + IfErrors 0 +5 + FileClose $5 + StrCpy $5 '' + StrCmp${_TEXTFUNC_S} $4 '' TextFunc_TextCompare${_TEXTFUNC_S}_end + StrCmp $2 'FastDiff' TextFunc_TextCompare${_TEXTFUNC_S}_call TextFunc_TextCompare${_TEXTFUNC_S}_close + StrCmp $2 'FastDiff' 0 +2 + StrCmp${_TEXTFUNC_S} $7 $9 TextFunc_TextCompare${_TEXTFUNC_S}_nextline TextFunc_TextCompare${_TEXTFUNC_S}_call + StrCmp${_TEXTFUNC_S} $7 $9 TextFunc_TextCompare${_TEXTFUNC_S}_call TextFunc_TextCompare${_TEXTFUNC_S}_nextline + + TextFunc_TextCompare${_TEXTFUNC_S}_slow: + StrCmp${_TEXTFUNC_S} $4 '' TextFunc_TextCompare${_TEXTFUNC_S}_close + StrCpy $6 '' + DetailPrint '$8. $9' + FileSeek $5 0 + + TextFunc_TextCompare${_TEXTFUNC_S}_slownext: + FileRead $5 $7 + IfErrors 0 +2 + StrCmp $2 'SlowDiff' TextFunc_TextCompare${_TEXTFUNC_S}_call TextFunc_TextCompare${_TEXTFUNC_S}_nextline + StrCmp $2 'SlowDiff' 0 +2 + StrCmp${_TEXTFUNC_S} $7 $9 TextFunc_TextCompare${_TEXTFUNC_S}_nextline TextFunc_TextCompare${_TEXTFUNC_S}_slownext + IntOp $6 $6 + 1 + StrCmp${_TEXTFUNC_S} $7 $9 0 TextFunc_TextCompare${_TEXTFUNC_S}_slownext + + TextFunc_TextCompare${_TEXTFUNC_S}_call: + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Call $3 + Pop $0 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + StrCmp $0 'StopTextCompare' 0 TextFunc_TextCompare${_TEXTFUNC_S}_nextline + + TextFunc_TextCompare${_TEXTFUNC_S}_close: + FileClose $4 + FileClose $5 + goto TextFunc_TextCompare${_TEXTFUNC_S}_end + + TextFunc_TextCompare${_TEXTFUNC_S}_error: + SetErrors + + TextFunc_TextCompare${_TEXTFUNC_S}_end: + SetDetailsPrint both + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +!macroend + +!define TextCompare `!insertmacro TextCompareCall` +!define un.TextCompare `!insertmacro TextCompareCall` + +!macro TextCompare +!macroend + +!macro un.TextCompare +!macroend + +!macro TextCompare_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + !insertmacro TextCompareBody '' + + !verbose pop +!macroend + +!define TextCompareS `!insertmacro TextCompareSCall` +!define un.TextCompareS `!insertmacro TextCompareSCall` + +!macro TextCompareS +!macroend + +!macro un.TextCompareS +!macroend + +!macro TextCompareS_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + !insertmacro TextCompareBody 'S' + + !verbose pop +!macroend + +!macro ConfigReadBody _TEXTFUNC_S + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + ClearErrors + + FileOpen $2 $0 r + IfErrors TextFunc_ConfigRead${_TEXTFUNC_S}_error + StrLen $0 $1 + StrCmp${_TEXTFUNC_S} $0 0 TextFunc_ConfigRead${_TEXTFUNC_S}_error + + TextFunc_ConfigRead${_TEXTFUNC_S}_readnext: + FileRead $2 $3 + IfErrors TextFunc_ConfigRead${_TEXTFUNC_S}_error + StrCpy $4 $3 $0 + StrCmp${_TEXTFUNC_S} $4 $1 0 TextFunc_ConfigRead${_TEXTFUNC_S}_readnext + StrCpy $0 $3 '' $0 + StrCpy $4 $0 1 -1 + StrCmp${_TEXTFUNC_S} $4 '$\r' +2 + StrCmp${_TEXTFUNC_S} $4 '$\n' 0 TextFunc_ConfigRead${_TEXTFUNC_S}_close + StrCpy $0 $0 -1 + goto -4 + + TextFunc_ConfigRead${_TEXTFUNC_S}_error: + SetErrors + StrCpy $0 '' + + TextFunc_ConfigRead${_TEXTFUNC_S}_close: + FileClose $2 + + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 +!macroend + +!define ConfigRead `!insertmacro ConfigReadCall` +!define un.ConfigRead `!insertmacro ConfigReadCall` + +!macro ConfigRead +!macroend + +!macro un.ConfigRead +!macroend + +!macro ConfigRead_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + !insertmacro ConfigReadBody '' + + !verbose pop +!macroend + +!define ConfigReadS `!insertmacro ConfigReadSCall` +!define un.ConfigReadS `!insertmacro ConfigReadSCall` + +!macro ConfigReadS +!macroend + +!macro un.ConfigReadS +!macroend + +!macro ConfigReadS_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + !insertmacro ConfigReadBody 'S' + + !verbose pop +!macroend + +!macro ConfigWriteBody _TEXTFUNC_S + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Push $3 + Push $4 + Push $5 + Push $6 + ClearErrors + + IfFileExists $0 0 TextFunc_ConfigWrite${_TEXTFUNC_S}_error + FileOpen $3 $0 a + IfErrors TextFunc_ConfigWrite${_TEXTFUNC_S}_error + + StrLen $0 $1 + StrCmp${_TEXTFUNC_S} $0 0 0 TextFunc_ConfigWrite${_TEXTFUNC_S}_readnext + StrCpy $0 '' + goto TextFunc_ConfigWrite${_TEXTFUNC_S}_close + + TextFunc_ConfigWrite${_TEXTFUNC_S}_readnext: + FileRead $3 $4 + IfErrors TextFunc_ConfigWrite${_TEXTFUNC_S}_add + StrCpy $5 $4 $0 + StrCmp${_TEXTFUNC_S} $5 $1 0 TextFunc_ConfigWrite${_TEXTFUNC_S}_readnext + + StrCpy $5 0 + IntOp $5 $5 - 1 + StrCpy $6 $4 1 $5 + StrCmp${_TEXTFUNC_S} $6 '$\r' -2 + StrCmp${_TEXTFUNC_S} $6 '$\n' -3 + StrCpy $6 $4 + StrCmp${_TEXTFUNC_S} $5 -1 +3 + IntOp $5 $5 + 1 + StrCpy $6 $4 $5 + + StrCmp${_TEXTFUNC_S} $2 '' TextFunc_ConfigWrite${_TEXTFUNC_S}_change + StrCmp${_TEXTFUNC_S} $6 '$1$2' 0 TextFunc_ConfigWrite${_TEXTFUNC_S}_change + StrCpy $0 SAME + goto TextFunc_ConfigWrite${_TEXTFUNC_S}_close + + TextFunc_ConfigWrite${_TEXTFUNC_S}_change: + FileSeek $3 0 CUR $5 + StrLen $4 $4 + IntOp $4 $5 - $4 + FileSeek $3 0 END $6 + IntOp $6 $6 - $5 + + System::Alloc $6 + Pop $0 + FileSeek $3 $5 SET + System::Call 'kernel32::ReadFile(p r3, p r0, i $6, t.,)' + FileSeek $3 $4 SET + StrCmp${_TEXTFUNC_S} $2 '' +2 + FileWrite $3 '$1$2$\r$\n' + System::Call 'kernel32::WriteFile(p r3, p r0, i $6, t.,)' + System::Call 'kernel32::SetEndOfFile(p r3)' + System::Free $0 + StrCmp${_TEXTFUNC_S} $2 '' +3 + StrCpy $0 CHANGED + goto TextFunc_ConfigWrite${_TEXTFUNC_S}_close + StrCpy $0 DELETED + goto TextFunc_ConfigWrite${_TEXTFUNC_S}_close + + TextFunc_ConfigWrite${_TEXTFUNC_S}_add: + StrCmp${_TEXTFUNC_S} $2 '' 0 +3 + StrCpy $0 SAME + goto TextFunc_ConfigWrite${_TEXTFUNC_S}_close + FileSeek $3 -1 END + FileRead $3 $4 + IfErrors +4 + StrCmp${_TEXTFUNC_S} $4 '$\r' +3 + StrCmp${_TEXTFUNC_S} $4 '$\n' +2 + FileWrite $3 '$\r$\n' + FileWrite $3 '$1$2$\r$\n' + StrCpy $0 ADDED + + TextFunc_ConfigWrite${_TEXTFUNC_S}_close: + FileClose $3 + goto TextFunc_ConfigWrite${_TEXTFUNC_S}_end + + TextFunc_ConfigWrite${_TEXTFUNC_S}_error: + SetErrors + StrCpy $0 '' + + TextFunc_ConfigWrite${_TEXTFUNC_S}_end: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 +!macroend + +!define ConfigWrite `!insertmacro ConfigWriteCall` +!define un.ConfigWrite `!insertmacro ConfigWriteCall` + +!macro ConfigWrite +!macroend + +!macro un.ConfigWrite +!macroend + +!macro ConfigWrite_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + !insertmacro ConfigWriteBody '' + + !verbose pop +!macroend + +!define ConfigWriteS `!insertmacro ConfigWriteSCall` +!define un.ConfigWriteS `!insertmacro ConfigWriteSCall` + +!macro ConfigWriteS +!macroend + +!macro un.ConfigWriteS +!macroend + +!macro ConfigWriteS_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + !insertmacro ConfigWriteBody 'S' + + !verbose pop +!macroend + +!define FileRecode `!insertmacro FileRecodeCall` +!define un.FileRecode `!insertmacro FileRecodeCall` + +!macro FileRecode +!macroend + +!macro un.FileRecode +!macroend + +!macro FileRecode_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + + IfFileExists $0 0 TextFunc_FileRecode_error + StrCmp $1 OemToChar +2 + StrCmp $1 CharToOem 0 TextFunc_FileRecode_error + + FileOpen $2 $0 a + FileSeek $2 0 END $3 + System::Alloc $3 + Pop $4 + FileSeek $2 0 SET + System::Call 'kernel32::ReadFile(p r2, p r4, i $3, t.,)' + System::Call 'user32::$1Buff(p r4, p r4, i $3)' + FileSeek $2 0 SET + System::Call 'kernel32::WriteFile(p r2, p r4, i $3, t.,)' + System::Free $4 + FileClose $2 + goto TextFunc_FileRecode_end + + TextFunc_FileRecode_error: + SetErrors + + TextFunc_FileRecode_end: + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + + !verbose pop +!macroend + +!define TrimNewLines `!insertmacro TrimNewLinesCall` +!define un.TrimNewLines `!insertmacro TrimNewLinesCall` + +!macro TrimNewLines +!macroend + +!macro un.TrimNewLines +!macroend + +!macro TrimNewLines_ + !verbose push + !verbose ${_TEXTFUNC_VERBOSE} + + Exch $0 + Push $1 + Push $2 + + StrCpy $1 0 + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 '$\r' -2 + StrCmp $2 '$\n' -3 + StrCmp $1 -1 +3 + IntOp $1 $1 + 1 + StrCpy $0 $0 $1 + + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!verbose pop +!endif diff --git a/tools/Include/UpgradeDLL.nsh b/tools/Include/UpgradeDLL.nsh new file mode 100644 index 0000000..cfb2947 --- /dev/null +++ b/tools/Include/UpgradeDLL.nsh @@ -0,0 +1,207 @@ +/* + +NOTE: +----- +This macro is provided for backwards compatibility with NSIS 2.0 scripts. +It's recommended you update your scripts to use the new Library.nsh macros. + + +Macro - Upgrade DLL File +Written by Joost Verburg +------------------------ + +Parameters: +LOCALFILE Location of the new DLL file (on the compiler system) +DESTFILE Location of the DLL file that should be upgraded (on the user's system) +TEMPBASEDIR Directory on the user's system to store a temporary file when the system has + to be rebooted. + For Win9x/ME support, this should be on the same volume as DESTFILE. + The Windows temp directory could be located on any volume, so you cannot use + this directory. + +Define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL that does not have to be registered. + +Notes: + +* If you want to support Windows 9x/ME, you can only use short filenames (8.3). + +* This macro uses the GetDLLVersionLocal command to retrieve the version of local libraries. + This command is only supported when compiling on a Windows system. + +------------------------ + +Example: + +!insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR" + +*/ + +!ifndef UPGRADEDLL_INCLUDED + +!define UPGRADEDLL_INCLUDED + +!macro __UpgradeDLL_Helper_AddRegToolEntry mode filename tempdir + + Push $R0 + Push $R1 + Push $R2 + Push $R3 + + ;------------------------ + ;Copy the parameters + + Push "${filename}" + Push "${tempdir}" + + Pop $R2 ; temporary directory + Pop $R1 ; file name to register + + ;------------------------ + ;Advance counter + + StrCpy $R0 0 + ReadRegDWORD $R0 HKLM "Software\NSIS.Library.RegTool.v3\UpgradeDLLSession" "count" + IntOp $R0 $R0 + 1 + WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v3\UpgradeDLLSession" "count" "$R0" + + ;------------------------ + ;Setup RegTool + + !if ! /FileExists "${NSISDIR}\Bin\RegTool-${NSIS_CPU}.bin" + !error "Missing RegTool for ${NSIS_CPU}!" + !endif + + ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v3" + StrCpy $R3 $R3 -4 1 + IfFileExists $R3 +3 + + File /oname=$R2\NSIS.Library.RegTool.v3.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool-${NSIS_CPU}.bin" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \ + "NSIS.Library.RegTool.v3" '"$R2\NSIS.Library.RegTool.v3.$HWNDPARENT.exe" /S' + + ;------------------------ + ;Add RegTool entry + + WriteRegStr HKLM "Software\NSIS.Library.RegTool.v3\UpgradeDLLSession" "$R0.file" "$R1" + WriteRegStr HKLM "Software\NSIS.Library.RegTool.v3\UpgradeDLLSession" "$R0.mode" "${mode}" + + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + +!macroend + +!macro UpgradeDLL LOCALFILE DESTFILE TEMPBASEDIR + + Push $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + + !define UPGRADEDLL_UNIQUE "${__FILE__}${__LINE__}" + + SetOverwrite try + + ;------------------------ + ;Copy the macro parameters to a run-time to a variable, + ;this allows the usage of variables as parameter + + StrCpy $R4 "${DESTFILE}" + StrCpy $R5 "${TEMPBASEDIR}" + + ;------------------------ + ;Get version information + + IfFileExists $R4 0 "upgradedll.copy_${UPGRADEDLL_UNIQUE}" + + ClearErrors + GetDLLVersionLocal "${LOCALFILE}" $R0 $R1 + GetDLLVersion $R4 $R2 $R3 + IfErrors "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}" + + IntCmpU $R0 $R2 0 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}" + IntCmpU $R1 $R3 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.done_${UPGRADEDLL_UNIQUE}" \ + "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}" + + ;------------------------ + ;Upgrade + + "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:" + !ifndef UPGRADEDLL_NOREGISTER + ;Unregister the DLL + UnRegDLL $R4 + !endif + + ;------------------------ + ;Copy + + ClearErrors + StrCpy $R0 $R4 + Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}" + IfErrors 0 "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}" + + ;------------------------ + ;Copy on reboot + + GetTempFileName $R0 $R5 + Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}" + Rename /REBOOTOK $R0 $R4 + + ;------------------------ + ;Register on reboot + + !insertmacro __UpgradeDLL_Helper_AddRegToolEntry 'D' $R4 $R5 + + Goto "upgradedll.done_${UPGRADEDLL_UNIQUE}" + + ;------------------------ + ;DLL does not exist + + "upgradedll.copy_${UPGRADEDLL_UNIQUE}:" + StrCpy $R0 $R4 + Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}" + + ;------------------------ + ;Register + + "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:" + !ifndef UPGRADEDLL_NOREGISTER + RegDLL $R4 + !endif + + ;------------------------ + ;Done + + "upgradedll.done_${UPGRADEDLL_UNIQUE}:" + + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + + ;------------------------ + ;End + + Goto "upgradedll.end_${UPGRADEDLL_UNIQUE}" + + ;------------------------ + ;Extract + + "upgradedll.file_${UPGRADEDLL_UNIQUE}:" + File /oname=$R0 "${LOCALFILE}" + Return + + "upgradedll.end_${UPGRADEDLL_UNIQUE}:" + + SetOverwrite lastused + + !undef UPGRADEDLL_UNIQUE + +!macroend + +!endif diff --git a/tools/Include/Util.nsh b/tools/Include/Util.nsh new file mode 100644 index 0000000..30d03a5 --- /dev/null +++ b/tools/Include/Util.nsh @@ -0,0 +1,184 @@ +; --------------------- +; Util.nsh +; --------------------- +; +; Voodoo macros to make end-user usage easier. This may be documented someday. + +!verbose push 3 +!ifndef ___UTIL__NSH___ +!define ___UTIL__NSH___ + +# CallArtificialFunction, see WinVer.nsh and *Func.nsh for usage examples +!macro CallArtificialFunctionHelper TYPE NAME + !verbose pop + Call :.${NAME}${TYPE} + !ifndef ${NAME}${TYPE}_DEFINED + !verbose push 2 + Goto ${NAME}${TYPE}_DONE + !define ${NAME}${TYPE}_DEFINED + !verbose pop + .${NAME}${TYPE}: + !insertmacro ${NAME} + Return + ${NAME}${TYPE}_DONE: + !endif + !verbose push 2 +!macroend + +!macro CallArtificialFunction NAME + !verbose push 2 + !ifdef __UNINSTALL__ + !insertmacro CallArtificialFunctionHelper uninst ${NAME} + !else + !insertmacro CallArtificialFunctionHelper inst ${NAME} + !endif + !verbose pop +!macroend +!define CallArtificialFunction `!insertmacro CallArtificialFunction` + +!macro CallArtificialFunction2 NAME ; Retained for v2.4x..v3.0b0 compatibility + ${CallArtificialFunction} ${NAME} +!macroend +!define CallArtificialFunction2 `!insertmacro CallArtificialFunction` + + +!define Int32Op '!insertmacro Int32Op ' +!define Int64Op '!insertmacro Int64Op ' +!define IntPtrOp '!insertmacro IntPtrOp ' +!macro Int32Op r a o b +IntOp `${r}` `${a}` `${o}` ${b} +!macroend +!macro Int64Op r a o b +!echo "Int64Op ${r}=${a}${o}${b}" +!verbose push 2 +System::Int64Op `${a}` `${o}` ${b} +Pop ${r} +!verbose pop +!macroend +!macro IntPtrOp r a o b +IntPtrOp `${r}` `${a}` `${o}` `${b}` +!macroend + +!define Int32Cmp '!insertmacro Int32Cmp ' +!define Int64Cmp '!insertmacro Int64Cmp ' +!define IntPtrCmp '!insertmacro IntPtrCmp ' +!macro Int32Cmp a b jeek jles jgtr +IntCmp `${a}` `${b}` `${jeek}` `${jles}` `${jgtr}` +!macroend +!macro Int64Cmp a b jeek jles jgtr +!if ${NSIS_PTR_SIZE} <= 4 +!ifmacrondef _LOGICLIB_TEMP +!include LogicLib.nsh +!endif +!echo "Int64Cmp ${a}:${b} =${jeek}, <${jles}, >${jgtr}" +!verbose push 2 +${IfThen} ${a} L= ${b} ${|} Goto ${jeek} ${|} +!insertmacro _L< ${a} ${b} `${jles}` `${jgtr}` +!verbose pop +!else +Int64Cmp `${a}` `${b}` `${jeek}` `${jles}` `${jgtr}` +!endif +!macroend +!macro IntPtrCmp a b jeek jles jgtr +IntPtrCmp `${a}` `${b}` `${jeek}` `${jles}` `${jgtr}` +!macroend + +!define Int32CmpU '!insertmacro Int32CmpU ' +!define Int64CmpU '!insertmacro Int64CmpU ' +!define IntPtrCmpU '!insertmacro IntPtrCmpU ' +!macro Int32CmpU a b jeek jles jgtr +IntCmpU `${a}` `${b}` `${jeek}` `${jles}` `${jgtr}` +!macroend +!macro Int64CmpUHelper +; This macro performs "$_LOGICLIB_TEMP = a < b ? -1 : a > b ? 1 : 0" but System::Int64Op does not support unsigned operations so we have to perform multiple steps +!ifmacrondef _LOGICLIB_TEMP +!include LogicLib.nsh +!endif +!insertmacro _LOGICLIB_TEMP +Exch $2 ; b +Exch +Exch $1 ; a +; if (a == b) return 0; +; if (a < 0) +; { +; if (b >= 0) return 1 +; } +; else +; { +; if (b < 0) return -1 +; } +; return a < b ? -1 : 1 +System::Int64Op $1 ^ $2 ; Using xor so $_LOGICLIB_TEMP ends up as 0 when they are equal +Pop $_LOGICLIB_TEMP +StrCmp $_LOGICLIB_TEMP 0 ret ; NOTE: Must use StrCmp, IntCmp fails on "0x8000000000000001 Z> 1" +System::Int64Op $1 < 0 +Pop $_LOGICLIB_TEMP +StrCmp $_LOGICLIB_TEMP 0 checkNegOther +System::Int64Op $2 < 0 ; System::Int64Op does not support the >= operator so we invert the operation +Pop $_LOGICLIB_TEMP +StrCmp $_LOGICLIB_TEMP 0 retPos finalCmp +retPos: +StrCpy $_LOGICLIB_TEMP "1" +Goto ret +checkNegOther: +System::Int64Op $2 < 0 +Pop $_LOGICLIB_TEMP +StrCmp $_LOGICLIB_TEMP 0 finalCmp retNeg +retNeg: +StrCpy $_LOGICLIB_TEMP "-1" +Goto ret +finalCmp: +System::Int64Op $1 < $2 +Pop $_LOGICLIB_TEMP +StrCmp $_LOGICLIB_TEMP 0 retPos retNeg +ret: +Pop $1 +Pop $2 +!macroend +!macro Int64CmpU a b jeek jles jgtr +!if ${NSIS_PTR_SIZE} <= 4 +!echo "Int64CmpU ${a}:${b} =${jeek}, <${jles}, >${jgtr}" +!verbose push 2 +Push `${a}` +Push `${b}` +!insertmacro CallArtificialFunction Int64CmpUHelper +IntCmp $_LOGICLIB_TEMP 0 `${jeek}` `${jles}` `${jgtr}` +!verbose pop +!else +Int64CmpU `${a}` `${b}` `${jeek}` `${jles}` `${jgtr}` +!endif +!macroend +!macro IntPtrCmpU a b jeek jles jgtr +IntPtrCmpU `${a}` `${b}` `${jeek}` `${jles}` `${jgtr}` +!macroend + + +!define MakeARPInstallDate "!insertmacro MakeARPInstallDate " +!macro MakeARPInstallDate _outvar +System::Call 'KERNEL32::GetDateFormat(i0x409,i0,p0,t"yyyyMMdd",t.s,i${NSIS_MAX_STRLEN})' +Pop ${_outvar} +!macroend + + +!define /IfNDef SPI_GETHIGHCONTRAST 0x42 +!define /IfNDef HCF_HIGHCONTRASTON 0x01 +!define /IfNDef /math SYSSIZEOF_HIGHCONTRAST 8 + ${NSIS_PTR_SIZE} +!define IsHighContrastModeActive '"" IsHighContrastModeActive ""' +!macro _IsHighContrastModeActive _lhs _rhs _t _f +!ifmacrondef _LOGICLIB_TEMP +!include LogicLib.nsh +!endif +!insertmacro _LOGICLIB_TEMP +Push $1 +System::Call '*(i${SYSSIZEOF_HIGHCONTRAST},i0,p)p.r1' +System::Call 'USER32::SystemParametersInfo(i${SPI_GETHIGHCONTRAST},i${SYSSIZEOF_HIGHCONTRAST},pr1,i0)' +System::Call '*$1(i,i.s)' +Pop $_LOGICLIB_TEMP +System::Free $1 +Pop $1 +!insertmacro _& $_LOGICLIB_TEMP ${HCF_HIGHCONTRASTON} `${_t}` `${_f}` +!macroend + + +!endif # !___UTIL__NSH___ +!verbose pop diff --git a/tools/Include/VB6RunTime.nsh b/tools/Include/VB6RunTime.nsh new file mode 100644 index 0000000..7ad2fc2 --- /dev/null +++ b/tools/Include/VB6RunTime.nsh @@ -0,0 +1,90 @@ +/* + +VB6RunTime.nsh + +Setup of Visual Basic 6.0 run-time files, including the Oleaut32.dll security update + +Copyright 2008-2023 Joost Verburg + +To obtain the run-time files, download and extract +https://nsis.sourceforge.io/vb6runtime.zip + +Script code for installation: + +!insertmacro InstallVB6RunTime FOLDER ALREADY_INSTALLED + +in which FOLDER is the location of the run-time files and ALREADY_INSTALLED is the +name of a variable that is empty when the application is installed for the first time +and non-empty otherwise + +Script code for uninstallation: + +!insertmacro UnInstallVB6RunTime + +Remarks: + +* You may have to install additional files for such Visual Basic application to work, + such as OCX files for user interface controls. + +* Installation of the run-time files requires Administrator or Power User privileges. + Use the Multi-User header file to verify whether these privileges are available. + +* Add a Modern UI finish page or another check (see IfRebootFlag in the NSIS Users + Manual) to allow the user to restart the computer when necessary. + +*/ + +!ifndef VB6_INCLUDED +!define VB6_INCLUDED +!verbose push +!verbose 3 + +!include Library.nsh +!include WinVer.nsh + +!macro VB6RunTimeInstall FOLDER ALREADY_INSTALLED + + !insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\msvbvm60.dll" "$SYSDIR\msvbvm60.dll" "$SYSDIR" + + ;The files below will only be installed on Win9x/NT4 + + !insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\olepro32.dll" "$SYSDIR\olepro32.dll" "$SYSDIR" + !insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\comcat.dll" "$SYSDIR\comcat.dll" "$SYSDIR" + !insertmacro InstallLib DLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\asycfilt.dll" "$SYSDIR\asycfilt.dll" "$SYSDIR" + !insertmacro InstallLib TLB "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\stdole2.tlb" "$SYSDIR\stdole2.tlb" "$SYSDIR" + + Push $R0 + + ${if} ${IsNT} + ${if} ${IsWinNT4} + ReadRegStr $R0 HKLM "System\CurrentControlSet\Control" "ProductOptions" + ${if} $R0 == "Terminal Server" + !insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4TS\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR" + ${else} + !insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR" + ${endif} + ${endif} + ${else} + ;No Oleaut32.dll with the security update has been released for Windows 9x. + ;The NT4 version is used because NT4 and Win9x used to share the same 2.40 version + ;and version 2.40.4519.0 is reported to work fine on Win9x. + !insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR" + ${endif} + + Pop $R0 + +!macroend + +!macro VB6RunTimeUnInstall + + !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll" + !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll" + !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll" + !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat.dll" + !insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll" + !insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb" + +!macroend + +!verbose pop +!endif diff --git a/tools/Include/VPatchLib.nsh b/tools/Include/VPatchLib.nsh new file mode 100644 index 0000000..1e01bc8 --- /dev/null +++ b/tools/Include/VPatchLib.nsh @@ -0,0 +1,47 @@ +; PatchLib v3.0 +; ============= +; +; Library with macro for use with VPatch (DLL version) in NSIS 2.0.5+ +; Created by Koen van de Sande + +!include LogicLib.nsh + +!macro VPatchFile PATCHDATA SOURCEFILE TEMPFILE + + Push $1 + Push $2 + Push $3 + Push $4 + + Push ${SOURCEFILE} + Push ${TEMPFILE} + + Pop $2 # temp file + Pop $3 # source file + + InitPluginsDir + GetTempFileName $1 $PLUGINSDIR + File /oname=$1 ${PATCHDATA} + + vpatch::vpatchfile $1 $3 $2 + Pop $4 + DetailPrint $4 + + StrCpy $4 $4 2 + ${Unless} $4 == "OK" + SetErrors + ${EndIf} + + ${If} ${FileExists} $2 + Delete $3 + Rename /REBOOTOK $2 $3 + ${EndIf} + + Delete $1 + + Pop $4 + Pop $3 + Pop $2 + Pop $1 + +!macroend diff --git a/tools/Include/Win/COM.nsh b/tools/Include/Win/COM.nsh new file mode 100644 index 0000000..3b2a011 --- /dev/null +++ b/tools/Include/Win/COM.nsh @@ -0,0 +1,392 @@ +/* +------------- + COM.nsh +------------- + +COM defines and helper macros + +; Example usage: +!include LogicLib.nsh +!include Win\COM.nsh +!include Win\Propkey.nsh +!insertmacro ComHlpr_CreateInProcInstance ${CLSID_ShellLink} ${IID_IShellLink} r0 "" +${If} $0 P<> 0 + ${IShellLink::SetPath} $0 '("%COMSPEC%").r1' + ${IShellLink::SetArguments} $0 '("/k echo HelloWorld").r2' + ${If} $1 = 0 + ${AndIf} $2 = 0 + ${IUnknown::QueryInterface} $0 '("${IID_IPropertyStore}",.r1)' + ${If} $1 P<> 0 + System::Call '*${SYSSTRUCT_PROPERTYKEY}(${PKEY_AppUserModel_StartPinOption})p.r2' + System::Call '*${SYSSTRUCT_PROPVARIANT}(${VT_UI4},,&i4 ${APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL})p.r3' + ${IPropertyStore::SetValue} $1 '($2,$3)' + + ; Reuse the PROPERTYKEY & PROPVARIANT buffers to set another property + System::Call '*$2${SYSSTRUCT_PROPERTYKEY}(${PKEY_AppUserModel_ExcludeFromShowInNewInstall})' + System::Call '*$3${SYSSTRUCT_PROPVARIANT}(${VT_BOOL},,&i2 ${VARIANT_TRUE})' + ${IPropertyStore::SetValue} $1 '($2,$3)' + + System::Free $2 + System::Free $3 + ${IPropertyStore::Commit} $1 "" + ${IUnknown::Release} $1 "" + ${EndIf} + ${IUnknown::QueryInterface} $0 '("${IID_IPersistFile}",.r1)' + ${If} $1 P<> 0 + ${IPersistFile::Save} $1 '("$SMPrograms\nsis_test.lnk",1)' + ${IUnknown::Release} $1 "" + ${EndIf} + ${EndIf} + ${IUnknown::Release} $0 "" +${EndIf} + +*/ + + +!ifndef __WIN_COM__INC +!define __WIN_COM__INC ${NSIS_CHAR_SIZE} +!verbose push +!verbose 3 + +!define /ifndef STGM_READ 0 +!define /ifndef STGM_WRITE 1 +!define /ifndef STGM_READWRITE 2 +!define /ifndef STGM_SHARE_DENY_NONE 0x00000040 +!define /ifndef STGM_SHARE_DENY_READ 0x00000030 +!define /ifndef STGM_SHARE_DENY_WRITE 0x00000020 +!define /ifndef STGM_SHARE_EXCLUSIVE 0x00000010 +!define /ifndef STGM_PRIORITY 0x00040000 +!define /ifndef STGM_CREATE 0x00001000 +!define /ifndef STGM_CONVERT 0x00020000 +!define /ifndef STGM_FAILIFTHERE 0 +!define /ifndef STGM_DELETEONRELEASE 0x04000000 + +!define /ifndef CLSCTX_INPROC_SERVER 0x1 +!define /ifndef CLSCTX_INPROC_HANDLER 0x2 +!define /ifndef CLSCTX_LOCAL_SERVER 0x4 +!define /ifndef CLSCTX_REMOTE_SERVER 0x10 +!define /ifndef CLSCTX_ACTIVATE_32_BIT_SERVER 0x40000 +!define /ifndef CLSCTX_ACTIVATE_64_BIT_SERVER 0x80000 +!define /ifndef CLSCTX_ENABLE_CLOAKING 0x100000 + +!define NSISCOMCALL "!insertmacro NSISCOMCALL " +!macro NSISCOMCALL vtblidx decl ptr params +!if ${NSIS_CHAR_SIZE} <> ${__WIN_COM__INC} +; Warn if QueryInterface() for IID_IShellLink etc will return the wrong interface +!warning "NSIS_CHAR_SIZE changed, existing defines and macros might not work correctly!" +!endif +System::Call `${ptr}->${vtblidx}${decl}${params}` +!macroend +!define NSISCOMIFACEDECL "!insertmacro NSISCOMIFACEDECL " +!macro NSISCOMIFACEDECL iface method vtblidx decl +!define ${iface}::${method} `${NSISCOMCALL} ${vtblidx} ${decl} ` +!macroend + +!macro ComHlpr_CreateInstance clsid iid sysoutvarIFacePtr sysret +System::Call 'OLE32::CoCreateInstance(g"${clsid}",i0,i23,g"${iid}",*p.${sysoutvarIFacePtr})i${sysret}' +!macroend +!macro ComHlpr_CreateInProcInstance clsid iid sysoutvarIFacePtr sysret +System::Call 'OLE32::CoCreateInstance(g"${clsid}",i0,i${CLSCTX_INPROC_SERVER},g"${iid}",*p.${sysoutvarIFacePtr})i${sysret}' +!macroend + +!macro ComHlpr_SafeRelease _p +${If} ${_p} P<> 0 + ${IUnknown::Release} ${_p} "" +${EndIf} +!macroend +!macro ComHlpr_SafeReleaseAndNull _p +${If} ${_p} P<> 0 + ${IUnknown::Release} ${_p} "" + StrCpy ${_p} 0 +${EndIf} +!macroend + + +!ifndef IID_IUnknown +!define IID_IUnknown {00000000-0000-0000-C000-000000000046} +${NSISCOMIFACEDECL}IUnknown QueryInterface 0 (g,*p)i +${NSISCOMIFACEDECL}IUnknown AddRef 1 ()i +${NSISCOMIFACEDECL}IUnknown Release 2 ()i +!endif + +!ifndef IID_IPersist +!define IID_IPersist {0000010c-0000-0000-C000-000000000046} +${NSISCOMIFACEDECL}IPersist GetClassID 3 (g)i +!endif + +!ifndef IID_IPersistStream +!define IID_IPersistStream {00000109-0000-0000-C000-000000000046} ; IPersist> +${NSISCOMIFACEDECL}IPersistStream IsDirty 4 ()i +${NSISCOMIFACEDECL}IPersistStream Load 5 (p,i)i +${NSISCOMIFACEDECL}IPersistStream Save 6 (p,i)i +${NSISCOMIFACEDECL}IPersistStream GetSizeMax 7 (*l)i +!endif +!ifndef IID_IPersistStreamInit +!define IID_IPersistStreamInit {7FD52380-4E07-101B-AE2D-08002B2EC713} ; IPersist> +${NSISCOMIFACEDECL}IPersistStreamInit IsDirty 4 ()i +${NSISCOMIFACEDECL}IPersistStreamInit Load 5 (p,i)i +${NSISCOMIFACEDECL}IPersistStreamInit Save 6 (p,i)i +${NSISCOMIFACEDECL}IPersistStreamInit GetSizeMax 7 (*l)i +${NSISCOMIFACEDECL}IPersistStreamInit InitNew 8 ()i +!endif + +!ifndef IID_IPersistFile +!define IID_IPersistFile {0000010b-0000-0000-C000-000000000046} ; IPersist> +${NSISCOMIFACEDECL}IPersistFile IsDirty 4 ()i +${NSISCOMIFACEDECL}IPersistFile Load 5 (w,i)i +${NSISCOMIFACEDECL}IPersistFile Save 6 (w,i)i +${NSISCOMIFACEDECL}IPersistFile SaveCompleted 7 (w)i +${NSISCOMIFACEDECL}IPersistFile GetCurFile 8 (*w)i +!endif + +!ifndef CLSID_ShellLink +!define CLSID_ShellLink {00021401-0000-0000-c000-000000000046} +!endif +!ifndef IID_IShellLink +!define IID_IShellLinkA {000214ee-0000-0000-c000-000000000046} +!define IID_IShellLinkW {000214f9-0000-0000-c000-000000000046} +!ifdef NSIS_UNICODE +!define IID_IShellLink ${IID_IShellLinkW} +!else +!define IID_IShellLink ${IID_IShellLinkA} +!endif +${NSISCOMIFACEDECL}IShellLink GetPath 3 (t,i,p,i)i +${NSISCOMIFACEDECL}IShellLink GetIDList 4 (*p)i +${NSISCOMIFACEDECL}IShellLink SetIDList 5 (p)i +${NSISCOMIFACEDECL}IShellLink GetDescription 6 (t,i)i +${NSISCOMIFACEDECL}IShellLink SetDescription 7 (t)i +${NSISCOMIFACEDECL}IShellLink GetWorkingDirectory 8 (t,i)i +${NSISCOMIFACEDECL}IShellLink SetWorkingDirectory 9 (t)i +${NSISCOMIFACEDECL}IShellLink GetArguments 10 (t,i)i +${NSISCOMIFACEDECL}IShellLink SetArguments 11 (t)i +${NSISCOMIFACEDECL}IShellLink GetHotkey 12 (*i0)i +${NSISCOMIFACEDECL}IShellLink SetHotkey 13 (&i2)i +${NSISCOMIFACEDECL}IShellLink GetShowCmd 14 (*i)i +${NSISCOMIFACEDECL}IShellLink SetShowCmd 15 (i)i +${NSISCOMIFACEDECL}IShellLink GetIconLocation 16 (t,i,*i)i +${NSISCOMIFACEDECL}IShellLink SetIconLocation 17 (t,i)i +${NSISCOMIFACEDECL}IShellLink SetRelativePath 18 (t,i)i +${NSISCOMIFACEDECL}IShellLink Resolve 19 (p,i)i +${NSISCOMIFACEDECL}IShellLink SetPath 20 (t)i +!endif + +!ifndef IID_IShellLinkDataList +!define IID_IShellLinkDataList {45e2b4ae-b1c3-11d0-b92f-00a0c90312e1} +${NSISCOMIFACEDECL}IShellLinkDataList AddDataBlock 3 (p)i +${NSISCOMIFACEDECL}IShellLinkDataList CopyDataBlock 4 (i,*p)i +${NSISCOMIFACEDECL}IShellLinkDataList RemoveDataBlock 5 (i)i +${NSISCOMIFACEDECL}IShellLinkDataList GetFlags 6 (*i)i +${NSISCOMIFACEDECL}IShellLinkDataList SetFlags 7 (i)i +!endif +!define /ifndef EXP_SZ_LINK_SIG 0xA0000001 +!define /ifndef NT_CONSOLE_PROPS_SIG 0xA0000002 +!define /ifndef NT_FE_CONSOLE_PROPS_SIG 0xA0000004 +!define /ifndef EXP_SPECIAL_FOLDER_SIG 0xA0000005 +!define /ifndef EXP_DARWIN_ID_SIG 0xA0000006 +!define /ifndef EXP_SZ_ICON_SIG 0xA0000007 +!define /ifndef EXP_PROPERTYSTORAGE_SIG 0xA0000009 +;SHELL_LINK_DATA_FLAGS +!define /ifndef SLDF_HAS_ID_LIST 0x00000001 +!define /ifndef SLDF_HAS_LINK_INFO 0x00000002 +!define /ifndef SLDF_HAS_NAME 0x00000004 +!define /ifndef SLDF_HAS_RELPATH 0x00000008 +!define /ifndef SLDF_HAS_WORKINGDIR 0x00000010 +!define /ifndef SLDF_HAS_ARGS 0x00000020 +!define /ifndef SLDF_HAS_ICONLOCATION 0x00000040 +!define /ifndef SLDF_UNICODE 0x00000080 +!define /ifndef SLDF_FORCE_NO_LINKINFO 0x00000100 +!define /ifndef SLDF_HAS_EXP_SZ 0x00000200 +!define /ifndef SLDF_RUN_IN_SEPARATE 0x00000400 +!define /ifndef SLDF_HAS_LOGO3ID 0x00000800 +!define /ifndef SLDF_HAS_DARWINID 0x00001000 +!define /ifndef SLDF_RUNAS_USER 0x00002000 +!define /ifndef SLDF_HAS_EXP_ICON_SZ 0x00004000 +!define /ifndef SLDF_NO_PIDL_ALIAS 0x00008000 +!define /ifndef SLDF_FORCE_UNCNAME 0x00010000 +!define /ifndef SLDF_RUN_WITH_SHIMLAYER 0x00020000 +!define /ifndef SLDF_FORCE_NO_LINKTRACK 0x00040000 ;[Vista+] +!define /ifndef SLDF_ENABLE_TARGET_METADATA 0x00080000 +!define /ifndef SLDF_DISABLE_LINK_PATH_TRACKING 0x00100000 ;[Seven+] +!define /ifndef SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING 0x00200000 +!define /ifndef SLDF_NO_KF_ALIAS 0x00400000 +!define /ifndef SLDF_ALLOW_LINK_TO_LINK 0x00800000 +!define /ifndef SLDF_UNALIAS_ON_SAVE 0x01000000 +!define /ifndef SLDF_PREFER_ENVIRONMENT_PATH 0x02000000 +!define /ifndef SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET 0x04000000 +!define /ifndef SLDF_PERSIST_VOLUME_ID_RELATIVE 0x08000000 ;[Eight+] + +!ifndef IID_IShellItem +!define IID_IShellItem {43826d1e-e718-42ee-bc55-a1e261c37bfe} +${NSISCOMIFACEDECL}IShellItem BindToHandler 3 (p,g,g,*p)i +${NSISCOMIFACEDECL}IShellItem GetParent 4 (*p)i +${NSISCOMIFACEDECL}IShellItem GetDisplayName 5 (i,*p)i +${NSISCOMIFACEDECL}IShellItem GetAttributes 6 (i,*i)i +${NSISCOMIFACEDECL}IShellItem Compare 7 (p,i,*i)i +!endif + +!ifndef CLSID_StartMenuPin +!define CLSID_StartMenuPin {a2a9545d-a0c2-42b4-9708-a0b2badd77c8} +!endif +!ifndef IID_IStartMenuPinnedList +!define IID_IStartMenuPinnedList {4CD19ADA-25A5-4A32-B3B7-347BEE5BE36B} +${NSISCOMIFACEDECL}IStartMenuPinnedList RemoveFromList 3 (p)i +!endif + +!ifndef CLSID_ApplicationDestinations +!define CLSID_ApplicationDestinations {86c14003-4d6b-4ef3-a7b4-0506663b2e68} +!endif +!ifndef IID_IApplicationDestinations +!define IID_IApplicationDestinations {12337D35-94C6-48A0-BCE7-6A9C69D4D600} ;[Seven+] +${NSISCOMIFACEDECL}IApplicationDestinations SetAppID 3 (w)i +${NSISCOMIFACEDECL}IApplicationDestinations RemoveDestination 4 (p)i ; IShellItem or IShellLink +${NSISCOMIFACEDECL}IApplicationDestinations RemoveAllDestinations 5 ()i +!endif + +!ifndef CLSID_DestinationList +!define CLSID_DestinationList {77f10cf0-3db5-4966-b520-b7c54fd35ed6} +!endif +!ifndef IID_ICustomDestinationList +!define IID_ICustomDestinationList {6332debf-87b5-4670-90c0-5e57b408a49e} ;[Seven+] +${NSISCOMIFACEDECL}ICustomDestinationList SetAppID 3 (w)i +${NSISCOMIFACEDECL}ICustomDestinationList BeginList 4 (*i,g,*p)i ; IObjectArray or IEnumObjects +${NSISCOMIFACEDECL}ICustomDestinationList AppendCategory 5 (w,p)i ; IObjectArray* +${NSISCOMIFACEDECL}ICustomDestinationList AppendKnownCategory 6 (i)i +${NSISCOMIFACEDECL}ICustomDestinationList AddUserTasks 7 (p)i ; IObjectArray* +${NSISCOMIFACEDECL}ICustomDestinationList CommitList 8 ()i +${NSISCOMIFACEDECL}ICustomDestinationList GetRemovedDestinations 9 (g,*p)i ; IObjectCollection +${NSISCOMIFACEDECL}ICustomDestinationList DeleteList 10 (w)i +${NSISCOMIFACEDECL}ICustomDestinationList AbortList 11 ()i +!endif + +!ifndef CLSID_EnumerableObjectCollection +!define CLSID_EnumerableObjectCollection {2d3468c1-36a7-43b6-ac24-d3f02fd9607a} +!endif +!ifndef IID_IObjectArray +!define IID_IObjectArray {92CA9DCD-5622-4bba-A805-5E9F541BD8C9} +${NSISCOMIFACEDECL}IObjectArray GetCount 3 (*i)i +${NSISCOMIFACEDECL}IObjectArray GetAt 4 (i,g,*p)i +!endif + +!ifndef IID_IObjectCollection +!define IID_IObjectCollection {5632b1a4-e38a-400a-928a-d4cd63230295} ; IObjectArray> +${NSISCOMIFACEDECL}IObjectCollection AddObject 5 (p)i ; IUnknown* +${NSISCOMIFACEDECL}IObjectCollection AddFromArray 6 (p)i ; IObjectArray* +${NSISCOMIFACEDECL}IObjectCollection RemoveObjectAt 7 (i)i +${NSISCOMIFACEDECL}IObjectCollection Clear 8 ()i +!endif + +!ifndef IID_IEnumObjects +!define IID_IEnumObjects {2c1c7e2e-2d0e-4059-831e-1e6f82335c2e} +${NSISCOMIFACEDECL}IEnumObjects Next 3 (i,g,*p,*i)i +${NSISCOMIFACEDECL}IEnumObjects Skip 4 (i)i +${NSISCOMIFACEDECL}IEnumObjects Reset 5 ()i +${NSISCOMIFACEDECL}IEnumObjects Clone 6 (*p)i +!endif + +!ifndef IID_IEnumUnknown +!define IID_IEnumUnknown {00000100-0000-0000-C000-000000000046} +${NSISCOMIFACEDECL}IEnumUnknown Next 3 (i,*p,*i)i +${NSISCOMIFACEDECL}IEnumUnknown Skip 4 (i)i +${NSISCOMIFACEDECL}IEnumUnknown Reset 5 ()i +${NSISCOMIFACEDECL}IEnumUnknown Clone 6 (*p)i +!endif + +!ifndef IID_IPropertyStore +!define IID_IPropertyStore {886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99} +${NSISCOMIFACEDECL}IPropertyStore GetCount 3 (*i)i +${NSISCOMIFACEDECL}IPropertyStore GetAt 4 (i,p)i +${NSISCOMIFACEDECL}IPropertyStore GetValue 5 (p,p)i +${NSISCOMIFACEDECL}IPropertyStore SetValue 6 (p,p)i +${NSISCOMIFACEDECL}IPropertyStore Commit 7 ()i +!endif + +!ifndef IID_IPropertyStorage +!define IID_IPropertyStorage {00000138-0000-0000-C000-000000000046} +${NSISCOMIFACEDECL}IPropertyStorage ReadMultiple 3 (i,p,p)i +${NSISCOMIFACEDECL}IPropertyStorage WriteMultiple 4 (i,p,p,i)i +${NSISCOMIFACEDECL}IPropertyStorage DeleteMultiple 5 (i,p)i +${NSISCOMIFACEDECL}IPropertyStorage ReadPropertyNames 6 (p,p)i +${NSISCOMIFACEDECL}IPropertyStorage WritePropertyNames 7 (i,p,p)i +${NSISCOMIFACEDECL}IPropertyStorage DeletePropertyNames 8 (i,p)i +${NSISCOMIFACEDECL}IPropertyStorage Commit 9 (i)i ; Note: Some implementations might return E_NOTIMPL +${NSISCOMIFACEDECL}IPropertyStorage Revert 10 ()i +${NSISCOMIFACEDECL}IPropertyStorage Enum 11 (*p)i +${NSISCOMIFACEDECL}IPropertyStorage SetTimes 12 (p,p,p)i +${NSISCOMIFACEDECL}IPropertyStorage SetClass 13 (g)i +${NSISCOMIFACEDECL}IPropertyStorage Stat 14 (p)i +!endif + +!ifndef IID_IPropertySetStorage +!define IID_IPropertySetStorage {0000013A-0000-0000-C000-000000000046} +${NSISCOMIFACEDECL}IPropertySetStorage Create 3 (g,g,i,i,*p)i +${NSISCOMIFACEDECL}IPropertySetStorage Open 4 (g,i,*p)i +${NSISCOMIFACEDECL}IPropertySetStorage Delete 5 (g)i +${NSISCOMIFACEDECL}IPropertySetStorage Enum 6 (*p)i +!endif + +!ifndef CLSID_ApplicationAssociationRegistration +!define CLSID_ApplicationAssociationRegistration {591209c7-767b-42b2-9fba-44ee4615f2c7} +!endif +!ifndef IID_IApplicationAssociationRegistration +!define IID_IApplicationAssociationRegistration {4e530b0a-e611-4c77-a3ac-9031d022281b} ;[Vista+] +${NSISCOMIFACEDECL}IApplicationAssociationRegistration QueryCurrentDefault 3 (w,i,i,*p)i +${NSISCOMIFACEDECL}IApplicationAssociationRegistration QueryAppIsDefault 4 (w,i,i,w,*i)i +${NSISCOMIFACEDECL}IApplicationAssociationRegistration QueryAppIsDefaultAll 5 (i,w,*i)i +${NSISCOMIFACEDECL}IApplicationAssociationRegistration SetAppAsDefault 6 (w,w,i)i +${NSISCOMIFACEDECL}IApplicationAssociationRegistration SetAppAsDefaultAll 7 (w)i +${NSISCOMIFACEDECL}IApplicationAssociationRegistration ClearUserAssociations 8 ()i +!endif +!ifndef CLSID_ApplicationAssociationRegistrationUI +!define CLSID_ApplicationAssociationRegistrationUI {1968106d-f3b5-44cf-890e-116fcb9ecef1} +!endif +!ifndef IID_IApplicationAssociationRegistrationUI +!define IID_IApplicationAssociationRegistrationUI {1f76a169-f994-40ac-8fc8-0959e8874710} ;[Vista+] +${NSISCOMIFACEDECL}IApplicationAssociationRegistrationUI LaunchAdvancedAssociationUI 3 (w)i +!endif + +!ifndef CLSID_GameExplorer +!define CLSID_GameExplorer {9A5EA990-3034-4D6F-9128-01F3C61022BC} +!endif +!ifndef IID_IGameExplorer +!define IID_IGameExplorer {E7B2FB72-D728-49B3-A5F2-18EBF5F1349E} ;[Vista+] +${NSISCOMIFACEDECL}IGameExplorer AddGame 3 (p,p,i,g)i +${NSISCOMIFACEDECL}IGameExplorer RemoveGame 4 (i,i,i,i)i ; The parameter is a GUID, not REFGUID so the 'g' type cannot be used! +${NSISCOMIFACEDECL}IGameExplorer UpdateGame 5 (i,i,i,i)i +${NSISCOMIFACEDECL}IGameExplorer VerifyAccess 6 (p,*i)i +!endif +!define /ifndef GIS_NOT_INSTALLED 1 +!define /ifndef GIS_CURRENT_USER 2 +!define /ifndef GIS_ALL_USERS 3 +!ifndef IID_IGameExplorer2 +!define IID_IGameExplorer2 {86874AA7-A1ED-450d-A7EB-B89E20B2FFF3} ;[Seven+] +${NSISCOMIFACEDECL}IGameExplorer2 InstallGame 3 (w,w,i)i +${NSISCOMIFACEDECL}IGameExplorer2 UninstallGame 4 (w)i +${NSISCOMIFACEDECL}IGameExplorer2 CheckAccess 5 (w,*i)i +!endif +!ifndef CLSID_GameStatistics +!define CLSID_GameStatistics {DBC85A2C-C0DC-4961-B6E2-D28B62C11AD4} +!endif +!ifndef IID_IGameStatisticsMgr +!define IID_IGameStatisticsMgr {AFF3EA11-E70E-407d-95DD-35E612C41CE2} ;[Seven+] +${NSISCOMIFACEDECL}IGameStatisticsMgr GetGameStatistics 3 (w,i,*i,*p)i +${NSISCOMIFACEDECL}IGameStatisticsMgr RemoveGameStatistics 4 (w)i +!endif + +!ifndef CLSID_InternetShortcut +!define CLSID_InternetShortcut {FBF23B40-E3F0-101B-8488-00AA003E56F8} +!endif +!ifndef IID_IUniformResourceLocator +!define IID_IUniformResourceLocatorA {FBF23B80-E3F0-101B-8488-00AA003E56F8} +!define IID_IUniformResourceLocatorW {CABB0DA0-DA57-11CF-9974-0020AFD79762} +!ifdef NSIS_UNICODE +!define IID_IUniformResourceLocator ${IID_IUniformResourceLocatorW} +!else +!define IID_IUniformResourceLocator ${IID_IUniformResourceLocatorA} +!endif +${NSISCOMIFACEDECL}IUniformResourceLocator SetURL 3 (t,i)i +${NSISCOMIFACEDECL}IUniformResourceLocator GetURL 4 (*p)i +${NSISCOMIFACEDECL}IUniformResourceLocator InvokeCommand 5 (p)i +!endif + +!verbose pop +!endif /* __WIN_COM__INC */ diff --git a/tools/Include/Win/Propkey.nsh b/tools/Include/Win/Propkey.nsh new file mode 100644 index 0000000..6d61d9a --- /dev/null +++ b/tools/Include/Win/Propkey.nsh @@ -0,0 +1,216 @@ +!ifndef __WIN_PROPKEY__INC +!define __WIN_PROPKEY__INC +!verbose push +!verbose 3 + + +/************************************************** +WTypes.h +**************************************************/ +;NOTE: This list is incomplete +!define VT_EMPTY 0 +!define VT_NULL 1 +!define VT_I2 2 +!define VT_I4 3 +!define VT_BSTR 8 +!define VT_BOOL 11 +!define VT_I1 16 +!define VT_UI1 17 +!define VT_UI2 18 +!define VT_UI4 19 +!define VT_I8 20 +!define VT_UI8 21 +!define VT_INT 22 +!define VT_UINT 23 +!define VT_HRESULT 25 +!define VT_PTR 26 +!define VT_SAFEARRAY 27 +!define VT_LPSTR 30 ; SHStrDupA +!define VT_LPWSTR 31 ; SHStrDupW +!define VT_FILETIME 64 +!define VT_STREAM 66 +!define VT_CLSID 72 ; Pointer to CoTaskMem allocated GUID +!define VT_TYPEMASK 0xFFF +!define VT_VECTOR 0x1000 +!define VT_ARRAY 0x2000 +!define VT_BYREF 0x4000 + +!define /ifndef VARIANT_TRUE -1 +!define /ifndef VARIANT_FALSE 0 + +!define SYSSIZEOF_PROPERTYKEY 20 +!define SYSSTRUCT_PROPERTYKEY (&g16,&i4) ;System.dll is buggy when it comes to g and forces us to specify the size + +!define STGC_DEFAULT 0 +!define STGC_OVERWRITE 1 +!define STGC_ONLYIFCURRENT 2 +!define STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE 4 +!define STGC_CONSOLIDATE 8 + + +/************************************************** +OAIdl.h +**************************************************/ +!if "${NSIS_PTR_SIZE}" > 4 +!define SYSSIZEOF_VARIANT 24 +!define SYSSTRUCT_VARIANT (&i2,&i6,&i8,&i8) +!else +!define SYSSIZEOF_VARIANT 16 +!define SYSSTRUCT_VARIANT (&i2,&i6,&i8) +!endif + + +/************************************************** +PropIdl.h +**************************************************/ +!if "${NSIS_PTR_SIZE}" > 4 +!define SYSSIZEOF_PROPVARIANT 24 +!define SYSSTRUCT_PROPVARIANT (&i2,&i6,&i8,&i8) +!else +!define SYSSIZEOF_PROPVARIANT 16 +!define SYSSTRUCT_PROPVARIANT (&i2,&i6,&i8) +!endif + +!define PRSPEC_LPWSTR 0 +!define PRSPEC_PROPID 1 +!define SYSSTRUCT_PROPSPEC (p,p) + + +/************************************************** +Propkey.h +**************************************************/ +!define PKEY_AppUserModel_RelaunchCommand '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",2' ; VT_LPWSTR (SHGetPropertyStoreForWindow) +!define PKEY_AppUserModel_RelaunchIconResource '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",3' ; VT_LPWSTR (SHGetPropertyStoreForWindow, optional. Path to icon or module, with resource ID or index.) +!define PKEY_AppUserModel_RelaunchDisplayNameResource '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",4' ; VT_LPWSTR (SHGetPropertyStoreForWindow. @ style indirect resource string or a plain string.) +!define PKEY_AppUserModel_ID '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",5' ; VT_LPWSTR +!define PKEY_AppUserModel_IsDestListSeparator '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",6' ; VT_BOOL +!define PKEY_AppUserModel_ExcludeFromShowInNewInstall '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",8' ; VT_BOOL +!define PKEY_AppUserModel_PreventPinning '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",9' ; VT_BOOL +!define PKEY_AppUserModel_IsDualMode '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",11' ; [Eight+] VT_BOOL +!define APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL 1 +!define APPUSERMODEL_STARTPINOPTION_USERPINNED 2 +!define PKEY_AppUserModel_StartPinOption '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",12' ; [Eight+] VT_UI4 +!define PKEY_AppUserModel_ToastActivatorCLSID '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",26' ; [10FU1507+] VT_CLSID +!define PKEY_EdgeGesture_DisableTouchWhenFullscreen '"{32CE38B2-2C9A-41B1-9BC5-B3784394AA44}",2' ; [Eight+] VT_BOOL (SHGetPropertyStoreForWindow) + + +/************************************************** +ShlGuid.h & ShlObj.h +**************************************************/ +!define FMTID_Intshcut {000214A0-0000-0000-C000-000000000046} +!define PID_IS_URL 2 ; VT_LPWSTR +!define PID_IS_HOTKEY 6 ; VT_UI2 +!define PID_IS_ICONINDEX 8 ; VT_I4 +!define PID_IS_ICONFILE 9 ; VT_LPWSTR +!define PKEY_Intshcut_Url '"${FMTID_Intshcut}",${PID_IS_URL}' ; Undocumented +!define FMTID_InternetSite {000214A1-0000-0000-C000-000000000046} +!define PID_INTSITE_LASTVISIT 4 ; VT_FILETIME +!define PID_INTSITE_VISITCOUNT 6 ; VT_UI4 + + +/************************************************** +Helper macros +**************************************************/ +!define V_GetVT '!insertmacro V_GetVT ' +!macro V_GetVT pPV sysdst +System::Call '*${pPV}(&i2.${sysdst})' +!macroend +!define V_SetVT '!insertmacro V_SetVT ' +!macro V_SetVT pPV syssrc +System::Call '*${pPV}(&i2 ${syssrc})' +!macroend +!macro V_GetHelper sysvaltyp pPV sysdst +System::Call '*${pPV}(l,${sysvaltyp}.${sysdst})' +!macroend +!macro V_GenericSetHelper sysvaltyp pPV VT syssrc +!if "${VT}" != "" ; Setting the VT is optional + System::Call '*${pPV}(&i2 ${VT},&i6,${sysvaltyp}${syssrc})' +!else + System::Call '*${pPV}(l,${sysvaltyp}${syssrc})' +!endif +!macroend +!macro V_SpecificSetHelper VT sysvaltyp pPV syssrc +System::Call '*${pPV}(&i2 ${VT},&i6,${sysvaltyp}${syssrc})' +!macroend +!macro Make_V_GetterSetter name sysvaltyp setsep +!define V_Get${name} '!insertmacro V_GetHelper "${sysvaltyp}" ' +!ifdef VT_${name} + !define V_Set${name} '!insertmacro V_SpecificSetHelper ${VT_${name}} "${sysvaltyp}${setsep}" ' +!else + !define V_Set${name} '!insertmacro V_GenericSetHelper "${sysvaltyp}${setsep}" ' +!endif +!macroend +!insertmacro Make_V_GetterSetter Int8 "&i1" " " ; Generic +!insertmacro Make_V_GetterSetter Int16 "&i2" " " ; Generic +!insertmacro Make_V_GetterSetter Int32 "i" "" ; Generic +!insertmacro Make_V_GetterSetter Int64 "l" "" ; Generic +!insertmacro Make_V_GetterSetter Pointer "p" "" ; Generic +!insertmacro Make_V_GetterSetter I4 "i" " " +!insertmacro Make_V_GetterSetter BOOL "&i2" " " +!insertmacro Make_V_GetterSetter FILETIME "l" "" + +!macro VariantInit pV +${V_SetVT} ${pV} ${VT_EMPTY} +!macroend +!macro VariantClear pV +System::Call 'OLEAUT32::#9(p${pV})' +!macroend +!macro VariantCopy pDstV pSrcV sysretHR +System::Call 'OLEAUT32::#10(p${pDstV},p${pSrcV})i.${sysretHR}' ; (Frees the destination variant before it copies the source) +!macroend +!macro VariantCopyInd pDstV pSrcV sysretHR +System::Call 'OLEAUT32::#11(p${pDstV},p${pSrcV})i.${sysretHR}' ; (Frees the destination variant before it copies the source) +!macroend +!macro VariantChangeType pDstV pSrcV Flags VT sysretHR +System::Call 'OLEAUT32::#12(p${pDstV},p${pSrcV},i${Flags},i${VT})i.${sysretHR}' ; (Might free the destination on success) +!macroend + + +!macro PropVariantClear pPV +System::Call 'OLE32::PropVariantClear(p${pPV})' ; WinNT4.SP0+, Win98+, IE4+ +!macroend +!macro PropVariantCopy pDstPV pSrcPV sysretHR +System::Call 'OLE32::PropVariantCopy(p${pDstPV},p${pSrcPV})i.${sysretHR}' ; WinNT4.SP0+, Win98+, IE4+ (Does NOT free the destination before it copies the source) +!macroend +!macro PropVariantChangeType pDstPV pSrcPV VT sysretHR +!ifdef NSIS_ARM | NSIS_ARM32 | NSIS_ARMNT | NSIS_ARM64 + System::Call 'PROPSYS::PropVariantChangeType(p${pDstPV},p${pSrcPV},i0,i${VT})i.${sysretHR}' +!else + Push "${VT}" + Push ${pSrcPV} + Push ${pDstPV} + !include Util.nsh + ${CallArtificialFunction} TryPropVariantChangeType + System::Call 'KERNEL32::SetLastError(is${sysretHR})' ; A hack to move the result from the stack to somewhere with System variable syntax +!endif +!macroend +!macro TryPropVariantChangeType +System::Store S +System::Call 'PROPSYS::PropVariantChangeType(psr1,psr2,i0,isr3)i.r0' ; Vista+ (Source and destination cannot be the same address) +StrCmp $0 error "" done +System::Call 'OLE32::PropVariantChangeType(pr1,pr2,i0,i0,ir3})i.r0' ; 2000+ (Source and destination cannot be the same address) +!if ${NSIS_PTR_SIZE} < 8 + StrCmp $0 error "" done + !insertmacro VariantChangeType $1 $2 0 $3 r0 ; This is not really correct but there is no PROPVARIANT support on these platforms. Might free the destination! +!endif +done: +Push $0 +System::Store L +!macroend + + +!macro IPropertyStorage_ReadPropById pPS ID pPV sysoutHR +System::Call '*(p${PRSPEC_PROPID},p${ID})p.s' +${IPropertyStorage::ReadMultiple} ${pPS} '(1,pss,p${pPV})${sysoutHR}' +System::Free +!macroend + +!macro IPropertyStorage_WritePropById pPS ID pPV sysoutHR +System::Call '*(p${PRSPEC_PROPID},p${ID})p.s' +${IPropertyStorage::WriteMultiple} ${pPS} '(1,pss,p${pPV},2)${sysoutHR}' +System::Free +!macroend + + +!verbose pop +!endif /* __WIN_PROPKEY__INC */ diff --git a/tools/Include/Win/RestartManager.nsh b/tools/Include/Win/RestartManager.nsh new file mode 100644 index 0000000..6557b7d --- /dev/null +++ b/tools/Include/Win/RestartManager.nsh @@ -0,0 +1,117 @@ +!ifndef __WIN_RESTARTMANAGER__INC +!define __WIN_RESTARTMANAGER__INC 1 + +/************************************************** +WinBase.h +**************************************************/ +!define /IfNDef RESTART_MAX_CMD_LINE 1024 + +!define /IfNDef RESTART_NO_CRASH 1 +!define /IfNDef RESTART_NO_HANG 2 +!define /IfNDef RESTART_NO_PATCH 4 +!define /IfNDef RESTART_NO_REBOOT 8 ; Do not restart the process when the system is rebooted due to patch installations + +!define /IfNDef RECOVERY_DEFAULT_PING_INTERVAL 5000 +!define /IfNDef /math RECOVERY_MAX_PING_INTERVAL 5000 * 60 + + +/************************************************** +RestartManager.h +**************************************************/ +!define RM_SESSION_KEY_LEN 16 +!define CCH_RM_SESSION_KEY 32 +!define CCH_RM_MAX_APP_NAME 255 +!define CCH_RM_MAX_SVC_NAME 63 +!define RM_INVALID_TS_SESSION -1 +!define RM_INVALID_PROCESS -1 + +!define RmUnknownApp 0 +!define RmMainWindow 1 +!define RmOtherWindow 2 +!define RmService 3 +!define RmExplorer 4 +!define RmConsole 5 +!define RmCritical 1000 ; Application is critical system process where a reboot is required to restart + +!define RmForceShutdown 0x1 ; Force unresponsive applications and services to shut down after the timeout period +!define RmShutdownOnlyRegistered 0x10 ; Only shutdown apps if all apps registered for restart (RegisterApplicationRestart) + +!define RmStatusUnknown 0 +!define RmStatusRunning 1 +!define RmStatusStopped 2 ; Application stopped by Restart Manager +!define RmStatusStoppedOther 4 +!define RmStatusRestarted 8 +!define RmStatusErrorOnStop 0x10 +!define RmStatusErrorOnRestart 0x20 +!define RmStatusShutdownMasked 0x40 +!define RmStatusRestartMasked 0x80 + +!define RmRebootReasonNone 0 +!define RmRebootReasonPermissionDenied 1 +!define RmRebootReasonSessionMismatch 2 +!define RmRebootReasonCriticalProcess 4 +!define RmRebootReasonCriticalService 8 +!define RmRebootReasonDetectedSelf 0x10 + + +!define SYSSIZEOF_RM_UNIQUE_PROCESS 12 +!define SYSSTRUCT_RM_UNIQUE_PROCESS (i,l) + + +!include LogicLib.nsh +!include Util.nsh + + +!macro RestartManager_StartSession outvarhandle +System::Call 'RSTRTMGR::RmStartSession(*i-1s, i0, w)i.s' +Pop ${outvarhandle} +${If} ${outvarhandle} <> 0 +${OrIf} ${outvarhandle} == error + Pop ${outvarhandle} + Push "" +${EndIf} +Pop ${outvarhandle} +!macroend + +!macro RestartManager_EndSession handle +System::Call 'RSTRTMGR::RmEndSession(i${handle})' +!macroend + +!macro RestartManager_RegisterFile handle path +System::Call 'RSTRTMGR::RmRegisterResources(i${handle},i1,*ws,i0,p0,i0,p0)i.r0' "${path}" +!macroend + +!macro RestartManager_Shutdown handle +System::Call 'RSTRTMGR::RmShutdown(i${handle}, i${RmForceShutdown}, p0)' +!macroend + +!macro RestartManager_Restart handle +System::Call 'RSTRTMGR::RmRestart(i${handle}, i0, p0)' +!macroend + + +!macro RestartManager_ShutdownFile fullpath outvar_errcode +Push "${fullpath}" +!insertmacro CallArtificialFunction RestartManager_ShutdownFileImp +Pop ${outvar_errcode} +!macroend +!macro RestartManager_ShutdownFileImp +Exch $1 +Push $0 +System::Call 'RSTRTMGR::RmStartSession(*i-1s, i0, w)i.r0' +${If} $0 == error + Pop $0 + StrCpy $0 1150 +${Else} + System::Call 'RSTRTMGR::RmRegisterResources(isr1,i1,*wr1,i0,p0,i0,p0)i.r0' + ${If} $0 = 0 + System::Call 'RSTRTMGR::RmShutdown(ir1, i${RmForceShutdown}, p0)i.r0' + ${EndIf} + System::Call 'RSTRTMGR::RmEndSession(ir1)' +${EndIf} +Exch +Pop $1 +Exch $0 +!macroend + +!endif ;~ Include guard diff --git a/tools/Include/Win/WinDef.nsh b/tools/Include/Win/WinDef.nsh new file mode 100644 index 0000000..a91d685 --- /dev/null +++ b/tools/Include/Win/WinDef.nsh @@ -0,0 +1,67 @@ +!ifndef __WIN_WINDEF__INC +!define __WIN_WINDEF__INC +!verbose push +!verbose 3 +!ifndef __WIN_NOINC_WINDEF + + +!define /ifndef MAX_PATH 260 +#define NULL 0 + + +!macro _Win_MINMAX _intcmp _j1 _j2 _outvar _a _b +${_intcmp} "${_a}" "${_b}" ${_j1} ${_j1} ${_j2} +StrCpy ${_outvar} "${_a}" +goto +2 +StrCpy ${_outvar} "${_b}" +!macroend +!ifndef __WIN_MS_NOMINMAX & min & max & min_u & max_u +!define min "!insertmacro _Win_MINMAX IntCmp +1 +3 " +!define max "!insertmacro _Win_MINMAX IntCmp +3 +1 " +!define min_u "!insertmacro _Win_MINMAX IntCmpU +1 +3 " +!define max_u "!insertmacro _Win_MINMAX IntCmpU +3 +1 " +!endif + +!macro _Win_LOBYTE _outvar _in +IntOp ${_outvar} "${_in}" & 0xFF +!macroend +!define LOBYTE "!insertmacro _Win_LOBYTE " + +!macro _Win_HIBYTE _outvar _in +IntOp ${_outvar} "${_in}" >> 8 +${LOBYTE} ${_outvar} ${_outvar} +!macroend +!define HIBYTE "!insertmacro _Win_HIBYTE " + +!macro _Win_LOWORD _outvar _in +IntOp ${_outvar} "${_in}" & 0xFFFF +!macroend +!define LOWORD "!insertmacro _Win_LOWORD " + +!macro _Win_HIWORD _outvar _in +IntOp ${_outvar} "${_in}" >>> 16 +!macroend +!define HIWORD "!insertmacro _Win_HIWORD " + +!macro _Win_MAKEWORD _outvar _tmpvar _lo _hi +${LOBYTE} ${_outvar} "${_hi}" +${LOBYTE} ${_tmpvar} "${_lo}" +IntOp ${_outvar} ${_outvar} << 8 +IntOp ${_outvar} ${_outvar} | ${_tmpvar} +!macroend +!define MAKEWORD "!insertmacro _Win_MAKEWORD " + +!macro _Win_MAKELONG32 _outvar _tmpvar _wlo _whi +${LOWORD} ${_outvar} "${_wlo}" +IntOp ${_tmpvar} "${_whi}" << 16 +IntOp ${_outvar} ${_outvar} | ${_tmpvar} +!macroend +!define MAKELONG "!insertmacro _Win_MAKELONG32 " +!define MAKEWPARAM "${MAKELONG}" +!define MAKELPARAM "${MAKELONG}" +!define MAKELRESULT "${MAKELONG}" + + +!endif /* __WIN_NOINC_WINDEF */ +!verbose pop +!endif /* __WIN_WINDEF__INC */ \ No newline at end of file diff --git a/tools/Include/Win/WinError.nsh b/tools/Include/Win/WinError.nsh new file mode 100644 index 0000000..16b0ecf --- /dev/null +++ b/tools/Include/Win/WinError.nsh @@ -0,0 +1,155 @@ +!ifndef __WIN_WINERROR__INC +!define __WIN_WINERROR__INC +!verbose push +!verbose 3 + +!ifndef __WIN_NOINC_WINERROR +#define NO_ERROR 0 +!define ERROR_SUCCESS 0 +!define ERROR_INVALID_FUNCTION 1 +!define ERROR_FILE_NOT_FOUND 2 +!define ERROR_PATH_NOT_FOUND 3 +!define ERROR_TOO_MANY_OPEN_FILES 4 +!define ERROR_ACCESS_DENIED 5 +!define ERROR_INVALID_HANDLE 6 +!define ERROR_ARENA_TRASHED 7 +!define ERROR_NOT_ENOUGH_MEMORY 8 +!define ERROR_INVALID_BLOCK 9 +!define ERROR_BAD_ENVIRONMENT 10 +!define ERROR_BAD_FORMAT 11 +!define ERROR_INVALID_ACCESS 12 +!define ERROR_INVALID_DATA 13 +!define ERROR_OUTOFMEMORY 14 +!define ERROR_INVALID_DRIVE 15 +!define ERROR_CURRENT_DIRECTORY 16 +!define ERROR_NOT_SAME_DEVICE 17 +!define ERROR_NO_MORE_FILES 18 +!define ERROR_WRITE_PROTECT 19 +!define ERROR_BAD_UNIT 20 +!define ERROR_NOT_READY 21 +!define ERROR_BAD_COMMAND 22 +!define ERROR_CRC 23 +!define ERROR_BAD_LENGTH 24 +!define ERROR_SEEK 25 +!define ERROR_NOT_DOS_DISK 26 +!define ERROR_SECTOR_NOT_FOUND 27 +!define ERROR_OUT_OF_PAPER 28 +!define ERROR_WRITE_FAULT 29 +!define ERROR_READ_FAULT 30 +!define ERROR_GEN_FAILURE 31 +!define ERROR_SHARING_VIOLATION 32 +!define ERROR_LOCK_VIOLATION 33 +!define ERROR_WRONG_DISK 34 +!define ERROR_SHARING_BUFFER_EXCEEDED 36 +!define ERROR_HANDLE_EOF 38 +!define ERROR_HANDLE_DISK_FULL 39 +!define ERROR_NOT_SUPPORTED 50 +!define ERROR_CANNOT_MAKE 82 ; "The directory or file cannot be created" +!define ERROR_INVALID_PARAMETER 87 +!define ERROR_DISK_FULL 112 +!define ERROR_CALL_NOT_IMPLEMENTED 120 ; "This function is not supported on this system" +!define ERROR_INSUFFICIENT_BUFFER 122 +!define ERROR_INVALID_NAME 123 ; "The filename, directory name, or volume label syntax is incorrect" +!define ERROR_MOD_NOT_FOUND 126 ; "The specified module could not be found" +!define ERROR_BAD_ARGUMENTS 160 +!define ERROR_BAD_PATHNAME 161 +!define ERROR_LOCK_FAILED 167 ; "Unable to lock a region of a file" +!define ERROR_BUSY 170 ; "The requested resource is in use" +!define ERROR_ALREADY_EXISTS 183 ; "Cannot create a file when that file already exists" +!define ERROR_FILENAME_EXCED_RANGE 206 ; "The filename or extension is too long" +!define ERROR_EXE_MACHINE_TYPE_MISMATCH 216 ; "This version of %1 is not compatible with the version of Windows you're running" +!define ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT 308 +!define ERROR_DATA_CHECKSUM_ERROR 323 +!define ERROR_ELEVATION_REQUIRED 740 +!define ERROR_SERVICE_DOES_NOT_EXIST 1060 +!define ERROR_NO_MEDIA_IN_DRIVE 1112 +!define ERROR_NO_UNICODE_TRANSLATION 1113 +!define ERROR_DLL_INIT_FAILED 1114 +!define ERROR_SHUTDOWN_IN_PROGRESS 1115 +!define ERROR_OLD_WIN_VERSION 1150 ; "The specified program requires a newer version of Windows" +!define ERROR_APP_WRONG_OS 1151 ; "The specified program is not a Windows or MS-DOS program" +!define ERROR_SINGLE_INSTANCE_APP 1152 ; "Cannot start more than one instance of the specified program" +!define ERROR_RMODE_APP 1153 ; "The specified program was written for an earlier version of Windows" +!define ERROR_INVALID_DLL 1154 +!define ERROR_NO_ASSOCIATION 1155 +!define ERROR_DDE_FAIL 1156 +!define ERROR_DLL_NOT_FOUND 1157 +!define ERROR_NOT_FOUND 1168 ; "Element not found" +!define ERROR_NO_MATCH 1169 ; "There was no match for the specified key in the index" +!define ERROR_NO_VOLUME_ID 1173 +!define ERROR_UNABLE_TO_REMOVE_REPLACED 1175 ; "Unable to remove the file to be replaced" +!define ERROR_UNABLE_TO_MOVE_REPLACEMENT 1176 +!define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 1177 +!define ERROR_SHUTDOWN_IS_SCHEDULED 1190 +!define ERROR_SHUTDOWN_USERS_LOGGED_ON 1191 ; "The system shutdown cannot be initiated because there are other users logged on to the computer" +!define ERROR_NO_NETWORK 1222 +!define ERROR_CANCELLED 1223 ; "The operation was canceled by the user" +!define ERROR_RETRY 1237 +!define ERROR_SERVICE_NOT_FOUND 1243 +!define ERROR_NOT_AUTHENTICATED 1244 +!define ERROR_UNIDENTIFIED_ERROR 1287 +!define ERROR_PRIVILEGE_NOT_HELD 1314 +!define ERROR_LOGON_FAILURE 1326 ; "The user name or password is incorrect" +!define ERROR_INTERNAL_ERROR 1359 ; "An internal error occurred" +!define ERROR_FILE_CORRUPT 1392 ; "The file or directory is corrupted and unreadable" +!define ERROR_INVALID_WINDOW_HANDLE 1400 ; "Invalid window handle" +!define ERROR_INVALID_INDEX 1413 +!define ERROR_TIMEOUT 1460 +!define ERROR_SYMLINK_NOT_SUPPORTED 1464 +!define ERROR_XML_PARSE_ERROR 1465 +!define ERROR_RESTART_APPLICATION 1467 ; "This application must be restarted" +!define ERROR_INSTALL_USEREXIT 1602 ; "User cancelled installation" +!define ERROR_INSTALL_FAILURE 1603 ; "Fatal error during installation" +!define ERROR_INSTALL_SUSPEND 1604 ; "Installation suspended, incomplete" +!define ERROR_UNKNOWN_PRODUCT 1605 ; "This action is only valid for products that are currently installed" +!define ERROR_BAD_CONFIGURATION 1610 +!define ERROR_INSTALL_SOURCE_ABSENT 1612 +!define ERROR_PRODUCT_UNINSTALLED 1614 +!define ERROR_INSTALL_ALREADY_RUNNING 1618 ; "Another installation is already in progress. Complete that installation before proceeding with this install." +!define ERROR_INSTALL_PACKAGE_INVALID 1620 +!define ERROR_INSTALL_LOG_FAILURE 1622 +!define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623 +!define ERROR_FUNCTION_FAILED 1627 +!define ERROR_DATATYPE_MISMATCH 1629 +!define ERROR_UNSUPPORTED_TYPE 1630 +!define ERROR_INSTALL_TEMP_UNWRITABLE 1632 ; "The Temp folder is on a drive that is full or is inaccessible" +!define ERROR_INSTALL_PLATFORM_UNSUPPORTED 1633 ; "This installation package is not supported by this processor type. Contact your product vendor." +!define ERROR_PRODUCT_VERSION 1638 ; "Another version of this product is already installed" +!define ERROR_SUCCESS_REBOOT_INITIATED 1641 ; "The requested operation completed successfully. The system will be restarted so the changes can take effect." +!define ERROR_INSTALL_REJECTED 1654 ; "The app that you are trying to run is not supported on this version of Windows" +!define ERROR_TAG_NOT_FOUND 2012 +!define ERROR_BAD_USERNAME 2202 ; "The user name or group name parameter is invalid" +!define ERROR_SUCCESS_REBOOT_REQUIRED 3010 +!define ERROR_SUCCESS_RESTART_REQUIRED 3011 +!define ERROR_INSTALL_INVALID_PACKAGE 15602 +!define ERROR_INSTALL_OUT_OF_DISK_SPACE 15604 +!define ERROR_INSTALL_CANCEL 15608 ; "User cancelled the install request" +!define ERROR_INSTALL_FAILED 15609 +!define ERROR_REMOVE_FAILED 15610 +!define ERROR_NEEDS_REMEDIATION 15612 ; "The application cannot be started. Try reinstalling the application to fix the problem." + +!define SEVERITY_SUCCESS 0 +!define SEVERITY_ERROR 1 +!define FACILITY_STORAGE 3 +!define FACILITY_WIN32 7 +!define FACILITY_SECURITY 9 +!define FACILITY_SETUPAPI 15 +!define FACILITY_SXS 23 +!define /IfNDef S_OK 0 +!define /IfNDef S_FALSE 1 +!define E_UNEXPECTED 0x8000FFFF +!define E_NOTIMPL 0x80004001 +!define E_OUTOFMEMORY 0x8007000E +!define E_INVALIDARG 0x80070057 +!define E_NOINTERFACE 0x80004002 +!define E_POINTER 0x80004003 +!define E_HANDLE 0x80070006 +!define E_ABORT 0x80004004 +!define E_FAIL 0x80004005 +!define E_ACCESSDENIED 0x80070005 +!define E_PENDING 0x8000000A + +!endif /* __WIN_NOINC_WINERROR */ + +!verbose pop +!endif /* __WIN_WINERROR__INC */ diff --git a/tools/Include/Win/WinNT.nsh b/tools/Include/Win/WinNT.nsh new file mode 100644 index 0000000..09e9aaf --- /dev/null +++ b/tools/Include/Win/WinNT.nsh @@ -0,0 +1,224 @@ +!ifndef __WIN_WINNT__INC +!define __WIN_WINNT__INC +!verbose push +!verbose 3 +!ifndef __WIN_NOINC_WINNT + + +#define MINCHAR 0x80 +#define MAXCHAR 0x7f +!define MINSHORT 0x8000 +!define MAXSHORT 0x7fff +!define MINLONG 0x80000000 +!define MAXLONG 0x7fffffff +!define MAXBYTE 0xff +!define MAXWORD 0xffff +!define MAXDWORD 0xffffffff + +!ifndef WIN32_NO_STATUS +!define STATUS_WAIT_0 0x00000000 +!define STATUS_ABANDONED_WAIT_0 0x00000080 +!define STATUS_USER_APC 0x000000C0 +!define STATUS_TIMEOUT 0x00000102 +!define STATUS_PENDING 0x00000103 +!define DBG_EXCEPTION_HANDLED 0x00010001 +!define DBG_CONTINUE 0x00010002 +!define STATUS_SEGMENT_NOTIFICATION 0x40000005 +!define DBG_TERMINATE_THREAD 0x40010003 +!define DBG_TERMINATE_PROCESS 0x40010004 +!define DBG_CONTROL_C 0x40010005 +!define DBG_CONTROL_BREAK 0x40010008 +!define DBG_COMMAND_EXCEPTION 0x40010009 +!define STATUS_GUARD_PAGE_VIOLATION 0x80000001 +!define STATUS_DATATYPE_MISALIGNMENT 0x80000002 +!define STATUS_BREAKPOINT 0x80000003 +!define STATUS_SINGLE_STEP 0x80000004 +!define DBG_EXCEPTION_NOT_HANDLED 0x80010001 +!define STATUS_ACCESS_VIOLATION 0xC0000005 +!define STATUS_IN_PAGE_ERROR 0xC0000006 +!define STATUS_INVALID_HANDLE 0xC0000008 +!define STATUS_NO_MEMORY 0xC0000017 +!define STATUS_ILLEGAL_INSTRUCTION 0xC000001D +!define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025 +!define STATUS_INVALID_DISPOSITION 0xC0000026 +!define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C +!define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D +!define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E +!define STATUS_FLOAT_INEXACT_RESULT 0xC000008F +!define STATUS_FLOAT_INVALID_OPERATION 0xC0000090 +!define STATUS_FLOAT_OVERFLOW 0xC0000091 +!define STATUS_FLOAT_STACK_CHECK 0xC0000092 +!define STATUS_FLOAT_UNDERFLOW 0xC0000093 +!define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094 +!define STATUS_INTEGER_OVERFLOW 0xC0000095 +!define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096 +!define STATUS_STACK_OVERFLOW 0xC00000FD +!define STATUS_CONTROL_C_EXIT 0xC000013A +!define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4 +!define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5 +!define STATUS_REG_NAT_CONSUMPTION 0xC00002C9 +!define STATUS_SXS_EARLY_DEACTIVATION 0xC015000F +!define STATUS_SXS_INVALID_DEACTIVATION 0xC0150010 +!endif /*WIN32_NO_STATUS*/ + +#define MAXIMUM_WAIT_OBJECTS 64 + +!define DELETE 0x00010000 +!define READ_CONTROL 0x00020000 +!define WRITE_DAC 0x00040000 +!define WRITE_OWNER 0x00080000 +!define SYNCHRONIZE 0x00100000 +!define STANDARD_RIGHTS_REQUIRED 0x000F0000 +!define STANDARD_RIGHTS_READ ${READ_CONTROL} +!define STANDARD_RIGHTS_WRITE ${READ_CONTROL} +!define STANDARD_RIGHTS_EXECUTE ${READ_CONTROL} +!define STANDARD_RIGHTS_ALL 0x001F0000 +!define SPECIFIC_RIGHTS_ALL 0x0000FFFF +!define ACCESS_SYSTEM_SECURITY 0x01000000 +!define MAXIMUM_ALLOWED 0x02000000 +!define GENERIC_READ 0x80000000 +!define GENERIC_WRITE 0x40000000 +!define GENERIC_EXECUTE 0x20000000 +!define GENERIC_ALL 0x10000000 + +!define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001 +!define SE_PRIVILEGE_ENABLED 0x00000002 +!define SE_PRIVILEGE_REMOVED 0x00000004 +!define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000 + +!define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege" +!define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege" +!define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege" +!define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege" +!define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege" +!define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege" +!define SE_TCB_NAME "SeTcbPrivilege" +!define SE_SECURITY_NAME "SeSecurityPrivilege" +!define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege" +!define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege" +!define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege" +!define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege" +!define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege" +!define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege" +!define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege" +!define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege" +!define SE_BACKUP_NAME "SeBackupPrivilege" +!define SE_RESTORE_NAME "SeRestorePrivilege" +!define SE_SHUTDOWN_NAME "SeShutdownPrivilege" +!define SE_DEBUG_NAME "SeDebugPrivilege" +!define SE_AUDIT_NAME "SeAuditPrivilege" +!define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege" +!define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege" +!define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege" +!define SE_UNDOCK_NAME "SeUndockPrivilege" +!define SE_SYNC_AGENT_NAME "SeSyncAgentPrivilege" +!define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege" +!define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege" +!define SE_IMPERSONATE_NAME "SeImpersonatePrivilege" +!define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege" + +!define TOKEN_ASSIGN_PRIMARY 0x0001 +!define TOKEN_DUPLICATE 0x0002 +!define TOKEN_IMPERSONATE 0x0004 +!define TOKEN_QUERY 0x0008 +!define TOKEN_QUERY_SOURCE 0x0010 +!define TOKEN_ADJUST_PRIVILEGES 0x0020 +!define TOKEN_ADJUST_GROUPS 0x0040 +!define TOKEN_ADJUST_DEFAULT 0x0080 +!define TOKEN_ADJUST_SESSIONID 0x0100 +!define TOKEN_ALL_ACCESS_P 0xF00FF +!define /math TOKEN_ALL_ACCESS ${TOKEN_ALL_ACCESS_P} | ${TOKEN_ADJUST_SESSIONID} +!define /math TOKEN_READ ${STANDARD_RIGHTS_READ} | ${TOKEN_QUERY} +!define TOKEN_WRITE 0x200E0 ;(STANDARD_RIGHTS_WRITE|TOKEN_ADJUST_PRIVILEGES|TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_DEFAULT) +!define TOKEN_EXECUTE ${STANDARD_RIGHTS_EXECUTE} + +!define PROCESS_TERMINATE 0x0001 +!define PROCESS_CREATE_THREAD 0x0002 +!define PROCESS_SET_SESSIONID 0x0004 +!define PROCESS_VM_OPERATION 0x0008 +!define PROCESS_VM_READ 0x0010 +!define PROCESS_VM_WRITE 0x0020 +!define PROCESS_DUP_HANDLE 0x0040 +!define PROCESS_CREATE_PROCESS 0x0080 +!define PROCESS_SET_QUOTA 0x0100 +!define PROCESS_SET_INFORMATION 0x0200 +!define PROCESS_QUERY_INFORMATION 0x0400 +!define PROCESS_SUSPEND_RESUME 0x0800 +!define PROCESS_ALL_ACCESS 0x1F0FFF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF) +!define THREAD_TERMINATE 0x0001 +!define THREAD_SUSPEND_RESUME 0x0002 +!define THREAD_GET_CONTEXT 0x0008 +!define THREAD_SET_CONTEXT 0x0010 +!define THREAD_SET_INFORMATION 0x0020 +!define THREAD_QUERY_INFORMATION 0x0040 +!define THREAD_SET_THREAD_TOKEN 0x0080 +!define THREAD_IMPERSONATE 0x0100 +!define THREAD_DIRECT_IMPERSONATION 0x0200 +!define THREAD_ALL_ACCESS 0x1F03FF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF) +!define JOB_OBJECT_ASSIGN_PROCESS 0x0001 +!define JOB_OBJECT_SET_ATTRIBUTES 0x0002 +!define JOB_OBJECT_QUERY 0x0004 +!define JOB_OBJECT_TERMINATE 0x0008 +!define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010 +!define JOB_OBJECT_ALL_ACCESS 0x1F001F ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F ) +!define EVENT_MODIFY_STATE 0x0002 +!define EVENT_ALL_ACCESS 0x1F0003 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) +!define MUTANT_QUERY_STATE 0x0001 +!define MUTANT_ALL_ACCESS 0x1F0001 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE) + +!define FILE_SHARE_READ 0x00000001 +!define FILE_SHARE_WRITE 0x00000002 +!define FILE_SHARE_DELETE 0x00000004 +!define FILE_ATTRIBUTE_READONLY 0x00000001 +!define FILE_ATTRIBUTE_HIDDEN 0x00000002 +!define FILE_ATTRIBUTE_SYSTEM 0x00000004 +!define FILE_ATTRIBUTE_DIRECTORY 0x00000010 +!define FILE_ATTRIBUTE_ARCHIVE 0x00000020 +!define FILE_ATTRIBUTE_DEVICE 0x00000040 +!define FILE_ATTRIBUTE_NORMAL 0x00000080 +!define FILE_ATTRIBUTE_TEMPORARY 0x00000100 +!define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 +!define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 +!define FILE_ATTRIBUTE_COMPRESSED 0x00000800 +!define FILE_ATTRIBUTE_OFFLINE 0x00001000 +!define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 +!define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 + +!define DUPLICATE_CLOSE_SOURCE 0x00000001 +!define DUPLICATE_SAME_ACCESS 0x00000002 + +!define /ifndef VER_PLATFORM_WIN32s 0 +!define /ifndef VER_PLATFORM_WIN32_WINDOWS 1 +!define /ifndef VER_PLATFORM_WIN32_NT 2 + +!ifndef REG_SZ & NSIS_WINDOWS__NO_REGTYPES +!define REG_NONE 0 +!define REG_SZ 1 +!define REG_EXPAND_SZ 2 +!define REG_BINARY 3 +!define REG_DWORD 4 +!define REG_DWORD_LITTLE_ENDIAN 4 +!define REG_DWORD_BIG_ENDIAN 5 +!define REG_LINK 6 +!define REG_MULTI_SZ 7 +!endif + +!define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF +!define PROCESSOR_ARCHITECTURE_INTEL 0 ; x86 +!define PROCESSOR_ARCHITECTURE_ARM 5 +!define PROCESSOR_ARCHITECTURE_IA64 6 ; Itanium +!define PROCESSOR_ARCHITECTURE_AMD64 9 ; x86-64/x64 +!define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10 +!define PROCESSOR_ARCHITECTURE_ARM64 12 +!define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13 + +!define IMAGE_FILE_MACHINE_UNKNOWN 0 +!define IMAGE_FILE_MACHINE_I386 332 ; x86 +!define IMAGE_FILE_MACHINE_ARMNT 452 +!define IMAGE_FILE_MACHINE_IA64 512 ; Itanium +!define IMAGE_FILE_MACHINE_AMD64 34404 ; x86-64/x64 +!define IMAGE_FILE_MACHINE_ARM64 43620 + +!endif /* __WIN_NOINC_WINNT */ +!verbose pop +!endif /* __WIN_WINNT__INC */ \ No newline at end of file diff --git a/tools/Include/Win/WinUser.nsh b/tools/Include/Win/WinUser.nsh new file mode 100644 index 0000000..50a9921 --- /dev/null +++ b/tools/Include/Win/WinUser.nsh @@ -0,0 +1,199 @@ +!ifndef __WIN_WINUSER__INC +!define __WIN_WINUSER__INC +!verbose push +!verbose 3 +!ifndef __WIN_MS_NOUSER & __WIN_NOINC_WINUSER + +!ifndef __WIN_MS_NOVIRTUALKEYCODES +!define VK_LBUTTON 0x01 +!define VK_RBUTTON 0x02 +!define VK_CANCEL 0x03 +!define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */ +!define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */ +!define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */ +!define VK_BACK 0x08 +!define VK_TAB 0x09 +!define VK_CLEAR 0x0C +!define VK_RETURN 0x0D +!define VK_SHIFT 0x10 +!define VK_CONTROL 0x11 +!define VK_MENU 0x12 +!define VK_PAUSE 0x13 +!define VK_CAPITAL 0x14 +!define VK_ESCAPE 0x1B +!define VK_CONVERT 0x1C +!define VK_NONCONVERT 0x1D +!define VK_ACCEPT 0x1E +!define VK_MODECHANGE 0x1F +!define VK_SPACE 0x20 +!define VK_PRIOR 0x21 +!define VK_NEXT 0x22 +!define VK_END 0x23 +!define VK_HOME 0x24 +!define VK_LEFT 0x25 +!define VK_UP 0x26 +!define VK_RIGHT 0x27 +!define VK_DOWN 0x28 +!define VK_SELECT 0x29 +!define VK_PRINT 0x2A +!define VK_EXECUTE 0x2B +!define VK_SNAPSHOT 0x2C +!define VK_INSERT 0x2D +!define VK_DELETE 0x2E +!define VK_HELP 0x2F +; VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39) +; VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) +!define VK_LWIN 0x5B +!define VK_RWIN 0x5C +!define VK_APPS 0x5D +!define VK_SLEEP 0x5F +!define VK_NUMPAD0 0x60 +!define VK_NUMPAD1 0x61 +!define VK_NUMPAD2 0x62 +!define VK_NUMPAD3 0x63 +!define VK_NUMPAD4 0x64 +!define VK_NUMPAD5 0x65 +!define VK_NUMPAD6 0x66 +!define VK_NUMPAD7 0x67 +!define VK_NUMPAD8 0x68 +!define VK_NUMPAD9 0x69 +!define VK_MULTIPLY 0x6A +!define VK_ADD 0x6B +!define VK_SEPARATOR 0x6C +!define VK_SUBTRACT 0x6D +!define VK_DECIMAL 0x6E +!define VK_DIVIDE 0x6F +!define VK_F1 0x70 +!define VK_F2 0x71 +!define VK_F3 0x72 +!define VK_F4 0x73 +!define VK_F5 0x74 +!define VK_F6 0x75 +!define VK_F7 0x76 +!define VK_F8 0x77 +!define VK_F9 0x78 +!define VK_F10 0x79 +!define VK_F11 0x7A +!define VK_F12 0x7B +!define VK_NUMLOCK 0x90 +!define VK_SCROLL 0x91 +!define VK_OEM_NEC_EQUAL 0x92 ; '=' key on numpad +!define VK_LSHIFT 0xA0 +!define VK_RSHIFT 0xA1 +!define VK_LCONTROL 0xA2 +!define VK_RCONTROL 0xA3 +!define VK_LMENU 0xA4 +!define VK_RMENU 0xA5 +!endif + +!ifndef __WIN_MS_NOWINOFFSETS +!define /ifndef GWL_STYLE -16 +!define /ifndef GWL_EXSTYLE -20 +!define /ifndef GWLP_WNDPROC -4 +!define /ifndef GWLP_HINSTANCE -6 +!define /ifndef GWLP_HWNDPARENT -8 +!define /ifndef GWLP_USERDATA -21 +!define /ifndef GWLP_ID -12 +!define DWLP_MSGRESULT 0 +!define /math DWLP_DLGPROC ${DWLP_MSGRESULT} + ${NSIS_PTR_SIZE} ;DWLP_MSGRESULT + sizeof(LRESULT) +!define /math DWLP_USER ${DWLP_DLGPROC} + ${NSIS_PTR_SIZE} ;DWLP_DLGPROC + sizeof(DLGPROC) +!endif + +!ifndef __WIN_MS_NONCMESSAGES +!define HTERROR -2 +!define HTTRANSPARENT -1 +!define HTNOWHERE 0 +!define HTCLIENT 1 +!define HTCAPTION 2 +!define HTSYSMENU 3 +!define HTGROWBOX 4 +!define HTSIZE ${HTGROWBOX} +!define HTMENU 5 +!define HTHSCROLL 6 +!define HTVSCROLL 7 +!define HTMINBUTTON 8 +!define HTMAXBUTTON 9 +!define HTLEFT 10 +!define HTRIGHT 11 +!define HTTOP 12 +!define HTTOPLEFT 13 +!define HTTOPRIGHT 14 +!define HTBOTTOM 15 +!define HTBOTTOMLEFT 16 +!define HTBOTTOMRIGHT 17 +!define HTBORDER 18 +!define HTREDUCE ${HTMINBUTTON} +!define HTZOOM ${HTMAXBUTTON} +!define HTSIZEFIRST ${HTLEFT} +!define HTSIZELAST ${HTBOTTOMRIGHT} +!define HTOBJECT 19 +!define HTCLOSE 20 +!define HTHELP 21 +!endif + +!ifndef __WIN_MS_NOSYSCOMMANDS +!define SC_SIZE 0xF000 +!define SC_MOVE 0xF010 +!define SC_MINIMIZE 0xF020 +!define SC_MAXIMIZE 0xF030 +!define SC_NEXTWINDOW 0xF040 +!define SC_PREVWINDOW 0xF050 +!define SC_CLOSE 0xF060 +!define SC_VSCROLL 0xF070 +!define SC_HSCROLL 0xF080 +!define SC_MOUSEMENU 0xF090 +!define SC_KEYMENU 0xF100 +!define SC_ARRANGE 0xF110 +!define SC_RESTORE 0xF120 +!define SC_TASKLIST 0xF130 +!define SC_SCREENSAVE 0xF140 +!define SC_HOTKEY 0xF150 +!define SC_DEFAULT 0xF160 +!define SC_MONITORPOWER 0xF170 +!define SC_CONTEXTHELP 0xF180 +!define SC_SEPARATOR 0xF00F +!endif + +!define /ifndef IDC_ARROW 32512 +!define /ifndef IDC_IBEAM 32513 +!define /ifndef IDC_WAIT 32514 +!define /ifndef IDC_CROSS 32515 +!define /ifndef IDC_UPARROW 32516 +!define /ifndef IDC_SIZE 32640 +!define /ifndef IDC_ICON 32641 +!define /ifndef IDC_SIZENWSE 32642 +!define /ifndef IDC_SIZENESW 32643 +!define /ifndef IDC_SIZEWE 32644 +!define /ifndef IDC_SIZENS 32645 +!define /ifndef IDC_SIZEALL 32646 +!define /ifndef IDC_NO 32648 +!define /ifndef IDC_HAND 32649 +!define /ifndef IDC_APPSTARTING 32650 +!define /ifndef IDC_HELP 32651 + +!define /ifndef IMAGE_BITMAP 0 +!define /ifndef IMAGE_ICON 1 +!define /ifndef IMAGE_CURSOR 2 +!define /ifndef IMAGE_ENHMETAFILE 3 + +!define /ifndef LR_DEFAULTCOLOR 0x0000 +!define /ifndef LR_MONOCHROME 0x0001 +!define /ifndef LR_COLOR 0x0002 +!define /ifndef LR_COPYRETURNORG 0x0004 +!define /ifndef LR_COPYDELETEORG 0x0008 +!define /ifndef LR_LOADFROMFILE 0x0010 +!define /ifndef LR_LOADTRANSPARENT 0x0020 +!define /ifndef LR_DEFAULTSIZE 0x0040 +!define /ifndef LR_VGACOLOR 0x0080 +!define /ifndef LR_LOADMAP3DCOLORS 0x1000 +!define /ifndef LR_CREATEDIBSECTION 0x2000 +!define /ifndef LR_COPYFROMRESOURCE 0x4000 +!define /ifndef LR_SHARED 0x8000 + +!define GA_PARENT 1 +!define GA_ROOT 2 +!define GA_ROOTOWNER 3 + +!endif /* __WIN_MS_NOUSER & __WIN_NOINC_WINUSER */ +!verbose pop +!endif /* __WIN_WINUSER__INC */ \ No newline at end of file diff --git a/tools/Include/WinCore.nsh b/tools/Include/WinCore.nsh new file mode 100644 index 0000000..2a14314 --- /dev/null +++ b/tools/Include/WinCore.nsh @@ -0,0 +1,263 @@ +/* + +WinCore.nsh & Win\*.nsh - Collection of common windows defines + +!define __WIN_NOINC_xxx to exclude a windows header file +!define __WIN_MS_xxx to exclude specific things (The original #ifdef xxx checks can be found in the official Microsoft headers) + +*/ + +!ifndef __WIN_WINDOWS__INC +!define __WIN_WINDOWS__INC +!verbose push +!verbose 3 + + + +!include Win\WinDef.nsh +!include Win\WinError.nsh +!include Win\WinNT.nsh +!include Win\WinUser.nsh + +!ifndef __WIN_MS_NOWINMESSAGES +!include WinMessages.nsh +!endif + + + + + +/************************************************** +WinBase.h +**************************************************/ +!ifndef __WIN_NOINC_WINBASE +!define /ifndef INVALID_HANDLE_VALUE -1 +!define /ifndef INVALID_FILE_SIZE 0xFFFFFFFF +!define /ifndef INVALID_SET_FILE_POINTER -1 +!define /ifndef INVALID_FILE_ATTRIBUTES -1 + +!define WAIT_FAILED 0xFFFFFFFF +!define WAIT_OBJECT_0 0 ;((STATUS_WAIT_0 ) + 0 ) + +!define WAIT_ABANDONED 0x80 ;((STATUS_ABANDONED_WAIT_0 ) + 0 ) +!define WAIT_ABANDONED_0 0x80 ;((STATUS_ABANDONED_WAIT_0 ) + 0 ) + +!define DRIVE_UNKNOWN 0 +!define DRIVE_NO_ROOT_DIR 1 +!define DRIVE_REMOVABLE 2 +!define DRIVE_FIXED 3 +!define DRIVE_REMOTE 4 +!define DRIVE_CDROM 5 +!define DRIVE_RAMDISK 6 + +!define FILE_TYPE_UNKNOWN 0x0000 +!define FILE_TYPE_DISK 0x0001 +!define FILE_TYPE_CHAR 0x0002 +!define FILE_TYPE_PIPE 0x0003 +!define FILE_TYPE_REMOTE 0x8000 + +!define STD_INPUT_HANDLE -10 +!define STD_OUTPUT_HANDLE -11 +!define STD_ERROR_HANDLE -12 + +#define IGNORE 0 ; Ignore signal +!define INFINITE 0xFFFFFFFF ; Infinite timeout + +!endif /* __WIN_NOINC_WINBASE */ + + + + + +/************************************************** +WinGDI.h +**************************************************/ +!ifndef __WIN_MS_NOGDI & __WIN_NOINC_WINGDI +!define HORZRES 8 +!define VERTRES 10 +!define BITSPIXEL 12 +!define LOGPIXELSX 88 +!define LOGPIXELSY 90 +!define COLORRES 108 +!define VREFRESH 116 +!define DESKTOPVERTRES 117 +!define DESKTOPHORZRES 118 +!endif /* __WIN_MS_NOGDI & __WIN_NOINC_WINGDI */ + + + + + +/************************************************** +WinReg.h +**************************************************/ +!ifndef __WIN_NOINC_WINREG +!ifndef __WIN_NOHKEY & HKEY_CLASSES_ROOT & HKEY_CURRENT_USER & HKEY_LOCAL_MACHINE & HKEY_USERS +!define HKEY_CLASSES_ROOT 0x80000000 +!define HKEY_CURRENT_USER 0x80000001 +!define HKEY_LOCAL_MACHINE 0x80000002 +!define HKEY_USERS 0x80000003 +!define HKEY_PERFORMANCE_DATA 0x80000004 +!define HKEY_PERFORMANCE_TEXT 0x80000050 +!define HKEY_PERFORMANCE_NLSTEXT 0x80000060 +!define HKEY_CURRENT_CONFIG 0x80000005 +!define HKEY_DYN_DATA 0x80000006 +!ifndef __WIN_NOSHORTHKEY & HKCR & HKCU & HKLM +!define HKCR ${HKEY_CLASSES_ROOT} +!define HKCU ${HKEY_CURRENT_USER} +!define HKLM ${HKEY_LOCAL_MACHINE} +!endif +!endif +!endif /* __WIN_NOINC_WINREG */ + + + + + +/************************************************** +WindowsX.h +**************************************************/ +!ifndef __WIN_NOINC_WINDOWSX +!ifndef GET_X_LPARAM & GET_Y_LPARAM +!macro _Win_GET_X_LPARAM _outvar _in +IntOp ${_outvar} "${_in}" << 16 ;We can't just use LOWORD, we need to keep the sign, +IntOp ${_outvar} ${_outvar} >> 16 ;so we let NSIS sign extend for us +!macroend +!define GET_X_LPARAM "!insertmacro _Win_GET_X_LPARAM " +!macro _Win_GET_Y_LPARAM _outvar _in +IntOp ${_outvar} "${_in}" >> 16 +!macroend +!define GET_Y_LPARAM "!insertmacro _Win_GET_Y_LPARAM " +!endif +!endif /* __WIN_NOINC_WINDOWSX */ + + + + + +/************************************************** +ShlObj.h +**************************************************/ +!ifndef __WIN_NOINC_SHLOBJ +!ifndef __WIN_NOSHELLFOLDERCSIDL +!define CSIDL_DESKTOP 0x0000 +!define CSIDL_INTERNET 0x0001 ;Internet Explorer (icon on desktop) +!define CSIDL_PROGRAMS 0x0002 ;Start Menu\Programs +!define CSIDL_CONTROLS 0x0003 ;My Computer\Control Panel +!define CSIDL_PRINTERS 0x0004 ;My Computer\Printers +!define CSIDL_PERSONAL 0x0005 ;My Documents +!define CSIDL_FAVORITES 0x0006 ;\Favorites +!define CSIDL_STARTUP 0x0007 ;Start Menu\Programs\Startup +!define CSIDL_RECENT 0x0008 ;\Recent +!define CSIDL_SENDTO 0x0009 ;\SendTo +!define CSIDL_BITBUCKET 0x000a ;\Recycle Bin +!define CSIDL_STARTMENU 0x000b ;\Start Menu +!define CSIDL_MYDOCUMENTS 0x000c ;logical "My Documents" desktop icon +!define CSIDL_MYMUSIC 0x000d ;"My Music" folder +!define CSIDL_MYVIDEO 0x000e ;"My Videos" folder +!define CSIDL_DESKTOPDIRECTORY 0x0010 ;\Desktop +!define CSIDL_DRIVES 0x0011 ;My Computer +!define CSIDL_NETWORK 0x0012 ;Network Neighborhood +!define CSIDL_NETHOOD 0x0013 ;\nethood +!define CSIDL_FONTS 0x0014 ;windows\fonts +!define CSIDL_TEMPLATES 0x0015 +!define CSIDL_COMMON_STARTMENU 0x0016 ;All Users\Start Menu +!define CSIDL_COMMON_PROGRAMS 0x0017 ;All Users\Start Menu\Programs +!define CSIDL_COMMON_STARTUP 0x0018 ;All Users\Startup +!define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 ;All Users\Desktop +!define CSIDL_APPDATA 0x001a ;\Application Data +!define CSIDL_PRINTHOOD 0x001b ;\PrintHood +!define CSIDL_LOCAL_APPDATA 0x001c ;\Local Settings\Application Data (non roaming) +!define CSIDL_ALTSTARTUP 0x001d ;non localized startup +!define CSIDL_COMMON_ALTSTARTUP 0x001e ;non localized common startup +!define CSIDL_COMMON_FAVORITES 0x001f +!define CSIDL_INTERNET_CACHE 0x0020 +!define CSIDL_COOKIES 0x0021 +!define CSIDL_HISTORY 0x0022 +!define CSIDL_COMMON_APPDATA 0x0023 ;All Users\Application Data +!define CSIDL_WINDOWS 0x0024 ;GetWindowsDirectory +!define CSIDL_SYSTEM 0x0025 ;GetSystemDirectory +!define CSIDL_PROGRAM_FILES 0x0026 ;C:\Program Files +!define CSIDL_MYPICTURES 0x0027 +!define CSIDL_PROFILE 0x0028 ;USERPROFILE +!define CSIDL_SYSTEMX86 0x0029 ;x86 system directory on RISC +!define CSIDL_PROGRAM_FILESX86 0x002a ;x86 C:\Program Files on RISC +!define CSIDL_PROGRAM_FILES_COMMON 0x002b ;C:\Program Files\Common +!define CSIDL_PROGRAM_FILES_COMMONX86 0x002c ;x86 Program Files\Common on RISC +!define CSIDL_COMMON_TEMPLATES 0x002d ;All Users\Templates +!define CSIDL_COMMON_DOCUMENTS 0x002e ;All Users\Documents +!define CSIDL_COMMON_ADMINTOOLS 0x002f ;All Users\Start Menu\Programs\Administrative Tools +!define CSIDL_ADMINTOOLS 0x0030 ;\Start Menu\Programs\Administrative Tools +!define CSIDL_CONNECTIONS 0x0031 ;Network and Dial-up Connections +!define CSIDL_COMMON_MUSIC 0x0035 ;All Users\My Music +!define CSIDL_COMMON_PICTURES 0x0036 ;All Users\My Pictures +!define CSIDL_COMMON_VIDEO 0x0037 ;All Users\My Video +!define CSIDL_RESOURCES 0x0038 ;Resource Directory +!define CSIDL_RESOURCES_LOCALIZED 0x0039 ;Localized Resource Directory +!define CSIDL_COMMON_OEM_LINKS 0x003a ;Links to All Users OEM specific apps +!define CSIDL_CDBURN_AREA 0x003b ;USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning +!define CSIDL_COMPUTERSNEARME 0x003d ;Computers Near Me (computered from Workgroup membership) +!define CSIDL_FLAG_CREATE 0x8000 ;combine with CSIDL_ value to force folder creation in SHGetFolderPath() +!define CSIDL_FLAG_DONT_VERIFY 0x4000 ;combine with CSIDL_ value to return an unverified folder path +!define CSIDL_FLAG_NO_ALIAS 0x1000 ;combine with CSIDL_ value to insure non-alias versions of the pidl +!define CSIDL_FLAG_PER_USER_INIT 0x0800 ;combine with CSIDL_ value to indicate per-user init (eg. upgrade) +!define CSIDL_FLAG_MASK 0xFF00 +!endif /* __WIN_NOSHELLFOLDERCSIDL */ +!endif /* __WIN_NOINC_SHLOBJ */ + + + + + +/************************************************** +Shobjidl.h +**************************************************/ +!ifndef __WIN_NOINC_SHOBJIDL +; ASSOCIATIONLEVEL +!define AL_MACHINE 0 +!define AL_EFFECTIVE 1 +!define AL_USER 2 + +; ASSOCIATIONTYPE +!define AT_FILEEXTENSION 0 +!define AT_URLPROTOCOL 1 +!define AT_STARTMENUCLIENT 2 +!define AT_MIMETYPE 3 +!endif /* __WIN_NOINC_SHOBJIDL */ + + + + + +/************************************************** +ShlGuid.h +**************************************************/ +!ifndef __WIN_NOINC_SHLGUID +!define FOLDERID_Public {DFDF76A2-C82A-4D63-906A-5644AC457385} ; Vista+ Fixed=%SystemDrive%\Users\Public +!define FOLDERID_Games {CAC52C1A-B53D-4edc-92D7-6B2E8AC19434} ; Vista+ && < 10 (1803) Virtual +!define FOLDERID_SavedGames {4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4} ; Vista+ PerUser=%USERPROFILE%\Saved Games +!define FOLDERID_GameTasks {054FAE61-4DD8-4787-80B6-090220C4B700} ; Vista+ PerUser=%LOCALAPPDATA%\Microsoft\Windows\GameExplorer +!define FOLDERID_PublicGameTasks {DEBF2536-E1A8-4c59-B6A2-414586476AEA} ; Vista+ Common=%ALLUSERSPROFILE%\Microsoft\Windows\GameExplorer +!define FOLDERID_Contacts {56784854-C6CB-462b-8169-88E350ACB882} ; Vista+ PerUser=%USERPROFILE%\Contacts +!define FOLDERID_Downloads {374DE290-123F-4565-9164-39C4925E467B} ; Vista+ PerUser=%USERPROFILE%\Downloads +!define FOLDERID_PublicDownloads {3D644C9B-1FB8-4f30-9B45-F670235F79C0} ; Vista+ Common=%PUBLIC%\Downloads +!define FOLDERID_UserProfiles {0762D272-C50A-4BB0-A382-697DCD729B80} ; Vista+ Fixed=%SystemDrive%\Users +!define FOLDERID_UserProgramFiles {5CD7AEE2-2219-4A67-B85D-6C9CE15660CB} ; 7+ PerUser=%LOCALAPPDATA%\Programs +!define FOLDERID_UserProgramFilesCommon {BCBD3057-CA5C-4622-B42D-BC56DB0AE516} ; 7+ PerUser=%LOCALAPPDATA%\Programs\Common +!define FOLDERID_PublicLibraries {48DAF80B-E6CF-4F4E-B800-0E69D84EE384} ; 7+ Common=%ALLUSERSPROFILE%\Microsoft\Windows\Libraries +!define FOLDERID_UserPinned {9E3995AB-1F9C-4F13-B827-48B24B6C7174} ; 7+ PerUser=%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned +!define FOLDERID_ImplicitAppShortcuts {BCB5256F-79F6-4CEE-B725-DC34E402FD46} ; 7+ PerUser=%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\ImplicitAppShortcuts +!define FOLDERID_DeviceMetadataStore {5CE4A5E9-E4EB-479D-B89F-130C02886155} ; 7+ Common=%ALLUSERSPROFILE%\Microsoft\Windows\DeviceMetadataStore +!define FOLDERID_ApplicationShortcuts {A3918781-E5F2-4890-B3D9-A7E54332328C} ; 8.0+ PerUser=%LOCALAPPDATA%\Microsoft\Windows\Application Shortcuts +!define FOLDERID_RoamingTiles {00BCFC5A-ED94-4e48-96A1-3F6217F21990} ; 8.0+ PerUser=%LOCALAPPDATA%\Microsoft\Windows\RoamingTiles +!define FOLDERID_RoamedTileImages {AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E} ; 8.0+ PerUser=%LOCALAPPDATA%\Microsoft\Windows\RoamedTileImages +!define FOLDERID_PublicUserTiles {0482af6c-08f1-4c34-8c90-e17ec98b1e17} ; 8.0+ Common=%PUBLIC%\AccountPictures +!define FOLDERID_AccountPictures {008ca0b1-55b4-4c56-b8a8-4de4b299d3be} ; 8.0+ PerUser=%APPDATA%\Microsoft\Windows\AccountPictures +!define FOLDERID_Screenshots {b7bede81-df94-4682-a7d8-57a52620b86f} ; 8.0+ PerUser=%USERPROFILE%\Pictures\Screenshots +!define FOLDERID_SkyDrive {A52BBA46-E9E1-435f-B3D9-28DAA648C0F6} ; 8.1+ PerUser=%USERPROFILE%\OneDrive +!define FOLDERID_AppDataProgramData {559D40A3-A036-40FA-AF61-84CB430A4D34} ; 10 (1709)+ PerUser=%LOCALAPPDATA%\ProgramData +!endif /* __WIN_NOINC_SHLGUID */ + + +!verbose pop +!endif /* __WIN_WINDOWS__INC */ \ No newline at end of file diff --git a/tools/Include/WinMessages.nsh b/tools/Include/WinMessages.nsh new file mode 100644 index 0000000..47d09dc --- /dev/null +++ b/tools/Include/WinMessages.nsh @@ -0,0 +1,890 @@ +/* +_____________________________________________________________________________ + + List of common Windows Messages +_____________________________________________________________________________ + + 2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + + +Usage example: +--------------------------------------------------- +Name "Output" +OutFile "Output.exe" + +!include "WinMessages.nsh" + +Section + FindWindow $0 '#32770' '' $HWNDPARENT + GetDlgItem $1 $0 1027 + SendMessage $1 ${WM_SETTEXT} 0 'STR:MyText' +SectionEnd +--------------------------------------------------- + + +Prefix Message category +------------------------- +SW ShowWindow Commands +CCM Generic Common Control +BM Button control +CB Combo box control +EM Edit control +LB List box control +WM General window +ABM Application desktop toolbar +DBT Device +DM Default push button control +HDM Header control +LVM List view control +SB Status bar window +SBM Scroll bar control +STM Static control +TCM Tab control +PBM Progress bar +ACM Animation control +TBM Track bar +UDM Up-down control +HKM Hot key control +IPM IP address control +NCM Network address control +----------------------------------- + +NOT included messages (WM_USER + X) +----------------------------------- +CBEM Extended combo box control +CDM Common dialog box +DL Drag list box +PGM Pager control +PSM Property sheet +RB Rebar control +TB Toolbar +TTM Tooltip control +TVM Tree-view control +----------------------------------- +*/ + + +!ifndef WINMESSAGES_INCLUDED +!define WINMESSAGES_INCLUDED +!verbose push +!verbose 3 + +!define _NSIS_DEFAW '!insertmacro _NSIS_DEFAW ' +!macro _NSIS_DEFAW d +!ifdef NSIS_UNICODE +!define ${d} "${${d}W}" +!else +!define ${d} "${${d}A}" +!endif +!macroend + +!define HWND_BROADCAST 0xFFFF + +#ShowWindow Commands# +!define SW_HIDE 0 +!define SW_SHOWNORMAL 1 +!define SW_NORMAL 1 +!define SW_SHOWMINIMIZED 2 +!define SW_SHOWMAXIMIZED 3 +!define SW_MAXIMIZE 3 +!define SW_SHOWNOACTIVATE 4 +!define SW_SHOW 5 +!define SW_MINIMIZE 6 +!define SW_SHOWMINNOACTIVE 7 +!define SW_SHOWNA 8 +!define SW_RESTORE 9 +!define SW_SHOWDEFAULT 10 +!define SW_FORCEMINIMIZE 11 +!define SW_MAX 11 + +#Generic Common Control Messages# +!define CCM_FIRST 0x2000 +!define /math CCM_SETBKCOLOR ${CCM_FIRST} + 0x1 ; IE4 +!define /math CCM_SETUNICODEFORMAT ${CCM_FIRST} + 0x5 +!define /math CCM_GETUNICODEFORMAT ${CCM_FIRST} + 0x6 +!define /math CCM_SETVERSION ${CCM_FIRST} + 0x7 ; IE5 +!define /math CCM_GETVERSION ${CCM_FIRST} + 0x8 +!define /math CCM_SETWINDOWTHEME ${CCM_FIRST} + 0xB ; WinXP +!define /math CCM_DPISCALE ${CCM_FIRST} + 0xC +!define WM_USER 0x400 + +!define CCS_TOP 1 +!define CCS_BOTTOM 3 +!define CCS_NODIVIDER 64 +!define CCS_LEFT 129 +!define CCS_RIGHT 131 + +!define I_IMAGENONE -2 + +#Button Control Messages# +!define BM_CLICK 0x00F5 +!define BM_GETCHECK 0x00F0 +!define BM_GETIMAGE 0x00F6 +!define BM_GETSTATE 0x00F2 +!define BM_SETCHECK 0x00F1 +!define BM_SETIMAGE 0x00F7 +!define BM_SETSTATE 0x00F3 +!define BM_SETSTYLE 0x00F4 +!define BCM_SETSHIELD 0x160C ; WinVista + ComCtl32 v6 + +!define BST_UNCHECKED 0 +!define BST_CHECKED 1 +!define BST_INDETERMINATE 2 +!define BST_PUSHED 4 +!define BST_FOCUS 8 + +#Combo Box Messages# +!define CB_ADDSTRING 0x0143 +!define CB_DELETESTRING 0x0144 +!define CB_DIR 0x0145 +!define CB_FINDSTRING 0x014C +!define CB_FINDSTRINGEXACT 0x0158 +!define CB_GETCOUNT 0x0146 +!define CB_GETCURSEL 0x0147 +!define CB_GETDROPPEDCONTROLRECT 0x0152 +!define CB_GETDROPPEDSTATE 0x0157 +!define CB_GETDROPPEDWIDTH 0x015f +!define CB_GETEDITSEL 0x0140 +!define CB_GETEXTENDEDUI 0x0156 +!define CB_GETHORIZONTALEXTENT 0x015d +!define CB_GETITEMDATA 0x0150 +!define CB_GETITEMHEIGHT 0x0154 +!define CB_GETLBTEXT 0x0148 +!define CB_GETLBTEXTLEN 0x0149 +!define CB_GETLOCALE 0x015A +!define CB_GETTOPINDEX 0x015b +!define CB_INITSTORAGE 0x0161 +!define CB_INSERTSTRING 0x014A +!define CB_LIMITTEXT 0x0141 +!define CB_MSGMAX 0x015B # 0x0162 0x0163 +!define CB_MULTIPLEADDSTRING 0x0163 +!define CB_RESETCONTENT 0x014B +!define CB_SELECTSTRING 0x014D +!define CB_SETCURSEL 0x014E +!define CB_SETDROPPEDWIDTH 0x0160 +!define CB_SETEDITSEL 0x0142 +!define CB_SETEXTENDEDUI 0x0155 +!define CB_SETHORIZONTALEXTENT 0x015e +!define CB_SETITEMDATA 0x0151 +!define CB_SETITEMHEIGHT 0x0153 +!define CB_SETLOCALE 0x0159 +!define CB_SETTOPINDEX 0x015c +!define CB_SHOWDROPDOWN 0x014F +!define CBM_FIRST 0x1700 ; Vista+ +!define /math CB_SETMINVISIBLE ${CBM_FIRST} + 1 +!define /math CB_GETMINVISIBLE ${CBM_FIRST} + 2 +!define /math CB_SETCUEBANNER ${CBM_FIRST} + 3 +!define /math CB_GETCUEBANNER ${CBM_FIRST} + 4 + +!define CB_ERR -1 + +#Edit Control Messages# +!define EM_CANUNDO 0x00C6 +!define EM_CHARFROMPOS 0x00D7 +!define EM_EMPTYUNDOBUFFER 0x00CD +!define EM_FMTLINES 0x00C8 +!define EM_GETFIRSTVISIBLELINE 0x00CE +!define EM_GETHANDLE 0x00BD +!define EM_GETIMESTATUS 0x00D9 +!define EM_GETLIMITTEXT 0x00D5 +!define EM_GETLINE 0x00C4 +!define EM_GETLINECOUNT 0x00BA +!define EM_GETMARGINS 0x00D4 +!define EM_GETMODIFY 0x00B8 +!define EM_GETPASSWORDCHAR 0x00D2 +!define EM_GETRECT 0x00B2 +!define EM_GETSEL 0x00B0 +!define EM_GETTHUMB 0x00BE +!define EM_GETWORDBREAKPROC 0x00D1 +!define EM_LIMITTEXT 0x00C5 +!define EM_LINEFROMCHAR 0x00C9 +!define EM_LINEINDEX 0x00BB +!define EM_LINELENGTH 0x00C1 +!define EM_LINESCROLL 0x00B6 +!define EM_POSFROMCHAR 0x00D6 +!define EM_REPLACESEL 0x00C2 +!define EM_SCROLL 0x00B5 +!define EM_SCROLLCARET 0x00B7 +!define EM_SETHANDLE 0x00BC +!define EM_SETIMESTATUS 0x00D8 +!define EM_SETLIMITTEXT 0x00C5 # Same as EM_LIMITTEXT +!define EM_SETMARGINS 0x00D3 +!define EM_SETMODIFY 0x00B9 +!define EM_SETPASSWORDCHAR 0x00CC +!define EM_SETREADONLY 0x00CF +!define EM_SETRECT 0x00B3 +!define EM_SETRECTNP 0x00B4 +!define EM_SETSEL 0x00B1 +!define EM_SETTABSTOPS 0x00CB +!define EM_SETWORDBREAKPROC 0x00D0 +!define EM_UNDO 0x00C7 +!define ECM_FIRST 0x1500 ; CC6+ +!define /math EM_SETCUEBANNER ${ECM_FIRST} + 1 + +#RichEdit Messages# +!define /math EM_EXGETSEL ${WM_USER} + 52 +!define /math EM_EXLIMITTEXT ${WM_USER} + 53 +!define /math EM_EXLINEFROMCHAR ${WM_USER} + 54 +!define /math EM_GETEVENTMASK ${WM_USER} + 59 +!define /math EM_GETOLEINTERFACE ${WM_USER} + 60 +!define /math EM_HIDESELECTION ${WM_USER} + 63 +!define /math EM_SETBKGNDCOLOR ${WM_USER} + 67 +!define /math EM_SETEVENTMASK ${WM_USER} + 69 +!define /math EM_STREAMIN ${WM_USER} + 73 +!define /math EM_STREAMOUT ${WM_USER} + 74 +!define /math EM_GETTEXTRANGE ${WM_USER} + 75 +!define /math EM_SETOPTIONS ${WM_USER} + 77 +!define /math EM_GETOPTIONS ${WM_USER} + 78 +!define /math EM_SETUNDOLIMIT ${WM_USER} + 82 ; v2+ +!define /math EM_AUTOURLDETECT ${WM_USER} + 91 +!define /Math EM_SETTEXTEX ${WM_USER} + 97 ; v3+ +!define /math EM_SETEDITSTYLE ${WM_USER} + 204 +!define /math EM_SETFONTSIZE ${WM_USER} + 223 + +!define EN_MSGFILTER 0x0700 +!define EN_SELCHANGE 0x0702 +!define EN_LINK 0x070b + +!define ENM_NONE 0x00000000 +!define ENM_CHANGE 0x00000001 +!define ENM_UPDATE 0x00000002 +!define ENM_SCROLL 0x00000004 +!define ENM_SCROLLEVENTS 0x00000008 +!define ENM_KEYEVENTS 0x00010000 +!define ENM_MOUSEEVENTS 0x00020000 +!define ENM_SELCHANGE 0x00080000 +!define ENM_LINK 0x04000000 ; v2+ + +#Listbox Messages# +!define LB_ADDFILE 0x0196 +!define LB_ADDSTRING 0x0180 +!define LB_DELETESTRING 0x0182 +!define LB_DIR 0x018D +!define LB_FINDSTRING 0x018F +!define LB_FINDSTRINGEXACT 0x01A2 +!define LB_GETANCHORINDEX 0x019D +!define LB_GETCARETINDEX 0x019F +!define LB_GETCOUNT 0x018B +!define LB_GETCURSEL 0x0188 +!define LB_GETHORIZONTALEXTENT 0x0193 +!define LB_GETITEMDATA 0x0199 +!define LB_GETITEMHEIGHT 0x01A1 +!define LB_GETITEMRECT 0x0198 +!define LB_GETLOCALE 0x01A6 +!define LB_GETSEL 0x0187 +!define LB_GETSELCOUNT 0x0190 +!define LB_GETSELITEMS 0x0191 +!define LB_GETTEXT 0x0189 +!define LB_GETTEXTLEN 0x018A +!define LB_GETTOPINDEX 0x018E +!define LB_INITSTORAGE 0x01A8 +!define LB_INSERTSTRING 0x0181 +!define LB_ITEMFROMPOINT 0x01A9 +!define LB_MSGMAX 0x01A8 # 0x01B0 0x01B1 +!define LB_MULTIPLEADDSTRING 0x01B1 +!define LB_RESETCONTENT 0x0184 +!define LB_SELECTSTRING 0x018C +!define LB_SELITEMRANGE 0x019B +!define LB_SELITEMRANGEEX 0x0183 +!define LB_SETANCHORINDEX 0x019C +!define LB_SETCARETINDEX 0x019E +!define LB_SETCOLUMNWIDTH 0x0195 +!define LB_SETCOUNT 0x01A7 +!define LB_SETCURSEL 0x0186 +!define LB_SETHORIZONTALEXTENT 0x0194 +!define LB_SETITEMDATA 0x019A +!define LB_SETITEMHEIGHT 0x01A0 +!define LB_SETLOCALE 0x01A5 +!define LB_SETSEL 0x0185 +!define LB_SETTABSTOPS 0x0192 +!define LB_SETTOPINDEX 0x0197 + +!define LB_ERR -1 + +#Window Messages# +!define WM_ACTIVATE 0x0006 +!define WM_ACTIVATEAPP 0x001C +!define WM_AFXFIRST 0x0360 +!define WM_AFXLAST 0x037F +!define WM_APP 0x8000 +!define WM_APPCOMMAND 0x0319 +!define WM_ASKCBFORMATNAME 0x030C +!define WM_CANCELJOURNAL 0x004B +!define WM_CANCELMODE 0x001F +!define WM_CAPTURECHANGED 0x0215 +!define WM_CHANGECBCHAIN 0x030D +!define WM_CHANGEUISTATE 0x0127 +!define WM_CHAR 0x0102 +!define WM_CHARTOITEM 0x002F +!define WM_CHILDACTIVATE 0x0022 +!define WM_CLEAR 0x0303 +!define WM_CLOSE 0x0010 +!define WM_COMMAND 0x0111 +!define WM_COMMNOTIFY 0x0044 # no longer supported +!define WM_COMPACTING 0x0041 +!define WM_COMPAREITEM 0x0039 +!define WM_CONTEXTMENU 0x007B +!define WM_CONVERTREQUESTEX 0x108 +!define WM_COPY 0x0301 +!define WM_COPYDATA 0x004A +!define WM_CREATE 0x0001 +!define WM_CTLCOLOR 0x0019 +!define WM_CTLCOLORBTN 0x0135 +!define WM_CTLCOLORDLG 0x0136 +!define WM_CTLCOLOREDIT 0x0133 +!define WM_CTLCOLORLISTBOX 0x0134 +!define WM_CTLCOLORMSGBOX 0x0132 +!define WM_CTLCOLORSCROLLBAR 0x0137 +!define WM_CTLCOLORSTATIC 0x0138 +!define WM_CUT 0x0300 +!define WM_DDE_FIRST 0x3E0 +!define WM_DEADCHAR 0x0103 +!define WM_DELETEITEM 0x002D +!define WM_DESTROY 0x0002 +!define WM_DESTROYCLIPBOARD 0x0307 +!define WM_DEVICECHANGE 0x0219 +!define WM_DEVMODECHANGE 0x001B +!define WM_DISPLAYCHANGE 0x007E +!define WM_DRAWCLIPBOARD 0x0308 +!define WM_DRAWITEM 0x002B +!define WM_DROPFILES 0x0233 +!define WM_ENABLE 0x000A +!define WM_ENDSESSION 0x0016 +!define WM_ENTERIDLE 0x0121 +!define WM_ENTERMENULOOP 0x0211 +!define WM_ENTERSIZEMOVE 0x0231 +!define WM_ERASEBKGND 0x0014 +!define WM_EXITMENULOOP 0x0212 +!define WM_EXITSIZEMOVE 0x0232 +!define WM_FONTCHANGE 0x001D +!define WM_GETDLGCODE 0x0087 +!define WM_GETFONT 0x0031 +!define WM_GETHOTKEY 0x0033 +!define WM_GETICON 0x007F +!define WM_GETMINMAXINFO 0x0024 +!define WM_GETOBJECT 0x003D +!define WM_GETTEXT 0x000D +!define WM_GETTEXTLENGTH 0x000E +!define WM_HANDHELDFIRST 0x0358 +!define WM_HANDHELDLAST 0x035F +!define WM_HELP 0x0053 +!define WM_HOTKEY 0x0312 +!define WM_HSCROLL 0x0114 +!define WM_HSCROLLCLIPBOARD 0x030E +!define WM_ICONERASEBKGND 0x0027 +!define WM_IME_CHAR 0x0286 +!define WM_IME_COMPOSITION 0x010F +!define WM_IME_COMPOSITIONFULL 0x0284 +!define WM_IME_CONTROL 0x0283 +!define WM_IME_ENDCOMPOSITION 0x010E +!define WM_IME_KEYDOWN 0x0290 +!define WM_IME_KEYLAST 0x010F +!define WM_IME_KEYUP 0x0291 +!define WM_IME_NOTIFY 0x0282 +!define WM_IME_REQUEST 0x0288 +!define WM_IME_SELECT 0x0285 +!define WM_IME_SETCONTEXT 0x0281 +!define WM_IME_STARTCOMPOSITION 0x010D +!define WM_INITDIALOG 0x0110 +!define WM_INITMENU 0x0116 +!define WM_INITMENUPOPUP 0x0117 +!define WM_INPUT 0x00FF +!define WM_INPUTLANGCHANGE 0x0051 +!define WM_INPUTLANGCHANGEREQUEST 0x0050 +!define WM_KEYDOWN 0x0100 +!define WM_KEYFIRST 0x0100 +!define WM_KEYLAST 0x0108 +!define WM_KEYUP 0x0101 +!define WM_KILLFOCUS 0x0008 +!define WM_LBUTTONDBLCLK 0x0203 +!define WM_LBUTTONDOWN 0x0201 +!define WM_LBUTTONUP 0x0202 +!define WM_MBUTTONDBLCLK 0x0209 +!define WM_MBUTTONDOWN 0x0207 +!define WM_MBUTTONUP 0x0208 +!define WM_MDIACTIVATE 0x0222 +!define WM_MDICASCADE 0x0227 +!define WM_MDICREATE 0x0220 +!define WM_MDIDESTROY 0x0221 +!define WM_MDIGETACTIVE 0x0229 +!define WM_MDIICONARRANGE 0x0228 +!define WM_MDIMAXIMIZE 0x0225 +!define WM_MDINEXT 0x0224 +!define WM_MDIREFRESHMENU 0x0234 +!define WM_MDIRESTORE 0x0223 +!define WM_MDISETMENU 0x0230 +!define WM_MDITILE 0x0226 +!define WM_MEASUREITEM 0x002C +!define WM_MENUCHAR 0x0120 +!define WM_MENUCOMMAND 0x0126 +!define WM_MENUDRAG 0x0123 +!define WM_MENUGETOBJECT 0x0124 +!define WM_MENURBUTTONUP 0x0122 +!define WM_MENUSELECT 0x011F +!define WM_MOUSEACTIVATE 0x0021 +!define WM_MOUSEFIRST 0x0200 +!define WM_MOUSEHOVER 0x02A1 +!define WM_MOUSELAST 0x0209 # 0x020A 0x020D +!define WM_MOUSELEAVE 0x02A3 +!define WM_MOUSEMOVE 0x0200 +!define WM_MOUSEWHEEL 0x020A +!define WM_MOVE 0x0003 +!define WM_MOVING 0x0216 +!define WM_NCACTIVATE 0x0086 +!define WM_NCCALCSIZE 0x0083 +!define WM_NCCREATE 0x0081 +!define WM_NCDESTROY 0x0082 +!define WM_NCHITTEST 0x0084 +!define WM_NCLBUTTONDBLCLK 0x00A3 +!define WM_NCLBUTTONDOWN 0x00A1 +!define WM_NCLBUTTONUP 0x00A2 +!define WM_NCMBUTTONDBLCLK 0x00A9 +!define WM_NCMBUTTONDOWN 0x00A7 +!define WM_NCMBUTTONUP 0x00A8 +!define WM_NCMOUSEHOVER 0x02A0 +!define WM_NCMOUSELEAVE 0x02A2 +!define WM_NCMOUSEMOVE 0x00A0 +!define WM_NCPAINT 0x0085 +!define WM_NCRBUTTONDBLCLK 0x00A6 +!define WM_NCRBUTTONDOWN 0x00A4 +!define WM_NCRBUTTONUP 0x00A5 +!define WM_NCXBUTTONDBLCLK 0x00AD +!define WM_NCXBUTTONDOWN 0x00AB +!define WM_NCXBUTTONUP 0x00AC +!define WM_NEXTDLGCTL 0x0028 +!define WM_NEXTMENU 0x0213 +!define WM_NOTIFY 0x004E +!define WM_NOTIFYFORMAT 0x0055 +!define WM_NULL 0x0000 +!define WM_PAINT 0x000F +!define WM_PAINTCLIPBOARD 0x0309 +!define WM_PAINTICON 0x0026 +!define WM_PALETTECHANGED 0x0311 +!define WM_PALETTEISCHANGING 0x0310 +!define WM_PARENTNOTIFY 0x0210 +!define WM_PASTE 0x0302 +!define WM_PENWINFIRST 0x0380 +!define WM_PENWINLAST 0x038F +!define WM_POWER 0x0048 +!define WM_POWERBROADCAST 0x0218 +!define WM_PRINT 0x0317 +!define WM_PRINTCLIENT 0x0318 +!define WM_QUERYDRAGICON 0x0037 +!define WM_QUERYENDSESSION 0x0011 +!define WM_QUERYNEWPALETTE 0x030F +!define WM_QUERYOPEN 0x0013 +!define WM_QUERYUISTATE 0x0129 +!define WM_QUEUESYNC 0x0023 +!define WM_QUIT 0x0012 +!define WM_RBUTTONDBLCLK 0x0206 +!define WM_RBUTTONDOWN 0x0204 +!define WM_RBUTTONUP 0x0205 +!define WM_RASDIALEVENT 0xCCCD +!define WM_RENDERALLFORMATS 0x0306 +!define WM_RENDERFORMAT 0x0305 +!define WM_SETCURSOR 0x0020 +!define WM_SETFOCUS 0x0007 +!define WM_SETFONT 0x0030 +!define WM_SETHOTKEY 0x0032 +!define WM_SETICON 0x0080 +!define WM_SETREDRAW 0x000B +!define WM_SETTEXT 0x000C +!define WM_SETTINGCHANGE 0x001A # Same as WM_WININICHANGE +!define WM_SHOWWINDOW 0x0018 +!define WM_SIZE 0x0005 +!define WM_SIZECLIPBOARD 0x030B +!define WM_SIZING 0x0214 +!define WM_SPOOLERSTATUS 0x002A +!define WM_STYLECHANGED 0x007D +!define WM_STYLECHANGING 0x007C +!define WM_SYNCPAINT 0x0088 +!define WM_SYSCHAR 0x0106 +!define WM_SYSCOLORCHANGE 0x0015 +!define WM_SYSCOMMAND 0x0112 +!define WM_SYSDEADCHAR 0x0107 +!define WM_SYSKEYDOWN 0x0104 +!define WM_SYSKEYUP 0x0105 +!define WM_TABLET_FIRST 0x02C0 +!define WM_TABLET_LAST 0x02DF +!define WM_THEMECHANGED 0x031A +!define WM_TCARD 0x0052 +!define WM_TIMECHANGE 0x001E +!define WM_TIMER 0x0113 +!define WM_UNDO 0x0304 +!define WM_UNICHAR 0x0109 +!define WM_UNINITMENUPOPUP 0x0125 +!define WM_UPDATEUISTATE 0x0128 +!define WM_USERCHANGED 0x0054 +!define WM_VKEYTOITEM 0x002E +!define WM_VSCROLL 0x0115 +!define WM_VSCROLLCLIPBOARD 0x030A +!define WM_WINDOWPOSCHANGED 0x0047 +!define WM_WINDOWPOSCHANGING 0x0046 +!define WM_WININICHANGE 0x001A +!define WM_WTSSESSION_CHANGE 0x02B1 +!define WM_XBUTTONDBLCLK 0x020D +!define WM_XBUTTONDOWN 0x020B +!define WM_XBUTTONUP 0x020C + + +#Application desktop toolbar# +!define ABM_ACTIVATE 0x00000006 # lParam == TRUE/FALSE means activate/deactivate +!define ABM_GETAUTOHIDEBAR 0x00000007 +!define ABM_GETSTATE 0x00000004 +!define ABM_GETTASKBARPOS 0x00000005 +!define ABM_NEW 0x00000000 +!define ABM_QUERYPOS 0x00000002 +!define ABM_REMOVE 0x00000001 +!define ABM_SETAUTOHIDEBAR 0x00000008 # This can fail, you MUST check the result +!define ABM_SETPOS 0x00000003 +!define ABM_WINDOWPOSCHANGED 0x0000009 + +#Device# +!define DBT_APPYBEGIN 0x0000 +!define DBT_APPYEND 0x0001 +!define DBT_CONFIGCHANGECANCELED 0x0019 +!define DBT_CONFIGCHANGED 0x0018 +!define DBT_CONFIGMGAPI32 0x0022 +!define DBT_CONFIGMGPRIVATE 0x7FFF +!define DBT_CUSTOMEVENT 0x8006 # User-defined event +!define DBT_DEVICEARRIVAL 0x8000 # System detected a new device +!define DBT_DEVICEQUERYREMOVE 0x8001 # Wants to remove, may fail +!define DBT_DEVICEQUERYREMOVEFAILED 0x8002 # Removal aborted +!define DBT_DEVICEREMOVECOMPLETE 0x8004 # Device is gone +!define DBT_DEVICEREMOVEPENDING 0x8003 # About to remove, still avail. +!define DBT_DEVICETYPESPECIFIC 0x8005 # Type specific event +!define DBT_DEVNODES_CHANGED 0x0007 +!define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 # Device interface class +!define DBT_DEVTYP_DEVNODE 0x00000001 # Devnode number +!define DBT_DEVTYP_HANDLE 0x00000006 # File system handle +!define DBT_DEVTYP_NET 0x00000004 # Network resource +!define DBT_DEVTYP_OEM 0x00000000 # Oem-defined device type +!define DBT_DEVTYP_PORT 0x00000003 # Serial, parallel +!define DBT_DEVTYP_VOLUME 0x00000002 # Logical volume +!define DBT_LOW_DISK_SPACE 0x0048 +!define DBT_MONITORCHANGE 0x001B +!define DBT_NO_DISK_SPACE 0x0047 +!define DBT_QUERYCHANGECONFIG 0x0017 +!define DBT_SHELLLOGGEDON 0x0020 +!define DBT_USERDEFINED 0xFFFF +!define DBT_VOLLOCKLOCKFAILED 0x8043 +!define DBT_VOLLOCKLOCKRELEASED 0x8045 +!define DBT_VOLLOCKLOCKTAKEN 0x8042 +!define DBT_VOLLOCKQUERYLOCK 0x8041 +!define DBT_VOLLOCKQUERYUNLOCK 0x8044 +!define DBT_VOLLOCKUNLOCKFAILED 0x8046 +!define DBT_VPOWERDAPI 0x8100 # VPOWERD API for Win95 +!define DBT_VXDINITCOMPLETE 0x0023 + +#Default push button control# +!define DM_BITSPERPEL 0x00040000 +!define DM_COLLATE 0x00008000 +!define DM_COLOR 0x00000800 +!define DM_COPIES 0x00000100 +!define DM_DEFAULTSOURCE 0x00000200 +!define DM_DISPLAYFLAGS 0x00200000 +!define DM_DISPLAYFREQUENCY 0x00400000 +!define DM_DITHERTYPE 0x04000000 +!define DM_DUPLEX 0x00001000 +!define DM_FORMNAME 0x00010000 +!define DM_GRAYSCALE 0x00000001 # This flag is no longer valid +!define DM_ICMINTENT 0x01000000 +!define DM_ICMMETHOD 0x00800000 +!define DM_INTERLACED 0x00000002 # This flag is no longer valid +!define DM_LOGPIXELS 0x00020000 +!define DM_MEDIATYPE 0x02000000 +!define DM_NUP 0x00000040 +!define DM_ORIENTATION 0x00000001 +!define DM_PANNINGHEIGHT 0x10000000 +!define DM_PANNINGWIDTH 0x08000000 +!define DM_PAPERLENGTH 0x00000004 +!define DM_PAPERSIZE 0x00000002 +!define DM_PAPERWIDTH 0x00000008 +!define DM_PELSHEIGHT 0x00100000 +!define DM_PELSWIDTH 0x00080000 +!define DM_POSITION 0x00000020 +!define DM_PRINTQUALITY 0x00000400 +!define DM_SCALE 0x00000010 +!define DM_SPECVERSION 0x0320 # 0x0400 0x0401 +!define DM_TTOPTION 0x00004000 +!define DM_YRESOLUTION 0x00002000 + +#Header control# +!define HDM_FIRST 0x1200 + +#List view control# +!define LVS_SINGLESEL 4 +!define LVS_SHOWSELALWAYS 8 +!define LVS_SORTASCENDING 0x10 +!define LVS_SORTDESCENDING 0x20 +!define LVS_SHAREIMAGELISTS 0x40 +!define LVS_EDITLABELS 0x200 +!define LVS_NOSCROLL 0x2000 +!define LVS_NOCOLUMNHEADER 0x4000 +!define LVS_NOSORTHEADER 0x8000 +!define LVS_ICON 0 +!define LVS_REPORT 1 +!define LVS_SMALLICON 2 +!define LVS_LIST 3 +!define LVS_EX_CHECKBOXES 4 +!define LVS_EX_FULLROWSELECT 0x20 +!define LVS_EX_INFOTIP 0x400 +!define LVS_EX_LABELTIP 0x4000 +!define LVS_EX_DOUBLEBUFFER 0x10000 +!define LVIF_TEXT 1 +!define LVIF_IMAGE 2 +!define LVIF_PARAM 4 +!define LVIF_STATE 8 +!define LVIS_STATEIMAGEMASK 0xF000 +!define LVCF_FMT 1 +!define LVCF_WIDTH 2 +!define LVCF_TEXT 4 +!define LVCF_SUBITEM 8 +!define SYSSTRUCT_LVITEM_V1 (i,i,i,i,&i${NSIS_PTR_SIZE},t,i,i,p) +!define SYSSTRUCT_LVITEM_V2 (i,i,i,i,&i${NSIS_PTR_SIZE},t,i,i,p,i) ; IE3 +!define SYSSTRUCT_LVITEM_V3 (i,i,i,i,&i${NSIS_PTR_SIZE},t,i,i,p,i,i,i,i) ; WinXP + ComCtl32 v6 +!define SYSSTRUCT_LVITEM_V4 (i,i,i,i,&i${NSIS_PTR_SIZE},t,i,i,p,i,i,i,i,i,i) ; WinVista + ComCtl32 v6 +!define LVSCW_AUTOSIZE -1 +!define LVSCW_AUTOSIZE_USEHEADER -2 +!define LVM_FIRST 0x00001000 +!define /math LVM_GETIMAGELIST ${LVM_FIRST} + 2 +!define /math LVM_SETIMAGELIST ${LVM_FIRST} + 3 +!define /math LVM_GETITEMCOUNT ${LVM_FIRST} + 4 +!define /math LVM_GETITEMA ${LVM_FIRST} + 5 +!define /math LVM_SETITEMA ${LVM_FIRST} + 6 +!define /math LVM_INSERTITEMA ${LVM_FIRST} + 7 +!define /math LVM_DELETEITEM ${LVM_FIRST} + 8 +!define /math LVM_DELETEALLITEMS ${LVM_FIRST} + 9 +!define /math LVM_INSERTCOLUMNA ${LVM_FIRST} + 27 +!define /math LVM_SETCOLUMNWIDTH ${LVM_FIRST} + 30 +!define /math LVM_SETITEMSTATE ${LVM_FIRST} + 43 +!define /math LVM_GETITEMSTATE ${LVM_FIRST} + 44 +!define /math LVM_GETITEMTEXTA ${LVM_FIRST} + 45 +!define /math LVM_SETITEMTEXTA ${LVM_FIRST} + 46 +!define /math LVM_SETITEMCOUNT ${LVM_FIRST} + 47 +!define /math LVM_SORTITEMS ${LVM_FIRST} + 48 +!define /math LVM_SETEXTENDEDLISTVIEWSTYLE ${LVM_FIRST} + 54 +!define /math LVM_GETEXTENDEDLISTVIEWSTYLE ${LVM_FIRST} + 55 +!define /math LVM_GETITEMW ${LVM_FIRST} + 75 +!define /math LVM_SETITEMW ${LVM_FIRST} + 76 +!define /math LVM_INSERTITEMW ${LVM_FIRST} + 77 +!define /math LVM_INSERTCOLUMNW ${LVM_FIRST} + 97 +!define /math LVM_GETITEMTEXTW ${LVM_FIRST} + 115 +!define /math LVM_SETITEMTEXTW ${LVM_FIRST} + 116 +!define /math LVM_SETSELECTEDCOLUMN ${LVM_FIRST} + 140 +${_NSIS_DEFAW} LVM_GETITEM +${_NSIS_DEFAW} LVM_SETITEM +${_NSIS_DEFAW} LVM_INSERTITEM +${_NSIS_DEFAW} LVM_INSERTCOLUMN +${_NSIS_DEFAW} LVM_GETITEMTEXT +${_NSIS_DEFAW} LVM_SETITEMTEXT + +#Status bar window# +!define SB_SIMPLEID 0x00ff + +#Scroll bar control# +!define SBM_ENABLE_ARROWS 0x00E4 # Not in win3.1 +!define SBM_GETPOS 0x00E1 # Not in win3.1 +!define SBM_GETRANGE 0x00E3 # Not in win3.1 +!define SBM_GETSCROLLINFO 0x00EA +!define SBM_SETPOS 0x00E0 # Not in win3.1 +!define SBM_SETRANGE 0x00E2 # Not in win3.1 +!define SBM_SETRANGEREDRAW 0x00E6 # Not in win3.1 +!define SBM_SETSCROLLINFO 0x00E9 + +#Static control# +!define STM_SETICON 0x0170 +!define STM_GETICON 0x0171 +!define STM_SETIMAGE 0x0172 +!define STM_GETIMAGE 0x0173 +!define STM_MSGMAX 0x0174 + +#Tab control# +!define TCS_SCROLLOPPOSITE 0x0001 +!define TCIF_TEXT 1 +!define TCIF_PARAM 8 +!define SYSSTRUCT_TCITEM (i,i,&i${NSIS_PTR_SIZE},t,i,i,p) +!define TCM_FIRST 0x1300 +!define /math TCM_INSERTITEMA ${TCM_FIRST} + 7 +!define /math TCM_GETCURSEL ${TCM_FIRST} + 11 +!define /math TCM_ADJUSTRECT ${TCM_FIRST} + 40 +!define /math TCM_INSERTITEMW ${TCM_FIRST} + 62 +!define TCN_SELCHANGE -551 +!define TCN_SELCHANGING -552 +${_NSIS_DEFAW} TCM_INSERTITEM + +#Progress bar control# +!define PBM_SETRANGE 0x401 +!define PBM_SETPOS 0x402 +!define PBM_DELTAPOS 0x403 +!define PBM_SETSTEP 0x404 +!define PBM_STEPIT 0x405 +!define PBM_SETRANGE32 0x406 ; IE3 + ComCtl32 v4.70 +!define PBM_GETRANGE 0x407 +!define PBM_GETPOS 0x408 +!define PBM_SETBARCOLOR 0x409 ; IE4 + ComCtl32 v4.71 +!define PBM_SETBKCOLOR ${CCM_SETBKCOLOR} +!define PBM_SETMARQUEE 0x40A ; WinXP + ComCtl32 v6 +!define PBM_GETSTEP 0x40D ; WinVista +!define PBM_GETBKCOLOR 0x40E +!define PBM_GETBARCOLOR 0x40F +!define PBM_SETSTATE 0x410 +!define PBM_GETSTATE 0x411 + +!define PBST_NORMAL 1 +!define PBST_ERROR 2 +!define PBST_PAUSED 3 + +#Animation control# +!define /math ACM_OPENA ${WM_USER} + 100 +!define /math ACM_PLAY ${WM_USER} + 101 +!define /math ACM_STOP ${WM_USER} + 102 +!define /math ACM_OPENW ${WM_USER} + 103 +${_NSIS_DEFAW} ACM_OPEN + +#TrackBar control# +!define /math TBM_GETPOS ${WM_USER} + 0 +!define /math TBM_GETRANGEMIN ${WM_USER} + 1 +!define /math TBM_GETRANGEMAX ${WM_USER} + 2 +!define /math TBM_GETTIC ${WM_USER} + 3 +!define /math TBM_SETTIC ${WM_USER} + 4 +!define /math TBM_SETPOS ${WM_USER} + 5 +!define /math TBM_SETRANGE ${WM_USER} + 6 +!define /math TBM_SETRANGEMIN ${WM_USER} + 7 +!define /math TBM_SETRANGEMAX ${WM_USER} + 8 +!define /math TBM_CLEARTICS ${WM_USER} + 9 +!define /math TBM_SETSEL ${WM_USER} + 10 +!define /math TBM_SETSELSTART ${WM_USER} + 11 +!define /math TBM_SETSELEND ${WM_USER} + 12 +!define /math TBM_GETPTICS ${WM_USER} + 14 +!define /math TBM_GETTICPOS ${WM_USER} + 15 +!define /math TBM_GETNUMTICS ${WM_USER} + 16 +!define /math TBM_GETSELSTART ${WM_USER} + 17 +!define /math TBM_GETSELEND ${WM_USER} + 18 +!define /math TBM_CLEARSEL ${WM_USER} + 19 +!define /math TBM_SETTICFREQ ${WM_USER} + 20 ; TBS_AUTOTICKS required +!define /math TBM_SETPAGESIZE ${WM_USER} + 21 +!define /math TBM_GETPAGESIZE ${WM_USER} + 22 +!define /math TBM_SETLINESIZE ${WM_USER} + 23 +!define /math TBM_GETLINESIZE ${WM_USER} + 24 +!define /math TBM_GETTHUMBRECT ${WM_USER} + 25 +!define /math TBM_GETCHANNELRECT ${WM_USER} + 26 +!define /math TBM_SETTHUMBLENGTH ${WM_USER} + 27 +!define /math TBM_GETTHUMBLENGTH ${WM_USER} + 28 +!define /math TBM_SETTOOLTIPS ${WM_USER} + 29 ; IE3 +!define /math TBM_GETTOOLTIPS ${WM_USER} + 30 ; IE3 +!define /math TBM_SETTIPSIDE ${WM_USER} + 31 ; IE3 +!define /math TBM_SETBUDDY ${WM_USER} + 32 ; IE3 +!define /math TBM_GETBUDDY ${WM_USER} + 33 ; IE3 +!define TBM_SETUNICODEFORMAT ${CCM_SETUNICODEFORMAT} ; IE4 +!define TBM_GETUNICODEFORMAT ${CCM_GETUNICODEFORMAT} ; IE4 +!define /math TBM_SETPOSNOTIFY ${WM_USER} + 34 ; 7? + +#UpDown controls# +!define /math UDM_SETRANGE ${WM_USER} + 101 +!define /math UDM_GETRANGE ${WM_USER} + 102 +!define /math UDM_SETPOS ${WM_USER} + 103 +!define /math UDM_GETPOS ${WM_USER} + 104 +!define /math UDM_SETBUDDY ${WM_USER} + 105 +!define /math UDM_GETBUDDY ${WM_USER} + 106 +!define /math UDM_SETACCEL ${WM_USER} + 107 +!define /math UDM_GETACCEL ${WM_USER} + 108 +!define /math UDM_SETBASE ${WM_USER} + 109 +!define /math UDM_GETBASE ${WM_USER} + 110 +!define /math UDM_SETRANGE32 ${WM_USER} + 111 ; IE4 +!define /math UDM_GETRANGE32 ${WM_USER} + 112 ; IE4 +!define UDM_SETUNICODEFORMAT ${CCM_SETUNICODEFORMAT} ; IE4 +!define UDM_GETUNICODEFORMAT ${CCM_GETUNICODEFORMAT} ; IE4 +!define /math UDM_SETPOS32 ${WM_USER} + 113 ; IE5 +!define /math UDM_GETPOS32 ${WM_USER} + 114 ; IE5 + +#HotKey control# +!define /math HKM_SETHOTKEY ${WM_USER} + 1 +!define /math HKM_GETHOTKEY ${WM_USER} + 2 +!define /math HKM_SETRULES ${WM_USER} + 3 +!define /IfNDef HOTKEYF_SHIFT 0x01 +!define /IfNDef HOTKEYF_CONTROL 0x02 +!define /IfNDef HOTKEYF_ALT 0x04 +!define /IfNDef HOTKEYF_EXT 0x08 +!define HKCOMB_NONE 0x01 +!define HKCOMB_S 0x02 +!define HKCOMB_C 0x04 +!define HKCOMB_A 0x08 +!define HKCOMB_SC 0x10 +!define HKCOMB_SA 0x20 +!define HKCOMB_CA 0x40 +!define HKCOMB_SCA 0x80 + +#IPAddress control# +!define /math IPM_CLEARADDRESS ${WM_USER} + 100 +!define /math IPM_SETADDRESS ${WM_USER} + 101 +!define /math IPM_GETADDRESS ${WM_USER} + 102 +!define /math IPM_SETRANGE ${WM_USER} + 103 +!define /math IPM_SETFOCUS ${WM_USER} + 104 +!define /math IPM_ISBLANK ${WM_USER} + 105 + +#NetworkAddress control# +!define /math NCM_GETADDRESS ${WM_USER} + 1 ; Vista+ +!define /math NCM_SETALLOWTYPE ${WM_USER} + 2 +!define /math NCM_GETALLOWTYPE ${WM_USER} + 3 +!define /math NCM_DISPLAYERRORTIP ${WM_USER} + 4 + +#Month calendar control# +!define MCM_FIRST 0x1000 +!define /math MCM_GETCURSEL ${MCM_FIRST} + 1 +!define /math MCM_SETCURSEL ${MCM_FIRST} + 2 +!define /math MCM_GETMAXSELCOUNT ${MCM_FIRST} + 3 +!define /math MCM_SETMAXSELCOUNT ${MCM_FIRST} + 4 +!define /math MCM_GETSELRANGE ${MCM_FIRST} + 5 +!define /math MCM_SETSELRANGE ${MCM_FIRST} + 6 +!define /math MCM_GETMONTHRANGE ${MCM_FIRST} + 7 +!define /math MCM_SETDAYSTATE ${MCM_FIRST} + 8 +!define /math MCM_GETMINREQRECT ${MCM_FIRST} + 9 +!define /math MCM_SETCOLOR ${MCM_FIRST} + 10 +!define /math MCM_GETCOLOR ${MCM_FIRST} + 11 +!define /math MCM_SETTODAY ${MCM_FIRST} + 12 +!define /math MCM_GETTODAY ${MCM_FIRST} + 13 +!define /math MCM_HITTEST ${MCM_FIRST} + 14 +!define /math MCM_SETFIRSTDAYOFWEEK ${MCM_FIRST} + 15 +!define /math MCM_GETFIRSTDAYOFWEEK ${MCM_FIRST} + 16 +!define /math MCM_GETRANGE ${MCM_FIRST} + 17 +!define /math MCM_SETRANGE ${MCM_FIRST} + 18 +!define /math MCM_GETMONTHDELTA ${MCM_FIRST} + 19 +!define /math MCM_SETMONTHDELTA ${MCM_FIRST} + 20 +!define /math MCM_GETMAXTODAYWIDTH ${MCM_FIRST} + 21 +!define MCM_SETUNICODEFORMAT ${CCM_SETUNICODEFORMAT} ; IE4+ +!define MCM_GETUNICODEFORMAT ${CCM_SETUNICODEFORMAT} ; IE4+ +!define /math MCM_GETCURRENTVIEW ${MCM_FIRST} + 22 ; Vista+ +!define /math MCM_GETCALENDARCOUNT ${MCM_FIRST} + 23 +!define /math MCM_GETCALENDARGRIDINFO ${MCM_FIRST} + 24 +!define /math MCM_GETCALID ${MCM_FIRST} + 27 +!define /math MCM_SETCALID ${MCM_FIRST} + 28 +!define /math MCM_SIZERECTTOMIN ${MCM_FIRST} + 29 +!define /math MCM_SETCALENDARBORDER ${MCM_FIRST} + 30 +!define /math MCM_GETCALENDARBORDER ${MCM_FIRST} + 31 +!define /math MCM_SETCURRENTVIEW ${MCM_FIRST} + 32 +!define MCN_SELCHANGE -749 +!define MCN_GETDAYSTATE -747 +!define MCN_SELECT -746 +!define MCN_VIEWCHANGE -750 ; Vista+? + +#DateTime control# +!define DTM_FIRST 0x1000 +!define /math DTM_GETSYSTEMTIME ${DTM_FIRST} + 1 +!define /math DTM_SETSYSTEMTIME ${DTM_FIRST} + 2 +!define /math DTM_SETFORMATA ${DTM_FIRST} + 5 +!define /math DTM_SETFORMATW ${DTM_FIRST} + 50 +${_NSIS_DEFAW} DTM_SETFORMAT +!define /math DTM_GETMONTHCAL ${DTM_FIRST} + 8 +!define /math DTM_SETMCFONT ${DTM_FIRST} + 9 ; IE4+? +!define /math DTM_GETMCFONT ${DTM_FIRST} + 10 ; IE4+? +!define /math DTM_SETMCSTYLE ${DTM_FIRST} + 11 ; Vista+? +!define /math DTM_GETMCSTYLE ${DTM_FIRST} + 12 ; Vista+? +!define /math DTM_CLOSEMONTHCAL ${DTM_FIRST} + 13 ; Vista+? +!define DTN_DATETIMECHANGE -759 +!define /IfNDef GDT_ERROR -1 +!define /IfNDef GDT_VALID 0 +!define /IfNDef GDT_NONE 1 + +!verbose pop +!endif diff --git a/tools/Include/WinVer.nsh b/tools/Include/WinVer.nsh new file mode 100644 index 0000000..32564ed --- /dev/null +++ b/tools/Include/WinVer.nsh @@ -0,0 +1,703 @@ +; --------------------- +; WinVer.nsh +; --------------------- +; +; LogicLib extensions for handling Windows versions and service packs. +; +; IsNT checks if the installer is running on Windows NT family (NT4, 2000, XP, etc.) +; +; ${If} ${IsNT} +; DetailPrint "Running on NT. Installing Unicode enabled application." +; ${Else} +; DetailPrint "Not running on NT. Installing ANSI application." +; ${EndIf} +; +; IsServerOS checks if the installer is running on a server version of Windows (2000, 2003, 2008, etc.) +; IsDomainController checks if the server is a domain controller +; +; AtLeastWin checks if the installer is running on Windows version at least as specified. +; IsWin checks if the installer is running on Windows version exactly as specified. +; AtMostWin checks if the installer is running on Windows version at most as specified. +; AtLeastBuild checks if the installer is running on a Windows version with a minimum build number. +; AtMostBuild checks if the installer is running on a Windows version with a maximum build number. +; AtLeastWaaS and AtMostWaaS checks Windows 10 "friendly names" against the build number. +; +; can be replaced with the following values: +; +; 95 +; 98 +; ME +; +; NT4 +; 2000 +; XP +; 2003 +; Vista +; 2008 +; 7 +; 2008R2 +; 8 +; 2012 +; 8.1 +; 2012R2 +; 10 +; 11 +; +; Note: Windows 8.1 and later will be detected as Windows 8 unless ManifestSupportedOS is set correctly! +; +; AtLeastServicePack checks if the installer is running on Windows service pack version at least as specified. +; IsServicePack checks if the installer is running on Windows service pack version exactly as specified. +; AtMostServicePack checks if the installer is running on Windows service version pack at most as specified. +; +; Usage examples: +; +; ${If} ${IsNT} +; DetailPrint "Running on NT family." +; DetailPrint "Surely not running on 95, 98 or ME." +; ${AndIf} ${AtLeastWinNT4} +; DetailPrint "Running on NT4 or better. Could even be 2003." +; ${EndIf} +; +; ${If} ${AtLeastWinXP} +; DetailPrint "Running on XP or better." +; ${EndIf} +; +; ${If} ${IsWin2000} +; DetailPrint "Running on 2000." +; ${EndIf} +; +; ${If} ${IsWin2000} +; ${AndIf} ${AtLeastServicePack} 3 +; ${OrIf} ${AtLeastWinXP} +; DetailPrint "Running Win2000 SP3 or above" +; ${EndIf} +; +; ${If} ${AtMostWinXP} +; DetailPrint "Running on XP or older. Surely not running on Vista. Maybe 98, or even 95." +; ${EndIf} +; +; Warning: +; +; Windows 95 and NT both use the same version number. To avoid getting NT4 misidentified +; as Windows 95 and vice-versa or 98 as a version higher than NT4, always use IsNT to +; check if running on the NT family. +; +; ${If} ${AtLeastWin95} +; ${AndIf} ${AtMostWinME} +; DetailPrint "Running 95, 98 or ME." +; DetailPrint "Actually, maybe it's NT4?" +; ${If} ${IsNT} +; DetailPrint "Yes, it's NT4! oops..." +; ${Else} +; DetailPrint "Nope, not NT4. phew..." +; ${EndIf} +; ${EndIf} +; +; +; Other useful extensions are: +; +; * IsWin2003R2 +; * IsStarterEdition +; * OSHasMediaCenter +; * OSHasTabletSupport +; + +!verbose push +!verbose 3 + +!ifndef ___WINVER__NSH___ +!define ___WINVER__NSH___ + +!include LogicLib.nsh +!include Util.nsh + +# masks for our variables + +!define _WINVER_VERXBIT 0x00000001 ; Used to boost $__WINVERV +!define _WINVER_MASKVMAJ 0x7F000000 ; $__WINVERV mask +!define _WINVER_MASKVMIN 0x00FF0000 ; $__WINVERV mask +!define _WINVER_NTMASK 0x7FFFFFFF ; $__WINVERV mask used by AtMost/AtLeast +!define _WINVER_NTBIT 0x80000000 ; $__WINVERV bit used by Is and $__WINVERSP bit used by IsNT +!define _WINVER_NTSRVBIT 0x40000000 ; $__WINVERSP bit for !VER_NT_WORKSTATION +!define _WINVER_NTDCBIT 0x20000000 ; $__WINVERSP bit for VER_NT_DOMAIN_CONTROLLER +!define _WINVER_MASKVBLD 0x0000FFFF ; $__WINVERSP mask for OS build number +!define _WINVER_MASKSP 0x000F0000 ; $__WINVERSP mask for OS service pack + +# possible variable values for different versions + +!define WINVER_95_NT 0x04000000 ;4.00.0950 +!define WINVER_95 0x04000000 ;4.00.0950 +!define WINVER_98_NT 0x040a0000 ;4.10.1998 +!define WINVER_98 0x040a0000 ;4.10.1998 +;define WINVER_98SE 0x040a0000 ;4.10.2222 +!define WINVER_ME_NT 0x045a0000 ;4.90.3000 +!define WINVER_ME 0x045a0000 ;4.90.3000 +;define WINVER_NT3.51 ;3.51.1057 +!define WINVER_NT4_NT 0x84000000 ;4.00.1381 +!define WINVER_NT4 0x04000000 ;4.00.1381 +!define WINVER_2000_NT 0x85000000 ;5.00.2195 +!define WINVER_2000 0x05000000 ;5.00.2195 +!define WINVER_XP_NT 0x85010000 ;5.01.2600 +!define WINVER_XP 0x05010000 ;5.01.2600 +;define WINVER_XP64 ;5.02.3790 +!define WINVER_2003_NT 0x85020000 ;5.02.3790 +!define WINVER_2003 0x05020000 ;5.02.3790 +!define WINVER_VISTA_NT 0x86000000 ;6.00.6000 +!define WINVER_VISTA 0x06000000 ;6.00.6000 +!define WINVER_2008_NT 0x86000001 ;6.00.6001 +!define WINVER_2008 0x06000001 ;6.00.6001 +!define WINVER_7_NT 0x86010000 ;6.01.7600 +!define WINVER_7 0x06010000 ;6.01.7600 +!define WINVER_2008R2_NT 0x86010001 ;6.01.7600 +!define WINVER_2008R2 0x06010001 ;6.01.7600 +!define WINVER_8_NT 0x86020000 ;6.02.9200 +!define WINVER_8 0x06020000 ;6.02.9200 +!define WINVER_2012_NT 0x86020001 ;6.02.9200 +!define WINVER_2012 0x06020001 ;6.02.9200 +!define WINVER_8.1_NT 0x86030000 ;6.03.9600 +!define WINVER_8.1 0x06030000 ;6.03.9600 +!define WINVER_2012R2_NT 0x86030001 ;6.03.9600 +!define WINVER_2012R2 0x06030001 ;6.03.9600 +!define WINVER_10_NT 0x8A000000 ;10.0.10240 +!define WINVER_10 0x0A000000 ;10.0.10240 +!define WINVER_2016_NT 0x8A000001 ;10.0.14393 +!define WINVER_2016 0x0A000001 ;10.0.14393 + + +# use this to make all nt > 9x + +!ifdef WINVER_NT4_OVER_W95 + !define /redef /math WINVER_NT4 ${WINVER_NT4} | ${_WINVER_VERXBIT} +!endif + +# some definitions from header files + +!define OSVERSIONINFOW_SIZE 276 +!define OSVERSIONINFOEXW_SIZE 284 +!define OSVERSIONINFOA_SIZE 148 +!define OSVERSIONINFOEXA_SIZE 156 +!define /ifndef VER_PLATFORM_WIN32_NT 2 +!define /ifndef VER_NT_WORKSTATION 1 +!define /ifndef VER_NT_DOMAIN_CONTROLLER 2 +!define /ifndef VER_NT_SERVER 3 + +!define SM_TABLETPC 86 +!define SM_MEDIACENTER 87 +!define SM_STARTER 88 +!define SM_SERVERR2 89 + +# variable declaration + +!macro __WinVer_DeclareVars + + !ifndef __WINVER_VARS_DECLARED + + !define __WINVER_VARS_DECLARED + + Var /GLOBAL __WINVERV + Var /GLOBAL __WINVERSP + + !endif + +!macroend + +!macro __WinVer_Optimize +!ifndef __WINVER_NOOPTIMIZE +!if "${NSIS_CHAR_SIZE}" > 1 +!define /ReDef AtMostWin95 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWin98 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWinME '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin95 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin98 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinME '"" LogicLib_AlwaysFalse ""' +!endif +!if "${NSIS_PTR_SIZE}" > 4 +!define /ReDef AtMostWin95 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWin98 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWinME '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWinNT4 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin95 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin98 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinME '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinNT4 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtLeastWin95 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin98 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWinME '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWinNT4 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin2000 '"" LogicLib_AlwaysTrue ""' +!endif +!ifdef NSIS_ARM | NSIS_ARM32 | NSIS_ARMNT | NSIS_ARM64 +!define /ReDef AtMostWin2000 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWinXP '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWin2003 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWinVista '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtMostWin7 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin95 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin98 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinME '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinNT4 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin2000 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinXP '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin2003 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWinVista '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin2008 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin7 '"" LogicLib_AlwaysFalse ""' +!define /ReDef IsWin2008R2 '"" LogicLib_AlwaysFalse ""' +!define /ReDef AtLeastWin95 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin98 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWinME '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWinNT4 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin2000 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWinXP '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin2003 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWinVista '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin2008 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin7 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin2008R2 '"" LogicLib_AlwaysTrue ""' +!define /ReDef AtLeastWin8 '"" LogicLib_AlwaysTrue ""' +!endif +!endif +!macroend + +# lazy initialization macro + +!define /IfNDef __WinVer_GWV GetWinVer + +!macro __WinVer_InitVars_NEW + !insertmacro __WinVer_DeclareVars + !insertmacro __WinVer_Optimize + + # only calculate version once + StrCmp $__WINVERV "" _winver_noveryet + Return + _winver_noveryet: + + Push $0 + ${__WinVer_GWV} $0 Product + ${__WinVer_GWV} $__WINVERV NTDDIMajMin + IntOp $__WINVERV $__WINVERV << 16 ; _WINVER_MASKVMAJ & _WINVER_MASKVMIN + IntOp $__WINVERSP $0 & 2 + IntOp $__WINVERSP $__WINVERSP << 29 ; _WINVER_NTSRVBIT & _WINVER_NTDCBIT + !ifndef NSIS_ARM64 + IntCmp $__WINVERSP 0 notServer + IntCmpU 0x06000000 $__WINVERV "" "" not2008 ; ${If} $__WINVERV U>= 0x06000000 + IntCmpU 0x09000000 $__WINVERV not2008 not2008 "" ; ${AndIf} $__WINVERV U< 0x09000000 + IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT} ; Extra bit so Server 2008 comes after Vista SP1 that has the same minor version, same for Win7 vs 2008R2 + not2008: + Goto endServer + notServer: + IntCmp $__WINVERV 0x05020000 "" notXP64 notXP64 + StrCpy $__WINVERV 0x05010000 ; Change XP 64-bit from 5.2 to 5.1 so it's still XP + notXP64: + endServer: + !endif + + IntCmp $0 0 notNT +!if "${NSIS_PTR_SIZE}" <= 4 +!ifdef WINVER_NT4_OVER_W95 + IntCmp $__WINVERV 0x04000000 "" nt4eq95 nt4eq95 + IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT} ; change NT 4.0.reserved.0 to 4.0.reserved.1 + nt4eq95: +!endif +!endif + IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTBIT} ; _WINVER_NTBIT + IntOp $__WINVERV $__WINVERV | ${_WINVER_NTBIT} ; _WINVER_NTBIT + notNT: + + ${__WinVer_GWV} $0 Build + IntOp $__WINVERSP $__WINVERSP | $0 ; _WINVER_MASKVBLD + ${__WinVer_GWV} $0 ServicePack + IntOp $0 $0 << 16 + IntOp $__WINVERSP $__WINVERSP | $0 ; _WINVER_MASKSP + Pop $0 +!macroend + +!ifmacrondef __WinVer_Call_GetVersionEx + + !macro __WinVer_Call_GetVersionEx STRUCT_SIZE + + System::Call '*$0(i ${STRUCT_SIZE})' + System::Call kernel32::GetVersionEx(pr0)i.r3 + + !macroend + +!endif + +!macro __WinVer_InitVars_OLD + # variables + !insertmacro __WinVer_DeclareVars + !insertmacro __WinVer_Optimize + + # only calculate version once + StrCmp $__WINVERV "" _winver_noveryet + Return + _winver_noveryet: + + # push used registers on the stack + Push $0 + Push $1 ;maj + Push $2 ;min + Push $3 ;bld + Push $R0 ;temp + + # a plugin call will lock the Unicode mode, it is now safe to set the struct size + !ifdef NSIS_UNICODE + !define /redef OSVERSIONINFO_SIZE ${OSVERSIONINFOW_SIZE} + !define /redef OSVERSIONINFOEX_SIZE ${OSVERSIONINFOEXW_SIZE} + !else + !define /redef OSVERSIONINFO_SIZE ${OSVERSIONINFOA_SIZE} + !define /redef OSVERSIONINFOEX_SIZE ${OSVERSIONINFOEXA_SIZE} + !endif + + # allocate memory + System::Call '*(&i${OSVERSIONINFOEX_SIZE})p.r0' + + # use OSVERSIONINFOEX + !insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOEX_SIZE} + + IntCmp $3 0 "" _winver_ex _winver_ex + # OSVERSIONINFOEX not allowed (Win9x or NT4 w/SP < 6), use OSVERSIONINFO + !insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFO_SIZE} + _winver_ex: + + # get results from struct + System::Call '*$0(i.s,i.r1,i.r2,i.r3,i.s,&t128.s,&i2.s,&i2,&i2,&i1.s,&i1)' + + # free struct + System::Free $0 + + # win9x has major and minor info in high word of dwBuildNumber - remove it + IntOp $3 $3 & 0xFFFF + + # get dwOSVersionInfoSize + Pop $R0 + + # get dwPlatformId + Pop $0 + + # NT? + IntCmp $0 ${VER_PLATFORM_WIN32_NT} "" _winver_notnt _winver_notnt + IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTBIT} + IntOp $__WINVERV $__WINVERV | ${_WINVER_NTBIT} + _winver_notnt: +!ifndef NSIS_UNICODE +!if "${NSIS_PTR_SIZE}" <= 4 + # get service pack information + IntCmp $0 ${VER_PLATFORM_WIN32_NT} _winver_nt "" _winver_nt # win9x + + # get szCSDVersion + Pop $0 + + # copy second char + StrCpy $0 $0 1 1 + + # discard invalid wServicePackMajor and wProductType + Pop $R0 + Pop $R0 + + # switch + StrCmp $0 'A' "" +3 + StrCpy $0 1 + Goto _winver_sp_done + StrCmp $0 'B' "" +3 + StrCpy $0 2 + Goto _winver_sp_done + StrCmp $0 'C' "" +3 + StrCpy $0 3 + Goto _winver_sp_done + StrCpy $0 0 + Goto _winver_sp_done + + _winver_nt: # nt +!endif #~ 32-bit +!endif #~ ANSI + IntCmp $R0 ${OSVERSIONINFOEX_SIZE} "" _winver_sp_noex _winver_sp_noex + + # discard szCSDVersion + Pop $0 + + # get wProductType + Exch + Pop $0 + + # is server? + IntCmp $0 ${VER_NT_WORKSTATION} _winver_nt_notsrv + IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTSRVBIT} + IntCmp $0 ${VER_NT_DOMAIN_CONTROLLER} "" _winver_nt_notdc _winver_nt_notdc + IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTDCBIT} + _winver_nt_notdc: + _winver_nt_notsrv: + + # get wServicePackMajor + Pop $0 + + # done with sp + Goto _winver_sp_done + + _winver_sp_noex: # OSVERSIONINFO, not OSVERSIONINFOEX + + #### TODO + ## For IsServerOS to support < NT4SP6, we need to check the registry + ## here to see if we are a server and/or DC + + # get szCSDVersion + Pop $0 + + # discard invalid wServicePackMajor and wProductType + Pop $R0 + Pop $R0 + + # get service pack number from text + StrCpy $R0 $0 13 + StrCmp $R0 "Service Pack " "" +3 + StrCpy $0 $0 "" 13 # cut "Service Pack " + Goto +2 + StrCpy $0 0 # no service pack + +!ifdef WINVER_NT4_OVER_W95 + IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT} ; change NT 4.0.reserved.0 to 4.0.reserved.1 +!endif + + _winver_sp_done: + + # store service pack + IntOp $0 $0 << 16 + IntOp $__WINVERSP $__WINVERSP | $0 + + ### now for the version + + # is server? + IntOp $0 $__WINVERSP & ${_WINVER_NTSRVBIT} + + # windows xp x64? + IntCmp $0 0 "" _winver_not_xp_x64 _winver_not_xp_x64 # not server + IntCmp $1 5 "" _winver_not_xp_x64 _winver_not_xp_x64 # maj 5 + IntCmp $2 2 "" _winver_not_xp_x64 _winver_not_xp_x64 # min 2 + # change XP x64 from 5.2 to 5.1 so it's still XP + StrCpy $2 1 + _winver_not_xp_x64: + + # server 2008? + IntCmp $0 0 _winver_not_ntserver # server + IntCmp 6 $1 "" "" _winver_not_ntserver # maj 6 + # extra bit so Server 2008 comes after Vista SP1 that has the same minor version, same for Win7 vs 2008R2 + IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT} + _winver_not_ntserver: + + # pack version + IntOp $1 $1 << 24 # VerMajor + IntOp $__WINVERV $__WINVERV | $1 + IntOp $0 $2 << 16 + IntOp $__WINVERV $__WINVERV | $0 # VerMinor + IntOp $__WINVERSP $__WINVERSP | $3 # VerBuild + + # restore registers + Pop $R0 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + +!macroend + +!macro __WinVer_InitVars + !ifndef WinVer_v3_7 + !insertmacro __WinVer_InitVars_NEW + !else + !insertmacro __WinVer_InitVars_OLD + !endif +!macroend + +# version comparison LogicLib macros + +!macro _WinVerAtLeast _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ${CallArtificialFunction} __WinVer_InitVars + IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK} + !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` +!macroend +!macro _WinVerIs _a _b _t _f + ${CallArtificialFunction} __WinVer_InitVars + !insertmacro _= $__WINVERV `${_b}` `${_t}` `${_f}` +!macroend +!macro _WinVerAtMost _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ${CallArtificialFunction} __WinVer_InitVars + IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK} + !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` +!macroend + +!macro __WinVer_DefineOSTest Test OS Suffix + !define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}${Suffix}}` +!macroend + +!macro __WinVer_DefineOSTests Test Suffix + !insertmacro __WinVer_DefineOSTest ${Test} 95 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 98 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} ME '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} NT4 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2000 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} XP '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2003 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} VISTA '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2008 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 7 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2008R2 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 8 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2012 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 8.1 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2012R2 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 10 '${Suffix}' + !insertmacro __WinVer_DefineOSTest ${Test} 2016 '${Suffix}' + !define /IfNDef AtLeastWin11 'U>= WinVer_BuildNumCheck 22000' + !define /IfNDef AtMostWin11 'U<= WinVer_BuildNumCheck 22000' +!macroend + +!insertmacro __WinVer_DefineOSTests AtLeast "" +!insertmacro __WinVer_DefineOSTests Is _NT +!insertmacro __WinVer_DefineOSTests AtMost "" + +# version feature LogicLib macros + +!macro __WinVer_LL_IsBitSet _v _b _t _f + !insertmacro _LOGICLIB_TEMP + ${CallArtificialFunction} __WinVer_InitVars + IntOp $_LOGICLIB_TEMP ${_v} & ${_b} + !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` +!macroend + +!define IsNT `$__WINVERSP _WinVer_LL_IsBitSet ${_WINVER_NTBIT}` +!define IsServerOS `$__WINVERSP _WinVer_LL_IsBitSet ${_WINVER_NTSRVBIT}` +!define IsDomainController `$__WINVERSP _WinVer_LL_IsBitSet ${_WINVER_NTDCBIT}` + +# service pack macros + +!macro _WinVer_GetServicePackLevel OUTVAR + !ifndef WinVer_v3_7 + ${__WinVer_GWV} ${OUTVAR} ServicePack + !else + ${CallArtificialFunction} __WinVer_InitVars + IntOp ${OUTVAR} $__WINVERSP & ${_WINVER_MASKSP} + IntOp ${OUTVAR} ${OUTVAR} >> 16 + !endif +!macroend +!define WinVerGetServicePackLevel '!insertmacro _WinVer_GetServicePackLevel ' + +!macro _AtLeastServicePack _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP + !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` +!macroend +!define AtLeastServicePack `"" AtLeastServicePack` + +!macro _AtMostServicePack _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP + !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` +!macroend +!define AtMostServicePack `"" AtMostServicePack` + +!macro _IsServicePack _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP + !insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` +!macroend +!define IsServicePack `"" IsServicePack` + +# special feature LogicLib macros + +!macro _WinVer_SysMetricCheck m _b _t _f + !insertmacro _LOGICLIB_TEMP + System::Call user32::GetSystemMetrics(i${m})i.s + pop $_LOGICLIB_TEMP + !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` +!macroend + +!define IsWin2003R2 `${SM_SERVERR2} WinVer_SysMetricCheck ""` +!define IsStarterEdition `${SM_STARTER} WinVer_SysMetricCheck ""` +!define OSHasMediaCenter `${SM_MEDIACENTER} WinVer_SysMetricCheck ""` +!define OSHasTabletSupport `${SM_TABLETPC} WinVer_SysMetricCheck ""` +!define IsSafeBootMode `67 WinVer_SysMetricCheck ""` + +# version retrieval macros + +!macro __WinVer_GetVer var rshift mask outvar + ${CallArtificialFunction} __WinVer_InitVars + !if "${mask}" != "" + IntOp ${outvar} ${var} & ${mask} + !if "${rshift}" != "" + IntOp ${outvar} ${outvar} >> ${rshift} + !endif + !else + IntOp ${outvar} ${var} >> ${rshift} + !endif +!macroend + +!define WinVerGetMajor '!insertmacro __WinVer_GetVer $__WINVERV 24 ${_WINVER_MASKVMAJ}' +!define WinVerGetMinor '!insertmacro __WinVer_GetVer $__WINVERV 16 ${_WINVER_MASKVMIN}' +!ifndef WinVer_v3_7 +!macro __WinVer_GetVerBuild outvar + ${__WinVer_GWV} ${outvar} Build +!macroend +!define WinVerGetBuild '!insertmacro __WinVer_GetVerBuild ' +!else +!define WinVerGetBuild '!insertmacro __WinVer_GetVer $__WINVERSP "" ${_WINVER_MASKVBLD}' +!endif + +!macro _WinVer_BuildNumCheck op num _t _f + !insertmacro _LOGICLIB_TEMP + ${WinVerGetBuild} $_LOGICLIB_TEMP + !insertmacro _${op} $_LOGICLIB_TEMP ${num} `${_t}` `${_f}` +!macroend +!define AtLeastBuild `U>= WinVer_BuildNumCheck ` +!define AtMostBuild `U<= WinVer_BuildNumCheck ` + +# Windows as a Service macros + +!macro WinVer_WaaS id build fu codename marketingname + !if "${id}" == "?" + # Ignore + !else if "${id}" == ${fu} + !define WinVer_WaaS_Build ${build} + !else if "${id}" == "${codename}" + !define WinVer_WaaS_Build ${build} + !else if "${id}" == "${marketingname}" + !define WinVer_WaaS_Build ${build} + !endif +!macroend + +!macro _WinVer_WaaS op id _t _f + !insertmacro WinVer_WaaS "${id}" 10240 1507 "Threshold" "Windows 10" ; 10240.16384 + !insertmacro WinVer_WaaS "${id}" 10586 1511 "Threshold 2" "November Update" ; 10586.0? + !insertmacro WinVer_WaaS "${id}" 14393 1607 "Redstone" "Anniversary Update" ; 14393.10 + !insertmacro WinVer_WaaS "${id}" 15063 1703 "Redstone 2" "Creators Update" ; 15063.13 + !insertmacro WinVer_WaaS "${id}" 16299 1709 "Redstone 3" "Fall Creators Update" ; 16299.19 + !insertmacro WinVer_WaaS "${id}" 17134 1803 "Redstone 4" "April 2018 Update" ; 17134.1 + !insertmacro WinVer_WaaS "${id}" 17763 1809 "Redstone 5" "October 2018 Update" ; 17763.1 + !insertmacro WinVer_WaaS "${id}" 18362 1903 "19H1" "May 2019 Update" ; 18362.116 + !insertmacro WinVer_WaaS "${id}" 18363 1909 "19H2" "November 2019 Update" ; 18363.418 + !insertmacro WinVer_WaaS "${id}" 19041 2004 "20H1" "May 2020 Update" ; 19041.264? + !insertmacro WinVer_WaaS "${id}" 19042 20H2 "20H2" "October 2020 Update" ; 19042.572? A.K.A. 2009 + !insertmacro WinVer_WaaS "${id}" 19043 21H1 "21H1" "May 2021 Update" ; 19043.928 + !insertmacro WinVer_WaaS "${id}" 19044 21H2 "21H2" "November 2021 Update" ; 19044.1288 + !insertmacro WinVer_WaaS "${id}" 19045 "?" "?" "October 2022 Update" ; 19045.2130 22H2 + !insertmacro WinVer_WaaS "${id}" 22000 "?" "Sun Valley" "Windows 11" ; 10.0.22000.194 21H2 + !insertmacro WinVer_WaaS "${id}" 22621 22H2 "Sun Valley 2" "2022 Update" ; 10.0.22621.521 + + !ifmacrodef WinVerExternal_WaaS_MapToBuild + !insertmacro WinVerExternal_WaaS_MapToBuild ${op} "${id}" WinVer_WaaS_Build + !endif + !define /IfNDef WinVer_WaaS_Build 0 + !if "${WinVer_WaaS_Build}" <= 9600 + !error 'WinVer: Unknown WaaS name: ${id}' + !endif + !insertmacro _WinVer_BuildNumCheck ${op} ${WinVer_WaaS_Build} `${_t}` `${_f}` + !undef WinVer_WaaS_Build +!macroend + +!define AtLeastWaaS `U>= WinVer_WaaS ` +!define AtMostWaaS `U<= WinVer_WaaS ` + +!endif # !___WINVER__NSH___ + +!verbose pop diff --git a/tools/Include/WordFunc.nsh b/tools/Include/WordFunc.nsh new file mode 100644 index 0000000..0cb645a --- /dev/null +++ b/tools/Include/WordFunc.nsh @@ -0,0 +1,1800 @@ +/* +_____________________________________________________________________________ + + Word Functions Header v3.3 +_____________________________________________________________________________ + + 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) + + See documentation for more information about the following functions. + + Usage in script: + 1. !include "WordFunc.nsh" + 2. [Section|Function] + ${WordFunction} "Param1" "Param2" "..." $var + [SectionEnd|FunctionEnd] + + + WordFunction=[WordFind|WordFindS|WordFind2X|WordFind2XS|WordFind3X|WordFind3XS| + WordReplace|WordReplaceS|WordAdd|WordAddS|WordInsert|WordInsertS| + StrFilter|StrFilterS|VersionCompare|VersionConvert] + +_____________________________________________________________________________ + + Thanks to: +_____________________________________________________________________________ + +WordFind3X + Afrow UK (Based on his idea of Function "StrSortLR") +StrFilter + sunjammer (Function "StrUpper") +VersionCompare + Afrow UK (Based on his Function "VersionCheckNew2") +VersionConvert + Afrow UK (Based on his idea of Function "CharIndexReplace") +*/ + + +;_____________________________________________________________________________ +; +; Macros +;_____________________________________________________________________________ +; +; Change log window verbosity (default: 3=no script) +; +; Example: +; !include "WordFunc.nsh" +; !insertmacro WordFind +; ${WORDFUNC_VERBOSE} 4 # all verbosity +; !insertmacro WordReplace +; ${WORDFUNC_VERBOSE} 3 # no script + +!ifndef WORDFUNC_INCLUDED + +!verbose push 3 +!define /IfNDef _WORDFUNC_VERBOSE 3 +!verbose ${_WORDFUNC_VERBOSE} +!define WORDFUNC_VERBOSE `!insertmacro WORDFUNC_VERBOSE` + +!define WORDFUNC_INCLUDED + +!include Util.nsh + + +!macro WORDFUNC_VERBOSE _VERBOSE + !verbose push 3 + !define /ReDef _WORDFUNC_VERBOSE ${_VERBOSE} + !verbose pop +!macroend + + +!macro WordFindCall _ART _STRING _DELIMITER _OPTION _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER}` + Push `${_OPTION}` + ${CallArtificialFunction}${_ART} WordFind_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordFindSCall _ART _STRING _DELIMITER _OPTION _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER}` + Push `${_OPTION}` + ${CallArtificialFunction}${_ART} WordFindS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER1}` + Push `${_DELIMITER2}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordFind2X_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordFind2XSCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER1}` + Push `${_DELIMITER2}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordFind2XS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordFind3XCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER1}` + Push `${_CENTER}` + Push `${_DELIMITER2}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordFind3X_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordFind3XSCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER1}` + Push `${_CENTER}` + Push `${_DELIMITER2}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordFind3XS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordReplaceCall _STRING _WORD1 _WORD2 _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_WORD1}` + Push `${_WORD2}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordReplace_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordReplaceSCall _STRING _WORD1 _WORD2 _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_WORD1}` + Push `${_WORD2}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordReplaceS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING1}` + Push `${_DELIMITER}` + Push `${_STRING2}` + ${CallArtificialFunction} WordAdd_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING1}` + Push `${_DELIMITER}` + Push `${_STRING2}` + ${CallArtificialFunction} WordAddS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER}` + Push `${_WORD}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordInsert_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordInsertSCall _STRING _DELIMITER _WORD _NUMBER _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_DELIMITER}` + Push `${_WORD}` + Push `${_NUMBER}` + ${CallArtificialFunction} WordInsertS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro StrFilterCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_FILTER}` + Push `${_INCLUDE}` + Push `${_EXCLUDE}` + ${CallArtificialFunction} StrFilter_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro StrFilterSCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_STRING}` + Push `${_FILTER}` + Push `${_INCLUDE}` + Push `${_EXCLUDE}` + ${CallArtificialFunction} StrFilterS_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro VersionCompareCall _VER1 _VER2 _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_VER1}` + Push `${_VER2}` + ${CallArtificialFunction} VersionCompare_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro VersionConvertCall _VERSION _CHARLIST _RESULT + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + Push `${_VERSION}` + Push `${_CHARLIST}` + ${CallArtificialFunction} VersionConvert_ + Pop ${_RESULT} + !verbose pop +!macroend + +!macro WordFindBody _WORDFUNC_S + Exch $1 + Exch + Exch $0 + Exch + Exch 2 + Exch $R0 + Exch 2 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R1 + Push $R2 + ClearErrors + + StrCpy $9 '' + StrCpy $2 $1 1 + StrCpy $1 $1 '' 1 + StrCmp $2 'E' 0 +3 + StrCpy $9 E + goto -4 + + StrCpy $3 '' + StrCmp${_WORDFUNC_S} $2 '+' +6 + StrCmp${_WORDFUNC_S} $2 '-' +5 + StrCmp${_WORDFUNC_S} $2 '/' WordFunc_WordFind${_WORDFUNC_S}_restart + StrCmp${_WORDFUNC_S} $2 '#' WordFunc_WordFind${_WORDFUNC_S}_restart + StrCmp${_WORDFUNC_S} $2 '*' WordFunc_WordFind${_WORDFUNC_S}_restart + goto WordFunc_WordFind${_WORDFUNC_S}_error3 + + StrCpy $4 $1 1 -1 + StrCmp${_WORDFUNC_S} $4 '*' +4 + StrCmp${_WORDFUNC_S} $4 '}' +3 + StrCmp${_WORDFUNC_S} $4 '{' +2 + goto +4 + StrCpy $1 $1 -1 + StrCpy $3 '$4$3' + goto -7 + StrCmp${_WORDFUNC_S} $3 '*' WordFunc_WordFind${_WORDFUNC_S}_error3 + StrCmp${_WORDFUNC_S} $3 '**' WordFunc_WordFind${_WORDFUNC_S}_error3 + StrCmp${_WORDFUNC_S} $3 '}{' WordFunc_WordFind${_WORDFUNC_S}_error3 + IntOp $1 $1 + 0 + StrCmp${_WORDFUNC_S} $1 0 WordFunc_WordFind${_WORDFUNC_S}_error2 + + WordFunc_WordFind${_WORDFUNC_S}_restart: + StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind${_WORDFUNC_S}_error1 + StrCpy $4 0 + StrCpy $5 0 + StrCpy $6 0 + StrLen $7 $0 + goto WordFunc_WordFind${_WORDFUNC_S}_loop + + WordFunc_WordFind${_WORDFUNC_S}_preloop: + IntOp $6 $6 + 1 + + WordFunc_WordFind${_WORDFUNC_S}_loop: + StrCpy $8 $R0 $7 $6 + StrCmp${_WORDFUNC_S} $8$5 0 WordFunc_WordFind${_WORDFUNC_S}_error1 + StrLen $R2 $8 + IntCmp $R2 0 +2 + StrCmp${_WORDFUNC_S} $8 $0 +5 WordFunc_WordFind${_WORDFUNC_S}_preloop + StrCmp${_WORDFUNC_S} $3 '{' WordFunc_WordFind${_WORDFUNC_S}_minus + StrCmp${_WORDFUNC_S} $3 '}' WordFunc_WordFind${_WORDFUNC_S}_minus + StrCmp${_WORDFUNC_S} $2 '*' WordFunc_WordFind${_WORDFUNC_S}_minus + StrCmp${_WORDFUNC_S} $5 $6 WordFunc_WordFind${_WORDFUNC_S}_minus +5 + StrCmp${_WORDFUNC_S} $3 '{' +4 + StrCmp${_WORDFUNC_S} $3 '}' +3 + StrCmp${_WORDFUNC_S} $2 '*' +2 + StrCmp${_WORDFUNC_S} $5 $6 WordFunc_WordFind${_WORDFUNC_S}_nextword + IntOp $4 $4 + 1 + StrCmp${_WORDFUNC_S} $2$4 +$1 WordFunc_WordFind${_WORDFUNC_S}_plus + StrCmp${_WORDFUNC_S} $2 '/' 0 WordFunc_WordFind${_WORDFUNC_S}_nextword + IntOp $8 $6 - $5 + StrCpy $8 $R0 $8 $5 + StrCmp${_WORDFUNC_S} $1 $8 0 WordFunc_WordFind${_WORDFUNC_S}_nextword + StrCpy $R1 $4 + goto WordFunc_WordFind${_WORDFUNC_S}_end + WordFunc_WordFind${_WORDFUNC_S}_nextword: + IntOp $6 $6 + $7 + StrCpy $5 $6 + goto WordFunc_WordFind${_WORDFUNC_S}_loop + + WordFunc_WordFind${_WORDFUNC_S}_minus: + StrCmp${_WORDFUNC_S} $2 '-' 0 WordFunc_WordFind${_WORDFUNC_S}_sum + StrCpy $2 '+' + IntOp $1 $4 - $1 + IntOp $1 $1 + 1 + IntCmp $1 0 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_restart + WordFunc_WordFind${_WORDFUNC_S}_sum: + StrCmp${_WORDFUNC_S} $2 '#' 0 WordFunc_WordFind${_WORDFUNC_S}_sumdelim + StrCpy $R1 $4 + goto WordFunc_WordFind${_WORDFUNC_S}_end + WordFunc_WordFind${_WORDFUNC_S}_sumdelim: + StrCmp${_WORDFUNC_S} $2 '*' 0 WordFunc_WordFind${_WORDFUNC_S}_error2 + StrCpy $R1 $4 + goto WordFunc_WordFind${_WORDFUNC_S}_end + + WordFunc_WordFind${_WORDFUNC_S}_plus: + StrCmp${_WORDFUNC_S} $3 '' 0 +4 + IntOp $6 $6 - $5 + StrCpy $R1 $R0 $6 $5 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '{' 0 +3 + StrCpy $R1 $R0 $6 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '}' 0 +4 + IntOp $6 $6 + $7 + StrCpy $R1 $R0 '' $6 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '{*' +2 + StrCmp${_WORDFUNC_S} $3 '*{' 0 +3 + StrCpy $R1 $R0 $6 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '*}' +2 + StrCmp${_WORDFUNC_S} $3 '}*' 0 +3 + StrCpy $R1 $R0 '' $5 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '}}' 0 +3 + StrCpy $R1 $R0 '' $6 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '{{' 0 +3 + StrCpy $R1 $R0 $5 + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $3 '{}' 0 WordFunc_WordFind${_WORDFUNC_S}_error3 + StrLen $3 $R0 + StrCmp${_WORDFUNC_S} $3 $6 0 +3 + StrCpy $0 '' + goto +2 + IntOp $6 $6 + $7 + StrCpy $8 $R0 '' $6 + StrCmp${_WORDFUNC_S} $4$8 1 +6 + StrCmp${_WORDFUNC_S} $4 1 +2 +7 + IntOp $6 $6 + $7 + StrCpy $3 $R0 $7 $6 + StrCmp${_WORDFUNC_S} $3 '' +2 + StrCmp${_WORDFUNC_S} $3 $0 -3 +3 + StrCpy $R1 '' + goto WordFunc_WordFind${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $5 0 0 +3 + StrCpy $0 '' + goto +2 + IntOp $5 $5 - $7 + StrCpy $3 $R0 $5 + StrCpy $R1 '$3$0$8' + goto WordFunc_WordFind${_WORDFUNC_S}_end + + WordFunc_WordFind${_WORDFUNC_S}_error3: + StrCpy $R1 3 + goto WordFunc_WordFind${_WORDFUNC_S}_error + WordFunc_WordFind${_WORDFUNC_S}_error2: + StrCpy $R1 2 + goto WordFunc_WordFind${_WORDFUNC_S}_error + WordFunc_WordFind${_WORDFUNC_S}_error1: + StrCpy $R1 1 + WordFunc_WordFind${_WORDFUNC_S}_error: + StrCmp $9 'E' 0 +3 + SetErrors + + WordFunc_WordFind${_WORDFUNC_S}_end: + StrCpy $R0 $R1 + + Pop $R2 + Pop $R1 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define WordFind `!insertmacro WordFindCall ''` +!define un.WordFind `!insertmacro WordFindCall ''` + +!macro WordFind +!macroend + +!macro un.WordFind +!macroend + +!macro WordFind_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordFindBody '' + + !verbose pop +!macroend + +!define WordFindS `!insertmacro WordFindSCall ''` +!define un.WordFindS `!insertmacro WordFindSCall ''` + +!macro WordFindS +!macroend + +!macro un.WordFindS +!macroend + +!macro WordFindS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordFindBody 'S' + + !verbose pop +!macroend + +!macro WordFind2XBody _WORDFUNC_S + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Exch 3 + Exch $R0 + Exch 3 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R1 + Push $R2 + ClearErrors + + StrCpy $R2 '' + StrCpy $3 $2 1 + StrCpy $2 $2 '' 1 + StrCmp $3 'E' 0 +3 + StrCpy $R2 E + goto -4 + + StrCmp${_WORDFUNC_S} $3 '+' +5 + StrCmp${_WORDFUNC_S} $3 '-' +4 + StrCmp${_WORDFUNC_S} $3 '#' WordFunc_WordFind2X${_WORDFUNC_S}_restart + StrCmp${_WORDFUNC_S} $3 '/' WordFunc_WordFind2X${_WORDFUNC_S}_restart + goto WordFunc_WordFind2X${_WORDFUNC_S}_error3 + + StrCpy $4 $2 2 -2 + StrCmp${_WORDFUNC_S} $4 '{{' +9 + StrCmp${_WORDFUNC_S} $4 '}}' +8 + StrCmp${_WORDFUNC_S} $4 '{*' +7 + StrCmp${_WORDFUNC_S} $4 '*{' +6 + StrCmp${_WORDFUNC_S} $4 '*}' +5 + StrCmp${_WORDFUNC_S} $4 '}*' +4 + StrCmp${_WORDFUNC_S} $4 '{}' +3 + StrCpy $4 '' + goto +2 + StrCpy $2 $2 -2 + IntOp $2 $2 + 0 + StrCmp${_WORDFUNC_S} $2 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 + + WordFunc_WordFind2X${_WORDFUNC_S}_restart: + StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind2X${_WORDFUNC_S}_error1 + StrCpy $5 -1 + StrCpy $6 0 + StrCpy $7 '' + StrLen $8 $0 + StrLen $9 $1 + + WordFunc_WordFind2X${_WORDFUNC_S}_loop: + IntOp $5 $5 + 1 + + WordFunc_WordFind2X${_WORDFUNC_S}_delim1: + StrCpy $R1 $R0 $8 $5 + StrCmp${_WORDFUNC_S} $R1$6 0 WordFunc_WordFind2X${_WORDFUNC_S}_error1 + StrCmp${_WORDFUNC_S} $R1 '' WordFunc_WordFind2X${_WORDFUNC_S}_minus + StrCmp${_WORDFUNC_S} $R1 $0 +2 + StrCmp${_WORDFUNC_S} $7 '' WordFunc_WordFind2X${_WORDFUNC_S}_loop WordFunc_WordFind2X${_WORDFUNC_S}_delim2 + StrCmp${_WORDFUNC_S} $0 $1 0 +2 + StrCmp${_WORDFUNC_S} $7 '' 0 WordFunc_WordFind2X${_WORDFUNC_S}_delim2 + IntOp $7 $5 + $8 + StrCpy $5 $7 + goto WordFunc_WordFind2X${_WORDFUNC_S}_delim1 + + WordFunc_WordFind2X${_WORDFUNC_S}_delim2: + StrCpy $R1 $R0 $9 $5 + StrCmp${_WORDFUNC_S} $R1 $1 0 WordFunc_WordFind2X${_WORDFUNC_S}_loop + IntOp $6 $6 + 1 + StrCmp${_WORDFUNC_S} $3$6 '+$2' WordFunc_WordFind2X${_WORDFUNC_S}_plus + StrCmp${_WORDFUNC_S} $3 '/' 0 WordFunc_WordFind2X${_WORDFUNC_S}_nextword + IntOp $R1 $5 - $7 + StrCpy $R1 $R0 $R1 $7 + StrCmp${_WORDFUNC_S} $R1 $2 0 +3 + StrCpy $R1 $6 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + WordFunc_WordFind2X${_WORDFUNC_S}_nextword: + IntOp $5 $5 + $9 + StrCpy $7 '' + goto WordFunc_WordFind2X${_WORDFUNC_S}_delim1 + + WordFunc_WordFind2X${_WORDFUNC_S}_minus: + StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordFind2X${_WORDFUNC_S}_sum + StrCpy $3 + + IntOp $2 $6 - $2 + IntOp $2 $2 + 1 + IntCmp $2 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_restart + WordFunc_WordFind2X${_WORDFUNC_S}_sum: + StrCmp${_WORDFUNC_S} $3 '#' 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 + StrCpy $R1 $6 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + + WordFunc_WordFind2X${_WORDFUNC_S}_plus: + StrCmp${_WORDFUNC_S} $4 '' 0 +4 + IntOp $R1 $5 - $7 + StrCpy $R1 $R0 $R1 $7 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + IntOp $5 $5 + $9 + IntOp $7 $7 - $8 + StrCmp${_WORDFUNC_S} $4 '{*' +2 + StrCmp${_WORDFUNC_S} $4 '*{' 0 +3 + StrCpy $R1 $R0 $5 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $4 '*}' +2 + StrCmp${_WORDFUNC_S} $4 '}*' 0 +3 + StrCpy $R1 $R0 '' $7 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $4 '}}' 0 +3 + StrCpy $R1 $R0 '' $5 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $4 '{{' 0 +3 + StrCpy $R1 $R0 $7 + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $4 '{}' 0 WordFunc_WordFind2X${_WORDFUNC_S}_error3 + StrCpy $5 $R0 '' $5 + StrCpy $7 $R0 $7 + StrCpy $R1 '$7$5' + goto WordFunc_WordFind2X${_WORDFUNC_S}_end + + WordFunc_WordFind2X${_WORDFUNC_S}_error3: + StrCpy $R1 3 + goto WordFunc_WordFind2X${_WORDFUNC_S}_error + WordFunc_WordFind2X${_WORDFUNC_S}_error2: + StrCpy $R1 2 + goto WordFunc_WordFind2X${_WORDFUNC_S}_error + WordFunc_WordFind2X${_WORDFUNC_S}_error1: + StrCpy $R1 1 + WordFunc_WordFind2X${_WORDFUNC_S}_error: + StrCmp $R2 'E' 0 +3 + SetErrors + + WordFunc_WordFind2X${_WORDFUNC_S}_end: + StrCpy $R0 $R1 + + Pop $R2 + Pop $R1 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define WordFind2X `!insertmacro WordFind2XCall` +!define un.WordFind2X `!insertmacro WordFind2XCall` + +!macro WordFind2X +!macroend + +!macro un.WordFind2X +!macroend + +!macro WordFind2X_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordFind2XBody '' + + !verbose pop +!macroend + +!define WordFind2XS `!insertmacro WordFind2XSCall` +!define un.WordFind2XS `!insertmacro WordFind2XSCall` + +!macro WordFind2XS +!macroend + +!macro un.WordFind2XS +!macroend + +!macro WordFind2XS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordFind2XBody 'S' + + !verbose pop +!macroend + +!macro WordFind3XBody _WORDFUNC_S + Exch $3 + Exch + Exch $2 + Exch + Exch 2 + Exch $1 + Exch 2 + Exch 3 + Exch $0 + Exch 3 + Exch 4 + Exch $R0 + Exch 4 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + ClearErrors + + StrCpy $R5 '' + StrCpy $4 $3 1 + StrCpy $3 $3 '' 1 + StrCmp $4 'E' 0 +3 + StrCpy $R5 E + goto -4 + + StrCmp${_WORDFUNC_S} $4 '+' +5 + StrCmp${_WORDFUNC_S} $4 '-' +4 + StrCmp${_WORDFUNC_S} $4 '#' WordFunc_WordFind3X${_WORDFUNC_S}_restart + StrCmp${_WORDFUNC_S} $4 '/' WordFunc_WordFind3X${_WORDFUNC_S}_restart + goto WordFunc_WordFind3X${_WORDFUNC_S}_error3 + + StrCpy $5 $3 2 -2 + StrCmp${_WORDFUNC_S} $5 '{{' +9 + StrCmp${_WORDFUNC_S} $5 '}}' +8 + StrCmp${_WORDFUNC_S} $5 '{*' +7 + StrCmp${_WORDFUNC_S} $5 '*{' +6 + StrCmp${_WORDFUNC_S} $5 '*}' +5 + StrCmp${_WORDFUNC_S} $5 '}*' +4 + StrCmp${_WORDFUNC_S} $5 '{}' +3 + StrCpy $5 '' + goto +2 + StrCpy $3 $3 -2 + IntOp $3 $3 + 0 + StrCmp${_WORDFUNC_S} $3 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 + + WordFunc_WordFind3X${_WORDFUNC_S}_restart: + StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind3X${_WORDFUNC_S}_error1 + StrCpy $6 -1 + StrCpy $7 0 + StrCpy $8 '' + StrCpy $9 '' + StrLen $R1 $0 + StrLen $R2 $1 + StrLen $R3 $2 + + WordFunc_WordFind3X${_WORDFUNC_S}_loop: + IntOp $6 $6 + 1 + + WordFunc_WordFind3X${_WORDFUNC_S}_delim1: + StrCpy $R4 $R0 $R1 $6 + StrCmp${_WORDFUNC_S} $R4$7 0 WordFunc_WordFind3X${_WORDFUNC_S}_error1 + StrCmp${_WORDFUNC_S} $R4 '' WordFunc_WordFind3X${_WORDFUNC_S}_minus + StrCmp${_WORDFUNC_S} $R4 $0 +2 + StrCmp${_WORDFUNC_S} $8 '' WordFunc_WordFind3X${_WORDFUNC_S}_loop WordFunc_WordFind3X${_WORDFUNC_S}_center + StrCmp${_WORDFUNC_S} $0 $1 +2 + StrCmp${_WORDFUNC_S} $0 $2 0 +2 + StrCmp${_WORDFUNC_S} $8 '' 0 WordFunc_WordFind3X${_WORDFUNC_S}_center + IntOp $8 $6 + $R1 + StrCpy $6 $8 + goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1 + + WordFunc_WordFind3X${_WORDFUNC_S}_center: + StrCmp${_WORDFUNC_S} $9 '' 0 WordFunc_WordFind3X${_WORDFUNC_S}_delim2 + StrCpy $R4 $R0 $R2 $6 + StrCmp${_WORDFUNC_S} $R4 $1 0 WordFunc_WordFind3X${_WORDFUNC_S}_loop + IntOp $9 $6 + $R2 + StrCpy $6 $9 + goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1 + + WordFunc_WordFind3X${_WORDFUNC_S}_delim2: + StrCpy $R4 $R0 $R3 $6 + StrCmp${_WORDFUNC_S} $R4 $2 0 WordFunc_WordFind3X${_WORDFUNC_S}_loop + IntOp $7 $7 + 1 + StrCmp${_WORDFUNC_S} $4$7 '+$3' WordFunc_WordFind3X${_WORDFUNC_S}_plus + StrCmp${_WORDFUNC_S} $4 '/' 0 WordFunc_WordFind3X${_WORDFUNC_S}_nextword + IntOp $R4 $6 - $8 + StrCpy $R4 $R0 $R4 $8 + StrCmp${_WORDFUNC_S} $R4 $3 0 +3 + StrCpy $R4 $7 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + WordFunc_WordFind3X${_WORDFUNC_S}_nextword: + IntOp $6 $6 + $R3 + StrCpy $8 '' + StrCpy $9 '' + goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1 + + WordFunc_WordFind3X${_WORDFUNC_S}_minus: + StrCmp${_WORDFUNC_S} $4 '-' 0 WordFunc_WordFind3X${_WORDFUNC_S}_sum + StrCpy $4 + + IntOp $3 $7 - $3 + IntOp $3 $3 + 1 + IntCmp $3 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_restart + WordFunc_WordFind3X${_WORDFUNC_S}_sum: + StrCmp${_WORDFUNC_S} $4 '#' 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 + StrCpy $R4 $7 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + + WordFunc_WordFind3X${_WORDFUNC_S}_plus: + StrCmp${_WORDFUNC_S} $5 '' 0 +4 + IntOp $R4 $6 - $8 + StrCpy $R4 $R0 $R4 $8 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + IntOp $6 $6 + $R3 + IntOp $8 $8 - $R1 + StrCmp${_WORDFUNC_S} $5 '{*' +2 + StrCmp${_WORDFUNC_S} $5 '*{' 0 +3 + StrCpy $R4 $R0 $6 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $5 '*}' +2 + StrCmp${_WORDFUNC_S} $5 '}*' 0 +3 + StrCpy $R4 $R0 '' $8 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $5 '}}' 0 +3 + StrCpy $R4 $R0 '' $6 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $5 '{{' 0 +3 + StrCpy $R4 $R0 $8 + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $5 '{}' 0 WordFunc_WordFind3X${_WORDFUNC_S}_error3 + StrCpy $6 $R0 '' $6 + StrCpy $8 $R0 $8 + StrCpy $R4 '$8$6' + goto WordFunc_WordFind3X${_WORDFUNC_S}_end + + WordFunc_WordFind3X${_WORDFUNC_S}_error3: + StrCpy $R4 3 + goto WordFunc_WordFind3X${_WORDFUNC_S}_error + WordFunc_WordFind3X${_WORDFUNC_S}_error2: + StrCpy $R4 2 + goto WordFunc_WordFind3X${_WORDFUNC_S}_error + WordFunc_WordFind3X${_WORDFUNC_S}_error1: + StrCpy $R4 1 + WordFunc_WordFind3X${_WORDFUNC_S}_error: + StrCmp $R5 'E' 0 +3 + SetErrors + + WordFunc_WordFind3X${_WORDFUNC_S}_end: + StrCpy $R0 $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define WordFind3X `!insertmacro WordFind3XCall` +!define un.WordFind3X `!insertmacro WordFind3XCall` + +!macro WordFind3X +!macroend + +!macro un.WordFind3X +!macroend + +!macro WordFind3X_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordFind3XBody '' + + !verbose pop +!macroend + +!define WordFind3XS `!insertmacro WordFind3XSCall` +!define un.WordFind3XS `!insertmacro WordFind3XSCall` + +!macro WordFind3XS +!macroend + +!macro un.WordFind3XS +!macroend + +!macro WordFind3XS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordFind3XBody 'S' + + !verbose pop +!macroend + +!macro WordReplaceBody _WORDFUNC_S + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Exch 3 + Exch $R0 + Exch 3 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R1 + ClearErrors + + StrCpy $R1 $R0 + StrCpy $9 '' + StrCpy $3 $2 1 + StrCpy $2 $2 '' 1 + StrCmp $3 'E' 0 +3 + StrCpy $9 E + goto -4 + + StrCpy $4 $2 1 -1 + StrCpy $5 '' + StrCpy $6 '' + StrLen $7 $0 + + StrCmp${_WORDFUNC_S} $7 0 WordFunc_WordReplace${_WORDFUNC_S}_error1 + StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordReplace${_WORDFUNC_S}_error1 + StrCmp${_WORDFUNC_S} $3 '{' WordFunc_WordReplace${_WORDFUNC_S}_beginning + StrCmp${_WORDFUNC_S} $3 '}' WordFunc_WordReplace${_WORDFUNC_S}_ending WordFunc_WordReplace${_WORDFUNC_S}_errorchk + + WordFunc_WordReplace${_WORDFUNC_S}_beginning: + StrCpy $8 $R0 $7 + StrCmp${_WORDFUNC_S} $8 $0 0 +4 + StrCpy $R0 $R0 '' $7 + StrCpy $5 '$5$1' + goto -4 + StrCpy $3 $2 1 + StrCmp${_WORDFUNC_S} $3 '}' 0 WordFunc_WordReplace${_WORDFUNC_S}_merge + + WordFunc_WordReplace${_WORDFUNC_S}_ending: + StrCpy $8 $R0 '' -$7 + StrCmp${_WORDFUNC_S} $8 $0 0 +4 + StrCpy $R0 $R0 -$7 + StrCpy $6 '$6$1' + goto -4 + + WordFunc_WordReplace${_WORDFUNC_S}_merge: + StrCmp${_WORDFUNC_S} $4 '*' 0 +5 + StrCmp${_WORDFUNC_S} $5 '' +2 + StrCpy $5 $1 + StrCmp${_WORDFUNC_S} $6 '' +2 + StrCpy $6 $1 + StrCpy $R0 '$5$R0$6' + goto WordFunc_WordReplace${_WORDFUNC_S}_end + + WordFunc_WordReplace${_WORDFUNC_S}_errorchk: + StrCmp${_WORDFUNC_S} $3 '+' +2 + StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordReplace${_WORDFUNC_S}_error3 + + StrCpy $5 $2 1 + IntOp $2 $2 + 0 + StrCmp${_WORDFUNC_S} $2 0 0 WordFunc_WordReplace${_WORDFUNC_S}_one + StrCmp${_WORDFUNC_S} $5 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 + StrCpy $3 '' + + WordFunc_WordReplace${_WORDFUNC_S}_all: + StrCpy $5 0 + StrCpy $2 $R0 $7 $5 + StrCmp${_WORDFUNC_S} $2 '' +4 + StrCmp${_WORDFUNC_S} $2 $0 +6 + IntOp $5 $5 + 1 + goto -4 + StrCmp${_WORDFUNC_S} $R0 $R1 WordFunc_WordReplace${_WORDFUNC_S}_error1 + StrCpy $R0 '$3$R0' + goto WordFunc_WordReplace${_WORDFUNC_S}_end + StrCpy $2 $R0 $5 + IntOp $5 $5 + $7 + StrCmp${_WORDFUNC_S} $4 '*' 0 +3 + StrCpy $6 $R0 $7 $5 + StrCmp${_WORDFUNC_S} $6 $0 -3 + StrCpy $R0 $R0 '' $5 + StrCpy $3 '$3$2$1' + goto WordFunc_WordReplace${_WORDFUNC_S}_all + + WordFunc_WordReplace${_WORDFUNC_S}_one: + StrCpy $5 0 + StrCpy $8 0 + goto WordFunc_WordReplace${_WORDFUNC_S}_loop + + WordFunc_WordReplace${_WORDFUNC_S}_preloop: + IntOp $5 $5 + 1 + + WordFunc_WordReplace${_WORDFUNC_S}_loop: + StrCpy $6 $R0 $7 $5 + StrCmp${_WORDFUNC_S} $6$8 0 WordFunc_WordReplace${_WORDFUNC_S}_error1 + StrCmp${_WORDFUNC_S} $6 '' WordFunc_WordReplace${_WORDFUNC_S}_minus + StrCmp${_WORDFUNC_S} $6 $0 0 WordFunc_WordReplace${_WORDFUNC_S}_preloop + IntOp $8 $8 + 1 + StrCmp${_WORDFUNC_S} $3$8 +$2 WordFunc_WordReplace${_WORDFUNC_S}_found + IntOp $5 $5 + $7 + goto WordFunc_WordReplace${_WORDFUNC_S}_loop + + WordFunc_WordReplace${_WORDFUNC_S}_minus: + StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 + StrCpy $3 + + IntOp $2 $8 - $2 + IntOp $2 $2 + 1 + IntCmp $2 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 WordFunc_WordReplace${_WORDFUNC_S}_error2 WordFunc_WordReplace${_WORDFUNC_S}_one + + WordFunc_WordReplace${_WORDFUNC_S}_found: + StrCpy $3 $R0 $5 + StrCmp${_WORDFUNC_S} $4 '*' 0 +5 + StrCpy $6 $3 '' -$7 + StrCmp${_WORDFUNC_S} $6 $0 0 +3 + StrCpy $3 $3 -$7 + goto -3 + IntOp $5 $5 + $7 + StrCmp${_WORDFUNC_S} $4 '*' 0 +3 + StrCpy $6 $R0 $7 $5 + StrCmp${_WORDFUNC_S} $6 $0 -3 + StrCpy $R0 $R0 '' $5 + StrCpy $R0 '$3$1$R0' + goto WordFunc_WordReplace${_WORDFUNC_S}_end + + WordFunc_WordReplace${_WORDFUNC_S}_error3: + StrCpy $R0 3 + goto WordFunc_WordReplace${_WORDFUNC_S}_error + WordFunc_WordReplace${_WORDFUNC_S}_error2: + StrCpy $R0 2 + goto WordFunc_WordReplace${_WORDFUNC_S}_error + WordFunc_WordReplace${_WORDFUNC_S}_error1: + StrCpy $R0 1 + WordFunc_WordReplace${_WORDFUNC_S}_error: + StrCmp $9 'E' +3 + StrCpy $R0 $R1 + goto +2 + SetErrors + + WordFunc_WordReplace${_WORDFUNC_S}_end: + Pop $R1 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define WordReplace `!insertmacro WordReplaceCall` +!define un.WordReplace `!insertmacro WordReplaceCall` + +!macro WordReplace +!macroend + +!macro un.WordReplace +!macroend + +!macro WordReplace_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordReplaceBody '' + + !verbose pop +!macroend + +!define WordReplaceS `!insertmacro WordReplaceSCall` +!define un.WordReplaceS `!insertmacro WordReplaceSCall` + +!macro WordReplaceS +!macroend + +!macro un.WordReplaceS +!macroend + +!macro WordReplaceS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordReplaceBody 'S' + + !verbose pop +!macroend + +!macro WordAddBody _WORDFUNC_S + Exch $1 + Exch + Exch $0 + Exch + Exch 2 + Exch $R0 + Exch 2 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $R1 + ClearErrors + + StrCpy $7 '' + StrCpy $2 $1 1 + StrCmp $2 'E' 0 +4 + StrCpy $7 E + StrCpy $1 $1 '' 1 + goto -4 + + StrCpy $5 0 + StrCpy $R1 $R0 + StrCpy $2 $1 '' 1 + StrCpy $1 $1 1 + StrCmp${_WORDFUNC_S} $1 '+' +2 + StrCmp${_WORDFUNC_S} $1 '-' 0 WordFunc_WordAdd${_WORDFUNC_S}_error3 + + StrCmp${_WORDFUNC_S} $0 '' WordFunc_WordAdd${_WORDFUNC_S}_error1 + StrCmp${_WORDFUNC_S} $2 '' WordFunc_WordAdd${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $R0 '' 0 +5 + StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $1 '+' 0 +3 + StrCpy $R0 $2 + goto WordFunc_WordAdd${_WORDFUNC_S}_end + + WordFunc_WordAdd${_WORDFUNC_S}_loop: + IntOp $5 $5 + 1 + !insertmacro WordFind${_WORDFUNC_S}Call 2 $2 $0 E+$5 $3 + IfErrors 0 WordFunc_WordAdd${_WORDFUNC_S}_/word + StrCmp${_WORDFUNC_S} $3 2 +4 + StrCmp${_WORDFUNC_S} $3$5 11 0 +3 + StrCpy $3 $2 + goto WordFunc_WordAdd${_WORDFUNC_S}_/word + StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_end WordFunc_WordAdd${_WORDFUNC_S}_preend + + WordFunc_WordAdd${_WORDFUNC_S}_/word: + !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E/$3 $4 + IfErrors +2 + StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_delete WordFunc_WordAdd${_WORDFUNC_S}_loop + StrCmp${_WORDFUNC_S} $1$4 '-1' +2 + StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_loop +4 + StrCmp${_WORDFUNC_S} $R0 $3 0 WordFunc_WordAdd${_WORDFUNC_S}_loop + StrCpy $R0 '' + goto WordFunc_WordAdd${_WORDFUNC_S}_end + StrCmp${_WORDFUNC_S} $1$4 '+1' 0 +2 + StrCmp${_WORDFUNC_S} $R0 $3 WordFunc_WordAdd${_WORDFUNC_S}_loop + StrCmp${_WORDFUNC_S} $R0 $R1 +3 + StrCpy $R1 '$R1$0$3' + goto WordFunc_WordAdd${_WORDFUNC_S}_loop + StrLen $6 $0 + StrCpy $6 $R0 '' -$6 + StrCmp${_WORDFUNC_S} $6 $0 0 -4 + StrCpy $R1 '$R1$3' + goto WordFunc_WordAdd${_WORDFUNC_S}_loop + + WordFunc_WordAdd${_WORDFUNC_S}_delete: + !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E+$4{} $R0 + goto WordFunc_WordAdd${_WORDFUNC_S}_/word + + WordFunc_WordAdd${_WORDFUNC_S}_error3: + StrCpy $R1 3 + goto WordFunc_WordAdd${_WORDFUNC_S}_error + WordFunc_WordAdd${_WORDFUNC_S}_error1: + StrCpy $R1 1 + WordFunc_WordAdd${_WORDFUNC_S}_error: + StrCmp $7 'E' 0 WordFunc_WordAdd${_WORDFUNC_S}_end + SetErrors + + WordFunc_WordAdd${_WORDFUNC_S}_preend: + StrCpy $R0 $R1 + + WordFunc_WordAdd${_WORDFUNC_S}_end: + Pop $R1 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define WordAdd `!insertmacro WordAddCall` +!define un.WordAdd `!insertmacro WordAddCall` + +!macro WordAdd +!macroend + +!macro un.WordAdd +!macroend + +!macro WordAdd_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordAddBody '' + + !verbose pop +!macroend + +!define WordAddS `!insertmacro WordAddSCall` +!define un.WordAddS `!insertmacro WordAddSCall` + +!macro WordAddS +!macroend + +!macro un.WordAddS +!macroend + +!macro WordAddS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordAddBody 'S' + + !verbose pop +!macroend + +!macro WordInsertBody _WORDFUNC_S + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Exch 3 + Exch $R0 + Exch 3 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R1 + ClearErrors + + StrCpy $5 '' + StrCpy $6 $0 + StrCpy $7 } + + StrCpy $9 '' + StrCpy $R1 $R0 + StrCpy $3 $2 1 + StrCpy $2 $2 '' 1 + StrCmp $3 'E' 0 +3 + StrCpy $9 'E' + goto -4 + + StrCmp${_WORDFUNC_S} $3 '+' +2 + StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordInsert${_WORDFUNC_S}_error3 + IntOp $2 $2 + 0 + StrCmp${_WORDFUNC_S} $2 0 WordFunc_WordInsert${_WORDFUNC_S}_error2 + StrCmp${_WORDFUNC_S} $0 '' WordFunc_WordInsert${_WORDFUNC_S}_error1 + + StrCmp${_WORDFUNC_S} $2 1 0 WordFunc_WordInsert${_WORDFUNC_S}_two + GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_oneback + StrCmp${_WORDFUNC_S} $3 '+' WordFunc_WordInsert${_WORDFUNC_S}_call + StrCpy $7 { + goto WordFunc_WordInsert${_WORDFUNC_S}_call + WordFunc_WordInsert${_WORDFUNC_S}_oneback: + IfErrors 0 +2 + StrCpy $4 $R0 + StrCmp${_WORDFUNC_S} $3 '+' 0 +3 + StrCpy $R0 '$1$0$4' + goto WordFunc_WordInsert${_WORDFUNC_S}_end + StrCpy $R0 '$4$0$1' + goto WordFunc_WordInsert${_WORDFUNC_S}_end + + WordFunc_WordInsert${_WORDFUNC_S}_two: + IntOp $2 $2 - 1 + GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_twoback + StrCmp${_WORDFUNC_S} $3 '+' 0 WordFunc_WordInsert${_WORDFUNC_S}_call + StrCpy $7 { + goto WordFunc_WordInsert${_WORDFUNC_S}_call + WordFunc_WordInsert${_WORDFUNC_S}_twoback: + IfErrors 0 WordFunc_WordInsert${_WORDFUNC_S}_tree + StrCmp${_WORDFUNC_S} $2$4 11 0 WordFunc_WordInsert${_WORDFUNC_S}_error2 + StrCmp${_WORDFUNC_S} $3 '+' 0 +3 + StrCpy $R0 '$R0$0$1' + goto WordFunc_WordInsert${_WORDFUNC_S}_end + StrCpy $R0 '$1$0$R0' + goto WordFunc_WordInsert${_WORDFUNC_S}_end + + WordFunc_WordInsert${_WORDFUNC_S}_tree: + StrCpy $7 } + StrCpy $5 $4 + IntOp $2 $2 + 1 + GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_treeback + StrCmp${_WORDFUNC_S} $3 '+' WordFunc_WordInsert${_WORDFUNC_S}_call + StrCpy $7 { + goto WordFunc_WordInsert${_WORDFUNC_S}_call + WordFunc_WordInsert${_WORDFUNC_S}_treeback: + IfErrors 0 +3 + StrCpy $4 '' + StrCpy $6 '' + StrCmp${_WORDFUNC_S} $3 '+' 0 +3 + StrCpy $R0 '$5$0$1$6$4' + goto WordFunc_WordInsert${_WORDFUNC_S}_end + StrCpy $R0 '$4$6$1$0$5' + goto WordFunc_WordInsert${_WORDFUNC_S}_end + + WordFunc_WordInsert${_WORDFUNC_S}_call: + !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E$3$2*$7 $4 + goto $8 + + WordFunc_WordInsert${_WORDFUNC_S}_error3: + StrCpy $R0 3 + goto WordFunc_WordInsert${_WORDFUNC_S}_error + WordFunc_WordInsert${_WORDFUNC_S}_error2: + StrCpy $R0 2 + goto WordFunc_WordInsert${_WORDFUNC_S}_error + WordFunc_WordInsert${_WORDFUNC_S}_error1: + StrCpy $R0 1 + WordFunc_WordInsert${_WORDFUNC_S}_error: + StrCmp $9 'E' +3 + StrCpy $R0 $R1 + goto +2 + SetErrors + + WordFunc_WordInsert${_WORDFUNC_S}_end: + Pop $R1 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define WordInsert `!insertmacro WordInsertCall` +!define un.WordInsert `!insertmacro WordInsertCall` + +!macro WordInsert +!macroend + +!macro un.WordInsert +!macroend + +!macro WordInsert_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordInsertBody '' + + !verbose pop +!macroend + + +!define WordInsertS `!insertmacro WordInsertSCall` +!define un.WordInsertS `!insertmacro WordInsertSCall` + +!macro WordInsertS +!macroend + +!macro un.WordInsertS +!macroend + +!macro WordInsertS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro WordInsertBody 'S' + + !verbose pop +!macroend + +!macro StrFilterBody _WORDFUNC_S + Exch $2 + Exch + Exch $1 + Exch + Exch 2 + Exch $0 + Exch 2 + Exch 3 + Exch $R0 + Exch 3 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + Push $R7 + Push $R8 + ClearErrors + + StrCpy $R2 $0 '' -3 + StrCmp $R2 "eng" WordFunc_StrFilter${_WORDFUNC_S}_eng + StrCmp $R2 "rus" WordFunc_StrFilter${_WORDFUNC_S}_rus + WordFunc_StrFilter${_WORDFUNC_S}_eng: + StrCpy $4 65 + StrCpy $5 90 + StrCpy $6 97 + StrCpy $7 122 + goto WordFunc_StrFilter${_WORDFUNC_S}_langend + WordFunc_StrFilter${_WORDFUNC_S}_rus: + StrCpy $4 192 + StrCpy $5 223 + StrCpy $6 224 + StrCpy $7 255 + goto WordFunc_StrFilter${_WORDFUNC_S}_langend + ;... + + WordFunc_StrFilter${_WORDFUNC_S}_langend: + StrCpy $R7 '' + StrCpy $R8 '' + + StrCmp${_WORDFUNC_S} $2 '' 0 WordFunc_StrFilter${_WORDFUNC_S}_begin + + WordFunc_StrFilter${_WORDFUNC_S}_restart1: + StrCpy $2 '' + StrCpy $3 $0 1 + StrCmp${_WORDFUNC_S} $3 '+' +2 + StrCmp${_WORDFUNC_S} $3 '-' 0 +3 + StrCpy $0 $0 '' 1 + goto +2 + StrCpy $3 '' + + IntOp $0 $0 + 0 + StrCmp${_WORDFUNC_S} $0 0 +5 + StrCpy $R7 $0 1 0 + StrCpy $R8 $0 1 1 + StrCpy $R2 $0 1 2 + StrCmp${_WORDFUNC_S} $R2 '' WordFunc_StrFilter${_WORDFUNC_S}_filter WordFunc_StrFilter${_WORDFUNC_S}_error + + WordFunc_StrFilter${_WORDFUNC_S}_restart2: + StrCmp${_WORDFUNC_S} $3 '' WordFunc_StrFilter${_WORDFUNC_S}_end + StrCpy $R7 '' + StrCpy $R8 '+-' + goto WordFunc_StrFilter${_WORDFUNC_S}_begin + + WordFunc_StrFilter${_WORDFUNC_S}_filter: + StrCmp${_WORDFUNC_S} $R7 '1' +3 + StrCmp${_WORDFUNC_S} $R7 '2' +2 + StrCmp${_WORDFUNC_S} $R7 '3' 0 WordFunc_StrFilter${_WORDFUNC_S}_error + + StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_begin + StrCmp${_WORDFUNC_S} $R7$R8 '23' +2 + StrCmp${_WORDFUNC_S} $R7$R8 '32' 0 +3 + StrCpy $R7 -1 + goto WordFunc_StrFilter${_WORDFUNC_S}_begin + StrCmp${_WORDFUNC_S} $R7$R8 '13' +2 + StrCmp${_WORDFUNC_S} $R7$R8 '31' 0 +3 + StrCpy $R7 -2 + goto WordFunc_StrFilter${_WORDFUNC_S}_begin + StrCmp${_WORDFUNC_S} $R7$R8 '12' +2 + StrCmp${_WORDFUNC_S} $R7$R8 '21' 0 WordFunc_StrFilter${_WORDFUNC_S}_error + StrCpy $R7 -3 + + WordFunc_StrFilter${_WORDFUNC_S}_begin: + StrCpy $R6 0 + StrCpy $R1 '' + + WordFunc_StrFilter${_WORDFUNC_S}_loop: + StrCpy $R2 $R0 1 $R6 + StrCmp${_WORDFUNC_S} $R2 '' WordFunc_StrFilter${_WORDFUNC_S}_restartchk + + StrCmp${_WORDFUNC_S} $2 '' +7 + StrCpy $R4 0 + StrCpy $R5 $2 1 $R4 + StrCmp${_WORDFUNC_S} $R5 '' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol + StrCmp${_WORDFUNC_S} $R5 $R2 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol + IntOp $R4 $R4 + 1 + goto -4 + + StrCmp${_WORDFUNC_S} $1 '' +7 + StrCpy $R4 0 + StrCpy $R5 $1 1 $R4 + StrCmp${_WORDFUNC_S} $R5 '' +4 + StrCmp${_WORDFUNC_S} $R5 $R2 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol + IntOp $R4 $R4 + 1 + goto -4 + + StrCmp${_WORDFUNC_S} $R7 '1' +2 + StrCmp${_WORDFUNC_S} $R7 '-1' 0 +4 + StrCpy $R4 48 + StrCpy $R5 57 + goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 + StrCmp${_WORDFUNC_S} $R8 '+-' 0 +2 + StrCmp${_WORDFUNC_S} $3 '+' 0 +4 + StrCpy $R4 $4 + StrCpy $R5 $5 + goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 + StrCpy $R4 $6 + StrCpy $R5 $7 + + WordFunc_StrFilter${_WORDFUNC_S}_loop2: + IntFmt $R3 '%c' $R4 + StrCmp $R2 $R3 WordFunc_StrFilter${_WORDFUNC_S}_found + StrCmp $R4 $R5 WordFunc_StrFilter${_WORDFUNC_S}_notfound + IntOp $R4 $R4 + 1 + goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 + + WordFunc_StrFilter${_WORDFUNC_S}_found: + StrCmp${_WORDFUNC_S} $R8 '+-' WordFunc_StrFilter${_WORDFUNC_S}_setcase + StrCmp${_WORDFUNC_S} $R7 '3' WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol + StrCmp${_WORDFUNC_S} $R7 '-3' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol + StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol + + WordFunc_StrFilter${_WORDFUNC_S}_notfound: + StrCmp${_WORDFUNC_S} $R8 '+-' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol + StrCmp${_WORDFUNC_S} $R7 '3' 0 +2 + StrCmp${_WORDFUNC_S} $R5 57 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol +3 + StrCmp${_WORDFUNC_S} $R7 '-3' 0 +5 + StrCmp${_WORDFUNC_S} $R5 57 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol + StrCpy $R4 48 + StrCpy $R5 57 + goto WordFunc_StrFilter${_WORDFUNC_S}_loop2 + StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol WordFunc_StrFilter${_WORDFUNC_S}_addsymbol + + WordFunc_StrFilter${_WORDFUNC_S}_setcase: + StrCpy $R2 $R3 + WordFunc_StrFilter${_WORDFUNC_S}_addsymbol: + StrCpy $R1 $R1$R2 + WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol: + IntOp $R6 $R6 + 1 + goto WordFunc_StrFilter${_WORDFUNC_S}_loop + + WordFunc_StrFilter${_WORDFUNC_S}_error: + SetErrors + StrCpy $R0 '' + goto WordFunc_StrFilter${_WORDFUNC_S}_end + + WordFunc_StrFilter${_WORDFUNC_S}_restartchk: + StrCpy $R0 $R1 + StrCmp${_WORDFUNC_S} $2 '' 0 WordFunc_StrFilter${_WORDFUNC_S}_restart1 + StrCmp${_WORDFUNC_S} $R8 '+-' 0 WordFunc_StrFilter${_WORDFUNC_S}_restart2 + + WordFunc_StrFilter${_WORDFUNC_S}_end: + Pop $R8 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $R0 +!macroend + +!define StrFilter `!insertmacro StrFilterCall` +!define un.StrFilter `!insertmacro StrFilterCall` + +!macro StrFilter +!macroend + +!macro un.StrFilter +!macroend + +!macro StrFilter_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro StrFilterBody '' + + !verbose pop +!macroend + + +!define StrFilterS `!insertmacro StrFilterSCall` +!define un.StrFilterS `!insertmacro StrFilterSCall` + +!macro StrFilterS +!macroend + +!macro un.StrFilterS +!macroend + +!macro StrFilterS_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + !insertmacro StrFilterBody 'S' + + !verbose pop +!macroend + +!define VersionCompare `!insertmacro VersionCompareCall` +!define un.VersionCompare `!insertmacro VersionCompareCall` + +!macro VersionCompare +!macroend + +!macro un.VersionCompare +!macroend + +!macro VersionCompare_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + + WordFunc_VersionCompare_begin: + StrCpy $2 -1 + IntOp $2 $2 + 1 + StrCpy $3 $0 1 $2 + StrCmp $3 '' +2 + StrCmp $3 '.' 0 -3 + StrCpy $4 $0 $2 + IntOp $2 $2 + 1 + StrCpy $0 $0 '' $2 + + StrCpy $2 -1 + IntOp $2 $2 + 1 + StrCpy $3 $1 1 $2 + StrCmp $3 '' +2 + StrCmp $3 '.' 0 -3 + StrCpy $5 $1 $2 + IntOp $2 $2 + 1 + StrCpy $1 $1 '' $2 + + StrCmp $4$5 '' WordFunc_VersionCompare_equal + + StrCpy $6 -1 + IntOp $6 $6 + 1 + StrCpy $3 $4 1 $6 + StrCmp $3 '0' -2 + StrCmp $3 '' 0 +2 + StrCpy $4 0 + + StrCpy $7 -1 + IntOp $7 $7 + 1 + StrCpy $3 $5 1 $7 + StrCmp $3 '0' -2 + StrCmp $3 '' 0 +2 + StrCpy $5 0 + + StrCmp $4 0 0 +2 + StrCmp $5 0 WordFunc_VersionCompare_begin WordFunc_VersionCompare_newer2 + StrCmp $5 0 WordFunc_VersionCompare_newer1 + IntCmp $6 $7 0 WordFunc_VersionCompare_newer1 WordFunc_VersionCompare_newer2 + + StrCpy $4 '1$4' + StrCpy $5 '1$5' + IntCmp $4 $5 WordFunc_VersionCompare_begin WordFunc_VersionCompare_newer2 WordFunc_VersionCompare_newer1 + + WordFunc_VersionCompare_equal: + StrCpy $0 0 + goto WordFunc_VersionCompare_end + WordFunc_VersionCompare_newer1: + StrCpy $0 1 + goto WordFunc_VersionCompare_end + WordFunc_VersionCompare_newer2: + StrCpy $0 2 + + WordFunc_VersionCompare_end: + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!define VersionConvert `!insertmacro VersionConvertCall` +!define un.VersionConvert `!insertmacro VersionConvertCall` + +!macro VersionConvert +!macroend + +!macro un.VersionConvert +!macroend + +!macro VersionConvert_ + !verbose push + !verbose ${_WORDFUNC_VERBOSE} + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + + StrCmp $1 '' 0 +2 + StrCpy $1 'abcdefghijklmnopqrstuvwxyz' + StrCpy $1 $1 99 + + StrCpy $2 0 + StrCpy $7 'dot' + goto WordFunc_VersionConvert_loop + + WordFunc_VersionConvert_preloop: + IntOp $2 $2 + 1 + + WordFunc_VersionConvert_loop: + StrCpy $3 $0 1 $2 + StrCmp $3 '' WordFunc_VersionConvert_endcheck + StrCmp $3 '.' WordFunc_VersionConvert_dot + StrCmp $3 '0' WordFunc_VersionConvert_digit + IntCmp $3 '0' WordFunc_VersionConvert_letter WordFunc_VersionConvert_letter WordFunc_VersionConvert_digit + + WordFunc_VersionConvert_dot: + StrCmp $7 'dot' WordFunc_VersionConvert_replacespecial + StrCpy $7 'dot' + goto WordFunc_VersionConvert_preloop + + WordFunc_VersionConvert_digit: + StrCmp $7 'letter' WordFunc_VersionConvert_insertdot + StrCpy $7 'digit' + goto WordFunc_VersionConvert_preloop + + WordFunc_VersionConvert_letter: + StrCpy $5 0 + StrCpy $4 $1 1 $5 + IntOp $5 $5 + 1 + StrCmp $4 '' WordFunc_VersionConvert_replacespecial + StrCmp $4 $3 0 -3 + IntCmp $5 9 0 0 +2 + StrCpy $5 '0$5' + + StrCmp $7 'letter' +2 + StrCmp $7 'dot' 0 +3 + StrCpy $6 '' + goto +2 + StrCpy $6 '.' + + StrCpy $4 $0 $2 + IntOp $2 $2 + 1 + StrCpy $0 $0 '' $2 + StrCpy $0 '$4$6$5$0' + StrLen $4 '$6$5' + IntOp $2 $2 + $4 + IntOp $2 $2 - 1 + StrCpy $7 'letter' + goto WordFunc_VersionConvert_loop + + WordFunc_VersionConvert_replacespecial: + StrCmp $7 'dot' 0 +3 + StrCpy $6 '' + goto +2 + StrCpy $6 '.' + + StrCpy $4 $0 $2 + IntOp $2 $2 + 1 + StrCpy $0 $0 '' $2 + StrCpy $0 '$4$6$0' + StrLen $4 $6 + IntOp $2 $2 + $4 + IntOp $2 $2 - 1 + StrCpy $7 'dot' + goto WordFunc_VersionConvert_loop + + WordFunc_VersionConvert_insertdot: + StrCpy $4 $0 $2 + StrCpy $0 $0 '' $2 + StrCpy $0 '$4.$0' + StrCpy $7 'dot' + goto WordFunc_VersionConvert_preloop + + WordFunc_VersionConvert_endcheck: + StrCpy $4 $0 1 -1 + StrCmp $4 '.' 0 WordFunc_VersionConvert_end + StrCpy $0 $0 -1 + goto -3 + + WordFunc_VersionConvert_end: + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + !verbose pop +!macroend + +!verbose pop +!endif diff --git a/tools/Include/nsDialogs.nsh b/tools/Include/nsDialogs.nsh new file mode 100644 index 0000000..6fc2782 --- /dev/null +++ b/tools/Include/nsDialogs.nsh @@ -0,0 +1,1249 @@ +/* + +nsDialogs.nsh +Header file for creating custom installer pages with nsDialogs + +*/ + +!ifndef NSDIALOGS_INCLUDED +!verbose push 2 +!define NSDIALOGS_INCLUDED +!verbose 3 + +!include LogicLib.nsh +!include WinMessages.nsh + +!define /ifndef WS_EX_DLGMODALFRAME 0x00000001 +!define /ifndef WS_EX_NOPARENTNOTIFY 0x00000004 +!define /ifndef WS_EX_TOPMOST 0x00000008 +!define /ifndef WS_EX_ACCEPTFILES 0x00000010 +!define /ifndef WS_EX_TRANSPARENT 0x00000020 +!define /ifndef WS_EX_MDICHILD 0x00000040 +!define /ifndef WS_EX_TOOLWINDOW 0x00000080 +!define /ifndef WS_EX_WINDOWEDGE 0x00000100 +!define /ifndef WS_EX_CLIENTEDGE 0x00000200 +!define /ifndef WS_EX_CONTEXTHELP 0x00000400 +!define /ifndef WS_EX_RIGHT 0x00001000 +!define /ifndef WS_EX_LEFT 0x00000000 +!define /ifndef WS_EX_RTLREADING 0x00002000 +!define /ifndef WS_EX_LTRREADING 0x00000000 +!define /ifndef WS_EX_LEFTSCROLLBAR 0x00004000 +!define /ifndef WS_EX_RIGHTSCROLLBAR 0x00000000 +!define /ifndef WS_EX_CONTROLPARENT 0x00010000 +!define /ifndef WS_EX_STATICEDGE 0x00020000 +!define /ifndef WS_EX_APPWINDOW 0x00040000 + +!define /ifndef WS_CHILD 0x40000000 +!define /ifndef WS_VISIBLE 0x10000000 +!define /ifndef WS_DISABLED 0x08000000 +!define /ifndef WS_CLIPSIBLINGS 0x04000000 +!define /ifndef WS_CLIPCHILDREN 0x02000000 +!define /ifndef WS_MAXIMIZE 0x01000000 +!define /ifndef WS_BORDER 0x00800000 +!define /ifndef WS_VSCROLL 0x00200000 +!define /ifndef WS_HSCROLL 0x00100000 +!define /ifndef WS_GROUP 0x00020000 +!define /ifndef WS_MINIMIZEBOX 0x00020000 +!define /ifndef WS_MAXIMIZEBOX 0x00010000 +!define /ifndef WS_TABSTOP 0x00010000 + +!define ES_LEFT 0x00000000 +!define ES_CENTER 0x00000001 +!define ES_RIGHT 0x00000002 +!define ES_MULTILINE 0x00000004 +!define ES_UPPERCASE 0x00000008 +!define ES_LOWERCASE 0x00000010 +!define ES_PASSWORD 0x00000020 +!define ES_AUTOVSCROLL 0x00000040 +!define ES_AUTOHSCROLL 0x00000080 +!define ES_NOHIDESEL 0x00000100 +!define ES_OEMCONVERT 0x00000400 +!define ES_READONLY 0x00000800 +!define ES_WANTRETURN 0x00001000 +!define ES_NUMBER 0x00002000 +!define ES_SAVESEL 0x00008000 + +!define SS_LEFT 0x00000000 +!define SS_CENTER 0x00000001 +!define SS_RIGHT 0x00000002 +!define SS_ICON 0x00000003 +!define SS_BLACKRECT 0x00000004 +!define SS_GRAYRECT 0x00000005 +!define SS_WHITERECT 0x00000006 +!define SS_BLACKFRAME 0x00000007 +!define SS_GRAYFRAME 0x00000008 +!define SS_WHITEFRAME 0x00000009 +!define SS_USERITEM 0x0000000A +!define SS_SIMPLE 0x0000000B +!define SS_LEFTNOWORDWRAP 0x0000000C +!define SS_OWNERDRAW 0x0000000D +!define SS_BITMAP 0x0000000E +!define SS_ENHMETAFILE 0x0000000F +!define SS_ETCHEDHORZ 0x00000010 +!define SS_ETCHEDVERT 0x00000011 +!define SS_ETCHEDFRAME 0x00000012 +!define SS_TYPEMASK 0x0000001F +!define SS_REALSIZECONTROL 0x00000040 +!define SS_NOPREFIX 0x00000080 +!define SS_NOTIFY 0x00000100 +!define SS_CENTERIMAGE 0x00000200 +!define SS_RIGHTJUST 0x00000400 +!define SS_REALSIZEIMAGE 0x00000800 +!define SS_SUNKEN 0x00001000 +!define SS_EDITCONTROL 0x00002000 +!define SS_ENDELLIPSIS 0x00004000 +!define SS_PATHELLIPSIS 0x00008000 +!define SS_WORDELLIPSIS 0x0000C000 +!define SS_ELLIPSISMASK 0x0000C000 + +!define BS_PUSHBUTTON 0x00000000 +!define BS_DEFPUSHBUTTON 0x00000001 +!define BS_CHECKBOX 0x00000002 +!define BS_AUTOCHECKBOX 0x00000003 +!define BS_RADIOBUTTON 0x00000004 +!define BS_3STATE 0x00000005 +!define BS_AUTO3STATE 0x00000006 +!define BS_GROUPBOX 0x00000007 +!define BS_USERBUTTON 0x00000008 +!define BS_AUTORADIOBUTTON 0x00000009 +!define BS_PUSHBOX 0x0000000A +!define BS_OWNERDRAW 0x0000000B +!define BS_TYPEMASK 0x0000000F +!define BS_LEFTTEXT 0x00000020 +!define BS_TEXT 0x00000000 +!define BS_ICON 0x00000040 +!define BS_BITMAP 0x00000080 +!define BS_LEFT 0x00000100 +!define BS_RIGHT 0x00000200 +!define BS_CENTER 0x00000300 +!define BS_TOP 0x00000400 +!define BS_BOTTOM 0x00000800 +!define BS_VCENTER 0x00000C00 +!define BS_PUSHLIKE 0x00001000 +!define BS_MULTILINE 0x00002000 +!define BS_NOTIFY 0x00004000 +!define BS_FLAT 0x00008000 +!define BS_RIGHTBUTTON ${BS_LEFTTEXT} + +!define CBS_SIMPLE 0x0001 +!define CBS_DROPDOWN 0x0002 +!define CBS_DROPDOWNLIST 0x0003 +!define CBS_OWNERDRAWFIXED 0x0010 +!define CBS_OWNERDRAWVARIABLE 0x0020 +!define CBS_AUTOHSCROLL 0x0040 +!define CBS_OEMCONVERT 0x0080 +!define CBS_SORT 0x0100 +!define CBS_HASSTRINGS 0x0200 +!define CBS_NOINTEGRALHEIGHT 0x0400 +!define CBS_DISABLENOSCROLL 0x0800 +!define CBS_UPPERCASE 0x2000 +!define CBS_LOWERCASE 0x4000 + +!define LBS_NOTIFY 0x0001 +!define LBS_SORT 0x0002 +!define LBS_NOREDRAW 0x0004 +!define LBS_MULTIPLESEL 0x0008 +!define LBS_OWNERDRAWFIXED 0x0010 +!define LBS_OWNERDRAWVARIABLE 0x0020 +!define LBS_HASSTRINGS 0x0040 +!define LBS_USETABSTOPS 0x0080 +!define LBS_NOINTEGRALHEIGHT 0x0100 +!define LBS_MULTICOLUMN 0x0200 +!define LBS_WANTKEYBOARDINPUT 0x0400 +!define LBS_EXTENDEDSEL 0x0800 +!define LBS_DISABLENOSCROLL 0x1000 +!define LBS_NODATA 0x2000 +!define LBS_NOSEL 0x4000 +!define LBS_COMBOBOX 0x8000 + +!define ACS_CENTER 0x0001 +!define ACS_TRANSPARENT 0x0002 ; The parent of the animation control must not have the WS_CLIPCHILDREN style +!define ACS_AUTOPLAY 0x0004 +!define ACS_TIMER 0x0008 ; < CC6 + +!define TBS_AUTOTICKS 0x0001 +!define TBS_VERT 0x0002 +!define TBS_HORZ 0x0000 +!define TBS_TOP 0x0004 +!define TBS_BOTTOM 0x0000 +!define TBS_LEFT 0x0004 +!define TBS_RIGHT 0x0000 +!define TBS_BOTH 0x0008 +!define TBS_NOTICKS 0x0010 +!define TBS_ENABLESELRANGE 0x0020 +!define TBS_FIXEDLENGTH 0x0040 +!define TBS_NOTHUMB 0x0080 +!define TBS_TOOLTIPS 0x0100 ; IE3 +!define TBS_REVERSED 0x0200 ; IE5 +!define TBS_DOWNISLEFT 0x0400 ; _WIN32_IE >= 0x0501 +!define TBS_NOTIFYBEFOREMOVE 0x0800 ; IE6? +!define TBS_TRANSPARENTBKGND 0x1000 ; Vista + +!define UDS_WRAP 0x0001 +!define UDS_SETBUDDYINT 0x0002 +!define UDS_ALIGNRIGHT 0x0004 +!define UDS_ALIGNLEFT 0x0008 +!define UDS_AUTOBUDDY 0x0010 +!define UDS_ARROWKEYS 0x0020 +!define UDS_HORZ 0x0040 +!define UDS_NOTHOUSANDS 0x0080 +!define UDS_HOTTRACK 0x0100 ; 98+ + +!define MCS_DAYSTATE 0x0001 +!define MCS_MULTISELECT 0x0002 +!define MCS_WEEKNUMBERS 0x0004 +!define MCS_NOTODAYCIRCLE 0x0008 +!define MCS_NOTODAY 0x0010 ; IE4+? +!define MCS_NOTRAILINGDATES 0x0040 ; Vista+ +!define MCS_SHORTDAYSOFWEEK 0x0080 ; Vista+ +!define MCS_NOSELCHANGEONNAV 0x0100 ; Vista+ + +!define DTS_UPDOWN 0x01 +!define DTS_SHOWNONE 0x02 +!define DTS_SHORTDATEFORMAT 0x00 +!define DTS_LONGDATEFORMAT 0x04 +!define DTS_SHORTDATECENTURYFORMAT 0x0C +!define DTS_TIMEFORMAT 0x09 +!define DTS_APPCANPARSE 0x10 +!define DTS_RIGHTALIGN 0x20 + +!define /ifndef LR_DEFAULTCOLOR 0x0000 +!define /ifndef LR_MONOCHROME 0x0001 +!define /ifndef LR_COLOR 0x0002 +!define /ifndef LR_COPYRETURNORG 0x0004 +!define /ifndef LR_COPYDELETEORG 0x0008 +!define /ifndef LR_LOADFROMFILE 0x0010 +!define /ifndef LR_LOADTRANSPARENT 0x0020 +!define /ifndef LR_DEFAULTSIZE 0x0040 +!define /ifndef LR_VGACOLOR 0x0080 +!define /ifndef LR_LOADMAP3DCOLORS 0x1000 +!define /ifndef LR_CREATEDIBSECTION 0x2000 +!define /ifndef LR_COPYFROMRESOURCE 0x4000 +!define /ifndef LR_SHARED 0x8000 + +!define /ifndef IMAGE_BITMAP 0 +!define /ifndef IMAGE_ICON 1 +!define /ifndef IMAGE_CURSOR 2 +!define /ifndef IMAGE_ENHMETAFILE 3 + +!define /ifndef GWL_STYLE -16 +!define /ifndef GWL_EXSTYLE -20 + +#define /ifndef ICC_LISTVIEW_CLASSES 0x0001 ; SysListView32 and SysHeader32 +#define /ifndef ICC_TREEVIEW_CLASSES 0x0002 ; SysTabControl32 and tooltips_class32 +#define /ifndef ICC_BAR_CLASSES 0x0004 ; ToolbarWindow32, msctls_statusbar32, msctls_trackbar32 and tooltips_class32 +#define /ifndef ICC_TAB_CLASSES 0x0008 ; SysTabControl32 and tooltips_class32 +#define /ifndef ICC_UPDOWN_CLASS 0x0010 ; msctls_updown32 +#define /ifndef ICC_PROGRESS_CLASS 0x0020 ; msctls_progress32 +#define /ifndef ICC_HOTKEY_CLASS 0x0040 ; msctls_hotkey32 +#define /ifndef ICC_ANIMATE_CLASS 0x0080 ; SysAnimate32 +#define /ifndef ICC_WIN95_CLASSES 0x00FF +!define /ifndef ICC_DATE_CLASSES 0x0100 ; CC4.70+ (NT4+/IE3.1+/Win95 OSR2) SysDateTimePick32, SysMonthCal32 and CC6.10+(Vista+) DropDown +!define /ifndef ICC_USEREX_CLASSES 0x0200 ; CC4.??+ (NT4+/IE3.?+/Win95 OSR2) ComboBoxEx32 +!define /ifndef ICC_COOL_CLASSES 0x0400 ; CC4.70+ (NT4+/IE3.1+/Win95 OSR2) ReBarWindow32 +!define /ifndef ICC_INTERNET_CLASSES 0x0800 ; CC4.71+ (IE4+) SysIPAddress32 +!define /ifndef ICC_PAGESCROLLER_CLASS 0x1000 ; CC4.71+ (IE4+) SysPager +!define /ifndef ICC_NATIVEFNTCTL_CLASS 0x2000 ; CC4.71+ (IE4+) NativeFontCtl +!define /ifndef ICC_STANDARD_CLASSES 0x4000 ; WinXP+ Button, Static, Edit, ListBox, ComboBox, ComboLBox, ScrollBar and ReaderModeCtl +!define /ifndef ICC_LINK_CLASS 0x8000 ; WinXP+ SysLink + + +!define DEFAULT_STYLES ${WS_CHILD}|${WS_VISIBLE}|${WS_CLIPSIBLINGS} + +!define __NSD_HLine_CLASS STATIC +!define __NSD_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN} +!define __NSD_HLine_EXSTYLE ${WS_EX_TRANSPARENT} + +!define __NSD_VLine_CLASS STATIC +!define __NSD_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN} +!define __NSD_VLine_EXSTYLE ${WS_EX_TRANSPARENT} + +!define __NSD_Label_CLASS STATIC +!define __NSD_Label_STYLE ${DEFAULT_STYLES}|${SS_NOTIFY} +!define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT} + +!define __NSD_Icon_CLASS STATIC +!define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}|${SS_NOTIFY} +!define __NSD_Icon_EXSTYLE 0 + +!define __NSD_Bitmap_CLASS STATIC +!define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}|${SS_NOTIFY} +!define __NSD_Bitmap_EXSTYLE 0 + +!define __NSD_BrowseButton_CLASS BUTTON +!define __NSD_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP} +!define __NSD_BrowseButton_EXSTYLE 0 + +!define __NSD_Link_CLASS LINK +!define __NSD_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW} +!define __NSD_Link_EXSTYLE 0 + +!define __NSD_Button_CLASS BUTTON +!define __NSD_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP} +!define __NSD_Button_EXSTYLE 0 + +!define __NSD_GroupBox_CLASS BUTTON +!define __NSD_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX} +!define __NSD_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT} + +!define __NSD_CheckBox_CLASS BUTTON +!define __NSD_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE} +!define __NSD_CheckBox_EXSTYLE 0 + +!define __NSD_RadioButton_CLASS BUTTON +!define __NSD_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE} +!define __NSD_RadioButton_EXSTYLE 0 + +!define __NSD_FirstRadioButton_CLASS ${__NSD_RadioButton_CLASS} +!define __NSD_FirstRadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_GROUP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE} +!define __NSD_FirstRadioButton_EXSTYLE ${__NSD_RadioButton_EXSTYLE} + +!define __NSD_AdditionalRadioButton_CLASS ${__NSD_RadioButton_CLASS} +!define __NSD_AdditionalRadioButton_STYLE ${DEFAULT_STYLES}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE} +!define __NSD_AdditionalRadioButton_EXSTYLE ${__NSD_RadioButton_EXSTYLE} + +!define __NSD_Text_CLASS EDIT +!define __NSD_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL} +!define __NSD_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_MLText_CLASS EDIT +!define __NSD_MLText_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_AUTOVSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}|${WS_HSCROLL}|${WS_VSCROLL} +!define __NSD_MLText_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_Password_CLASS EDIT +!define __NSD_Password_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_PASSWORD} +!define __NSD_Password_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_Number_CLASS EDIT +!define __NSD_Number_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_NUMBER} +!define __NSD_Number_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_FileRequest_CLASS EDIT +!define __NSD_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL} +!define __NSD_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_DirRequest_CLASS EDIT +!define __NSD_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL} +!define __NSD_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_RichEdit_CLASS_10 "RICHEDIT" ; 1.0 (Riched32.dll) Win95/NT4 +!define __NSD_RichEdit_CLASS_20A "RICHEDIT20A" ; 2.0 (Riched20.dll) Win98/NT4 (NSIS makes sure this is registered even on Windows 95) +!define __NSD_RichEdit_CLASS_20W "RICHEDIT20W" +!define __NSD_RichEdit_CLASS_41W "RICHEDIT50W" ; 4.1 (MsftEdit.DLL) WinXP.SP1 +!ifdef NSIS_UNICODE +!define /ifndef __NSD_RichEdit_CLASS ${__NSD_RichEdit_CLASS_20W} +!else +!define /ifndef __NSD_RichEdit_CLASS ${__NSD_RichEdit_CLASS_20A} +!endif +!define __NSD_RichEdit_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_AUTOVSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}|${ES_SAVESEL}|${WS_HSCROLL}|${WS_VSCROLL} +!define __NSD_RichEdit_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_ComboBox_CLASS COMBOBOX +!define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWN} +!define __NSD_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_DropList_CLASS COMBOBOX +!define __NSD_DropList_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWNLIST} +!define __NSD_DropList_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_ListBox_CLASS LISTBOX +!define __NSD_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY} +!define __NSD_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_SortedListBox_CLASS LISTBOX +!define __NSD_SortedListBox_STYLE ${__NSD_ListBox_STYLE}|${LBS_SORT} +!define __NSD_SortedListBox_EXSTYLE ${__NSD_ListBox_EXSTYLE} + +!define __NSD_ProgressBar_CLASS msctls_progress32 +!define __NSD_ProgressBar_STYLE ${DEFAULT_STYLES} +!define __NSD_ProgressBar_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_Animation_CLASS SysAnimate32 +!define __NSD_Animation_STYLE ${DEFAULT_STYLES}|${ACS_TRANSPARENT}|${ACS_AUTOPLAY} +!define __NSD_Animation_EXSTYLE 0 + +!define __NSD_HTrackBar_CLASS msctls_trackbar32 +!define __NSD_HTrackBar_STYLE ${DEFAULT_STYLES}|${TBS_HORZ}|${TBS_AUTOTICKS}|${TBS_TOOLTIPS} +!define __NSD_HTrackBar_EXSTYLE 0 + +!define __NSD_VTrackBar_CLASS msctls_trackbar32 +!define __NSD_VTrackBar_STYLE ${DEFAULT_STYLES}|${TBS_VERT}|${TBS_AUTOTICKS}|${TBS_TOOLTIPS} +!define __NSD_VTrackBar_EXSTYLE 0 + +!define __NSD_UpDown_CLASS msctls_updown32 +!define __NSD_UpDown_STYLE ${DEFAULT_STYLES}|${UDS_SETBUDDYINT}|${UDS_ARROWKEYS}|${UDS_NOTHOUSANDS}|${UDS_ALIGNRIGHT} +!define __NSD_UpDown_EXSTYLE 0 + +!define __NSD_AutoUpDown_CLASS msctls_updown32 +!define __NSD_AutoUpDown_STYLE ${__NSD_UpDown_STYLE}|${UDS_AUTOBUDDY} +!define __NSD_AutoUpDown_EXSTYLE ${__NSD_UpDown_EXSTYLE} + +!define __NSD_HotKey_CLASS msctls_hotkey32 +!define __NSD_HotKey_STYLE ${DEFAULT_STYLES} +!define __NSD_HotKey_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_Calendar_CLASS SysMonthCal32 +!define __NSD_Calendar_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP} +!define __NSD_Calendar_EXSTYLE 0 + +!define __NSD_DatePicker_CLASS SysDateTimePick32 +!define __NSD_DatePicker_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP} +!define __NSD_DatePicker_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_TimePicker_CLASS SysDateTimePick32 +!define __NSD_TimePicker_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${DTS_TIMEFORMAT} +!define __NSD_TimePicker_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + +!define __NSD_IPAddress_CLASS SysIPAddress32 ; IE4+/CC4.71+ +!define __NSD_IPAddress_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP} +!define __NSD_IPAddress_EXSTYLE 0 + +!define __NSD_NetAddress_CLASS msctls_netaddress ; Vista+ +!define __NSD_NetAddress_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP} +!define __NSD_NetAddress_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + + +!macro __NSD_DefineControl NAME + !define NSD_Create${NAME} "nsDialogs::CreateControl ${__NSD_${Name}_CLASS} ${__NSD_${Name}_STYLE} ${__NSD_${Name}_EXSTYLE}" +!macroend +!insertmacro __NSD_DefineControl HLine +!insertmacro __NSD_DefineControl VLine +!insertmacro __NSD_DefineControl Label +!insertmacro __NSD_DefineControl Icon +!insertmacro __NSD_DefineControl Bitmap +!insertmacro __NSD_DefineControl BrowseButton +!insertmacro __NSD_DefineControl Link +!insertmacro __NSD_DefineControl Button +!insertmacro __NSD_DefineControl GroupBox +!insertmacro __NSD_DefineControl CheckBox +!insertmacro __NSD_DefineControl RadioButton +!insertmacro __NSD_DefineControl FirstRadioButton +!insertmacro __NSD_DefineControl AdditionalRadioButton +!insertmacro __NSD_DefineControl Text +!insertmacro __NSD_DefineControl MLText +!insertmacro __NSD_DefineControl Password +!insertmacro __NSD_DefineControl Number +!insertmacro __NSD_DefineControl FileRequest +!insertmacro __NSD_DefineControl DirRequest +!insertmacro __NSD_DefineControl RichEdit +!insertmacro __NSD_DefineControl ComboBox +!insertmacro __NSD_DefineControl DropList +!insertmacro __NSD_DefineControl ListBox +!insertmacro __NSD_DefineControl SortedListBox +!insertmacro __NSD_DefineControl ProgressBar +!insertmacro __NSD_DefineControl Animation +!insertmacro __NSD_DefineControl HTrackBar +!insertmacro __NSD_DefineControl VTrackBar +!insertmacro __NSD_DefineControl UpDown +!insertmacro __NSD_DefineControl AutoUpDown +!insertmacro __NSD_DefineControl HotKey +!insertmacro __NSD_DefineControl Calendar +!insertmacro __NSD_DefineControl DatePicker +!insertmacro __NSD_DefineControl TimePicker +!insertmacro __NSD_DefineControl IPAddress +!insertmacro __NSD_DefineControl NetAddress + + +!macro __NSD_OnControlEvent EVENT HWND FUNCTION + Push $0 + Push $1 + + StrCpy $1 "${HWND}" + + GetFunctionAddress $0 "${FUNCTION}" + nsDialogs::On${EVENT} $1 $0 + + Pop $1 + Pop $0 +!macroend + +!macro __NSD_DefineControlCallback EVENT + !define NSD_On${EVENT} `!insertmacro __NSD_OnControlEvent ${EVENT} ` +!macroend + +!macro __NSD_OnDialogEvent EVENT FUNCTION + Push $0 + + GetFunctionAddress $0 "${FUNCTION}" + nsDialogs::On${EVENT} $0 + + Pop $0 +!macroend + +!macro __NSD_DefineDialogCallback EVENT + !define NSD_On${EVENT} `!insertmacro __NSD_OnDialogEvent ${EVENT} ` +!macroend +!insertmacro __NSD_DefineControlCallback Click +!insertmacro __NSD_DefineControlCallback Change +!insertmacro __NSD_DefineControlCallback Notify +!insertmacro __NSD_DefineDialogCallback Back + +!define NSD_Return "!insertmacro NSD_Return " +!macro NSD_Return val +StrCpy $_OUTDIR ${val} +SetSilent silent +Return +!macroend + + +!define __NSD_MkCtlCmd "!insertmacro __NSD_MkCtlCmd " +!macro __NSD_MkCtlCmd msg wp lp hCtl +SendMessage ${hCtl} ${${msg}} ${wp} ${lp} +!macroend +!define __NSD_MkCtlCmd_WP "!insertmacro __NSD_MkCtlCmd_WP " +!macro __NSD_MkCtlCmd_WP msg lp hCtl wp +SendMessage ${hCtl} ${${msg}} ${wp} ${lp} +!macroend +!define __NSD_MkCtlCmd_LP "!insertmacro __NSD_MkCtlCmd_LP " +!macro __NSD_MkCtlCmd_LP msg wp hCtl lp +SendMessage ${hCtl} ${${msg}} ${wp} ${lp} +!macroend +!define __NSD_MkCtlCmd_WPLP "!insertmacro __NSD_MkCtlCmd_WPLP " +!macro __NSD_MkCtlCmd_WPLP msg hCtl wp lp +SendMessage ${hCtl} ${${msg}} ${wp} ${lp} +!macroend +!define __NSD_MkCtlCmd_RV "!insertmacro __NSD_MkCtlCmd_RV " +!macro __NSD_MkCtlCmd_RV msg wp lp hCtl VAR +SendMessage ${hCtl} ${${msg}} ${wp} ${lp} ${VAR} +!macroend + + +!define NSD_InitCommonControlsEx "!insertmacro __NSD_InitCommonControlsEx " +!macro __NSD_InitCommonControlsEx ICC +!pragma warning push +!pragma warning disable 7070 ; Invalid number +!if ${ICC} <> 0 +!define /ReDef /IntFmt NSD_InitCommonControlsEx_TEMP "0x%X" ${ICC} +System::Call 'COMCTL32::InitCommonControlsEx(*l${NSD_InitCommonControlsEx_TEMP}00000008)' +!undef NSD_InitCommonControlsEx_TEMP +!else +System::Int64Op ${ICC} << 32 +System::Int64Op 8 | +System::Call 'COMCTL32::InitCommonControlsEx(*ls)' ; INITCOMMONCONTROLSEX as UINT64 +!endif +!pragma warning pop +!macroend +!define NSD_InitCommonControl_IPAddress `${NSD_InitCommonControlsEx} ${ICC_INTERNET_CLASSES}` +!define NSD_InitCommonControl_NetAddress `System::Call SHELL32::InitNetworkAddressControl()i` +!define NSD_InitCommonControl_SysLink `${NSD_InitCommonControlsEx} ${ICC_LINK_CLASS}` + + +!define NSD_CreateTimer `!insertmacro _NSD_CreateTimer ` +!macro _NSD_CreateTimer FUNCTION INTERVAL + Push $0 + + GetFunctionAddress $0 "${FUNCTION}" + nsDialogs::CreateTimer $0 "${INTERVAL}" + + Pop $0 +!macroend + + +!define NSD_KillTimer `!insertmacro _NSD_KillTimer ` +!macro _NSD_KillTimer FUNCTION + Push $0 + + GetFunctionAddress $0 "${FUNCTION}" + nsDialogs::KillTimer $0 + + Pop $0 +!macroend + + +!define NSD_AddStyle "!insertmacro _NSD_GWLAddFlags ${GWL_STYLE} " +!define NSD_AddExStyle "!insertmacro _NSD_GWLAddFlags ${GWL_EXSTYLE} " +!macro _NSD_GWLAddFlags GWL HWND DATA + System::Call "user32::GetWindowLong(p${HWND},i${GWL})p.s" + System::Int64Op "${DATA}" | + System::Call "user32::SetWindowLong(p${HWND},p${GWL},ps)" +!macroend + +!define NSD_RemoveStyle "!insertmacro _NSD_GWLRemoveFlags ${GWL_STYLE} " +!define NSD_RemoveExStyle "!insertmacro _NSD_GWLRemoveFlags ${GWL_EXSTYLE} " +!macro _NSD_GWLRemoveFlags GWL HWND DATA +System::Call "user32::GetWindowLong(p${HWND},i${GWL})p.s" +System::Int64Op "${DATA}" ~ & ; Perform ~ and prepare the stack for & +System::Int64Op ; Perform & +System::Call "user32::SetWindowLong(p${HWND},i${GWL},ps)" +!macroend + +!define NSD_GetStyle "!insertmacro _NSD_GWLGetFlags ${GWL_STYLE} " +!define NSD_GetExStyle "!insertmacro _NSD_GWLGetFlags ${GWL_EXSTYLE} " +!macro _NSD_GWLGetFlags GWL HWND RET +System::Call "user32::GetWindowLong(p${HWND},i${GWL})p.s" +Pop ${RET} +!macroend + +!macro __NSD_GetStyleBit GWL BIT HWND RET +!insertmacro _NSD_GWLGetFlags ${GWL} ${HWND} ${RET} +IntOp ${RET} ${RET} & ${BIT} +!macroend + + +!define NSD_SetFocus `!insertmacro __NSD_SetFocus ` +!macro __NSD_SetFocus HWND + System::Call "user32::SetFocus(p${HWND})" +!macroend + + +!define NSD_GetText "!insertmacro __NSD_GetText " +!macro __NSD_GetText CONTROL VAR + System::Call user32::GetWindowText(p${CONTROL},t.s,i${NSIS_MAX_STRLEN}) + Pop ${VAR} +!macroend + + +!define NSD_SetText "!insertmacro __NSD_SetText " +!macro __NSD_SetText CONTROL TEXT + SendMessage ${CONTROL} ${WM_SETTEXT} 0 `STR:${TEXT}` +!macroend + + +### Edit ### + +!define NSD_Edit_GetTextLimit `${__NSD_MkCtlCmd_RV} EM_GETLIMITTEXT 0 0 ` +!define NSD_Edit_SetTextLimit `${__NSD_MkCtlCmd_WP} EM_SETLIMITTEXT 0 ` +!define NSD_Edit_SetPasswordChar `${__NSD_MkCtlCmd_WP} EM_SETPASSWORDCHAR 0 ` +!define NSD_Edit_GetReadOnly `!insertmacro __NSD_GetStyleBit ${GWL_STYLE} ${ES_READONLY} ` ; Non-zero if read-only +!define NSD_Edit_SetReadOnly `${__NSD_MkCtlCmd_WP} EM_SETREADONLY 0 ` ; Toggles the ES_READONLY style +!define NSD_Edit_GetModify `${__NSD_MkCtlCmd_RV} EM_GETMODIFY 0 0 ` +!define NSD_Edit_SetModify `${__NSD_MkCtlCmd_WP} EM_SETMODIFY 0 ` +!define NSD_Edit_EmptyUndoBuffer `${__NSD_MkCtlCmd} EM_EMPTYUNDOBUFFER 0 0 ` +!define NSD_Edit_CanUndo `${__NSD_MkCtlCmd_RV} EM_CANUNDO 0 0 ` +!define NSD_Edit_ScrollCaret `${__NSD_MkCtlCmd} EM_SCROLLCARET 0 0 ` +!define NSD_Edit_LineScroll `${__NSD_MkCtlCmd_WPLP} EM_LINESCROLL ` +!define NSD_Edit_SetSel `${__NSD_MkCtlCmd_WPLP} EM_SETSEL ` ; WP:Start LP:End + +!define NSD_Edit_SetCueBannerText "!insertmacro __NSD_Edit_SetCueBannerText " ; CC6+ +!macro __NSD_Edit_SetCueBannerText CONTROL SHOWWHENFOCUSED TEXT +!if ${NSIS_CHAR_SIZE} > 1 + SendMessage ${CONTROL} ${EM_SETCUEBANNER} ${SHOWWHENFOCUSED} `STR:${TEXT}` +!else + System::Call 'USER32::SendMessage(p${CONTROL},i${EM_SETCUEBANNER},p${SHOWWHENFOCUSED},ws)' `${TEXT}` ; Must be PWSTR +!endif +!macroend + +!define NSD_Edit_GetLineCount `${__NSD_MkCtlCmd_RV} EM_GETLINECOUNT 0 0 ` +!define NSD_Edit_GetLine "!insertmacro __NSD_Edit_GetLine " +!macro __NSD_Edit_GetLine CONTROL LINEINDEX OUTPUT + System::Call '*(&i2 ${NSIS_MAX_STRLEN},&t${NSIS_MAX_STRLEN})p.s' + System::Call 'USER32::SendMessage(p${CONTROL},i${EM_GETLINE},p${LINEINDEX},pss)' + System::Call 'KERNEL32::lstrcpyn(t.s,pss,i${NSIS_MAX_STRLEN})' + Pop ${OUTPUT} + System::Free +!macroend + +!define NSD_SetTextLimit `${NSD_Edit_SetTextLimit} ` ; Legacy alias + + +### RichEdit ### + +!define NSD_RichEd_SetTextLimit `${__NSD_MkCtlCmd_LP} EM_EXLIMITTEXT 0 ` +!define NSD_RichEd_GetEventMask `${__NSD_MkCtlCmd_RV} EM_GETEVENTMASK 0 0 ` +!define NSD_RichEd_SetEventMask `${__NSD_MkCtlCmd_LP} EM_SETEVENTMASK 0 ` ; LP:ENM_* +!define NSD_RichEd_SetSystemBackgroundColor `${__NSD_MkCtlCmd} EM_SETBKGNDCOLOR 1 0 ` ; COLOR_WINDOW +!define NSD_RichEd_SetCustomBackgroundColor `${__NSD_MkCtlCmd_LP} EM_SETBKGNDCOLOR 0 ` ; LP:COLORREF +!define NSD_RichEd_SetHideSelection `${__NSD_MkCtlCmd_WP} EM_HIDESELECTION 0 ` ; WP(BOOL):HideSelWithoutFocus (Toggles ES_NOHIDESEL & TXTBIT_HIDESELECTION) + + +### CheckBox ### + +!define NSD_GetState `!insertmacro __NSD_GetState ` +!macro __NSD_GetState CONTROL VAR + SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR} +!macroend + + +!define NSD_SetState `!insertmacro __NSD_SetState ` +!macro __NSD_SetState CONTROL STATE + SendMessage ${CONTROL} ${BM_SETCHECK} ${STATE} 0 +!macroend + +!define NSD_Check `!insertmacro __NSD_Check ` +!macro __NSD_Check CONTROL + ${NSD_SetState} ${CONTROL} ${BST_CHECKED} +!macroend + + +!define NSD_Uncheck `!insertmacro __NSD_Uncheck ` +!macro __NSD_Uncheck CONTROL + ${NSD_SetState} ${CONTROL} ${BST_UNCHECKED} +!macroend + +!define NSD_GetChecked `!insertmacro __NSD_GetState ` +!define NSD_SetChecked `!insertmacro __NSD_SetState ` + + +### ComboBox ### + +!define NSD_CB_AddString "!insertmacro _NSD_CB_AddString " +!macro _NSD_CB_AddString CONTROL STRING + SendMessage ${CONTROL} ${CB_ADDSTRING} 0 `STR:${STRING}` +!macroend + + +!define NSD_CB_InsertString "!insertmacro _NSD_CB_InsertString " +!macro _NSD_CB_InsertString CONTROL INDEX STRING +SendMessage ${CONTROL} ${CB_INSERTSTRING} ${INDEX} `STR:${STRING}` +!macroend + +!define NSD_CB_PrependString "!insertmacro _NSD_CB_PrependString " +!macro _NSD_CB_PrependString CONTROL STRING +SendMessage ${CONTROL} ${CB_INSERTSTRING} 0 `STR:${STRING}` +!macroend + +!define NSD_CB_AppendString "!insertmacro _NSD_CB_AppendString " +!macro _NSD_CB_AppendString CONTROL STRING +SendMessage ${CONTROL} ${CB_INSERTSTRING} -1 `STR:${STRING}` +!macroend + + +!define NSD_CB_SelectString "!insertmacro _NSD_CB_SelectString " +!macro _NSD_CB_SelectString CONTROL STRING + SendMessage ${CONTROL} ${CB_SELECTSTRING} -1 `STR:${STRING}` +!macroend + + +!define NSD_CB_GetSelectionIndex `!insertmacro __NSD_CB_GetSelectionIndex ` +!macro __NSD_CB_GetSelectionIndex CONTROL VAR + SendMessage ${CONTROL} ${CB_GETCURSEL} 0 0 ${VAR} +!macroend + + +!define NSD_CB_SetSelectionIndex `!insertmacro __NSD_CB_SetSelectionIndex ` +!macro __NSD_CB_SetSelectionIndex CONTROL INDEX + SendMessage ${CONTROL} ${CB_SETCURSEL} ${INDEX} 0 +!macroend + + +!define NSD_CB_GetItemData `!insertmacro __NSD_CB_GetItemData ` +!macro __NSD_CB_GetItemData CONTROL INDEX VAR +SendMessage ${CONTROL} ${CB_GETITEMDATA} ${INDEX} 0 ${VAR} +!macroend +!define NSD_CB_SetItemData `${__NSD_MkCtlCmd_WPLP} CB_SETITEMDATA ` ; Index Data + + +!define NSD_CB_DelItem `${__NSD_MkCtlCmd_WP} CB_DELETESTRING 0 ` +!define NSD_CB_LimitText `${__NSD_MkCtlCmd_WP} CB_LIMITTEXT 0 ` +!define /IfNDef NSD_CB_Clear `${__NSD_MkCtlCmd} CB_RESETCONTENT 0 0 ` +!define /IfNDef NSD_CB_GetCount `${__NSD_MkCtlCmd_RV} CB_GETCOUNT 0 0 ` +!ifndef NSD_CB_DelString +!define NSD_CB_DelString `!insertmacro __NSD_CB_DelString ` +!macro __NSD_CB_DelString CONTROL STRING + System::Call 'USER32::SendMessage(p${CONTROL},i${CB_FINDSTRINGEXACT},p-1,ts)p.s' `${STRING}` + System::Call 'USER32::SendMessage(p${CONTROL},i${CB_DELETESTRING},ps,p0)' +!macroend +!endif +;define /IfNDef NSD_CB_GetSelection + + +### ListBox ### + +!define NSD_LB_AddString "!insertmacro _NSD_LB_AddString " +!macro _NSD_LB_AddString CONTROL STRING + SendMessage ${CONTROL} ${LB_ADDSTRING} 0 `STR:${STRING}` +!macroend + + +!define NSD_LB_InsertString "!insertmacro _NSD_LB_InsertString " +!macro _NSD_LB_InsertString CONTROL INDEX STRING +SendMessage ${CONTROL} ${LB_INSERTSTRING} ${INDEX} `STR:${STRING}` +!macroend + +!define NSD_LB_PrependString "!insertmacro _NSD_LB_PrependString " +!macro _NSD_LB_PrependString CONTROL STRING +SendMessage ${CONTROL} ${LB_INSERTSTRING} 0 `STR:${STRING}` +!macroend + +!define NSD_LB_AppendString "!insertmacro _NSD_LB_AppendString " +!macro _NSD_LB_AppendString CONTROL STRING +SendMessage ${CONTROL} ${LB_INSERTSTRING} -1 `STR:${STRING}` +!macroend + + +!define NSD_LB_DelString `!insertmacro __NSD_LB_DelString ` +!macro __NSD_LB_DelString CONTROL STRING + System::Call 'USER32::SendMessage(p${CONTROL},i${LB_FINDSTRINGEXACT},p-1,ts)p.s' `${STRING}` + System::Call 'USER32::SendMessage(p${CONTROL},i${LB_DELETESTRING},ps,p0)' +!macroend + + +!define NSD_LB_DelItem "!insertmacro __NSD_LB_DelItem " +!macro __NSD_LB_DelItem CONTROL INDEX + SendMessage ${CONTROL} ${LB_DELETESTRING} ${INDEX} 0 +!macroend + + +!define NSD_LB_Clear `${__NSD_MkCtlCmd} LB_RESETCONTENT 0 0 ` + + +!define NSD_LB_GetCount `!insertmacro __NSD_LB_GetCount ` +!macro __NSD_LB_GetCount CONTROL VAR + SendMessage ${CONTROL} ${LB_GETCOUNT} 0 0 ${VAR} +!macroend + + +!define NSD_LB_SelectString "!insertmacro _NSD_LB_SelectString " +!macro _NSD_LB_SelectString CONTROL STRING + SendMessage ${CONTROL} ${LB_SELECTSTRING} -1 `STR:${STRING}` +!macroend + + +!define NSD_LB_GetSelection `!insertmacro __NSD_LB_GetSelection ` +!macro __NSD_LB_GetSelection CONTROL VAR + SendMessage ${CONTROL} ${LB_GETCURSEL} 0 0 ${VAR} + System::Call 'user32::SendMessage(p ${CONTROL}, i ${LB_GETTEXT}, p ${VAR}, t .s)' + Pop ${VAR} +!macroend + + +!define NSD_LB_GetSelectionIndex `!insertmacro __NSD_LB_GetSelectionIndex ` +!macro __NSD_LB_GetSelectionIndex CONTROL VAR + SendMessage ${CONTROL} ${LB_GETCURSEL} 0 0 ${VAR} +!macroend + + +!define NSD_LB_SetSelectionIndex `!insertmacro __NSD_LB_SetSelectionIndex ` +!macro __NSD_LB_SetSelectionIndex CONTROL INDEX + SendMessage ${CONTROL} ${LB_SETCURSEL} ${INDEX} 0 +!macroend + + +!define NSD_LB_GetSelectionCount `!insertmacro __NSD_LB_GetSelectionCount ` +!macro __NSD_LB_GetSelectionCount CONTROL VAR + SendMessage ${CONTROL} ${LB_GETSELCOUNT} 0 0 ${VAR} +!macroend + + +!define NSD_LB_GetItemText `!insertmacro __NSD_LB_GetItemText ` +!macro __NSD_LB_GetItemText CONTROL INDEX VAR + System::Call 'user32::SendMessage(p${CONTROL}, i${LB_GETTEXT}, p${INDEX}, t.s)' + Pop ${VAR} +!macroend + + +!define NSD_LB_GetItemData `!insertmacro __NSD_LB_GetItemData ` +!macro __NSD_LB_GetItemData CONTROL INDEX VAR +SendMessage ${CONTROL} ${LB_GETITEMDATA} ${INDEX} 0 ${VAR} +!macroend +!define NSD_LB_SetItemData `${__NSD_MkCtlCmd_WPLP} LB_SETITEMDATA ` ; Index Data + + +!define NSD_LB_FindStringPrefix `!insertmacro __NSD_LB_FindStringPrefix ` +!macro __NSD_LB_FindStringPrefix CONTROL STRING VAR + SendMessage ${CONTROL} ${LB_FINDSTRING} -1 `STR:${STRING}` ${VAR} +!macroend + + +!define NSD_LB_FindStringExact `!insertmacro __NSD_LB_FindStringExact ` +!macro __NSD_LB_FindStringExact CONTROL STRING VAR + SendMessage ${CONTROL} ${LB_FINDSTRINGEXACT} -1 `STR:${STRING}` ${VAR} +!macroend + + +### ProgressBar ### + +!define NSD_ProgressBar_SetPos `${__NSD_MkCtlCmd_WP} PBM_SETPOS 0 ` +!define NSD_ProgressBar_SetStep `${__NSD_MkCtlCmd_WP} PBM_SETSTEP 0 ` +!define NSD_ProgressBar_StepIt `${__NSD_MkCtlCmd} PBM_STEPIT 0 0 ` +!define NSD_ProgressBar_AdvanceBy `${__NSD_MkCtlCmd_WP} PBM_DELTAPOS 0 ` +!define NSD_ProgressBar_SetPackedRange `${__NSD_MkCtlCmd_LP} PBM_SETRANGE 0 ` ; LP(DWORD):MAKELONG(min,max) +!define NSD_ProgressBar_SetRange32 `${__NSD_MkCtlCmd_WPLP} PBM_SETRANGE32 ` ; [IE3+] WP:min LP:max +!define NSD_ProgressBar_GetPos `${__NSD_MkCtlCmd_RV} PBM_GETPOS 0 0 ` ; [IE3+] + + +### Animation ### + +!define NSD_Anim_Close `${__NSD_MkCtlCmd} ACM_OPEN 0 0 ` +!define NSD_Anim_Play `${__NSD_MkCtlCmd} ACM_PLAY -1 0xFFFF0000 ` +!define NSD_Anim_PlayLoops `${__NSD_MkCtlCmd_WP} ACM_PLAY 0xFFFF0000 ` ; WP(UINT16):LoopCount +!define NSD_Anim_Stop `${__NSD_MkCtlCmd} ACM_STOP 0 0 ` +!define NSD_Anim_IsPlaying `${__NSD_MkCtlCmd_RV} ACM_ISPLAYING 0 0 ` + +!define NSD_Anim_OpenFile `!insertmacro __NSD_Anim_OpenFile ` +!macro __NSD_Anim_OpenFile CONTROL PATH + SendMessage ${CONTROL} ${ACM_OPEN} 0 "STR:${PATH}" +!macroend + +!define NSD_Anim_OpenResource `!insertmacro __NSD_Anim_OpenResource ` +!macro __NSD_Anim_OpenResource CONTROL HINSTANCE_CC471 RESID + SendMessage ${CONTROL} ${ACM_OPEN} "${HINSTANCE_CC471}" "${RESID}" +!macroend + + +### TrackBar ### + +!define NSD_TrackBar_GetPos `${__NSD_MkCtlCmd_RV} TBM_GETPOS 0 0 ` +!define NSD_TrackBar_SetPos `${__NSD_MkCtlCmd_LP} TBM_SETPOS 1 ` +!define NSD_TrackBar_SetRangeMin `${__NSD_MkCtlCmd_LP} TBM_SETRANGEMIN 1 ` +!define NSD_TrackBar_SetRangeMax `${__NSD_MkCtlCmd_LP} TBM_SETRANGEMAX 1 ` +!define NSD_TrackBar_GetLineSize `${__NSD_MkCtlCmd_RV} TBM_GETLINESIZE 0 0 ` +!define NSD_TrackBar_SetLineSize `${__NSD_MkCtlCmd_LP} TBM_SETLINESIZE 0 ` +!define NSD_TrackBar_GetPageSize `${__NSD_MkCtlCmd_RV} TBM_GETPAGESIZE 0 0 ` +!define NSD_TrackBar_SetPageSize `${__NSD_MkCtlCmd_LP} TBM_SETPAGESIZE 0 ` +!define NSD_TrackBar_ClearTics `${__NSD_MkCtlCmd} TBM_CLEARTICS 0 0 ` +!define NSD_TrackBar_GetNumTics `${__NSD_MkCtlCmd_RV} TBM_GETNUMTICS 0 0 ` +!define NSD_TrackBar_SetTic `${__NSD_MkCtlCmd_LP} TBM_SETTIC 0 ` +!define NSD_TrackBar_SetTicFreq `${__NSD_MkCtlCmd_WP} TBM_SETTICFREQ 0 ` +!define NSD_TrackBar_GetThumbLength `${__NSD_MkCtlCmd_RV} TBM_GETTHUMBLENGTH 0 0 ` +!define NSD_TrackBar_SetBuddy `${__NSD_MkCtlCmd_WPLP} TBM_SETBUDDY ` ; WP(BOOL):Left/Right LP:HWND + + +### UpDown ### + +!define NSD_UD_SetBuddy `${__NSD_MkCtlCmd_WP} UDM_SETBUDDY 0 ` +!define NSD_UD_GetPos `${__NSD_MkCtlCmd_RV} UDM_GETPOS 0 0 ` +!define NSD_UD_SetPos `${__NSD_MkCtlCmd_LP} UDM_SETPOS 0 ` +!define NSD_UD_GetPackedRange `${__NSD_MkCtlCmd_RV} UDM_GETRANGE 0 0 ` +!define NSD_UD_SetPackedRange `${__NSD_MkCtlCmd_LP} UDM_SETRANGE 0 ` ; LP(DWORD):MAKELONG(min,max) +!define NSD_UD_GetPos32 `${__NSD_MkCtlCmd_RV} UDM_GETPOS32 0 0 ` +!define NSD_UD_SetPos32 `${__NSD_MkCtlCmd_LP} UDM_SETPOS32 0 ` +!define NSD_UD_SetRange32 `${__NSD_MkCtlCmd_WPLP} UDM_SETRANGE32 ` ; WP(INT32):min LP(INT32):max + +!define NSD_UD_GetRange32 `!insertmacro __NSD_UD_GetRange32 ` +!macro __NSD_UD_GetRange32 CONTROL OUTLO OUTHI + System::Call 'USER32::SendMessage(p${CONTROL},i${UDM_GETRANGE32},*i.s,*i.s)' + Pop ${OUTLO} + Pop ${OUTHI} +!macroend + +!define NSD_UD_SetStaticRange `!insertmacro __NSD_UD_SetStaticRange ` +!macro __NSD_UD_SetStaticRange CONTROL MI MA + !define /redef /math MI ${MI} << 16 + !define /redef /math MA ${MA} & 0xffff + !define /redef /math MA ${MI} | ${MA} + SendMessage ${CONTROL} ${UDM_SETRANGE} 0 ${MA} +!macroend + + +### HotKey ### + +!define NSD_HK_GetHotKey `${__NSD_MkCtlCmd_RV} HKM_GETHOTKEY 0 0 ` ; RV(WORD):MAKEWORD(VK,HOTKEYF) +!define NSD_HK_SetHotKey `${__NSD_MkCtlCmd_WP} HKM_SETHOTKEY 0 ` +!define NSD_HK_SetRules `${__NSD_MkCtlCmd_WPLP} HKM_SETRULES ` + + +### IP Address ### + +!define NSD_IPAddress_Clear `${__NSD_MkCtlCmd} IPM_CLEARADDRESS 0 0 ` +!define NSD_IPAddress_SetPackedIPv4 `${__NSD_MkCtlCmd_LP} IPM_SETADDRESS 0 ` +!define NSD_IPAddress_IsBlank `${__NSD_MkCtlCmd_RV} IPM_ISBLANK 0 0 ` + +!define NSD_IPAddress_GetPackedIPv4 `!insertmacro __NSD_IPAddress_GetPackedIPv4 ` +!macro __NSD_IPAddress_GetPackedIPv4 CONTROL VAR +System::Call 'USER32::SendMessage(p${CONTROL},i${IPM_GETADDRESS},p0,*i0s)' +Pop ${VAR} +!macroend + + +### Date ### +!define NSD_Date_GetDateFields `!insertmacro __NSD_Date_GetDateFields ` +!macro __NSD_Date_GetDateFields CONTROL +Push $0 +System::Call 'USER32::SendMessage(p${CONTROL},i${DTM_GETSYSTEMTIME},p0,@r0)' +System::Call '*$0(&i2.s,&i2.s,&i2,&i2.s)' +Exch 3 +Pop $0 +!macroend + +!define NSD_Time_GetTimeFields `!insertmacro __NSD_Time_GetTimeFields ` +!macro __NSD_Time_GetTimeFields CONTROL +Push $0 +System::Call 'USER32::SendMessage(p${CONTROL},i${DTM_GETSYSTEMTIME},p0,@r0)' +System::Call '*$0(&i2,&i2,&i2,&i2,&i2.s,&i2.s,&i2.s)' +Exch 3 +Pop $0 +Exch +!macroend + + +### Static ### + +!macro __NSD_LoadAndSetImage _LIHINSTMODE _IMGTYPE _LIHINSTSRC _LIFLAGS CONTROL IMAGE HANDLE + !if "${_LIHINSTMODE}" == "exeresource" + LoadAndSetImage /EXERESOURCE /STRINGID "${CONTROL}" ${_IMGTYPE} ${_LIFLAGS} "${IMAGE}" ${HANDLE} + !else #if "${_LIHINSTMODE}" == "file" + LoadAndSetImage /STRINGID "${CONTROL}" ${_IMGTYPE} ${_LIFLAGS} "${IMAGE}" ${HANDLE} + !endif +!macroend + +!macro __NSD_SetIconFromExeResource CONTROL IMAGE HANDLE + LoadAndSetImage /EXERESOURCE /STRINGID "${CONTROL}" ${IMAGE_ICON} ${LR_DEFAULTSIZE} "${IMAGE}" ${HANDLE} +!macroend + +!macro __NSD_SetIconFromInstaller CONTROL HANDLE + LoadAndSetImage /EXERESOURCE "${CONTROL}" ${IMAGE_ICON} ${LR_DEFAULTSIZE} 103 ${HANDLE} +!macroend + +!define NSD_SetImage `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_BITMAP} 0 "${LR_LOADFROMFILE}" ` +!define NSD_SetBitmap `${NSD_SetImage} ` + +!define NSD_SetIcon `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_ICON} 0 "${LR_LOADFROMFILE}|${LR_DEFAULTSIZE}" ` +!define NSD_SetIconFromExeResource `!insertmacro __NSD_SetIconFromExeResource ` +!define NSD_SetIconFromInstaller `!insertmacro __NSD_SetIconFromInstaller ` + + +!define NSD_SetStretchedImage `!insertmacro __NSD_SetStretchedImage ` +!define NSD_SetStretchedBitmap `!insertmacro __NSD_SetStretchedImage ` +!macro __NSD_SetStretchedImage CONTROL IMAGE HANDLE + LoadAndSetImage /STRINGID /RESIZETOFIT "${CONTROL}" ${IMAGE_BITMAP} ${LR_LOADFROMFILE} "${IMAGE}" ${HANDLE} +!macroend + + +!define NSD_FreeImage `!insertmacro __NSD_FreeImage ` +!define NSD_FreeBitmap `${NSD_FreeImage} ` +!macro __NSD_FreeImage IMAGE + ${If} ${IMAGE} P<> 0 + System::Call gdi32::DeleteObject(ps) ${IMAGE} + ${EndIf} +!macroend + + +!define NSD_FreeIcon `!insertmacro __NSD_FreeIcon ` +!macro __NSD_FreeIcon IMAGE + System::Call user32::DestroyIcon(ps) ${IMAGE} +!macroend + + +!define NSD_ClearImage `!insertmacro __NSD_ClearImage ${IMAGE_BITMAP} ` +!define NSD_ClearBitmap `${NSD_ClearImage} ` +!define NSD_ClearIcon `!insertmacro __NSD_ClearImage ${IMAGE_ICON} ` +!macro __NSD_ClearImage _IMGTYPE CONTROL + SendMessage ${CONTROL} ${STM_SETIMAGE} ${_IMGTYPE} 0 +!macroend + + +### INI ### + +!define /IfNDef NSD_Debug `System::Call kernel32::OutputDebugString(ts)` + +!macro __NSD_ControlCase TYPE + ${Case} ${TYPE} + ${NSD_Create${TYPE}} $R3u $R4u $R5u $R6u $R7 + Pop $R9 + ${Break} +!macroend + +!macro __NSD_ControlCaseEx TYPE + ${Case} ${TYPE} + Call ${TYPE} + ${Break} +!macroend + +!macro NSD_FUNCTION_INIFILE + !insertmacro NSD_INIFILE "" +!macroend + +!macro NSD_UNFUNCTION_INIFILE + !insertmacro NSD_INIFILE un. +!macroend + +!macro NSD_INIFILE UNINSTALLER_FUNCPREFIX + + ;Functions to create dialogs based on old InstallOptions INI files + + Function ${UNINSTALLER_FUNCPREFIX}CreateDialogFromINI + + # $0 = ini + + ReadINIStr $R0 $0 Settings RECT + ${If} $R0 == "" + StrCpy $R0 1018 + ${EndIf} + + nsDialogs::Create $R0 + Pop $R9 + + ReadINIStr $R0 $0 Settings RTL + nsDialogs::SetRTL $R0 + + ReadINIStr $R0 $0 Settings NumFields + + ${NSD_Debug} "NumFields = $R0" + + ${For} $R1 1 $R0 + ${NSD_Debug} "Creating field $R1" + ReadINIStr $R2 $0 "Field $R1" Type + ${NSD_Debug} " Type = $R2" + ReadINIStr $R3 $0 "Field $R1" Left + ${NSD_Debug} " Left = $R3" + ReadINIStr $R4 $0 "Field $R1" Top + ${NSD_Debug} " Top = $R4" + ReadINIStr $R5 $0 "Field $R1" Right + ${NSD_Debug} " Right = $R5" + ReadINIStr $R6 $0 "Field $R1" Bottom + ${NSD_Debug} " Bottom = $R6" + IntOp $R5 $R5 - $R3 + ${NSD_Debug} " Width = $R5" + IntOp $R6 $R6 - $R4 + ${NSD_Debug} " Height = $R6" + ReadINIStr $R7 $0 "Field $R1" Text + ${NSD_Debug} " Text = $R7" + ${Switch} $R2 + !insertmacro __NSD_ControlCase HLine + !insertmacro __NSD_ControlCase VLine + !insertmacro __NSD_ControlCase Label + !insertmacro __NSD_ControlCase Icon + !insertmacro __NSD_ControlCase Bitmap + !insertmacro __NSD_ControlCaseEx Link + !insertmacro __NSD_ControlCase Button + !insertmacro __NSD_ControlCase GroupBox + !insertmacro __NSD_ControlCase CheckBox + !insertmacro __NSD_ControlCase RadioButton + !insertmacro __NSD_ControlCase Text + !insertmacro __NSD_ControlCase Password + !insertmacro __NSD_ControlCaseEx FileRequest + !insertmacro __NSD_ControlCaseEx DirRequest + !insertmacro __NSD_ControlCase ComboBox + !insertmacro __NSD_ControlCase DropList + !insertmacro __NSD_ControlCase ListBox + ${EndSwitch} + + WriteINIStr $0 "Field $R1" HWND $R9 + ${Next} + + nsDialogs::Show + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}UpdateINIState + + ${NSD_Debug} "Updating INI state" + + ReadINIStr $R0 $0 Settings NumFields + + ${NSD_Debug} "NumField = $R0" + + ${For} $R1 1 $R0 + ReadINIStr $R2 $0 "Field $R1" HWND + ReadINIStr $R3 $0 "Field $R1" "Type" + ${Switch} $R3 + ${Case} "CheckBox" + ${Case} "RadioButton" + ${NSD_Debug} " HWND = $R2" + ${NSD_GetState} $R2 $R2 + ${NSD_Debug} " Window selection = $R2" + ${Break} + ${CaseElse} + ${NSD_Debug} " HWND = $R2" + ${NSD_GetText} $R2 $R2 + ${NSD_Debug} " Window text = $R2" + ${Break} + ${EndSwitch} + WriteINIStr $0 "Field $R1" STATE $R2 + ${Next} + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}FileRequest + + IntOp $R5 $R5 - 15 + IntOp $R8 $R3 + $R5 + + ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ... + Pop $R8 + + nsDialogs::SetUserData $R8 $R1 # remember field id + + WriteINIStr $0 "Field $R1" HWND2 $R8 + + ${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton + + ReadINIStr $R9 $0 "Field $R1" State + + ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9 + Pop $R9 + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}DirRequest + + IntOp $R5 $R5 - 15 + IntOp $R8 $R3 + $R5 + + ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ... + Pop $R8 + + nsDialogs::SetUserData $R8 $R1 # remember field id + + WriteINIStr $0 "Field $R1" HWND2 $R8 + + ${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton + + ReadINIStr $R9 $0 "Field $R1" State + + ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9 + Pop $R9 + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton + + Pop $R0 + + nsDialogs::GetUserData $R0 + Pop $R1 + + ReadINIStr $R2 $0 "Field $R1" HWND + ReadINIStr $R4 $0 "Field $R1" Filter + + ${NSD_GetText} $R2 $R3 + + nsDialogs::SelectFileDialog save $R3 $R4 + Pop $R3 + + ${If} $R3 != "" + SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3 + ${EndIf} + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton + + Pop $R0 + + nsDialogs::GetUserData $R0 + Pop $R1 + + ReadINIStr $R2 $0 "Field $R1" HWND + ReadINIStr $R3 $0 "Field $R1" Text + + ${NSD_GetText} $R2 $R4 + + nsDialogs::SelectFolderDialog $R3 $R4 + Pop $R3 + + ${If} $R3 != error + SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3 + ${EndIf} + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}Link + + ${NSD_CreateLink} $R3u $R4u $R5u $R6u $R7 + Pop $R9 + + nsDialogs::SetUserData $R9 $R1 # remember field id + + ${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink + + FunctionEnd + + Function ${UNINSTALLER_FUNCPREFIX}OnLink + + Pop $R0 + + nsDialogs::GetUserData $R0 + Pop $R1 + + ReadINIStr $R1 $0 "Field $R1" STATE + + ExecShell "" $R1 + + FunctionEnd + +!macroend + +!verbose pop +!endif diff --git a/tools/Include/x64.nsh b/tools/Include/x64.nsh new file mode 100644 index 0000000..59d9e8c --- /dev/null +++ b/tools/Include/x64.nsh @@ -0,0 +1,120 @@ +; --------------------- +; x64.nsh +; --------------------- +; +; A few simple macros to handle installations on x64 machines. +; +; RunningX64 checks if the installer is running on a 64-bit OS. +; IsWow64 checks if the installer is a 32-bit application running on a 64-bit OS. +; +; ${If} ${RunningX64} +; MessageBox MB_OK "Running on 64-bit Windows" +; ${EndIf} +; +; IsNative* checks the OS native CPU architecture. +; +; ${If} ${IsNativeAMD64} +; ; Install AMD64 64-bit driver/library +; ${ElseIf} ${IsNativeARM64} +; ; Install ARM64 64-bit driver/library +; ${ElseIf} ${IsNativeIA32} +; ; Install i386 32-bit driver/library +; ${Else} +; Abort "Unsupported CPU architecture!" +; ${EndIf} +; +; ${If} ${IsNativeAMD64} +; File "amd64\myapp.exe" +; ${ElseIf} ${IsNativeIA32} +; ${OrIf} ${IsWow64} +; File "x86\myapp.exe" +; ${Else} +; Abort "Unsupported CPU architecture!" +; ${EndIf} +; +; DisableX64FSRedirection disables file system redirection. +; EnableX64FSRedirection enables file system redirection. +; +; SetOutPath $SYSDIR +; ${DisableX64FSRedirection} +; File something.bin # extracts to C:\Windows\System32 +; ${EnableX64FSRedirection} +; File something.bin # extracts to C:\Windows\SysWOW64 +; + +!ifndef ___X64__NSH___ +!define ___X64__NSH___ + +!include LogicLib.nsh + + +!define IsWow64 `"" IsWow64 ""` +!macro _IsWow64 _a _b _t _f + !insertmacro _LOGICLIB_TEMP + System::Call kernel32::GetCurrentProcess()p.s + System::Call kernel32::IsWow64Process2(ps,*i0s,*i) ; [Win10.1511+] 0 if not WOW64 + Push | + System::Call kernel32::IsWow64Process(p-1,*i0s) ; [WinXP+] FALSE for a 32-bit application on ARM64! + System::Int64Op + Pop $_LOGICLIB_TEMP + !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` +!macroend + + +!define RunningX64 `"" RunningX64 ""` +!macro _RunningX64 _a _b _t _f + !if ${NSIS_PTR_SIZE} > 4 + !insertmacro LogicLib_JumpToBranch `${_t}` `${_f}` + !else + !insertmacro _IsWow64 `${_a}` `${_b}` `${_t}` `${_f}` + !endif +!macroend + + +!define GetNativeMachineArchitecture "!insertmacro GetNativeMachineArchitecture " +!macro GetNativeMachineArchitecture outvar + !define GetNativeMachineArchitecture_lbl lbl_GNMA_${__COUNTER__} + System::Call kernel32::GetCurrentProcess()p.s + System::Call kernel32::IsWow64Process2(ps,*i,*i0s) + Pop ${outvar} + IntCmp ${outvar} 0 "" ${GetNativeMachineArchitecture_lbl}_done ${GetNativeMachineArchitecture_lbl}_done + !if "${NSIS_PTR_SIZE}" <= 4 + !if "${NSIS_CHAR_SIZE}" <= 1 + System::Call 'USER32::CharNextW(w"")p.s' + Pop ${outvar} + IntPtrCmpU ${outvar} 0 "" ${GetNativeMachineArchitecture_lbl}_oldnt ${GetNativeMachineArchitecture_lbl}_oldnt + StrCpy ${outvar} 332 ; Always IMAGE_FILE_MACHINE_I386 on Win9x + Goto ${GetNativeMachineArchitecture_lbl}_done + ${GetNativeMachineArchitecture_lbl}_oldnt: + !endif + !endif + System::Call '*0x7FFE002E(&i2.s)' + Pop ${outvar} + ${GetNativeMachineArchitecture_lbl}_done: + !undef GetNativeMachineArchitecture_lbl +!macroend + +!macro _IsNativeMachineArchitecture _ignore _arc _t _f + !insertmacro _LOGICLIB_TEMP + ${GetNativeMachineArchitecture} $_LOGICLIB_TEMP + !insertmacro _= $_LOGICLIB_TEMP ${_arc} `${_t}` `${_f}` +!macroend + +!define IsNativeMachineArchitecture `"" IsNativeMachineArchitecture ` +!define IsNativeIA32 '${IsNativeMachineArchitecture} 332' ; Intel x86 +!define IsNativeAMD64 '${IsNativeMachineArchitecture} 34404' ; x86-64/x64 +!define IsNativeARM64 '${IsNativeMachineArchitecture} 43620' + + +!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection" +!macro DisableX64FSRedirection + System::Call kernel32::Wow64EnableWow64FsRedirection(i0) +!macroend + +!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection" +!macro EnableX64FSRedirection + System::Call kernel32::Wow64EnableWow64FsRedirection(i1) +!macroend + + +!endif # !___X64__NSH___ diff --git a/tools/NSIS.exe b/tools/NSIS.exe new file mode 100644 index 0000000000000000000000000000000000000000..ef103ab63c78a2eb93f950451fb1ad9acdb29972 GIT binary patch literal 91312 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 J;wcFkU>El7h=2e9 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/AdvSplash.dll b/tools/Plugins/x86-ansi/AdvSplash.dll new file mode 100644 index 0000000000000000000000000000000000000000..ab8a750266b4d2fb3c959627116486b3c2d7cec5 GIT binary patch literal 5632 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/BgImage.dll b/tools/Plugins/x86-ansi/BgImage.dll new file mode 100644 index 0000000000000000000000000000000000000000..66f3dd8706334428c2bafd8e496e7c100887ef7b GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/Dialer.dll b/tools/Plugins/x86-ansi/Dialer.dll new file mode 100644 index 0000000000000000000000000000000000000000..d75ad5e8694557293a452fa8d160475dedb5cd12 GIT binary patch literal 3584 zcmeHJU1%It6h6Dz)HU6N5n2rR&`C+5zAQ7dDu@wwZPpsyO*g;V5<(|Clgx(A%y#y! zHsV7ijj(K2#HU4lNJT+k1fgJBRMu`4R!LiYuu6kQ@FCDX_~3(Ras2M=pOK`oP_Pd< z@XfjBoO{1HKX=)QAA5t^h{y*x4$(3+m$3W1{iBR<*S-r~bngC@o@GyLrDxPgWyOqb z&DiRkm{d*EV&ar8+Bs89nPUHu5pmAa^k8RaM{k|F@Yc0&uKanv)WUMRUD6u9H466Z_Ux(^1?7r>Cx=+K_}W|B z!aclxR}y&E4KIZk-9vmYKkVwd>LL0BUQs0KNh<#PUYF(G9g8M%<;E%jYn@Q1&Ng!_Hm-({mnmNAoKN8Yn)^XBvR_tUD#j z?{XJ;X%ZJ;NA9T(ydn~v0p1190cC*8s^}`3sB3Or=4*g)U6*x{2*34BWjpR+Z_HA) zSZc~v?fD4N7oNj98=22CeXc)c>q%yD_Y(IeY%3YjG+WPRakbmhS!O3Q^Jav8_Z&`J zQ))Vr=6_4iMTZBYv5*qf(rKb=-j}i&J7u!z2#t+Iha3KXC)@aTIMzetL9o4!gRuL6 z1Q2?F=sHluH^3Tj8fzVX1}p$?0`CKy!HX{{AN8lyv~IhZL>NlSutSz{o)yW6B|AKsl;RDl^LV3GD3nKRfU@$Q|WI literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/InstallOptions.dll b/tools/Plugins/x86-ansi/InstallOptions.dll new file mode 100644 index 0000000000000000000000000000000000000000..a60efdbc98ad8951eab2080a2e6d1d320ffbc8e2 GIT binary patch literal 14848 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/LangDLL.dll b/tools/Plugins/x86-ansi/LangDLL.dll new file mode 100644 index 0000000000000000000000000000000000000000..059bbd69975a080561311c7a2adf9f2944e0e2c9 GIT binary patch literal 5632 zcmeHL3v5%@8UF1!4>BkAwiq%7szbdMR>iEy5FJL(nv*}j_;Cj2(%X)d(xG{;RUB3| zzgE#6?Cv%8#G+j>|4w74KN5+`#vPI|7LORaBSu$in{j6}AXS!>6q|C;Rgax|_r6Qd zj{l3E8J8d*y?%N8N9dQGdt!Vq`Xm2%ZoD7;0~62lenWR>ki|@8=&2`aR^`*0w?_k0 zx(ifU@fB48Q4uurv)Z!;^m>qy%X-eMv-4*fRtMfX@XQHnat`qz7RLg3pY3{<5H&&D zVI=Y}vlG0EF>@M>7v`w`Bhd)FFL11sr9K(dmB2zm<=bB}F#1D+ZU5^cNSwl+~7x;R-0m|22`+PCF#Mh1TQMS zP?t|Jn814!Lo@4wJ%|i`%mXH?YL+8hH~1!&_}5M=>3wM*PU28XH*^XrU;2GWK4i2h z{eztTIp`}~rm|4!=8=9=`K4!hTo8v-kCC#I(GBj0SI8Z@3yFBLgKKyvo3<#1qs6C(>OvT@Jd@8plOIQYCYRt)Uo9B2{H@F2z`}Sx^);g!P z@ei40H7r$&8NyHH!cgAkE7vlbJCFbV>dUAu7M?N%UY?@k1P{~=eiZ@9nsO9lMB_Ym zLG1}ShZnOQue<>twu5zpA0V=7F&iF})+ZO2!F!|b;d-c(EA$Y&X(M1*A-)5hS2^zl zjPgdZgdZIPLmAOF4Qmc$&k{cv7%r(9K+ND}-QGe{KGDkiuqwb;K+)$KEVd7iNM&bumVN zU^7~H6OrrdEVUKm^iMW!fwqx5LflYkJFDh_b}3h{F8 zUMX;#!sUh}*#yn}ln`APh?fot!Ai!V@iY0{@LWX(K?a$!v&)2bSiFK^#=f*q+bmM_lPaV;HW z``C+1_Pa^*&}DfUE;p3!>mv;s4=y-u_8Q<$$x`odkz!!`OiX3+5WelWh7vUlfaI!! z>~MM$sUo(^3~cWzHhx||W;h(rV1_n}MZ*Q088&l}ev{@KF%4k#97gv%lFZ9zXBtB! z+fB@*Ot4GKsg(X>P-4T*H@xif* z>SB^#mKvfFxhWFpjzL>X_wekbUEQ5hoxi7-8eL6O0Mjc-)8A-6$2zN^pQ4{YeiAea zx)MDI7LpYcLdiw0BC_g}2)OV+B-{ zk7<|VU3d2ERfMaI@OQxH^z0?X4O@qk=sNnjO~wCJ%4*LPo!Q6mad%QH?_JbQehO2R z*ydw@U687U+Qv5Cw>RUnx-ZzPT_$kT*v&>L=ieWFqkA3IO zwa;?C*#!Kza{)P3nb(*%n;$g)*!+a~i21DfqWO~fx>>M%-%@8;WAR$HT7GEhw;Zy( zXh~TnEPu58)pEt67PNvvSS;KrR0$2jCZR*PM;H(e2#*V+!Y_oEgx?A82%if1;(T$j zD2k0@SnLz`i;s#=icg8Z63>Z~;-AI$#LvWqR-<*fRj@W$TdiSh%(~aQ-#TI)vp#J- zYCUN^Z~cq)@77|Q&bH8YyKR}xYIE4u+S+ZMwm#cF+atCK+n;PVY{k0K V`x<+zeUm+6-($boihc9t^G`!1a325w literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/Math.dll b/tools/Plugins/x86-ansi/Math.dll new file mode 100644 index 0000000000000000000000000000000000000000..b552188ae1bc884e87e37c9090747638201a7019 GIT binary patch literal 67584 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 LzvU5M$$R@BY-6>5 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/StartMenu.dll b/tools/Plugins/x86-ansi/StartMenu.dll new file mode 100644 index 0000000000000000000000000000000000000000..e20784af3875acfbb63616ab102b53afad86779c GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/UserInfo.dll b/tools/Plugins/x86-ansi/UserInfo.dll new file mode 100644 index 0000000000000000000000000000000000000000..0eb6c278461d396b71037e24c37e5280cff8abab GIT binary patch literal 4096 zcmeHJe`phT6n}}CjV^72^oF>(U2FgFkC9!jDh+j#%$~KF)?3q7ot&B`H(fQqbcZrojWsLpd zpby@?_dehE-uHdq_a%27ue=M(0KkRJ7{C}xqM-GB^y3;X*F5)C4P0DtwSLSIzFOa% zNM`r}LqBLl(|jzdX}Zbxsl1WZ_@u_S?u_thJ+Atyt5-IbQ|}o3<4*0}GouUq(dZhq zzyIyhs2kT4#hU&b?7by3X^4q*rK00(?VJZeS(z9ByZET3{u(6T6q*YC64U^gKGGWmPR zSfC)lxX(~idJJHOU<53`8Zs6r2=LN^wWK{x9q1`c7dq++lBdw)9SIBIJ$WTxEu+kH z-Sm_^=BD1N8tI<9=o^|rehbg82`6^4vH}Bu4OknQZ z^!iBCt-LaoS7sU4Y`Gs>IffJE{q?j1peW7Ck$yMhHsF%XxH>ywJ>dikHteB!7Gq>YS$6(Ggt_9fbO#f|Jr0Yg z9sC^Cz*^d(c5oQ=U3mpNRFVtQT*M-FA&eUorR)8CzZ1{swhm(^F*>hIo7^zPwoI6w zV#oB$EL)1OYxl$eo?=Tunr~u()kiiK2VA(oHZjg+2UlH|rl|(>XvM z#)FqUkb9AGff*R4@uOLLFluZgL4_Ht$y40s!dhCfmddEvGnW_kUHaSq9Oho4f7k(6 zJ-)+{*C1~~4kI5xp5^TXr%?X@`5f|>$dkx7k$*>?N3LlAXh0^acLJ=&3u{2>MY#^8 z8zqmDe(~pc^0LXmSl|J^L#~jo0ilQN3QqFBth3S4rkXt&)#!|-)eyihu+31_NHPvL zKsua_rbvag5K7^zEo!PEE#9sr&15u{JZ`zc8p_bEA5yh;?N!}KN6nFcmJrSv^qR%Cw#q_LZb{`v10ZqCmk~@v$!K8)_dT5zaEYZL2 zKq#J0;wXTuA60RXpe?Ir=sS{bgpzJesIf!V;C86#KAfCH()xU@OfmT^(f_yuUi`nu z@~Z_-cv|oYTZDF@OGpbxgdyRya7Oq!9C4Lhp0JJ#HE zQ&QTD>UaP1r3dBU)zmLjG<6K+b)832C-HuB>a6nSA`_|8C_h}Wt(;_Ugv?^*xQ%ft zuJGcK?Xxny+?rLIxOp6xjG9BS+KooM^+@STS+C^dV?0m|@u56p_?;=lb0(kCiTY6o zophtZ!&v<8nMpa*G%jbQKy1n0na_Chg z-1m#-b1|87vDTFeLIu>t7%1v9AGORJ%r#$h173vS<(kjApK39WQ+~KqG#_;8$pn(V zfT|e)$G)un4QhptgvPx6TN2)0yCvb6dx1BibMyX!h{+q#*M)?}nU;fdE#tA48D)W4 zK(4wR`?$`h!8~-vf%QOfjB{eZH$5%OIrfNd?-SIl8nWXB1#-b9Vp?{_S@zjw#j(Cd zm$2U~uWj0O*E(MJqiz6Pr`ly$m$=KgPIfPy8MWD|j>Q2?^Sumno$*8Sp>th=)qM+O zpmZ8a6^$&SJ8qs1_biuR`7&7)@bBGEkQjGq(uwRv**zhbn{^ikwJ=W?f9$4+o2 zP#bwBp0$VtW7f@<@{ozs&!Y7qDy>j7HdCvYQ&fnfJu>xDx>Cm+Ga{|)sx05>8OgDa zxZfP=C(GjI;9k8B?$tTC@w0HRTnG0G!94@+uY-FgcS^VSkKlTSrn%`t5zvKtuV+l9 z^R*#2GcmL=C*85J(}zmI0L>lU z-bVCbW;H_Dl`-@d3J6_AE*F61jFxpSNd%!^ljk>uO1$UNoVwOcB}2GV^|@kyfUN)lyEIo=s_>MGE1Y&x#`K zLvcTeKD7!~IKU)`mO%_hKDU zu)~fp+mNQRIaQ)1v6O90(=y51r;|b|Z?Dcfk>pA6O6kMASGs3k(u3Xzl^dztc#l+> zrd98Yf3VQ~Q7LiY9eKx=nG!9ADWe@_@Z0sQ$s%sJXDMi~go+T^%&Z4BqV`_zgsE;5E70B<}tNCS3Hz@ z$A{0~58n!M!w_g+wX%^+DzfQ6W*wcK0nsq^@ z2c{b*2*V1(a6&w|DDKDkS6LUElm-_|my4oJlw^5)c%4o)&>ae##2NsScvciV_@O^&d2<)tWTl#G~dR$ z;MiGe(@AS9%v!zh#UCnWfn0^< z2h^+7Z~qOGq~68SP?AQ%wBk=1PZ@)-s+-4Qsv+lz?|$bBYmfS^+>}@q`~>%FT!_Wg~dP9h5Ha}8&D;zm`v(&!;7Po^% z#e)dZt{HRBh-4{z=TUc3J8^S~QgF7+h_RdsGFt11uzQ!qiN+q zC=zBO2eaVdlGdq?L5ja*>9Q8Ei_|<#)OLh^2kYXC#sT@$vwf=o`SNn9Hvy2PYY-E~ zjpCuD=M(Q~Vog$Li8L@D%=Z9thu^Hmv}n-;X;L20Jb%;g#>uLirM?BQ>J)EQ(==1F zU<`8rnE#Och#ANLyDwQ9)sipNd@EqbybN=-n$c z(e+ZFUNgZ@Wgr*|)YQ3IJh*UY!w2tU;qF@^U7nAH8-dV9a6owchr9pjHg=N6>{n?{ zvQAzS+JyjLbOuaM{?)6OiD|{m4nDxTg)SiouF2~SxxVz#b2M@E(x6_`!*^%cacYag ztwKbZS-ON<_NmCBmf6Uzt2DF>+pDIPHSulXfJPEpcr(^){XfcgtS2@WOZ`bP zHo_lk0x{PeTK1ap;G4w9LTNy!Orb!yL(@$|BVclKj=U5F9itj)AVpb6y2G8CDPfYw zve}?(DtXjF;j~N|oTr4-X|zrVSYSY9;y;|x{vDCASQ<>yv|z`T(5i%6v)Hi2Gd?O4 z9}A^H9d^?RK7iIqVk87c+U&I=txPQCb z8vfI9;|kR@^cd!7_UCKgV?k+nvDBNS31W_R!4XY@#G8X~#JeAN-a(F7DD~^$h<3h- z91)kV7qB59eAfPb$B%|7wo*X2rtJrOYh0l=t~7b>Ku>2Np^*jP>&bX;AJ3A1BK7ed zmvJ3X@7t0PuDitMIm1$jFS)bT+xPvv&E+PX%x$63FX&fRmxj`RE@Vy^hIz}!a4i7 zc-(J&u%dm}QIVRuq_ zD=wNtr@oXVA<{}hEa;t*-HVii{8DHv|2YXChOp3RDaLIPr$8FD95sz3Kjxj5-6@b~ z*(5KYx60?sUqq+jAKK_@6Dt2qIdZay?HUQve;!BS`@C|TJF&cy=n zBYzv^lf1GDs8z^^j^oZ01As3p$rx`qi7puW&|x%ud8(zW6^ONcBe9}yOrdWzgq>V@ zJrM%lhz)8W3+pio@fx#ITRsxNP??Y)&cT%v9v}OoEGu7X5|y^$#W1Yi5yfYSaZBi> z&(Vlni6t}*Wi~m57@Bqdy?-9YRt4j30(U(|YPccB7a%{pmTvjBkcD8-*Q6PYOX?jX z^qmBsGtO8-hhrem0A$H^An7)AbPNXL?s!tmy-G1@!%g&VmhQXay4_osrsiCW#C&`$ zaHZkKp9b3$A-2Hg$Bov2GF_X|z4Rn5Ro^28oGa&53UZsbQEhRWEitJ6s7)jQu04N7x7*BGSU?!J-%VDKw5*e4(UOptw>KI)gbLgntk93<*A=} z|D~_jG4AYhfb?Heo~@_%UxITbZ*{oxD=HmZDt0)yV|;NCO7ieMetl(it>b~Rs_oEe<<{3Y z%4XZ-xce)spD3%$uW>jy?nAz^)>X4@=W}@+_t9*=DvyiINaa=1NA!ox4;Pv@3YlxR zS5|Udk=6Y0Z2np%xVir}u7EG{1J*<(1yR0)G={{l=D638-Y`HW6aUj7r6N&}c+O@i zb8RbE#sLvz?fQq;3z^(Zp zhO$Zo^7iNOmtC!^tg_Ov9p)ES8*1GZuCga89R?*b9JPjL95oKZlhy7j2q*z%pg)Za z_zSS2YFAlh#dbq=jbU4LO^tge{WZnqRT&&LHK?oJw#{8rLH<@QMBbh3}Aee>C!ec_6utzu`92Wjn_z&TP&?=l2&I?fg?eo9Lz<&dT CZ?Z!G literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/nsDialogs.dll b/tools/Plugins/x86-ansi/nsDialogs.dll new file mode 100644 index 0000000000000000000000000000000000000000..0d6a3f48767126f771d016cb90551826cb953ac2 GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-ansi/nsExec.dll b/tools/Plugins/x86-ansi/nsExec.dll new file mode 100644 index 0000000000000000000000000000000000000000..d64bb616d3d4338dfb68602781cd3f28d9b972e7 GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/Banner.dll b/tools/Plugins/x86-unicode/Banner.dll new file mode 100644 index 0000000000000000000000000000000000000000..5faa70b295b56d44438d4aa03000faa89a3d337e GIT binary patch literal 4096 zcmeHKZ){Ul6hG~{G2v}=xEfG`Z=)m-$$0N|GYq#_who34sC0W3kU?1=Yirle_PxwS zG=s8`@v?-Fg=qW}$1w4W5RFCx38@>pNP_Tz08u{pfkeU`=%j; zyZr9C=bYa?_uO-D+q;e14pRXUIRL{TIt9s^*X(ESF2P;;{OMBq`l$;Qr)(`3Dq17a zG~b;{cBVpId`BpeNUHp9g->Y-KAPZtn*)4TGOSdUl+1PKL+iUQk6$b}J@f!)hAu24v%Ee^#q&lXC~*k#lo!i)1~Q>t$M-p}Kj)RR^}5>x5`;TLC3?E~B8(=TaSTaV2%K%=LA|~O zjtN(;&oB(c;Rb5l@EWdWn5}Z%s3>Hnot|v_sDtIGH*tXx0VchvTpp=52hL!maRE6; zRqKpzX220Dj0aTc(92ZsAu{3gCIqmW!N{0;sj%4 zIm{E4wdN#kNv%oKp2=PL%P?Yd4HpN_Fyp*5uKkQ17DLx-UPm9Z85$QbuEYurb2q5m ze8bfW4;EpLi6Tqg*}i?pm?t}C-4}}-;n>wNT)RNeoa5x&N4Qq)W5Xm&{IQCL zL6|7Xt!L>hveL`?80{OvEf<>-IJXtz;t#ZnR*t0)HTEGOyofy z75ige!{r9es4>s!HVb41bn(-{XrRc9Iv}tpdaK)kpj_sDZBN;tqi@i+_R{=s=QcEC z?hEN#AUv9_yaGQ1KsC?+yaH?kx`FqAL%>mhwXYyYfy=;ez&&7YCD9U~3aA5`fp#Dc z^Z`eJPXN|F=S^XD$1#_nUk0Yy3Gnb~{@3<@=J{PgJgufWy1Iiz`)%tLbz?HD#g*nz zA{tER?yGM(2+E(pXGrJIt}m{LNj(i(vX6Rl%28?{tQNvM`>1FVK^eLT546knH8 z6ryo!rS4utJwG*01nFL$wKmRvTwiV4vZ<-XBUOdtcmjMtJ_YF|dxOzLIN3w{>;Xl! z#x2Q2Cn6=;%Kxw&e86eNI{}gUNWjaQ_Xu3P3c0@KR>2#=*?bK%XE6SS> z^o#ajD5~al`ogv$olk<~{O*0xP(0b`58(lb`A6)5NU~>&GmqA)YN#WUuSTL=;zjYQcwM|9PKtksB+Zk`qzdT;X^qq@ZIS}gHYp~(BOQ_sOCL+0 jN#~>+((lq8snAp6dCpVe5j`(@UiQqA-4oY;T!Fs<1^ZNi literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/BgImage.dll b/tools/Plugins/x86-unicode/BgImage.dll new file mode 100644 index 0000000000000000000000000000000000000000..02ed7112a2457be7d33467f148afa6e49aa14b54 GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/Dialer.dll b/tools/Plugins/x86-unicode/Dialer.dll new file mode 100644 index 0000000000000000000000000000000000000000..121ebf7e539320ab93faace72223fd259d526560 GIT binary patch literal 3584 zcmeHJUuaup6hBF`E!Jd4>7YKyZXp9f2>0GF5v`DF(^*W~wCNu#W%M@pc1gIsH{5(t z3wx2;X^g?)Q_z=95Y#8Zfpts?O&xYyr|!jybBOv-*dBcFLHx7p@4NZuq@9i_?4jrK zyXQOSeCK@U&lhszQ^%=;h&+I86D@;tia76^zp60r-G6#7ow{qiXW127?-@&H@jstsoHfa`Sc+A)49Fb~C-uOm*u`A*MagU}C7j z$&2UQDx&Tq;OLO0DojDHF6f}(HIo&QP<b@}?uLEy72CEE(Py)u2SzW9wQ#kTj&S4Gj`5j7XQ@BfRU$j$t(9UyZ((mw)rB=v) z(amMA)M{whd%0vAbMb|7RlRk!$a_mXdFi;is z6_}~Q`jlcEDdbw>u%TxRttE~d3fv4;Qwa@d_-bmBDNN(%{5N!f@^pZb6e5*$Je;P1 z$-$w)q39TyG>1p03>n0aHNo2w(V)RJ%g|V}Chp(T-B@-@zg0PNq~Hvl3S>FwEh)Hou%!+yOCGoiUzIa+ZD}E_%h(CxOl3%)C z3Q7-24@(o$jFgoM(ov}-y(fJjosrHRkW; literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/InstallOptions.dll b/tools/Plugins/x86-unicode/InstallOptions.dll new file mode 100644 index 0000000000000000000000000000000000000000..a842ac64d711709f84af5a0171d70385e54ea630 GIT binary patch literal 15872 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/LangDLL.dll b/tools/Plugins/x86-unicode/LangDLL.dll new file mode 100644 index 0000000000000000000000000000000000000000..1e28c761691b51553ea8900860b7ba95f43cfb1b GIT binary patch literal 5632 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/NSISdl.dll b/tools/Plugins/x86-unicode/NSISdl.dll new file mode 100644 index 0000000000000000000000000000000000000000..9c2b7e1a9ebf4f52fc634b37ab27c06115a23349 GIT binary patch literal 15360 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 J|9>p-e*xf(1}Fdk literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/Splash.dll b/tools/Plugins/x86-unicode/Splash.dll new file mode 100644 index 0000000000000000000000000000000000000000..2bc507fb14d7e773185db21fc2ed756fbe12fecf GIT binary patch literal 4096 zcmeHJZ)_Xo8Gr1!D1aLq$f0f;nhUAaHDK<~B3eS3seOb%T2685tDq`%;&acIBv;NShSqTq!B5Vi;-M0l6W{7nYJ=UboJ`%20Ez+&+1{TwkduI z8{^v`KmSA~p2a%++_mv(tWW)ZbG(RkJU3->-)?7`N;KvRQ1Z;LGhN*hMb}>MyT;p8 zZ$}%($`Ntpu*>^B7p~#^cS*ywBlsy+b%S^u4{%p+Id~h<7HFT05M3mbi*et5hu-t)yxfCoj0c1KH@w38-UbX&YD?|XZ zp&%D7QH-b+Eg1!Cis)7!^ia5deOND}m^YfsG~cpU>jdhFfk1OYq_EP8Ee2_O{rsWx z$8aCj)nKZ*8~VE1-^{pcxM^Z-RChAQbgglMuV?#kUp1-||6xo!>jz(NaJ6zlX`K_Y zm49uT`)=sflOv75!I4JdzQ1JaAt=S>P9(CIvYTG!fuZ>y;bt0sC-jrMur3V1X3_zo zn!3EO9zsq1a)Ec4dUutG<)1fDxOop4CTxs=O@M8v%jWG^o0_ZtA@td5D>VN%jJ?xc zqdN9)G|7bZFxEHUj;m)e*C0k?pLq^u(38w?geaBrTvA$!3HKmk_?_ks*hBLTBu>_E znTO8o!870mr!@9)3cau)w_jH7O>xqo(#(ShVM4~OZsJ-~gW9=BD#gmdhI$5#6`-uP zoSQsp1`X+SWBaFEU{_Ge-s&KU(flztHOH@}SxtRJ)qCrXywtV)CoNOn}kZ5I_IC z53&aN^BNkctc1!38tTuJ8m7jCG3Yf+hzUV(_0#CZGduv%YqLJo3qHv{t*QO!2i+(P zbA6w5J=tjkA!xD9$0!7NV7VXuNhS~k6!TIhASkUz&&4V$;c@^s?p=pgZo;gN`|uy= z1cuw?o6(bUa=0Bj{8nu>pEDC;UOH9|;{eg{e#jW^Vwe{A(~`nL-dPu`7n~nd_7C(D zPWAqP#+(6kvL3FkQ@t-$L+F58|6C8Az+H<0s%+*7$hmugKYpo3f_k-lj0xZ46^GnM zvdt5@35CeTWK_Gx%~}(Amaj|wx8bz_Yyj>CG#~(QdT}k$v%q2C$H0Do)5cqg9t1W3 zdEjy23E*eIZ-Aq~o4|*_60imc0xO9BJMbxR3fKW1C$m#82wj)n0FNEhz-78+_~X&0 zHqfPAJT`)Jy3B7Dx_RjS7hO&JeY2-vJEf_#qZ7UB@iY6tGv7$TnoJk&FBt|V)wL9L zTJBixEAW@_L+bc8bxe_?nF3zhr~PyGOet4%vN|2}Z!eaNJvrMkO7TM4wvqK&O62UB zv@>OHHEcV*$AIo$--zK{6kqU-+Ip^-vF3=<6fYTR$M9rzuTF3I#;kN^blQvjj(_}$ z{3l#{yj-%al1@LRgpu`vwURZ3T1TM4cCCG#67P{(%xGyej2#pDh!=83(HS?U99m6V zkiFQkKJHH%&O~n7C=osFPny#SHZN=(ep}y<@{oI^OwqeF^ui4{{g3gZw;j6bRuP z?*vx7c4ly(rW(W9qt%alctTthPle3PE1?dmcYtq}&Dd`jGj1-aud7UiFS=o|js$sVIk)UnKxDidsqJj*{aTn literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/StartMenu.dll b/tools/Plugins/x86-unicode/StartMenu.dll new file mode 100644 index 0000000000000000000000000000000000000000..be975dae0c7ebf232f648880da1ec95c59b12923 GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/System.dll b/tools/Plugins/x86-unicode/System.dll new file mode 100644 index 0000000000000000000000000000000000000000..921bc86ef06deacd9b799b5ed7ba5ff08d6ab205 GIT binary patch literal 12288 zcmeHte{@vUwf~tPNrq&SJ3xX#qJ$6>MRCX_8Inoj@MA)F5*!#a$p8sN$OzL2816;s zBLR9d;Pp6FU)9!reO9IQ+1I|Wu4)mhuPb4E1O)pK{Yol)`@m|w)1exLFBvrTen0!( z3DU0j`o~-AyH?kCbzt9f&fe$8-uvvc_rB+*Y30Mr#u&2$be*vSDCy@jo`3mq9OQzj zzbIfYk9%v{0n5_2rroh&~?zp>jUB{+Po2Ak_J4?IeO{E(*l`gtHSbF#7 z^_{cx^K;8HQ{U5l<3ChRTr@BS`-Q(7s4&|8foUi&mP|I<9d2o04%(qPn+E2hd{gup z<%*5#Hqh8HP6K|%mRjsAc>3w}W4JSH_Ov`pHe+SLH==X_d`8=4)UBo-2t)cX zep~R&G_1@QGX~K(8eo)W@!|r;UIO-~KE?t>{;z&(8B1IKE8<_k`xtBe3*^~S=Y10B zpO)f5e37h|g+Lv@QpVQK?q1&^buhM$Hr)rHKGy-R`1wGYZFXb#5uOBsZW!t8il2|M z{@LA~U7Oc2_Bhek0%*RQ09X8cj4imL`M2s{kp}ppa!1s%uPeY@s21+qf{I3a8BS=A zXE7G*mu-QRAiS`s+#ZPf^djbCu7LI|Na2Jr*!pLK|4rBRaH5%?<9=tzr1=Y5jEO~E z+l;ySaO|SAE~3=m5|k>|8CdRSwar?qlSo5~4kR~hXgt&lj-Rlidn7to6wSemC} zr{oDOW1R4zpf-tkY0+h8P@99Q@`f{{7unHw)tdG;gU4Vq?>Bv3O*@E#8d2sk6`J8`p>HSJA>oyrs5NZ6q@*LlLlc1! z`u-jIQnUu4FJ@G-g}zC^E1F$uoi!lUGzzgQwBrlE)*v4a>Xo!&yulvOzKKKgj1MjF zu4b#1R8872B%U6)zB!4c4Gv@C5nmgP*%HtMQ7snP_5=Wbr0I=G)jcK2c=-{6#m z_%cUy-tvHU2wOzs7L}KWFnEL0)HxJgp1MuZx}-^vU+8OvHOv|i`l?VS&wr)shMci} z>3XH#9t@aD(6(c;F$HjknokPAhSMfSlv|k)+l!G{s<=IaUDLKIVaRCfzbs)wucW=x zrE-UM2FszV6B8tOKFJb0B9(Cq7B1ngkUBozXy?PTK8x`25w);j{`^Sng#3AXLhMf{ zb<~|nHOBm*_?1dDSKz}~!$~`5u3+lwYX!E0Q+q<$QEs2yot10`E5=kjpEle$Npbu9 zfYtVCzHyQ9>?UZC4bV>?|@ZPU%kjhw(obg(ZN#AIfEfCJH%7o^J-gK9w+vT zCzAEp{Rp4b5>dWz3$b5d4{@|2+!0YO-6v(^*($H$!wn6>EA@)*-jS>5)jPA4Pu;0< zMem?ygqkg>B1NAsJovxJlJy4Rp<`6})DvYnzoF?c$9%WBN9XyRWjIlwj3=`SX#_$II9~ckL zvX!*E=SXT5WVl&vbI9Wc{SJu5Qa3GImYS*P<96N*Msf{CKA1el$Y_R<(F`M|jGwx< z{|Y)~Qa<;mM@}in*~k!9f!o=!Mi!Jq){yohtSWD4Tyr|io6|hezUm06clSAlHG{m( z8EWA@j`+`!80oQ7J16h3$Mmfex!C!|ll^4b?Zp)kX?+@6= z-)~*8Odc_2gyGvwM;xGYcKPfDwEbWc{(w%9cIPOaK01du*KkSXgzdc1u3WOnH(%T} z9{Gud-~YW5#-wq4mlI9iXj#6Y1RP?N%VZLhr6$LY9B=_EXB}`D?Bm>J&I00ABG?=f zFSdk2AzoJuu|iQD!*2?O^pjj`9t#m6J``#WeoYFZPqAK9hyg*IWW&kuLkJbCj98Hg zS(jtsBjkC8pIM9L;XJ(Jk?JiLDGw*W=R|D$Jaq#ci-QN8>T+jl9B*{0`P5a<58%0h z?P4s-p!E`B&s?khKU)S0a{WnIB3A)qxgKyvnbr(X&4MBl)txIq@1Ak zULK4fsEv1`;J3jFbZIuXDH@X|H%i%!QeLBcZBWadh;u$MsC`pFnNOxNE~xD)GG@G} z7=lXZ_H;hZruGE*3~0;0_!B`}u^^Lf3$;WY@z@UXuJM)ClT`!Zai_}eHQmHn@>|3avK_$$Gbh%J%PG>B;$tk>I zQPQ^v4;_S%(!Gi{OtFN)sB9qAbOZ%{o7&C!M4`!ghWlYV%MdXAAeT zwUDu7Ioc6ryY)JGQr?KrHv!GOHY7&lP)VM_{L{}*$1n?;Vn2GsJ_jy&1P`9b^QYwk zrSlw9I)@oQ#80NCW~Oe%)TpZdb87Q2tu+D!hn!0FEkf)?8ZDpWJ;TW#qpE1NQg0)1 z?^U!?=@v!1RvJ(IKM3N;dm|^43M$0p4mmGxL~a6ua$_o*cRsHtor;R*MHEOrw_EGw zDJbmq{3N(JD(7eq!`M=bv@jKQ-k$W1%AJDu{I*+CL473%z&dXD|bbBE~05iH-+!WHaDL0je5hjawEzTzIq#y!Aq^u1Uzq+ptMZ5hxie- zprK*G0@an;uduHo%5}^PC-Bx_Cfsf;tel${B-2ydK2+PzsBIV2wo$e1w0Kc%JFd13 zX^&mhk%6C6{hIcGQGHkYXOujx_8e28OB?S&6#vkhQ2mD`hxfeDHxW60gkL4R@+Kdc zl@R)9XB2I^)S+lu(%eRAvZ75AVls?m(ElMth(Z4-8Y~s9ZW|I}t4#tXVFoM1sTBr( zkzrLz&lwwrQGZZ{NBezh+py{f*QZlAdV7v-L&muCs~UM+b=!wRp9}qr!8xdy5~l1* z(}z0uAD)$vu7Ta0#Z1+0r@8-vl&9_~#A#0c3aG}^=iIM(&qvf^dCG<#B36wB6h5pz zMeay_iaPVAGf1Z6zjQc&DVTK>{UhpB^(k@->QfZk)OH-QB~tbhDSwH)O_$$=r=WCB zm(R7BwbWYfKUeM7q}GtAo97lpZ9J)YIP5(y`S_lv!GSk{Q1cZZhB?Z}b`v^}ZISt8ra=cWmBRY;{in4duC7LV-nfPa|sTo_TokTjP6Z zqXOE`F;CpSH_Tb`8(1RhNL{TYyQPUsBPlIo_Ez!8{OYDr*)h&g zX38;ge40^Hn?{p)=!#RL4E#nsCH5CHoe7j&5cj78 z+I>h2d|`wf?jKe6mXNmm7vlHt20sI5v&4SYK1bc_23p;F6P^_0UBpe#FwU>Rwp@l0 z181`0ue+%q&r#BPZq`Ji_Pl_Nt7*B2M;>AQ!E%WE6=nO=ZX-GRTErNFP zC#1}yx=}`pQU%dTsodyQFu`J&;N(@w@6ZwhslvsJ;m~lfguXtg1-B7!(n`8a`dCTd zC~Z*EH%m}?jeJjp3ltIL3Gu~NTw>JI%hVatWNMO$sgawEkg*tevO2sRnQmy?Rp1TI z4+j+9%yd!7a^x}GPl)7XR56D3DVcB7hiE)+(jcAU*Q}5*sl%Mi!xpJ77W&9v1hiX8 zR&@_~#pFp~;=PVY^;G%lu~RwqYq~d)d;vY+A#Z}=AiC_K^DY+wG4l$9&`0l=ru%Kt z_fsG3BWz08o5(CA&&3tOba{4sPp)zDUmM2zR3a>0gKPpmX_D|tf504Qz7&}3Rkt0N z9i~%~-B`06Yqkv97q?)w%rd>1WrWy`FqTYTyRyu#)9VDH`fbyg>z}4F*Gqu!14__V zN}20*)SpA0qy9L`?*pC%yo2^X0$u=|1^faq0C)nT=YGR@_z%CUyJ*Uva&J@9@a9OJ*&)q`3E$9**T7Jxp`&I{DLyUHNI>@ zLD|H@qOwU>nbfjkmNS{?S5GM^yXIQZOUkAemX=MLM(=fab-bSfVf;nPrQ_QzNFqLdpTu%{`xN_w&DFbUl2D8AgMM7M(Yuce zq+)U>FFVL{@lD0CKS(!5uWt2f(sbpIIx@CtpWrp9EcS=q0_BgBcaCdn*7guaP#cO< z`5P8d{{8VE=y+-L4uk;GW9QzKm47Mh&xZ3&=cvm{guSoQo|ebbGvJ`|l0QMKS$mA; zxw=`4qYSG#YKuMj4+i18m``me0WL|d(Yz5FOASB}PpCOOpDv~U_!wIjJyKEbAb zNSlfm^A>IOIe3h;!O`=Ef&4r(hizCq#g~nGk775nu^Wek{h_q-MUJrde~?DYAM3jw z_kQZsBqffVd5`u^TcScJ?tE+q6vpo;$1U2M$|d`h6Vu9NKt;6SOG^d9tHLdnE-X^1X@P+{TuGRt!yq!%fhS zHzmX^*bK}`@zC6hC$0l$fTMsRKpw>Z0%ZwG!iR7h<4}G{UX#foJ&Uduo}q{GZA$a3 zQQrm}a9q$uk>=2?ie5Aqlbeo=8}|`vqjMkKOB`Yce6KFN8ALbkUk|aQZ`NTYX~!k6 z;gmC1M#YqS-~x=Ug^V|E{u*uI49fEq-JX=APwAgN z2yaN{IxSn3FDN}1kib$DH*~Qq-hedhF*HdXKBKi4t&B#}hDL6Px8o9a3$4+V4#pQb z@NSmY)>1d9Bislq)Pq}sw9@Nha<YKwl*Gy2s>7Kap6oz80!UX6t)Va z1-Uw@QWK0TM^iOx%o`GlW`?i7=(Fq+_PeEp@Sb1Uk-3T|l&_G%9?W|aS9$iIlWN)% z%2!!(R@BvstFA`7p+TRk9RVPb>9It3VSw)1jjJ#_T$jVLk3Po8z70!JM3J~{SdEHa zG!OHM{fDxsb#NaM_uWAcx?0)SN)I{*hG{?BjvBJPgHHO0ZD9t(d>5S%f*QdmRC+TU@$;=Z6DBL8XrL76bkcc_}&Q_ztuKQ`aT}FM-XNSG8gmF4U z+8oqr-}3aLS}<*Jh&i1hbq~cwR14KTaK=o-eE~M>P&*jClBrT-R%NZ7C5|0CW?b{z zaT%i2k%UaDf?v^YfQ>6@)+*0zR%ehRlseK0lP72nkhD+iIEym~mCEKuNu#FGs5k5w z*t;O0U5l2@kIz3-P{A2k6&^Wj8wxJh1hfNMzVW1&n!u`+?cr9XHrp!O^tt$No#h|> z;8X1oC8A9Z+W;@39Z+3rK9$<@CZ0PjV!!_OzPUsznuq6@2-iMC{Q}xLbTp*MH+kiT zC~cYPnjPADbg&)d%-G=-+I+MBN@@KHt(oekEFr`|>gada{G$OafO;UaRPT)>_m`Bp zleS9QTf@9Cn_okki5GrHEusoWeUMDKKr>{ttXxT$^GY3Y2{$pAW#|^WrB{*|dL@ZO z6OY4ExT$Ghvx!AMv7Q!{ysMbwvn<9n-nv52_t#%hm@MrT62eeMqp+@7`K~L;d zYj`=%J|Cw#tzg2g_%GNEv0NFfZ48SU!XLb&Wt;QyrVA>*GL33Cpxp|qBAGKA^0j<) zDfc^M`i9-4Pzh*BJo)i(t3KBP%OI_M9~h{6C5-XML~L?AV0S#*hWS!Chq9<-gIViQ z7)M)nm?3Z_ElQ?r+H0G+s6K-_;vC?FI4GgXJB%kj1Jj8aIeXB>f+J`75K%|gmlxX1 z+F9E>t3blA%fFUTP^2%1g?arwg^MY57#SLQUl}sK>8fagRx(B_{+d<-T5(>#OxaX1 zjTcXhd}b`@LitW=KI%ld17C)bS-qWl``2&({_UZ>Q}PAShrv_{!Wgo#k>AAiYIR0zAP0q7%n6YU=HV>F?<*d7e8XC(&W|!ZVSMzbDLup zq@Mz9pmd^i-M)Q{@il+0?PJGwUGi-$+I6XPYqs#CgYTS4@Z)0tuCr6$`2g--JdrTy zlT7-*9DnDF1V1?N#Z>B$PN2dMlJC3ncg1|@|9kWoPf&L)GvD$$m=%lTC8E1)>F$+J-9o%ORB(-KZomQn{nlp62THUBD`+p^S+OoK7^PL@C^SkIzqx4Lxp}Vt_ zu^g*O3vT=-T5sCAwo2XWwrtT% zm=!`TZeFsef^F{V9P9ok`#1KteKQxDHic^)MlgiEP6LX8Cns=KG5%%_W&Tz8@CDe8 z&+TW?t^T(s&+{|SZ#*NO8S`$QS2?d{o^RgZyr$~a)!o&7)el#nuHNFk zrS9Ik-F1)FZK+><>$+Qy-U>lV8JmgV5p|bW?5lXWqClJ}t`^sd>%|RXm$*fg#QVe@ z;x4gIykC4!d{}%`{GRxv__X*#aQIX4Me$|vfcQF6l{du0;xX~K_^vo4o)*uDABvrG z@0ojgZeHbr%D<~@sqC!0r?R*5naUqmzEPR39Ia$k_9{n}v&vOfSmm#Jtm=iTH>%#R z`hC@>Rijl|o_xx65J-_v&JQqA$=Y245 zWZvBBt<|^J+*700JY4fc%@1n+spem5epd5J&FeJ-HHT`B*4*I@d-r)?^A335^`7?D z*EZCytX*3hsohk&t9DOqy!NTuw`)JC9jPs>yQc2?x|{39*I!lNQNOW%OTARzQ@^MF T!TKla{~MO_w;}%@YT*9@U#Atr literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/TypeLib.dll b/tools/Plugins/x86-unicode/TypeLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..73cf6dd82014f1d9cd7078f8ec0c3b5bb3fef0d3 GIT binary patch literal 3584 zcmeHJU5Fc16h6s@C0(cMND~Nc(HmTgf=p+!^hFe=n%P#3c9PvB;6vN&X12|eCSfv* zR*F`aJS@XN3w`pbVG#vUd=Oe{X<}Qb6^cF;AAC?)N?;dleb5Tx^_)BTsl{FFOIcwL zeD~b*bI;HHVdk|rPQefWgbu14F2`*p#Q1DD?<|wV{RcIOjsXz!Oe>hw0>3#$y{zzchZw{Ft8Ak%^N;D7p zE~KG-5M<)m6@s8Q#3J&g#e#Rk!~q=CstkaZtVudRa!unp28OZMF)NPs7UiG79zRVdq|Mnz+=217ep!O7yZYWLT?f~YmLwHq*N801g3C)0P9u+{(Vh93`Fz9;n>?-FUq#YyGPg#T7k{TNKf;spj0koq_~_(Z$3jc4bI7;*+t|0gENm~~c<}m_CY@5Q(ROybYU4NOnS~Q$VQ{v26Csm3 zV|Wz!*k$45j^-A_JSw3)-d-8PgFkpV1Pd=v0C1jb(y`~fB!ta5okzpy#`lP;aGL^& zfYDGt7%UEpsEaB^*`)vL4qRdY-ym)xK1UFp130;aXd*5kNcStF5d|ig7?x>{_?UQ? z{$c?59^ee3M73bt5&NP>SU;!1uv7>ovPnac1+7ois8%{ehIRH#^mn?k%?WPce&q1kgbLON9L> zPazH?R`8!-7-1o7lusfS5ws!*Q^#vosx&PM*k?I7%~^K6RINb9I#Q}TmJQiTe@d$! z7SSjEDJVXybenlL+794-O=3;k)E(-Rs;=f#TYX!7Uu~-2seh;eZHu-`OKPuZr?pSD iue6`ETiP8hm>5aK5|1a8#CYQQ#71jqvz`apfxiJ4m51K| literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/UserInfo.dll b/tools/Plugins/x86-unicode/UserInfo.dll new file mode 100644 index 0000000000000000000000000000000000000000..24094c21846f4b92c7d7be57b810f9feeb27185f GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/nsDialogs.dll b/tools/Plugins/x86-unicode/nsDialogs.dll new file mode 100644 index 0000000000000000000000000000000000000000..90740b347a839fa891272e9818ef5865e55812a4 GIT binary patch literal 9728 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 s84>6P?e$M=T*7>?Z6&({|Czq7#q0EHE8d;kCd literal 0 HcmV?d00001 diff --git a/tools/Plugins/x86-unicode/nsExec.dll b/tools/Plugins/x86-unicode/nsExec.dll new file mode 100644 index 0000000000000000000000000000000000000000..074ea462a0898b5add112cf2beb7850fb342b3fb GIT binary patch literal 7168 zcmeHMe{d65et(t(2r$?LM4a#=f;bsc6GxWh7+G@8zt%txfj~yW9D*qJE|MZkuDr{S zjCGg@P1#$vLvOgdOpe^a068Y+rp!&!xGA9mTm*$A&@$LFp%YJs&d4X{>PwhlIF;?^ ztz?I5n%s2e{^)h`#CPBO{&?T_{q^2kFV4*eiIxze11Jh1{pe|{SD)YfxCZv@C*GS) z-k$!!lK!GKA1rAN1iOu0vFP@gzth<6k3^!p@g>$66C%c7#Mr#fZS0J8u$8lB%_uLZ z?o0l5-+$cx`QVrEv%&MgmuJrpX3+nA`fmn5MPEAb)4|`M-wAq5B)yl{~wP2mhao@t}55KPR2Q7|lq?i{5PEdh99&nU`U5+XYp)=no3N@TIWk4+_tj z6h79El`N_H^TlMNG`e^6HqIrt@hFCa5F7bhY&As~%ZqU06Yju%h(O5!aNT(__*{D07T9Rm4{9>S z2i@+F*6j`;Oet^`!#*nQc1zUCHlq? zDa}KXLWqvi0uqJe_6wr#i0B&<7o7ote?qD|1s(1{0D9rXCfd1_LHs*L1*EzFT`6;Z zIw65(x_0L3G*p`XVw+GRw>;v?Jc%5(iOiAgvcL+}w!vgdm|ib3$na2hZeaN&u{h1> z=^@04i?hGvY>S2E`4qef-EvFL&Wy%%oVYb-^NsP-)kt<=ZABOz*@9XMq4L_~_m?S( zl1`T6*$h=_<{&*zKkt*{hxWe_0JX2rl9JyKs-wO>uJ0|y@FKL-L8@2u^)FB?sk@(` zUPa$E(RW((9WMD%YE_!KO$`&7Gqje6L|;nujnjht5zt}L*DJo!1C1i{woqg9UFD~% zan`1?Q~K#qE?r8bG}lKEaM78`S0}Jmn=Z%VS_j1^Fjp5d1E3z zt|@tSm5Scxi#cg3#Gr^|n?&F3>_6IkxB2QHOoe4{D~1(V6Zt3!X*Stl5p%2L)!CRS zGj~E7NZj(kX^2@NmYvC!oSn*v%pIJeTq1sFy0F~l8{jwD;{zqH?!^LuGB~CPxqOTz zXHH@UD#qpF2GN+HE`m5`=wY`5>86YE$!GdY9vQ~jTED}g_^xghUO#G zC^4DqnfiLTp;rthcz{@MfmIbwl(zo*Jz2L3C63^Y998GuPBX(aocv-`*KEX*S;h-X#e~?4R@2eCbKfQ`!&h z=XN|5QYOl6Im|4m(Ic1><+>U3Lmi4?8Q3FEAlTp|47Ei#PIt7P+PG*6t(HstT#3C;#(F;JW*x-#!0s*2Dn z)zQOT87!DQs0jT)Q091?rjNtQ;5VL!Qr$sS0gf?#3Qf-7wyod0d;xdz`t=f1>_I*5 zPQ>RCFUmsZS3cl3p@u=gwTunMlyZ`u6P@>W%;2PY4QRRSR4&crjD$La6EUKfDTQ6VW_V$$P$WUyS zI#52|sYAhEu%s?{B)(klr7Cf%=%kC;wXV!Z*e!_x9j4FYq!x`UQww#;R2x4fV(C8L@)ap zfqX#_E8dwD(@M;piL@q0mmQ_IvDc#5)BJZmQuW(V@AU?BxP4s8O^I&ETQW10W`^hn zba?|#a75>*QcdTH@i8$ztlaeCKnlzSCr?&xZrzqI8~7#Fg`rasij_f0&`U!e(U(&O z?H77#W!(a7_bd#;F2QlQ(8MLmP4ulPfEmdY-7Vrm6JO@ZEWkO?CXIP8k;%nBw4_uI zkm$QoYq<`qaMFyB>3fKP{ff{j$B^3>xP-EcN0BL;gcXVNx{`NiG&b6=^h{6Ov+dDU zT*)p>-1GO$NZjN0Oi7G*v$GQS8hV_Gdo6obB}Qt_4ePY$vR5#>X6GW#{<~P2bTf;o zHGBR{Za#Odpe+8I?1GYaFK1^b?oHn_N7nVqx(2W+t~53#FUNlkBWZs3j&8!cjK`aQ z(}OyY%yp5h%a$vayf*D?mqj6!l*0rDMhn-E^*H&%&4y~Fveu(=z7_Ca=pjn2^D!f z^k!>?dizD}RK5yFoiLieX=NsdY6U{?SPZ0U^$X-K+hRVDyzl*-FjX}5_MDo;cM0R9}nI# z^^OeG6E#J2PO$3IP;Clq%5`eZh%L#cMZ~(9i&;i&0 z=v_+4e!yYCDZqKaO~AhaJ_G2VBxEt55>N|R1K0`(16~2_2OI(%0h|K72e=Bj1^5g= zutqV!2&e=&0JM3a`_BO{04f1X0UZF^iVHT=@jOa1Lia;79<(E%EqsX9553r1|6}`8 zj)lEwb$2U10d0%~+wqBw)N0%;?`GSDSdib{%yzfOf?a$x*6eQ&6Km1xNRSWu!@*bB zuZj@T(Cle&t+tpeJHq&+HKf_u-4zQ)c+N}yowNia9bQ0mC$q~-o+C{Gf6NtQcX-Ki zb-WffcuB?NnAz1p>S0Ty!^w7c`?s@RLN>aY4HMcuT6dUbyU12;D;w(!M*KYMibdNY zOUP8s%5d~0e|Q7i5T+lQ1dUS&^TEd5Jlh)e20K`~I9Z`t-QC>S0usBCMn{pF^p5W(lQv^Lz$$J)Dg!;2tkim_js3ratgcJuxiFLbSra8WN|CuHct zBt!WgHr5@CMhMwQn%OYRv(!p28OUqy>uaajL5Ujq~^LjfK@I6Pzx11}&b4s9w@Snxb91^ETX2y=6PQC`tnc zX{9KigO(Tz55@~vJ|Eww^3G_75LTTi%s4`+G_DOD9WgbJd%l#*+unc=f|S-I#A0kj z6{doJM`&6mQu0p|u|^o?sM68SPPo1%7=dBmWj3s3)=X5YmV4`%)(2z(svx{w4>z@u_7u((%T@&427$M2+^pn`1etU{^ zs7~;x=T6jXln8`=M>hVq9~F9zIPoF3iMZAAI>G?Y(_6`Ej2W_yY$UCu4#X#kg_ubV zekN7MO?H!RvIeVkL%#<-OLnRmR*SXADp`MMeZ%@oYsz}vI&8gfol-rox}y5$)fcNjt^T5V|MQ72=|qi^h5=&s{k&_> z0KK>8{&AoC+~?lsIeA#K*Iqx~^{#il@4MdhuC+GKuY6N534&lo&@@3fgeUzu`0xMq z&mgj=&iSvY!V6PgyXBCf`n6lu`5RhoJ6f6_ZK>OC+gjJu)GXT`@!49GCR;<3tzwPa zw!OLDcSl}cc5w>y!FPj>k>JNO(&0UPM^Y>3?wBY%rZ~T15`*Ue z?$03zu{)Yl1u4G-wE8=LK|wfrM@wr9p~h(f+6d|PuPg81194r#|3v>^qd=`X5*pbU zYR?tr1^BI0rFQi4u4r;8U8r_4)cZolftfr$#?t9lFz7)$D zj7np!h%>1btVc5;Y1AB%@?AP2xmv+GAfhSx+L@5V%w_FN?0H<%w9wx5n(WhdF4hV* zqE3M;Gq?4K>=;&daqVcPcbE5UE)H-tDV(5?6;wuE1>ze z%-w_3g7v(`T;%h1K_{Ig83^-e;DlsIRXHpO9?{>v*44$x(k_ z`iIc_hSJ|h3M(_Hh7O_S)rU7fbkr}U0lXVv2$V6W$~)UgPF?oQtg2=ABOi#$mU!_!dN^RF;;dQy{^x{ ze|WRr<=zbh?G>NWa(RFh4O>;cUmQN2~i`|Z&7ECAI((e ztCA%g1A@z*66Bjz=R|4D5qi&XW>{T4F?UeyL&}-=>_?THl^y-O;dfg4?eEBW=yym; zn$bsF%MVm(g7?`hs1?QLaIAfryhJT@DKGlWSe<5F+82Vs=y}vZ~bIs-p|~LT$ylg8U^zMm2aZAZSY# zh_|v$=l3m8#J*vp+BJ;+M7kUcK>`E&96+hQ3XIKB z%8EaQ^1L7wiSXj_PNb>Q`RL*>6)BCWQ|-SIdt-B*OsxpN9hn+$q9zxAhjKmfGnjYP zyb|dNJiz(J5j@h#Q1zf0;B9ZL?2}seRu*h>Un1 z=2GN7j$AeAWk0UObJTu8UKiNtVPE8L-I-mp?>*Kf>!@@V{*arUkHMrl&c@BUoaAAx1P0yrYh?S12+=O|q8| z@p`m^VGc;n3cMd*gUUcy?7SVel!uj~KAPyf8E;+>3#>xT^YJh87IvYwIvSNME}#Vt z2cYvhpt+Djycd?*(QsU>0u{e zBA3Ph!ytYK0^vs?hlia*YAC5iq%mbD6?FSaH+k72YMRH{t%z#MDAxn*AYMRdlwsM3 zqGNqY6M!9b2uv&oEM^uv-OwCW^39&W<@llr#Fb>=JvPUV+;)pGz8oy1WiS#b7g(5b z|H2H&)iUxSS8lhajA_bwcCZjhd6X1tXPTN+GDGbnnmj!!F-+~ujbR+q3dYcJ9!Vl% zzamC2fJs8yq%tEA_pnP~6*S;syAerP0v~(W2Z;Htf(_Cb%?6Jq7Gs$1!YFFW+b;H? zgV;pud>&fHE`b9d1%KG35i$JFfU8QQ@$cgau@iWWVHf)~YQ*#2zQ6tiBVOt3R;v0zJStyw& zKG_Ry){4XD7dQmdrTACS_JT`sHy+~8UQgTvE$dbXzIXAGnvCCv#GKa?nR8!H7)xJQ zFU1!jp)>}{_Qn$L*smzl5;>(>{05}jugHHz)lWfzcox0?M$Xm2T#jEfqL!9YAMrTe z&U_euj~-h5EqZ(se*+J--4Z{ECpz&u^#!BGo<+pv^`HYAbq! zfvFLaT~P&uI^W4c>iza(%BS>p3U8qSGglnYf-1DkekvY{nO$DimVWindwc_wfc=a- zk1C$ef%ba93{LT)kecN^K-IJYONT><9|xoR&0v#&0~0J#AO_H8IGv+?myGi4XzkeA8fXCvB-aH^Tm&Mel-We${%h$KNKY(eI|x99^t@3g)AH{JaGtaS-~<9bIf?zfR?Q0tpmYNCmb4 z%D5Ca$a#SEqf~wZYpV0;p$84YxsJ^d*K1EkZ2jjZT8iRH+MVr6D{!@jOW?^Wr;b^k!}D z@-4s^)GeX%NiTBzEzosbmMf43F3c_4G^S*s7qoceg!?YEnm4}qB3J5K!D5u-JUxUS zZcxt!ssdl}a>lMg4Vos&^aSkW#d8M)&U8zuii!OI6%JUD(k+b;HDTX$4+h^g^k>|F zL_=3zKII|BSZwweA>Nf&fZrd^#1ET`+0n0qqm^5HDL~G)1M#v=Yy*LY zddtxY^3iVmO-KT8qUcFP-RxefL#psjirlK6WAiCe0B)K?krDR!7*|CRsTV7Si1ZXl z8XGUgVD)KX&+cT zH21|XV>SbSJqmy>CO~%W$4DG!sOPlSd@uVY>S?Wo@yGwFX;9E};;(^ffsffeC?9n~ zluy>U0y%6WDr!Srv#Ih}*PK)vV&~I(j4q5E%q84-6?WhvSqX}#dRaPt!sR!%? z2|lUS4q=+OH!5{u%1*lc`Oi2wht>8V83tMse6Pt}FoJFZdZ4X}MZDaR>t)$^$Fc#? z;%l#HTG=cc41qK@JueDqa+Li8=t)D)S`fiZM*YnLJ*?n5H3?;I4PdQ{!B4%*y8+M3 zK7`T3P37gFFB*|=AbVrR1#tCQ;B{xJnZ$g*0DS$V`nbu%XFw9!v!UbpiEO|MTx1X2 z#aT@Z@0kMGVE+QEg$BKm-k{*oa(oNof${im10Em7Ny>oxD@43^BGMpxkq;cm&3;O; z*CJt>|Je8GMZ&nSUc^Aqh}4Bi5tCk09qo8mgVyRxTKgt*=aJ_&65WAH9Ulro%n~1D zVF;N2UP4953f#ih0s`5{excI=in;w(Jhg%@NCK>#p0gk)%!O#}&|1F@IjY5_O`}0h ziapQid1#+fYh3m#NLHqzIJa0`szs|Q#{uC?4v&8dbiO;Y?q%oNW*13lwb0P3|AmRZBvEwT^-SXUl zORS+p5aI_gJ%U$}`P_i?yb%OpbFmioc5N&%up1HU+PKt!cDJd{^DcKpc_Gq%C?fT5 zi#QLn`2Y}=o`VvVIqG8PTHug4usm<{-*V(x+!75iH(LWRE_QMWeDI*szW6;TrDcqf zm3#}LrQ`4h9g}n1>`ABvzP!ftP7}f7^qvIsQW61kS?kR!4x~IGeOudqq3@u zkSRL~^A0%t1f>Jh!0GG<6f?TuisMT(HV0KxddG^oSjtQq__9cu8kozziqc*dU5-Uf zXws|{V2W9WqzwmX;pB;YhgfZWXwsyJegO*43+2REC1Nlzz*(Bo1!;x>1gs%4FrT^R zc^yOTzfmv>tcI{D1(#S5v0v$$Ep|qYTyYLagJfmbV14MRag)7b0g%!Y<$!Ys7CdHH z$xaKLNLc$Qvmn3`c*R<@yGvsrrw3Li-dWKy@Wj@x+3>+7HtH?DgH8raXi-MQeuZW- zYV`)Rii*FaVTu55ZjFc9G^5Q#k=yMC8g4yFKoUeHJx%B)If~NA#9sr-9(Dw)E?Vup zf;U(Eg-ckne#CA=d)zd^;^vq4K$|2rvGe;-TCTYL6Jmn%az0-ayp^F_LO-O{UqS>g zCXj;l4?3eJmjc-UYI)dtw1PDw3b~lL6vJKyFc|JlN%j;fr2I6{e`3$wK!kVA-nZ8j zagGs?Col+}u1z`23OKMxFwyM&s;VTT(whMTxO9lAz!E)u7&E?dORzmBPhNoEY~5ZerERnXZUb7+mmm`ibbpHbyJp94MoF~Sh4!u$Ta02DAH~`= zr)zeqZ2VIr;CtC1EQx4%BLKQQ@l|}%d1V{c-b?}rm>dzMi%E-#a+o4MVqZe4haG?d z3K;z$xx>R=#tU~2U?KWEl3)?jgo%ObjNo;@4DF;Yp+y5M0}KoNSdeXbhns!MXRIMF zJIy2KVK|&6eGyRx<$J+g9!T6U>xW1uW~)=xN;7<}HKqZND-x9ym(%H(N zAfftd1>*s6wXhRFj0BB(?;O*}Wq=uHj41$!DCr+Ei2@hwS2nlL2z;`crO>EL~`gE{0wL!N_BCUU!h2xJ%f6tnDT>_iKt6>M!(onF!LxyFt>L zI81UObV6G&7;&DLtyt&%8q^0vbVa1$gjG{UqLqa%_El5}uAYKP;=Jk{j^us~tSWX^ zp{}MJXBR%i)MUpCv^#2tk~ZQfF|+`vprCv!$=q}o`;Y-=H@h2;crGtKJC5kn7*r}z zpcat(mKx}Jq89@c|Bwca`*gJzIw%FU4+$XYH5gk9j>*+kVz>`);H+FUt&U<{r*LP* z=V*ZXu>r0G@uk5&R%pMVWE>$srm4RM=A6aFYGJa1-d?s55}0TUWUyI~eb~{XY#7yH z6)cT957)TZooIDKIJTi}KGh@T8;~>sN^LQih2MSAA$&96Av}%n3xrn@&LWH< z$OTwSAjA+h&vXbzJS!0%MQFx*459c2hwvc6W(4Dn4j}{K9)xOy%?O_%%)QAWY(+SL z;J?`+^dOWL>A^G$Fc4ND1Q70>4IB_A5rT6Z!VrRBa|k~{*ma9TNZ#rY_RPgQ!bb>q z6ob1F=FW2n-$D2sVcKngjj#vdo-a6r#}L8@KSTHkVRF7h_{QxH;R?d5=>Lxp&H%SR zAiRt40m3-KWrRtDEZ}QJn1!$i;X#D82pbUe4FU4id$h$J0f9YtH!%n%aY&zdWaj2$ zeA6O4?p6ESjTg_U1>CPc7}z|_u2((;U^Gz*M0(|?JzU=*iicmiv_;^zc@5kvTVYZguao|mZ#>O2RBAL4dAsP z(y=oUm8^hg)#2&;mh3fx$;9iRST`NbrPA2D$PL~nC|QRRPy~sE9ZoADLO{TZte02( z0+<}L3zq9vkBdQ{VKxY4uHT%3(J^90^Rx|O^{SImX`RJ8_ytv%zEI!SD zA*?B@fsLMr1|}G3O6c*K*B6JToY2ky^C1qDrhQmNZ6H5N&Q9;?79u%u^VJeMA#ws3 zbA8iyh;LqTYK2A|9qqZ)Tjj=p;J=K1kPQxzH9tX`HFpNGP=X#xwVG$WWw)@u=-u6d zeXzx-4!Q#MHL1O*s1)-TJp;~2d%&=193zrLrvntd_%qF1x3GWuA_y0w{ZecNmSG=C zF5F*8K>KBKO-yvat+Rv@HXkeFPjacBzDK~jR&Wx%vu8AdOLorn_`i4ucsbClEg{zj z$c&}}8Lk6VS$7a@J_e=;jm&p@O5gHgJje{>FpdaMV^59jybOlH^|%iZOs(KJC#qin z|H1is2RJ(!!brA{MV1$$e@gZt^M1_oXF(Bo{Cltk#Li&7=wUxzhylg&5`OffNN{5| z8zfwh9Uy|KqvF^844^Mt_wPzgvy+G%F33G_VcaH+hoPt(LTId zX>3$hPk|E(|M=L2hK*A)1T4E%Y1G~yfmO9f5T7JNU|h0bPXWJX<$mn>M0ZTsCwER) zClgbVX2h~sU~9n98|+J{H?4VOZYS9xXaTI$49kfz7F-m=w*sxww=iekN)z2Ig1jh|++54bO4uhM?H_1;o@@#L76qFmDHRqtM~Y z2krJnq*0vM=+9V>w48`!5x>43Wse9bQKsa#!)VQar4V$4$wCGof&CJmw=4OP+LhP(9BsAyaPwJG766$K@rVcB`NiK;>ZL zCzmA_@R9zKL77NQ-A}C|c028zjbR7KEQTLM-xFV@7R7If6!!%t5)TC?6JF5xzOwfG zz3bFXSQ6)>|7}L~LYf8=Fa-;J$ph7x%R2RD208G2g0}Bu;^s8nK(d*KG|DBGp@}`3*rL)5w4{)&(j?+LQg#giR}W8tkAhc?Q4H z@G{WA75SA5k4XDar2UNnp7b>EClgD#UoWDk_97LQSLj#OC~j1~xJ^6~-Gpd&nCge( zB@5mC(pfY4H!K=Ac3e^ENad`jrDo*{zms zp&xx2F+mMi;UT^ht-#|zA+$+ptouh)Nc=@Cr?2!x_x2(27bp6LtvNXJ<2;+wcc2J` zwskC@jfapaPs2(El(P@WS$yfP4IO#v2?yv_LG;uLo+T2I_Abo~JHW>N zHV~hm?qSoRRJDSGsQI!G+=FSE2}lVpr~ zTqgrT7-4yj11<4L!A?AI7Aoge#FgvfaynjSQLNon<}?s<$eA>wdb3`=DP0WJw_g`; zOvlTrCS@`bT(PdX{T@}=X+8gLkADIMv^V`*c;2r#xGfzh=U$ z14QXqTqrLW+@-O1j1XoCy9yXSt)T4*So7LLW$jo{dy&GOfwYeO^(|mtqgHST1Y&dX z0@ovBKLapq#H&et|GgWp;5xJ@kXNgR3>0d<1?kZzN#|hx0aRkPSA>c^VAm@B5EOQe z;EQ*l4*;i|VEO^6Zsc-&wC9U~jGL7L8T|70m0Qvch~XDe!OIFDeN_E6v=RRyk|1MAfF!!dzeSeC z@-fJyyps+N1mhA>QdD}|T127XnK%53N;sNh7 zvIAze6fN2Zju-`VP|o!P=6P{mgcM7jhXyUl2?C$W6n5|rnzo-t9$pmLgn@@;qL1o+ znm8zRY8u--O3@gm1R(%T_Y_7lU=su^vX&G>4Pm>1CLE7hy?aA=T=|U7wxzN#m%fR< zV(yiA#J* z=h5N859&xP4CJQGEcEbZoXg9N?6BZqsG3KBB9;U6Kvh#{P^05yp%JUQ7MPJM!V9-T z4%taq_{h^WD0&$7e5PA~F;1*|Wy`0#Vf(uM6(MK>kUH3(LD?n!83sIdb#23TXw4=zGA>j z;8rgi!02=pdRZYFjaDq3un+9K&Cm98-kJcTfUGl9vO)uG#+fQCfBy}&yle}8UA1fg zz-w7KM+eKTmkJH^UIBo9M-V&@i#70Qdbv{a1SY8}oDmD{b!o2%h{*fk8UfNr&ZAZD zK!zD-%=G$4@QN32WYM)w?029) z?oh13Ke`;6`xh~s14^yuMuAo!gEn)46m0#Ym>ksp!~!={ZlDI`!m?R(q)-g6hPZ$= zr=VPX1;ugP?=03LIGwubA)LoJ1`hVVLM-(%?X7v)cZvzeXF+R7nWVea)K&HBDe-5& zz4!-H-ZRKCy}Ejvdi%CgHaD>?{E?gqu^UO;sMZ)G1%$I&lNl+nfG*LR?C@!2`nC>i zYbseUlOsQIp!BW84K5_kTI6Q-5@+9t{ zU7*~uMJM+=guV9%w8X4{@nQQ#WpUY}5s+Fgz!v)(Fr=54{CT$!*u|bk)x;urPToQ) zxE3ZJ z?QFp4J+P4k7I9kWMf2@!TT+&HT;F-{$*o;%}?)7BHm-SRb88MRAF2+1By?=aZq| znAP8e-nGzf32~EpY#t2?sVto6U&d45!Emu+fC;^ChL$6e>RI+b%BI?cF<|g-8HLJ4 z8z(!s;vT|7omIhyrq(|u09UzqnRX_{95ZUMIbr}^yxJKZULsRlLc_*}&^T)c;xE%g z1vB$6HtJ}hn_Wc2bj-yXZ-GijQzVQS6${HcO`{@)pC%&(RPV(zwAY-W%+i|^!{kaU zTSU{B7~YB8xDg5I!J7cCktIvxyJ^V2{%hchjTHE5!$TOJZEEH=QwAv>FU`7X9Vwt~ z`>zj>kcpk&LKSW2!a$~r{Si@`7F_sM<9qV#UqvOvYW;%ve5_8h&guk|ggekI!WB^UPjijd+^;JzUqrlae{7C$L7Z3&kvt_fh=AUzj`5}N}S zfiUKBKOQklE?a_yKK#LmoAt5Oc?6Z<-UK+$fm<1AakA~|*6)q1*7`hSKi^I52{v(fBjpCC}BBrj+zt}g7IZ0_#GjUDf z5GcYge7LkX$1C#k;+_T;b>%R^9kKY&fS3vNpch`Tvfcmr>Jql;#q3hnIAD2 zGN?#tY!gOAr$Ne9?DlxYFl|<;aL4>ZNmy&2rsmN+7d8J1qa-XCRLi*KrL`_LB?GsL zM{sr}UtO6GKT^n-ge&xci)Z^j&Io;Az!^BW(XcUOtAM*}l-&*jYpqKIb5WEP;iWVd zFo3qbv5ahh*8R!PfqoulL$05hz!l_UCf-)hx!EkFs!J;HhJiHrA3`OV8+_@ZI{dh* zG3DYp(1nHo4lDmkJs-A^!HiehMkVWn-7pIrsli>aL{9-VBg=^#z#!khN>9{NN@H`do z60<=#nw7Y?gTR1^Wf}8>&U@7L%T&kGzW1{`j?wx0 zR9C%_WM!J0yG+1@+UCf!5>5Q|DLU;vJnqo!8S*gvk;gGCr4X#Rhn?b+2 z@CFV_)sCU^SHqfYv}JkNQ_~^gNw|~N*eCn5HY#TT>8F6?VMEA4{Q=n&v|)!}7$C+F zMi55nyj3q0Fgm{yTQo-m!uV&>2>H=LsAZtp_rS@K+H)yKPy)V_H*oPvd~PtiFP=?# z&U9X>#_MAXKZ!1vwI}5p)!K8oW^(FrYfF~ue8WE2N}a{fLK%?)FWYUEOI(2~{KOdh z*HkU=_&H5^BQSwYI227x%9hiBDH&`oWIV!O=vJjJPB`n4mV26a+H(!?Jyd{4lp@l; z#GULbXc#Y00oy<#QkG{?(5Ng*fhq9o>@^h_{dJIA`S5&T4kWGbOIN{^cvWm2kQaT+ zH}G~i_K=(-KG&b$$8atxu{x07fuq+}oQLjj%?xC32>kIOBmhclM&M7SC-72Qig_y! zvsJ$1;WNXy#%k(UM{$Z%gX6mNbkrO)#m=xZA8)w$sd^b>9(c#aO0a^(m}9le=26t^ z@hA5?(3jjJWNvzxh*TWBW8E-jOgPS+x>`_3l-CU|=FAgt`BcAp3Ja+81WaeS*h+zs z^9=L7%I|urd0kMTrLpj7xzICSZZXJNbUo2z{*R76y65<1G`-F^9EM5;{75(yBuzjg zMxa2T+T=E+Hplw`WC-Ano_(0D?G9fi{URo z9x#hUHVq$$fo6QQjw^z$fMWo69|&K5sRBFw?m*Ll^%$zOC0+s^4dqo+ir?sV2my2$ z+h5plUWgobATw}_*Lz?c12oxplaI~$~uWaM|ZM52AQ4R1x z+7CM9X-k5D)EV1NSEsXzC*iyug(t$m8v5X{Cg14;7l->;`XMSi`t`W_uj*W_#x;I{7v4kwPMBa6;ws$}kGANYh zZ5{2_OE4ZhT%x!syxf2pxDxN+>Ic%C2wy6$$Wo%q?@A}~V;3@xF0itqLy9S2dl(lU z&=y43ISW#yxxqb~*u7HI(VNzjFTE1UfLN(bVz>hBO zPQw#M!U_A8y;Id%bl?fuQ0}k~w0-8T@vlzzFw#z#Q)d8wG2nBoQj#VObA<(SsRV0+ z$fgnT>$LeB-35va(PWz@HbP6$?6ySy@-^&jR4X4_!4aO7_z|aChlj9{VvE z{}cMr+x>J8_J{*(1>8cDk~mtXOaTlJyFnx~u@@Fj*`{0^0ikVLoNd6niSB=5oLgIw z;$e>?2@|YY!3CKm^RF%gkYrRUAYf*gwGq0JHlf>3SoMG+m~R&hL^hq{E21ISp)8bI zFp!cM^x_Tw45V=R!O7n#m(u8Kuu$Y%?Nc&nuN`Lk&vBL-Ht>Q_ zf9{&`$_axk(zLDJ%|1H9t*~6(xs6jD!|=0Z(6Y`?cNN(lRMhuR_ful}G+}6DnNB@? zNTWTs^sNq!oZUpka0HQ%^9?QJ9ER&3wp_IRd_*}J*)&AG+w}HNf2uDhmeVTAZ$cw# z)kf8^1w_WTN$`~qY)5|#hB`o(_i6Or^e5?+Q<7fc$wJNn8ay<}`aZ$}%FKQ`4p%LG zkb!LW$gFB!8FPpWt-yTm#Momh)G59IpD{TJ*}0iU0;tk_en@a&)^qvqPE)yTleG<& zt<~)}q?7pDZRt0#LEBV}xZ7WxPD(BAz!?@cHlk_c8KmM(@?!Wzd3X4vrKcK|Jb3PC zn#%`@IQKG(m*5=3Mo`&5f^O>sz;}HVH3>{WEtq^d0Nnq+09tblrsx?ux;9>jpM~qt zXmzFFFmNvVn+B-Msej8l2Xq`RCqeZ>1JhQnF5ev*pDAoKQ<%(3SsMGZI>M0e3HD`R z*r5@RC~keXM=lQR(p~nDVS&At0O#=4gO{yA;glL6Z>8>gD4RtbrA*Zq=2#*#A7)dm z>AsDcA?+WOKG>#Zl2!R-N@##%1xQ7AQ>^0GFQO6Pj&TjV>&9Nx<2e{VXgCaZ45qGJ`mS6P$dl(2}Zil+=T}#^n!!kfUfaff)ETRE-TF7+)09*}n)Nqp=CuEGu`=IJK(Fm4}`1J%<=*FoFb%7nx zc@%Xc$~jyd;uuw+Vbf@TW?p4~W_IODJ9rO=@lp7jD2xbnV8K%y;M4epbL-zR_jC83 z?ND3DAq0Kz09Jy=F_7V(vPY-@d{=4A zPjSc<-pno+kqg7vrnidox-gVE-$|p?F8sx2S7=MIFd!`B=`PBBGyeA-zQ* z^r@cU&JM8#W5DN8gsrW5FbO;A>@w0ym zc<_J~F@kU)ACZBKLj2P1UL>ywF?^Kh3El?Zvd1ciTzk45bjLV6`38>+Qtd*Qh=fal z4@i?iUbJbHZ3csYwcbEJdDHd9QO8I%IF9B+QlJ*~SZLTxa}fK!5tGL;avaMyU~Ngz z_>FA+$UVObfolRGAC`*K$X`T97RQen#m?D?9Pz_#4+MV?-yd#4!M)-?egOQ(&Le@o zLGnEm3f?a$Q-aH>=td=nUljGSV<_Ndzre40E*gFT%;oZ!-howy_F-6olf=&d6kzCt zhmjY!-xYn4B5WZ6TnbY<*nVD+O;P21@V+~gY2B5E&X~M)*&Rw|aIaC2H+bBv0>H;P zXe%yINV&Lvz09QC5B23`e*vt-Vn~9Q{S%__*vu)DCgkbfz^BZGiJuOu{1K`K_dNL3 zg9JW=^BKDvIVoiMf}n(xUJQGoczD7>!k*}04sO+Ov#(6C$Pbn&V-PGI%za+w$mXoP z*voJV6EZ)MOS{6;bS!3;DHHM;!s6A7I9KCk>j?=o{%7_}BwU?)AuRavMJ7yve)1L7 zgI|J6H_AG7J9yo0{-qL)40S z1Fm@OY`55XLbe9&_bNHTe=q<947Nlu0h_gSjRC7Gc9P09Ckq54UE1WJs zPb9v8LBo4@QAx14gtWNshD0hp#UbB>1fl`%Q)qA6rHS@ayd&h+z>$T&(&w*;@YeA7 zPLZ~&7W8%JTe_x|uU0N@hM&fxD?-9Y9Su!ta$fNyIdiZjLlUizD&EaH&gx)5D8I-* zj8KErd~&$sS;Rv@BWmb-J@99Pi|QZVe-iS!hEEG8kr}wD^fa7N9y*DQDOtg7fNUI# zL=HqE4+MTacpGf6O*-=9m;mTD1a48FH2hC={{fR2FD_@>73)=INZ+COJH=o4?~3CV z1VbJ_z>x0^j}K&wPTeD{uC2z|9f-lN=uN&24u5dKWynj)gz(mS=rV+^n(PDOH|9V` z92uQXnu(KvXJ#XjGHEg3sr3(o4F1txO>esi^M#v z2d$|r^tl#kEQXuo2vP&s7v%^0)nv3{PBz>^`jo5h0e%N1yq;S28!pyjXBhAPH_)bs z{Rn$EAZ~utd>>CiFC1W(&_H%#Nhp@>A3`Y?+lNvr!(o$I(cJr@<{J~4-P5|PRjcf; zJwCqRV@dtB3QQ82^s5fIP5rztF7|y?gLBj60&?>K)pUihkbwob(t-q})AYwrl)$Z# zp4$p4kO!>DO1Ds8&8UNGTN$I6t}yyowJe=QXKOj{dc~)YshK3?7vH-1t-IdBz6OYP z&?et?aR5EtB7aeR{l5g0AoRrx=DuowRmoO=bMe&NJSzYM&rjy`1fqdC9q+!QeWKAM6q$;1%D7PU5D)AJ-S`$5SC zCFi4Wsr6R6G@Sy%61-0@UjQ#kK7zHT2ESBg;k7C?QK=9Y-K9cmoOZ{+b^Pc-9^Dis z@c_TG768QV5HPUgPLLPA+guNPnSiM&g`hIvA(Fl+9sDsJ0}{g8!%8msu;nS_poY`` zHUX~Ad~WynpADf7mvLgo(D7Wo!!;_d{L)eJVA&#|0}>0*XaBrR$tVvwCy-d86qR>R z3tld1n-aWy&pz|>mY?4feD9s$<@Ji`d26|NWLkL$nYrST3-+`7GD3eTN!+;1igT8q zg+6#EG+EwuLuj&c-}KOXS)rp-#3Q5P&n}ui!(ESls50?qM0m21{?-aAcnbXkdfGg$ z7Uxxgafsu9em(_Ut;Lt<@Lo`joMY+A#8g&x2Bbsp$a3o#p{>rlPNR$Bk)t?qo@?0_ zKCvy*BTazw96z3CjrXwjy#LCvG{ zes0s?A=)M?!;ZaIO^Q$C7zJFfw=5XyxJ-*@F?1OSz!rjSBg8+Z_{9aIx<6lxGQ5`u zFPm{~TMQk?i+H5mARd{5`=h@PeXuX|{=U8svT`n{zYo41qzlhXJ%?DtIRb~PdTu>D zqy}l?-XSr37wQI=ljOi&&Q)$sc}KotZncK4%$0LOSMI0JUT%4 zyK|{eohNoLfz#&Q`%S!Kp<##1TjM_%f(ApEf@}qZ9!8cJ{x=kMd)c2rsyKOxLYL+# z)A$I$vU6cL;$P#b#dN9|kdaCUwIet*rR2)nH79lsKvZ>OnC-6z2BG&~Q7?3SAOxX0 z`{aT$XHvF$Yw!UdeL*#ZX>}+y>(IhvB35fXWd1xoaW2g(yB{B}?4 zJS~PTpcTi-0-gAfOqcpBEF1M`zJ@siq4Wmt+o%)-_ri1$VO-viPV6;pR7|)sgqsOC zCd_^hR{&^XtgP(LRR7c&QzzxJT6Gaw0n6s>ycN5}2OI+XDoVk=QKoye-vLP&ccU=r zyxQ;7BvRDT?##}Z^7IwG~xmC_>2L1__^jgZJj(Yn(FsVmMeuyE}Ki2|9 zneAn|(uN!8rNzhssC7V9H}Z5$LnB4pNKu#jpFmD_ls-0Fumf@IWWzu?PX@}H0QLdx z5z!KjAfSsiFgiCP3iF1{k+ZMR6rY$H5ZRBRZc>TZXZ;x3nuZt0VTelf@lJvhT0S-t z!s$^Km7WOTJ58I_q2POl@ju*rx&v;|Lm!=DrAJpQf5Dd`M^UaE```fI_B(Z5v6WVE z;nNp~cFv{4(_ZnVGJL+}0~{+AN-x64t}cF&s+9JZe_46|;fq7uyd#^tyVAPMAeSvO zDn%Z4KZ>hg`zE_baFkUR!o9v1*R5{tue9a__gZt>&cK>SgQ28Zo`wXYd^AB^p1_tn zE~}c?U)`>=!b6A2qPuFE>awVZ2%x$nzsrg9;5hd&p;i^)$cO5}zC%*2vPEh~AL!nc z6CU3?E7U$Jh@Izv2EMx?->24&t=6z#=82DE4$M#R|TAQ?mOMKG`6? z^jTlrg6jZwB`Ig%R$L;3c64vhfsqgc&Q&nKOw|q;yH9P_>v6z)FhJr#Wp28N z>2HhB+Db1XW1}eia2r$4)jCoQ;B|<6!6UO0{+(Qe~r!DOaId zn~YRh;E9Rs$bYzN{j|*yS5c%Ym(O%yrqD@P{>R)NiVPD6*LZ^I6@x(gt1|g%A0Jh5&Lu;3+(qIibdpEb7C;5T#MgD7(_AX1qb?0Bk7 z121#X(6;CnsW;)e*0FrHKUJg>PZ$~UTy#T~p0Z2Nww()1tOo#EKeo5Z!bJ_7fd{mn>w?_PU% zkDclvwev(&&KT>Sxf37Mnb4dQ(bZbFp(|7URQar{*PfdP*>CTCpsRMw-hL2O+kPGL zJuM{mTtoi`_8ykNM1?2u1o{fT>3kC3batK$wVyPIJ@-O<5X%?8QG(dDiZj_yQWaOH zD*mgA@1!|THpEEpnxtOz?)mTOy_0(F(lc%Uu1Qa;(z9jK)9teW=p=4tgT@7HOA1g1 zoVzj;LH62?U?YWV#^3+7TiiYmNM}4|ResPbGarg&_yV%P>0hJ;z zgsLI)9N(uwd9gt~OLf#Ly>ZShBwh`C`~j z=*3Bpe+AYwI4{5w0mL1jVw%MoH7x@=Wu!_bO~eBLzYf0vzxp3-d>I!2Gn_5 zm+l)G9fcrR-`A^{VmZ>=5$Rmwm|8osz}$^b)m<$-i=9jrrpxDmpDr9~e*>-D#_g#$ z&`{sIM!Pv%{6++tkb}t-!zQop?uz*`>o`G(iUlot8*Xh-OhuifPW{q4wj#zCXpuTvwejyA#EZ zqgYiaX>DDq{+!4Vjzx1b#g}?+Br4#eP&=nZ4|DG6uFlfBaS#3D-X-ldRqV9C(~CDl$|6jyVjoqSBE z(B~BpCjdCmLtmAI_KUR*0v!~lUPW39VHQSK+S2dtLcH`nW~2Y=AhNOu+bsRqOAa*P z2F+s*;Tb%SA$)*f3pj*!1QF?_2p)ugYIF#z5eg7q-Hy+`AWUh-2SyN1@4$`zCI@XY zR z>MCAvvGgtVw=2*5MSVSj1ne%HdH=z=XCj!PU|Gc+v>d_NGVG#+cG(1_L30$Tt|GfD zzm0o^>tPpL1{}7#FiPS}z1cJ|MO@Wt?>~~7jksK@tGeMdspx2LHmTx>Yu)upq^TpW zjn|TTvPo-4s@AJjE)7;}l>>ff?i_;EmXGyAAzVF5kykyt?^c{Qlx%wo#Fv&8+Ak|v z^zjDsH*owyvb7~v*lUaS{zyHvEV27-~OwA5?fFRPau33;UL0G2!jac5JnL!U4l@Aun>X%W=8}%gB83B&ng7^ zI~^5-_YeXIM-iSw_%1>>!X5W~*tq9W*j0j`j6om5#LkPzaUO;#j z;VFc#A?!rhjL?m;cjNg*gqa8e!e`$=`v`wPIF9h|2;W8MM%an)2*Nsq6$pzFZbP^U zVJgCBUq`zLXAzDfJdf~0gdT(@gtZ6`gvAKO2-6YF2$!jkz~zSs&m$a0IE}y%E+bgK zB?uLSAO5;PyB35k2-OJBAkg1fk01;q{1zdG@O^|Hgk1>R5Y{2AK)4IRhAp%`I0f*D}~V?K&7jPP58BM8qSd>`TK2u~pFLsFMzC1FjqRK9Yhu(Eo^%JOwJ!s>O-^0n*A2`2rYQBr+_e0}_` zlJZn~DQTZn{H_v;-%%k|me*FV+qkm1Np5Lww7Ke&BHzON*~b_V`*_ffDLm zS4PLxC)=c5I~to?d@UPml!mR3*{bW5rmcRI{WxDoB8E8rDh>aK_Z%G;A;ztjye_R1EYPq5;BB}b4xZ&uf|6?!+ru%^*h+tkq1AUD)CHtg{U9}7rXb?v=h zShcExT6N1U4NZ><&5gbk{H4OG?RAg(2$zSU*D(p~h7P}$R$gE4MDxCS;hyVKbqp{s ztZ}Yfmqt|>6r`qlS6xFB=AXktMN8e|>+oOql?(3)AWq|2-&Uk+0%*0eu>tCwC*%n$ ze2+FXrD}a$sPJvmwLT3LsAD&}eNFXF3>mP*`?n3Nns%a-_`mslI>h5>weFEdpI!|% z6F95USJ&#RSSjQh&>EgG@I+lb?-gJK0aMnCS2s63ij--*T;rpwWZ!l{_&39<)-<&9 zz`dznf1|Ov?|OXJHEj1aE9l{y#>ZQCfU@$oa^YJ>x4-%EbbT+i1vc+x)1j4*&Tiu>KyX#YZgF*t>$Xt0C2~ zR%w^;MPa4Cu4OeJgYOG^-4)HdQq{-xk*I5J)!BASs*P)X{hraiyA>4S6(EQ$sgg56 z;YYzRzLu4Zs18i}Y2@_=ggcGyt>DzAbR|bh9Zijx)7PZv6yHcC^u{Pr zc!2uOf$IbG?^j1eAM1Ld=^D(`7>2G<5X2RPucTnEY=&7NI5|Y6r4{l2;@kkE0x#vl zQc%ga^|6Y^M^`AaOyb5@SYTlvj;H1C~ZTSvpD9AvQ zQZ8&xjncIOo35uF#Ct3H?xwcUBciU(PBW;~-=w@}NOch`v8t)Qp#}0;j?a7%&$wEA zJIjUr;F;DPb@EpKHTe^aE}swDC@qgvpsX1v=bRD-Tqp z)wOJNDvcElJK}t#`_?sk8|r;TY#}L-YOij1q@}I} zbBB?1RqBmYjk?@1kYmw=Fb=`I#*g$EO_}=EVB%#UZY~IO%lndF^LdveM;Jnw|0#iZQ z%8NjFe8$FxiO8;-=um>?na+)hwu*7SqGzkB~&ctn5}6TZkh|*=}o5|;jg17 ztf16X`zf11z>=zY$8IWAF8q?~(sa%YYX3TNdg@vlXwE4YE)X1DHMCyekKa-HI^Xsk zI*G6pqV}4%Z^yV)H#DKBiq_Pmq z$7rzKJL+hT0}@!(&)xrQWeJ!&`Gos@C~oI6yOfl^|5twaOB;AP5hp@~_8# zTPiI@0pNHXT7Nsn@A^{iR4JWiX9zC!`8qnkh+1{^lz`Q{E*t!%KiwlhZobMF)c0TM zIdxXndu7t)(52f%;leeycrerrP zA((QyvU*TjyIQ(x$^5-_*Z-vb|C0jrWtqqf2W9|#Tl`*!kd1C^M1Y%I+v#g**tQ#d zfd9N3)^uZ|ujO9by!v_bkk9RFNAQV4vZ z)mEp-(5ANky}PT4ZQ_W+Zy{h42#G3GKt#o7wfQ z?RAp&&_kay`}WOy^XARW+qW}g? zQAg6@#<6rd8E$Kfr^ZvE)MzLkOSkn$d!j?~5*J5xLTrgtv=;3Qg+fk~DH@B8O{Ll7 z^6H5`kEfP5w&(XXFJk)=RLNNm|2GInQCC05&q1LI^R4W33fIT*@MrW!r=D)}L^pO}_Hl6?; zMvB;YKk%zayKH<5TTD#92VL8Me^exHz=iJN%Ior~6*8BDor9^^Bo=WanCA@k^p3>OOu^%A zUd3IDV?FMwwruAFW@tHvkU`aS3`3mwM z)Z}lXQ7)~J$$o`55t`hg?ZD%}-M}9K4+G=IOa?G-uwDVi!jot)FN7P%$rVaR;3N9)PuhOnOYI`Ueb{79Yr;X3)rI{9Xu{3~_x zZy^6}Us${~(`m-tx5D(mBR}_Mn8&#c#m+Ewdiqa09L5T;%qH^)T*^y#hl$_E;=qlb zFx_zo;ITtttT0^Ap#LYAq%qht?4jpi?=}yu;LhZb-3_F%pAt1H7wpU+W2KLxq#}(` zj3)3=sS`(UEJHaFpPzc@J96fHZvAEYO~{lIl3@Og?> z?x&r;{j?pvFi9`axAZ;*F-}qJb*JbUO(F`#=s03RjC6VhalwU({tMnSHwxAc<)$sN zRzHLnXg|J1w||#)u#Lmt)(DF-@Ts|FLDg5M6`c zvdk_#T8yz1ePeP_0oDBjHsIe}UtEV`-$!Ks``zyddz|~w2mE-xGe)9H9L(TMgVty_+fy)fsGqIHtvBM6-h%Lfso*E9o*_Ijq+_n9nF zK|nq)@#@FRw#X9qo~~z>1gej1@q8Zj0y3*%M}NMFOD<+=uyEC6CU4`iepeo6qFhE` zS3V2B%hc*$L?5vHl3poqSS(+wpQuU5qw$Q(`YkK#s~^j0DUS*&WX-3^$?!CI#_bzPQ{o<~7m)*-EyRtX|B*CBjT3}aPqoUS0(G7|rNKC(CJ2HZ!7v12H=gw8<-h;upHp}} z>Y6`{5_XP!bK-7G)teI+M(UdKS2s31*tq=R{1wYrt!j|-AE?c5R95BJt;#Q75XgVH zVP)-2Sy>qcDb(91KI856_KzJ7H!pZ$?B_gve(VA~Z(i`ru^-~Od&R-AJ$O#3=o|YP zp7+$Ph)|jTjzYgE2vwFeVe#p$D~I#+2rf&eC0!6AfMnb*2o6DT6(R0MXhon_Q`~Cu zgCN8g{uf97R06N@hm4f>(leDL5dH?+1z{^iw%#sGA5D?}OMk6`u-zo!A0oU-u3anR z&2Pf^A^NDTml}aM{_+Lk{+k+CE|-@J!Xn~eD?&CxJ;JyCykN*pW;S8%hs9=tz&@V; z@AJiPT9wKOo(fNcSO4IzRS@>w)Y#Ox0`E9az#Cx<5|96VX7B$y@%#Hi|C9Rv#DN;U zSM6P*wm4n#6#Q1`Vz!c{R_40(tjLDP1g+BUHx##_I1R;N^|O>JHKSSh>ZaJNi4VvTbhi>i$lAgOI2q-*c`!b~Y2EjtT z!m-^dXBPXMa(cnuIa-Colf#K9*Z0-MIT6jdj@TTF?jkxeB+EVQXW%9!?aJi-POoe; z#KHbfi=2jM5{Us%8ez~6H|{BngOEe}9D>?1D9B%`Edzp_uFiLOlb`7G9j))LR}WdV z`HtkDFYzW=*sos5Z<C21`f(ySG2`@YrY zKi{{^Y_i(x+(y!>)(%2))3%^TLwX63q=^H%I8gXbajtx~=e;ITFCuQJ2Oavj{(b4n zWLYTNH~vHy2YH+Af?i%=kH%X@dw(xH{g}|%lR2fknvJT4TC@v6T`q7WCH*X3h+l@#xuGqa5$q|+MTYBG=PPMtfDabcl(yAbPl3*0g zz%w#kf!r1m$jGT|^9ufm74v{07vy4)KnkP%Ek7)bFGE)l%Js>wh&nxs_yinsTRp1- z9F#@6{~Zz!>e$9oPAY_`t@pH*YXQX(+D3{(8nHOm^2V1x(|yPFnm6`R`#5h87rxW^ zex~g$eL(Y_i}? z=v88HoPd5qM#`e`>#E}n|bh*FlqxIW7Bx@${(lJB%$9zCp$N*v`GjvHo%P~sL! zXH7@b^rFe2!t=U3(ol|98z*$}u%1z)W-%n<;T&GQ)oyu?uxF$ zi^Rj2!SVL5c?0uduc=yHFUUyV}>mU_JKv@g~6W5|)%3d2wO8!JOLe~6tyS0qG8 zt8@#S4v;xMAd70x2{>rW zyv1Q_z9qz7MZEA3n&OW6POI_kYKX}>(4u#v!D{@QEVQR}Qs?FK|++qXn6e`vP^G3 zWfSn$NXy133j_?M+fYuijH>|3B9Pj0+R*!ybhV|&kjKQt)0pW`2hf4tM$P~l%_D<| zc)oPS<^iWVG^C7`5+SyZ(>@Sl3lT{=q|Za_A;cnXAzuh3HfKOWlQYmiPow(`<*=Wv zoz#~Hb>LD2(vBwoX3(?cXGl_F}V*D-RC64>qrznv)PCyHr2cVyQa5o@_ zoq$+b4j__E6MLaom;;H$dY>-#E|x5sazLx;CP5fWr8IF5djSQDm-ayp6%?UPbG1K4 z)%p&2UT?{a&2XTBn)L{vpkj*Om>JX0?Li@>6!xFaZOnJ$qr7}91S=gV*0~Ct&D-=Bo9weNUeqDB&Xue1cT2ZP$ zr9Bd#BX#WK#3%F^O7zg<^TeO=&=p7G2%c!fWKb=k=h!!Bls_0k1B{%h8@z&gz@2ys zG6&XUl6cEYTB^Jf1hxMeJk)1;_A6&8^*U1OK|5C(!4O+MPY||Ib~SGI2iZNt$q=Oz z+c9yH>b{Oj7C|M%D(sM!smP_L2Ro>ok>hOh3W;n~9kDw=oY%;41A@T-g^KLVGmKM9 z*EnT~PcT(WHg-Gpi=DbdWNaD|{o)xu|1O4nz)mdWIq(v2vK!0UcaRD1)Rs3UN*1Mx z4WL%y25_)m#LfQno$0(_m9LJ~bl+1AU4WU2`JvFKgG(uOHkd5C3@6(rIi0;lxW<69 zuObrG9pUqT9)D<3cUVskQ>p4n2f0D6Fe7IMNWo<*w0Vv<~(%Dp&<{Iiii@eVk+Z96m@%%T8>D;t-}5|on2 zhBn>c?2y!1nB9*MOJwyjtzC zobSXiM=Rp;NNF@X0yIgx>m~6x)JRO+YOXz25-RcZb$vsSHC=oWi>NrB+wo+iJkS5t zQ1*=PpHy@|CfE`ERdSNyPl!}J(2(b1AF@m&m$0NYA^mFlD| zh!-zCy_ir#%ViollTmMC6391l{1nYaG{ByuGNcis6uDME#hNLS1M{SbBE9U)Ij)bi z=vuCr2DE51kD#xf9u_lgY5Syun%ElFM{u$05;v2rG^tAyH^!ne^848_kH97C`H>I= zj?C+7|B;gz{vx~iF8)l;4X{Dbh3=4&OqfYF&?1y0L(kPNp(Lr@i9u#ybYh4%XQD&T zv1eh>B{R`qBT`BUy-M?9Vg}Gd++F}mKhr8rMDkc;O*R#K0L6?oxryqpsDLxx@Le*jE!vKLWI z%7VPIpArJa0a*_6nZ70t<7akE+=)qjk3W*V)ypNXh5>vXW;hH6L*5AMXipi)7EkNG zJy@+^yqsgd00ip^U`x!nXc)y4@?k6tQ?vQ^0;=p|zoVvO)?qIqf~gK8L>>jhE*tX5 zX;el_jsO6;!vOjF7#Bdw!o;Wn&qcWy+(t$66=av3{sP^264XsgRh2A=2%tJb`ZUO= zNE*o})dSf{7~FfL^X$$UTnJs!7h!P_=JBv?NV_~|rj49DRGxSeDXBj(AA?W&Br%sB zee5e@;Cq_b$C4DYlA-WE#omNL$xc#C)Wn_aO~g=}CZ5BjiAixl?`wPCaAEy2;O-o9 zUPsZ|%$Rr5IQ-}m1u&kc1l$5N1bb)QWRS**2 zq*2QU@bc*{af=mgWtKTGjKkWJ3MlYWGOU)&wW8**?mOiVXv#BM%X6Cei?HU~%0!@u ziBCgwwxWlr%U^I{jBYE*>ihRhc>*^?B^F?R0v5XAzkYePa>C*c8-kXwTKq> z!#A{Fb_CeRXoTKJvpOmMQIFb)^S_DxM*+?qeCq zAdMyg7bs@+!!5^GW~>$IltQUPS*&4(EU(Za1%r1II|>fLu=j%ca>1$&*_APvSbhxX z;ttA$iKu&#I%HE^5dmxb5cJMz_Dj-*uv`0(qR|dZ2vlP_{S=h9S=GRKjZdM9yhI`OOxHPdn@8!3O{?F(3}e#TVP$juR~ zZu+ndfVH8k{Yxw5xcP51L!2r+q<%dMJ?7fd>DjNJmB+)hoq|%~4)Pt5A-$NIR13WeCs*i^u{+FXMS=thn!#6AVxiSEzQ9;>!=U=fxqJDG+?rd&jj zG1um6FtRxxJ)P@pnr{!ParsZ^Gp+TNY1$=RG>trDscI^@~K(OZ9sfjyW(ckg%J0uI{ybMgM zj(~9j0u#|&cAkIF@Wpq3L&{p*Aul$3JLf_hLr%$X1@@SjDhB;ITu^=^IStsAad4d} zqan|XU5WM+S4>KGU@Q^zXR`<@x9H*y%705(ZRyUEJ@m+sp@`4vH3M+phCTbkn!OrR zzI+ceJKj4tk!Eay+r zYCY8g$^fLOBCj-Y!)J!U`Tj#7gKqfFW9mJ-(>GpgKzDlg~rA|C`^ z$>9c0F7l;HB>HFs5b{DGk461J><=Z%(Y;dND`BMAU8K?af|?R%ql$>rm{~t#GXM>; z4Y1)PYXlwd4YD62!96Yz>|X$c1qN9dVz;YZMRJ==ONb&`hxsKhWEGx5GDD;QvzfCz zyi1s{Fi2r-ogiJTDSh$`q{*f_&fbRdNapIJ^a?wC+ts$NAT~=5u)l&Rn{r^*)yf&@ zJ#*;?7BZyXms;}E1FAS#WZq^P|h>}((OH%sMb8%VASm|%eAb(ggAbW~G z!NfoFHPj><+B2}&WBS```dsSE@PX;)p*GAN2pjjgd-gZy>CVTM(dxlmEDO%Df5tdY zYz8;06W@Rb>LFuFx8^$~yP;d&2J1;GH1T-SZ74mlid;YYDGIdCA8DZ_v+ua(d>kU} zYQGB@LhOehW4^x=(E$4q%BlnTRNSRb2Pw!VUrXlm7(aXb6D<2M`%-o{&;Cb163?PH zDMyZ;L;i6>zj?zJP?bnhZ*ix&v9paJM0zffeuUnLr>E?f@2+%3_ag<_8i&dyySZG< zNHtG6@HNI75*2(ZiLqnP9l7Tur>$2 zV}yeU4ddX2!E-J`1fdn_BM7%&;T4u6$Oxma^a|Ms6$tktJd9w!$}1EhJc95NLi2d9 zuoa;)&kT7Jyg~`W0|<{J1g`c9A0k|FjaPU9;UdD#`Cj2P!mlR+-z2OU5ne*LfKXiE z6`n%4`8u!Afsl2*SD1)UhHw^P%Ve)`2;oBn_l;hm2I2nic!fTMWm8ZN?ax3M&i@H$ z{2bvcgs%}YK`NNY$$5QP7n7dZZS$ftPh-R$a zV!=2A9NR!K(G7fV6Q8+B%-$rNtm#`=+)MX4DR)p;oMH72K^d_-38j#n+U9c;C4>cX z$$rF3Zi2{TPQrrD9rQD3H6dw}(ibgDA!+N)#<;=$rQ#0hLoso%?PCGR{Q5!l6N_^s z5YbjOdlgs;-@$Yc{UtE;i*BntiL4=UAmEQhdoiA22GB4WgqyP!B4k6Wln2dMku)Uy z0eu3uqHc&9%6w2`zC#6rj27&TZNomZN04^y{*Mbib%Oq5+YwCO$!|i;oJ?RXq{v63OVSZROwj* zGanVU+0Q>Jc)A;{dbeL%S)JPai;1m~yseOqVfP|->062GSZV?lB_io|t{>QUr;tTW z8`Ri)Eyl*5oV!gRqz7ek`M8l^DE?Wm2#~=bd*EhB_kfDdY&oZuo; zQ{@4GR`_oat@}HOVS1nI@sEJ?<$+ymQ}gW*je_fhb%KxvqaQAIuyi04V2^aVNALD;g`fve6Kq#waq@5d;wg*9&y48l9cxjqoNlBw<0&~}73GUn=CDkk zhpitA%{J#u6Hlv{4d1rp4Mtj#k==|Qyfp9dP3SGCj#NQ*NN;g#$^b?xJY54qD|!Zd z{g4V1a!z;zT}*rV&7<_J-9To;&U+U+FeYYGQ-6*q^(omK{o)m^uJ&n&=@Uqracbnc zMNpAKTWvPjw;t;poRT@1<^?R1)*?^R8ey-19K}j@iw)$wBHZ>U&T_B?DYQj+-l$}2 zCDTzxE1H2{+MyH&A{5KNuMQV#% zP;$uPf(Byyr}8ep*`f?4M{T3J5xY?tfEP(^>9xC}BG4wkNAR%3X0$vo7rJI9LlTNn8tfreI&n9f^-$;%h<{lU~j%QcW zq;D1_Y5QpS427E?M4-b6MiC8n_91i?jxb34%tC?FgqqTWDGC~35ov${cwK^Q(~U%f zV#QR-Mj#$!J=ftkBKV;bDu8I&{KK9(lhZA&n4v#~i*_V3OBu{c4@bvJ8iD=DiSjP#YU40^b3|(vRnZD> z{w#2##>jaF2s_B@S`%w8ScFDIc3RQunur5h$;fF&6_Gt)BtIs_{sYR=$axV(Ulyi+ zA2Tl728eWRR~qd=2m&lDeSa8p3|=ZD^r78WL_&V{$PL8F90w}XyS1u}3*%f^m`S4yX4k)={z0`^Va$4B)s*=&g z^)4uev6Z&#r(WS%*Yo?_;HW-O*bmT74tgnP2cDS&0Q?paV)(viGy8N)=GUHs%6Prh z?&(spf!Pr*$rnu2X=+tLHa26@e(_(iZckx-ei-Y|zm2tYkfTl4EuJp9K)QAr1m9iF z)?N?A(2e#fR9e~2rOLl<2<~T5Y(I?qQ*u%m= z2u3bK*wOPlkt6a9Y7Vm5D8gPf-_Hz229d!y8F`w&%jf9o(TBlEJ0Ql%V5FHp*^hV$ zY?E8jK2uwP&d(rUJ`3M^U!be9;< z0FVK2y_B_@;F$zyM2yRM;h|?UyY*Ky_vu%7jzBs>cF$oseZd0H#iq{+Kl5CqF-xXE zV_8_cS?$7x!FceEl>7rA0!KE8L$^Q?Axg(ru16F@IakecLVgX#&=e4zpD09jc5EUz zh2&(GjeKZVo<0zvQ%>x2D2{OPG(t!IL|7aq>Jxy+>@B2#Kne|hLYMc7u=_EHdmP7y z>I>Yim!MHuq)RfPU~-gvn2}*o@>F_@&dPk0NAs5W*2@IE=G-tn!F$VP6u^hda~qXj2;X4 z0F%qe*#ju@mq_Ga!y8VHv7-RA1Xu}Z39xrT1O%x3GI|9^4N5V1iN8}ZFBE>p-b9Oy zoGlx$#sXXKl?%9Y8_mpRSAlxTYUIRG6$Uan5}@UBg=BZ}v~v&+xfx0`-!Dxzat@eT z3QVGA06y6tnf_C*ZSn!EsR3wejlTwnNzKj%nZ)o)E3ZBeStL6v0coCB_gV#etLzL) z*VWY2a1E9fBr=>EsKs#3jAZ9e!8J|-0C$XRrw*gOHYwdkGY-K=4bz-O5QBk9H~<$B z?uQs9^92D*wIU}J9=3aErV85inTw3cgu*4)3X1z>E7H=n0XA(S-fFV~><-i) zD=&i^a?SOT)($R~0v}AuI81Le#<)b_C|r7g<)B!A?MGMpYuIO~p@!`R2%X|Ic9E~Q zhGhd`#M_GT8sd72?Olsn16^r$zy!Bf(6Zc! zb!6j5D=NS*4s?N_FpV&(0%GqD`9soloO$AM!`E0Ckp)vAwV{w7(W!_Q_#uQ-DMSP? zJp^MKPwYPtC6lQyne_zC2eJd+>%=Q~$@bx=xP%rWuBeK*lx7rBR&&i3nW1_G_SkoL zgEJzNDOHaYJO{w}M>o=e8k~FvJH`bfgMc9s(578(#5OP5gEJ|0k)3yveve~|DYZnj zBfFFa@7BYAg0tSjeuJ4sKbV{nV((r-70S8AC3Gs(6`haq16dW3FENMW7FLWntq_*p zs~&Lghe(HBA<2B1_BuoCd75d8o(Hcn>_pRRr_WodAHjK`^MA2rZN(egYxBeUjp0Hz zDH)D_CZ}T@_9m~?tF2lN(X3aeYdH?^C03mgJ*tcew_%@I8Syghz9c&e-%0*N%b88o zy<~y6`YKe&utXKM@#D|j&&dbmfS!(LhM)T_KSeI{`0xVd6QX^8a4(%AmxhAuExZd3 z^PU#!`oU%UFi z^U93kX}#!0IVZ%X9fMn-B-eOUkk+zoD4LuGf6NttLM~xq(i;#VByonYV0s`z6b(0m zD&|o7VPBwdq6R-SqKL7cvmMh(rTO%t*~p2hQ!AlE(8dYL8tN#gfpS7Jq`Xjv8+w-A zjiN>o4SMMdH0N|1ir87~s9|)FB!ej&9n=6?Q}~&Fw)5k3TTv?zdfsfl13Og8Ej7j( zH~aGuK1>TFOHITDE`FO@>>p0!!(vN3@e3`Axv zZKIectsT{1=CiPGfIWpHT7Z(<=uI)t?^4GCV5}+7mt{wURw(wFlPH}Zxe}u@#3cSU zFEXB|mhjZ%$W=TwA1TR}>R_{XFsn|N9pSbQzZp_rx9hK~?>oqUP12TXw(nw0i%dmYQFNkE8A+4R>=~%zYi)Gb@YI>z;p%=eFAkNvFe-vTIGV- z#<7%ejIF`Oiv@fM8OKa~$#kQLx{dt_m9rKQ&SyC+NZi*_LvsUc0wOWHNK=`g-G&4? zkZ44rYaHy3!_+md=)aI#1+0GxPj#I=O_^ZU>57tzu6PnX;ADGW^EaDaLdmvUeO$p!foYK93R<$wk`*~4!SOM|jR!eZMT+|)&pG?J+O zs3m#LFr4Ve(i`ezbaMY7NsNGQMCclKan!U5WJ+&6gx9N{;2{Km=tifjw?KRJDKR=i(7W^^A(csk(|g$tq@n5Y4Mo{=&ElJks-Z`prAhx<5z!go@h?O@0iy$YhBw`A*c zr+fCdjMlSg3XR#L=zC#Gw{Fq1$heEyOIo}= zM6_UTw(-aey^jt>p6L8MO}bY7n0)4$eQY0Gk;Wslq)AA!-yxAY;+vL%ny~rK-QjU` zQ;_{0ZzIeG;UgD0X?gg5*)Bl!A`%dIHY4|<6f7IQKGMArkUsMKDX@n++8>CNnXh4W zS?qy`Xr^!*j2)c-$qht`ObB{Rn?U>}X^6}-fhMFdp122`0i$SgGAmZ@MK^XbH`#&F z>i{n1g#!DN)CV}5$k#oWSj(tx{;)f3_4fCeoWN~fAG>0br|J_>4iLXoFWUwh_%^hBx2OA>@sWCS!7*Bfi5OB1Nc#jqOnirKVfM?M7qFt^!zqsiVg3H?4Y zVb_ZfK()7u_iaEE&jj^Fvvu#R&JQ!&_EYIpQ$tV`IPAfFI_!S|Pk>pj=E6g^BF3&# zKkV-zaSq^++oRdsqIL&Z2anOx=JT;A8PZY;pC&jsyN%T|$fK~~YmiN;=~8x($w-A* z2Y#_`K8>o#Mx#9g*h9wQl+e1ON5B}IM0S^uvq{O-eeTYLI}C}jxuPqOyGwMEF;kMj zYge=bxup?>aoi@`jU9|HfB6c{xRHFCT9lny%N{WP>nhBaOW$C>xr#a-$ zY2>VhWI-J+A}s~l1MF(F#~h)ph1Wz4*%qESBFO#~qNNXn z)f)tOx`x7CBbErtTR?|HV$fQr@s_XKZCKRC#2(-{htP|F!_IKVKqG?#W!PTYD-hYg z7JJF{4{p)6!Ltx&t>zSVP>9mxL>xoG5k}XG-5H&U40`7qephJl@=_Y3MisXV$XDt$ zI0oi9@`$@}1kOizx|^uQ=wBRtC4n@%;J_o94+%R2fU1kD_O-Q z)N4u_yBY&s;|aQgYmTWKkSjI#X?|~UTHy7dajxVclR0*lqhchW2Ob2ANNb)zMyoO{ zg(gQf#bgvH>ORPq6Y#lUo`pO`YKMzp+D(mJa~~Ju#@w`)PDkVS%9*Yg4`z3=>_Q_s zU&?M9!jd1y%*zZM=sqOi~~nz9PxQnvTLV?DU`Y&)p;;RLS% z2Yunun7!2&KgN!IzWDrE{cD^Hh4DW6`ti#sdDa_re*+fo`C$$+xLJPIZY@@)7Y!Cu!Z zI1l4?y+R{{WEXdn`%JTyQsDDwvrIn@rzvUhVkNJJtUxu#aPk+g@1WOE6<{LPV!GIS zAB-Rew&eKDRIXF7%Tx$+k=hbut8;kF$<7~uQVX&x@dk$`9HtexFrY7WfNIj4p~wXr zhP82mo2Jmm19Sy^(7eXYMG2dCT;UWN{H8H91Sw!THyFJR_=nXq+8)B6w5r34UK)0al%rxbYX(6g(`qnx4(b>-*eUlCMN+ynQF2S}j@gtU z$BRK8F$4n_VmqdC$ZSB2B8p?-GZL(!vL`~JNZxQ<9dNf~g(P=m{4fMguZ1X9_>PX_ z)b?lKJG()>m`{Tay}@RJU$|RYhKAAEpc4UqqU1fGhI0kK zEkS@8(l`PX0f39w=CQDrbFL>}10T>+xZkbSoQchGhl^*q+W&=szH^#*K(|Wyn(xKM z`r$5dhZP?ynRKK}+zA22_b@bHT*G;}nmzLEG4Vx!eE@^LThW>>@i-_mo2+LMS5vdK zW`A}YCDA%aS#tVzyG*wqBpVk<&LV>60%HmlhnYA~Sg$!#mbz~~f&4q5+O@eHqoTN_ z2gfz~cn6X1q~M}Im7?w{Zs}8U;ZUO^RkRkOefnizVnL`uu26m|QlA(ocQ{l>elqJ@$^7@g6*B#lhHzVp`vUBTAjVG0 z94@h760SfRVof(CxLCqv>uSG+fc}Vo7^t68FB&oqU9jTW&nPx2|6bhoL0jO`&gayT z!uPpxrewG&y9J;C%W&B}1S=iXgA#6D-nxxO6$S^bzh<<01ujvkv=e==l~4w)gal11 zp+SzKWIDK__ktjtSFYPjMwJ_7Mv;fvQi)T%ECAaNo9XhMMiG@{w}C$W6i)jiGwg&z zp7+*`(reIw4YH-wi?fqogsLO7gUp+)EhWmSF~C0(ML1Qdp(gflT?LD2I+g}nORww6 z=g`5iMc_ye^@4pPXpwasZP?TQs-;WZ4gD?1qhn=m#782IbE&N>EJOXBUO7#&ElQ5k zJJI=Ge1Af=sd1Zr1ZPNL+NvKousL_6^Fo>}u6~fOzHiCgR|&k>71Q!-noa((Ai_dnvQp8C^EzcUuvm`CCg=#;T(>*Up5&q6FA#0lJ6#@ zU>v&hmBkSniR`z?h8>j$U|d32lzf^*b9O=kU~kRjhql-dj1PU_Wf}q)##rK9q$u1Y zC8XKqu~6h1kFtfJpJ$;(3(mt}J~nmxZXmqx-b;&u>D%aI0fAtsknAE)m#h6Z=pTIo zU6S5A8EZkTkMT7S1)mqd5v?{C*@z4ATioKr!4(= zu4Iw#88w)mE`Y2`ImVYASv5K{JZKtESoeS-m}sZ$*IICF8Ec}${@p(0nzBDNV9=1` zk+Fbqe&ZV%nOIVVwb>$3$=Qq9+5GxO>eC!>0P*7lBh%Z-A-dB>)gYQFsJE6$2pW9`18_eX&13m*Ia>u=0@Z;0uCRBRC~R!$cl)Amz)tH zoHcPpHMB4HIvAJ5^L$vly0m!w57)}(fsn4=8B?(41$Oab?B8#bnpG(GQ1O- z=*E`$=Mbn4`o;tG-pR-SB{?f8X%x|$4yu~&d)$XZ@9+r!rXL<*`gTVQ_c65zRlG1{ zeI;sv@xBoc-PdQbd6E*#S70tS9BXt!&QOHE3kpc=`FjRBkivML{fr_TeAk+U7YG5buvG{-bgadifoZ8I26 zU)YFi%5mH*;{;Lp*o=yBS9+F!4~2B4XW&uhfe@Y~8OV7WWe}0FaOQ`j-hp5ExL$w} zz`d>cyZcnH&|3RGNIV0B87o+|wwEufVP|74dk}sWf4EEh0A66l0o%C;`Mbn(PR_(u z;D@%gLk*`JIqgUtBF`^(BxAqxzr3ZF>Fio8_fRT>p9er$@BYHL>Gg4Atm+FOU+U{5HFA%zf*_^y~v=(sVx-E#9 zM{!7hQAl}Po~9fQD(TR>aaq&2Mo{@KEKU-2vK(cuT0(n|I6B#OR=~|Q{^gy>jt*?( z?!?cw`yq%OyAdM{9eWVzN{i!{b`!O%1BjvH%sTj)0W5ULDZ@|D$~X06)4&px(NSyB z3Swb7@`5#KOXrfbiPmX(Yebm;w$chyaCPsX{s>Px2S9|PmMh&uG0^Gl! zJF>5USQ0kcZ1kEp2ofz8h~iTC)v#I|O}-=Y0{8E?y4q>@?)BdWpG=TF1#>Ok`i3>M_A+`-s_-w8z76;`qA?Ylu#=K95Y1-j1OuEfaog^J0=?iun-dv_{ zHfJ}yV$eAtcNUVoh=jLrFCPnDD^Y-&KVp9b;L@~C9=uTAiEy# zu=AXf>g1>}j-fbY7o^{@fi|cd;piddQ(9otsz1p3(m5`U!#Rx6bMTSR!)iW0O=0Dj z78cmUdWPQV%nz#a&O&{3}F}6 zjadXHF&(IMp?Y~tSoPda7Yx2{U7}z+`$Tdw$D1E6USL(OlB~<5CI0!$L-wRPOOPF2 zFE;m+Hf7>j%TcanD`7cB^~&B(0NsbbP8i$ZJ%NdTV^Tjf!7ryrx^qj1R* zL4I$_&=Dh<%}QV((~#*G-16%|){Bk^viHGuPgijL`|N2-o5x9TXA-NEf9ljbhYgZy z7;<{aWH28hWt@b|7NaP613DGyO?lH>3#OADP><0UjRU$dZ@PRH05Uj2-)T7M5eHk2 z@aB-S1E(gwqOYh?pSYv_Yh1KhHl=e@wqxVy()r5yW$@kv(PRwx(?H2bhMZL}L@ple z2GJll`y6R|Do?j0l$syXs0K6}?i<=yOP!HgjS}WgQ*||M7KNmh_ibB?LAwCjds{Oi zXpeciU%IOBD7;lc%;^#)M0A^_2Crn^G$jihKNy~Phv~FIJNhv_(2Wn=6hU@4sQ6up z)a^<+!=tz_Ny+d%k$;eVH^=^uv!^^fGr)Wp(^zHT06iUGS%3?fxGafN{}2UqtP|!$ zhB3qiVkXRJdGh7FID-($ZihX>nvt2`9=Q05u|6#gb6RpFygEP$RSIcaitfSnl3ozR z&v0aiqWxWI%=efuU#Nl7?nSH$(IYPl2R)vB@S`_I>JL(Lw z@lc{*Xm-qg2Zx{)Rp7STm60q`;~9}wXpjo#?4oacG- zk^U*4i~6fNC`qQ%uih1~9pr8Cvuq%T1J;jYfc$c(?IKa}6`&X&v7d}r1KI^@hpQONb&em$L(&-r)8zjNz5*nk1k zw&%;Yp6^0S@0Y)$zx@XR9PCWwOnS}pnv$Wve*Va$EH@Ceo*ByQY(4W$8!i+YKS^f2 zKrUZ7Ju{77>fMv}x4r+K@i#6u+9;d@$EB@%K>#Fw_koMiyOn zr{M`xhcyBrwz0r1e4S%31n06d2wy938cMEt&mEEB>;7T&=k&EFA!^*GIAI54yBoh& z*&bG}7vPM|=4M$W7vqKZM#}r_G@Fc%RQg~U(B~R)SbLh3u_(1EAr;??6WygMKJ|$g z)0G?O1oY^z`t|fisQ#~Sdn8?QERt@!*Y(m-^@I1+uNR^D?$SlrIUbEtUr%p#;=GaP z#QHS#)9FdvQ^w_oN%|M+$M2~_rOj8WLlx_@)elCf`$oE6>T~^C8MJ+Y6=AXyS2dPl zvt$siaC{JvM&)G@dJc>P)y8#O5izb?2#F$5M22h%l7Zh`r1^gMelpF}UN?OP^1s>V zrekZd*`-k31-ofu%F~U@NgL?4sD5P1;UizSeNFx2!nq(=Mk@;n1bnZm7jgZqDYy+d zWbVbfVjlq{Sr^+bgw=2CF7+iOH!ZMi8nNlfrc>$%>(vj}cYZK}zMXnZKZS$xlm8&J z;x7GPa6f)YK{k%)kzt&1iS9&xY+HSf(U#~yTphSh8O<4s z0lNq+OvE^}KyeR4cY?jpLz8iuc(UARfB^7vvc9C~$6QmOz zSo85k+F?L$$9Bz35aHVOdQJ5(Tt5|kN6x_|X}+lw(3!by82wDiBss;2l*xj!1;^#` z=;ZWGvRl1)70k@FXi$*3L41%s2Rf5gV6siQ6&WY17bn2i$?Js~f%Yax>-#V5^aj~p zfYkj-_2P)8amhH!S(H)Oz?g!z;F}ollFDK`@Qalc@BZXi%#QjMVQrl4tnETFEv(&S zI~&$-#_>c~)BzGwgcfk+MyEvRg!Lk-<$#+;6KO7I2p2Dx;Ld}(4%QLI%R2j=WaF+& zU!vG>C7iBh%2`47AY2gO6+p1f()G__;OIlL7jqRi^h&M~)?DY0JO@?HzWB;Cq?Bw- zLsJeO8Nlbu*k+iOI8~(&0H*iR$t9?Z?t5v!GDIpE9gE#d7)~Ym(0yb%DX9Af!SlDq z_n@1}3fub(7Fjfb!3OanKRHG5H6v~g!xSKQ46;Ejw)M_NcLw*`A&{}?0b(4ok?eR5 zE?a|qXoxGU?h)zO#}X_H4<&8*5C>FQ%<0SC>J?(`B9*F+?4YSl|7;*zj81z0Z7 z4X@^cdS9sXW1GJBR0pgCd=nV&(7cQgTg5dq98$YZ;}wc6!7J0UG-*|P^SDK%m$Yxd zn~WHJA~~lSaqO$Z3OYlT;TuBA$7J)Qnn!a>EQ*~DBSKNq!|bPU4C4zKB;n>OKw-cQ z*GG0ASOfE`C;}2-fzj&|uh8tD93{CJ%^@iuyu6=7k(&rsA~#G*vv!<|Sc+w4P?=VE zNWyo=mg$FEKd|)wW&F`L_;GiCc7zq~o3DI|kD@Z|QN`6Q?&h5V=5;t$0<%CvUIb{+N93}9k1E0An| zpCxoDi;S(Zfy7*-Q(0ZR&H@)k@1^t+N@F9QGG2|0h5Z->{S|u6pjMerJ8S-2eB?u` zbilQ!tEv@Agh}nK=hksZ%8mWUO7IY8Gq!yBGuPg`-D>AoaH?Mz z<9cEuhN9$HhL8CEKQb&}+#n7550<$z8GX12mSD6HPpoFIP%;6wNcP0%)P*gMTX3G3 zVk@RzE|tX=rAmDR6GAVW+S%jC6dhXG)Jup*v7%I#zx;PuTx?7#%S-<$i)(WOsx0}% z%UQU^xRPqG-6AAs5^|gZ1AT6G5=DsYW;{V9J}R+A$vD`ayXWFe!IE^eKF?$LyzLgX zWsAG{0AWC$*5_?|zMcu|K-|*SvV{+e1V`?*gZmO&>-nz%ERvxSC1lri1`349zR7!YD zI34fkJO$06UhOud`Mmt2%*EIW|OQ^)gc zw=_?iC~isOs>LwZve~v&mI^$JvB5A2&CtbXJmT}sr=-C}5TKV$0a749-2DJQnYd+> z@0pF8bC(5fBfjZ1+lyCdbF}xV8CLhWMN=K3^<8*D?W!-oT}J@HmIv zpF)&|Cvo>M5ebr>)Jc7`Y%M%0<$Jzfrqyg&HwAT=6~s*JK<(OPw|Ms9Q?Q3U_(+7_ zhYE|))Q@x@YJ0Bk5Rp?Cr~ToOZT~&7%~ujt!Rpw?yu-KQn^hZoU%E|5+w&8|{p@9s zfI`|%wF+aN)B7Aa@7k=8y5X{<`gR!JE^*IR3?xl_u`rIWDrsn=Z;Mv0PeMZ#a?!xBR0VyJ&2?bf8V~TX3%}{HeuRiGFZV$e|*-j_mFeFF9 zns-GqWiin zz5_>UyXn?IIzEGE5f7N`dnnZk?ACmXeOLL}XPg38^oKNPiXTRl=6siSL|U#T33t~3XjgwnzHqM z7)w^|Kc-_W(FoqG(x|dksZ-HC1cY)i=MlVJ*Hf%u-)GCZSs3Y{l9LBc>g_x${!5Nn zJMYtx^koag2>}iyrL!lwvdea|c0*oZsOP53Gh z;xJL2dB>ddCqGN&2Mi$ ziInaym~tLxqTVVy_No511^{+Nj(vFdq+=RpC|Fk9y$2^K;C6LwzM#|@-aOr(=kaGZ zb4T_{*u{=6Z~m?5CD*Pk88k6z{wjUT4@k{we!uRosyj+5I<_T)RI%n?_-znrYR$jo zGH7!KX>F}?kzVOHV8vE?;VS2=09b9=SasyW3#8GBx?(Z@6N9h6{3VVF`SRDfF{xY`E8k!@gi?<$zqt=< zD7|^pV9dVBGOJX*a7FW3I><+bCW`rA{!;hldCsn%2H2FhrhFZ<{}$(HN@J_-bRg`G zDYGms`FczKk=pzP^R(GE{h)FN6viqn9x-oy9@Igss%?-4ojoScv`(3^L7TAw^yRHf za<^$7xb{DP{}(w>zEKbsB0PYw24N$@KO<~M*o|-)fgubcI5o54Av{OJn=@vUAWTM} zzt^4=gufs>fba)|=MkPn*nrT8Kz|#42pGb12&)j5AXFmELYRzj6+#9={|^MA2jMtE zH^Od&?Fj#j@HoOMgdNCNiRbMI*CV(QtO#E`EeM|?97ouT@NVFtoN&_{m}@b4Z3FTzxWRs{MRfXnM+gyRUmLfDG%B*Hp`dW1y?6$mpB zu0P@E3&F5dMJh zJi;>wk0Zzk%Mkns= z73#en;Z_6(=%~OmPHn;8Uhv{5!Wo2LA^aNx{nad5SSk8Md@w@1N1PuN0^-6Nf2n_- zQ0n(ridBBWf6oGcU~xbw5BUgOcF$t}!a1b@QCLtVmX?(XWmR*^N*7iO^B4L`?^#$% zIPVeagcb1Sio#07WCHyc*sa2JAw=-H6%lb|;jKImkKa0-;x`H9C|@CzV&A4pSSTzJ z%7g}C6|gnpSuf-ZeqlM%wTLef=J7YRc()2r8MRX0<=^^`*ZxnX%YmgycnIYhgw?=y z4^KA;3h=E!ybACY99u1s#{aCs3_6d7xjdJC-E?&ae`)#n$)~t2Tj<1p!bTr;!yo@O za2owO@Pz&Xz!^r3j{t8Y>R2N9IM=9kO{sTFz@a*{VLGlDlGpgooTjF z7=Hg;)XYe~SCgEzf@rslf1Cuq1sjc#=13i^|cSyHVJ-9RYSu=%IZs?RQVSz3szIch8495R*yatv9W#uNQ=W6#|tNs0T$Fm&C&)xg4ozYqRVUXiudjQoR`^^1WZva;Lw#)u|14qN!^}c zaT!*+a-|Q|*RB+9`xex!Q4q=&_{tUzlPYuz;;NPY<#nqtk-j37H!go`S0I$mG>uOiY9FQfmfYF++7eXUsx_8cUuzIJ(2ZF!mCw4gRTJ0TOxSMpW?M;ma; zX7;LvRSyC(n&+#3aGqTIFnZK7uW1N>( zheN^-t$|3xBg5rGR2Rgc_QA#mWf+lQxB45J+FX;_;oe!=XC zOzxOKhUte5vJ2!W*buJa{hnqb_(LdtK~<(m8+j? zrOSZltqU8MuXxDcuv%HoS%Lrepma4f6vn_RB_u3M_0r`GOTW!KD1{Yh`$DQ4Eh6rk z;*?Ff{toh?CDlZT#Jp82>l!gWL&D8mX8et{YeK?zF3C@+aPpFbmkK|HEH$lOF0Y7O z9+wuYzqS@yYIvNIl|HOBM}eApU|;Zn#C5=IqK?QiyG9sC={XPi@E=19C8_pRG^~;@ zQ*~nsI;T--iVTAV(iSv94C8%>x3P9j-HO_><*S>7920M*hQv*Dh=b)vc_hp(wmztH*$?uU%Ct2>*+yrAZ2!3{n+FF;l0b-e1^4jdcY6hi?Z2 znhL7w9%x+N_$d0CbXzJ#DoWTun88h@zP57ts+H6<%)xW(8y;9*Us_+^@V~pe-q^OT zDt=y)%}%=h5tMC(Ntj99CLuzB4}cNWrAbM(w2hjy8LTLAQ#bJ%+i$kh=P*Lt3CXW) zrJXd1P5V-ygYr-67p9_66riB05>i2kq|&TOhz}LwLna~35(V@7o%^2s{I3ZJA;fj= zJMW%z?z!jQd+xvU?3XF2dMRB}urdu6Y%mU{PbagPbP98`(F8;L=c@5k%7%>V{(W*B zYlOCfkuUG}+k*3zd=hI?%8q9fYzoD^iJpjOr)IeLjmsO<50hjz&-B4~3JN|$+&;Vx zw~mr$yAEVdtB`To#1b%Mvruk8Z8ej{)KY|~r5rPrtlx>>GtVn3a6#8X2nTE_iljA5RVQf3t&F|4Nve`^l z2af#4w=LBFrs*kr9vhUGyM6N;%hYTVyCg`%Fg`^S7`5Y5D50;**vOGIY~&OUhF*GD zQyFgzj?G}Zf%)xON*Ipk@`Kbt@V!NUjp9sVdMD}Oyf%Vnzrq+vp;v=-|7Fdt_S9B7 z(~iIQTP4sFm(188Mt<$r6XVIQSqod|XND5z4(k_`Vpf+xu@{M@V%XwjF>i@15)&LZ zkgBT)m({(Po&2tr3*F=KB$xG3?7^@dG!xsCgNF|e)^;CCQlx`(>TA= z&oYl3Jh3OdQ~V61<$ya0m{h4J;8%&LCnY5*oc+_9gJ=C5a*>z*hAHsQq2vU#Ht7tw z=`En|AOSApkw^oRf$S5&&=*5^0(U9IY49^yhOn{1DHq7 zDAwr@LmE9QIY`N&<@!~69{7Xs+3ZK0fbWDp7)qDGeFUvh_nJ_<_WerV7C*t>r9UWv zIHUFTTXzH{B;_-?eM15EeaK}JR zc)22|)qs}=^9=l6dzrmfQ+kQ&HC0jo6G59ByYuTx+n}AWW$4wSJ)ZQmXMGO!OjleCzlZ$2?PGndENlE-$b`4^f_`pgGCkK__r97f~V#U0r{98XWr;Q;E<8rDs& zHdyUF-ho-{EX@L#gfjxcUln+N414N+L~J7;sBM&vCx zcgvUYcJ?gJ4N<8USxGEwZC_0VV;50G|Pz1jGhJ3V^KP1wb6k3(c>d7_&tH|UQJIEd3Gv1;9wZq2HseMP5DZ@Z^mqJK*gO z_+khAg%0?Oz~A^$RA0X9SL4R_qjD#}e+B2((}9J5ijFYh)>Y7j_v; zUyjNnf%L`iMdf;(U1q)=mEQ%@G01--ke-1)lY#UV=(|0Twy-ntlS4fcqn*-=_PmD- z6IutbMn!a;;&T^1g&Dw=HsS~5Shrr?wR#!dgY{~*BefgU(C^`m z+EG!?jD+PQc=PlF@;9}SGujgMi#2i+&k#Q@TZC^otGBG-@cZ~)cKCqW>X)R~f>xfb z*5%`*CRQvgpTpjxPuAL$Ve)4*KVMW_w-jHBZ|9G;wet|lx8yMi<9%{>o8&jQBX|-1 z^>*x*55%&vLteoO!Efi`X9&J>3W3_tc*RpVjPyOC@AGIHucjT|2YOieZsOKO;F z-X-^LryXtE=^@xcRvwpc$QOiP;2FiPF^7FDcaRC3ZIie<@-g{npk@v27rt4%Uuh3p z-|~1iYKO3b*bn6Eki7-=&}wIx6i43j=$xLL?U3}4NAGGw--fv`Bwv$Fcu>qeZFAdU z=MW3Y{o3<X)?b`Mw38-cWzck*)J1l-a<1j;+QBW;@K)o8&JjKZTa( z*=-hZ0{d#7gLwYr=`q*T2Pi>agnjV|`P;CKc60rGu`@A&efC;2Qh|Kax5K*Y=M(OB zeM`Au-GJSa=Mn7m(0AH4MP}8|+&&;9{5#`|WmxO3cOoCcToo3+a>MT>4l}US3;$d(if|1rRT1`cCG5ut7`@4?9#Q$J0-FU>800}%ID7) z!u+xq(ysg5wX#dSUE8EX3uU($avVRs^&Q7q@>6C@dTSM^Af0^~OxMfz z@;A@}`jSzr!Kz60AED}U#i}mbQeBS7;xbwgakq(+fQ)`xx^ZtIN^>mIOc5)HcM|Ft_xK-Qd7%(p9NCih|D2V_#iGxd;pEL0|srX6C%L&;r#|?S)kj z*5uduai{qf6xR7mu)Bp;`M1yp?b`3o-jTjh&vR(@2TuqNMiOKs%~3ZQ%k1vK!Z zfVT3>vRV1d&O!sf<4GV;qSjq;sB n2l-lGwpkBJZx(gp| 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 LU$q+lJJ literal 0 HcmV?d00001 diff --git a/tools/Stubs/bzip2_solid-x86-unicode b/tools/Stubs/bzip2_solid-x86-unicode new file mode 100644 index 0000000000000000000000000000000000000000..ac72d400082910eaca099be1f1674a55310ed7f6 GIT binary patch literal 39424 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

uB*VW2HfCQ`A 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 U0L`uh&v?O9Tls0k`2TtS3z-ov2><{9 literal 0 HcmV?d00001 diff --git a/tools/Stubs/lzma-x86-ansi b/tools/Stubs/lzma-x86-ansi new file mode 100644 index 0000000000000000000000000000000000000000..dab9c81f5fc287eb0e46e0ca8a013d177dbad708 GIT binary patch literal 37376 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⁢4sx^uYr0*V0es#oz^j$GxLn@xs$HBptlQp52nhy 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 literal 0 HcmV?d00001 diff --git a/tools/Stubs/lzma_solid-x86-ansi b/tools/Stubs/lzma_solid-x86-ansi new file mode 100644 index 0000000000000000000000000000000000000000..7af47274e204f3083f22016a24ec09b0162cc756 GIT binary patch literal 37888 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 w>;wKqEx)mpmG638)1NHU2&EUvzeS3;+NC literal 0 HcmV?d00001 diff --git a/tools/Stubs/lzma_solid-x86-unicode b/tools/Stubs/lzma_solid-x86-unicode new file mode 100644 index 0000000000000000000000000000000000000000..52f10219ad019b06bbcedd3cb076690beb4156f0 GIT binary patch literal 38912 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

WoXWhdnl#d6<^u*Lr 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 JjQ^eMzW{n>haUg{ literal 0 HcmV?d00001 diff --git a/tools/Stubs/zlib_solid-x86-unicode b/tools/Stubs/zlib_solid-x86-unicode new file mode 100644 index 0000000000000000000000000000000000000000..0f2cf9ee043cd9b5931a4f288f456ef55029c95b GIT binary patch literal 40960 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 _)7cl+|NVut9_ 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 R!IOT_)h>S3V*Kx1{|Qtb*AD;y literal 0 HcmV?d00001 diff --git a/tools/makensis.exe b/tools/makensis.exe new file mode 100644 index 0000000000000000000000000000000000000000..20628c7e199da1695043ec49dc72d6838ef0b8e0 GIT binary patch literal 2560 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

LHny{ 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 T$s6SN=#e$0Zb=x1CdvN==iLD{ literal 0 HcmV?d00001 diff --git a/tools/nsisconf.nsh b/tools/nsisconf.nsh new file mode 100644 index 0000000..48a4915 --- /dev/null +++ b/tools/nsisconf.nsh @@ -0,0 +1,62 @@ +;------------------------ +;DEFAULT NSIS CONFIG FILE +;------------------------ + +;This header file will be included when compiling any NSIS installer, +;you can use it to add script code to every installer you compile. + +;This file is treated as if it is in the directory of your script. +;When using relative paths, the files have to be in your build directory. + +;------------------------ +;EXAMPLES +;------------------------ + +;Compress installer exehead with an executable compressor (such as UPX / Petite). + +;Paths should be absolute to allow building from any location. +;Note that your executable compressor should not compress the first icon. + +;!packhdr temp.dat '"C:\Program Files\upx\upx" -9 -q temp.dat' +;!packhdr temp.dat '"C:\Program Files\petite\petite" -9 -b0 -r** -p0 -y temp.dat' + +;------------------------ + +;Set default compressor + +;SetCompressor bzip2 + +;------------------------ + +;Change the default icons + +;Icon "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico" +;UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico" + +;------------------------ + +;Define symbols + +;!define COMPANYNAME "bla" + +;------------------------ +;MODERN UI +;------------------------ + +;The Modern UI will insert the MUI_NSISCONF macro just before processing the settings. +;Here you can set default settings for the Modern UI. + +;------------------------ + +!define MUI_INSERT_NSISCONF + +!macro MUI_NSISCONF + + ;Example: Change the default Modern UI icons + + ;!ifndef MUI_ICON & MUI_UNICON + ; !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico" + ; !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico" + ;!endif + +!macroend \ No newline at end of file