summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2018-03-31 20:38:20 +0200
committerDidier Raboud <odyx@debian.org>2018-03-31 20:38:20 +0200
commit81a12327d1fddfa9876df852c024f93f7b83a48e (patch)
tree72d38bea65b9a1daff5914f279604071e35efe45
parent4ae33bb6c5bdcdf4304ba4c205458adb019d4b78 (diff)
Import Upstream version 2.35
-rwxr-xr-xCOPYING288
-rwxr-xr-xChangeLog1077
-rwxr-xr-xContrib/AdvSplash/Example.nsi68
-rwxr-xr-xContrib/AdvSplash/advsplash.txt104
-rwxr-xr-xContrib/Banner/Example.nsi74
-rwxr-xr-xContrib/Banner/Readme.txt92
-rwxr-xr-xContrib/BgImage/BgImage.txt190
-rwxr-xr-xContrib/BgImage/Example.nsi202
-rwxr-xr-xContrib/Dialer/Dialer.txt240
-rwxr-xr-xContrib/InstallOptions/Changelog.txt288
-rwxr-xr-xContrib/InstallOptions/InstallOptions.nsh480
-rwxr-xr-xContrib/InstallOptions/Readme.html2
-rwxr-xr-xContrib/InstallOptions/test.nsi168
-rwxr-xr-xContrib/InstallOptions/testimgs.nsi118
-rwxr-xr-xContrib/InstallOptions/testlink.nsi116
-rwxr-xr-xContrib/InstallOptions/testnotify.nsi266
-rwxr-xr-xContrib/Language files/Afrikaans.nsh242
-rwxr-xr-xContrib/Language files/Albanian.nsh242
-rwxr-xr-xContrib/Language files/Arabic.nsh244
-rwxr-xr-xContrib/Language files/Basque.nsh242
-rwxr-xr-xContrib/Language files/Belarusian.nsh242
-rwxr-xr-xContrib/Language files/Bosnian.nsh242
-rwxr-xr-xContrib/Language files/Breton.nsh242
-rwxr-xr-xContrib/Language files/Bulgarian.nsh248
-rwxr-xr-xContrib/Language files/Catalan.nsh242
-rwxr-xr-xContrib/Language files/Croatian.nsh242
-rwxr-xr-xContrib/Language files/Czech.nsh244
-rwxr-xr-xContrib/Language files/Danish.nsh242
-rwxr-xr-xContrib/Language files/Dutch.nsh250
-rwxr-xr-xContrib/Language files/English.nsh250
-rwxr-xr-xContrib/Language files/Estonian.nsh242
-rwxr-xr-xContrib/Language files/Farsi.nsh242
-rwxr-xr-xContrib/Language files/Finnish.nsh246
-rwxr-xr-xContrib/Language files/French.nsh250
-rwxr-xr-xContrib/Language files/Galician.nsh242
-rwxr-xr-xContrib/Language files/German.nsh250
-rwxr-xr-xContrib/Language files/Greek.nsh242
-rwxr-xr-xContrib/Language files/Hebrew.nsh250
-rwxr-xr-xContrib/Language files/Hungarian.nsh244
-rwxr-xr-xContrib/Language files/Icelandic.nsh242
-rwxr-xr-xContrib/Language files/Indonesian.nsh242
-rwxr-xr-xContrib/Language files/Irish.nsh242
-rwxr-xr-xContrib/Language files/Italian.nsh254
-rwxr-xr-xContrib/Language files/Japanese.nsh244
-rwxr-xr-xContrib/Language files/Korean.nsh242
-rwxr-xr-xContrib/Language files/Kurdish.nsh244
-rwxr-xr-xContrib/Language files/Latvian.nsh244
-rwxr-xr-xContrib/Language files/Lithuanian.nsh242
-rwxr-xr-xContrib/Language files/Luxembourgish.nsh242
-rwxr-xr-xContrib/Language files/Macedonian.nsh242
-rwxr-xr-xContrib/Language files/Malay.nsh242
-rwxr-xr-xContrib/Language files/Mongolian.nsh242
-rwxr-xr-xContrib/Language files/Norwegian.nsh242
-rwxr-xr-xContrib/Language files/NorwegianNynorsk.nsh242
-rwxr-xr-xContrib/Language files/Polish.nsh244
-rwxr-xr-xContrib/Language files/Portuguese.nsh242
-rwxr-xr-xContrib/Language files/PortugueseBR.nsh242
-rwxr-xr-xContrib/Language files/Romanian.nsh260
-rwxr-xr-xContrib/Language files/Russian.nsh242
-rwxr-xr-xContrib/Language files/Serbian.nsh242
-rwxr-xr-xContrib/Language files/SerbianLatin.nsh242
-rwxr-xr-xContrib/Language files/SimpChinese.nsh246
-rwxr-xr-xContrib/Language files/Slovak.nsh242
-rwxr-xr-xContrib/Language files/Slovenian.nsh242
-rwxr-xr-xContrib/Language files/Spanish.nsh244
-rwxr-xr-xContrib/Language files/SpanishInternational.nsh244
-rwxr-xr-xContrib/Language files/Swedish.nsh244
-rwxr-xr-xContrib/Language files/Thai.nsh242
-rwxr-xr-xContrib/Language files/TradChinese.nsh244
-rwxr-xr-xContrib/Language files/Turkish.nsh244
-rwxr-xr-xContrib/Language files/Ukrainian.nsh244
-rwxr-xr-xContrib/Language files/Uzbek.nsh242
-rwxr-xr-xContrib/Language files/Welsh.nsh242
-rwxr-xr-xContrib/Makensisw/License.txt34
-rwxr-xr-xContrib/Makensisw/Readme.txt428
-rwxr-xr-xContrib/Math/Math.txt396
-rwxr-xr-xContrib/Math/math.nsi78
-rwxr-xr-xContrib/Math/mathtest.nsi342
-rwxr-xr-xContrib/Math/mathtest.txt14
-rwxr-xr-xContrib/Modern UI 2/Deprecated.nsh72
-rwxr-xr-xContrib/Modern UI 2/Interface.nsh612
-rwxr-xr-xContrib/Modern UI 2/License.txt18
-rwxr-xr-xContrib/Modern UI 2/Localization.nsh394
-rwxr-xr-xContrib/Modern UI 2/MUI2.nsh245
-rwxr-xr-xContrib/Modern UI 2/Pages.nsh320
-rwxr-xr-xContrib/Modern UI 2/Pages/Components.nsh430
-rwxr-xr-xContrib/Modern UI 2/Pages/Directory.nsh250
-rwxr-xr-xContrib/Modern UI 2/Pages/Finish.nsh26
-rwxr-xr-xContrib/Modern UI 2/Pages/InstallFiles.nsh298
-rwxr-xr-xContrib/Modern UI 2/Pages/License.nsh290
-rwxr-xr-xContrib/Modern UI 2/Pages/StartMenu.nsh467
-rwxr-xr-xContrib/Modern UI 2/Pages/UninstallConfirm.nsh192
-rwxr-xr-xContrib/Modern UI 2/Pages/Welcome.nsh21
-rwxr-xr-xContrib/Modern UI 2/Readme.html2313
-rwxr-xr-xContrib/Modern UI 2/SConscript1
-rwxr-xr-xContrib/Modern UI/Changelog.txt524
-rwxr-xr-xContrib/Modern UI/License.txt18
-rwxr-xr-xContrib/Modern UI/Readme.html2300
-rwxr-xr-xContrib/Modern UI/System.nsh4420
-rwxr-xr-xContrib/MultiUser/MultiUser.nsh463
-rwxr-xr-xContrib/MultiUser/Readme.html404
-rwxr-xr-xContrib/MultiUser/SConscript14
-rwxr-xr-xContrib/NSIS Menu/SConscript9
-rwxr-xr-xContrib/NSIS Menu/wx/build.txt8
-rwxr-xr-xContrib/NSISdl/License.txt34
-rwxr-xr-xContrib/NSISdl/ReadMe.txt182
-rwxr-xr-xContrib/Splash/Example.nsi40
-rwxr-xr-xContrib/Splash/splash.txt82
-rwxr-xr-xContrib/StartMenu/Example.nsi98
-rwxr-xr-xContrib/StartMenu/Readme.txt92
-rwxr-xr-xContrib/System/SysFunc.nsh794
-rwxr-xr-xContrib/System/System.nsh942
-rwxr-xr-xContrib/System/System.nsi284
-rwxr-xr-xContrib/System/WhatsNew.txt90
-rwxr-xr-xContrib/UserInfo/UserInfo.nsi88
-rwxr-xr-xContrib/VPatch/VPatchLib.nsh94
-rwxr-xr-xContrib/VPatch/example.nsi122
-rwxr-xr-xContrib/nsDialogs/InstallOptions.nsi94
-rwxr-xr-xContrib/nsDialogs/Readme.html999
-rwxr-xr-xContrib/nsDialogs/example.nsi158
-rwxr-xr-xContrib/nsDialogs/input.c1
-rwxr-xr-xContrib/nsDialogs/nsDialogs.c26
-rwxr-xr-xContrib/nsDialogs/nsDialogs.nsh1079
-rwxr-xr-xContrib/nsDialogs/rtl.c2
-rwxr-xr-xContrib/nsDialogs/welcome.nsi642
-rwxr-xr-xContrib/nsExec/nsExec.txt96
-rwxr-xr-xContrib/nsExec/test.nsi60
-rwxr-xr-xContrib/zip2exe/Base.nsh172
-rwxr-xr-xContrib/zip2exe/Classic.nsh6
-rwxr-xr-xContrib/zip2exe/Modern.nsh14
-rwxr-xr-xDocs/src/basic.but3
-rwxr-xr-xDocs/src/chm_config.but2
-rwxr-xr-xDocs/src/config.but2
-rwxr-xr-xDocs/src/headers.but6
-rwxr-xr-xDocs/src/history.but100
-rwxr-xr-xDocs/src/library.but579
-rwxr-xr-xDocs/src/license.but2
-rwxr-xr-xDocs/src/modernui.but6
-rwxr-xr-xDocs/src/pages.but2
-rwxr-xr-xDocs/src/silent.but44
-rwxr-xr-xDocs/src/tutorial.but2
-rwxr-xr-xDocs/src/usage.but2
-rwxr-xr-xDocs/src/usefulfunc.but577
-rwxr-xr-xDocs/src/var.but2
-rwxr-xr-xExamples/FileFunc.nsi1503
-rwxr-xr-xExamples/FileFuncTest.nsi1123
-rwxr-xr-xExamples/Library.nsi232
-rwxr-xr-xExamples/LogicLib.nsi1193
-rwxr-xr-xExamples/Memento.nsi156
-rwxr-xr-xExamples/Modern UI/Basic.nsi171
-rwxr-xr-xExamples/Modern UI/HeaderBitmap.nsi175
-rwxr-xr-xExamples/Modern UI/InstallOptions.nsi150
-rwxr-xr-xExamples/Modern UI/MultiLanguage.nsi349
-rwxr-xr-xExamples/Modern UI/StartMenu.nsi239
-rwxr-xr-xExamples/Modern UI/WelcomeFinish.nsi181
-rwxr-xr-xExamples/Modern UI/ioA.ini19
-rwxr-xr-xExamples/Modern UI/ioB.ini10
-rwxr-xr-xExamples/Modern UI/ioC.ini19
-rwxr-xr-xExamples/SConscript89
-rwxr-xr-xExamples/StrFunc.nsi1269
-rwxr-xr-xExamples/TextFunc.nsi1685
-rwxr-xr-xExamples/TextFuncTest.nsi887
-rwxr-xr-xExamples/UserVars.nsi136
-rwxr-xr-xExamples/VersionInfo.nsi58
-rwxr-xr-xExamples/WordFunc.nsi1087
-rwxr-xr-xExamples/WordFuncTest.nsi1291
-rwxr-xr-xExamples/bigtest.nsi614
-rwxr-xr-xExamples/example1.nsi77
-rwxr-xr-xExamples/example2.nsi181
-rwxr-xr-xExamples/gfx.nsi243
-rwxr-xr-xExamples/languages.nsi354
-rwxr-xr-xExamples/makensis.ini21
-rwxr-xr-xExamples/makensis.nsi2147
-rwxr-xr-xExamples/one-section.nsi155
-rwxr-xr-xExamples/primes.nsi137
-rwxr-xr-xExamples/rtest.nsi182
-rwxr-xr-xExamples/silent.nsi123
-rwxr-xr-xExamples/viewhtml.nsi101
-rwxr-xr-xExamples/waplugin.nsi405
-rwxr-xr-xINSTALL148
-rwxr-xr-xInclude/Colors.nsh148
-rwxr-xr-xInclude/FileFunc.nsh4870
-rwxr-xr-xInclude/LangFile.nsh187
-rwxr-xr-xInclude/Library.nsh1702
-rwxr-xr-xInclude/LogicLib.nsh1556
-rwxr-xr-xInclude/Memento.nsh1048
-rwxr-xr-xInclude/SConscript47
-rwxr-xr-xInclude/Sections.nsh544
-rwxr-xr-xInclude/StrFunc.nsh3564
-rwxr-xr-xInclude/StrFunc.txt1412
-rwxr-xr-xInclude/TextFunc.nsh3008
-rwxr-xr-xInclude/UpgradeDLL.nsh406
-rwxr-xr-xInclude/VB6RunTime.nsh90
-rwxr-xr-xInclude/WinMessages.nsh1162
-rwxr-xr-xInclude/WinVer.nsh302
-rwxr-xr-xInclude/WordFunc.nsh4413
-rwxr-xr-xInclude/x64.nsh108
-rwxr-xr-xMenu/compiler.html30
-rwxr-xr-xMenu/docs.html34
-rwxr-xr-xMenu/images/clear.gifbin43 -> 0 bytes
-rwxr-xr-xMenu/images/header.gifbin12232 -> 12241 bytes
-rwxr-xr-xMenu/images/menu.gifbin189 -> 0 bytes
-rwxr-xr-xMenu/images/menud.gifbin189 -> 0 bytes
-rwxr-xr-xMenu/index.html109
-rwxr-xr-xMenu/intro.html34
-rwxr-xr-xMenu/notinstalled.html49
-rwxr-xr-xMenu/update.html33
-rwxr-xr-xMenu/websites.html33
-rwxr-xr-xSConstruct1463
-rwxr-xr-xScripts/release.py42
-rwxr-xr-xSource/7zip/LZMADecode.c2
-rwxr-xr-xSource/7zip/LZMADecode.h2
-rwxr-xr-xSource/DialogTemplate.cpp11
-rwxr-xr-xSource/Platform.h3
-rwxr-xr-xSource/Plugins.cpp2
-rwxr-xr-xSource/Plugins.h2
-rwxr-xr-xSource/ResourceEditor.cpp2
-rwxr-xr-xSource/ResourceEditor.h2
-rwxr-xr-xSource/ResourceVersionInfo.cpp2
-rwxr-xr-xSource/ResourceVersionInfo.h2
-rwxr-xr-xSource/ShConstants.cpp2
-rwxr-xr-xSource/Tests/preprocessor.nsi448
-rwxr-xr-xSource/Tests/root.txt12
-rwxr-xr-xSource/afxres.h2
-rwxr-xr-xSource/build.cpp2
-rwxr-xr-xSource/build.h2
-rwxr-xr-xSource/bzip2/blocksort.c2
-rwxr-xr-xSource/bzip2/bzlib.c2
-rwxr-xr-xSource/bzip2/bzlib.h2
-rwxr-xr-xSource/bzip2/compress.c2
-rwxr-xr-xSource/bzip2/decompress.c2
-rwxr-xr-xSource/bzip2/huffman.c2
-rwxr-xr-xSource/cbzip2.h2
-rwxr-xr-xSource/clzma.cpp2
-rwxr-xr-xSource/clzma.h2
-rwxr-xr-xSource/compressor.h2
-rwxr-xr-xSource/crc32.c2
-rwxr-xr-xSource/crc32.h2
-rwxr-xr-xSource/czlib.h2
-rwxr-xr-xSource/dirreader.cpp2
-rwxr-xr-xSource/dirreader.h2
-rwxr-xr-xSource/exehead/Main.c2
-rwxr-xr-xSource/exehead/Ui.c2
-rwxr-xr-xSource/exehead/afxres.h2
-rwxr-xr-xSource/exehead/bgbg.c2
-rwxr-xr-xSource/exehead/components.c2
-rwxr-xr-xSource/exehead/components.h2
-rwxr-xr-xSource/exehead/config.h2
-rwxr-xr-xSource/exehead/exec.c2
-rwxr-xr-xSource/exehead/exec.h2
-rwxr-xr-xSource/exehead/fileform.c2
-rwxr-xr-xSource/exehead/fileform.h2
-rwxr-xr-xSource/exehead/lang.h18
-rwxr-xr-xSource/exehead/state.h2
-rwxr-xr-xSource/exehead/ui.h2
-rwxr-xr-xSource/exehead/util.c6
-rwxr-xr-xSource/exehead/util.h2
-rwxr-xr-xSource/fileform.cpp2
-rwxr-xr-xSource/fileform.h2
-rwxr-xr-xSource/growbuf.cpp2
-rwxr-xr-xSource/growbuf.h2
-rwxr-xr-xSource/icon.cpp3
-rwxr-xr-xSource/icon.h2
-rwxr-xr-xSource/lang.cpp2
-rwxr-xr-xSource/lang.h2
-rwxr-xr-xSource/lineparse.cpp2
-rwxr-xr-xSource/lineparse.h2
-rwxr-xr-xSource/makenssi.cpp6
-rwxr-xr-xSource/manifest.cpp2
-rwxr-xr-xSource/manifest.h2
-rwxr-xr-xSource/mmap.cpp2
-rwxr-xr-xSource/mmap.h2
-rwxr-xr-xSource/script.cpp26
-rwxr-xr-xSource/strlist.cpp2
-rwxr-xr-xSource/strlist.h2
-rwxr-xr-xSource/tokens.cpp2
-rwxr-xr-xSource/tokens.h6
-rwxr-xr-xSource/util.cpp3
-rwxr-xr-xSource/util.h2
-rwxr-xr-xSource/winchar.cpp2
-rwxr-xr-xSource/winchar.h2
-rwxr-xr-xSource/writer.cpp2
-rwxr-xr-xSource/writer.h2
-rwxr-xr-xSource/zlib/DEFLATE.H2
-rwxr-xr-xSource/zlib/INFBLOCK.C2
-rwxr-xr-xSource/zlib/ZCONF.H2
-rwxr-xr-xSource/zlib/ZLIB.H2
-rwxr-xr-xSource/zlib/ZUTIL.H2
-rwxr-xr-xSource/zlib/deflate.c2
-rwxr-xr-xSource/zlib/trees.c2
-rwxr-xr-xnsisconf.nsh122
291 files changed, 43294 insertions, 41510 deletions
diff --git a/COPYING b/COPYING
index fe45c9b..22f4f28 100755
--- a/COPYING
+++ b/COPYING
@@ -1,144 +1,144 @@
-COPYRIGHT
----------
-
-Copyright (C) 1995-2007 Contributors
-
-More detailed copyright information can be found in the individual source code files.
-
-APPLICABLE LICENSES
--------------------
-
-* All NSIS source code, plug-ins, documentation, examples, header files and graphics, with the exception of the compression modules and where otherwise noted, are licensed under the zlib/libpng license.
-
-* The zlib compression module for NSIS is licensed under the zlib/libpng license.
-
-* The bzip2 compression module for NSIS is licensed under the bzip2 license.
-
-* The LZMA compression module for NSIS is licensed under the Common Public License version 1.0.
-
-ZLIB/LIBPNG LICENSE
--------------------
-
-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.
-
-BZIP2 LICENSE
--------------
-
-This program, "bzip2" and associated library "libbzip2", are copyright (C) 1996-2000 Julian R Seward. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
- 2. 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.
-
- 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Julian Seward, Cambridge, UK.
-
-jseward@acm.org
-
-COMMON PUBLIC LICENSE VERSION 1.0
----------------------------------
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
- a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
- b) in the case of each subsequent Contributor:
-
- i) changes to the Program, and
-
- ii) additions to the Program;
-
- where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
- a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
-
- b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
-
- c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
-
- d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
-
- a) it complies with the terms and conditions of this Agreement; and
-
- b) its license agreement:
-
- i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
-
- ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
-
- iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
-
- iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
- a) it must be made available under this Agreement; and
-
- b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
-
-SPECIAL EXCEPTION FOR LZMA COMPRESSION MODULE
----------------------------------------------
-
-Igor Pavlov and Amir Szekely, the authors of the LZMA compression module for NSIS, expressly permit you to statically or dynamically link your code (or bind by name) to the files from the LZMA compression module for NSIS without subjecting your linked code to the terms of the Common Public license version 1.0. Any modifications or additions to files from the LZMA compression module for NSIS, however, are subject to the terms of the Common Public License version 1.0.
+COPYRIGHT
+---------
+
+Copyright (C) 1995-2008 Contributors
+
+More detailed copyright information can be found in the individual source code files.
+
+APPLICABLE LICENSES
+-------------------
+
+* All NSIS source code, plug-ins, documentation, examples, header files and graphics, with the exception of the compression modules and where otherwise noted, are licensed under the zlib/libpng license.
+
+* The zlib compression module for NSIS is licensed under the zlib/libpng license.
+
+* The bzip2 compression module for NSIS is licensed under the bzip2 license.
+
+* The LZMA compression module for NSIS is licensed under the Common Public License version 1.0.
+
+ZLIB/LIBPNG LICENSE
+-------------------
+
+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.
+
+BZIP2 LICENSE
+-------------
+
+This program, "bzip2" and associated library "libbzip2", are copyright (C) 1996-2000 Julian R Seward. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+ 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Julian Seward, Cambridge, UK.
+
+jseward@acm.org
+
+COMMON PUBLIC LICENSE VERSION 1.0
+---------------------------------
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+ b) in the case of each subsequent Contributor:
+
+ i) changes to the Program, and
+
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+
+ b) its license agreement:
+
+ i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+ iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+ iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+
+ b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+
+SPECIAL EXCEPTION FOR LZMA COMPRESSION MODULE
+---------------------------------------------
+
+Igor Pavlov and Amir Szekely, the authors of the LZMA compression module for NSIS, expressly permit you to statically or dynamically link your code (or bind by name) to the files from the LZMA compression module for NSIS without subjecting your linked code to the terms of the Common Public license version 1.0. Any modifications or additions to files from the LZMA compression module for NSIS, however, are subject to the terms of the Common Public License version 1.0.
diff --git a/ChangeLog b/ChangeLog
index 78a1bec..acb2533 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1080 @@
+2008-02-08 21:16 kichik
+
+ * /NSIS/tags/v235: Tagging for release 2.35
+
+2008-02-08 21:15 kichik
+
+ * /NSIS/trunk/Menu/images/header.gif: 2.35
+
+2008-02-08 21:14 kichik
+
+ * /NSIS/trunk/Include/VB6RunTime.nsh: fixed eol-style
+
+2008-02-08 21:10 kichik
+
+ * /NSIS/trunk/Contrib/MultiUser/MultiUser.nsh: fixed eol-style
+
+2008-02-08 21:06 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: removed old files
+
+2008-02-08 20:56 kichik
+
+ * /NSIS/trunk/Docs/src/history.but: 2.35
+
+2008-02-08 20:40 kichik
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Welcome.nsh: use integer
+ comparison for comparing pointers to zero to support "error"
+ return value
+
+2008-02-08 20:37 kichik
+
+ * /NSIS/trunk/Contrib/Language files/Hebrew.nsh: added MultiUser
+ strings for Hebrew
+
+2008-02-08 20:12 kichik
+
+ * /NSIS/trunk/Docs/src/library.but: fixed link
+
+2008-02-08 16:48 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/input.c: fixed bug #1889720 -
+ nsDialogs can crash on Windows 98
+
+2008-02-04 01:35 joostverburg
+
+ * /NSIS/trunk/Examples/Modern UI/Basic.nsi,
+ /NSIS/trunk/Examples/Modern UI/HeaderBitmap.nsi,
+ /NSIS/trunk/Examples/Modern UI/MultiLanguage.nsi,
+ /NSIS/trunk/Examples/Modern UI/StartMenu.nsi,
+ /NSIS/trunk/Examples/Modern UI/WelcomeFinish.nsi: default
+ directory that does not require administrator privileges
+
+2008-02-04 01:09 joostverburg
+
+ * /NSIS/trunk/Examples/UserVars.nsi: administrator privileges
+ required for installation in Program Files
+
+2008-02-04 00:49 joostverburg
+
+ * /NSIS/trunk/Examples/example1.nsi: default directory that does
+ not require administrator privileges
+
+2008-02-02 18:43 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: extracted
+ add_nobj_entry_internal()
+
+2008-02-02 18:34 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: renamed add_nobj_entries()
+ to add_nobj_code_deps() and changed parameter to nobj_code
+
+2008-02-02 18:33 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/code.cpp,
+ /NSIS/branches/nobjs/Source/nobj/code.h,
+ /NSIS/branches/nobjs/Source/nobj/function.cpp,
+ /NSIS/branches/nobjs/Source/nobj/function.h,
+ /NSIS/branches/nobjs/Source/nobj/section.cpp,
+ /NSIS/branches/nobjs/Source/nobj/section.h,
+ /NSIS/branches/nobjs/Source/SConscript: move common code from
+ nobj_function and nobj_section into nobj_code (better name
+ pending)
+
+2008-02-02 18:29 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: validate return value of
+ add_nobj_entries
+
+2008-02-02 18:28 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/nobj/function.cpp,
+ /NSIS/branches/nobjs/Source/nobj/function.h,
+ /NSIS/branches/nobjs/Source/nobj/label.cpp,
+ /NSIS/branches/nobjs/Source/nobj/label.h,
+ /NSIS/branches/nobjs/Source/nobj/section.cpp,
+ /NSIS/branches/nobjs/Source/nobj/section.h,
+ /NSIS/branches/nobjs/Source/SConscript: added label support
+
+2008-02-02 13:22 kichik
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Welcome.nsh: same for
+ welcome page (mainly fixes memory allocation)
+
+2008-02-02 13:20 kichik
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh: a few fix-ups
+ for image size query:
+ - verify allocation
+ - free allocated memory
+ - push bitmap path to avoid quoting issues
+
+2008-02-01 23:06 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: revert that... labels are
+ later looked-up by name without colons
+
+2008-02-01 23:02 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: no real need to support
+ labels without colon suffix
+
+2008-02-01 22:50 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: entries can now be added
+ to data block only through add_nobj_entries
+
+2008-02-01 22:40 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/nobj/section.cpp,
+ /NSIS/branches/nobjs/Source/nobj/section.h: move some section
+ functionality to nobj_section
+
+2008-02-01 22:16 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: extracted add_nobj_entries()
+ from section_end() and function_end()
+
+2008-02-01 22:12 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/nobj/section.cpp,
+ /NSIS/branches/nobjs/Source/nobj/section.h,
+ /NSIS/branches/nobjs/Source/SConscript: nobjify sections and add
+ section's code only after SectionEnd
+
+2008-02-01 21:52 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/function.cpp: no need for
+ <stdexcept>
+
+2008-02-01 16:44 kichik
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/StartMenu.nsh: fixed bug
+ #1861944 - mui.StartMenuPage.Create not referenced
+
+2008-02-01 16:38 kichik
+
+ * /NSIS/trunk/Docs/src/basic.but: fixed bug #1883917 - File command
+ reference not clear
+
+2008-01-29 22:43 kichik
+
+ * /NSIS/trunk/Source/tokens.h: another typo
+
+2008-01-29 22:42 kichik
+
+ * /NSIS/trunk/Source/tokens.h: typo
+
+2008-01-29 15:36 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Localization.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/MUI2.nsh,
+ /NSIS/trunk/Contrib/Modern UI/System.nsh: set default language
+ file for MUI without changing the user setting
+
+2008-01-29 15:33 joostverburg
+
+ * /NSIS/trunk/Include/LangFile.nsh: new macro for installer
+ language files, which does not require the name of the language
+ to be set (this is already done by the standard NSIS language
+ files)
+
+2008-01-28 22:05 joostverburg
+
+ * /NSIS/trunk/Contrib/Language files/Dutch.nsh,
+ /NSIS/trunk/Contrib/Language files/French.nsh,
+ /NSIS/trunk/Contrib/Language files/German.nsh,
+ /NSIS/trunk/Contrib/Language files/Italian.nsh: some more
+ translations for installation mode selection page of Multi-User
+ header file
+
+2008-01-28 21:46 joostverburg
+
+ * /NSIS/trunk/Contrib/MultiUser/MultiUser.nsh,
+ /NSIS/trunk/Contrib/MultiUser/Readme.html: * added some comments
+ * added settings for registry key that enables the installation
+ mode to be set to the mode from a previous installation
+ * fixed a few typos
+
+2008-01-28 20:10 joostverburg
+
+ * /NSIS/trunk/Contrib/MultiUser/Readme.html: typo
+
+2008-01-27 17:45 joostverburg
+
+ * /NSIS/trunk/Examples/SConscript: use Modern UI 2
+
+2008-01-27 17:44 joostverburg
+
+ * /NSIS/trunk/Examples/bigtest.nsi,
+ /NSIS/trunk/Examples/example1.nsi,
+ /NSIS/trunk/Examples/example2.nsi,
+ /NSIS/trunk/Examples/FileFunc.nsi,
+ /NSIS/trunk/Examples/FileFuncTest.nsi,
+ /NSIS/trunk/Examples/gfx.nsi, /NSIS/trunk/Examples/languages.nsi,
+ /NSIS/trunk/Examples/Library.nsi,
+ /NSIS/trunk/Examples/LogicLib.nsi,
+ /NSIS/trunk/Examples/Memento.nsi,
+ /NSIS/trunk/Examples/one-section.nsi,
+ /NSIS/trunk/Examples/primes.nsi, /NSIS/trunk/Examples/rtest.nsi,
+ /NSIS/trunk/Examples/silent.nsi,
+ /NSIS/trunk/Examples/StrFunc.nsi,
+ /NSIS/trunk/Examples/TextFunc.nsi,
+ /NSIS/trunk/Examples/TextFuncTest.nsi,
+ /NSIS/trunk/Examples/UserVars.nsi,
+ /NSIS/trunk/Examples/viewhtml.nsi,
+ /NSIS/trunk/Examples/waplugin.nsi,
+ /NSIS/trunk/Examples/WordFunc.nsi,
+ /NSIS/trunk/Examples/WordFuncTest.nsi: Windows Vista UAC setting
+
+2008-01-27 17:24 joostverburg
+
+ * /NSIS/trunk/Examples/Modern UI/Basic.nsi,
+ /NSIS/trunk/Examples/Modern UI/HeaderBitmap.nsi,
+ /NSIS/trunk/Examples/Modern UI/InstallOptions.nsi,
+ /NSIS/trunk/Examples/Modern UI/ioA.ini,
+ /NSIS/trunk/Examples/Modern UI/ioB.ini,
+ /NSIS/trunk/Examples/Modern UI/ioC.ini,
+ /NSIS/trunk/Examples/Modern UI/MultiLanguage.nsi,
+ /NSIS/trunk/Examples/Modern UI/StartMenu.nsi,
+ /NSIS/trunk/Examples/Modern UI/WelcomeFinish.nsi: * use Modern UI
+ 2
+ * Windows Vista UAC setting
+
+2008-01-26 15:13 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/Readme.html: document DropList
+
+2008-01-26 11:47 kichik
+
+ * /NSIS/trunk/Source/icon.cpp: zero icon memory to prevent
+ uninitialized memory from getting into the resources
+
+2008-01-25 12:47 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Welcome.nsh: check whether
+ variables for image resizing need to be included
+
+2008-01-24 21:54 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Welcome.nsh: get image
+ control size directly
+
+2008-01-24 21:45 joostverburg
+
+ * /NSIS/trunk/Docs/src/library.but,
+ /NSIS/trunk/Examples/makensis.nsi,
+ /NSIS/trunk/Include/SConscript,
+ /NSIS/trunk/Include/VB6RunTime.nsh: new header file for the setup
+ of Visual Basic 6.0 run-time files
+
+2008-01-24 21:26 joostverburg
+
+ * /NSIS/trunk/Contrib/MultiUser/MultiUser.nsh: fixed compile error
+ when check for administrator or power user privileges is included
+
+2008-01-24 20:52 joostverburg
+
+ * /NSIS/trunk/Contrib/MultiUser/Readme.html: corrected info about
+ power users
+
+2008-01-24 19:17 joostverburg
+
+ * /NSIS/trunk/Contrib/MultiUser/Readme.html: fix FunctionEnd
+ command in example code
+
+2008-01-24 18:50 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Welcome.nsh: fixed bug
+ #1875945 - Image doesn't fit the window in MUI2 with chinese
+ language. Added support for MUI1
+ MUI_(UN)WELCOMEFINISHPAGE_BITMAP_NOSTRETCH setting.
+
+2008-01-18 14:03 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.c: fix comment
+
+2008-01-18 13:49 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.c: bring back comment
+
+2008-01-18 13:45 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.c: applied patch #1871856
+ - nsDialogs: support for keyboard cues for link control
+
+2008-01-12 15:37 kichik
+
+ * /NSIS/trunk/Docs/src/headers.but,
+ /NSIS/trunk/Docs/src/history.but,
+ /NSIS/trunk/Docs/src/silent.but, /NSIS/trunk/Docs/src/var.but:
+ fixed links
+
+2008-01-06 09:27 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/StartMenu.nsh: fixed bug -
+ Dangerous example of MUI_STARTMENU_GETFOLDER macro
+
+2008-01-05 22:54 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh: set default
+ state of reboot now / reboot later radio buttons
+
+2008-01-04 13:53 joostverburg
+
+ * /NSIS/trunk/Contrib/MultiUser/Readme.html: fix typo
+
+2008-01-03 20:48 kichik
+
+ * /NSIS/trunk/Contrib/NSIS Menu/SConscript: fixed dependency list
+
+2008-01-03 20:45 kichik
+
+ * /NSIS/trunk/Contrib/MultiUser/SConscript: fixed wrong function
+ name
+
+2008-01-03 13:45 joostverburg
+
+ * /NSIS/trunk/Examples/makensis.nsi: move documentation links to
+ NSIS Menu
+
+2008-01-03 13:26 joostverburg
+
+ * /NSIS/trunk/Examples/makensis.nsi,
+ /NSIS/trunk/Menu/compiler.html, /NSIS/trunk/Menu/docs.html,
+ /NSIS/trunk/Menu/images/clear.gif,
+ /NSIS/trunk/Menu/images/menu.gif,
+ /NSIS/trunk/Menu/images/menud.gif, /NSIS/trunk/Menu/index.html,
+ /NSIS/trunk/Menu/intro.html, /NSIS/trunk/Menu/notinstalled.html,
+ /NSIS/trunk/Menu/update.html, /NSIS/trunk/Menu/websites.html:
+ simplified menu providing easier access to all documentation
+
+2008-01-03 01:26 joostverburg
+
+ * /NSIS/trunk/Examples/makensis.nsi, /NSIS/trunk/SConstruct:
+ install Multi-User Header File
+
+2008-01-02 16:19 joostverburg
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Readme.html,
+ /NSIS/trunk/Contrib/Modern UI/Readme.html: fix variable name for
+ Start Menu folder
+
+2008-01-02 01:48 joostverburg
+
+ * /NSIS/trunk/Contrib/Language files/English.nsh,
+ /NSIS/trunk/Contrib/MultiUser,
+ /NSIS/trunk/Contrib/MultiUser/MultiUser.nsh,
+ /NSIS/trunk/Contrib/MultiUser/Readme.html,
+ /NSIS/trunk/Contrib/MultiUser/SConscript: Multi-User Header File:
+ Installer configuration for multi-user Windows environments
+
+2007-12-30 13:05 joostverburg
+
+ * /NSIS/trunk/Docs/src/usefulfunc.but: remove functions which are
+ already included in a header file
+
+2007-12-29 23:43 joostverburg
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.nsh: * include header
+ file content only once
+ * set verbose level
+
+2007-12-29 21:40 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/nobj.cpp: deletion is for
+ dummies...
+ we need reference counting
+
+2007-12-29 21:38 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: delay add function pwnage!
+
+2007-12-29 21:21 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/entry.cpp: pass all set_parm()
+ calls through one set_parm()
+
+2007-12-29 21:10 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/function.cpp: stack stuff is
+ evil
+
+2007-12-29 20:57 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/function.cpp,
+ /NSIS/branches/nobjs/Source/nobj/function.h: const fixes
+
+2007-12-29 20:47 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/function.cpp: missing memset
+
+2007-12-29 20:44 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: some nobj TODO
+
+2007-12-29 20:44 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/entry.cpp,
+ /NSIS/branches/nobjs/Source/nobj/entry.h,
+ /NSIS/branches/nobjs/Source/nobj/function.cpp,
+ /NSIS/branches/nobjs/Source/nobj/function.h,
+ /NSIS/branches/nobjs/Source/nobj/int.cpp,
+ /NSIS/branches/nobjs/Source/nobj/int.h,
+ /NSIS/branches/nobjs/Source/nobj/jump.cpp,
+ /NSIS/branches/nobjs/Source/nobj/jump.h,
+ /NSIS/branches/nobjs/Source/nobj/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj/nobj.h,
+ /NSIS/branches/nobjs/Source/nobj/str.cpp,
+ /NSIS/branches/nobjs/Source/nobj/str.h,
+ /NSIS/branches/nobjs/Source/nobj/var.cpp,
+ /NSIS/branches/nobjs/Source/nobj/var.h: move to 2008 for easier
+ trunk merge
+
+2007-12-29 20:43 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/function.cpp,
+ /NSIS/branches/nobjs/Source/nobj/function.h,
+ /NSIS/branches/nobjs/Source/SConscript: added nobj_function
+
+2007-12-29 18:05 kichik
+
+ * /NSIS/trunk/Source/exehead/lang.h: RFE #1795426 - User friendly
+ message for corrupt or incomplete installer
+
+2007-12-29 14:09 kichik
+
+ * /NSIS/trunk/Include/LogicLib.nsh: more comments for IfNot from
+ patch #1846785
+
+2007-12-24 22:47 kichik
+
+ * /NSIS/branches/nobjs/Source/script.cpp: fixed more variable
+ parsing exceptions
+
+2007-12-24 21:28 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: handle NULL parameters
+ (for example, when setting parm 1 but not 0)
+
+2007-12-24 21:26 kichik
+
+ * /NSIS/branches/nobjs/Source/script.cpp: fixed SendMessage
+
+2007-12-24 20:57 kichik
+
+ * /NSIS/tags/v234: Tagging for release 2.34
+
+2007-12-24 20:56 kichik
+
+ * /NSIS/trunk/Menu/images/header.gif: 2.34
+
+2007-12-24 20:32 kichik
+
+ * /NSIS/trunk/Docs/src/history.but: better wording
+
+2007-12-23 22:36 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: add missing includes for new
+ nobj directory structure
+
+2007-12-23 22:35 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj/entry.cpp,
+ /NSIS/branches/nobjs/Source/nobj/entry.h,
+ /NSIS/branches/nobjs/Source/nobj/int.cpp,
+ /NSIS/branches/nobjs/Source/nobj/int.h,
+ /NSIS/branches/nobjs/Source/nobj/jump.cpp,
+ /NSIS/branches/nobjs/Source/nobj/jump.h,
+ /NSIS/branches/nobjs/Source/nobj/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj/nobj.h,
+ /NSIS/branches/nobjs/Source/nobj/str.cpp,
+ /NSIS/branches/nobjs/Source/nobj/str.h,
+ /NSIS/branches/nobjs/Source/nobj/var.cpp,
+ /NSIS/branches/nobjs/Source/nobj/var.h,
+ /NSIS/branches/nobjs/Source/SConscript: split each nobj into its
+ own file
+
+2007-12-23 22:23 kichik
+
+ * /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/nobj,
+ /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h,
+ /NSIS/branches/nobjs/Source/nobj/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj/nobj.h,
+ /NSIS/branches/nobjs/Source/SConscript: move nobj.cpp and nobj.h
+ to nobj folder
+
+2007-12-23 22:14 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: pass everything through
+ add_nobj_entry
+
+2007-12-22 20:10 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/script.cpp: use nobj_var instead of
+ GetUserVarIndex
+
+2007-12-22 19:27 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: nobj_var
+
+2007-12-22 19:24 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h,
+ /NSIS/branches/nobjs/Source/script.cpp: nobj_entry::set_parm_jump
+ - simpler than new nobj_jump for every call
+
+2007-12-22 19:19 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/script.cpp: use nobj_jump
+
+2007-12-22 19:03 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: added nobj_jump
+
+2007-12-22 16:44 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: VersionCompare is only
+ referenced when the version page is used
+
+2007-12-22 16:35 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: install Deprecated.nsh
+
+2007-12-22 16:20 kichik
+
+ * /NSIS/trunk/Source/exehead/util.c: a empty string can be caused
+ by a path like "\boot.ini", so support that as well
+
+2007-12-22 16:10 kichik
+
+ * /NSIS/trunk/Docs/src/history.but: better phrasing than "usage"
+
+2007-12-22 16:09 kichik
+
+ * /NSIS/trunk/Docs/src/history.but: 2.34
+
+2007-12-22 15:27 kichik
+
+ * /NSIS/trunk/Include/WordFunc.nsh: fixed bug #1852141 - WordFind
+ do not support Chinese
+
+2007-12-22 10:34 kichik
+
+ * /NSIS/trunk/Docs/src/modernui.but,
+ /NSIS/trunk/Docs/src/tutorial.but: link to mui2
+
+2007-12-22 10:26 kichik
+
+ * /NSIS/trunk/Contrib/Modern UI 2/MUI2.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Readme.html: mui2 out of beta
+
+2007-12-22 10:13 kichik
+
+ * /NSIS/trunk/Contrib/Modern UI 2/Deprecated.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/MUI2.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/SConscript: fixed bug #1784470 -
+ MUI_RESERVEFILE_INSTALLOPTIONS fails install build
+ nicer error messages when moving from MUI to MUI2
+
+2007-12-22 09:54 kichik
+
+ * /NSIS/trunk/Include/LangFile.nsh: fixed bug #1848952 -
+ Overwriting LANGFILE_abc_NAME not possible anymore
+
+2007-12-22 09:47 kichik
+
+ * /NSIS/trunk/Docs/src/pages.but: mention nsDialogs as well as
+ InstallOptions
+
+2007-12-22 09:41 kichik
+
+ * /NSIS/trunk/Contrib/InstallOptions/Readme.html,
+ /NSIS/trunk/Contrib/Modern UI 2/License.txt,
+ /NSIS/trunk/Contrib/Modern UI 2/MUI2.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Readme.html,
+ /NSIS/trunk/Contrib/Modern UI/License.txt,
+ /NSIS/trunk/Contrib/Modern UI/Readme.html,
+ /NSIS/trunk/Contrib/Modern UI/System.nsh, /NSIS/trunk/COPYING,
+ /NSIS/trunk/Docs/src/chm_config.but,
+ /NSIS/trunk/Docs/src/config.but,
+ /NSIS/trunk/Docs/src/license.but,
+ /NSIS/trunk/Include/LangFile.nsh,
+ /NSIS/trunk/Source/7zip/LZMADecode.c,
+ /NSIS/trunk/Source/7zip/LZMADecode.h,
+ /NSIS/trunk/Source/afxres.h, /NSIS/trunk/Source/build.cpp,
+ /NSIS/trunk/Source/build.h, /NSIS/trunk/Source/bzip2/blocksort.c,
+ /NSIS/trunk/Source/bzip2/bzlib.c,
+ /NSIS/trunk/Source/bzip2/bzlib.h,
+ /NSIS/trunk/Source/bzip2/compress.c,
+ /NSIS/trunk/Source/bzip2/decompress.c,
+ /NSIS/trunk/Source/bzip2/huffman.c, /NSIS/trunk/Source/cbzip2.h,
+ /NSIS/trunk/Source/clzma.cpp, /NSIS/trunk/Source/clzma.h,
+ /NSIS/trunk/Source/compressor.h, /NSIS/trunk/Source/crc32.c,
+ /NSIS/trunk/Source/crc32.h, /NSIS/trunk/Source/czlib.h,
+ /NSIS/trunk/Source/dirreader.cpp, /NSIS/trunk/Source/dirreader.h,
+ /NSIS/trunk/Source/exehead/afxres.h,
+ /NSIS/trunk/Source/exehead/bgbg.c,
+ /NSIS/trunk/Source/exehead/components.c,
+ /NSIS/trunk/Source/exehead/components.h,
+ /NSIS/trunk/Source/exehead/config.h,
+ /NSIS/trunk/Source/exehead/exec.c,
+ /NSIS/trunk/Source/exehead/exec.h,
+ /NSIS/trunk/Source/exehead/fileform.c,
+ /NSIS/trunk/Source/exehead/fileform.h,
+ /NSIS/trunk/Source/exehead/lang.h,
+ /NSIS/trunk/Source/exehead/Main.c,
+ /NSIS/trunk/Source/exehead/state.h,
+ /NSIS/trunk/Source/exehead/Ui.c, /NSIS/trunk/Source/exehead/ui.h,
+ /NSIS/trunk/Source/exehead/util.c,
+ /NSIS/trunk/Source/exehead/util.h,
+ /NSIS/trunk/Source/fileform.cpp, /NSIS/trunk/Source/fileform.h,
+ /NSIS/trunk/Source/growbuf.cpp, /NSIS/trunk/Source/growbuf.h,
+ /NSIS/trunk/Source/icon.h, /NSIS/trunk/Source/lang.cpp,
+ /NSIS/trunk/Source/lang.h, /NSIS/trunk/Source/lineparse.cpp,
+ /NSIS/trunk/Source/lineparse.h, /NSIS/trunk/Source/makenssi.cpp,
+ /NSIS/trunk/Source/manifest.cpp, /NSIS/trunk/Source/manifest.h,
+ /NSIS/trunk/Source/mmap.cpp, /NSIS/trunk/Source/mmap.h,
+ /NSIS/trunk/Source/Platform.h, /NSIS/trunk/Source/Plugins.cpp,
+ /NSIS/trunk/Source/Plugins.h,
+ /NSIS/trunk/Source/ResourceEditor.cpp,
+ /NSIS/trunk/Source/ResourceEditor.h,
+ /NSIS/trunk/Source/ResourceVersionInfo.cpp,
+ /NSIS/trunk/Source/ResourceVersionInfo.h,
+ /NSIS/trunk/Source/script.cpp,
+ /NSIS/trunk/Source/ShConstants.cpp,
+ /NSIS/trunk/Source/strlist.cpp, /NSIS/trunk/Source/strlist.h,
+ /NSIS/trunk/Source/tokens.cpp, /NSIS/trunk/Source/tokens.h,
+ /NSIS/trunk/Source/util.cpp, /NSIS/trunk/Source/util.h,
+ /NSIS/trunk/Source/winchar.cpp, /NSIS/trunk/Source/winchar.h,
+ /NSIS/trunk/Source/writer.cpp, /NSIS/trunk/Source/writer.h,
+ /NSIS/trunk/Source/zlib/deflate.c,
+ /NSIS/trunk/Source/zlib/DEFLATE.H,
+ /NSIS/trunk/Source/zlib/INFBLOCK.C,
+ /NSIS/trunk/Source/zlib/trees.c, /NSIS/trunk/Source/zlib/ZCONF.H,
+ /NSIS/trunk/Source/zlib/ZLIB.H, /NSIS/trunk/Source/zlib/ZUTIL.H:
+ happy new year!
+ bug #1855805
+
+2007-12-21 22:46 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: simply zero real entry
+ structure and don't pass empty parameters to
+ add_nobj_entry_parm()
+
+2007-12-21 22:46 kichik
+
+ * /NSIS/branches/nobjs/Source/build.h: also declare
+ process_jump_nobj
+
+2007-12-21 22:45 kichik
+
+ * /NSIS/branches/nobjs/Source/script.cpp: nobj it up
+
+2007-12-21 22:28 kichik
+
+ * /NSIS/trunk/Source/script.cpp: verify correct offset in
+ TOK_GETFULLPATHNAME
+
+2007-12-21 22:25 kichik
+
+ * /NSIS/trunk/Source/script.cpp: verify correct offset in
+ TOK_GETCURINSTTYPE
+
+2007-12-21 20:54 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: just resize() instead of
+ pushing back NULLs
+
+2007-12-21 20:53 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: added nobj_entry::set_parm()
+ for std::string
+
+2007-12-21 20:51 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: push NULLs instead of
+ wasting memory
+ set_parm does that anyway...
+
+2007-12-21 20:51 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: TODO
+
+2007-12-21 20:21 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp: pad with right number of
+ parameters
+
+2007-12-21 20:20 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h,
+ /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: was thinking in Java...
+ pointers needed here for proper polymorphism.
+
+2007-12-21 16:50 kichik
+
+ * /NSIS/branches/nobjs/SCons/Config/ms: some magic for RTTI
+
+2007-12-21 16:47 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: nicer interface for
+ nobj_entry
+
+2007-12-21 16:36 kichik
+
+ * /NSIS/branches/nobjs/Source/build.cpp,
+ /NSIS/branches/nobjs/Source/build.h: added
+ CEXEBuild::add_nobj_entry() using new nobjs
+
+2007-12-21 16:35 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: more consts
+
+2007-12-21 16:22 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: missing nobj_entry::which()
+
+2007-12-21 16:18 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: nobj::dependencies() is const
+
+2007-12-21 16:12 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: added nobj_entry
+
+2007-12-21 16:01 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h: basic nobjs
+
+2007-12-21 15:52 kichik
+
+ * /NSIS/branches/nobjs/Source/nobj.cpp,
+ /NSIS/branches/nobjs/Source/nobj.h,
+ /NSIS/branches/nobjs/Source/SConscript: basic nobj implementation
+
+2007-12-21 15:30 kichik
+
+ * /NSIS/branches/nobjs: made a copy
+
+2007-12-20 21:39 kichik
+
+ * /NSIS/trunk/Source/util.cpp: more for bug #1851365
+
+2007-12-19 21:17 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: simpler comparison using
+ VersionCompare, less labels and more LogicLib
+
+2007-12-19 21:02 kichik
+
+ * /NSIS/trunk/Examples/SConscript: use nsDialogs instead of
+ InstallOptions - no more makensis.ini
+
+2007-12-19 20:59 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: properly handle initial value
+ of $ReinstallPageCheck
+
+2007-12-19 20:58 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: proper radio buttons location
+
+2007-12-19 20:57 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: and now for something that
+ actually builds...
+
+2007-12-19 20:52 kichik
+
+ * /NSIS/trunk/Examples/makensis.ini,
+ /NSIS/trunk/Examples/makensis.nsi: use nsDialogs instead of
+ InstallOptions
+
+2007-12-19 20:52 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.nsh: use BM_GETCHECK
+ see following thread for more information
+ http://forums.winamp.com/showthread.php?s=&threadid=282186
+
+2007-12-19 20:33 kichik
+
+ * /NSIS/trunk/Examples/makensis.nsi: use MUI2
+
+2007-12-15 15:28 kichik
+
+ * /NSIS/trunk/Source/icon.cpp, /NSIS/trunk/Source/Platform.h: fixed
+ bug #1851365 - mac os x leopard build and run fails - endian
+ issues
+
+2007-12-15 15:14 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.nsh: fixed bug #1851136 -
+ nsDialogs: ComboBox not like IO, DropList missing
+
+2007-12-15 14:56 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/nsDialogs.nsh,
+ /NSIS/trunk/Contrib/nsDialogs/Readme.html: applied patch #1848940
+ - nsDialogs - Additions
+
+2007-12-15 12:24 kichik
+
+ * /NSIS/trunk/Source/exehead/util.c: fixed bug #1851273 - relative
+ path Delete doesn't work
+
+2007-12-12 18:45 joostverburg
+
+ * /NSIS/trunk/Contrib/Language files/German.nsh: spelling
+
+2007-12-08 13:13 kichik
+
+ * /NSIS/trunk/Include/LogicLib.nsh: applied patch #1846785 - IfNot
+ support for LogicLib
+
+2007-12-01 14:29 kichik
+
+ * /NSIS/trunk/Docs/src/usage.but: fixed bug #1842326 - installer /D
+ command line reference incomplete
+
+2007-12-01 12:20 kichik
+
+ * /NSIS/trunk/Scripts/release.py: ensure bug #1835866 and #1831677
+ won't repeat
+
+2007-12-01 11:43 kichik
+
+ * /NSIS/trunk/Contrib/AdvSplash/advsplash.txt,
+ /NSIS/trunk/Contrib/AdvSplash/Example.nsi,
+ /NSIS/trunk/Contrib/Banner/Example.nsi,
+ /NSIS/trunk/Contrib/Banner/Readme.txt,
+ /NSIS/trunk/Contrib/BgImage/BgImage.txt,
+ /NSIS/trunk/Contrib/BgImage/Example.nsi,
+ /NSIS/trunk/Contrib/Dialer/Dialer.txt,
+ /NSIS/trunk/Contrib/InstallOptions/Changelog.txt,
+ /NSIS/trunk/Contrib/InstallOptions/InstallOptions.nsh,
+ /NSIS/trunk/Contrib/InstallOptions/test.nsi,
+ /NSIS/trunk/Contrib/InstallOptions/testimgs.nsi,
+ /NSIS/trunk/Contrib/InstallOptions/testlink.nsi,
+ /NSIS/trunk/Contrib/InstallOptions/testnotify.nsi,
+ /NSIS/trunk/Contrib/Language files/Afrikaans.nsh,
+ /NSIS/trunk/Contrib/Language files/Albanian.nsh,
+ /NSIS/trunk/Contrib/Language files/Arabic.nsh,
+ /NSIS/trunk/Contrib/Language files/Basque.nsh,
+ /NSIS/trunk/Contrib/Language files/Belarusian.nsh,
+ /NSIS/trunk/Contrib/Language files/Bosnian.nsh,
+ /NSIS/trunk/Contrib/Language files/Breton.nsh,
+ /NSIS/trunk/Contrib/Language files/Bulgarian.nsh,
+ /NSIS/trunk/Contrib/Language files/Catalan.nsh,
+ /NSIS/trunk/Contrib/Language files/Croatian.nsh,
+ /NSIS/trunk/Contrib/Language files/Czech.nsh,
+ /NSIS/trunk/Contrib/Language files/Danish.nsh,
+ /NSIS/trunk/Contrib/Language files/Dutch.nsh,
+ /NSIS/trunk/Contrib/Language files/English.nsh,
+ /NSIS/trunk/Contrib/Language files/Estonian.nsh,
+ /NSIS/trunk/Contrib/Language files/Farsi.nsh,
+ /NSIS/trunk/Contrib/Language files/Finnish.nsh,
+ /NSIS/trunk/Contrib/Language files/French.nsh,
+ /NSIS/trunk/Contrib/Language files/Galician.nsh,
+ /NSIS/trunk/Contrib/Language files/German.nsh,
+ /NSIS/trunk/Contrib/Language files/Greek.nsh,
+ /NSIS/trunk/Contrib/Language files/Hebrew.nsh,
+ /NSIS/trunk/Contrib/Language files/Hungarian.nsh,
+ /NSIS/trunk/Contrib/Language files/Icelandic.nsh,
+ /NSIS/trunk/Contrib/Language files/Indonesian.nsh,
+ /NSIS/trunk/Contrib/Language files/Irish.nsh,
+ /NSIS/trunk/Contrib/Language files/Italian.nsh,
+ /NSIS/trunk/Contrib/Language files/Japanese.nsh,
+ /NSIS/trunk/Contrib/Language files/Korean.nsh,
+ /NSIS/trunk/Contrib/Language files/Kurdish.nsh,
+ /NSIS/trunk/Contrib/Language files/Latvian.nsh,
+ /NSIS/trunk/Contrib/Language files/Lithuanian.nsh,
+ /NSIS/trunk/Contrib/Language files/Luxembourgish.nsh,
+ /NSIS/trunk/Contrib/Language files/Macedonian.nsh,
+ /NSIS/trunk/Contrib/Language files/Malay.nsh,
+ /NSIS/trunk/Contrib/Language files/Mongolian.nsh,
+ /NSIS/trunk/Contrib/Language files/Norwegian.nsh,
+ /NSIS/trunk/Contrib/Language files/NorwegianNynorsk.nsh,
+ /NSIS/trunk/Contrib/Language files/Polish.nsh,
+ /NSIS/trunk/Contrib/Language files/Portuguese.nsh,
+ /NSIS/trunk/Contrib/Language files/PortugueseBR.nsh,
+ /NSIS/trunk/Contrib/Language files/Romanian.nsh,
+ /NSIS/trunk/Contrib/Language files/Russian.nsh,
+ /NSIS/trunk/Contrib/Language files/Serbian.nsh,
+ /NSIS/trunk/Contrib/Language files/SerbianLatin.nsh,
+ /NSIS/trunk/Contrib/Language files/SimpChinese.nsh,
+ /NSIS/trunk/Contrib/Language files/Slovak.nsh,
+ /NSIS/trunk/Contrib/Language files/Slovenian.nsh,
+ /NSIS/trunk/Contrib/Language files/Spanish.nsh,
+ /NSIS/trunk/Contrib/Language files/SpanishInternational.nsh,
+ /NSIS/trunk/Contrib/Language files/Swedish.nsh,
+ /NSIS/trunk/Contrib/Language files/Thai.nsh,
+ /NSIS/trunk/Contrib/Language files/TradChinese.nsh,
+ /NSIS/trunk/Contrib/Language files/Turkish.nsh,
+ /NSIS/trunk/Contrib/Language files/Ukrainian.nsh,
+ /NSIS/trunk/Contrib/Language files/Uzbek.nsh,
+ /NSIS/trunk/Contrib/Language files/Welsh.nsh,
+ /NSIS/trunk/Contrib/Makensisw/Readme.txt,
+ /NSIS/trunk/Contrib/Math/math.nsi,
+ /NSIS/trunk/Contrib/Math/Math.txt,
+ /NSIS/trunk/Contrib/Math/mathtest.nsi,
+ /NSIS/trunk/Contrib/Math/mathtest.txt, /NSIS/trunk/Contrib/Modern
+ UI 2/Interface.nsh, /NSIS/trunk/Contrib/Modern UI 2/License.txt,
+ /NSIS/trunk/Contrib/Modern UI 2/Localization.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/MUI2.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Components.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Directory.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Finish.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/InstallFiles.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/License.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/StartMenu.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh,
+ /NSIS/trunk/Contrib/Modern UI 2/Pages/Welcome.nsh,
+ /NSIS/trunk/Contrib/Modern UI/Changelog.txt,
+ /NSIS/trunk/Contrib/Modern UI/License.txt,
+ /NSIS/trunk/Contrib/Modern UI/System.nsh,
+ /NSIS/trunk/Contrib/nsDialogs/example.nsi,
+ /NSIS/trunk/Contrib/nsDialogs/InstallOptions.nsi,
+ /NSIS/trunk/Contrib/nsDialogs/nsDialogs.nsh,
+ /NSIS/trunk/Contrib/nsDialogs/welcome.nsi,
+ /NSIS/trunk/Contrib/nsExec/nsExec.txt,
+ /NSIS/trunk/Contrib/nsExec/test.nsi, /NSIS/trunk/Contrib/NSIS
+ Menu/wx/build.txt, /NSIS/trunk/Contrib/NSISdl/License.txt,
+ /NSIS/trunk/Contrib/NSISdl/ReadMe.txt,
+ /NSIS/trunk/Contrib/Splash/Example.nsi,
+ /NSIS/trunk/Contrib/Splash/splash.txt,
+ /NSIS/trunk/Contrib/StartMenu/Example.nsi,
+ /NSIS/trunk/Contrib/StartMenu/Readme.txt,
+ /NSIS/trunk/Contrib/System/SysFunc.nsh,
+ /NSIS/trunk/Contrib/System/System.nsh,
+ /NSIS/trunk/Contrib/System/System.nsi,
+ /NSIS/trunk/Contrib/System/WhatsNew.txt,
+ /NSIS/trunk/Contrib/UserInfo/UserInfo.nsi,
+ /NSIS/trunk/Contrib/VPatch/example.nsi,
+ /NSIS/trunk/Contrib/VPatch/VPatchLib.nsh,
+ /NSIS/trunk/Contrib/zip2exe/Base.nsh,
+ /NSIS/trunk/Contrib/zip2exe/Classic.nsh,
+ /NSIS/trunk/Contrib/zip2exe/Modern.nsh, /NSIS/trunk/COPYING,
+ /NSIS/trunk/Examples/bigtest.nsi,
+ /NSIS/trunk/Examples/example1.nsi,
+ /NSIS/trunk/Examples/example2.nsi,
+ /NSIS/trunk/Examples/FileFunc.nsi,
+ /NSIS/trunk/Examples/FileFuncTest.nsi,
+ /NSIS/trunk/Examples/gfx.nsi, /NSIS/trunk/Examples/languages.nsi,
+ /NSIS/trunk/Examples/Library.nsi,
+ /NSIS/trunk/Examples/LogicLib.nsi,
+ /NSIS/trunk/Examples/makensis.nsi,
+ /NSIS/trunk/Examples/Memento.nsi, /NSIS/trunk/Examples/Modern
+ UI/Basic.nsi, /NSIS/trunk/Examples/Modern UI/HeaderBitmap.nsi,
+ /NSIS/trunk/Examples/Modern UI/InstallOptions.nsi,
+ /NSIS/trunk/Examples/Modern UI/MultiLanguage.nsi,
+ /NSIS/trunk/Examples/Modern UI/StartMenu.nsi,
+ /NSIS/trunk/Examples/Modern UI/WelcomeFinish.nsi,
+ /NSIS/trunk/Examples/one-section.nsi,
+ /NSIS/trunk/Examples/primes.nsi, /NSIS/trunk/Examples/rtest.nsi,
+ /NSIS/trunk/Examples/silent.nsi,
+ /NSIS/trunk/Examples/StrFunc.nsi,
+ /NSIS/trunk/Examples/TextFunc.nsi,
+ /NSIS/trunk/Examples/TextFuncTest.nsi,
+ /NSIS/trunk/Examples/UserVars.nsi,
+ /NSIS/trunk/Examples/VersionInfo.nsi,
+ /NSIS/trunk/Examples/viewhtml.nsi,
+ /NSIS/trunk/Examples/waplugin.nsi,
+ /NSIS/trunk/Examples/WordFunc.nsi,
+ /NSIS/trunk/Examples/WordFuncTest.nsi,
+ /NSIS/trunk/Include/Colors.nsh, /NSIS/trunk/Include/FileFunc.nsh,
+ /NSIS/trunk/Include/LangFile.nsh,
+ /NSIS/trunk/Include/Library.nsh,
+ /NSIS/trunk/Include/LogicLib.nsh,
+ /NSIS/trunk/Include/Memento.nsh, /NSIS/trunk/Include/MUI.nsh,
+ /NSIS/trunk/Include/MUI2.nsh, /NSIS/trunk/Include/Sections.nsh,
+ /NSIS/trunk/Include/StrFunc.nsh, /NSIS/trunk/Include/StrFunc.txt,
+ /NSIS/trunk/Include/TextFunc.nsh,
+ /NSIS/trunk/Include/UpgradeDLL.nsh,
+ /NSIS/trunk/Include/WinMessages.nsh,
+ /NSIS/trunk/Include/WinVer.nsh, /NSIS/trunk/Include/WordFunc.nsh,
+ /NSIS/trunk/Include/x64.nsh, /NSIS/trunk/INSTALL,
+ /NSIS/trunk/nsisconf.nsh, /NSIS/trunk/Scripts/RegRestore.nsi,
+ /NSIS/trunk/Source/Tests/preprocessor.nsi,
+ /NSIS/trunk/Source/Tests/root.txt: fixed bug #1835866 - CR LF
+ combinations
+
+2007-12-01 10:59 kichik
+
+ * /NSIS/trunk/Contrib/Makensisw/License.txt: test
+ svn:eol-style=native
+
+2007-12-01 10:58 kichik
+
+ * /NSIS/trunk: some ignores
+
+2007-11-30 09:54 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/rtl.c,
+ /NSIS/trunk/Source/DialogTemplate.cpp: fixed bug #1841573 - RTL
+ components & instfiles page
+ WS_EX_LAYOUTRTL can be used for individual controls
+
+2007-11-29 17:37 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/Readme.html: fixed bug #1841120 -
+ Incorrectly documented returncode SelectFolderDialog
+
+2007-11-27 20:57 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/welcome.nsi: added missing Pop
+
+2007-11-27 20:56 kichik
+
+ * /NSIS/trunk/Contrib/nsDialogs/example.nsi: added missing Pops
+
+2007-11-19 19:29 kichik
+
+ * /NSIS/trunk/Contrib/Language files/Bulgarian.nsh: updates by
+ Dumperbg
+
+2007-11-18 19:19 kichik
+
+ * /NSIS/trunk/Source/script.cpp: implemented RFE #1686589 and fixed
+ bug #1701051 - improve warning for backslash line end in comment
+
2007-11-17 14:29 kichik
* /NSIS/tags/v233: Tagging for release 2.33
diff --git a/Contrib/AdvSplash/Example.nsi b/Contrib/AdvSplash/Example.nsi
index 751c836..4bffd3f 100755
--- a/Contrib/AdvSplash/Example.nsi
+++ b/Contrib/AdvSplash/Example.nsi
@@ -1,35 +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
+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/Contrib/AdvSplash/advsplash.txt b/Contrib/AdvSplash/advsplash.txt
index 92f333f..12692b4 100755
--- a/Contrib/AdvSplash/advsplash.txt
+++ b/Contrib/AdvSplash/advsplash.txt
@@ -1,53 +1,53 @@
-AdvSplash.dll - small (5.5k), simple plugin that lets you throw
-up a splash screen in NSIS installers with cool fading effects (win2k/xp)
-and transparency.
-
-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_splashshit.wav"
-
- advsplash::show 1000 600 400 -1 $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
-
-Calling format
- advsplash::show Delay FadeIn FadeOut KeyColor FileName
-
-Delay - length to show the screen for (in milliseconds)
-FadeIn - length to show the fadein scene (in ms) (not included in Delay)
-FadeOut - length to show the fadeout scene (in ms) (not included in Delay)
-KeyColor - color used for transparency, could be any RGB value
- (for ex. R=255 G=100 B=16 -> KeyColor=0xFF6410),
- use KeyColor=-1 if there is no transparent color at 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)
+AdvSplash.dll - small (5.5k), simple plugin that lets you throw
+up a splash screen in NSIS installers with cool fading effects (win2k/xp)
+and transparency.
+
+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_splashshit.wav"
+
+ advsplash::show 1000 600 400 -1 $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
+
+Calling format
+ advsplash::show Delay FadeIn FadeOut KeyColor FileName
+
+Delay - length to show the screen for (in milliseconds)
+FadeIn - length to show the fadein scene (in ms) (not included in Delay)
+FadeOut - length to show the fadeout scene (in ms) (not included in Delay)
+KeyColor - color used for transparency, could be any RGB value
+ (for ex. R=255 G=100 B=16 -> KeyColor=0xFF6410),
+ use KeyColor=-1 if there is no transparent color at 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/Contrib/Banner/Example.nsi b/Contrib/Banner/Example.nsi
index 7719e20..a1851a2 100755
--- a/Contrib/Banner/Example.nsi
+++ b/Contrib/Banner/Example.nsi
@@ -1,38 +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 /NOUNLOAD "Calculating important stuff..."
-
- Banner::getWindow /NOUNLOAD
- Pop $1
-
- again:
- IntOp $0 $0 + 1
- Sleep 1
- StrCmp $0 1000 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 2000 0 again2
-
- Banner::destroy
-FunctionEnd
-
-Section
- DetailPrint "Using previous calculations to quickly calculate 1*2000..."
- Sleep 1000
- DetailPrint "Eureka! It's $0!!!"
- DetailPrint ""
+# 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 /NOUNLOAD "Calculating important stuff..."
+
+ Banner::getWindow /NOUNLOAD
+ Pop $1
+
+ again:
+ IntOp $0 $0 + 1
+ Sleep 1
+ StrCmp $0 1000 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 2000 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/Contrib/Banner/Readme.txt b/Contrib/Banner/Readme.txt
index 97813bc..2682c2b 100755
--- a/Contrib/Banner/Readme.txt
+++ b/Contrib/Banner/Readme.txt
@@ -1,47 +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 /NOUNLOAD "Text to show"
-
-[optional] Banner::getWindow /NOUNLOAD
-
-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 /NOUNLOAD /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 /NOUNLOAD /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 /NOUNLOAD "") the banner window will not show on the taskbar.
-
-Credits
--------
-
+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 /NOUNLOAD "Text to show"
+
+[optional] Banner::getWindow /NOUNLOAD
+
+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 /NOUNLOAD /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 /NOUNLOAD /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 /NOUNLOAD "") 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/Contrib/BgImage/BgImage.txt b/Contrib/BgImage/BgImage.txt
index 305ca6f..c333c14 100755
--- a/Contrib/BgImage/BgImage.txt
+++ b/Contrib/BgImage/BgImage.txt
@@ -1,96 +1,96 @@
-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
-~~~~~
-
-* All but the last used function (which should be Destroy) must use /NOUNLOAD so the image window won't be destroyed before it should.
-
-* This plugin requires NSIS 2.0b4 and above.
-
-* Do not call SetBg (which creates the window) from a section or a function called by a section.
-
-* Never use /NOUNLOAD in .onInstSuccess and .onInstFailed. Failing to do so will cause the installer to crash.
- This means you should not call Destroy from .onInstSuccess or .onInstFailed.
-
-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
+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
+~~~~~
+
+* All but the last used function (which should be Destroy) must use /NOUNLOAD so the image window won't be destroyed before it should.
+
+* This plugin requires NSIS 2.0b4 and above.
+
+* Do not call SetBg (which creates the window) from a section or a function called by a section.
+
+* Never use /NOUNLOAD in .onInstSuccess and .onInstFailed. Failing to do so will cause the installer to crash.
+ This means you should not call Destroy from .onInstSuccess or .onInstFailed.
+
+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/Contrib/BgImage/Example.nsi b/Contrib/BgImage/Example.nsi
index 9dc8535..4096816 100755
--- a/Contrib/BgImage/Example.nsi
+++ b/Contrib/BgImage/Example.nsi
@@ -1,102 +1,102 @@
-Name "BgImage.dll test"
-
-OutFile "BgImage Test.exe"
-
-XPStyle on
-
-!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 /NOUNLOAD 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 /NOUNLOAD /GRADIENT 0 0x80 0 0x80 0 0
- !insertmacro GetReturnValue
- # add an image @ (150,0)
- BgImage::AddImage /NOUNLOAD $PLUGINSDIR\2.bmp 150 0
- !insertmacro GetReturnValue
- # add the same image only transparent (magenta wiped) @ (150,16)
- BgImage::AddImage /NOUNLOAD /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 /NOUNLOAD "Testing 1... 2... 3..." $R0 0 0 255 48 48 798 198
- !insertmacro GetReturnValue
- # add a green shadow for the text
- BgImage::AddText /NOUNLOAD "Testing 1... 2... 3..." $R0 0 255 0 52 52 802 202
- !insertmacro GetReturnValue
- # add the text
- BgImage::AddText /NOUNLOAD "Testing 1... 2... 3..." $R0 255 0 0 50 50 800 200
- !insertmacro GetReturnValue
- # show our creation to the world!
- BgImage::Redraw /NOUNLOAD
- # 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 /NOUNLOAD /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 /NOUNLOAD /TILED $PLUGINSDIR\1.bmp
- !insertmacro GetReturnValue
- # we have to redraw to reflect the changes
- BgImage::Redraw /NOUNLOAD
-
- MessageBox MB_OK "Mike the llama"
-
- # clear everything
- BgImage::Clear /NOUNLOAD
- # Clear doesn't return any value
- # set another gradient
- BgImage::SetBg /NOUNLOAD /GRADIENT 0xFF 0xFA 0xBA 0xAA 0xA5 0x65
- !insertmacro GetReturnValue
- # add some text
- BgImage::AddText /NOUNLOAD "A Desert for Mike" $R0 0 0 0 50 50 800 150
- !insertmacro GetReturnValue
- # add mike as an image
- BgImage::AddImage /NOUNLOAD $PLUGINSDIR\1.bmp 50 150
- !insertmacro GetReturnValue
- # again, we have to call redraw to reflect changes
- BgImage::Redraw /NOUNLOAD
-SectionEnd
-
-Function .onGUIEnd
- # Destroy must not have /NOUNLOAD so NSIS will be able to unload
- # and delete BgImage before it exits
- BgImage::Destroy
- # Destroy doesn't return any value
+Name "BgImage.dll test"
+
+OutFile "BgImage Test.exe"
+
+XPStyle on
+
+!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 /NOUNLOAD 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 /NOUNLOAD /GRADIENT 0 0x80 0 0x80 0 0
+ !insertmacro GetReturnValue
+ # add an image @ (150,0)
+ BgImage::AddImage /NOUNLOAD $PLUGINSDIR\2.bmp 150 0
+ !insertmacro GetReturnValue
+ # add the same image only transparent (magenta wiped) @ (150,16)
+ BgImage::AddImage /NOUNLOAD /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 /NOUNLOAD "Testing 1... 2... 3..." $R0 0 0 255 48 48 798 198
+ !insertmacro GetReturnValue
+ # add a green shadow for the text
+ BgImage::AddText /NOUNLOAD "Testing 1... 2... 3..." $R0 0 255 0 52 52 802 202
+ !insertmacro GetReturnValue
+ # add the text
+ BgImage::AddText /NOUNLOAD "Testing 1... 2... 3..." $R0 255 0 0 50 50 800 200
+ !insertmacro GetReturnValue
+ # show our creation to the world!
+ BgImage::Redraw /NOUNLOAD
+ # 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 /NOUNLOAD /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 /NOUNLOAD /TILED $PLUGINSDIR\1.bmp
+ !insertmacro GetReturnValue
+ # we have to redraw to reflect the changes
+ BgImage::Redraw /NOUNLOAD
+
+ MessageBox MB_OK "Mike the llama"
+
+ # clear everything
+ BgImage::Clear /NOUNLOAD
+ # Clear doesn't return any value
+ # set another gradient
+ BgImage::SetBg /NOUNLOAD /GRADIENT 0xFF 0xFA 0xBA 0xAA 0xA5 0x65
+ !insertmacro GetReturnValue
+ # add some text
+ BgImage::AddText /NOUNLOAD "A Desert for Mike" $R0 0 0 0 50 50 800 150
+ !insertmacro GetReturnValue
+ # add mike as an image
+ BgImage::AddImage /NOUNLOAD $PLUGINSDIR\1.bmp 50 150
+ !insertmacro GetReturnValue
+ # again, we have to call redraw to reflect changes
+ BgImage::Redraw /NOUNLOAD
+SectionEnd
+
+Function .onGUIEnd
+ # Destroy must not have /NOUNLOAD so NSIS will be able to unload
+ # and delete BgImage before it exits
+ BgImage::Destroy
+ # Destroy doesn't return any value
FunctionEnd \ No newline at end of file
diff --git a/Contrib/Dialer/Dialer.txt b/Contrib/Dialer/Dialer.txt
index 7e067d7..076abc6 100755
--- a/Contrib/Dialer/Dialer.txt
+++ b/Contrib/Dialer/Dialer.txt
@@ -1,121 +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
-
+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/Contrib/InstallOptions/Changelog.txt b/Contrib/InstallOptions/Changelog.txt
index 27e6952..8df09ca 100755
--- a/Contrib/InstallOptions/Changelog.txt
+++ b/Contrib/InstallOptions/Changelog.txt
@@ -1,144 +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
+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/Contrib/InstallOptions/InstallOptions.nsh b/Contrib/InstallOptions/InstallOptions.nsh
index 660b303..56d47af 100755
--- a/Contrib/InstallOptions/InstallOptions.nsh
+++ b/Contrib/InstallOptions/InstallOptions.nsh
@@ -1,240 +1,240 @@
-/*
-
-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 <NSIS-string>
- ; Call Nsis2Io
- ; Pop <IO-string>
-
- 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 <IO-string>
- ; Call Io2Nsis
- ; Pop <NSIS-string>
-
- 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}"
- !insertmacro INSTALLOPTIONS_WRITE "${FILE}" "Settings" "RTL" "$(^RTL)"
-
- !verbose pop
-
-!macroend
-
-!macro INSTALLOPTIONS_EXTRACT_AS FILE FILENAME
-
- InitPluginsDir
- File "/oname=$PLUGINSDIR\${FILENAME}" "${FILE}"
- !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 /NOUNLOAD "$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___
+/*
+
+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 <NSIS-string>
+ ; Call Nsis2Io
+ ; Pop <IO-string>
+
+ 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 <IO-string>
+ ; Call Io2Nsis
+ ; Pop <NSIS-string>
+
+ 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}"
+ !insertmacro INSTALLOPTIONS_WRITE "${FILE}" "Settings" "RTL" "$(^RTL)"
+
+ !verbose pop
+
+!macroend
+
+!macro INSTALLOPTIONS_EXTRACT_AS FILE FILENAME
+
+ InitPluginsDir
+ File "/oname=$PLUGINSDIR\${FILENAME}" "${FILE}"
+ !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 /NOUNLOAD "$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/Contrib/InstallOptions/Readme.html b/Contrib/InstallOptions/Readme.html
index d4ef80b..d46d8a4 100755
--- a/Contrib/InstallOptions/Readme.html
+++ b/Contrib/InstallOptions/Readme.html
@@ -883,7 +883,7 @@ FunctionEnd
<pre>
Original version Copyright &copy; 2001 Michael Bishop
DLL version 1 Copyright &copy; 2001-2002 Nullsoft, Inc., ORTIM
-DLL version 2 Copyright &copy; 2003-2007 Amir Szekely, Joost Verburg, Dave Laundon
+DLL version 2 Copyright &copy; 2003-2008 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
diff --git a/Contrib/InstallOptions/test.nsi b/Contrib/InstallOptions/test.nsi
index 53afe9b..a1b234e 100755
--- a/Contrib/InstallOptions/test.nsi
+++ b/Contrib/InstallOptions/test.nsi
@@ -1,84 +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 "${NSISDIR}\Plugins\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
+;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 "${NSISDIR}\Plugins\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/Contrib/InstallOptions/testimgs.nsi b/Contrib/InstallOptions/testimgs.nsi
index 1a832e9..8a2faed 100755
--- a/Contrib/InstallOptions/testimgs.nsi
+++ b/Contrib/InstallOptions/testimgs.nsi
@@ -1,59 +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 "${NSISDIR}\Plugins\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
+;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 "${NSISDIR}\Plugins\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/Contrib/InstallOptions/testlink.nsi b/Contrib/InstallOptions/testlink.nsi
index 8b73fc9..edc7ec0 100755
--- a/Contrib/InstallOptions/testlink.nsi
+++ b/Contrib/InstallOptions/testlink.nsi
@@ -1,58 +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 "${NSISDIR}\Plugins\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
-
+;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 "${NSISDIR}\Plugins\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/Contrib/InstallOptions/testnotify.nsi b/Contrib/InstallOptions/testnotify.nsi
index 9d42188..e56061a 100755
--- a/Contrib/InstallOptions/testnotify.nsi
+++ b/Contrib/InstallOptions/testnotify.nsi
@@ -1,133 +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 /NOUNLOAD "$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
+; 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 /NOUNLOAD "$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/Contrib/Language files/Afrikaans.nsh b/Contrib/Language files/Afrikaans.nsh
index 275a4f1..e268652 100755
--- a/Contrib/Language files/Afrikaans.nsh
+++ b/Contrib/Language files/Afrikaans.nsh
@@ -1,121 +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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrywing"
-!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
- !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 "Beweeg die muis oor '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_UNDIRECTORYSPAGE
- ${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
+;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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrywing"
+!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
+ !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 "Beweeg die muis oor '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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Albanian.nsh b/Contrib/Language files/Albanian.nsh
index 12804f2..41747f0 100755
--- a/Contrib/Language files/Albanian.nsh
+++ b/Contrib/Language files/Albanian.nsh
@@ -1,121 +1,121 @@
-;Language: Albanian (1052)
-;Translation Besnik Bleta, besnik@spymac.com
-
-!insertmacro LANGFILE "Albanian" "Albanian"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Mirësevini 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ë zbatimet e tjerë para se të nisni Rregullimin. Kjo bën të mundur përditësim kartelash të rëndësishme sistemi pa u dashur të riniset kompjuteri juaj.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Mirësevini 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 që $(^NameDA) nuk është duke xhiruar.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "Marrëveshje License"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ju lutem shqyrtoni kushtet e licensës përpara instalimit të $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Nëse pranoni kushtet e marrëveshjes, klikoni Pajtohem për të vazhduar. Duhet të pranoni marrëveshjen për të instaluar $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Nëse pranoni kushtet e marrëveshjes, klikoni kutizën më poshtë. Duhet të pranoni marrëveshjen për të instaluar $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Nëse pranoni kushtet e marrëveshjes, përzgjidhni më poshtë mundësinë e parë. Duhet të pranoni marrëveshjen për të instaluar $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Marrëveshje License"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Ju lutem shqyrtoni kushtet e licensës përpara çinstalimit të $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Nëse pranoni kushtet e marrëveshjes, klikoni Pajtohem për të vazhduar. Duhet të pranoni marrëveshjen për të çinstaluar $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Nëse pranoni kushtet e marrëveshjes, klikoni kutizën më poshtë. Duhet të pranoni marrëveshjen për të çinstaluar $(^NameDA). $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Nëse pranoni kushtet e marrëveshjes, përzgjidhni mundësinë e parë më poshtë. Duhet të pranoni marrëveshjen për të çinstaluar $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Shtypni Page Down për të parë pjesën e mbetur të marrëveshjes."
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Përshkrim"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Zgjidhni Përbërësa"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Zgjidhni cilat anë të $(^NameDA) doni të çinstalohen."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Për të parë përshkrimin e një përbërësi vendosni miun përsipër tij."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Për të parë përshkrimin e një përbërësi vendosni miun përsipër tij."
- !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_UNDIRECTORYSPAGE
- ${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 instaloj"
- ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Ju lutem 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 nuk u plotësua me sukses."
-!endif
-
-!ifdef MUI_UNINSTFILESPAGE
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Çinstalim"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Ju lutem 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 nuk plotësua me sukses."
-!endif
-
-!ifdef MUI_FINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Po plotësoj Rregullimin e $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) u instalua në kompjuterin tuaj.$\r$\n$\r$\nKlikoni Përfundo për të mbyllur këtë proces."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Që të mund të plotësohet instalimi i $(^NameDA) kompjuteri juaj duhet të riniset. Doni ta rinisni tani?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Po plotësoj çinstalimin e $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) u çinstalua prej kompjuterit tuaj.$\r$\n$\r$\nKlikoni Përfundo për të mbyllur procesin."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Kompjuteri juaj duhet të riniset që të mund të plotësohet çinstalimi i $(^NameDA). Doni ta rinisni 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ërfundo"
-!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 shkurtprerje $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Përzgjidhni dosjen Menu Start në të cilën do të donit të krijonit shkurtprerjet 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 shkurtprerje"
-!endif
-
-!ifdef MUI_UNCONFIRMPAGE
- ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Çinstalo $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Hiqni $(^NameDA) prej kompjuterit tuaj."
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "Jeni i sigurtë që doni të lini Rregullimin e $(^Name)?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Jeni i sigurtë që doni të lini Çinstalimin e $(^Name)?"
-!endif
+;Language: Albanian (1052)
+;Translation Besnik Bleta, besnik@spymac.com
+
+!insertmacro LANGFILE "Albanian" "Albanian"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Mirësevini 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ë zbatimet e tjerë para se të nisni Rregullimin. Kjo bën të mundur përditësim kartelash të rëndësishme sistemi pa u dashur të riniset kompjuteri juaj.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Mirësevini 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 që $(^NameDA) nuk është duke xhiruar.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "Marrëveshje License"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Ju lutem shqyrtoni kushtet e licensës përpara instalimit të $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Nëse pranoni kushtet e marrëveshjes, klikoni Pajtohem për të vazhduar. Duhet të pranoni marrëveshjen për të instaluar $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Nëse pranoni kushtet e marrëveshjes, klikoni kutizën më poshtë. Duhet të pranoni marrëveshjen për të instaluar $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Nëse pranoni kushtet e marrëveshjes, përzgjidhni më poshtë mundësinë e parë. Duhet të pranoni marrëveshjen për të instaluar $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Marrëveshje License"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Ju lutem shqyrtoni kushtet e licensës përpara çinstalimit të $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Nëse pranoni kushtet e marrëveshjes, klikoni Pajtohem për të vazhduar. Duhet të pranoni marrëveshjen për të çinstaluar $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Nëse pranoni kushtet e marrëveshjes, klikoni kutizën më poshtë. Duhet të pranoni marrëveshjen për të çinstaluar $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Nëse pranoni kushtet e marrëveshjes, përzgjidhni mundësinë e parë më poshtë. Duhet të pranoni marrëveshjen për të çinstaluar $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Shtypni Page Down për të parë pjesën e mbetur të marrëveshjes."
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Përshkrim"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Zgjidhni Përbërësa"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Zgjidhni cilat anë të $(^NameDA) doni të çinstalohen."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Për të parë përshkrimin e një përbërësi vendosni miun përsipër tij."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Për të parë përshkrimin e një përbërësi vendosni miun përsipër tij."
+ !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_UNDIRECTORYSPAGE
+ ${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 instaloj"
+ ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Ju lutem 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 nuk u plotësua me sukses."
+!endif
+
+!ifdef MUI_UNINSTFILESPAGE
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Çinstalim"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Ju lutem 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 nuk plotësua me sukses."
+!endif
+
+!ifdef MUI_FINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Po plotësoj Rregullimin e $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) u instalua në kompjuterin tuaj.$\r$\n$\r$\nKlikoni Përfundo për të mbyllur këtë proces."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Që të mund të plotësohet instalimi i $(^NameDA) kompjuteri juaj duhet të riniset. Doni ta rinisni tani?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Po plotësoj çinstalimin e $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) u çinstalua prej kompjuterit tuaj.$\r$\n$\r$\nKlikoni Përfundo për të mbyllur procesin."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Kompjuteri juaj duhet të riniset që të mund të plotësohet çinstalimi i $(^NameDA). Doni ta rinisni 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ërfundo"
+!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 shkurtprerje $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Përzgjidhni dosjen Menu Start në të cilën do të donit të krijonit shkurtprerjet 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 shkurtprerje"
+!endif
+
+!ifdef MUI_UNCONFIRMPAGE
+ ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Çinstalo $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Hiqni $(^NameDA) prej kompjuterit tuaj."
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "Jeni i sigurtë që doni të lini Rregullimin e $(^Name)?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Jeni i sigurtë që doni të lini Çinstalimin e $(^Name)?"
+!endif
diff --git a/Contrib/Language files/Arabic.nsh b/Contrib/Language files/Arabic.nsh
index afef641..d306e6c 100755
--- a/Contrib/Language files/Arabic.nsh
+++ b/Contrib/Language files/Arabic.nsh
@@ -1,122 +1,122 @@
-;Language: Arabic (1025)
-;Translation by asdfuae@msn.com
-;updated by Rami Kattan
-
-!insertmacro LANGFILE "Arabic" "Arabic"
-
-!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) ÇáãÑÇÏ ÊäÕíÈåÇ."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÇáæÕÝ"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÅÎÊÑ ÇáãßæäÇÊ"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ÅÎÊÑ ãíÒÇÊ $(^NameDA) ÇáãÑÇÏ ÅÒÇáÊåÇ."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Arabic (1025)
+;Translation by asdfuae@msn.com
+;updated by Rami Kattan
+
+!insertmacro LANGFILE "Arabic" "Arabic"
+
+!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) ÇáãÑÇÏ ÊäÕíÈåÇ."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÇáæÕÝ"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÅÎÊÑ ÇáãßæäÇÊ"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ÅÎÊÑ ãíÒÇÊ $(^NameDA) ÇáãÑÇÏ ÅÒÇáÊåÇ."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Basque.nsh b/Contrib/Language files/Basque.nsh
index ebc9ef4..78bd45d 100755
--- a/Contrib/Language files/Basque.nsh
+++ b/Contrib/Language files/Basque.nsh
@@ -1,121 +1,121 @@
-;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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Azalpena"
-!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
- !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 "Jarri sagua osagai baten gainean dagokion 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_UNDIRECTORYSPAGE
- ${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
+;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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Azalpena"
+!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
+ !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 "Jarri sagua osagai baten gainean dagokion 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/Belarusian.nsh b/Contrib/Language files/Belarusian.nsh
index 68664b4..3e6be45 100755
--- a/Contrib/Language files/Belarusian.nsh
+++ b/Contrib/Language files/Belarusian.nsh
@@ -1,121 +1,121 @@
-;Language: Belarusian (1059)
-;Translated by Sitnikov Vjacheslav [ glory_man@tut.by ]
-
-!insertmacro LANGFILE "Belarusian" "Byelorussian"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Âàñ âiòàå ìàéñòàð ¢ñòàíî¢ê³ $(^NameDA)"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ãýòàÿ ïðàãðàìà ¢ñòàëþå $(^NameDA) íà Âàø êàìïóòàð.$\r$\n$\r$\nÏåðàä ïà÷àòêàì óñòàíî¢êi ïðàïàíóåì çà÷ûí³öü óñå ïðàãðàìû, ÿê³ÿ âûêîíâàþööà ¢ ñàïðà¢äíû ìîìàíò. Ãýòà äàïàìîæà ïðàãðàìå ¢ñòàíî¢ê³ àáíàâ³öü ñ³ñòýìíûÿ ôàéëû áåç ïåðàçàãðóçê³ êàìïóòàðà.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Âàñ âiòàå ìàéñòàð âûäàëåííÿ $(^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 "Êàë³ ëàñêà, ïðà÷ûòàéöå ¢ìîâû ˳öýíç³éíàãà ïàãàäíåííÿ ïåðàä ïà÷àòêàì óñòàíî¢êi $(^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), ÿê³ÿ Âû æàäàåöå ¢ñòàëÿâàöü."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Àï³ñàííå"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Êàìïàíåíòû ïðàãðàìû"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Âûçíà÷öå êàìïàíåíòû $(^NameDA), ÿê³ÿ Âû æàäàåöå âûäàë³öü."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Belarusian (1059)
+;Translated by Sitnikov Vjacheslav [ glory_man@tut.by ]
+
+!insertmacro LANGFILE "Belarusian" "Byelorussian"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Âàñ âiòàå ìàéñòàð ¢ñòàíî¢ê³ $(^NameDA)"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ãýòàÿ ïðàãðàìà ¢ñòàëþå $(^NameDA) íà Âàø êàìïóòàð.$\r$\n$\r$\nÏåðàä ïà÷àòêàì óñòàíî¢êi ïðàïàíóåì çà÷ûí³öü óñå ïðàãðàìû, ÿê³ÿ âûêîíâàþööà ¢ ñàïðà¢äíû ìîìàíò. Ãýòà äàïàìîæà ïðàãðàìå ¢ñòàíî¢ê³ àáíàâ³öü ñ³ñòýìíûÿ ôàéëû áåç ïåðàçàãðóçê³ êàìïóòàðà.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Âàñ âiòàå ìàéñòàð âûäàëåííÿ $(^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 "Êàë³ ëàñêà, ïðà÷ûòàéöå ¢ìîâû ˳öýíç³éíàãà ïàãàäíåííÿ ïåðàä ïà÷àòêàì óñòàíî¢êi $(^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), ÿê³ÿ Âû æàäàåöå ¢ñòàëÿâàöü."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Àï³ñàííå"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Êàìïàíåíòû ïðàãðàìû"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Âûçíà÷öå êàìïàíåíòû $(^NameDA), ÿê³ÿ Âû æàäàåöå âûäàë³öü."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/Bosnian.nsh b/Contrib/Language files/Bosnian.nsh
index dacfcf7..0502b7e 100755
--- a/Contrib/Language files/Bosnian.nsh
+++ b/Contrib/Language files/Bosnian.nsh
@@ -1,121 +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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
-!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
- !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 "Postavite kursor od miša iznad komponente da biste vidjeli 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_UNDIRECTORYSPAGE
- ${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
+;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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
+!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
+ !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 "Postavite kursor od miša iznad komponente da biste vidjeli 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Breton.nsh b/Contrib/Language files/Breton.nsh
index 79d3f81..3d57272 100755
--- a/Contrib/Language files/Breton.nsh
+++ b/Contrib/Language files/Breton.nsh
@@ -1,121 +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ñ."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Deskrivadenn"
-!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
- !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 "Lakait ho logodenn a-zioc'h 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_UNDIRECTORYSPAGE
- ${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
+;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ñ."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Deskrivadenn"
+!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
+ !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 "Lakait ho logodenn a-zioc'h 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Bulgarian.nsh b/Contrib/Language files/Bulgarian.nsh
index 744197c..28f5707 100755
--- a/Contrib/Language files/Bulgarian.nsh
+++ b/Contrib/Language files/Bulgarian.nsh
@@ -1,124 +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" "Bulgarian"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Äîáðå äîøëè â Ñúâåòíèêà$\r$\nçà èíñòàëèðàíå íà$\r$\n$(^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 "Äîáðå äîøëè â Ñúâåòíèêà$\r$\nçà èçòðèâàíå íà$\r$\n$(^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) èñêàòå äà èíñòàëèðàòå."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñàíèå"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Èçáîð íà êîìïîíåíòè"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Èçáåðåòå êîè êîìïîíåíòè íà $(^NameDA) èñêàòå äà èçòðèåòå."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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$Íàòèñíåòå áóòîíà $\"Êðàé$\", çà äà çàòâîðèòå Ñúâåòíèêà."
- ${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
+;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" "Bulgarian"
+
+!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) èñêàòå äà èíñòàëèðàòå."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñàíèå"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Èçáîð íà êîìïîíåíòè"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Èçáåðåòå êîè êîìïîíåíòè íà $(^NameDA) èñêàòå äà èçòðèåòå."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Catalan.nsh b/Contrib/Language files/Catalan.nsh
index 2a07114..51360cc 100755
--- a/Contrib/Language files/Catalan.nsh
+++ b/Contrib/Language files/Catalan.nsh
@@ -1,121 +1,121 @@
-;Language: Catalan (1027)
-;By falanko, corrections by Toni Hermoso Pulido
-
-!insertmacro LANGFILE "Catalan" "Català"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripció"
-!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
- !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
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Situeu el ratolí damunt d'un component per a veure'n la descripció."
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Catalan (1027)
+;By falanko, corrections by Toni Hermoso Pulido
+
+!insertmacro LANGFILE "Catalan" "Català"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripció"
+!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
+ !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
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Situeu el ratolí damunt d'un component per a veure'n la descripció."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Croatian.nsh b/Contrib/Language files/Croatian.nsh
index 206376a..e24ea46 100755
--- a/Contrib/Language files/Croatian.nsh
+++ b/Contrib/Language files/Croatian.nsh
@@ -1,121 +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 "Licenèni ugovor"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Molim proèitajte licencu prije instalacije programa $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ukoliko prihvaæate uvjete licence, odaberite 'Prihvaæam' za nastavak. Morate prihvatiti licencu za instalaciju programa $(^NameDA)."
- ${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 "Licenèni ugovor"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Molim proèitajte licencu prije uklanjanja programa $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ukoliko prihvaæate uvjete licence, odaberite 'Prihvaæam' za nastavak. Morate prihvatiti licencu za uklanjanje programa $(^NameDA)."
- ${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 "'Page Down' za 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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
-!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
- !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 "Postavite pokazivaè iznad komponente 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_UNDIRECTORYSPAGE
- ${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 "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 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"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Molim prièekajte na 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šenje instalacije programa $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) je instaliran na Vaše raèunalo.$\r$\n$\r$\nOdaberite 'Kraj' za završetak."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Vaše raèunalo treba ponovno pokrenuti za dovršenje instalacije programa $(^NameDA). Ž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) je uklonjen s Vašeg raèunala.$\r$\n$\r$\nOdaberite 'Kraj' za zatvaranje ovog èarobnjaka."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Vaše raèunalo treba ponovno pokrenuti za dovršenje postupka uklanjanja programa $(^NameDA). Ž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 "Prikaži &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 "Odaberite ime za programsku mapu unutar Start menija."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Program æe pripadati odabranoj programskoj mapi u Start meniju. 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) æe biti 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
+;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 "Licenèni ugovor"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Molim proèitajte licencu prije instalacije programa $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Ukoliko prihvaæate uvjete licence, odaberite 'Prihvaæam' za nastavak. Morate prihvatiti licencu za instalaciju programa $(^NameDA)."
+ ${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 "Licenèni ugovor"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Molim proèitajte licencu prije uklanjanja programa $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Ukoliko prihvaæate uvjete licence, odaberite 'Prihvaæam' za nastavak. Morate prihvatiti licencu za uklanjanje programa $(^NameDA)."
+ ${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 "'Page Down' za 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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
+!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
+ !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 "Postavite pokazivaè iznad komponente 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_UNDIRECTORYSPAGE
+ ${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 "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 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"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Molim prièekajte na 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šenje instalacije programa $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) je instaliran na Vaše raèunalo.$\r$\n$\r$\nOdaberite 'Kraj' za završetak."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Vaše raèunalo treba ponovno pokrenuti za dovršenje instalacije programa $(^NameDA). Ž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) je uklonjen s Vašeg raèunala.$\r$\n$\r$\nOdaberite 'Kraj' za zatvaranje ovog èarobnjaka."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Vaše raèunalo treba ponovno pokrenuti za dovršenje postupka uklanjanja programa $(^NameDA). Ž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 "Prikaži &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 "Odaberite ime za programsku mapu unutar Start menija."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Program æe pripadati odabranoj programskoj mapi u Start meniju. 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) æe biti 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/Contrib/Language files/Czech.nsh b/Contrib/Language files/Czech.nsh
index 67be620..5960861 100755
--- a/Contrib/Language files/Czech.nsh
+++ b/Contrib/Language files/Czech.nsh
@@ -1,122 +1,122 @@
-;Language: Czech (1029)
-;By SELiCE (ls@selice.cz - http://ls.selice.cz)
-;Corrected by Ondøej Vaniš - http://www.vanis.cz/ondra
-
-!insertmacro LANGFILE "Czech" "Cesky"
-
-!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í $(^NameDA).$\r$\n$\r$\nPøed zaèátkem instalace je doporuèeno zavøít všechny ostatní aplikace. Toto umožní aktualizovat dùležité systémové soubory bez restartování Vašeho poèítaèe.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Vítejte v $(^NameDA) odinstalaèním prùvodci"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tento prùvodce Vás provede odinstalací $(^NameDA).$\r$\n$\r$\nPøed zaèátkem odinstalace, se pøesvìdète, že $(^NameDA) není spuštìn.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licenèní ujednání"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Pøed instalací programu $(^NameDA) si prosím prostudujte licenèní podmínky."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte 'Souhlasím' pro pokraèování. Pro instalaci programu $(^NameDA) je nutné souhlasit s licenèním ujednáním."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jestliže souhlasíte se všemi podmínkami ujednání, zaškrtnìte níže uvedenou volbu. Pro instalaci programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte první z možností uvedených níže. Pro instalaci programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licenèní ujednání"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Pøed odinstalováním programu $(^NameDA) si prosím prostudujte licenèní podmínky."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte 'Souhlasím' pro pokraèování. Pro odinstalování programu $(^NameDA) je nutné souhlasit s licenèním ujednáním."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jestliže souhlasíte se všemi podmínkami ujednání, zaškrtnìte níže uvedenou volbu. Pro odinstalování programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte první z níže uvedených možností. Pro odinstalování programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Stisknutím klávesy Page Down posunete text licenèního ujednání."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Volba souèástí"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Zvolte souèásti programu $(^NameDA), které chcete nainstalovat."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Popis"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Volba souèástí"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Zvolte souèásti programu $(^NameDA), které chcete odinstalovat."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pøi pohybu myší nad instalátorem programu se zobrazí její popis."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pøi pohybu myší nad instalátorem programu se zobrazí její popis."
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Zvolte umístìní instalace"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Zvolte složku, do které bude program $(^NameDA) nainstalován."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Zvolte umístìní odinstalace"
- ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Zvolte složku, ze které bude program $(^NameDA) odinstalován."
-!endif
-
-!ifdef MUI_INSTFILESPAGE
- ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalace"
- ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vyèkejte, prosím, na dokonèení instalace programu $(^NameDA)."
- ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalace dokonèena"
- ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalace probìhla v poøádku."
- ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalace pøerušena"
- ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalace nebyla dokonèena."
-!endif
-
-!ifdef MUI_UNINSTFILESPAGE
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Odinstalace"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vyèkejte, prosím, na dokonèení odinstalace programu $(^NameDA)."
- ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Odinstalace dokonèena"
- ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Odinstalace probìhla v poøádku."
- ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Odinstalace pøerušena"
- ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Odinstalace nebyla dokonèena."
-!endif
-
-!ifdef MUI_FINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Dokonèení prùvodce programu $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) byl nainstalován na Váš poèítaè.$\r$\n$\r$\nKliknìte 'Dokonèit' pro ukonèení prùvodce."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Pro dokonèení instalace programu $(^NameDA) je nutno restartovat poèítaè. Chcete restatovat nyní?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Dokonèuji odinstalaèního prùvodce $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) byl odinstalován z Vašeho poèítaèe.$\r$\n$\r$\nKliknìte na 'Dokonèit' pro ukonèení tohoto prùvodce."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Pro dokonèení odinstalace $(^NameDA) musí být Váš poèítaè restartován. Chcete restartovat nyní?"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Restartovat nyní"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Restartovat ruènì pozdìji"
- ${LangFileString} MUI_TEXT_FINISH_RUN "&Spustit program $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Zobrazit Èti-mne"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "&Dokonèit"
-!endif
-
-!ifdef MUI_STARTMENUPAGE
- ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Zvolte složku v Nabídce Start"
- ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Zvolte složku v Nabídce Start pro zástupce programu $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Zvolte složku v Nabídce Start, ve které chcete vytvoøit zástupce programu. Mùžete také zadat nové jméno pro vytvoøení nové složky."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nevytváøet zástupce"
-!endif
-
-!ifdef MUI_UNCONFIRMPAGE
- ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Odinstalovat program $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Odebrat program $(^NameDA) z Vašeho poèítaèe."
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "Opravdu chcete ukonèit instalaci programu $(^Name)?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Skuteènì chcete ukonèit odinstalaci $(^Name)?"
-!endif
+;Language: Czech (1029)
+;By SELiCE (ls@selice.cz - http://ls.selice.cz)
+;Corrected by Ondøej Vaniš - http://www.vanis.cz/ondra
+
+!insertmacro LANGFILE "Czech" "Cesky"
+
+!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í $(^NameDA).$\r$\n$\r$\nPøed zaèátkem instalace je doporuèeno zavøít všechny ostatní aplikace. Toto umožní aktualizovat dùležité systémové soubory bez restartování Vašeho poèítaèe.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Vítejte v $(^NameDA) odinstalaèním prùvodci"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tento prùvodce Vás provede odinstalací $(^NameDA).$\r$\n$\r$\nPøed zaèátkem odinstalace, se pøesvìdète, že $(^NameDA) není spuštìn.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licenèní ujednání"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Pøed instalací programu $(^NameDA) si prosím prostudujte licenèní podmínky."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte 'Souhlasím' pro pokraèování. Pro instalaci programu $(^NameDA) je nutné souhlasit s licenèním ujednáním."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jestliže souhlasíte se všemi podmínkami ujednání, zaškrtnìte níže uvedenou volbu. Pro instalaci programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte první z možností uvedených níže. Pro instalaci programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licenèní ujednání"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Pøed odinstalováním programu $(^NameDA) si prosím prostudujte licenèní podmínky."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte 'Souhlasím' pro pokraèování. Pro odinstalování programu $(^NameDA) je nutné souhlasit s licenèním ujednáním."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jestliže souhlasíte se všemi podmínkami ujednání, zaškrtnìte níže uvedenou volbu. Pro odinstalování programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jestliže souhlasíte se všemi podmínkami ujednání, zvolte první z níže uvedených možností. Pro odinstalování programu $(^NameDA) je nutné souhlasit s licenèním ujednáním. $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Stisknutím klávesy Page Down posunete text licenèního ujednání."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Volba souèástí"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Zvolte souèásti programu $(^NameDA), které chcete nainstalovat."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Popis"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Volba souèástí"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Zvolte souèásti programu $(^NameDA), které chcete odinstalovat."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pøi pohybu myší nad instalátorem programu se zobrazí její popis."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Pøi pohybu myší nad instalátorem programu se zobrazí její popis."
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Zvolte umístìní instalace"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Zvolte složku, do které bude program $(^NameDA) nainstalován."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Zvolte umístìní odinstalace"
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Zvolte složku, ze které bude program $(^NameDA) odinstalován."
+!endif
+
+!ifdef MUI_INSTFILESPAGE
+ ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Instalace"
+ ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Vyèkejte, prosím, na dokonèení instalace programu $(^NameDA)."
+ ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalace dokonèena"
+ ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Instalace probìhla v poøádku."
+ ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalace pøerušena"
+ ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Instalace nebyla dokonèena."
+!endif
+
+!ifdef MUI_UNINSTFILESPAGE
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Odinstalace"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Vyèkejte, prosím, na dokonèení odinstalace programu $(^NameDA)."
+ ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Odinstalace dokonèena"
+ ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Odinstalace probìhla v poøádku."
+ ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Odinstalace pøerušena"
+ ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Odinstalace nebyla dokonèena."
+!endif
+
+!ifdef MUI_FINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Dokonèení prùvodce programu $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "Program $(^NameDA) byl nainstalován na Váš poèítaè.$\r$\n$\r$\nKliknìte 'Dokonèit' pro ukonèení prùvodce."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Pro dokonèení instalace programu $(^NameDA) je nutno restartovat poèítaè. Chcete restatovat nyní?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Dokonèuji odinstalaèního prùvodce $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) byl odinstalován z Vašeho poèítaèe.$\r$\n$\r$\nKliknìte na 'Dokonèit' pro ukonèení tohoto prùvodce."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Pro dokonèení odinstalace $(^NameDA) musí být Váš poèítaè restartován. Chcete restartovat nyní?"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Restartovat nyní"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Restartovat ruènì pozdìji"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "&Spustit program $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Zobrazit Èti-mne"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "&Dokonèit"
+!endif
+
+!ifdef MUI_STARTMENUPAGE
+ ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Zvolte složku v Nabídce Start"
+ ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Zvolte složku v Nabídce Start pro zástupce programu $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Zvolte složku v Nabídce Start, ve které chcete vytvoøit zástupce programu. Mùžete také zadat nové jméno pro vytvoøení nové složky."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Nevytváøet zástupce"
+!endif
+
+!ifdef MUI_UNCONFIRMPAGE
+ ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Odinstalovat program $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Odebrat program $(^NameDA) z Vašeho poèítaèe."
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "Opravdu chcete ukonèit instalaci programu $(^Name)?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Skuteènì chcete ukonèit odinstalaci $(^Name)?"
+!endif
diff --git a/Contrib/Language files/Danish.nsh b/Contrib/Language files/Danish.nsh
index 1ce97e8..77e236b 100755
--- a/Contrib/Language files/Danish.nsh
+++ b/Contrib/Language files/Danish.nsh
@@ -1,121 +1,121 @@
-;Language: Danish (1030)
-;By Claus Futtrup
-
-!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 vil installere $(^NameDA) på din computer.$\r$\n$\r$\nDet anbefales, at du lukker alle kørende programmer inden start af installationsguiden. Dette vil tillade guiden at opdatere de nødvendige systemfiler uden at skulle genstarte computeren.$\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 afinstallationsguide vil hjælpe 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 du installerer $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Tryk 'Jeg accepterer' hvis du ønsker at accepterer alle vilkårene i aftalen og forsætte. Du skal acceptere vilkårene for at installere $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Hvis du accepterer alle vilkårene i aftalen, skal du markere afkrydsningsfeltet nedenfor. Du skal acceptere vilkårene for at installere $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du accepterer alle vilkårene i aftalen, skal du vælge den første mulighed nedenfor. Du skal acceptere vilkårene for at installere $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licensaftale"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Læs venligst licensvilkårene før afinstalleringen af $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Hvis du accepterer vilkårene for aftalen, skal du trykke '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 for aftalen, skal du markere afkrydsningsfeltet nedenfor. Du skal acceptere aftalen for at afinstallere $(^NameDA). $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du accepterer vilkårene for aftalen, skal du vælge den første mulighed nedenfor. Du skal acceptere aftalen for at afinstallere $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tryk 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 features af $(^NameDA) du vil installere."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivelse"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Vælg komponenter"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Vælg hvilke features af $(^NameDA) du vil afinstallere."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Placer musemarkøren over en komponent for at se beskrivelsen af komponenten."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Placer musemarkøren over en komponent for at se beskrivelsen af komponenten."
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Vælg installationsmappe"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Vælg hvilken mappe du vil installere $(^NameDA) i."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${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 med succes."
- ${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 "Afinstallationen er færdig"
- ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Afinstallationen blev afsluttet med succes."
- ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Afinstallationen er blevet afbrudt"
- ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Afinstallationen blev ikke genmmenført."
-!endif
-
-!ifdef MUI_FINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Afslutter $(^NameDA) installationsguiden"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) er blevet installeret på din computer.$\r$\n$\r$\nTryk 'Afslut' for at lukke installationsguiden."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Din computer skal genstartes før installationen af $(^NameDA) er afsluttet. Vil du genstarte nu?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Afslutter $(^NameDA) afinstallationsguiden"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) er blevet afinstalleret fra din computer.$\r$\n$\r$\nTryk 'Afslut' for at lukke denne guide."
- ${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 andet tidspunkt"
- ${LangFileString} MUI_TEXT_FINISH_RUN "&Start $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Vis vigtig information"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "&Afslut"
-!endif
-
-!ifdef MUI_STARTMENUPAGE
- ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Vælg Start Menu mappe"
- ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Vælg en Start Menu mappe til programmets genveje."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vælg Start Menu mappen hvor du vil lave 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 $(^Name) installationen?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Er du sikker på at du vil afbryde $(^Name) afinstallationen?"
-!endif
+;Language: Danish (1030)
+;By Claus Futtrup
+
+!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 vil installere $(^NameDA) på din computer.$\r$\n$\r$\nDet anbefales, at du lukker alle kørende programmer inden start af installationsguiden. Dette vil tillade guiden at opdatere de nødvendige systemfiler uden at skulle genstarte computeren.$\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 afinstallationsguide vil hjælpe 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 du installerer $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Tryk 'Jeg accepterer' hvis du ønsker at accepterer alle vilkårene i aftalen og forsætte. Du skal acceptere vilkårene for at installere $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Hvis du accepterer alle vilkårene i aftalen, skal du markere afkrydsningsfeltet nedenfor. Du skal acceptere vilkårene for at installere $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du accepterer alle vilkårene i aftalen, skal du vælge den første mulighed nedenfor. Du skal acceptere vilkårene for at installere $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licensaftale"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Læs venligst licensvilkårene før afinstalleringen af $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Hvis du accepterer vilkårene for aftalen, skal du trykke '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 for aftalen, skal du markere afkrydsningsfeltet nedenfor. Du skal acceptere aftalen for at afinstallere $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Hvis du accepterer vilkårene for aftalen, skal du vælge den første mulighed nedenfor. Du skal acceptere aftalen for at afinstallere $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tryk 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 features af $(^NameDA) du vil installere."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivelse"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Vælg komponenter"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Vælg hvilke features af $(^NameDA) du vil afinstallere."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Placer musemarkøren over en komponent for at se beskrivelsen af komponenten."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Placer musemarkøren over en komponent for at se beskrivelsen af komponenten."
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Vælg installationsmappe"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Vælg hvilken mappe du vil installere $(^NameDA) i."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${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 med succes."
+ ${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 "Afinstallationen er færdig"
+ ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Afinstallationen blev afsluttet med succes."
+ ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Afinstallationen er blevet afbrudt"
+ ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Afinstallationen blev ikke genmmenført."
+!endif
+
+!ifdef MUI_FINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Afslutter $(^NameDA) installationsguiden"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) er blevet installeret på din computer.$\r$\n$\r$\nTryk 'Afslut' for at lukke installationsguiden."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Din computer skal genstartes før installationen af $(^NameDA) er afsluttet. Vil du genstarte nu?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Afslutter $(^NameDA) afinstallationsguiden"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) er blevet afinstalleret fra din computer.$\r$\n$\r$\nTryk 'Afslut' for at lukke denne guide."
+ ${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 andet tidspunkt"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "&Start $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Vis vigtig information"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "&Afslut"
+!endif
+
+!ifdef MUI_STARTMENUPAGE
+ ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Vælg Start Menu mappe"
+ ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Vælg en Start Menu mappe til programmets genveje."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vælg Start Menu mappen hvor du vil lave 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 $(^Name) installationen?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Er du sikker på at du vil afbryde $(^Name) afinstallationen?"
+!endif
diff --git a/Contrib/Language files/Dutch.nsh b/Contrib/Language files/Dutch.nsh
index d9c38ed..d405e33 100755
--- a/Contrib/Language files/Dutch.nsh
+++ b/Contrib/Language files/Dutch.nsh
@@ -1,121 +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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschrijving"
-!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
- !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 "Beweeg uw muis over 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_UNDIRECTORYSPAGE
- ${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
+;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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschrijving"
+!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
+ !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 "Beweeg uw muis over 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/English.nsh b/Contrib/Language files/English.nsh
index 36285a1..a20b0d9 100755
--- a/Contrib/Language files/English.nsh
+++ b/Contrib/Language files/English.nsh
@@ -1,121 +1,129 @@
-;Language: English (1033)
-;By Joost Verburg
-
-!insertmacro LANGFILE "English" "English"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Welcome to the $(^NameDA) Setup Wizard"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "This wizard 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 the $(^NameDA) Uninstall Wizard"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "This wizard 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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description"
-!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
- !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 "Position your mouse over 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_UNDIRECTORYSPAGE
- ${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 the $(^NameDA) Setup Wizard"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) has been installed on your computer.$\r$\n$\r$\nClick Finish to close this wizard."
- ${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 the $(^NameDA) Uninstall Wizard"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) has been uninstalled from your computer.$\r$\n$\r$\nClick Finish to close this wizard."
- ${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
+;Language: English (1033)
+;By Joost Verburg
+
+!insertmacro LANGFILE "English" "English"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Welcome to the $(^NameDA) Setup Wizard"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "This wizard 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 the $(^NameDA) Uninstall Wizard"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "This wizard 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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description"
+!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
+ !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 "Position your mouse over 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_UNDIRECTORYSPAGE
+ ${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 the $(^NameDA) Setup Wizard"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) has been installed on your computer.$\r$\n$\r$\nClick Finish to close this wizard."
+ ${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 the $(^NameDA) Uninstall Wizard"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) has been uninstalled from your computer.$\r$\n$\r$\nClick Finish to close this wizard."
+ ${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) for yourself only 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/Contrib/Language files/Estonian.nsh b/Contrib/Language files/Estonian.nsh
index c582b87..2174665 100755
--- a/Contrib/Language files/Estonian.nsh
+++ b/Contrib/Language files/Estonian.nsh
@@ -1,121 +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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Kirjeldus"
-!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
- !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 "Nihuta hiir komponendile, 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_UNDIRECTORYSPAGE
- ${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
+;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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Kirjeldus"
+!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
+ !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 "Nihuta hiir komponendile, 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Farsi.nsh b/Contrib/Language files/Farsi.nsh
index 4c3e3aa..6ddaed7 100755
--- a/Contrib/Language files/Farsi.nsh
+++ b/Contrib/Language files/Farsi.nsh
@@ -1,121 +1,121 @@
-;Language: Farsi (1065)
-;By FzerorubigD - FzerorubigD@gmail.com - Thanx to all people help me in forum.persiantools.com
-
-!insertmacro LANGFILE "Farsi" "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) ßå ãíÎæÇåíÏ äÕÈ ÔæäÏ ÑÇ ÇäÊÎÇÈ ßäíÏ."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÊæÖíÍÇÊ"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÇäÊÎÇÈ ÇÌÒÇí ÈÑäÇãå"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ÇÌÒÇíí ÇÒ $(^NameDA) ÑÇ ßå ãíÎæÇåíÏ ÍÐÝ ßäíÏ ÇäÊÎÇÈ ßäíÏ."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Farsi (1065)
+;By FzerorubigD - FzerorubigD@gmail.com - Thanx to all people help me in forum.persiantools.com
+
+!insertmacro LANGFILE "Farsi" "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) ßå ãíÎæÇåíÏ äÕÈ ÔæäÏ ÑÇ ÇäÊÎÇÈ ßäíÏ."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÊæÖíÍÇÊ"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÇäÊÎÇÈ ÇÌÒÇí ÈÑäÇãå"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ÇÌÒÇíí ÇÒ $(^NameDA) ÑÇ ßå ãíÎæÇåíÏ ÍÐÝ ßäíÏ ÇäÊÎÇÈ ßäíÏ."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Finnish.nsh b/Contrib/Language files/Finnish.nsh
index 0f1c449..69e03ec 100755
--- a/Contrib/Language files/Finnish.nsh
+++ b/Contrib/Language files/Finnish.nsh
@@ -1,123 +1,123 @@
-;Compatible with Modern UI 1.86
-;Language: Finnish (1035)
-;By Eclipser (Jonne Lehtinen) <Eclipser at pilvikaupunki dot com>
-;Updated by Puuhis (puuhis@puuhis.net)
-
-!insertmacro LANGFILE "Finnish" "Suomi"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Tervetuloa ohjelman $(^NameDA) asennukseen"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Tämä avustaja ohjaa sinut ohjelman $(^NameDA) asennuksen läpi.$\r$\n$\r$\nOn suositeltavaa sulkea kaikki muut ohjelmat ennen asennuksen aloittamista, jotta asennus voisi päivittää tiettyjä 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) -ohjelmiston poisto-ohjelmaan"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tämä velho auttaa sinut läpi $(^NameDA) -ohjelmiston poistamisen.$\r$\n$\r$\nEnnen poisto-ohjelman aloitusta, varmista ettei $(^NameDA) ole käynnissä.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisenssisopimus"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Lue lisenssiehdot tarkasti ennen ohjelman $(^NameDA) asentamista."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jos hyväksyt ehdot, valitse Hyväksyn jatkaaksesi. Sinun pitää hyväksyä ehdot asentaaksesi ohjelman $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jos hyväksyt ehdot, laita rasti alla olevaan ruutuun. Sinun pitää hyväksyä ehdot asentaaksesi ohjelman $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jos hyväksyt ehdot, valitse ensimmäinen vaihtoehto alapuolelta. Sinun pitää hyväksyä ehdot asentaaksesi ohjelman $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisenssisopimus"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Lue huolellisesti lisenssiehdot ennen $(^NameDA) -ohjelmiston poistoa."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jos hyväksyt säännöt ja ehdot, paina Hyväksyn -nappia jatkaakseni. Sinun täytyy hyväksyä ehdot poistaaksesi $(^NameDA) -ohjelmiston."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jos hyväksyt ehdot, klikkaa valintaruutua alhaalla. Sinun täytyy hyväksyä ehdot poistaaksesi $(^NameDA) -ohjelmiston. $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jos hyväksyt ehdot, valitse ensimmäinen vaihtoehto alhaalta. Sinun täytyy hyväksyä ehdot poistaaksesi $(^NameDA) -ohjelmiston. $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Paina Page Down 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)."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Selitys"
-!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
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Siirrä hiiri komponentin nimen päälle saadaksesi sen selityksen."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Siirrä hiiri komponentin nimen päälle saadaksesi sen selityksen."
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Valitse asennuskohde"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Valitse hakemisto, johon haluat asentaa ohjelman $(^NameDA)."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Valitse paikka mistä poistetaan"
- ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Valitse kansio mistä $(^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 valmistui onnistuneesti."
- ${LangFileString} MUI_TEXT_ABORT_TITLE "Asennus keskeytettiin"
- ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Asennus ei onnistunut."
-!endif
-
-!ifdef MUI_UNINSTFILESPAGE
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Poistetaan"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Odota... Ohjelmaa $(^NameDA) poistetaan."
- ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Poisto valmis"
- ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Ohjelma poistettiin onnistuneesti."
- ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Poisto lopetettu"
- ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Ohjelmaa poisto epäonnistuneesti."
-!endif
-
-!ifdef MUI_FINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Viimeistellään ohjelman $(^NameDA) asennusta"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) on asennettu koneellesi.$\r$\n$\r$\nValitse Valmis sulkeaksesi avustajan."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Tietokoneesi pitää käynnistää uudelleen jotta ohjelman $(^NameDA) asennus saataisiin valmiiksi. Haluatko käynnistää koneen uudelleen nyt?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Viimeistellään $(^NameDA) -ohjelmiston poistamista"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) on poistettu koneeltasi.$\r$\n$\r$\nPaina Lopeta -nappia sulkeaksesi tämän velhon."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Jotta $(^NameDA) -ohjelmiston poistaminen olisi valmis, tulee tietokone käynnistää uudelleen. Haluatko uudelleenkäynnistää nyt?"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Käynnistä uudelleen nyt"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Käynnistän koneen myöhemmin uudelleen"
- ${LangFileString} MUI_TEXT_FINISH_RUN "Käynnistä $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Näytä LueMinut"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "&Valmis"
-!endif
-
-!ifdef MUI_STARTMENUPAGE
- ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Valitse Käynnistä-valikon hakemisto"
- ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Valitse Käynnistä-valikon hakemisto ohjelman pikakuvakkeille."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Valitse Käynnistä-valikon hakemisto, johon haluaisit luoda ohjelman pikakuvakkeet. Voit myös kirjoittaa uuden 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) tietokoneestasi."
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "Haluatko varmasti lopettaa $(^Name) Asennuksen?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Oletko varma että haluat poistua $(^Name) poisto-ohjelmasta?"
-!endif
+;Compatible with Modern UI 1.86
+;Language: Finnish (1035)
+;By Eclipser (Jonne Lehtinen) <Eclipser at pilvikaupunki dot com>
+;Updated by Puuhis (puuhis@puuhis.net)
+
+!insertmacro LANGFILE "Finnish" "Suomi"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Tervetuloa ohjelman $(^NameDA) asennukseen"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Tämä avustaja ohjaa sinut ohjelman $(^NameDA) asennuksen läpi.$\r$\n$\r$\nOn suositeltavaa sulkea kaikki muut ohjelmat ennen asennuksen aloittamista, jotta asennus voisi päivittää tiettyjä 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) -ohjelmiston poisto-ohjelmaan"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Tämä velho auttaa sinut läpi $(^NameDA) -ohjelmiston poistamisen.$\r$\n$\r$\nEnnen poisto-ohjelman aloitusta, varmista ettei $(^NameDA) ole käynnissä.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "Lisenssisopimus"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Lue lisenssiehdot tarkasti ennen ohjelman $(^NameDA) asentamista."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jos hyväksyt ehdot, valitse Hyväksyn jatkaaksesi. Sinun pitää hyväksyä ehdot asentaaksesi ohjelman $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jos hyväksyt ehdot, laita rasti alla olevaan ruutuun. Sinun pitää hyväksyä ehdot asentaaksesi ohjelman $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jos hyväksyt ehdot, valitse ensimmäinen vaihtoehto alapuolelta. Sinun pitää hyväksyä ehdot asentaaksesi ohjelman $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Lisenssisopimus"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Lue huolellisesti lisenssiehdot ennen $(^NameDA) -ohjelmiston poistoa."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jos hyväksyt säännöt ja ehdot, paina Hyväksyn -nappia jatkaakseni. Sinun täytyy hyväksyä ehdot poistaaksesi $(^NameDA) -ohjelmiston."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jos hyväksyt ehdot, klikkaa valintaruutua alhaalla. Sinun täytyy hyväksyä ehdot poistaaksesi $(^NameDA) -ohjelmiston. $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jos hyväksyt ehdot, valitse ensimmäinen vaihtoehto alhaalta. Sinun täytyy hyväksyä ehdot poistaaksesi $(^NameDA) -ohjelmiston. $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Paina Page Down 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)."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Selitys"
+!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
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Siirrä hiiri komponentin nimen päälle saadaksesi sen selityksen."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Siirrä hiiri komponentin nimen päälle saadaksesi sen selityksen."
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Valitse asennuskohde"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Valitse hakemisto, johon haluat asentaa ohjelman $(^NameDA)."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Valitse paikka mistä poistetaan"
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Valitse kansio mistä $(^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 valmistui onnistuneesti."
+ ${LangFileString} MUI_TEXT_ABORT_TITLE "Asennus keskeytettiin"
+ ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Asennus ei onnistunut."
+!endif
+
+!ifdef MUI_UNINSTFILESPAGE
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Poistetaan"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Odota... Ohjelmaa $(^NameDA) poistetaan."
+ ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Poisto valmis"
+ ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Ohjelma poistettiin onnistuneesti."
+ ${LangFileString} MUI_UNTEXT_ABORT_TITLE "Poisto lopetettu"
+ ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Ohjelmaa poisto epäonnistuneesti."
+!endif
+
+!ifdef MUI_FINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Viimeistellään ohjelman $(^NameDA) asennusta"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) on asennettu koneellesi.$\r$\n$\r$\nValitse Valmis sulkeaksesi avustajan."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Tietokoneesi pitää käynnistää uudelleen jotta ohjelman $(^NameDA) asennus saataisiin valmiiksi. Haluatko käynnistää koneen uudelleen nyt?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Viimeistellään $(^NameDA) -ohjelmiston poistamista"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) on poistettu koneeltasi.$\r$\n$\r$\nPaina Lopeta -nappia sulkeaksesi tämän velhon."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Jotta $(^NameDA) -ohjelmiston poistaminen olisi valmis, tulee tietokone käynnistää uudelleen. Haluatko uudelleenkäynnistää nyt?"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Käynnistä uudelleen nyt"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Käynnistän koneen myöhemmin uudelleen"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "Käynnistä $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Näytä LueMinut"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "&Valmis"
+!endif
+
+!ifdef MUI_STARTMENUPAGE
+ ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Valitse Käynnistä-valikon hakemisto"
+ ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Valitse Käynnistä-valikon hakemisto ohjelman pikakuvakkeille."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Valitse Käynnistä-valikon hakemisto, johon haluaisit luoda ohjelman pikakuvakkeet. Voit myös kirjoittaa uuden 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) tietokoneestasi."
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "Haluatko varmasti lopettaa $(^Name) Asennuksen?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Oletko varma että haluat poistua $(^Name) poisto-ohjelmasta?"
+!endif
diff --git a/Contrib/Language files/French.nsh b/Contrib/Language files/French.nsh
index fd41eab..820f29f 100755
--- a/Contrib/Language files/French.nsh
+++ b/Contrib/Language files/French.nsh
@@ -1,121 +1,129 @@
-;Language: French (1036)
-;By Sébastien Delahaye <seb@delahaye.net>
-
-!insertmacro LANGFILE "French" "Français"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description"
-!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
- !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 "Passez le curseur de votre souris sur 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_UNDIRECTORYSPAGE
- ${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 que $(^NameDA) est en train d'être installé."
- ${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 que $(^NameDA) est en train d'être supprimé de votre ordinateur."
- ${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 l'installation 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
+;Language: French (1036)
+;By Sébastien Delahaye <seb@delahaye.net>
+
+!insertmacro LANGFILE "French" "Français"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description"
+!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
+ !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 "Passez le curseur de votre souris sur 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_UNDIRECTORYSPAGE
+ ${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 que $(^NameDA) est en train d'être installé."
+ ${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 que $(^NameDA) est en train d'être supprimé de votre ordinateur."
+ ${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 l'installation 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/Contrib/Language files/Galician.nsh b/Contrib/Language files/Galician.nsh
index 8a57f47..57befb6 100755
--- a/Contrib/Language files/Galician.nsh
+++ b/Contrib/Language files/Galician.nsh
@@ -1,121 +1,121 @@
-;Language: Galician (1110)
-;Ramon Flores <fa2ramon@usc.es>
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrición"
-!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
- !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 "Posicione o rato sobre 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_UNDIRECTORYSPAGE
- ${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
+;Language: Galician (1110)
+;Ramon Flores <fa2ramon@usc.es>
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrición"
+!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
+ !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 "Posicione o rato sobre 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/German.nsh b/Contrib/Language files/German.nsh
index be7630b..d5913fc 100755
--- a/Contrib/Language files/German.nsh
+++ b/Contrib/Language files/German.nsh
@@ -1,121 +1,129 @@
-;Language: German (1031)
-;By L.King, changes by K. Windszus & R. Bisswanger & M. Simmack & D. Weiß
-
-!insertmacro LANGFILE "German" "Deutsch"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Willkommen beim Installations-$\r$\nAssistenten für $(^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 beim Deinstallations-$\r$\nAssistenten für $(^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-nach-unten Taste, um den Rest des Abkommens zu sehen."
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschreibung"
-!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
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bewegen Sie den Mauszeiger über eine Komponente, um ihre Beschreibung zu sehen."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bewegen Sie den Mauszeiger über eine Komponente, um ihre Beschreibung zu sehen."
- !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_UNDIRECTORYSPAGE
- ${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 "Installiere..."
- ${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 "Deinstalliere..."
- ${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 Fertig stellen, um den Installations-Assistenten 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 Fertig stellen, 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 anzeigen"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fertig stellen"
-!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 wollen?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Sind Sie sicher, dass Sie die Deinstallation von $(^Name) abbrechen möchten?"
-!endif
+;Language: German (1031)
+;By L.King, changes by K. Windszus & R. Bisswanger & M. Simmack & D. Weiß
+
+!insertmacro LANGFILE "German" "Deutsch"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Willkommen beim Installations-$\r$\nAssistenten für $(^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 beim Deinstallations-$\r$\nAssistenten für $(^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-nach-unten Taste, um den Rest des Abkommens zu sehen."
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschreibung"
+!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
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bewegen Sie den Mauszeiger über eine Komponente, um ihre Beschreibung zu sehen."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bewegen Sie den Mauszeiger über eine Komponente, um ihre Beschreibung zu sehen."
+ !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_UNDIRECTORYSPAGE
+ ${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 "Installiere..."
+ ${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 "Deinstalliere..."
+ ${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 Fertig stellen, um den Installations-Assistenten 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 Fertig stellen, 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 anzeigen"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fertig stellen"
+!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 wollen?"
+!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 wollen."
+ ${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/Contrib/Language files/Greek.nsh b/Contrib/Language files/Greek.nsh
index ef3d3f4..6835ff3 100755
--- a/Contrib/Language files/Greek.nsh
+++ b/Contrib/Language files/Greek.nsh
@@ -1,121 +1,121 @@
-;Language: Greek (1032)
-;By Makidis N. Michael - http://dias.aueb.gr/~p3010094/
-
-!insertmacro LANGFILE "Greek" "Greek"
-
-!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)' ðïõ èÝëåôå íá åãêáôáóôÞóåôå."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÐåñéãñáöÞ"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÅðéëïãÞ Óôïé÷åßùí"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ÅðéëÝîôå ôá óôïé÷åßá ôïõ '$(^NameDA)' ðïõ èÝëåôå íá áðåãêáôáóôÞóåôå."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Greek (1032)
+;By Makidis N. Michael - http://dias.aueb.gr/~p3010094/
+
+!insertmacro LANGFILE "Greek" "Greek"
+
+!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)' ðïõ èÝëåôå íá åãêáôáóôÞóåôå."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÐåñéãñáöÞ"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ÅðéëïãÞ Óôïé÷åßùí"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "ÅðéëÝîôå ôá óôïé÷åßá ôïõ '$(^NameDA)' ðïõ èÝëåôå íá áðåãêáôáóôÞóåôå."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Hebrew.nsh b/Contrib/Language files/Hebrew.nsh
index d27a6b2..d3f5bf0 100755
--- a/Contrib/Language files/Hebrew.nsh
+++ b/Contrib/Language files/Hebrew.nsh
@@ -1,121 +1,129 @@
-;Language: Hebrew (1037)
-;By Yaron Shahrabani
-
-!insertmacro LANGFILE "Hebrew" "Hebrew"
-
-!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) áøöåðê ìäú÷éï."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "úéàåø"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "áçø øëéáéí"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "áçø àéìå úëåðåú ùì $(^NameDA) áøöåðê ìäñéø."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Hebrew (1037)
+;By Yaron Shahrabani
+
+!insertmacro LANGFILE "Hebrew" "Hebrew"
+
+!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) áøöåðê ìäú÷éï."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "úéàåø"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "áçø øëéáéí"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "áçø àéìå úëåðåú ùì $(^NameDA) áøöåðê ìäñéø."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Hungarian.nsh b/Contrib/Language files/Hungarian.nsh
index d1181bb..2d473bf 100755
--- a/Contrib/Language files/Hungarian.nsh
+++ b/Contrib/Language files/Hungarian.nsh
@@ -1,122 +1,122 @@
-;Language: Hungarian (1038)
-;Translation by Jozsef Tamas Herczeg ( - 1.61-ig),
-; Lajos Molnar (Orfanik) <orfanik@axelero.hu> ( 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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Leírás"
-!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
- !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
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Vigye rá az egeret az összetevõre, hogy megtekinthesse a leírását."
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Hungarian (1038)
+;Translation by Jozsef Tamas Herczeg ( - 1.61-ig),
+; Lajos Molnar (Orfanik) <orfanik@axelero.hu> ( 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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Leírás"
+!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
+ !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
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Vigye rá az egeret az összetevõre, hogy megtekinthesse a leírását."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Icelandic.nsh b/Contrib/Language files/Icelandic.nsh
index 0d39eb0..3b8ebd5 100755
--- a/Contrib/Language files/Icelandic.nsh
+++ b/Contrib/Language files/Icelandic.nsh
@@ -1,121 +1,121 @@
-;Language: Icelandic (15)
-;By Gretar Orri Kristinsson
-
-!insertmacro LANGFILE "Icelandic" "Icelandic"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Lýsing"
-!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
- !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 "Færðu músina yfir íhlut til 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_UNDIRECTORYSPAGE
- ${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
+;Language: Icelandic (15)
+;By Gretar Orri Kristinsson
+
+!insertmacro LANGFILE "Icelandic" "Icelandic"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Lýsing"
+!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
+ !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 "Færðu músina yfir íhlut til 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Indonesian.nsh b/Contrib/Language files/Indonesian.nsh
index 149f87e..0730ddd 100755
--- a/Contrib/Language files/Indonesian.nsh
+++ b/Contrib/Language files/Indonesian.nsh
@@ -1,121 +1,121 @@
-;Language: Indonesian (1057)
-;By Ariel825010106@yahoo.com [visit www.ariel106.cjb.net]
-
-!insertmacro LANGFILE "Indonesian" "Indonesian"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Selamat datang di $(^NameDA) Setup Wizard"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Setup Wizard akan membantu anda pada proses instalasi $(^NameDA).$\r$\n$\r$\nSangat disarankan untuk menutup program lainnya sebelum memulai Setup ini. Ini memungkinkan untuk merubah file yang dipakai oleh sistem tanpa harus me-reboot komputer anda.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Selamat datang di $(^NameDA) Uninstall Wizard"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Uninstall Wizard akan membantu anda pada proses uninstalasi $(^NameDA).$\r$\n$\r$\nSebelum memulai uninstalasi, pastikan dulu $(^NameDA) tidak sedang berjalan.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "Perihal Lisensi"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Silahkan membaca lisensi berikut sebelum menginstall $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jika anda menerima semua yang ada di lisensi, klik Saya setuju untuk melanjutkan. Anda harus setuju untuk dapat menginstall $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda menerima semua yang ada di lisensi, beri tanda centang. Anda harus setuju untuk dapat menginstall $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda menerima semua yang ada di lisensi, pilihlah salah satu item dibawah ini. Anda harus setuju untuk dapat menginstall $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Perihal Lisensi"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Silahkan membaca lisensi berikut sebelum meng-uninstall $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jika anda menerima semua yang ada di lisensi, klik Saya setuju untuk melanjutkan. Anda harus setuju untuk dapat meng-uninstall $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda menerima semua yang ada di lisensi, beri tanda centang. Anda harus setuju untuk dapat meng-uninstall $(^NameDA). $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda menerima semua yang ada di lisensi, pilihlah salah satu item dibawah ini. Anda harus setuju untuk dapat meng-uninstall $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tekan Page Down untuk melihat selanjutnya."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Pilih Komponen"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Pilih fasilitas dari $(^NameDA) yang ingin di-install."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Deskripsi"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Pilih Komponen"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Pilih fasilitas dari $(^NameDA) yang ingin di-uninstall."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tunjuk ke salah satu komponen untuk melihat deskripsi tentang komponen itu."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tunjuk ke salah satu komponen untuk melihat deskripsi tentang komponen itu."
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Pilih Lokasi Install"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Pilih folder untuk meng-install $(^NameDA)."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${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 "Install"
- ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Mohon tunggu selama $(^NameDA) sedang di-install."
- ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalasi Selesai"
- ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Setup sudah selesai."
- ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalasi Dibatalkan"
- ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Setup belum selesai secara sempurna."
-!endif
-
-!ifdef MUI_UNINSTFILESPAGE
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uninstall"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Mohon tunggu selama $(^NameDA) sedang di-uninstall."
- ${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 ter-install di komputer anda.$\r$\n$\r$\nKlik Selesai untuk menutup Setup Wizard."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Komputer anda harus di reboot untuk menyelesaikan proses instalasi $(^NameDA). Apakah anda mau 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 ter-uninstall di 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 uninstall $(^NameDA). Apakah anda mau reboot sekarang juga?"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reboot sekarang"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Reboot nanti saja"
- ${LangFileString} MUI_TEXT_FINISH_RUN "&Jalankan $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Buka file 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 meletakan shortcut $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Pilih folder Start Menu dimana ingin diletakan shortcut program ini. Bisa juga memasukan nama folder yang belum ada untuk membuatnya."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Jangan buat shortcut"
-!endif
-
-!ifdef MUI_UNCONFIRMPAGE
- ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Uninstall $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Menghapus $(^NameDA) dari komputer anda."
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "Apa anda yakin ingin menghentikan Setup $(^Name)?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Apa anda yakin ingin menghentikan Uninstall $(^Name)?"
-!endif
+;Language: Indonesian (1057)
+;By Ariel825010106@yahoo.com [visit www.ariel106.cjb.net]
+
+!insertmacro LANGFILE "Indonesian" "Indonesian"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Selamat datang di $(^NameDA) Setup Wizard"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Setup Wizard akan membantu anda pada proses instalasi $(^NameDA).$\r$\n$\r$\nSangat disarankan untuk menutup program lainnya sebelum memulai Setup ini. Ini memungkinkan untuk merubah file yang dipakai oleh sistem tanpa harus me-reboot komputer anda.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Selamat datang di $(^NameDA) Uninstall Wizard"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Uninstall Wizard akan membantu anda pada proses uninstalasi $(^NameDA).$\r$\n$\r$\nSebelum memulai uninstalasi, pastikan dulu $(^NameDA) tidak sedang berjalan.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "Perihal Lisensi"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Silahkan membaca lisensi berikut sebelum menginstall $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Jika anda menerima semua yang ada di lisensi, klik Saya setuju untuk melanjutkan. Anda harus setuju untuk dapat menginstall $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda menerima semua yang ada di lisensi, beri tanda centang. Anda harus setuju untuk dapat menginstall $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda menerima semua yang ada di lisensi, pilihlah salah satu item dibawah ini. Anda harus setuju untuk dapat menginstall $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Perihal Lisensi"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Silahkan membaca lisensi berikut sebelum meng-uninstall $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Jika anda menerima semua yang ada di lisensi, klik Saya setuju untuk melanjutkan. Anda harus setuju untuk dapat meng-uninstall $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Jika anda menerima semua yang ada di lisensi, beri tanda centang. Anda harus setuju untuk dapat meng-uninstall $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Jika anda menerima semua yang ada di lisensi, pilihlah salah satu item dibawah ini. Anda harus setuju untuk dapat meng-uninstall $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Tekan Page Down untuk melihat selanjutnya."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Pilih Komponen"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Pilih fasilitas dari $(^NameDA) yang ingin di-install."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Deskripsi"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Pilih Komponen"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Pilih fasilitas dari $(^NameDA) yang ingin di-uninstall."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tunjuk ke salah satu komponen untuk melihat deskripsi tentang komponen itu."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Tunjuk ke salah satu komponen untuk melihat deskripsi tentang komponen itu."
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Pilih Lokasi Install"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Pilih folder untuk meng-install $(^NameDA)."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${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 "Install"
+ ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Mohon tunggu selama $(^NameDA) sedang di-install."
+ ${LangFileString} MUI_TEXT_FINISH_TITLE "Instalasi Selesai"
+ ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Setup sudah selesai."
+ ${LangFileString} MUI_TEXT_ABORT_TITLE "Instalasi Dibatalkan"
+ ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Setup belum selesai secara sempurna."
+!endif
+
+!ifdef MUI_UNINSTFILESPAGE
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uninstall"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Mohon tunggu selama $(^NameDA) sedang di-uninstall."
+ ${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 ter-install di komputer anda.$\r$\n$\r$\nKlik Selesai untuk menutup Setup Wizard."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Komputer anda harus di reboot untuk menyelesaikan proses instalasi $(^NameDA). Apakah anda mau 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 ter-uninstall di 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 uninstall $(^NameDA). Apakah anda mau reboot sekarang juga?"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reboot sekarang"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Reboot nanti saja"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "&Jalankan $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Buka file 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 meletakan shortcut $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Pilih folder Start Menu dimana ingin diletakan shortcut program ini. Bisa juga memasukan nama folder yang belum ada untuk membuatnya."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Jangan buat shortcut"
+!endif
+
+!ifdef MUI_UNCONFIRMPAGE
+ ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Uninstall $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Menghapus $(^NameDA) dari komputer anda."
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "Apa anda yakin ingin menghentikan Setup $(^Name)?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Apa anda yakin ingin menghentikan Uninstall $(^Name)?"
+!endif
diff --git a/Contrib/Language files/Irish.nsh b/Contrib/Language files/Irish.nsh
index 7187af9..8aab46d 100755
--- a/Contrib/Language files/Irish.nsh
+++ b/Contrib/Language files/Irish.nsh
@@ -1,121 +1,121 @@
-;Language: Irish (2108)
-;By Kevin P. Scannell < scannell at slu dot edu >
-
-!insertmacro LANGFILE "Irish" "Irish"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Cur Síos"
-!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
- !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 "Cuir do luch os cionn comhpháirte 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_UNDIRECTORYSPAGE
- ${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
+;Language: Irish (2108)
+;By Kevin P. Scannell < scannell at slu dot edu >
+
+!insertmacro LANGFILE "Irish" "Irish"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Cur Síos"
+!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
+ !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 "Cuir do luch os cionn comhpháirte 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Italian.nsh b/Contrib/Language files/Italian.nsh
index 1f46370..7f7be82 100755
--- a/Contrib/Language files/Italian.nsh
+++ b/Contrib/Language files/Italian.nsh
@@ -1,123 +1,131 @@
-;Language: Italian (1040)
-;By SANFACE Software <sanface@sanface.com> 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 "Benvenuti nel programma di installazione di $(^NameDA)"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Questo programma installerà $(^NameDA) nel vostro 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 "Benvenuti nella procedura guidata di disinstallazione di $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Questa procedura vi guiderà nella disinstallazione di $(^NameDA).$\r$\n$\r$\nPrima di iniziare la disinstallazione, assicuratevi che $(^Name) non sia in esecuzione.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licenza d'uso"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Prego leggere le condizioni della licenza d'uso prima di installare $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se si accettano i termini della licenza d'uso scegliere Accetto per continuare. È necessario accettare i termini della licenza d'uso per installare $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se si accettano i termini della licenza d'uso, selezionare la casella sottostante. È necessario accettare i termini della licenza d'uso per installare $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se si accettano i termini della licenza d'uso, selezionare la prima opzione sottostante. È necessario accettare i termini della licenza d'uso per installare $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licenza d'uso"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Prego leggere le condizioni della licenza d'uso prima di disinstallare $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se si accettano i termini della licenza d'uso scegliere Accetto per continuare. È necessario accettare i termini della licenza d'uso per disinstallare $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se si accettano i termini della licenza d'uso, selezionare la casella sottostante. È necessario accettare i termini della licenza d'uso per disinstallare $(^NameDA). $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se si accettano i termini della licenza d'uso, selezionare la prima opzione sottostante. È necessario accettare i termini della licenza d'uso per disinstallare $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Premere Page Down per vedere il resto della licenza d'uso."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selezione dei componenti"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Selezionare i componenti di $(^NameDA) che si desidera installare."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrizione"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selezione componenti"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Scegliere i componenti di $(^NameDA) che si desidera disinstallare."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posizionare il puntatore del mouse sul componente per vederne la descrizione."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posizionare il puntatore del mouse sul componente per vederne la descrizione."
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Scelta della cartella di installazione"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Scegliere la cartella nella quale installare $(^NameDA)."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Scelta della cartella da cui disinstallare"
- ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Scegliere la cartella dalla quale disinstallare $(^NameDA)."
-!endif
-
-!ifdef MUI_INSTFILESPAGE
- ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installazione in corso"
- ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Prego attendere mentre $(^NameDA) viene installato."
- ${LangFileString} MUI_TEXT_FINISH_TITLE "Installazione completata"
- ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "L'installazione è stata completata con successo."
- ${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 in corso"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Prego attendere mentre $(^NameDA) viene disinstallato."
- ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Disinstallazione completata"
- ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La disinstallazione è stata completata con successo."
- ${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 "Completamento dell'installazione di $(^NameDA)."
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) è stato installato sul vostro computer.$\r$\n$\r$\nScegliere Fine per chiudere il programma di installazione."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Il computer deve essere riavviato per completare l'installazione di $(^NameDA). Vuoi riavviarlo ora?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completamento della disinstallazione di $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) è stato disinstallato dal computer.$\r$\n$\r$\nSelezionare Fine per terminare questa procedura."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Il computer deve essere riavviato per completare l'installazione di $(^NameDA). Vuoi riavviarlo ora?"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Riavvia adesso"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Preferisco riavviarlo manualmente più tardi"
- ${LangFileString} MUI_TEXT_FINISH_RUN "Esegui $(^NameDA)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Mostra il file Readme"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fine"
-!endif
-
-!ifdef MUI_STARTMENUPAGE
- ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Scelta della cartella del menu Start"
- ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Scegliere una cartella del menu Start per i collegamenti del programma."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Scegliere 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 al programma."
-!endif
-
-!ifdef MUI_UNCONFIRMPAGE
- ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Disinstalla $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Rimuove $(^NameDA) dal computer."
-!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
+;Language: Italian (1040)
+;By SANFACE Software <sanface@sanface.com> 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 "Benvenuti nel programma di installazione di $(^NameDA)"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Questo programma installerà $(^NameDA) nel vostro 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 "Benvenuti nella procedura guidata di disinstallazione di $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Questa procedura vi guiderà nella disinstallazione di $(^NameDA).$\r$\n$\r$\nPrima di iniziare la disinstallazione, assicuratevi che $(^Name) non sia in esecuzione.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "Licenza d'uso"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Prego leggere le condizioni della licenza d'uso prima di installare $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Se si accettano i termini della licenza d'uso scegliere Accetto per continuare. È necessario accettare i termini della licenza d'uso per installare $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se si accettano i termini della licenza d'uso, selezionare la casella sottostante. È necessario accettare i termini della licenza d'uso per installare $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se si accettano i termini della licenza d'uso, selezionare la prima opzione sottostante. È necessario accettare i termini della licenza d'uso per installare $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "Licenza d'uso"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Prego leggere le condizioni della licenza d'uso prima di disinstallare $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Se si accettano i termini della licenza d'uso scegliere Accetto per continuare. È necessario accettare i termini della licenza d'uso per disinstallare $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se si accettano i termini della licenza d'uso, selezionare la casella sottostante. È necessario accettare i termini della licenza d'uso per disinstallare $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se si accettano i termini della licenza d'uso, selezionare la prima opzione sottostante. È necessario accettare i termini della licenza d'uso per disinstallare $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Premere Page Down per vedere il resto della licenza d'uso."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Selezione dei componenti"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Selezionare i componenti di $(^NameDA) che si desidera installare."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrizione"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Selezione componenti"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Scegliere i componenti di $(^NameDA) che si desidera disinstallare."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posizionare il puntatore del mouse sul componente per vederne la descrizione."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Posizionare il puntatore del mouse sul componente per vederne la descrizione."
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Scelta della cartella di installazione"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Scegliere la cartella nella quale installare $(^NameDA)."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Scelta della cartella da cui disinstallare"
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Scegliere la cartella dalla quale disinstallare $(^NameDA)."
+!endif
+
+!ifdef MUI_INSTFILESPAGE
+ ${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installazione in corso"
+ ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Prego attendere mentre $(^NameDA) viene installato."
+ ${LangFileString} MUI_TEXT_FINISH_TITLE "Installazione completata"
+ ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "L'installazione è stata completata con successo."
+ ${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 in corso"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Prego attendere mentre $(^NameDA) viene disinstallato."
+ ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Disinstallazione completata"
+ ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "La disinstallazione è stata completata con successo."
+ ${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 "Completamento dell'installazione di $(^NameDA)."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) è stato installato sul vostro computer.$\r$\n$\r$\nScegliere Fine per chiudere il programma di installazione."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Il computer deve essere riavviato per completare l'installazione di $(^NameDA). Vuoi riavviarlo ora?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completamento della disinstallazione di $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) è stato disinstallato dal computer.$\r$\n$\r$\nSelezionare Fine per terminare questa procedura."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Il computer deve essere riavviato per completare l'installazione di $(^NameDA). Vuoi riavviarlo ora?"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Riavvia adesso"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Preferisco riavviarlo manualmente più tardi"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "Esegui $(^NameDA)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Mostra il file Readme"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "&Fine"
+!endif
+
+!ifdef MUI_STARTMENUPAGE
+ ${LangFileString} MUI_TEXT_STARTMENU_TITLE "Scelta della cartella del menu Start"
+ ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Scegliere una cartella del menu Start per i collegamenti del programma."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Scegliere 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 al programma."
+!endif
+
+!ifdef MUI_UNCONFIRMPAGE
+ ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Disinstalla $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Rimuove $(^NameDA) dal computer."
+!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 "Scelta degli Utenti"
+ ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Scegliete per quali utenti volete installare $(^NameDA)."
+ ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Scegliete se volete installare $(^NameDA) solo per voi 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 personale"
+!endif
diff --git a/Contrib/Language files/Japanese.nsh b/Contrib/Language files/Japanese.nsh
index e3af5b0..0920367 100755
--- a/Contrib/Language files/Japanese.nsh
+++ b/Contrib/Language files/Japanese.nsh
@@ -1,122 +1,122 @@
-;Language: Japanese (1041)
-;By Dnanako
-;Translation updated by Takahiro Yoshimura <takahiro_y@monolithworks.co.jp>
-
-!insertmacro LANGFILE "Japanese" "Japanese"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) ƒZƒbƒgƒAƒbƒv ƒEƒBƒU[ƒh‚ւ悤‚±‚»"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "‚±‚̃EƒBƒU[ƒh‚ÍA$(^NameDA)‚̃Cƒ“ƒXƒg[ƒ‹‚ðƒKƒCƒh‚µ‚Ä‚¢‚«‚Ü‚·B$\r$\n$\r$\nƒZƒbƒgƒAƒbƒv‚ðŠJŽn‚·‚é‘O‚ÉA‘¼‚Ì‚·‚ׂẴAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðI—¹‚·‚邱‚Æ‚ð„§‚µ‚Ü‚·B‚±‚ê‚É‚æ‚Á‚ăZƒbƒgƒAƒbƒv‚ªƒRƒ“ƒsƒ…[ƒ^‚ðÄ‹N“®‚¹‚¸‚ÉAƒVƒXƒeƒ€ ƒtƒ@ƒCƒ‹‚ðXV‚·‚邱‚Æ‚ªo—ˆ‚é‚悤‚É‚È‚è‚Ü‚·B$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹ ƒEƒBƒU[ƒh‚ւ悤‚±‚»"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "‚±‚̃EƒBƒU[ƒh‚ÍA$(^NameDA)‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðƒKƒCƒh‚µ‚Ä‚¢‚«‚Ü‚·B$\r$\n$\r$\nƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚é‘O‚ÉA$(^NameDA)‚ª‹N“®‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚ðŠm”F‚µ‚ĉº‚³‚¢B$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "ƒ‰ƒCƒZƒ“ƒXŒ_–ñ‘"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA)‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‘O‚ÉAƒ‰ƒCƒZƒ“ƒXðŒ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA[“¯ˆÓ‚·‚é] ‚ð‘I‚ñ‚ŃCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚̃`ƒFƒbƒNƒ{ƒbƒNƒX‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚É•\Ž¦‚³‚ê‚Ä‚¢‚éƒIƒvƒVƒ‡ƒ“‚Ì‚¤‚¿Aʼn‚Ì‚à‚Ì‚ð‘I‚ñ‚ʼnº‚³‚¢B$(^NameDA) ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "ƒ‰ƒCƒZƒ“ƒXŒ_–ñ‘"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA)‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‘O‚ÉAƒ‰ƒCƒZƒ“ƒXðŒ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA[“¯ˆÓ‚·‚é] ‚ð‘I‚ñ‚ŃAƒ“ƒCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚̃`ƒFƒbƒNƒ{ƒbƒNƒX‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚É•\Ž¦‚³‚ê‚Ä‚¢‚éƒIƒvƒVƒ‡ƒ“‚Ì‚¤‚¿Aʼn‚Ì‚à‚Ì‚ð‘I‚ñ‚ʼnº‚³‚¢B$(^NameDA) ‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "[Page Down]‚ð‰Ÿ‚µ‚ÄŒ_–ñ‘‚ð‚·‚×‚Ä‚¨“Ç‚Ý‚­‚¾‚³‚¢B"
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ƒRƒ“ƒ|[ƒlƒ“ƒg‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "$(^NameDA)‚̃Cƒ“ƒXƒg[ƒ‹ ƒIƒvƒVƒ‡ƒ“‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "à–¾"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ƒRƒ“ƒ|[ƒlƒ“ƒg‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA)‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹ ƒIƒvƒVƒ‡ƒ“‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ƒRƒ“ƒ|[ƒlƒ“ƒg‚Ìã‚Ƀ}ƒEƒX ƒJ[ƒ\ƒ‹‚ðˆÚ“®‚·‚é‚ÆA‚±‚±‚Éà–¾‚ª•\Ž¦‚³‚ê‚Ü‚·B"
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ƒRƒ“ƒ|[ƒlƒ“ƒg‚Ìã‚Ƀ}ƒEƒX ƒJ[ƒ\ƒ‹‚ðˆÚ“®‚·‚é‚ÆA‚±‚±‚Éà–¾‚ª•\Ž¦‚³‚ê‚Ü‚·B"
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "ƒCƒ“ƒXƒg[ƒ‹æ‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA)‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚éƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹Œ³‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA)‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚éƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
-!endif
-
-!ifdef MUI_INSTFILESPAGE
- ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ƒCƒ“ƒXƒg[ƒ‹"
- ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA)‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·B‚µ‚΂炭‚¨‘Ò‚¿‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_TEXT_FINISH_TITLE "ƒCƒ“ƒXƒg[ƒ‹‚ÌŠ®—¹"
- ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "ƒCƒ“ƒXƒg[ƒ‹‚ɬŒ÷‚µ‚Ü‚µ‚½B"
- ${LangFileString} MUI_TEXT_ABORT_TITLE "ƒCƒ“ƒXƒg[ƒ‹‚Ì’†Ž~"
- ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ƒZƒbƒgƒAƒbƒv‚ͳí‚ÉŠ®—¹‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½B"
-!endif
-
-!ifdef MUI_UNINSTFILESPAGE
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA)‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·B‚µ‚΂炭‚¨‘Ò‚¿‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_UNTEXT_FINISH_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ÌŠ®—¹"
- ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ɬŒ÷‚µ‚Ü‚µ‚½B"
- ${LangFileString} MUI_UNTEXT_ABORT_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ì’†Ž~"
- ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ͳí‚ÉŠ®—¹‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½B"
-!endif
-
-!ifdef MUI_FINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) ƒZƒbƒgƒAƒbƒv ƒEƒBƒU[ƒh‚ÍŠ®—¹‚µ‚Ü‚µ‚½B"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA)‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ü‚µ‚½B$\r$\n$\r$\nƒEƒBƒU[ƒh‚ð•Â‚¶‚é‚É‚Í [Š®—¹] ‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) ‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚É‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ðÄ‹N“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¡‚·‚®Ä‹N“®‚µ‚Ü‚·‚©H"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹ ƒEƒBƒU[ƒh‚ÍŠ®—¹‚µ‚Ü‚µ‚½B"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA)‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚©‚çƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ü‚µ‚½B$\r$\n$\r$\nƒEƒBƒU[ƒh‚ð•Â‚¶‚é‚É‚Í [Š®—¹] ‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) ‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚É‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ðÄ‹N“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¡‚·‚®Ä‹N“®‚µ‚Ü‚·‚©H"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "¡‚·‚®Ä‹N“®‚·‚é"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Œã‚ÅŽè“®‚ÅÄ‹N“®‚·‚é"
- ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA)‚ðŽÀs(&R)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Readme ‚ð•\Ž¦‚·‚é(&S)"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "Š®—¹(&F)"
-!endif
-
-!ifdef MUI_STARTMENUPAGE
- ${LangFileString} MUI_TEXT_STARTMENU_TITLE "ƒXƒ^[ƒgƒƒjƒ…[ ƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
- ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "$(^NameDA)‚̃Vƒ‡[ƒgƒJƒbƒg‚ð쬂·‚éƒXƒ^[ƒgƒƒjƒ…[ ƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚ʼnº‚³‚¢B"
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "‚±‚̃vƒƒOƒ‰ƒ€‚̃Vƒ‡[ƒgƒJƒbƒg‚ð쬂µ‚½‚¢ƒXƒ^[ƒgƒƒjƒ…[ ƒtƒHƒ‹ƒ_‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½A쬂·‚éV‚µ‚¢ƒtƒHƒ‹ƒ_‚É–¼‘O‚ð‚‚¯‚邱‚Æ‚à‚Å‚«‚Ü‚·B"
- ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "ƒVƒ‡[ƒgƒJƒbƒg‚ð쬂µ‚È‚¢"
-!endif
-
-!ifdef MUI_UNCONFIRMPAGE
- ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA)‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA)‚ð‚±‚ÌƒRƒ“ƒsƒ…[ƒ^‚©‚ç휂µ‚Ü‚·B"
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "$(^Name) ƒZƒbƒgƒAƒbƒv‚𒆎~‚µ‚Ü‚·‚©H"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name) ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚𒆎~‚µ‚Ü‚·‚©H"
-!endif
+;Language: Japanese (1041)
+;By Dnanako
+;Translation updated by Takahiro Yoshimura <takahiro_y@monolithworks.co.jp>
+
+!insertmacro LANGFILE "Japanese" "Japanese"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) ƒZƒbƒgƒAƒbƒv ƒEƒBƒU[ƒh‚ւ悤‚±‚»"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "‚±‚̃EƒBƒU[ƒh‚ÍA$(^NameDA)‚̃Cƒ“ƒXƒg[ƒ‹‚ðƒKƒCƒh‚µ‚Ä‚¢‚«‚Ü‚·B$\r$\n$\r$\nƒZƒbƒgƒAƒbƒv‚ðŠJŽn‚·‚é‘O‚ÉA‘¼‚Ì‚·‚ׂẴAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðI—¹‚·‚邱‚Æ‚ð„§‚µ‚Ü‚·B‚±‚ê‚É‚æ‚Á‚ăZƒbƒgƒAƒbƒv‚ªƒRƒ“ƒsƒ…[ƒ^‚ðÄ‹N“®‚¹‚¸‚ÉAƒVƒXƒeƒ€ ƒtƒ@ƒCƒ‹‚ðXV‚·‚邱‚Æ‚ªo—ˆ‚é‚悤‚É‚È‚è‚Ü‚·B$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "$(^NameDA) ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹ ƒEƒBƒU[ƒh‚ւ悤‚±‚»"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "‚±‚̃EƒBƒU[ƒh‚ÍA$(^NameDA)‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðƒKƒCƒh‚µ‚Ä‚¢‚«‚Ü‚·B$\r$\n$\r$\nƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚é‘O‚ÉA$(^NameDA)‚ª‹N“®‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚ðŠm”F‚µ‚ĉº‚³‚¢B$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "ƒ‰ƒCƒZƒ“ƒXŒ_–ñ‘"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "$(^NameDA)‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‘O‚ÉAƒ‰ƒCƒZƒ“ƒXðŒ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA[“¯ˆÓ‚·‚é] ‚ð‘I‚ñ‚ŃCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚̃`ƒFƒbƒNƒ{ƒbƒNƒX‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚É•\Ž¦‚³‚ê‚Ä‚¢‚éƒIƒvƒVƒ‡ƒ“‚Ì‚¤‚¿Aʼn‚Ì‚à‚Ì‚ð‘I‚ñ‚ʼnº‚³‚¢B$(^NameDA) ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "ƒ‰ƒCƒZƒ“ƒXŒ_–ñ‘"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "$(^NameDA)‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‘O‚ÉAƒ‰ƒCƒZƒ“ƒXðŒ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA[“¯ˆÓ‚·‚é] ‚ð‘I‚ñ‚ŃAƒ“ƒCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚̃`ƒFƒbƒNƒ{ƒbƒNƒX‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B$(^NameDA) ‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Œ_–ñ‘‚Ì‚·‚ׂĂÌðŒ‚É“¯ˆÓ‚·‚é‚È‚ç‚ÎA‰º‚É•\Ž¦‚³‚ê‚Ä‚¢‚éƒIƒvƒVƒ‡ƒ“‚Ì‚¤‚¿Aʼn‚Ì‚à‚Ì‚ð‘I‚ñ‚ʼnº‚³‚¢B$(^NameDA) ‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAŒ_–ñ‘‚É“¯ˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "[Page Down]‚ð‰Ÿ‚µ‚ÄŒ_–ñ‘‚ð‚·‚×‚Ä‚¨“Ç‚Ý‚­‚¾‚³‚¢B"
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "ƒRƒ“ƒ|[ƒlƒ“ƒg‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "$(^NameDA)‚̃Cƒ“ƒXƒg[ƒ‹ ƒIƒvƒVƒ‡ƒ“‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "à–¾"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "ƒRƒ“ƒ|[ƒlƒ“ƒg‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA)‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹ ƒIƒvƒVƒ‡ƒ“‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ƒRƒ“ƒ|[ƒlƒ“ƒg‚Ìã‚Ƀ}ƒEƒX ƒJ[ƒ\ƒ‹‚ðˆÚ“®‚·‚é‚ÆA‚±‚±‚Éà–¾‚ª•\Ž¦‚³‚ê‚Ü‚·B"
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "ƒRƒ“ƒ|[ƒlƒ“ƒg‚Ìã‚Ƀ}ƒEƒX ƒJ[ƒ\ƒ‹‚ðˆÚ“®‚·‚é‚ÆA‚±‚±‚Éà–¾‚ª•\Ž¦‚³‚ê‚Ü‚·B"
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "ƒCƒ“ƒXƒg[ƒ‹æ‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "$(^NameDA)‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚éƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹Œ³‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "$(^NameDA)‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚éƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+!endif
+
+!ifdef MUI_INSTFILESPAGE
+ ${LangFileString} MUI_TEXT_INSTALLING_TITLE "ƒCƒ“ƒXƒg[ƒ‹"
+ ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA)‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·B‚µ‚΂炭‚¨‘Ò‚¿‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_TEXT_FINISH_TITLE "ƒCƒ“ƒXƒg[ƒ‹‚ÌŠ®—¹"
+ ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "ƒCƒ“ƒXƒg[ƒ‹‚ɬŒ÷‚µ‚Ü‚µ‚½B"
+ ${LangFileString} MUI_TEXT_ABORT_TITLE "ƒCƒ“ƒXƒg[ƒ‹‚Ì’†Ž~"
+ ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "ƒZƒbƒgƒAƒbƒv‚ͳí‚ÉŠ®—¹‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½B"
+!endif
+
+!ifdef MUI_UNINSTFILESPAGE
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA)‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·B‚µ‚΂炭‚¨‘Ò‚¿‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_UNTEXT_FINISH_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ÌŠ®—¹"
+ ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ɬŒ÷‚µ‚Ü‚µ‚½B"
+ ${LangFileString} MUI_UNTEXT_ABORT_TITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ì’†Ž~"
+ ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ͳí‚ÉŠ®—¹‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½B"
+!endif
+
+!ifdef MUI_FINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "$(^NameDA) ƒZƒbƒgƒAƒbƒv ƒEƒBƒU[ƒh‚ÍŠ®—¹‚µ‚Ü‚µ‚½B"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA)‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ü‚µ‚½B$\r$\n$\r$\nƒEƒBƒU[ƒh‚ð•Â‚¶‚é‚É‚Í [Š®—¹] ‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA) ‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚É‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ðÄ‹N“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¡‚·‚®Ä‹N“®‚µ‚Ü‚·‚©H"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "$(^NameDA) ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹ ƒEƒBƒU[ƒh‚ÍŠ®—¹‚µ‚Ü‚µ‚½B"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA)‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚©‚çƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ü‚µ‚½B$\r$\n$\r$\nƒEƒBƒU[ƒh‚ð•Â‚¶‚é‚É‚Í [Š®—¹] ‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "$(^NameDA) ‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚É‚ÍA‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ðÄ‹N“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¡‚·‚®Ä‹N“®‚µ‚Ü‚·‚©H"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "¡‚·‚®Ä‹N“®‚·‚é"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Œã‚ÅŽè“®‚ÅÄ‹N“®‚·‚é"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "$(^NameDA)‚ðŽÀs(&R)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Readme ‚ð•\Ž¦‚·‚é(&S)"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "Š®—¹(&F)"
+!endif
+
+!ifdef MUI_STARTMENUPAGE
+ ${LangFileString} MUI_TEXT_STARTMENU_TITLE "ƒXƒ^[ƒgƒƒjƒ…[ ƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
+ ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "$(^NameDA)‚̃Vƒ‡[ƒgƒJƒbƒg‚ð쬂·‚éƒXƒ^[ƒgƒƒjƒ…[ ƒtƒHƒ‹ƒ_‚ð‘I‚ñ‚ʼnº‚³‚¢B"
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "‚±‚̃vƒƒOƒ‰ƒ€‚̃Vƒ‡[ƒgƒJƒbƒg‚ð쬂µ‚½‚¢ƒXƒ^[ƒgƒƒjƒ…[ ƒtƒHƒ‹ƒ_‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½A쬂·‚éV‚µ‚¢ƒtƒHƒ‹ƒ_‚É–¼‘O‚ð‚‚¯‚邱‚Æ‚à‚Å‚«‚Ü‚·B"
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "ƒVƒ‡[ƒgƒJƒbƒg‚ð쬂µ‚È‚¢"
+!endif
+
+!ifdef MUI_UNCONFIRMPAGE
+ ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "$(^NameDA)‚̃Aƒ“ƒCƒ“ƒXƒg[ƒ‹"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "$(^NameDA)‚ð‚±‚ÌƒRƒ“ƒsƒ…[ƒ^‚©‚ç휂µ‚Ü‚·B"
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "$(^Name) ƒZƒbƒgƒAƒbƒv‚𒆎~‚µ‚Ü‚·‚©H"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "$(^Name) ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚𒆎~‚µ‚Ü‚·‚©H"
+!endif
diff --git a/Contrib/Language files/Korean.nsh b/Contrib/Language files/Korean.nsh
index 0be1a38..27d1cb2 100755
--- a/Contrib/Language files/Korean.nsh
+++ b/Contrib/Language files/Korean.nsh
@@ -1,121 +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" "Korean"
-
-!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)ÀÇ ±¸¼º ¿ä¼Ò¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "»ó¼¼ ¼³¸í"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "±¸¼º ¿ä¼Ò ¼±ÅÃ"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Á¦°ÅÇÏ°íÀÚ ÇÏ´Â $(^NameDA)ÀÇ ±¸¼º ¿ä¼Ò¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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)ÀÇ ¼³Ä¡°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù. ¼³Ä¡ ÇÁ·Î±×·¥À» ¸¶Ä¡·Á¸é '¸¶Ä§' ¹öÆ°À» ´­·¯ ÁÖ¼¼¿ä."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA)ÀÇ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§Çؼ­´Â ½Ã½ºÅÛÀ» ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý ÀçºÎÆà ÇϽðڽÀ´Ï±î?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Á¦°Å ¿Ï·á"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA)ÀÇ Á¦°Å°¡ ¿Ï·á µÇ¾ú½À´Ï´Ù."
- ${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
+;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" "Korean"
+
+!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)ÀÇ ±¸¼º ¿ä¼Ò¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "»ó¼¼ ¼³¸í"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "±¸¼º ¿ä¼Ò ¼±ÅÃ"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Á¦°ÅÇÏ°íÀÚ ÇÏ´Â $(^NameDA)ÀÇ ±¸¼º ¿ä¼Ò¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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)ÀÇ ¼³Ä¡°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù. ¼³Ä¡ ÇÁ·Î±×·¥À» ¸¶Ä¡·Á¸é '¸¶Ä§' ¹öÆ°À» ´­·¯ ÁÖ¼¼¿ä."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "$(^NameDA)ÀÇ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§Çؼ­´Â ½Ã½ºÅÛÀ» ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý ÀçºÎÆà ÇϽðڽÀ´Ï±î?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Á¦°Å ¿Ï·á"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA)ÀÇ Á¦°Å°¡ ¿Ï·á µÇ¾ú½À´Ï´Ù."
+ ${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/Contrib/Language files/Kurdish.nsh b/Contrib/Language files/Kurdish.nsh
index ab246d4..8260081 100755
--- a/Contrib/Language files/Kurdish.nsh
+++ b/Contrib/Language files/Kurdish.nsh
@@ -1,122 +1,122 @@
-;Language: Kurdish
-;By Rêzan Tovjîn
-;Updated by Erdal Ronahî (erdal.ronahi@gmail.com)
-
-!insertmacro LANGFILE "Kurdish" "Kurdî"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Dazanîn"
-!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
- !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î nîþanekê bibe ser pareyekê."
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Kurdish
+;By Rêzan Tovjîn
+;Updated by Erdal Ronahî (erdal.ronahi@gmail.com)
+
+!insertmacro LANGFILE "Kurdish" "Kurdî"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Dazanîn"
+!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
+ !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î nîþanekê bibe ser pareyekê."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Latvian.nsh b/Contrib/Language files/Latvian.nsh
index fb8c4c5..16e1053 100755
--- a/Contrib/Language files/Latvian.nsh
+++ b/Contrib/Language files/Latvian.nsh
@@ -1,122 +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"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Apraksts"
-!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
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Novietojiet peles kursoru uz komponenta, lai tiktu parâdîts tâ apraksts."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Novietojiet peles kursoru uz komponenta, lai tiktu parâdîts tâ apraksts."
- !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_UNDIRECTORYSPAGE
- ${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
+;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"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Apraksts"
+!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
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Novietojiet peles kursoru uz komponenta, lai tiktu parâdîts tâ apraksts."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Novietojiet peles kursoru uz komponenta, lai tiktu parâdîts tâ apraksts."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Lithuanian.nsh b/Contrib/Language files/Lithuanian.nsh
index dcc331a..28e4a90 100755
--- a/Contrib/Language files/Lithuanian.nsh
+++ b/Contrib/Language files/Lithuanian.nsh
@@ -1,121 +1,121 @@
-;Language: Lithuanian (1063)
-;By Vytautas Krivickas (Vytautas). Updated by Danielius Scepanskis (Daan daniel@takas.lt) 2004.01.09
-
-!insertmacro LANGFILE "Lithuanian" "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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Paaiðkinimas"
-!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
- !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 "Uþveskite pelës þymeklá ant komponento 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_UNDIRECTORYSPAGE
- ${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
+;Language: Lithuanian (1063)
+;By Vytautas Krivickas (Vytautas). Updated by Danielius Scepanskis (Daan daniel@takas.lt) 2004.01.09
+
+!insertmacro LANGFILE "Lithuanian" "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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Paaiðkinimas"
+!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
+ !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 "Uþveskite pelës þymeklá ant komponento 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Luxembourgish.nsh b/Contrib/Language files/Luxembourgish.nsh
index 639ab5a..9efe7f9 100755
--- a/Contrib/Language files/Luxembourgish.nsh
+++ b/Contrib/Language files/Luxembourgish.nsh
@@ -1,121 +1,121 @@
-;Language: Luxembourgish (1031)
-;By Snowloard, changes by Philo
-
-!insertmacro LANGFILE "Luxembourgish" "Lëtzebuergesch"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschreiwung"
-!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
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Hal den Mausfeil iwwer eng Komponent, fir d'Beschreiwung dervun ze gesinn."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Hal den Mausfeil iwwer eng Komponent, fir d'Beschreiwung dervun ze gesinn."
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Luxembourgish (1031)
+;By Snowloard, changes by Philo
+
+!insertmacro LANGFILE "Luxembourgish" "Lëtzebuergesch"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beschreiwung"
+!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
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Hal den Mausfeil iwwer eng Komponent, fir d'Beschreiwung dervun ze gesinn."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Hal den Mausfeil iwwer eng Komponent, fir d'Beschreiwung dervun ze gesinn."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Macedonian.nsh b/Contrib/Language files/Macedonian.nsh
index bcc7797..7f59b0a 100755
--- a/Contrib/Language files/Macedonian.nsh
+++ b/Contrib/Language files/Macedonian.nsh
@@ -1,121 +1,121 @@
-;Language: Macedonian (1071)
-;By Sasko Zdravkin [wingman2083@yahoo.com]
-
-!insertmacro LANGFILE "Macedonian" "Macedonian"
-
-!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) ñàêàòå äà ñå èíñòàëèðààò."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îá¼àñíåíèå"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Îäáåðåòå Êîìïîíåíòè"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Îäáåðåòå êîè ðàáîòè îä $(^NameDA) ñàêàòå äà ñå äåèíñòàëèðààò."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Macedonian (1071)
+;By Sasko Zdravkin [wingman2083@yahoo.com]
+
+!insertmacro LANGFILE "Macedonian" "Macedonian"
+
+!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) ñàêàòå äà ñå èíñòàëèðààò."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îá¼àñíåíèå"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Îäáåðåòå Êîìïîíåíòè"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Îäáåðåòå êîè ðàáîòè îä $(^NameDA) ñàêàòå äà ñå äåèíñòàëèðààò."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Malay.nsh b/Contrib/Language files/Malay.nsh
index 4911452..d827e77 100755
--- a/Contrib/Language files/Malay.nsh
+++ b/Contrib/Language files/Malay.nsh
@@ -1,121 +1,121 @@
-;Language: Malay (1086)
-;By muhammadazwa@yahoo.com
-
-!insertmacro LANGFILE "Malay" "Malay"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Penerangan"
-!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
- !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 "Alihkan tetikus ke 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_UNDIRECTORYSPAGE
- ${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
+;Language: Malay (1086)
+;By muhammadazwa@yahoo.com
+
+!insertmacro LANGFILE "Malay" "Malay"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Penerangan"
+!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
+ !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 "Alihkan tetikus ke 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Mongolian.nsh b/Contrib/Language files/Mongolian.nsh
index 40ff03e..9328f4c 100755
--- a/Contrib/Language files/Mongolian.nsh
+++ b/Contrib/Language files/Mongolian.nsh
@@ -1,121 +1,121 @@
-;Language: Mongolian (1104)
-;By Bayarsaikhan Enkhtaivan
-
-!insertmacro LANGFILE "Mongolian" "Mongolian"
-
-!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)-ûã ñóóëãàõàä øààðäàãäàõ õýñãèéã ñîíãîíî óó."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Òàéëáàð"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Íýãäëèéã ñîíãîõ"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA)-ûí óñòãàõ øààðäëàãàòàé íýãäëèéã ñîíãîõ."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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 "Do not create shortcuts"
-!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
+;Language: Mongolian (1104)
+;By Bayarsaikhan Enkhtaivan
+
+!insertmacro LANGFILE "Mongolian" "Mongolian"
+
+!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)-ûã ñóóëãàõàä øààðäàãäàõ õýñãèéã ñîíãîíî óó."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Òàéëáàð"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Íýãäëèéã ñîíãîõ"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "$(^NameDA)-ûí óñòãàõ øààðäëàãàòàé íýãäëèéã ñîíãîõ."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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 "Do not create shortcuts"
+!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/Contrib/Language files/Norwegian.nsh b/Contrib/Language files/Norwegian.nsh
index 2ca3160..5f3c379 100755
--- a/Contrib/Language files/Norwegian.nsh
+++ b/Contrib/Language files/Norwegian.nsh
@@ -1,121 +1,121 @@
-;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" "Norwegian"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivelse"
-!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
- !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 "Beveg musen over komponentene 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_UNDIRECTORYSPAGE
- ${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
+;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" "Norwegian"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivelse"
+!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
+ !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 "Beveg musen over komponentene 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/NorwegianNynorsk.nsh b/Contrib/Language files/NorwegianNynorsk.nsh
index a7a9014..5203031 100755
--- a/Contrib/Language files/NorwegianNynorsk.nsh
+++ b/Contrib/Language files/NorwegianNynorsk.nsh
@@ -1,121 +1,121 @@
-;Language: Norwegian nynorsk (2068)
-;By Vebjoern Sture and Håvard Mork (www.firefox.no)
-
-!insertmacro LANGFILE "NorwegianNynorsk" "Norwegian 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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskriving"
-!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
- !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 "Beveg musa over komponentene 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_UNDIRECTORYSPAGE
- ${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
+;Language: Norwegian nynorsk (2068)
+;By Vebjoern Sture and Håvard Mork (www.firefox.no)
+
+!insertmacro LANGFILE "NorwegianNynorsk" "Norwegian 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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskriving"
+!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
+ !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 "Beveg musa over komponentene 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/Polish.nsh b/Contrib/Language files/Polish.nsh
index bbbf47e..008351c 100755
--- a/Contrib/Language files/Polish.nsh
+++ b/Contrib/Language files/Polish.nsh
@@ -1,122 +1,122 @@
-;Language: Polish (1045)
-;By Piotr Murawski & Rafa³ Lampe; www.lomsel.prv.pl mailto:ppiter@skrzynka.pl
-;Updated by cube, kubad(at)poczta.onet.pl and SYSTEMsoft Group, http://www.systemsoft-group.com
-
-!insertmacro LANGFILE "Polish" "Polski"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Witamy w kreatorze instalacji programu $(^NameDA)"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ten kreator pomo¿e Ci zainstalowaæ program $(^NameDA).$\r$\n$\r$\nZalecane jest zamkniêcie wszystkich uruchomionych programów przed rozpoczêciem instalacji. To pozwoli na uaktualnienie niezbêdnych plików systemowych bez koniecznoœci ponownego uruchomienia 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 poprowadzi Ciê przez proces deinstalacji $(^NameDA).$\r$\n$\r$\nPrzed rozpoczêciem deinstalacji programu, upewnij siê, czy $(^NameDA) NIE jest w³aœnie uruchomiony.$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "Umowa licencyjna"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Przed instalacj¹ programu $(^NameDA) zapoznaj siê z warunkami licencji."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Je¿eli akceptujesz warunki umowy, wybierz Zgadzam siê, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby zainstalowaæ $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Je¿eli akceptujesz warunki umowy, zaznacz pole wyboru poni¿ej, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby zainstalowaæ $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Je¿eli akceptujesz warunki umowy, wybierz pierwsz¹ opcjê poni¿ej, 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¹ programu $(^NameDA) zapoznaj siê z warunkami licencji."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Je¿eli akceptujesz warunki umowy, wybierz Zgadzam siê, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby odinstalowaæ $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Je¿eli akceptujesz warunki umowy, zaznacz pole wyboru poni¿ej, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby odinstalowaæ $(^NameDA). $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Je¿eli akceptujesz warunki umowy, wybierz pierwsz¹ opcjê poni¿ej, 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æ resztê umowy."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Wybierz komponenty"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Wybierz komponenty programu $(^NameDA), które chcesz zainstalowaæ."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
-!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
- !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 "Przesuñ kursor myszy nad 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 ma byæ zainstalowany $(^NameDA)."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Wybór miejsca 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æ, podczas gdy $(^NameDA) jest instalowany."
- ${LangFileString} MUI_TEXT_FINISH_TITLE "Zakoñczono"
- ${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 "Deinstalowanie"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Proszê czekaæ, $(^NameDA) jest odinstalowywany."
- ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Zakoñczono odinstalowanie"
- ${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 Zakoñcz, aby zakoñczyæ dzia³anie Kreatora."
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Twój komputer musi zostaæ ponownie uruchomiony aby zakoñczyæ instalacjê programu $(^NameDA). Czy chcesz zrobiæ to teraz?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Koñczenie pracy kreatora deinstalacyjnego $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) zosta³ odinstalowany z Twojego komputera.$\r$\n$\r$\nKliknij Zakoñcz, aby zakoñczyæ dzia³anie Kreatora."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Twój komputer musi zostaæ ponownie uruchomiony w celu zakoñczenia deinstalacji programu $(^NameDA). Czy chcesz zrobiæ to teraz?"
-!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 program $(^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 programu"
- ${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
+;Language: Polish (1045)
+;By Piotr Murawski & Rafa³ Lampe; www.lomsel.prv.pl mailto:ppiter@skrzynka.pl
+;Updated by cube, kubad(at)poczta.onet.pl and SYSTEMsoft Group, http://www.systemsoft-group.com
+
+!insertmacro LANGFILE "Polish" "Polski"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Witamy w kreatorze instalacji programu $(^NameDA)"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Ten kreator pomo¿e Ci zainstalowaæ program $(^NameDA).$\r$\n$\r$\nZalecane jest zamkniêcie wszystkich uruchomionych programów przed rozpoczêciem instalacji. To pozwoli na uaktualnienie niezbêdnych plików systemowych bez koniecznoœci ponownego uruchomienia 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 poprowadzi Ciê przez proces deinstalacji $(^NameDA).$\r$\n$\r$\nPrzed rozpoczêciem deinstalacji programu, upewnij siê, czy $(^NameDA) NIE jest w³aœnie uruchomiony.$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "Umowa licencyjna"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Przed instalacj¹ programu $(^NameDA) zapoznaj siê z warunkami licencji."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "Je¿eli akceptujesz warunki umowy, wybierz Zgadzam siê, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby zainstalowaæ $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Je¿eli akceptujesz warunki umowy, zaznacz pole wyboru poni¿ej, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby zainstalowaæ $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Je¿eli akceptujesz warunki umowy, wybierz pierwsz¹ opcjê poni¿ej, 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¹ programu $(^NameDA) zapoznaj siê z warunkami licencji."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "Je¿eli akceptujesz warunki umowy, wybierz Zgadzam siê, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby odinstalowaæ $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Je¿eli akceptujesz warunki umowy, zaznacz pole wyboru poni¿ej, aby kontynuowaæ. Musisz zaakceptowaæ warunki umowy, aby odinstalowaæ $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Je¿eli akceptujesz warunki umowy, wybierz pierwsz¹ opcjê poni¿ej, 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æ resztê umowy."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Wybierz komponenty"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Wybierz komponenty programu $(^NameDA), które chcesz zainstalowaæ."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
+!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
+ !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 "Przesuñ kursor myszy nad 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 ma byæ zainstalowany $(^NameDA)."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Wybór miejsca 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æ, podczas gdy $(^NameDA) jest instalowany."
+ ${LangFileString} MUI_TEXT_FINISH_TITLE "Zakoñczono"
+ ${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 "Deinstalowanie"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Proszê czekaæ, $(^NameDA) jest odinstalowywany."
+ ${LangFileString} MUI_UNTEXT_FINISH_TITLE "Zakoñczono odinstalowanie"
+ ${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 Zakoñcz, aby zakoñczyæ dzia³anie Kreatora."
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Twój komputer musi zostaæ ponownie uruchomiony aby zakoñczyæ instalacjê programu $(^NameDA). Czy chcesz zrobiæ to teraz?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Koñczenie pracy kreatora deinstalacyjnego $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) zosta³ odinstalowany z Twojego komputera.$\r$\n$\r$\nKliknij Zakoñcz, aby zakoñczyæ dzia³anie Kreatora."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Twój komputer musi zostaæ ponownie uruchomiony w celu zakoñczenia deinstalacji programu $(^NameDA). Czy chcesz zrobiæ to teraz?"
+!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 program $(^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 programu"
+ ${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
diff --git a/Contrib/Language files/Portuguese.nsh b/Contrib/Language files/Portuguese.nsh
index 0406f05..5637674 100755
--- a/Contrib/Language files/Portuguese.nsh
+++ b/Contrib/Language files/Portuguese.nsh
@@ -1,121 +1,121 @@
-;Language: Portuguese (2070)
-;By Ramon <ramon@netcabo.pt>
-
-!insertmacro LANGFILE "Portuguese" "Português"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição"
-!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
- !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 "Posicione o rato sobre 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_UNDIRECTORYSPAGE
- ${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
+;Language: Portuguese (2070)
+;By Ramon <ramon@netcabo.pt>
+
+!insertmacro LANGFILE "Portuguese" "Português"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição"
+!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
+ !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 "Posicione o rato sobre 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/PortugueseBR.nsh b/Contrib/Language files/PortugueseBR.nsh
index 5d06aa3..7ee989c 100755
--- a/Contrib/Language files/PortugueseBR.nsh
+++ b/Contrib/Language files/PortugueseBR.nsh
@@ -1,121 +1,121 @@
-;Language: Brazilian Portuguese (1046)
-;By Diego Marcos <jump@osite.com.br>
-
-!insertmacro LANGFILE "PortugueseBR" "Português (do Brasil)"
-
-!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 o guiará durante a instalação do $(^NameDA).$\r$\n$\r$\nÉ recomendado que você feche todas as outras aplicações antes de iniciar a Instalação. Isto possibilitará fazer update dos arquivos do sistema sem 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 o guiará durante a desinstalação do $(^NameDA).$\r$\n$\r$\nAntes de iniciar a desinstalação, tenha certeza que o $(^NameDA) não está sendo executado.$\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 você aceitar os termos da licença, clique em Concordo para continuar. Você deve aceitar o contrato para instalar o $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceitar os termos da licença, clique na caixa de seleção abaixo. Você deve aceitar o contrato para instalar o $(^NameDA). $_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você 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 você aceitar os termos da licença, clique em Concordo para continuar. Você deve aceitar o contrato para desinstalar o $(^NameDA)."
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceitar os termos da licença, clique na caixa de seleção abaixo. Você deve aceitar o contrato para desinstalar o $(^NameDA). $_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você 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 características do $(^NameDA) que você deseja instalar."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Escolher Componentes"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Escolha quais qualidades do $(^NameDA) quer desinstalar."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Passe o ponteiro do mouse sobre um componente para ver sua descrição."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Passe o ponteiro do mouse sobre um componente para ver 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_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Escolha do Local da Desinstalação"
- ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Escolha a pasta na qual deseja 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 Completada"
- ${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 Completada"
- ${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 "Seu computador deve ser reiniciado para concluír a instalação do $(^NameDA). Você quer reiniciar agora?"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Concluindo o Assistente de Desinstalação do $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) foi desinstalado do seu computador.$\r$\n$\r$\nClique em Terminar para fechar este assistente."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Seu computador tem que ser reiniciado para completar a desinstalação do $(^NameDA). 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 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 o $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Remover o $(^NameDA) do seu computador."
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "Você deseja realmente finalizar a instalação do $(^Name)?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Você deseja realmente finalizar a desinstalação do $(^Name)?"
-!endif
+;Language: Brazilian Portuguese (1046)
+;By Diego Marcos <jump@osite.com.br>
+
+!insertmacro LANGFILE "PortugueseBR" "Português (do Brasil)"
+
+!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 o guiará durante a instalação do $(^NameDA).$\r$\n$\r$\nÉ recomendado que você feche todas as outras aplicações antes de iniciar a Instalação. Isto possibilitará fazer update dos arquivos do sistema sem 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 o guiará durante a desinstalação do $(^NameDA).$\r$\n$\r$\nAntes de iniciar a desinstalação, tenha certeza que o $(^NameDA) não está sendo executado.$\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 você aceitar os termos da licença, clique em Concordo para continuar. Você deve aceitar o contrato para instalar o $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceitar os termos da licença, clique na caixa de seleção abaixo. Você deve aceitar o contrato para instalar o $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você 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 você aceitar os termos da licença, clique em Concordo para continuar. Você deve aceitar o contrato para desinstalar o $(^NameDA)."
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceitar os termos da licença, clique na caixa de seleção abaixo. Você deve aceitar o contrato para desinstalar o $(^NameDA). $_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você 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 características do $(^NameDA) que você deseja instalar."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Escolher Componentes"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Escolha quais qualidades do $(^NameDA) quer desinstalar."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Passe o ponteiro do mouse sobre um componente para ver sua descrição."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Passe o ponteiro do mouse sobre um componente para ver 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_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Escolha do Local da Desinstalação"
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Escolha a pasta na qual deseja 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 Completada"
+ ${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 Completada"
+ ${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 "Seu computador deve ser reiniciado para concluír a instalação do $(^NameDA). Você quer reiniciar agora?"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Concluindo o Assistente de Desinstalação do $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) foi desinstalado do seu computador.$\r$\n$\r$\nClique em Terminar para fechar este assistente."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Seu computador tem que ser reiniciado para completar a desinstalação do $(^NameDA). 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 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 o $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Remover o $(^NameDA) do seu computador."
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "Você deseja realmente finalizar a instalação do $(^Name)?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Você deseja realmente finalizar a desinstalação do $(^Name)?"
+!endif
diff --git a/Contrib/Language files/Romanian.nsh b/Contrib/Language files/Romanian.nsh
index 2d218cd..12cb53d 100755
--- a/Contrib/Language files/Romanian.nsh
+++ b/Contrib/Language files/Romanian.nsh
@@ -1,130 +1,130 @@
-;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 appropiate "Dezinstaleazã"
-; - Misc language tweaks
-!insertmacro LANGFILE "Romanian" "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_WELCOMEPAGE | MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_BUTTONTEXT_FINISH "&Terminare"
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descriere"
-!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
- !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
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Aºezaþi mouse-ul deasupra fiecãrei componente pentru a vizualiza descrierea acesteia."
- !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_UNDIRECTORYSPAGE
- ${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ã)."
-!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
+;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 appropiate "Dezinstaleazã"
+; - Misc language tweaks
+!insertmacro LANGFILE "Romanian" "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_WELCOMEPAGE | MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "&Terminare"
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descriere"
+!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
+ !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
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Aºezaþi mouse-ul deasupra fiecãrei componente pentru a vizualiza descrierea acesteia."
+ !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_UNDIRECTORYSPAGE
+ ${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ã)."
+!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/Contrib/Language files/Russian.nsh b/Contrib/Language files/Russian.nsh
index 9557c82..3fcf738 100755
--- a/Contrib/Language files/Russian.nsh
+++ b/Contrib/Language files/Russian.nsh
@@ -1,121 +1,121 @@
-;Language: Russian (1049)
-;Translation updated by Dmitry Yerokhin [erodim@mail.ru] (050424)
-
-!insertmacro LANGFILE "Russian" "Russian"
-
-!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), êîòîðûå âû õîòèòå óñòàíîâèòü."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñàíèå"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Êîìïîíåíòû ïðîãðàììû"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Âûáåðèòå êîìïîíåíòû $(^NameDA), êîòîðûå âû õîòèòå óäàëèòü."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Russian (1049)
+;Translation updated by Dmitry Yerokhin [erodim@mail.ru] (050424)
+
+!insertmacro LANGFILE "Russian" "Russian"
+
+!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), êîòîðûå âû õîòèòå óñòàíîâèòü."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñàíèå"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Êîìïîíåíòû ïðîãðàììû"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Âûáåðèòå êîìïîíåíòû $(^NameDA), êîòîðûå âû õîòèòå óäàëèòü."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Serbian.nsh b/Contrib/Language files/Serbian.nsh
index 2114f93..73086b2 100755
--- a/Contrib/Language files/Serbian.nsh
+++ b/Contrib/Language files/Serbian.nsh
@@ -1,121 +1,121 @@
-;Language: Serbian (3098)
-;Translation by Ñðàí Îáóžèíà <obucina@srpskijezik.edu.yu>
-
-!insertmacro LANGFILE "Serbian" "Serbian 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 "Èçàáåðèòå êîìïîíåíòå çà èíñòàëàöè¼ó. Èíñòàëèðà¼ó ñå ñàìî îçíà÷åíå êîìïîíåíòå."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñ"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Èçáîð êîìïîíåíòè çà äåèíñòàëàöè¼ó"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Èçàáåðèòå êîìïîíåíòå çà äåèíñòàëàöè¼ó. Äåèíñòàëèðà¼ó ñå ñàìî îçíà÷åíå êîìïîíåíòå."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Serbian (3098)
+;Translation by Ñðàí Îáóžèíà <obucina@srpskijezik.edu.yu>
+
+!insertmacro LANGFILE "Serbian" "Serbian 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 "Èçàáåðèòå êîìïîíåíòå çà èíñòàëàöè¼ó. Èíñòàëèðà¼ó ñå ñàìî îçíà÷åíå êîìïîíåíòå."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñ"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Èçáîð êîìïîíåíòè çà äåèíñòàëàöè¼ó"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Èçàáåðèòå êîìïîíåíòå çà äåèíñòàëàöè¼ó. Äåèíñòàëèðà¼ó ñå ñàìî îçíà÷åíå êîìïîíåíòå."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/SerbianLatin.nsh b/Contrib/Language files/SerbianLatin.nsh
index 257906f..0e0af86 100755
--- a/Contrib/Language files/SerbianLatin.nsh
+++ b/Contrib/Language files/SerbianLatin.nsh
@@ -1,121 +1,121 @@
-;Language: Serbian Latin (2074)
-;Translation by Srðan Obuæina <obucina@srpskijezik.edu.yu>
-
-!insertmacro LANGFILE "SerbianLatin" "Serbian Latin"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
-!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
- !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 "Preðite kursorom miša preko imena komponente 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_UNDIRECTORYSPAGE
- ${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
+;Language: Serbian Latin (2074)
+;Translation by Srðan Obuæina <obucina@srpskijezik.edu.yu>
+
+!insertmacro LANGFILE "SerbianLatin" "Serbian Latin"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
+!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
+ !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 "Preðite kursorom miša preko imena komponente 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/SimpChinese.nsh b/Contrib/Language files/SimpChinese.nsh
index 7066981..9160ebd 100755
--- a/Contrib/Language files/SimpChinese.nsh
+++ b/Contrib/Language files/SimpChinese.nsh
@@ -1,123 +1,123 @@
-;Language: 'Chinese (Simplified)' (2052)
-;Translator: Kii Ali <kiiali@cpatch.org>
-;Revision date: 2004-12-15
-;Verified by: QFox <qfox99@gmail.com>
-
-!insertmacro LANGFILE "SimpChinese" "Chinese (Simplified)"
-
-!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)] ¼ÌÐø°²×°¡£Èç¹ûÄãÑ¡¶¨ [È¡Ïû(C)] £¬°²×°³ÌÐò½«»á¹Ø±Õ¡£±ØÐë½ÓÊÜЭÒé²ÅÄÜ°²×°¡°$(^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)¡±µÄÄÇЩ¹¦ÄÜ¡£"
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÃèÊö"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Ñ¡¶¨×é¼þ"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Ñ¡¶¨¡°$(^NameDA)¡±µ±ÖÐÄãÏëҪжÔصŦÄÜ¡£"
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: 'Chinese (Simplified)' (2052)
+;Translator: Kii Ali <kiiali@cpatch.org>
+;Revision date: 2004-12-15
+;Verified by: QFox <qfox99@gmail.com>
+
+!insertmacro LANGFILE "SimpChinese" "Chinese (Simplified)"
+
+!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)] ¼ÌÐø°²×°¡£Èç¹ûÄãÑ¡¶¨ [È¡Ïû(C)] £¬°²×°³ÌÐò½«»á¹Ø±Õ¡£±ØÐë½ÓÊÜЭÒé²ÅÄÜ°²×°¡°$(^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)¡±µÄÄÇЩ¹¦ÄÜ¡£"
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÃèÊö"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Ñ¡¶¨×é¼þ"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Ñ¡¶¨¡°$(^NameDA)¡±µ±ÖÐÄãÏëҪжÔصŦÄÜ¡£"
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/Slovak.nsh b/Contrib/Language files/Slovak.nsh
index 73c0592..401c022 100755
--- a/Contrib/Language files/Slovak.nsh
+++ b/Contrib/Language files/Slovak.nsh
@@ -1,121 +1,121 @@
-;Language: Slovak (1051)
-;Translated by: Kypec (peter.dzugas@mahe.sk), edited by: Marián Hikaník (podnety@mojepreklady.net)
-
-!insertmacro LANGFILE "Slovak" "Slovensky"
-
-!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ácií. Ak chcete v inštalácií 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ácií 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ácií 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štalovávaní 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štalovávaní 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štalovávaní programu $(^NameDA). $_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Stlaèením klávesy 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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Popis"
-!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
- !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 "Pri prejdení kurzorom myši nad názvom súèasti sa zobrazí jej 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_UNDIRECTORYSPAGE
- ${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 zložku v ponuke Štart, kam sa umiestnia odkazy na program $(^NameDA)."
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vyberte si zložku v ponuke Štart, v ktorej chcete vytvori odkazy na program. Takisto môžte napísa názov pre vytvorenie novej zložky."
- ${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
+;Language: Slovak (1051)
+;Translated by: Kypec (peter.dzugas@mahe.sk), edited by: Marián Hikaník (podnety@mojepreklady.net)
+
+!insertmacro LANGFILE "Slovak" "Slovensky"
+
+!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ácií. Ak chcete v inštalácií 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ácií 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ácií 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štalovávaní 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štalovávaní 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štalovávaní programu $(^NameDA). $_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Stlaèením klávesy 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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Popis"
+!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
+ !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 "Pri prejdení kurzorom myši nad názvom súèasti sa zobrazí jej 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_UNDIRECTORYSPAGE
+ ${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 zložku v ponuke Štart, kam sa umiestnia odkazy na program $(^NameDA)."
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Vyberte si zložku v ponuke Štart, v ktorej chcete vytvori odkazy na program. Takisto môžte napísa názov pre vytvorenie novej zložky."
+ ${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
diff --git a/Contrib/Language files/Slovenian.nsh b/Contrib/Language files/Slovenian.nsh
index 16ef283..8aee939 100755
--- a/Contrib/Language files/Slovenian.nsh
+++ b/Contrib/Language files/Slovenian.nsh
@@ -1,121 +1,121 @@
-;Language: Slovenian (1060)
-;By Janez Dolinar, edited by Martin Srebotnjak - Lugos.si
-
-!insertmacro LANGFILE "Slovenian" "Slovenski jezik"
-
-!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 aplikacija $(^NameDA) ni zagnana.$\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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
-!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
- !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 "Povlecite miško nad komponento, da vidite njen opis."
- !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_UNDIRECTORYSPAGE
- ${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 aplikacija $(^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 "Aplikacija $(^NameDA) je bila namešèena 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 "Aplikacija $(^NameDA) je odstranjena iz vašega raèunalnika.$\r$\n$\r$\nKliknite Dokonèaj, da zaprete èarovnika."
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Da bi se $(^NameDA) namestitev dokonèala, morate ponovno zagnati raèunalnik. Želite zdaj ponovno zagnati raèunalnik?"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ponovni zagon"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Raèunalnik želim ponovno 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) iz 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
+;Language: Slovenian (1060)
+;By Janez Dolinar, edited by Martin Srebotnjak - Lugos.si
+
+!insertmacro LANGFILE "Slovenian" "Slovenski jezik"
+
+!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 aplikacija $(^NameDA) ni zagnana.$\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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Opis"
+!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
+ !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 "Povlecite miško nad komponento, da vidite njen opis."
+ !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_UNDIRECTORYSPAGE
+ ${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 aplikacija $(^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 "Aplikacija $(^NameDA) je bila namešèena 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 "Aplikacija $(^NameDA) je odstranjena iz vašega raèunalnika.$\r$\n$\r$\nKliknite Dokonèaj, da zaprete èarovnika."
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Da bi se $(^NameDA) namestitev dokonèala, morate ponovno zagnati raèunalnik. Želite zdaj ponovno zagnati raèunalnik?"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Ponovni zagon"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "Raèunalnik želim ponovno 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) iz 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
diff --git a/Contrib/Language files/Spanish.nsh b/Contrib/Language files/Spanish.nsh
index e9f4a18..d81feed 100755
--- a/Contrib/Language files/Spanish.nsh
+++ b/Contrib/Language files/Spanish.nsh
@@ -1,122 +1,122 @@
-;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"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción"
-!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
- !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 "Sitúe el ratón encima de 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_UNDIRECTORYSPAGE
- ${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
+;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"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción"
+!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
+ !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 "Sitúe el ratón encima de 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/SpanishInternational.nsh b/Contrib/Language files/SpanishInternational.nsh
index a3f8216..6f25650 100755
--- a/Contrib/Language files/SpanishInternational.nsh
+++ b/Contrib/Language files/SpanishInternational.nsh
@@ -1,122 +1,122 @@
-;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" "Español (Alfabetización 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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción"
-!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
- !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 "Sitúe el ratón encima de 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_UNDIRECTORYSPAGE
- ${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
+;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" "Español (Alfabetización 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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción"
+!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
+ !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 "Sitúe el ratón encima de 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/Swedish.nsh b/Contrib/Language files/Swedish.nsh
index a28ffe8..81b3a82 100755
--- a/Contrib/Language files/Swedish.nsh
+++ b/Contrib/Language files/Swedish.nsh
@@ -1,122 +1,122 @@
-;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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivning"
-!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
- !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 "Håll muspekaren över 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_UNDIRECTORYSPAGE
- ${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
+;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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Beskrivning"
+!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
+ !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 "Håll muspekaren över 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_UNDIRECTORYSPAGE
+ ${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
diff --git a/Contrib/Language files/Thai.nsh b/Contrib/Language files/Thai.nsh
index 748ceeb..6acadf3 100755
--- a/Contrib/Language files/Thai.nsh
+++ b/Contrib/Language files/Thai.nsh
@@ -1,121 +1,121 @@
-;Language: Thai (1054)
-;By SoKoOLz, TuW@nNu (asdfuae)
-
-!insertmacro LANGFILE "Thai" "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) ·Õè¤Ø³µéͧ¡ÒõԴµÑé§"
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÃÒÂÅÐàÍÕ´"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "àÅ×Í¡Êèǹ»ÃСͺ"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "àÅ×Í¡ÊÔ觷Õè¤Ø³µéͧ¡ÒÃãªé§Ò¹¨Ò¡ $(^NameDA) ·Õè¤Ø³µéͧ¡àÅÔ¡¡ÒõԴµÑé§"
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Thai (1054)
+;By SoKoOLz, TuW@nNu (asdfuae)
+
+!insertmacro LANGFILE "Thai" "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) ·Õè¤Ø³µéͧ¡ÒõԴµÑé§"
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÃÒÂÅÐàÍÕ´"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "àÅ×Í¡Êèǹ»ÃСͺ"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "àÅ×Í¡ÊÔ觷Õè¤Ø³µéͧ¡ÒÃãªé§Ò¹¨Ò¡ $(^NameDA) ·Õè¤Ø³µéͧ¡àÅÔ¡¡ÒõԴµÑé§"
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/TradChinese.nsh b/Contrib/Language files/TradChinese.nsh
index df6ae58..fd660ef 100755
--- a/Contrib/Language files/TradChinese.nsh
+++ b/Contrib/Language files/TradChinese.nsh
@@ -1,122 +1,122 @@
-;Language: 'Chinese (Traditional)' (1028)
-;Translator: Kii Ali <kiiali@cpatch.org>
-;Revision date: 2004-12-15
-
-!insertmacro LANGFILE "TradChinese" "Chinese (Traditional)"
-
-!ifdef MUI_WELCOMEPAGE
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Åwªï¨Ï¥Î $(^NameDA) ¦w¸ËºëÆF"
- ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "³o­ÓºëÆF±N«ü¤Þ§A§¹¦¨ $(^NameDA) ªº¦w¸Ë¶iµ{¡C$\r$\n$\r$\n¦b¶}©l¦w¸Ë¤§«e¡A«Øij¥ýÃö³¬¨ä¥L©Ò¦³À³¥Îµ{¦¡¡C³o±N¤¹³\\¡u¦w¸Ëµ{¦¡¡v§ó·s«ü©wªº¨t²ÎÀɮסA¦Ó¤£»Ý­n­«·s±Ò°Ê§Aªº¹q¸£¡C$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_UNWELCOMEPAGE
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Åwªï¨Ï¥Î $(^NameDA) ¸Ñ°£¦w¸ËºëÆF"
- ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "³o­ÓºëÆF±N¥þµ{«ü¤Þ§A $(^NameDA) ªº¸Ñ°£¦w¸Ë¶iµ{¡C$\r$\n$\r$\n¦b¶}©l¸Ñ°£¦w¸Ë¤§«e¡A½T»{ $(^NameDA) ¨Ã¥¼°õ¦æ·í¤¤¡C$\r$\n$\r$\n$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE
- ${LangFileString} MUI_TEXT_LICENSE_TITLE "±ÂÅv¨óij"
- ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "¦b¦w¸Ë $(^NameDA) ¤§«e¡A½ÐÀ˾\±ÂÅv±ø´Ú¡C"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U [§Ú¦P·N(I)] Ä~Äò¦w¸Ë¡C¦pªG§A¿ï¨ú [¨ú®ø(C)] ¡A¦w¸Ëµ{¦¡±N·|Ãö³¬¡C¥²¶·­n±µ¨ü¨óij¤~¯à¦w¸Ë $(^NameDA) ¡C"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U¤U¤èªº¤Ä¿ï®Ø¡C¥²¶·­n±µ¨ü¨óij¤~¯à¦w¸Ë $(^NameDA)¡C$_CLICK"
- ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A¿ï¾Ü¤U¤è²Ä¤@­Ó¿ï¶µ¡C¥²¶·­n±µ¨ü¨óij¤~¯à¦w¸Ë $(^NameDA)¡C$_CLICK"
-!endif
-
-!ifdef MUI_UNLICENSEPAGE
- ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "±ÂÅv¨óij"
- ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "¦b¸Ñ°£¦w¸Ë $(^NameDA) ¤§«e¡A½ÐÀ˾\±ÂÅv±ø´Ú¡C"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U [§Ú¦P·N(I)] Ä~Äò¸Ñ°£¦w¸Ë¡C¦pªG§A¿ï¨ú [¨ú®ø(C)] ¡A¦w¸Ëµ{¦¡±N·|Ãö³¬¡C¥²¶·­n±µ¨ü¨óij¤~¯à¸Ñ°£¦w¸Ë $(^NameDA) ¡C"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U¤U¤èªº¤Ä¿ï®Ø¡C¥²¶·­n±µ¨ü¨óij¤~¯à¸Ñ°£¦w¸Ë $(^NameDA)¡C$_CLICK"
- ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A¿ï¾Ü¤U¤è²Ä¤@­Ó¿ï¶µ¡C¥²¶·­n±µ¨ü¨óij¤~¯à¸Ñ°£¦w¸Ë $(^NameDA)¡C$_CLICK"
-!endif
-
-!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
- ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "À˾\¨óijªº¨ä¾l³¡¤À¡A½Ð«ö [PgDn] ©¹¤U±²°Ê­¶­±¡C"
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "¿ï¾Ü¤¸¥ó"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "¿ï¾Ü§A·Q­n¦w¸Ë $(^NameDA) ªº¨º¨Ç¥\¯à¡C"
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "´y­z"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "¿ï¨ú¤¸¥ó"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "¿ï¨ú $(^NameDA) ·í¤¤§A·Q­n¸Ñ°£¦w¸Ëªº¥\¯à¡C"
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "²¾°Ê§Aªº·Æ¹««ü¼Ð¨ì¤¸¥ó¤§¤W¡A«K¥i¨£¨ì¥¦ªº´y­z¡C"
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "²¾°Ê§Aªº·Æ¹««ü¼Ð¨ì¤¸¥ó¤§¤W¡A«K¥i¨£¨ì¥¦ªº´y­z¡C"
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "¿ï¨ú¦w¸Ë¦ì¸m"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "¿ï¨ú $(^NameDA) ­n¦w¸Ëªº¸ê®Æ§¨¡C"
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "¿ï¨ú¸Ñ°£¦w¸Ë¦ì¸m"
- ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "¿ï¨ú $(^NameDA) ­n¸Ñ°£¦w¸Ëªº¸ê®Æ§¨¡C"
-!endif
-
-!ifdef MUI_INSTFILESPAGE
- ${LangFileString} MUI_TEXT_INSTALLING_TITLE "¥¿¦b¦w¸Ë"
- ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) ¥¿¦b¦w¸Ë¡A½Ðµ¥­Ô¡C"
- ${LangFileString} MUI_TEXT_FINISH_TITLE "¦w¸Ë§¹¦¨"
- ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "¦w¸Ëµ{¦¡¤w¦¨¥\¦a°õ¦æ§¹¦¨¡C"
- ${LangFileString} MUI_TEXT_ABORT_TITLE "¦w¸Ë¤v¤¤¤î"
- ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "¦w¸Ëµ{¦¡¨Ã¥¼¦¨¥\¦a°õ¦æ§¹¦¨¡C"
-!endif
-
-!ifdef MUI_UNINSTFILESPAGE
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "¥¿¦b¸Ñ°£¦w¸Ë"
- ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) ¥¿¦b¸Ñ°£¦w¸Ë¡A½Ðµ¥­Ô¡C"
- ${LangFileString} MUI_UNTEXT_FINISH_TITLE "¸Ñ°£¦w¸Ë¤w§¹¦¨"
- ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "¸Ñ°£¦w¸Ëµ{¦¡¤w¦¨¥\¦a°õ¦æ§¹¦¨¡C"
- ${LangFileString} MUI_UNTEXT_ABORT_TITLE "¸Ñ°£¦w¸Ë¤w¤¤¤î"
- ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "¸Ñ°£¦w¸Ëµ{¦¡¨Ã¥¼¦¨¥\¦a°õ¦æ§¹¦¨¡C"
-!endif
-
-!ifdef MUI_FINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "¥¿¦b§¹¦¨ $(^NameDA) ¦w¸ËºëÆF"
- ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ¤w¦w¸Ë¦b§Aªº¨t²Î¡C$\r$\n«ö¤@¤U [§¹¦¨(F)] Ãö³¬¦¹ºëÆF¡C"
- ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "§Aªº¨t²Î»Ý­n­«·s±Ò°Ê¡A¥H«K§¹¦¨ $(^NameDA) ªº¦w¸Ë¡C²{¦b­n­«·s±Ò°Ê¶Ü¡H"
-!endif
-
-!ifdef MUI_UNFINISHPAGE
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "¥¿¦b§¹¦¨ $(^NameDA) ¸Ñ°£¦w¸ËºëÆF"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ¤w±q§Aªº¹q¸£¸Ñ°£¦w¸Ë¡C$\r$\n$\r$\n«ö¤@¤U [§¹¦¨] Ãö³¬³o­ÓºëÆF¡C"
- ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "¹q¸£»Ý­n­«·s±Ò°Ê¡A¥H«K§¹¦¨ $(^NameDA) ªº¸Ñ°£¦w¸Ë¡C²{¦b·Q­n­«·s±Ò°Ê¶Ü¡H"
-!endif
-
-!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
- ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "¬O¡A²{¦b­«·s±Ò°Ê(&Y)"
- ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "§_¡A§Úµy«á¦A¦Û¦æ­«·s±Ò°Ê(&N)"
- ${LangFileString} MUI_TEXT_FINISH_RUN "°õ¦æ $(^NameDA)(&R)"
- ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Åã¥Ü¡uŪ§ÚÀɮסv(&M)"
- ${LangFileString} MUI_BUTTONTEXT_FINISH "§¹¦¨(&F)"
-!endif
-
-!ifdef MUI_STARTMENUPAGE
- ${LangFileString} MUI_TEXT_STARTMENU_TITLE "¿ï¾Ü¡u¶}©l¥\¯àªí¡v¸ê®Æ§¨"
- ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "¿ï¾Ü¡u¶}©l¥\¯àªí¡v¸ê®Æ§¨¡A¥Î©óµ{¦¡ªº±¶®|¡C"
- ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "¿ï¾Ü¡u¶}©l¥\¯àªí¡v¸ê®Æ§¨¡A¥H«K«Ø¥ßµ{¦¡ªº±¶®|¡C§A¤]¥i¥H¿é¤J¦WºÙ¡A«Ø¥ß·s¸ê®Æ§¨¡C"
- ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "¤£­n«Ø¥ß±¶®|(&N)"
-!endif
-
-!ifdef MUI_UNCONFIRMPAGE
- ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "¸Ñ°£¦w¸Ë $(^NameDA)"
- ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "±q§Aªº¹q¸£¸Ñ°£¦w¸Ë $(^NameDA) ¡C"
-!endif
-
-!ifdef MUI_ABORTWARNING
- ${LangFileString} MUI_TEXT_ABORTWARNING "§A½T©w­nÂ÷¶} $(^Name) ¦w¸Ëµ{¦¡¡H"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "§A½T©w­nÂ÷¶} $(^Name) ¸Ñ°£¦w¸Ë¶Ü¡H"
-!endif
+;Language: 'Chinese (Traditional)' (1028)
+;Translator: Kii Ali <kiiali@cpatch.org>
+;Revision date: 2004-12-15
+
+!insertmacro LANGFILE "TradChinese" "Chinese (Traditional)"
+
+!ifdef MUI_WELCOMEPAGE
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Åwªï¨Ï¥Î $(^NameDA) ¦w¸ËºëÆF"
+ ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "³o­ÓºëÆF±N«ü¤Þ§A§¹¦¨ $(^NameDA) ªº¦w¸Ë¶iµ{¡C$\r$\n$\r$\n¦b¶}©l¦w¸Ë¤§«e¡A«Øij¥ýÃö³¬¨ä¥L©Ò¦³À³¥Îµ{¦¡¡C³o±N¤¹³\\¡u¦w¸Ëµ{¦¡¡v§ó·s«ü©wªº¨t²ÎÀɮסA¦Ó¤£»Ý­n­«·s±Ò°Ê§Aªº¹q¸£¡C$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_UNWELCOMEPAGE
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Åwªï¨Ï¥Î $(^NameDA) ¸Ñ°£¦w¸ËºëÆF"
+ ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "³o­ÓºëÆF±N¥þµ{«ü¤Þ§A $(^NameDA) ªº¸Ñ°£¦w¸Ë¶iµ{¡C$\r$\n$\r$\n¦b¶}©l¸Ñ°£¦w¸Ë¤§«e¡A½T»{ $(^NameDA) ¨Ã¥¼°õ¦æ·í¤¤¡C$\r$\n$\r$\n$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE
+ ${LangFileString} MUI_TEXT_LICENSE_TITLE "±ÂÅv¨óij"
+ ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "¦b¦w¸Ë $(^NameDA) ¤§«e¡A½ÐÀ˾\±ÂÅv±ø´Ú¡C"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U [§Ú¦P·N(I)] Ä~Äò¦w¸Ë¡C¦pªG§A¿ï¨ú [¨ú®ø(C)] ¡A¦w¸Ëµ{¦¡±N·|Ãö³¬¡C¥²¶·­n±µ¨ü¨óij¤~¯à¦w¸Ë $(^NameDA) ¡C"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U¤U¤èªº¤Ä¿ï®Ø¡C¥²¶·­n±µ¨ü¨óij¤~¯à¦w¸Ë $(^NameDA)¡C$_CLICK"
+ ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A¿ï¾Ü¤U¤è²Ä¤@­Ó¿ï¶µ¡C¥²¶·­n±µ¨ü¨óij¤~¯à¦w¸Ë $(^NameDA)¡C$_CLICK"
+!endif
+
+!ifdef MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "±ÂÅv¨óij"
+ ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "¦b¸Ñ°£¦w¸Ë $(^NameDA) ¤§«e¡A½ÐÀ˾\±ÂÅv±ø´Ú¡C"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U [§Ú¦P·N(I)] Ä~Äò¸Ñ°£¦w¸Ë¡C¦pªG§A¿ï¨ú [¨ú®ø(C)] ¡A¦w¸Ëµ{¦¡±N·|Ãö³¬¡C¥²¶·­n±µ¨ü¨óij¤~¯à¸Ñ°£¦w¸Ë $(^NameDA) ¡C"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A«ö¤@¤U¤U¤èªº¤Ä¿ï®Ø¡C¥²¶·­n±µ¨ü¨óij¤~¯à¸Ñ°£¦w¸Ë $(^NameDA)¡C$_CLICK"
+ ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "¦pªG§A±µ¨ü¨óij¤¤ªº±ø´Ú¡A¿ï¾Ü¤U¤è²Ä¤@­Ó¿ï¶µ¡C¥²¶·­n±µ¨ü¨óij¤~¯à¸Ñ°£¦w¸Ë $(^NameDA)¡C$_CLICK"
+!endif
+
+!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
+ ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "À˾\¨óijªº¨ä¾l³¡¤À¡A½Ð«ö [PgDn] ©¹¤U±²°Ê­¶­±¡C"
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "¿ï¾Ü¤¸¥ó"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "¿ï¾Ü§A·Q­n¦w¸Ë $(^NameDA) ªº¨º¨Ç¥\¯à¡C"
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "´y­z"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "¿ï¨ú¤¸¥ó"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "¿ï¨ú $(^NameDA) ·í¤¤§A·Q­n¸Ñ°£¦w¸Ëªº¥\¯à¡C"
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "²¾°Ê§Aªº·Æ¹««ü¼Ð¨ì¤¸¥ó¤§¤W¡A«K¥i¨£¨ì¥¦ªº´y­z¡C"
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "²¾°Ê§Aªº·Æ¹««ü¼Ð¨ì¤¸¥ó¤§¤W¡A«K¥i¨£¨ì¥¦ªº´y­z¡C"
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "¿ï¨ú¦w¸Ë¦ì¸m"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "¿ï¨ú $(^NameDA) ­n¦w¸Ëªº¸ê®Æ§¨¡C"
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "¿ï¨ú¸Ñ°£¦w¸Ë¦ì¸m"
+ ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "¿ï¨ú $(^NameDA) ­n¸Ñ°£¦w¸Ëªº¸ê®Æ§¨¡C"
+!endif
+
+!ifdef MUI_INSTFILESPAGE
+ ${LangFileString} MUI_TEXT_INSTALLING_TITLE "¥¿¦b¦w¸Ë"
+ ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA) ¥¿¦b¦w¸Ë¡A½Ðµ¥­Ô¡C"
+ ${LangFileString} MUI_TEXT_FINISH_TITLE "¦w¸Ë§¹¦¨"
+ ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "¦w¸Ëµ{¦¡¤w¦¨¥\¦a°õ¦æ§¹¦¨¡C"
+ ${LangFileString} MUI_TEXT_ABORT_TITLE "¦w¸Ë¤v¤¤¤î"
+ ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "¦w¸Ëµ{¦¡¨Ã¥¼¦¨¥\¦a°õ¦æ§¹¦¨¡C"
+!endif
+
+!ifdef MUI_UNINSTFILESPAGE
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "¥¿¦b¸Ñ°£¦w¸Ë"
+ ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "$(^NameDA) ¥¿¦b¸Ñ°£¦w¸Ë¡A½Ðµ¥­Ô¡C"
+ ${LangFileString} MUI_UNTEXT_FINISH_TITLE "¸Ñ°£¦w¸Ë¤w§¹¦¨"
+ ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "¸Ñ°£¦w¸Ëµ{¦¡¤w¦¨¥\¦a°õ¦æ§¹¦¨¡C"
+ ${LangFileString} MUI_UNTEXT_ABORT_TITLE "¸Ñ°£¦w¸Ë¤w¤¤¤î"
+ ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "¸Ñ°£¦w¸Ëµ{¦¡¨Ã¥¼¦¨¥\¦a°õ¦æ§¹¦¨¡C"
+!endif
+
+!ifdef MUI_FINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "¥¿¦b§¹¦¨ $(^NameDA) ¦w¸ËºëÆF"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ¤w¦w¸Ë¦b§Aªº¨t²Î¡C$\r$\n«ö¤@¤U [§¹¦¨(F)] Ãö³¬¦¹ºëÆF¡C"
+ ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "§Aªº¨t²Î»Ý­n­«·s±Ò°Ê¡A¥H«K§¹¦¨ $(^NameDA) ªº¦w¸Ë¡C²{¦b­n­«·s±Ò°Ê¶Ü¡H"
+!endif
+
+!ifdef MUI_UNFINISHPAGE
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "¥¿¦b§¹¦¨ $(^NameDA) ¸Ñ°£¦w¸ËºëÆF"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ¤w±q§Aªº¹q¸£¸Ñ°£¦w¸Ë¡C$\r$\n$\r$\n«ö¤@¤U [§¹¦¨] Ãö³¬³o­ÓºëÆF¡C"
+ ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "¹q¸£»Ý­n­«·s±Ò°Ê¡A¥H«K§¹¦¨ $(^NameDA) ªº¸Ñ°£¦w¸Ë¡C²{¦b·Q­n­«·s±Ò°Ê¶Ü¡H"
+!endif
+
+!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "¬O¡A²{¦b­«·s±Ò°Ê(&Y)"
+ ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "§_¡A§Úµy«á¦A¦Û¦æ­«·s±Ò°Ê(&N)"
+ ${LangFileString} MUI_TEXT_FINISH_RUN "°õ¦æ $(^NameDA)(&R)"
+ ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "Åã¥Ü¡uŪ§ÚÀɮסv(&M)"
+ ${LangFileString} MUI_BUTTONTEXT_FINISH "§¹¦¨(&F)"
+!endif
+
+!ifdef MUI_STARTMENUPAGE
+ ${LangFileString} MUI_TEXT_STARTMENU_TITLE "¿ï¾Ü¡u¶}©l¥\¯àªí¡v¸ê®Æ§¨"
+ ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "¿ï¾Ü¡u¶}©l¥\¯àªí¡v¸ê®Æ§¨¡A¥Î©óµ{¦¡ªº±¶®|¡C"
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "¿ï¾Ü¡u¶}©l¥\¯àªí¡v¸ê®Æ§¨¡A¥H«K«Ø¥ßµ{¦¡ªº±¶®|¡C§A¤]¥i¥H¿é¤J¦WºÙ¡A«Ø¥ß·s¸ê®Æ§¨¡C"
+ ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "¤£­n«Ø¥ß±¶®|(&N)"
+!endif
+
+!ifdef MUI_UNCONFIRMPAGE
+ ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "¸Ñ°£¦w¸Ë $(^NameDA)"
+ ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "±q§Aªº¹q¸£¸Ñ°£¦w¸Ë $(^NameDA) ¡C"
+!endif
+
+!ifdef MUI_ABORTWARNING
+ ${LangFileString} MUI_TEXT_ABORTWARNING "§A½T©w­nÂ÷¶} $(^Name) ¦w¸Ëµ{¦¡¡H"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "§A½T©w­nÂ÷¶} $(^Name) ¸Ñ°£¦w¸Ë¶Ü¡H"
+!endif
diff --git a/Contrib/Language files/Turkish.nsh b/Contrib/Language files/Turkish.nsh
index e699c66..4e88351 100755
--- a/Contrib/Language files/Turkish.nsh
+++ b/Contrib/Language files/Turkish.nsh
@@ -1,122 +1,122 @@
-;Language: Turkish (1055)
-;By Çagatay Dilsiz(Chagy)
-;Updated by Fatih BOY (fatih_boy@yahoo.com)
-
-!insertmacro LANGFILE "Turkish" "Türkçe"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Açýklama"
-!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
- !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
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bileþenlerin açýklamalarýný görmek için imleci bileþen üzerine götürün."
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Turkish (1055)
+;By Çagatay Dilsiz(Chagy)
+;Updated by Fatih BOY (fatih_boy@yahoo.com)
+
+!insertmacro LANGFILE "Turkish" "Türkçe"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Açýklama"
+!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
+ !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
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Bileþenlerin açýklamalarýný görmek için imleci bileþen üzerine götürün."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Ukrainian.nsh b/Contrib/Language files/Ukrainian.nsh
index add5f8f..e29e0cb 100755
--- a/Contrib/Language files/Ukrainian.nsh
+++ b/Contrib/Language files/Ukrainian.nsh
@@ -1,122 +1,122 @@
-;Language: Ukrainian (1058)
-;By Yuri Holubow, http://www.Nash-Soft.com
-;Correct by Osidach Vitaly (Vit_Os2)
-
-!insertmacro LANGFILE "Ukrainian" "Ukrainian"
-
-!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 óìîâè Óãîäè, íàòèñíiòü íà êíîïêó Çãîäåí. Âè ïîâèíí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 óìîâè Óãîäè, íàòèñíiòü íà êíîïêó Çãîäåí. Âè ïîâèííi ïðèéíÿòè óìîâè Óãîäè äëÿ âèäàëåííÿ $(^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 "Íàòèñíiòü PageDown ùîá ïåðåì³ñòèòèñü âíèç óãîäè."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE
- ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Îáåð³òü êîìïîíåíòè"
- ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Îáåð³òü êîìïîíåíòè $(^NameDA) ÿêi Âè áàæàºòå âñòàíîâèòè."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñ"
-!endif
-
-!ifdef MUI_UNCOMPONENTSPAGE
- ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Êîìïîíåíòè ïðîãðàìè"
- ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Îáåð³òü ÿê³ êîìïîíåíòè $(^NameDA) Âè áàæàºòå âèäàëèòè."
-!endif
-
-!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
- !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ïiäâåäiòü âàøó ìèøêó äî êîìïîíåíòà, ùîá ïîáà÷èòè éîãî îïèñ."
- !else
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ïiäâåäiòü âàøó ìèøêó äî êîìïîíåíòà, ùîá ïîáà÷èòè éîãî îïèñ."
- !endif
-!endif
-
-!ifdef MUI_DIRECTORYPAGE
- ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Îáåðiòü òåêó âñòàíîâëåííÿ"
- ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Îáåðiòü òåêó äëÿ âñòàíîâëåííÿ $(^NameDA)."
-!endif
-
-!ifdef MUI_UNDIRECTORYSPAGE
- ${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 "Âñòàíîâëåííÿ óñïiøíî çàâåðøåíî."
- ${LangFileString} MUI_TEXT_ABORT_TITLE "Âñòàíîâëåííÿ ïåðåðâàíà"
- ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Âñòàíîâëåííÿ íå áóëî óñïiøíî çàâåðøåíî."
-!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 "Âè âïåâíåííi, ùî áàæàºòå ïîêèíóòè âñòàíîâëåííÿ $(^Name)?"
-!endif
-
-!ifdef MUI_UNABORTWARNING
- ${LangFileString} MUI_UNTEXT_ABORTWARNING "Âè âïåâíåíí³ ùî áàæàºòå ïîêèíóòè Ìàéñòð Âèäàëåííÿ $(^Name)?"
-!endif
+;Language: Ukrainian (1058)
+;By Yuri Holubow, http://www.Nash-Soft.com
+;Correct by Osidach Vitaly (Vit_Os2)
+
+!insertmacro LANGFILE "Ukrainian" "Ukrainian"
+
+!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 óìîâè Óãîäè, íàòèñíiòü íà êíîïêó Çãîäåí. Âè ïîâèíí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 óìîâè Óãîäè, íàòèñíiòü íà êíîïêó Çãîäåí. Âè ïîâèííi ïðèéíÿòè óìîâè Óãîäè äëÿ âèäàëåííÿ $(^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 "Íàòèñíiòü PageDown ùîá ïåðåì³ñòèòèñü âíèç óãîäè."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE
+ ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Îáåð³òü êîìïîíåíòè"
+ ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Îáåð³òü êîìïîíåíòè $(^NameDA) ÿêi Âè áàæàºòå âñòàíîâèòè."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Îïèñ"
+!endif
+
+!ifdef MUI_UNCOMPONENTSPAGE
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Êîìïîíåíòè ïðîãðàìè"
+ ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Îáåð³òü ÿê³ êîìïîíåíòè $(^NameDA) Âè áàæàºòå âèäàëèòè."
+!endif
+
+!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ïiäâåäiòü âàøó ìèøêó äî êîìïîíåíòà, ùîá ïîáà÷èòè éîãî îïèñ."
+ !else
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ïiäâåäiòü âàøó ìèøêó äî êîìïîíåíòà, ùîá ïîáà÷èòè éîãî îïèñ."
+ !endif
+!endif
+
+!ifdef MUI_DIRECTORYPAGE
+ ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "Îáåðiòü òåêó âñòàíîâëåííÿ"
+ ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "Îáåðiòü òåêó äëÿ âñòàíîâëåííÿ $(^NameDA)."
+!endif
+
+!ifdef MUI_UNDIRECTORYSPAGE
+ ${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 "Âñòàíîâëåííÿ óñïiøíî çàâåðøåíî."
+ ${LangFileString} MUI_TEXT_ABORT_TITLE "Âñòàíîâëåííÿ ïåðåðâàíà"
+ ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Âñòàíîâëåííÿ íå áóëî óñïiøíî çàâåðøåíî."
+!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 "Âè âïåâíåííi, ùî áàæàºòå ïîêèíóòè âñòàíîâëåííÿ $(^Name)?"
+!endif
+
+!ifdef MUI_UNABORTWARNING
+ ${LangFileString} MUI_UNTEXT_ABORTWARNING "Âè âïåâíåíí³ ùî áàæàºòå ïîêèíóòè Ìàéñòð Âèäàëåííÿ $(^Name)?"
+!endif
diff --git a/Contrib/Language files/Uzbek.nsh b/Contrib/Language files/Uzbek.nsh
index 97737d2..c61cc5a 100755
--- a/Contrib/Language files/Uzbek.nsh
+++ b/Contrib/Language files/Uzbek.nsh
@@ -1,121 +1,121 @@
-;Language: Uzbek (1091)
-;Translation updated by Emil Garipov [emil.garipov@gmail.com]
-
-!insertmacro LANGFILE "Uzbek" "Uzbek"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Tasvir"
-!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
- !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 "Sichqonchaning kursorini komponent tasvirini o'qish uchun ustiga quying."
- !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_UNDIRECTORYSPAGE
- ${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
+;Language: Uzbek (1091)
+;Translation updated by Emil Garipov [emil.garipov@gmail.com]
+
+!insertmacro LANGFILE "Uzbek" "Uzbek"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Tasvir"
+!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
+ !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 "Sichqonchaning kursorini komponent tasvirini o'qish uchun ustiga quying."
+ !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_UNDIRECTORYSPAGE
+ ${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/Contrib/Language files/Welsh.nsh b/Contrib/Language files/Welsh.nsh
index 228ef1a..df8cbc8 100755
--- a/Contrib/Language files/Welsh.nsh
+++ b/Contrib/Language files/Welsh.nsh
@@ -1,121 +1,121 @@
-;Language: Welsh (1106)
-;By Rhoslyn Prys, Meddal.com
-
-!insertmacro LANGFILE "Welsh" "Welsh"
-
-!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."
- ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Disgrifiad"
-!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
- !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 "Gosod eich llygoden dros gydran 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_UNDIRECTORYSPAGE
- ${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
+;Language: Welsh (1106)
+;By Rhoslyn Prys, Meddal.com
+
+!insertmacro LANGFILE "Welsh" "Welsh"
+
+!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."
+ ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Disgrifiad"
+!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
+ !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 "Gosod eich llygoden dros gydran 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_UNDIRECTORYSPAGE
+ ${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/Contrib/Makensisw/License.txt b/Contrib/Makensisw/License.txt
index ccb71be..f4a28bc 100755
--- a/Contrib/Makensisw/License.txt
+++ b/Contrib/Makensisw/License.txt
@@ -1,17 +1,17 @@
-Copyright (c) 2002 Robert Rainwater <rrainwater@yahoo.com>
-
-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.
+Copyright (c) 2002 Robert Rainwater <rrainwater@yahoo.com>
+
+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/Contrib/Makensisw/Readme.txt b/Contrib/Makensisw/Readme.txt
index f28b162..22e8fe8 100755
--- a/Contrib/Makensisw/Readme.txt
+++ b/Contrib/Makensisw/Readme.txt
@@ -1,214 +1,214 @@
-----------------------------------------------------
-MakeNSISW - MakeNSIS Windows Wrapper
-----------------------------------------------------
-
-
-About MakeNSISW
----------------
-MakeNSISW is a wrapper for the MakeNSIS that is distributed with
-NSIS (http://www.nullsoft.com/free/nsis/). MakeNSISW allows you
-to compile NSIS scripts using a Windows GUI interface. To install
-MakeNSISW, compile the source using Visual C++ or Mingw.
-
-
-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: Opens the Define Symbols dialog
-Ctrl+E: Edits the script
-Ctrl+F: Find text
-Ctrl+L: Load a script
-Ctrl+R: Recompiles the script
-Ctrl+T: Tests the installer
-Ctrl+W: Clear Log Window
-Alt+X: Exits the application
-F1: View Documentation
-
-
-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 sucessfull 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
-
-Copyright Information
----------------------
-Copyright (c) 2002 Robert Rainwater
-Contributors: Justin Frankel, Fritz Elfert, Amir Szekely, Sunil Kamath, 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 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.
+----------------------------------------------------
+MakeNSISW - MakeNSIS Windows Wrapper
+----------------------------------------------------
+
+
+About MakeNSISW
+---------------
+MakeNSISW is a wrapper for the MakeNSIS that is distributed with
+NSIS (http://www.nullsoft.com/free/nsis/). MakeNSISW allows you
+to compile NSIS scripts using a Windows GUI interface. To install
+MakeNSISW, compile the source using Visual C++ or Mingw.
+
+
+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: Opens the Define Symbols dialog
+Ctrl+E: Edits the script
+Ctrl+F: Find text
+Ctrl+L: Load a script
+Ctrl+R: Recompiles the script
+Ctrl+T: Tests the installer
+Ctrl+W: Clear Log Window
+Alt+X: Exits the application
+F1: View Documentation
+
+
+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 sucessfull 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
+
+Copyright Information
+---------------------
+Copyright (c) 2002 Robert Rainwater
+Contributors: Justin Frankel, Fritz Elfert, Amir Szekely, Sunil Kamath, 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 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/Contrib/Math/Math.txt b/Contrib/Math/Math.txt
index 83fdd79..0f2d030 100755
--- a/Contrib/Math/Math.txt
+++ b/Contrib/Math/Math.txt
@@ -1,199 +1,199 @@
-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 (don't forget /NOUNLOAD
-in case of multiple calls):
- Math::Script /NOUNLOAD "YourScript1"
- Math::Script /NOUNLOAD "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 shit.
-
-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 shit (like variables and functions) will be saved between calls if
-you'll use /NOUNLOAD or setpluginunload alwaysoff.
-
-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 /NOUNLOAD '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.
-
+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 (don't forget /NOUNLOAD
+in case of multiple calls):
+ Math::Script /NOUNLOAD "YourScript1"
+ Math::Script /NOUNLOAD "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 shit.
+
+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 shit (like variables and functions) will be saved between calls if
+you'll use /NOUNLOAD or setpluginunload alwaysoff.
+
+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 /NOUNLOAD '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/Contrib/Math/math.nsi b/Contrib/Math/math.nsi
index bde7616..922d64c 100755
--- a/Contrib/Math/math.nsi
+++ b/Contrib/Math/math.nsi
@@ -1,39 +1,39 @@
-; This is just an example of Math plugin
-;
-; (c) brainsucker, 2002
-; (r) BSForce
-
-Name "Math Plugin Example"
-OutFile "math.exe"
-SetPluginUnload alwaysoff
-ShowInstDetails show
-XPStyle on
-
-Section "ThisNameIsIgnoredSoWhyBother?"
- Math::Script 'SaR(s,fa,ra, i,f,r,e,p) (i=0;#{i<l(fa),e=l(f=fa[i]);r=ra[i];p=0;#{p<l(s),#[s[p,p+e-1]==f,s=(s[,p-1])+r+(s[p+e,]);p+=l(r), p++]}; i++}; s);'
- Math::Script "TQ(s) (s = s(NS); #[s[0]=='$\"',s=s[1,]]; #[s[-1]=='$\"',s=s[,-2]]; NS = s)"
- Math::Script "P(s,e, p,i) (p=-1;i=0; #{(i<l(s))&&(p<0), #[s[i,i+l(e)-1]==e, p=i]; i++}; p)"
- Math::Script "DL(s) (s=s(NS); p=P(s,'\r\n'); #[p>=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'"
-
- ; last plugin call must not have /NOUNLOAD so NSIS will be able to delete the temporary DLL
- SetPluginUnload manual
- ; do nothing
- Math::Script ""
-SectionEnd
-
-; eof
+; This is just an example of Math plugin
+;
+; (c) brainsucker, 2002
+; (r) BSForce
+
+Name "Math Plugin Example"
+OutFile "math.exe"
+SetPluginUnload alwaysoff
+ShowInstDetails show
+XPStyle on
+
+Section "ThisNameIsIgnoredSoWhyBother?"
+ Math::Script 'SaR(s,fa,ra, i,f,r,e,p) (i=0;#{i<l(fa),e=l(f=fa[i]);r=ra[i];p=0;#{p<l(s),#[s[p,p+e-1]==f,s=(s[,p-1])+r+(s[p+e,]);p+=l(r), p++]}; i++}; s);'
+ Math::Script "TQ(s) (s = s(NS); #[s[0]=='$\"',s=s[1,]]; #[s[-1]=='$\"',s=s[,-2]]; NS = s)"
+ Math::Script "P(s,e, p,i) (p=-1;i=0; #{(i<l(s))&&(p<0), #[s[i,i+l(e)-1]==e, p=i]; i++}; p)"
+ Math::Script "DL(s) (s=s(NS); p=P(s,'\r\n'); #[p>=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'"
+
+ ; last plugin call must not have /NOUNLOAD so NSIS will be able to delete the temporary DLL
+ SetPluginUnload manual
+ ; do nothing
+ Math::Script ""
+SectionEnd
+
+; eof
diff --git a/Contrib/Math/mathtest.nsi b/Contrib/Math/mathtest.nsi
index a70777b..86d76c6 100755
--- a/Contrib/Math/mathtest.nsi
+++ b/Contrib/Math/mathtest.nsi
@@ -1,171 +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 /NOUNLOAD "mtsDL()"
- pop $TEMP2
- pop $TEMP1
-FunctionEnd
-
-Function ExecuteScript
- !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 2" "State"
-
- Math::Script /NOUNLOAD "mtsTQ(s) (s = s(NS); #[s[0]=='$\"',s=s[1,]]; #[s[-1]=='$\"',s=s[,-2]]; NS = s)"
- Math::Script /NOUNLOAD "mtsP(s,e, p,i) (p=-1;i=0; #{(i<l(s))&&(p<0), #[s[i,i+l(e)-1]==e, p=i]; i++}; p)"
- Math::Script /NOUNLOAD "mtsDL(s) (s=s(NS); p=mtsP(s,'\r\n'); #[p>=0, (NS=s[p+4,]; NS=#[p>0,s[,p-1],'']), (NS='';NS=s)])"
-
- push $TEMP1
- ; remove ""
- Math::Script /NOUNLOAD "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 /NOUNLOAD "$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
+;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 /NOUNLOAD "mtsDL()"
+ pop $TEMP2
+ pop $TEMP1
+FunctionEnd
+
+Function ExecuteScript
+ !insertmacro MUI_INSTALLOPTIONS_READ $TEMP1 "MathTest.ini" "Field 2" "State"
+
+ Math::Script /NOUNLOAD "mtsTQ(s) (s = s(NS); #[s[0]=='$\"',s=s[1,]]; #[s[-1]=='$\"',s=s[,-2]]; NS = s)"
+ Math::Script /NOUNLOAD "mtsP(s,e, p,i) (p=-1;i=0; #{(i<l(s))&&(p<0), #[s[i,i+l(e)-1]==e, p=i]; i++}; p)"
+ Math::Script /NOUNLOAD "mtsDL(s) (s=s(NS); p=mtsP(s,'\r\n'); #[p>=0, (NS=s[p+4,]; NS=#[p>0,s[,p-1],'']), (NS='';NS=s)])"
+
+ push $TEMP1
+ ; remove ""
+ Math::Script /NOUNLOAD "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 /NOUNLOAD "$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/Contrib/Math/mathtest.txt b/Contrib/Math/mathtest.txt
index f911e66..9b96fdd 100755
--- a/Contrib/Math/mathtest.txt
+++ b/Contrib/Math/mathtest.txt
@@ -1,7 +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.
+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/Contrib/Modern UI 2/Deprecated.nsh b/Contrib/Modern UI 2/Deprecated.nsh
new file mode 100755
index 0000000..c0170c5
--- /dev/null
+++ b/Contrib/Modern UI 2/Deprecated.nsh
@@ -0,0 +1,72 @@
+/*
+
+NSIS Modern User Interface
+Deprecated code - display warnings
+
+*/
+
+;--------------------------------
+;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
+
+ !define MUI_DOLLAR "$"
+ !error "MUI_RESERVEFILE_INSTALLOPTIONS is no longer supported as InstallOptions is no longer used by MUI2. Instead, use ReserveFile '${MUI_DOLLAR}{NSISDIR}\Plugins\InstallOptions.dll'. It is also recommended to upgrade to nsDialogs."
+
+!macroend
diff --git a/Contrib/Modern UI 2/Interface.nsh b/Contrib/Modern UI 2/Interface.nsh
index 323526f..0a548d0 100755
--- a/Contrib/Modern UI 2/Interface.nsh
+++ b/Contrib/Modern UI 2/Interface.nsh
@@ -1,306 +1,306 @@
-/*
-
-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"
-
- ;Default header images
- !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
-
- !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
- !endif
-
- !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
-
- ${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_INIT UNINSTALLER
-
- ;Load and display header image
-
- !ifdef MUI_HEADERIMAGE
-
- InitPluginsDir
-
- !ifdef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL
-
- ${if} $(^RTL) == 1
-
- File "/oname=$PLUGINSDIR\modern-header.bmp" "${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
-
- ${else}
-
- !endif
-
- File "/oname=$PLUGINSDIR\modern-header.bmp" "${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
-
- ${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_BGCOLOR}"
- SetCtlColors $mui.Header.SubText "" "${MUI_BGCOLOR}"
- !else
- SetCtlColors $mui.Header.Text "" "transparent"
- SetCtlColors $mui.Header.SubText "" "transparent"
- !endif
-
- ;Header image
- !insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}"
-
- ;Header background
- GetDlgItem $mui.Header.Background $HWNDPARENT 1034
- SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}"
-
- ;Header image background
- GetDlgItem $mui.Header.Image $HWNDPARENT 1039
- SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}"
-
- ;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
+/*
+
+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"
+
+ ;Default header images
+ !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
+
+ !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
+ !endif
+
+ !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
+
+ ${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_INIT UNINSTALLER
+
+ ;Load and display header image
+
+ !ifdef MUI_HEADERIMAGE
+
+ InitPluginsDir
+
+ !ifdef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL
+
+ ${if} $(^RTL) == 1
+
+ File "/oname=$PLUGINSDIR\modern-header.bmp" "${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
+
+ ${else}
+
+ !endif
+
+ File "/oname=$PLUGINSDIR\modern-header.bmp" "${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
+
+ ${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_BGCOLOR}"
+ SetCtlColors $mui.Header.SubText "" "${MUI_BGCOLOR}"
+ !else
+ SetCtlColors $mui.Header.Text "" "transparent"
+ SetCtlColors $mui.Header.SubText "" "transparent"
+ !endif
+
+ ;Header image
+ !insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}"
+
+ ;Header background
+ GetDlgItem $mui.Header.Background $HWNDPARENT 1034
+ SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}"
+
+ ;Header image background
+ GetDlgItem $mui.Header.Image $HWNDPARENT 1039
+ SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}"
+
+ ;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/Contrib/Modern UI 2/License.txt b/Contrib/Modern UI 2/License.txt
index c1d2673..506ea5f 100755
--- a/Contrib/Modern UI 2/License.txt
+++ b/Contrib/Modern UI 2/License.txt
@@ -1,10 +1,10 @@
-Copyright © 2002-2007 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.
+Copyright © 2002-2008 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/Contrib/Modern UI 2/Localization.nsh b/Contrib/Modern UI 2/Localization.nsh
index ec8d132..3acb297 100755
--- a/Contrib/Modern UI 2/Localization.nsh
+++ b/Contrib/Modern UI 2/Localization.nsh
@@ -1,189 +1,205 @@
-/*
-
-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_VARAIBLES
- !define MUI_LANGDLL_REGISTRY_VARAIBLES
-
- ;/GLOBAL because the macros are included in a function
- Var /GLOBAL mui.LangDLL.RegistryLanguage
-
- !endif
- !endif
-
-!macroend
-
-
-;--------------------------------
-;Include langauge files
-
-!macro MUI_LANGUAGE LANGUAGE
-
- ;Include a language
-
- !verbose push
- !verbose ${MUI_VERBOSE}
-
- !insertmacro MUI_INSERT
-
- LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nlf"
- !insertmacro LANGFILE_INCLUDE "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nsh"
-
- !ifndef MUI_LANGDLL_LANGUAGES
- !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' "
- !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
- !else
- !ifdef MUI_LANGDLL_LANGUAGES_TEMP
- !undef MUI_LANGDLL_LANGUAGES_TEMP
- !endif
- !define MUI_LANGDLL_LANGUAGES_TEMP "${MUI_LANGDLL_LANGUAGES}"
- !undef MUI_LANGDLL_LANGUAGES
-
- !ifdef MUI_LANGDLL_LANGUAGES_CP_TEMP
- !undef MUI_LANGDLL_LANGUAGES_CP_TEMP
- !endif
- !define MUI_LANGDLL_LANGUAGES_CP_TEMP "${MUI_LANGDLL_LANGUAGES_CP}"
- !undef MUI_LANGDLL_LANGUAGES_CP
-
- !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' ${MUI_LANGDLL_LANGUAGES_TEMP}"
- !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_LANGUAGES_CP_TEMP}"
- !endif
-
- !verbose pop
-
-!macroend
-
-
-;--------------------------------
-;Language selection
-
-!macro MUI_LANGDLL_DISPLAY
-
- !verbose push
- !verbose ${MUI_VERBOSE}
-
- !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_VARAIBLES
-
- ReadRegStr $mui.LangDLL.RegistryLanguage "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}"
-
- ${if} $mui.LangDLL.RegistryLanguage != ""
- ;Set default langauge 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_VARAIBLES
- ${if} $mui.LangDLL.RegistryLanguage == ""
- !endif
- !endif
-
- ;Show langauge 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_VARAIBLES
- ${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 "${NSISDIR}\Plugins\LangDLL.dll"
-
- !verbose pop
-
-!macroend
+/*
+
+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_VARAIBLES
+ !define MUI_LANGDLL_REGISTRY_VARAIBLES
+
+ ;/GLOBAL because the macros are included in a function
+ Var /GLOBAL mui.LangDLL.RegistryLanguage
+
+ !endif
+ !endif
+
+!macroend
+
+
+;--------------------------------
+;Include langauge files
+
+!macro MUI_LANGUAGE LANGUAGE
+
+ ;Include a language
+
+ !verbose push
+ !verbose ${MUI_VERBOSE}
+
+ !insertmacro MUI_INSERT
+
+ LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nlf"
+
+ ;Set default language file for MUI and backup user setting
+ !ifdef LANGFILE_DEFAULT
+ !define MUI_LANGFILE_DEFAULT_TEMP "${LANGFILE_DEFAULT}"
+ !undef LANGFILE_DEFAULT
+ !endif
+ !define LANGFILE_DEFAULT "${NSISDIR}\Contrib\Language files\English.nsh"
+
+ ;Include language file
+ !insertmacro LANGFILE_INCLUDE "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nsh"
+
+ ;Restore user setting for default language file
+ !undef LANGFILE_DEFAULT
+ !ifdef MUI_LANGFILE_DEFAULT_TEMP
+ !define LANGFILE_DEFAULT "${MUI_LANGFILE_DEFAULT}"
+ !endif
+
+ ;Add language to list of languages for selection dialog
+ !ifndef MUI_LANGDLL_LANGUAGES
+ !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' "
+ !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
+ !else
+ !ifdef MUI_LANGDLL_LANGUAGES_TEMP
+ !undef MUI_LANGDLL_LANGUAGES_TEMP
+ !endif
+ !define MUI_LANGDLL_LANGUAGES_TEMP "${MUI_LANGDLL_LANGUAGES}"
+ !undef MUI_LANGDLL_LANGUAGES
+
+ !ifdef MUI_LANGDLL_LANGUAGES_CP_TEMP
+ !undef MUI_LANGDLL_LANGUAGES_CP_TEMP
+ !endif
+ !define MUI_LANGDLL_LANGUAGES_CP_TEMP "${MUI_LANGDLL_LANGUAGES_CP}"
+ !undef MUI_LANGDLL_LANGUAGES_CP
+
+ !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' ${MUI_LANGDLL_LANGUAGES_TEMP}"
+ !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_LANGUAGES_CP_TEMP}"
+ !endif
+
+ !verbose pop
+
+!macroend
+
+
+;--------------------------------
+;Language selection
+
+!macro MUI_LANGDLL_DISPLAY
+
+ !verbose push
+ !verbose ${MUI_VERBOSE}
+
+ !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_VARAIBLES
+
+ ReadRegStr $mui.LangDLL.RegistryLanguage "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}"
+
+ ${if} $mui.LangDLL.RegistryLanguage != ""
+ ;Set default langauge 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_VARAIBLES
+ ${if} $mui.LangDLL.RegistryLanguage == ""
+ !endif
+ !endif
+
+ ;Show langauge 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_VARAIBLES
+ ${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 "${NSISDIR}\Plugins\LangDLL.dll"
+
+ !verbose pop
+
+!macroend
diff --git a/Contrib/Modern UI 2/MUI2.nsh b/Contrib/Modern UI 2/MUI2.nsh
index ab034cd..009c8cc 100755
--- a/Contrib/Modern UI 2/MUI2.nsh
+++ b/Contrib/Modern UI 2/MUI2.nsh
@@ -1,123 +1,122 @@
-/*
-
-NSIS Modern User Interface - Version 2.0 beta
-Copyright © 2002-2007 Joost Verburg
-
-*/
-
-!echo "NSIS Modern User Interface version 2.0 beta - © 2002-2007 Joost Verburg"
-
-;--------------------------------
-
-!ifndef MUI_INCLUDED
-!define MUI_INCLUDED
-
-!define MUI_SYSVERSION "2.0beta"
-
-!verbose push
-
-!ifndef MUI_VERBOSE
- !define MUI_VERBOSE 3
-!endif
-
-!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
-
-!define LANGFILE_DEFAULT "${NSISDIR}\Contrib\Language files\English.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 neccesary
-
- !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 "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
-
-!endif
-
-!verbose pop
+/*
+
+NSIS Modern User Interface - Version 2.0
+Copyright © 2002-2008 Joost Verburg
+
+*/
+
+!echo "NSIS Modern User Interface version 2.0 - © 2002-2008 Joost Verburg"
+
+;--------------------------------
+
+!ifndef MUI_INCLUDED
+!define MUI_INCLUDED
+
+!define MUI_SYSVERSION "2.0"
+
+!verbose push
+
+!ifndef MUI_VERBOSE
+ !define MUI_VERBOSE 3
+!endif
+
+!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 neccesary
+
+ !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
+
+!endif
+
+!verbose pop
diff --git a/Contrib/Modern UI 2/Pages.nsh b/Contrib/Modern UI 2/Pages.nsh
index cf0cb51..55a3e5e 100755
--- a/Contrib/Modern UI 2/Pages.nsh
+++ b/Contrib/Modern UI 2/Pages.nsh
@@ -1,160 +1,160 @@
-/*
-
-NSIS Modern User Interface
-Support code for all pages
-
-*/
-
-;--------------------------------
-;Page initialization
-
-!macro MUI_PAGE_INIT
-
- ;Include interface settings in neccesary
- !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
-
- ;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
+/*
+
+NSIS Modern User Interface
+Support code for all pages
+
+*/
+
+;--------------------------------
+;Page initialization
+
+!macro MUI_PAGE_INIT
+
+ ;Include interface settings in neccesary
+ !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
+
+ ;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
diff --git a/Contrib/Modern UI 2/Pages/Components.nsh b/Contrib/Modern UI 2/Pages/Components.nsh
index 3af12ce..ef33e1d 100755
--- a/Contrib/Modern UI 2/Pages/Components.nsh
+++ b/Contrib/Modern UI 2/Pages/Components.nsh
@@ -1,215 +1,215 @@
-/*
-
-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 hanldes
- 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
+/*
+
+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 hanldes
+ 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
diff --git a/Contrib/Modern UI 2/Pages/Directory.nsh b/Contrib/Modern UI 2/Pages/Directory.nsh
index ba999bc..c920764 100755
--- a/Contrib/Modern UI 2/Pages/Directory.nsh
+++ b/Contrib/Modern UI 2/Pages/Directory.nsh
@@ -1,125 +1,125 @@
-/*
-
-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
- SetCtlColors $mui.DirectoryPage.DirectoryBox "" "${MUI_DIRECTORYPAGE_BGCOLOR}"
- !endif
-
- !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
- FunctionEnd
-
- Function "${LEAVE}"
- !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
- FunctionEnd
-
-!macroend
+/*
+
+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
+ SetCtlColors $mui.DirectoryPage.DirectoryBox "" "${MUI_DIRECTORYPAGE_BGCOLOR}"
+ !endif
+
+ !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
+ FunctionEnd
+
+ Function "${LEAVE}"
+ !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
+ FunctionEnd
+
+!macroend
diff --git a/Contrib/Modern UI 2/Pages/Finish.nsh b/Contrib/Modern UI 2/Pages/Finish.nsh
index f010dd6..3a1b34b 100755
--- a/Contrib/Modern UI 2/Pages/Finish.nsh
+++ b/Contrib/Modern UI 2/Pages/Finish.nsh
@@ -17,6 +17,12 @@ Finish page (implemented using nsDialogs)
Var mui.FinishPage.Image
Var mui.FinishPage.Image.Bitmap
+ !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
+ Var mui.FinishPage.Image.Rect
+ Var mui.FinishPage.Image.Width
+ Var mui.FinishPage.Image.Height
+ !endif
+
Var mui.FinishPage.Title
Var mui.FinishPage.Title.Font
@@ -266,7 +272,20 @@ Finish page (implemented using nsDialogs)
;Image control
${NSD_CreateBitmap} 0u 0u 109u 193u ""
Pop $mui.FinishPage.Image
- System::Call 'user32::LoadImage(i 0, t "$PLUGINSDIR\modern-wizard.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s'
+ !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
+ System::Call '*(i, i, i, i) i.s'
+ Pop $mui.FinishPage.Image.Rect
+ ${If} $mui.FinishPage.Image.Rect <> 0
+ System::Call 'user32::GetClientRect(i $mui.FinishPage.Image, i $mui.FinishPage.Image.Rect)'
+ System::Call '*$mui.FinishPage.Image.Rect(i, i, i .s, i .s)'
+ System::Free $mui.FinishPage.Image.Rect
+ Pop $mui.FinishPage.Image.Width
+ Pop $mui.FinishPage.Image.Height
+ ${EndIf}
+ System::Call 'user32::LoadImage(i 0, t s, i ${IMAGE_BITMAP}, i $mui.FinishPage.Image.Width, i $mui.FinishPage.Image.Height, i ${LR_LOADFROMFILE}) i.s' "$PLUGINSDIR\modern-wizard.bmp"
+ !else
+ System::Call 'user32::LoadImage(i 0, t s, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s' "$PLUGINSDIR\modern-wizard.bmp"
+ !endif
Pop $mui.FinishPage.Image.Bitmap
SendMessage $mui.FinishPage.Image ${STM_SETIMAGE} ${IMAGE_BITMAP} $mui.FinishPage.Image.Bitmap
@@ -344,6 +363,11 @@ Finish page (implemented using nsDialogs)
${NSD_CreateRadioButton} 120u ${MUI_FINISHPAGE_REBOOTLATER_TOP}u 195u 10u "${MUI_FINISHPAGE_TEXT_REBOOTLATER}"
Pop $mui.FinishPage.RebootLater
SetCtlColors $mui.FinishPage.RebootLater "" "${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
${else}
diff --git a/Contrib/Modern UI 2/Pages/InstallFiles.nsh b/Contrib/Modern UI 2/Pages/InstallFiles.nsh
index 868ae17..65f382e 100755
--- a/Contrib/Modern UI 2/Pages/InstallFiles.nsh
+++ b/Contrib/Modern UI 2/Pages/InstallFiles.nsh
@@ -1,149 +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
+/*
+
+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/Contrib/Modern UI 2/Pages/License.nsh b/Contrib/Modern UI 2/Pages/License.nsh
index 2bcbee5..c7386f0 100755
--- a/Contrib/Modern UI 2/Pages/License.nsh
+++ b/Contrib/Modern UI 2/Pages/License.nsh
@@ -1,145 +1,145 @@
-/*
-
-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
-
- !verbose pop
-
-!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 conrol 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
+/*
+
+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
+
+ !verbose pop
+
+!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 conrol 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/Contrib/Modern UI 2/Pages/StartMenu.nsh b/Contrib/Modern UI 2/Pages/StartMenu.nsh
index afd7ed4..71d3913 100755
--- a/Contrib/Modern UI 2/Pages/StartMenu.nsh
+++ b/Contrib/Modern UI 2/Pages/StartMenu.nsh
@@ -1,234 +1,233 @@
-/*
-
-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.Create
- Var mui.StartMenuPage.ReturnValue
- !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}
-
- ${endif}
-
- !endif
-
- !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE)
-
- ${if} $(^RTL) == "0"
- !ifndef MUI_STARTMENUPAGE_NODISABLE
- StartMenu::Init /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
- !else
- StartMenu::Init /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
- !endif
- ${else}
- !ifndef MUI_STARTMENUPAGE_NODISABLE
- StartMenu::Init /NOUNLOAD /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
- !else
- StartMenu::Init /NOUNLOAD /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
- SetCtlColors $mui.StartMenuPage.Location "" "${MUI_STARTMENUPAGE_BGCOLOR}"
- SetCtlColors $mui.StartMenuMenu.FolderList "" "${MUI_STARTMENUPAGE_BGCOLOR}"
- !endif
-
- !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
-
- StartMenu::Show
-
- Pop $mui.StartMenuPage.ReturnValue
- ${if} $mui.StartMenuPage.ReturnValue == "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.Create "${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.Create != ">"
-
- ${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
-
+/*
+
+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}
+
+ ${endif}
+
+ !endif
+
+ !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE)
+
+ ${if} $(^RTL) == "0"
+ !ifndef MUI_STARTMENUPAGE_NODISABLE
+ StartMenu::Init /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
+ !else
+ StartMenu::Init /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
+ !endif
+ ${else}
+ !ifndef MUI_STARTMENUPAGE_NODISABLE
+ StartMenu::Init /NOUNLOAD /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
+ !else
+ StartMenu::Init /NOUNLOAD /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
+ SetCtlColors $mui.StartMenuPage.Location "" "${MUI_STARTMENUPAGE_BGCOLOR}"
+ SetCtlColors $mui.StartMenuMenu.FolderList "" "${MUI_STARTMENUPAGE_BGCOLOR}"
+ !endif
+
+ !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
+
+ StartMenu::Show
+
+ 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/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh b/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh
index a9323ee..4848826 100755
--- a/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh
+++ b/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh
@@ -1,96 +1,96 @@
-/*
-
-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}"
-
- 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
+/*
+
+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}"
+
+ 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/Contrib/Modern UI 2/Pages/Welcome.nsh b/Contrib/Modern UI 2/Pages/Welcome.nsh
index 5cad0b0..64d9869 100755
--- a/Contrib/Modern UI 2/Pages/Welcome.nsh
+++ b/Contrib/Modern UI 2/Pages/Welcome.nsh
@@ -17,6 +17,12 @@ Welcome page (implemented using nsDialogs)
Var mui.WelcomePage.Image
Var mui.WelcomePage.Image.Bitmap
+ !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
+ Var mui.WelcomePage.Image.Rect
+ Var mui.WelcomePage.Image.Width
+ Var mui.WelcomePage.Image.Height
+ !endif
+
Var mui.WelcomePage.Title
Var mui.WelcomePage.Title.Font
@@ -128,7 +134,20 @@ Welcome page (implemented using nsDialogs)
;Image control
${NSD_CreateBitmap} 0u 0u 109u 193u ""
Pop $mui.WelcomePage.Image
- System::Call 'user32::LoadImage(i 0, t "$PLUGINSDIR\modern-wizard.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s'
+ !ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
+ System::Call '*(i, i, i, i) i.s'
+ Pop $mui.WelcomePage.Image.Rect
+ ${If} $mui.WelcomePage.Image.Rect <> 0
+ System::Call 'user32::GetClientRect(i $mui.WelcomePage.Image, i $mui.WelcomePage.Image.Rect)'
+ System::Call '*$mui.WelcomePage.Image.Rect(i, i, i .s, i .s)'
+ System::Free $mui.WelcomePage.Image.Rect
+ Pop $mui.WelcomePage.Image.Width
+ Pop $mui.WelcomePage.Image.Height
+ ${EndIf}
+ System::Call 'user32::LoadImage(i 0, t s, i ${IMAGE_BITMAP}, i $mui.WelcomePage.Image.Width, i $mui.WelcomePage.Image.Height, i ${LR_LOADFROMFILE}) i.s' "$PLUGINSDIR\modern-wizard.bmp"
+ !else
+ System::Call 'user32::LoadImage(i 0, t s, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s' "$PLUGINSDIR\modern-wizard.bmp"
+ !endif
Pop $mui.WelcomePage.Image.Bitmap
SendMessage $mui.WelcomePage.Image ${STM_SETIMAGE} ${IMAGE_BITMAP} $mui.WelcomePage.Image.Bitmap
diff --git a/Contrib/Modern UI 2/Readme.html b/Contrib/Modern UI 2/Readme.html
index 86b566c..a688bb8 100755
--- a/Contrib/Modern UI 2/Readme.html
+++ b/Contrib/Modern UI 2/Readme.html
@@ -1,1158 +1,1155 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>NSIS Modern User Interface - Documentation</title>
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
- <style type="text/css">
- /*<![CDATA[*/body
- {
- padding: 10px;
- background-color: #F0F0F0;
- font-size: 13px;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: normal;
- text-align: justify;
- }
- p, li
- {
- font-size: 13px;
- }
- table
- {
- margin: auto;
- background-color: #FFFFFF;
- }
- .maintable
- {
- border: 2px solid #376EAB;
- }
- .parameter
- {
- font-weight: bold;
- color: #6586AC;
- }
- h1
- {
- font-size: 20px;
- color: #7A7272;
- font-weight: normal;
- }
- h2
- {
- font-size: 17px;
- font-weight: bold;
- color: #303030;
- }
- h3
- {
- font-size: 14px;
- font-weight: bold;
- color: #2B5885;
- }
- pre
- {
- font-size: 13px;
- }
- div
- {
- margin: 20px;
- }
- div.settings
- {
- margin-right: 0;
- }
- a:link, a:visited, a:active
- {
- color: #294F75;
- text-decoration: none;
- }
- a:hover
- {
- color: #182634;
- text-decoration: underline;
- }
- .trigger
- {
- cursor: pointer;
- cursor: hand;
- height: 14px;
- }
- .toggle
- {
- display: none;
- }
- .options
- {
- text-align: center;
- cursor: pointer;
- cursor: hand;
- color: #294F75;
- }
- /*]]>*/</style>
-
- <script type="text/javascript">
-//<![CDATA[
-
- var image_open = new Image();
- image_open.src = "images/open.gif";
- var image_closed = new Image();
- image_closed.src = "images/closed.gif";
-
- function toggle(image, section) {
-
- if(document.all) {
- if(document.all[section].style.display == "block") {
- document.all[section].style.display = "none";
- document.all[image].src = image_closed.src;
- }
- else
- {
- document.all[section].style.display = "block";
- document.all[image].src = image_open.src;
- }
- }
- else
- {
- if(document.getElementById(section).style.display == "block") {
- document.getElementById(section).style.display = "none";
- document.getElementById(image).src = image_closed.src;
- }
- else
- {
- document.getElementById(section).style.display = "block";
- document.getElementById(image).src = image_open.src;
- }
- }
-
- }
-
- function expandall() {
-
- var divNodeList = document.getElementsByTagName('div');
- for (i = 0; i < divNodeList.length; i++) {
- if(divNodeList[i].id) {
- divNodeList[i].style.display = "block";
- document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/open.gif";
- }
- }
-
- }
-
- function collapseall() {
-
- var divNodeList = document.getElementsByTagName('div');
- for (i = 0; i < divNodeList.length; i++) {
- if(divNodeList[i].id) {
- divNodeList[i].style.display = "none";
- document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/closed.gif";
- }
- }
-
- }
-
-//]]>
- </script>
-
-</head>
-<body>
- <table width="750" class="maintable" cellspacing="0" cellpadding="0" align="center">
- <tr>
- <td>
- <img src="images/header.gif" width="750" height="80" alt="" />
- <p class="options">
- <a onclick="expandall()">[Expand all]</a>&nbsp; &nbsp;<a onclick="collapseall()">[Collapse
- all]</a></p>
- <div>
- <h1>
- Introduction</h1>
- <div>
- <p>
- 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.</p>
- <p>
- 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.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_scr" src="images/closed.gif"
- onclick="toggle('trigger_scr', 'toggle_scr');" />
- Screenshots</h3>
- <div class="toggle" id="toggle_scr">
- <p>
- <img src="images/screen1.png" width="503" height="393" alt="" /></p>
- <p>
- <img src="images/screen2.png" width="503" height="393" alt="" /></p>
- </div>
- </div>
- <h1>
- Modern UI 2.0 beta</h1>
- <div>
- <p>
- This is a beta version of the Modern UI version 2.0, which is only intended for
- testing purposes.</p>
- <p>
- This new version makes it easier to customize pages, because the same method can
- be used to&nbsp; 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.</p>
- <p>
- 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.</p>
- <p>
- To upgrade a Modern UI 1.8 script, you should:</p>
- <ul>
- <li>Insert the MUI2.nsh header file instead of MUI.nsh.</li>
- <li>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 itself have remained the same.</li>
- <li>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.</li>
- <li>Use the standard NSIS method to escape special characters in all texts. For example,
- $\r$\n creates newline.</li>
- </ul>
- </div>
- <h1>
- Script header</h1>
- <div>
- <p>
- The settings for the Modern UI should be inserted in the header of the script file.
- It&#39;s important to follow the same order as the items below.&nbsp;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 <a href="#examples">
- example scripts</a> too see how this is done in actual script files.</p>
- <p>
- Parameters are given in this format: <span class="parameter">required (option1 | option2)
- [optional]</span></p>
- </div>
- <h2>
- 1. Header file</h2>
- <div>
- <p>
- First of all, add this line to the top of script to include the Modern UI:</p>
- <pre>
-!include MUI2.nsh
-</pre>
- </div>
- <h2>
- 2. Interface configuration</h2>
- <div>
- <p>
- Then, you may want to use interface settings to change the look and feel of the
- installer. These settings apply to all pages.<p>
- 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.<p>
- Examples:</p>
- <pre>
-!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
-!define MUI_UI &quot;myUI.exe&quot; ;Value
-!define MUI_INSTFILESPAGE_COLORS &quot;FFFFFF 000000&quot; ;Two colors
-</pre>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_in" src="images/closed.gif"
- onclick="toggle('trigger_in', 'toggle_in');" />
- Interface settings</h3>
- <div class="toggle" id="toggle_in">
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ingen" src="images/closed.gif"
- onclick="toggle('trigger_ingen', 'toggle_ingen');" />
- Page header</h3>
- <div class="toggle" id="toggle_ingen">
- <p>
- <strong>MUI_ICON</strong> <span class="parameter">icon_file</span><br />
- The icon for the installer.<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico</em></p>
- <p>
- <strong>MUI_UNICON</strong> <span class="parameter">icon_file</span><br />
- The icon for the uninstaller.<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico</em></p>
- <p>
- <strong>MUI_HEADERIMAGE</strong><br />
- Display an image on the header of the page.</p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of installers pages (recommended size: 150x57
- pixels).<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP_NOSTRETCH</strong><br />
- 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.</p>
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of installers pages when using a RTL language
- (recommended size: 150x57 pixels).<br />
- <em>Default: Non-RTL bitmap</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- </div>
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of uninstaller pages (recommended size: 150x57
- pixels).<br />
- <em>Default: Installer header bitmap</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH</strong><br />
- 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.</p>
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of uninstallers pages when using a RTL language
- (recommended size: 150x57 pixels).<br />
- <em>Default: Installer RTL header bitmap</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- </div>
- <p>
- <strong>MUI_HEADERIMAGE_RIGHT</strong><br />
- 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).</p>
- </div>
- <p>
- <strong>MUI_BGCOLOR</strong> <span class="parameter">(color: RRGGBBR hexadecimal)</span><br />
- Background color for the header, the Welcome page and the Finish page.<br />
- <em>Default: FFFFFF</em></p>
- <p>
- <strong>MUI_HEADER_TRANSPARENT_TEXT</strong><br />
- Set a transparent background for the header's label controls. Useful for custom
- user interfaces that set a bigger header image.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inres" src="images/closed.gif"
- onclick="toggle('trigger_inres', 'toggle_inres');" />
- Interface resources</h3>
- <div class="toggle" id="toggle_inres">
- <p>
- <strong>MUI_UI</strong> <span class="parameter">ui_file</span><br />
- The interface file with the dialog resources. Change this if you have made your
- own customized UI.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern.exe</em></p>
- <p>
- <strong>MUI_UI_HEADERIMAGE</strong> <span class="parameter">ui_file</span><br />
- The interface files with the dialog resource IDD_INST that contains a bitmap control
- and space for the header bitmap.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe</em></p>
- <p>
- <strong>MUI_UI_HEADERIMAGE_RIGHT</strong> <span class="parameter">ui_file</span><br />
- The interface files with the dialog resource IDD_INST that contains a bitmap control
- and space for the header bitmap on the right side.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe</em></p>
- <p>
- <strong>MUI_UI_COMPONENTSPAGE_SMALLDESC</strong> <span class="parameter">ui_file</span><br />
- The interface files with a customized dialog resource IDD_SELCOM with a small description
- area.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe</em></p>
- <p>
- <strong>MUI_UI_COMPONENTSPAGE_NODESC</strong> <span class="parameter">ui_file</span><br />
- The interface files with a customized dialog resource IDD_SELCOM without a description
- area.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inwf" src="images/closed.gif"
- onclick="toggle('trigger_inwf', 'toggle_inwf');" />
- Installer welcome/finish page</h3>
- <div class="toggle" id="toggle_inwf">
- <p>
- <strong>MUI_WELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
- <div class="settings">
- <p>
- <strong>MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inuwf" src="images/closed.gif"
- onclick="toggle('trigger_inuwf', 'toggle_inuwf');" />
- Uninstaller welcome/finish page</h3>
- <div class="toggle" id="toggle_inuwf">
- <p>
- <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
- <div class="settings">
- <p>
- <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inl" src="images/closed.gif"
- onclick="toggle('trigger_inl', 'toggle_inl');" />
- License page</h3>
- <div class="toggle" id="toggle_inl">
- <p>
- <strong>MUI_LICENSEPAGE_BGCOLOR</strong> <span class="parameter">(/windows | /grey |
- (color: RRGGBB hexadecimal))</span><br />
- 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).<br />
- <em>Default: /windows</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inc" src="images/closed.gif"
- onclick="toggle('trigger_inc', 'toggle_inc');" />
- Components page</h3>
- <div class="toggle" id="toggle_inc">
- <p>
- <strong>MUI_COMPONENTSPAGE_CHECKBITMAP</strong> <span class="parameter">bitmap_file</span><br />
- The bitmap with images for the checks of the component select treeview.<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp</em></p>
- <p>
- <strong>MUI_COMPONENTSPAGE_SMALLDESC</strong><br />
- 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.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_NODESC</strong><br />
- No description area.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ind" src="images/closed.gif"
- onclick="toggle('trigger_ind', 'toggle_ind');" />
- Directory page</h3>
- <div class="toggle" id="toggle_ind">
- <p>
- <strong>MUI_DIRECTORYPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
- The background color for the directory textbox.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ins" src="images/closed.gif"
- onclick="toggle('trigger_ins', 'toggle_ins');" />
- Start Menu folder page</h3>
- <div class="toggle" id="toggle_ins">
- <p>
- <strong>MUI_STARTMENUPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
- The background color for the startmenu directory list and textbox.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ini" src="images/closed.gif"
- onclick="toggle('trigger_ini', 'toggle_ini');" />
- Installation page</h3>
- <div class="toggle" id="toggle_ini">
- <p>
- <strong>MUI_INSTFILESPAGE_COLORS</strong> <span class="parameter">(/windows | &quot;(foreground
- color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)&quot;)</span><br />
- The colors of the details screen. Use /windows for the default Windows colors.<br />
- <em>Default: /windows</em></p>
- <p>
- <strong>MUI_INSTFILESPAGE_PROGRESSBAR</strong> <span class="parameter">(&quot;&quot;
- | colored | smooth)</span><br />
- The style of the progress bar. Colored makes it use the MUI_INSTALLCOLORS.<br />
- <em>Default: smooth</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inf" src="images/closed.gif"
- onclick="toggle('trigger_inf', 'toggle_inf');" />
- Installer finish page</h3>
- <div class="toggle" id="toggle_inf">
- <p>
- <strong>MUI_FINISHPAGE_NOAUTOCLOSE</strong><br />
- Do not automatically jump to the finish page, to allow the user to check the install
- log.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_uinf" src="images/closed.gif"
- onclick="toggle('trigger_uinf', 'toggle_uinf');" />
- Uninstaller finish page</h3>
- <div class="toggle" id="toggle_uinf">
- <p>
- <strong>MUI_UNFINISHPAGE_NOAUTOCLOSE</strong><br />
- Do not automatically jump to the finish page, to allow the user to check the uninstall
- log.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inaw" src="images/closed.gif"
- onclick="toggle('trigger_inaw', 'toggle_inaw');" />
- Abort warning</h3>
- <div class="toggle" id="toggle_inaw">
- <p>
- <strong>MUI_ABORTWARNING</strong><br />
- Show a message box with a warning when the user wants to close the installer.</p>
- <div class="settings">
- <p>
- <strong>MUI_ABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the abort warning message box.</p>
- <p>
- <strong>MUI_ABORTWARNING_CANCEL_DEFAULT</strong><br />
- Set the Cancel button as the default button on the message box.</p>
- </div>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inuaw" src="images/closed.gif"
- onclick="toggle('trigger_inuaw', 'toggle_inuaw');" />
- Uninstaller abort warning</h3>
- <div class="toggle" id="toggle_inuaw">
- <p>
- <strong>MUI_UNABORTWARNING</strong><br />
- Show a message box with a warning when the user wants to close the uninstaller.</p>
- <div class="settings">
- <p>
- <strong>MUI_UNABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the abort warning message box.</p>
- <p>
- <strong>MUI_UNABORTWARNING_CANCEL_DEFAULT</strong><br />
- Set the Cancel button as the default button on the message box.</p>
- </div>
- </div>
- </div>
- </div>
- <h2>
- 3. Pages</h2>
- <div>
- <p>
- 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.</p>
- <p>
- You can add multiple pages of certain types (for example, if you want the user to
- specify multiple folders).</p>
- <p>
- Examples:</p>
- <pre>
-!insertmacro MUI_PAGE_LICENSE &quot;License.rtf&quot;
-!insertmacro MUI_PAGE_COMPONENTS
-
-Var STARTMENU_FOLDER
-!insertmacro MUI_PAGE_STARTMENU &quot;Application&quot; $StartMenuFolder
-</pre>
- <p>
- 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.</p>
- <p>
- <strong>Installer pages</strong><br />
- MUI_PAGE_WELCOME<br />
- MUI_PAGE_LICENSE <span class="parameter">textfile</span><br />
- MUI_PAGE_COMPONENTS<br />
- MUI_PAGE_DIRECTORY<br />
- MUI_PAGE_STARTMENU <span class="parameter">pageid variable</span><br />
- MUI_PAGE_INSTFILES<br />
- MUI_PAGE_FINISH</p>
- <p>
- <strong>Uninstaller pages</strong><br />
- MUI_UNPAGE_WELCOME<br />
- MUI_UNPAGE_CONFIRM<br />
- MUI_UNPAGE_LICENSE <span class="parameter">textfile</span><br />
- MUI_UNPAGE_COMPONENTS<br />
- MUI_UNPAGE_DIRECTORY<br />
- MUI_UNPAGE_INSTFILES<br />
- MUI_UNPAGE_FINISH</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pg" src="images/closed.gif"
- onclick="toggle('trigger_pg', 'toggle_pg');" />
- Page settings</h3>
- <div class="toggle" id="toggle_pg">
- <p>
- 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:</p>
- <pre>
-;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
-</pre>
- <p>
- <p>
- 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.</p>
- <p>
- 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.</p>
- <p>
- In all text settings, the doublequote character (&quot;) should be escaped in the
- following form: $\&quot;</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgg" src="images/closed.gif"
- onclick="toggle('trigger_pgg', 'toggle_pgg');" />
- General page settings</h3>
- <div class="toggle" id="toggle_pgg">
- <p>
- <strong>MUI_PAGE_HEADER_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the header of the page.</p>
- <p>
- <strong>MUI_PAGE_HEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
- Subtext to display on the header of the page.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgw" src="images/closed.gif"
- onclick="toggle('trigger_pgw', 'toggle_pgw');" />
- Welcome page settings</h3>
- <div class="toggle" id="toggle_pgw">
- <p>
- <strong>MUI_WELCOMEPAGE_TITLE</strong> <span class="parameter">title</span><br />
- Title to display on the top of the page.</p>
- <p>
- <strong>MUI_WELCOMEPAGE_TITLE_3LINES</strong><br />
- Extra space for the title area.</p>
- <p>
- <strong>MUI_WELCOMEPAGE_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the page.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgl" src="images/closed.gif"
- onclick="toggle('trigger_pgl', 'toggle_pgl');" />
- License page settings</h3>
- <div class="toggle" id="toggle_pgl">
- <p>
- <strong>MUI_LICENSEPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_LICENSEPAGE_TEXT_BOTTOM</strong> <span class="parameter">text</span><br />
- Text to display on the bottom of the page.</p>
- <p>
- <strong>MUI_LICENSEPAGE_BUTTON</strong> <span class="parameter">button_text</span><br />
- Text to display on the 'I Agree' button.</p>
- <p>
- <strong>MUI_LICENSEPAGE_CHECKBOX</strong><br />
- Display a checkbox the user has to check to agree with the license terms.</p>
- <div class="settings">
- <p>
- <strong>MUI_LICENSEPAGE_CHECKBOX_TEXT</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to agree with the license terms.</p>
- </div>
- <p>
- <strong>MUI_LICENSEPAGE_RADIOBUTTONS</strong><br />
- Display two radio buttons to allow the user to choose between accepting the license
- terms or not.</p>
- <div class="settings">
- <p>
- <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to accept the license terms.</p>
- <p>
- <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to decline the license terms.</p>
- </div>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgc" src="images/closed.gif"
- onclick="toggle('trigger_pgc', 'toggle_pgc');" />
- Components page settings</h3>
- <div class="toggle" id="toggle_pgc">
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_COMPLIST</strong> <span class="parameter">text</span><br />
- Text to display on next to the components list.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_INSTTYPE</strong> <span class="parameter">text</span><br />
- Text to display on next to the installation type combo box.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE</strong> <span class="parameter">text</span><br />
- Text to display on the of the top of the description box.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO</strong> <span class="parameter">text</span><br />
- Text to display inside the description box when no section is selected.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgd" src="images/closed.gif"
- onclick="toggle('trigger_pgd', 'toggle_pgd');" />
- Directory page settings</h3>
- <div class="toggle" id="toggle_pgd">
- <p>
- <strong>MUI_DIRECTORYPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on top of the page.</p>
- <p>
- <strong>MUI_DIRECTORYPAGE_TEXT_DESTINATION</strong> <span class="parameter">text</span><br />
- Text to display on the destination folder frame.</p>
- <p>
- <strong>MUI_DIRECTORYPAGE_VARIABLE</strong> <span class="parameter">variable</span><br />
- Variable in which to store the selected folder.<br />
- <em>Default: $INSTDIR</em></p>
- <p>
- <strong>MUI_DIRECTORYPAGE_VERIFYONLEAVE</strong><br />
- 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.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgs" src="images/closed.gif"
- onclick="toggle('trigger_pgs', 'toggle_pgs');" />
- Start Menu folder page settings</h3>
- <div class="toggle" id="toggle_pgs">
- <p>
- <strong>MUI_STARTMENUPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_TEXT_CHECKBOX</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to disable the Start Menu folder creation.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_DEFAULTFOLDER</strong> <span class="parameter">folder</span><br />
- The default Start Menu Folder.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_NODISABLE</strong><br />
- Do not display the checkbox to disable the creation of Start Menu shortcuts.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
- <strong>MUI_STARTMENUPAGE_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
- <strong>MUI_STARTMENUPAGE_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
- 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.</p>
- <p>
- For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu
- folder:</p>
- <pre>
-!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
- Delete &quot;$SMPROGRAMS\$R0\Your Shortcut.lnk&quot;
-</pre>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgi" src="images/closed.gif"
- onclick="toggle('trigger_pgi', 'toggle_pgi');" />
- Installation page settings</h3>
- <div class="toggle" id="toggle_pgi">
- <p>
- <strong>MUI_INSTFILESPAGE_FINISHHEADER_TEXT</strong> <span class="parameter">text</span><br />
- 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).</p>
- <p>
- <strong>MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
- 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).</p>
- <p>
- <strong>MUI_INSTFILESPAGE_ABORTHEADER_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the header of the installation page when the installation has
- been aborted.</p>
- <p>
- <strong>MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
- Subext to display on the header of the installation page when the installation has
- been aborted.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgf" src="images/closed.gif"
- onclick="toggle('trigger_pgf', 'toggle_pgf');" />
- Finish page settings</h3>
- <div class="toggle" id="toggle_pgf">
- <p>
- <strong>MUI_FINISHPAGE_TITLE</strong> <span class="parameter">title</span><br />
- Title to display on the top of the page.</p>
- <p>
- <strong>MUI_FINISHPAGE_TITLE_3LINES</strong><br />
- Extra space for the title area.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the page.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_LARGE</strong><br />
- Extra space for the text area (if using checkboxes).</p>
- <p>
- <strong>MUI_FINISHPAGE_BUTTON</strong> <span class="parameter">text</span><br />
- Text to display on the Finish button.</p>
- <p>
- <strong>MUI_FINISHPAGE_CANCEL_ENABLED</strong><br />
- Enable the Cancel button so the user can skip any options displayed on the finish
- page.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_REBOOT</strong> <span class="parameter">text</span><br />
- Text to display on the finish page when asking for a system reboot.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_REBOOTNOW</strong> <span class="parameter">text</span><br />
- Text to display next to the 'Reboot now' option button.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_REBOOTLATER</strong> <span class="parameter">text</span><br />
- Text to display next to the 'Reboot later' option button.</p>
- <p>
- <strong>MUI_FINISHPAGE_REBOOTLATER_DEFAULT</strong><br />
- Sets the 'Reboot later' option as the default option.</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN</strong> <span class="parameter">exe_file</span><br />
- 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.</p>
- <div class="settings">
- <p>
- <strong>MUI_FINISHPAGE_RUN_TEXT</strong> <span class="parameter">text</span><br />
- Texts to display next to the 'Run program' checkbox.</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN_PARAMETERS</strong> <span class="parameter">parameters</span><br />
- Parameters for the application to run. Don't forget to escape double quotes in the
- value (use $\&quot;).</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN_NOTCHECKED</strong><br />
- Do not check the 'Run program' checkbox by default</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN_FUNCTION</strong> <span class="parameter">function</span><br />
- 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.</p>
- </div>
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME</strong> <span class="parameter">file/url</span><br />
- 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.</p>
- <div class="settings">
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME_TEXT</strong> <span class="parameter">text</span><br />
- Texts to display next to the 'Show Readme' checkbox.</p>
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME_NOTCHECKED</strong><br />
- Do not check the 'Show Readme' checkbox by default</p>
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME_FUNCTION</strong> <span class="parameter">function</span><br />
- 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.</p>
- </div>
- <p>
- <strong>MUI_FINISHPAGE_LINK</strong> <span class="parameter">link_text</span><br />
- Text for a link on the which the user can click to view a website or file.</p>
- <div class="settings">
- <p>
- <strong>MUI_FINISHPAGE_LINK_LOCATION</strong> <span class="parameter">file/url</span><br />
- 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.</p>
- <p>
- <strong>MUI_FINISHPAGE_LINK_COLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
- Text color for the link on the Finish page.<br />
- <em>Default: 000080</em></p>
- </div>
- <p>
- <strong>MUI_FINISHPAGE_NOREBOOTSUPPORT</strong><br />
- 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.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgu" src="images/closed.gif"
- onclick="toggle('trigger_pgu', 'toggle_pgu');" />
- Uninstall confirm page settings</h3>
- <div class="toggle" id="toggle_pgu">
- <p>
- <strong>MUI_UNCONFIRMPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_UNCONFIRMPAGE_TEXT_LOCATION</strong> <span class="parameter">text</span><br />
- Text to display next to the uninstall location text box.</p>
- </div>
- </div>
- </div>
- <h2>
- 4. Language files</h2>
- <div>
- <p>
- Insert the Modern UI language files for the languages to want to include.</p>
- <pre>
-!insertmacro MUI_LANGUAGE &quot;English&quot;
-</pre>
- <p>
- The standard NSIS language files are loaded automatically, there is no need to use
- LoadLanguageFile.</p>
- </div>
- <h2>
- 5. Reserve files</h2>
- <div>
- <p>
- 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:</p>
- <pre>
-ReserveFile MyPlugin.dll
-!insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
-...
-</pre>
- </div>
- <h1>
- Script code for pages</h1>
- <div>
- <p>
- 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.</p>
- <h2>
- Components page descriptions</h2>
- <div>
- <p>
- 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.</p>
- <p>
- To set a description for a section, an additional parameter needs to be added to
- Section commmand with a unique identifier for the section. This name can later be
- used to set the description for this section.</p>
- <pre>
-Section &quot;Section Name 1&quot; Section1
- ...
-SectionEnd
-</pre>
- <p>
- After the sections, use these macros to set the descriptions:</p>
- <pre>
-LangString DESC_Section1 ${LANG_ENGLISH} &quot;Description of section 1.&quot;
-LangString DESC_Section2 ${LANG_ENGLISH} &quot;Description of section 2.&quot;
-
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
- !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
-</pre>
- <p>
- For the uninstaller, use the MUI_UNFUNCTION_DESCRIPTION_BEGIN and MUI_UNFUNCTION_DESCRIPTION_END
- macros.</p>
- </div>
- <h2>
- Start Menu folder</h2>
- <div>
- <p>
- Put the code to write the shortcuts (using CreateShortcut) between the MUI_STARTMENU_WRITE_BEGIN
- and MUI_STARTMENU_WRITE_END macros:</p>
- <pre>
-!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
- ...create shortcuts...
-!insertmacro MUI_STARTMENU_WRITE_END
-</pre>
- <p>
- 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.</p>
- <p>
- The variable which contains the folder and the page ID are set as parameters of
- the page macro.</p>
- </div>
- </div>
- <h1>
- Language selection dialog</h1>
- <div>
- <p>
- If you want the installer to display a language selection dialog (see the the <a
- href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a> example),
- insert the MUI_LANGDLL_DISPLAY macro in the .onInit function:</p>
- <pre>
-Function .onInit
-
- !insertmacro MUI_LANGDLL_DISPLAY
-
-FunctionEnd
-</pre>
- <p>
- This macro can also be used in the un.onInit function.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_lss" src="images/closed.gif"
- onclick="toggle('trigger_lss', 'toggle_lss');" />
- Settings for registry storage of selected language</h3>
- <div class="toggle" id="toggle_lss">
- <p>
- To remember the user's preference, you can define a registry key. These defines
- should be set before inserting the installation page macro.</p>
- <p>
- <strong>MUI_LANGDLL_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
- <strong>MUI_LANGDLL_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
- <strong>MUI_LANGDLL_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
- 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.</p>
- <p>
- For the uninstaller, insert the MUI_UNGETLANGUAGE macro in un.onInit to get the
- stored language preference:</p>
- <pre>
-Function un.onInit
-
- !insertmacro MUI_UNGETLANGUAGE
-
-FunctionEnd
-</pre>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_lsin" src="images/closed.gif"
- onclick="toggle('trigger_lsin', 'toggle_lsin');" />
- Interface settings for selection dialog</h3>
- <div class="toggle" id="toggle_lsin">
- <p>
- To customize the language selection dialog interface, use these defines before inserting
- the MUI_LANGDLL_DISPLAY macro.</p>
- <p>
- <strong>MUI_LANGDLL_WINDOWTITLE</strong> <span class="parameter">text</span><br />
- The window title of the language selection dialog.</p>
- <p>
- <strong>MUI_LANGDLL_INFO</strong> <span class="parameter">text</span><br />
- The text to display on the language selection dialog.</p>
- <p>
- <strong>MUI_LANGDLL_ALWAYSSHOW</strong><br />
- 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.</p>
- <p>
- <strong>MUI_LANGDLL_ALLLANGUAGES</strong><br />
- Always show all available languages and don't filter according to their codepage.</p>
- </div>
- </div>
- <h1>
- Custom pages</h1>
- <div>
- <p>
- If you want add your custom pages to your installer, you can insert your own page
- commands between the page macros.</p>
- <pre>
-!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
-</pre>
- <p>
- Use the MUI_HEADER_TEXT macro to set the text on the page header in a page function:</p>
- <pre>
-LangString PAGE_TITLE ${LANG_ENGLISH} &quot;Title&quot;
-LangString PAGE_SUBTITLE ${LANG_ENGLISH} &quot;Subtitle&quot;
-
-Function CustomPageFunction
- !insermacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
- ...
-FuctionEnd
-</pre>
- </div>
- <h1>
- Custom functions</h1>
- <div>
- <p>
- 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.</p>
- <p>
- Example:</p>
- <pre class="text">
-!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
-
-Function myGUIInit
- ...
-FunctionEnd</pre>
- <p>
- Modern UI pages can also customized using custom functions.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_cfg" src="images/closed.gif"
- onclick="toggle('trigger_cfg', 'toggle_cfg');" />
- General Custom Functions</h3>
- <div class="toggle" id="toggle_cfg">
- <p>
- These defines should be set before inserting the language macros.</p>
- <p>
- <strong>MUI_CUSTOMFUNCTION_GUIINIT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_UNGUIINIT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_ABORT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_UNABORT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_MOUSEOVERSECTION</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_UNMOUSEOVERSECTION</strong> <span class="parameter">function</span></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_cfpg" src="images/closed.gif"
- onclick="toggle('trigger_cfpg', 'toggle_cfpg');" />
- Page Custom Functions</h3>
- <div class="toggle" id="toggle_cfpg">
- <p>
- These defines should be set before inserting a page macro.</p>
- <p>
- <strong>MUI_PAGE_CUSTOMFUNCTION_PRE</strong> <span class="parameter">function</span><br />
- <strong>MUI_PAGE_CUSTOMFUNCTION_SHOW</strong> <span class="parameter">function</span><br />
- </p>
- <p>
- The pre function is called first and allows you to initalize variables or decide
- wehther the page should be skipped. Then, the shown function is called, which can
- be used to customize the interface. Finally, the user input can be validated leave
- function. The NSIS Users Manual provides more information about these funtions.</p>
- <p>
- 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.0. The variable declarations can
- be found in the first lines of the header file for a certain page.</p>
- </div>
- </div>
- <h1>
- <a name="examples" id="examples">Example scripts</a></h1>
- <div>
- <p>
- The example scripts do not use the Modern UI 2.0 yet. To can upgrade any example
- (except InstallOptions.nsi) by inserting the MUI2.nsh header file instead of MUI.nsh.</p>
- <p>
- Basic: <a href="../../Examples/Modern%20UI/Basic.nsi">Basic.nsi</a><br />
- Welcome/Finish page: <a href="../../Examples/Modern%20UI/WelcomeFinish.nsi">WelcomeFinish.nsi</a><br />
- Multiple languages: <a href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a><br />
- Header image: <a href="../../Examples/Modern%20UI/HeaderBitmap.nsi">HeaderBitmap.nsi</a><br />
- Start Menu Folder page: <a href="../../Examples/Modern%20UI/StartMenu.nsi">StartMenu.nsi</a></p>
- </div>
- <h1>
- Credits</h1>
- <div>
- <p>
- Written by Joost Verburg.<br />
- Icons designed by Nikos Adamamas, aka adni18.<br />
- Thanks to Amir Szekely, aka KiCHiK, for his work on NSIS to make this possible.</p>
- </div>
- <h1>
- License</h1>
- <div>
- <p>
- The zlib/libpng license applies to the Modern UI.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_lic" src="images/closed.gif"
- onclick="toggle('trigger_lic', 'toggle_lic');" />
- License Terms</h3>
- <div class="toggle" id="toggle_lic">
- <pre>
-Copyright &copy; 2002-2007 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.
-</pre>
- </div>
- </div>
- </div>
- </td>
- </tr>
- </table>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>NSIS Modern User Interface - Documentation</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+ <style type="text/css">
+ /*<![CDATA[*/body
+ {
+ padding: 10px;
+ background-color: #F0F0F0;
+ font-size: 13px;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-weight: normal;
+ text-align: justify;
+ }
+ p, li
+ {
+ font-size: 13px;
+ }
+ table
+ {
+ margin: auto;
+ background-color: #FFFFFF;
+ }
+ .maintable
+ {
+ border: 2px solid #376EAB;
+ }
+ .parameter
+ {
+ font-weight: bold;
+ color: #6586AC;
+ }
+ h1
+ {
+ font-size: 20px;
+ color: #7A7272;
+ font-weight: normal;
+ }
+ h2
+ {
+ font-size: 17px;
+ font-weight: bold;
+ color: #303030;
+ }
+ h3
+ {
+ font-size: 14px;
+ font-weight: bold;
+ color: #2B5885;
+ }
+ pre
+ {
+ font-size: 13px;
+ }
+ div
+ {
+ margin: 20px;
+ }
+ div.settings
+ {
+ margin-right: 0;
+ }
+ a:link, a:visited, a:active
+ {
+ color: #294F75;
+ text-decoration: none;
+ }
+ a:hover
+ {
+ color: #182634;
+ text-decoration: underline;
+ }
+ .trigger
+ {
+ cursor: pointer;
+ cursor: hand;
+ height: 14px;
+ }
+ .toggle
+ {
+ display: none;
+ }
+ .options
+ {
+ text-align: center;
+ cursor: pointer;
+ cursor: hand;
+ color: #294F75;
+ }
+ /*]]>*/</style>
+
+ <script type="text/javascript">
+//<![CDATA[
+
+ var image_open = new Image();
+ image_open.src = "images/open.gif";
+ var image_closed = new Image();
+ image_closed.src = "images/closed.gif";
+
+ function toggle(image, section) {
+
+ if(document.all) {
+ if(document.all[section].style.display == "block") {
+ document.all[section].style.display = "none";
+ document.all[image].src = image_closed.src;
+ }
+ else
+ {
+ document.all[section].style.display = "block";
+ document.all[image].src = image_open.src;
+ }
+ }
+ else
+ {
+ if(document.getElementById(section).style.display == "block") {
+ document.getElementById(section).style.display = "none";
+ document.getElementById(image).src = image_closed.src;
+ }
+ else
+ {
+ document.getElementById(section).style.display = "block";
+ document.getElementById(image).src = image_open.src;
+ }
+ }
+
+ }
+
+ function expandall() {
+
+ var divNodeList = document.getElementsByTagName('div');
+ for (i = 0; i < divNodeList.length; i++) {
+ if(divNodeList[i].id) {
+ divNodeList[i].style.display = "block";
+ document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/open.gif";
+ }
+ }
+
+ }
+
+ function collapseall() {
+
+ var divNodeList = document.getElementsByTagName('div');
+ for (i = 0; i < divNodeList.length; i++) {
+ if(divNodeList[i].id) {
+ divNodeList[i].style.display = "none";
+ document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/closed.gif";
+ }
+ }
+
+ }
+
+//]]>
+ </script>
+
+</head>
+<body>
+ <table width="750" class="maintable" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <td>
+ <img src="images/header.gif" width="750" height="80" alt="" />
+ <p class="options">
+ <a onclick="expandall()">[Expand all]</a>&nbsp; &nbsp;<a onclick="collapseall()">[Collapse
+ all]</a></p>
+ <div>
+ <h1>
+ Introduction</h1>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ 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.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_scr" src="images/closed.gif"
+ onclick="toggle('trigger_scr', 'toggle_scr');" />
+ Screenshots</h3>
+ <div class="toggle" id="toggle_scr">
+ <p>
+ <img src="images/screen1.png" width="503" height="393" alt="" /></p>
+ <p>
+ <img src="images/screen2.png" width="503" height="393" alt="" /></p>
+ </div>
+ </div>
+ <h1>
+ Modern UI 2.0</h1>
+ <div>
+ <p>
+ This new version makes it easier to customize pages, because the same method can
+ be used to&nbsp; 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.</p>
+ <p>
+ 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.</p>
+ <p>
+ To upgrade a Modern UI 1.8 script, you should:</p>
+ <ul>
+ <li>Insert the MUI2.nsh header file instead of MUI.nsh.</li>
+ <li>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 itself have remained the same.</li>
+ <li>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.</li>
+ <li>Use the standard NSIS method to escape special characters in all texts. For example,
+ $\r$\n creates newline.</li>
+ </ul>
+ </div>
+ <h1>
+ Script header</h1>
+ <div>
+ <p>
+ The settings for the Modern UI should be inserted in the header of the script file.
+ It&#39;s important to follow the same order as the items below.&nbsp;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 <a href="#examples">
+ example scripts</a> too see how this is done in actual script files.</p>
+ <p>
+ Parameters are given in this format: <span class="parameter">required (option1 | option2)
+ [optional]</span></p>
+ </div>
+ <h2>
+ 1. Header file</h2>
+ <div>
+ <p>
+ First of all, add this line to the top of script to include the Modern UI:</p>
+ <pre>
+!include MUI2.nsh
+</pre>
+ </div>
+ <h2>
+ 2. Interface configuration</h2>
+ <div>
+ <p>
+ Then, you may want to use interface settings to change the look and feel of the
+ installer. These settings apply to all pages.<p>
+ 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.<p>
+ Examples:</p>
+ <pre>
+!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
+!define MUI_UI &quot;myUI.exe&quot; ;Value
+!define MUI_INSTFILESPAGE_COLORS &quot;FFFFFF 000000&quot; ;Two colors
+</pre>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_in" src="images/closed.gif"
+ onclick="toggle('trigger_in', 'toggle_in');" />
+ Interface settings</h3>
+ <div class="toggle" id="toggle_in">
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ingen" src="images/closed.gif"
+ onclick="toggle('trigger_ingen', 'toggle_ingen');" />
+ Page header</h3>
+ <div class="toggle" id="toggle_ingen">
+ <p>
+ <strong>MUI_ICON</strong> <span class="parameter">icon_file</span><br />
+ The icon for the installer.<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico</em></p>
+ <p>
+ <strong>MUI_UNICON</strong> <span class="parameter">icon_file</span><br />
+ The icon for the uninstaller.<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico</em></p>
+ <p>
+ <strong>MUI_HEADERIMAGE</strong><br />
+ Display an image on the header of the page.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of installers pages (recommended size: 150x57
+ pixels).<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of installers pages when using a RTL language
+ (recommended size: 150x57 pixels).<br />
+ <em>Default: Non-RTL bitmap</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ </div>
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of uninstaller pages (recommended size: 150x57
+ pixels).<br />
+ <em>Default: Installer header bitmap</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of uninstallers pages when using a RTL language
+ (recommended size: 150x57 pixels).<br />
+ <em>Default: Installer RTL header bitmap</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ </div>
+ <p>
+ <strong>MUI_HEADERIMAGE_RIGHT</strong><br />
+ 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).</p>
+ </div>
+ <p>
+ <strong>MUI_BGCOLOR</strong> <span class="parameter">(color: RRGGBBR hexadecimal)</span><br />
+ Background color for the header, the Welcome page and the Finish page.<br />
+ <em>Default: FFFFFF</em></p>
+ <p>
+ <strong>MUI_HEADER_TRANSPARENT_TEXT</strong><br />
+ Set a transparent background for the header's label controls. Useful for custom
+ user interfaces that set a bigger header image.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inres" src="images/closed.gif"
+ onclick="toggle('trigger_inres', 'toggle_inres');" />
+ Interface resources</h3>
+ <div class="toggle" id="toggle_inres">
+ <p>
+ <strong>MUI_UI</strong> <span class="parameter">ui_file</span><br />
+ The interface file with the dialog resources. Change this if you have made your
+ own customized UI.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern.exe</em></p>
+ <p>
+ <strong>MUI_UI_HEADERIMAGE</strong> <span class="parameter">ui_file</span><br />
+ The interface files with the dialog resource IDD_INST that contains a bitmap control
+ and space for the header bitmap.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe</em></p>
+ <p>
+ <strong>MUI_UI_HEADERIMAGE_RIGHT</strong> <span class="parameter">ui_file</span><br />
+ The interface files with the dialog resource IDD_INST that contains a bitmap control
+ and space for the header bitmap on the right side.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe</em></p>
+ <p>
+ <strong>MUI_UI_COMPONENTSPAGE_SMALLDESC</strong> <span class="parameter">ui_file</span><br />
+ The interface files with a customized dialog resource IDD_SELCOM with a small description
+ area.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe</em></p>
+ <p>
+ <strong>MUI_UI_COMPONENTSPAGE_NODESC</strong> <span class="parameter">ui_file</span><br />
+ The interface files with a customized dialog resource IDD_SELCOM without a description
+ area.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inwf" src="images/closed.gif"
+ onclick="toggle('trigger_inwf', 'toggle_inwf');" />
+ Installer welcome/finish page</h3>
+ <div class="toggle" id="toggle_inwf">
+ <p>
+ <strong>MUI_WELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inuwf" src="images/closed.gif"
+ onclick="toggle('trigger_inuwf', 'toggle_inuwf');" />
+ Uninstaller welcome/finish page</h3>
+ <div class="toggle" id="toggle_inuwf">
+ <p>
+ <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inl" src="images/closed.gif"
+ onclick="toggle('trigger_inl', 'toggle_inl');" />
+ License page</h3>
+ <div class="toggle" id="toggle_inl">
+ <p>
+ <strong>MUI_LICENSEPAGE_BGCOLOR</strong> <span class="parameter">(/windows | /grey |
+ (color: RRGGBB hexadecimal))</span><br />
+ 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).<br />
+ <em>Default: /windows</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inc" src="images/closed.gif"
+ onclick="toggle('trigger_inc', 'toggle_inc');" />
+ Components page</h3>
+ <div class="toggle" id="toggle_inc">
+ <p>
+ <strong>MUI_COMPONENTSPAGE_CHECKBITMAP</strong> <span class="parameter">bitmap_file</span><br />
+ The bitmap with images for the checks of the component select treeview.<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp</em></p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_SMALLDESC</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_NODESC</strong><br />
+ No description area.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ind" src="images/closed.gif"
+ onclick="toggle('trigger_ind', 'toggle_ind');" />
+ Directory page</h3>
+ <div class="toggle" id="toggle_ind">
+ <p>
+ <strong>MUI_DIRECTORYPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
+ The background color for the directory textbox.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ins" src="images/closed.gif"
+ onclick="toggle('trigger_ins', 'toggle_ins');" />
+ Start Menu folder page</h3>
+ <div class="toggle" id="toggle_ins">
+ <p>
+ <strong>MUI_STARTMENUPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
+ The background color for the startmenu directory list and textbox.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ini" src="images/closed.gif"
+ onclick="toggle('trigger_ini', 'toggle_ini');" />
+ Installation page</h3>
+ <div class="toggle" id="toggle_ini">
+ <p>
+ <strong>MUI_INSTFILESPAGE_COLORS</strong> <span class="parameter">(/windows | &quot;(foreground
+ color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)&quot;)</span><br />
+ The colors of the details screen. Use /windows for the default Windows colors.<br />
+ <em>Default: /windows</em></p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_PROGRESSBAR</strong> <span class="parameter">(&quot;&quot;
+ | colored | smooth)</span><br />
+ The style of the progress bar. Colored makes it use the MUI_INSTALLCOLORS.<br />
+ <em>Default: smooth</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inf" src="images/closed.gif"
+ onclick="toggle('trigger_inf', 'toggle_inf');" />
+ Installer finish page</h3>
+ <div class="toggle" id="toggle_inf">
+ <p>
+ <strong>MUI_FINISHPAGE_NOAUTOCLOSE</strong><br />
+ Do not automatically jump to the finish page, to allow the user to check the install
+ log.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_uinf" src="images/closed.gif"
+ onclick="toggle('trigger_uinf', 'toggle_uinf');" />
+ Uninstaller finish page</h3>
+ <div class="toggle" id="toggle_uinf">
+ <p>
+ <strong>MUI_UNFINISHPAGE_NOAUTOCLOSE</strong><br />
+ Do not automatically jump to the finish page, to allow the user to check the uninstall
+ log.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inaw" src="images/closed.gif"
+ onclick="toggle('trigger_inaw', 'toggle_inaw');" />
+ Abort warning</h3>
+ <div class="toggle" id="toggle_inaw">
+ <p>
+ <strong>MUI_ABORTWARNING</strong><br />
+ Show a message box with a warning when the user wants to close the installer.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_ABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the abort warning message box.</p>
+ <p>
+ <strong>MUI_ABORTWARNING_CANCEL_DEFAULT</strong><br />
+ Set the Cancel button as the default button on the message box.</p>
+ </div>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inuaw" src="images/closed.gif"
+ onclick="toggle('trigger_inuaw', 'toggle_inuaw');" />
+ Uninstaller abort warning</h3>
+ <div class="toggle" id="toggle_inuaw">
+ <p>
+ <strong>MUI_UNABORTWARNING</strong><br />
+ Show a message box with a warning when the user wants to close the uninstaller.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_UNABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the abort warning message box.</p>
+ <p>
+ <strong>MUI_UNABORTWARNING_CANCEL_DEFAULT</strong><br />
+ Set the Cancel button as the default button on the message box.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ <h2>
+ 3. Pages</h2>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ You can add multiple pages of certain types (for example, if you want the user to
+ specify multiple folders).</p>
+ <p>
+ Examples:</p>
+ <pre>
+!insertmacro MUI_PAGE_LICENSE &quot;License.rtf&quot;
+!insertmacro MUI_PAGE_COMPONENTS
+
+Var StartMenuFolder
+!insertmacro MUI_PAGE_STARTMENU &quot;Application&quot; $StartMenuFolder
+</pre>
+ <p>
+ 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.</p>
+ <p>
+ <strong>Installer pages</strong><br />
+ MUI_PAGE_WELCOME<br />
+ MUI_PAGE_LICENSE <span class="parameter">textfile</span><br />
+ MUI_PAGE_COMPONENTS<br />
+ MUI_PAGE_DIRECTORY<br />
+ MUI_PAGE_STARTMENU <span class="parameter">pageid variable</span><br />
+ MUI_PAGE_INSTFILES<br />
+ MUI_PAGE_FINISH</p>
+ <p>
+ <strong>Uninstaller pages</strong><br />
+ MUI_UNPAGE_WELCOME<br />
+ MUI_UNPAGE_CONFIRM<br />
+ MUI_UNPAGE_LICENSE <span class="parameter">textfile</span><br />
+ MUI_UNPAGE_COMPONENTS<br />
+ MUI_UNPAGE_DIRECTORY<br />
+ MUI_UNPAGE_INSTFILES<br />
+ MUI_UNPAGE_FINISH</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pg" src="images/closed.gif"
+ onclick="toggle('trigger_pg', 'toggle_pg');" />
+ Page settings</h3>
+ <div class="toggle" id="toggle_pg">
+ <p>
+ 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:</p>
+ <pre>
+;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
+</pre>
+ <p>
+ <p>
+ 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.</p>
+ <p>
+ 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.</p>
+ <p>
+ In all text settings, the doublequote character (&quot;) should be escaped in the
+ following form: $\&quot;</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgg" src="images/closed.gif"
+ onclick="toggle('trigger_pgg', 'toggle_pgg');" />
+ General page settings</h3>
+ <div class="toggle" id="toggle_pgg">
+ <p>
+ <strong>MUI_PAGE_HEADER_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the header of the page.</p>
+ <p>
+ <strong>MUI_PAGE_HEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
+ Subtext to display on the header of the page.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgw" src="images/closed.gif"
+ onclick="toggle('trigger_pgw', 'toggle_pgw');" />
+ Welcome page settings</h3>
+ <div class="toggle" id="toggle_pgw">
+ <p>
+ <strong>MUI_WELCOMEPAGE_TITLE</strong> <span class="parameter">title</span><br />
+ Title to display on the top of the page.</p>
+ <p>
+ <strong>MUI_WELCOMEPAGE_TITLE_3LINES</strong><br />
+ Extra space for the title area.</p>
+ <p>
+ <strong>MUI_WELCOMEPAGE_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the page.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgl" src="images/closed.gif"
+ onclick="toggle('trigger_pgl', 'toggle_pgl');" />
+ License page settings</h3>
+ <div class="toggle" id="toggle_pgl">
+ <p>
+ <strong>MUI_LICENSEPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_TEXT_BOTTOM</strong> <span class="parameter">text</span><br />
+ Text to display on the bottom of the page.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_BUTTON</strong> <span class="parameter">button_text</span><br />
+ Text to display on the 'I Agree' button.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_CHECKBOX</strong><br />
+ Display a checkbox the user has to check to agree with the license terms.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_LICENSEPAGE_CHECKBOX_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to agree with the license terms.</p>
+ </div>
+ <p>
+ <strong>MUI_LICENSEPAGE_RADIOBUTTONS</strong><br />
+ Display two radio buttons to allow the user to choose between accepting the license
+ terms or not.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to accept the license terms.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to decline the license terms.</p>
+ </div>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgc" src="images/closed.gif"
+ onclick="toggle('trigger_pgc', 'toggle_pgc');" />
+ Components page settings</h3>
+ <div class="toggle" id="toggle_pgc">
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_COMPLIST</strong> <span class="parameter">text</span><br />
+ Text to display on next to the components list.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_INSTTYPE</strong> <span class="parameter">text</span><br />
+ Text to display on next to the installation type combo box.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE</strong> <span class="parameter">text</span><br />
+ Text to display on the of the top of the description box.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO</strong> <span class="parameter">text</span><br />
+ Text to display inside the description box when no section is selected.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgd" src="images/closed.gif"
+ onclick="toggle('trigger_pgd', 'toggle_pgd');" />
+ Directory page settings</h3>
+ <div class="toggle" id="toggle_pgd">
+ <p>
+ <strong>MUI_DIRECTORYPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on top of the page.</p>
+ <p>
+ <strong>MUI_DIRECTORYPAGE_TEXT_DESTINATION</strong> <span class="parameter">text</span><br />
+ Text to display on the destination folder frame.</p>
+ <p>
+ <strong>MUI_DIRECTORYPAGE_VARIABLE</strong> <span class="parameter">variable</span><br />
+ Variable in which to store the selected folder.<br />
+ <em>Default: $INSTDIR</em></p>
+ <p>
+ <strong>MUI_DIRECTORYPAGE_VERIFYONLEAVE</strong><br />
+ 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.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgs" src="images/closed.gif"
+ onclick="toggle('trigger_pgs', 'toggle_pgs');" />
+ Start Menu folder page settings</h3>
+ <div class="toggle" id="toggle_pgs">
+ <p>
+ <strong>MUI_STARTMENUPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_TEXT_CHECKBOX</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to disable the Start Menu folder creation.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_DEFAULTFOLDER</strong> <span class="parameter">folder</span><br />
+ The default Start Menu Folder.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_NODISABLE</strong><br />
+ Do not display the checkbox to disable the creation of Start Menu shortcuts.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
+ <strong>MUI_STARTMENUPAGE_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
+ <strong>MUI_STARTMENUPAGE_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
+ 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.</p>
+ <p>
+ For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu
+ folder:</p>
+ <pre>
+!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
+ Delete &quot;$SMPROGRAMS\$R0\Your Shortcut.lnk&quot;
+</pre>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgi" src="images/closed.gif"
+ onclick="toggle('trigger_pgi', 'toggle_pgi');" />
+ Installation page settings</h3>
+ <div class="toggle" id="toggle_pgi">
+ <p>
+ <strong>MUI_INSTFILESPAGE_FINISHHEADER_TEXT</strong> <span class="parameter">text</span><br />
+ 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).</p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
+ 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).</p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_ABORTHEADER_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the header of the installation page when the installation has
+ been aborted.</p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
+ Subext to display on the header of the installation page when the installation has
+ been aborted.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgf" src="images/closed.gif"
+ onclick="toggle('trigger_pgf', 'toggle_pgf');" />
+ Finish page settings</h3>
+ <div class="toggle" id="toggle_pgf">
+ <p>
+ <strong>MUI_FINISHPAGE_TITLE</strong> <span class="parameter">title</span><br />
+ Title to display on the top of the page.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TITLE_3LINES</strong><br />
+ Extra space for the title area.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the page.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_LARGE</strong><br />
+ Extra space for the text area (if using checkboxes).</p>
+ <p>
+ <strong>MUI_FINISHPAGE_BUTTON</strong> <span class="parameter">text</span><br />
+ Text to display on the Finish button.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_CANCEL_ENABLED</strong><br />
+ Enable the Cancel button so the user can skip any options displayed on the finish
+ page.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_REBOOT</strong> <span class="parameter">text</span><br />
+ Text to display on the finish page when asking for a system reboot.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_REBOOTNOW</strong> <span class="parameter">text</span><br />
+ Text to display next to the 'Reboot now' option button.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_REBOOTLATER</strong> <span class="parameter">text</span><br />
+ Text to display next to the 'Reboot later' option button.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_REBOOTLATER_DEFAULT</strong><br />
+ Sets the 'Reboot later' option as the default option.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN</strong> <span class="parameter">exe_file</span><br />
+ 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.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_TEXT</strong> <span class="parameter">text</span><br />
+ Texts to display next to the 'Run program' checkbox.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_PARAMETERS</strong> <span class="parameter">parameters</span><br />
+ Parameters for the application to run. Don't forget to escape double quotes in the
+ value (use $\&quot;).</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_NOTCHECKED</strong><br />
+ Do not check the 'Run program' checkbox by default</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_FUNCTION</strong> <span class="parameter">function</span><br />
+ 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.</p>
+ </div>
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME</strong> <span class="parameter">file/url</span><br />
+ 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.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME_TEXT</strong> <span class="parameter">text</span><br />
+ Texts to display next to the 'Show Readme' checkbox.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME_NOTCHECKED</strong><br />
+ Do not check the 'Show Readme' checkbox by default</p>
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME_FUNCTION</strong> <span class="parameter">function</span><br />
+ 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.</p>
+ </div>
+ <p>
+ <strong>MUI_FINISHPAGE_LINK</strong> <span class="parameter">link_text</span><br />
+ Text for a link on the which the user can click to view a website or file.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_FINISHPAGE_LINK_LOCATION</strong> <span class="parameter">file/url</span><br />
+ 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.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_LINK_COLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
+ Text color for the link on the Finish page.<br />
+ <em>Default: 000080</em></p>
+ </div>
+ <p>
+ <strong>MUI_FINISHPAGE_NOREBOOTSUPPORT</strong><br />
+ 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.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgu" src="images/closed.gif"
+ onclick="toggle('trigger_pgu', 'toggle_pgu');" />
+ Uninstall confirm page settings</h3>
+ <div class="toggle" id="toggle_pgu">
+ <p>
+ <strong>MUI_UNCONFIRMPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_UNCONFIRMPAGE_TEXT_LOCATION</strong> <span class="parameter">text</span><br />
+ Text to display next to the uninstall location text box.</p>
+ </div>
+ </div>
+ </div>
+ <h2>
+ 4. Language files</h2>
+ <div>
+ <p>
+ Insert the Modern UI language files for the languages to want to include.</p>
+ <pre>
+!insertmacro MUI_LANGUAGE &quot;English&quot;
+</pre>
+ <p>
+ The standard NSIS language files are loaded automatically, there is no need to use
+ LoadLanguageFile.</p>
+ </div>
+ <h2>
+ 5. Reserve files</h2>
+ <div>
+ <p>
+ 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:</p>
+ <pre>
+ReserveFile MyPlugin.dll
+!insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
+...
+</pre>
+ </div>
+ <h1>
+ Script code for pages</h1>
+ <div>
+ <p>
+ 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.</p>
+ <h2>
+ Components page descriptions</h2>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ To set a description for a section, an additional parameter needs to be added to
+ Section commmand with a unique identifier for the section. This name can later be
+ used to set the description for this section.</p>
+ <pre>
+Section &quot;Section Name 1&quot; Section1
+ ...
+SectionEnd
+</pre>
+ <p>
+ After the sections, use these macros to set the descriptions:</p>
+ <pre>
+LangString DESC_Section1 ${LANG_ENGLISH} &quot;Description of section 1.&quot;
+LangString DESC_Section2 ${LANG_ENGLISH} &quot;Description of section 2.&quot;
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+</pre>
+ <p>
+ For the uninstaller, use the MUI_UNFUNCTION_DESCRIPTION_BEGIN and MUI_UNFUNCTION_DESCRIPTION_END
+ macros.</p>
+ </div>
+ <h2>
+ Start Menu folder</h2>
+ <div>
+ <p>
+ Put the code to write the shortcuts (using CreateShortcut) between the MUI_STARTMENU_WRITE_BEGIN
+ and MUI_STARTMENU_WRITE_END macros:</p>
+ <pre>
+!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
+ ...create shortcuts...
+!insertmacro MUI_STARTMENU_WRITE_END
+</pre>
+ <p>
+ 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.</p>
+ <p>
+ The variable which contains the folder and the page ID are set as parameters of
+ the page macro.</p>
+ </div>
+ </div>
+ <h1>
+ Language selection dialog</h1>
+ <div>
+ <p>
+ If you want the installer to display a language selection dialog (see the the <a
+ href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a> example),
+ insert the MUI_LANGDLL_DISPLAY macro in the .onInit function:</p>
+ <pre>
+Function .onInit
+
+ !insertmacro MUI_LANGDLL_DISPLAY
+
+FunctionEnd
+</pre>
+ <p>
+ This macro can also be used in the un.onInit function.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_lss" src="images/closed.gif"
+ onclick="toggle('trigger_lss', 'toggle_lss');" />
+ Settings for registry storage of selected language</h3>
+ <div class="toggle" id="toggle_lss">
+ <p>
+ To remember the user's preference, you can define a registry key. These defines
+ should be set before inserting the installation page macro.</p>
+ <p>
+ <strong>MUI_LANGDLL_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
+ <strong>MUI_LANGDLL_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
+ <strong>MUI_LANGDLL_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
+ 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.</p>
+ <p>
+ For the uninstaller, insert the MUI_UNGETLANGUAGE macro in un.onInit to get the
+ stored language preference:</p>
+ <pre>
+Function un.onInit
+
+ !insertmacro MUI_UNGETLANGUAGE
+
+FunctionEnd
+</pre>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_lsin" src="images/closed.gif"
+ onclick="toggle('trigger_lsin', 'toggle_lsin');" />
+ Interface settings for selection dialog</h3>
+ <div class="toggle" id="toggle_lsin">
+ <p>
+ To customize the language selection dialog interface, use these defines before inserting
+ the MUI_LANGDLL_DISPLAY macro.</p>
+ <p>
+ <strong>MUI_LANGDLL_WINDOWTITLE</strong> <span class="parameter">text</span><br />
+ The window title of the language selection dialog.</p>
+ <p>
+ <strong>MUI_LANGDLL_INFO</strong> <span class="parameter">text</span><br />
+ The text to display on the language selection dialog.</p>
+ <p>
+ <strong>MUI_LANGDLL_ALWAYSSHOW</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_LANGDLL_ALLLANGUAGES</strong><br />
+ Always show all available languages and don't filter according to their codepage.</p>
+ </div>
+ </div>
+ <h1>
+ Custom pages</h1>
+ <div>
+ <p>
+ If you want add your custom pages to your installer, you can insert your own page
+ commands between the page macros.</p>
+ <pre>
+!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
+</pre>
+ <p>
+ Use the MUI_HEADER_TEXT macro to set the text on the page header in a page function:</p>
+ <pre>
+LangString PAGE_TITLE ${LANG_ENGLISH} &quot;Title&quot;
+LangString PAGE_SUBTITLE ${LANG_ENGLISH} &quot;Subtitle&quot;
+
+Function CustomPageFunction
+ !insermacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
+ ...
+FuctionEnd
+</pre>
+ </div>
+ <h1>
+ Custom functions</h1>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ Example:</p>
+ <pre class="text">
+!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
+
+Function myGUIInit
+ ...
+FunctionEnd</pre>
+ <p>
+ Modern UI pages can also customized using custom functions.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_cfg" src="images/closed.gif"
+ onclick="toggle('trigger_cfg', 'toggle_cfg');" />
+ General Custom Functions</h3>
+ <div class="toggle" id="toggle_cfg">
+ <p>
+ These defines should be set before inserting the language macros.</p>
+ <p>
+ <strong>MUI_CUSTOMFUNCTION_GUIINIT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_UNGUIINIT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_ABORT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_UNABORT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_MOUSEOVERSECTION</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_UNMOUSEOVERSECTION</strong> <span class="parameter">function</span></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_cfpg" src="images/closed.gif"
+ onclick="toggle('trigger_cfpg', 'toggle_cfpg');" />
+ Page Custom Functions</h3>
+ <div class="toggle" id="toggle_cfpg">
+ <p>
+ These defines should be set before inserting a page macro.</p>
+ <p>
+ <strong>MUI_PAGE_CUSTOMFUNCTION_PRE</strong> <span class="parameter">function</span><br />
+ <strong>MUI_PAGE_CUSTOMFUNCTION_SHOW</strong> <span class="parameter">function</span><br />
+ </p>
+ <p>
+ The pre function is called first and allows you to initalize variables or decide
+ wehther the page should be skipped. Then, the shown function is called, which can
+ be used to customize the interface. Finally, the user input can be validated leave
+ function. The NSIS Users Manual provides more information about these funtions.</p>
+ <p>
+ 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.0. The variable declarations can
+ be found in the first lines of the header file for a certain page.</p>
+ </div>
+ </div>
+ <h1>
+ <a name="examples" id="examples">Example scripts</a></h1>
+ <div>
+ <p>
+ The example scripts do not use the Modern UI 2.0 yet. To can upgrade any example
+ (except InstallOptions.nsi) by inserting the MUI2.nsh header file instead of MUI.nsh.</p>
+ <p>
+ Basic: <a href="../../Examples/Modern%20UI/Basic.nsi">Basic.nsi</a><br />
+ Welcome/Finish page: <a href="../../Examples/Modern%20UI/WelcomeFinish.nsi">WelcomeFinish.nsi</a><br />
+ Multiple languages: <a href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a><br />
+ Header image: <a href="../../Examples/Modern%20UI/HeaderBitmap.nsi">HeaderBitmap.nsi</a><br />
+ Start Menu Folder page: <a href="../../Examples/Modern%20UI/StartMenu.nsi">StartMenu.nsi</a></p>
+ </div>
+ <h1>
+ Credits</h1>
+ <div>
+ <p>
+ Written by Joost Verburg.<br />
+ Icons designed by Nikos Adamamas, aka adni18.<br />
+ Thanks to Amir Szekely, aka KiCHiK, for his work on NSIS to make this possible.</p>
+ </div>
+ <h1>
+ License</h1>
+ <div>
+ <p>
+ The zlib/libpng license applies to the Modern UI.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_lic" src="images/closed.gif"
+ onclick="toggle('trigger_lic', 'toggle_lic');" />
+ License Terms</h3>
+ <div class="toggle" id="toggle_lic">
+ <pre>
+Copyright &copy; 2002-2008 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.
+</pre>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/Contrib/Modern UI 2/SConscript b/Contrib/Modern UI 2/SConscript
index e683570..a3d9083 100755
--- a/Contrib/Modern UI 2/SConscript
+++ b/Contrib/Modern UI 2/SConscript
@@ -14,6 +14,7 @@ doc_images = Split("""
""")
contribs = Split("""
+ Deprecated.nsh
Interface.nsh
Localization.nsh
MUI2.nsh
diff --git a/Contrib/Modern UI/Changelog.txt b/Contrib/Modern UI/Changelog.txt
index 673615c..5fb0c17 100755
--- a/Contrib/Modern UI/Changelog.txt
+++ b/Contrib/Modern UI/Changelog.txt
@@ -1,263 +1,263 @@
-NSIS Modern User Interface
-Version History
-
-1.8 - August 9, 2007
-* Uses the new language files
-* Updated documentation
-* Although MUI_DIRECTORYPAGE_BGCOLOR and MUI_STARTMENUPAGE_BGCOLOR are documented as interface
- setttings 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)
-* Langauge 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 langauge 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 definend (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
+NSIS Modern User Interface
+Version History
+
+1.8 - August 9, 2007
+* Uses the new language files
+* Updated documentation
+* Although MUI_DIRECTORYPAGE_BGCOLOR and MUI_STARTMENUPAGE_BGCOLOR are documented as interface
+ setttings 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)
+* Langauge 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 langauge 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 definend (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/Contrib/Modern UI/License.txt b/Contrib/Modern UI/License.txt
index c1d2673..506ea5f 100755
--- a/Contrib/Modern UI/License.txt
+++ b/Contrib/Modern UI/License.txt
@@ -1,10 +1,10 @@
-Copyright © 2002-2007 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.
+Copyright © 2002-2008 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/Contrib/Modern UI/Readme.html b/Contrib/Modern UI/Readme.html
index e449beb..4d16e57 100755
--- a/Contrib/Modern UI/Readme.html
+++ b/Contrib/Modern UI/Readme.html
@@ -1,1150 +1,1150 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>NSIS Modern User Interface - Documentation</title>
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
- <style type="text/css">
- /*<![CDATA[*/body
- {
- padding: 10px;
- background-color: #F0F0F0;
- font-size: 13px;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: normal;
- text-align: justify;
- }
- p, li
- {
- font-size: 13px;
- }
- table
- {
- margin: auto;
- background-color: #FFFFFF;
- }
- .maintable
- {
- border: 2px solid #376EAB;
- }
- .parameter
- {
- font-weight: bold;
- color: #6586AC;
- }
- h1
- {
- font-size: 20px;
- color: #7A7272;
- font-weight: normal;
- }
- h2
- {
- font-size: 17px;
- font-weight: bold;
- color: #303030;
- }
- h3
- {
- font-size: 14px;
- font-weight: bold;
- color: #2B5885;
- }
- pre
- {
- font-size: 13px;
- }
- div
- {
- margin: 20px;
- }
- div.settings
- {
- margin-right: 0;
- }
- a:link, a:visited, a:active
- {
- color: #294F75;
- text-decoration: none;
- }
- a:hover
- {
- color: #182634;
- text-decoration: underline;
- }
- .trigger
- {
- cursor: pointer;
- cursor: hand;
- height: 14px;
- }
- .toggle
- {
- display: none;
- }
- .options
- {
- text-align: center;
- cursor: pointer;
- cursor: hand;
- color: #294F75;
- }
- /*]]>*/</style>
-
- <script type="text/javascript">
-//<![CDATA[
-
- var image_open = new Image();
- image_open.src = "images/open.gif";
- var image_closed = new Image();
- image_closed.src = "images/closed.gif";
-
- function toggle(image, section) {
-
- if(document.all) {
- if(document.all[section].style.display == "block") {
- document.all[section].style.display = "none";
- document.all[image].src = image_closed.src;
- }
- else
- {
- document.all[section].style.display = "block";
- document.all[image].src = image_open.src;
- }
- }
- else
- {
- if(document.getElementById(section).style.display == "block") {
- document.getElementById(section).style.display = "none";
- document.getElementById(image).src = image_closed.src;
- }
- else
- {
- document.getElementById(section).style.display = "block";
- document.getElementById(image).src = image_open.src;
- }
- }
-
- }
-
- function expandall() {
-
- var divNodeList = document.getElementsByTagName('div');
- for (i = 0; i < divNodeList.length; i++) {
- if(divNodeList[i].id) {
- divNodeList[i].style.display = "block";
- document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/open.gif";
- }
- }
-
- }
-
- function collapseall() {
-
- var divNodeList = document.getElementsByTagName('div');
- for (i = 0; i < divNodeList.length; i++) {
- if(divNodeList[i].id) {
- divNodeList[i].style.display = "none";
- document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/closed.gif";
- }
- }
-
- }
-
-//]]>
- </script>
-
-</head>
-<body>
- <table width="750" class="maintable" cellspacing="0" cellpadding="0" align="center">
- <tr>
- <td>
- <img src="images/header.gif" width="750" height="80" alt="" />
- <p class="options">
- <a onclick="expandall()">[Expand all]</a>&nbsp; &nbsp;<a onclick="collapseall()">[Collapse
- all]</a></p>
- <div>
- <h1>
- Introduction</h1>
- <div>
- <p>
- 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.</p>
- <p>
- 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.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_scr" src="images/closed.gif"
- onclick="toggle('trigger_scr', 'toggle_scr');" />
- Screenshots</h3>
- <div class="toggle" id="toggle_scr">
- <p>
- <img src="images/screen1.png" width="503" height="393" alt="" /></p>
- <p>
- <img src="images/screen2.png" width="503" height="393" alt="" /></p>
- </div>
- </div>
- <h1>
- Script header</h1>
- <div>
- <p>
- The settings for the Modern UI should be inserted in the header of the script file.
- It&#39;s important to follow the same order as the items below.&nbsp;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 <a href="#examples">
- example scripts</a> too see how this is done in actual script files.</p>
- <p>
- Parameters are given in this format: <span class="parameter">required (option1 | option2)
- [optional]</span></p>
- <h2>
- 1. Header file</h2>
- <div>
- <p>
- First of all, add this line to the top of script to include the Modern UI:</p>
- <pre>
-!include &quot;MUI.nsh&quot;
-</pre>
- </div>
- <h2>
- 2. Interface configuration</h2>
- <div>
- <p>
- Then, you may want to use interface settings to change the look and feel of the
- installer. These settings apply to all pages.<p>
- 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.<p>
- Examples:</p>
- <pre>
-!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
-!define MUI_UI &quot;myUI.exe&quot; ;Value
-!define MUI_INSTFILESPAGE_COLORS &quot;FFFFFF 000000&quot; ;Two colors
-</pre>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_in" src="images/closed.gif"
- onclick="toggle('trigger_in', 'toggle_in');" />
- Interface settings</h3>
- <div class="toggle" id="toggle_in">
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ingen" src="images/closed.gif"
- onclick="toggle('trigger_ingen', 'toggle_ingen');" />
- Page header</h3>
- <div class="toggle" id="toggle_ingen">
- <p>
- <strong>MUI_ICON</strong> <span class="parameter">icon_file</span><br />
- The icon for the installer.<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico</em></p>
- <p>
- <strong>MUI_UNICON</strong> <span class="parameter">icon_file</span><br />
- The icon for the uninstaller.<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico</em></p>
- <p>
- <strong>MUI_HEADERIMAGE</strong><br />
- Display an image on the header of the page.</p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of installers pages (recommended size: 150x57
- pixels).<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP_NOSTRETCH</strong><br />
- 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.</p>
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of installers pages when using a RTL language
- (recommended size: 150x57 pixels).<br />
- <em>Default: Non-RTL bitmap</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- </div>
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of uninstaller pages (recommended size: 150x57
- pixels).<br />
- <em>Default: Installer header bitmap</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH</strong><br />
- 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.</p>
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
- Bitmap image to display on the header of uninstallers pages when using a RTL language
- (recommended size: 150x57 pixels).<br />
- <em>Default: Installer RTL header bitmap</em></p>
- <div class="settings">
- <p>
- <strong>MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- </div>
- <p>
- <strong>MUI_HEADERIMAGE_RIGHT</strong><br />
- 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).</p>
- </div>
- <p>
- <strong>MUI_BGCOLOR</strong> <span class="parameter">(color: RRGGBBR hexadecimal)</span><br />
- Background color for the header, the Welcome page and the Finish page.<br />
- <em>Default: FFFFFF</em></p>
- <p>
- <strong>MUI_HEADER_TRANSPARENT_TEXT</strong><br />
- Set a transparent background for the header's label controls. Useful for custom
- user interfaces that set a bigger header image.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inres" src="images/closed.gif"
- onclick="toggle('trigger_inres', 'toggle_inres');" />
- Interface resources</h3>
- <div class="toggle" id="toggle_inres">
- <p>
- <strong>MUI_UI</strong> <span class="parameter">ui_file</span><br />
- The interface file with the dialog resources. Change this if you have made your
- own customized UI.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern.exe</em></p>
- <p>
- <strong>MUI_UI_HEADERIMAGE</strong> <span class="parameter">ui_file</span><br />
- The interface files with the dialog resource IDD_INST that contains a bitmap control
- and space for the header bitmap.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe</em></p>
- <p>
- <strong>MUI_UI_HEADERIMAGE_RIGHT</strong> <span class="parameter">ui_file</span><br />
- The interface files with the dialog resource IDD_INST that contains a bitmap control
- and space for the header bitmap on the right side.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe</em></p>
- <p>
- <strong>MUI_UI_COMPONENTSPAGE_SMALLDESC</strong> <span class="parameter">ui_file</span><br />
- The interface files with a customized dialog resource IDD_SELCOM with a small description
- area.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe</em></p>
- <p>
- <strong>MUI_UI_COMPONENTSPAGE_NODESC</strong> <span class="parameter">ui_file</span><br />
- The interface files with a customized dialog resource IDD_SELCOM without a description
- area.<br />
- <em>Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inwf" src="images/closed.gif"
- onclick="toggle('trigger_inwf', 'toggle_inwf');" />
- Installer welcome/finish page</h3>
- <div class="toggle" id="toggle_inwf">
- <p>
- <strong>MUI_WELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
- <div class="settings">
- <p>
- <strong>MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- <p>
- <strong>MUI_WELCOMEFINISHPAGE_INI</strong> <span class="parameter">ini_file</span><br />
- InstallOptions INI file for the Welcome page and the Finish page.<br />
- <em>Default: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inuwf" src="images/closed.gif"
- onclick="toggle('trigger_inuwf', 'toggle_inuwf');" />
- Uninstaller welcome/finish page</h3>
- <div class="toggle" id="toggle_inuwf">
- <p>
- <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
- Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
- <div class="settings">
- <p>
- <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
- 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.</p>
- </div>
- <p>
- <strong>MUI_UNWELCOMEFINISHPAGE_INI</strong> <span class="parameter">ini_file</span><br />
- InstallOptions INI file for the uninstaller Welcome page and the Finish page.<br />
- <em>Default: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inl" src="images/closed.gif"
- onclick="toggle('trigger_inl', 'toggle_inl');" />
- License page</h3>
- <div class="toggle" id="toggle_inl">
- <p>
- <strong>MUI_LICENSEPAGE_BGCOLOR</strong> <span class="parameter">(/windows | /grey |
- (color: RRGGBB hexadecimal))</span><br />
- 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).<br />
- <em>Default: /windows</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inc" src="images/closed.gif"
- onclick="toggle('trigger_inc', 'toggle_inc');" />
- Components page</h3>
- <div class="toggle" id="toggle_inc">
- <p>
- <strong>MUI_COMPONENTSPAGE_CHECKBITMAP</strong> <span class="parameter">bitmap_file</span><br />
- The bitmap with images for the checks of the component select treeview.<br />
- <em>Default: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp</em></p>
- <p>
- <strong>MUI_COMPONENTSPAGE_SMALLDESC</strong><br />
- 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.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_NODESC</strong><br />
- No description area.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ind" src="images/closed.gif"
- onclick="toggle('trigger_ind', 'toggle_ind');" />
- Directory page</h3>
- <div class="toggle" id="toggle_ind">
- <p>
- <strong>MUI_DIRECTORYPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
- The background color for the directory textbox.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ins" src="images/closed.gif"
- onclick="toggle('trigger_ins', 'toggle_ins');" />
- Start Menu folder page</h3>
- <div class="toggle" id="toggle_ins">
- <p>
- <strong>MUI_STARTMENUPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
- The background color for the startmenu directory list and textbox.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_ini" src="images/closed.gif"
- onclick="toggle('trigger_ini', 'toggle_ini');" />
- Installation page</h3>
- <div class="toggle" id="toggle_ini">
- <p>
- <strong>MUI_INSTFILESPAGE_COLORS</strong> <span class="parameter">(/windows | &quot;(foreground
- color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)&quot;)</span><br />
- The colors of the details screen. Use /windows for the default Windows colors.<br />
- <em>Default: /windows</em></p>
- <p>
- <strong>MUI_INSTFILESPAGE_PROGRESSBAR</strong> <span class="parameter">(&quot;&quot;
- | colored | smooth)</span><br />
- The style of the progress bar. Colored makes it use the MUI_INSTALLCOLORS.<br />
- <em>Default: smooth</em></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inf" src="images/closed.gif"
- onclick="toggle('trigger_inf', 'toggle_inf');" />
- Installer finish page</h3>
- <div class="toggle" id="toggle_inf">
- <p>
- <strong>MUI_FINISHPAGE_NOAUTOCLOSE</strong><br />
- Do not automatically jump to the finish page, to allow the user to check the install
- log.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_uinf" src="images/closed.gif"
- onclick="toggle('trigger_uinf', 'toggle_uinf');" />
- Uninstaller finish page</h3>
- <div class="toggle" id="toggle_uinf">
- <p>
- <strong>MUI_UNFINISHPAGE_NOAUTOCLOSE</strong><br />
- Do not automatically jump to the finish page, to allow the user to check the uninstall
- log.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inaw" src="images/closed.gif"
- onclick="toggle('trigger_inaw', 'toggle_inaw');" />
- Abort warning</h3>
- <div class="toggle" id="toggle_inaw">
- <p>
- <strong>MUI_ABORTWARNING</strong><br />
- Show a message box with a warning when the user wants to close the installer.</p>
- <div class="settings">
- <p>
- <strong>MUI_ABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the abort warning message box.</p>
- <p>
- <strong>MUI_ABORTWARNING_CANCEL_DEFAULT</strong><br />
- Set the Cancel button as the default button on the message box.</p>
- </div>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_inuaw" src="images/closed.gif"
- onclick="toggle('trigger_inuaw', 'toggle_inuaw');" />
- Uninstaller abort warning</h3>
- <div class="toggle" id="toggle_inuaw">
- <p>
- <strong>MUI_UNABORTWARNING</strong><br />
- Show a message box with a warning when the user wants to close the uninstaller.</p>
- <div class="settings">
- <p>
- <strong>MUI_UNABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the abort warning message box.</p>
- <p>
- <strong>MUI_UNABORTWARNING_CANCEL_DEFAULT</strong><br />
- Set the Cancel button as the default button on the message box.</p>
- </div>
- </div>
- </div>
- </div>
- <h2>
- 3. Pages</h2>
- <div>
- <p>
- 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.</p>
- <p>
- You can add multiple pages of certain types (for example, if you want the user to
- specify multiple folders).</p>
- <p>
- Examples:</p>
- <pre>
-!insertmacro MUI_PAGE_LICENSE &quot;License.rtf&quot;
-!insertmacro MUI_PAGE_COMPONENTS
-
-Var STARTMENU_FOLDER
-!insertmacro MUI_PAGE_STARTMENU &quot;Application&quot; $StartMenuFolder
-</pre>
- <p>
- 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.</p>
- <p>
- <strong>Installer pages</strong><br />
- MUI_PAGE_WELCOME<br />
- MUI_PAGE_LICENSE <span class="parameter">textfile</span><br />
- MUI_PAGE_COMPONENTS<br />
- MUI_PAGE_DIRECTORY<br />
- MUI_PAGE_STARTMENU <span class="parameter">pageid variable</span><br />
- MUI_PAGE_INSTFILES<br />
- MUI_PAGE_FINISH</p>
- <p>
- <strong>Uninstaller pages</strong><br />
- MUI_UNPAGE_WELCOME<br />
- MUI_UNPAGE_CONFIRM<br />
- MUI_UNPAGE_LICENSE <span class="parameter">textfile</span><br />
- MUI_UNPAGE_COMPONENTS<br />
- MUI_UNPAGE_DIRECTORY<br />
- MUI_UNPAGE_INSTFILES<br />
- MUI_UNPAGE_FINISH</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pg" src="images/closed.gif"
- onclick="toggle('trigger_pg', 'toggle_pg');" />
- Page settings</h3>
- <div class="toggle" id="toggle_pg">
- <p>
- 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:</p>
- <pre>
-;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
-</pre>
- <p>
- <p>
- 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.</p>
- <p>
- 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.</p>
- <p>
- In all text settings, the doublequote character (&quot;) should be escaped in the
- following form: $\&quot;</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgg" src="images/closed.gif"
- onclick="toggle('trigger_pgg', 'toggle_pgg');" />
- General page settings</h3>
- <div class="toggle" id="toggle_pgg">
- <p>
- <strong>MUI_PAGE_HEADER_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the header of the page.</p>
- <p>
- <strong>MUI_PAGE_HEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
- Subtext to display on the header of the page.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgw" src="images/closed.gif"
- onclick="toggle('trigger_pgw', 'toggle_pgw');" />
- Welcome page settings</h3>
- <div class="toggle" id="toggle_pgw">
- <p>
- To add a newline to any of these texts, use \r\n instead of $\r$\n.</p>
- <p>
- <strong>MUI_WELCOMEPAGE_TITLE</strong> <span class="parameter">title</span><br />
- Title to display on the top of the page.</p>
- <p>
- <strong>MUI_WELCOMEPAGE_TITLE_3LINES</strong><br />
- Extra space for the title area.</p>
- <p>
- <strong>MUI_WELCOMEPAGE_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the page.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgl" src="images/closed.gif"
- onclick="toggle('trigger_pgl', 'toggle_pgl');" />
- License page settings</h3>
- <div class="toggle" id="toggle_pgl">
- <p>
- <strong>MUI_LICENSEPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_LICENSEPAGE_TEXT_BOTTOM</strong> <span class="parameter">text</span><br />
- Text to display on the bottom of the page.</p>
- <p>
- <strong>MUI_LICENSEPAGE_BUTTON</strong> <span class="parameter">button_text</span><br />
- Text to display on the 'I Agree' button.</p>
- <p>
- <strong>MUI_LICENSEPAGE_CHECKBOX</strong><br />
- Display a checkbox the user has to check to agree with the license terms.</p>
- <div class="settings">
- <p>
- <strong>MUI_LICENSEPAGE_CHECKBOX_TEXT</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to agree with the license terms.</p>
- </div>
- <p>
- <strong>MUI_LICENSEPAGE_RADIOBUTTONS</strong><br />
- Display two radio buttons to allow the user to choose between accepting the license
- terms or not.</p>
- <div class="settings">
- <p>
- <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to accept the license terms.</p>
- <p>
- <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to decline the license terms.</p>
- </div>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgc" src="images/closed.gif"
- onclick="toggle('trigger_pgc', 'toggle_pgc');" />
- Components page settings</h3>
- <div class="toggle" id="toggle_pgc">
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_COMPLIST</strong> <span class="parameter">text</span><br />
- Text to display on next to the components list.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_INSTTYPE</strong> <span class="parameter">text</span><br />
- Text to display on next to the installation type combo box.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE</strong> <span class="parameter">text</span><br />
- Text to display on the of the top of the description box.</p>
- <p>
- <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO</strong> <span class="parameter">text</span><br />
- Text to display inside the description box when no section is selected.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgd" src="images/closed.gif"
- onclick="toggle('trigger_pgd', 'toggle_pgd');" />
- Directory page settings</h3>
- <div class="toggle" id="toggle_pgd">
- <p>
- <strong>MUI_DIRECTORYPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on top of the page.</p>
- <p>
- <strong>MUI_DIRECTORYPAGE_TEXT_DESTINATION</strong> <span class="parameter">text</span><br />
- Text to display on the destination folder frame.</p>
- <p>
- <strong>MUI_DIRECTORYPAGE_VARIABLE</strong> <span class="parameter">variable</span><br />
- Variable in which to store the selected folder.<br />
- <em>Default: $INSTDIR</em></p>
- <p>
- <strong>MUI_DIRECTORYPAGE_VERIFYONLEAVE</strong><br />
- 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.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgs" src="images/closed.gif"
- onclick="toggle('trigger_pgs', 'toggle_pgs');" />
- Start Menu folder page settings</h3>
- <div class="toggle" id="toggle_pgs">
- <p>
- <strong>MUI_STARTMENUPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_TEXT_CHECKBOX</strong> <span class="parameter">text</span><br />
- Text to display next to the checkbox to disable the Start Menu folder creation.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_DEFAULTFOLDER</strong> <span class="parameter">folder</span><br />
- The default Start Menu Folder.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_NODISABLE</strong><br />
- Do not display the checkbox to disable the creation of Start Menu shortcuts.</p>
- <p>
- <strong>MUI_STARTMENUPAGE_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
- <strong>MUI_STARTMENUPAGE_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
- <strong>MUI_STARTMENUPAGE_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
- 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.</p>
- <p>
- For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu
- folder:</p>
- <pre>
-!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
- Delete &quot;$SMPROGRAMS\$R0\Your Shortcut.lnk&quot;
-</pre>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgi" src="images/closed.gif"
- onclick="toggle('trigger_pgi', 'toggle_pgi');" />
- Installation page settings</h3>
- <div class="toggle" id="toggle_pgi">
- <p>
- <strong>MUI_INSTFILESPAGE_FINISHHEADER_TEXT</strong> <span class="parameter">text</span><br />
- 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).</p>
- <p>
- <strong>MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
- 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).</p>
- <p>
- <strong>MUI_INSTFILESPAGE_ABORTHEADER_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the header of the installation page when the installation has
- been aborted.</p>
- <p>
- <strong>MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
- Subext to display on the header of the installation page when the installation has
- been aborted.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgf" src="images/closed.gif"
- onclick="toggle('trigger_pgf', 'toggle_pgf');" />
- Finish page settings</h3>
- <div class="toggle" id="toggle_pgf">
- <p>
- To add a newline to any of these texts, use \r\n instead of $\r$\n.</p>
- <p>
- <strong>MUI_FINISHPAGE_TITLE</strong> <span class="parameter">title</span><br />
- Title to display on the top of the page.</p>
- <p>
- <strong>MUI_FINISHPAGE_TITLE_3LINES</strong><br />
- Extra space for the title area.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT</strong> <span class="parameter">text</span><br />
- Text to display on the page.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_LARGE</strong><br />
- Extra space for the text area (if using checkboxes).</p>
- <p>
- <strong>MUI_FINISHPAGE_BUTTON</strong> <span class="parameter">text</span><br />
- Text to display on the Finish button.</p>
- <p>
- <strong>MUI_FINISHPAGE_CANCEL_ENABLED</strong><br />
- Enable the Cancel button so the user can skip any options displayed on the finish
- page.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_REBOOT</strong> <span class="parameter">text</span><br />
- Text to display on the finish page when asking for a system reboot.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_REBOOTNOW</strong> <span class="parameter">text</span><br />
- Text to display next to the 'Reboot now' option button.</p>
- <p>
- <strong>MUI_FINISHPAGE_TEXT_REBOOTLATER</strong> <span class="parameter">text</span><br />
- Text to display next to the 'Reboot later' option button.</p>
- <p>
- <strong>MUI_FINISHPAGE_REBOOTLATER_DEFAULT</strong><br />
- Sets the 'Reboot later' option as the default option.</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN</strong> <span class="parameter">exe_file</span><br />
- 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.</p>
- <div class="settings">
- <p>
- <strong>MUI_FINISHPAGE_RUN_TEXT</strong> <span class="parameter">text</span><br />
- Texts to display next to the 'Run program' checkbox.</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN_PARAMETERS</strong> <span class="parameter">parameters</span><br />
- Parameters for the application to run. Don't forget to escape double quotes in the
- value (use $\&quot;).</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN_NOTCHECKED</strong><br />
- Do not check the 'Run program' checkbox by default</p>
- <p>
- <strong>MUI_FINISHPAGE_RUN_FUNCTION</strong> <span class="parameter">function</span><br />
- 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.</p>
- </div>
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME</strong> <span class="parameter">file/url</span><br />
- 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.</p>
- <div class="settings">
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME_TEXT</strong> <span class="parameter">text</span><br />
- Texts to display next to the 'Show Readme' checkbox.</p>
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME_NOTCHECKED</strong><br />
- Do not check the 'Show Readme' checkbox by default</p>
- <p>
- <strong>MUI_FINISHPAGE_SHOWREADME_FUNCTION</strong> <span class="parameter">function</span><br />
- 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.</p>
- </div>
- <p>
- <strong>MUI_FINISHPAGE_LINK</strong> <span class="parameter">link_text</span><br />
- Text for a link on the which the user can click to view a website or file.</p>
- <div class="settings">
- <p>
- <strong>MUI_FINISHPAGE_LINK_LOCATION</strong> <span class="parameter">file/url</span><br />
- 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.</p>
- <p>
- <strong>MUI_FINISHPAGE_LINK_COLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
- Text color for the link on the Finish page.<br />
- <em>Default: 000080</em></p>
- </div>
- <p>
- <strong>MUI_FINISHPAGE_NOREBOOTSUPPORT</strong><br />
- 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.</p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_pgu" src="images/closed.gif"
- onclick="toggle('trigger_pgu', 'toggle_pgu');" />
- Uninstall confirm page settings</h3>
- <div class="toggle" id="toggle_pgu">
- <p>
- <strong>MUI_UNCONFIRMPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
- Text to display on the top of the page.</p>
- <p>
- <strong>MUI_UNCONFIRMPAGE_TEXT_LOCATION</strong> <span class="parameter">text</span><br />
- Text to display next to the uninstall location text box.</p>
- </div>
- </div>
- </div>
- <h2>
- 4. Language files</h2>
- <div>
- <p>
- Insert the Modern UI language files for the languages to want to include.</p>
- <pre>
-!insertmacro MUI_LANGUAGE &quot;English&quot;
-</pre>
- <p>
- The standard NSIS language files are loaded automatically, there is no need to use
- LoadLanguageFile.</p>
- </div>
- <h2>
- 5. Reserve files</h2>
- <div>
- <p>
- 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:</p>
- <pre>
-ReserveFile &quot;ioFile.ini&quot; ;Your own InstallOptions INI files
-!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions plug-in
-!insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
-</pre>
- </div>
- </div>
- <h1>
- Script code for pages</h1>
- <div>
- <p>
- 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.</p>
- <h2>
- Components page descriptions</h2>
- <div>
- <p>
- 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.</p>
- <p>
- To set a description for a section, an additional parameter needs to be added to
- Section commmand with a unique identifier for the section. This name can later be
- used to set the description for this section.</p>
- <pre>
-Section &quot;Section Name 1&quot; Section1
- ...
-SectionEnd
-</pre>
- <p>
- After the sections, use these macros to set the descriptions:</p>
- <pre>
-LangString DESC_Section1 ${LANG_ENGLISH} &quot;Description of section 1.&quot;
-LangString DESC_Section2 ${LANG_ENGLISH} &quot;Description of section 2.&quot;
-
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
- !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
-</pre>
- <p>
- For the uninstaller, use the MUI_UNFUNCTION_DESCRIPTION_BEGIN and MUI_UNFUNCTION_DESCRIPTION_END
- macros.</p>
- </div>
- <h2>
- Start Menu folder</h2>
- <div>
- <p>
- Put the code to write the shortcuts (using CreateShortcut) between the MUI_STARTMENU_WRITE_BEGIN
- and MUI_STARTMENU_WRITE_END macros:</p>
- <pre>
-!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
- ...create shortcuts...
-!insertmacro MUI_STARTMENU_WRITE_END
-</pre>
- <p>
- 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.</p>
- <p>
- The variable which contains the folder and the page ID are set as parameters of
- the page macro.</p>
- </div>
- </div>
- <h1>
- Language selection dialog</h1>
- <div>
- <p>
- If you want the installer to display a language selection dialog (see the the <a
- href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a> example),
- insert the MUI_LANGDLL_DISPLAY macro in the .onInit function:</p>
- <pre>
-Function .onInit
-
- !insertmacro MUI_LANGDLL_DISPLAY
-
-FunctionEnd
-</pre>
- <p>
- This macro can also be used in the un.onInit function.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_lss" src="images/closed.gif"
- onclick="toggle('trigger_lss', 'toggle_lss');" />
- Settings for registry storage of selected language</h3>
- <div class="toggle" id="toggle_lss">
- <p>
- To remember the user's preference, you can define a registry key. These defines
- should be set before inserting the installation page macro.</p>
- <p>
- <strong>MUI_LANGDLL_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
- <strong>MUI_LANGDLL_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
- <strong>MUI_LANGDLL_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
- 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.</p>
- <p>
- For the uninstaller, insert the MUI_UNGETLANGUAGE macro in un.onInit to get the
- stored language preference:</p>
- <pre>
-Function un.onInit
-
- !insertmacro MUI_UNGETLANGUAGE
-
-FunctionEnd
-</pre>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_lsin" src="images/closed.gif"
- onclick="toggle('trigger_lsin', 'toggle_lsin');" />
- Interface settings for selection dialog</h3>
- <div class="toggle" id="toggle_lsin">
- <p>
- To customize the language selection dialog interface, use these defines before inserting
- the MUI_LANGDLL_DISPLAY macro.</p>
- <p>
- <strong>MUI_LANGDLL_WINDOWTITLE</strong> <span class="parameter">text</span><br />
- The window title of the language selection dialog.</p>
- <p>
- <strong>MUI_LANGDLL_INFO</strong> <span class="parameter">text</span><br />
- The text to display on the language selection dialog.</p>
- <p>
- <strong>MUI_LANGDLL_ALWAYSSHOW</strong><br />
- 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.</p>
- <p>
- <strong>MUI_LANGDLL_ALLLANGUAGES</strong><br />
- Always show all available languages and don't filter according to their codepage.</p>
- </div>
- </div>
- <h1>
- Custom pages</h1>
- <div>
- <p>
- If you want add your custom pages to your installer, you can insert your own page
- commands between the page macros. The <a href="../InstallOptions/Readme.html">InstallOptions
- documentation</a> provides information about creating custom pages using InstallOptions.</p>
- <pre>
-!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
-</pre>
- <p>
- Use the MUI_HEADER_TEXT macro to set the text on the page header in a page function:</p>
- <pre>
-LangString PAGE_TITLE ${LANG_ENGLISH} &quot;Title&quot;
-LangString PAGE_SUBTITLE ${LANG_ENGLISH} &quot;Subtitle&quot;
-
-Function CustomPageFunction
- !insertmacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
- !insertmacro MUI_INSTALLOPTIONS_DISPLAY &quot;ioFile.ini&quot;
-FuctionEnd
-</pre>
- </div>
- <h1>
- Custom functions</h1>
- <div>
- <p>
- 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.</p>
- <p>
- Example:</p>
- <pre class="text">
-!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
-
-Function myGUIInit
- ...your own code...
-FunctionEnd
-</pre>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_cfg" src="images/closed.gif"
- onclick="toggle('trigger_cfg', 'toggle_cfg');" />
- General Custom Functions</h3>
- <div class="toggle" id="toggle_cfg">
- <p>
- These defines should be set before inserting the language macros.</p>
- <p>
- <strong>MUI_CUSTOMFUNCTION_GUIINIT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_UNGUIINIT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_ABORT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_UNABORT</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_MOUSEOVERSECTION</strong> <span class="parameter">function</span><br />
- <strong>MUI_CUSTOMFUNCTION_UNMOUSEOVERSECTION</strong> <span class="parameter">function</span></p>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_cfpg" src="images/closed.gif"
- onclick="toggle('trigger_cfpg', 'toggle_cfpg');" />
- Page Custom Functions</h3>
- <div class="toggle" id="toggle_cfpg">
- <p>
- These defines should be set before inserting a page macro.</p>
- <p>
- <strong>MUI_PAGE_CUSTOMFUNCTION_PRE</strong> <span class="parameter">function</span><br />
- <strong>MUI_PAGE_CUSTOMFUNCTION_SHOW</strong> <span class="parameter">function</span><br />
- <strong>MUI_PAGE_CUSTOMFUNCTION_LEAVE</strong> <span class="parameter">function</span></p>
- <p>
- <strong>Notes:</strong></p>
- <ul>
- <li>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)</li>
- <li>In the Show function of the Welcome, Finish and StartMenu pages, $MUI_HWND contains
- the HWND of the inner dialog</li>
- </ul>
- </div>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_cfwf" src="images/closed.gif"
- onclick="toggle('trigger_cfwf', 'toggle_cfwf');" />
- Welcome/Finish Page Custom Functions</h3>
- <div class="toggle" id="toggle_cfwf">
- <p>
- This define should be inserted before a single Welcome or Finish page.</p>
- <p>
- <strong>MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT</strong> <span class="parameter">function</span></p>
- <p>
- 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.</p>
- </div>
- </div>
- <h1>
- <a name="examples" id="examples">Example scripts</a></h1>
- <div>
- <p>
- Basic: <a href="../../Examples/Modern%20UI/Basic.nsi">Basic.nsi</a><br />
- Welcome/Finish page: <a href="../../Examples/Modern%20UI/WelcomeFinish.nsi">WelcomeFinish.nsi</a><br />
- Multiple languages: <a href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a><br />
- Header image: <a href="../../Examples/Modern%20UI/HeaderBitmap.nsi">HeaderBitmap.nsi</a><br />
- Custom pages: <a href="../../Examples/Modern%20UI/InstallOptions.nsi">InstallOptions.nsi</a><br />
- Start Menu Folder page: <a href="../../Examples/Modern%20UI/StartMenu.nsi">StartMenu.nsi</a></p>
- </div>
- <h1>
- Credits</h1>
- <div>
- <p>
- Written by Joost Verburg.<br />
- Icons designed by Nikos Adamamas, aka adni18.<br />
- Thanks to Amir Szekely, aka KiCHiK, for his work on NSIS to make this possible.</p>
- </div>
- <h1>
- License</h1>
- <div>
- <p>
- The zlib/libpng license applies to the Modern UI.</p>
- <h3>
- <img class="trigger" alt="Open/Close section" id="trigger_lic" src="images/closed.gif"
- onclick="toggle('trigger_lic', 'toggle_lic');" />
- License Terms</h3>
- <div class="toggle" id="toggle_lic">
- <pre>
-Copyright &copy; 2002-2007 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.
-</pre>
- </div>
- </div>
- </div>
- </td>
- </tr>
- </table>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>NSIS Modern User Interface - Documentation</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+ <style type="text/css">
+ /*<![CDATA[*/body
+ {
+ padding: 10px;
+ background-color: #F0F0F0;
+ font-size: 13px;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-weight: normal;
+ text-align: justify;
+ }
+ p, li
+ {
+ font-size: 13px;
+ }
+ table
+ {
+ margin: auto;
+ background-color: #FFFFFF;
+ }
+ .maintable
+ {
+ border: 2px solid #376EAB;
+ }
+ .parameter
+ {
+ font-weight: bold;
+ color: #6586AC;
+ }
+ h1
+ {
+ font-size: 20px;
+ color: #7A7272;
+ font-weight: normal;
+ }
+ h2
+ {
+ font-size: 17px;
+ font-weight: bold;
+ color: #303030;
+ }
+ h3
+ {
+ font-size: 14px;
+ font-weight: bold;
+ color: #2B5885;
+ }
+ pre
+ {
+ font-size: 13px;
+ }
+ div
+ {
+ margin: 20px;
+ }
+ div.settings
+ {
+ margin-right: 0;
+ }
+ a:link, a:visited, a:active
+ {
+ color: #294F75;
+ text-decoration: none;
+ }
+ a:hover
+ {
+ color: #182634;
+ text-decoration: underline;
+ }
+ .trigger
+ {
+ cursor: pointer;
+ cursor: hand;
+ height: 14px;
+ }
+ .toggle
+ {
+ display: none;
+ }
+ .options
+ {
+ text-align: center;
+ cursor: pointer;
+ cursor: hand;
+ color: #294F75;
+ }
+ /*]]>*/</style>
+
+ <script type="text/javascript">
+//<![CDATA[
+
+ var image_open = new Image();
+ image_open.src = "images/open.gif";
+ var image_closed = new Image();
+ image_closed.src = "images/closed.gif";
+
+ function toggle(image, section) {
+
+ if(document.all) {
+ if(document.all[section].style.display == "block") {
+ document.all[section].style.display = "none";
+ document.all[image].src = image_closed.src;
+ }
+ else
+ {
+ document.all[section].style.display = "block";
+ document.all[image].src = image_open.src;
+ }
+ }
+ else
+ {
+ if(document.getElementById(section).style.display == "block") {
+ document.getElementById(section).style.display = "none";
+ document.getElementById(image).src = image_closed.src;
+ }
+ else
+ {
+ document.getElementById(section).style.display = "block";
+ document.getElementById(image).src = image_open.src;
+ }
+ }
+
+ }
+
+ function expandall() {
+
+ var divNodeList = document.getElementsByTagName('div');
+ for (i = 0; i < divNodeList.length; i++) {
+ if(divNodeList[i].id) {
+ divNodeList[i].style.display = "block";
+ document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/open.gif";
+ }
+ }
+
+ }
+
+ function collapseall() {
+
+ var divNodeList = document.getElementsByTagName('div');
+ for (i = 0; i < divNodeList.length; i++) {
+ if(divNodeList[i].id) {
+ divNodeList[i].style.display = "none";
+ document.getElementById('trigger_' + divNodeList[i].id.substr(7)).src = "images/closed.gif";
+ }
+ }
+
+ }
+
+//]]>
+ </script>
+
+</head>
+<body>
+ <table width="750" class="maintable" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <td>
+ <img src="images/header.gif" width="750" height="80" alt="" />
+ <p class="options">
+ <a onclick="expandall()">[Expand all]</a>&nbsp; &nbsp;<a onclick="collapseall()">[Collapse
+ all]</a></p>
+ <div>
+ <h1>
+ Introduction</h1>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ 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.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_scr" src="images/closed.gif"
+ onclick="toggle('trigger_scr', 'toggle_scr');" />
+ Screenshots</h3>
+ <div class="toggle" id="toggle_scr">
+ <p>
+ <img src="images/screen1.png" width="503" height="393" alt="" /></p>
+ <p>
+ <img src="images/screen2.png" width="503" height="393" alt="" /></p>
+ </div>
+ </div>
+ <h1>
+ Script header</h1>
+ <div>
+ <p>
+ The settings for the Modern UI should be inserted in the header of the script file.
+ It&#39;s important to follow the same order as the items below.&nbsp;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 <a href="#examples">
+ example scripts</a> too see how this is done in actual script files.</p>
+ <p>
+ Parameters are given in this format: <span class="parameter">required (option1 | option2)
+ [optional]</span></p>
+ <h2>
+ 1. Header file</h2>
+ <div>
+ <p>
+ First of all, add this line to the top of script to include the Modern UI:</p>
+ <pre>
+!include &quot;MUI.nsh&quot;
+</pre>
+ </div>
+ <h2>
+ 2. Interface configuration</h2>
+ <div>
+ <p>
+ Then, you may want to use interface settings to change the look and feel of the
+ installer. These settings apply to all pages.<p>
+ 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.<p>
+ Examples:</p>
+ <pre>
+!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
+!define MUI_UI &quot;myUI.exe&quot; ;Value
+!define MUI_INSTFILESPAGE_COLORS &quot;FFFFFF 000000&quot; ;Two colors
+</pre>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_in" src="images/closed.gif"
+ onclick="toggle('trigger_in', 'toggle_in');" />
+ Interface settings</h3>
+ <div class="toggle" id="toggle_in">
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ingen" src="images/closed.gif"
+ onclick="toggle('trigger_ingen', 'toggle_ingen');" />
+ Page header</h3>
+ <div class="toggle" id="toggle_ingen">
+ <p>
+ <strong>MUI_ICON</strong> <span class="parameter">icon_file</span><br />
+ The icon for the installer.<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico</em></p>
+ <p>
+ <strong>MUI_UNICON</strong> <span class="parameter">icon_file</span><br />
+ The icon for the uninstaller.<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico</em></p>
+ <p>
+ <strong>MUI_HEADERIMAGE</strong><br />
+ Display an image on the header of the page.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of installers pages (recommended size: 150x57
+ pixels).<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of installers pages when using a RTL language
+ (recommended size: 150x57 pixels).<br />
+ <em>Default: Non-RTL bitmap</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ </div>
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of uninstaller pages (recommended size: 150x57
+ pixels).<br />
+ <em>Default: Installer header bitmap</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP_RTL</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap image to display on the header of uninstallers pages when using a RTL language
+ (recommended size: 150x57 pixels).<br />
+ <em>Default: Installer RTL header bitmap</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ </div>
+ <p>
+ <strong>MUI_HEADERIMAGE_RIGHT</strong><br />
+ 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).</p>
+ </div>
+ <p>
+ <strong>MUI_BGCOLOR</strong> <span class="parameter">(color: RRGGBBR hexadecimal)</span><br />
+ Background color for the header, the Welcome page and the Finish page.<br />
+ <em>Default: FFFFFF</em></p>
+ <p>
+ <strong>MUI_HEADER_TRANSPARENT_TEXT</strong><br />
+ Set a transparent background for the header's label controls. Useful for custom
+ user interfaces that set a bigger header image.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inres" src="images/closed.gif"
+ onclick="toggle('trigger_inres', 'toggle_inres');" />
+ Interface resources</h3>
+ <div class="toggle" id="toggle_inres">
+ <p>
+ <strong>MUI_UI</strong> <span class="parameter">ui_file</span><br />
+ The interface file with the dialog resources. Change this if you have made your
+ own customized UI.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern.exe</em></p>
+ <p>
+ <strong>MUI_UI_HEADERIMAGE</strong> <span class="parameter">ui_file</span><br />
+ The interface files with the dialog resource IDD_INST that contains a bitmap control
+ and space for the header bitmap.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe</em></p>
+ <p>
+ <strong>MUI_UI_HEADERIMAGE_RIGHT</strong> <span class="parameter">ui_file</span><br />
+ The interface files with the dialog resource IDD_INST that contains a bitmap control
+ and space for the header bitmap on the right side.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe</em></p>
+ <p>
+ <strong>MUI_UI_COMPONENTSPAGE_SMALLDESC</strong> <span class="parameter">ui_file</span><br />
+ The interface files with a customized dialog resource IDD_SELCOM with a small description
+ area.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe</em></p>
+ <p>
+ <strong>MUI_UI_COMPONENTSPAGE_NODESC</strong> <span class="parameter">ui_file</span><br />
+ The interface files with a customized dialog resource IDD_SELCOM without a description
+ area.<br />
+ <em>Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inwf" src="images/closed.gif"
+ onclick="toggle('trigger_inwf', 'toggle_inwf');" />
+ Installer welcome/finish page</h3>
+ <div class="toggle" id="toggle_inwf">
+ <p>
+ <strong>MUI_WELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ <p>
+ <strong>MUI_WELCOMEFINISHPAGE_INI</strong> <span class="parameter">ini_file</span><br />
+ InstallOptions INI file for the Welcome page and the Finish page.<br />
+ <em>Default: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inuwf" src="images/closed.gif"
+ onclick="toggle('trigger_inuwf', 'toggle_inuwf');" />
+ Uninstaller welcome/finish page</h3>
+ <div class="toggle" id="toggle_inuwf">
+ <p>
+ <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP</strong> <span class="parameter">bmp_file</span><br />
+ Bitmap for the Welcome page and the Finish page (recommended size: 164x314 pixels).<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp</em></p>
+ <div class="settings">
+ <p>
+ <strong>MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH</strong><br />
+ 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.</p>
+ </div>
+ <p>
+ <strong>MUI_UNWELCOMEFINISHPAGE_INI</strong> <span class="parameter">ini_file</span><br />
+ InstallOptions INI file for the uninstaller Welcome page and the Finish page.<br />
+ <em>Default: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inl" src="images/closed.gif"
+ onclick="toggle('trigger_inl', 'toggle_inl');" />
+ License page</h3>
+ <div class="toggle" id="toggle_inl">
+ <p>
+ <strong>MUI_LICENSEPAGE_BGCOLOR</strong> <span class="parameter">(/windows | /grey |
+ (color: RRGGBB hexadecimal))</span><br />
+ 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).<br />
+ <em>Default: /windows</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inc" src="images/closed.gif"
+ onclick="toggle('trigger_inc', 'toggle_inc');" />
+ Components page</h3>
+ <div class="toggle" id="toggle_inc">
+ <p>
+ <strong>MUI_COMPONENTSPAGE_CHECKBITMAP</strong> <span class="parameter">bitmap_file</span><br />
+ The bitmap with images for the checks of the component select treeview.<br />
+ <em>Default: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp</em></p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_SMALLDESC</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_NODESC</strong><br />
+ No description area.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ind" src="images/closed.gif"
+ onclick="toggle('trigger_ind', 'toggle_ind');" />
+ Directory page</h3>
+ <div class="toggle" id="toggle_ind">
+ <p>
+ <strong>MUI_DIRECTORYPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
+ The background color for the directory textbox.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ins" src="images/closed.gif"
+ onclick="toggle('trigger_ins', 'toggle_ins');" />
+ Start Menu folder page</h3>
+ <div class="toggle" id="toggle_ins">
+ <p>
+ <strong>MUI_STARTMENUPAGE_BGCOLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
+ The background color for the startmenu directory list and textbox.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_ini" src="images/closed.gif"
+ onclick="toggle('trigger_ini', 'toggle_ini');" />
+ Installation page</h3>
+ <div class="toggle" id="toggle_ini">
+ <p>
+ <strong>MUI_INSTFILESPAGE_COLORS</strong> <span class="parameter">(/windows | &quot;(foreground
+ color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)&quot;)</span><br />
+ The colors of the details screen. Use /windows for the default Windows colors.<br />
+ <em>Default: /windows</em></p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_PROGRESSBAR</strong> <span class="parameter">(&quot;&quot;
+ | colored | smooth)</span><br />
+ The style of the progress bar. Colored makes it use the MUI_INSTALLCOLORS.<br />
+ <em>Default: smooth</em></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inf" src="images/closed.gif"
+ onclick="toggle('trigger_inf', 'toggle_inf');" />
+ Installer finish page</h3>
+ <div class="toggle" id="toggle_inf">
+ <p>
+ <strong>MUI_FINISHPAGE_NOAUTOCLOSE</strong><br />
+ Do not automatically jump to the finish page, to allow the user to check the install
+ log.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_uinf" src="images/closed.gif"
+ onclick="toggle('trigger_uinf', 'toggle_uinf');" />
+ Uninstaller finish page</h3>
+ <div class="toggle" id="toggle_uinf">
+ <p>
+ <strong>MUI_UNFINISHPAGE_NOAUTOCLOSE</strong><br />
+ Do not automatically jump to the finish page, to allow the user to check the uninstall
+ log.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inaw" src="images/closed.gif"
+ onclick="toggle('trigger_inaw', 'toggle_inaw');" />
+ Abort warning</h3>
+ <div class="toggle" id="toggle_inaw">
+ <p>
+ <strong>MUI_ABORTWARNING</strong><br />
+ Show a message box with a warning when the user wants to close the installer.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_ABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the abort warning message box.</p>
+ <p>
+ <strong>MUI_ABORTWARNING_CANCEL_DEFAULT</strong><br />
+ Set the Cancel button as the default button on the message box.</p>
+ </div>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_inuaw" src="images/closed.gif"
+ onclick="toggle('trigger_inuaw', 'toggle_inuaw');" />
+ Uninstaller abort warning</h3>
+ <div class="toggle" id="toggle_inuaw">
+ <p>
+ <strong>MUI_UNABORTWARNING</strong><br />
+ Show a message box with a warning when the user wants to close the uninstaller.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_UNABORTWARNING_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the abort warning message box.</p>
+ <p>
+ <strong>MUI_UNABORTWARNING_CANCEL_DEFAULT</strong><br />
+ Set the Cancel button as the default button on the message box.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ <h2>
+ 3. Pages</h2>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ You can add multiple pages of certain types (for example, if you want the user to
+ specify multiple folders).</p>
+ <p>
+ Examples:</p>
+ <pre>
+!insertmacro MUI_PAGE_LICENSE &quot;License.rtf&quot;
+!insertmacro MUI_PAGE_COMPONENTS
+
+Var StartMenuFolder
+!insertmacro MUI_PAGE_STARTMENU &quot;Application&quot; $StartMenuFolder
+</pre>
+ <p>
+ 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.</p>
+ <p>
+ <strong>Installer pages</strong><br />
+ MUI_PAGE_WELCOME<br />
+ MUI_PAGE_LICENSE <span class="parameter">textfile</span><br />
+ MUI_PAGE_COMPONENTS<br />
+ MUI_PAGE_DIRECTORY<br />
+ MUI_PAGE_STARTMENU <span class="parameter">pageid variable</span><br />
+ MUI_PAGE_INSTFILES<br />
+ MUI_PAGE_FINISH</p>
+ <p>
+ <strong>Uninstaller pages</strong><br />
+ MUI_UNPAGE_WELCOME<br />
+ MUI_UNPAGE_CONFIRM<br />
+ MUI_UNPAGE_LICENSE <span class="parameter">textfile</span><br />
+ MUI_UNPAGE_COMPONENTS<br />
+ MUI_UNPAGE_DIRECTORY<br />
+ MUI_UNPAGE_INSTFILES<br />
+ MUI_UNPAGE_FINISH</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pg" src="images/closed.gif"
+ onclick="toggle('trigger_pg', 'toggle_pg');" />
+ Page settings</h3>
+ <div class="toggle" id="toggle_pg">
+ <p>
+ 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:</p>
+ <pre>
+;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
+</pre>
+ <p>
+ <p>
+ 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.</p>
+ <p>
+ 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.</p>
+ <p>
+ In all text settings, the doublequote character (&quot;) should be escaped in the
+ following form: $\&quot;</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgg" src="images/closed.gif"
+ onclick="toggle('trigger_pgg', 'toggle_pgg');" />
+ General page settings</h3>
+ <div class="toggle" id="toggle_pgg">
+ <p>
+ <strong>MUI_PAGE_HEADER_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the header of the page.</p>
+ <p>
+ <strong>MUI_PAGE_HEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
+ Subtext to display on the header of the page.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgw" src="images/closed.gif"
+ onclick="toggle('trigger_pgw', 'toggle_pgw');" />
+ Welcome page settings</h3>
+ <div class="toggle" id="toggle_pgw">
+ <p>
+ To add a newline to any of these texts, use \r\n instead of $\r$\n.</p>
+ <p>
+ <strong>MUI_WELCOMEPAGE_TITLE</strong> <span class="parameter">title</span><br />
+ Title to display on the top of the page.</p>
+ <p>
+ <strong>MUI_WELCOMEPAGE_TITLE_3LINES</strong><br />
+ Extra space for the title area.</p>
+ <p>
+ <strong>MUI_WELCOMEPAGE_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the page.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgl" src="images/closed.gif"
+ onclick="toggle('trigger_pgl', 'toggle_pgl');" />
+ License page settings</h3>
+ <div class="toggle" id="toggle_pgl">
+ <p>
+ <strong>MUI_LICENSEPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_TEXT_BOTTOM</strong> <span class="parameter">text</span><br />
+ Text to display on the bottom of the page.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_BUTTON</strong> <span class="parameter">button_text</span><br />
+ Text to display on the 'I Agree' button.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_CHECKBOX</strong><br />
+ Display a checkbox the user has to check to agree with the license terms.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_LICENSEPAGE_CHECKBOX_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to agree with the license terms.</p>
+ </div>
+ <p>
+ <strong>MUI_LICENSEPAGE_RADIOBUTTONS</strong><br />
+ Display two radio buttons to allow the user to choose between accepting the license
+ terms or not.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to accept the license terms.</p>
+ <p>
+ <strong>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to decline the license terms.</p>
+ </div>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgc" src="images/closed.gif"
+ onclick="toggle('trigger_pgc', 'toggle_pgc');" />
+ Components page settings</h3>
+ <div class="toggle" id="toggle_pgc">
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_COMPLIST</strong> <span class="parameter">text</span><br />
+ Text to display on next to the components list.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_INSTTYPE</strong> <span class="parameter">text</span><br />
+ Text to display on next to the installation type combo box.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE</strong> <span class="parameter">text</span><br />
+ Text to display on the of the top of the description box.</p>
+ <p>
+ <strong>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO</strong> <span class="parameter">text</span><br />
+ Text to display inside the description box when no section is selected.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgd" src="images/closed.gif"
+ onclick="toggle('trigger_pgd', 'toggle_pgd');" />
+ Directory page settings</h3>
+ <div class="toggle" id="toggle_pgd">
+ <p>
+ <strong>MUI_DIRECTORYPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on top of the page.</p>
+ <p>
+ <strong>MUI_DIRECTORYPAGE_TEXT_DESTINATION</strong> <span class="parameter">text</span><br />
+ Text to display on the destination folder frame.</p>
+ <p>
+ <strong>MUI_DIRECTORYPAGE_VARIABLE</strong> <span class="parameter">variable</span><br />
+ Variable in which to store the selected folder.<br />
+ <em>Default: $INSTDIR</em></p>
+ <p>
+ <strong>MUI_DIRECTORYPAGE_VERIFYONLEAVE</strong><br />
+ 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.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgs" src="images/closed.gif"
+ onclick="toggle('trigger_pgs', 'toggle_pgs');" />
+ Start Menu folder page settings</h3>
+ <div class="toggle" id="toggle_pgs">
+ <p>
+ <strong>MUI_STARTMENUPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_TEXT_CHECKBOX</strong> <span class="parameter">text</span><br />
+ Text to display next to the checkbox to disable the Start Menu folder creation.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_DEFAULTFOLDER</strong> <span class="parameter">folder</span><br />
+ The default Start Menu Folder.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_NODISABLE</strong><br />
+ Do not display the checkbox to disable the creation of Start Menu shortcuts.</p>
+ <p>
+ <strong>MUI_STARTMENUPAGE_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
+ <strong>MUI_STARTMENUPAGE_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
+ <strong>MUI_STARTMENUPAGE_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
+ 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.</p>
+ <p>
+ For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu
+ folder:</p>
+ <pre>
+!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
+ Delete &quot;$SMPROGRAMS\$R0\Your Shortcut.lnk&quot;
+</pre>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgi" src="images/closed.gif"
+ onclick="toggle('trigger_pgi', 'toggle_pgi');" />
+ Installation page settings</h3>
+ <div class="toggle" id="toggle_pgi">
+ <p>
+ <strong>MUI_INSTFILESPAGE_FINISHHEADER_TEXT</strong> <span class="parameter">text</span><br />
+ 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).</p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
+ 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).</p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_ABORTHEADER_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the header of the installation page when the installation has
+ been aborted.</p>
+ <p>
+ <strong>MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT</strong> <span class="parameter">text</span><br />
+ Subext to display on the header of the installation page when the installation has
+ been aborted.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgf" src="images/closed.gif"
+ onclick="toggle('trigger_pgf', 'toggle_pgf');" />
+ Finish page settings</h3>
+ <div class="toggle" id="toggle_pgf">
+ <p>
+ To add a newline to any of these texts, use \r\n instead of $\r$\n.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TITLE</strong> <span class="parameter">title</span><br />
+ Title to display on the top of the page.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TITLE_3LINES</strong><br />
+ Extra space for the title area.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT</strong> <span class="parameter">text</span><br />
+ Text to display on the page.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_LARGE</strong><br />
+ Extra space for the text area (if using checkboxes).</p>
+ <p>
+ <strong>MUI_FINISHPAGE_BUTTON</strong> <span class="parameter">text</span><br />
+ Text to display on the Finish button.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_CANCEL_ENABLED</strong><br />
+ Enable the Cancel button so the user can skip any options displayed on the finish
+ page.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_REBOOT</strong> <span class="parameter">text</span><br />
+ Text to display on the finish page when asking for a system reboot.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_REBOOTNOW</strong> <span class="parameter">text</span><br />
+ Text to display next to the 'Reboot now' option button.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_TEXT_REBOOTLATER</strong> <span class="parameter">text</span><br />
+ Text to display next to the 'Reboot later' option button.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_REBOOTLATER_DEFAULT</strong><br />
+ Sets the 'Reboot later' option as the default option.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN</strong> <span class="parameter">exe_file</span><br />
+ 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.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_TEXT</strong> <span class="parameter">text</span><br />
+ Texts to display next to the 'Run program' checkbox.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_PARAMETERS</strong> <span class="parameter">parameters</span><br />
+ Parameters for the application to run. Don't forget to escape double quotes in the
+ value (use $\&quot;).</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_NOTCHECKED</strong><br />
+ Do not check the 'Run program' checkbox by default</p>
+ <p>
+ <strong>MUI_FINISHPAGE_RUN_FUNCTION</strong> <span class="parameter">function</span><br />
+ 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.</p>
+ </div>
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME</strong> <span class="parameter">file/url</span><br />
+ 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.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME_TEXT</strong> <span class="parameter">text</span><br />
+ Texts to display next to the 'Show Readme' checkbox.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME_NOTCHECKED</strong><br />
+ Do not check the 'Show Readme' checkbox by default</p>
+ <p>
+ <strong>MUI_FINISHPAGE_SHOWREADME_FUNCTION</strong> <span class="parameter">function</span><br />
+ 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.</p>
+ </div>
+ <p>
+ <strong>MUI_FINISHPAGE_LINK</strong> <span class="parameter">link_text</span><br />
+ Text for a link on the which the user can click to view a website or file.</p>
+ <div class="settings">
+ <p>
+ <strong>MUI_FINISHPAGE_LINK_LOCATION</strong> <span class="parameter">file/url</span><br />
+ 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.</p>
+ <p>
+ <strong>MUI_FINISHPAGE_LINK_COLOR</strong> <span class="parameter">(color: RRGGBB hexadecimal)</span><br />
+ Text color for the link on the Finish page.<br />
+ <em>Default: 000080</em></p>
+ </div>
+ <p>
+ <strong>MUI_FINISHPAGE_NOREBOOTSUPPORT</strong><br />
+ 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.</p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_pgu" src="images/closed.gif"
+ onclick="toggle('trigger_pgu', 'toggle_pgu');" />
+ Uninstall confirm page settings</h3>
+ <div class="toggle" id="toggle_pgu">
+ <p>
+ <strong>MUI_UNCONFIRMPAGE_TEXT_TOP</strong> <span class="parameter">text</span><br />
+ Text to display on the top of the page.</p>
+ <p>
+ <strong>MUI_UNCONFIRMPAGE_TEXT_LOCATION</strong> <span class="parameter">text</span><br />
+ Text to display next to the uninstall location text box.</p>
+ </div>
+ </div>
+ </div>
+ <h2>
+ 4. Language files</h2>
+ <div>
+ <p>
+ Insert the Modern UI language files for the languages to want to include.</p>
+ <pre>
+!insertmacro MUI_LANGUAGE &quot;English&quot;
+</pre>
+ <p>
+ The standard NSIS language files are loaded automatically, there is no need to use
+ LoadLanguageFile.</p>
+ </div>
+ <h2>
+ 5. Reserve files</h2>
+ <div>
+ <p>
+ 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:</p>
+ <pre>
+ReserveFile &quot;ioFile.ini&quot; ;Your own InstallOptions INI files
+!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions plug-in
+!insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
+</pre>
+ </div>
+ </div>
+ <h1>
+ Script code for pages</h1>
+ <div>
+ <p>
+ 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.</p>
+ <h2>
+ Components page descriptions</h2>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ To set a description for a section, an additional parameter needs to be added to
+ Section commmand with a unique identifier for the section. This name can later be
+ used to set the description for this section.</p>
+ <pre>
+Section &quot;Section Name 1&quot; Section1
+ ...
+SectionEnd
+</pre>
+ <p>
+ After the sections, use these macros to set the descriptions:</p>
+ <pre>
+LangString DESC_Section1 ${LANG_ENGLISH} &quot;Description of section 1.&quot;
+LangString DESC_Section2 ${LANG_ENGLISH} &quot;Description of section 2.&quot;
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+</pre>
+ <p>
+ For the uninstaller, use the MUI_UNFUNCTION_DESCRIPTION_BEGIN and MUI_UNFUNCTION_DESCRIPTION_END
+ macros.</p>
+ </div>
+ <h2>
+ Start Menu folder</h2>
+ <div>
+ <p>
+ Put the code to write the shortcuts (using CreateShortcut) between the MUI_STARTMENU_WRITE_BEGIN
+ and MUI_STARTMENU_WRITE_END macros:</p>
+ <pre>
+!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
+ ...create shortcuts...
+!insertmacro MUI_STARTMENU_WRITE_END
+</pre>
+ <p>
+ 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.</p>
+ <p>
+ The variable which contains the folder and the page ID are set as parameters of
+ the page macro.</p>
+ </div>
+ </div>
+ <h1>
+ Language selection dialog</h1>
+ <div>
+ <p>
+ If you want the installer to display a language selection dialog (see the the <a
+ href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a> example),
+ insert the MUI_LANGDLL_DISPLAY macro in the .onInit function:</p>
+ <pre>
+Function .onInit
+
+ !insertmacro MUI_LANGDLL_DISPLAY
+
+FunctionEnd
+</pre>
+ <p>
+ This macro can also be used in the un.onInit function.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_lss" src="images/closed.gif"
+ onclick="toggle('trigger_lss', 'toggle_lss');" />
+ Settings for registry storage of selected language</h3>
+ <div class="toggle" id="toggle_lss">
+ <p>
+ To remember the user's preference, you can define a registry key. These defines
+ should be set before inserting the installation page macro.</p>
+ <p>
+ <strong>MUI_LANGDLL_REGISTRY_ROOT</strong> <span class="parameter">root</span><br />
+ <strong>MUI_LANGDLL_REGISTRY_KEY</strong> <span class="parameter">key</span><br />
+ <strong>MUI_LANGDLL_REGISTRY_VALUENAME</strong> <span class="parameter">value_name</span><br />
+ 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.</p>
+ <p>
+ For the uninstaller, insert the MUI_UNGETLANGUAGE macro in un.onInit to get the
+ stored language preference:</p>
+ <pre>
+Function un.onInit
+
+ !insertmacro MUI_UNGETLANGUAGE
+
+FunctionEnd
+</pre>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_lsin" src="images/closed.gif"
+ onclick="toggle('trigger_lsin', 'toggle_lsin');" />
+ Interface settings for selection dialog</h3>
+ <div class="toggle" id="toggle_lsin">
+ <p>
+ To customize the language selection dialog interface, use these defines before inserting
+ the MUI_LANGDLL_DISPLAY macro.</p>
+ <p>
+ <strong>MUI_LANGDLL_WINDOWTITLE</strong> <span class="parameter">text</span><br />
+ The window title of the language selection dialog.</p>
+ <p>
+ <strong>MUI_LANGDLL_INFO</strong> <span class="parameter">text</span><br />
+ The text to display on the language selection dialog.</p>
+ <p>
+ <strong>MUI_LANGDLL_ALWAYSSHOW</strong><br />
+ 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.</p>
+ <p>
+ <strong>MUI_LANGDLL_ALLLANGUAGES</strong><br />
+ Always show all available languages and don't filter according to their codepage.</p>
+ </div>
+ </div>
+ <h1>
+ Custom pages</h1>
+ <div>
+ <p>
+ If you want add your custom pages to your installer, you can insert your own page
+ commands between the page macros. The <a href="../InstallOptions/Readme.html">InstallOptions
+ documentation</a> provides information about creating custom pages using InstallOptions.</p>
+ <pre>
+!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
+</pre>
+ <p>
+ Use the MUI_HEADER_TEXT macro to set the text on the page header in a page function:</p>
+ <pre>
+LangString PAGE_TITLE ${LANG_ENGLISH} &quot;Title&quot;
+LangString PAGE_SUBTITLE ${LANG_ENGLISH} &quot;Subtitle&quot;
+
+Function CustomPageFunction
+ !insertmacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY &quot;ioFile.ini&quot;
+FuctionEnd
+</pre>
+ </div>
+ <h1>
+ Custom functions</h1>
+ <div>
+ <p>
+ 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.</p>
+ <p>
+ Example:</p>
+ <pre class="text">
+!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
+
+Function myGUIInit
+ ...your own code...
+FunctionEnd
+</pre>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_cfg" src="images/closed.gif"
+ onclick="toggle('trigger_cfg', 'toggle_cfg');" />
+ General Custom Functions</h3>
+ <div class="toggle" id="toggle_cfg">
+ <p>
+ These defines should be set before inserting the language macros.</p>
+ <p>
+ <strong>MUI_CUSTOMFUNCTION_GUIINIT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_UNGUIINIT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_ABORT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_UNABORT</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_MOUSEOVERSECTION</strong> <span class="parameter">function</span><br />
+ <strong>MUI_CUSTOMFUNCTION_UNMOUSEOVERSECTION</strong> <span class="parameter">function</span></p>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_cfpg" src="images/closed.gif"
+ onclick="toggle('trigger_cfpg', 'toggle_cfpg');" />
+ Page Custom Functions</h3>
+ <div class="toggle" id="toggle_cfpg">
+ <p>
+ These defines should be set before inserting a page macro.</p>
+ <p>
+ <strong>MUI_PAGE_CUSTOMFUNCTION_PRE</strong> <span class="parameter">function</span><br />
+ <strong>MUI_PAGE_CUSTOMFUNCTION_SHOW</strong> <span class="parameter">function</span><br />
+ <strong>MUI_PAGE_CUSTOMFUNCTION_LEAVE</strong> <span class="parameter">function</span></p>
+ <p>
+ <strong>Notes:</strong></p>
+ <ul>
+ <li>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)</li>
+ <li>In the Show function of the Welcome, Finish and StartMenu pages, $MUI_HWND contains
+ the HWND of the inner dialog</li>
+ </ul>
+ </div>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_cfwf" src="images/closed.gif"
+ onclick="toggle('trigger_cfwf', 'toggle_cfwf');" />
+ Welcome/Finish Page Custom Functions</h3>
+ <div class="toggle" id="toggle_cfwf">
+ <p>
+ This define should be inserted before a single Welcome or Finish page.</p>
+ <p>
+ <strong>MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT</strong> <span class="parameter">function</span></p>
+ <p>
+ 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.</p>
+ </div>
+ </div>
+ <h1>
+ <a name="examples" id="examples">Example scripts</a></h1>
+ <div>
+ <p>
+ Basic: <a href="../../Examples/Modern%20UI/Basic.nsi">Basic.nsi</a><br />
+ Welcome/Finish page: <a href="../../Examples/Modern%20UI/WelcomeFinish.nsi">WelcomeFinish.nsi</a><br />
+ Multiple languages: <a href="../../Examples/Modern%20UI/MultiLanguage.nsi">MultiLanguage.nsi</a><br />
+ Header image: <a href="../../Examples/Modern%20UI/HeaderBitmap.nsi">HeaderBitmap.nsi</a><br />
+ Custom pages: <a href="../../Examples/Modern%20UI/InstallOptions.nsi">InstallOptions.nsi</a><br />
+ Start Menu Folder page: <a href="../../Examples/Modern%20UI/StartMenu.nsi">StartMenu.nsi</a></p>
+ </div>
+ <h1>
+ Credits</h1>
+ <div>
+ <p>
+ Written by Joost Verburg.<br />
+ Icons designed by Nikos Adamamas, aka adni18.<br />
+ Thanks to Amir Szekely, aka KiCHiK, for his work on NSIS to make this possible.</p>
+ </div>
+ <h1>
+ License</h1>
+ <div>
+ <p>
+ The zlib/libpng license applies to the Modern UI.</p>
+ <h3>
+ <img class="trigger" alt="Open/Close section" id="trigger_lic" src="images/closed.gif"
+ onclick="toggle('trigger_lic', 'toggle_lic');" />
+ License Terms</h3>
+ <div class="toggle" id="toggle_lic">
+ <pre>
+Copyright &copy; 2002-2008 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.
+</pre>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/Contrib/Modern UI/System.nsh b/Contrib/Modern UI/System.nsh
index 4d09ea4..9e57e22 100755
--- a/Contrib/Modern UI/System.nsh
+++ b/Contrib/Modern UI/System.nsh
@@ -1,2203 +1,2217 @@
-/*
-
-NSIS Modern User Interface - Version 1.8
-Copyright © 2002-2007 Joost Verburg
-
-*/
-
-!echo "NSIS Modern User Interface version 1.8 - © 2002-2007 Joost Verburg"
-
-;--------------------------------
-
-!ifndef MUI_INCLUDED
-!define MUI_INCLUDED
-
-!define MUI_SYSVERSION "1.8"
-
-!verbose push
-
-!ifndef MUI_VERBOSE
- !define MUI_VERBOSE 3
-!endif
-
-!verbose ${MUI_VERBOSE}
-
-;--------------------------------
-;HEADER FILES, DECLARATIONS
-
-!include InstallOptions.nsh
-!include LangFile.nsh
-!include WinMessages.nsh
-
-!define LANGFILE_DEFAULT "${NSISDIR}\Contrib\Language files\English.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_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"
-
- !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
-
- !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
- !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_BGCOLOR}"
-
- GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038
- SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}"
-
- !else
-
- SetCtlColors $MUI_TEMP1 "" "transparent"
-
- GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038
- SetCtlColors $MUI_TEMP1 "" "transparent"
-
- !endif
-
- GetDlgItem $MUI_TEMP1 $HWNDPARENT 1034
- SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}"
-
- GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039
- 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}"
-
- !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}"
-
- !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}"
-
- !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
-
- !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}"
-
- 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_BGCOLOR}"
-
- GetDlgItem $MUI_TEMP1 $MUI_HWND 1201
- SetCtlColors $MUI_TEMP1 "" "${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_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
- FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT
- GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1019
- SetCtlColors $MUI_TEMP1 "" "${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 /NOUNLOAD /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
- !else
- StartMenu::Init /NOUNLOAD /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 /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
- !else
- StartMenu::Init /NOUNLOAD /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
- GetDlgItem $MUI_TEMP1 $MUI_HWND 1002
- SetCtlColors $MUI_TEMP1 "" "${MUI_STARTMENUPAGE_BGCOLOR}"
- GetDlgItem $MUI_TEMP1 $MUI_HWND 1004
- SetCtlColors $MUI_TEMP1 "" "${MUI_STARTMENUPAGE_BGCOLOR}"
- !endif
-
- !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
-
- StartMenu::Show
-
- 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 5" "State" "1"
- !else
- !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "1"
- !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_BGCOLOR}"
-
- GetDlgItem $MUI_TEMP1 $MUI_HWND 1201
- SetCtlColors $MUI_TEMP1 "" "${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_BGCOLOR}"
-
- !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
-
- IfRebootFlag 0 mui.finish_noreboot_show
-
- GetDlgItem $MUI_TEMP1 $MUI_HWND 1203
- SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}"
-
- GetDlgItem $MUI_TEMP1 $MUI_HWND 1204
- SetCtlColors $MUI_TEMP1 "" "${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_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_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
-
- !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 "${NSISDIR}\Plugins\InstallOptions.dll"
-
- !verbose pop
-
-!macroend
-
-!macro MUI_RESERVEFILE_LANGDLL
-
- !verbose push
- !verbose ${MUI_VERBOSE}
-
- ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
-
- !verbose pop
-
-!macroend
-
-;--------------------------------
-;LANGUAGES
-
-!macro MUI_LANGUAGE LANGUAGE
-
- ;Include a language
-
- !verbose push
- !verbose ${MUI_VERBOSE}
-
- !insertmacro MUI_INSERT
-
- LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nlf"
- !insertmacro LANGFILE_INCLUDE "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nsh"
-
- !ifndef MUI_LANGDLL_LANGUAGES
- !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' "
- !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
- !else
- !ifdef MUI_LANGDLL_LANGUAGES_TEMP
- !undef MUI_LANGDLL_LANGUAGES_TEMP
- !endif
- !define MUI_LANGDLL_LANGUAGES_TEMP "${MUI_LANGDLL_LANGUAGES}"
- !undef MUI_LANGDLL_LANGUAGES
-
- !ifdef MUI_LANGDLL_LANGUAGES_CP_TEMP
- !undef MUI_LANGDLL_LANGUAGES_CP_TEMP
- !endif
- !define MUI_LANGDLL_LANGUAGES_CP_TEMP "${MUI_LANGDLL_LANGUAGES_CP}"
- !undef MUI_LANGDLL_LANGUAGES_CP
-
- !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' ${MUI_LANGDLL_LANGUAGES_TEMP}"
- !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_LANGUAGES_CP_TEMP}"
- !endif
-
- !verbose pop
-
-!macroend
-
-;--------------------------------
-;LANGUAGE SELECTION DIALOG
-
-!macro MUI_LANGDLL_DISPLAY
-
- !verbose push
- !verbose ${MUI_VERBOSE}
-
- !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 pop
-
- !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
-
-!endif
-
-!verbose pop
+/*
+
+NSIS Modern User Interface - Version 1.8
+Copyright © 2002-2008 Joost Verburg
+
+*/
+
+!echo "NSIS Modern User Interface version 1.8 - © 2002-2008 Joost Verburg"
+
+;--------------------------------
+
+!ifndef MUI_INCLUDED
+!define MUI_INCLUDED
+
+!define MUI_SYSVERSION "1.8"
+
+!verbose push
+
+!ifndef MUI_VERBOSE
+ !define MUI_VERBOSE 3
+!endif
+
+!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_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"
+
+ !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
+
+ !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
+ !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_BGCOLOR}"
+
+ GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038
+ SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}"
+
+ !else
+
+ SetCtlColors $MUI_TEMP1 "" "transparent"
+
+ GetDlgItem $MUI_TEMP1 $HWNDPARENT 1038
+ SetCtlColors $MUI_TEMP1 "" "transparent"
+
+ !endif
+
+ GetDlgItem $MUI_TEMP1 $HWNDPARENT 1034
+ SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}"
+
+ GetDlgItem $MUI_TEMP1 $HWNDPARENT 1039
+ 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}"
+
+ !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}"
+
+ !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}"
+
+ !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
+
+ !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}"
+
+ 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_BGCOLOR}"
+
+ GetDlgItem $MUI_TEMP1 $MUI_HWND 1201
+ SetCtlColors $MUI_TEMP1 "" "${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_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
+ FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT
+ GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1019
+ SetCtlColors $MUI_TEMP1 "" "${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 /NOUNLOAD /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
+ !else
+ StartMenu::Init /NOUNLOAD /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 /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
+ !else
+ StartMenu::Init /NOUNLOAD /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
+ GetDlgItem $MUI_TEMP1 $MUI_HWND 1002
+ SetCtlColors $MUI_TEMP1 "" "${MUI_STARTMENUPAGE_BGCOLOR}"
+ GetDlgItem $MUI_TEMP1 $MUI_HWND 1004
+ SetCtlColors $MUI_TEMP1 "" "${MUI_STARTMENUPAGE_BGCOLOR}"
+ !endif
+
+ !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
+
+ StartMenu::Show
+
+ 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 5" "State" "1"
+ !else
+ !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "1"
+ !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_BGCOLOR}"
+
+ GetDlgItem $MUI_TEMP1 $MUI_HWND 1201
+ SetCtlColors $MUI_TEMP1 "" "${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_BGCOLOR}"
+
+ !ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
+
+ IfRebootFlag 0 mui.finish_noreboot_show
+
+ GetDlgItem $MUI_TEMP1 $MUI_HWND 1203
+ SetCtlColors $MUI_TEMP1 "" "${MUI_BGCOLOR}"
+
+ GetDlgItem $MUI_TEMP1 $MUI_HWND 1204
+ SetCtlColors $MUI_TEMP1 "" "${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_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_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
+
+ !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 "${NSISDIR}\Plugins\InstallOptions.dll"
+
+ !verbose pop
+
+!macroend
+
+!macro MUI_RESERVEFILE_LANGDLL
+
+ !verbose push
+ !verbose ${MUI_VERBOSE}
+
+ ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
+
+ !verbose pop
+
+!macroend
+
+;--------------------------------
+;LANGUAGES
+
+!macro MUI_LANGUAGE LANGUAGE
+
+ ;Include a language
+
+ !verbose push
+ !verbose ${MUI_VERBOSE}
+
+ !insertmacro MUI_INSERT
+
+ LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nlf"
+
+ ;Set default language file for MUI and backup user setting
+ !ifdef LANGFILE_DEFAULT
+ !define MUI_LANGFILE_DEFAULT_TEMP "${LANGFILE_DEFAULT}"
+ !undef LANGFILE_DEFAULT
+ !endif
+ !define LANGFILE_DEFAULT "${NSISDIR}\Contrib\Language files\English.nsh"
+
+ ;Include language file
+ !insertmacro LANGFILE_INCLUDE "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nsh"
+
+ ;Restore user setting for default language file
+ !undef LANGFILE_DEFAULT
+ !ifdef MUI_LANGFILE_DEFAULT_TEMP
+ !define LANGFILE_DEFAULT "${MUI_LANGFILE_DEFAULT}"
+ !endif
+
+ ;Add language to list of languages for selection dialog
+ !ifndef MUI_LANGDLL_LANGUAGES
+ !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' "
+ !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
+ !else
+ !ifdef MUI_LANGDLL_LANGUAGES_TEMP
+ !undef MUI_LANGDLL_LANGUAGES_TEMP
+ !endif
+ !define MUI_LANGDLL_LANGUAGES_TEMP "${MUI_LANGDLL_LANGUAGES}"
+ !undef MUI_LANGDLL_LANGUAGES
+
+ !ifdef MUI_LANGDLL_LANGUAGES_CP_TEMP
+ !undef MUI_LANGDLL_LANGUAGES_CP_TEMP
+ !endif
+ !define MUI_LANGDLL_LANGUAGES_CP_TEMP "${MUI_LANGDLL_LANGUAGES_CP}"
+ !undef MUI_LANGDLL_LANGUAGES_CP
+
+ !define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' ${MUI_LANGDLL_LANGUAGES_TEMP}"
+ !define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_LANGUAGES_CP_TEMP}"
+ !endif
+
+ !verbose pop
+
+!macroend
+
+;--------------------------------
+;LANGUAGE SELECTION DIALOG
+
+!macro MUI_LANGDLL_DISPLAY
+
+ !verbose push
+ !verbose ${MUI_VERBOSE}
+
+ !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 pop
+
+ !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
+
+!endif
+
+!verbose pop
diff --git a/Contrib/MultiUser/MultiUser.nsh b/Contrib/MultiUser/MultiUser.nsh
new file mode 100755
index 0000000..78f3202
--- /dev/null
+++ b/Contrib/MultiUser/MultiUser.nsh
@@ -0,0 +1,463 @@
+/*
+
+MultiUser.nsh
+
+Installer configuration for multi-user Windows environments
+
+Copyright © 2008 Joost Verburg
+
+*/
+
+!ifndef MULTIUSER_INCLUDED
+!define MULTIUSER_INCLUDED
+!verbose push
+!verbose 3
+
+;Standard NSIS header files
+
+!ifdef MULTIUSER_MUI
+ !include MUI2.nsh
+!endif
+!include nsDialogs.nsh
+!include LogicLib.nsh
+!include WinVer.nsh
+!include FileFunc.nsh
+
+;Variables
+
+Var MultiUser.Privileges
+Var MultiUser.InstallMode
+
+;Command line installation mode setting
+
+!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE
+ !insertmacro GetParameters
+ !ifndef MULTIUSER_NOUNINSTALLER
+ !insertmacro un.GetParameters
+ !endif
+ !include StrFunc.nsh
+ ${StrStr}
+ !ifndef MULTIUSER_NOUNINSTALLER
+ ${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
+!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
+
+ !ifdef MULTIUSER_INSTALLMODE_INSTDIR
+ StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
+ !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_FUNCTION
+ Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
+ !endif
+
+ ${endif}
+
+!macroend
+
+!macro MULTIUSER_INSTALLMODE_CURRENTUSER UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
+
+ ;Install mode initialization - per-user
+
+ ${if} ${IsNT}
+
+ StrCpy $MultiUser.InstallMode CurrentUser
+
+ SetShellVarContext current
+
+ !ifdef MULTIUSER_INSTALLMODE_INSTDIR
+ ${if} ${AtLeastWin2000}
+ StrCpy $INSTDIR "$LOCALAPPDATA\${MULTIUSER_INSTALLMODE_INSTDIR}"
+ ${else}
+ StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
+ ${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_FUNCTION
+ Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
+ !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}FUCTIONQUIT}
+ !else
+ Quit
+ !endif
+
+!macroend
+
+!macro MULTIUSER_INIT_TEXTS
+
+ !ifndef MULTIUSER_INIT_TEXT_ADMINREQUIRED
+ !define MULTIUSER_INIT_TEXT_ADMINREQUIRED "$(^Caption) requires administrator priviledges."
+ !endif
+
+ !ifndef MULTIUSER_INIT_TEXT_POWERREQUIRED
+ !define MULTIUSER_INIT_TEXT_POWERREQUIRED "$(^Caption) requires at least Power User priviledges."
+ !endif
+
+ !ifndef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE
+ !define MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have sufficient privileges to install $(^Name) for all users of this compuetr."
+ !endif
+
+!macroend
+
+!macro MULTIUSER_INIT_CHECKS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
+
+ ;Installer initialization - check privileges and set install mode
+
+ !insertmacro MULTIUSER_INIT_TEXTS
+
+ UserInfo::GetAccountType
+ Pop $MultiUser.Privileges
+
+ ${if} ${IsNT}
+
+ ;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.AllUsers
+ ${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.CurrentUser
+ ${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}"
+ ${endif}
+ ${endif}
+
+ !endif
+
+ ${else}
+
+ ;Not running Windows NT, per-user installation not supported
+
+ Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
+
+ ${endif}
+
+!macroend
+
+!macro MULTIUSER_INIT
+ !verbose push
+ !verbose 3
+
+ !insertmacro MULTIUSER_INIT_CHECKS "" ""
+
+ !verbose pop
+!macroend
+
+!ifndef MULTIUSER_NOUNINSTALL
+
+!macro MULTIUSER_UNINIT
+ !verbose push
+ !verbose 3
+
+ !insertmacro MULTIUSER_INIT_CHECKS Un un.
+
+ !verbose pop
+!macroend
+
+!endif
+
+/*
+
+Modern UI 2 page
+
+*/
+
+!ifdef MULTIUSER_MUI
+
+!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
+
+ Var MultiUser.InstallModePage.ReturnValue
+ !endif
+
+!macroend
+
+!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE
+
+ !insertmacro MUI_SET MULTIUSER_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLMODEPAGE ""
+ !insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE
+
+ !insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_TOP "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)"
+ !insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS "$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)"
+ !insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER "$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)"
+
+ PageEx custom
+
+ PageCallbacks MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID}
+
+ Caption " "
+
+ PageExEnd
+
+ !insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID}
+
+ !undef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP
+ !undef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS
+ !undef MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER
+
+!macroend
+
+!macro MULTIUSER_PAGE_INSTALLMODE
+
+ ;Modern UI page for install mode
+
+ !verbose push
+ !verbose 3
+
+ !ifndef MULTIUSER_EXECUTIONLEVEL_ALLUSERS
+ !error "A mixed-mode installation requires MULTIUSER_EXECUTIONLEVEL to be set to Admin, Power or Highest."
+ !endif
+
+ !insertmacro MUI_PAGE_INIT
+ !insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE
+
+ !verbose pop
+
+!macroend
+
+!macro MULTIUSER_FUNCTION_INSTALLMODEPAGE PRE LEAVE
+
+ ;Page functions of Modern UI page
+
+ Function "${PRE}"
+
+ ${ifnot} ${IsNT}
+ Abort
+ ${endif}
+
+ ${if} $MultiUser.Privileges != "Power"
+ ${andif} $MultiUser.Privileges != "Admin"
+ Abort
+ ${endif}
+
+ !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
+ !insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) $(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE)
+
+ nsDialogs::Create /NOUNLOAD 1018
+ Pop $MultiUser.InstallModePage
+
+ ${NSD_CreateLabel} 0u 0u 300u 20u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}"
+ Pop $MultiUser.InstallModePage.Text
+
+ ${NSD_CreateRadioButton} 20u 50u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}"
+ Pop $MultiUser.InstallModePage.AllUsers
+
+ ${NSD_CreateRadioButton} 20u 70u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}"
+ 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 MUI_PAGE_FUNCTION_CUSTOM SHOW
+ nsDialogs::Show
+
+ FunctionEnd
+
+ Function "${LEAVE}"
+ SendMessage $MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 $MultiUser.InstallModePage.ReturnValue
+
+ ${if} $MultiUser.InstallModePage.ReturnValue = ${BST_CHECKED}
+ Call MultiUser.InstallMode.AllUsers
+ ${else}
+ Call MultiUser.InstallMode.CurrentUser
+ ${endif}
+
+ !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
+ FunctionEnd
+
+!macroend
+
+!endif
+
+!verbose pop
+!endif
diff --git a/Contrib/MultiUser/Readme.html b/Contrib/MultiUser/Readme.html
new file mode 100755
index 0000000..7d2a729
--- /dev/null
+++ b/Contrib/MultiUser/Readme.html
@@ -0,0 +1,404 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+ <title>Multi-User Header File (MultiUser.nsh)</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+ <style type="text/css">
+ td
+ {
+ padding: 5px;
+ vertical-align: top;
+ border-bottom: 1px solid black;
+ }
+ </style>
+</head>
+<body>
+ <h1>
+ Multi-User Header File (MultiUser.nsh)</h1>
+ <p>
+ <i>Installer configuration for multi-user Windows environments</i></p>
+ <h2>
+ Table of Contents</h2>
+ <ul>
+ <li><a href="#introduction">Introduction</a></li>
+ <li><a href="#executionlevel">Initalization and Execution Level</a>
+ <li><a href="#installationmode">Installation Mode</a></ul>
+ <h2>
+ <a name="introduction"></a>Introduction</h2>
+ <p>
+ 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 <i>execution level</i> and <i>installation
+ mode</i> 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.</p>
+ <p>
+ Note that all settings need to be set before including the MultiUser.nsh header
+ file.</p>
+ <h2>
+ Initialization and <a name="executionlevel"></a>Execution Level&nbsp;</h2>
+ <p>
+ 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:</p>
+ <table>
+ <tr>
+ <td>
+ <b>Value </b>
+ </td>
+ <td>
+ <b>Description</b>
+ </td>
+ <td>
+ <b>Typical application</b>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Admin
+ </td>
+ <td>
+ Administrator privileges are required
+ </td>
+ <td>
+ Access data of all users accounts
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Power
+ </td>
+ <td>
+ Power User privileges are required<br />
+ (Power Users no longer exist in Windows Vista. For Vista this is equivalent to Admin)
+ </td>
+ <td>
+ Installation for all users (writing to &quot;Program Files&quot; or HKLM registry
+ keys), driver installation
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Highest
+ </td>
+ <td>
+ Request the highest possible execution level for the current user
+ </td>
+ <td>
+ Mixed-mode installer that can both be installed per-machine or per-user
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Standard
+ </td>
+ <td>
+ No special rights required
+ </td>
+ <td>
+ Installation for current user only
+ </td>
+ </tr>
+ </table>
+ <p>
+ 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,
+ set MULTIUSER_NOUNINSTALL.</p>
+ <blockquote>
+ <pre>!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</pre>
+ </blockquote>
+ <p>
+ Whether the required privileges can be obtained depends on the user that starts
+ the installer:</p>
+ <ul>
+ <li>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.</li>
+ <li>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.</li>
+ <li>Windows 95/98/98 do not set any restrictions on users or applications. Administrator
+ rights are always available.</li>
+ </ul>
+ <p>
+ 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).</p>
+ <p>
+ The following additional settings are available to customize the initialization:</p>
+ <table>
+ <tr>
+ <td>
+ <b>Setting<td>
+ <b>Description</b>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INIT_TEXT_ADMINREQUIRED
+ </td>
+ <td>
+ Error message to be displayed when administrator rights are required but not available.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INIT_TEXT_POWERREQUIRED
+ </td>
+ <td>
+ Error message to be displayed when Power User rights are required but not available.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE
+ </td>
+ <td>
+ 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.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INIT_FUNCTIONQUIT<br />
+ MULTIUSER_INIT_UNFUNCTIONQUIT
+ </td>
+ <td>
+ A custom function to be called when the installer is closed due to insufficient
+ privileges.
+ </td>
+ </tr>
+ </table>
+ <h2>
+ <a name="installationmode"></a>Installation Mode</h2>
+ <p>
+ 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.</p>
+ <p>
+ 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.</p>
+ <p>
+ The following settings are available to change the default installation mode:
+ <table>
+ <tr>
+ <td>
+ <b>Setting</b>
+ </td>
+ <td>
+ <b>Description</b>
+ </td>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
+ </td>
+ <td>
+ Set default to a per-user installation, even if the rights for a per-machine installation
+ are available.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME
+ </td>
+ <td>
+ 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.
+ </td>
+ </tr>
+ </table>
+ <p>
+ After initialization, the variable $MultiUser.InstallMode will contain the current
+ installation mode (AllUsers or CurrentUser).
+ </p>
+ <h3>
+ Mixed-Mode Installation</h3>
+ <p>
+ 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.</p>
+ <p>
+ 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 User.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):</p>
+ <pre>!define MULTIUSER_EXECUTIONLEVEL Highest
+<b>!define MULTIUSER_MUI</b>
+!define MULTIUSER_INSTALLMODE_COMMANDLINE
+!include MultiUser.nsh
+!include MUI2.nsh
+
+<b>!insertmacro MULTIUSER_PAGE_INSTALLMODE</b>
+!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
+</pre>
+ <p>
+ 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.</p>
+ <p>
+ The following settings can be used to customize the texts on the page (in addition
+ to the general Modern UI page settings):</p>
+ <table>
+ <tr>
+ <td>
+ <b>Setting</b>
+ </td>
+ <td>
+ <b>Description</b>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODEPAGE_TEXT_TOP
+ </td>
+ <td>
+ Text to display on the top of the page.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS
+ </td>
+ <td>
+ Text to display on the combo button for a per-machine installation.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER
+ </td>
+ <td>
+ Text to display on the combo button for a per-user installation.
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Installation Mode Initalization</h3>
+ <p>
+ 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:</p>
+ <table>
+ <tr>
+ <td>
+ <b>Setting</b>
+ </td>
+ <td>
+ <b>Description</b>
+ </td>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODE_INSTDIR
+ </td>
+ <td>
+ 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).
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
+ </td>
+ <td>
+ 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.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MULTIUSER_INSTALLMODE_FUNCTION<br />
+ MULTIUSER_INSTALLMODE_UNFUNCTION
+ </td>
+ <td>
+ A custom fuction to be called during the initialization of the installation mode
+ to set additional installer settings that depend on the mode
+ </td>
+ </table>
+ <p>
+ To set the installation mode manually, call one of these four functions:</p>
+ <table>
+ <tr>
+ <td>
+ <b>Function name</b>
+ </td>
+ <td>
+ <b>Installation mode</b>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MultiUser.InstallMode.AllUsers
+ </td>
+ <td>
+ Installer: Per-machine installation
+ </td>
+ </tr>
+ <tr>
+ <td>
+ MultiUser.InstallMode.CurrentUser
+ <td>
+ Installer: Per-user installation
+ </td>
+ </tr>
+ <tr>
+ <td>
+ un.MultiUser.InstallMode.AllUsers<td>
+ Uninstaller: Per-machine installation
+ </td>
+ </tr>
+ <tr>
+ <td>
+ un.MultiUser.InstallMode.CurrentUser<td>
+ Uninstaller: Per-user installation
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/Contrib/MultiUser/SConscript b/Contrib/MultiUser/SConscript
new file mode 100755
index 0000000..edacad3
--- /dev/null
+++ b/Contrib/MultiUser/SConscript
@@ -0,0 +1,14 @@
+target = 'MultiUser'
+
+docs = Split("""
+ Readme.html
+""")
+
+includes = Split("""
+ MultiUser.nsh
+""")
+
+Import('defenv')
+
+defenv.DistributeDocs(docs, path=target)
+defenv.DistributeInclude(includes)
diff --git a/Contrib/NSIS Menu/SConscript b/Contrib/NSIS Menu/SConscript
index bf8cfcc..73f03c2 100755
--- a/Contrib/NSIS Menu/SConscript
+++ b/Contrib/NSIS Menu/SConscript
@@ -23,21 +23,12 @@ libs = Split("""
""")
html = Split("""
- #Menu/compiler.html
- #Menu/docs.html
#Menu/index.html
- #Menu/intro.html
- #Menu/notinstalled.html
- #Menu/update.html
- #Menu/websites.html
""")
images = Split("""
- #Menu/images/clear.gif
#Menu/images/header.gif
#Menu/images/line.gif
- #Menu/images/menu.gif
- #Menu/images/menud.gif
#Menu/images/site.gif
""")
diff --git a/Contrib/NSIS Menu/wx/build.txt b/Contrib/NSIS Menu/wx/build.txt
index c77a0ef..1cd48b4 100755
--- a/Contrib/NSIS Menu/wx/build.txt
+++ b/Contrib/NSIS Menu/wx/build.txt
@@ -1,4 +1,4 @@
-1. Install wxWidgets 2.8
-2. Set WXWIN environment variable
-3. Run wxbuild.bat
-4. Build NSIS happily
+1. Install wxWidgets 2.8
+2. Set WXWIN environment variable
+3. Run wxbuild.bat
+4. Build NSIS happily
diff --git a/Contrib/NSISdl/License.txt b/Contrib/NSISdl/License.txt
index 642304f..f5e9621 100755
--- a/Contrib/NSISdl/License.txt
+++ b/Contrib/NSISdl/License.txt
@@ -1,18 +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.
+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/Contrib/NSISdl/ReadMe.txt b/Contrib/NSISdl/ReadMe.txt
index db98b43..986ed07 100755
--- a/Contrib/NSISdl/ReadMe.txt
+++ b/Contrib/NSISdl/ReadMe.txt
@@ -1,91 +1,91 @@
-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.
-
-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 remianing
-
-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.
+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.
+
+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 remianing
+
+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/Contrib/Splash/Example.nsi b/Contrib/Splash/Example.nsi
index 2cc62b5..9967780 100755
--- a/Contrib/Splash/Example.nsi
+++ b/Contrib/Splash/Example.nsi
@@ -1,21 +1,21 @@
-Name "Splash.dll test"
-
-OutFile "Splash 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\Wizard\orange-nsis.bmp"
- #optional
- #File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav"
-
- splash::show 1000 $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.
-FunctionEnd
-
-Section
+Name "Splash.dll test"
+
+OutFile "Splash 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\Wizard\orange-nsis.bmp"
+ #optional
+ #File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav"
+
+ splash::show 1000 $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.
+FunctionEnd
+
+Section
SectionEnd \ No newline at end of file
diff --git a/Contrib/Splash/splash.txt b/Contrib/Splash/splash.txt
index e69e073..a8db32d 100755
--- a/Contrib/Splash/splash.txt
+++ b/Contrib/Splash/splash.txt
@@ -1,41 +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_splashshit.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)
+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_splashshit.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/Contrib/StartMenu/Example.nsi b/Contrib/StartMenu/Example.nsi
index 9a9a82e..82db84d 100755
--- a/Contrib/StartMenu/Example.nsi
+++ b/Contrib/StartMenu/Example.nsi
@@ -1,50 +1,50 @@
-Name "StartMenu.dll test"
-
-OutFile "StartMenu Test.exe"
-
-XPStyle on
-
-Page directory
-DirText "This installer will create some shortcuts to MakeNSIS in the start menu.$\nFor this it needs NSIS's path." \
- "Please specify the path in which you have installed NSIS:"
-InstallDir "${NSISDIR}"
-Function .onVerifyInstDir
- IfFileExists $INSTDIR\makensis.exe +2
- Abort
-FunctionEnd
-
-Page custom StartMenuGroupSelect "" ": Start Menu Folder"
-Function StartMenuGroupSelect
- Push $R1
-
- StartMenu::Select /checknoshortcuts "Don't create a start menu folder" /autoadd /lastused $R0 "StartMenu.dll test"
- Pop $R1
-
- StrCmp $R1 "success" success
- StrCmp $R1 "cancel" done
- ; error
- MessageBox MB_OK $R1
- StrCpy $R0 "StartMenu.dll test" # use default
- Return
- success:
- Pop $R0
-
- done:
- Pop $R1
-FunctionEnd
-
-Page instfiles
-Section
- # this part is only necessary if you used /checknoshortcuts
- StrCpy $R1 $R0 1
- StrCmp $R1 ">" 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:
+Name "StartMenu.dll test"
+
+OutFile "StartMenu Test.exe"
+
+XPStyle on
+
+Page directory
+DirText "This installer will create some shortcuts to MakeNSIS in the start menu.$\nFor this it needs NSIS's path." \
+ "Please specify the path in which you have installed NSIS:"
+InstallDir "${NSISDIR}"
+Function .onVerifyInstDir
+ IfFileExists $INSTDIR\makensis.exe +2
+ Abort
+FunctionEnd
+
+Page custom StartMenuGroupSelect "" ": Start Menu Folder"
+Function StartMenuGroupSelect
+ Push $R1
+
+ StartMenu::Select /checknoshortcuts "Don't create a start menu folder" /autoadd /lastused $R0 "StartMenu.dll test"
+ Pop $R1
+
+ StrCmp $R1 "success" success
+ StrCmp $R1 "cancel" done
+ ; error
+ MessageBox MB_OK $R1
+ StrCpy $R0 "StartMenu.dll test" # use default
+ Return
+ success:
+ Pop $R0
+
+ done:
+ Pop $R1
+FunctionEnd
+
+Page instfiles
+Section
+ # this part is only necessary if you used /checknoshortcuts
+ StrCpy $R1 $R0 1
+ StrCmp $R1 ">" 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/Contrib/StartMenu/Readme.txt b/Contrib/StartMenu/Readme.txt
index 74f39fa..c3d635b 100755
--- a/Contrib/StartMenu/Readme.txt
+++ b/Contrib/StartMenu/Readme.txt
@@ -1,47 +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 /NOUNLOAD "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).
-
+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 /NOUNLOAD "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/Contrib/System/SysFunc.nsh b/Contrib/System/SysFunc.nsh
index 57c2016..9b0dee6 100755
--- a/Contrib/System/SysFunc.nsh
+++ b/Contrib/System/SysFunc.nsh
@@ -1,398 +1,398 @@
-; Some useful functions based on System plugin
-;
-; (c) brainsucker, 2002
-; (r) BSForce
-
-; Check for double includes
-!ifndef SysFunc.NSH.Included
-!define SysFunc.NSH.Included
-
-!include "${NSISDIR}\Examples\System\System.nsh"
-
-!verbose 3 ; For WinMessages especially
- !include "WinMessages.nsh"
-!verbose 4
-
-; ================= GetInstallerExeName implementation =================
-
-; Adopted Get Parameter function -> 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} (i) .r7"
-
- ; Get arrow cursor
- System::Call "${sysLoadCursor} (0, i ${IDC_ARROW}) .R9"
-
- ; Get callback
- System::Get "${sysWNDPROC}"
- Pop $3
-
- ; Create window class
- System::Call "*${stWNDCLASS} (0,r3,0,0,r7,0,R9,0,i 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} (_) i.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} (i 0, i 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
-
-!verbose 4
-
+; Some useful functions based on System plugin
+;
+; (c) brainsucker, 2002
+; (r) BSForce
+
+; Check for double includes
+!ifndef SysFunc.NSH.Included
+!define SysFunc.NSH.Included
+
+!include "${NSISDIR}\Examples\System\System.nsh"
+
+!verbose 3 ; For WinMessages especially
+ !include "WinMessages.nsh"
+!verbose 4
+
+; ================= GetInstallerExeName implementation =================
+
+; Adopted Get Parameter function -> 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} (i) .r7"
+
+ ; Get arrow cursor
+ System::Call "${sysLoadCursor} (0, i ${IDC_ARROW}) .R9"
+
+ ; Get callback
+ System::Get "${sysWNDPROC}"
+ Pop $3
+
+ ; Create window class
+ System::Call "*${stWNDCLASS} (0,r3,0,0,r7,0,R9,0,i 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} (_) i.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} (i 0, i 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
+
+!verbose 4
+
!endif \ No newline at end of file
diff --git a/Contrib/System/System.nsh b/Contrib/System/System.nsh
index b550d19..fe90c41 100755
--- a/Contrib/System/System.nsh
+++ b/Contrib/System/System.nsh
@@ -1,472 +1,472 @@
-; Some useful functions, structures, constants
-;
-; (c) brainsucker, 2002
-; (r) BSForce
-
-; Check for double includes
-!ifndef System.NSH.Included
-!define System.NSH.Included
-
-!verbose 3
-
-; ------------- Functions --------------
-
-; LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-!define sysWNDPROC "(i.s, i.s, i.s, i.s) iss"
-
-; LRESULT DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
-!define sysDefWindowProc "user32::DefWindowProcA(i, i, i, i) i"
-
-!define sysMessageBox "user32::MessageBoxA(i, t, t, i) i"
-
-!define sysMessageBeep "user32::MessageBeep(i) i"
-
-!define sysMessageBoxIndirect 'user32::MessageBoxIndirectA(i) i'
-
-; HMODULE GetModuleHandle(LPCTSTR lpModuleName);
-!define sysGetModuleHandle "kernel32::GetModuleHandleA(t) i"
-
-; HMODULE LoadLibrary(LPCTSTR lpFileName);
-!define sysLoadLibrary "kernel32::LoadLibraryA(t) i"
-
-; BOOL FreeLibrary(HMODULE hModule);
-!define sysFreeLibrary "kernel32::FreeLibrary(i) i"
-
-; HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName);
-!define sysLoadCursor "user32::LoadCursorA(i, t) i"
-
-; ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
-!define sysRegisterClass "user32::RegisterClassA(i) i"
-
-; HANDLE LoadImage(HINSTANCE hinst, LPCTSTR lpszName, UINT uType,
-; int cxDesired, int cyDesired, UINT fuLoad);
-!define sysLoadImage "user32::LoadImageA(i, t, i, i, i, i) i"
-
-; BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
-!define sysPlaySound "winmm.dll::PlaySoundA(t, i, 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::CreateWindowExA(i, t, t, i, i, i, i, i, i, i, i, i) i"
-
-; BOOL IsWindow(HWND hWnd);
-!define sysIsWindow "user32::IsWindow(i) i"
-
-; LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);
-!define sysSetWindowLong "user32::SetWindowLongA(i, i, i) i"
-
-; BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
-!define sysSetWindowPos "user32::SetWindowPos(i, i, i, i, i, i, i) i"
-
-; BOOL ShowWindow(HWND hWnd, int nCmdShow);
-!define sysShowWindow "user32::ShowWindow(i, i) i"
-
-; BOOL DestroyWindow(HWND hWnd);
-!define sysDestroyWindow "user32::DestroyWindow(i) i"
-
-; BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
-!define sysGetClientRect "user32::GetClientRect(i, i) i"
-
-; BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
-!define sysGetMessage "user32::GetMessageA(i, i, i, i) i"
-
-; LRESULT DispatchMessage(CONST MSG *lpmsg);
-!define sysDispatchMessage "user32::DispatchMessageA(i) i"
-
-; BOOL DeleteObject(HGDIOBJ hObject);
-!define sysDeleteObject "gdi32::DeleteObject(i) i"
-
-; int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);
-!define sysGetObject "gdi32::GetObjectA(i, i, i) i"
-
-; HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
-!define sysSelectObject "gdi32::SelectObject(i, i) i"
-
-; HDC CreateCompatibleDC(HDC hdc);
-!define sysCreateCompatibleDC "gdi32::CreateCompatibleDC(i) i"
-
-; BOOL DeleteDC(HDC hdc);
-!define sysDeleteDC "gdi32::DeleteDC(i) 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(i, i, i, i, i, i, i, i, i) i"
-
-; proposed by abgandar
-; int AddFontResource(LPCTSTR lpszFilename);
-!define sysAddFontResource "gdi32::AddFontResourceA(t) i"
-
-; HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);
-!define sysBeginPaint "user32::BeginPaint(i, i) i"
-
-; BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
-!define sysEndPaint "user32::EndPaint(i, i) i"
-
-; BOOL SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
-!define sysSystemParametersInfo "user32::SystemParametersInfoA(i, i, i, i) i"
-
-; UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
-!define sysSetTimer "user32::SetTimer(i, i, i, k) i"
-
-!define sysGetLogicalDriveStrings 'kernel32::GetLogicalDriveStringsA(i, i) i'
-
-!define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l) i'
-
-; UINT GetDriveType(LPCTSTR lpRootPathName);
-!define sysGetDriveType 'kernel32::GetDriveTypeA(t) i'
-
-; HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData);
-!define sysFindFirstFile 'kernel32::FindFirstFileA(t, i) i'
-
-; BOOL FindClose(HANDLE hFindFile);
-!define sysFindClose 'kernel32::FindClose(i) i'
-
-; BOOL FileTimeToSystemTime(CONST FILETIME *lpFileTime,
-; LPSYSTEMTIME lpSystemTime);
-!define sysFileTimeToSystemTime 'kernel32::FileTimeToSystemTime(*l, i) 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(i, i, i) i'
-
-!define syslstrlen 'kernel32::lstrlenA(t) i'
-
-; int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...);
-!define syswsprintf "user32::wsprintfA(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, i, i, i, i, t, t) i"
-
-; 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 "(i, i, i, i, i, i, i) i"
-
-; 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, i) i"
-
-; typedef struct _RECT {
-; LONG left;
-; LONG top;
-; LONG right;
-; LONG bottom;
-; } RECT, *PRECT;
-!define stRECT "(i, i, i, i) i"
-
-; typedef struct tagPAINTSTRUCT {
-; HDC hdc;
-; BOOL fErase;
-; RECT rcPaint; (rcl, rct, rcr, rcb)
-; BOOL fRestore;
-; BOOL fIncUpdate;
-; BYTE rgbReserved[32];
-; } PAINTSTRUCT, *PPAINTSTRUCT;
-!define stPAINTSTRUCT "(i, i, i, i, i, i, i, i, &v32) i"
-
-; 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, i, i, t, t, i, t, i, k, i) i'
-
-; 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) i'
-
-; Maximal windows path
-!define 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) i'
-
-; ------------- Constants --------------
-
-; == Other ==
-!define INVALID_HANDLE_VALUE -1
-
-; == Cursors ==
-
-!define IDC_ARROW 32512
-!define IDC_IBEAM 32513
-!define IDC_WAIT 32514
-!define IDC_CROSS 32515
-!define IDC_UPARROW 32516
-!define IDC_SIZE 32640
-!define IDC_ICON 32641
-!define IDC_SIZENWSE 32642
-!define IDC_SIZENESW 32643
-!define IDC_SIZEWE 32644
-!define IDC_SIZENS 32645
-!define IDC_SIZEALL 32646
-!define IDC_NO 32648
-!define IDC_HAND 32649
-!define IDC_APPSTARTING 32650
-!define IDC_HELP 32651
-
-; == Images ==
-
-!define IMAGE_BITMAP 0
-!define IMAGE_ICON 1
-!define IMAGE_CURSOR 2
-!define IMAGE_ENHMETAFILE 3
-
-!define LR_DEFAULTCOLOR 0x0000
-!define LR_MONOCHROME 0x0001
-!define LR_COLOR 0x0002
-!define LR_COPYRETURNORG 0x0004
-!define LR_COPYDELETEORG 0x0008
-!define LR_LOADFROMFILE 0x0010
-!define LR_LOADTRANSPARENT 0x0020
-!define LR_DEFAULTSIZE 0x0040
-!define LR_VGACOLOR 0x0080
-!define LR_LOADMAP3DCOLORS 0x1000
-!define LR_CREATEDIBSECTION 0x2000
-!define LR_COPYFROMRESOURCE 0x4000
-!define LR_SHARED 0x8000
-
-; == 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 WS_OVERLAPPED 0x00000000
-!define WS_POPUP 0x80000000
-!define WS_CHILD 0x40000000
-!define WS_MINIMIZE 0x20000000
-!define WS_VISIBLE 0x10000000
-!define WS_DISABLED 0x08000000
-!define WS_CLIPSIBLINGS 0x04000000
-!define WS_CLIPCHILDREN 0x02000000
-!define WS_MAXIMIZE 0x01000000
-!define WS_CAPTION 0x00C00000
-!define WS_BORDER 0x00800000
-!define WS_DLGFRAME 0x00400000
-!define WS_VSCROLL 0x00200000
-!define WS_HSCROLL 0x00100000
-!define WS_SYSMENU 0x00080000
-!define WS_THICKFRAME 0x00040000
-!define WS_GROUP 0x00020000
-!define WS_TABSTOP 0x00010000
-!define WS_MINIMIZEBOX 0x00020000
-!define WS_MAXIMIZEBOX 0x00010000
-!define WS_TILED ${WS_OVERLAPPED}
-!define WS_ICONIC ${WS_MINIMIZE}
-!define WS_SIZEBOX ${WS_THICKFRAME}
-!define WS_OVERLAPPEDWINDOW 0x00CF0000
-!define WS_TILEDWINDOW ${WS_OVERLAPPEDWINDOW}
-!define WS_POPUPWINDOW 0x80880000
-!define WS_CHILDWINDOW ${WS_CHILD}
-!define WS_EX_DLGMODALFRAME 0x00000001
-!define WS_EX_NOPARENTNOTIFY 0x00000004
-!define WS_EX_TOPMOST 0x00000008
-!define WS_EX_ACCEPTFILES 0x00000010
-!define WS_EX_TRANSPARENT 0x00000020
-!define WS_EX_MDICHILD 0x00000040
-!define WS_EX_TOOLWINDOW 0x00000080
-!define WS_EX_WINDOWEDGE 0x00000100
-!define WS_EX_CLIENTEDGE 0x00000200
-!define WS_EX_CONTEXTHELP 0x00000400
-!define WS_EX_RIGHT 0x00001000
-!define WS_EX_LEFT 0x00000000
-!define WS_EX_RTLREADING 0x00002000
-!define WS_EX_LTRREADING 0x00000000
-!define WS_EX_LEFTSCROLLBAR 0x00004000
-!define WS_EX_RIGHTSCROLLBAR 0x00000000
-!define WS_EX_CONTROLPARENT 0x00010000
-!define WS_EX_STATICEDGE 0x00020000
-!define WS_EX_APPWINDOW 0x00040000
-!define WS_EX_OVERLAPPEDWINDOW 0x00000300
-!define WS_EX_PALETTEWINDOW 0x00000188
-!define WS_EX_LAYERED 0x00080000
-!define WS_EX_NOINHERITLAYOUT 0x00100000
-!define WS_EX_LAYOUTRTL 0x00400000
-!define WS_EX_COMPOSITED 0x02000000
-!define WS_EX_NOACTIVATE 0x08000000
-
-
-; == System Parameters Info ==
-
-!define SPI_GETWORKAREA 0x0030
-
-; == Window Long Offsets ==
-
-!define GWL_WNDPROC -4
-!define GWL_HINSTANCE -6
-!define GWL_HWNDPARENT -8
-!define GWL_STYLE -16
-!define GWL_EXSTYLE -20
-!define GWL_USERDATA -21
-!define GWL_ID -12
-
-; == 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
-
-; == Drive type constants ==
-
-!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
-
-; == 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
-
-!verbose 4
-
+; Some useful functions, structures, constants
+;
+; (c) brainsucker, 2002
+; (r) BSForce
+
+; Check for double includes
+!ifndef System.NSH.Included
+!define System.NSH.Included
+
+!verbose 3
+
+; ------------- Functions --------------
+
+; LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+!define sysWNDPROC "(i.s, i.s, i.s, i.s) iss"
+
+; LRESULT DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
+!define sysDefWindowProc "user32::DefWindowProcA(i, i, i, i) i"
+
+!define sysMessageBox "user32::MessageBoxA(i, t, t, i) i"
+
+!define sysMessageBeep "user32::MessageBeep(i) i"
+
+!define sysMessageBoxIndirect 'user32::MessageBoxIndirectA(i) i'
+
+; HMODULE GetModuleHandle(LPCTSTR lpModuleName);
+!define sysGetModuleHandle "kernel32::GetModuleHandleA(t) i"
+
+; HMODULE LoadLibrary(LPCTSTR lpFileName);
+!define sysLoadLibrary "kernel32::LoadLibraryA(t) i"
+
+; BOOL FreeLibrary(HMODULE hModule);
+!define sysFreeLibrary "kernel32::FreeLibrary(i) i"
+
+; HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName);
+!define sysLoadCursor "user32::LoadCursorA(i, t) i"
+
+; ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
+!define sysRegisterClass "user32::RegisterClassA(i) i"
+
+; HANDLE LoadImage(HINSTANCE hinst, LPCTSTR lpszName, UINT uType,
+; int cxDesired, int cyDesired, UINT fuLoad);
+!define sysLoadImage "user32::LoadImageA(i, t, i, i, i, i) i"
+
+; BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
+!define sysPlaySound "winmm.dll::PlaySoundA(t, i, 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::CreateWindowExA(i, t, t, i, i, i, i, i, i, i, i, i) i"
+
+; BOOL IsWindow(HWND hWnd);
+!define sysIsWindow "user32::IsWindow(i) i"
+
+; LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);
+!define sysSetWindowLong "user32::SetWindowLongA(i, i, i) i"
+
+; BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
+!define sysSetWindowPos "user32::SetWindowPos(i, i, i, i, i, i, i) i"
+
+; BOOL ShowWindow(HWND hWnd, int nCmdShow);
+!define sysShowWindow "user32::ShowWindow(i, i) i"
+
+; BOOL DestroyWindow(HWND hWnd);
+!define sysDestroyWindow "user32::DestroyWindow(i) i"
+
+; BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
+!define sysGetClientRect "user32::GetClientRect(i, i) i"
+
+; BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
+!define sysGetMessage "user32::GetMessageA(i, i, i, i) i"
+
+; LRESULT DispatchMessage(CONST MSG *lpmsg);
+!define sysDispatchMessage "user32::DispatchMessageA(i) i"
+
+; BOOL DeleteObject(HGDIOBJ hObject);
+!define sysDeleteObject "gdi32::DeleteObject(i) i"
+
+; int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);
+!define sysGetObject "gdi32::GetObjectA(i, i, i) i"
+
+; HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
+!define sysSelectObject "gdi32::SelectObject(i, i) i"
+
+; HDC CreateCompatibleDC(HDC hdc);
+!define sysCreateCompatibleDC "gdi32::CreateCompatibleDC(i) i"
+
+; BOOL DeleteDC(HDC hdc);
+!define sysDeleteDC "gdi32::DeleteDC(i) 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(i, i, i, i, i, i, i, i, i) i"
+
+; proposed by abgandar
+; int AddFontResource(LPCTSTR lpszFilename);
+!define sysAddFontResource "gdi32::AddFontResourceA(t) i"
+
+; HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);
+!define sysBeginPaint "user32::BeginPaint(i, i) i"
+
+; BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
+!define sysEndPaint "user32::EndPaint(i, i) i"
+
+; BOOL SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
+!define sysSystemParametersInfo "user32::SystemParametersInfoA(i, i, i, i) i"
+
+; UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
+!define sysSetTimer "user32::SetTimer(i, i, i, k) i"
+
+!define sysGetLogicalDriveStrings 'kernel32::GetLogicalDriveStringsA(i, i) i'
+
+!define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l) i'
+
+; UINT GetDriveType(LPCTSTR lpRootPathName);
+!define sysGetDriveType 'kernel32::GetDriveTypeA(t) i'
+
+; HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData);
+!define sysFindFirstFile 'kernel32::FindFirstFileA(t, i) i'
+
+; BOOL FindClose(HANDLE hFindFile);
+!define sysFindClose 'kernel32::FindClose(i) i'
+
+; BOOL FileTimeToSystemTime(CONST FILETIME *lpFileTime,
+; LPSYSTEMTIME lpSystemTime);
+!define sysFileTimeToSystemTime 'kernel32::FileTimeToSystemTime(*l, i) 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(i, i, i) i'
+
+!define syslstrlen 'kernel32::lstrlenA(t) i'
+
+; int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...);
+!define syswsprintf "user32::wsprintfA(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, i, i, i, i, t, t) i"
+
+; 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 "(i, i, i, i, i, i, i) i"
+
+; 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, i) i"
+
+; typedef struct _RECT {
+; LONG left;
+; LONG top;
+; LONG right;
+; LONG bottom;
+; } RECT, *PRECT;
+!define stRECT "(i, i, i, i) i"
+
+; typedef struct tagPAINTSTRUCT {
+; HDC hdc;
+; BOOL fErase;
+; RECT rcPaint; (rcl, rct, rcr, rcb)
+; BOOL fRestore;
+; BOOL fIncUpdate;
+; BYTE rgbReserved[32];
+; } PAINTSTRUCT, *PPAINTSTRUCT;
+!define stPAINTSTRUCT "(i, i, i, i, i, i, i, i, &v32) i"
+
+; 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, i, i, t, t, i, t, i, k, i) i'
+
+; 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) i'
+
+; Maximal windows path
+!define 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) i'
+
+; ------------- Constants --------------
+
+; == Other ==
+!define INVALID_HANDLE_VALUE -1
+
+; == Cursors ==
+
+!define IDC_ARROW 32512
+!define IDC_IBEAM 32513
+!define IDC_WAIT 32514
+!define IDC_CROSS 32515
+!define IDC_UPARROW 32516
+!define IDC_SIZE 32640
+!define IDC_ICON 32641
+!define IDC_SIZENWSE 32642
+!define IDC_SIZENESW 32643
+!define IDC_SIZEWE 32644
+!define IDC_SIZENS 32645
+!define IDC_SIZEALL 32646
+!define IDC_NO 32648
+!define IDC_HAND 32649
+!define IDC_APPSTARTING 32650
+!define IDC_HELP 32651
+
+; == Images ==
+
+!define IMAGE_BITMAP 0
+!define IMAGE_ICON 1
+!define IMAGE_CURSOR 2
+!define IMAGE_ENHMETAFILE 3
+
+!define LR_DEFAULTCOLOR 0x0000
+!define LR_MONOCHROME 0x0001
+!define LR_COLOR 0x0002
+!define LR_COPYRETURNORG 0x0004
+!define LR_COPYDELETEORG 0x0008
+!define LR_LOADFROMFILE 0x0010
+!define LR_LOADTRANSPARENT 0x0020
+!define LR_DEFAULTSIZE 0x0040
+!define LR_VGACOLOR 0x0080
+!define LR_LOADMAP3DCOLORS 0x1000
+!define LR_CREATEDIBSECTION 0x2000
+!define LR_COPYFROMRESOURCE 0x4000
+!define LR_SHARED 0x8000
+
+; == 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 WS_OVERLAPPED 0x00000000
+!define WS_POPUP 0x80000000
+!define WS_CHILD 0x40000000
+!define WS_MINIMIZE 0x20000000
+!define WS_VISIBLE 0x10000000
+!define WS_DISABLED 0x08000000
+!define WS_CLIPSIBLINGS 0x04000000
+!define WS_CLIPCHILDREN 0x02000000
+!define WS_MAXIMIZE 0x01000000
+!define WS_CAPTION 0x00C00000
+!define WS_BORDER 0x00800000
+!define WS_DLGFRAME 0x00400000
+!define WS_VSCROLL 0x00200000
+!define WS_HSCROLL 0x00100000
+!define WS_SYSMENU 0x00080000
+!define WS_THICKFRAME 0x00040000
+!define WS_GROUP 0x00020000
+!define WS_TABSTOP 0x00010000
+!define WS_MINIMIZEBOX 0x00020000
+!define WS_MAXIMIZEBOX 0x00010000
+!define WS_TILED ${WS_OVERLAPPED}
+!define WS_ICONIC ${WS_MINIMIZE}
+!define WS_SIZEBOX ${WS_THICKFRAME}
+!define WS_OVERLAPPEDWINDOW 0x00CF0000
+!define WS_TILEDWINDOW ${WS_OVERLAPPEDWINDOW}
+!define WS_POPUPWINDOW 0x80880000
+!define WS_CHILDWINDOW ${WS_CHILD}
+!define WS_EX_DLGMODALFRAME 0x00000001
+!define WS_EX_NOPARENTNOTIFY 0x00000004
+!define WS_EX_TOPMOST 0x00000008
+!define WS_EX_ACCEPTFILES 0x00000010
+!define WS_EX_TRANSPARENT 0x00000020
+!define WS_EX_MDICHILD 0x00000040
+!define WS_EX_TOOLWINDOW 0x00000080
+!define WS_EX_WINDOWEDGE 0x00000100
+!define WS_EX_CLIENTEDGE 0x00000200
+!define WS_EX_CONTEXTHELP 0x00000400
+!define WS_EX_RIGHT 0x00001000
+!define WS_EX_LEFT 0x00000000
+!define WS_EX_RTLREADING 0x00002000
+!define WS_EX_LTRREADING 0x00000000
+!define WS_EX_LEFTSCROLLBAR 0x00004000
+!define WS_EX_RIGHTSCROLLBAR 0x00000000
+!define WS_EX_CONTROLPARENT 0x00010000
+!define WS_EX_STATICEDGE 0x00020000
+!define WS_EX_APPWINDOW 0x00040000
+!define WS_EX_OVERLAPPEDWINDOW 0x00000300
+!define WS_EX_PALETTEWINDOW 0x00000188
+!define WS_EX_LAYERED 0x00080000
+!define WS_EX_NOINHERITLAYOUT 0x00100000
+!define WS_EX_LAYOUTRTL 0x00400000
+!define WS_EX_COMPOSITED 0x02000000
+!define WS_EX_NOACTIVATE 0x08000000
+
+
+; == System Parameters Info ==
+
+!define SPI_GETWORKAREA 0x0030
+
+; == Window Long Offsets ==
+
+!define GWL_WNDPROC -4
+!define GWL_HINSTANCE -6
+!define GWL_HWNDPARENT -8
+!define GWL_STYLE -16
+!define GWL_EXSTYLE -20
+!define GWL_USERDATA -21
+!define GWL_ID -12
+
+; == 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
+
+; == Drive type constants ==
+
+!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
+
+; == 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
+
+!verbose 4
+
!endif \ No newline at end of file
diff --git a/Contrib/System/System.nsi b/Contrib/System/System.nsi
index 906a8a1..e3172a0 100755
--- a/Contrib/System/System.nsi
+++ b/Contrib/System/System.nsi
@@ -1,142 +1,142 @@
-; This is just an example of System Plugin
-;
-; (c) brainsucker, 2002
-; (r) BSForce
-
-Name "System Plugin Example"
-OutFile "System.exe"
-SetPluginUnload alwaysoff
-
-!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::Alloc 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 $1 $1 + $2
- IntOp $1 $1 + 1
- 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 defenition -----
-
- ; Direct specification demo
- System::Call 'user32::MessageBoxA(i $HWNDPARENT, t "Just direct MessageBoxA 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 defenitions (simple example))
- System::Call "${syswsprintf}(.R1, s,,, t, ir0) .R0 (,,tr2,tr3,$4_)" "Int64 ops and strange defenition 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"
-
- ; last plugin call must not have /NOUNLOAD so NSIS will be able to delete the temporary DLL
- SetPluginUnload manual
- ; do nothing
- System::Free 0
-
-SectionEnd
-
-; eof
+; This is just an example of System Plugin
+;
+; (c) brainsucker, 2002
+; (r) BSForce
+
+Name "System Plugin Example"
+OutFile "System.exe"
+SetPluginUnload alwaysoff
+
+!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::Alloc 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 $1 $1 + $2
+ IntOp $1 $1 + 1
+ 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 defenition -----
+
+ ; Direct specification demo
+ System::Call 'user32::MessageBoxA(i $HWNDPARENT, t "Just direct MessageBoxA 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 defenitions (simple example))
+ System::Call "${syswsprintf}(.R1, s,,, t, ir0) .R0 (,,tr2,tr3,$4_)" "Int64 ops and strange defenition 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"
+
+ ; last plugin call must not have /NOUNLOAD so NSIS will be able to delete the temporary DLL
+ SetPluginUnload manual
+ ; do nothing
+ System::Free 0
+
+SectionEnd
+
+; eof
diff --git a/Contrib/System/WhatsNew.txt b/Contrib/System/WhatsNew.txt
index 959c734..4d124f6 100755
--- a/Contrib/System/WhatsNew.txt
+++ b/Contrib/System/WhatsNew.txt
@@ -1,46 +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).
+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/Contrib/UserInfo/UserInfo.nsi b/Contrib/UserInfo/UserInfo.nsi
index e05a161..3503eee 100755
--- a/Contrib/UserInfo/UserInfo.nsi
+++ b/Contrib/UserInfo/UserInfo.nsi
@@ -1,44 +1,44 @@
-Name "UserInfo.dll test"
-OutFile UserInfo.exe
-
-!define REALMSG "$\nOriginal non-restricted account type: $2"
-
-Section
- ClearErrors
- UserInfo::GetName
- IfErrors Win9x
- Pop $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
- 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
-
- Win9x:
- # This one means you don't need to care about admin or
- # not admin because Windows 9x doesn't either
- MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
-
- done:
-SectionEnd
-
+Name "UserInfo.dll test"
+OutFile UserInfo.exe
+
+!define REALMSG "$\nOriginal non-restricted account type: $2"
+
+Section
+ ClearErrors
+ UserInfo::GetName
+ IfErrors Win9x
+ Pop $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
+ 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
+
+ Win9x:
+ # This one means you don't need to care about admin or
+ # not admin because Windows 9x doesn't either
+ MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
+
+ done:
+SectionEnd
+
diff --git a/Contrib/VPatch/VPatchLib.nsh b/Contrib/VPatch/VPatchLib.nsh
index 1e01bc8..f352928 100755
--- a/Contrib/VPatch/VPatchLib.nsh
+++ b/Contrib/VPatch/VPatchLib.nsh
@@ -1,47 +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
+; 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/Contrib/VPatch/example.nsi b/Contrib/VPatch/example.nsi
index 081420e..4619204 100755
--- a/Contrib/VPatch/example.nsi
+++ b/Contrib/VPatch/example.nsi
@@ -1,62 +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"
-
+;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/Contrib/nsDialogs/InstallOptions.nsi b/Contrib/nsDialogs/InstallOptions.nsi
index 9fe173c..b2bd7e5 100755
--- a/Contrib/nsDialogs/InstallOptions.nsi
+++ b/Contrib/nsDialogs/InstallOptions.nsi
@@ -1,47 +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 "${NSISDIR}\Examples\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
+!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 "${NSISDIR}\Examples\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/Contrib/nsDialogs/Readme.html b/Contrib/nsDialogs/Readme.html
index 31f2e95..d1edc7c 100755
--- a/Contrib/nsDialogs/Readme.html
+++ b/Contrib/nsDialogs/Readme.html
@@ -1,495 +1,506 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>nsDialogs</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-<style>
-b
-{
- color: red;
-}
-code
-{
- margin-left: 20px;
- padding: 7px;
- background-color: rgb(240,240,240);
-}
-</style>
-</head>
-<body>
-
-<h1>NSIS nsDialogs Plug-in</h1>
-<p><i>Next generation of user interface design</i></p>
-
-<h2>Table of Contents</h2>
-
-<ul>
-<li><a href="#intro">Introduction</a></li>
-<li>
-<a href="#step">Step-by-Step Tutorial</a>
-<ul>
-<li><a href="#step-basic">Basic Script</a></li>
-<li><a href="#step-page">Custom Page</a></li>
-<li><a href="#step-create">Creating Page</a></li>
-<li><a href="#step-show">Showing Page</a></li>
-<li><a href="#step-add">Adding Controls</a></li>
-<li><a href="#step-state">Control State</a></li>
-<li><a href="#step-notify">Real-time Notification</a></li>
-</ul>
-</li>
-<li>
-<a href="#ref">Function Reference</a>
-<ul>
-<li><a href="#ref-create">Create</a></li>
-<li><a href="#ref-createcontrol">CreateControl</a></li>
-<li><a href="#ref-show">Show</a></li>
-<li><a href="#ref-selectfiledialog">SelectFileDialog</a></li>
-<li><a href="#ref-selectfolderdialog">SelectFolderDialog</a></li>
-<li><a href="#ref-setrtl">SetRTL</a></li>
-<li><a href="#ref-getuserdata">GetUserData</a></li>
-<li><a href="#ref-setuserdata">SetUserData</a></li>
-<li><a href="#ref-onback">OnBack</a></li>
-<li><a href="#ref-onchange">OnChange</a></li>
-<li><a href="#ref-onclick">OnClick</a></li>
-<li><a href="#ref-onnotify">OnNotify</a></li>
-</ul>
-</li>
-<li><a href="#faq">FAQ</a></li>
-</ul>
-
-<h2><a name="intro"></a>Introduction</h2>
-
-<p>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. <a href="../Modern UI 2/Readme.html">Modern UI 2</a>, for example, uses nsDialogs to create the welcome and finish pages.</p>
-
-<p>nsDialogs is a new NSIS plug-in, introduced in version 2.29 as a replacement for <a href="../InstallOptions/Readme.html">InstallOptions</a>. 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.</p>
-
-<p>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.</p>
-
-<h2><a name="step"></a>Step-by-Step Tutorial</h2>
-
-<h3><a name="step-basic"></a>Basic Script</h3>
-
-<p>Before using nsDialogs, lets first create a basic script as our skeleton.</p>
-
-<blockquote><pre>Name nsDialogs
-OutFile nsDialogs.exe
-
-XPStyle on
-
-Page instfiles
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<h3><a name="step-page"></a>Custom Page</h3>
-
-<p>Next, we'll add a custom page where we can use nsDialogs. nsDialogs cannot be used in sections or any other function but a custom page's function.</p>
-
-<blockquote><pre>Name nsDialogs
-OutFile nsDialogs.exe
-
-XPStyle on
-
-<b>Page custom nsDialogsPage</b>
-Page instfiles
-
-<b>Function nsDialogsPage
-FunctionEnd</b>
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<h3><a name="step-create"></a>Creating Page</h3>
-
-<p>Now that the foundations are laid, it's time to use nsDialogs. The first call must always be to nsDialogs::Create. It will create a new dialog in the page and return its <i>HWND</i> on the stack. The result must be popped from the stack to prevent stack corruption. If the result is <i>error</i>, the dialog couldn't be created.</p>
-
-<p>nsDialogs::Create, like every other nsDialogs function but nsDialogs::Show, must always be called with /NOUNLOAD.</p>
-
-<p>nsDialogs::Create accepts one parameter. It has a very specific function, but to keep things simple for this tutorial, it must always be 1018.</p>
-
-<p><i>HWND</i> is a number that uniquely identifies the dialog and can be used with SendMessage, SetCtlColors and Win32 API.</p>
-
-<blockquote><pre><b>!include LogicLib.nsh</b>
-
-Name nsDialogs
-OutFile nsDialogs.exe
-
-XPStyle on
-
-<b>Var Dialog</b>
-
-Page custom nsDialogsPage
-Page instfiles
-
-Function nsDialogsPage
-<b>
- nsDialogs::Create /NOUNLOAD 1018
- Pop $Dialog
-
- ${If} $Dialog == error
- Abort
- ${EndIf}
-</b>
-FunctionEnd
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<h3><a name="step-show"></a>Showing Page</h3>
-
-<p>Now that the page is created, it's time to show it. This is done with nsDialogs::Show. This function will not return until the user clicks Next, Back or Cancel.</p>
-
-<blockquote><pre>!include LogicLib.nsh
-
-Name nsDialogs
-OutFile nsDialogs.exe
-
-XPStyle on
-
-Var Dialog
-
-Page custom nsDialogsPage
-Page instfiles
-
-Function nsDialogsPage
- nsDialogs::Create /NOUNLOAD 1018
- Pop $Dialog
-
- ${If} $Dialog == error
- Abort
- ${EndIf}
-<b>
- nsDialogs::Show
-</b>
-FunctionEnd
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<h3><a name="step-add"></a>Adding Controls</h3>
-
-<p>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.</p>
-
-<p>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 <i>u</i>. To use percentage, the measurement must be suffixed with the percentage sign - <i>%</i>. Any other suffix, or no suffix, means pixels.</p>
-
-<p>Dialog units allow creation of dialogs that scale well when different fonts or DPI is used. Its size in pixels is determined on 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.</p>
-
-<blockquote><pre><b>!include nsDialogs.nsh</b>
-!include LogicLib.nsh
-
-Name nsDialogs
-OutFile nsDialogs.exe
-
-XPStyle on
-
-Var Dialog
-<b>Var Label
-Var Text</b>
-
-Page custom nsDialogsPage
-Page instfiles
-
-Function nsDialogsPage
-
- nsDialogs::Create /NOUNLOAD 1018
- Pop $Dialog
-
- ${If} $Dialog == error
- Abort
- ${EndIf}
-<b>
- ${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
- Pop $Label
-
- ${NSD_CreateText} 0 13u 100% -13u "Type something here..."
- Pop $Text
-</b>
- nsDialogs::Show
-
-FunctionEnd
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<p>Available control types that can be created with ${NSD_Create*} are:</p>
-
-<ul>
-<li>HLine</li>
-<li>VLine</li>
-<li>Label</li>
-<li>Icon</li>
-<li>Bitmap</li>
-<li>BrowseButton</li>
-<li>Link</li>
-<li>Button</li>
-<li>GroupBox</li>
-<li>CheckBox</li>
-<li>RadioButton</li>
-<li>Text</li>
-<li>FileRequest</li>
-<li>DirRequest</li>
-<li>ComboBox</li>
-<li>ListBox</li>
-</ul>
-
-<h3><a name="step-state"></a>Control State</h3>
-
-<p>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 <i>leave callback</i> 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.</p>
-
-<p>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 <i>LB_GETCURSEL</i> and <i>LB_GETTEXT</i>. With time, the library of macros in nsDialogs.nsh will fill with more and more macros that'll handle more cases like this.</p>
-
-<blockquote><pre>!include nsDialogs.nsh
-!include LogicLib.nsh
-
-Name nsDialogs
-OutFile nsDialogs.exe
-
-XPStyle on
-
-Var Dialog
-Var Label
-Var Text
-
-Page custom nsDialogsPage <b>nsDialogsPageLeave</b>
-Page instfiles
-
-Function nsDialogsPage
-
- nsDialogs::Create /NOUNLOAD 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
-
-<b>Function nsDialogsPageLeave
-
- ${NSD_GetText} $Text $0
- MessageBox MB_OK "You typed:$\n$\n$0"
-
-FunctionEnd</b>
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<h3><a name="step-notify"></a>Real-time Notification</h3>
-
-<p>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's nothing to notify about labels.</p>
-
-<p>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.</p>
-
-<p>The new example will respond to the user type <i>hello</i> in the text box.</p>
-
-<blockquote><pre>!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 /NOUNLOAD 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
- <b>${NSD_OnChange} $Text nsDialogsPageTextChange</b>
-
- nsDialogs::Show
-
-FunctionEnd
-
-Function nsDialogsPageLeave
-
- ${NSD_GetText} $Text $0
- MessageBox MB_OK "You typed:$\n$\n$0"
-
-FunctionEnd
-
-<b>Function nsDialogsPageTextChange
-
- Pop $1 # $1 == $ Text
-
- ${NSD_GetText} $Text $0
-
- ${If} $0 == "hello"
-
- MessageBox MB_OK "right back at ya!"
-
- ${EndIf}
-
-FunctionEnd</b>
-
-Section
-
- DetailPrint "hello world"
-
-SectionEnd</pre></blockquote>
-
-<h2><a name="ref"></a>Function Reference</h2>
-
-<h3><a name="ref-create"></a>Create</h3>
-
-<p><code>nsDialogs::Create /NOUNLOAD <i>rect</i></code></p>
-
-<p>Creates a new dialog. <i>rect</i> 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 1040 for the welcome and the finish page.</p>
-
-<p>Returns the new dialog's HWND on the stack or <i>error</i>.</p>
-
-<h3><a name="ref-createcontrol"></a>CreateControl</h3>
-
-<p><code>nsDialogs::CreateControl /NOUNLOAD <i>class</i> <i>style</i> <i>extended_style</i> <i>x</i> <i>y</i> <i>width</i> <i>height</i> <i>text</i> </code></p>
-
-<p>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.</p>
-
-<p>Returns the new dialog's HWND on the stack or <i>error</i>.</p>
-
-<h3><a name="ref-show"></a>Show</h3>
-
-<p><code>nsDialogs::Show</code></p>
-
-<p>Displays the page. Call this once finished with nsDialogs::Create, nsDialogs::CreateControl and the rest.</p>
-
-<p>Returns nothing.</p>
-
-<h3><a name="ref-selectfiledialog"></a>SelectFileDialog</h3>
-
-<p><code>nsDialogs::SelectFileDialog /NOUNLOAD <i>mode</i> <i>initial_selection</i> <i>filter</i></code></p>
-
-<p>Displays a file selection dialog to the user. If <i>mode</i> is set to <i>save</i>, displays a file save dialog. If <i>mode</i> is set to <i>open</i>, displays a file open dialog. <i>filter</i> is a list of available file filters separated by pipes. If an empty string is passed, the default is used - <i>All Files|*.*</i>.</p>
-
-<p>Returns the selected file on the stack or an empty string if the user canceled the operation.</p>
-
-<h3><a name="ref-selectfolderdialog"></a>SelectFolderDialog</h3>
-
-<p><code>nsDialogs::SelectFolderDialog /NOUNLOAD <i>title</i> <i>initial_selection</i></code></p>
-
-<p>Displays a directory selection dialog to the user.</p>
-
-<p>Returns the selected directory on the stack or an empty string if the user canceled the operation.</p>
-
-<h3><a name="ref-setrtl"></a>SetRTL</h3>
-
-<p><code>nsDialogs::SetRTL /NOUNLOAD <i>rtl_setting</i></code></p>
-
-<p>Sets right-to-left mode on or off. If <i>rtl_setting</i> is 0, it's set to off. If <i>rtl_setting</i> is 1, it's set to on. This function must be called before any calls to nsDialogs::CreateControl.</p>
-
-<p>Returns nothing.</p>
-
-<h3><a name="ref-getuserdata"></a>GetUserData</h3>
-
-<p><code>nsDialogs::GetUserData /NOUNLOAD <i>control_HWND</i></code></p>
-
-<p>Returns user data associated with the control on the stack. Use nsDialogs::SetUserData to set this data.</p>
-
-<h3><a name="ref-setuserdata"></a>SetUserData</h3>
-
-<p><code>nsDialogs::SetUserData /NOUNLOAD <i>control_HWND</i> <i>data</i></code></p>
-
-<p>Associates <i>data</i> with the control. Use nsDialogs::GetUserData to get this data.</p>
-
-<p>Returns nothing.</p>
-
-<h3><a name="ref-onback"></a>OnBack</h3>
-
-<p><code>nsDialogs::OnBack /NOUNLOAD <i>function_address</i></code></p>
-
-<p>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.</p>
-
-<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
-
-<p>Returns nothing.</p>
-
-<h3><a name="ref-onchange"></a>OnChange</h3>
-
-<p><code>nsDialogs::OnChange /NOUNLOAD <i>control_HWND</i> <i>function_address</i></code></p>
-
-<p>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.</p>
-
-<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
-
-<p>Returns nothing.</p>
-
-<h3><a name="ref-onclick"></a>OnClick</h3>
-
-<p><code>nsDialogs::OnClick /NOUNLOAD <i>control_HWND</i> <i>function_address</i></code></p>
-
-<p>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.</p>
-
-<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
-
-<p>Returns nothing.</p>
-
-<h3><a name="ref-onnotify"></a>OnNotify</h3>
-
-<p><code>nsDialogs::OnNotify /NOUNLOAD <i>control_HWND</i> <i>function_address</i></code></p>
-
-<p>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 MNHDR structure will be waiting on its stack.</p>
-
-<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
-
-<p>Returns nothing.</p>
-
-<h2><a name="faq"></a>FAQ</h2>
-
-<div>
-
-<ul>
-
-<li>
-<b>Q:</b> Can nsDialogs handle InstallOptions INI files?
-<blockquote>
-<p><b>A:</b> nsDialogs.nsh contains a function called <i>CreateDialogFromINI</i> 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 notification yet. <i>Examples\nsDialogs\InstallOptions.nsi</i> shows a usage example of this function.</p><p>In the future there'll also be a function that creates the script itself.
-
-</li>
-
-</ul>
-
-</div>
-
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<title>nsDialogs</title>
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<style>
+b
+{
+ color: red;
+}
+code
+{
+ margin-left: 20px;
+ padding: 7px;
+ background-color: rgb(240,240,240);
+}
+</style>
+</head>
+<body>
+
+<h1>NSIS nsDialogs Plug-in</h1>
+<p><i>Next generation of user interface design</i></p>
+
+<h2>Table of Contents</h2>
+
+<ul>
+<li><a href="#intro">Introduction</a></li>
+<li>
+<a href="#step">Step-by-Step Tutorial</a>
+<ul>
+<li><a href="#step-basic">Basic Script</a></li>
+<li><a href="#step-page">Custom Page</a></li>
+<li><a href="#step-create">Creating Page</a></li>
+<li><a href="#step-show">Showing Page</a></li>
+<li><a href="#step-add">Adding Controls</a></li>
+<li><a href="#step-state">Control State</a></li>
+<li><a href="#step-notify">Real-time Notification</a></li>
+<li><a href="#helpful-macros">Helpful macros</a></li>
+</ul>
+</li>
+<li>
+<a href="#ref">Function Reference</a>
+<ul>
+<li><a href="#ref-create">Create</a></li>
+<li><a href="#ref-createcontrol">CreateControl</a></li>
+<li><a href="#ref-show">Show</a></li>
+<li><a href="#ref-selectfiledialog">SelectFileDialog</a></li>
+<li><a href="#ref-selectfolderdialog">SelectFolderDialog</a></li>
+<li><a href="#ref-setrtl">SetRTL</a></li>
+<li><a href="#ref-getuserdata">GetUserData</a></li>
+<li><a href="#ref-setuserdata">SetUserData</a></li>
+<li><a href="#ref-onback">OnBack</a></li>
+<li><a href="#ref-onchange">OnChange</a></li>
+<li><a href="#ref-onclick">OnClick</a></li>
+<li><a href="#ref-onnotify">OnNotify</a></li>
+</ul>
+</li>
+<li><a href="#faq">FAQ</a></li>
+</ul>
+
+<h2><a name="intro"></a>Introduction</h2>
+
+<p>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. <a href="../Modern UI 2/Readme.html">Modern UI 2</a>, for example, uses nsDialogs to create the welcome and finish pages.</p>
+
+<p>nsDialogs is a new NSIS plug-in, introduced in version 2.29 as a replacement for <a href="../InstallOptions/Readme.html">InstallOptions</a>. 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.</p>
+
+<p>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.</p>
+
+<h2><a name="step"></a>Step-by-Step Tutorial</h2>
+
+<h3><a name="step-basic"></a>Basic Script</h3>
+
+<p>Before using nsDialogs, lets first create a basic script as our skeleton.</p>
+
+<blockquote><pre>Name nsDialogs
+OutFile nsDialogs.exe
+
+XPStyle on
+
+Page instfiles
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<h3><a name="step-page"></a>Custom Page</h3>
+
+<p>Next, we'll add a custom page where we can use nsDialogs. nsDialogs cannot be used in sections or any other function but a custom page's function.</p>
+
+<blockquote><pre>Name nsDialogs
+OutFile nsDialogs.exe
+
+XPStyle on
+
+<b>Page custom nsDialogsPage</b>
+Page instfiles
+
+<b>Function nsDialogsPage
+FunctionEnd</b>
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<h3><a name="step-create"></a>Creating Page</h3>
+
+<p>Now that the foundations are laid, it's time to use nsDialogs. The first call must always be to nsDialogs::Create. It will create a new dialog in the page and return its <i>HWND</i> on the stack. The result must be popped from the stack to prevent stack corruption. If the result is <i>error</i>, the dialog couldn't be created.</p>
+
+<p>nsDialogs::Create, like every other nsDialogs function but nsDialogs::Show, must always be called with /NOUNLOAD.</p>
+
+<p>nsDialogs::Create accepts one parameter. It has a very specific function, but to keep things simple for this tutorial, it must always be 1018.</p>
+
+<p><i>HWND</i> is a number that uniquely identifies the dialog and can be used with SendMessage, SetCtlColors and Win32 API.</p>
+
+<blockquote><pre><b>!include LogicLib.nsh</b>
+
+Name nsDialogs
+OutFile nsDialogs.exe
+
+XPStyle on
+
+<b>Var Dialog</b>
+
+Page custom nsDialogsPage
+Page instfiles
+
+Function nsDialogsPage
+<b>
+ nsDialogs::Create /NOUNLOAD 1018
+ Pop $Dialog
+
+ ${If} $Dialog == error
+ Abort
+ ${EndIf}
+</b>
+FunctionEnd
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<h3><a name="step-show"></a>Showing Page</h3>
+
+<p>Now that the page is created, it's time to show it. This is done with nsDialogs::Show. This function will not return until the user clicks Next, Back or Cancel.</p>
+
+<blockquote><pre>!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+
+XPStyle on
+
+Var Dialog
+
+Page custom nsDialogsPage
+Page instfiles
+
+Function nsDialogsPage
+ nsDialogs::Create /NOUNLOAD 1018
+ Pop $Dialog
+
+ ${If} $Dialog == error
+ Abort
+ ${EndIf}
+<b>
+ nsDialogs::Show
+</b>
+FunctionEnd
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<h3><a name="step-add"></a>Adding Controls</h3>
+
+<p>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.</p>
+
+<p>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 <i>u</i>. To use percentage, the measurement must be suffixed with the percentage sign - <i>%</i>. Any other suffix, or no suffix, means pixels.</p>
+
+<p>Dialog units allow creation of dialogs that scale well when different fonts or DPI is used. Its size in pixels is determined on 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.</p>
+
+<blockquote><pre><b>!include nsDialogs.nsh</b>
+!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+
+XPStyle on
+
+Var Dialog
+<b>Var Label
+Var Text</b>
+
+Page custom nsDialogsPage
+Page instfiles
+
+Function nsDialogsPage
+
+ nsDialogs::Create /NOUNLOAD 1018
+ Pop $Dialog
+
+ ${If} $Dialog == error
+ Abort
+ ${EndIf}
+<b>
+ ${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
+ Pop $Label
+
+ ${NSD_CreateText} 0 13u 100% -13u "Type something here..."
+ Pop $Text
+</b>
+ nsDialogs::Show
+
+FunctionEnd
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<p>Available control types that can be created with ${NSD_Create*} are:</p>
+
+<ul>
+<li>HLine</li>
+<li>VLine</li>
+<li>Label</li>
+<li>Icon</li>
+<li>Bitmap</li>
+<li>BrowseButton</li>
+<li>Link</li>
+<li>Button</li>
+<li>GroupBox</li>
+<li>CheckBox</li>
+<li>RadioButton</li>
+<li>Text</li>
+<li>Password</li>
+<li>FileRequest</li>
+<li>DirRequest</li>
+<li>ComboBox</li>
+<li>DropList</li>
+<li>ListBox</li>
+</ul>
+
+<h3><a name="step-state"></a>Control State</h3>
+
+<p>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 <i>leave callback</i> 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.</p>
+
+<p>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 <i>LB_GETCURSEL</i> and <i>LB_GETTEXT</i>. With time, the library of macros in nsDialogs.nsh will fill with more and more macros that'll handle more cases like this.</p>
+
+<blockquote><pre>!include nsDialogs.nsh
+!include LogicLib.nsh
+
+Name nsDialogs
+OutFile nsDialogs.exe
+
+XPStyle on
+
+Var Dialog
+Var Label
+Var Text
+
+Page custom nsDialogsPage <b>nsDialogsPageLeave</b>
+Page instfiles
+
+Function nsDialogsPage
+
+ nsDialogs::Create /NOUNLOAD 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
+
+<b>Function nsDialogsPageLeave
+
+ ${NSD_GetText} $Text $0
+ MessageBox MB_OK "You typed:$\n$\n$0"
+
+FunctionEnd</b>
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<h3><a name="step-notify"></a>Real-time Notification</h3>
+
+<p>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's nothing to notify about labels.</p>
+
+<p>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.</p>
+
+<p>The new example will respond to the user type <i>hello</i> in the text box.</p>
+
+<blockquote><pre>!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 /NOUNLOAD 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
+ <b>${NSD_OnChange} $Text nsDialogsPageTextChange</b>
+
+ nsDialogs::Show
+
+FunctionEnd
+
+Function nsDialogsPageLeave
+
+ ${NSD_GetText} $Text $0
+ MessageBox MB_OK "You typed:$\n$\n$0"
+
+FunctionEnd
+
+<b>Function nsDialogsPageTextChange
+
+ Pop $1 # $1 == $ Text
+
+ ${NSD_GetText} $Text $0
+
+ ${If} $0 == "hello"
+
+ MessageBox MB_OK "right back at ya!"
+
+ ${EndIf}
+
+FunctionEnd</b>
+
+Section
+
+ DetailPrint "hello world"
+
+SectionEnd</pre></blockquote>
+
+<h3><a name="helpful-macros"></a>Helpful macros</h3>
+
+<h4><a name="set-focus">Set focus to a control</h4>
+
+<p>Use the following syntax to set the focus to a specified control.</p>
+
+<p><code>${NSD_SetFocus} <i>hwnd_of_control</i></code></p>
+
+<h2><a name="ref"></a>Function Reference</h2>
+
+<h3><a name="ref-create"></a>Create</h3>
+
+<p><code>nsDialogs::Create /NOUNLOAD <i>rect</i></code></p>
+
+<p>Creates a new dialog. <i>rect</i> 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 1040 for the welcome and the finish page.</p>
+
+<p>Returns the new dialog's HWND on the stack or <i>error</i>.</p>
+
+<h3><a name="ref-createcontrol"></a>CreateControl</h3>
+
+<p><code>nsDialogs::CreateControl /NOUNLOAD <i>class</i> <i>style</i> <i>extended_style</i> <i>x</i> <i>y</i> <i>width</i> <i>height</i> <i>text</i> </code></p>
+
+<p>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.</p>
+
+<p>Returns the new dialog's HWND on the stack or <i>error</i>.</p>
+
+<h3><a name="ref-show"></a>Show</h3>
+
+<p><code>nsDialogs::Show</code></p>
+
+<p>Displays the page. Call this once finished with nsDialogs::Create, nsDialogs::CreateControl and the rest.</p>
+
+<p>Returns nothing.</p>
+
+<h3><a name="ref-selectfiledialog"></a>SelectFileDialog</h3>
+
+<p><code>nsDialogs::SelectFileDialog /NOUNLOAD <i>mode</i> <i>initial_selection</i> <i>filter</i></code></p>
+
+<p>Displays a file selection dialog to the user. If <i>mode</i> is set to <i>save</i>, displays a file save dialog. If <i>mode</i> is set to <i>open</i>, displays a file open dialog. <i>filter</i> is a list of available file filters separated by pipes. If an empty string is passed, the default is used - <i>All Files|*.*</i>.</p>
+
+<p>Returns the selected file on the stack or an empty string if the user canceled the operation.</p>
+
+<h3><a name="ref-selectfolderdialog"></a>SelectFolderDialog</h3>
+
+<p><code>nsDialogs::SelectFolderDialog /NOUNLOAD <i>title</i> <i>initial_selection</i></code></p>
+
+<p>Displays a directory selection dialog to the user.</p>
+
+<p>Returns the selected directory on the stack or an empty string if the user canceled the operation.</p>
+
+<h3><a name="ref-setrtl"></a>SetRTL</h3>
+
+<p><code>nsDialogs::SetRTL /NOUNLOAD <i>rtl_setting</i></code></p>
+
+<p>Sets right-to-left mode on or off. If <i>rtl_setting</i> is 0, it's set to off. If <i>rtl_setting</i> is 1, it's set to on. This function must be called before any calls to nsDialogs::CreateControl.</p>
+
+<p>Returns nothing.</p>
+
+<h3><a name="ref-getuserdata"></a>GetUserData</h3>
+
+<p><code>nsDialogs::GetUserData /NOUNLOAD <i>control_HWND</i></code></p>
+
+<p>Returns user data associated with the control on the stack. Use nsDialogs::SetUserData to set this data.</p>
+
+<h3><a name="ref-setuserdata"></a>SetUserData</h3>
+
+<p><code>nsDialogs::SetUserData /NOUNLOAD <i>control_HWND</i> <i>data</i></code></p>
+
+<p>Associates <i>data</i> with the control. Use nsDialogs::GetUserData to get this data.</p>
+
+<p>Returns nothing.</p>
+
+<h3><a name="ref-onback"></a>OnBack</h3>
+
+<p><code>nsDialogs::OnBack /NOUNLOAD <i>function_address</i></code></p>
+
+<p>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.</p>
+
+<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
+
+<p>Returns nothing.</p>
+
+<h3><a name="ref-onchange"></a>OnChange</h3>
+
+<p><code>nsDialogs::OnChange /NOUNLOAD <i>control_HWND</i> <i>function_address</i></code></p>
+
+<p>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.</p>
+
+<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
+
+<p>Returns nothing.</p>
+
+<h3><a name="ref-onclick"></a>OnClick</h3>
+
+<p><code>nsDialogs::OnClick /NOUNLOAD <i>control_HWND</i> <i>function_address</i></code></p>
+
+<p>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.</p>
+
+<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
+
+<p>Returns nothing.</p>
+
+<h3><a name="ref-onnotify"></a>OnNotify</h3>
+
+<p><code>nsDialogs::OnNotify /NOUNLOAD <i>control_HWND</i> <i>function_address</i></code></p>
+
+<p>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 MNHDR structure will be waiting on its stack.</p>
+
+<p>Use GetFunctionAddress to get the address of the desired callback function.</p>
+
+<p>Returns nothing.</p>
+
+<h2><a name="faq"></a>FAQ</h2>
+
+<div>
+
+<ul>
+
+<li>
+<b>Q:</b> Can nsDialogs handle InstallOptions INI files?
+<blockquote>
+<p><b>A:</b> nsDialogs.nsh contains a function called <i>CreateDialogFromINI</i> 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 notification yet. <i>Examples\nsDialogs\InstallOptions.nsi</i> shows a usage example of this function.</p><p>In the future there'll also be a function that creates the script itself.
+
+</li>
+
+</ul>
+
+</div>
+
+</body>
</html> \ No newline at end of file
diff --git a/Contrib/nsDialogs/example.nsi b/Contrib/nsDialogs/example.nsi
index 39ccaa5..20ec0f4 100755
--- a/Contrib/nsDialogs/example.nsi
+++ b/Contrib/nsDialogs/example.nsi
@@ -1,76 +1,82 @@
-!include nsDialogs.nsh
-!include LogicLib.nsh
-
-Name "nsDialogs Example"
-OutFile "nsDialogs Example.exe"
-
-XPStyle on
-
-Page license
-Page custom nsDialogsPage
-
-Var BUTTON
-Var EDIT
-Var CHECKBOX
-
-Function nsDialogsPage
-
- nsDialogs::Create /NOUNLOAD 1018
- Pop $0
-
- GetFunctionAddress $0 OnBack
- nsDialogs::OnBack /NOUNLOAD $0
-
- ${NSD_CreateButton} 0 0 100% 12u Test
- Pop $BUTTON
- GetFunctionAddress $0 OnClick
- nsDialogs::OnClick /NOUNLOAD $BUTTON $0
-
- ${NSD_CreateText} 0 35 100% 12u hello
- Pop $EDIT
- GetFunctionAddress $0 OnChange
- nsDialogs::OnChange /NOUNLOAD $EDIT $0
-
- ${NSD_CreateCheckbox} 0 -50 100% 8u Test
- Pop $CHECKBOX
- GetFunctionAddress $0 OnCheckbox
- nsDialogs::OnClick /NOUNLOAD $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
-
- MessageBox MB_OK clicky
-
-FunctionEnd
-
-Function OnChange
-
- System::Call user32::GetWindowText(i$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
-
- MessageBox MB_OK "checkbox clicked"
-
-FunctionEnd
-
-Section
-SectionEnd
+!include nsDialogs.nsh
+!include LogicLib.nsh
+
+Name "nsDialogs Example"
+OutFile "nsDialogs Example.exe"
+
+XPStyle on
+
+Page license
+Page custom nsDialogsPage
+
+Var BUTTON
+Var EDIT
+Var CHECKBOX
+
+Function nsDialogsPage
+
+ nsDialogs::Create /NOUNLOAD 1018
+ Pop $0
+
+ GetFunctionAddress $0 OnBack
+ nsDialogs::OnBack /NOUNLOAD $0
+
+ ${NSD_CreateButton} 0 0 100% 12u Test
+ Pop $BUTTON
+ GetFunctionAddress $0 OnClick
+ nsDialogs::OnClick /NOUNLOAD $BUTTON $0
+
+ ${NSD_CreateText} 0 35 100% 12u hello
+ Pop $EDIT
+ GetFunctionAddress $0 OnChange
+ nsDialogs::OnChange /NOUNLOAD $EDIT $0
+
+ ${NSD_CreateCheckbox} 0 -50 100% 8u Test
+ Pop $CHECKBOX
+ GetFunctionAddress $0 OnCheckbox
+ nsDialogs::OnClick /NOUNLOAD $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(i$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
+
+Section
+SectionEnd
diff --git a/Contrib/nsDialogs/input.c b/Contrib/nsDialogs/input.c
index bfda3dc..7dd85e9 100755
--- a/Contrib/nsDialogs/input.c
+++ b/Contrib/nsDialogs/input.c
@@ -26,6 +26,7 @@ static int NSDFUNC ConvertPlacement(char *str, int total, int height)
RECT r;
r.left = r.top = x;
+ r.right = r.bottom = 0;
MapDialogRect(g_dialog.hwParent, &r);
diff --git a/Contrib/nsDialogs/nsDialogs.c b/Contrib/nsDialogs/nsDialogs.c
index daf22b7..0a0fcc9 100755
--- a/Contrib/nsDialogs/nsDialogs.c
+++ b/Contrib/nsDialogs/nsDialogs.c
@@ -5,6 +5,14 @@
#include "input.h"
#include "rtl.h"
+#ifndef ODS_NOACCEL
+#define ODS_NOACCEL 0x0100
+#define ODS_NOFOCUSRECT 0x0200
+#endif
+#ifndef DT_HIDEPREFIX
+#define DT_HIDEPREFIX 0x00100000
+#endif
+
HINSTANCE g_hInstance;
struct nsDialog g_dialog;
extra_parameters* g_pluginParms;
@@ -115,6 +123,13 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
RECT rc;
char text[1024];
+ // http://blogs.msdn.com/oldnewthing/archive/2005/05/03/414317.aspx#414357
+ // says we should call SystemParametersInfo(SPI_GETKEYBOARDCUES,...) to make
+ // sure, does not seem to be required, might be a win2k bug, or it might
+ // only apply to menus
+ BOOL hideFocus = (lpdis->itemState & ODS_NOFOCUSRECT);
+ BOOL hideAccel = (lpdis->itemState & ODS_NOACCEL);
+
struct nsControl* ctl = GetControl(lpdis->hwndItem);
if (ctl == NULL)
break;
@@ -141,12 +156,16 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (lpdis->itemAction & ODA_DRAWENTIRE)
{
- // Get TxtColor unless the user has set another using SetCtlColors
+ DWORD xtraDrawStyle = (g_dialog.rtl ? DT_RTLREADING : 0);
+ if (hideAccel)
+ xtraDrawStyle |= DT_HIDEPREFIX;
+
+ // Use blue unless the user has set another using SetCtlColors
if (!GetWindowLong(lpdis->hwndItem, GWL_USERDATA))
SetTextColor(lpdis->hDC, RGB(0,0,255));
// Draw the text
- DrawText(lpdis->hDC, text, -1, &rc, DT_CENTER | DT_VCENTER | DT_WORDBREAK | (g_dialog.rtl ? DT_RTLREADING : 0));
+ DrawText(lpdis->hDC, text, -1, &rc, xtraDrawStyle | DT_CENTER | DT_VCENTER | DT_WORDBREAK);
}
// Draw the focus rect if needed
@@ -154,7 +173,8 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// NB: when not in DRAWENTIRE mode, this will actually toggle the focus
// rectangle since it's drawn in a XOR way
- DrawFocusRect(lpdis->hDC, &rc);
+ if (!hideFocus)
+ DrawFocusRect(lpdis->hDC, &rc);
}
return TRUE;
diff --git a/Contrib/nsDialogs/nsDialogs.nsh b/Contrib/nsDialogs/nsDialogs.nsh
index bb663ac..4c5c245 100755
--- a/Contrib/nsDialogs/nsDialogs.nsh
+++ b/Contrib/nsDialogs/nsDialogs.nsh
@@ -1,516 +1,563 @@
-/*
-
-nsDialogs.nsh
-Header file for creating custom installer pages with nsDialogs
-
-*/
-
-!include LogicLib.nsh
-!include WinMessages.nsh
-
-!define WS_EX_DLGMODALFRAME 0x00000001
-!define WS_EX_NOPARENTNOTIFY 0x00000004
-!define WS_EX_TOPMOST 0x00000008
-!define WS_EX_ACCEPTFILES 0x00000010
-!define WS_EX_TRANSPARENT 0x00000020
-!define WS_EX_MDICHILD 0x00000040
-!define WS_EX_TOOLWINDOW 0x00000080
-!define WS_EX_WINDOWEDGE 0x00000100
-!define WS_EX_CLIENTEDGE 0x00000200
-!define WS_EX_CONTEXTHELP 0x00000400
-!define WS_EX_RIGHT 0x00001000
-!define WS_EX_LEFT 0x00000000
-!define WS_EX_RTLREADING 0x00002000
-!define WS_EX_LTRREADING 0x00000000
-!define WS_EX_LEFTSCROLLBAR 0x00004000
-!define WS_EX_RIGHTSCROLLBAR 0x00000000
-!define WS_EX_CONTROLPARENT 0x00010000
-!define WS_EX_STATICEDGE 0x00020000
-!define WS_EX_APPWINDOW 0x00040000
-
-!define WS_CHILD 0x40000000
-!define WS_VISIBLE 0x10000000
-!define WS_DISABLED 0x08000000
-!define WS_CLIPSIBLINGS 0x04000000
-!define WS_CLIPCHILDREN 0x02000000
-!define WS_MAXIMIZE 0x01000000
-!define WS_VSCROLL 0x00200000
-!define WS_HSCROLL 0x00100000
-!define WS_GROUP 0x00020000
-!define 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 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 LR_DEFAULTCOLOR 0x0000
-!define LR_MONOCHROME 0x0001
-!define LR_COLOR 0x0002
-!define LR_COPYRETURNORG 0x0004
-!define LR_COPYDELETEORG 0x0008
-!define LR_LOADFROMFILE 0x0010
-!define LR_LOADTRANSPARENT 0x0020
-!define LR_DEFAULTSIZE 0x0040
-!define LR_VGACOLOR 0x0080
-!define LR_LOADMAP3DCOLORS 0x1000
-!define LR_CREATEDIBSECTION 0x2000
-!define LR_COPYFROMRESOURCE 0x4000
-!define LR_SHARED 0x8000
-
-!define IMAGE_BITMAP 0
-!define IMAGE_ICON 1
-!define IMAGE_CURSOR 2
-!define IMAGE_ENHMETAFILE 3
-
-!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}
-!define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}
-
-!define __NSD_Icon_CLASS STATIC
-!define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}
-!define __NSD_Icon_EXSTYLE 0
-
-!define __NSD_Bitmap_CLASS STATIC
-!define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}
-!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 BUTTON
-!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_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_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_ComboBox_CLASS COMBOBOX
-!define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}
-!define __NSD_ComboBox_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}
-
-!macro __NSD_DefineControl NAME
-
- !define NSD_Create${NAME} "nsDialogs::CreateControl /NOUNLOAD ${__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 Text
-!insertmacro __NSD_DefineControl FileRequest
-!insertmacro __NSD_DefineControl DirRequest
-!insertmacro __NSD_DefineControl ComboBox
-!insertmacro __NSD_DefineControl ListBox
-
-!macro __NSD_OnEvent EVENT HWND FUNCTION
-
- Push $0
- Push $1
-
- StrCpy $1 "${HWND}"
-
- GetFunctionAddress $0 "${FUNCTION}"
- nsDialogs::On${EVENT} /NOUNLOAD $1 $0
-
- Pop $1
- Pop $0
-
-!macroend
-
-!macro __NSD_DefineCallback EVENT
-
- !define NSD_On${EVENT} `!insertmacro __NSD_OnEvent ${EVENT}`
-
-!macroend
-
-!insertmacro __NSD_DefineCallback Click
-!insertmacro __NSD_DefineCallback Change
-!insertmacro __NSD_DefineCallback Notify
-!insertmacro __NSD_DefineCallback Back
-
-!macro __NSD_GetText CONTROL VAR
-
- System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})
- Pop ${VAR}
-
-!macroend
-
-!define NSD_GetText `!insertmacro __NSD_GetText`
-
-!define 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 /NOUNLOAD $R0
- Pop $R9
-
- ReadINIStr $R0 $0 Settings RTL
- nsDialogs::SetRTL /NOUNLOAD $R0
-
- ReadINIStr $R0 $0 Settings NumFields
-
- ${DEBUG} "NumFields = $R0"
-
- ${For} $R1 1 $R0
- ${DEBUG} "Creating field $R1"
- ReadINIStr $R2 $0 "Field $R1" Type
- ${DEBUG} " Type = $R2"
- ReadINIStr $R3 $0 "Field $R1" Left
- ${DEBUG} " Left = $R3"
- ReadINIStr $R4 $0 "Field $R1" Top
- ${DEBUG} " Top = $R4"
- ReadINIStr $R5 $0 "Field $R1" Right
- ${DEBUG} " Right = $R5"
- ReadINIStr $R6 $0 "Field $R1" Bottom
- ${DEBUG} " Bottom = $R6"
- IntOp $R5 $R5 - $R3
- ${DEBUG} " Width = $R5"
- IntOp $R6 $R6 - $R4
- ${DEBUG} " Height = $R6"
- ReadINIStr $R7 $0 "Field $R1" Text
- ${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_ControlCaseEx FileRequest
- !insertmacro __NSD_ControlCaseEx DirRequest
- !insertmacro __NSD_ControlCase ComboBox
- !insertmacro __NSD_ControlCase ListBox
- ${EndSwitch}
-
- WriteINIStr $0 "Field $R1" HWND $R9
- ${Next}
-
- nsDialogs::Show
-
- FunctionEnd
-
- Function ${UNINSTALLER_FUNCPREFIX}UpdateINIState
-
- ${DEBUG} "Updating INI state"
-
- ReadINIStr $R0 $0 Settings NumFields
-
- ${DEBUG} "NumField = $R0"
-
- ${For} $R1 1 $R0
- ReadINIStr $R2 $0 "Field $R1" HWND
- ${DEBUG} " HWND = $R2"
- ${NSD_GetText} $R2 $R2
- ${DEBUG} " Window text = $R2"
- 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 /NOUNLOAD $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 /NOUNLOAD $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 /NOUNLOAD $R0
- Pop $R1
-
- ReadINIStr $R2 $0 "Field $R1" HWND
- ReadINIStr $R4 $0 "Field $R1" Filter
-
- ${NSD_GetText} $R2 $R3
-
- nsDialogs::SelectFileDialog /NOUNLOAD save $R3 $R4
- Pop $R3
-
- ${If} $R3 != ""
- SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
- ${EndIf}
-
- FunctionEnd
-
- Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
-
- Pop $R0
-
- nsDialogs::GetUserData /NOUNLOAD $R0
- Pop $R1
-
- ReadINIStr $R2 $0 "Field $R1" HWND
- ReadINIStr $R3 $0 "Field $R1" Text
-
- ${NSD_GetText} $R2 $R4
-
- nsDialogs::SelectFolderDialog /NOUNLOAD $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 /NOUNLOAD $R9 $R1 # remember field id
-
- ${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink
-
- FunctionEnd
-
- Function ${UNINSTALLER_FUNCPREFIX}OnLink
-
- Pop $R0
-
- nsDialogs::GetUserData /NOUNLOAD $R0
- Pop $R1
-
- ReadINIStr $R1 $0 "Field $R1" STATE
-
- ExecShell "" $R1
-
- FunctionEnd
-
-!macroend
+/*
+
+nsDialogs.nsh
+Header file for creating custom installer pages with nsDialogs
+
+*/
+
+!ifndef NSDIALOGS_INCLUDED
+!define NSDIALOGS_INCLUDED
+!verbose push
+!verbose 3
+
+!include LogicLib.nsh
+!include WinMessages.nsh
+
+!define WS_EX_DLGMODALFRAME 0x00000001
+!define WS_EX_NOPARENTNOTIFY 0x00000004
+!define WS_EX_TOPMOST 0x00000008
+!define WS_EX_ACCEPTFILES 0x00000010
+!define WS_EX_TRANSPARENT 0x00000020
+!define WS_EX_MDICHILD 0x00000040
+!define WS_EX_TOOLWINDOW 0x00000080
+!define WS_EX_WINDOWEDGE 0x00000100
+!define WS_EX_CLIENTEDGE 0x00000200
+!define WS_EX_CONTEXTHELP 0x00000400
+!define WS_EX_RIGHT 0x00001000
+!define WS_EX_LEFT 0x00000000
+!define WS_EX_RTLREADING 0x00002000
+!define WS_EX_LTRREADING 0x00000000
+!define WS_EX_LEFTSCROLLBAR 0x00004000
+!define WS_EX_RIGHTSCROLLBAR 0x00000000
+!define WS_EX_CONTROLPARENT 0x00010000
+!define WS_EX_STATICEDGE 0x00020000
+!define WS_EX_APPWINDOW 0x00040000
+
+!define WS_CHILD 0x40000000
+!define WS_VISIBLE 0x10000000
+!define WS_DISABLED 0x08000000
+!define WS_CLIPSIBLINGS 0x04000000
+!define WS_CLIPCHILDREN 0x02000000
+!define WS_MAXIMIZE 0x01000000
+!define WS_VSCROLL 0x00200000
+!define WS_HSCROLL 0x00100000
+!define WS_GROUP 0x00020000
+!define 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 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 LR_DEFAULTCOLOR 0x0000
+!define LR_MONOCHROME 0x0001
+!define LR_COLOR 0x0002
+!define LR_COPYRETURNORG 0x0004
+!define LR_COPYDELETEORG 0x0008
+!define LR_LOADFROMFILE 0x0010
+!define LR_LOADTRANSPARENT 0x0020
+!define LR_DEFAULTSIZE 0x0040
+!define LR_VGACOLOR 0x0080
+!define LR_LOADMAP3DCOLORS 0x1000
+!define LR_CREATEDIBSECTION 0x2000
+!define LR_COPYFROMRESOURCE 0x4000
+!define LR_SHARED 0x8000
+
+!define IMAGE_BITMAP 0
+!define IMAGE_ICON 1
+!define IMAGE_CURSOR 2
+!define IMAGE_ENHMETAFILE 3
+
+!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}
+!define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}
+
+!define __NSD_Icon_CLASS STATIC
+!define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}
+!define __NSD_Icon_EXSTYLE 0
+
+!define __NSD_Bitmap_CLASS STATIC
+!define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}
+!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 BUTTON
+!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_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_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_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_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}
+
+!macro __NSD_DefineControl NAME
+
+ !define NSD_Create${NAME} "nsDialogs::CreateControl /NOUNLOAD ${__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 Text
+!insertmacro __NSD_DefineControl Password
+!insertmacro __NSD_DefineControl FileRequest
+!insertmacro __NSD_DefineControl DirRequest
+!insertmacro __NSD_DefineControl ComboBox
+!insertmacro __NSD_DefineControl DropList
+!insertmacro __NSD_DefineControl ListBox
+
+!macro __NSD_OnEvent EVENT HWND FUNCTION
+
+ Push $0
+ Push $1
+
+ StrCpy $1 "${HWND}"
+
+ GetFunctionAddress $0 "${FUNCTION}"
+ nsDialogs::On${EVENT} /NOUNLOAD $1 $0
+
+ Pop $1
+ Pop $0
+
+!macroend
+
+!macro __NSD_DefineCallback EVENT
+
+ !define NSD_On${EVENT} `!insertmacro __NSD_OnEvent ${EVENT}`
+
+!macroend
+
+!insertmacro __NSD_DefineCallback Click
+!insertmacro __NSD_DefineCallback Change
+!insertmacro __NSD_DefineCallback Notify
+!insertmacro __NSD_DefineCallback Back
+
+!macro __NSD_GetText CONTROL VAR
+
+ System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})
+ Pop ${VAR}
+
+!macroend
+
+!define NSD_GetText `!insertmacro __NSD_GetText`
+
+!macro __NSD_GetState CONTROL VAR
+
+ SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR}
+
+!macroend
+
+!define NSD_GetState `!insertmacro __NSD_GetState`
+
+!macro __NSD_SetFocus HWND
+
+ System::Call "user32::SetFocus(i${HWND})"
+
+!macroend
+
+!define NSD_SetFocus `!insertmacro __NSD_SetFocus`
+
+!define 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 /NOUNLOAD $R0
+ Pop $R9
+
+ ReadINIStr $R0 $0 Settings RTL
+ nsDialogs::SetRTL /NOUNLOAD $R0
+
+ ReadINIStr $R0 $0 Settings NumFields
+
+ ${DEBUG} "NumFields = $R0"
+
+ ${For} $R1 1 $R0
+ ${DEBUG} "Creating field $R1"
+ ReadINIStr $R2 $0 "Field $R1" Type
+ ${DEBUG} " Type = $R2"
+ ReadINIStr $R3 $0 "Field $R1" Left
+ ${DEBUG} " Left = $R3"
+ ReadINIStr $R4 $0 "Field $R1" Top
+ ${DEBUG} " Top = $R4"
+ ReadINIStr $R5 $0 "Field $R1" Right
+ ${DEBUG} " Right = $R5"
+ ReadINIStr $R6 $0 "Field $R1" Bottom
+ ${DEBUG} " Bottom = $R6"
+ IntOp $R5 $R5 - $R3
+ ${DEBUG} " Width = $R5"
+ IntOp $R6 $R6 - $R4
+ ${DEBUG} " Height = $R6"
+ ReadINIStr $R7 $0 "Field $R1" Text
+ ${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
+
+ ${DEBUG} "Updating INI state"
+
+ ReadINIStr $R0 $0 Settings NumFields
+
+ ${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"
+ ${DEBUG} " HWND = $R2"
+ ${NSD_GetState} $R2 $R2
+ ${DEBUG} " Window selection = $R2"
+ ${Break}
+ ${CaseElse}
+ ${DEBUG} " HWND = $R2"
+ ${NSD_GetText} $R2 $R2
+ ${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 /NOUNLOAD $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 /NOUNLOAD $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 /NOUNLOAD $R0
+ Pop $R1
+
+ ReadINIStr $R2 $0 "Field $R1" HWND
+ ReadINIStr $R4 $0 "Field $R1" Filter
+
+ ${NSD_GetText} $R2 $R3
+
+ nsDialogs::SelectFileDialog /NOUNLOAD save $R3 $R4
+ Pop $R3
+
+ ${If} $R3 != ""
+ SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
+ ${EndIf}
+
+ FunctionEnd
+
+ Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
+
+ Pop $R0
+
+ nsDialogs::GetUserData /NOUNLOAD $R0
+ Pop $R1
+
+ ReadINIStr $R2 $0 "Field $R1" HWND
+ ReadINIStr $R3 $0 "Field $R1" Text
+
+ ${NSD_GetText} $R2 $R4
+
+ nsDialogs::SelectFolderDialog /NOUNLOAD $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 /NOUNLOAD $R9 $R1 # remember field id
+
+ ${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink
+
+ FunctionEnd
+
+ Function ${UNINSTALLER_FUNCPREFIX}OnLink
+
+ Pop $R0
+
+ nsDialogs::GetUserData /NOUNLOAD $R0
+ Pop $R1
+
+ ReadINIStr $R1 $0 "Field $R1" STATE
+
+ ExecShell "" $R1
+
+ FunctionEnd
+
+!macroend
+
+!verbose pop
+!endif
diff --git a/Contrib/nsDialogs/rtl.c b/Contrib/nsDialogs/rtl.c
index 8850c55..a247428 100755
--- a/Contrib/nsDialogs/rtl.c
+++ b/Contrib/nsDialogs/rtl.c
@@ -75,7 +75,7 @@ void NSDFUNC ConvertStyleToRTL(enum nsControlType type, LPDWORD style, LPDWORD e
case NSCTL_TREE:
*style |= TVS_RTLREADING;
- *exStyle |= WS_EX_RIGHT;
+ *exStyle |= WS_EX_RIGHT | WS_EX_LAYOUTRTL;
break;
default:
diff --git a/Contrib/nsDialogs/welcome.nsi b/Contrib/nsDialogs/welcome.nsi
index 3559056..56cfebc 100755
--- a/Contrib/nsDialogs/welcome.nsi
+++ b/Contrib/nsDialogs/welcome.nsi
@@ -1,320 +1,322 @@
-!include MUI.nsh
-!include LogicLib.nsh
-!include WinMessages.nsh
-!include FileFunc.nsh
-
-!insertmacro GetRoot
-
-Name "nsDialogs Welcome"
-OutFile "nsDialogs Welcome.exe"
-
-Page custom nsDialogsWelcome
-Page custom nsDialogsDirectory
-!insertmacro MUI_PAGE_INSTFILES
-
-!insertmacro MUI_LANGUAGE English
-
-!define WS_EX_CLIENTEDGE 0x00000200
-
-!define WS_CHILD 0x40000000
-!define WS_VISIBLE 0x10000000
-!define WS_DISABLED 0x08000000
-!define WS_CLIPSIBLINGS 0x04000000
-!define WS_MAXIMIZE 0x01000000
-!define WS_VSCROLL 0x00200000
-!define WS_HSCROLL 0x00100000
-!define WS_GROUP 0x00020000
-!define 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 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 LR_DEFAULTCOLOR 0x0000
-!define LR_MONOCHROME 0x0001
-!define LR_COLOR 0x0002
-!define LR_COPYRETURNORG 0x0004
-!define LR_COPYDELETEORG 0x0008
-!define LR_LOADFROMFILE 0x0010
-!define LR_LOADTRANSPARENT 0x0020
-!define LR_DEFAULTSIZE 0x0040
-!define LR_VGACOLOR 0x0080
-!define LR_LOADMAP3DCOLORS 0x1000
-!define LR_CREATEDIBSECTION 0x2000
-!define LR_COPYFROMRESOURCE 0x4000
-!define LR_SHARED 0x8000
-
-!define IMAGE_BITMAP 0
-!define IMAGE_ICON 1
-!define IMAGE_CURSOR 2
-!define IMAGE_ENHMETAFILE 3
-
-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 /NOUNLOAD 1044
- Pop $DIALOG
-
- nsDialogs::CreateControl /NOUNLOAD 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(i 0, t r0, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s'
- Pop $IMAGE
-
- SendMessage $IMAGECTL ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE
-
- nsDialogs::CreateControl /NOUNLOAD 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 /NOUNLOAD 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 "" 0xffffff
- SetCtlColors $HEADLINE "" 0xffffff
- SetCtlColors $TEXT "" 0xffffff
-
- Call HideControls
-
- nsDialogs::Show
-
- Call ShowControls
-
- System::Call gdi32::DeleteObject(i$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 /NOUNLOAD 1018
- Pop $DIALOG
-
- nsDialogs::CreateControl /NOUNLOAD 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 /NOUNLOAD 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 /NOUNLOAD 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 /NOUNLOAD $DIRECTORY $0
-
- System::Call shlwapi::SHAutoComplete(i$DIRECTORY,i${SHACF_FILESYSTEM})
-
- nsDialogs::CreateControl /NOUNLOAD 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
-
- GetDlgItem $0 $HWNDPARENT 1
-
- System::Call user32::GetWindowText(i$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
+!include MUI.nsh
+!include LogicLib.nsh
+!include WinMessages.nsh
+!include FileFunc.nsh
+
+!insertmacro GetRoot
+
+Name "nsDialogs Welcome"
+OutFile "nsDialogs Welcome.exe"
+
+Page custom nsDialogsWelcome
+Page custom nsDialogsDirectory
+!insertmacro MUI_PAGE_INSTFILES
+
+!insertmacro MUI_LANGUAGE English
+
+!define WS_EX_CLIENTEDGE 0x00000200
+
+!define WS_CHILD 0x40000000
+!define WS_VISIBLE 0x10000000
+!define WS_DISABLED 0x08000000
+!define WS_CLIPSIBLINGS 0x04000000
+!define WS_MAXIMIZE 0x01000000
+!define WS_VSCROLL 0x00200000
+!define WS_HSCROLL 0x00100000
+!define WS_GROUP 0x00020000
+!define 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 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 LR_DEFAULTCOLOR 0x0000
+!define LR_MONOCHROME 0x0001
+!define LR_COLOR 0x0002
+!define LR_COPYRETURNORG 0x0004
+!define LR_COPYDELETEORG 0x0008
+!define LR_LOADFROMFILE 0x0010
+!define LR_LOADTRANSPARENT 0x0020
+!define LR_DEFAULTSIZE 0x0040
+!define LR_VGACOLOR 0x0080
+!define LR_LOADMAP3DCOLORS 0x1000
+!define LR_CREATEDIBSECTION 0x2000
+!define LR_COPYFROMRESOURCE 0x4000
+!define LR_SHARED 0x8000
+
+!define IMAGE_BITMAP 0
+!define IMAGE_ICON 1
+!define IMAGE_CURSOR 2
+!define IMAGE_ENHMETAFILE 3
+
+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 /NOUNLOAD 1044
+ Pop $DIALOG
+
+ nsDialogs::CreateControl /NOUNLOAD 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(i 0, t r0, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s'
+ Pop $IMAGE
+
+ SendMessage $IMAGECTL ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE
+
+ nsDialogs::CreateControl /NOUNLOAD 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 /NOUNLOAD 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 "" 0xffffff
+ SetCtlColors $HEADLINE "" 0xffffff
+ SetCtlColors $TEXT "" 0xffffff
+
+ Call HideControls
+
+ nsDialogs::Show
+
+ Call ShowControls
+
+ System::Call gdi32::DeleteObject(i$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 /NOUNLOAD 1018
+ Pop $DIALOG
+
+ nsDialogs::CreateControl /NOUNLOAD 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 /NOUNLOAD 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 /NOUNLOAD 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 /NOUNLOAD $DIRECTORY $0
+
+ System::Call shlwapi::SHAutoComplete(i$DIRECTORY,i${SHACF_FILESYSTEM})
+
+ nsDialogs::CreateControl /NOUNLOAD 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(i$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/Contrib/nsExec/nsExec.txt b/Contrib/nsExec/nsExec.txt
index 3fcb5cf..c98113f 100755
--- a/Contrib/nsExec/nsExec.txt
+++ b/Contrib/nsExec/nsExec.txt
@@ -1,49 +1,49 @@
-nsExec
-------
-nsExec will execute command-line based programs and capture the output
-without opening a dos box.
-
-
-Usage
------
-nsExec::Exec [/OEM] [/TIMEOUT=x] path
-
--or-
-
-nsExec::ExecToLog [/OEM] [/TIMEOUT=x] path
-
--or-
-
-nsExec::ExecToStack [/OEM] [/TIMEOUT=x] path
-
-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 /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
+nsExec
+------
+nsExec will execute command-line based programs and capture the output
+without opening a dos box.
+
+
+Usage
+-----
+nsExec::Exec [/OEM] [/TIMEOUT=x] path
+
+-or-
+
+nsExec::ExecToLog [/OEM] [/TIMEOUT=x] path
+
+-or-
+
+nsExec::ExecToStack [/OEM] [/TIMEOUT=x] path
+
+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 /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/Contrib/nsExec/test.nsi b/Contrib/nsExec/test.nsi
index 5a0c931..4a8c931 100755
--- a/Contrib/nsExec/test.nsi
+++ b/Contrib/nsExec/test.nsi
@@ -1,31 +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 ""
+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/Contrib/zip2exe/Base.nsh b/Contrib/zip2exe/Base.nsh
index 7739d20..ca780a9 100755
--- a/Contrib/zip2exe/Base.nsh
+++ b/Contrib/zip2exe/Base.nsh
@@ -1,87 +1,87 @@
-;Change this file to customize zip2exe generated installers
-
-Name "${ZIP2EXE_NAME}"
-OutFile "${ZIP2EXE_OUTFILE}"
-
-AllowRootDirInstall true
-
-
-!ifdef ZIP2EXE_COMPRESSOR_SOLID
- !define SETCOMPRESSOR_SWITCH /SOLID
-!else
- !define SETCOMPRESSOR_SWITCH
-!endif
-
-!ifdef ZIP2EXE_COMPRESSOR_ZLIB
- SetCompressor ${SETCOMPRESSOR_SWITCH} zlib
-!else ifdef ZIP2EXE_COMPRESSOR_BZIP2
- SetCompressor ${SETCOMPRESSOR_SWITCH} bzip2
-!else ifdef ZIP2EXE_COMPRESSOR_LZMA
- SetCompressor ${SETCOMPRESSOR_SWITCH} lzma
-!endif
-
-!ifdef ZIP2EXE_INSTALLDIR
-
- InstallDir "${ZIP2EXE_INSTALLDIR}"
-
- Function zip2exe.SetOutPath
- SetOutPath "$INSTDIR"
- FunctionEnd
-
-!else ifdef ZIP2EXE_INSTALLDIR_WINAMP
-
- InstallDir "$PROGRAMFILES\Winamp"
- InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "UninstallString"
-
- Function .onVerifyInstDir
- IfFileExists $INSTDIR\winamp.exe WinampInstalled
- Abort
- WinampInstalled:
- FunctionEnd
-
- !ifdef ZIP2EXE_INSTALLDIR_WINAMPMODE
-
- Var ZIP2EXE_TEMP1
- Var ZIP2EXE_TEMP2
-
- Function zip2exe.SetOutPath
- !ifdef ZIP2EXE_INSTALLDIR_SKINS
- StrCpy $ZIP2EXE_TEMP1 "$INSTDIR\Skins"
- !else
- StrCpy $ZIP2EXE_TEMP1 "$INSTDIR\Plugins"
- !endif
- ReadINIStr $ZIP2EXE_TEMP2 "$INSTDIR\winamp.ini" "Winamp" "${ZIP2EXE_INSTALLDIR_WINAMPMODE}"
- StrCmp $ZIP2EXE_TEMP2 "" End
- IfFileExists $ZIP2EXE_TEMP2 0 End
- StrCpy $ZIP2EXE_TEMP1 $ZIP2EXE_TEMP2
- End:
- SetOutPath $ZIP2EXE_TEMP1
- FunctionEnd
-
- !else
-
- Function zip2exe.SetOutPath
- !ifdef ZIP2EXE_INSTALLDIR_PLUGINS
- SetOutPath "$INSTDIR\Plugins"
- !else
- SetOutPath "$INSTDIR"
- !endif
- FunctionEnd
-
- !endif
-
-!endif
-
-!macro SECTION_BEGIN
-
- Section ""
-
- Call zip2exe.SetOutPath
-
-!macroend
-
-!macro SECTION_END
-
- SectionEnd
-
+;Change this file to customize zip2exe generated installers
+
+Name "${ZIP2EXE_NAME}"
+OutFile "${ZIP2EXE_OUTFILE}"
+
+AllowRootDirInstall true
+
+
+!ifdef ZIP2EXE_COMPRESSOR_SOLID
+ !define SETCOMPRESSOR_SWITCH /SOLID
+!else
+ !define SETCOMPRESSOR_SWITCH
+!endif
+
+!ifdef ZIP2EXE_COMPRESSOR_ZLIB
+ SetCompressor ${SETCOMPRESSOR_SWITCH} zlib
+!else ifdef ZIP2EXE_COMPRESSOR_BZIP2
+ SetCompressor ${SETCOMPRESSOR_SWITCH} bzip2
+!else ifdef ZIP2EXE_COMPRESSOR_LZMA
+ SetCompressor ${SETCOMPRESSOR_SWITCH} lzma
+!endif
+
+!ifdef ZIP2EXE_INSTALLDIR
+
+ InstallDir "${ZIP2EXE_INSTALLDIR}"
+
+ Function zip2exe.SetOutPath
+ SetOutPath "$INSTDIR"
+ FunctionEnd
+
+!else ifdef ZIP2EXE_INSTALLDIR_WINAMP
+
+ InstallDir "$PROGRAMFILES\Winamp"
+ InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "UninstallString"
+
+ Function .onVerifyInstDir
+ IfFileExists $INSTDIR\winamp.exe WinampInstalled
+ Abort
+ WinampInstalled:
+ FunctionEnd
+
+ !ifdef ZIP2EXE_INSTALLDIR_WINAMPMODE
+
+ Var ZIP2EXE_TEMP1
+ Var ZIP2EXE_TEMP2
+
+ Function zip2exe.SetOutPath
+ !ifdef ZIP2EXE_INSTALLDIR_SKINS
+ StrCpy $ZIP2EXE_TEMP1 "$INSTDIR\Skins"
+ !else
+ StrCpy $ZIP2EXE_TEMP1 "$INSTDIR\Plugins"
+ !endif
+ ReadINIStr $ZIP2EXE_TEMP2 "$INSTDIR\winamp.ini" "Winamp" "${ZIP2EXE_INSTALLDIR_WINAMPMODE}"
+ StrCmp $ZIP2EXE_TEMP2 "" End
+ IfFileExists $ZIP2EXE_TEMP2 0 End
+ StrCpy $ZIP2EXE_TEMP1 $ZIP2EXE_TEMP2
+ End:
+ SetOutPath $ZIP2EXE_TEMP1
+ FunctionEnd
+
+ !else
+
+ Function zip2exe.SetOutPath
+ !ifdef ZIP2EXE_INSTALLDIR_PLUGINS
+ SetOutPath "$INSTDIR\Plugins"
+ !else
+ SetOutPath "$INSTDIR"
+ !endif
+ FunctionEnd
+
+ !endif
+
+!endif
+
+!macro SECTION_BEGIN
+
+ Section ""
+
+ Call zip2exe.SetOutPath
+
+!macroend
+
+!macro SECTION_END
+
+ SectionEnd
+
!macroend \ No newline at end of file
diff --git a/Contrib/zip2exe/Classic.nsh b/Contrib/zip2exe/Classic.nsh
index de86c49..75faf84 100755
--- a/Contrib/zip2exe/Classic.nsh
+++ b/Contrib/zip2exe/Classic.nsh
@@ -1,4 +1,4 @@
-;Change this file to customize zip2exe generated installers with a classic interface
-
-Page directory
+;Change this file to customize zip2exe generated installers with a classic interface
+
+Page directory
Page instfiles \ No newline at end of file
diff --git a/Contrib/zip2exe/Modern.nsh b/Contrib/zip2exe/Modern.nsh
index b015906..c07989c 100755
--- a/Contrib/zip2exe/Modern.nsh
+++ b/Contrib/zip2exe/Modern.nsh
@@ -1,8 +1,8 @@
-;Change this file to customize zip2exe generated installers with a modern interface
-
-!include "MUI.nsh"
-
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-
+;Change this file to customize zip2exe generated installers with a modern interface
+
+!include "MUI.nsh"
+
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+
!insertmacro MUI_LANGUAGE "English" \ No newline at end of file
diff --git a/Docs/src/basic.but b/Docs/src/basic.but
index 2b561cf..03a81e9 100755
--- a/Docs/src/basic.but
+++ b/Docs/src/basic.but
@@ -49,7 +49,7 @@ Adds file(s) to be extracted to the current output path ($OUTDIR).
\b Note that the output file name is $OUTDIR\\filename_portion_of_file.
-\b If the /oname=X switch is used, the output name becomes $OUTDIR\\X. When using the /oname= switch, only one file can be specified, and the file name can contain variables (or a fully qualified path, e.g. $SYSDIR\\whatever.dll). If the output name contains spaces, quote the entire parameter, including /oname, as shown in the examples below.
+\b Use /oname=X switch to change the output name. X may contain variables and can be a fully qualified path or a relative path in which case it will be appended to $OUTDIR set by \R{setoutpath}{SetOutPath}. When using this switch, only one file can be specified. If the output name contains spaces, quote the entire parameter, including /oname, as shown in the examples below.
\b Wildcards are supported.
@@ -68,6 +68,7 @@ Adds file(s) to be extracted to the current output path ($OUTDIR).
\c File *.exe
\c File /r *.dat
\c File /r data
+\c File /oname=temp.dat somefile.ext
\c File /oname=$TEMP\temp.dat somefile.ext
\c File "/oname=$TEMP\name with spaces.dat" somefile.ext
\c File /nonfatal "a file that might not exist"
diff --git a/Docs/src/chm_config.but b/Docs/src/chm_config.but
index ebe4d85..46679eb 100755
--- a/Docs/src/chm_config.but
+++ b/Docs/src/chm_config.but
@@ -20,5 +20,5 @@
\preamble Quick links:\\<br\\>\W{http://nsis.sourceforge.net/support/faq/}{FAQ} - A list of frequently asked questions\\<br\\>\W{http://nsis.sourceforge.net/wiki/}{NSIS Wiki} - Examples, functions, tutorials, plug-ins, software and more\\<br\\>\W{http://forums.winamp.com/forumdisplay.php?forumid=65}{Forum} - Post questions or discuss NSIS features
-\copyright Copyright (C) 1999-2007 Contributors
+\copyright Copyright (C) 1999-2008 Contributors
diff --git a/Docs/src/config.but b/Docs/src/config.but
index 92f2708..f63f524 100755
--- a/Docs/src/config.but
+++ b/Docs/src/config.but
@@ -16,4 +16,4 @@
\preamble Quick links:\\<br\\>\W{http://nsis.sourceforge.net/support/faq/}{FAQ} - A list of frequently asked questions\\<br\\>\W{http://nsis.sourceforge.net/wiki/}{NSIS Wiki} - Examples, functions, tutorials, plug-ins, software and more\\<br\\>\W{http://forums.winamp.com/forumdisplay.php?forumid=65}{Forum} - Post questions or discuss NSIS features
-\copyright Copyright (C) 1999-2007 Contributors \ No newline at end of file
+\copyright Copyright (C) 1999-2008 Contributors \ No newline at end of file
diff --git a/Docs/src/headers.but b/Docs/src/headers.but
index 72640f7..9f5882c 100755
--- a/Docs/src/headers.but
+++ b/Docs/src/headers.but
@@ -679,7 +679,7 @@ Call functions:
\c ; $R0="C:\ftp"
\c SectionEnd
-\S1{headers_getparameters} GetParameters
+\S1{getparameters} GetParameters
\b Get command line parameters.
@@ -770,7 +770,7 @@ Call functions:
\c ; $R0="\\SuperPimp\NSIS"
\c SectionEnd
-\S1{headers_getparent} GetParent
+\S1{getparent} GetParent
\b Get parent directory.
@@ -1620,7 +1620,7 @@ Call functions:
\c ${FileRecode} "C:\SCANDISK.LOG" "CharToOem"
\c SectionEnd
-\S1{headers_trimnewlines} TrimNewLines
+\S1{trimnewlines} TrimNewLines
\b Trim newlines in a string.
diff --git a/Docs/src/history.but b/Docs/src/history.but
index 4eb1b2a..1037c7d 100755
--- a/Docs/src/history.but
+++ b/Docs/src/history.but
@@ -1,5 +1,101 @@
\A{history} Changelog and Release Notes
+\H{v2.35} 2.35
+
+Released on February 8th, 2008
+
+\S1{v2.35-cl} Changelog
+
+\S2{} Major Changes
+
+\b Added \L{../Docs/MultiUser/Readme.html}{MultiUser} - installer configuration for multi-user Windows environments
+
+\b More user friendly corrupted installer message (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373088&aid=1795426}{RFE #1795426})
+
+\b Switched all examples to Modern UI 2
+
+\S2{} Minor Changes
+
+\b Fixed uninitialized memory leaking into resources (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1874297}{bug #1874297})
+
+\b Minor documentation improvements (including \W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1861941}{bug #1861941}, \W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1883917}{bug #1883917})
+
+\b \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2}: Fit images in welcome/finish page by default and fix support for MUI_(UN)WELCOMEFINISHPAGE_BITMAP_NOSTRETCH (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1875945}{bug #1875945})
+
+\b \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2}: Fixed default finish page reboot selection (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1864690}{bug #1864690})
+
+\b \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2}: Fixed MUI_STARTMENU_GETFOLDER (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1864507}{bug #1864507})
+
+\b \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2}: Fixed unreferenced mui.StartMenuPage.Create warning (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1861944}{bug #1861944})
+
+\b New simplified code for \R{library_vb6}{installation of VisualBasic 6 runtime}
+
+\b Simplified NSIS Menu providing easier access to all documentation
+
+\S2{} Utilities and Plug-ins
+
+\b Added keyboard cues support for LINK controls in \L{../Docs/nsDialogs/Readme.html}{nsDialogs} (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373087&aid=1871856}{patch #1871856})
+
+\b Fixed a rare nsDialogs crash on Windows 98 with non-standard builds of nsDialogs (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1889720}{bug #1889720})
+
+\H{v2.34} 2.34
+
+Released on December 24th, 2007
+
+\S1{v2.34-rl} Release Notes
+
+\b Thanks to user input on \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2}, it is now ready for mass consumption at no better time than the holiday season. The installer for NSIS itself now exploits the wonders of MUI2 and \L{../Docs/nsDialogs/Readme.html}{nsDialogs} and so should you.
+
+\S1{v2.34-cl} Changelog
+
+\S2{} Major Changes
+
+\b \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2}: Simpler code, easier to extend and makes use of the faster \L{../Docs/nsDialogs/Readme.html}{nsDialogs}
+
+\S2{} Minor Changes
+
+\b Added IfNot support for LogicLib (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373087&aid=1846785}{patch #1846785})
+
+\b Added some deprecation messages in MUI2 (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1784470}{bug #1784470})
+
+\b Allow overwrite of LANGFILE_*_NAME defines in new LangFile.nsh (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1848952}{bug #1848952})
+
+\b Better RTL support in instfiles and components page (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1841573}{bug #1841573})
+
+\b Don't warn of comments containing line-continuation character when it has no effect (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1701051}{bug #1701051}, \W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373088&aid=1686589}{RFE #1686589})
+
+\b Fixed deletion of files with relative paths, a.k.a the EVE bug (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1851273}{bug #1851273})
+
+\b Fixed input verification of \R{sgetcurinsttype}{GetCurInstType} and \R{getfullpathname}{GetFullPathName}
+
+\b Fixed \R{wordfind}{WordFind} handling of MBCS characters (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1852141}{bug #1852141})
+
+\b Minor documentation improvements (including \W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1842326}{bug #1842326})
+
+\b Use CRLF in examples (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1835866}{bug #1835866})
+
+\S2{} Utilities and Plug-ins
+
+\b Added missing stack handling in \L{../Docs/nsDialogs/Readme.html}{nsDialogs} examples
+
+\b Added NSD_GetState for checkboxes and radio buttons, NSD_SetFocus, NSD_CreatePassword and NSD_CreateDropList (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373087&aid=1848940}{patch #1848940})
+
+\b Fixed documentation of \L{../Docs/nsDialogs/Readme.html}{nsDialogs}::SelectFolderDialog (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1841120}{bug #1841120})
+
+\b Fixed NSD_CreateComboBox so it'd work like InstallOptions (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1851136}{bug #1851136})
+
+\S2{} Translations
+
+\b Bulgarian updates
+
+\b German fixes
+
+\S2{} Build System
+
+\b Fixed build issues on Mac OS (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1851365}{bug #1851365})
+
+\b Fixed endianity issues introduced in version 2.32 (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1851365}{bug #1851365})
+
\H{v2.33} 2.33
Released on November 17th, 2007
@@ -598,7 +694,7 @@ Released on October 20th, 2006
\S2{} Minor Changes
-\b Added Vista support to \R{getwindowsversion}{GetWindowsVersion}
+\b Added Vista support to GetWindowsVersion
\b Added \L{../Include/x64.nsh}{x64.nsh} including a few simple macros for handling x64 installations
@@ -1391,7 +1487,7 @@ Released on March 19th, 2005
\b Added components.c to the Makefile (\W{http://sourceforge.net/tracker/index.php?func=detail&aid=1123154&group_id=22049&atid=373087}{patch #1123154})
-\b Added missing \R{clearerrors}{ClearErrors} in \R{getwindowsversion}{GetWindowsVersion} (\W{http://sourceforge.net/tracker/index.php?func=detail&aid=1155588&group_id=22049&atid=373085}{bug #1155588})
+\b Added missing \R{clearerrors}{ClearErrors} in GetWindowsVersion (\W{http://sourceforge.net/tracker/index.php?func=detail&aid=1155588&group_id=22049&atid=373085}{bug #1155588})
\b Fixed a bug in install.sh that made it try to install a non existing directory
diff --git a/Docs/src/library.but b/Docs/src/library.but
index 97c61bf..b0d61c6 100755
--- a/Docs/src/library.but
+++ b/Docs/src/library.but
@@ -1,302 +1,277 @@
-\A{library} DLL/TLB Library Setup
-
-
-\H{library_intro} Introduction
-
-NSIS 2.01 features a new system for the installation and uninstallation of dynamic link libraries (DLL) and type libraries (TLB).
-Using this new system you can handle the complete setup with one single line of code:
-
-\b File copying
-
-\b File copying on reboot
-
-\b Version checks
-
-\b Registration and unregistration
-
-\b Registration and unregistration on reboot
-
-\b Shared DLL counting
-
-\b Windows File Protection checks
-
-The macros are stored in the header file Library.nsh, which should be included in scripts using this system:
-
-\c !include Library.nsh
-
-Note that the library macros are limited on non-Windows platforms. DLL version information is required when compiling on non-Windows platforms.
-
-
-\H{library_install} Library Installation
-
-\S1{} Introduction
-
-The InstallLib macro allows you to install a library. It sets the error flag if something went wrong during library setup.
-
-To ask the user for a reboot, if required, use the Modern UI with a Finish page or use \R{ifrebootflag}{IfRebootFlag} and make your own page or message box.
-
-\S1{} Parameters
-
-\c libtype shared install localfile destfile tempbasedir
-
-\\<b\\>libtype\\</b\\>
-
-The type of the library
-
-DLL - Dynamic link library (DLL)\\<br\\>
-REGDLL - DLL that has to be registered\\<br\\>
-TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
-REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
-
-
-\\<b\\>shared\\</b\\>
-
-Specify whether the library is shared with other applications
-
-NOTSHARED - The library is not shared\\<br\\>
-$VARNAME - Variable that is empty when the application is installed for the first time,
- which is when the shared library count will be increased.\\<br\\>
-
-\\<b\\>install\\</b\\>
-
-Specify the installation method
-
-REBOOT_PROTECTED
-
-\b Upgrade the library on reboot when in use (required for system files).
-
-\b Upgrade the library if the file is not protected by Windows File Protection.
-
-NOREBOOT_PROTECTED
-
-\b Warns the user when the library is in use. The user will have to close applications using the library.
-
-\b Upgrade the library if the file is not protected by Windows File Protection.
-
-REBOOT_NOTPROTECTED
-
-\b Upgrade the library on reboot when in use (required for system files).
-
-\b Upgrade the library without checking for Windows File Protection.
-
-NOREBOOT_NOTPROTECTED
-
-\b Warns the user when the library is in use. The user will have to close applications using the library.
-
-\b Upgrade the library without checking for Windows File Protection.
-
-\\<b\\>localfile\\</b\\>
-
-Location of the library on the compiler system
-
-\\<b\\>destfile\\</b\\>
-
-Location to store the library on the user's system
-
-\\<b\\>tempbasedir\\</b\\>
-
-Directory on the user's system to store a temporary file when the system has to be rebooted.
-
-For Windows 9x/ME support, this directory should be on the same volume as the destination file (destfile).
-The Windows temp directory could be located on any volume, so you cannot use this directory.
-
-\S1{} Options
-
-\R{define}{Define} any of the following before inserting the InstallLib macro to modify its behavior as specified.
-
-\S2{} LIBRARY_X64
-
-\b Installs a DLL built for Windows x64.
-
-\b \\<b\\>Warning:\\</b\\> this resets file system redirection.
-
-\S2{} LIBRARY_SHELL_EXTENSION
-
-\b Define this before inserting InstallLib macro to call SHChangeNotify with SHCNE_ASSOCCHANGED after registration.
-
-\b Use this to refresh the shell when installing a shell extension or when changing file associations.
-
-\S2{} LIBRARY_COM
-
-\b Define this before inserting InstallLib macro to call CoFreeUnusedLibraries after registration.
-
-\b Use this for unloading all unnecessary libraries from memory when installing COM libraries.
-
-\S2{} LIBRARY_IGNORE_VERSION
-
-\b Define this before inserting InstallLib macro to ignore version information in the file and always install it, even if it already exists.
-
-\b Use this when an older or specific version is required.
-
-\b Not recommended for DLLs installed to $SYSDIR.
-
-\S1{} Notes
-
-\b If you want to support Windows 9x/ME, you can only use short filenames (8.3).
-
-\b \\<b\\>Warning:\\</b\\> when deploying DLLs, always use redistributable files. Never copy files from your system directory.
-
-\S1{} Example
-
-\S2{} Unshared DLL
-
-\c !insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll $SYSDIR
-
-\S2{} Shared DLL
-
-\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is
-\c ;already installed. For example:
-\c
-\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
-\c StrCpy $ALREADY_INSTALLED 1
-\c new_installation:
-\c
-\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll $SYSDIR
-
-\H{library_uninstall} Library Uninstallation
-
-\S1{} Introduction
-
-The UnInstallLib macro allows you to uninstall a library. It sets the error flag if something went wrong during library removal.
-
-\S1{} Parameters
-
-\c libtype shared uninstall file
-
-\\<b\\>libtype\\</b\\>
-
-The type of the library
-
-DLL - Dynamic link library (DLL)\\<br\\>
-REGDLL - DLL that has to be registered\\<br\\>
-TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
-REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
-
-
-\\<b\\>shared\\</b\\>
-
-Specify whether the library is shared with other applications
-
-NOTSHARED - The library is not shared\\<br\\>
-SHARED - The library is shared and should be removed if the shared library count
- indicates that the file is not in use anymore..\\<br\\>
-
-\\<b\\>uninstall\\</b\\>
-
-Specify the uninstallation method
-
-NOREMOVE
-
-\b The library should not be removed. You should use this option for common or important
-system files such as the Visual Basic/C++/MFC runtimes.
-
-REBOOT_PROTECTED
-
-\b Remove the library on reboot when in use (required for system files).
-
-\b Remove the library if the file is not protected by Windows File Protection.
-
-NOREBOOT_PROTECTED
-
-\b Warns the user when the library is in use. The user will have to close applications using the library.
-
-\b Remove the library if the file is not protected by Windows File Protection.
-
-REBOOT_NOTPROTECTED
-
-\b Remove the library on reboot when in use (required for system files).
-
-\b Remove the library without checking for Windows File Protection.
-
-NOREBOOT_NOTPROTECTED
-
-\b Warns the user when the library is in use. The user will have to close applications using the library.
-
-\b Remove the library without checking for Windows File Protection.
-
-
-\\<b\\>file\\</b\\>
-
-Location of the library
-
-\S1{} Options
-
-\R{define}{Define} any of the following before inserting the UnInstallLib macro to modify its behavior as specified.
-
-\S2{} LIBRARY_X64
-
-\b Uninstalls a DLL built for Windows x64.
-
-\b \\<b\\>Warning:\\</b\\> this resets \R{setregview}{RegSetView} and file system redirection.
-
-\S2{} LIBRARY_SHELL_EXTENSION
-
-\b Define this before inserting UninstallLib macro to call SHChangeNotify with SHCNE_ASSOCCHANGED after unregistration. Use this to refresh the shell when uninstalling a shell extension or when changing file associations.
-
-\S2{} LIBRARY_COM
-
-\b Define this before inserting UninstallLib macro to call CoFreeUnusedLibraries after unregistration. Use this for unloading all unnecessary libraries from memory when uninstalling COM libraries.
-
-\S1{} Example
-
-\c !insertmacro UnInstallLib REGDLL SHARED REBOOT_NOTPROTECTED $SYSDIR\dllname.dll
-
-
-\H{library_vb6} Visual Basic 6 Runtimes
-
-Add this code to your script to install and uninstall the VB6 runtimes.
-
-The correct version of the following files should be stored in your script folder
-(or modify the paths to the local files if you want to use another folder):
-
-\b msvbvm60.dll
-
-\b oleaut32.dll
-
-\b olepro32.dll
-
-\b oleaut32.dll
-
-\b comcat.dll
-
-\b asycfilt.dll
-
-\b stdole2.tlb
-
-A \W{http://support.microsoft.com/default.aspx?scid=kb;en-us;290887}{Microsoft article} that explains how to obtain these files is available.
-
-To ask the user for a reboot, if required, use the Modern UI with a Finish page or use \R{ifrebootflag}{IfRebootFlag} and make your own page or message box.
-
-\c !include Library.nsh
-\c
-\c Var ALREADY_INSTALLED
-\c
-\c Section "-Install VB6 runtimes"
-\c
-\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is already installed. For example:
-\c
-\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
-\c StrCpy $ALREADY_INSTALLED 1
-\c new_installation:
-\c
-\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED "msvbvm60.dll" "$SYSDIR\msvbvm60.dll" "$SYSDIR"
-\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
-\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "olepro32.dll" "$SYSDIR\olepro32.dll" "$SYSDIR"
-\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "comcat.dll" "$SYSDIR\comcat.dll" "$SYSDIR"
-\c !insertmacro InstallLib DLL $ALREADY_INSTALLED REBOOT_PROTECTED "asycfilt.dll" "$SYSDIR\asycfilt.dll" "$SYSDIR"
-\c !insertmacro InstallLib TLB $ALREADY_INSTALLED REBOOT_PROTECTED "stdole2.tlb" "$SYSDIR\stdole2.tlb" "$SYSDIR"
-\c
-\c SectionEnd
-\c
-\c Section "-un.Uninstall VB6 runtimes"
-\c
-\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll"
-\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll"
-\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll"
-\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat.dll"
-\c !insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll"
-\c !insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb"
-\c
-\c SectionEnd
-
-You can use similar code to install common VB6 ActiveX controls (such as the controls for Windows Common Controls).
+\A{library} DLL/TLB Library Setup
+
+
+\H{library_intro} Introduction
+
+The Library header file can be used to setup dynamic link libraries (DLL) and type libraries (TLB).
+If necessary, the following actions will be performed:
+
+\b File copying
+
+\b File copying on reboot
+
+\b Version checks
+
+\b Registration and unregistration
+
+\b Registration and unregistration on reboot
+
+\b Shared DLL counting
+
+\b Windows File Protection checks
+
+The macros are stored in the header file Library.nsh, which should be included in scripts using this system:
+
+\c !include Library.nsh
+
+Note that the library macros are limited on non-Windows platforms. DLL version information is required when compiling on non-Windows platforms.
+
+
+\H{library_install} Library Installation
+
+\S1{} Introduction
+
+The InstallLib macro allows you to install a library. It sets the error flag if something went wrong during library setup.
+
+To ask the user for a reboot, if required, use the Modern UI with a Finish page or use \R{ifrebootflag}{IfRebootFlag} and make your own page or message box.
+
+\S1{} Parameters
+
+\c libtype shared install localfile destfile tempbasedir
+
+\\<b\\>libtype\\</b\\>
+
+The type of the library
+
+DLL - Dynamic link library (DLL)\\<br\\>
+REGDLL - DLL that has to be registered\\<br\\>
+TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
+REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
+
+
+\\<b\\>shared\\</b\\>
+
+Specify whether the library is shared with other applications
+
+NOTSHARED - The library is not shared\\<br\\>
+$VARNAME - Variable that is empty when the application is installed for the first time,
+ which is when the shared library count will be increased.\\<br\\>
+
+\\<b\\>install\\</b\\>
+
+Specify the installation method
+
+REBOOT_PROTECTED
+
+\b Upgrade the library on reboot when in use (required for system files).
+
+\b Upgrade the library if the file is not protected by Windows File Protection.
+
+NOREBOOT_PROTECTED
+
+\b Warns the user when the library is in use. The user will have to close applications using the library.
+
+\b Upgrade the library if the file is not protected by Windows File Protection.
+
+REBOOT_NOTPROTECTED
+
+\b Upgrade the library on reboot when in use (required for system files).
+
+\b Upgrade the library without checking for Windows File Protection.
+
+NOREBOOT_NOTPROTECTED
+
+\b Warns the user when the library is in use. The user will have to close applications using the library.
+
+\b Upgrade the library without checking for Windows File Protection.
+
+\\<b\\>localfile\\</b\\>
+
+Location of the library on the compiler system
+
+\\<b\\>destfile\\</b\\>
+
+Location to store the library on the user's system
+
+\\<b\\>tempbasedir\\</b\\>
+
+Directory on the user's system to store a temporary file when the system has to be rebooted.
+
+For Windows 9x/ME support, this directory should be on the same volume as the destination file (destfile).
+The Windows temp directory could be located on any volume, so you cannot use this directory.
+
+\S1{} Options
+
+\R{define}{Define} any of the following before inserting the InstallLib macro to modify its behavior as specified.
+
+\S2{} LIBRARY_X64
+
+\b Installs a DLL built for Windows x64.
+
+\b \\<b\\>Warning:\\</b\\> this resets file system redirection.
+
+\S2{} LIBRARY_SHELL_EXTENSION
+
+\b Define this before inserting InstallLib macro to call SHChangeNotify with SHCNE_ASSOCCHANGED after registration.
+
+\b Use this to refresh the shell when installing a shell extension or when changing file associations.
+
+\S2{} LIBRARY_COM
+
+\b Define this before inserting InstallLib macro to call CoFreeUnusedLibraries after registration.
+
+\b Use this for unloading all unnecessary libraries from memory when installing COM libraries.
+
+\S2{} LIBRARY_IGNORE_VERSION
+
+\b Define this before inserting InstallLib macro to ignore version information in the file and always install it, even if it already exists.
+
+\b Use this when an older or specific version is required.
+
+\b Not recommended for DLLs installed to $SYSDIR.
+
+\S1{} Notes
+
+\b If you want to support Windows 9x/ME, you can only use short filenames (8.3).
+
+\b \\<b\\>Warning:\\</b\\> when deploying DLLs, always use redistributable files. Never copy files from your system directory.
+
+\S1{} Example
+
+\S2{} Unshared DLL
+
+\c !insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll $SYSDIR
+
+\S2{} Shared DLL
+
+\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is
+\c ;already installed. For example:
+\c
+\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
+\c StrCpy $ALREADY_INSTALLED 1
+\c new_installation:
+\c
+\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll $SYSDIR
+
+\H{library_uninstall} Library Uninstallation
+
+\S1{} Introduction
+
+The UnInstallLib macro allows you to uninstall a library. It sets the error flag if something went wrong during library removal.
+
+\S1{} Parameters
+
+\c libtype shared uninstall file
+
+\\<b\\>libtype\\</b\\>
+
+The type of the library
+
+DLL - Dynamic link library (DLL)\\<br\\>
+REGDLL - DLL that has to be registered\\<br\\>
+TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
+REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
+
+
+\\<b\\>shared\\</b\\>
+
+Specify whether the library is shared with other applications
+
+NOTSHARED - The library is not shared\\<br\\>
+SHARED - The library is shared and should be removed if the shared library count
+ indicates that the file is not in use anymore..\\<br\\>
+
+\\<b\\>uninstall\\</b\\>
+
+Specify the uninstallation method
+
+NOREMOVE
+
+\b The library should not be removed. You should use this option for common or important
+system files such as the Visual Basic/C++/MFC runtimes.
+
+REBOOT_PROTECTED
+
+\b Remove the library on reboot when in use (required for system files).
+
+\b Remove the library if the file is not protected by Windows File Protection.
+
+NOREBOOT_PROTECTED
+
+\b Warns the user when the library is in use. The user will have to close applications using the library.
+
+\b Remove the library if the file is not protected by Windows File Protection.
+
+REBOOT_NOTPROTECTED
+
+\b Remove the library on reboot when in use (required for system files).
+
+\b Remove the library without checking for Windows File Protection.
+
+NOREBOOT_NOTPROTECTED
+
+\b Warns the user when the library is in use. The user will have to close applications using the library.
+
+\b Remove the library without checking for Windows File Protection.
+
+
+\\<b\\>file\\</b\\>
+
+Location of the library
+
+\S1{} Options
+
+\R{define}{Define} any of the following before inserting the UnInstallLib macro to modify its behavior as specified.
+
+\S2{} LIBRARY_X64
+
+\b Uninstalls a DLL built for Windows x64.
+
+\b \\<b\\>Warning:\\</b\\> this resets \R{setregview}{RegSetView} and file system redirection.
+
+\S2{} LIBRARY_SHELL_EXTENSION
+
+\b Define this before inserting UninstallLib macro to call SHChangeNotify with SHCNE_ASSOCCHANGED after unregistration. Use this to refresh the shell when uninstalling a shell extension or when changing file associations.
+
+\S2{} LIBRARY_COM
+
+\b Define this before inserting UninstallLib macro to call CoFreeUnusedLibraries after unregistration. Use this for unloading all unnecessary libraries from memory when uninstalling COM libraries.
+
+\S1{} Example
+
+\c !insertmacro UnInstallLib REGDLL SHARED REBOOT_NOTPROTECTED $SYSDIR\dllname.dll
+
+
+\H{library_vb6} Visual Basic 6 Run-Time Files
+
+A new VB6.nsh header file is available for the setup of the VB6 run-time files.
+To obtain the latest run-time files, download \W{http://nsis.sourceforge.net/vb6runtime.zip}{vb6runtime.zip} and extract this file.
+
+\c !include VB6RunTime.nsh
+\c
+\c Var AlreadyInstalled
+\c
+\c Section "-Install VB6 run-time files"
+\c
+\c ;Add code here that sets $AlreadyInstalled to a non-zero value if the application is already installed. For example:
+\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
+\c StrCpy $AlreadyInstalled 1
+\c new_installation:
+\c
+\c !insertmacro VB6RunTimeInstall C:\vb6runtimes $AlreadyInstalled ;Replace C:\vb6runtimes with the location of the files
+\c
+\c SectionEnd
+\c
+\c Section "-un.Uninstall VB6 run-time files"
+\c
+\c !insertmacro VB6RunTimeUnInstall
+\c
+\c SectionEnd
+
+Remarks:
+
+\b You may have to install additional files for such Visual Basic application to work, such as OCX files for user interface controls.
+
+\b 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.
+
+\b Add a Modern UI finish page or another check (see \R{ifrebootflag}{IfRebootFlag}) to allow the user to restart the computer when necessary.
diff --git a/Docs/src/license.but b/Docs/src/license.but
index e10dc23..4635eed 100755
--- a/Docs/src/license.but
+++ b/Docs/src/license.but
@@ -2,7 +2,7 @@
\H{copyright} Copyright
-Copyright (C) 1995-2007 Contributors
+Copyright (C) 1995-2008 Contributors
More detailed copyright information can be found in the individual source code files.
diff --git a/Docs/src/modernui.but b/Docs/src/modernui.but
index 96704f2..91f3537 100755
--- a/Docs/src/modernui.but
+++ b/Docs/src/modernui.but
@@ -4,4 +4,8 @@ NSIS 2 makes it is possible to create installers with a custom user interface. T
This new interface also features new pages (Welcome, Finish, Start Menu) and a description area on the components page. The interface and the graphics can be customized using the provided settings.
Using the Modern UI macros and language files, writing scripts with a modern interface is easy.
-For more information and documentation see the \L{../Docs/Modern UI/Readme.html}{Modern UI Readme}. \ No newline at end of file
+For more information and documentation see the \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2 Readme}.
+
+NSIS 2.34 brought with it a new version of Modern UI - version 2. It is faster and more extendible. It allows plug-ins to add new types of pages and even change existing pages using a simple NSH file. It also uses \L{../Docs/nsDialogs/Readme.html}{nsDialogs} which faster than its elder sibling - InstallOptions.
+
+For more information and documentation of the old version see the \L{../Docs/Modern UI/Readme.html}{Modern UI Readme}. \ No newline at end of file
diff --git a/Docs/src/pages.but b/Docs/src/pages.but
index 8997a10..24f5076 100755
--- a/Docs/src/pages.but
+++ b/Docs/src/pages.but
@@ -1,6 +1,6 @@
\H{pages} Pages
-Each (non-silent) NSIS installer has a set of pages. Each page can be a NSIS built-in page or a custom page created by a user's function (with \L{../Docs/InstallOptions/Readme.html}{InstallOptions} for example).
+Each (non-silent) NSIS installer has a set of pages. Each page can be a NSIS built-in page or a custom page created by a user's function (with \L{../Docs/nsDialogs/Readme.html}{nsDialogs} or \L{../Docs/InstallOptions/Readme.html}{InstallOptions} for example).
Using the script you can control the pages' order, appearance, and behavior. You can skip pages, paint them white, force the user to stay in a certain page until a certain condition is met, show a readme page, show custom designed pages for input and more. In this section, you will learn how to control all of the above.
diff --git a/Docs/src/silent.but b/Docs/src/silent.but
index b25f23f..c04c061 100755
--- a/Docs/src/silent.but
+++ b/Docs/src/silent.but
@@ -20,38 +20,16 @@ Since the directory page can not be shown on silent installers, the user has an
\c foo.exe /S /D=C:\Program Files\Foo
-If your installer/uninstaller requires some more information that can not be gathered when silent, you can allow the user to specify that information on the command line and process it in .onInit. You can use \R{getoptions}{GetOptions}, or a variant of the following example:
+If your installer/uninstaller requires some more information that can not be gathered when silent, you can allow the user to specify that information on the command line and process it in .onInit. You can use \R{getoptions}{GetOptions}.
+\c !include FileFunc.nsh
+\c !insertmacro GetParameters
+\c !insertmacro GetOptions
+\c
\c Function .onInit
-\c Call GetParameters
-\c Pop $2
-\c # search for quoted /USERNAME
-\c StrCpy $1 '"'
-\c Push $2
-\c Push '"/USERNAME='
-\c Call StrStr
-\c Pop $0
-\c StrCpy $0 $0 "" 1 # skip quote
-\c StrCmp $0 "" "" next
-\c # search for non quoted /USERNAME
-\c StrCpy $1 ' '
-\c Push $2
-\c Push '/USERNAME='
-\c Call StrStr
-\c Pop $0
-\c next:
-\c StrCmp $0 "" done
-\c # copy the value after /USERNAME=
-\c StrCpy $0 $0 "" 10
-\c # search for the next parameter
-\c Push $0
-\c Push $1
-\c Call StrStr
-\c Pop $1
-\c StrCmp $1 "" done
-\c StrLen $1 $1
-\c StrCpy $0 $0 -$1
-\c done:
+\c ${GetParameters} $R0
+\c ClearErrors
+\c ${GetOptions} $R0 /USERNAME= $0
\c FunctionEnd
The above example will copy the value the user passes on after /USERNAME= into $0. This allows the user to specify the required information on the command line instead of using the interactive user interface. The user can use:
@@ -60,8 +38,10 @@ The above example will copy the value the user passes on after /USERNAME= into $
or:
-\c foo.exe /S "/USERNAME=string with spaces" /D=C:\Program Files\Foo
+\c foo.exe /S /USERNAME=string with spaces /D=C:\Program Files\Foo
-\R{getparameters}{GetParameters} and \R{strstr}{StrStr} can be found in \k{usefulfunctions}.
+or:
+
+\c foo.exe /S /USERNAME="string with spaces" /D=C:\Program Files\Foo
If your installer/uninstaller requires a lot of information and you want it to be able to be silent, you should allow the user to pass on a path to an answers file. This would be much more comfortable than writing all of the information on the command line. \ No newline at end of file
diff --git a/Docs/src/tutorial.but b/Docs/src/tutorial.but
index 3b7130a..570815b 100755
--- a/Docs/src/tutorial.but
+++ b/Docs/src/tutorial.but
@@ -254,7 +254,7 @@ It it also possible to compile Windows installer on Linux, BSD or Mac OS X serve
A popular user interface for NSIS is the Modern User Interface. It has an interface like the wizards of recent Windows versions. The Modern UI is not only a customized resource file, it has a lots of new interface elements. It features a white header to describe the current step, a description area on the component page, a welcome page, a finish page that allows the user to run the application or reboot the system and more.
-For more information, check the \L{../Docs/Modern UI/Readme.html}{Modern UI Readme} and the \L{../Examples/Modern UI}{Modern UI Examples}.
+For more information, check the \L{../Docs/Modern UI 2/Readme.html}{Modern UI 2 Readme} and the \L{../Examples/Modern UI}{Modern UI Examples}.
\H{tutplugin} Plug-ins
diff --git a/Docs/src/usage.but b/Docs/src/usage.but
index 0df78ea..e585285 100755
--- a/Docs/src/usage.but
+++ b/Docs/src/usage.but
@@ -83,7 +83,7 @@ Generated installers and uninstallers accept a few options on the command line.
\b /S runs the installer or uninstaller silently. See \k{silent} for more information.
-\b /D sets the default installation directory (\R{varother}{$INSTDIR}), overriding \R{ainstalldir}{InstallDir} and \R{ainstalldirregkey}{InstallDirRegKey}. It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces.
+\b /D sets the default installation directory (\R{varother}{$INSTDIR}), overriding \R{ainstalldir}{InstallDir} and \R{ainstalldirregkey}{InstallDirRegKey}. It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. Only absolute paths are supported.
\S1{} Uninstaller Specific Options
diff --git a/Docs/src/usefulfunc.but b/Docs/src/usefulfunc.but
index f38e344..9e65378 100755
--- a/Docs/src/usefulfunc.but
+++ b/Docs/src/usefulfunc.but
@@ -1,417 +1,162 @@
-\A{usefulfunctions} Useful Scripts
-
-\H{getparent} Get parent directory
-
-\c ; GetParent
-\c ; input, top of stack (e.g. C:\Program Files\Poop)
-\c ; output, top of stack (replaces, with e.g. C:\Program Files)
-\c ; modifies no other variables.
-\c ;
-\c ; Usage:
-\c ; Push "C:\Program Files\Directory\Whatever"
-\c ; Call GetParent
-\c ; Pop $R0
-\c ; ; at this point $R0 will equal "C:\Program Files\Directory"
-\c
-\c Function GetParent
-\c
-\c Exch $R0
-\c Push $R1
-\c Push $R2
-\c Push $R3
-\c
-\c StrCpy $R1 0
-\c StrLen $R2 $R0
-\c
-\c loop:
-\c IntOp $R1 $R1 + 1
-\c IntCmp $R1 $R2 get 0 get
-\c StrCpy $R3 $R0 1 -$R1
-\c StrCmp $R3 "\" get
-\c Goto loop
-\c
-\c get:
-\c StrCpy $R0 $R0 -$R1
-\c
-\c Pop $R3
-\c Pop $R2
-\c Pop $R1
-\c Exch $R0
-\c
-\c FunctionEnd
-
-\H{trimnewlines} Trim newlines
-
-\c ; TrimNewlines
-\c ; input, top of stack (e.g. whatever$\r$\n)
-\c ; output, top of stack (replaces, with e.g. whatever)
-\c ; modifies no other variables.
-\c
-\c Function TrimNewlines
-\c Exch $R0
-\c Push $R1
-\c Push $R2
-\c StrCpy $R1 0
-\c
-\c loop:
-\c IntOp $R1 $R1 - 1
-\c StrCpy $R2 $R0 1 $R1
-\c StrCmp $R2 "$\r" loop
-\c StrCmp $R2 "$\n" loop
-\c IntOp $R1 $R1 + 1
-\c IntCmp $R1 0 no_trim_needed
-\c StrCpy $R0 $R0 $R1
-\c
-\c no_trim_needed:
-\c Pop $R2
-\c Pop $R1
-\c Exch $R0
-\c FunctionEnd
-
-
-\H{getparameters} Get command line parameters
-
-\c ; GetParameters
-\c ; input, none
-\c ; output, top of stack (replaces, with e.g. whatever)
-\c ; modifies no other variables.
-\c
-\c Function GetParameters
-\c
-\c Push $R0
-\c Push $R1
-\c Push $R2
-\c Push $R3
-\c
-\c StrCpy $R2 1
-\c StrLen $R3 $CMDLINE
-\c
-\c ;Check for quote or space
-\c StrCpy $R0 $CMDLINE $R2
-\c StrCmp $R0 '"' 0 +3
-\c StrCpy $R1 '"'
-\c Goto loop
-\c StrCpy $R1 " "
-\c
-\c loop:
-\c IntOp $R2 $R2 + 1
-\c StrCpy $R0 $CMDLINE 1 $R2
-\c StrCmp $R0 $R1 get
-\c StrCmp $R2 $R3 get
-\c Goto loop
-\c
-\c get:
-\c IntOp $R2 $R2 + 1
-\c StrCpy $R0 $CMDLINE 1 $R2
-\c StrCmp $R0 " " get
-\c StrCpy $R0 $CMDLINE "" $R2
-\c
-\c Pop $R3
-\c Pop $R2
-\c Pop $R1
-\c Exch $R0
-\c
-\c FunctionEnd
-
-\H{strstr} Search in a string
-
-\c ; StrStr
-\c ; input, top of stack = string to search for
-\c ; top of stack-1 = string to search in
-\c ; output, top of stack (replaces with the portion of the string remaining)
-\c ; modifies no other variables.
-\c ;
-\c ; Usage:
-\c ; Push "this is a long ass string"
-\c ; Push "ass"
-\c ; Call StrStr
-\c ; Pop $R0
-\c ; ($R0 at this point is "ass string")
-\c
-\c Function StrStr
-\c Exch $R1 ; st=haystack,old$R1, $R1=needle
-\c Exch ; st=old$R1,haystack
-\c Exch $R2 ; st=old$R1,old$R2, $R2=haystack
-\c Push $R3
-\c Push $R4
-\c Push $R5
-\c StrLen $R3 $R1
-\c StrCpy $R4 0
-\c ; $R1=needle
-\c ; $R2=haystack
-\c ; $R3=len(needle)
-\c ; $R4=cnt
-\c ; $R5=tmp
-\c loop:
-\c StrCpy $R5 $R2 $R3 $R4
-\c StrCmp $R5 $R1 done
-\c StrCmp $R5 "" done
-\c IntOp $R4 $R4 + 1
-\c Goto loop
-\c done:
-\c StrCpy $R1 $R2 "" $R4
-\c Pop $R5
-\c Pop $R4
-\c Pop $R3
-\c Pop $R2
-\c Exch $R1
-\c FunctionEnd
-
-\H{getwindowsversion} Get Windows version
-
-\c ; GetWindowsVersion
-\c ;
-\c ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
-\c ; Updated by Joost Verburg
-\c ;
-\c ; Returns on top of stack
-\c ;
-\c ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003, Vista)
-\c ; or
-\c ; '' (Unknown Windows Version)
-\c ;
-\c ; Usage:
-\c ; Call GetWindowsVersion
-\c ; Pop $R0
-\c ; ; at this point $R0 is "NT 4.0" or whatnot
-\c
-\c Function GetWindowsVersion
-\c
-\c Push $R0
-\c Push $R1
-\c
-\c ClearErrors
-\c
-\c ReadRegStr $R0 HKLM \
-\c "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-\c
-\c IfErrors 0 lbl_winnt
-\c
-\c ; we are not NT
-\c ReadRegStr $R0 HKLM \
-\c "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
-\c
-\c StrCpy $R1 $R0 1
-\c StrCmp $R1 '4' 0 lbl_error
-\c
-\c StrCpy $R1 $R0 3
-\c
-\c StrCmp $R1 '4.0' lbl_win32_95
-\c StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
-\c
-\c lbl_win32_95:
-\c StrCpy $R0 '95'
-\c Goto lbl_done
-\c
-\c lbl_win32_98:
-\c StrCpy $R0 '98'
-\c Goto lbl_done
-\c
-\c lbl_win32_ME:
-\c StrCpy $R0 'ME'
-\c Goto lbl_done
-\c
-\c lbl_winnt:
-\c
-\c StrCpy $R1 $R0 1
-\c
-\c StrCmp $R1 '3' lbl_winnt_x
-\c StrCmp $R1 '4' lbl_winnt_x
-\c
-\c StrCpy $R1 $R0 3
-\c
-\c StrCmp $R1 '5.0' lbl_winnt_2000
-\c StrCmp $R1 '5.1' lbl_winnt_XP
-\c StrCmp $R1 '5.2' lbl_winnt_2003
-\c StrCmp $R1 '6.0' lbl_winnt_vista lbl_error
-\c
-\c lbl_winnt_x:
-\c StrCpy $R0 "NT $R0" 6
-\c Goto lbl_done
-\c
-\c lbl_winnt_2000:
-\c Strcpy $R0 '2000'
-\c Goto lbl_done
-\c
-\c lbl_winnt_XP:
-\c Strcpy $R0 'XP'
-\c Goto lbl_done
-\c
-\c lbl_winnt_2003:
-\c Strcpy $R0 '2003'
-\c Goto lbl_done
-\c
-\c lbl_winnt_vista:
-\c Strcpy $R0 'Vista'
-\c Goto lbl_done
-\c
-\c lbl_error:
-\c Strcpy $R0 ''
-\c lbl_done:
-\c
-\c Pop $R1
-\c Exch $R0
-\c
-\c FunctionEnd
-
-
-\H{getieversion} Get Internet Explorer version
-
-\c ; GetIEVersion
-\c ;
-\c ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
-\c ; Returns on top of stack
-\c ; 1-6 (Installed IE Version)
-\c ; or
-\c ; '' (IE is not installed)
-\c ;
-\c ; Usage:
-\c ; Call GetIEVersion
-\c ; Pop $R0
-\c ; ; at this point $R0 is "5" or whatnot
-\c
-\c Function GetIEVersion
-\c Push $R0
-\c ClearErrors
-\c ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "Version"
-\c IfErrors lbl_123 lbl_456
-\c
-\c lbl_456: ; ie 4+
-\c Strcpy $R0 $R0 1
-\c Goto lbl_done
-\c
-\c lbl_123: ; older ie version
-\c ClearErrors
-\c ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "IVer"
-\c IfErrors lbl_error
-\c
-\c StrCpy $R0 $R0 3
-\c StrCmp $R0 '100' lbl_ie1
-\c StrCmp $R0 '101' lbl_ie2
-\c StrCmp $R0 '102' lbl_ie2
-\c
-\c StrCpy $R0 '3' ; default to ie3 if not 100, 101, or 102.
-\c Goto lbl_done
-\c lbl_ie1:
-\c StrCpy $R0 '1'
-\c Goto lbl_done
-\c lbl_ie2:
-\c StrCpy $R0 '2'
-\c Goto lbl_done
-\c lbl_error:
-\c StrCpy $R0 ''
-\c lbl_done:
-\c Exch $R0
-\c FunctionEnd
-
-\H{detect.netframework} Is .NET Framework installed?
-
-\c ; IsDotNETInstalled
-\c ;
-\c ; Based on GetDotNETVersion
-\c ; http://nsis.sourceforge.net/Get_.NET_Version
-\c ;
-\c ; Usage:
-\c ; Call IsDotNETInstalled
-\c ; Pop $0
-\c ; StrCmp $0 1 found.NETFramework no.NETFramework
-\c
-\c Function IsDotNETInstalled
-\c Push $0
-\c Push $1
-\c
-\c StrCpy $0 1
-\c System::Call "mscoree::GetCORVersion(w, i ${NSIS_MAX_STRLEN}, *i) i .r1"
-\c StrCmp $1 0 +2
-\c StrCpy $0 0
-\c
-\c Pop $1
-\c Exch $0
-\c FunctionEnd
-
-\H{isflashinstalled} Is Macromedia Flash Player installed?
-
-\c ; IsFlashInstalled
-\c ;
-\c ; By Yazno, http://yazno.tripod.com/powerpimpit/
-\c ; Returns on top of stack
-\c ; 0 (Flash is not installed)
-\c ; or
-\c ; 1 (Flash is installed)
-\c ;
-\c ; Usage:
-\c ; Call IsFlashInstalled
-\c ; Pop $R0
-\c ; ; $R0 at this point is "1" or "0"
-\c
-\c Function IsFlashInstalled
-\c Push $R0
-\c ClearErrors
-\c ReadRegStr $R0 HKCR "CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}" ""
-\c IfErrors lbl_na
-\c StrCpy $R0 1
-\c Goto lbl_end
-\c lbl_na:
-\c StrCpy $R0 0
-\c lbl_end:
-\c Exch $R0
-\c FunctionEnd
-
-\H{connectinternet} Connect to the Internet
-
-\c ; ConnectInternet (uses Dialer plug-in)
-\c ; Written by Joost Verburg
-\c ;
-\c ; This function attempts to make a connection to the internet if there is no
-\c ; connection available. If you are not sure that a system using the installer
-\c ; has an active internet connection, call this function before downloading
-\c ; files with NSISdl.
-\c ;
-\c ; The function requires Internet Explorer 3, but asks to connect manually if
-\c ; IE3 is not installed.
-\c
-\c Function ConnectInternet
-\c
-\c Push $R0
-\c
-\c ClearErrors
-\c Dialer::AttemptConnect
-\c IfErrors noie3
-\c
-\c Pop $R0
-\c StrCmp $R0 "online" connected
-\c MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet."
-\c Quit ;This will quit the installer. You might want to add your own error handling.
-\c
-\c noie3:
-\c
-\c ; IE3 not installed
-\c MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now."
-\c
-\c connected:
-\c
-\c Pop $R0
-\c
-\c FunctionEnd
-
-\H{installerfilename} Get Installer Filename
-
-\c System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
-\c ;$R0 will contain the installer filename
-
-\H{multipleinstances} Prevent Multiple Instances
-
-Put the following code in your \R{oninit}{.onInit function}:
-
-\c System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
-\c Pop $R0
-\c
-\c StrCmp $R0 0 +3
-\c MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
-\c Abort
-
-'myMutex' should be replaced by a unique value.
-
-\H{morefuncs} More
-
+\A{usefulfunctions} Useful Scripts
+
+\H{getieversion} Get Internet Explorer version
+
+\c ; GetIEVersion
+\c ;
+\c ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
+\c ; Returns on top of stack
+\c ; 1-6 (Installed IE Version)
+\c ; or
+\c ; '' (IE is not installed)
+\c ;
+\c ; Usage:
+\c ; Call GetIEVersion
+\c ; Pop $R0
+\c ; ; at this point $R0 is "5" or whatnot
+\c
+\c Function GetIEVersion
+\c Push $R0
+\c ClearErrors
+\c ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "Version"
+\c IfErrors lbl_123 lbl_456
+\c
+\c lbl_456: ; ie 4+
+\c Strcpy $R0 $R0 1
+\c Goto lbl_done
+\c
+\c lbl_123: ; older ie version
+\c ClearErrors
+\c ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "IVer"
+\c IfErrors lbl_error
+\c
+\c StrCpy $R0 $R0 3
+\c StrCmp $R0 '100' lbl_ie1
+\c StrCmp $R0 '101' lbl_ie2
+\c StrCmp $R0 '102' lbl_ie2
+\c
+\c StrCpy $R0 '3' ; default to ie3 if not 100, 101, or 102.
+\c Goto lbl_done
+\c lbl_ie1:
+\c StrCpy $R0 '1'
+\c Goto lbl_done
+\c lbl_ie2:
+\c StrCpy $R0 '2'
+\c Goto lbl_done
+\c lbl_error:
+\c StrCpy $R0 ''
+\c lbl_done:
+\c Exch $R0
+\c FunctionEnd
+
+\H{detect.netframework} Is .NET Framework installed?
+
+\c ; IsDotNETInstalled
+\c ;
+\c ; Based on GetDotNETVersion
+\c ; http://nsis.sourceforge.net/Get_.NET_Version
+\c ;
+\c ; Usage:
+\c ; Call IsDotNETInstalled
+\c ; Pop $0
+\c ; StrCmp $0 1 found.NETFramework no.NETFramework
+\c
+\c Function IsDotNETInstalled
+\c Push $0
+\c Push $1
+\c
+\c StrCpy $0 1
+\c System::Call "mscoree::GetCORVersion(w, i ${NSIS_MAX_STRLEN}, *i) i .r1"
+\c StrCmp $1 0 +2
+\c StrCpy $0 0
+\c
+\c Pop $1
+\c Exch $0
+\c FunctionEnd
+
+\H{isflashinstalled} Is Macromedia Flash Player installed?
+
+\c ; IsFlashInstalled
+\c ;
+\c ; By Yazno, http://yazno.tripod.com/powerpimpit/
+\c ; Returns on top of stack
+\c ; 0 (Flash is not installed)
+\c ; or
+\c ; 1 (Flash is installed)
+\c ;
+\c ; Usage:
+\c ; Call IsFlashInstalled
+\c ; Pop $R0
+\c ; ; $R0 at this point is "1" or "0"
+\c
+\c Function IsFlashInstalled
+\c Push $R0
+\c ClearErrors
+\c ReadRegStr $R0 HKCR "CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}" ""
+\c IfErrors lbl_na
+\c StrCpy $R0 1
+\c Goto lbl_end
+\c lbl_na:
+\c StrCpy $R0 0
+\c lbl_end:
+\c Exch $R0
+\c FunctionEnd
+
+\H{connectinternet} Connect to the Internet
+
+\c ; ConnectInternet (uses Dialer plug-in)
+\c ; Written by Joost Verburg
+\c ;
+\c ; This function attempts to make a connection to the internet if there is no
+\c ; connection available. If you are not sure that a system using the installer
+\c ; has an active internet connection, call this function before downloading
+\c ; files with NSISdl.
+\c ;
+\c ; The function requires Internet Explorer 3, but asks to connect manually if
+\c ; IE3 is not installed.
+\c
+\c Function ConnectInternet
+\c
+\c Push $R0
+\c
+\c ClearErrors
+\c Dialer::AttemptConnect
+\c IfErrors noie3
+\c
+\c Pop $R0
+\c StrCmp $R0 "online" connected
+\c MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet."
+\c Quit ;This will quit the installer. You might want to add your own error handling.
+\c
+\c noie3:
+\c
+\c ; IE3 not installed
+\c MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now."
+\c
+\c connected:
+\c
+\c Pop $R0
+\c
+\c FunctionEnd
+
+\H{installerfilename} Get Installer Filename
+
+\c System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
+\c ;$R0 will contain the installer filename
+
+\H{multipleinstances} Prevent Multiple Instances
+
+Put the following code in your \R{oninit}{.onInit function}:
+
+\c System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
+\c Pop $R0
+\c
+\c StrCmp $R0 0 +3
+\c MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
+\c Abort
+
+'myMutex' should be replaced by a unique value.
+
+\H{morefuncs} More
+
You can find more useful scripts at \W{http://nsis.sourceforge.net/wiki/}{the NSIS Wiki}, \W{http://forums.winamp.com/forumdisplay.php?s=&forumid=65}{the NSIS forum} and \W{http://nsis.sourceforge.net/}{NSIS development page}. \ No newline at end of file
diff --git a/Docs/src/var.but b/Docs/src/var.but
index 7adc3ec..d9d239f 100755
--- a/Docs/src/var.but
+++ b/Docs/src/var.but
@@ -47,7 +47,7 @@ The command line of the installer. The format of the command line can be one of
\b installer.exe PARAMETER PARAMETER PARAMETER
-\b For parsing out the PARAMETER portion, see GetParameters on the \R{getparameters}{useful functions appendix}. If /D= is specified on the command line (to override the install directory) it won't show up in $CMDLINE.
+\b For parsing out the PARAMETER portion, see \R{getparameters}{GetParameters}. If /D= is specified on the command line (to override the install directory) it won't show up in $CMDLINE.
\e{$LANGUAGE}
diff --git a/Examples/FileFunc.nsi b/Examples/FileFunc.nsi
index 0f59e74..de4b4e1 100755
--- a/Examples/FileFunc.nsi
+++ b/Examples/FileFunc.nsi
@@ -1,751 +1,752 @@
-;_____________________________________________________________________________
-;
-; File Functions
-;_____________________________________________________________________________
-;
-; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
-Name "File Functions"
-OutFile "FileFunc.exe"
-Caption "$(^Name)"
-XPStyle on
-
-!include "WinMessages.nsh"
-!include "FileFunc.nsh"
-
-!insertmacro Locate
-!insertmacro GetSize
-!insertmacro DriveSpace
-!insertmacro GetDrives
-!insertmacro GetTime
-!insertmacro GetFileAttributes
-!insertmacro GetFileVersion
-!insertmacro GetExeName
-!insertmacro GetExePath
-!insertmacro GetParameters
-!insertmacro GetOptions
-!insertmacro GetRoot
-!insertmacro GetParent
-!insertmacro GetFileName
-!insertmacro GetBaseName
-!insertmacro GetFileExt
-!insertmacro BannerTrimPath
-!insertmacro DirState
-!insertmacro RefreshShellIcons
-
-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 /NOUNLOAD "$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
+;_____________________________________________________________________________
+;
+; 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"
+
+!insertmacro Locate
+!insertmacro GetSize
+!insertmacro DriveSpace
+!insertmacro GetDrives
+!insertmacro GetTime
+!insertmacro GetFileAttributes
+!insertmacro GetFileVersion
+!insertmacro GetExeName
+!insertmacro GetExePath
+!insertmacro GetParameters
+!insertmacro GetOptions
+!insertmacro GetRoot
+!insertmacro GetParent
+!insertmacro GetFileName
+!insertmacro GetBaseName
+!insertmacro GetFileExt
+!insertmacro BannerTrimPath
+!insertmacro DirState
+!insertmacro RefreshShellIcons
+
+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 /NOUNLOAD "$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/Examples/FileFuncTest.nsi b/Examples/FileFuncTest.nsi
index 5e96fa1..ff9894d 100755
--- a/Examples/FileFuncTest.nsi
+++ b/Examples/FileFuncTest.nsi
@@ -1,561 +1,562 @@
-;_____________________________________________________________________________
-;
-; File Functions Test
-;_____________________________________________________________________________
-;
-; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
-Name "File Functions Test"
-OutFile "FileFuncTest.exe"
-Caption "$(^Name)"
-ShowInstDetails show
-XPStyle on
-
-Var FUNCTION
-Var OUT1
-Var OUT2
-Var OUT3
-Var OUT4
-Var OUT5
-Var OUT6
-Var OUT7
-
-!include "FileFunc.nsh"
-
-!insertmacro Locate
-!insertmacro GetSize
-!insertmacro DriveSpace
-!insertmacro GetDrives
-!insertmacro GetTime
-!insertmacro GetFileAttributes
-!insertmacro GetFileVersion
-!insertmacro GetExeName
-!insertmacro GetExePath
-!insertmacro GetParameters
-!insertmacro GetOptions
-!insertmacro GetOptionsS
-!insertmacro GetRoot
-!insertmacro GetParent
-!insertmacro GetFileName
-!insertmacro GetBaseName
-!insertmacro GetFileExt
-!insertmacro BannerTrimPath
-!insertmacro DirState
-!insertmacro RefreshShellIcons
-
-!insertmacro un.Locate
-!insertmacro un.GetSize
-!insertmacro un.GetDrives
-!insertmacro un.DriveSpace
-!insertmacro un.GetTime
-!insertmacro un.GetFileAttributes
-!insertmacro un.GetFileVersion
-!insertmacro un.GetExeName
-!insertmacro un.GetExePath
-!insertmacro un.GetParameters
-!insertmacro un.GetOptions
-!insertmacro un.GetOptionsS
-!insertmacro un.GetRoot
-!insertmacro un.GetParent
-!insertmacro un.GetFileName
-!insertmacro un.GetBaseName
-!insertmacro un.GetFileExt
-!insertmacro un.BannerTrimPath
-!insertmacro un.DirState
-!insertmacro un.RefreshShellIcons
-
-
-
-;############### 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
-
- ${GetParameters} $OUT1
-
- ${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
- ${un.Locate} '$DOCUMENTS' '/L=FD /M=*.* /S=0B /G=0' 'un.LocateCallback'
- ${un.GetSize} '$WINDIR' '/M=Explorer.exe /S=0K /G=0' $OUT1 $OUT2 $OUT3
- ${un.DriveSpace} 'C:\' '/D=F /S=M' $OUT1
- ${un.GetDrives} 'FDD+CDROM' 'un.GetDrivesCallback'
- ${un.GetTime} '' 'L' $OUT1 $OUT2 $OUT3 $OUT4 $OUT5 $OUT6 $OUT7
- ${un.GetFileAttributes} '$WINDIR\explorer.exe' 'ALL' $OUT1
- ${un.GetFileVersion} '$WINDIR\explorer.exe' $OUT1
- ${un.GetExeName} $OUT1
- ${un.GetExePath} $OUT1
- ${un.GetParameters} $OUT1
- ${un.GetOptions} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1
- ${un.GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1
- ${un.GetRoot} 'C:\Program Files\NSIS' $OUT1
- ${un.GetParent} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
- ${un.GetFileName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
- ${un.GetBaseName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
- ${un.GetFileExt} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
- ${un.BannerTrimPath} 'C:\Server\Documents\Terminal\license.htm' '35A' $OUT1
- ${un.DirState} '$TEMP' $OUT1
- ${un.RefreshShellIcons}
-SectionEnd
-
-Function un.LocateCallback
- Push $0
-FunctionEnd
-
-Function un.GetDrivesCallback
- Push $0
-FunctionEnd
+;_____________________________________________________________________________
+;
+; 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"
+
+!insertmacro Locate
+!insertmacro GetSize
+!insertmacro DriveSpace
+!insertmacro GetDrives
+!insertmacro GetTime
+!insertmacro GetFileAttributes
+!insertmacro GetFileVersion
+!insertmacro GetExeName
+!insertmacro GetExePath
+!insertmacro GetParameters
+!insertmacro GetOptions
+!insertmacro GetOptionsS
+!insertmacro GetRoot
+!insertmacro GetParent
+!insertmacro GetFileName
+!insertmacro GetBaseName
+!insertmacro GetFileExt
+!insertmacro BannerTrimPath
+!insertmacro DirState
+!insertmacro RefreshShellIcons
+
+!insertmacro un.Locate
+!insertmacro un.GetSize
+!insertmacro un.GetDrives
+!insertmacro un.DriveSpace
+!insertmacro un.GetTime
+!insertmacro un.GetFileAttributes
+!insertmacro un.GetFileVersion
+!insertmacro un.GetExeName
+!insertmacro un.GetExePath
+!insertmacro un.GetParameters
+!insertmacro un.GetOptions
+!insertmacro un.GetOptionsS
+!insertmacro un.GetRoot
+!insertmacro un.GetParent
+!insertmacro un.GetFileName
+!insertmacro un.GetBaseName
+!insertmacro un.GetFileExt
+!insertmacro un.BannerTrimPath
+!insertmacro un.DirState
+!insertmacro un.RefreshShellIcons
+
+
+
+;############### 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
+
+ ${GetParameters} $OUT1
+
+ ${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
+ ${un.Locate} '$DOCUMENTS' '/L=FD /M=*.* /S=0B /G=0' 'un.LocateCallback'
+ ${un.GetSize} '$WINDIR' '/M=Explorer.exe /S=0K /G=0' $OUT1 $OUT2 $OUT3
+ ${un.DriveSpace} 'C:\' '/D=F /S=M' $OUT1
+ ${un.GetDrives} 'FDD+CDROM' 'un.GetDrivesCallback'
+ ${un.GetTime} '' 'L' $OUT1 $OUT2 $OUT3 $OUT4 $OUT5 $OUT6 $OUT7
+ ${un.GetFileAttributes} '$WINDIR\explorer.exe' 'ALL' $OUT1
+ ${un.GetFileVersion} '$WINDIR\explorer.exe' $OUT1
+ ${un.GetExeName} $OUT1
+ ${un.GetExePath} $OUT1
+ ${un.GetParameters} $OUT1
+ ${un.GetOptions} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1
+ ${un.GetOptionsS} '/INSTDIR=C:\Program Files\Common Files /SILENT=yes' '/INSTDIR=' $OUT1
+ ${un.GetRoot} 'C:\Program Files\NSIS' $OUT1
+ ${un.GetParent} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
+ ${un.GetFileName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
+ ${un.GetBaseName} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
+ ${un.GetFileExt} 'C:\Program Files\Winamp\uninstwa.exe' $OUT1
+ ${un.BannerTrimPath} 'C:\Server\Documents\Terminal\license.htm' '35A' $OUT1
+ ${un.DirState} '$TEMP' $OUT1
+ ${un.RefreshShellIcons}
+SectionEnd
+
+Function un.LocateCallback
+ Push $0
+FunctionEnd
+
+Function un.GetDrivesCallback
+ Push $0
+FunctionEnd
diff --git a/Examples/Library.nsi b/Examples/Library.nsi
index 61ca810..f706934 100755
--- a/Examples/Library.nsi
+++ b/Examples/Library.nsi
@@ -1,115 +1,117 @@
-# 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
-
-!define TestDLL '"${NSISDIR}\Plugins\LangDLL.dll"'
-
-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
-
-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
-
-SectionEnd
+# 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\LangDLL.dll"'
+
+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
+
+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
+
+SectionEnd
diff --git a/Examples/LogicLib.nsi b/Examples/LogicLib.nsi
index e1cb2b2..b3e2bc7 100755
--- a/Examples/LogicLib.nsi
+++ b/Examples/LogicLib.nsi
@@ -1,596 +1,597 @@
-!verbose 2
-
-Name "NSIS LogicLib Example"
-OutFile "LogicLib.exe"
-ShowInstDetails show
-
-!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 ${|}
- ${If} $R2 == "A"
- 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..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
-
-!verbose 3
+!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 ${|}
+ ${If} $R2 == "A"
+ 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..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
+
+!verbose 3
diff --git a/Examples/Memento.nsi b/Examples/Memento.nsi
index 358d323..725bee3 100755
--- a/Examples/Memento.nsi
+++ b/Examples/Memento.nsi
@@ -1,77 +1,79 @@
-!include LogicLib.nsh
-!include Memento.nsh
-
-Name Memento
-OutFile Memento.exe
-
-XPStyle on
-
-ShowInstDetails show
-
-Page components
-Page instfiles
-
-# 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
+!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/Examples/Modern UI/Basic.nsi b/Examples/Modern UI/Basic.nsi
index 6d97096..770e472 100755
--- a/Examples/Modern UI/Basic.nsi
+++ b/Examples/Modern UI/Basic.nsi
@@ -1,85 +1,88 @@
-;NSIS Modern User Interface
-;Basic Example Script
-;Written by Joost Verburg
-
-;--------------------------------
-;Include Modern UI
-
- !include "MUI.nsh"
-
-;--------------------------------
-;General
-
- ;Name and file
- Name "Modern UI Test"
- OutFile "Basic.exe"
-
- ;Default installation folder
- InstallDir "$PROGRAMFILES\Modern UI Test"
-
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\Modern UI Test" ""
-
-;--------------------------------
-;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"
-
+;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"
+
+ ;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/Examples/Modern UI/HeaderBitmap.nsi b/Examples/Modern UI/HeaderBitmap.nsi
index 8070201..9e41e4b 100755
--- a/Examples/Modern UI/HeaderBitmap.nsi
+++ b/Examples/Modern UI/HeaderBitmap.nsi
@@ -1,87 +1,90 @@
-;NSIS Modern User Interface
-;Header Bitmap Example Script
-;Written by Joost Verburg
-
-;--------------------------------
-;Include Modern UI
-
- !include "MUI.nsh"
-
-;--------------------------------
-;General
-
- ;Name and file
- Name "Modern UI Test"
- OutFile "HeaderBitmap.exe"
-
- ;Default installation folder
- InstallDir "$PROGRAMFILES\Modern UI Test"
-
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\Modern UI Test" ""
-
-;--------------------------------
-;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"
-
+;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"
+
+ ;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/Examples/Modern UI/InstallOptions.nsi b/Examples/Modern UI/InstallOptions.nsi
deleted file mode 100755
index dddf7c6..0000000
--- a/Examples/Modern UI/InstallOptions.nsi
+++ /dev/null
@@ -1,150 +0,0 @@
-;NSIS Modern User Interface
-;InstallOptions Example Script
-;Written by Joost Verburg
-
-;---------------------
-;Header files
-
- !include "MUI.nsh"
- !include "InstallOptions.nsh"
-
-;--------------------------------
-;General
-
- ;Name and file
- Name "Modern UI Test"
- OutFile "InstallOptions.exe"
-
- ;Default installation folder
- InstallDir "$PROGRAMFILES\Modern UI Test"
-
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\Modern UI Test" ""
-
-;--------------------------------
-;Pages
-
- !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
- Page custom CustomPageA
- !insertmacro MUI_PAGE_COMPONENTS
- Page custom CustomPageB
- !insertmacro MUI_PAGE_DIRECTORY
- Page custom CustomPageC
- !insertmacro MUI_PAGE_INSTFILES
-
- !insertmacro MUI_UNPAGE_CONFIRM
- !insertmacro MUI_UNPAGE_INSTFILES
-
-;--------------------------------
-;Interface Settings
-
- !define MUI_ABORTWARNING
-
-;--------------------------------
-;Languages
-
- !insertmacro MUI_LANGUAGE "English"
-
-;--------------------------------
-;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.
-
- ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
-
- ReserveFile "ioA.ini"
- ReserveFile "ioB.ini"
- ReserveFile "ioC.ini"
-
-;--------------------------------
-;Variables
-
- Var IniValue
-
-;--------------------------------
-;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"
-
- ;Read a value from an InstallOptions INI file
- !insertmacro INSTALLOPTIONS_READ $IniValue "ioC.ini" "Field 2" "State"
-
- ;Display a messagebox if check box was checked
- StrCmp $IniValue "1" "" +2
- MessageBox MB_OK "You checked the check box, here is the MessageBox..."
-
-SectionEnd
-
-;--------------------------------
-;Installer Functions
-
-Function .onInit
-
- ;Extract InstallOptions INI files
- !insertmacro INSTALLOPTIONS_EXTRACT "ioA.ini"
- !insertmacro INSTALLOPTIONS_EXTRACT "ioB.ini"
- !insertmacro INSTALLOPTIONS_EXTRACT "ioC.ini"
-
-FunctionEnd
-
-LangString TEXT_IO_TITLE ${LANG_ENGLISH} "InstallOptions page"
-LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "This is a page created using the InstallOptions plug-in."
-
-Function CustomPageA
-
- !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
- !insertmacro INSTALLOPTIONS_DISPLAY "ioA.ini"
-
-FunctionEnd
-
-Function CustomPageB
-
- !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
- !insertmacro INSTALLOPTIONS_DISPLAY "ioB.ini"
-
-FunctionEnd
-
-Function CustomPageC
-
- !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
- !insertmacro INSTALLOPTIONS_DISPLAY "ioC.ini"
-
-FunctionEnd
-
-;--------------------------------
-;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/Examples/Modern UI/MultiLanguage.nsi b/Examples/Modern UI/MultiLanguage.nsi
index 3e1ee7f..0e7bb31 100755
--- a/Examples/Modern UI/MultiLanguage.nsi
+++ b/Examples/Modern UI/MultiLanguage.nsi
@@ -1,174 +1,177 @@
-;NSIS Modern User Interface
-;Multilingual Example Script
-;Written by Joost Verburg
-
-;--------------------------------
-;Include Modern UI
-
- !include "MUI.nsh"
-
-;--------------------------------
-;General
-
- ;Name and file
- Name "Modern UI Test"
- OutFile "MultiLanguage.exe"
-
- ;Default installation folder
- InstallDir "$PROGRAMFILES\Modern UI Test"
-
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\Modern UI Test" ""
-
-;--------------------------------
-;Interface Settings
-
- !define MUI_ABORTWARNING
-
-;--------------------------------
-;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_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" ;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"
-
-;--------------------------------
-;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 LANGAUGE 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
-
+;NSIS Modern User Interface
+;Multilingual Example Script
+;Written by Joost Verburg
+
+;--------------------------------
+;Include Modern UI
+
+ !include "MUI2.nsh"
+
+;--------------------------------
+;General
+
+ ;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
+
+;--------------------------------
+;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_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" ;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"
+
+;--------------------------------
+;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 LANGAUGE 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/Examples/Modern UI/StartMenu.nsi b/Examples/Modern UI/StartMenu.nsi
index 373d97c..5c53e71 100755
--- a/Examples/Modern UI/StartMenu.nsi
+++ b/Examples/Modern UI/StartMenu.nsi
@@ -1,127 +1,114 @@
-;NSIS Modern User Interface
-;Start Menu Folder Selection Example Script
-;Written by Joost Verburg
-
-;--------------------------------
-;Include Modern UI
-
- !include "MUI.nsh"
-
-;--------------------------------
-;General
-
- ;Name and file
- Name "Modern UI Test"
- OutFile "StartMenu.exe"
-
- ;Default installation folder
- InstallDir "$PROGRAMFILES\Modern UI Test"
-
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\Modern UI Test" ""
-
- ;Vista redirects $SMPROGRAMS to all users without this
- RequestExecutionLevel admin
-
-;--------------------------------
-;Variables
-
- Var MUI_TEMP
- Var STARTMENU_FOLDER
-
-;--------------------------------
-;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 $STARTMENU_FOLDER
-
- !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\$STARTMENU_FOLDER"
- CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\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 $MUI_TEMP
-
- Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
-
- ;Delete empty start menu parent diretories
- StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
-
- startMenuDeleteLoop:
- ClearErrors
- RMDir $MUI_TEMP
- GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
-
- IfErrors startMenuDeleteLoopDone
-
- StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
- startMenuDeleteLoopDone:
-
- DeleteRegKey /ifempty HKCU "Software\Modern UI Test"
-
+;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"
+
+ ;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/Examples/Modern UI/WelcomeFinish.nsi b/Examples/Modern UI/WelcomeFinish.nsi
index 61e8a3b..d1e1d5d 100755
--- a/Examples/Modern UI/WelcomeFinish.nsi
+++ b/Examples/Modern UI/WelcomeFinish.nsi
@@ -1,89 +1,92 @@
-;NSIS Modern User Interface
-;Welcome/Finish Page Example Script
-;Written by Joost Verburg
-
-;--------------------------------
-;Include Modern UI
-
- !include "MUI.nsh"
-
-;--------------------------------
-;General
-
- ;Name and file
- Name "Modern UI Test"
- OutFile "WelcomeFinish.exe"
-
- ;Default installation folder
- InstallDir "$PROGRAMFILES\Modern UI Test"
-
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\Modern UI Test" ""
-
-;--------------------------------
-;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
+;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"
+
+ ;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/Examples/Modern UI/ioA.ini b/Examples/Modern UI/ioA.ini
deleted file mode 100755
index 5a85a77..0000000
--- a/Examples/Modern UI/ioA.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-[Settings]
-NumFields=2
-
-[Field 1]
-Type=label
-Text=Install Options Page A
-Left=0
-Right=-1
-Top=0
-Bottom=10
-
-[Field 2]
-Type=text
-Left=0
-Right=-1
-Top=20
-Bottom=100
-flags=MULTILINE|VSCROLL|READONLY
-State="Description:\r\n\r\n1 - Show custom page A (where you are now)\r\n2 - Show the components page\r\n3 - Show custom page B\r\n4 - Show directory page\r\n5 - Show custom page C\r\n6 - Show installation progress" \ No newline at end of file
diff --git a/Examples/Modern UI/ioB.ini b/Examples/Modern UI/ioB.ini
deleted file mode 100755
index dd08924..0000000
--- a/Examples/Modern UI/ioB.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[Settings]
-NumFields=1
-
-[Field 1]
-Type=label
-Text=Install Options Page B
-Left=0
-Right=-1
-Top=0
-Bottom=10 \ No newline at end of file
diff --git a/Examples/Modern UI/ioC.ini b/Examples/Modern UI/ioC.ini
deleted file mode 100755
index 4d4cdfe..0000000
--- a/Examples/Modern UI/ioC.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-[Settings]
-NumFields=2
-
-[Field 1]
-Type=label
-Text=Instal Options Page C
-Left=0
-Right=-1
-Top=0
-Bottom=10
-
-[Field 2]
-Type=checkbox
-Text=Display a MessageBox
-Left=0
-Right=-1
-Top=30
-Bottom=40
-State=1 \ No newline at end of file
diff --git a/Examples/SConscript b/Examples/SConscript
index 2fa2a30..2a07e01 100755
--- a/Examples/SConscript
+++ b/Examples/SConscript
@@ -1,47 +1,42 @@
-examples = Split("""
- bigtest.nsi
- example1.nsi
- example2.nsi
- FileFunc.ini
- FileFunc.nsi
- FileFuncTest.nsi
- gfx.nsi
- languages.nsi
- Library.nsi
- LogicLib.nsi
- makensis.ini
- makensis.nsi
- Memento.nsi
- one-section.nsi
- primes.nsi
- rtest.nsi
- silent.nsi
- StrFunc.nsi
- TextFunc.ini
- TextFunc.nsi
- TextFuncTest.nsi
- UserVars.nsi
- VersionInfo.nsi
- viewhtml.nsi
- waplugin.nsi
- WordFunc.ini
- WordFunc.nsi
- WordFuncTest.nsi
-""")
-
-mui_examples = [
- 'Modern UI/Basic.nsi',
- 'Modern UI/HeaderBitmap.nsi',
- 'Modern UI/InstallOptions.nsi',
- 'Modern UI/MultiLanguage.nsi',
- 'Modern UI/StartMenu.nsi',
- 'Modern UI/WelcomeFinish.nsi',
- 'Modern UI/ioA.ini',
- 'Modern UI/ioB.ini',
- 'Modern UI/ioC.ini'
-]
-
-Import('env')
-
-env.DistributeExamples(examples)
-env.DistributeExamples(mui_examples, path='Modern UI')
+examples = Split("""
+ bigtest.nsi
+ example1.nsi
+ example2.nsi
+ FileFunc.ini
+ FileFunc.nsi
+ FileFuncTest.nsi
+ gfx.nsi
+ languages.nsi
+ Library.nsi
+ LogicLib.nsi
+ makensis.nsi
+ Memento.nsi
+ one-section.nsi
+ primes.nsi
+ rtest.nsi
+ silent.nsi
+ StrFunc.nsi
+ TextFunc.ini
+ TextFunc.nsi
+ TextFuncTest.nsi
+ UserVars.nsi
+ VersionInfo.nsi
+ viewhtml.nsi
+ waplugin.nsi
+ WordFunc.ini
+ WordFunc.nsi
+ WordFuncTest.nsi
+""")
+
+mui_examples = [
+ 'Modern UI/Basic.nsi',
+ 'Modern UI/HeaderBitmap.nsi',
+ 'Modern UI/MultiLanguage.nsi',
+ 'Modern UI/StartMenu.nsi',
+ 'Modern UI/WelcomeFinish.nsi'
+]
+
+Import('env')
+
+env.DistributeExamples(examples)
+env.DistributeExamples(mui_examples, path='Modern UI')
diff --git a/Examples/StrFunc.nsi b/Examples/StrFunc.nsi
index f711809..93e4c28 100755
--- a/Examples/StrFunc.nsi
+++ b/Examples/StrFunc.nsi
@@ -1,634 +1,635 @@
-Name "NSIS StrFunc Example"
-OutFile "StrFunc.exe"
-ShowInstDetails show
-ShowUninstDetails show
-XPStyle on
-
-!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}
-
-!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
- IfErrors strcaseerror
-
- DetailPrint "PASSED StrCase test"
- Goto +2
-strcaseerror:
- DetailPrint "FAILED StrCase test"
-
- # Test clipboard function
- !insertmacro StackVerificationStart
- ${StrClb} $0 "StrFunc clipboard test" ">"
- 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
- IfErrors strclberror
-
- DetailPrint "PASSED StrClb test"
- Goto +2
-strclberror:
- DetailPrint "FAILED StrClb test"
-
- # 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
- IfErrors ioerror
-
- DetailPrint "PASSED StrNSISToIO/StrIOToNSIS test"
- Goto +2
-ioerror:
- DetailPrint "FAILED StrNSISToIO/StrIOToNSIS test"
-
- # 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
- IfErrors strlocerror
-
- DetailPrint "PASSED StrLoc test"
- Goto +2
-strlocerror:
- DetailPrint "FAILED StrLoc test"
-
- # 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
- IfErrors strreperror
-
- DetailPrint "PASSED StrRep test"
- Goto +2
-strreperror:
- DetailPrint "FAILED StrRep test"
-
- # 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
- IfErrors strsorterror
-
- DetailPrint "PASSED StrSort test"
- Goto +2
-strsorterror:
- DetailPrint "FAILED StrSort test"
-
- !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
- IfErrors strstrerror
-
- DetailPrint "PASSED StrStr test"
- Goto +2
-strstrerror:
- DetailPrint "FAILED StrStr test"
-
- !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
- IfErrors strstradverror
-
- DetailPrint "PASSED StrStrAdv test"
- Goto +2
-strstradverror:
- DetailPrint "FAILED StrStrAdv test"
-
- # 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
- IfErrors strtokerror
-
- DetailPrint "PASSED StrTok test"
- Goto +2
-strtokerror:
- DetailPrint "FAILED StrTok test"
-
- # Test trim new lines
- !insertmacro StackVerificationStart
- ${StrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n"
- StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror
- !insertmacro StackVerificationEnd
- IfErrors strtrimnewlineserror
-
- DetailPrint "PASSED StrTrimNewLines test"
- Goto +2
-strtrimnewlineserror:
- DetailPrint "FAILED StrTrimNewLines test"
-
- WriteUninstaller $EXEDIR\UnStrFunc.exe
-
- Exec $EXEDIR\UnStrFunc.exe
-
-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
- IfErrors strcaseerror
-
- DetailPrint "PASSED StrCase test"
- Goto +2
-strcaseerror:
- DetailPrint "FAILED StrCase test"
-
- # 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
- IfErrors strclberror
-
- DetailPrint "PASSED StrClb test"
- Goto +2
-strclberror:
- DetailPrint "FAILED StrClb test"
-
- # 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
- IfErrors ioerror
-
- DetailPrint "PASSED StrNSISToIO/StrIOToNSIS test"
- Goto +2
-ioerror:
- DetailPrint "FAILED StrNSISToIO/StrIOToNSIS test"
-
- # 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
- IfErrors strlocerror
-
- DetailPrint "PASSED StrLoc test"
- Goto +2
-strlocerror:
- DetailPrint "FAILED StrLoc test"
-
- # 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
- IfErrors strreperror
-
- DetailPrint "PASSED StrRep test"
- Goto +2
-strreperror:
- DetailPrint "FAILED StrRep test"
-
- # 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
- IfErrors strsorterror
-
- DetailPrint "PASSED StrSort test"
- Goto +2
-strsorterror:
- DetailPrint "FAILED StrSort test"
-
- !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
- IfErrors strstrerror
-
- DetailPrint "PASSED StrStr test"
- Goto +2
-strstrerror:
- DetailPrint "FAILED StrStr test"
-
- !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
- IfErrors strstradverror
-
- DetailPrint "PASSED StrStrAdv test"
- Goto +2
-strstradverror:
- DetailPrint "FAILED StrStrAdv test"
-
- # 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
- IfErrors strtokerror
-
- DetailPrint "PASSED StrTok test"
- Goto +2
-strtokerror:
- DetailPrint "FAILED StrTok test"
-
- # Test trim new lines
- !insertmacro StackVerificationStart
- ${UnStrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n"
- StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror
- !insertmacro StackVerificationEnd
- IfErrors strtrimnewlineserror
-
- DetailPrint "PASSED StrTrimNewLines test"
- Goto +2
-strtrimnewlineserror:
- DetailPrint "FAILED StrTrimNewLines test"
-
-SectionEnd
+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}
+
+!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
+ IfErrors strcaseerror
+
+ DetailPrint "PASSED StrCase test"
+ Goto +2
+strcaseerror:
+ DetailPrint "FAILED StrCase test"
+
+ # Test clipboard function
+ !insertmacro StackVerificationStart
+ ${StrClb} $0 "StrFunc clipboard test" ">"
+ 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
+ IfErrors strclberror
+
+ DetailPrint "PASSED StrClb test"
+ Goto +2
+strclberror:
+ DetailPrint "FAILED StrClb test"
+
+ # 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
+ IfErrors ioerror
+
+ DetailPrint "PASSED StrNSISToIO/StrIOToNSIS test"
+ Goto +2
+ioerror:
+ DetailPrint "FAILED StrNSISToIO/StrIOToNSIS test"
+
+ # 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
+ IfErrors strlocerror
+
+ DetailPrint "PASSED StrLoc test"
+ Goto +2
+strlocerror:
+ DetailPrint "FAILED StrLoc test"
+
+ # 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
+ IfErrors strreperror
+
+ DetailPrint "PASSED StrRep test"
+ Goto +2
+strreperror:
+ DetailPrint "FAILED StrRep test"
+
+ # 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
+ IfErrors strsorterror
+
+ DetailPrint "PASSED StrSort test"
+ Goto +2
+strsorterror:
+ DetailPrint "FAILED StrSort test"
+
+ !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
+ IfErrors strstrerror
+
+ DetailPrint "PASSED StrStr test"
+ Goto +2
+strstrerror:
+ DetailPrint "FAILED StrStr test"
+
+ !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
+ IfErrors strstradverror
+
+ DetailPrint "PASSED StrStrAdv test"
+ Goto +2
+strstradverror:
+ DetailPrint "FAILED StrStrAdv test"
+
+ # 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
+ IfErrors strtokerror
+
+ DetailPrint "PASSED StrTok test"
+ Goto +2
+strtokerror:
+ DetailPrint "FAILED StrTok test"
+
+ # Test trim new lines
+ !insertmacro StackVerificationStart
+ ${StrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n"
+ StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror
+ !insertmacro StackVerificationEnd
+ IfErrors strtrimnewlineserror
+
+ DetailPrint "PASSED StrTrimNewLines test"
+ Goto +2
+strtrimnewlineserror:
+ DetailPrint "FAILED StrTrimNewLines test"
+
+ WriteUninstaller $EXEDIR\UnStrFunc.exe
+
+ Exec $EXEDIR\UnStrFunc.exe
+
+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
+ IfErrors strcaseerror
+
+ DetailPrint "PASSED StrCase test"
+ Goto +2
+strcaseerror:
+ DetailPrint "FAILED StrCase test"
+
+ # 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
+ IfErrors strclberror
+
+ DetailPrint "PASSED StrClb test"
+ Goto +2
+strclberror:
+ DetailPrint "FAILED StrClb test"
+
+ # 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
+ IfErrors ioerror
+
+ DetailPrint "PASSED StrNSISToIO/StrIOToNSIS test"
+ Goto +2
+ioerror:
+ DetailPrint "FAILED StrNSISToIO/StrIOToNSIS test"
+
+ # 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
+ IfErrors strlocerror
+
+ DetailPrint "PASSED StrLoc test"
+ Goto +2
+strlocerror:
+ DetailPrint "FAILED StrLoc test"
+
+ # 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
+ IfErrors strreperror
+
+ DetailPrint "PASSED StrRep test"
+ Goto +2
+strreperror:
+ DetailPrint "FAILED StrRep test"
+
+ # 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
+ IfErrors strsorterror
+
+ DetailPrint "PASSED StrSort test"
+ Goto +2
+strsorterror:
+ DetailPrint "FAILED StrSort test"
+
+ !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
+ IfErrors strstrerror
+
+ DetailPrint "PASSED StrStr test"
+ Goto +2
+strstrerror:
+ DetailPrint "FAILED StrStr test"
+
+ !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
+ IfErrors strstradverror
+
+ DetailPrint "PASSED StrStrAdv test"
+ Goto +2
+strstradverror:
+ DetailPrint "FAILED StrStrAdv test"
+
+ # 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
+ IfErrors strtokerror
+
+ DetailPrint "PASSED StrTok test"
+ Goto +2
+strtokerror:
+ DetailPrint "FAILED StrTok test"
+
+ # Test trim new lines
+ !insertmacro StackVerificationStart
+ ${UnStrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n"
+ StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror
+ !insertmacro StackVerificationEnd
+ IfErrors strtrimnewlineserror
+
+ DetailPrint "PASSED StrTrimNewLines test"
+ Goto +2
+strtrimnewlineserror:
+ DetailPrint "FAILED StrTrimNewLines test"
+
+SectionEnd
diff --git a/Examples/TextFunc.nsi b/Examples/TextFunc.nsi
index 8152625..d572a5f 100755
--- a/Examples/TextFunc.nsi
+++ b/Examples/TextFunc.nsi
@@ -1,842 +1,843 @@
-;_____________________________________________________________________________
-;
-; Text Functions
-;_____________________________________________________________________________
-;
-; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
-Name "Text Functions"
-OutFile "TextFunc.exe"
-Caption "$(^Name)"
-XPStyle on
-
-!include "WinMessages.nsh"
-!include "TextFunc.nsh"
-
-!insertmacro LineFind
-!insertmacro LineRead
-!insertmacro FileReadFromEnd
-!insertmacro LineSum
-!insertmacro FileJoin
-!insertmacro ConfigRead
-!insertmacro ConfigWrite
-!insertmacro FileRecode
-
-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 /NOUNLOAD "$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
+;_____________________________________________________________________________
+;
+; 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"
+
+!insertmacro LineFind
+!insertmacro LineRead
+!insertmacro FileReadFromEnd
+!insertmacro LineSum
+!insertmacro FileJoin
+!insertmacro ConfigRead
+!insertmacro ConfigWrite
+!insertmacro FileRecode
+
+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 /NOUNLOAD "$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/Examples/TextFuncTest.nsi b/Examples/TextFuncTest.nsi
index fa6ae95..c85010e 100755
--- a/Examples/TextFuncTest.nsi
+++ b/Examples/TextFuncTest.nsi
@@ -1,443 +1,444 @@
-;_____________________________________________________________________________
-;
-; Text Functions Test
-;_____________________________________________________________________________
-;
-; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
-Name "Text Functions Test"
-OutFile "TextFuncTest.exe"
-Caption "$(^Name)"
-ShowInstDetails show
-XPStyle on
-
-Var FUNCTION
-Var TEMPFILE1
-Var TEMPFILE2
-Var TEMPFILE3
-Var HANDLE
-Var OUT
-
-!include "TextFunc.nsh"
-
-!insertmacro LineFind
-!insertmacro LineRead
-!insertmacro FileReadFromEnd
-!insertmacro LineSum
-!insertmacro FileJoin
-!insertmacro TextCompare
-!insertmacro TextCompareS
-!insertmacro ConfigRead
-!insertmacro ConfigReadS
-!insertmacro ConfigWrite
-!insertmacro ConfigWriteS
-!insertmacro FileRecode
-!insertmacro TrimNewLines
-
-!insertmacro un.LineFind
-!insertmacro un.LineRead
-!insertmacro un.FileReadFromEnd
-!insertmacro un.LineSum
-!insertmacro un.FileJoin
-!insertmacro un.TextCompare
-!insertmacro un.TextCompareS
-!insertmacro un.ConfigRead
-!insertmacro un.ConfigReadS
-!insertmacro un.ConfigWrite
-!insertmacro un.ConfigWriteS
-!insertmacro un.FileRecode
-!insertmacro un.TrimNewLines
-
-
-
-;############### 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
- ${un.LineFind} '$TEMPFILE1' '/NUL' '1:-1' 'un.LineFindCallback'
- ${un.LineRead} '$TEMPFILE1' '-1' $OUT
- ${un.FileReadFromEnd} '$TEMPFILE1' 'un.FileReadFromEndCallback'
- ${un.LineSum} '$TEMPFILE1' $OUT
- ${un.FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3'
- ${un.TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
- ${un.TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
- ${un.ConfigRead} '$TEMPFILE1' '3c=' $OUT
- ${un.ConfigReadS} '$TEMPFILE1' '3c=' $OUT
- ${un.ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT
- ${un.ConfigWriteS} '$TEMPFILE1' '5E=' 'e**' $OUT
- ${un.FileRecode} '$TEMPFILE1' 'CharToOem'
- ${un.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
+;_____________________________________________________________________________
+;
+; 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"
+
+!insertmacro LineFind
+!insertmacro LineRead
+!insertmacro FileReadFromEnd
+!insertmacro LineSum
+!insertmacro FileJoin
+!insertmacro TextCompare
+!insertmacro TextCompareS
+!insertmacro ConfigRead
+!insertmacro ConfigReadS
+!insertmacro ConfigWrite
+!insertmacro ConfigWriteS
+!insertmacro FileRecode
+!insertmacro TrimNewLines
+
+!insertmacro un.LineFind
+!insertmacro un.LineRead
+!insertmacro un.FileReadFromEnd
+!insertmacro un.LineSum
+!insertmacro un.FileJoin
+!insertmacro un.TextCompare
+!insertmacro un.TextCompareS
+!insertmacro un.ConfigRead
+!insertmacro un.ConfigReadS
+!insertmacro un.ConfigWrite
+!insertmacro un.ConfigWriteS
+!insertmacro un.FileRecode
+!insertmacro un.TrimNewLines
+
+
+
+;############### 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
+ ${un.LineFind} '$TEMPFILE1' '/NUL' '1:-1' 'un.LineFindCallback'
+ ${un.LineRead} '$TEMPFILE1' '-1' $OUT
+ ${un.FileReadFromEnd} '$TEMPFILE1' 'un.FileReadFromEndCallback'
+ ${un.LineSum} '$TEMPFILE1' $OUT
+ ${un.FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3'
+ ${un.TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
+ ${un.TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
+ ${un.ConfigRead} '$TEMPFILE1' '3c=' $OUT
+ ${un.ConfigReadS} '$TEMPFILE1' '3c=' $OUT
+ ${un.ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT
+ ${un.ConfigWriteS} '$TEMPFILE1' '5E=' 'e**' $OUT
+ ${un.FileRecode} '$TEMPFILE1' 'CharToOem'
+ ${un.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/Examples/UserVars.nsi b/Examples/UserVars.nsi
index 5362dcd..f31fe30 100755
--- a/Examples/UserVars.nsi
+++ b/Examples/UserVars.nsi
@@ -1,67 +1,69 @@
-; UserVars.nsi
-;
-; This script shows you how to declare and user variables.
-
-;--------------------------------
-
- Name "User Variables Text"
- OutFile "UserVars.exe"
-
- InstallDir "$PROGRAMFILES\User Variables Test"
-
-;--------------------------------
-
- ;Pages
- Page directory
- Page instfiles
-
- UninstPage uninstConfirm
- UninstPage instfiles
-
-;--------------------------------
-; Declaration of user variables (Var command), allowed charaters for variables names : [a-z][A-Z][0-9] and '_'
-
- Var "Name"
- Var "Serial"
- Var "Info"
-
-;--------------------------------
-; Installer
-
-Section "Dummy Section" SecDummy
-
- StrCpy $0 "Admin"
- StrCpy "$Name" $0
- StrCpy "$Serial" "12345"
- MessageBox MB_OK "User Name: $Name $\n$\nSerial Number: $Serial"
-
- CreateDirectory $INSTDIR
- WriteUninstaller "$INSTDIR\Uninst.exe"
-
-SectionEnd
-
-Section "Another Section"
-
- Var /GLOBAL "AnotherVar"
-
- StrCpy $AnotherVar "test"
-
-SectionEnd
-
-;--------------------------------
-; Uninstaller
-
-Section "Uninstall"
-
- StrCpy $Info "User variables test uninstalled successfully."
- Delete "$INSTDIR\Uninst.exe"
- RmDir $INSTDIR
-
-SectionEnd
-
-Function un.OnUninstSuccess
-
- HideWindow
- MessageBox MB_OK "$Info"
-
-FunctionEnd
+; UserVars.nsi
+;
+; This script shows you how to declare and user variables.
+
+;--------------------------------
+
+ Name "User Variables Text"
+ OutFile "UserVars.exe"
+
+ InstallDir "$PROGRAMFILES\User Variables Test"
+
+ RequestExecutionLevel admin
+
+;--------------------------------
+
+ ;Pages
+ Page directory
+ Page instfiles
+
+ UninstPage uninstConfirm
+ UninstPage instfiles
+
+;--------------------------------
+; Declaration of user variables (Var command), allowed charaters for variables names : [a-z][A-Z][0-9] and '_'
+
+ Var "Name"
+ Var "Serial"
+ Var "Info"
+
+;--------------------------------
+; Installer
+
+Section "Dummy Section" SecDummy
+
+ StrCpy $0 "Admin"
+ StrCpy "$Name" $0
+ StrCpy "$Serial" "12345"
+ MessageBox MB_OK "User Name: $Name $\n$\nSerial Number: $Serial"
+
+ CreateDirectory $INSTDIR
+ WriteUninstaller "$INSTDIR\Uninst.exe"
+
+SectionEnd
+
+Section "Another Section"
+
+ Var /GLOBAL "AnotherVar"
+
+ StrCpy $AnotherVar "test"
+
+SectionEnd
+
+;--------------------------------
+; Uninstaller
+
+Section "Uninstall"
+
+ StrCpy $Info "User variables test uninstalled successfully."
+ Delete "$INSTDIR\Uninst.exe"
+ RmDir $INSTDIR
+
+SectionEnd
+
+Function un.OnUninstSuccess
+
+ HideWindow
+ MessageBox MB_OK "$Info"
+
+FunctionEnd
diff --git a/Examples/VersionInfo.nsi b/Examples/VersionInfo.nsi
index 035c5d3..8d77509 100755
--- a/Examples/VersionInfo.nsi
+++ b/Examples/VersionInfo.nsi
@@ -1,29 +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" "© Fake company"
- VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Test Application"
- VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "1.2.3"
-
-;--------------------------------
-
-Section ""
-
-SectionEnd
+; 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" "© Fake company"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Test Application"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "1.2.3"
+
+;--------------------------------
+
+Section ""
+
+SectionEnd
diff --git a/Examples/WordFunc.nsi b/Examples/WordFunc.nsi
index 67acf29..67f28f4 100755
--- a/Examples/WordFunc.nsi
+++ b/Examples/WordFunc.nsi
@@ -1,543 +1,544 @@
-;_____________________________________________________________________________
-;
-; Word Functions
-;_____________________________________________________________________________
-;
-; 2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
-Name "Word Functions"
-OutFile "WordFunc.exe"
-Caption "$(^Name)"
-XPStyle on
-
-Var INI
-Var HWND
-Var STATE
-
-!include "WinMessages.nsh"
-!include "WordFunc.nsh"
-
-!insertmacro WordFind
-!insertmacro WordFind2X
-!insertmacro WordReplace
-!insertmacro WordAdd
-!insertmacro WordInsert
-!insertmacro StrFilter
-!insertmacro VersionCompare
-!insertmacro VersionConvert
-
-Page Custom ShowCustom LeaveCustom
-
-Function ShowCustom
- InstallOptions::initDialog /NOUNLOAD "$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
+;_____________________________________________________________________________
+;
+; 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"
+
+!insertmacro WordFind
+!insertmacro WordFind2X
+!insertmacro WordReplace
+!insertmacro WordAdd
+!insertmacro WordInsert
+!insertmacro StrFilter
+!insertmacro VersionCompare
+!insertmacro VersionConvert
+
+Page Custom ShowCustom LeaveCustom
+
+Function ShowCustom
+ InstallOptions::initDialog /NOUNLOAD "$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/Examples/WordFuncTest.nsi b/Examples/WordFuncTest.nsi
index 56faca5..e0c035b 100755
--- a/Examples/WordFuncTest.nsi
+++ b/Examples/WordFuncTest.nsi
@@ -1,645 +1,646 @@
-;_____________________________________________________________________________
-;
-; Word Functions Test
-;_____________________________________________________________________________
-;
-; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
-Name "Word Functions Test"
-OutFile "WordFuncTest.exe"
-Caption "$(^Name)"
-ShowInstDetails show
-XPStyle on
-
-Var FUNCTION
-Var OUT
-
-!include "WordFunc.nsh"
-
-!insertmacro WordFind
-!insertmacro WordFindS
-!insertmacro WordFind2X
-!insertmacro WordFind2XS
-!insertmacro WordFind3X
-!insertmacro WordFind3XS
-!insertmacro WordReplace
-!insertmacro WordReplaceS
-!insertmacro WordAdd
-!insertmacro WordAddS
-!insertmacro WordInsert
-!insertmacro WordInsertS
-!insertmacro StrFilter
-!insertmacro StrFilterS
-!insertmacro VersionCompare
-!insertmacro VersionConvert
-
-!insertmacro un.WordFind
-!insertmacro un.WordFindS
-!insertmacro un.WordFind2X
-!insertmacro un.WordFind2XS
-!insertmacro un.WordFind3X
-!insertmacro un.WordFind3XS
-!insertmacro un.WordReplace
-!insertmacro un.WordReplaceS
-!insertmacro un.WordAdd
-!insertmacro un.WordAddS
-!insertmacro un.WordInsert
-!insertmacro un.WordInsertS
-!insertmacro un.StrFilter
-!insertmacro un.StrFilterS
-!insertmacro un.VersionCompare
-!insertmacro un.VersionConvert
-
-
-
-;############### 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
- ${un.WordFind} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT
- ${un.WordFindS} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT
- ${un.WordFind2X} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT
- ${un.WordFind2XS} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT
- ${un.WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT
- ${un.WordFind3XS} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT
- ${un.WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT
- ${un.WordReplaceS} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT
- ${un.WordAdd} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT
- ${un.WordAddS} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT
- ${un.WordInsert} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT
- ${un.WordInsertS} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT
- ${un.StrFilter} '123abc 456DEF 7890|%#' '+' '' '' $OUT
- ${un.StrFilterS} '123abc 456DEF 7890|%#' '+' '' '' $OUT
- ${un.VersionCompare} '1.1.1.9' '1.1.1.01' $OUT
- ${un.VersionConvert} '9.0a' '' $OUT
-SectionEnd
+;_____________________________________________________________________________
+;
+; 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"
+
+!insertmacro WordFind
+!insertmacro WordFindS
+!insertmacro WordFind2X
+!insertmacro WordFind2XS
+!insertmacro WordFind3X
+!insertmacro WordFind3XS
+!insertmacro WordReplace
+!insertmacro WordReplaceS
+!insertmacro WordAdd
+!insertmacro WordAddS
+!insertmacro WordInsert
+!insertmacro WordInsertS
+!insertmacro StrFilter
+!insertmacro StrFilterS
+!insertmacro VersionCompare
+!insertmacro VersionConvert
+
+!insertmacro un.WordFind
+!insertmacro un.WordFindS
+!insertmacro un.WordFind2X
+!insertmacro un.WordFind2XS
+!insertmacro un.WordFind3X
+!insertmacro un.WordFind3XS
+!insertmacro un.WordReplace
+!insertmacro un.WordReplaceS
+!insertmacro un.WordAdd
+!insertmacro un.WordAddS
+!insertmacro un.WordInsert
+!insertmacro un.WordInsertS
+!insertmacro un.StrFilter
+!insertmacro un.StrFilterS
+!insertmacro un.VersionCompare
+!insertmacro un.VersionConvert
+
+
+
+;############### 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
+ ${un.WordFind} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT
+ ${un.WordFindS} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT
+ ${un.WordFind2X} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT
+ ${un.WordFind2XS} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT
+ ${un.WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT
+ ${un.WordFind3XS} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT
+ ${un.WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT
+ ${un.WordReplaceS} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT
+ ${un.WordAdd} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT
+ ${un.WordAddS} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT
+ ${un.WordInsert} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT
+ ${un.WordInsertS} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT
+ ${un.StrFilter} '123abc 456DEF 7890|%#' '+' '' '' $OUT
+ ${un.StrFilterS} '123abc 456DEF 7890|%#' '+' '' '' $OUT
+ ${un.VersionCompare} '1.1.1.9' '1.1.1.01' $OUT
+ ${un.VersionConvert} '9.0a' '' $OUT
+SectionEnd
diff --git a/Examples/bigtest.nsi b/Examples/bigtest.nsi
index aff4b07..c18db67 100755
--- a/Examples/bigtest.nsi
+++ b/Examples/bigtest.nsi
@@ -1,306 +1,308 @@
-; 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" ""
-
-CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp"
-
-LicenseText "A test text, make sure it's all there"
-LicenseData "bigtest.nsi"
-
-;--------------------------------
-
-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 "POOOOOOOOOOOP"
- 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 "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_¢¢_does_not_exist
- IfErrors 0 NoError
- MessageBox MB_OK "could not read from HKCR\software\microsoft\xyz_¢¢_does_not_exist"
- Goto ErrorYay
- NoError:
- MessageBox MB_OK "read '$1' from HKCR\software\microsoft\xyz_¢¢_does_not_exist"
- ErrorYay:
-
-SectionEnd
-
-Section "Test CreateShortCut"
-
- SectionIn 1 2 3
-
- Call CSCTest
-
-SectionEnd
-
-SectionGroup Group2
-
-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
+; 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" ""
+
+CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp"
+
+LicenseText "A test text, make sure it's all there"
+LicenseData "bigtest.nsi"
+
+RequestExecutionLevel admin
+
+;--------------------------------
+
+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 "POOOOOOOOOOOP"
+ 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 "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_¢¢_does_not_exist
+ IfErrors 0 NoError
+ MessageBox MB_OK "could not read from HKCR\software\microsoft\xyz_¢¢_does_not_exist"
+ Goto ErrorYay
+ NoError:
+ MessageBox MB_OK "read '$1' from HKCR\software\microsoft\xyz_¢¢_does_not_exist"
+ ErrorYay:
+
+SectionEnd
+
+Section "Test CreateShortCut"
+
+ SectionIn 1 2 3
+
+ Call CSCTest
+
+SectionEnd
+
+SectionGroup Group2
+
+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/Examples/example1.nsi b/Examples/example1.nsi
index 61a6f3e..004a14f 100755
--- a/Examples/example1.nsi
+++ b/Examples/example1.nsi
@@ -1,37 +1,40 @@
-; 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.
-
-;--------------------------------
-
-; The name of the installer
-Name "Example1"
-
-; The file to write
-OutFile "example1.exe"
-
-; The default installation directory
-InstallDir $PROGRAMFILES\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 ; end the section
+; 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.
+
+;--------------------------------
+
+; The name of the installer
+Name "Example1"
+
+; The file to write
+OutFile "example1.exe"
+
+; The default installation directory
+InstallDir $DESKTOP\Example1
+
+; Request application privileges for Windows Vista
+RequestExecutionLevel user
+
+;--------------------------------
+
+; 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 ; end the section
diff --git a/Examples/example2.nsi b/Examples/example2.nsi
index 393e0bd..54ff7df 100755
--- a/Examples/example2.nsi
+++ b/Examples/example2.nsi
@@ -1,89 +1,92 @@
-; example2.nsi
-;
-; This script is based on example1.nsi, but it remember the directory,
-; has uninstall support and (optionally) installs start menu shortcuts.
-;
-; It will install example2.nsi into a directory that the user selects,
-
-;--------------------------------
-
-; The name of the installer
-Name "Example2"
-
-; The file to write
-OutFile "example2.exe"
-
-; 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 "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" "" "$INSTDIR\uninstall.exe" 0
- CreateShortCut "$SMPROGRAMS\Example2\Example2 (MakeNSISW).lnk" "$INSTDIR\example2.nsi" "" "$INSTDIR\example2.nsi" 0
-
-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\*.*"
-
- ; Remove directories used
- RMDir "$SMPROGRAMS\Example2"
- RMDir "$INSTDIR"
-
-SectionEnd
+; example2.nsi
+;
+; This script is based on example1.nsi, but it remember the directory,
+; has uninstall support and (optionally) installs start menu shortcuts.
+;
+; It will install example2.nsi into a directory that the user selects,
+
+;--------------------------------
+
+; The name of the installer
+Name "Example2"
+
+; The file to write
+OutFile "example2.exe"
+
+; 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"
+
+; Request application privileges for Windows Vista
+RequestExecutionLevel admin
+
+;--------------------------------
+
+; 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 "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" "" "$INSTDIR\uninstall.exe" 0
+ CreateShortCut "$SMPROGRAMS\Example2\Example2 (MakeNSISW).lnk" "$INSTDIR\example2.nsi" "" "$INSTDIR\example2.nsi" 0
+
+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\*.*"
+
+ ; Remove directories used
+ RMDir "$SMPROGRAMS\Example2"
+ RMDir "$INSTDIR"
+
+SectionEnd
diff --git a/Examples/gfx.nsi b/Examples/gfx.nsi
index e59f593..fd2397e 100755
--- a/Examples/gfx.nsi
+++ b/Examples/gfx.nsi
@@ -1,120 +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 100
-
-; 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"
-
-;--------------------------------
-
-; 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 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/<insert plugin name here> 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/<insert plugin name here> 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
-
+; 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 100
+
+; 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 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/<insert plugin name here> 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/<insert plugin name here> 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/Examples/languages.nsi b/Examples/languages.nsi
index 9759653..9909752 100755
--- a/Examples/languages.nsi
+++ b/Examples/languages.nsi
@@ -1,177 +1,179 @@
-; languages.nsi
-;
-; This is an example of a multilingual installer
-; The user can select the language on startup
-
-;--------------------------------
-
-OutFile languages.exe
-
-XPStyle on
-
-;--------------------------------
-
-Page license
-Page components
-Page instfiles
-
-;--------------------------------
-
-; First is default
-LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.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_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_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_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_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} "Trandional 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_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} "Trandional 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_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_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
+; languages.nsi
+;
+; This is an example of a multilingual installer
+; The user can select the language on startup
+
+;--------------------------------
+
+OutFile languages.exe
+
+XPStyle on
+
+RequestExecutionLevel user
+
+;--------------------------------
+
+Page license
+Page components
+Page instfiles
+
+;--------------------------------
+
+; First is default
+LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.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_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_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_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_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} "Trandional 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_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} "Trandional 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_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_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/Examples/makensis.ini b/Examples/makensis.ini
deleted file mode 100755
index be3933a..0000000
--- a/Examples/makensis.ini
+++ /dev/null
@@ -1,21 +0,0 @@
-[Settings]
-NumFields=3
-[Field 1]
-Type=Label
-Left=0
-Right=-1
-Top=0
-Bottom=24
-[Field 2]
-Type=RadioButton
-Left=30
-Right=-1
-Top=50
-Bottom=58
-State=1
-[Field 3]
-Type=RadioButton
-Left=30
-Right=-1
-Top=70
-Bottom=78 \ No newline at end of file
diff --git a/Examples/makensis.nsi b/Examples/makensis.nsi
index 54f0023..f6db151 100755
--- a/Examples/makensis.nsi
+++ b/Examples/makensis.nsi
@@ -1,1114 +1,1033 @@
-;NSIS Setup Script
-;--------------------------------
-
-!ifndef VERSION
- !define VERSION 'anonymous-build'
-!endif
-
-;--------------------------------
-;Configuration
-
-!ifdef OUTFILE
- OutFile "${OUTFILE}"
-!else
- OutFile ..\nsis-${VERSION}-setup.exe
-!endif
-
-SetCompressor /SOLID lzma
-
-InstType "Full"
-InstType "Lite"
-InstType "Minimal"
-
-InstallDir $PROGRAMFILES\NSIS
-InstallDirRegKey HKLM Software\NSIS ""
-
-RequestExecutionLevel admin
-
-;--------------------------------
-;Header Files
-
-!include "MUI.nsh"
-!include "Sections.nsh"
-!include "LogicLib.nsh"
-!include "Memento.nsh"
-
-;--------------------------------
-;Definitions
-
-!define SHCNE_ASSOCCHANGED 0x8000000
-!define SHCNF_IDLIST 0
-
-;--------------------------------
-;Configuration
-
-;Names
-Name "NSIS"
-Caption "NSIS ${VERSION} Setup"
-
-;Memento Settings
-!define MEMENTO_REGISTRY_ROOT HKLM
-!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS"
-
-;Interface Settings
-!define MUI_ABORTWARNING
-
-!define MUI_HEADERIMAGE
-!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\nsis.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 2 includes a new 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"
-
-;--------------------------------
-;Reserve Files
-
- ;These files should be inserted before other files in the data block
-
- ReserveFile "makensis.ini"
- !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-
-;--------------------------------
-;Installer Sections
-
-${MementoSection} "NSIS Core Files (required)" SecCore
-
- SetDetailsPrint textonly
- DetailPrint "Installing NSIS Core Files..."
- SetDetailsPrint listonly
-
- SectionIn 1 2 3 RO
- SetOutPath $INSTDIR
- RMDir /r $SMPROGRAMS\NSIS
-
- SetOverwrite on
- File ..\makensis.exe
- File ..\makensisw.exe
- File ..\COPYING
- File ..\NSIS.chm
- File ..\NSIS.exe
- File /nonfatal ..\NSIS.exe.manifest
-
- IfFileExists $INSTDIR\nsisconf.nsi "" +2
- Rename $INSTDIR\nsisconf.nsi $INSTDIR\nsisconf.nsh
- SetOverwrite off
- File ..\nsisconf.nsh
- SetOverwrite on
-
- SetOutPath $INSTDIR\Stubs
- File ..\Stubs\bzip2
- File ..\Stubs\bzip2_solid
- File ..\Stubs\lzma
- File ..\Stubs\lzma_solid
- File ..\Stubs\zlib
- File ..\Stubs\zlib_solid
- File ..\Stubs\uninst
-
- 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
-
- SetOutPath $INSTDIR\Docs\StrFunc
- File ..\Docs\StrFunc\StrFunc.txt
-
- SetOutPath $INSTDIR\Docs\makensisw
- File ..\Docs\makensisw\*.txt
-
- SetOutPath $INSTDIR\Menu
- File ..\Menu\*.html
- SetOutPath $INSTDIR\Menu\images
- File ..\Menu\images\clear.gif
- File ..\Menu\images\header.gif
- File ..\Menu\images\line.gif
- File ..\Menu\images\menu.gif
- File ..\Menu\images\menud.gif
- File ..\Menu\images\site.gif
-
- Delete $INSTDIR\makensis.htm
- Delete $INSTDIR\Docs\*.html
- Delete $INSTDIR\Docs\style.css
- RMDir $INSTDIR\Docs
-
- SetOutPath $INSTDIR\Bin
- File ..\Bin\LibraryLocal.exe
- File ..\Bin\RegTool.bin
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\TypeLib.dll
-
- ReadRegStr $R0 HKCR ".nsi" ""
- StrCmp $R0 "NSISFile" 0 +2
- DeleteRegKey HKCR "NSISFile"
-
- WriteRegStr HKCR ".nsi" "" "NSIS.Script"
- WriteRegStr HKCR "NSIS.Script" "" "NSIS Script File"
- WriteRegStr HKCR "NSIS.Script\DefaultIcon" "" "$INSTDIR\makensisw.exe,1"
- ReadRegStr $R0 HKCR "NSIS.Script\shell\open\command" ""
- StrCmp $R0 "" 0 no_nsiopen
- WriteRegStr HKCR "NSIS.Script\shell" "" "open"
- WriteRegStr HKCR "NSIS.Script\shell\open\command" "" 'notepad.exe "%1"'
- no_nsiopen:
- 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 "NSIS.Header" "" "NSIS Header File"
- WriteRegStr HKCR "NSIS.Header\DefaultIcon" "" "$INSTDIR\makensisw.exe,1"
- ReadRegStr $R0 HKCR "NSIS.Header\shell\open\command" ""
- StrCmp $R0 "" 0 no_nshopen
- WriteRegStr HKCR "NSIS.Header\shell" "" "open"
- WriteRegStr HKCR "NSIS.Header\shell\open\command" "" 'notepad.exe "%1"'
- no_nshopen:
-
- System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
-
-${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\makensis.ini
- File ..\Examples\example1.nsi
- File ..\Examples\example2.nsi
- File ..\Examples\viewhtml.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\UserVars.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
-
- 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.h
- File ..\Examples\Plugin\exdll_with_unit.dpr
- File ..\Examples\Plugin\extdll.inc
- File ..\Examples\Plugin\nsis.pas
-
-${MementoSectionEnd}
-
-!ifndef NO_STARTMENUSHORTCUTS
-${MementoSection} "Start Menu and Desktop Shortcuts" SecShortcuts
-
- SetDetailsPrint textonly
- DetailPrint "Installing Start Menu and Desktop Shortcuts..."
- SetDetailsPrint listonly
-
-!else
-${MementoSection} "Desktop Shortcut" SecShortcuts
-
- SetDetailsPrint textonly
- DetailPrint "Installing Desktop Shortcut..."
- SetDetailsPrint listonly
-
-!endif
- SectionIn 1 2
- SetOutPath $INSTDIR
-!ifndef NO_STARTMENUSHORTCUTS
- CreateDirectory $SMPROGRAMS\NSIS
-
- CreateShortCut "$SMPROGRAMS\NSIS\NSIS Menu.lnk" "$INSTDIR\NSIS.exe" ""
-
- CreateShortCut "$SMPROGRAMS\NSIS\MakeNSISW (Compiler GUI).lnk" "$INSTDIR\makensisw.exe"
-
- CreateShortCut "$SMPROGRAMS\NSIS\NSIS Documentation.lnk" "$INSTDIR\NSIS.chm"
- WriteINIStr "$SMPROGRAMS\NSIS\NSIS Site.url" "InternetShortcut" "URL" "http://nsis.sourceforge.net/"
- CreateShortCut "$SMPROGRAMS\NSIS\Uninstall NSIS.lnk" "$INSTDIR\uninst-nsis.exe"
-
-!endif
-
- CreateShortCut "$DESKTOP\Nullsoft Install System.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\InstallOptions.nsi"
- File "..\Examples\Modern UI\ioA.ini"
- File "..\Examples\Modern UI\ioB.ini"
- File "..\Examples\Modern UI\ioC.ini"
- 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\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
-
- !insertmacro SectionFlagIsSet ${SecInterfacesModernUI} ${SF_SELECTED} mui nomui
- mui:
- SetOutPath "$INSTDIR\Contrib\Language files"
- File "..\Contrib\Language files\*.nsh"
- nomui:
-
-${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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\Banner.dll
- 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
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\LangDLL.dll
-${MementoSectionEnd}
-
-${MementoSection} "nsExec" SecPluginsnsExec
-
- SetDetailsPrint textonly
- DetailPrint "Installing Plug-ins | nsExec..."
- SetDetailsPrint listonly
-
- SectionIn 1
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\nsExec.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\splash.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\advsplash.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\BgImage.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\InstallOptions.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\nsDialogs.dll
- SetOutPath $INSTDIR\Examples\nsDialogs
- File ..\Examples\nsDialogs\example.nsi
- File ..\Examples\nsDialogs\InstallOptions.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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\Math.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\nsisdl.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\System.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\StartMenu.dll
- 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
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\UserInfo.dll
- SetOutPath $INSTDIR\Examples\UserInfo
- File ..\Examples\UserInfo\UserInfo.nsi
-${MementoSectionEnd}
-
-${MementoSection} "Dialer" SecPluginsDialer
-
- SetDetailsPrint textonly
- DetailPrint "Installing Plug-ins | Dialer..."
- SetDetailsPrint listonly
-
- SectionIn 1
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\Dialer.dll
- SetOutPath $INSTDIR\Docs\Dialer
- File ..\Docs\Dialer\Dialer.txt
-${MementoSectionEnd}
-
-${MementoSection} "VPatch" SecPluginsVPatch
-
- SetDetailsPrint textonly
- DetailPrint "Installing Plug-ins | VPatch..."
- SetDetailsPrint listonly
-
- SectionIn 1
-
- SetOutPath $INSTDIR\Plugins
- File ..\Plugins\VPatch.dll
- 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
-
- !insertmacro SectionFlagIsSet ${SecInterfacesModernUI} ${SF_SELECTED} mui nomui
-
- mui:
-
- SetDetailsPrint textonly
- DetailPrint "Configuring Modern UI..."
- SetDetailsPrint listonly
-
- !insertmacro SectionFlagIsSet ${SecLangFiles} ${SF_SELECTED} langfiles nolangfiles
-
- nolangfiles:
-
- SetOutPath "$INSTDIR\Contrib\Language files"
- File "..\Contrib\Language files\English.nlf"
- SetOutPath "$INSTDIR\Contrib\Language files"
- File "..\Contrib\Language files\English.nsh"
-
- langfiles:
-
- !insertmacro SectionFlagIsSet ${SecGraphics} ${SF_SELECTED} graphics nographics
-
- nographics:
-
- SetOutPath $INSTDIR\Contrib\Graphics
- 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"
-
- graphics:
-
- nomui:
-
- 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
-
- WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "UninstallString" '"$INSTDIR\uninst-nsis.exe"'
- WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "InstallLocation" "$INSTDIR"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayName" "Nullsoft Install System"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayIcon" "$INSTDIR\NSIS.exe,0"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayVersion" "${VERSION}"
-!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "VersionMajor" "${VER_MAJOR}"
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "VersionMinor" "${VER_MINOR}.${VER_REVISION}"
-!endif
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "URLInfoAbout" "http://nsis.sourceforge.net/"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "HelpLink" "http://nsis.sourceforge.net/Support"
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "NoModify" "1"
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "NoRepair" "1"
-
-!ifndef NO_STARTMENUSHORTCUTS
- IfFileExists $SMPROGRAMS\NSIS "" no_startshortcuts
-
- SetDetailsPrint textonly
- DetailPrint "Creating Shortcuts..."
- SetDetailsPrint listonly
-
- IfFileExists $INSTDIR\Examples 0 +2
- CreateShortCut "$SMPROGRAMS\NSIS\NSIS Examples Directory.lnk" "$INSTDIR\Examples"
-
- ; MakeNSISW
- CreateDirectory $SMPROGRAMS\NSIS\Contrib
- CreateShortCut "$SMPROGRAMS\NSIS\Contrib\MakeNSISw Readme.lnk" "$INSTDIR\Docs\makensisw\readme.txt"
-
- ; ZIP2EXE
- IfFileExists "$INSTDIR\Bin\zip2exe.exe" 0 +2
- CreateShortCut "$SMPROGRAMS\NSIS\Contrib\zip2exe (Create SFX).lnk" "$INSTDIR\Bin\zip2exe.exe"
-
- ; Modern UI
- Push "Modern UI"
- Call AddReadmeToStartMenu
-
- ; Splash
- Push Splash
- Call AddReadmeToStartMenu
-
- ; Advanced splash
- Push AdvSplash
- Call AddReadmeToStartMenu
-
- ; Math
- Push Math
- Call AddReadmeToStartMenu
-
- ; NSISdl
- Push NSISdl
- Call AddReadmeToStartMenu
-
- ; nsExec
- Push nsExec
- Call AddReadmeToStartMenu
-
- ; StartMenu
- Push StartMenu
- Call AddReadmeToStartMenu
-
- ; BgImage
- Push BgImage
- Call AddReadmeToStartMenu
-
- ; Banner
- Push Banner
- Call AddReadmeToStartMenu
-
- ; System
- Push System
- Call AddReadmeToStartMenu
-
- ; VPatch
- Push VPatch
- Call AddReadmeToStartMenu
-
- ; InstallOptions
- Push InstallOptions
- Call AddReadmeToStartMenu
-
- no_startshortcuts:
-!endif
-
- 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} "Adds icons to your start menu and your desktop 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
-
-!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
-
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "makensis.ini"
-
-!endif
-
- ${MementoSectionRestore}
-
-FunctionEnd
-
-!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
-
-Function PageReinstall
-
- ReadRegStr $R0 HKLM "Software\NSIS" ""
-
- StrCmp $R0 "" 0 +2
- Abort
-
- ;Detect version
- ReadRegDWORD $R0 HKLM "Software\NSIS" "VersionMajor"
- IntCmp $R0 ${VER_MAJOR} minor_check new_version older_version
- minor_check:
- ReadRegDWORD $R0 HKLM "Software\NSIS" "VersionMinor"
- IntCmp $R0 ${VER_MINOR} revision_check new_version older_version
- revision_check:
- ReadRegDWORD $R0 HKLM "Software\NSIS" "VersionRevision"
- IntCmp $R0 ${VER_REVISION} build_check new_version older_version
- build_check:
- ReadRegDWORD $R0 HKLM "Software\NSIS" "VersionBuild"
- IntCmp $R0 ${VER_BUILD} same_version new_version older_version
-
- new_version:
-
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 1" "Text" "An older 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."
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 2" "Text" "Uninstall before installing"
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 3" "Text" "Do not uninstall"
- !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install NSIS."
- StrCpy $R0 "1"
- Goto reinst_start
-
- older_version:
-
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 1" "Text" "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."
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 2" "Text" "Uninstall before installing"
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 3" "Text" "Do not uninstall"
- !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install NSIS."
- StrCpy $R0 "1"
- Goto reinst_start
-
- same_version:
-
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 1" "Text" "NSIS ${VERSION} is already installed. Select the operation you want to perform and click Next to continue."
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 2" "Text" "Add/Reinstall components"
- !insertmacro MUI_INSTALLOPTIONS_WRITE "makensis.ini" "Field 3" "Text" "Uninstall NSIS"
- !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose the maintenance option to perform."
- StrCpy $R0 "2"
-
- reinst_start:
-
- !insertmacro MUI_INSTALLOPTIONS_DISPLAY "makensis.ini"
-
-FunctionEnd
-
-Function PageLeaveReinstall
-
- !insertmacro MUI_INSTALLOPTIONS_READ $R1 "makensis.ini" "Field 2" "State"
-
- StrCmp $R0 "1" 0 +2
- StrCmp $R1 "1" reinst_uninstall reinst_done
-
- StrCmp $R0 "2" 0 +3
- StrCmp $R1 "1" reinst_done reinst_uninstall
-
- reinst_uninstall:
- ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "UninstallString"
-
- ;Run uninstaller
- HideWindow
-
- ClearErrors
- ExecWait '$R1 _?=$INSTDIR'
-
- IfErrors no_remove_uninstaller
- IfFileExists "$INSTDIR\makensis.exe" no_remove_uninstaller
-
- Delete $R1
- RMDir $INSTDIR
-
- no_remove_uninstaller:
-
- StrCmp $R0 "2" 0 +2
- Quit
-
- BringToFront
-
- reinst_done:
-
-FunctionEnd
-
-!endif # VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
-
-!ifndef NO_STARTMENUSHORTCUTS
-Function AddReadmeToStartMenu
- Pop $0
- StrCpy $1 "$0 Readme"
- IfFileExists $INSTDIR\Docs\$0\$0.txt 0 +3
- StrCpy $0 Docs\$0\$0.txt
- Goto create
- IfFileExists $INSTDIR\Docs\$0\$0.html 0 +3
- StrCpy $0 Docs\$0\$0.html
- Goto create
- IfFileExists $INSTDIR\Docs\$0\Readme.txt 0 +3
- StrCpy $0 Docs\$0\Readme.txt
- Goto create
- IfFileExists $INSTDIR\Docs\$0\Readme.html 0 done
- StrCpy $0 Docs\$0\Readme.html
- create:
- CreateShortCut $SMPROGRAMS\NSIS\Contrib\$1.lnk $INSTDIR\$0
- done:
-FunctionEnd
-!endif
-
-Function ShowReleaseNotes
- ${If} ${FileExists} $WINDIR\hh.exe
- StrCpy $0 $WINDIR\hh.exe
- Exec '"$0" mk:@MSITStore:$INSTDIR\NSIS.chm::/SectionF.1.html'
- ${Else}
- SearchPath $0 hh.exe
- ${If} ${FileExists} $0
- Exec '"$0" mk:@MSITStore:$INSTDIR\NSIS.chm::/SectionF.1.html'
- ${Else}
- ExecShell "open" "http://nsis.sourceforge.net/Docs/AppendixF.html#F.1"
- ${EndIf}
- ${EndIf}
-FunctionEnd
-
-;--------------------------------
-;Uninstaller Section
-
-Section Uninstall
-
- SetDetailsPrint textonly
- DetailPrint "Uninstalling NSI Development Shell Extensions..."
- SetDetailsPrint listonly
-
- IfFileExists $INSTDIR\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
-
- ReadRegStr $R0 HKCR ".nsi" ""
- StrCmp $R0 "NSIS.Script" 0 +2
- DeleteRegKey HKCR ".nsi"
-
- ReadRegStr $R0 HKCR ".nsh" ""
- StrCmp $R0 "NSIS.Header" 0 +2
- DeleteRegKey HKCR ".nsh"
-
- DeleteRegKey HKCR "NSIS.Script"
- DeleteRegKey HKCR "NSIS.Header"
-
- System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
-
- DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS"
- DeleteRegKey HKLM "Software\NSIS"
-
- SetDetailsPrint textonly
- DetailPrint "Deleting Files..."
- SetDetailsPrint listonly
-
- RMDir /r $SMPROGRAMS\NSIS
- Delete "$DESKTOP\Nullsoft Install System.lnk"
- Delete $INSTDIR\makensis.exe
- Delete $INSTDIR\makensisw.exe
- Delete $INSTDIR\NSIS.exe
- 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
+;NSIS Setup Script
+;--------------------------------
+
+!ifndef VERSION
+ !define VERSION 'anonymous-build'
+!endif
+
+;--------------------------------
+;Configuration
+
+!ifdef OUTFILE
+ OutFile "${OUTFILE}"
+!else
+ OutFile ..\nsis-${VERSION}-setup.exe
+!endif
+
+SetCompressor /SOLID lzma
+
+InstType "Full"
+InstType "Lite"
+InstType "Minimal"
+
+InstallDir $PROGRAMFILES\NSIS
+InstallDirRegKey HKLM Software\NSIS ""
+
+RequestExecutionLevel admin
+
+;--------------------------------
+;Header Files
+
+!include "MUI2.nsh"
+!include "Sections.nsh"
+!include "LogicLib.nsh"
+!include "Memento.nsh"
+!include "WordFunc.nsh"
+
+;--------------------------------
+;Functions
+
+!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
+
+ !insertmacro VersionCompare
+
+!endif
+
+;--------------------------------
+;Definitions
+
+!define SHCNE_ASSOCCHANGED 0x8000000
+!define SHCNF_IDLIST 0
+
+;--------------------------------
+;Configuration
+
+;Names
+Name "NSIS"
+Caption "NSIS ${VERSION} Setup"
+
+;Memento Settings
+!define MEMENTO_REGISTRY_ROOT HKLM
+!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS"
+
+;Interface Settings
+!define MUI_ABORTWARNING
+
+!define MUI_HEADERIMAGE
+!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\nsis.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 2 includes a new 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"
+
+;--------------------------------
+;Installer Sections
+
+${MementoSection} "NSIS Core Files (required)" SecCore
+
+ SetDetailsPrint textonly
+ DetailPrint "Installing NSIS Core Files..."
+ SetDetailsPrint listonly
+
+ SectionIn 1 2 3 RO
+ SetOutPath $INSTDIR
+ RMDir /r $SMPROGRAMS\NSIS
+
+ SetOverwrite on
+ File ..\makensis.exe
+ File ..\makensisw.exe
+ File ..\COPYING
+ File ..\NSIS.chm
+ File ..\NSIS.exe
+ File /nonfatal ..\NSIS.exe.manifest
+
+ IfFileExists $INSTDIR\nsisconf.nsi "" +2
+ Rename $INSTDIR\nsisconf.nsi $INSTDIR\nsisconf.nsh
+ SetOverwrite off
+ File ..\nsisconf.nsh
+ SetOverwrite on
+
+ SetOutPath $INSTDIR\Stubs
+ File ..\Stubs\bzip2
+ File ..\Stubs\bzip2_solid
+ File ..\Stubs\lzma
+ File ..\Stubs\lzma_solid
+ File ..\Stubs\zlib
+ File ..\Stubs\zlib_solid
+ File ..\Stubs\uninst
+
+ 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
+
+ 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
+
+ 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
+
+ Delete $INSTDIR\makensis.htm
+ Delete $INSTDIR\Docs\*.html
+ Delete $INSTDIR\Docs\style.css
+ RMDir $INSTDIR\Docs
+
+ SetOutPath $INSTDIR\Bin
+ File ..\Bin\LibraryLocal.exe
+ File ..\Bin\RegTool.bin
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\TypeLib.dll
+
+ ReadRegStr $R0 HKCR ".nsi" ""
+ StrCmp $R0 "NSISFile" 0 +2
+ DeleteRegKey HKCR "NSISFile"
+
+ WriteRegStr HKCR ".nsi" "" "NSIS.Script"
+ WriteRegStr HKCR "NSIS.Script" "" "NSIS Script File"
+ WriteRegStr HKCR "NSIS.Script\DefaultIcon" "" "$INSTDIR\makensisw.exe,1"
+ ReadRegStr $R0 HKCR "NSIS.Script\shell\open\command" ""
+ StrCmp $R0 "" 0 no_nsiopen
+ WriteRegStr HKCR "NSIS.Script\shell" "" "open"
+ WriteRegStr HKCR "NSIS.Script\shell\open\command" "" 'notepad.exe "%1"'
+ no_nsiopen:
+ 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 "NSIS.Header" "" "NSIS Header File"
+ WriteRegStr HKCR "NSIS.Header\DefaultIcon" "" "$INSTDIR\makensisw.exe,1"
+ ReadRegStr $R0 HKCR "NSIS.Header\shell\open\command" ""
+ StrCmp $R0 "" 0 no_nshopen
+ WriteRegStr HKCR "NSIS.Header\shell" "" "open"
+ WriteRegStr HKCR "NSIS.Header\shell\open\command" "" 'notepad.exe "%1"'
+ no_nshopen:
+
+ System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
+
+${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\viewhtml.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\UserVars.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
+
+ 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.h
+ File ..\Examples\Plugin\exdll_with_unit.dpr
+ File ..\Examples\Plugin\extdll.inc
+ File ..\Examples\Plugin\nsis.pas
+
+${MementoSectionEnd}
+
+!ifndef NO_STARTMENUSHORTCUTS
+${MementoSection} "Start Menu and Desktop Shortcuts" SecShortcuts
+
+ SetDetailsPrint textonly
+ DetailPrint "Installing Start Menu and Desktop Shortcuts..."
+ SetDetailsPrint listonly
+
+!else
+${MementoSection} "Desktop Shortcut" SecShortcuts
+
+ SetDetailsPrint textonly
+ DetailPrint "Installing Desktop Shortcut..."
+ SetDetailsPrint listonly
+
+!endif
+ SectionIn 1 2
+ SetOutPath $INSTDIR
+!ifndef NO_STARTMENUSHORTCUTS
+ CreateShortCut "$SMPROGRAMS\NSIS.lnk" "$INSTDIR\NSIS.exe"
+!endif
+
+ CreateShortCut "$DESKTOP\NSIS.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
+
+ !insertmacro SectionFlagIsSet ${SecInterfacesModernUI} ${SF_SELECTED} mui nomui
+ mui:
+ SetOutPath "$INSTDIR\Contrib\Language files"
+ File "..\Contrib\Language files\*.nsh"
+ nomui:
+
+${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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\Banner.dll
+ 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
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\LangDLL.dll
+${MementoSectionEnd}
+
+${MementoSection} "nsExec" SecPluginsnsExec
+
+ SetDetailsPrint textonly
+ DetailPrint "Installing Plug-ins | nsExec..."
+ SetDetailsPrint listonly
+
+ SectionIn 1
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\nsExec.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\splash.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\advsplash.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\BgImage.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\InstallOptions.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\nsDialogs.dll
+ SetOutPath $INSTDIR\Examples\nsDialogs
+ File ..\Examples\nsDialogs\example.nsi
+ File ..\Examples\nsDialogs\InstallOptions.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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\Math.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\nsisdl.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\System.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\StartMenu.dll
+ 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
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\UserInfo.dll
+ SetOutPath $INSTDIR\Examples\UserInfo
+ File ..\Examples\UserInfo\UserInfo.nsi
+${MementoSectionEnd}
+
+${MementoSection} "Dialer" SecPluginsDialer
+
+ SetDetailsPrint textonly
+ DetailPrint "Installing Plug-ins | Dialer..."
+ SetDetailsPrint listonly
+
+ SectionIn 1
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\Dialer.dll
+ SetOutPath $INSTDIR\Docs\Dialer
+ File ..\Docs\Dialer\Dialer.txt
+${MementoSectionEnd}
+
+${MementoSection} "VPatch" SecPluginsVPatch
+
+ SetDetailsPrint textonly
+ DetailPrint "Installing Plug-ins | VPatch..."
+ SetDetailsPrint listonly
+
+ SectionIn 1
+
+ SetOutPath $INSTDIR\Plugins
+ File ..\Plugins\VPatch.dll
+ 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
+
+ !insertmacro SectionFlagIsSet ${SecInterfacesModernUI} ${SF_SELECTED} mui nomui
+
+ mui:
+
+ SetDetailsPrint textonly
+ DetailPrint "Configuring Modern UI..."
+ SetDetailsPrint listonly
+
+ !insertmacro SectionFlagIsSet ${SecLangFiles} ${SF_SELECTED} langfiles nolangfiles
+
+ nolangfiles:
+
+ SetOutPath "$INSTDIR\Contrib\Language files"
+ File "..\Contrib\Language files\English.nlf"
+ SetOutPath "$INSTDIR\Contrib\Language files"
+ File "..\Contrib\Language files\English.nsh"
+
+ langfiles:
+
+ !insertmacro SectionFlagIsSet ${SecGraphics} ${SF_SELECTED} graphics nographics
+
+ nographics:
+
+ SetOutPath $INSTDIR\Contrib\Graphics
+ 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"
+
+ graphics:
+
+ nomui:
+
+ 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
+
+ WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "UninstallString" '"$INSTDIR\uninst-nsis.exe"'
+ WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "InstallLocation" "$INSTDIR"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayName" "Nullsoft Install System"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayIcon" "$INSTDIR\NSIS.exe,0"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayVersion" "${VERSION}"
+!ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "VersionMajor" "${VER_MAJOR}"
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "VersionMinor" "${VER_MINOR}.${VER_REVISION}"
+!endif
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "URLInfoAbout" "http://nsis.sourceforge.net/"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "HelpLink" "http://nsis.sourceforge.net/Support"
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "NoModify" "1"
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "NoRepair" "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} "Adds icons to your start menu and your desktop 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" ""
+
+ ${If} $R0 == ""
+ Abort
+ ${EndIf}
+
+ ReadRegDWORD $R0 HKLM "Software\NSIS" "VersionMajor"
+ ReadRegDWORD $R1 HKLM "Software\NSIS" "VersionMinor"
+ ReadRegDWORD $R2 HKLM "Software\NSIS" "VersionRevision"
+ ReadRegDWORD $R3 HKLM "Software\NSIS" "VersionBuild"
+ 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 older 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 /NOUNLOAD 1018
+
+ ${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}
+
+ 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
+ StrCmp $R1 "1" reinst_uninstall reinst_done
+
+ StrCmp $R0 "2" 0 +3
+ StrCmp $R1 "1" reinst_done reinst_uninstall
+
+ reinst_uninstall:
+ ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "UninstallString"
+
+ ;Run uninstaller
+ HideWindow
+
+ ClearErrors
+ ExecWait '$R1 _?=$INSTDIR'
+
+ IfErrors no_remove_uninstaller
+ IfFileExists "$INSTDIR\makensis.exe" no_remove_uninstaller
+
+ Delete $R1
+ RMDir $INSTDIR
+
+ no_remove_uninstaller:
+
+ StrCmp $R0 "2" 0 +2
+ Quit
+
+ BringToFront
+
+ reinst_done:
+
+FunctionEnd
+
+!endif # VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
+
+Function ShowReleaseNotes
+ ${If} ${FileExists} $WINDIR\hh.exe
+ StrCpy $0 $WINDIR\hh.exe
+ Exec '"$0" mk:@MSITStore:$INSTDIR\NSIS.chm::/SectionF.1.html'
+ ${Else}
+ SearchPath $0 hh.exe
+ ${If} ${FileExists} $0
+ Exec '"$0" mk:@MSITStore:$INSTDIR\NSIS.chm::/SectionF.1.html'
+ ${Else}
+ ExecShell "open" "http://nsis.sourceforge.net/Docs/AppendixF.html#F.1"
+ ${EndIf}
+ ${EndIf}
+FunctionEnd
+
+;--------------------------------
+;Uninstaller Section
+
+Section Uninstall
+
+ SetDetailsPrint textonly
+ DetailPrint "Uninstalling NSI Development Shell Extensions..."
+ SetDetailsPrint listonly
+
+ IfFileExists $INSTDIR\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
+
+ ReadRegStr $R0 HKCR ".nsi" ""
+ StrCmp $R0 "NSIS.Script" 0 +2
+ DeleteRegKey HKCR ".nsi"
+
+ ReadRegStr $R0 HKCR ".nsh" ""
+ StrCmp $R0 "NSIS.Header" 0 +2
+ DeleteRegKey HKCR ".nsh"
+
+ DeleteRegKey HKCR "NSIS.Script"
+ DeleteRegKey HKCR "NSIS.Header"
+
+ System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
+
+ DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS"
+ DeleteRegKey HKLM "Software\NSIS"
+
+ SetDetailsPrint textonly
+ DetailPrint "Deleting Files..."
+ SetDetailsPrint listonly
+
+ Delete $SMPROGRAMS\NSIS.lnk
+ Delete $DESKTOP\NSIS.lnk
+ Delete $INSTDIR\makensis.exe
+ Delete $INSTDIR\makensisw.exe
+ Delete $INSTDIR\NSIS.exe
+ 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/Examples/one-section.nsi b/Examples/one-section.nsi
index 078a918..bd646c0 100755
--- a/Examples/one-section.nsi
+++ b/Examples/one-section.nsi
@@ -1,78 +1,79 @@
-; 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"
-
-;--------------------------------
-
-; Pages
-
-Page components
-
-;--------------------------------
-
-; 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
-
+; 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
+
+;--------------------------------
+
+; 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/Examples/primes.nsi b/Examples/primes.nsi
index 8fad8d4..c1c96a5 100755
--- a/Examples/primes.nsi
+++ b/Examples/primes.nsi
@@ -1,69 +1,70 @@
-; primes.nsi
-;
-; This is an example of the possibities 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"
-
-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
-
+; primes.nsi
+;
+; This is an example of the possibities 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/Examples/rtest.nsi b/Examples/rtest.nsi
index 9f6be9a..e130672 100755
--- a/Examples/rtest.nsi
+++ b/Examples/rtest.nsi
@@ -1,91 +1,93 @@
-; rtest.nsi
-;
-; This script tests some advanced NSIS functions.
-
-;--------------------------------
-
-Name "rtest"
-OutFile "rtest.exe"
-
-ComponentText "Select tests!"
-ShowInstDetails show
-
-;--------------------------------
-
-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 succeded (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 succeded (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"
-
+; 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 succeded (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 succeded (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/Examples/silent.nsi b/Examples/silent.nsi
index e441025..5ebd839 100755
--- a/Examples/silent.nsi
+++ b/Examples/silent.nsi
@@ -1,62 +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"
-
-# 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
+# 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/Examples/viewhtml.nsi b/Examples/viewhtml.nsi
index 62ebad2..5633ff2 100755
--- a/Examples/viewhtml.nsi
+++ b/Examples/viewhtml.nsi
@@ -1,50 +1,53 @@
-; viewhtml.nsi
-;
-; This script creates a silent installer which extracts one (or more) HTML
-; files to a temporary directory, opens Internet Explorer to view the file(s),
-; and when Internet Explorer has quit, deletes the file(s).
-
-;--------------------------------
-
-; The name of the installer (not really used in a silent install)
-Name "ViewHTML"
-
-; Set to silent mode
-SilentInstall silent
-
-; The file to write
-OutFile "viewhtml.exe"
-
-;--------------------------------
-
-; The stuff to install
-Section ""
-
- ; Get a temporary filename (in the Windows Temp directory)
- GetTempFileName $R0
-
- ; Extract file
- ; Lets skip this one, it's not built to be showin in IE
- ; File /oname=$R0 "..\Menu\compiler.html"
- ; and write our own! :)
- FileOpen $0 $R0 "w"
- FileWrite $0 "<HTML><BODY><H1>HTML page for viewhtml.nsi</H1></BODY></HTML>"
- FileClose $0
-
- ; View file
- ExecWait '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "$R0"'
-
- ; Note: another way of doing this would be to use ExecShell, but then you
- ; really couldn't get away with deleting the files. Here is the ExecShell
- ; line that you would want to use:
- ;
- ; ExecShell "open" '"$R0"'
- ;
- ; The advantage of this way is that it would use the default browser to
- ; open the HTML.
- ;
-
- ; Delete the files (on reboot if file is in use)
- Delete /REBOOTOK $R0
-
+; viewhtml.nsi
+;
+; This script creates a silent installer which extracts one (or more) HTML
+; files to a temporary directory, opens Internet Explorer to view the file(s),
+; and when Internet Explorer has quit, deletes the file(s).
+
+;--------------------------------
+
+; The name of the installer (not really used in a silent install)
+Name "ViewHTML"
+
+; Set to silent mode
+SilentInstall silent
+
+; The file to write
+OutFile "viewhtml.exe"
+
+; Request application privileges for Windows Vista
+RequestExecutionLevel user
+
+;--------------------------------
+
+; The stuff to install
+Section ""
+
+ ; Get a temporary filename (in the Windows Temp directory)
+ GetTempFileName $R0
+
+ ; Extract file
+ ; Lets skip this one, it's not built to be showin in IE
+ ; File /oname=$R0 "..\Menu\compiler.html"
+ ; and write our own! :)
+ FileOpen $0 $R0 "w"
+ FileWrite $0 "<HTML><BODY><H1>HTML page for viewhtml.nsi</H1></BODY></HTML>"
+ FileClose $0
+
+ ; View file
+ ExecWait '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "$R0"'
+
+ ; Note: another way of doing this would be to use ExecShell, but then you
+ ; really couldn't get away with deleting the files. Here is the ExecShell
+ ; line that you would want to use:
+ ;
+ ; ExecShell "open" '"$R0"'
+ ;
+ ; The advantage of this way is that it would use the default browser to
+ ; open the HTML.
+ ;
+
+ ; Delete the files (on reboot if file is in use)
+ Delete /REBOOTOK $R0
+
SectionEnd \ No newline at end of file
diff --git a/Examples/waplugin.nsi b/Examples/waplugin.nsi
index 2b0929b..b5c1744 100755
--- a/Examples/waplugin.nsi
+++ b/Examples/waplugin.nsi
@@ -1,202 +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
-
-;--------------------------------
-
-;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\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
-
+; 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\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/INSTALL b/INSTALL
index 9191137..24f2ff4 100755
--- a/INSTALL
+++ b/INSTALL
@@ -1,74 +1,74 @@
-INSTALLING NSIS
-~~~~~~~~~~~~~~~
-
-This is a trimmed version of Appendix "Building NSIS" of the documentation.
-
- - Requirements
-
- * Python version 1.6 and above (http://www.python.org/)
- * SCons version 0.96.93 and above (http://www.scons.org/)
- * C compiler
-
- - Optional Tools
-
- * HTML Help Workshop for CHM documentation (http://msdn.microsoft.com/)
- * Cross compiler on POSIX platforms, i.e. MinGW (http://www.mingw.org/)
- * wxWidgets 2.8 for NSIS Menu (http://www.wxwidgets.org)
- WXWIN environment variable must be set to wxWidgets directory on Windows
-
- - Installing
-
- * type:
-
- scons PREFIX="C:\Program Files\NSIS" install
-
- - More options
-
- * For build options, type:
-
- scons -h
-
- * For SCons options, type:
-
- scons -H
-
- - Special cases
-
- * If using the Microsoft Visual C++ Toolkit 2003 and Platform SDK,
- add MSTOOLKIT=yes to the build command line. For example:
-
- scons MSTOOLKIT=yes PREFIX=C:\NSIS install
-
- If path problems occur, try:
-
- set MSSDK=C:\Path\To\Platform SDK
- set VCToolkitInstallDir=C:\Path\To\VCToolkit
- scons MSTOOLKIT=yes
-
- * If a cross compiler is not available on POSIX, use:
-
- scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all
- NSIS_CONFIG_CONST_DATA_PATH=no PREFIX=/path/to/extracted/zip
- install-compiler
-
- This should only build makensis and install it to the directory where
- a precompiled package, such as the nightly build or a zipped release
- version (nsis-x.xx.zip), is extracted.
-
- * Options for POSIX installs
-
- PREFIX: defaults to /usr/local
- PREFIX_BIN: Where to put native binaries. Defaults to $PREFIX/bin/
- PREFIX_CONF: Where to put the config file. Defaults to $PREFIX/etc/
- PREFIX_DATA: Where to put the plugins, stubs, etc. Defaults to $PREFIX/share/nsis/
- PREFIX_DOC: Where to put the docs and examples. Defaults to $PREFIX/share/doc/nsis/
- PREFIX_DEST: The install root Useful for packagers. Defaults to the root directory.
- PREFIX_INC_C: Where to put the C headers. Defaults to $PREFIX/include/nsis/
-
- - Problems
-
- * Get help in the forum:
- http://forums.winamp.com/forumdisplay.php?forumid=65
-
- * Report bugs in the bug tracker:
- http://sourceforge.net/tracker/?group_id=22049&atid=373085
+INSTALLING NSIS
+~~~~~~~~~~~~~~~
+
+This is a trimmed version of Appendix "Building NSIS" of the documentation.
+
+ - Requirements
+
+ * Python version 1.6 and above (http://www.python.org/)
+ * SCons version 0.96.93 and above (http://www.scons.org/)
+ * C compiler
+
+ - Optional Tools
+
+ * HTML Help Workshop for CHM documentation (http://msdn.microsoft.com/)
+ * Cross compiler on POSIX platforms, i.e. MinGW (http://www.mingw.org/)
+ * wxWidgets 2.8 for NSIS Menu (http://www.wxwidgets.org)
+ WXWIN environment variable must be set to wxWidgets directory on Windows
+
+ - Installing
+
+ * type:
+
+ scons PREFIX="C:\Program Files\NSIS" install
+
+ - More options
+
+ * For build options, type:
+
+ scons -h
+
+ * For SCons options, type:
+
+ scons -H
+
+ - Special cases
+
+ * If using the Microsoft Visual C++ Toolkit 2003 and Platform SDK,
+ add MSTOOLKIT=yes to the build command line. For example:
+
+ scons MSTOOLKIT=yes PREFIX=C:\NSIS install
+
+ If path problems occur, try:
+
+ set MSSDK=C:\Path\To\Platform SDK
+ set VCToolkitInstallDir=C:\Path\To\VCToolkit
+ scons MSTOOLKIT=yes
+
+ * If a cross compiler is not available on POSIX, use:
+
+ scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all
+ NSIS_CONFIG_CONST_DATA_PATH=no PREFIX=/path/to/extracted/zip
+ install-compiler
+
+ This should only build makensis and install it to the directory where
+ a precompiled package, such as the nightly build or a zipped release
+ version (nsis-x.xx.zip), is extracted.
+
+ * Options for POSIX installs
+
+ PREFIX: defaults to /usr/local
+ PREFIX_BIN: Where to put native binaries. Defaults to $PREFIX/bin/
+ PREFIX_CONF: Where to put the config file. Defaults to $PREFIX/etc/
+ PREFIX_DATA: Where to put the plugins, stubs, etc. Defaults to $PREFIX/share/nsis/
+ PREFIX_DOC: Where to put the docs and examples. Defaults to $PREFIX/share/doc/nsis/
+ PREFIX_DEST: The install root Useful for packagers. Defaults to the root directory.
+ PREFIX_INC_C: Where to put the C headers. Defaults to $PREFIX/include/nsis/
+
+ - Problems
+
+ * Get help in the forum:
+ http://forums.winamp.com/forumdisplay.php?forumid=65
+
+ * Report bugs in the bug tracker:
+ http://sourceforge.net/tracker/?group_id=22049&atid=373085
diff --git a/Include/Colors.nsh b/Include/Colors.nsh
index 64ca3a1..bf09269 100755
--- a/Include/Colors.nsh
+++ b/Include/Colors.nsh
@@ -1,75 +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
+!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/Include/FileFunc.nsh b/Include/FileFunc.nsh
index 745d1e1..46052f0 100755
--- a/Include/FileFunc.nsh
+++ b/Include/FileFunc.nsh
@@ -1,2435 +1,2435 @@
-/*
-_____________________________________________________________________________
-
- 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. !insertmacro FileFunction
- 3. [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]
-
- un.FileFunction=[un.Locate|un.GetSize|un.DriveSpace|un.GetDrives|un.GetTime|
- un.GetFileAttributes|un.GetFileVersion|un.GetExeName|
- un.GetExePath|un.GetParameters|un.GetOptions|un.GetOptionsS|
- un.GetRoot|un.GetParent|un.GetFileName|un.GetBaseName|
- un.GetFileExt|un.BannerTrimPath|un.DirState|un.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
-!define FILEFUNC_INCLUDED
-
-!verbose push
-!verbose 3
-!ifndef _FILEFUNC_VERBOSE
- !define _FILEFUNC_VERBOSE 3
-!endif
-!verbose ${_FILEFUNC_VERBOSE}
-!define FILEFUNC_VERBOSE `!insertmacro FILEFUNC_VERBOSE`
-!define _FILEFUNC_UN
-!define _FILEFUNC_S
-!verbose pop
-
-!macro FILEFUNC_VERBOSE _VERBOSE
- !verbose push
- !verbose 3
- !undef _FILEFUNC_VERBOSE
- !define _FILEFUNC_VERBOSE ${_VERBOSE}
- !verbose pop
-!macroend
-
-
-# Install. Case insensitive. #
-
-!macro LocateCall _PATH _OPTIONS _FUNC
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push $0
- Push `${_PATH}`
- Push `${_OPTIONS}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call Locate
- Pop $0
- !verbose pop
-!macroend
-
-!macro GetSizeCall _PATH _OPTIONS _RESULT1 _RESULT2 _RESULT3
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Push `${_OPTIONS}`
- Call GetSize
- Pop ${_RESULT1}
- Pop ${_RESULT2}
- Pop ${_RESULT3}
- !verbose pop
-!macroend
-
-!macro DriveSpaceCall _DRIVE _OPTIONS _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_DRIVE}`
- Push `${_OPTIONS}`
- Call DriveSpace
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetDrivesCall _DRV _FUNC
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push $0
- Push `${_DRV}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call 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}`
- Call 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}`
- Call GetFileAttributes
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetFileVersionCall _FILE _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILE}`
- Call GetFileVersion
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetExeNameCall _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call GetExeName
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetExePathCall _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call GetExePath
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetParametersCall _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call GetParameters
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetOptionsCall _PARAMETERS _OPTION _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PARAMETERS}`
- Push `${_OPTION}`
- Call GetOptions
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetRootCall _FULLPATH _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FULLPATH}`
- Call GetRoot
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetParentCall _PATHSTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATHSTRING}`
- Call GetParent
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetFileNameCall _PATHSTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATHSTRING}`
- Call GetFileName
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetBaseNameCall _FILESTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILESTRING}`
- Call GetBaseName
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetFileExtCall _FILESTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILESTRING}`
- Call GetFileExt
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro BannerTrimPathCall _PATH _LENGHT _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Push `${_LENGHT}`
- Call BannerTrimPath
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro DirStateCall _PATH _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Call DirState
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro RefreshShellIconsCall
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call RefreshShellIcons
- !verbose pop
-!macroend
-
-!macro Locate
- !ifndef ${_FILEFUNC_UN}Locate
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}Locate `!insertmacro ${_FILEFUNC_UN}LocateCall`
-
- Function ${_FILEFUNC_UN}Locate
- 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 error
-
- option:
- StrCpy $R9 $1 1
- StrCpy $1 $1 '' 1
- StrCmp $R9 ' ' -2
- StrCmp $R9 '' 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 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 error
- goto option
-
- mask:
- StrCmp $R9 'M=' 0 size
- StrCpy $4 $R8
- goto option
-
- size:
- StrCmp $R9 'S=' 0 gotosubdir
- StrCpy $6 $R8
- goto option
-
- gotosubdir:
- StrCmp $R9 'G=' 0 banner
- StrCpy $7 $R8
- StrCmp $7 '' +3
- StrCmp $7 '1' +2
- StrCmp $7 '0' 0 error
- goto option
-
- banner:
- StrCmp $R9 'B=' 0 error
- StrCpy $R7 $R8
- StrCmp $R7 '' +3
- StrCmp $R7 '1' +2
- StrCmp $R7 '0' 0 error
- goto option
-
- sizeset:
- StrCmp $6 '' 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 default
- StrCmp $1 'K' 0 +3
- StrCpy $1 1024
- goto default
- StrCmp $1 'M' 0 +3
- StrCpy $1 1048576
- goto default
- StrCmp $1 'G' 0 error
- StrCpy $1 1073741824
-
- 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
-
- nextdir:
- IntOp $8 $8 - 1
- Pop $R8
-
- StrCpy $9 $7 2 2
- StrCmp $9 'B0' +3
- GetLabelAddress $9 findfirst
- goto call
- DetailPrint 'Search in: $R8'
-
- findfirst:
- FindFirst $0 $R7 '$R8\$4'
- IfErrors subdir
- StrCmp $R7 '.' 0 dir
- FindNext $0 $R7
- StrCmp $R7 '..' 0 dir
- FindNext $0 $R7
- IfErrors 0 dir
- FindClose $0
- goto subdir
-
- dir:
- IfFileExists '$R8\$R7\*.*' 0 file
- StrCpy $R6 ''
- StrCmp $3 'DE' +4
- StrCmp $3 'FDE' +3
- StrCmp $3 'FD' precall
- StrCmp $3 'F' findnext precall
- FindFirst $9 $R9 '$R8\$R7\*.*'
- StrCmp $R9 '.' 0 +4
- FindNext $9 $R9
- StrCmp $R9 '..' 0 +2
- FindNext $9 $R9
- FindClose $9
- IfErrors precall findnext
-
- file:
- StrCmp $3 'FDE' +3
- StrCmp $3 'FD' +2
- StrCmp $3 'F' 0 findnext
- StrCpy $R6 0
- StrCmp $5$6 '' 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 findnext
- StrCmp $6 '' +2
- IntCmp $R6 $6 0 0 findnext
-
- 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 error
- StrCmp $R9 'StopLocate' 0 +3
- FindClose $0
- goto clearstack
- goto $9
-
- findnext:
- FindNext $0 $R7
- IfErrors 0 dir
- FindClose $0
-
- subdir:
- StrCpy $9 $7 2
- StrCmp $9 'G0' end
- FindFirst $0 $R7 '$R8\*.*'
- StrCmp $R7 '.' 0 pushdir
- FindNext $0 $R7
- StrCmp $R7 '..' 0 pushdir
- FindNext $0 $R7
- IfErrors 0 pushdir
- FindClose $0
- StrCmp $8 0 end nextdir
-
- pushdir:
- IfFileExists '$R8\$R7\*.*' 0 +3
- Push '$R8\$R7'
- IntOp $8 $8 + 1
- FindNext $0 $R7
- IfErrors 0 pushdir
- FindClose $0
- StrCmp $8 0 end nextdir
-
- error:
- SetErrors
-
- clearstack:
- StrCmp $8 0 end
- IntOp $8 $8 - 1
- Pop $R8
- goto clearstack
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetSize
- !ifndef ${_FILEFUNC_UN}GetSize
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetSize `!insertmacro ${_FILEFUNC_UN}GetSizeCall`
-
- Function ${_FILEFUNC_UN}GetSize
- 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 error
-
- StrCpy $3 ''
- StrCpy $4 ''
- StrCpy $5 ''
- StrCpy $6 ''
- StrCpy $8 0
- StrCpy $R3 ''
- StrCpy $R4 ''
- StrCpy $R5 ''
-
- option:
- StrCpy $R9 $1 1
- StrCpy $1 $1 '' 1
- StrCmp $R9 ' ' -2
- StrCmp $R9 '' 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 size
- StrCpy $4 $8
- goto option
-
- size:
- StrCmp $R9 'S=' 0 gotosubdir
- StrCpy $6 $8
- goto option
-
- gotosubdir:
- StrCmp $R9 'G=' 0 error
- StrCpy $7 $8
- StrCmp $7 '' +3
- StrCmp $7 '1' +2
- StrCmp $7 '0' 0 error
- goto option
-
- sizeset:
- StrCmp $6 '' 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 default
- StrCmp $1 'K' 0 +4
- StrCpy $1 1024
- StrCpy $2 Kb
- goto default
- StrCmp $1 'M' 0 +4
- StrCpy $1 1048576
- StrCpy $2 Mb
- goto default
- StrCmp $1 'G' 0 error
- StrCpy $1 1073741824
- StrCpy $2 Gb
-
- default:
- StrCmp $4 '' 0 +2
- StrCpy $4 '*.*'
- StrCmp $7 '' 0 +2
- StrCpy $7 '1'
-
- StrCpy $8 1
- Push $0
- SetDetailsPrint textonly
-
- nextdir:
- IntOp $8 $8 - 1
- Pop $R8
- FindFirst $0 $R7 '$R8\$4'
- IfErrors show
- StrCmp $R7 '.' 0 dir
- FindNext $0 $R7
- StrCmp $R7 '..' 0 dir
- FindNext $0 $R7
- IfErrors 0 dir
- FindClose $0
- goto show
-
- dir:
- IfFileExists '$R8\$R7\*.*' 0 file
- IntOp $R5 $R5 + 1
- goto findnext
-
- file:
- StrCpy $R6 0
- StrCmp $5$6 '' 0 +3
- IntOp $R4 $R4 + 1
- goto findnext
- FileOpen $9 '$R8\$R7' r
- IfErrors +3
- FileSeek $9 0 END $R6
- FileClose $9
- StrCmp $5 '' +2
- IntCmp $R6 $5 0 findnext
- StrCmp $6 '' +2
- IntCmp $R6 $6 0 0 findnext
- IntOp $R4 $R4 + 1
- System::Int64Op /NOUNLOAD $R3 + $R6
- Pop $R3
-
- findnext:
- FindNext $0 $R7
- IfErrors 0 dir
- FindClose $0
-
- show:
- StrCmp $5$6 '' nosize
- System::Int64Op /NOUNLOAD $R3 / $1
- Pop $9
- DetailPrint 'Size:$9 $2 Files:$R4 Folders:$R5'
- goto subdir
- nosize:
- DetailPrint 'Files:$R4 Folders:$R5'
-
- subdir:
- StrCmp $7 0 preend
- FindFirst $0 $R7 '$R8\*.*'
- StrCmp $R7 '.' 0 pushdir
- FindNext $0 $R7
- StrCmp $R7 '..' 0 pushdir
- FindNext $0 $R7
- IfErrors 0 pushdir
- FindClose $0
- StrCmp $8 0 preend nextdir
-
- pushdir:
- IfFileExists '$R8\$R7\*.*' 0 +3
- Push '$R8\$R7'
- IntOp $8 $8 + 1
- FindNext $0 $R7
- IfErrors 0 pushdir
- FindClose $0
- StrCmp $8 0 preend nextdir
-
- preend:
- StrCmp $R3 '' nosizeend
- System::Int64Op $R3 / $1
- Pop $R3
- nosizeend:
- StrCpy $2 $R4
- StrCpy $1 $R5
- StrCpy $0 $R3
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
- StrCpy $1 ''
- StrCpy $2 ''
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro DriveSpace
- !ifndef ${_FILEFUNC_UN}DriveSpace
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}DriveSpace `!insertmacro ${_FILEFUNC_UN}DriveSpaceCall`
-
- Function ${_FILEFUNC_UN}DriveSpace
- 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 error
-
- StrCpy $5 ''
- StrCpy $6 ''
-
- option:
- StrCpy $2 $1 1
- StrCpy $1 $1 '' 1
- StrCmp $2 ' ' -2
- StrCmp $2 '' 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 unit
- StrCpy $5 $4
- StrCmp $5 '' +4
- StrCmp $5 'T' +3
- StrCmp $5 'O' +2
- StrCmp $5 'F' 0 error
- goto option
-
- unit:
- StrCmp $2 'S=' 0 error
- StrCpy $6 $4
- goto option
-
- default:
- StrCmp $5 '' 0 +2
- StrCpy $5 'T'
- StrCmp $6 '' 0 +3
- StrCpy $6 '1'
- goto getspace
-
- StrCmp $6 'B' 0 +3
- StrCpy $6 1
- goto getspace
- StrCmp $6 'K' 0 +3
- StrCpy $6 1024
- goto getspace
- StrCmp $6 'M' 0 +3
- StrCpy $6 1048576
- goto getspace
- StrCmp $6 'G' 0 error
- StrCpy $6 1073741824
-
- getspace:
- System::Call /NOUNLOAD 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l)i(r0,.r2,.r3,.)'
-
- StrCmp $5 T 0 +3
- StrCpy $0 $3
- goto getsize
- StrCmp $5 O 0 +4
- System::Int64Op /NOUNLOAD $3 - $2
- Pop $0
- goto getsize
- StrCmp $5 F 0 +2
- StrCpy $0 $2
-
- getsize:
- System::Int64Op $0 / $6
- Pop $0
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetDrives
- !ifndef ${_FILEFUNC_UN}GetDrives
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetDrives `!insertmacro ${_FILEFUNC_UN}GetDrivesCall`
-
- Function ${_FILEFUNC_UN}GetDrives
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- Push $5
- Push $6
- Push $8
- Push $9
-
- System::Alloc /NOUNLOAD 1024
- Pop $2
- System::Call /NOUNLOAD 'kernel32::GetLogicalDriveStringsA(i,i) i(1024, r2)'
-
- StrCmp $0 ALL drivestring
- StrCmp $0 '' 0 typeset
- StrCpy $0 ALL
- goto drivestring
-
- typeset:
- StrCpy $6 -1
- IntOp $6 $6 + 1
- StrCpy $8 $0 1 $6
- StrCmp $8$0 '' 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 drivestring
- StrCmp $8 'HDD' 0 +3
- StrCpy $6 3
- goto drivestring
- StrCmp $8 'NET' 0 +3
- StrCpy $6 4
- goto drivestring
- StrCmp $8 'CDROM' 0 +3
- StrCpy $6 5
- goto drivestring
- StrCmp $8 'RAM' 0 typeset
- StrCpy $6 6
-
- drivestring:
- StrCpy $3 $2
-
- enumok:
- System::Call /NOUNLOAD 'kernel32::lstrlenA(t) i(i r3) .r4'
- StrCmp $4$0 '0ALL' enumex
- StrCmp $4 0 typeset
- System::Call /NOUNLOAD 'kernel32::GetDriveTypeA(t) i(i r3) .r5'
-
- StrCmp $0 ALL +2
- StrCmp $5 $6 letter enumnext
- StrCmp $5 2 0 +3
- StrCpy $8 FDD
- goto letter
- StrCmp $5 3 0 +3
- StrCpy $8 HDD
- goto letter
- StrCmp $5 4 0 +3
- StrCpy $8 NET
- goto letter
- StrCmp $5 5 0 +3
- StrCpy $8 CDROM
- goto letter
- StrCmp $5 6 0 enumex
- StrCpy $8 RAM
-
- letter:
- System::Call /NOUNLOAD '*$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' enumex
-
- enumnext:
- IntOp $3 $3 + $4
- IntOp $3 $3 + 1
- goto enumok
-
- enumex:
- System::Free $2
-
- Pop $9
- Pop $8
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetTime
- !ifndef ${_FILEFUNC_UN}GetTime
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetTime `!insertmacro ${_FILEFUNC_UN}GetTimeCall`
-
- Function ${_FILEFUNC_UN}GetTime
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- Push $5
- Push $6
- Push $7
- ClearErrors
-
- StrCmp $1 'L' gettime
- StrCmp $1 'A' getfile
- StrCmp $1 'C' getfile
- StrCmp $1 'M' getfile
- StrCmp $1 'LS' gettime
- StrCmp $1 'AS' getfile
- StrCmp $1 'CS' getfile
- StrCmp $1 'MS' getfile
- goto error
-
- getfile:
- IfFileExists $0 0 error
- System::Call /NOUNLOAD '*(i,l,l,l,i,i,i,i,&t260,&t14) i .r6'
- System::Call /NOUNLOAD 'kernel32::FindFirstFileA(t,i)i(r0,r6) .r2'
- System::Call /NOUNLOAD 'kernel32::FindClose(i)i(r2)'
-
- gettime:
- System::Call /NOUNLOAD '*(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2) i .r7'
- StrCmp $1 'L' 0 systemtime
- System::Call /NOUNLOAD 'kernel32::GetLocalTime(i)i(r7)'
- goto convert
- systemtime:
- StrCmp $1 'LS' 0 filetime
- System::Call /NOUNLOAD 'kernel32::GetSystemTime(i)i(r7)'
- goto convert
-
- filetime:
- System::Call /NOUNLOAD '*$6(i,l,l,l,i,i,i,i,&t260,&t14)i(,.r4,.r3,.r2)'
- System::Free /NOUNLOAD $6
- StrCmp $1 'A' 0 +3
- StrCpy $2 $3
- goto tolocal
- StrCmp $1 'C' 0 +3
- StrCpy $2 $4
- goto tolocal
- StrCmp $1 'M' tolocal
-
- StrCmp $1 'AS' tosystem
- StrCmp $1 'CS' 0 +3
- StrCpy $3 $4
- goto tosystem
- StrCmp $1 'MS' 0 +3
- StrCpy $3 $2
- goto tosystem
-
- tolocal:
- System::Call /NOUNLOAD 'kernel32::FileTimeToLocalFileTime(*l,*l)i(r2,.r3)'
- tosystem:
- System::Call /NOUNLOAD 'kernel32::FileTimeToSystemTime(*l,i)i(r3,r7)'
-
- convert:
- System::Call /NOUNLOAD '*$7(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2)i(.r5,.r6,.r4,.r0,.r3,.r2,.r1,)'
- System::Free $7
-
- IntCmp $0 9 0 0 +2
- StrCpy $0 '0$0'
- IntCmp $1 9 0 0 +2
- StrCpy $1 '0$1'
- IntCmp $2 9 0 0 +2
- StrCpy $2 '0$2'
- IntCmp $6 9 0 0 +2
- StrCpy $6 '0$6'
-
- StrCmp $4 0 0 +3
- StrCpy $4 Sunday
- goto end
- StrCmp $4 1 0 +3
- StrCpy $4 Monday
- goto end
- StrCmp $4 2 0 +3
- StrCpy $4 Tuesday
- goto end
- StrCmp $4 3 0 +3
- StrCpy $4 Wednesday
- goto end
- StrCmp $4 4 0 +3
- StrCpy $4 Thursday
- goto end
- StrCmp $4 5 0 +3
- StrCpy $4 Friday
- goto end
- StrCmp $4 6 0 error
- StrCpy $4 Saturday
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
- StrCpy $1 ''
- StrCpy $2 ''
- StrCpy $3 ''
- StrCpy $4 ''
- StrCpy $5 ''
- StrCpy $6 ''
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetFileAttributes
- !ifndef ${_FILEFUNC_UN}GetFileAttributes
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetFileAttributes `!insertmacro ${_FILEFUNC_UN}GetFileAttributesCall`
-
- Function ${_FILEFUNC_UN}GetFileAttributes
- 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 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 '' end
- StrCmp $1 'ALL' end
-
- 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 '' notfound
- StrCmp $4 $2 0 -3
- StrCmp $1 '' 0 attrcmp
- StrCpy $0 1
- goto end
-
- notfound:
- StrCpy $0 0
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetFileVersion
- !ifndef ${_FILEFUNC_UN}GetFileVersion
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetFileVersion `!insertmacro ${_FILEFUNC_UN}GetFileVersionCall`
-
- Function ${_FILEFUNC_UN}GetFileVersion
- Exch $0
- Push $1
- Push $2
- Push $3
- Push $4
- Push $5
- Push $6
- ClearErrors
-
- GetDllVersion '$0' $1 $2
- IfErrors 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 end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetExeName
- !ifndef ${_FILEFUNC_UN}GetExeName
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetExeName `!insertmacro ${_FILEFUNC_UN}GetExeNameCall`
-
- Function ${_FILEFUNC_UN}GetExeName
- Push $0
- Push $1
- Push $2
- System::Call /NOUNLOAD 'kernel32::GetModuleFileNameA(i 0, t .r0, i 1024)'
- System::Call 'kernel32::GetLongPathNameA(t r0, t .r1, i 1024)i .r2'
- StrCmp $2 error +2
- StrCpy $0 $1
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetExePath
- !ifndef ${_FILEFUNC_UN}GetExePath
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetExePath `!insertmacro ${_FILEFUNC_UN}GetExePathCall`
-
- Function ${_FILEFUNC_UN}GetExePath
- Push $0
- Push $1
- Push $2
- StrCpy $0 $EXEDIR
- System::Call 'kernel32::GetLongPathNameA(t r0, t .r1, i 1024)i .r2'
- StrCmp $2 error +2
- StrCpy $0 $1
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetParameters
- !ifndef ${_FILEFUNC_UN}GetParameters
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetParameters `!insertmacro ${_FILEFUNC_UN}GetParametersCall`
-
- Function ${_FILEFUNC_UN}GetParameters
- Push $0
- Push $1
- Push $2
-
- StrCpy $1 1
- StrCpy $0 $CMDLINE 1
- StrCmp $0 '"' 0 +3
- StrCpy $2 '"'
- goto +2
- StrCpy $2 ' '
-
- IntOp $1 $1 + 1
- StrCpy $0 $CMDLINE 1 $1
- StrCmp $0 $2 +2
- StrCmp $0 '' end -3
-
- IntOp $1 $1 + 1
- StrCpy $0 $CMDLINE 1 $1
- StrCmp $0 ' ' -2
- StrCpy $0 $CMDLINE '' $1
-
- StrCpy $1 $0 1 -1
- StrCmp $1 ' ' 0 +3
- StrCpy $0 $0 -1
- goto -3
-
- end:
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetOptions
- !ifndef ${_FILEFUNC_UN}GetOptions${_FILEFUNC_S}
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetOptions${_FILEFUNC_S} `!insertmacro ${_FILEFUNC_UN}GetOptions${_FILEFUNC_S}Call`
-
- Function ${_FILEFUNC_UN}GetOptions${_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
-
- begin:
- StrCpy $4 -1
- StrCpy $6 ''
-
- quote:
- IntOp $4 $4 + 1
- StrCpy $5 $0 1 $4
- StrCmp${_FILEFUNC_S} $5$7 '0' notfound
- StrCmp${_FILEFUNC_S} $5 '' trimright
- StrCmp${_FILEFUNC_S} $5 '"' 0 +7
- StrCmp${_FILEFUNC_S} $6 '' 0 +3
- StrCpy $6 '"'
- goto quote
- StrCmp${_FILEFUNC_S} $6 '"' 0 +3
- StrCpy $6 ''
- goto quote
- StrCmp${_FILEFUNC_S} $5 `'` 0 +7
- StrCmp${_FILEFUNC_S} $6 `` 0 +3
- StrCpy $6 `'`
- goto quote
- StrCmp${_FILEFUNC_S} $6 `'` 0 +3
- StrCpy $6 ``
- goto quote
- StrCmp${_FILEFUNC_S} $5 '`' 0 +7
- StrCmp${_FILEFUNC_S} $6 '' 0 +3
- StrCpy $6 '`'
- goto quote
- StrCmp${_FILEFUNC_S} $6 '`' 0 +3
- StrCpy $6 ''
- goto quote
- StrCmp${_FILEFUNC_S} $6 '"' quote
- StrCmp${_FILEFUNC_S} $6 `'` quote
- StrCmp${_FILEFUNC_S} $6 '`' quote
- StrCmp${_FILEFUNC_S} $5 $1 0 quote
- StrCmp${_FILEFUNC_S} $7 0 trimleft trimright
-
- trimleft:
- IntOp $4 $4 + 1
- StrCpy $5 $0 $3 $4
- StrCmp${_FILEFUNC_S} $5 '' notfound
- StrCmp${_FILEFUNC_S} $5 $2 0 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 begin
-
- 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 end
- StrCmp${_FILEFUNC_S} $3 '"' +3
- StrCmp${_FILEFUNC_S} $3 `'` +2
- StrCmp${_FILEFUNC_S} $3 '`' 0 end
- StrCpy $0 $0 -1 1
- goto end
-
- notfound:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-
-!macro GetRoot
- !ifndef ${_FILEFUNC_UN}GetRoot
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetRoot `!insertmacro ${_FILEFUNC_UN}GetRootCall`
-
- Function ${_FILEFUNC_UN}GetRoot
- Exch $0
- Push $1
- Push $2
- Push $3
-
- StrCpy $1 $0 2
- StrCmp $1 '\\' UNC
- StrCpy $2 $1 1 1
- StrCmp $2 ':' 0 empty
- StrCpy $0 $1
- goto end
-
- UNC:
- StrCpy $2 1
- StrCpy $3 ''
-
- loop:
- IntOp $2 $2 + 1
- StrCpy $1 $0 1 $2
- StrCmp $1$3 '' empty
- StrCmp $1 '' +5
- StrCmp $1 '\' 0 loop
- StrCmp $3 '1' +3
- StrCpy $3 '1'
- goto loop
- StrCpy $0 $0 $2
- StrCpy $2 $0 1 -1
- StrCmp $2 '\' 0 end
-
- empty:
- StrCpy $0 ''
-
- end:
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetParent
- !ifndef ${_FILEFUNC_UN}GetParent
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetParent `!insertmacro ${_FILEFUNC_UN}GetParentCall`
-
- Function ${_FILEFUNC_UN}GetParent
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetFileName
- !ifndef ${_FILEFUNC_UN}GetFileName
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetFileName `!insertmacro ${_FILEFUNC_UN}GetFileNameCall`
-
- Function ${_FILEFUNC_UN}GetFileName
- 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 '' end
- StrCmp $2 '\' 0 -3
- IntOp $1 $1 + 1
- StrCpy $0 $0 '' $1
-
- end:
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetBaseName
- !ifndef ${_FILEFUNC_UN}GetBaseName
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetBaseName `!insertmacro ${_FILEFUNC_UN}GetBaseNameCall`
-
- Function ${_FILEFUNC_UN}GetBaseName
- Exch $0
- Push $1
- Push $2
- Push $3
-
- StrCpy $1 0
- StrCpy $3 ''
-
- loop:
- IntOp $1 $1 - 1
- StrCpy $2 $0 1 $1
- StrCmp $2 '' trimpath
- StrCmp $2 '\' trimpath
- StrCmp $3 'noext' loop
- StrCmp $2 '.' 0 loop
- StrCpy $0 $0 $1
- StrCpy $3 'noext'
- StrCpy $1 0
- goto loop
-
- trimpath:
- StrCmp $1 -1 empty
- IntOp $1 $1 + 1
- StrCpy $0 $0 '' $1
- goto end
-
- empty:
- StrCpy $0 ''
-
- end:
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro GetFileExt
- !ifndef ${_FILEFUNC_UN}GetFileExt
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}GetFileExt `!insertmacro ${_FILEFUNC_UN}GetFileExtCall`
-
- Function ${_FILEFUNC_UN}GetFileExt
- Exch $0
- Push $1
- Push $2
-
- StrCpy $1 0
-
- loop:
- IntOp $1 $1 - 1
- StrCpy $2 $0 1 $1
- StrCmp $2 '' empty
- StrCmp $2 '\' empty
- StrCmp $2 '.' 0 loop
-
- StrCmp $1 -1 empty
- IntOp $1 $1 + 1
- StrCpy $0 $0 '' $1
- goto end
-
- empty:
- StrCpy $0 ''
-
- end:
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro BannerTrimPath
- !ifndef ${_FILEFUNC_UN}BannerTrimPath
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}BannerTrimPath `!insertmacro ${_FILEFUNC_UN}BannerTrimPathCall`
-
- Function ${_FILEFUNC_UN}BannerTrimPath
- 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 end end
- IntOp $1 $1 - 3
- IntCmp $1 0 empty empty
- StrCmp $3 'A' A-trim
- StrCmp $3 'B' B-trim
- StrCmp $3 'C' C-trim
- StrCmp $3 'D' D-trim
-
- A-trim:
- StrCpy $3 $0 1 1
- StrCpy $2 0
- StrCmp $3 ':' 0 +2
- IntOp $2 $2 + 2
-
- loopleft:
- IntOp $2 $2 + 1
- StrCpy $3 $0 1 $2
- StrCmp $2 $1 C-trim
- StrCmp $3 '\' 0 loopleft
- StrCpy $3 $0 $2
- IntOp $2 $2 - $1
- IntCmp $2 0 B-trim 0 B-trim
-
- loopright:
- IntOp $2 $2 + 1
- StrCpy $4 $0 1 $2
- StrCmp $2 0 B-trim
- StrCmp $4 '\' 0 loopright
- StrCpy $4 $0 '' $2
- StrCpy $0 '$3\...$4'
- goto end
-
- B-trim:
- StrCpy $2 $1
- IntOp $2 $2 - 1
- StrCmp $2 -1 C-trim
- StrCpy $3 $0 1 $2
- StrCmp $3 '\' 0 -3
- StrCpy $0 $0 $2
- StrCpy $0 '$0\...'
- goto end
-
- C-trim:
- StrCpy $0 $0 $1
- StrCpy $0 '$0...'
- goto end
-
- D-trim:
- StrCpy $3 -1
- IntOp $3 $3 - 1
- StrCmp $3 -$2 C-trim
- StrCpy $4 $0 1 $3
- StrCmp $4 '\' 0 -3
- StrCpy $4 $0 '' $3
- IntOp $3 $1 + $3
- IntCmp $3 2 C-trim C-trim
- StrCpy $0 $0 $3
- StrCpy $0 '$0...$4'
- goto end
-
- empty:
- StrCpy $0 ''
-
- end:
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro DirState
- !ifndef ${_FILEFUNC_UN}DirState
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}DirState `!insertmacro ${_FILEFUNC_UN}DirStateCall`
-
- Function ${_FILEFUNC_UN}DirState
- Exch $0
- Push $1
- ClearErrors
-
- FindFirst $1 $0 '$0\*.*'
- IfErrors 0 +3
- StrCpy $0 -1
- goto end
- StrCmp $0 '.' 0 +4
- FindNext $1 $0
- StrCmp $0 '..' 0 +2
- FindNext $1 $0
- FindClose $1
- IfErrors 0 +3
- StrCpy $0 0
- goto end
- StrCpy $0 1
-
- end:
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro RefreshShellIcons
- !ifndef ${_FILEFUNC_UN}RefreshShellIcons
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !define ${_FILEFUNC_UN}RefreshShellIcons `!insertmacro ${_FILEFUNC_UN}RefreshShellIconsCall`
-
- Function ${_FILEFUNC_UN}RefreshShellIcons
- System::Call 'shell32::SHChangeNotify(i 0x08000000, i 0, i 0, i 0)'
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-
-# Uninstall. Case insensitive. #
-
-!macro un.LocateCall _PATH _OPTIONS _FUNC
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push $0
- Push `${_PATH}`
- Push `${_OPTIONS}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.Locate
- Pop $0
- !verbose pop
-!macroend
-
-!macro un.GetSizeCall _PATH _OPTIONS _RESULT1 _RESULT2 _RESULT3
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Push `${_OPTIONS}`
- Call un.GetSize
- Pop ${_RESULT1}
- Pop ${_RESULT2}
- Pop ${_RESULT3}
- !verbose pop
-!macroend
-
-!macro un.DriveSpaceCall _DRIVE _OPTIONS _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_DRIVE}`
- Push `${_OPTIONS}`
- Call un.DriveSpace
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetDrivesCall _DRV _FUNC
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push $0
- Push `${_DRV}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.GetDrives
- Pop $0
- !verbose pop
-!macroend
-
-!macro un.GetTimeCall _FILE _OPTION _RESULT1 _RESULT2 _RESULT3 _RESULT4 _RESULT5 _RESULT6 _RESULT7
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_OPTION}`
- Call un.GetTime
- Pop ${_RESULT1}
- Pop ${_RESULT2}
- Pop ${_RESULT3}
- Pop ${_RESULT4}
- Pop ${_RESULT5}
- Pop ${_RESULT6}
- Pop ${_RESULT7}
- !verbose pop
-!macroend
-
-!macro un.GetFileAttributesCall _PATH _ATTR _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Push `${_ATTR}`
- Call un.GetFileAttributes
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetFileVersionCall _FILE _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILE}`
- Call un.GetFileVersion
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetExeNameCall _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call un.GetExeName
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetExePathCall _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call un.GetExePath
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetParametersCall _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call un.GetParameters
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetOptionsCall _PARAMETERS _OPTION _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PARAMETERS}`
- Push `${_OPTION}`
- Call un.GetOptions
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetRootCall _FULLPATH _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FULLPATH}`
- Call un.GetRoot
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetParentCall _PATHSTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATHSTRING}`
- Call un.GetParent
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetFileNameCall _PATHSTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATHSTRING}`
- Call un.GetFileName
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetBaseNameCall _FILESTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILESTRING}`
- Call un.GetBaseName
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetFileExtCall _FILESTRING _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_FILESTRING}`
- Call un.GetFileExt
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.BannerTrimPathCall _PATH _LENGHT _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Push `${_LENGHT}`
- Call un.BannerTrimPath
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.DirStateCall _PATH _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PATH}`
- Call un.DirState
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.RefreshShellIconsCall
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Call un.RefreshShellIcons
- !verbose pop
-!macroend
-
-!macro un.Locate
- !ifndef un.Locate
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro Locate
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetSize
- !ifndef un.GetSize
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetSize
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.DriveSpace
- !ifndef un.DriveSpace
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro DriveSpace
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetDrives
- !ifndef un.GetDrives
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetDrives
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetTime
- !ifndef un.GetTime
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetTime
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetFileAttributes
- !ifndef un.GetFileAttributes
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetFileAttributes
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetFileVersion
- !ifndef un.GetFileVersion
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetFileVersion
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetExeName
- !ifndef un.GetExeName
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetExeName
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetExePath
- !ifndef un.GetExePath
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetExePath
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetParameters
- !ifndef un.GetParameters
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetParameters
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetOptions
- !ifndef un.GetOptions
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetOptions
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetRoot
- !ifndef un.GetRoot
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetRoot
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetParent
- !ifndef un.GetParent
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetParent
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetFileName
- !ifndef un.GetFileName
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetFileName
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetBaseName
- !ifndef un.GetBaseName
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetBaseName
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.GetFileExt
- !ifndef un.GetFileExt
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro GetFileExt
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.BannerTrimPath
- !ifndef un.BannerTrimPath
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro BannerTrimPath
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.DirState
- !ifndef un.DirState
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro DirState
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.RefreshShellIcons
- !ifndef un.RefreshShellIcons
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
-
- !insertmacro RefreshShellIcons
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-
-# Install. Case sensitive. #
-
-!macro GetOptionsSCall _PARAMETERS _OPTION _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PARAMETERS}`
- Push `${_OPTION}`
- Call GetOptionsS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro GetOptionsS
- !ifndef GetOptionsS
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_S
- !define _FILEFUNC_S `S`
-
- !insertmacro GetOptions
-
- !undef _FILEFUNC_S
- !define _FILEFUNC_S
- !verbose pop
- !endif
-!macroend
-
-
-# Uninstall. Case sensitive. #
-
-!macro un.GetOptionsSCall _PARAMETERS _OPTION _RESULT
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- Push `${_PARAMETERS}`
- Push `${_OPTION}`
- Call un.GetOptionsS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.GetOptionsS
- !ifndef un.GetOptionsS
- !verbose push
- !verbose ${_FILEFUNC_VERBOSE}
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN `un.`
- !undef _FILEFUNC_S
- !define _FILEFUNC_S `S`
-
- !insertmacro GetOptions
-
- !undef _FILEFUNC_UN
- !define _FILEFUNC_UN
- !undef _FILEFUNC_S
- !define _FILEFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!endif
+/*
+_____________________________________________________________________________
+
+ 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. !insertmacro FileFunction
+ 3. [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]
+
+ un.FileFunction=[un.Locate|un.GetSize|un.DriveSpace|un.GetDrives|un.GetTime|
+ un.GetFileAttributes|un.GetFileVersion|un.GetExeName|
+ un.GetExePath|un.GetParameters|un.GetOptions|un.GetOptionsS|
+ un.GetRoot|un.GetParent|un.GetFileName|un.GetBaseName|
+ un.GetFileExt|un.BannerTrimPath|un.DirState|un.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
+!define FILEFUNC_INCLUDED
+
+!verbose push
+!verbose 3
+!ifndef _FILEFUNC_VERBOSE
+ !define _FILEFUNC_VERBOSE 3
+!endif
+!verbose ${_FILEFUNC_VERBOSE}
+!define FILEFUNC_VERBOSE `!insertmacro FILEFUNC_VERBOSE`
+!define _FILEFUNC_UN
+!define _FILEFUNC_S
+!verbose pop
+
+!macro FILEFUNC_VERBOSE _VERBOSE
+ !verbose push
+ !verbose 3
+ !undef _FILEFUNC_VERBOSE
+ !define _FILEFUNC_VERBOSE ${_VERBOSE}
+ !verbose pop
+!macroend
+
+
+# Install. Case insensitive. #
+
+!macro LocateCall _PATH _OPTIONS _FUNC
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push $0
+ Push `${_PATH}`
+ Push `${_OPTIONS}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call Locate
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro GetSizeCall _PATH _OPTIONS _RESULT1 _RESULT2 _RESULT3
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Push `${_OPTIONS}`
+ Call GetSize
+ Pop ${_RESULT1}
+ Pop ${_RESULT2}
+ Pop ${_RESULT3}
+ !verbose pop
+!macroend
+
+!macro DriveSpaceCall _DRIVE _OPTIONS _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_DRIVE}`
+ Push `${_OPTIONS}`
+ Call DriveSpace
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetDrivesCall _DRV _FUNC
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push $0
+ Push `${_DRV}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call 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}`
+ Call 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}`
+ Call GetFileAttributes
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetFileVersionCall _FILE _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILE}`
+ Call GetFileVersion
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetExeNameCall _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call GetExeName
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetExePathCall _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call GetExePath
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetParametersCall _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call GetParameters
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetOptionsCall _PARAMETERS _OPTION _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PARAMETERS}`
+ Push `${_OPTION}`
+ Call GetOptions
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetRootCall _FULLPATH _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FULLPATH}`
+ Call GetRoot
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetParentCall _PATHSTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATHSTRING}`
+ Call GetParent
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetFileNameCall _PATHSTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATHSTRING}`
+ Call GetFileName
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetBaseNameCall _FILESTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILESTRING}`
+ Call GetBaseName
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetFileExtCall _FILESTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILESTRING}`
+ Call GetFileExt
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro BannerTrimPathCall _PATH _LENGHT _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Push `${_LENGHT}`
+ Call BannerTrimPath
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro DirStateCall _PATH _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Call DirState
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro RefreshShellIconsCall
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call RefreshShellIcons
+ !verbose pop
+!macroend
+
+!macro Locate
+ !ifndef ${_FILEFUNC_UN}Locate
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}Locate `!insertmacro ${_FILEFUNC_UN}LocateCall`
+
+ Function ${_FILEFUNC_UN}Locate
+ 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 error
+
+ option:
+ StrCpy $R9 $1 1
+ StrCpy $1 $1 '' 1
+ StrCmp $R9 ' ' -2
+ StrCmp $R9 '' 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 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 error
+ goto option
+
+ mask:
+ StrCmp $R9 'M=' 0 size
+ StrCpy $4 $R8
+ goto option
+
+ size:
+ StrCmp $R9 'S=' 0 gotosubdir
+ StrCpy $6 $R8
+ goto option
+
+ gotosubdir:
+ StrCmp $R9 'G=' 0 banner
+ StrCpy $7 $R8
+ StrCmp $7 '' +3
+ StrCmp $7 '1' +2
+ StrCmp $7 '0' 0 error
+ goto option
+
+ banner:
+ StrCmp $R9 'B=' 0 error
+ StrCpy $R7 $R8
+ StrCmp $R7 '' +3
+ StrCmp $R7 '1' +2
+ StrCmp $R7 '0' 0 error
+ goto option
+
+ sizeset:
+ StrCmp $6 '' 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 default
+ StrCmp $1 'K' 0 +3
+ StrCpy $1 1024
+ goto default
+ StrCmp $1 'M' 0 +3
+ StrCpy $1 1048576
+ goto default
+ StrCmp $1 'G' 0 error
+ StrCpy $1 1073741824
+
+ 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
+
+ nextdir:
+ IntOp $8 $8 - 1
+ Pop $R8
+
+ StrCpy $9 $7 2 2
+ StrCmp $9 'B0' +3
+ GetLabelAddress $9 findfirst
+ goto call
+ DetailPrint 'Search in: $R8'
+
+ findfirst:
+ FindFirst $0 $R7 '$R8\$4'
+ IfErrors subdir
+ StrCmp $R7 '.' 0 dir
+ FindNext $0 $R7
+ StrCmp $R7 '..' 0 dir
+ FindNext $0 $R7
+ IfErrors 0 dir
+ FindClose $0
+ goto subdir
+
+ dir:
+ IfFileExists '$R8\$R7\*.*' 0 file
+ StrCpy $R6 ''
+ StrCmp $3 'DE' +4
+ StrCmp $3 'FDE' +3
+ StrCmp $3 'FD' precall
+ StrCmp $3 'F' findnext precall
+ FindFirst $9 $R9 '$R8\$R7\*.*'
+ StrCmp $R9 '.' 0 +4
+ FindNext $9 $R9
+ StrCmp $R9 '..' 0 +2
+ FindNext $9 $R9
+ FindClose $9
+ IfErrors precall findnext
+
+ file:
+ StrCmp $3 'FDE' +3
+ StrCmp $3 'FD' +2
+ StrCmp $3 'F' 0 findnext
+ StrCpy $R6 0
+ StrCmp $5$6 '' 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 findnext
+ StrCmp $6 '' +2
+ IntCmp $R6 $6 0 0 findnext
+
+ 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 error
+ StrCmp $R9 'StopLocate' 0 +3
+ FindClose $0
+ goto clearstack
+ goto $9
+
+ findnext:
+ FindNext $0 $R7
+ IfErrors 0 dir
+ FindClose $0
+
+ subdir:
+ StrCpy $9 $7 2
+ StrCmp $9 'G0' end
+ FindFirst $0 $R7 '$R8\*.*'
+ StrCmp $R7 '.' 0 pushdir
+ FindNext $0 $R7
+ StrCmp $R7 '..' 0 pushdir
+ FindNext $0 $R7
+ IfErrors 0 pushdir
+ FindClose $0
+ StrCmp $8 0 end nextdir
+
+ pushdir:
+ IfFileExists '$R8\$R7\*.*' 0 +3
+ Push '$R8\$R7'
+ IntOp $8 $8 + 1
+ FindNext $0 $R7
+ IfErrors 0 pushdir
+ FindClose $0
+ StrCmp $8 0 end nextdir
+
+ error:
+ SetErrors
+
+ clearstack:
+ StrCmp $8 0 end
+ IntOp $8 $8 - 1
+ Pop $R8
+ goto clearstack
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetSize
+ !ifndef ${_FILEFUNC_UN}GetSize
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetSize `!insertmacro ${_FILEFUNC_UN}GetSizeCall`
+
+ Function ${_FILEFUNC_UN}GetSize
+ 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 error
+
+ StrCpy $3 ''
+ StrCpy $4 ''
+ StrCpy $5 ''
+ StrCpy $6 ''
+ StrCpy $8 0
+ StrCpy $R3 ''
+ StrCpy $R4 ''
+ StrCpy $R5 ''
+
+ option:
+ StrCpy $R9 $1 1
+ StrCpy $1 $1 '' 1
+ StrCmp $R9 ' ' -2
+ StrCmp $R9 '' 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 size
+ StrCpy $4 $8
+ goto option
+
+ size:
+ StrCmp $R9 'S=' 0 gotosubdir
+ StrCpy $6 $8
+ goto option
+
+ gotosubdir:
+ StrCmp $R9 'G=' 0 error
+ StrCpy $7 $8
+ StrCmp $7 '' +3
+ StrCmp $7 '1' +2
+ StrCmp $7 '0' 0 error
+ goto option
+
+ sizeset:
+ StrCmp $6 '' 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 default
+ StrCmp $1 'K' 0 +4
+ StrCpy $1 1024
+ StrCpy $2 Kb
+ goto default
+ StrCmp $1 'M' 0 +4
+ StrCpy $1 1048576
+ StrCpy $2 Mb
+ goto default
+ StrCmp $1 'G' 0 error
+ StrCpy $1 1073741824
+ StrCpy $2 Gb
+
+ default:
+ StrCmp $4 '' 0 +2
+ StrCpy $4 '*.*'
+ StrCmp $7 '' 0 +2
+ StrCpy $7 '1'
+
+ StrCpy $8 1
+ Push $0
+ SetDetailsPrint textonly
+
+ nextdir:
+ IntOp $8 $8 - 1
+ Pop $R8
+ FindFirst $0 $R7 '$R8\$4'
+ IfErrors show
+ StrCmp $R7 '.' 0 dir
+ FindNext $0 $R7
+ StrCmp $R7 '..' 0 dir
+ FindNext $0 $R7
+ IfErrors 0 dir
+ FindClose $0
+ goto show
+
+ dir:
+ IfFileExists '$R8\$R7\*.*' 0 file
+ IntOp $R5 $R5 + 1
+ goto findnext
+
+ file:
+ StrCpy $R6 0
+ StrCmp $5$6 '' 0 +3
+ IntOp $R4 $R4 + 1
+ goto findnext
+ FileOpen $9 '$R8\$R7' r
+ IfErrors +3
+ FileSeek $9 0 END $R6
+ FileClose $9
+ StrCmp $5 '' +2
+ IntCmp $R6 $5 0 findnext
+ StrCmp $6 '' +2
+ IntCmp $R6 $6 0 0 findnext
+ IntOp $R4 $R4 + 1
+ System::Int64Op /NOUNLOAD $R3 + $R6
+ Pop $R3
+
+ findnext:
+ FindNext $0 $R7
+ IfErrors 0 dir
+ FindClose $0
+
+ show:
+ StrCmp $5$6 '' nosize
+ System::Int64Op /NOUNLOAD $R3 / $1
+ Pop $9
+ DetailPrint 'Size:$9 $2 Files:$R4 Folders:$R5'
+ goto subdir
+ nosize:
+ DetailPrint 'Files:$R4 Folders:$R5'
+
+ subdir:
+ StrCmp $7 0 preend
+ FindFirst $0 $R7 '$R8\*.*'
+ StrCmp $R7 '.' 0 pushdir
+ FindNext $0 $R7
+ StrCmp $R7 '..' 0 pushdir
+ FindNext $0 $R7
+ IfErrors 0 pushdir
+ FindClose $0
+ StrCmp $8 0 preend nextdir
+
+ pushdir:
+ IfFileExists '$R8\$R7\*.*' 0 +3
+ Push '$R8\$R7'
+ IntOp $8 $8 + 1
+ FindNext $0 $R7
+ IfErrors 0 pushdir
+ FindClose $0
+ StrCmp $8 0 preend nextdir
+
+ preend:
+ StrCmp $R3 '' nosizeend
+ System::Int64Op $R3 / $1
+ Pop $R3
+ nosizeend:
+ StrCpy $2 $R4
+ StrCpy $1 $R5
+ StrCpy $0 $R3
+ goto end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+ StrCpy $1 ''
+ StrCpy $2 ''
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro DriveSpace
+ !ifndef ${_FILEFUNC_UN}DriveSpace
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}DriveSpace `!insertmacro ${_FILEFUNC_UN}DriveSpaceCall`
+
+ Function ${_FILEFUNC_UN}DriveSpace
+ 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 error
+
+ StrCpy $5 ''
+ StrCpy $6 ''
+
+ option:
+ StrCpy $2 $1 1
+ StrCpy $1 $1 '' 1
+ StrCmp $2 ' ' -2
+ StrCmp $2 '' 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 unit
+ StrCpy $5 $4
+ StrCmp $5 '' +4
+ StrCmp $5 'T' +3
+ StrCmp $5 'O' +2
+ StrCmp $5 'F' 0 error
+ goto option
+
+ unit:
+ StrCmp $2 'S=' 0 error
+ StrCpy $6 $4
+ goto option
+
+ default:
+ StrCmp $5 '' 0 +2
+ StrCpy $5 'T'
+ StrCmp $6 '' 0 +3
+ StrCpy $6 '1'
+ goto getspace
+
+ StrCmp $6 'B' 0 +3
+ StrCpy $6 1
+ goto getspace
+ StrCmp $6 'K' 0 +3
+ StrCpy $6 1024
+ goto getspace
+ StrCmp $6 'M' 0 +3
+ StrCpy $6 1048576
+ goto getspace
+ StrCmp $6 'G' 0 error
+ StrCpy $6 1073741824
+
+ getspace:
+ System::Call /NOUNLOAD 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l)i(r0,.r2,.r3,.)'
+
+ StrCmp $5 T 0 +3
+ StrCpy $0 $3
+ goto getsize
+ StrCmp $5 O 0 +4
+ System::Int64Op /NOUNLOAD $3 - $2
+ Pop $0
+ goto getsize
+ StrCmp $5 F 0 +2
+ StrCpy $0 $2
+
+ getsize:
+ System::Int64Op $0 / $6
+ Pop $0
+ goto end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetDrives
+ !ifndef ${_FILEFUNC_UN}GetDrives
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetDrives `!insertmacro ${_FILEFUNC_UN}GetDrivesCall`
+
+ Function ${_FILEFUNC_UN}GetDrives
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+ Push $6
+ Push $8
+ Push $9
+
+ System::Alloc /NOUNLOAD 1024
+ Pop $2
+ System::Call /NOUNLOAD 'kernel32::GetLogicalDriveStringsA(i,i) i(1024, r2)'
+
+ StrCmp $0 ALL drivestring
+ StrCmp $0 '' 0 typeset
+ StrCpy $0 ALL
+ goto drivestring
+
+ typeset:
+ StrCpy $6 -1
+ IntOp $6 $6 + 1
+ StrCpy $8 $0 1 $6
+ StrCmp $8$0 '' 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 drivestring
+ StrCmp $8 'HDD' 0 +3
+ StrCpy $6 3
+ goto drivestring
+ StrCmp $8 'NET' 0 +3
+ StrCpy $6 4
+ goto drivestring
+ StrCmp $8 'CDROM' 0 +3
+ StrCpy $6 5
+ goto drivestring
+ StrCmp $8 'RAM' 0 typeset
+ StrCpy $6 6
+
+ drivestring:
+ StrCpy $3 $2
+
+ enumok:
+ System::Call /NOUNLOAD 'kernel32::lstrlenA(t) i(i r3) .r4'
+ StrCmp $4$0 '0ALL' enumex
+ StrCmp $4 0 typeset
+ System::Call /NOUNLOAD 'kernel32::GetDriveTypeA(t) i(i r3) .r5'
+
+ StrCmp $0 ALL +2
+ StrCmp $5 $6 letter enumnext
+ StrCmp $5 2 0 +3
+ StrCpy $8 FDD
+ goto letter
+ StrCmp $5 3 0 +3
+ StrCpy $8 HDD
+ goto letter
+ StrCmp $5 4 0 +3
+ StrCpy $8 NET
+ goto letter
+ StrCmp $5 5 0 +3
+ StrCpy $8 CDROM
+ goto letter
+ StrCmp $5 6 0 enumex
+ StrCpy $8 RAM
+
+ letter:
+ System::Call /NOUNLOAD '*$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' enumex
+
+ enumnext:
+ IntOp $3 $3 + $4
+ IntOp $3 $3 + 1
+ goto enumok
+
+ enumex:
+ System::Free $2
+
+ Pop $9
+ Pop $8
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetTime
+ !ifndef ${_FILEFUNC_UN}GetTime
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetTime `!insertmacro ${_FILEFUNC_UN}GetTimeCall`
+
+ Function ${_FILEFUNC_UN}GetTime
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+ Push $6
+ Push $7
+ ClearErrors
+
+ StrCmp $1 'L' gettime
+ StrCmp $1 'A' getfile
+ StrCmp $1 'C' getfile
+ StrCmp $1 'M' getfile
+ StrCmp $1 'LS' gettime
+ StrCmp $1 'AS' getfile
+ StrCmp $1 'CS' getfile
+ StrCmp $1 'MS' getfile
+ goto error
+
+ getfile:
+ IfFileExists $0 0 error
+ System::Call /NOUNLOAD '*(i,l,l,l,i,i,i,i,&t260,&t14) i .r6'
+ System::Call /NOUNLOAD 'kernel32::FindFirstFileA(t,i)i(r0,r6) .r2'
+ System::Call /NOUNLOAD 'kernel32::FindClose(i)i(r2)'
+
+ gettime:
+ System::Call /NOUNLOAD '*(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2) i .r7'
+ StrCmp $1 'L' 0 systemtime
+ System::Call /NOUNLOAD 'kernel32::GetLocalTime(i)i(r7)'
+ goto convert
+ systemtime:
+ StrCmp $1 'LS' 0 filetime
+ System::Call /NOUNLOAD 'kernel32::GetSystemTime(i)i(r7)'
+ goto convert
+
+ filetime:
+ System::Call /NOUNLOAD '*$6(i,l,l,l,i,i,i,i,&t260,&t14)i(,.r4,.r3,.r2)'
+ System::Free /NOUNLOAD $6
+ StrCmp $1 'A' 0 +3
+ StrCpy $2 $3
+ goto tolocal
+ StrCmp $1 'C' 0 +3
+ StrCpy $2 $4
+ goto tolocal
+ StrCmp $1 'M' tolocal
+
+ StrCmp $1 'AS' tosystem
+ StrCmp $1 'CS' 0 +3
+ StrCpy $3 $4
+ goto tosystem
+ StrCmp $1 'MS' 0 +3
+ StrCpy $3 $2
+ goto tosystem
+
+ tolocal:
+ System::Call /NOUNLOAD 'kernel32::FileTimeToLocalFileTime(*l,*l)i(r2,.r3)'
+ tosystem:
+ System::Call /NOUNLOAD 'kernel32::FileTimeToSystemTime(*l,i)i(r3,r7)'
+
+ convert:
+ System::Call /NOUNLOAD '*$7(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2)i(.r5,.r6,.r4,.r0,.r3,.r2,.r1,)'
+ System::Free $7
+
+ IntCmp $0 9 0 0 +2
+ StrCpy $0 '0$0'
+ IntCmp $1 9 0 0 +2
+ StrCpy $1 '0$1'
+ IntCmp $2 9 0 0 +2
+ StrCpy $2 '0$2'
+ IntCmp $6 9 0 0 +2
+ StrCpy $6 '0$6'
+
+ StrCmp $4 0 0 +3
+ StrCpy $4 Sunday
+ goto end
+ StrCmp $4 1 0 +3
+ StrCpy $4 Monday
+ goto end
+ StrCmp $4 2 0 +3
+ StrCpy $4 Tuesday
+ goto end
+ StrCmp $4 3 0 +3
+ StrCpy $4 Wednesday
+ goto end
+ StrCmp $4 4 0 +3
+ StrCpy $4 Thursday
+ goto end
+ StrCmp $4 5 0 +3
+ StrCpy $4 Friday
+ goto end
+ StrCmp $4 6 0 error
+ StrCpy $4 Saturday
+ goto end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+ StrCpy $1 ''
+ StrCpy $2 ''
+ StrCpy $3 ''
+ StrCpy $4 ''
+ StrCpy $5 ''
+ StrCpy $6 ''
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetFileAttributes
+ !ifndef ${_FILEFUNC_UN}GetFileAttributes
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetFileAttributes `!insertmacro ${_FILEFUNC_UN}GetFileAttributesCall`
+
+ Function ${_FILEFUNC_UN}GetFileAttributes
+ 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 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 '' end
+ StrCmp $1 'ALL' end
+
+ 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 '' notfound
+ StrCmp $4 $2 0 -3
+ StrCmp $1 '' 0 attrcmp
+ StrCpy $0 1
+ goto end
+
+ notfound:
+ StrCpy $0 0
+ goto end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetFileVersion
+ !ifndef ${_FILEFUNC_UN}GetFileVersion
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetFileVersion `!insertmacro ${_FILEFUNC_UN}GetFileVersionCall`
+
+ Function ${_FILEFUNC_UN}GetFileVersion
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+ Push $6
+ ClearErrors
+
+ GetDllVersion '$0' $1 $2
+ IfErrors 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 end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetExeName
+ !ifndef ${_FILEFUNC_UN}GetExeName
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetExeName `!insertmacro ${_FILEFUNC_UN}GetExeNameCall`
+
+ Function ${_FILEFUNC_UN}GetExeName
+ Push $0
+ Push $1
+ Push $2
+ System::Call /NOUNLOAD 'kernel32::GetModuleFileNameA(i 0, t .r0, i 1024)'
+ System::Call 'kernel32::GetLongPathNameA(t r0, t .r1, i 1024)i .r2'
+ StrCmp $2 error +2
+ StrCpy $0 $1
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetExePath
+ !ifndef ${_FILEFUNC_UN}GetExePath
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetExePath `!insertmacro ${_FILEFUNC_UN}GetExePathCall`
+
+ Function ${_FILEFUNC_UN}GetExePath
+ Push $0
+ Push $1
+ Push $2
+ StrCpy $0 $EXEDIR
+ System::Call 'kernel32::GetLongPathNameA(t r0, t .r1, i 1024)i .r2'
+ StrCmp $2 error +2
+ StrCpy $0 $1
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetParameters
+ !ifndef ${_FILEFUNC_UN}GetParameters
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetParameters `!insertmacro ${_FILEFUNC_UN}GetParametersCall`
+
+ Function ${_FILEFUNC_UN}GetParameters
+ Push $0
+ Push $1
+ Push $2
+
+ StrCpy $1 1
+ StrCpy $0 $CMDLINE 1
+ StrCmp $0 '"' 0 +3
+ StrCpy $2 '"'
+ goto +2
+ StrCpy $2 ' '
+
+ IntOp $1 $1 + 1
+ StrCpy $0 $CMDLINE 1 $1
+ StrCmp $0 $2 +2
+ StrCmp $0 '' end -3
+
+ IntOp $1 $1 + 1
+ StrCpy $0 $CMDLINE 1 $1
+ StrCmp $0 ' ' -2
+ StrCpy $0 $CMDLINE '' $1
+
+ StrCpy $1 $0 1 -1
+ StrCmp $1 ' ' 0 +3
+ StrCpy $0 $0 -1
+ goto -3
+
+ end:
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetOptions
+ !ifndef ${_FILEFUNC_UN}GetOptions${_FILEFUNC_S}
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetOptions${_FILEFUNC_S} `!insertmacro ${_FILEFUNC_UN}GetOptions${_FILEFUNC_S}Call`
+
+ Function ${_FILEFUNC_UN}GetOptions${_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
+
+ begin:
+ StrCpy $4 -1
+ StrCpy $6 ''
+
+ quote:
+ IntOp $4 $4 + 1
+ StrCpy $5 $0 1 $4
+ StrCmp${_FILEFUNC_S} $5$7 '0' notfound
+ StrCmp${_FILEFUNC_S} $5 '' trimright
+ StrCmp${_FILEFUNC_S} $5 '"' 0 +7
+ StrCmp${_FILEFUNC_S} $6 '' 0 +3
+ StrCpy $6 '"'
+ goto quote
+ StrCmp${_FILEFUNC_S} $6 '"' 0 +3
+ StrCpy $6 ''
+ goto quote
+ StrCmp${_FILEFUNC_S} $5 `'` 0 +7
+ StrCmp${_FILEFUNC_S} $6 `` 0 +3
+ StrCpy $6 `'`
+ goto quote
+ StrCmp${_FILEFUNC_S} $6 `'` 0 +3
+ StrCpy $6 ``
+ goto quote
+ StrCmp${_FILEFUNC_S} $5 '`' 0 +7
+ StrCmp${_FILEFUNC_S} $6 '' 0 +3
+ StrCpy $6 '`'
+ goto quote
+ StrCmp${_FILEFUNC_S} $6 '`' 0 +3
+ StrCpy $6 ''
+ goto quote
+ StrCmp${_FILEFUNC_S} $6 '"' quote
+ StrCmp${_FILEFUNC_S} $6 `'` quote
+ StrCmp${_FILEFUNC_S} $6 '`' quote
+ StrCmp${_FILEFUNC_S} $5 $1 0 quote
+ StrCmp${_FILEFUNC_S} $7 0 trimleft trimright
+
+ trimleft:
+ IntOp $4 $4 + 1
+ StrCpy $5 $0 $3 $4
+ StrCmp${_FILEFUNC_S} $5 '' notfound
+ StrCmp${_FILEFUNC_S} $5 $2 0 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 begin
+
+ 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 end
+ StrCmp${_FILEFUNC_S} $3 '"' +3
+ StrCmp${_FILEFUNC_S} $3 `'` +2
+ StrCmp${_FILEFUNC_S} $3 '`' 0 end
+ StrCpy $0 $0 -1 1
+ goto end
+
+ notfound:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+
+!macro GetRoot
+ !ifndef ${_FILEFUNC_UN}GetRoot
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetRoot `!insertmacro ${_FILEFUNC_UN}GetRootCall`
+
+ Function ${_FILEFUNC_UN}GetRoot
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+
+ StrCpy $1 $0 2
+ StrCmp $1 '\\' UNC
+ StrCpy $2 $1 1 1
+ StrCmp $2 ':' 0 empty
+ StrCpy $0 $1
+ goto end
+
+ UNC:
+ StrCpy $2 1
+ StrCpy $3 ''
+
+ loop:
+ IntOp $2 $2 + 1
+ StrCpy $1 $0 1 $2
+ StrCmp $1$3 '' empty
+ StrCmp $1 '' +5
+ StrCmp $1 '\' 0 loop
+ StrCmp $3 '1' +3
+ StrCpy $3 '1'
+ goto loop
+ StrCpy $0 $0 $2
+ StrCpy $2 $0 1 -1
+ StrCmp $2 '\' 0 end
+
+ empty:
+ StrCpy $0 ''
+
+ end:
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetParent
+ !ifndef ${_FILEFUNC_UN}GetParent
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetParent `!insertmacro ${_FILEFUNC_UN}GetParentCall`
+
+ Function ${_FILEFUNC_UN}GetParent
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetFileName
+ !ifndef ${_FILEFUNC_UN}GetFileName
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetFileName `!insertmacro ${_FILEFUNC_UN}GetFileNameCall`
+
+ Function ${_FILEFUNC_UN}GetFileName
+ 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 '' end
+ StrCmp $2 '\' 0 -3
+ IntOp $1 $1 + 1
+ StrCpy $0 $0 '' $1
+
+ end:
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetBaseName
+ !ifndef ${_FILEFUNC_UN}GetBaseName
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetBaseName `!insertmacro ${_FILEFUNC_UN}GetBaseNameCall`
+
+ Function ${_FILEFUNC_UN}GetBaseName
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+
+ StrCpy $1 0
+ StrCpy $3 ''
+
+ loop:
+ IntOp $1 $1 - 1
+ StrCpy $2 $0 1 $1
+ StrCmp $2 '' trimpath
+ StrCmp $2 '\' trimpath
+ StrCmp $3 'noext' loop
+ StrCmp $2 '.' 0 loop
+ StrCpy $0 $0 $1
+ StrCpy $3 'noext'
+ StrCpy $1 0
+ goto loop
+
+ trimpath:
+ StrCmp $1 -1 empty
+ IntOp $1 $1 + 1
+ StrCpy $0 $0 '' $1
+ goto end
+
+ empty:
+ StrCpy $0 ''
+
+ end:
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro GetFileExt
+ !ifndef ${_FILEFUNC_UN}GetFileExt
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}GetFileExt `!insertmacro ${_FILEFUNC_UN}GetFileExtCall`
+
+ Function ${_FILEFUNC_UN}GetFileExt
+ Exch $0
+ Push $1
+ Push $2
+
+ StrCpy $1 0
+
+ loop:
+ IntOp $1 $1 - 1
+ StrCpy $2 $0 1 $1
+ StrCmp $2 '' empty
+ StrCmp $2 '\' empty
+ StrCmp $2 '.' 0 loop
+
+ StrCmp $1 -1 empty
+ IntOp $1 $1 + 1
+ StrCpy $0 $0 '' $1
+ goto end
+
+ empty:
+ StrCpy $0 ''
+
+ end:
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro BannerTrimPath
+ !ifndef ${_FILEFUNC_UN}BannerTrimPath
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}BannerTrimPath `!insertmacro ${_FILEFUNC_UN}BannerTrimPathCall`
+
+ Function ${_FILEFUNC_UN}BannerTrimPath
+ 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 end end
+ IntOp $1 $1 - 3
+ IntCmp $1 0 empty empty
+ StrCmp $3 'A' A-trim
+ StrCmp $3 'B' B-trim
+ StrCmp $3 'C' C-trim
+ StrCmp $3 'D' D-trim
+
+ A-trim:
+ StrCpy $3 $0 1 1
+ StrCpy $2 0
+ StrCmp $3 ':' 0 +2
+ IntOp $2 $2 + 2
+
+ loopleft:
+ IntOp $2 $2 + 1
+ StrCpy $3 $0 1 $2
+ StrCmp $2 $1 C-trim
+ StrCmp $3 '\' 0 loopleft
+ StrCpy $3 $0 $2
+ IntOp $2 $2 - $1
+ IntCmp $2 0 B-trim 0 B-trim
+
+ loopright:
+ IntOp $2 $2 + 1
+ StrCpy $4 $0 1 $2
+ StrCmp $2 0 B-trim
+ StrCmp $4 '\' 0 loopright
+ StrCpy $4 $0 '' $2
+ StrCpy $0 '$3\...$4'
+ goto end
+
+ B-trim:
+ StrCpy $2 $1
+ IntOp $2 $2 - 1
+ StrCmp $2 -1 C-trim
+ StrCpy $3 $0 1 $2
+ StrCmp $3 '\' 0 -3
+ StrCpy $0 $0 $2
+ StrCpy $0 '$0\...'
+ goto end
+
+ C-trim:
+ StrCpy $0 $0 $1
+ StrCpy $0 '$0...'
+ goto end
+
+ D-trim:
+ StrCpy $3 -1
+ IntOp $3 $3 - 1
+ StrCmp $3 -$2 C-trim
+ StrCpy $4 $0 1 $3
+ StrCmp $4 '\' 0 -3
+ StrCpy $4 $0 '' $3
+ IntOp $3 $1 + $3
+ IntCmp $3 2 C-trim C-trim
+ StrCpy $0 $0 $3
+ StrCpy $0 '$0...$4'
+ goto end
+
+ empty:
+ StrCpy $0 ''
+
+ end:
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro DirState
+ !ifndef ${_FILEFUNC_UN}DirState
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}DirState `!insertmacro ${_FILEFUNC_UN}DirStateCall`
+
+ Function ${_FILEFUNC_UN}DirState
+ Exch $0
+ Push $1
+ ClearErrors
+
+ FindFirst $1 $0 '$0\*.*'
+ IfErrors 0 +3
+ StrCpy $0 -1
+ goto end
+ StrCmp $0 '.' 0 +4
+ FindNext $1 $0
+ StrCmp $0 '..' 0 +2
+ FindNext $1 $0
+ FindClose $1
+ IfErrors 0 +3
+ StrCpy $0 0
+ goto end
+ StrCpy $0 1
+
+ end:
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro RefreshShellIcons
+ !ifndef ${_FILEFUNC_UN}RefreshShellIcons
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !define ${_FILEFUNC_UN}RefreshShellIcons `!insertmacro ${_FILEFUNC_UN}RefreshShellIconsCall`
+
+ Function ${_FILEFUNC_UN}RefreshShellIcons
+ System::Call 'shell32::SHChangeNotify(i 0x08000000, i 0, i 0, i 0)'
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+
+# Uninstall. Case insensitive. #
+
+!macro un.LocateCall _PATH _OPTIONS _FUNC
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push $0
+ Push `${_PATH}`
+ Push `${_OPTIONS}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call un.Locate
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro un.GetSizeCall _PATH _OPTIONS _RESULT1 _RESULT2 _RESULT3
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Push `${_OPTIONS}`
+ Call un.GetSize
+ Pop ${_RESULT1}
+ Pop ${_RESULT2}
+ Pop ${_RESULT3}
+ !verbose pop
+!macroend
+
+!macro un.DriveSpaceCall _DRIVE _OPTIONS _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_DRIVE}`
+ Push `${_OPTIONS}`
+ Call un.DriveSpace
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetDrivesCall _DRV _FUNC
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push $0
+ Push `${_DRV}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call un.GetDrives
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro un.GetTimeCall _FILE _OPTION _RESULT1 _RESULT2 _RESULT3 _RESULT4 _RESULT5 _RESULT6 _RESULT7
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_OPTION}`
+ Call un.GetTime
+ Pop ${_RESULT1}
+ Pop ${_RESULT2}
+ Pop ${_RESULT3}
+ Pop ${_RESULT4}
+ Pop ${_RESULT5}
+ Pop ${_RESULT6}
+ Pop ${_RESULT7}
+ !verbose pop
+!macroend
+
+!macro un.GetFileAttributesCall _PATH _ATTR _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Push `${_ATTR}`
+ Call un.GetFileAttributes
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetFileVersionCall _FILE _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILE}`
+ Call un.GetFileVersion
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetExeNameCall _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call un.GetExeName
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetExePathCall _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call un.GetExePath
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetParametersCall _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call un.GetParameters
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetOptionsCall _PARAMETERS _OPTION _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PARAMETERS}`
+ Push `${_OPTION}`
+ Call un.GetOptions
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetRootCall _FULLPATH _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FULLPATH}`
+ Call un.GetRoot
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetParentCall _PATHSTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATHSTRING}`
+ Call un.GetParent
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetFileNameCall _PATHSTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATHSTRING}`
+ Call un.GetFileName
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetBaseNameCall _FILESTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILESTRING}`
+ Call un.GetBaseName
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetFileExtCall _FILESTRING _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_FILESTRING}`
+ Call un.GetFileExt
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.BannerTrimPathCall _PATH _LENGHT _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Push `${_LENGHT}`
+ Call un.BannerTrimPath
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.DirStateCall _PATH _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PATH}`
+ Call un.DirState
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.RefreshShellIconsCall
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Call un.RefreshShellIcons
+ !verbose pop
+!macroend
+
+!macro un.Locate
+ !ifndef un.Locate
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro Locate
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetSize
+ !ifndef un.GetSize
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetSize
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.DriveSpace
+ !ifndef un.DriveSpace
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro DriveSpace
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetDrives
+ !ifndef un.GetDrives
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetDrives
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetTime
+ !ifndef un.GetTime
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetTime
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetFileAttributes
+ !ifndef un.GetFileAttributes
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetFileAttributes
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetFileVersion
+ !ifndef un.GetFileVersion
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetFileVersion
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetExeName
+ !ifndef un.GetExeName
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetExeName
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetExePath
+ !ifndef un.GetExePath
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetExePath
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetParameters
+ !ifndef un.GetParameters
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetParameters
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetOptions
+ !ifndef un.GetOptions
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetOptions
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetRoot
+ !ifndef un.GetRoot
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetRoot
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetParent
+ !ifndef un.GetParent
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetParent
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetFileName
+ !ifndef un.GetFileName
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetFileName
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetBaseName
+ !ifndef un.GetBaseName
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetBaseName
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.GetFileExt
+ !ifndef un.GetFileExt
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro GetFileExt
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.BannerTrimPath
+ !ifndef un.BannerTrimPath
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro BannerTrimPath
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.DirState
+ !ifndef un.DirState
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro DirState
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.RefreshShellIcons
+ !ifndef un.RefreshShellIcons
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+
+ !insertmacro RefreshShellIcons
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+
+# Install. Case sensitive. #
+
+!macro GetOptionsSCall _PARAMETERS _OPTION _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PARAMETERS}`
+ Push `${_OPTION}`
+ Call GetOptionsS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro GetOptionsS
+ !ifndef GetOptionsS
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_S
+ !define _FILEFUNC_S `S`
+
+ !insertmacro GetOptions
+
+ !undef _FILEFUNC_S
+ !define _FILEFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+
+# Uninstall. Case sensitive. #
+
+!macro un.GetOptionsSCall _PARAMETERS _OPTION _RESULT
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ Push `${_PARAMETERS}`
+ Push `${_OPTION}`
+ Call un.GetOptionsS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.GetOptionsS
+ !ifndef un.GetOptionsS
+ !verbose push
+ !verbose ${_FILEFUNC_VERBOSE}
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN `un.`
+ !undef _FILEFUNC_S
+ !define _FILEFUNC_S `S`
+
+ !insertmacro GetOptions
+
+ !undef _FILEFUNC_UN
+ !define _FILEFUNC_UN
+ !undef _FILEFUNC_S
+ !define _FILEFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!endif
diff --git a/Include/LangFile.nsh b/Include/LangFile.nsh
index 04ac769..789560b 100755
--- a/Include/LangFile.nsh
+++ b/Include/LangFile.nsh
@@ -1,86 +1,101 @@
-/*
-
-LangFile.nsh
-
-Header file to create langauge file that can be
-included with a single command.
-
-When LANGFILE_DEFAULT is set, missing strings will
-automatically be loaded from a default file.
-
-Copyright © 2007 Joost Verburg
-
-*/
-
-!macro LANGFILE_INCLUDE FILENAME
-
- ;Called from script: include a langauge 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
-
- !ifdef LANGFILE_DEFAULT
- !include "${LANGFILE_DEFAULT}"
- !endif
-
- ;Create language strings
-
- !undef LangFileString
- !define LangFileString "!insertmacro LANGFILE_LANGSTRING"
-
- !ifdef LANGFILE_DEFAULT
- !include "${LANGFILE_DEFAULT}"
- !else
- !include "${FILENAME}"
- !endif
-
-!macroend
-
-!macro LANGFILE IDNAME NAME
-
- ;Start of langauge file, set names
-
- !ifdef LANGFILE_SETNAMES
-
- !ifdef LANGFILE_IDNAME
- !undef LANGFILE_IDNAME
- !endif
-
- !ifdef "LANGFILE_${IDNAME}_NAME"
- !undef "LANGFILE_${IDNAME}_NAME"
- !endif
-
- !define LANGFILE_IDNAME "${IDNAME}"
- !define "LANGFILE_${IDNAME}_NAME" "${NAME}"
-
- !endif
-
-!macroend
-
-!macro LANGFILE_SETSTRING NAME VALUE
-
- ;Set define with translated string
-
- !ifndef ${NAME}
- !define "${NAME}" "${VALUE}"
- !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
+/*
+
+LangFile.nsh
+
+Header file to create langauge file that can be
+included with a single command.
+
+When LANGFILE_DEFAULT is set, missing strings will
+automatically be loaded from a default file.
+
+Copyright © 2008 Joost Verburg
+
+*/
+
+!macro LANGFILE_INCLUDE FILENAME
+
+ ;Called from script: include a langauge 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
+
+ !ifdef LANGFILE_DEFAULT
+ !include "${LANGFILE_DEFAULT}"
+ !endif
+
+ ;Create language strings
+
+ !undef LangFileString
+ !define LangFileString "!insertmacro LANGFILE_LANGSTRING"
+
+ !ifdef LANGFILE_DEFAULT
+ !include "${LANGFILE_DEFAULT}"
+ !else
+ !include "${FILENAME}"
+ !endif
+
+!macroend
+
+!macro LANGFILE IDNAME NAME
+
+ ;Start of standard NSIS language file
+
+ !ifdef LANGFILE_SETNAMES
+
+ !ifdef LANGFILE_IDNAME
+ !undef LANGFILE_IDNAME
+ !endif
+
+ !define LANGFILE_IDNAME "${IDNAME}"
+
+ !ifndef "LANGFILE_${IDNAME}_NAME"
+ !define "LANGFILE_${IDNAME}_NAME" "${NAME}"
+ !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}"
+ !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
diff --git a/Include/Library.nsh b/Include/Library.nsh
index 0f6cb19..2ee9f55 100755
--- a/Include/Library.nsh
+++ b/Include/Library.nsh
@@ -1,851 +1,851 @@
-#
-# 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
-
-!include LogicLib.nsh
-!include x64.nsh
-
-### GetParent macro, don't pass $1 or $2 as INTPUT 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\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "count"
- IntOp $R0 $R0 + 1
- WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "count" "$R0"
-
- ;------------------------
- ;Setup RegTool
-
- ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
- StrCpy $R3 $R3 -4 1
- IfFileExists $R3 +3
-
- File /oname=$R2\NSIS.Library.RegTool.v2.$__INSTALLLLIB_SESSIONGUID.exe "${NSISDIR}\Bin\RegTool.bin"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
- "NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$__INSTALLLLIB_SESSIONGUID.exe" /S'
-
- ;------------------------
- ;Add RegTool entry
-
- WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "$R0.file" "$R1"
- WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "$R0.mode" "${mode}"
-
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
-
-!macroend
-
-### Get library version
-!macro __InstallLib_Helper_GetVersion TYPE FILE
-
- !tempfile LIBRARY_TEMP_NSH
-
- !ifdef NSIS_WIN32_MAKENSIS
-
- !execute '"${NSISDIR}\Bin\LibraryLocal.exe" "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
-
- !else
-
- !execute 'LibraryLocal "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
-
- !if ${TYPE} == 'T'
-
- !warning "LibraryLocal currently supports TypeLibs version detection on Windows only"
-
- !endif
-
- !endif
-
- !include "${LIBRARY_TEMP_NSH}"
- !delfile "${LIBRARY_TEMP_NSH}"
- !undef LIBRARY_TEMP_NSH
-
-!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
- !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
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !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
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 0 "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !else
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !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
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !undef LIBRARY_VERSION_HIGH
- !undef LIBRARY_VERSION_LOW
-
- !else
-
- !undef LIBRARY_VERSION_NONE
-
- !endif
-
- !endif
-
- !endif
-
- ;------------------------
- ;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
-
- !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_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
-
- 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
- !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_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
+#
+# 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
+
+!include LogicLib.nsh
+!include x64.nsh
+
+### GetParent macro, don't pass $1 or $2 as INTPUT 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\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "count"
+ IntOp $R0 $R0 + 1
+ WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "count" "$R0"
+
+ ;------------------------
+ ;Setup RegTool
+
+ ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
+ StrCpy $R3 $R3 -4 1
+ IfFileExists $R3 +3
+
+ File /oname=$R2\NSIS.Library.RegTool.v2.$__INSTALLLLIB_SESSIONGUID.exe "${NSISDIR}\Bin\RegTool.bin"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
+ "NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$__INSTALLLLIB_SESSIONGUID.exe" /S'
+
+ ;------------------------
+ ;Add RegTool entry
+
+ WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "$R0.file" "$R1"
+ WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\$__INSTALLLLIB_SESSIONGUID" "$R0.mode" "${mode}"
+
+ Pop $R3
+ Pop $R2
+ Pop $R1
+ Pop $R0
+
+!macroend
+
+### Get library version
+!macro __InstallLib_Helper_GetVersion TYPE FILE
+
+ !tempfile LIBRARY_TEMP_NSH
+
+ !ifdef NSIS_WIN32_MAKENSIS
+
+ !execute '"${NSISDIR}\Bin\LibraryLocal.exe" "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
+
+ !else
+
+ !execute 'LibraryLocal "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
+
+ !if ${TYPE} == 'T'
+
+ !warning "LibraryLocal currently supports TypeLibs version detection on Windows only"
+
+ !endif
+
+ !endif
+
+ !include "${LIBRARY_TEMP_NSH}"
+ !delfile "${LIBRARY_TEMP_NSH}"
+ !undef LIBRARY_TEMP_NSH
+
+!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
+ !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
+
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+
+ !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
+
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 0 "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+
+ !else
+
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+
+ !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
+
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+
+ !undef LIBRARY_VERSION_HIGH
+ !undef LIBRARY_VERSION_LOW
+
+ !else
+
+ !undef LIBRARY_VERSION_NONE
+
+ !endif
+
+ !endif
+
+ !endif
+
+ ;------------------------
+ ;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
+
+ !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_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
+
+ 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
+ !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_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/Include/LogicLib.nsh b/Include/LogicLib.nsh
index 5566676..466843a 100755
--- a/Include/LogicLib.nsh
+++ b/Include/LogicLib.nsh
@@ -1,775 +1,781 @@
-; NSIS LOGIC LIBRARY - LogicLib.nsh
-; Version 2.5 - 23/08/2004
-; By dselkirk@hotmail.com
-; and eccles@users.sf.net
-;
-; 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|Unless..{ElseIf|ElseUnless}..[Else]..EndIf|EndUnless
-; - Conditionally executes a block of statements, depending on the value
-; of an expression.
-; AndIf|AndUnless|OrIf|OrUnless
-; - Adds any number of extra conditions to If, Unless, ElseIf and
-; ElseUnless statements.
-; IfThen..|..|
-; - 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
-; 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
-; Built-in NSIS flag tests:
-; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
-; 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
-;
-; 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 _IncreaseCounter
- !define _LOGICLIB_COUNTER ${LOGICLIB_COUNTER}
- !undef LOGICLIB_COUNTER
- !define /math LOGICLIB_COUNTER ${_LOGICLIB_COUNTER} + 1
- !undef _LOGICLIB_COUNTER
- !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 statment 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
-
- ; 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::lstrcmpiA(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
-
- ; 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
-
- ; 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 ""`
-
- ; "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_Label_${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`
-
- !macro _And _c _a _o _b
- !verbose push
- !verbose ${LOGICLIB_VERBOSITY}
- !ifndef _Logic | ${_Logic}If
- !error "Cannot use And without a preceding If or 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`
-
- !macro _Or _c _a _o _b
- !verbose push
- !verbose ${LOGICLIB_VERBOSITY}
- !ifndef _Logic | ${_Logic}If
- !error "Cannot use Or without a preceding If or 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_Label_${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`
-
- !macro _Else
- !verbose push
- !verbose ${LOGICLIB_VERBOSITY}
- !ifndef _Logic | ${_Logic}If
- !error "Cannot use Else without a preceding If or 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_Label_${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_Label_${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`
-
- !macro _EndIf _n
- !verbose push
- !verbose ${LOGICLIB_VERBOSITY}
- !ifndef _Logic | ${_Logic}If
- !error "Cannot use End${_n} without a preceding If or 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 _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
- ${_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 the EndSelect
- ${${_Logic}Else}: ; Place the Else label
- !undef ${_Logic}Else ; and remove it
- !else
- !define ${_Logic}EndSelect _LogicLib_Label_${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_Label_${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_Label_${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_Label_${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_Label_${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_Label_${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
- ${${_Logic}EndSelect}: ; Place the EndSelect
- !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 lable 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
- !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
+; 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..|..|
+; - 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
+; 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
+; Built-in NSIS flag tests:
+; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
+; 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
+;
+; 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 _IncreaseCounter
+ !define _LOGICLIB_COUNTER ${LOGICLIB_COUNTER}
+ !undef LOGICLIB_COUNTER
+ !define /math LOGICLIB_COUNTER ${_LOGICLIB_COUNTER} + 1
+ !undef _LOGICLIB_COUNTER
+ !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 statment 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
+
+ ; 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::lstrcmpiA(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
+
+ ; 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
+
+ ; 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 ""`
+
+ ; "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_Label_${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_Label_${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_Label_${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_Label_${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 _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
+ ${_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 the EndSelect
+ ${${_Logic}Else}: ; Place the Else label
+ !undef ${_Logic}Else ; and remove it
+ !else
+ !define ${_Logic}EndSelect _LogicLib_Label_${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_Label_${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_Label_${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_Label_${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_Label_${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_Label_${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
+ ${${_Logic}EndSelect}: ; Place the EndSelect
+ !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 lable 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
+ !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/Include/Memento.nsh b/Include/Memento.nsh
index b86de45..e0e60cc 100755
--- a/Include/Memento.nsh
+++ b/Include/Memento.nsh
@@ -1,524 +1,524 @@
-!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. Add a call to ${MementoSectionRestore} to .onInit to restore the state
- of all sections from the registry.
-
- Function .onInit
-
- ${MementoSectionRestore}
-
- FunctionEnd
-
-5. Add a call to ${MementoSectionSave} to .onInstSuccess to save the state
- of all sections to the registry.
-
- Function .onInstSuccess
-
- ${MementoSectionSave}
-
- FunctionEnd
-
-6. 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"
-
-
-#####################################
-### Internal Defines ###
-#####################################
-
-!define __MementoSectionIndex 1
-
-#####################################
-### Internal Macros ###
-#####################################
-
-!macro __MementoCheckSettings
-
- !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
-
-!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
- ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
-
- ${If} ${Errors}
-
- !insertmacro SetSectionFlag `${${__MementoSectionLastSectionId}}` ${SF_BOLD}
-
- ${EndIf}
-
- GetFunctionAddress $0 __MementoSectionMarkNew${__MementoSectionIndexNext}
- Goto $0
-
- FunctionEnd
-
- Function __MementoSectionRestoreStatus${__MementoSectionIndex}
-
- ClearErrors
- ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__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}}`
-
- WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 1
-
- ${Else}
-
- WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__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
-
- ReadRegStr $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed
-
- ${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
-
- WriteRegStr ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed ""
-
- Call __MementoSectionSaveStatus1
-
- Pop $0
-
- !verbose pop
-
-!macroend
-
-
-
-!endif # ___MEMENTO_NSH___
-
-!verbose pop
+!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. Add a call to ${MementoSectionRestore} to .onInit to restore the state
+ of all sections from the registry.
+
+ Function .onInit
+
+ ${MementoSectionRestore}
+
+ FunctionEnd
+
+5. Add a call to ${MementoSectionSave} to .onInstSuccess to save the state
+ of all sections to the registry.
+
+ Function .onInstSuccess
+
+ ${MementoSectionSave}
+
+ FunctionEnd
+
+6. 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"
+
+
+#####################################
+### Internal Defines ###
+#####################################
+
+!define __MementoSectionIndex 1
+
+#####################################
+### Internal Macros ###
+#####################################
+
+!macro __MementoCheckSettings
+
+ !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
+
+!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
+ ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
+
+ ${If} ${Errors}
+
+ !insertmacro SetSectionFlag `${${__MementoSectionLastSectionId}}` ${SF_BOLD}
+
+ ${EndIf}
+
+ GetFunctionAddress $0 __MementoSectionMarkNew${__MementoSectionIndexNext}
+ Goto $0
+
+ FunctionEnd
+
+ Function __MementoSectionRestoreStatus${__MementoSectionIndex}
+
+ ClearErrors
+ ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__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}}`
+
+ WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 1
+
+ ${Else}
+
+ WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__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
+
+ ReadRegStr $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed
+
+ ${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
+
+ WriteRegStr ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed ""
+
+ Call __MementoSectionSaveStatus1
+
+ Pop $0
+
+ !verbose pop
+
+!macroend
+
+
+
+!endif # ___MEMENTO_NSH___
+
+!verbose pop
diff --git a/Include/SConscript b/Include/SConscript
index f71ab9e..851bc41 100755
--- a/Include/SConscript
+++ b/Include/SConscript
@@ -1,23 +1,24 @@
-includes = Split("""
- Colors.nsh
- FileFunc.nsh
- LangFile.nsh
- Library.nsh
- LogicLib.nsh
- Memento.nsh
- MUI.nsh
- MUI2.nsh
- Sections.nsh
- StrFunc.nsh
- TextFunc.nsh
- UpgradeDLL.nsh
- WinMessages.nsh
- WinVer.nsh
- WordFunc.nsh
- x64.nsh
-""")
-
-Import('env')
-
-env.DistributeInclude(includes)
-env.DistributeDocs('StrFunc.txt', path='StrFunc')
+includes = Split("""
+ Colors.nsh
+ FileFunc.nsh
+ LangFile.nsh
+ Library.nsh
+ LogicLib.nsh
+ Memento.nsh
+ MUI.nsh
+ MUI2.nsh
+ Sections.nsh
+ StrFunc.nsh
+ TextFunc.nsh
+ UpgradeDLL.nsh
+ VB6RunTime.nsh
+ WinMessages.nsh
+ WinVer.nsh
+ WordFunc.nsh
+ x64.nsh
+""")
+
+Import('env')
+
+env.DistributeInclude(includes)
+env.DistributeDocs('StrFunc.txt', path='StrFunc')
diff --git a/Include/Sections.nsh b/Include/Sections.nsh
index 07aa47f..1907a1f 100755
--- a/Include/Sections.nsh
+++ b/Include/Sections.nsh
@@ -1,273 +1,273 @@
-; 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
-; varible 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 http://nsis.sourceforge.net/wiki/SetSectionInInstType%2C_ClearSectionInInstType
-;
-; Use the defines below for the WANTED_INSTTYPE paramter.
-
-!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
-
-;--------------------------------
-
+; 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
+; varible 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 http://nsis.sourceforge.net/wiki/SetSectionInInstType%2C_ClearSectionInInstType
+;
+; Use the defines below for the WANTED_INSTTYPE paramter.
+
+!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
+
+;--------------------------------
+
!endif \ No newline at end of file
diff --git a/Include/StrFunc.nsh b/Include/StrFunc.nsh
index 2dc46e7..b369369 100755
--- a/Include/StrFunc.nsh
+++ b/Include/StrFunc.nsh
@@ -1,1782 +1,1782 @@
-/*
-o-----------------------------------------------------------------------------o
-|String Functions Header File 1.09 |
-(-----------------------------------------------------------------------------)
-| By deguix / A Header file for NSIS 2.01 |
-| <cevo_deguix@yahoo.com.br> -------------------------------|
-| |
-| This header file contains NSIS functions for string manipulation. |
-o-----------------------------------------------------------------------------o
-*/
-
-!verbose push
-!verbose 3
-!ifndef STRFUNC_VERBOSITY
- !define STRFUNC_VERBOSITY 3
-!endif
-!define _STRFUNC_VERBOSITY ${STRFUNC_VERBOSITY}
-!undef STRFUNC_VERBOSITY
-!verbose ${_STRFUNC_VERBOSITY}
-
-!include LogicLib.nsh
-
-!define FALSE 0
-!define TRUE 1
-
-!ifndef STRFUNC
-
- ;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 09
- ;!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
- !verbose 4
- !echo `${STRFUNC_INITMSGPRE}NSIS ${STRFUNC} ${STRFUNC_VER} - © ${STRFUNC_CREDITS}${STRFUNC_INITMSGPOST}`
- !verbose pop
-
- ;Header File Function Init Message Prefix and Postfix
-
- !define STRFUNC_FUNCMSGPRE ``
- !define STRFUNC_FUNCMSGPOST ``
-
- ;Header File Function Macros
-
- !macro STRFUNC_FUNCLIST_INSERT Name
- !ifdef StrFunc_List
- !define StrFunc_List2 `${StrFunc_List}`
- !undef StrFunc_List
- !define StrFunc_List `${StrFunc_List2}|${Name}`
- !undef StrFunc_List2
- !else
- !define StrFunc_List `${Name}`
- !endif
- !macroend
-
- !macro STRFUNC_DEFFUNC Name
- !insertmacro STRFUNC_FUNCLIST_INSERT ${Name}
-
- !define `${Name}` `!insertmacro FUNCTION_STRING_${Name}`
- !define `Un${Name}` `!insertmacro FUNCTION_STRING_Un${Name}`
- !macroend
-
- !macro STRFUNC_FUNC ShortName Credits
- !verbose push
- !verbose 4
-
- !ifndef `Un${ShortName}`
- !echo `${STRFUNC_FUNCMSGPRE}$ {Un${ShortName}} - © ${Credits}${STRFUNC_FUNCMSGPOST}`
- !verbose pop
- !define `Un${ShortName}` `!insertmacro FUNCTION_STRING_Un${ShortName}_Call`
- Function `un.${ShortName}`
- !else
- !echo `${STRFUNC_FUNCMSGPRE}$ {${ShortName}} - © ${Credits}${STRFUNC_FUNCMSGPOST}`
- !verbose pop
- !undef `${ShortName}`
- !define `${ShortName}` `!insertmacro FUNCTION_STRING_${ShortName}_Call`
- Function `${ShortName}`
- !endif
- !macroend
-
- ;Function Names Startup Definition
-
- !insertmacro STRFUNC_DEFFUNC StrCase
- !define StrCase_List `ResultVar|String|Type`
- !define StrCase_TypeList `Output|Text|Option U L T S <>`
- !macro `FUNCTION_STRING_UnStrCase`
- !undef UnStrCase
- !insertmacro FUNCTION_STRING_StrCase
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrClb
- !define StrClb_List `ResultVar|String|Action`
- !define StrClb_TypeList `Output|Text|Option > < <>`
- !macro `FUNCTION_STRING_UnStrClb`
- !undef UnStrClb
- !insertmacro FUNCTION_STRING_StrClb
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrIOToNSIS
- !define StrIOToNSIS_List `ResultVar|String`
- !define StrIOToNSIS_TypeList `Output|Text`
- !macro `FUNCTION_STRING_UnStrIOToNSIS`
- !undef UnStrIOToNSIS
- !insertmacro FUNCTION_STRING_StrIOToNSIS
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrLoc
- !define StrLoc_List `ResultVar|String|StrToSearchFor|CounterDirection`
- !define StrLoc_TypeList `Output|Text|Text|Option > <`
- !macro `FUNCTION_STRING_UnStrLoc`
- !undef UnStrLoc
- !insertmacro FUNCTION_STRING_StrLoc
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrNSISToIO
- !define StrNSISToIO_List `ResultVar|String`
- !define StrNSISToIO_TypeList `Output|Text`
- !macro `FUNCTION_STRING_UnStrNSISToIO`
- !undef UnStrNSISToIO
- !insertmacro FUNCTION_STRING_StrNSISToIO
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrRep
- !define StrRep_List `ResultVar|String|StrToReplace|ReplacementString`
- !define StrRep_TypeList `Output|Text|Text|Text`
- !macro `FUNCTION_STRING_UnStrRep`
- !undef UnStrRep
- !insertmacro FUNCTION_STRING_StrRep
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrSort
- !define StrSort_List `ResultVar|String|LeftStr|CenterStr|RightStr|IncludeLeftStr|IncludeCenterStr|IncludeRightStr`
- !define StrSort_TypeList `Output|Text|Text|Text|Text|Option 1 0|Option 1 0|Option 1 0`
- !macro `FUNCTION_STRING_UnStrSort`
- !undef UnStrSort
- !insertmacro FUNCTION_STRING_StrSort
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrStr
- !define StrStr_List `ResultVar|String|StrToSearchFor`
- !define StrStr_TypeList `Output|Text|Text`
- !macro `FUNCTION_STRING_UnStrStr`
- !undef UnStrStr
- !insertmacro FUNCTION_STRING_StrStr
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrStrAdv
- !define StrStrAdv_List `ResultVar|String|StrToSearchFor|SearchDirection|ResultStrDirection|DisplayStrToSearch|Loops|CaseSensitive`
- !define StrStrAdv_TypeList `Output|Text|Text|Option > <|Option > <|Option 1 0|Text|Option 0 1`
- !macro `FUNCTION_STRING_UnStrStrAdv`
- !undef UnStrStrAdv
- !insertmacro FUNCTION_STRING_StrStrAdv
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrTok
- !define StrTok_List `ResultVar|String|Separators|ResultPart|SkipEmptyParts`
- !define StrTok_TypeList `Output|Text|Text|Mixed L|Option 1 0`
- !macro `FUNCTION_STRING_UnStrTok`
- !undef UnStrTok
- !insertmacro FUNCTION_STRING_StrTok
- !macroend
-
- !insertmacro STRFUNC_DEFFUNC StrTrimNewLines
- !define StrTrimNewLines_List `ResultVar|String`
- !define StrTrimNewLines_TypeList `Output|Text`
- !macro `FUNCTION_STRING_UnStrTrimNewLines`
- !undef UnStrTrimNewLines
- !insertmacro FUNCTION_STRING_StrTrimNewLines
- !macroend
-
- ;Function Codes for Install and Uninstall
-
- # Function StrCase
- ################
-
- !macro FUNCTION_STRING_StrCase
- !insertmacro STRFUNC_FUNC `StrCase` `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) i .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) i .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
- FunctionEnd
-
- !macroend
-
- !macro FUNCTION_STRING_StrClb
- !insertmacro STRFUNC_FUNC `StrClb` `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(i $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
- System::Call 'kernel32::GlobalAlloc(i 2, i r2) i.r2'
-
- ;Step 3: Lock the handle
- System::Call 'kernel32::GlobalLock(i r2) i.r3'
-
- ;Step 4: Copy the text to locked clipboard buffer
- System::Call 'kernel32::lstrcpyA(i r3, t r0)'
-
- ;Step 5: Unlock the handle again
- System::Call 'kernel32::GlobalUnlock(i r2)'
-
- ;Step 6: Set the information to the clipboard
- System::Call 'user32::SetClipboardData(i 1, i r2)'
-
- StrCpy $0 ""
-
- ${ElseIf} $1 == "<" ;Get
-
- ;Step 1: Get clipboard data
- System::Call 'user32::GetClipboardData(i 1) i .r2'
-
- ;Step 2: Lock and copy data (kichik's fix)
- System::Call 'kernel32::GlobalLock(i r2) t .r0'
-
- ;Step 3: Unlock (kichik's fix)
- System::Call 'kernel32::GlobalUnlock(i r2)'
-
- ${ElseIf} $1 == "<>" ;Swap
-
- ;Step 1: Get clipboard data
- System::Call 'user32::GetClipboardData(i 1) i .r2'
-
- ;Step 2: Lock and copy data (kichik's fix)
- System::Call 'kernel32::GlobalLock(i r2) t .r4'
-
- ;Step 3: Unlock (kichik's fix)
- System::Call 'kernel32::GlobalUnlock(i r2)'
-
- ;Step 4: Clear the clipboard
- System::Call 'user32::EmptyClipboard()'
-
- ;Step 5: Allocate global heap
- StrLen $2 $0
- IntOp $2 $2 + 1
- System::Call 'kernel32::GlobalAlloc(i 2, i r2) i.r2'
-
- ;Step 6: Lock the handle
- System::Call 'kernel32::GlobalLock(i r2) i.r3'
-
- ;Step 7: Copy the text to locked clipboard buffer
- System::Call 'kernel32::lstrcpyA(i r3, t r0)'
-
- ;Step 8: Unlock the handle again
- System::Call 'kernel32::GlobalUnlock(i r2)'
-
- ;Step 9: Set the information to the clipboard
- System::Call 'user32::SetClipboardData(i 1, i r2)'
-
- 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
- FunctionEnd
-
- !macroend
-
- # Function StrIOToNSIS
- ####################
-
- !macro FUNCTION_STRING_StrIOToNSIS
- !insertmacro STRFUNC_FUNC `StrIOToNSIS` `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
- FunctionEnd
- !macroend
-
- # Function StrLoc
- ###############
-
- !macro FUNCTION_STRING_StrLoc
- !insertmacro STRFUNC_FUNC `StrLoc` `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
- FunctionEnd
-
- !macroend
-
- # Function StrNSISToIO
- ####################
-
- !macro FUNCTION_STRING_StrNSISToIO
- !insertmacro STRFUNC_FUNC `StrNSISToIO` `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
- FunctionEnd
- !macroend
-
- # Function StrRep
- ###############
-
- !macro FUNCTION_STRING_StrRep
- !insertmacro STRFUNC_FUNC `StrRep` `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
- FunctionEnd
-
- !macroend
-
- # Function StrSort
- ################
-
- !macro FUNCTION_STRING_StrSort
- !insertmacro STRFUNC_FUNC `StrSort` `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
- FunctionEnd
-
- !macroend
-
- # Function StrStr
- ###############
-
- !macro FUNCTION_STRING_StrStr
- !insertmacro STRFUNC_FUNC `StrStr` `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
- FunctionEnd
-
- !macroend
-
- # Function StrStrAdv
- ##################
-
- !macro FUNCTION_STRING_StrStrAdv
- !insertmacro STRFUNC_FUNC `StrStrAdv` `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::lstrcmpA(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
-
- FunctionEnd
-
- !macroend
-
- # Function StrTok
- ###############
-
- !macro FUNCTION_STRING_StrTok
- !insertmacro STRFUNC_FUNC `StrTok` `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
- FunctionEnd
-
- !macroend
-
- # Function StrTrimNewLines
- ########################
-
- !macro FUNCTION_STRING_StrTrimNewLines
- !insertmacro STRFUNC_FUNC `StrTrimNewLines` `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
- FunctionEnd
-
- !macroend
-
- ;Function Calls for Install and Uninstall
-
- !macro FUNCTION_STRING_StrCase_Call ResultVar String Type
- !verbose push
- !verbose 4
- !echo `$ {StrCase} "${ResultVar}" "${String}" "${Type}"`
- !verbose pop
-
- Push `${String}`
- Push `${Type}`
- Call StrCase
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrCase_Call ResultVar String Type
- !verbose push
- !verbose 4
- !echo `$ {UnStrCase} "${ResultVar}" "${String}" "${Type}"`
- !verbose pop
-
- Push `${String}`
- Push `${Type}`
- Call un.StrCase
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrClb_Call ResultVar String Action
- !verbose push
- !verbose 4
- !echo `$ {StrClb} "${ResultVar}" "${String}" "${Action}"`
- !verbose pop
-
- Push `${String}`
- Push `${Action}`
- Call StrClb
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrClb_Call ResultVar String Action
- !verbose push
- !verbose 4
- !echo `$ {UnStrClb} "${ResultVar}" "${String}" "${Action}"`
- !verbose pop
-
- Push `${String}`
- Push `${Action}`
- Call un.StrClb
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrIOToNSIS_Call ResultVar String
- !verbose push
- !verbose 4
- !echo `$ {StrIOToNSIS} "${ResultVar}" "${String}"`
- !verbose pop
-
- Push `${String}`
- Call StrIOToNSIS
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrIOToNSIS_Call ResultVar String
- !verbose push
- !verbose 4
- !echo `$ {UnStrIOToNSIS} "${ResultVar}" "${String}"`
- !verbose pop
-
- Push `${String}`
- Call un.StrIOToNSIS
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrLoc_Call ResultVar String StrToSearchFor OffsetDirection
- !verbose push
- !verbose 4
- !echo `$ {StrLoc} "${ResultVar}" "${String}" "${StrToSearchFor}" "${OffsetDirection}"`
- !verbose pop
-
- Push `${String}`
- Push `${StrToSearchFor}`
- Push `${OffsetDirection}`
- Call StrLoc
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrLoc_Call ResultVar String StrToSearchFor OffsetDirection
- !verbose push
- !verbose 4
- !echo `$ {UnStrLoc} "${ResultVar}" "${String}" "${StrToSearchFor}" "${OffsetDirection}"`
- !verbose pop
-
- Push `${String}`
- Push `${StrToSearchFor}`
- Push `${OffsetDirection}`
- Call un.StrLoc
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrNSISToIO_Call ResultVar String
- !verbose push
- !verbose 4
- !echo `$ {StrNSISToIO} "${ResultVar}" "${String}"`
- !verbose pop
-
- Push `${String}`
- Call StrNSISToIO
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrNSISToIO_Call ResultVar String
- !verbose push
- !verbose 4
- !echo `$ {UnStrNSISToIO} "${ResultVar}" "${String}"`
- !verbose pop
-
- Push `${String}`
- Call un.StrNSISToIO
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrRep_Call ResultVar String StringToReplace ReplacementString
- !verbose push
- !verbose 4
- !echo `$ {StrRep} "${ResultVar}" "${String}" "${StringToReplace}" "${ReplacementString}"`
- !verbose pop
-
- Push `${String}`
- Push `${StringToReplace}`
- Push `${ReplacementString}`
- Call StrRep
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrRep_Call ResultVar String StringToReplace ReplacementString
- !verbose push
- !verbose 4
- !echo `$ {UnStrRep} "${ResultVar}" "${String}" "${StringToReplace}" "${ReplacementString}"`
- !verbose pop
-
- Push `${String}`
- Push `${StringToReplace}`
- Push `${ReplacementString}`
- Call un.StrRep
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrSort_Call ResultVar String CenterStr LeftStr RightStr IncludeCenterStr IncludeLeftStr IncludeRightStr
- !verbose push
- !verbose 4
- !echo `$ {StrSort} "${ResultVar}" "${String}" "${CenterStr}" "${LeftStr}" "${RightStr}" "${IncludeCenterStr}" "${IncludeLeftStr}" "${IncludeRightStr}"`
- !verbose pop
-
- Push `${String}`
- Push `${CenterStr}`
- Push `${LeftStr}`
- Push `${RightStr}`
- Push `${IncludeCenterStr}`
- Push `${IncludeLeftStr}`
- Push `${IncludeRightStr}`
- Call StrSort
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrSort_Call ResultVar String CenterStr LeftStr RightStr IncludeCenterStr IncludeLeftStr IncludeRightStr
- !verbose push
- !verbose 4
- !echo `$ {UnStrSort} "${ResultVar}" "${String}" "${CenterStr}" "${LeftStr}" "${RightStr}" "${IncludeCenterStr}" "${IncludeLeftStr}" "${IncludeRightStr}"`
- !verbose pop
-
- Push `${String}`
- Push `${CenterStr}`
- Push `${LeftStr}`
- Push `${RightStr}`
- Push `${IncludeCenterStr}`
- Push `${IncludeLeftStr}`
- Push `${IncludeRightStr}`
- Call un.StrSort
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrStr_Call ResultVar String StrToSearchFor
- !verbose push
- !verbose 4
- !echo `$ {StrStr} "${ResultVar}" "${String}" "${StrToSearchFor}"`
- !verbose pop
-
- Push `${String}`
- Push `${StrToSearchFor}`
- Call StrStr
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrStr_Call ResultVar String StrToSearchFor
- !verbose push
- !verbose 4
- !echo `$ {UnStrStr} "${ResultVar}" "${String}" "${StrToSearchFor}"`
- !verbose pop
-
- Push `${String}`
- Push `${StrToSearchFor}`
- Call un.StrStr
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrStrAdv_Call ResultVar String StrToSearchFor SearchDirection ResultStrDirection DisplayStrToSearch Loops CaseSensitive
- !verbose push
- !verbose 4
- !echo `$ {StrStrAdv} "${ResultVar}" "${String}" "${StrToSearchFor}" "${SearchDirection}" "${ResultStrDirection}" "${DisplayStrToSearch}" "${Loops}" "${CaseSensitive}"`
- !verbose pop
-
- Push `${String}`
- Push `${StrToSearchFor}`
- Push `${SearchDirection}`
- Push `${ResultStrDirection}`
- Push `${DisplayStrToSearch}`
- Push `${Loops}`
- Push `${CaseSensitive}`
- Call StrStrAdv
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrStrAdv_Call ResultVar String StrToSearchFor SearchDirection ResultStrDirection DisplayStrToSearch Loops CaseSensitive
- !verbose push
- !verbose 4
- !echo `$ {UnStrStrAdv} "${ResultVar}" "${String}" "${StrToSearchFor}" "${SearchDirection}" "${ResultStrDirection}" "${DisplayStrToSearch}" "${Loops}" "${CaseSensitive}"`
- !verbose pop
-
- Push `${String}`
- Push `${StrToSearchFor}`
- Push `${SearchDirection}`
- Push `${ResultStrDirection}`
- Push `${DisplayStrToSearch}`
- Push `${Loops}`
- Push `${CaseSensitive}`
- Call un.StrStrAdv
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrTok_Call ResultVar String Separators ResultPart SkipEmptyParts
- !verbose push
- !verbose 4
- !echo `$ {StrTok} "${ResultVar}" "${String}" "${Separators}" "${ResultPart}" "${SkipEmptyParts}"`
- !verbose pop
-
- Push `${String}`
- Push `${Separators}`
- Push `${ResultPart}`
- Push `${SkipEmptyParts}`
- Call StrTok
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrTok_Call ResultVar String Separators ResultPart SkipEmptyParts
- !verbose push
- !verbose 4
- !echo `$ {UnStrTok} "${ResultVar}" "${String}" "${Separators}" "${ResultPart}" "${SkipEmptyParts}"`
- !verbose pop
-
- Push `${String}`
- Push `${Separators}`
- Push `${ResultPart}`
- Push `${SkipEmptyParts}`
- Call un.StrTok
- Pop `${ResultVar}`
- !macroend
-
- !macro FUNCTION_STRING_StrTrimNewLines_Call ResultVar String
- !verbose push
- !verbose 4
- !echo `$ {StrTrimNewLines} "${ResultVar}" "${String}"`
- !verbose pop
-
- Push `${String}`
- Call StrTrimNewLines
- Pop `${ResultVar}`
- !macroend
- !macro FUNCTION_STRING_UnStrTrimNewLines_Call ResultVar String
- !verbose push
- !verbose 4
- !echo `$ {UnStrTrimNewLines} "${ResultVar}" "${String}"`
- !verbose pop
-
- Push `${String}`
- Call un.StrTrimNewLines
- Pop `${ResultVar}`
- !macroend
-
-!endif
-!verbose 3
-!define STRFUNC_VERBOSITY ${_STRFUNC_VERBOSITY}
-!undef _STRFUNC_VERBOSITY
-!verbose pop
+/*
+o-----------------------------------------------------------------------------o
+|String Functions Header File 1.09 |
+(-----------------------------------------------------------------------------)
+| By deguix / A Header file for NSIS 2.01 |
+| <cevo_deguix@yahoo.com.br> -------------------------------|
+| |
+| This header file contains NSIS functions for string manipulation. |
+o-----------------------------------------------------------------------------o
+*/
+
+!verbose push
+!verbose 3
+!ifndef STRFUNC_VERBOSITY
+ !define STRFUNC_VERBOSITY 3
+!endif
+!define _STRFUNC_VERBOSITY ${STRFUNC_VERBOSITY}
+!undef STRFUNC_VERBOSITY
+!verbose ${_STRFUNC_VERBOSITY}
+
+!include LogicLib.nsh
+
+!define FALSE 0
+!define TRUE 1
+
+!ifndef STRFUNC
+
+ ;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 09
+ ;!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
+ !verbose 4
+ !echo `${STRFUNC_INITMSGPRE}NSIS ${STRFUNC} ${STRFUNC_VER} - © ${STRFUNC_CREDITS}${STRFUNC_INITMSGPOST}`
+ !verbose pop
+
+ ;Header File Function Init Message Prefix and Postfix
+
+ !define STRFUNC_FUNCMSGPRE ``
+ !define STRFUNC_FUNCMSGPOST ``
+
+ ;Header File Function Macros
+
+ !macro STRFUNC_FUNCLIST_INSERT Name
+ !ifdef StrFunc_List
+ !define StrFunc_List2 `${StrFunc_List}`
+ !undef StrFunc_List
+ !define StrFunc_List `${StrFunc_List2}|${Name}`
+ !undef StrFunc_List2
+ !else
+ !define StrFunc_List `${Name}`
+ !endif
+ !macroend
+
+ !macro STRFUNC_DEFFUNC Name
+ !insertmacro STRFUNC_FUNCLIST_INSERT ${Name}
+
+ !define `${Name}` `!insertmacro FUNCTION_STRING_${Name}`
+ !define `Un${Name}` `!insertmacro FUNCTION_STRING_Un${Name}`
+ !macroend
+
+ !macro STRFUNC_FUNC ShortName Credits
+ !verbose push
+ !verbose 4
+
+ !ifndef `Un${ShortName}`
+ !echo `${STRFUNC_FUNCMSGPRE}$ {Un${ShortName}} - © ${Credits}${STRFUNC_FUNCMSGPOST}`
+ !verbose pop
+ !define `Un${ShortName}` `!insertmacro FUNCTION_STRING_Un${ShortName}_Call`
+ Function `un.${ShortName}`
+ !else
+ !echo `${STRFUNC_FUNCMSGPRE}$ {${ShortName}} - © ${Credits}${STRFUNC_FUNCMSGPOST}`
+ !verbose pop
+ !undef `${ShortName}`
+ !define `${ShortName}` `!insertmacro FUNCTION_STRING_${ShortName}_Call`
+ Function `${ShortName}`
+ !endif
+ !macroend
+
+ ;Function Names Startup Definition
+
+ !insertmacro STRFUNC_DEFFUNC StrCase
+ !define StrCase_List `ResultVar|String|Type`
+ !define StrCase_TypeList `Output|Text|Option U L T S <>`
+ !macro `FUNCTION_STRING_UnStrCase`
+ !undef UnStrCase
+ !insertmacro FUNCTION_STRING_StrCase
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrClb
+ !define StrClb_List `ResultVar|String|Action`
+ !define StrClb_TypeList `Output|Text|Option > < <>`
+ !macro `FUNCTION_STRING_UnStrClb`
+ !undef UnStrClb
+ !insertmacro FUNCTION_STRING_StrClb
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrIOToNSIS
+ !define StrIOToNSIS_List `ResultVar|String`
+ !define StrIOToNSIS_TypeList `Output|Text`
+ !macro `FUNCTION_STRING_UnStrIOToNSIS`
+ !undef UnStrIOToNSIS
+ !insertmacro FUNCTION_STRING_StrIOToNSIS
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrLoc
+ !define StrLoc_List `ResultVar|String|StrToSearchFor|CounterDirection`
+ !define StrLoc_TypeList `Output|Text|Text|Option > <`
+ !macro `FUNCTION_STRING_UnStrLoc`
+ !undef UnStrLoc
+ !insertmacro FUNCTION_STRING_StrLoc
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrNSISToIO
+ !define StrNSISToIO_List `ResultVar|String`
+ !define StrNSISToIO_TypeList `Output|Text`
+ !macro `FUNCTION_STRING_UnStrNSISToIO`
+ !undef UnStrNSISToIO
+ !insertmacro FUNCTION_STRING_StrNSISToIO
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrRep
+ !define StrRep_List `ResultVar|String|StrToReplace|ReplacementString`
+ !define StrRep_TypeList `Output|Text|Text|Text`
+ !macro `FUNCTION_STRING_UnStrRep`
+ !undef UnStrRep
+ !insertmacro FUNCTION_STRING_StrRep
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrSort
+ !define StrSort_List `ResultVar|String|LeftStr|CenterStr|RightStr|IncludeLeftStr|IncludeCenterStr|IncludeRightStr`
+ !define StrSort_TypeList `Output|Text|Text|Text|Text|Option 1 0|Option 1 0|Option 1 0`
+ !macro `FUNCTION_STRING_UnStrSort`
+ !undef UnStrSort
+ !insertmacro FUNCTION_STRING_StrSort
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrStr
+ !define StrStr_List `ResultVar|String|StrToSearchFor`
+ !define StrStr_TypeList `Output|Text|Text`
+ !macro `FUNCTION_STRING_UnStrStr`
+ !undef UnStrStr
+ !insertmacro FUNCTION_STRING_StrStr
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrStrAdv
+ !define StrStrAdv_List `ResultVar|String|StrToSearchFor|SearchDirection|ResultStrDirection|DisplayStrToSearch|Loops|CaseSensitive`
+ !define StrStrAdv_TypeList `Output|Text|Text|Option > <|Option > <|Option 1 0|Text|Option 0 1`
+ !macro `FUNCTION_STRING_UnStrStrAdv`
+ !undef UnStrStrAdv
+ !insertmacro FUNCTION_STRING_StrStrAdv
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrTok
+ !define StrTok_List `ResultVar|String|Separators|ResultPart|SkipEmptyParts`
+ !define StrTok_TypeList `Output|Text|Text|Mixed L|Option 1 0`
+ !macro `FUNCTION_STRING_UnStrTok`
+ !undef UnStrTok
+ !insertmacro FUNCTION_STRING_StrTok
+ !macroend
+
+ !insertmacro STRFUNC_DEFFUNC StrTrimNewLines
+ !define StrTrimNewLines_List `ResultVar|String`
+ !define StrTrimNewLines_TypeList `Output|Text`
+ !macro `FUNCTION_STRING_UnStrTrimNewLines`
+ !undef UnStrTrimNewLines
+ !insertmacro FUNCTION_STRING_StrTrimNewLines
+ !macroend
+
+ ;Function Codes for Install and Uninstall
+
+ # Function StrCase
+ ################
+
+ !macro FUNCTION_STRING_StrCase
+ !insertmacro STRFUNC_FUNC `StrCase` `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) i .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) i .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
+ FunctionEnd
+
+ !macroend
+
+ !macro FUNCTION_STRING_StrClb
+ !insertmacro STRFUNC_FUNC `StrClb` `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(i $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
+ System::Call 'kernel32::GlobalAlloc(i 2, i r2) i.r2'
+
+ ;Step 3: Lock the handle
+ System::Call 'kernel32::GlobalLock(i r2) i.r3'
+
+ ;Step 4: Copy the text to locked clipboard buffer
+ System::Call 'kernel32::lstrcpyA(i r3, t r0)'
+
+ ;Step 5: Unlock the handle again
+ System::Call 'kernel32::GlobalUnlock(i r2)'
+
+ ;Step 6: Set the information to the clipboard
+ System::Call 'user32::SetClipboardData(i 1, i r2)'
+
+ StrCpy $0 ""
+
+ ${ElseIf} $1 == "<" ;Get
+
+ ;Step 1: Get clipboard data
+ System::Call 'user32::GetClipboardData(i 1) i .r2'
+
+ ;Step 2: Lock and copy data (kichik's fix)
+ System::Call 'kernel32::GlobalLock(i r2) t .r0'
+
+ ;Step 3: Unlock (kichik's fix)
+ System::Call 'kernel32::GlobalUnlock(i r2)'
+
+ ${ElseIf} $1 == "<>" ;Swap
+
+ ;Step 1: Get clipboard data
+ System::Call 'user32::GetClipboardData(i 1) i .r2'
+
+ ;Step 2: Lock and copy data (kichik's fix)
+ System::Call 'kernel32::GlobalLock(i r2) t .r4'
+
+ ;Step 3: Unlock (kichik's fix)
+ System::Call 'kernel32::GlobalUnlock(i r2)'
+
+ ;Step 4: Clear the clipboard
+ System::Call 'user32::EmptyClipboard()'
+
+ ;Step 5: Allocate global heap
+ StrLen $2 $0
+ IntOp $2 $2 + 1
+ System::Call 'kernel32::GlobalAlloc(i 2, i r2) i.r2'
+
+ ;Step 6: Lock the handle
+ System::Call 'kernel32::GlobalLock(i r2) i.r3'
+
+ ;Step 7: Copy the text to locked clipboard buffer
+ System::Call 'kernel32::lstrcpyA(i r3, t r0)'
+
+ ;Step 8: Unlock the handle again
+ System::Call 'kernel32::GlobalUnlock(i r2)'
+
+ ;Step 9: Set the information to the clipboard
+ System::Call 'user32::SetClipboardData(i 1, i r2)'
+
+ 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
+ FunctionEnd
+
+ !macroend
+
+ # Function StrIOToNSIS
+ ####################
+
+ !macro FUNCTION_STRING_StrIOToNSIS
+ !insertmacro STRFUNC_FUNC `StrIOToNSIS` `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
+ FunctionEnd
+ !macroend
+
+ # Function StrLoc
+ ###############
+
+ !macro FUNCTION_STRING_StrLoc
+ !insertmacro STRFUNC_FUNC `StrLoc` `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
+ FunctionEnd
+
+ !macroend
+
+ # Function StrNSISToIO
+ ####################
+
+ !macro FUNCTION_STRING_StrNSISToIO
+ !insertmacro STRFUNC_FUNC `StrNSISToIO` `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
+ FunctionEnd
+ !macroend
+
+ # Function StrRep
+ ###############
+
+ !macro FUNCTION_STRING_StrRep
+ !insertmacro STRFUNC_FUNC `StrRep` `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
+ FunctionEnd
+
+ !macroend
+
+ # Function StrSort
+ ################
+
+ !macro FUNCTION_STRING_StrSort
+ !insertmacro STRFUNC_FUNC `StrSort` `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
+ FunctionEnd
+
+ !macroend
+
+ # Function StrStr
+ ###############
+
+ !macro FUNCTION_STRING_StrStr
+ !insertmacro STRFUNC_FUNC `StrStr` `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
+ FunctionEnd
+
+ !macroend
+
+ # Function StrStrAdv
+ ##################
+
+ !macro FUNCTION_STRING_StrStrAdv
+ !insertmacro STRFUNC_FUNC `StrStrAdv` `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::lstrcmpA(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
+
+ FunctionEnd
+
+ !macroend
+
+ # Function StrTok
+ ###############
+
+ !macro FUNCTION_STRING_StrTok
+ !insertmacro STRFUNC_FUNC `StrTok` `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
+ FunctionEnd
+
+ !macroend
+
+ # Function StrTrimNewLines
+ ########################
+
+ !macro FUNCTION_STRING_StrTrimNewLines
+ !insertmacro STRFUNC_FUNC `StrTrimNewLines` `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
+ FunctionEnd
+
+ !macroend
+
+ ;Function Calls for Install and Uninstall
+
+ !macro FUNCTION_STRING_StrCase_Call ResultVar String Type
+ !verbose push
+ !verbose 4
+ !echo `$ {StrCase} "${ResultVar}" "${String}" "${Type}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${Type}`
+ Call StrCase
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrCase_Call ResultVar String Type
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrCase} "${ResultVar}" "${String}" "${Type}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${Type}`
+ Call un.StrCase
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrClb_Call ResultVar String Action
+ !verbose push
+ !verbose 4
+ !echo `$ {StrClb} "${ResultVar}" "${String}" "${Action}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${Action}`
+ Call StrClb
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrClb_Call ResultVar String Action
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrClb} "${ResultVar}" "${String}" "${Action}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${Action}`
+ Call un.StrClb
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrIOToNSIS_Call ResultVar String
+ !verbose push
+ !verbose 4
+ !echo `$ {StrIOToNSIS} "${ResultVar}" "${String}"`
+ !verbose pop
+
+ Push `${String}`
+ Call StrIOToNSIS
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrIOToNSIS_Call ResultVar String
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrIOToNSIS} "${ResultVar}" "${String}"`
+ !verbose pop
+
+ Push `${String}`
+ Call un.StrIOToNSIS
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrLoc_Call ResultVar String StrToSearchFor OffsetDirection
+ !verbose push
+ !verbose 4
+ !echo `$ {StrLoc} "${ResultVar}" "${String}" "${StrToSearchFor}" "${OffsetDirection}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StrToSearchFor}`
+ Push `${OffsetDirection}`
+ Call StrLoc
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrLoc_Call ResultVar String StrToSearchFor OffsetDirection
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrLoc} "${ResultVar}" "${String}" "${StrToSearchFor}" "${OffsetDirection}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StrToSearchFor}`
+ Push `${OffsetDirection}`
+ Call un.StrLoc
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrNSISToIO_Call ResultVar String
+ !verbose push
+ !verbose 4
+ !echo `$ {StrNSISToIO} "${ResultVar}" "${String}"`
+ !verbose pop
+
+ Push `${String}`
+ Call StrNSISToIO
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrNSISToIO_Call ResultVar String
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrNSISToIO} "${ResultVar}" "${String}"`
+ !verbose pop
+
+ Push `${String}`
+ Call un.StrNSISToIO
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrRep_Call ResultVar String StringToReplace ReplacementString
+ !verbose push
+ !verbose 4
+ !echo `$ {StrRep} "${ResultVar}" "${String}" "${StringToReplace}" "${ReplacementString}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StringToReplace}`
+ Push `${ReplacementString}`
+ Call StrRep
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrRep_Call ResultVar String StringToReplace ReplacementString
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrRep} "${ResultVar}" "${String}" "${StringToReplace}" "${ReplacementString}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StringToReplace}`
+ Push `${ReplacementString}`
+ Call un.StrRep
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrSort_Call ResultVar String CenterStr LeftStr RightStr IncludeCenterStr IncludeLeftStr IncludeRightStr
+ !verbose push
+ !verbose 4
+ !echo `$ {StrSort} "${ResultVar}" "${String}" "${CenterStr}" "${LeftStr}" "${RightStr}" "${IncludeCenterStr}" "${IncludeLeftStr}" "${IncludeRightStr}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${CenterStr}`
+ Push `${LeftStr}`
+ Push `${RightStr}`
+ Push `${IncludeCenterStr}`
+ Push `${IncludeLeftStr}`
+ Push `${IncludeRightStr}`
+ Call StrSort
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrSort_Call ResultVar String CenterStr LeftStr RightStr IncludeCenterStr IncludeLeftStr IncludeRightStr
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrSort} "${ResultVar}" "${String}" "${CenterStr}" "${LeftStr}" "${RightStr}" "${IncludeCenterStr}" "${IncludeLeftStr}" "${IncludeRightStr}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${CenterStr}`
+ Push `${LeftStr}`
+ Push `${RightStr}`
+ Push `${IncludeCenterStr}`
+ Push `${IncludeLeftStr}`
+ Push `${IncludeRightStr}`
+ Call un.StrSort
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrStr_Call ResultVar String StrToSearchFor
+ !verbose push
+ !verbose 4
+ !echo `$ {StrStr} "${ResultVar}" "${String}" "${StrToSearchFor}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StrToSearchFor}`
+ Call StrStr
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrStr_Call ResultVar String StrToSearchFor
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrStr} "${ResultVar}" "${String}" "${StrToSearchFor}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StrToSearchFor}`
+ Call un.StrStr
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrStrAdv_Call ResultVar String StrToSearchFor SearchDirection ResultStrDirection DisplayStrToSearch Loops CaseSensitive
+ !verbose push
+ !verbose 4
+ !echo `$ {StrStrAdv} "${ResultVar}" "${String}" "${StrToSearchFor}" "${SearchDirection}" "${ResultStrDirection}" "${DisplayStrToSearch}" "${Loops}" "${CaseSensitive}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StrToSearchFor}`
+ Push `${SearchDirection}`
+ Push `${ResultStrDirection}`
+ Push `${DisplayStrToSearch}`
+ Push `${Loops}`
+ Push `${CaseSensitive}`
+ Call StrStrAdv
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrStrAdv_Call ResultVar String StrToSearchFor SearchDirection ResultStrDirection DisplayStrToSearch Loops CaseSensitive
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrStrAdv} "${ResultVar}" "${String}" "${StrToSearchFor}" "${SearchDirection}" "${ResultStrDirection}" "${DisplayStrToSearch}" "${Loops}" "${CaseSensitive}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${StrToSearchFor}`
+ Push `${SearchDirection}`
+ Push `${ResultStrDirection}`
+ Push `${DisplayStrToSearch}`
+ Push `${Loops}`
+ Push `${CaseSensitive}`
+ Call un.StrStrAdv
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrTok_Call ResultVar String Separators ResultPart SkipEmptyParts
+ !verbose push
+ !verbose 4
+ !echo `$ {StrTok} "${ResultVar}" "${String}" "${Separators}" "${ResultPart}" "${SkipEmptyParts}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${Separators}`
+ Push `${ResultPart}`
+ Push `${SkipEmptyParts}`
+ Call StrTok
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrTok_Call ResultVar String Separators ResultPart SkipEmptyParts
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrTok} "${ResultVar}" "${String}" "${Separators}" "${ResultPart}" "${SkipEmptyParts}"`
+ !verbose pop
+
+ Push `${String}`
+ Push `${Separators}`
+ Push `${ResultPart}`
+ Push `${SkipEmptyParts}`
+ Call un.StrTok
+ Pop `${ResultVar}`
+ !macroend
+
+ !macro FUNCTION_STRING_StrTrimNewLines_Call ResultVar String
+ !verbose push
+ !verbose 4
+ !echo `$ {StrTrimNewLines} "${ResultVar}" "${String}"`
+ !verbose pop
+
+ Push `${String}`
+ Call StrTrimNewLines
+ Pop `${ResultVar}`
+ !macroend
+ !macro FUNCTION_STRING_UnStrTrimNewLines_Call ResultVar String
+ !verbose push
+ !verbose 4
+ !echo `$ {UnStrTrimNewLines} "${ResultVar}" "${String}"`
+ !verbose pop
+
+ Push `${String}`
+ Call un.StrTrimNewLines
+ Pop `${ResultVar}`
+ !macroend
+
+!endif
+!verbose 3
+!define STRFUNC_VERBOSITY ${_STRFUNC_VERBOSITY}
+!undef _STRFUNC_VERBOSITY
+!verbose pop
diff --git a/Include/StrFunc.txt b/Include/StrFunc.txt
index 400f383..e8da9df 100755
--- a/Include/StrFunc.txt
+++ b/Include/StrFunc.txt
@@ -1,707 +1,707 @@
-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 has to be inside 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 inputed.
- 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 inputed. 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 called
- first before and out of any sections and functions, and without
- parameters.
-
- Example:
- --------
-
- ${StrStr}
-
- 3.2 How To Use Commands In Uninstall Sections and Functions
- -----------------------------------------------------------
-
- Commands with Uninstall Sections and Functions support have "Un" before
- the words inside curly brackets "{}".
-
- Example:
- --------
-
- ${UnStrStr}
-
- A complete example with both Install and Uninstall Commands:
- ------------------------------------------------------------
-
-
- !include "StrFunc.nsh"
-
- ${StrStr} # Supportable for Install Sections and Functions
-
- ${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 LeftStr CenterStr 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".
-
- 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".
-
- CenterStr
- String to search in "String".
-
- 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 outputed 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 on 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 comparation 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 everytime.
-- 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.
+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 has to be inside 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 inputed.
+ 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 inputed. 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 called
+ first before and out of any sections and functions, and without
+ parameters.
+
+ Example:
+ --------
+
+ ${StrStr}
+
+ 3.2 How To Use Commands In Uninstall Sections and Functions
+ -----------------------------------------------------------
+
+ Commands with Uninstall Sections and Functions support have "Un" before
+ the words inside curly brackets "{}".
+
+ Example:
+ --------
+
+ ${UnStrStr}
+
+ A complete example with both Install and Uninstall Commands:
+ ------------------------------------------------------------
+
+
+ !include "StrFunc.nsh"
+
+ ${StrStr} # Supportable for Install Sections and Functions
+
+ ${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 LeftStr CenterStr 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".
+
+ 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".
+
+ CenterStr
+ String to search in "String".
+
+ 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 outputed 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 on 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 comparation 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 everytime.
+- 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/Include/TextFunc.nsh b/Include/TextFunc.nsh
index 4069834..248dbca 100755
--- a/Include/TextFunc.nsh
+++ b/Include/TextFunc.nsh
@@ -1,1504 +1,1504 @@
-/*
-_____________________________________________________________________________
-
- 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. !insertmacro TextFunction
- 3. [Section|Function]
- ${TextFunction} "File" "..." $var
- [SectionEnd|FunctionEnd]
-
-
- TextFunction=[LineFind|LineRead|FileReadFromEnd|LineSum|FileJoin|
- TextCompare|TextCompareS|ConfigRead|ConfigReadS|
- ConfigWrite|ConfigWriteS|FileRecode|TrimNewLines]
-
- un.TextFunction=[un.LineFind|un.LineRead|un.FileReadFromEnd|un.LineSum|
- un.FileJoin|un.TextCompare|un.TextCompareS|un.ConfigRead|
- un.ConfigReadS|un.ConfigWrite|un.ConfigWriteS|un.FileRecode|
- un.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
-!define TEXTFUNC_INCLUDED
-
-!include FileFunc.nsh
-
-!verbose push
-!verbose 3
-!ifndef _TEXTFUNC_VERBOSE
- !define _TEXTFUNC_VERBOSE 3
-!endif
-!verbose ${_TEXTFUNC_VERBOSE}
-!define TEXTFUNC_VERBOSE `!insertmacro TEXTFUNC_VERBOSE`
-!define _TEXTFUNC_UN
-!define _TEXTFUNC_S
-!verbose pop
-
-!macro TEXTFUNC_VERBOSE _VERBOSE
- !verbose push
- !verbose 3
- !undef _TEXTFUNC_VERBOSE
- !define _TEXTFUNC_VERBOSE ${_VERBOSE}
- !verbose pop
-!macroend
-
-
-# Install. Case insensitive. #
-
-!macro LineFindCall _INPUT _OUTPUT _RANGE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_INPUT}`
- Push `${_OUTPUT}`
- Push `${_RANGE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call LineFind
- Pop $0
- !verbose pop
-!macroend
-
-!macro LineReadCall _FILE _NUMBER _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_NUMBER}`
- Call LineRead
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro FileReadFromEndCall _FILE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call FileReadFromEnd
- Pop $0
- !verbose pop
-!macroend
-
-!macro LineSumCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call LineSum
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro FileJoinCall _FILE1 _FILE2 _FILE3
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_FILE3}`
- Call 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`
- Call TextCompare
- Pop $0
- !verbose pop
-!macroend
-
-!macro ConfigReadCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call ConfigRead
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro ConfigWriteCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call ConfigWrite
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro FileRecodeCall _FILE _FORMAT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_FORMAT}`
- Call FileRecode
- !verbose pop
-!macroend
-
-!macro TrimNewLinesCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call TrimNewLines
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro _TextFunc_TempFileForFile _FILE _RESULT
- ${${_TEXTFUNC_UN}GetParent} ${_FILE} ${_RESULT}
- StrCmp ${_RESULT} "" 0 +2
- StrCpy ${_RESULT} $EXEDIR
- GetTempFileName ${_RESULT} ${_RESULT}
- StrCmp ${_RESULT} "" 0 +2
- GetTempFileName ${_RESULT}
- ClearErrors
-!macroend
-
-!macro LineFind
- !ifndef ${_TEXTFUNC_UN}LineFind
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}LineFind `!insertmacro ${_TEXTFUNC_UN}LineFindCall`
-
- !insertmacro ${_TEXTFUNC_UN}GetParent
-
- Function ${_TEXTFUNC_UN}LineFind
- 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 error
- StrCmp $1 '/NUL' 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 error
-
- 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 delspaces
- StrCpy $2 $2 '' 1
- StrCpy $8 $2 1 -1
- StrCmp $8 '}' 0 delspaces
- StrCpy $2 $2 -1
- StrCpy $R6 cut
-
- delspaces:
- StrCpy $8 $2 1
- StrCmp $8 ' ' 0 +3
- StrCpy $2 $2 '' 1
- goto -3
- StrCmp $2$7 '0' file
- StrCpy $4 ''
- StrCpy $5 ''
- StrCmp $2 '' writechk
-
- 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 ':' range
-
- IntCmp $4 0 0 +2
- IntCmp $5 -1 goto 0 growthcmp
- StrCmp $R7 '' 0 minus2plus
- StrCpy $R7 0
- FileOpen $8 $0 r
- FileRead $8 $9
- IfErrors +3
- IntOp $R7 $R7 + 1
- Goto -3
- FileClose $8
-
- 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 goto 0 growthcmp
- IntOp $5 $R7 + $5
- IntOp $5 $5 + 1
- growthcmp:
- IntCmp $4 $5 goto goto
- StrCpy $5 $4
- goto:
- goto $7
-
- file:
- StrCmp $1 '/NUL' notemp
- !insertmacro _TextFunc_TempFileForFile $1 $R4
- Push $R4
- FileOpen $R4 $R4 w
- notemp:
- FileOpen $R5 $0 r
- IfErrors preerror
-
- loop:
- IntOp $R8 $R8 + 1
- FileRead $R5 $R9
- IfErrors handleclose
-
- cmp:
- StrCmp $2$4$5 '' writechk
- IntCmp $4 $R8 call 0 writechk
- StrCmp $5 -1 call
- IntCmp $5 $R8 call 0 call
-
- GetLabelAddress $7 cmp
- goto delspaces
-
- 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 preerror
- StrCmp $9 'StopLineFind' 0 +3
- IntOp $6 $6 + 1
- goto handleclose
- StrCmp $1 '/NUL' loop
- StrCmp $9 'SkipWrite' 0 +3
- IntOp $6 $6 + 1
- goto loop
- StrCmp $7 $R9 write
- IntOp $6 $6 + 1
- goto write
-
- writechk:
- StrCmp $1 '/NUL' loop
- StrCmp $R6 cut 0 write
- IntOp $6 $6 + 1
- goto loop
-
- write:
- FileWrite $R4 $R9
- goto loop
-
- preerror:
- SetErrors
-
- handleclose:
- StrCmp $1 '/NUL' +3
- FileClose $R4
- Pop $R4
- FileClose $R5
- IfErrors error
-
- StrCmp $1 '/NUL' end
- StrCmp $1 '' 0 +2
- StrCpy $1 $0
- StrCmp $6 0 0 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 rename
- Delete $R4
- StrCmp $1 $0 end
- CopyFiles /SILENT $0 $1
- goto end
-
- rename:
- Delete '$EXEDIR\$1'
- Rename $R4 '$EXEDIR\$1'
- IfErrors 0 end
- Delete $1
- Rename $R4 $1
- IfErrors 0 end
-
- error:
- SetErrors
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro LineRead
- !ifndef ${_TEXTFUNC_UN}LineRead
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}LineRead `!insertmacro ${_TEXTFUNC_UN}LineReadCall`
-
- Function ${_TEXTFUNC_UN}LineRead
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- ClearErrors
-
- IfFileExists $0 0 error
- IntOp $1 $1 + 0
- IntCmp $1 0 error 0 plus
- StrCpy $4 0
- FileOpen $2 $0 r
- IfErrors 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 error error
-
- plus:
- FileOpen $2 $0 r
- IfErrors error
- StrCpy $3 0
- IntOp $3 $3 + 1
- FileRead $2 $0
- IfErrors +4
- StrCmp $3 $1 0 -3
- FileClose $2
- goto end
- FileClose $2
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro FileReadFromEnd
- !ifndef ${_TEXTFUNC_UN}FileReadFromEnd
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}FileReadFromEnd `!insertmacro ${_TEXTFUNC_UN}FileReadFromEndCall`
-
- Function ${_TEXTFUNC_UN}FileReadFromEnd
- Exch $1
- Exch
- Exch $0
- Exch
- Push $7
- Push $8
- Push $9
- ClearErrors
-
- StrCpy $7 -1
- StrCpy $8 0
- IfFileExists $0 0 error
- FileOpen $0 $0 r
- IfErrors error
- FileRead $0 $9
- IfErrors +4
- Push $9
- IntOp $8 $8 + 1
- goto -4
- FileClose $0
-
- nextline:
- StrCmp $8 0 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 error
- StrCmp $0 'StopFileReadFromEnd' clearstack nextline
-
- error:
- SetErrors
-
- clearstack:
- StrCmp $8 0 end
- Pop $9
- IntOp $8 $8 - 1
- goto clearstack
-
- end:
- Pop $9
- Pop $8
- Pop $7
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro LineSum
- !ifndef ${_TEXTFUNC_UN}LineSum
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}LineSum `!insertmacro ${_TEXTFUNC_UN}LineSumCall`
-
- Function ${_TEXTFUNC_UN}LineSum
- Exch $0
- Push $1
- Push $2
- ClearErrors
-
- IfFileExists $0 0 error
- StrCpy $2 0
- FileOpen $0 $0 r
- IfErrors error
- FileRead $0 $1
- IfErrors +3
- IntOp $2 $2 + 1
- Goto -3
- FileClose $0
- StrCpy $0 $2
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro FileJoin
- !ifndef ${_TEXTFUNC_UN}FileJoin
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}FileJoin `!insertmacro ${_TEXTFUNC_UN}FileJoinCall`
-
- !insertmacro ${_TEXTFUNC_UN}GetParent
-
- Function ${_TEXTFUNC_UN}FileJoin
- Exch $2
- Exch
- Exch $1
- Exch
- Exch 2
- Exch $0
- Exch 2
- Push $3
- Push $4
- Push $5
- ClearErrors
-
- IfFileExists $0 0 error
- IfFileExists $1 0 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 error
-
- StrCmp $2 $0 0 +2
- StrCpy $2 ''
- StrCmp $2 '' 0 +3
- StrCpy $4 $0
- Goto notemp
- !insertmacro _TextFunc_TempFileForFile $2 $4
- CopyFiles /SILENT $0 $4
- notemp:
- FileOpen $3 $4 a
- IfErrors 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 error
- FileRead $0 $5
- IfErrors +3
- FileWrite $3 $5
- goto -3
- FileClose $0
- FileClose $3
- StrCmp $2 '' end
- Delete '$EXEDIR\$2'
- Rename $4 '$EXEDIR\$2'
- IfErrors 0 end
- Delete $2
- Rename $4 $2
- IfErrors 0 end
-
- error:
- SetErrors
-
- end:
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro TextCompare
- !ifndef ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}Call`
-
- Function ${_TEXTFUNC_UN}TextCompare${_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 error
- IfFileExists $1 0 error
- StrCmp $2 'FastDiff' +5
- StrCmp $2 'FastEqual' +4
- StrCmp $2 'SlowDiff' +3
- StrCmp $2 'SlowEqual' +2
- goto error
-
- FileOpen $4 $0 r
- IfErrors error
- FileOpen $5 $1 r
- IfErrors error
- SetDetailsPrint textonly
-
- StrCpy $6 0
- StrCpy $8 0
-
- nextline:
- StrCmp${_TEXTFUNC_S} $4 '' fast
- IntOp $8 $8 + 1
- FileRead $4 $9
- IfErrors 0 +4
- FileClose $4
- StrCpy $4 ''
- StrCmp${_TEXTFUNC_S} $5 '' end
- StrCmp $2 'FastDiff' fast
- StrCmp $2 'FastEqual' fast slow
-
- fast:
- StrCmp${_TEXTFUNC_S} $5 '' call
- IntOp $6 $6 + 1
- FileRead $5 $7
- IfErrors 0 +5
- FileClose $5
- StrCpy $5 ''
- StrCmp${_TEXTFUNC_S} $4 '' end
- StrCmp $2 'FastDiff' call close
- StrCmp $2 'FastDiff' 0 +2
- StrCmp${_TEXTFUNC_S} $7 $9 nextline call
- StrCmp${_TEXTFUNC_S} $7 $9 call nextline
-
- slow:
- StrCmp${_TEXTFUNC_S} $4 '' close
- StrCpy $6 ''
- DetailPrint '$8. $9'
- FileSeek $5 0
-
- slownext:
- FileRead $5 $7
- IfErrors 0 +2
- StrCmp $2 'SlowDiff' call nextline
- StrCmp $2 'SlowDiff' 0 +2
- StrCmp${_TEXTFUNC_S} $7 $9 nextline slownext
- IntOp $6 $6 + 1
- StrCmp${_TEXTFUNC_S} $7 $9 0 slownext
-
- 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 nextline
-
- close:
- FileClose $4
- FileClose $5
- goto end
-
- error:
- SetErrors
-
- end:
- SetDetailsPrint both
- Pop $9
- Pop $8
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro ConfigRead
- !ifndef ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}Call`
-
- Function ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- ClearErrors
-
- FileOpen $2 $0 r
- IfErrors error
- StrLen $0 $1
- StrCmp${_TEXTFUNC_S} $0 0 error
-
- readnext:
- FileRead $2 $3
- IfErrors error
- StrCpy $4 $3 $0
- StrCmp${_TEXTFUNC_S} $4 $1 0 readnext
- StrCpy $0 $3 '' $0
- StrCpy $4 $0 1 -1
- StrCmp${_TEXTFUNC_S} $4 '$\r' +2
- StrCmp${_TEXTFUNC_S} $4 '$\n' 0 close
- StrCpy $0 $0 -1
- goto -4
-
- error:
- SetErrors
- StrCpy $0 ''
-
- close:
- FileClose $2
-
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro ConfigWrite
- !ifndef ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}Call`
-
- Function ${_TEXTFUNC_UN}ConfigWrite${_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 error
- FileOpen $3 $0 a
- IfErrors error
-
- StrLen $0 $1
- StrCmp${_TEXTFUNC_S} $0 0 0 readnext
- StrCpy $0 ''
- goto close
-
- readnext:
- FileRead $3 $4
- IfErrors add
- StrCpy $5 $4 $0
- StrCmp${_TEXTFUNC_S} $5 $1 0 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 '' change
- StrCmp${_TEXTFUNC_S} $6 '$1$2' 0 change
- StrCpy $0 SAME
- goto close
-
- change:
- FileSeek $3 0 CUR $5
- StrLen $4 $4
- IntOp $4 $5 - $4
- FileSeek $3 0 END $6
- IntOp $6 $6 - $5
-
- System::Alloc /NOUNLOAD $6
- Pop $0
- FileSeek $3 $5 SET
- System::Call /NOUNLOAD 'kernel32::ReadFile(i r3, i r0, i $6, t.,)'
- FileSeek $3 $4 SET
- StrCmp${_TEXTFUNC_S} $2 '' +2
- FileWrite $3 '$1$2$\r$\n'
- System::Call /NOUNLOAD 'kernel32::WriteFile(i r3, i r0, i $6, t.,)'
- System::Call /NOUNLOAD 'kernel32::SetEndOfFile(i r3)'
- System::Free $0
- StrCmp${_TEXTFUNC_S} $2 '' +3
- StrCpy $0 CHANGED
- goto close
- StrCpy $0 DELETED
- goto close
-
- add:
- StrCmp${_TEXTFUNC_S} $2 '' 0 +3
- StrCpy $0 SAME
- goto 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
-
- close:
- FileClose $3
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro FileRecode
- !ifndef ${_TEXTFUNC_UN}FileRecode
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}FileRecode `!insertmacro ${_TEXTFUNC_UN}FileRecodeCall`
-
- Function ${_TEXTFUNC_UN}FileRecode
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
-
- IfFileExists $0 0 error
- StrCmp $1 OemToChar +2
- StrCmp $1 CharToOem 0 error
-
- FileOpen $2 $0 a
- FileSeek $2 0 END $3
- System::Alloc /NOUNLOAD $3
- Pop $4
- FileSeek $2 0 SET
- System::Call /NOUNLOAD 'kernel32::ReadFile(i r2, i r4, i $3, t.,)'
- System::Call /NOUNLOAD 'user32::$1Buff(i r4, i r4, i $3)'
- FileSeek $2 0 SET
- System::Call /NOUNLOAD 'kernel32::WriteFile(i r2, i r4, i $3, t.,)'
- System::Free $4
- FileClose $2
- goto end
-
- error:
- SetErrors
-
- end:
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro TrimNewLines
- !ifndef ${_TEXTFUNC_UN}TrimNewLines
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}TrimNewLines `!insertmacro ${_TEXTFUNC_UN}TrimNewLinesCall`
-
- Function ${_TEXTFUNC_UN}TrimNewLines
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-
-# Uninstall. Case insensitive. #
-
-!macro un.LineFindCall _INPUT _OUTPUT _RANGE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_INPUT}`
- Push `${_OUTPUT}`
- Push `${_RANGE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.LineFind
- Pop $0
- !verbose pop
-!macroend
-
-!macro un.LineReadCall _FILE _NUMBER _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_NUMBER}`
- Call un.LineRead
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.FileReadFromEndCall _FILE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.FileReadFromEnd
- Pop $0
- !verbose pop
-!macroend
-
-!macro un.LineSumCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call un.LineSum
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.FileJoinCall _FILE1 _FILE2 _FILE3
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_FILE3}`
- Call un.FileJoin
- !verbose pop
-!macroend
-
-!macro un.TextCompareCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.TextCompare
- Pop $0
- !verbose pop
-!macroend
-
-!macro un.ConfigReadCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call un.ConfigRead
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.ConfigWriteCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call un.ConfigWrite
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.FileRecodeCall _FILE _FORMAT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_FORMAT}`
- Call un.FileRecode
- !verbose pop
-!macroend
-
-!macro un.TrimNewLinesCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call un.TrimNewLines
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.LineFind
- !ifndef un.LineFind
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro LineFind
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.LineRead
- !ifndef un.LineRead
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro LineRead
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.FileReadFromEnd
- !ifndef un.FileReadFromEnd
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro FileReadFromEnd
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.LineSum
- !ifndef un.LineSum
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro LineSum
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.FileJoin
- !ifndef un.FileJoin
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro FileJoin
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.TextCompare
- !ifndef un.TextCompare
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro TextCompare
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.ConfigRead
- !ifndef un.ConfigRead
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro ConfigRead
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.ConfigWrite
- !ifndef un.ConfigWrite
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro ConfigWrite
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.FileRecode
- !ifndef un.FileRecode
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro FileRecode
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.TrimNewLines
- !ifndef un.TrimNewLines
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro TrimNewLines
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-
-# Install. Case sensitive. #
-
-!macro TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call TextCompareS
- Pop $0
- !verbose pop
-!macroend
-
-!macro ConfigReadSCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call ConfigReadS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call ConfigWriteS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro TextCompareS
- !ifndef TextCompareS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro TextCompare
-
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro ConfigReadS
- !ifndef ConfigReadS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigRead
-
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro ConfigWriteS
- !ifndef ConfigWriteS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigWrite
-
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
-!macroend
-
-
-# Uninstall. Case sensitive. #
-
-!macro un.TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.TextCompareS
- Pop $0
- !verbose pop
-!macroend
-
-!macro un.ConfigReadSCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call un.ConfigReadS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call un.ConfigWriteS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.TextCompareS
- !ifndef un.TextCompareS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro TextCompare
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.ConfigReadS
- !ifndef un.ConfigReadS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigRead
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.ConfigWriteS
- !ifndef un.ConfigWriteS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigWrite
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!endif
+/*
+_____________________________________________________________________________
+
+ 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. !insertmacro TextFunction
+ 3. [Section|Function]
+ ${TextFunction} "File" "..." $var
+ [SectionEnd|FunctionEnd]
+
+
+ TextFunction=[LineFind|LineRead|FileReadFromEnd|LineSum|FileJoin|
+ TextCompare|TextCompareS|ConfigRead|ConfigReadS|
+ ConfigWrite|ConfigWriteS|FileRecode|TrimNewLines]
+
+ un.TextFunction=[un.LineFind|un.LineRead|un.FileReadFromEnd|un.LineSum|
+ un.FileJoin|un.TextCompare|un.TextCompareS|un.ConfigRead|
+ un.ConfigReadS|un.ConfigWrite|un.ConfigWriteS|un.FileRecode|
+ un.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
+!define TEXTFUNC_INCLUDED
+
+!include FileFunc.nsh
+
+!verbose push
+!verbose 3
+!ifndef _TEXTFUNC_VERBOSE
+ !define _TEXTFUNC_VERBOSE 3
+!endif
+!verbose ${_TEXTFUNC_VERBOSE}
+!define TEXTFUNC_VERBOSE `!insertmacro TEXTFUNC_VERBOSE`
+!define _TEXTFUNC_UN
+!define _TEXTFUNC_S
+!verbose pop
+
+!macro TEXTFUNC_VERBOSE _VERBOSE
+ !verbose push
+ !verbose 3
+ !undef _TEXTFUNC_VERBOSE
+ !define _TEXTFUNC_VERBOSE ${_VERBOSE}
+ !verbose pop
+!macroend
+
+
+# Install. Case insensitive. #
+
+!macro LineFindCall _INPUT _OUTPUT _RANGE _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_INPUT}`
+ Push `${_OUTPUT}`
+ Push `${_RANGE}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call LineFind
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro LineReadCall _FILE _NUMBER _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_NUMBER}`
+ Call LineRead
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro FileReadFromEndCall _FILE _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_FILE}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call FileReadFromEnd
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro LineSumCall _FILE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Call LineSum
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro FileJoinCall _FILE1 _FILE2 _FILE3
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE1}`
+ Push `${_FILE2}`
+ Push `${_FILE3}`
+ Call 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`
+ Call TextCompare
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro ConfigReadCall _FILE _ENTRY _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Call ConfigRead
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro ConfigWriteCall _FILE _ENTRY _VALUE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Push `${_VALUE}`
+ Call ConfigWrite
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro FileRecodeCall _FILE _FORMAT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_FORMAT}`
+ Call FileRecode
+ !verbose pop
+!macroend
+
+!macro TrimNewLinesCall _FILE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Call TrimNewLines
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro _TextFunc_TempFileForFile _FILE _RESULT
+ ${${_TEXTFUNC_UN}GetParent} ${_FILE} ${_RESULT}
+ StrCmp ${_RESULT} "" 0 +2
+ StrCpy ${_RESULT} $EXEDIR
+ GetTempFileName ${_RESULT} ${_RESULT}
+ StrCmp ${_RESULT} "" 0 +2
+ GetTempFileName ${_RESULT}
+ ClearErrors
+!macroend
+
+!macro LineFind
+ !ifndef ${_TEXTFUNC_UN}LineFind
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}LineFind `!insertmacro ${_TEXTFUNC_UN}LineFindCall`
+
+ !insertmacro ${_TEXTFUNC_UN}GetParent
+
+ Function ${_TEXTFUNC_UN}LineFind
+ 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 error
+ StrCmp $1 '/NUL' 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 error
+
+ 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 delspaces
+ StrCpy $2 $2 '' 1
+ StrCpy $8 $2 1 -1
+ StrCmp $8 '}' 0 delspaces
+ StrCpy $2 $2 -1
+ StrCpy $R6 cut
+
+ delspaces:
+ StrCpy $8 $2 1
+ StrCmp $8 ' ' 0 +3
+ StrCpy $2 $2 '' 1
+ goto -3
+ StrCmp $2$7 '0' file
+ StrCpy $4 ''
+ StrCpy $5 ''
+ StrCmp $2 '' writechk
+
+ 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 ':' range
+
+ IntCmp $4 0 0 +2
+ IntCmp $5 -1 goto 0 growthcmp
+ StrCmp $R7 '' 0 minus2plus
+ StrCpy $R7 0
+ FileOpen $8 $0 r
+ FileRead $8 $9
+ IfErrors +3
+ IntOp $R7 $R7 + 1
+ Goto -3
+ FileClose $8
+
+ 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 goto 0 growthcmp
+ IntOp $5 $R7 + $5
+ IntOp $5 $5 + 1
+ growthcmp:
+ IntCmp $4 $5 goto goto
+ StrCpy $5 $4
+ goto:
+ goto $7
+
+ file:
+ StrCmp $1 '/NUL' notemp
+ !insertmacro _TextFunc_TempFileForFile $1 $R4
+ Push $R4
+ FileOpen $R4 $R4 w
+ notemp:
+ FileOpen $R5 $0 r
+ IfErrors preerror
+
+ loop:
+ IntOp $R8 $R8 + 1
+ FileRead $R5 $R9
+ IfErrors handleclose
+
+ cmp:
+ StrCmp $2$4$5 '' writechk
+ IntCmp $4 $R8 call 0 writechk
+ StrCmp $5 -1 call
+ IntCmp $5 $R8 call 0 call
+
+ GetLabelAddress $7 cmp
+ goto delspaces
+
+ 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 preerror
+ StrCmp $9 'StopLineFind' 0 +3
+ IntOp $6 $6 + 1
+ goto handleclose
+ StrCmp $1 '/NUL' loop
+ StrCmp $9 'SkipWrite' 0 +3
+ IntOp $6 $6 + 1
+ goto loop
+ StrCmp $7 $R9 write
+ IntOp $6 $6 + 1
+ goto write
+
+ writechk:
+ StrCmp $1 '/NUL' loop
+ StrCmp $R6 cut 0 write
+ IntOp $6 $6 + 1
+ goto loop
+
+ write:
+ FileWrite $R4 $R9
+ goto loop
+
+ preerror:
+ SetErrors
+
+ handleclose:
+ StrCmp $1 '/NUL' +3
+ FileClose $R4
+ Pop $R4
+ FileClose $R5
+ IfErrors error
+
+ StrCmp $1 '/NUL' end
+ StrCmp $1 '' 0 +2
+ StrCpy $1 $0
+ StrCmp $6 0 0 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 rename
+ Delete $R4
+ StrCmp $1 $0 end
+ CopyFiles /SILENT $0 $1
+ goto end
+
+ rename:
+ Delete '$EXEDIR\$1'
+ Rename $R4 '$EXEDIR\$1'
+ IfErrors 0 end
+ Delete $1
+ Rename $R4 $1
+ IfErrors 0 end
+
+ error:
+ SetErrors
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro LineRead
+ !ifndef ${_TEXTFUNC_UN}LineRead
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}LineRead `!insertmacro ${_TEXTFUNC_UN}LineReadCall`
+
+ Function ${_TEXTFUNC_UN}LineRead
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $2
+ Push $3
+ Push $4
+ ClearErrors
+
+ IfFileExists $0 0 error
+ IntOp $1 $1 + 0
+ IntCmp $1 0 error 0 plus
+ StrCpy $4 0
+ FileOpen $2 $0 r
+ IfErrors 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 error error
+
+ plus:
+ FileOpen $2 $0 r
+ IfErrors error
+ StrCpy $3 0
+ IntOp $3 $3 + 1
+ FileRead $2 $0
+ IfErrors +4
+ StrCmp $3 $1 0 -3
+ FileClose $2
+ goto end
+ FileClose $2
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro FileReadFromEnd
+ !ifndef ${_TEXTFUNC_UN}FileReadFromEnd
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}FileReadFromEnd `!insertmacro ${_TEXTFUNC_UN}FileReadFromEndCall`
+
+ Function ${_TEXTFUNC_UN}FileReadFromEnd
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $7
+ Push $8
+ Push $9
+ ClearErrors
+
+ StrCpy $7 -1
+ StrCpy $8 0
+ IfFileExists $0 0 error
+ FileOpen $0 $0 r
+ IfErrors error
+ FileRead $0 $9
+ IfErrors +4
+ Push $9
+ IntOp $8 $8 + 1
+ goto -4
+ FileClose $0
+
+ nextline:
+ StrCmp $8 0 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 error
+ StrCmp $0 'StopFileReadFromEnd' clearstack nextline
+
+ error:
+ SetErrors
+
+ clearstack:
+ StrCmp $8 0 end
+ Pop $9
+ IntOp $8 $8 - 1
+ goto clearstack
+
+ end:
+ Pop $9
+ Pop $8
+ Pop $7
+ Pop $1
+ Pop $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro LineSum
+ !ifndef ${_TEXTFUNC_UN}LineSum
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}LineSum `!insertmacro ${_TEXTFUNC_UN}LineSumCall`
+
+ Function ${_TEXTFUNC_UN}LineSum
+ Exch $0
+ Push $1
+ Push $2
+ ClearErrors
+
+ IfFileExists $0 0 error
+ StrCpy $2 0
+ FileOpen $0 $0 r
+ IfErrors error
+ FileRead $0 $1
+ IfErrors +3
+ IntOp $2 $2 + 1
+ Goto -3
+ FileClose $0
+ StrCpy $0 $2
+ goto end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro FileJoin
+ !ifndef ${_TEXTFUNC_UN}FileJoin
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}FileJoin `!insertmacro ${_TEXTFUNC_UN}FileJoinCall`
+
+ !insertmacro ${_TEXTFUNC_UN}GetParent
+
+ Function ${_TEXTFUNC_UN}FileJoin
+ Exch $2
+ Exch
+ Exch $1
+ Exch
+ Exch 2
+ Exch $0
+ Exch 2
+ Push $3
+ Push $4
+ Push $5
+ ClearErrors
+
+ IfFileExists $0 0 error
+ IfFileExists $1 0 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 error
+
+ StrCmp $2 $0 0 +2
+ StrCpy $2 ''
+ StrCmp $2 '' 0 +3
+ StrCpy $4 $0
+ Goto notemp
+ !insertmacro _TextFunc_TempFileForFile $2 $4
+ CopyFiles /SILENT $0 $4
+ notemp:
+ FileOpen $3 $4 a
+ IfErrors 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 error
+ FileRead $0 $5
+ IfErrors +3
+ FileWrite $3 $5
+ goto -3
+ FileClose $0
+ FileClose $3
+ StrCmp $2 '' end
+ Delete '$EXEDIR\$2'
+ Rename $4 '$EXEDIR\$2'
+ IfErrors 0 end
+ Delete $2
+ Rename $4 $2
+ IfErrors 0 end
+
+ error:
+ SetErrors
+
+ end:
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro TextCompare
+ !ifndef ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}Call`
+
+ Function ${_TEXTFUNC_UN}TextCompare${_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 error
+ IfFileExists $1 0 error
+ StrCmp $2 'FastDiff' +5
+ StrCmp $2 'FastEqual' +4
+ StrCmp $2 'SlowDiff' +3
+ StrCmp $2 'SlowEqual' +2
+ goto error
+
+ FileOpen $4 $0 r
+ IfErrors error
+ FileOpen $5 $1 r
+ IfErrors error
+ SetDetailsPrint textonly
+
+ StrCpy $6 0
+ StrCpy $8 0
+
+ nextline:
+ StrCmp${_TEXTFUNC_S} $4 '' fast
+ IntOp $8 $8 + 1
+ FileRead $4 $9
+ IfErrors 0 +4
+ FileClose $4
+ StrCpy $4 ''
+ StrCmp${_TEXTFUNC_S} $5 '' end
+ StrCmp $2 'FastDiff' fast
+ StrCmp $2 'FastEqual' fast slow
+
+ fast:
+ StrCmp${_TEXTFUNC_S} $5 '' call
+ IntOp $6 $6 + 1
+ FileRead $5 $7
+ IfErrors 0 +5
+ FileClose $5
+ StrCpy $5 ''
+ StrCmp${_TEXTFUNC_S} $4 '' end
+ StrCmp $2 'FastDiff' call close
+ StrCmp $2 'FastDiff' 0 +2
+ StrCmp${_TEXTFUNC_S} $7 $9 nextline call
+ StrCmp${_TEXTFUNC_S} $7 $9 call nextline
+
+ slow:
+ StrCmp${_TEXTFUNC_S} $4 '' close
+ StrCpy $6 ''
+ DetailPrint '$8. $9'
+ FileSeek $5 0
+
+ slownext:
+ FileRead $5 $7
+ IfErrors 0 +2
+ StrCmp $2 'SlowDiff' call nextline
+ StrCmp $2 'SlowDiff' 0 +2
+ StrCmp${_TEXTFUNC_S} $7 $9 nextline slownext
+ IntOp $6 $6 + 1
+ StrCmp${_TEXTFUNC_S} $7 $9 0 slownext
+
+ 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 nextline
+
+ close:
+ FileClose $4
+ FileClose $5
+ goto end
+
+ error:
+ SetErrors
+
+ end:
+ SetDetailsPrint both
+ Pop $9
+ Pop $8
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro ConfigRead
+ !ifndef ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}Call`
+
+ Function ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $2
+ Push $3
+ Push $4
+ ClearErrors
+
+ FileOpen $2 $0 r
+ IfErrors error
+ StrLen $0 $1
+ StrCmp${_TEXTFUNC_S} $0 0 error
+
+ readnext:
+ FileRead $2 $3
+ IfErrors error
+ StrCpy $4 $3 $0
+ StrCmp${_TEXTFUNC_S} $4 $1 0 readnext
+ StrCpy $0 $3 '' $0
+ StrCpy $4 $0 1 -1
+ StrCmp${_TEXTFUNC_S} $4 '$\r' +2
+ StrCmp${_TEXTFUNC_S} $4 '$\n' 0 close
+ StrCpy $0 $0 -1
+ goto -4
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ close:
+ FileClose $2
+
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro ConfigWrite
+ !ifndef ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}Call`
+
+ Function ${_TEXTFUNC_UN}ConfigWrite${_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 error
+ FileOpen $3 $0 a
+ IfErrors error
+
+ StrLen $0 $1
+ StrCmp${_TEXTFUNC_S} $0 0 0 readnext
+ StrCpy $0 ''
+ goto close
+
+ readnext:
+ FileRead $3 $4
+ IfErrors add
+ StrCpy $5 $4 $0
+ StrCmp${_TEXTFUNC_S} $5 $1 0 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 '' change
+ StrCmp${_TEXTFUNC_S} $6 '$1$2' 0 change
+ StrCpy $0 SAME
+ goto close
+
+ change:
+ FileSeek $3 0 CUR $5
+ StrLen $4 $4
+ IntOp $4 $5 - $4
+ FileSeek $3 0 END $6
+ IntOp $6 $6 - $5
+
+ System::Alloc /NOUNLOAD $6
+ Pop $0
+ FileSeek $3 $5 SET
+ System::Call /NOUNLOAD 'kernel32::ReadFile(i r3, i r0, i $6, t.,)'
+ FileSeek $3 $4 SET
+ StrCmp${_TEXTFUNC_S} $2 '' +2
+ FileWrite $3 '$1$2$\r$\n'
+ System::Call /NOUNLOAD 'kernel32::WriteFile(i r3, i r0, i $6, t.,)'
+ System::Call /NOUNLOAD 'kernel32::SetEndOfFile(i r3)'
+ System::Free $0
+ StrCmp${_TEXTFUNC_S} $2 '' +3
+ StrCpy $0 CHANGED
+ goto close
+ StrCpy $0 DELETED
+ goto close
+
+ add:
+ StrCmp${_TEXTFUNC_S} $2 '' 0 +3
+ StrCpy $0 SAME
+ goto 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
+
+ close:
+ FileClose $3
+ goto end
+
+ error:
+ SetErrors
+ StrCpy $0 ''
+
+ end:
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro FileRecode
+ !ifndef ${_TEXTFUNC_UN}FileRecode
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}FileRecode `!insertmacro ${_TEXTFUNC_UN}FileRecodeCall`
+
+ Function ${_TEXTFUNC_UN}FileRecode
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $2
+ Push $3
+ Push $4
+
+ IfFileExists $0 0 error
+ StrCmp $1 OemToChar +2
+ StrCmp $1 CharToOem 0 error
+
+ FileOpen $2 $0 a
+ FileSeek $2 0 END $3
+ System::Alloc /NOUNLOAD $3
+ Pop $4
+ FileSeek $2 0 SET
+ System::Call /NOUNLOAD 'kernel32::ReadFile(i r2, i r4, i $3, t.,)'
+ System::Call /NOUNLOAD 'user32::$1Buff(i r4, i r4, i $3)'
+ FileSeek $2 0 SET
+ System::Call /NOUNLOAD 'kernel32::WriteFile(i r2, i r4, i $3, t.,)'
+ System::Free $4
+ FileClose $2
+ goto end
+
+ error:
+ SetErrors
+
+ end:
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro TrimNewLines
+ !ifndef ${_TEXTFUNC_UN}TrimNewLines
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !define ${_TEXTFUNC_UN}TrimNewLines `!insertmacro ${_TEXTFUNC_UN}TrimNewLinesCall`
+
+ Function ${_TEXTFUNC_UN}TrimNewLines
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+
+# Uninstall. Case insensitive. #
+
+!macro un.LineFindCall _INPUT _OUTPUT _RANGE _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_INPUT}`
+ Push `${_OUTPUT}`
+ Push `${_RANGE}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call un.LineFind
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro un.LineReadCall _FILE _NUMBER _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_NUMBER}`
+ Call un.LineRead
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.FileReadFromEndCall _FILE _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_FILE}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call un.FileReadFromEnd
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro un.LineSumCall _FILE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Call un.LineSum
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.FileJoinCall _FILE1 _FILE2 _FILE3
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE1}`
+ Push `${_FILE2}`
+ Push `${_FILE3}`
+ Call un.FileJoin
+ !verbose pop
+!macroend
+
+!macro un.TextCompareCall _FILE1 _FILE2 _OPTION _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_FILE1}`
+ Push `${_FILE2}`
+ Push `${_OPTION}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call un.TextCompare
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro un.ConfigReadCall _FILE _ENTRY _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Call un.ConfigRead
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.ConfigWriteCall _FILE _ENTRY _VALUE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Push `${_VALUE}`
+ Call un.ConfigWrite
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.FileRecodeCall _FILE _FORMAT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_FORMAT}`
+ Call un.FileRecode
+ !verbose pop
+!macroend
+
+!macro un.TrimNewLinesCall _FILE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Call un.TrimNewLines
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.LineFind
+ !ifndef un.LineFind
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro LineFind
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.LineRead
+ !ifndef un.LineRead
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro LineRead
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.FileReadFromEnd
+ !ifndef un.FileReadFromEnd
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro FileReadFromEnd
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.LineSum
+ !ifndef un.LineSum
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro LineSum
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.FileJoin
+ !ifndef un.FileJoin
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro FileJoin
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.TextCompare
+ !ifndef un.TextCompare
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro TextCompare
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.ConfigRead
+ !ifndef un.ConfigRead
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro ConfigRead
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.ConfigWrite
+ !ifndef un.ConfigWrite
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro ConfigWrite
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.FileRecode
+ !ifndef un.FileRecode
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro FileRecode
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.TrimNewLines
+ !ifndef un.TrimNewLines
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+
+ !insertmacro TrimNewLines
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+
+# Install. Case sensitive. #
+
+!macro TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_FILE1}`
+ Push `${_FILE2}`
+ Push `${_OPTION}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call TextCompareS
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro ConfigReadSCall _FILE _ENTRY _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Call ConfigReadS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Push `${_VALUE}`
+ Call ConfigWriteS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro TextCompareS
+ !ifndef TextCompareS
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S `S`
+
+ !insertmacro TextCompare
+
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro ConfigReadS
+ !ifndef ConfigReadS
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S `S`
+
+ !insertmacro ConfigRead
+
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro ConfigWriteS
+ !ifndef ConfigWriteS
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S `S`
+
+ !insertmacro ConfigWrite
+
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+
+# Uninstall. Case sensitive. #
+
+!macro un.TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push $0
+ Push `${_FILE1}`
+ Push `${_FILE2}`
+ Push `${_OPTION}`
+ GetFunctionAddress $0 `${_FUNC}`
+ Push `$0`
+ Call un.TextCompareS
+ Pop $0
+ !verbose pop
+!macroend
+
+!macro un.ConfigReadSCall _FILE _ENTRY _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Call un.ConfigReadS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ Push `${_FILE}`
+ Push `${_ENTRY}`
+ Push `${_VALUE}`
+ Call un.ConfigWriteS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.TextCompareS
+ !ifndef un.TextCompareS
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S `S`
+
+ !insertmacro TextCompare
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.ConfigReadS
+ !ifndef un.ConfigReadS
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S `S`
+
+ !insertmacro ConfigRead
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.ConfigWriteS
+ !ifndef un.ConfigWriteS
+ !verbose push
+ !verbose ${_TEXTFUNC_VERBOSE}
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN `un.`
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S `S`
+
+ !insertmacro ConfigWrite
+
+ !undef _TEXTFUNC_UN
+ !define _TEXTFUNC_UN
+ !undef _TEXTFUNC_S
+ !define _TEXTFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!endif
diff --git a/Include/UpgradeDLL.nsh b/Include/UpgradeDLL.nsh
index ba10674..ad88dda 100755
--- a/Include/UpgradeDLL.nsh
+++ b/Include/UpgradeDLL.nsh
@@ -1,203 +1,203 @@
-/*
-
-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.v2\UpgradeDLLSession" "count"
- IntOp $R0 $R0 + 1
- WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count" "$R0"
-
- ;------------------------
- ;Setup RegTool
-
- ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
- StrCpy $R3 $R3 -4 1
- IfFileExists $R3 +3
-
- File /oname=$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool.bin"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
- "NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe" /S'
-
- ;------------------------
- ;Add RegTool entry
-
- WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.file" "$R1"
- WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\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 parameters used on run-time to a variable
- ;This allows the usage of variables as paramter
-
- 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
+/*
+
+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.v2\UpgradeDLLSession" "count"
+ IntOp $R0 $R0 + 1
+ WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count" "$R0"
+
+ ;------------------------
+ ;Setup RegTool
+
+ ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
+ StrCpy $R3 $R3 -4 1
+ IfFileExists $R3 +3
+
+ File /oname=$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool.bin"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
+ "NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe" /S'
+
+ ;------------------------
+ ;Add RegTool entry
+
+ WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.file" "$R1"
+ WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\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 parameters used on run-time to a variable
+ ;This allows the usage of variables as paramter
+
+ 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/Include/VB6RunTime.nsh b/Include/VB6RunTime.nsh
new file mode 100755
index 0000000..498faf0
--- /dev/null
+++ b/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 Joost Verburg
+
+To obtain the run-time files, download and extract
+http://nsis.sourceforge.net/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_NOTPROTECTED "${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/Include/WinMessages.nsh b/Include/WinMessages.nsh
index 57dd866..8b1b640 100755
--- a/Include/WinMessages.nsh
+++ b/Include/WinMessages.nsh
@@ -1,582 +1,582 @@
-/*
-_____________________________________________________________________________
-
- 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
-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
------------------------------------
-
-NOT included messages (WM_USER + X)
------------------------------------
-CBEM Extended combo box control
-CDM Common dialog box
-DL Drag list box
-DTM Date and time picker control
-HKM Hot key control
-IPM IP address control
-MCM Month calendar control
-PBM Progress bar
-PGM Pager control
-PSM Property sheet
-RB Rebar control
-TB Toolbar
-TBM Trackbar
-TTM Tooltip control
-TVM Tree-view control
-UDM Up-down control
------------------------------------
-*/
-
-
-!ifndef WINMESSAGES_INCLUDED
-!define WINMESSAGES_INCLUDED
-!verbose push
-!verbose 3
-
-!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
-
-#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 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 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
-
-#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 suported
-!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_USER 0x400
-!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 LVM_FIRST 0x1000
-
-#Status bar window#
-!define SB_CONST_ALPHA 0x00000001
-!define SB_GRAD_RECT 0x00000010
-!define SB_GRAD_TRI 0x00000020
-!define SB_NONE 0x00000000
-!define SB_PIXEL_ALPHA 0x00000002
-!define SB_PREMULT_ALPHA 0x00000004
-!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_GETICON 0x0171
-!define STM_GETIMAGE 0x0173
-!define STM_MSGMAX 0x0174
-!define STM_ONLY_THIS_INTERFACE 0x00000001
-!define STM_ONLY_THIS_NAME 0x00000008
-!define STM_ONLY_THIS_PROTOCOL 0x00000002
-!define STM_ONLY_THIS_TYPE 0x00000004
-!define STM_SETICON 0x0170
-!define STM_SETIMAGE 0x0172
-
-#Tab control#
-!define TCM_FIRST 0x1300
-
-!verbose pop
+/*
+_____________________________________________________________________________
+
+ 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
+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
+-----------------------------------
+
+NOT included messages (WM_USER + X)
+-----------------------------------
+CBEM Extended combo box control
+CDM Common dialog box
+DL Drag list box
+DTM Date and time picker control
+HKM Hot key control
+IPM IP address control
+MCM Month calendar control
+PBM Progress bar
+PGM Pager control
+PSM Property sheet
+RB Rebar control
+TB Toolbar
+TBM Trackbar
+TTM Tooltip control
+TVM Tree-view control
+UDM Up-down control
+-----------------------------------
+*/
+
+
+!ifndef WINMESSAGES_INCLUDED
+!define WINMESSAGES_INCLUDED
+!verbose push
+!verbose 3
+
+!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
+
+#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 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 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
+
+#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 suported
+!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_USER 0x400
+!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 LVM_FIRST 0x1000
+
+#Status bar window#
+!define SB_CONST_ALPHA 0x00000001
+!define SB_GRAD_RECT 0x00000010
+!define SB_GRAD_TRI 0x00000020
+!define SB_NONE 0x00000000
+!define SB_PIXEL_ALPHA 0x00000002
+!define SB_PREMULT_ALPHA 0x00000004
+!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_GETICON 0x0171
+!define STM_GETIMAGE 0x0173
+!define STM_MSGMAX 0x0174
+!define STM_ONLY_THIS_INTERFACE 0x00000001
+!define STM_ONLY_THIS_NAME 0x00000008
+!define STM_ONLY_THIS_PROTOCOL 0x00000002
+!define STM_ONLY_THIS_TYPE 0x00000004
+!define STM_SETICON 0x0170
+!define STM_SETIMAGE 0x0172
+
+#Tab control#
+!define TCM_FIRST 0x1300
+
+!verbose pop
!endif \ No newline at end of file
diff --git a/Include/WinVer.nsh b/Include/WinVer.nsh
index a6d39c7..e45d4a8 100755
--- a/Include/WinVer.nsh
+++ b/Include/WinVer.nsh
@@ -1,151 +1,151 @@
-; ---------------------
-; WinVer.nsh
-; ---------------------
-;
-; LogicLib extensions for handling Windows versions.
-;
-; 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}
-;
-; AtLeastWin<version> checks if the installer is running on Windows version at least as specified.
-; IsWin<version> checks if the installer is running on Windows version exactly as specified.
-; AtMostWin<version> checks if the installer is running on Windows version at most as specified.
-;
-; <version> can be replaced with the following values:
-;
-; 95
-; 98
-; ME
-;
-; NT4
-; 2000
-; XP
-; 2003
-; Vista
-;
-; 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} ${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}
-; ${And} ${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}
-
-!verbose push
-!verbose 3
-
-!ifndef ___WINVER__NSH___
-!define ___WINVER__NSH___
-
-!include LogicLib.nsh
-
-!define WINVER_95 0x400
-!define WINVER_98 0x40A ;4.10
-!define WINVER_ME 0x45A ;4.90
-
-!define WINVER_NT4 0x400
-!define WINVER_2000 0x500
-!define WINVER_XP 0x501
-!define WINVER_2003 0x502
-!define WINVER_VISTA 0x600
-
-!macro __GetWinVer
- !insertmacro _LOGICLIB_TEMP
- System::Call kernel32::GetVersion()i.s
- Pop $_LOGICLIB_TEMP
-!macroend
-
-!macro __ParseWinVer
- !insertmacro __GetWinVer
- Push $0
- IntOp $0 $_LOGICLIB_TEMP & 0xff
- IntOp $0 $0 << 8
- IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & 0xff00
- IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP >> 8
- IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP | $0
- Pop $0
-!macroend
-
-!macro _IsNT _a _b _t _f
- !insertmacro __GetWinVer
- IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & 0x80000000
- !insertmacro _== $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
-!macroend
-!define IsNT `"" IsNT ""`
-
-!macro __WinVer_DefineOSTest Test OS
-
- !define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}}`
-
-!macroend
-
-!macro __WinVer_DefineOSTests Test
-
- !insertmacro __WinVer_DefineOSTest ${Test} 95
- !insertmacro __WinVer_DefineOSTest ${Test} 98
- !insertmacro __WinVer_DefineOSTest ${Test} ME
- !insertmacro __WinVer_DefineOSTest ${Test} NT4
- !insertmacro __WinVer_DefineOSTest ${Test} 2000
- !insertmacro __WinVer_DefineOSTest ${Test} XP
- !insertmacro __WinVer_DefineOSTest ${Test} 2003
- !insertmacro __WinVer_DefineOSTest ${Test} VISTA
-
-!macroend
-
-!macro _WinVerAtLeast _a _b _t _f
- !insertmacro __ParseWinVer
- !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
-!macroend
-
-!macro _WinVerIs _a _b _t _f
- !insertmacro __ParseWinVer
- !insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
-!macroend
-
-!macro _WinVerAtMost _a _b _t _f
- !insertmacro __ParseWinVer
- !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
-!macroend
-
-!insertmacro __WinVer_DefineOSTests AtLeast
-!insertmacro __WinVer_DefineOSTests Is
-!insertmacro __WinVer_DefineOSTests AtMost
-
-!endif # !___WINVER__NSH___
-
-!verbose pop
+; ---------------------
+; WinVer.nsh
+; ---------------------
+;
+; LogicLib extensions for handling Windows versions.
+;
+; 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}
+;
+; AtLeastWin<version> checks if the installer is running on Windows version at least as specified.
+; IsWin<version> checks if the installer is running on Windows version exactly as specified.
+; AtMostWin<version> checks if the installer is running on Windows version at most as specified.
+;
+; <version> can be replaced with the following values:
+;
+; 95
+; 98
+; ME
+;
+; NT4
+; 2000
+; XP
+; 2003
+; Vista
+;
+; 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} ${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}
+; ${And} ${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}
+
+!verbose push
+!verbose 3
+
+!ifndef ___WINVER__NSH___
+!define ___WINVER__NSH___
+
+!include LogicLib.nsh
+
+!define WINVER_95 0x400
+!define WINVER_98 0x40A ;4.10
+!define WINVER_ME 0x45A ;4.90
+
+!define WINVER_NT4 0x400
+!define WINVER_2000 0x500
+!define WINVER_XP 0x501
+!define WINVER_2003 0x502
+!define WINVER_VISTA 0x600
+
+!macro __GetWinVer
+ !insertmacro _LOGICLIB_TEMP
+ System::Call kernel32::GetVersion()i.s
+ Pop $_LOGICLIB_TEMP
+!macroend
+
+!macro __ParseWinVer
+ !insertmacro __GetWinVer
+ Push $0
+ IntOp $0 $_LOGICLIB_TEMP & 0xff
+ IntOp $0 $0 << 8
+ IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & 0xff00
+ IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP >> 8
+ IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP | $0
+ Pop $0
+!macroend
+
+!macro _IsNT _a _b _t _f
+ !insertmacro __GetWinVer
+ IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & 0x80000000
+ !insertmacro _== $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
+!macroend
+!define IsNT `"" IsNT ""`
+
+!macro __WinVer_DefineOSTest Test OS
+
+ !define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}}`
+
+!macroend
+
+!macro __WinVer_DefineOSTests Test
+
+ !insertmacro __WinVer_DefineOSTest ${Test} 95
+ !insertmacro __WinVer_DefineOSTest ${Test} 98
+ !insertmacro __WinVer_DefineOSTest ${Test} ME
+ !insertmacro __WinVer_DefineOSTest ${Test} NT4
+ !insertmacro __WinVer_DefineOSTest ${Test} 2000
+ !insertmacro __WinVer_DefineOSTest ${Test} XP
+ !insertmacro __WinVer_DefineOSTest ${Test} 2003
+ !insertmacro __WinVer_DefineOSTest ${Test} VISTA
+
+!macroend
+
+!macro _WinVerAtLeast _a _b _t _f
+ !insertmacro __ParseWinVer
+ !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
+!macroend
+
+!macro _WinVerIs _a _b _t _f
+ !insertmacro __ParseWinVer
+ !insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
+!macroend
+
+!macro _WinVerAtMost _a _b _t _f
+ !insertmacro __ParseWinVer
+ !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
+!macroend
+
+!insertmacro __WinVer_DefineOSTests AtLeast
+!insertmacro __WinVer_DefineOSTests Is
+!insertmacro __WinVer_DefineOSTests AtMost
+
+!endif # !___WINVER__NSH___
+
+!verbose pop
diff --git a/Include/WordFunc.nsh b/Include/WordFunc.nsh
index 62a119b..b1a6177 100755
--- a/Include/WordFunc.nsh
+++ b/Include/WordFunc.nsh
@@ -1,2205 +1,2208 @@
-/*
-_____________________________________________________________________________
-
- 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. !insertmacro WordFunction
- 3. [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]
-
- un.WordFunction=[un.WordFind|un.WordFindS|un.WordFind2X|un.WordFind2XS|
- un.WordFind3X|un.WordFind3XS|un.WordReplace|un.WordReplaceS|
- un.WordAdd|un.WordAddS|un.WordInsert|un.WordInsertS|
- un.StrFilter|un.StrFilterS|un.VersionCompare|un.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
-!define WORDFUNC_INCLUDED
-
-!verbose push
-!verbose 3
-!ifndef _WORDFUNC_VERBOSE
- !define _WORDFUNC_VERBOSE 3
-!endif
-!verbose ${_WORDFUNC_VERBOSE}
-!define WORDFUNC_VERBOSE `!insertmacro WORDFUNC_VERBOSE`
-!define _WORDFUNC_UN
-!define _WORDFUNC_S
-!verbose pop
-
-!macro WORDFUNC_VERBOSE _VERBOSE
- !verbose push
- !verbose 3
- !undef _WORDFUNC_VERBOSE
- !define _WORDFUNC_VERBOSE ${_VERBOSE}
- !verbose pop
-!macroend
-
-
-# Install. Case insensitive. #
-
-!macro WordFindCall _STRING _DELIMITER _OPTION _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER}`
- Push `${_OPTION}`
- Call WordFind
- 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}`
- Call WordFind2X
- 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}`
- Call WordFind3X
- 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}`
- Call WordReplace
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING1}`
- Push `${_DELIMITER}`
- Push `${_STRING2}`
- Call WordAdd
- 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}`
- Call WordInsert
- 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}`
- Call StrFilter
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro VersionCompareCall _VER1 _VER2 _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_VER1}`
- Push `${_VER2}`
- Call VersionCompare
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro VersionConvertCall _VERSION _CHARLIST _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_VERSION}`
- Push `${_CHARLIST}`
- Call VersionConvert
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro WordFind
- !ifndef ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}WordFind${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}WordFind${_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
- 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 '/' restart
- StrCmp${_WORDFUNC_S} $2 '#' restart
- StrCmp${_WORDFUNC_S} $2 '*' restart
- goto 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 '*' error3
- StrCmp${_WORDFUNC_S} $3 '**' error3
- StrCmp${_WORDFUNC_S} $3 '}{' error3
- IntOp $1 $1 + 0
- StrCmp${_WORDFUNC_S} $1 0 error2
-
- restart:
- StrCmp${_WORDFUNC_S} $R0 '' error1
- StrCpy $4 0
- StrCpy $5 0
- StrCpy $6 0
- StrLen $7 $0
- goto loop
-
- preloop:
- IntOp $6 $6 + 1
-
- loop:
- StrCpy $8 $R0 $7 $6
- StrCmp${_WORDFUNC_S} $8$5 0 error1
- StrCmp${_WORDFUNC_S} $8 '' +2
- StrCmp${_WORDFUNC_S} $8 $0 +5 preloop
- StrCmp${_WORDFUNC_S} $3 '{' minus
- StrCmp${_WORDFUNC_S} $3 '}' minus
- StrCmp${_WORDFUNC_S} $2 '*' minus
- StrCmp${_WORDFUNC_S} $5 $6 minus +5
- StrCmp${_WORDFUNC_S} $3 '{' +4
- StrCmp${_WORDFUNC_S} $3 '}' +3
- StrCmp${_WORDFUNC_S} $2 '*' +2
- StrCmp${_WORDFUNC_S} $5 $6 nextword
- IntOp $4 $4 + 1
- StrCmp${_WORDFUNC_S} $2$4 +$1 plus
- StrCmp${_WORDFUNC_S} $2 '/' 0 nextword
- IntOp $8 $6 - $5
- StrCpy $8 $R0 $8 $5
- StrCmp${_WORDFUNC_S} $1 $8 0 nextword
- StrCpy $R1 $4
- goto end
- nextword:
- IntOp $6 $6 + $7
- StrCpy $5 $6
- goto loop
-
- minus:
- StrCmp${_WORDFUNC_S} $2 '-' 0 sum
- StrCpy $2 '+'
- IntOp $1 $4 - $1
- IntOp $1 $1 + 1
- IntCmp $1 0 error2 error2 restart
- sum:
- StrCmp${_WORDFUNC_S} $2 '#' 0 sumdelim
- StrCpy $R1 $4
- goto end
- sumdelim:
- StrCmp${_WORDFUNC_S} $2 '*' 0 error2
- StrCpy $R1 $4
- goto end
-
- plus:
- StrCmp${_WORDFUNC_S} $3 '' 0 +4
- IntOp $6 $6 - $5
- StrCpy $R1 $R0 $6 $5
- goto end
- StrCmp${_WORDFUNC_S} $3 '{' 0 +3
- StrCpy $R1 $R0 $6
- goto end
- StrCmp${_WORDFUNC_S} $3 '}' 0 +4
- IntOp $6 $6 + $7
- StrCpy $R1 $R0 '' $6
- goto end
- StrCmp${_WORDFUNC_S} $3 '{*' +2
- StrCmp${_WORDFUNC_S} $3 '*{' 0 +3
- StrCpy $R1 $R0 $6
- goto end
- StrCmp${_WORDFUNC_S} $3 '*}' +2
- StrCmp${_WORDFUNC_S} $3 '}*' 0 +3
- StrCpy $R1 $R0 '' $5
- goto end
- StrCmp${_WORDFUNC_S} $3 '}}' 0 +3
- StrCpy $R1 $R0 '' $6
- goto end
- StrCmp${_WORDFUNC_S} $3 '{{' 0 +3
- StrCpy $R1 $R0 $5
- goto end
- StrCmp${_WORDFUNC_S} $3 '{}' 0 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 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 end
-
- error3:
- StrCpy $R1 3
- goto error
- error2:
- StrCpy $R1 2
- goto error
- error1:
- StrCpy $R1 1
- error:
- StrCmp $9 'E' 0 +3
- SetErrors
-
- end:
- StrCpy $R0 $R1
-
- Pop $R1
- Pop $9
- Pop $8
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- Exch $R0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro WordFind2X
- !ifndef ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}WordFind2X${_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 '#' restart
- StrCmp${_WORDFUNC_S} $3 '/' restart
- goto 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 error2
-
- restart:
- StrCmp${_WORDFUNC_S} $R0 '' error1
- StrCpy $5 -1
- StrCpy $6 0
- StrCpy $7 ''
- StrLen $8 $0
- StrLen $9 $1
-
- loop:
- IntOp $5 $5 + 1
-
- delim1:
- StrCpy $R1 $R0 $8 $5
- StrCmp${_WORDFUNC_S} $R1$6 0 error1
- StrCmp${_WORDFUNC_S} $R1 '' minus
- StrCmp${_WORDFUNC_S} $R1 $0 +2
- StrCmp${_WORDFUNC_S} $7 '' loop delim2
- StrCmp${_WORDFUNC_S} $0 $1 0 +2
- StrCmp${_WORDFUNC_S} $7 '' 0 delim2
- IntOp $7 $5 + $8
- StrCpy $5 $7
- goto delim1
-
- delim2:
- StrCpy $R1 $R0 $9 $5
- StrCmp${_WORDFUNC_S} $R1 $1 0 loop
- IntOp $6 $6 + 1
- StrCmp${_WORDFUNC_S} $3$6 '+$2' plus
- StrCmp${_WORDFUNC_S} $3 '/' 0 nextword
- IntOp $R1 $5 - $7
- StrCpy $R1 $R0 $R1 $7
- StrCmp${_WORDFUNC_S} $R1 $2 0 +3
- StrCpy $R1 $6
- goto end
- nextword:
- IntOp $5 $5 + $9
- StrCpy $7 ''
- goto delim1
-
- minus:
- StrCmp${_WORDFUNC_S} $3 '-' 0 sum
- StrCpy $3 +
- IntOp $2 $6 - $2
- IntOp $2 $2 + 1
- IntCmp $2 0 error2 error2 restart
- sum:
- StrCmp${_WORDFUNC_S} $3 '#' 0 error2
- StrCpy $R1 $6
- goto end
-
- plus:
- StrCmp${_WORDFUNC_S} $4 '' 0 +4
- IntOp $R1 $5 - $7
- StrCpy $R1 $R0 $R1 $7
- goto 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 end
- StrCmp${_WORDFUNC_S} $4 '*}' +2
- StrCmp${_WORDFUNC_S} $4 '}*' 0 +3
- StrCpy $R1 $R0 '' $7
- goto end
- StrCmp${_WORDFUNC_S} $4 '}}' 0 +3
- StrCpy $R1 $R0 '' $5
- goto end
- StrCmp${_WORDFUNC_S} $4 '{{' 0 +3
- StrCpy $R1 $R0 $7
- goto end
- StrCmp${_WORDFUNC_S} $4 '{}' 0 error3
- StrCpy $5 $R0 '' $5
- StrCpy $7 $R0 $7
- StrCpy $R1 '$7$5'
- goto end
-
- error3:
- StrCpy $R1 3
- goto error
- error2:
- StrCpy $R1 2
- goto error
- error1:
- StrCpy $R1 1
- error:
- StrCmp $R2 'E' 0 +3
- SetErrors
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro WordFind3X
- !ifndef ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}WordFind3X${_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 '#' restart
- StrCmp${_WORDFUNC_S} $4 '/' restart
- goto 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 error2
-
- restart:
- StrCmp${_WORDFUNC_S} $R0 '' error1
- StrCpy $6 -1
- StrCpy $7 0
- StrCpy $8 ''
- StrCpy $9 ''
- StrLen $R1 $0
- StrLen $R2 $1
- StrLen $R3 $2
-
- loop:
- IntOp $6 $6 + 1
-
- delim1:
- StrCpy $R4 $R0 $R1 $6
- StrCmp${_WORDFUNC_S} $R4$7 0 error1
- StrCmp${_WORDFUNC_S} $R4 '' minus
- StrCmp${_WORDFUNC_S} $R4 $0 +2
- StrCmp${_WORDFUNC_S} $8 '' loop center
- StrCmp${_WORDFUNC_S} $0 $1 +2
- StrCmp${_WORDFUNC_S} $0 $2 0 +2
- StrCmp${_WORDFUNC_S} $8 '' 0 center
- IntOp $8 $6 + $R1
- StrCpy $6 $8
- goto delim1
-
- center:
- StrCmp${_WORDFUNC_S} $9 '' 0 delim2
- StrCpy $R4 $R0 $R2 $6
- StrCmp${_WORDFUNC_S} $R4 $1 0 loop
- IntOp $9 $6 + $R2
- StrCpy $6 $9
- goto delim1
-
- delim2:
- StrCpy $R4 $R0 $R3 $6
- StrCmp${_WORDFUNC_S} $R4 $2 0 loop
- IntOp $7 $7 + 1
- StrCmp${_WORDFUNC_S} $4$7 '+$3' plus
- StrCmp${_WORDFUNC_S} $4 '/' 0 nextword
- IntOp $R4 $6 - $8
- StrCpy $R4 $R0 $R4 $8
- StrCmp${_WORDFUNC_S} $R4 $3 0 +3
- StrCpy $R4 $7
- goto end
- nextword:
- IntOp $6 $6 + $R3
- StrCpy $8 ''
- StrCpy $9 ''
- goto delim1
-
- minus:
- StrCmp${_WORDFUNC_S} $4 '-' 0 sum
- StrCpy $4 +
- IntOp $3 $7 - $3
- IntOp $3 $3 + 1
- IntCmp $3 0 error2 error2 restart
- sum:
- StrCmp${_WORDFUNC_S} $4 '#' 0 error2
- StrCpy $R4 $7
- goto end
-
- plus:
- StrCmp${_WORDFUNC_S} $5 '' 0 +4
- IntOp $R4 $6 - $8
- StrCpy $R4 $R0 $R4 $8
- goto 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 end
- StrCmp${_WORDFUNC_S} $5 '*}' +2
- StrCmp${_WORDFUNC_S} $5 '}*' 0 +3
- StrCpy $R4 $R0 '' $8
- goto end
- StrCmp${_WORDFUNC_S} $5 '}}' 0 +3
- StrCpy $R4 $R0 '' $6
- goto end
- StrCmp${_WORDFUNC_S} $5 '{{' 0 +3
- StrCpy $R4 $R0 $8
- goto end
- StrCmp${_WORDFUNC_S} $5 '{}' 0 error3
- StrCpy $6 $R0 '' $6
- StrCpy $8 $R0 $8
- StrCpy $R4 '$8$6'
- goto end
-
- error3:
- StrCpy $R4 3
- goto error
- error2:
- StrCpy $R4 2
- goto error
- error1:
- StrCpy $R4 1
- error:
- StrCmp $R5 'E' 0 +3
- SetErrors
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro WordReplace
- !ifndef ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}WordReplace${_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 error1
- StrCmp${_WORDFUNC_S} $R0 '' error1
- StrCmp${_WORDFUNC_S} $3 '{' beginning
- StrCmp${_WORDFUNC_S} $3 '}' ending errorchk
-
- 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 merge
-
- ending:
- StrCpy $8 $R0 '' -$7
- StrCmp${_WORDFUNC_S} $8 $0 0 +4
- StrCpy $R0 $R0 -$7
- StrCpy $6 '$6$1'
- goto -4
-
- 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 end
-
- errorchk:
- StrCmp${_WORDFUNC_S} $3 '+' +2
- StrCmp${_WORDFUNC_S} $3 '-' 0 error3
-
- StrCpy $5 $2 1
- IntOp $2 $2 + 0
- StrCmp${_WORDFUNC_S} $2 0 0 one
- StrCmp${_WORDFUNC_S} $5 0 error2
- StrCpy $3 ''
-
- 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 error1
- StrCpy $R0 '$3$R0'
- goto 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 all
-
- one:
- StrCpy $5 0
- StrCpy $8 0
- goto loop
-
- preloop:
- IntOp $5 $5 + 1
-
- loop:
- StrCpy $6 $R0 $7 $5
- StrCmp${_WORDFUNC_S} $6$8 0 error1
- StrCmp${_WORDFUNC_S} $6 '' minus
- StrCmp${_WORDFUNC_S} $6 $0 0 preloop
- IntOp $8 $8 + 1
- StrCmp${_WORDFUNC_S} $3$8 +$2 found
- IntOp $5 $5 + $7
- goto loop
-
- minus:
- StrCmp${_WORDFUNC_S} $3 '-' 0 error2
- StrCpy $3 +
- IntOp $2 $8 - $2
- IntOp $2 $2 + 1
- IntCmp $2 0 error2 error2 one
-
- 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 end
-
- error3:
- StrCpy $R0 3
- goto error
- error2:
- StrCpy $R0 2
- goto error
- error1:
- StrCpy $R0 1
- error:
- StrCmp $9 'E' +3
- StrCpy $R0 $R1
- goto +2
- SetErrors
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro WordAdd
- !ifndef ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !insertmacro WordFind
-
- !define ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}WordAdd${_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 error3
-
- StrCmp${_WORDFUNC_S} $0 '' error1
- StrCmp${_WORDFUNC_S} $2 '' end
- StrCmp${_WORDFUNC_S} $R0 '' 0 +5
- StrCmp${_WORDFUNC_S} $1 '-' end
- StrCmp${_WORDFUNC_S} $1 '+' 0 +3
- StrCpy $R0 $2
- goto end
-
- loop:
- IntOp $5 $5 + 1
- Push `$2`
- Push `$0`
- Push `E+$5`
- Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
- Pop $3
- IfErrors 0 /word
- StrCmp${_WORDFUNC_S} $3 2 +4
- StrCmp${_WORDFUNC_S} $3$5 11 0 +3
- StrCpy $3 $2
- goto /word
- StrCmp${_WORDFUNC_S} $1 '-' end preend
-
- /word:
- Push `$R0`
- Push `$0`
- Push `E/$3`
- Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
- Pop $4
- IfErrors +2
- StrCmp${_WORDFUNC_S} $1 '-' delete loop
- StrCmp${_WORDFUNC_S} $1$4 '-1' +2
- StrCmp${_WORDFUNC_S} $1 '-' loop +4
- StrCmp${_WORDFUNC_S} $R0 $3 0 loop
- StrCpy $R0 ''
- goto end
- StrCmp${_WORDFUNC_S} $1$4 '+1' 0 +2
- StrCmp${_WORDFUNC_S} $R0 $3 loop
- StrCmp${_WORDFUNC_S} $R0 $R1 +3
- StrCpy $R1 '$R1$0$3'
- goto loop
- StrLen $6 $0
- StrCpy $6 $R0 '' -$6
- StrCmp${_WORDFUNC_S} $6 $0 0 -4
- StrCpy $R1 '$R1$3'
- goto loop
-
- delete:
- Push `$R0`
- Push `$0`
- Push `E+$4{}`
- Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
- Pop $R0
- goto /word
-
- error3:
- StrCpy $R1 3
- goto error
- error1:
- StrCpy $R1 1
- error:
- StrCmp $7 'E' 0 end
- SetErrors
-
- preend:
- StrCpy $R0 $R1
-
- end:
- Pop $R1
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- Exch $R0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro WordInsert
- !ifndef ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !insertmacro WordFind
-
- !define ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}WordInsert${_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 error3
- IntOp $2 $2 + 0
- StrCmp${_WORDFUNC_S} $2 0 error2
- StrCmp${_WORDFUNC_S} $0 '' error1
-
- StrCmp${_WORDFUNC_S} $2 1 0 two
- GetLabelAddress $8 oneback
- StrCmp${_WORDFUNC_S} $3 '+' call
- StrCpy $7 {
- goto call
- oneback:
- IfErrors 0 +2
- StrCpy $4 $R0
- StrCmp${_WORDFUNC_S} $3 '+' 0 +3
- StrCpy $R0 '$1$0$4'
- goto end
- StrCpy $R0 '$4$0$1'
- goto end
-
- two:
- IntOp $2 $2 - 1
- GetLabelAddress $8 twoback
- StrCmp${_WORDFUNC_S} $3 '+' 0 call
- StrCpy $7 {
- goto call
- twoback:
- IfErrors 0 tree
- StrCmp${_WORDFUNC_S} $2$4 11 0 error2
- StrCmp${_WORDFUNC_S} $3 '+' 0 +3
- StrCpy $R0 '$R0$0$1'
- goto end
- StrCpy $R0 '$1$0$R0'
- goto end
-
- tree:
- StrCpy $7 }
- StrCpy $5 $4
- IntOp $2 $2 + 1
- GetLabelAddress $8 treeback
- StrCmp${_WORDFUNC_S} $3 '+' call
- StrCpy $7 {
- goto call
- treeback:
- IfErrors 0 +3
- StrCpy $4 ''
- StrCpy $6 ''
- StrCmp${_WORDFUNC_S} $3 '+' 0 +3
- StrCpy $R0 '$5$0$1$6$4'
- goto end
- StrCpy $R0 '$4$6$1$0$5'
- goto end
-
- call:
- Push '$R0'
- Push '$0'
- Push 'E$3$2*$7'
- Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
- Pop $4
- goto $8
-
- error3:
- StrCpy $R0 3
- goto error
- error2:
- StrCpy $R0 2
- goto error
- error1:
- StrCpy $R0 1
- error:
- StrCmp $9 'E' +3
- StrCpy $R0 $R1
- goto +2
- SetErrors
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro StrFilter
- !ifndef ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S}
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S}Call`
-
- Function ${_WORDFUNC_UN}StrFilter${_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 eng
- StrCmp $R2 rus rus
- eng:
- StrCpy $4 65
- StrCpy $5 90
- StrCpy $6 97
- StrCpy $7 122
- goto langend
- rus:
- StrCpy $4 192
- StrCpy $5 223
- StrCpy $6 224
- StrCpy $7 255
- goto langend
- ;...
-
- langend:
- StrCpy $R7 ''
- StrCpy $R8 ''
-
- StrCmp${_WORDFUNC_S} $2 '' 0 begin
-
- 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 '' filter error
-
- restart2:
- StrCmp${_WORDFUNC_S} $3 '' end
- StrCpy $R7 ''
- StrCpy $R8 '+-'
- goto begin
-
- filter:
- StrCmp${_WORDFUNC_S} $R7 '1' +3
- StrCmp${_WORDFUNC_S} $R7 '2' +2
- StrCmp${_WORDFUNC_S} $R7 '3' 0 error
-
- StrCmp${_WORDFUNC_S} $R8 '' begin
- StrCmp${_WORDFUNC_S} $R7$R8 '23' +2
- StrCmp${_WORDFUNC_S} $R7$R8 '32' 0 +3
- StrCpy $R7 -1
- goto begin
- StrCmp${_WORDFUNC_S} $R7$R8 '13' +2
- StrCmp${_WORDFUNC_S} $R7$R8 '31' 0 +3
- StrCpy $R7 -2
- goto begin
- StrCmp${_WORDFUNC_S} $R7$R8 '12' +2
- StrCmp${_WORDFUNC_S} $R7$R8 '21' 0 error
- StrCpy $R7 -3
-
- begin:
- StrCpy $R6 0
- StrCpy $R1 ''
-
- loop:
- StrCpy $R2 $R0 1 $R6
- StrCmp${_WORDFUNC_S} $R2 '' restartchk
-
- StrCmp${_WORDFUNC_S} $2 '' +7
- StrCpy $R4 0
- StrCpy $R5 $2 1 $R4
- StrCmp${_WORDFUNC_S} $R5 '' addsymbol
- StrCmp${_WORDFUNC_S} $R5 $R2 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 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 loop2
- StrCmp${_WORDFUNC_S} $R8 '+-' 0 +2
- StrCmp${_WORDFUNC_S} $3 '+' 0 +4
- StrCpy $R4 $4
- StrCpy $R5 $5
- goto loop2
- StrCpy $R4 $6
- StrCpy $R5 $7
-
- loop2:
- IntFmt $R3 '%c' $R4
- StrCmp $R2 $R3 found
- StrCmp $R4 $R5 notfound
- IntOp $R4 $R4 + 1
- goto loop2
-
- found:
- StrCmp${_WORDFUNC_S} $R8 '+-' setcase
- StrCmp${_WORDFUNC_S} $R7 '3' skipsymbol
- StrCmp${_WORDFUNC_S} $R7 '-3' addsymbol
- StrCmp${_WORDFUNC_S} $R8 '' addsymbol skipsymbol
-
- notfound:
- StrCmp${_WORDFUNC_S} $R8 '+-' addsymbol
- StrCmp${_WORDFUNC_S} $R7 '3' 0 +2
- StrCmp${_WORDFUNC_S} $R5 57 addsymbol +3
- StrCmp${_WORDFUNC_S} $R7 '-3' 0 +5
- StrCmp${_WORDFUNC_S} $R5 57 skipsymbol
- StrCpy $R4 48
- StrCpy $R5 57
- goto loop2
- StrCmp${_WORDFUNC_S} $R8 '' skipsymbol addsymbol
-
- setcase:
- StrCpy $R2 $R3
- addsymbol:
- StrCpy $R1 $R1$R2
- skipsymbol:
- IntOp $R6 $R6 + 1
- goto loop
-
- error:
- SetErrors
- StrCpy $R0 ''
- goto end
-
- restartchk:
- StrCpy $R0 $R1
- StrCmp${_WORDFUNC_S} $2 '' 0 restart1
- StrCmp${_WORDFUNC_S} $R8 '+-' 0 restart2
-
- 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
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro VersionCompare
- !ifndef ${_WORDFUNC_UN}VersionCompare
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}VersionCompare `!insertmacro ${_WORDFUNC_UN}VersionCompareCall`
-
- Function ${_WORDFUNC_UN}VersionCompare
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- Push $5
- Push $6
- Push $7
-
- 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 '' 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 begin newer2
- StrCmp $5 0 newer1
- IntCmp $6 $7 0 newer1 newer2
-
- StrCpy $4 '1$4'
- StrCpy $5 '1$5'
- IntCmp $4 $5 begin newer2 newer1
-
- equal:
- StrCpy $0 0
- goto end
- newer1:
- StrCpy $0 1
- goto end
- newer2:
- StrCpy $0 2
-
- end:
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-!macro VersionConvert
- !ifndef ${_WORDFUNC_UN}VersionConvert
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !define ${_WORDFUNC_UN}VersionConvert `!insertmacro ${_WORDFUNC_UN}VersionConvertCall`
-
- Function ${_WORDFUNC_UN}VersionConvert
- 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 loop
-
- preloop:
- IntOp $2 $2 + 1
-
- loop:
- StrCpy $3 $0 1 $2
- StrCmp $3 '' endcheck
- StrCmp $3 '.' dot
- StrCmp $3 '0' digit
- IntCmp $3 '0' letter letter digit
-
- dot:
- StrCmp $7 'dot' replacespecial
- StrCpy $7 'dot'
- goto preloop
-
- digit:
- StrCmp $7 'letter' insertdot
- StrCpy $7 'digit'
- goto preloop
-
- letter:
- StrCpy $5 0
- StrCpy $4 $1 1 $5
- IntOp $5 $5 + 1
- StrCmp $4 '' 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 loop
-
- 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 loop
-
- insertdot:
- StrCpy $4 $0 $2
- StrCpy $0 $0 '' $2
- StrCpy $0 '$4.$0'
- StrCpy $7 'dot'
- goto preloop
-
- endcheck:
- StrCpy $4 $0 1 -1
- StrCmp $4 '.' 0 end
- StrCpy $0 $0 -1
- goto -3
-
- end:
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
-!macroend
-
-
-# Uninstall. Case insensitive. #
-
-!macro un.WordFindCall _STRING _DELIMITER _OPTION _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER}`
- Push `${_OPTION}`
- Call un.WordFind
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER1}`
- Push `${_DELIMITER2}`
- Push `${_NUMBER}`
- Call un.WordFind2X
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordFind3XCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER1}`
- Push `${_CENTER}`
- Push `${_DELIMITER2}`
- Push `${_NUMBER}`
- Call un.WordFind3X
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordReplaceCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_WORD1}`
- Push `${_WORD2}`
- Push `${_NUMBER}`
- Call un.WordReplace
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING1}`
- Push `${_DELIMITER}`
- Push `${_STRING2}`
- Call un.WordAdd
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER}`
- Push `${_WORD}`
- Push `${_NUMBER}`
- Call un.WordInsert
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.StrFilterCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_FILTER}`
- Push `${_INCLUDE}`
- Push `${_EXCLUDE}`
- Call un.StrFilter
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.VersionCompareCall _VER1 _VER2 _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_VER1}`
- Push `${_VER2}`
- Call un.VersionCompare
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.VersionConvertCall _VERSION _CHARLIST _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_VERSION}`
- Push `${_CHARLIST}`
- Call un.VersionConvert
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-
-!macro un.WordFind
- !ifndef un.WordFind
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro WordFind
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordFind2X
- !ifndef un.WordFind2X
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro WordFind2X
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordFind3X
- !ifndef un.WordFind3X
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro WordFind3X
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordReplace
- !ifndef un.WordReplace
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro WordReplace
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordAdd
- !ifndef un.WordAdd
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro WordAdd
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordInsert
- !ifndef un.WordInsert
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro WordInsert
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.StrFilter
- !ifndef un.StrFilter
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro StrFilter
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.VersionCompare
- !ifndef un.VersionCompare
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro VersionCompare
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-!macro un.VersionConvert
- !ifndef un.VersionConvert
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
-
- !insertmacro VersionConvert
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !verbose pop
- !endif
-!macroend
-
-
-# Install. Case sensitive. #
-
-!macro WordFindSCall _STRING _DELIMITER _OPTION _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER}`
- Push `${_OPTION}`
- Call WordFindS
- 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}`
- Call WordFind2XS
- 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}`
- Call WordFind3XS
- 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}`
- Call WordReplaceS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING1}`
- Push `${_DELIMITER}`
- Push `${_STRING2}`
- Call WordAddS
- 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}`
- Call WordInsertS
- 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}`
- Call StrFilterS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro WordFindS
- !ifndef WordFindS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordFind
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro WordFind2XS
- !ifndef WordFind2XS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordFind2X
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro WordFind3XS
- !ifndef WordFind3XS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordFind3X
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro WordReplaceS
- !ifndef WordReplaceS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordReplace
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro WordAddS
- !ifndef WordAddS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordAdd
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro WordInsertS
- !ifndef WordInsertS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordInsert
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro StrFilterS
- !ifndef StrFilterS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro StrFilter
-
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-
-# Uninstall. Case sensitive. #
-
-!macro un.WordFindSCall _STRING _DELIMITER _OPTION _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER}`
- Push `${_OPTION}`
- Call un.WordFindS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordFind2XSCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER1}`
- Push `${_DELIMITER2}`
- Push `${_NUMBER}`
- Call un.WordFind2XS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordFind3XSCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER1}`
- Push `${_CENTER}`
- Push `${_DELIMITER2}`
- Push `${_NUMBER}`
- Call un.WordFind3XS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordReplaceSCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_WORD1}`
- Push `${_WORD2}`
- Push `${_NUMBER}`
- Call un.WordReplaceS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING1}`
- Push `${_DELIMITER}`
- Push `${_STRING2}`
- Call un.WordAddS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordInsertSCall _STRING _DELIMITER _WORD _NUMBER _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_DELIMITER}`
- Push `${_WORD}`
- Push `${_NUMBER}`
- Call un.WordInsertS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.StrFilterSCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- Push `${_STRING}`
- Push `${_FILTER}`
- Push `${_INCLUDE}`
- Push `${_EXCLUDE}`
- Call un.StrFilterS
- Pop ${_RESULT}
- !verbose pop
-!macroend
-
-!macro un.WordFindS
- !ifndef un.WordFindS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_S
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !define _WORDFUNC_S `S`
-
- !insertmacro WordFind
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordFind2XS
- !ifndef un.WordFind2XS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordFind2X
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordFind3XS
- !ifndef un.WordFind3XS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordFind3X
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordReplaceS
- !ifndef un.WordReplaceS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordReplace
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordAddS
- !ifndef un.WordAddS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordAdd
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.WordInsertS
- !ifndef un.WordInsertS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro WordInsert
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!macro un.StrFilterS
- !ifndef un.StrFilterS
- !verbose push
- !verbose ${_WORDFUNC_VERBOSE}
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN `un.`
- !undef _WORDFUNC_S
- !define _WORDFUNC_S `S`
-
- !insertmacro StrFilter
-
- !undef _WORDFUNC_UN
- !define _WORDFUNC_UN
- !undef _WORDFUNC_S
- !define _WORDFUNC_S
- !verbose pop
- !endif
-!macroend
-
-!endif
+/*
+_____________________________________________________________________________
+
+ 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. !insertmacro WordFunction
+ 3. [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]
+
+ un.WordFunction=[un.WordFind|un.WordFindS|un.WordFind2X|un.WordFind2XS|
+ un.WordFind3X|un.WordFind3XS|un.WordReplace|un.WordReplaceS|
+ un.WordAdd|un.WordAddS|un.WordInsert|un.WordInsertS|
+ un.StrFilter|un.StrFilterS|un.VersionCompare|un.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
+!define WORDFUNC_INCLUDED
+
+!verbose push
+!verbose 3
+!ifndef _WORDFUNC_VERBOSE
+ !define _WORDFUNC_VERBOSE 3
+!endif
+!verbose ${_WORDFUNC_VERBOSE}
+!define WORDFUNC_VERBOSE `!insertmacro WORDFUNC_VERBOSE`
+!define _WORDFUNC_UN
+!define _WORDFUNC_S
+!verbose pop
+
+!macro WORDFUNC_VERBOSE _VERBOSE
+ !verbose push
+ !verbose 3
+ !undef _WORDFUNC_VERBOSE
+ !define _WORDFUNC_VERBOSE ${_VERBOSE}
+ !verbose pop
+!macroend
+
+
+# Install. Case insensitive. #
+
+!macro WordFindCall _STRING _DELIMITER _OPTION _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER}`
+ Push `${_OPTION}`
+ Call WordFind
+ 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}`
+ Call WordFind2X
+ 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}`
+ Call WordFind3X
+ 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}`
+ Call WordReplace
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING1}`
+ Push `${_DELIMITER}`
+ Push `${_STRING2}`
+ Call WordAdd
+ 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}`
+ Call WordInsert
+ 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}`
+ Call StrFilter
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro VersionCompareCall _VER1 _VER2 _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_VER1}`
+ Push `${_VER2}`
+ Call VersionCompare
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro VersionConvertCall _VERSION _CHARLIST _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_VERSION}`
+ Push `${_CHARLIST}`
+ Call VersionConvert
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro WordFind
+ !ifndef ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}WordFind${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}WordFind${_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 '/' restart
+ StrCmp${_WORDFUNC_S} $2 '#' restart
+ StrCmp${_WORDFUNC_S} $2 '*' restart
+ goto 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 '*' error3
+ StrCmp${_WORDFUNC_S} $3 '**' error3
+ StrCmp${_WORDFUNC_S} $3 '}{' error3
+ IntOp $1 $1 + 0
+ StrCmp${_WORDFUNC_S} $1 0 error2
+
+ restart:
+ StrCmp${_WORDFUNC_S} $R0 '' error1
+ StrCpy $4 0
+ StrCpy $5 0
+ StrCpy $6 0
+ StrLen $7 $0
+ goto loop
+
+ preloop:
+ IntOp $6 $6 + 1
+
+ loop:
+ StrCpy $8 $R0 $7 $6
+ StrCmp${_WORDFUNC_S} $8$5 0 error1
+ StrLen $R2 $8
+ IntCmp $R2 0 +2
+ StrCmp${_WORDFUNC_S} $8 $0 +5 preloop
+ StrCmp${_WORDFUNC_S} $3 '{' minus
+ StrCmp${_WORDFUNC_S} $3 '}' minus
+ StrCmp${_WORDFUNC_S} $2 '*' minus
+ StrCmp${_WORDFUNC_S} $5 $6 minus +5
+ StrCmp${_WORDFUNC_S} $3 '{' +4
+ StrCmp${_WORDFUNC_S} $3 '}' +3
+ StrCmp${_WORDFUNC_S} $2 '*' +2
+ StrCmp${_WORDFUNC_S} $5 $6 nextword
+ IntOp $4 $4 + 1
+ StrCmp${_WORDFUNC_S} $2$4 +$1 plus
+ StrCmp${_WORDFUNC_S} $2 '/' 0 nextword
+ IntOp $8 $6 - $5
+ StrCpy $8 $R0 $8 $5
+ StrCmp${_WORDFUNC_S} $1 $8 0 nextword
+ StrCpy $R1 $4
+ goto end
+ nextword:
+ IntOp $6 $6 + $7
+ StrCpy $5 $6
+ goto loop
+
+ minus:
+ StrCmp${_WORDFUNC_S} $2 '-' 0 sum
+ StrCpy $2 '+'
+ IntOp $1 $4 - $1
+ IntOp $1 $1 + 1
+ IntCmp $1 0 error2 error2 restart
+ sum:
+ StrCmp${_WORDFUNC_S} $2 '#' 0 sumdelim
+ StrCpy $R1 $4
+ goto end
+ sumdelim:
+ StrCmp${_WORDFUNC_S} $2 '*' 0 error2
+ StrCpy $R1 $4
+ goto end
+
+ plus:
+ StrCmp${_WORDFUNC_S} $3 '' 0 +4
+ IntOp $6 $6 - $5
+ StrCpy $R1 $R0 $6 $5
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '{' 0 +3
+ StrCpy $R1 $R0 $6
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '}' 0 +4
+ IntOp $6 $6 + $7
+ StrCpy $R1 $R0 '' $6
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '{*' +2
+ StrCmp${_WORDFUNC_S} $3 '*{' 0 +3
+ StrCpy $R1 $R0 $6
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '*}' +2
+ StrCmp${_WORDFUNC_S} $3 '}*' 0 +3
+ StrCpy $R1 $R0 '' $5
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '}}' 0 +3
+ StrCpy $R1 $R0 '' $6
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '{{' 0 +3
+ StrCpy $R1 $R0 $5
+ goto end
+ StrCmp${_WORDFUNC_S} $3 '{}' 0 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 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 end
+
+ error3:
+ StrCpy $R1 3
+ goto error
+ error2:
+ StrCpy $R1 2
+ goto error
+ error1:
+ StrCpy $R1 1
+ error:
+ StrCmp $9 'E' 0 +3
+ SetErrors
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordFind2X
+ !ifndef ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind2X${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}WordFind2X${_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 '#' restart
+ StrCmp${_WORDFUNC_S} $3 '/' restart
+ goto 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 error2
+
+ restart:
+ StrCmp${_WORDFUNC_S} $R0 '' error1
+ StrCpy $5 -1
+ StrCpy $6 0
+ StrCpy $7 ''
+ StrLen $8 $0
+ StrLen $9 $1
+
+ loop:
+ IntOp $5 $5 + 1
+
+ delim1:
+ StrCpy $R1 $R0 $8 $5
+ StrCmp${_WORDFUNC_S} $R1$6 0 error1
+ StrCmp${_WORDFUNC_S} $R1 '' minus
+ StrCmp${_WORDFUNC_S} $R1 $0 +2
+ StrCmp${_WORDFUNC_S} $7 '' loop delim2
+ StrCmp${_WORDFUNC_S} $0 $1 0 +2
+ StrCmp${_WORDFUNC_S} $7 '' 0 delim2
+ IntOp $7 $5 + $8
+ StrCpy $5 $7
+ goto delim1
+
+ delim2:
+ StrCpy $R1 $R0 $9 $5
+ StrCmp${_WORDFUNC_S} $R1 $1 0 loop
+ IntOp $6 $6 + 1
+ StrCmp${_WORDFUNC_S} $3$6 '+$2' plus
+ StrCmp${_WORDFUNC_S} $3 '/' 0 nextword
+ IntOp $R1 $5 - $7
+ StrCpy $R1 $R0 $R1 $7
+ StrCmp${_WORDFUNC_S} $R1 $2 0 +3
+ StrCpy $R1 $6
+ goto end
+ nextword:
+ IntOp $5 $5 + $9
+ StrCpy $7 ''
+ goto delim1
+
+ minus:
+ StrCmp${_WORDFUNC_S} $3 '-' 0 sum
+ StrCpy $3 +
+ IntOp $2 $6 - $2
+ IntOp $2 $2 + 1
+ IntCmp $2 0 error2 error2 restart
+ sum:
+ StrCmp${_WORDFUNC_S} $3 '#' 0 error2
+ StrCpy $R1 $6
+ goto end
+
+ plus:
+ StrCmp${_WORDFUNC_S} $4 '' 0 +4
+ IntOp $R1 $5 - $7
+ StrCpy $R1 $R0 $R1 $7
+ goto 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 end
+ StrCmp${_WORDFUNC_S} $4 '*}' +2
+ StrCmp${_WORDFUNC_S} $4 '}*' 0 +3
+ StrCpy $R1 $R0 '' $7
+ goto end
+ StrCmp${_WORDFUNC_S} $4 '}}' 0 +3
+ StrCpy $R1 $R0 '' $5
+ goto end
+ StrCmp${_WORDFUNC_S} $4 '{{' 0 +3
+ StrCpy $R1 $R0 $7
+ goto end
+ StrCmp${_WORDFUNC_S} $4 '{}' 0 error3
+ StrCpy $5 $R0 '' $5
+ StrCpy $7 $R0 $7
+ StrCpy $R1 '$7$5'
+ goto end
+
+ error3:
+ StrCpy $R1 3
+ goto error
+ error2:
+ StrCpy $R1 2
+ goto error
+ error1:
+ StrCpy $R1 1
+ error:
+ StrCmp $R2 'E' 0 +3
+ SetErrors
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordFind3X
+ !ifndef ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordFind3X${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}WordFind3X${_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 '#' restart
+ StrCmp${_WORDFUNC_S} $4 '/' restart
+ goto 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 error2
+
+ restart:
+ StrCmp${_WORDFUNC_S} $R0 '' error1
+ StrCpy $6 -1
+ StrCpy $7 0
+ StrCpy $8 ''
+ StrCpy $9 ''
+ StrLen $R1 $0
+ StrLen $R2 $1
+ StrLen $R3 $2
+
+ loop:
+ IntOp $6 $6 + 1
+
+ delim1:
+ StrCpy $R4 $R0 $R1 $6
+ StrCmp${_WORDFUNC_S} $R4$7 0 error1
+ StrCmp${_WORDFUNC_S} $R4 '' minus
+ StrCmp${_WORDFUNC_S} $R4 $0 +2
+ StrCmp${_WORDFUNC_S} $8 '' loop center
+ StrCmp${_WORDFUNC_S} $0 $1 +2
+ StrCmp${_WORDFUNC_S} $0 $2 0 +2
+ StrCmp${_WORDFUNC_S} $8 '' 0 center
+ IntOp $8 $6 + $R1
+ StrCpy $6 $8
+ goto delim1
+
+ center:
+ StrCmp${_WORDFUNC_S} $9 '' 0 delim2
+ StrCpy $R4 $R0 $R2 $6
+ StrCmp${_WORDFUNC_S} $R4 $1 0 loop
+ IntOp $9 $6 + $R2
+ StrCpy $6 $9
+ goto delim1
+
+ delim2:
+ StrCpy $R4 $R0 $R3 $6
+ StrCmp${_WORDFUNC_S} $R4 $2 0 loop
+ IntOp $7 $7 + 1
+ StrCmp${_WORDFUNC_S} $4$7 '+$3' plus
+ StrCmp${_WORDFUNC_S} $4 '/' 0 nextword
+ IntOp $R4 $6 - $8
+ StrCpy $R4 $R0 $R4 $8
+ StrCmp${_WORDFUNC_S} $R4 $3 0 +3
+ StrCpy $R4 $7
+ goto end
+ nextword:
+ IntOp $6 $6 + $R3
+ StrCpy $8 ''
+ StrCpy $9 ''
+ goto delim1
+
+ minus:
+ StrCmp${_WORDFUNC_S} $4 '-' 0 sum
+ StrCpy $4 +
+ IntOp $3 $7 - $3
+ IntOp $3 $3 + 1
+ IntCmp $3 0 error2 error2 restart
+ sum:
+ StrCmp${_WORDFUNC_S} $4 '#' 0 error2
+ StrCpy $R4 $7
+ goto end
+
+ plus:
+ StrCmp${_WORDFUNC_S} $5 '' 0 +4
+ IntOp $R4 $6 - $8
+ StrCpy $R4 $R0 $R4 $8
+ goto 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 end
+ StrCmp${_WORDFUNC_S} $5 '*}' +2
+ StrCmp${_WORDFUNC_S} $5 '}*' 0 +3
+ StrCpy $R4 $R0 '' $8
+ goto end
+ StrCmp${_WORDFUNC_S} $5 '}}' 0 +3
+ StrCpy $R4 $R0 '' $6
+ goto end
+ StrCmp${_WORDFUNC_S} $5 '{{' 0 +3
+ StrCpy $R4 $R0 $8
+ goto end
+ StrCmp${_WORDFUNC_S} $5 '{}' 0 error3
+ StrCpy $6 $R0 '' $6
+ StrCpy $8 $R0 $8
+ StrCpy $R4 '$8$6'
+ goto end
+
+ error3:
+ StrCpy $R4 3
+ goto error
+ error2:
+ StrCpy $R4 2
+ goto error
+ error1:
+ StrCpy $R4 1
+ error:
+ StrCmp $R5 'E' 0 +3
+ SetErrors
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordReplace
+ !ifndef ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordReplace${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}WordReplace${_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 error1
+ StrCmp${_WORDFUNC_S} $R0 '' error1
+ StrCmp${_WORDFUNC_S} $3 '{' beginning
+ StrCmp${_WORDFUNC_S} $3 '}' ending errorchk
+
+ 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 merge
+
+ ending:
+ StrCpy $8 $R0 '' -$7
+ StrCmp${_WORDFUNC_S} $8 $0 0 +4
+ StrCpy $R0 $R0 -$7
+ StrCpy $6 '$6$1'
+ goto -4
+
+ 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 end
+
+ errorchk:
+ StrCmp${_WORDFUNC_S} $3 '+' +2
+ StrCmp${_WORDFUNC_S} $3 '-' 0 error3
+
+ StrCpy $5 $2 1
+ IntOp $2 $2 + 0
+ StrCmp${_WORDFUNC_S} $2 0 0 one
+ StrCmp${_WORDFUNC_S} $5 0 error2
+ StrCpy $3 ''
+
+ 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 error1
+ StrCpy $R0 '$3$R0'
+ goto 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 all
+
+ one:
+ StrCpy $5 0
+ StrCpy $8 0
+ goto loop
+
+ preloop:
+ IntOp $5 $5 + 1
+
+ loop:
+ StrCpy $6 $R0 $7 $5
+ StrCmp${_WORDFUNC_S} $6$8 0 error1
+ StrCmp${_WORDFUNC_S} $6 '' minus
+ StrCmp${_WORDFUNC_S} $6 $0 0 preloop
+ IntOp $8 $8 + 1
+ StrCmp${_WORDFUNC_S} $3$8 +$2 found
+ IntOp $5 $5 + $7
+ goto loop
+
+ minus:
+ StrCmp${_WORDFUNC_S} $3 '-' 0 error2
+ StrCpy $3 +
+ IntOp $2 $8 - $2
+ IntOp $2 $2 + 1
+ IntCmp $2 0 error2 error2 one
+
+ 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 end
+
+ error3:
+ StrCpy $R0 3
+ goto error
+ error2:
+ StrCpy $R0 2
+ goto error
+ error1:
+ StrCpy $R0 1
+ error:
+ StrCmp $9 'E' +3
+ StrCpy $R0 $R1
+ goto +2
+ SetErrors
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordAdd
+ !ifndef ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !insertmacro WordFind
+
+ !define ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordAdd${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}WordAdd${_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 error3
+
+ StrCmp${_WORDFUNC_S} $0 '' error1
+ StrCmp${_WORDFUNC_S} $2 '' end
+ StrCmp${_WORDFUNC_S} $R0 '' 0 +5
+ StrCmp${_WORDFUNC_S} $1 '-' end
+ StrCmp${_WORDFUNC_S} $1 '+' 0 +3
+ StrCpy $R0 $2
+ goto end
+
+ loop:
+ IntOp $5 $5 + 1
+ Push `$2`
+ Push `$0`
+ Push `E+$5`
+ Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
+ Pop $3
+ IfErrors 0 /word
+ StrCmp${_WORDFUNC_S} $3 2 +4
+ StrCmp${_WORDFUNC_S} $3$5 11 0 +3
+ StrCpy $3 $2
+ goto /word
+ StrCmp${_WORDFUNC_S} $1 '-' end preend
+
+ /word:
+ Push `$R0`
+ Push `$0`
+ Push `E/$3`
+ Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
+ Pop $4
+ IfErrors +2
+ StrCmp${_WORDFUNC_S} $1 '-' delete loop
+ StrCmp${_WORDFUNC_S} $1$4 '-1' +2
+ StrCmp${_WORDFUNC_S} $1 '-' loop +4
+ StrCmp${_WORDFUNC_S} $R0 $3 0 loop
+ StrCpy $R0 ''
+ goto end
+ StrCmp${_WORDFUNC_S} $1$4 '+1' 0 +2
+ StrCmp${_WORDFUNC_S} $R0 $3 loop
+ StrCmp${_WORDFUNC_S} $R0 $R1 +3
+ StrCpy $R1 '$R1$0$3'
+ goto loop
+ StrLen $6 $0
+ StrCpy $6 $R0 '' -$6
+ StrCmp${_WORDFUNC_S} $6 $0 0 -4
+ StrCpy $R1 '$R1$3'
+ goto loop
+
+ delete:
+ Push `$R0`
+ Push `$0`
+ Push `E+$4{}`
+ Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
+ Pop $R0
+ goto /word
+
+ error3:
+ StrCpy $R1 3
+ goto error
+ error1:
+ StrCpy $R1 1
+ error:
+ StrCmp $7 'E' 0 end
+ SetErrors
+
+ preend:
+ StrCpy $R0 $R1
+
+ end:
+ Pop $R1
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+ Exch $R0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordInsert
+ !ifndef ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !insertmacro WordFind
+
+ !define ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}WordInsert${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}WordInsert${_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 error3
+ IntOp $2 $2 + 0
+ StrCmp${_WORDFUNC_S} $2 0 error2
+ StrCmp${_WORDFUNC_S} $0 '' error1
+
+ StrCmp${_WORDFUNC_S} $2 1 0 two
+ GetLabelAddress $8 oneback
+ StrCmp${_WORDFUNC_S} $3 '+' call
+ StrCpy $7 {
+ goto call
+ oneback:
+ IfErrors 0 +2
+ StrCpy $4 $R0
+ StrCmp${_WORDFUNC_S} $3 '+' 0 +3
+ StrCpy $R0 '$1$0$4'
+ goto end
+ StrCpy $R0 '$4$0$1'
+ goto end
+
+ two:
+ IntOp $2 $2 - 1
+ GetLabelAddress $8 twoback
+ StrCmp${_WORDFUNC_S} $3 '+' 0 call
+ StrCpy $7 {
+ goto call
+ twoback:
+ IfErrors 0 tree
+ StrCmp${_WORDFUNC_S} $2$4 11 0 error2
+ StrCmp${_WORDFUNC_S} $3 '+' 0 +3
+ StrCpy $R0 '$R0$0$1'
+ goto end
+ StrCpy $R0 '$1$0$R0'
+ goto end
+
+ tree:
+ StrCpy $7 }
+ StrCpy $5 $4
+ IntOp $2 $2 + 1
+ GetLabelAddress $8 treeback
+ StrCmp${_WORDFUNC_S} $3 '+' call
+ StrCpy $7 {
+ goto call
+ treeback:
+ IfErrors 0 +3
+ StrCpy $4 ''
+ StrCpy $6 ''
+ StrCmp${_WORDFUNC_S} $3 '+' 0 +3
+ StrCpy $R0 '$5$0$1$6$4'
+ goto end
+ StrCpy $R0 '$4$6$1$0$5'
+ goto end
+
+ call:
+ Push '$R0'
+ Push '$0'
+ Push 'E$3$2*$7'
+ Call ${_WORDFUNC_UN}WordFind${_WORDFUNC_S}
+ Pop $4
+ goto $8
+
+ error3:
+ StrCpy $R0 3
+ goto error
+ error2:
+ StrCpy $R0 2
+ goto error
+ error1:
+ StrCpy $R0 1
+ error:
+ StrCmp $9 'E' +3
+ StrCpy $R0 $R1
+ goto +2
+ SetErrors
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro StrFilter
+ !ifndef ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S}
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S} `!insertmacro ${_WORDFUNC_UN}StrFilter${_WORDFUNC_S}Call`
+
+ Function ${_WORDFUNC_UN}StrFilter${_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 eng
+ StrCmp $R2 rus rus
+ eng:
+ StrCpy $4 65
+ StrCpy $5 90
+ StrCpy $6 97
+ StrCpy $7 122
+ goto langend
+ rus:
+ StrCpy $4 192
+ StrCpy $5 223
+ StrCpy $6 224
+ StrCpy $7 255
+ goto langend
+ ;...
+
+ langend:
+ StrCpy $R7 ''
+ StrCpy $R8 ''
+
+ StrCmp${_WORDFUNC_S} $2 '' 0 begin
+
+ 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 '' filter error
+
+ restart2:
+ StrCmp${_WORDFUNC_S} $3 '' end
+ StrCpy $R7 ''
+ StrCpy $R8 '+-'
+ goto begin
+
+ filter:
+ StrCmp${_WORDFUNC_S} $R7 '1' +3
+ StrCmp${_WORDFUNC_S} $R7 '2' +2
+ StrCmp${_WORDFUNC_S} $R7 '3' 0 error
+
+ StrCmp${_WORDFUNC_S} $R8 '' begin
+ StrCmp${_WORDFUNC_S} $R7$R8 '23' +2
+ StrCmp${_WORDFUNC_S} $R7$R8 '32' 0 +3
+ StrCpy $R7 -1
+ goto begin
+ StrCmp${_WORDFUNC_S} $R7$R8 '13' +2
+ StrCmp${_WORDFUNC_S} $R7$R8 '31' 0 +3
+ StrCpy $R7 -2
+ goto begin
+ StrCmp${_WORDFUNC_S} $R7$R8 '12' +2
+ StrCmp${_WORDFUNC_S} $R7$R8 '21' 0 error
+ StrCpy $R7 -3
+
+ begin:
+ StrCpy $R6 0
+ StrCpy $R1 ''
+
+ loop:
+ StrCpy $R2 $R0 1 $R6
+ StrCmp${_WORDFUNC_S} $R2 '' restartchk
+
+ StrCmp${_WORDFUNC_S} $2 '' +7
+ StrCpy $R4 0
+ StrCpy $R5 $2 1 $R4
+ StrCmp${_WORDFUNC_S} $R5 '' addsymbol
+ StrCmp${_WORDFUNC_S} $R5 $R2 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 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 loop2
+ StrCmp${_WORDFUNC_S} $R8 '+-' 0 +2
+ StrCmp${_WORDFUNC_S} $3 '+' 0 +4
+ StrCpy $R4 $4
+ StrCpy $R5 $5
+ goto loop2
+ StrCpy $R4 $6
+ StrCpy $R5 $7
+
+ loop2:
+ IntFmt $R3 '%c' $R4
+ StrCmp $R2 $R3 found
+ StrCmp $R4 $R5 notfound
+ IntOp $R4 $R4 + 1
+ goto loop2
+
+ found:
+ StrCmp${_WORDFUNC_S} $R8 '+-' setcase
+ StrCmp${_WORDFUNC_S} $R7 '3' skipsymbol
+ StrCmp${_WORDFUNC_S} $R7 '-3' addsymbol
+ StrCmp${_WORDFUNC_S} $R8 '' addsymbol skipsymbol
+
+ notfound:
+ StrCmp${_WORDFUNC_S} $R8 '+-' addsymbol
+ StrCmp${_WORDFUNC_S} $R7 '3' 0 +2
+ StrCmp${_WORDFUNC_S} $R5 57 addsymbol +3
+ StrCmp${_WORDFUNC_S} $R7 '-3' 0 +5
+ StrCmp${_WORDFUNC_S} $R5 57 skipsymbol
+ StrCpy $R4 48
+ StrCpy $R5 57
+ goto loop2
+ StrCmp${_WORDFUNC_S} $R8 '' skipsymbol addsymbol
+
+ setcase:
+ StrCpy $R2 $R3
+ addsymbol:
+ StrCpy $R1 $R1$R2
+ skipsymbol:
+ IntOp $R6 $R6 + 1
+ goto loop
+
+ error:
+ SetErrors
+ StrCpy $R0 ''
+ goto end
+
+ restartchk:
+ StrCpy $R0 $R1
+ StrCmp${_WORDFUNC_S} $2 '' 0 restart1
+ StrCmp${_WORDFUNC_S} $R8 '+-' 0 restart2
+
+ 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
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro VersionCompare
+ !ifndef ${_WORDFUNC_UN}VersionCompare
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}VersionCompare `!insertmacro ${_WORDFUNC_UN}VersionCompareCall`
+
+ Function ${_WORDFUNC_UN}VersionCompare
+ Exch $1
+ Exch
+ Exch $0
+ Exch
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+ Push $6
+ Push $7
+
+ 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 '' 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 begin newer2
+ StrCmp $5 0 newer1
+ IntCmp $6 $7 0 newer1 newer2
+
+ StrCpy $4 '1$4'
+ StrCpy $5 '1$5'
+ IntCmp $4 $5 begin newer2 newer1
+
+ equal:
+ StrCpy $0 0
+ goto end
+ newer1:
+ StrCpy $0 1
+ goto end
+ newer2:
+ StrCpy $0 2
+
+ end:
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+!macro VersionConvert
+ !ifndef ${_WORDFUNC_UN}VersionConvert
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !define ${_WORDFUNC_UN}VersionConvert `!insertmacro ${_WORDFUNC_UN}VersionConvertCall`
+
+ Function ${_WORDFUNC_UN}VersionConvert
+ 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 loop
+
+ preloop:
+ IntOp $2 $2 + 1
+
+ loop:
+ StrCpy $3 $0 1 $2
+ StrCmp $3 '' endcheck
+ StrCmp $3 '.' dot
+ StrCmp $3 '0' digit
+ IntCmp $3 '0' letter letter digit
+
+ dot:
+ StrCmp $7 'dot' replacespecial
+ StrCpy $7 'dot'
+ goto preloop
+
+ digit:
+ StrCmp $7 'letter' insertdot
+ StrCpy $7 'digit'
+ goto preloop
+
+ letter:
+ StrCpy $5 0
+ StrCpy $4 $1 1 $5
+ IntOp $5 $5 + 1
+ StrCmp $4 '' 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 loop
+
+ 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 loop
+
+ insertdot:
+ StrCpy $4 $0 $2
+ StrCpy $0 $0 '' $2
+ StrCpy $0 '$4.$0'
+ StrCpy $7 'dot'
+ goto preloop
+
+ endcheck:
+ StrCpy $4 $0 1 -1
+ StrCmp $4 '.' 0 end
+ StrCpy $0 $0 -1
+ goto -3
+
+ end:
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ FunctionEnd
+
+ !verbose pop
+ !endif
+!macroend
+
+
+# Uninstall. Case insensitive. #
+
+!macro un.WordFindCall _STRING _DELIMITER _OPTION _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER}`
+ Push `${_OPTION}`
+ Call un.WordFind
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER1}`
+ Push `${_DELIMITER2}`
+ Push `${_NUMBER}`
+ Call un.WordFind2X
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordFind3XCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER1}`
+ Push `${_CENTER}`
+ Push `${_DELIMITER2}`
+ Push `${_NUMBER}`
+ Call un.WordFind3X
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordReplaceCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_WORD1}`
+ Push `${_WORD2}`
+ Push `${_NUMBER}`
+ Call un.WordReplace
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING1}`
+ Push `${_DELIMITER}`
+ Push `${_STRING2}`
+ Call un.WordAdd
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER}`
+ Push `${_WORD}`
+ Push `${_NUMBER}`
+ Call un.WordInsert
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.StrFilterCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_FILTER}`
+ Push `${_INCLUDE}`
+ Push `${_EXCLUDE}`
+ Call un.StrFilter
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.VersionCompareCall _VER1 _VER2 _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_VER1}`
+ Push `${_VER2}`
+ Call un.VersionCompare
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.VersionConvertCall _VERSION _CHARLIST _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_VERSION}`
+ Push `${_CHARLIST}`
+ Call un.VersionConvert
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+
+!macro un.WordFind
+ !ifndef un.WordFind
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro WordFind
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordFind2X
+ !ifndef un.WordFind2X
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro WordFind2X
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordFind3X
+ !ifndef un.WordFind3X
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro WordFind3X
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordReplace
+ !ifndef un.WordReplace
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro WordReplace
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordAdd
+ !ifndef un.WordAdd
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro WordAdd
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordInsert
+ !ifndef un.WordInsert
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro WordInsert
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.StrFilter
+ !ifndef un.StrFilter
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro StrFilter
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.VersionCompare
+ !ifndef un.VersionCompare
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro VersionCompare
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.VersionConvert
+ !ifndef un.VersionConvert
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+
+ !insertmacro VersionConvert
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !verbose pop
+ !endif
+!macroend
+
+
+# Install. Case sensitive. #
+
+!macro WordFindSCall _STRING _DELIMITER _OPTION _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER}`
+ Push `${_OPTION}`
+ Call WordFindS
+ 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}`
+ Call WordFind2XS
+ 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}`
+ Call WordFind3XS
+ 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}`
+ Call WordReplaceS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING1}`
+ Push `${_DELIMITER}`
+ Push `${_STRING2}`
+ Call WordAddS
+ 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}`
+ Call WordInsertS
+ 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}`
+ Call StrFilterS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro WordFindS
+ !ifndef WordFindS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordFind
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordFind2XS
+ !ifndef WordFind2XS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordFind2X
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordFind3XS
+ !ifndef WordFind3XS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordFind3X
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordReplaceS
+ !ifndef WordReplaceS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordReplace
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordAddS
+ !ifndef WordAddS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordAdd
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro WordInsertS
+ !ifndef WordInsertS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordInsert
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro StrFilterS
+ !ifndef StrFilterS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro StrFilter
+
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+
+# Uninstall. Case sensitive. #
+
+!macro un.WordFindSCall _STRING _DELIMITER _OPTION _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER}`
+ Push `${_OPTION}`
+ Call un.WordFindS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordFind2XSCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER1}`
+ Push `${_DELIMITER2}`
+ Push `${_NUMBER}`
+ Call un.WordFind2XS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordFind3XSCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER1}`
+ Push `${_CENTER}`
+ Push `${_DELIMITER2}`
+ Push `${_NUMBER}`
+ Call un.WordFind3XS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordReplaceSCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_WORD1}`
+ Push `${_WORD2}`
+ Push `${_NUMBER}`
+ Call un.WordReplaceS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING1}`
+ Push `${_DELIMITER}`
+ Push `${_STRING2}`
+ Call un.WordAddS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordInsertSCall _STRING _DELIMITER _WORD _NUMBER _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_DELIMITER}`
+ Push `${_WORD}`
+ Push `${_NUMBER}`
+ Call un.WordInsertS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.StrFilterSCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ Push `${_STRING}`
+ Push `${_FILTER}`
+ Push `${_INCLUDE}`
+ Push `${_EXCLUDE}`
+ Call un.StrFilterS
+ Pop ${_RESULT}
+ !verbose pop
+!macroend
+
+!macro un.WordFindS
+ !ifndef un.WordFindS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_S
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordFind
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordFind2XS
+ !ifndef un.WordFind2XS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordFind2X
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordFind3XS
+ !ifndef un.WordFind3XS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordFind3X
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordReplaceS
+ !ifndef un.WordReplaceS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordReplace
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordAddS
+ !ifndef un.WordAddS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordAdd
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.WordInsertS
+ !ifndef un.WordInsertS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro WordInsert
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!macro un.StrFilterS
+ !ifndef un.StrFilterS
+ !verbose push
+ !verbose ${_WORDFUNC_VERBOSE}
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN `un.`
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S `S`
+
+ !insertmacro StrFilter
+
+ !undef _WORDFUNC_UN
+ !define _WORDFUNC_UN
+ !undef _WORDFUNC_S
+ !define _WORDFUNC_S
+ !verbose pop
+ !endif
+!macroend
+
+!endif
diff --git a/Include/x64.nsh b/Include/x64.nsh
index e694c1e..5e96636 100755
--- a/Include/x64.nsh
+++ b/Include/x64.nsh
@@ -1,54 +1,54 @@
-; ---------------------
-; x64.nsh
-; ---------------------
-;
-; A few simple macros to handle installations on x64 machines.
-;
-; RunningX64 checks if the installer is running on x64.
-;
-; ${If} ${RunningX64}
-; MessageBox MB_OK "running on x64"
-; ${EndIf}
-;
-; DisableX64FSRedirection disables file system redirection.
-; EnableX64FSRedirection enables file system redirection.
-;
-; SetOutPath $SYSDIR
-; ${DisableX64FSRedirection}
-; File some.dll # extracts to C:\Windows\System32
-; ${EnableX64FSRedirection}
-; File some.dll # extracts to C:\Windows\SysWOW64
-;
-
-!ifndef ___X64__NSH___
-!define ___X64__NSH___
-
-!include LogicLib.nsh
-
-!macro _RunningX64 _a _b _t _f
- !insertmacro _LOGICLIB_TEMP
- System::Call kernel32::GetCurrentProcess()i.s
- System::Call kernel32::IsWow64Process(is,*i.s)
- Pop $_LOGICLIB_TEMP
- !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
-!macroend
-
-!define RunningX64 `"" RunningX64 ""`
-
-!macro DisableX64FSRedirection
-
- System::Call kernel32::Wow64EnableWow64FsRedirection(i0)
-
-!macroend
-
-!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection"
-
-!macro EnableX64FSRedirection
-
- System::Call kernel32::Wow64EnableWow64FsRedirection(i1)
-
-!macroend
-
-!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection"
-
-!endif # !___X64__NSH___
+; ---------------------
+; x64.nsh
+; ---------------------
+;
+; A few simple macros to handle installations on x64 machines.
+;
+; RunningX64 checks if the installer is running on x64.
+;
+; ${If} ${RunningX64}
+; MessageBox MB_OK "running on x64"
+; ${EndIf}
+;
+; DisableX64FSRedirection disables file system redirection.
+; EnableX64FSRedirection enables file system redirection.
+;
+; SetOutPath $SYSDIR
+; ${DisableX64FSRedirection}
+; File some.dll # extracts to C:\Windows\System32
+; ${EnableX64FSRedirection}
+; File some.dll # extracts to C:\Windows\SysWOW64
+;
+
+!ifndef ___X64__NSH___
+!define ___X64__NSH___
+
+!include LogicLib.nsh
+
+!macro _RunningX64 _a _b _t _f
+ !insertmacro _LOGICLIB_TEMP
+ System::Call kernel32::GetCurrentProcess()i.s
+ System::Call kernel32::IsWow64Process(is,*i.s)
+ Pop $_LOGICLIB_TEMP
+ !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
+!macroend
+
+!define RunningX64 `"" RunningX64 ""`
+
+!macro DisableX64FSRedirection
+
+ System::Call kernel32::Wow64EnableWow64FsRedirection(i0)
+
+!macroend
+
+!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection"
+
+!macro EnableX64FSRedirection
+
+ System::Call kernel32::Wow64EnableWow64FsRedirection(i1)
+
+!macroend
+
+!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection"
+
+!endif # !___X64__NSH___
diff --git a/Menu/compiler.html b/Menu/compiler.html
deleted file mode 100755
index b008398..0000000
--- a/Menu/compiler.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="index.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Quick Launch</b></font></a></p>
- <p><a href="intro.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Introduction</b></font></a></p>
- <p><a href="#"><img src="images/menud.gif" width="30" height="18"><font size="+1" color="#808080"><b>Compiler</b></font></a></p>
- <p><a href="docs.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Documentation</b></font></a></p>
- <p><a href="update.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Update</b></font></a></p>
- <p><a href="websites.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Websites</b></font></a></p>
- </td>
- <td width="418" height="100" valign="top">
- <p><font size="+1" color="#0C6E97"><b>Compiler</b></font></p>
- <p>The makensis compiler can compile NSIS scripts to create installer
- executables.<br>MakeNSISW is a graphical interface for this compiler.</p>
- <p>To compile a script, right click on a script file in explorer and
- choose 'Compile NSIS Script'.
- The compiler will be started in the MakeNSISW interface.</p>
- <p>You can also start MakeNSISW and open the script using the File menu
- or drag the script file from explorer into the window.</p>
- <p><a href="EX:makensisw.exe"><b>Start MakeNSISW &gt;</b></a></p>
- </td>
- </tr>
-</table>
-<p><img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
diff --git a/Menu/docs.html b/Menu/docs.html
deleted file mode 100755
index 1eae1af..0000000
--- a/Menu/docs.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="index.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Quick Launch</b></font></a></p>
- <p><a href="intro.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Introduction</b></font></a></p>
- <p><a href="compiler.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Compiler</b></font></a></p>
- <p><a href="#"><img src="images/menud.gif" width="30" height="18"><font size="+1" color="#808080"><b>Documentation</b></font></a></p>
- <p><a href="update.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Update</b></font></a></p>
- <p><a href="websites.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Websites</b></font></a></p>
- </td>
- <td width="418" valign="top">
- <p><font size="+1" color="#0C6E97"><b>Documentation</b></font></p>
- <p>For information about the script format, a tutorial, useful functions,
- version history, credits and a reference of all commands, see the
- <a href="EX:NSIS.chm"><b>Users Manual</b></a> (Win95/NT4: <a href="EX:http://microsoft.com/ie/">IE3</a> and
- <a href="EX:http://go.microsoft.com/fwlink/?LinkId=14498">HTML Help</a> required).</p>
- <p>If you want to create an installer with a modern user interface, check
- the <a href="EX:Docs\Modern UI\Readme.html"><b>Modern UI Readme</b></a>
- for information and reference of settings.</p>
- <p>For example scripts, browse the <a href="EX:Examples"><b>Examples
- folder</b></a>.</p>
- <p>For information about the plugins, browse the <a href="EX:Docs"><b>Docs
- folder</b></a>.</p>
- <p>The <a href="EX:http://nsis.sourceforge.net/Developer_Center"><b>NSIS Developer Center</b></a> contains more examples and tutorials.</p>
- </td>
- </tr>
-</table>
-<p><img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
diff --git a/Menu/images/clear.gif b/Menu/images/clear.gif
deleted file mode 100755
index 2799b45..0000000
--- a/Menu/images/clear.gif
+++ /dev/null
Binary files differ
diff --git a/Menu/images/header.gif b/Menu/images/header.gif
index 4763b8f..22e354b 100755
--- a/Menu/images/header.gif
+++ b/Menu/images/header.gif
Binary files differ
diff --git a/Menu/images/menu.gif b/Menu/images/menu.gif
deleted file mode 100755
index 45a3736..0000000
--- a/Menu/images/menu.gif
+++ /dev/null
Binary files differ
diff --git a/Menu/images/menud.gif b/Menu/images/menud.gif
deleted file mode 100755
index 2d6218e..0000000
--- a/Menu/images/menud.gif
+++ /dev/null
Binary files differ
diff --git a/Menu/index.html b/Menu/index.html
index a18131c..66fc412 100755
--- a/Menu/index.html
+++ b/Menu/index.html
@@ -1,46 +1,63 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="#"><img src="images/menud.gif" width="30" height="18"><font size="+1" color="#808080"><b>Quick Launch</b></font></a></p>
- <p><a href="intro.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Introduction</b></font></a></p>
- <p><a href="compiler.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Compiler</b></font></a></p>
- <p><a href="docs.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Documentation</b></font></a></p>
- <p><a href="update.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Update</b></font></a></p>
- <p><a href="websites.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Websites</b></font></a></p>
- </td>
- <td width="418" valign="top">
- <table>
- <tr><td valign="top">
- <p><font size="+1" color="#333333"><b>Utilities</b></font><br>
- <a href="EX:makensisw.exe">MakeNSISW (compiler interface)</a><br>
- <a href="EX:Bin\zip2exe.exe">Zip2Exe (convert ZIP to SFX)</a><br>
- &nbsp;<br><br></p>
- <p><font size="+1" color="#333333"><b>Folders</b></font><br>
- <a href="EX:Examples">Example scripts</a><br>
- <a href="EX:Contrib">Contrib (plug-in info etc.)</a><br>
- <a href="EX:Contrib\Language files">Language files</a></p>
- </td><td valign="top">
- <p><font size="+1" color="#333333"><b>Documentation</b></font><br>
- <a href="EX:NSIS.chm">NSIS Users Manual</a><br>
- <a href="EX:http://nsis.sourceforge.net/FAQ">FAQ (online)</a><br>
- <a href="EX:Docs\Modern UI\Readme.html">Modern UI Readme</a><br>
- <a href="EX:Docs\InstallOptions\Readme.html">InstallOptions (custom pages)</a></p>
- <p><font size="+1" color="#333333"><b>Websites</b></font><br>
- <a href="EX:http://nsis.sourceforge.net/">NSIS Website</a><br>
- <a href="EX:http://forums.winamp.com/forumdisplay.php?s=&forumid=65">Forum</a><br>
- <a href="EX:irc://irc.landoleet.org/nsis">IRC Channel</a><br>
- <a href="EX:http://sourceforge.net/tracker/?group_id=22049&atid=373085">Bug Tracker</a><br>
- <a href="EX:http://nsis.sourceforge.net/Change_Log">Development Change Log</a><br></p>
- </td></tr>
- </table>
- </td>
- </tr>
-</table>
-<p><img src="images/clear.gif" width="598" height="1">
-<img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
+<html>
+<body link="#0C6E97">
+ <div>
+ <img src="images/header.gif" width="598" height="45"></div>
+ <table border="0">
+ <tr>
+ <td width="20">
+ </td>
+ <td width="190" valign="top">
+ <p>
+ <font size="+1" color="#333333"><b>Compiler</b></font><br>
+ <a href="EX:makensisw.exe">Compile NSI scripts</a><br>
+ <a href="EX:Bin\zip2exe.exe">Installer based on ZIP file</a><br>
+ <br>
+ <br>
+ <br>
+ </p>
+ <p>
+ <font size="+1" color="#333333"><b>Developer Center</b></font><br>
+ Many more examples, tutorials, plug-ins and NSIS-releted software are available
+ at the on-line <a href="EX:http://nsis.sourceforge.net/Developer_Center">Developer Center</a>.
+ </p>
+ <td width="150" valign="top">
+ <p>
+ <font size="+1" color="#333333"><b>Documentation</b></font><br>
+ <a href="EX:NSIS.chm">NSIS Users Manual</a><br>
+ <a href="EX:Examples">Example scripts</a><br>
+ <a href="EX:Docs\Modern UI 2\Readme.html">Modern UI 2</a><br>
+ <a href="EX:Docs\MultiUser\Readme.html">Multi-User Header File</a><br>
+ <a href="EX:Docs\StrFunc\StrFunc.txt">StrFunc Header File</a></p>
+ <p>
+ <font size="+1" color="#333333"><b>On-line help</b></font><br>
+ <a href="EX:http://forums.winamp.com/forumdisplay.php?s=&forumid=65">Forum</a><br>
+ <a href="EX:http://nsis.sourceforge.net/FAQ">FAQ</a><br>
+ <a href="EX:irc://irc.landoleet.org/nsis">IRC Channel</a><br>
+ <a href="EX:http://sourceforge.net/tracker/?group_id=22049&atid=373085">Bug Tracker</a><br>
+ </td>
+ <td valign="top">
+ <p>
+ <font size="+1" color="#333333"><b>Plug-ins</b></font><br>
+ <a href="EX:Docs\AdvSplash\advsplash.txt">AdvSplash</a> - splash with fade in/out<br>
+ <a href="EX:Docs\Banner\Readme.txt">Banner</a> - banner with custom text<br>
+ <a href="EX:Docs\BgImage\BgImage.txt">BgImage</a> - background image<br>
+ <a href="EX:Docs\Dialer\Dialer.txt">Dialer</a> - internet connection<br>
+ <a href="EX:Docs\Math\Math.txt">Math</a> - math operations<br>
+ <a href="EX:Docs\nsDialogs\Readme.html">nsDialogs</a> - custom wizard pages<br>
+ <a href="EX:Docs\nsExec\nsExec.txt">nsExec</a> - launch command line tools<br>
+ <a href="EX:Docs\NSISdl\Readme.txt">NSISdl</a> - download files<br>
+ <a href="EX:Docs\Splash\splash.txt">Splash</a> - splash scren<br>
+ <a href="EX:Docs\StartMenu\Readme.txt">StartMenu</a> - Start Menu folder selection<br>
+ <a href="EX:Docs\System\System.html">System</a> - Windows API calls<br>
+ <a href="EX:Docs\VPatch\Readme.html">VPatch</a> - update existing files</p>
+ </td>
+ <br>
+ </tr>
+ </table>
+ <p>
+ <img src="images/line.gif" width="598" height="3"></p>
+ <div align="right">
+ <a href="EX:http://nsis.sourceforge.net/">
+ <img src="images/site.gif" width="200" height="25"></a></div>
+</body>
+</html>
diff --git a/Menu/intro.html b/Menu/intro.html
deleted file mode 100755
index 62dcdea..0000000
--- a/Menu/intro.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<img src="images/clear.gif" width="1" height="3">
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="index.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Quick Launch</b></font></a></p>
- <p><a href="#"><img src="images/menud.gif" width="30" height="18"><font size="+1" color="#808080"><b>Introduction</b></font></a></p>
- <p><a href="compiler.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Compiler</b></font></a></p>
- <p><a href="docs.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Documentation</b></font></a></p>
- <p><a href="update.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Update</b></font></a></p>
- <p><a href="websites.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Websites</b></font></a></p>
- </td>
- <td width="418" valign="top">
- <p><font size="+1" color="#0C6E97"><b>Introduction</b></font></p>
- <p>An installer is the first experience of a user with your application.
- Slow or unsuccessful software installations are the most irritating
- computer problems. A quick and user friendly installer is therefore an
- essential part of your software product.
- <p>NSIS is a tool that allows programmers
- to create such installers. It is released under an open source license and is
- completely free for any use.</p>
- <p>NSIS installers are based on NSIS Scripts (.nsi) which can be compiled
- with the makensis compiler. They can also be extended with plug-ins written
- in C, C++, Delphi or another language.</p>
- </td>
- </tr>
-</table>
-<p><img src="images/clear.gif" width="598" height="4">
-<img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
diff --git a/Menu/notinstalled.html b/Menu/notinstalled.html
index 596fc3f..6e647d7 100755
--- a/Menu/notinstalled.html
+++ b/Menu/notinstalled.html
@@ -1,27 +1,22 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="index.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Quick Launch</b></font></a></p>
- <p><a href="intro.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Introduction</b></font></a></p>
- <p><a href="compiler.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Compiler</b></font></a></p>
- <p><a href="docs.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Documentation</b></font></a></p>
- <p><a href="update.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Update</b></font></a></p>
- <p><a href="websites.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Websites</b></font></a></p>
- </td>
- <td width="418" valign="top">
- <p><font size="+1" color="#0C6E97"><b>Feature not installed</b></font></p>
- <p>The feature you selected is not installed.</p>
- <p>If you want to use this feature, run NSIS Setup again and do not deselect
- it.</p>
- <br><br><br><br><br><br><br><br>
- </td>
- </tr>
-</table>
-<p><img src="images/clear.gif" width="598" height="3">
-<img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
+<html>
+<body link="#0C6E97">
+ <div>
+ <img src="images/header.gif" width="598" height="45"></div>
+ <table border="0">
+ <tr>
+ <td width="20">
+ </td>
+ <td>
+ <p>
+ <font size="+1" color="#0C6E97"><b>Feature not installed</b></font></p>
+ <p>
+ The feature you selected is not installed.</p>
+ <p>
+ If you want to use this feature, run NSIS Setup again to install it.</p>
+ <p>
+ <a href="index.html">&lt;- Back</a></p>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/Menu/update.html b/Menu/update.html
deleted file mode 100755
index f44773e..0000000
--- a/Menu/update.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="index.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Quick Launch</b></font></a></p>
- <p><a href="intro.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Introduction</b></font></a></p>
- <p><a href="compiler.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Compiler</b></font></a></p>
- <p><a href="docs.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Documentation</b></font></a></p>
- <p><a href="#"><img src="images/menud.gif" width="30" height="18"><font size="+1" color="#808080"><b>Update</b></font></a></p>
- <p><a href="websites.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Websites</b></font></a></p>
- </td>
- <td width="418" valign="top">
- <p><font size="+1" color="#0C6E97"><b>Update</b></font></p>
- <p><a href="EX:makensisw.exe">MakeNSISW</a> allows you to check whether
- a new release is available. Choose NSIS Update in the Help menu to
- check for a newer version. </p>
- <p>The releases have been tested and provide new features and fixes.</p>
- <p>A nightly build of latest development files is also available on the
- <a href="EX:http://nsis.sourceforge.net/Development_Files">website</a>.
- Using the development files you can try the latest cutting-edge features
- and fixes. These files have not been tested so they should not be used in
- production environments. </p>
- <p>See the <a href="EX:http://nsis.sourceforge.net/Change_Log">
- <b>Change Log</b></a> for the latest changes in the development files.<br></p>
- </td>
- </tr>
-</table>
-<p><img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
diff --git a/Menu/websites.html b/Menu/websites.html
deleted file mode 100755
index d8cfa21..0000000
--- a/Menu/websites.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<body link="#0C6E97">
-<div><img src="images/header.gif" width="598" height="45"></div>
-<table border="0">
- <tr>
- <td width="170">
- <p><a href="index.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Quick Launch</b></font></a></p>
- <p><a href="intro.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Introduction</b></font></a></p>
- <p><a href="compiler.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Compiler</b></font></a></p>
- <p><a href="docs.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Documentation</b></font></a></p>
- <p><a href="update.html"><img src="images/menu.gif" width="30" height="18"><font size="+1" color="#0C6E97"><b>Update</b></font></a></p>
- <p><a href="#"><img src="images/menud.gif" width="30" height="18"><font size="+1" color="#808080"><b>Websites</b></font></a></p>
- </td>
- <td width="418" valign="top">
- <p><font size="+1" color="#0C6E97"><b>Websites</b></font></p>
- <p><a href="EX:http://nsis.sourceforge.net/"><b>NSIS Website</b></a> -
- General NSIS information, news and the <a href="EX:http://nsis.sourceforge.net/Developer_Center">
- NSIS Developer Center</a>, a repository of script examples, plug-ins,
- tutorials, development environments and more.</p>
- <p><a href="EX:http://forums.winamp.com/forumdisplay.php?s=&forumid=65"><b>
- Forum</b></a> - Talk with others in the NSIS community</p>
- <p><a href="EX:irc://irc.landoleet.org/nsis"><b>IRC Channel</b></a> -
- Chat with other NSIS users (IRC client required)</p>
- <p><a href="EX:http://sourceforge.net/tracker/?group_id=22049&atid=373085"><b>
- Bug Tracker</b></a> - Check the list of submitted bugs or submit a new one</p>
- <p><br><br></p>
- </td>
- </tr>
-</table>
-<p><img src="images/line.gif" width="598" height="3"></p>
-<div align="right"><a href="EX:http://nsis.sourceforge.net/"><img src="images/site.gif" width="200" height="25"></a></div>
-</body>
-</html> \ No newline at end of file
diff --git a/SConstruct b/SConstruct
index bafa6ed..2c342fd 100755
--- a/SConstruct
+++ b/SConstruct
@@ -1,731 +1,732 @@
-EnsurePythonVersion(1,6)
-
-try:
- EnsureSConsVersion(0,96,93)
-except TypeError: # EnsureSConsVersion in older versions took only two parameters
- print 'SCons 0.96.93 or greater is required, but you have an older version'
- Exit(2)
-
-stubs = [
- 'bzip2',
- 'lzma',
- 'zlib'
-]
-
-plugins = [
- 'AdvSplash',
- 'Banner',
- 'BgImage',
- 'Dialer',
- 'InstallOptions',
- 'LangDLL',
- 'Library/TypeLib',
- 'Math',
- 'nsDialogs',
- 'nsExec',
- 'NSISdl',
- 'Splash',
- 'StartMenu',
- 'System',
- 'UserInfo',
- 'VPatch/Source/Plugin'
-]
-
-utils = [
- 'Library/LibraryLocal',
- 'Library/RegTool',
- 'MakeLangId',
- 'Makensisw',
- 'NSIS Menu',
- 'UIs',
- 'VPatch/Source/GenPat',
- 'zip2exe'
-]
-
-misc = [
- 'Graphics',
- 'Language files',
- 'Modern UI',
- 'Modern UI 2',
- 'VPatch',
- 'ExDLL'
-]
-
-doc = [
- 'COPYING'
-]
-
-######################################################################
-####### Build Environment ###
-######################################################################
-
-path = ARGUMENTS.get('PATH', '')
-toolset = ARGUMENTS.get('TOOLSET', '')
-
-if toolset and path:
- defenv = Environment(ENV = {'PATH' : path}, TOOLS = toolset.split(',') + ['zip'])
-else:
- if path:
- defenv = Environment(ENV = {'PATH' : path})
- if toolset:
- defenv = Environment(TOOLS = toolset.split(',') + ['zip'])
-if not toolset and not path:
- defenv = Environment()
-
-Export('defenv')
-
-######################################################################
-####### Includes ###
-######################################################################
-
-SConscript('SCons/utils.py')
-
-######################################################################
-####### Options ###
-######################################################################
-
-import os
-hhc = 'no'
-if defenv.WhereIs('hhc', os.environ['PATH']):
- hhc = 'yes'
-
-from time import strftime, gmtime
-cvs_version = strftime('%d-%b-%Y.cvs', gmtime())
-
-opts = Options()
-
-# load configuration options
-# it's important this will be done here so NSIS_CONFIG_CONST_DATA_PATH
-# will be available for the next few lines and so `dirs` can be set
-SConscript('SCons/config.py')
-
-opts.Update(defenv)
-Help(opts.GenerateHelpText(defenv))
-
-install_dirs = {
- 'relocatable': {
- 'dest': '',
- 'prefix': '',
- 'conf': '$PREFIX',
- 'bin': '$PREFIX',
- 'data': '$PREFIX',
- 'doc': '$PREFIX',
- 'inc_c': '$PREFIX',
- },
- 'static': {
- 'dest': '',
- 'prefix': '/usr/local',
- 'conf': '$PREFIX/etc',
- 'bin': '$PREFIX/bin',
- 'data': '$PREFIX/share/nsis',
- 'doc': '$PREFIX/share/doc/nsis',
- 'inc_c': '$PREFIX/include/nsis',
- }
-}
-
-if 'NSIS_CONFIG_CONST_DATA_PATH' in defenv['NSIS_CPPDEFINES']:
- dirs = install_dirs['static']
-else:
- dirs = install_dirs['relocatable']
-
-if 'msvc' in defenv['TOOLS'] or 'mstoolkit' in defenv['TOOLS']:
- ignore_tests = 'none'
-else:
- ignore_tests = ','.join(Split("""
-Examples/System/System.nsi
-Examples/LogicLib.nsi
-Examples/StrFunc.nsi
-Examples/TextFunc.nsi
-Examples/TextFuncTest.nsi
-Examples/FileFunc.nsi
-Examples/FileFuncTest.nsi
-Examples/Library.nsi
-Examples/makensis.nsi
-Examples/gfx.nsi
-Examples/nsDialogs/example.nsi
-Examples/nsDialogs/InstallOptions.nsi
-Examples/nsDialogs/welcome.nsi
-"""))
-
-# version
-opts.Add(('VERSION', 'Version of NSIS', cvs_version))
-opts.Add(('VER_MAJOR', 'Major version of NSIS (recommended for dist-installer)', None))
-opts.Add(('VER_MINOR', 'Minor version of NSIS (recommended for dist-installer)', None))
-opts.Add(('VER_REVISION', 'Revision of NSIS (recommended for dist-installer)', None))
-opts.Add(('VER_BUILD', 'Build version of NSIS (recommended for dist-installer)', None))
-# installation
-opts.Add(('PREFIX', 'Installation prefix', dirs['prefix']))
-opts.Add(ListOption('SKIPSTUBS', 'A list of stubs that will not be built', 'none', stubs))
-opts.Add(ListOption('SKIPPLUGINS', 'A list of plug-ins that will not be built', 'none', plugins))
-opts.Add(ListOption('SKIPUTILS', 'A list of utilities that will not be built', 'none', utils))
-opts.Add(ListOption('SKIPMISC', 'A list of plug-ins that will not be built', 'none', misc))
-opts.Add(ListOption('SKIPDOC', 'A list of doc files that will not be built/installed', 'none', doc))
-opts.Add(('SKIPTESTS', 'A comma-separated list of test files that will not be ran', 'none'))
-opts.Add(('IGNORETESTS', 'A comma-separated list of test files that will be ran but ignored', ignore_tests))
-# build tools
-opts.Add(('PATH', 'A colon-separated list of system paths instead of the default - TEMPORARY AND MAY DEPRECATE', None))
-opts.Add(('TOOLSET', 'A comma-separated list of specific tools used for building instead of the default', None))
-opts.Add(BoolOption('MSTOOLKIT', 'Use Microsoft Visual C++ Toolkit', 'no'))
-opts.Add(BoolOption('CHMDOCS', 'Build CHM documentation, requires hhc.exe', hhc))
-opts.Add(PathOption('APPEND_CPPPATH', 'Additional paths to search for include files', None))
-opts.Add(PathOption('APPEND_LIBPATH', 'Additional paths to search for libraries', None))
-opts.Add(('APPEND_CCFLAGS', 'Additional C/C++ compiler flags'))
-opts.Add(('APPEND_LINKFLAGS', 'Additional linker flags'))
-# build options
-opts.Add(BoolOption('DEBUG', 'Build executables with debugging information', 'no'))
-opts.Add(PathOption('CODESIGNER', 'A program used to sign executables', None))
-opts.Add(BoolOption('STRIP', 'Strips executables of any unrequired data such as symbols', 'yes'))
-opts.Add(BoolOption('STRIP_CP', 'Strips cross-platform executables of any unrequired data such as symbols', 'yes'))
-opts.Add(BoolOption('STRIP_W32', 'Strips Win32 executables of any unrequired data such as symbols', 'yes'))
-# path related build options
-opts.Add(('PREFIX_DEST', 'Intermediate installation prefix (extra install time prefix)', dirs['dest']))
-opts.Add(('PREFIX_CONF', 'Path to install nsisconf.nsh to', dirs['conf']))
-opts.Add(('PREFIX_BIN', 'Path to install native binaries to', dirs['bin']))
-opts.Add(('PREFIX_DATA', 'Path to install nsis data to (plugins, includes, stubs, contrib, win32 binaries)', dirs['data']))
-opts.Add(('PREFIX_DOC','Path to install nsis README / INSTALL / TODO files to.', dirs['doc']))
-opts.Add(('PREFIX_INC_C','Path to install nsis C header files to.', dirs['inc_c']))
-
-opts.Update(defenv)
-Help(opts.GenerateHelpText(defenv))
-
-# add prefixes defines
-if 'NSIS_CONFIG_CONST_DATA_PATH' in defenv['NSIS_CPPDEFINES']:
- defenv.Append(NSIS_CPPDEFINES = [('PREFIX_CONF', '"%s"' % defenv.subst('$PREFIX_CONF'))])
- defenv.Append(NSIS_CPPDEFINES = [('PREFIX_DATA', '"%s"' % defenv.subst('$PREFIX_DATA'))])
-
-# write configuration into sconf.h and defines.h
-sconf_h = open(File('#Source/exehead/sconf.h').abspath, 'w')
-sconf_h.write('// This file is automatically generated by SCons\n// DO NOT EDIT THIS FILE\n')
-
-defines_h = open(File('#Source/defines.h').abspath, 'w')
-defines_h.write('// This file is automatically generated by SCons\n// DO NOT EDIT THIS FILE\n')
-
-for i in defenv['NSIS_CPPDEFINES']:
- if type(i) is not str:
- sconf_h.write('#define %s %s\n' % (i[0], i[1]))
- if str(i[1])[0] != '"':
- defines_h.write('definedlist.add("%s", "%s");\n' % (i[0], i[1]))
- else:
- defines_h.write('definedlist.add("%s", %s);\n' % (i[0], i[1]))
- else:
- sconf_h.write('#define %s\n' % (i))
- defines_h.write('definedlist.add("%s");\n' % (i))
-sconf_h.close()
-defines_h.close()
-
-# write version into version.h
-f = open(File('#Source/version.h').abspath, 'w')
-f.write('// This file is automatically generated by SCons\n// DO NOT EDIT THIS FILE\n')
-f.write('#define NSIS_VERSION "v%s"\n' % defenv['VERSION'])
-f.close()
-
-######################################################################
-####### Functions ###
-######################################################################
-
-defenv['ZIPDISTDIR'] = defenv.Dir('#nsis-$VERSION')
-defenv['INSTDISTDIR'] = defenv.Dir('#.instdist')
-defenv['TESTDISTDIR'] = defenv.Dir('#.test')
-defenv['DISTSUFFIX'] = ''
-
-if defenv.has_key('CODESIGNER'):
- defenv['DISTSUFFIX'] = '-signed'
-
-defenv.Execute(Delete('$ZIPDISTDIR'))
-defenv.Execute(Delete('$INSTDISTDIR'))
-defenv.Execute(Delete('$TESTDISTDIR'))
-
-def SafeFile(f):
- from types import StringType
-
- if isinstance(f, StringType):
- return File(f)
-
- return f
-
-def MakeFileList(files):
- from types import ListType, TupleType
-
- if isinstance(files, (ListType, TupleType)):
- return map(SafeFile, files)
-
- return Flatten([SafeFile(files)])
-
-def Distribute(files, names, component, path, subpath, alias, install_alias=None):
- from types import StringType
-
- files = MakeFileList(files)
-
- names = names or map(lambda x: x.name, files)
- if isinstance(names, StringType):
- names = [names]
-
- for d in ('$ZIPDISTDIR', '$INSTDISTDIR', '$TESTDISTDIR'):
- paths = map(lambda file: os.path.join(d, path, subpath, file), names)
- defenv.InstallAs(paths, files)
-
- if (defenv.has_key('PREFIX') and defenv['PREFIX']) or (defenv.has_key('PREFIX_DEST') and defenv['PREFIX_DEST']) :
- prefix = '${PREFIX_DEST}${PREFIX_%s}' % component.upper()
- paths = map(lambda file: os.path.join(prefix, path, subpath, file), names)
- ins = defenv.InstallAs(paths, files)
- else:
- ins = []
-
- if ins:
- defenv.Alias('install', ins)
- defenv.Alias('install-%s' % component, ins)
- if alias:
- defenv.Alias(alias, ins)
- if install_alias:
- defenv.Alias('install-%s' % install_alias, ins)
-
- return ins
-
-def DistributeBin(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'bin', '', path, alias)
-
-def DistributeConf(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'conf', '', path, alias)
-
-def DistributeW32Bin(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'data', 'Bin', path, alias, 'w32bin')
-
-def DistributeStubs(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'data', 'Stubs', path, alias, 'stubs')
-
-def DistributePlugin(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'data', 'Plugins', path, alias, 'plugins')
-
-def DistributeContrib(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'data', 'Contrib', path, alias, 'contrib')
-
-def DistributeMenu(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'data', 'Menu', path, alias, 'menu')
-
-def DistributeInclude(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'data', 'Include', path, alias, 'includes')
-
-def DistributeDoc(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'doc', '', path, alias)
-
-def DistributeDocs(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'doc', 'Docs', path, alias, 'docs')
-
-def DistributeExamples(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'doc', 'Examples', path, alias, 'examples')
-
-def DistributeIncC(files, names=[], path='', alias=None):
- return defenv.Distribute(files, names, 'inc_c', '', path, alias, 'inc-c')
-
-def Sign(targets):
- if defenv.has_key('CODESIGNER'):
- for t in targets:
- a = defenv.Action('$CODESIGNER "%s"' % t.path)
- defenv.AddPostAction(t, a)
-
-def TestScript(scripts):
- defenv.Install('$TESTDISTDIR/Tests', scripts)
-
-defenv.Distribute = Distribute
-defenv.DistributeBin = DistributeBin
-defenv.DistributeConf = DistributeConf
-defenv.DistributeW32Bin = DistributeW32Bin
-defenv.DistributeStubs = DistributeStubs
-defenv.DistributePlugin = DistributePlugin
-defenv.DistributeContrib = DistributeContrib
-defenv.DistributeMenu = DistributeMenu
-defenv.DistributeInclude = DistributeInclude
-defenv.DistributeDoc = DistributeDoc
-defenv.DistributeDocs = DistributeDocs
-defenv.DistributeExamples = DistributeExamples
-defenv.DistributeIncC = DistributeIncC
-defenv.Sign = Sign
-defenv.TestScript = TestScript
-
-######################################################################
-####### Environments ###
-######################################################################
-
-if defenv['DEBUG']:
- defenv.Replace(BUILD_PREFIX = 'build/debug')
-else:
- defenv.Replace(BUILD_PREFIX = 'build/release')
-
-if defenv['MSTOOLKIT']:
- defenv.Tool('mstoolkit', toolpath = ['SCons/Tools'])
-
-defenv.Append(CCFLAGS = Split('$APPEND_CCFLAGS'))
-defenv.Append(LINKFLAGS = Split('$APPEND_LINKFLAGS'))
-defenv.Append(CPPPATH = Split('$APPEND_CPPPATH'))
-defenv.Append(LIBPATH = Split('$APPEND_LIBPATH'))
-
-defenv.Default('$BUILD_PREFIX')
-
-tools = defenv['TOOLS']
-
-envs = []
-
-if 'msvc' in tools or 'mstoolkit' in tools:
- envs = SConscript('SCons/Config/ms')
-elif 'gcc' in tools:
- envs = SConscript('SCons/Config/gnu')
-elif 'hpc++' in tools:
- envs = SConscript('SCons/Config/hpc++')
-else:
- envs = SConscript('SCons/Config/default')
-
-stub_env = envs[0]
-makensis_env = envs[1]
-plugin_env = envs[2]
-util_env = envs[3]
-cp_util_env = envs[4]
-test_env = envs[5]
-
-######################################################################
-####### Distribution ###
-######################################################################
-
-dist_zip = 'nsis-${VERSION}${DISTSUFFIX}.zip'
-zip_target = defenv.Zip(dist_zip, '$ZIPDISTDIR')
-defenv.Alias('dist-zip', zip_target)
-
-AlwaysBuild(defenv.AddPostAction(zip_target, Delete('$ZIPDISTDIR')))
-
-if defenv['PLATFORM'] == 'win32':
- optchar = '/'
-else:
- optchar = '-'
-
-defenv['INSTVER'] = '%sDVERSION=$VERSION' % optchar
-if defenv.has_key('VER_MAJOR') and defenv.has_key('VER_MINOR') \
- and defenv.has_key('VER_REVISION') and defenv.has_key('VER_BUILD'):
- defenv['INSTVER'] += ' %sDVER_MAJOR=$VER_MAJOR' % optchar
- defenv['INSTVER'] += ' %sDVER_MINOR=$VER_MINOR' % optchar
- defenv['INSTVER'] += ' %sDVER_REVISION=$VER_REVISION' % optchar
- defenv['INSTVER'] += ' %sDVER_BUILD=$VER_BUILD' % optchar
-
-inst_env = {}
-inst_env['NSISDIR'] = os.path.abspath(str(defenv['INSTDISTDIR']))
-inst_env['NSISCONFDIR'] = os.path.abspath(str(defenv['INSTDISTDIR']))
-
-installer_target = defenv.Command('nsis-${VERSION}-setup${DISTSUFFIX}.exe',
- '$INSTDISTDIR' + os.sep + 'Examples' + os.sep + 'makensis.nsi',
- '$INSTDISTDIR' + os.sep + 'makensis$PROGSUFFIX ' +
- '%sDOUTFILE=$TARGET.abspath $INSTVER $SOURCE' % optchar,
- ENV = inst_env)
-defenv.Depends(installer_target, '$INSTDISTDIR')
-defenv.Sign(installer_target)
-defenv.Alias('dist-installer', installer_target)
-
-AlwaysBuild(defenv.AddPostAction(installer_target, Delete('$INSTDISTDIR')))
-
-defenv.Alias('dist', ['dist-zip', 'dist-installer'])
-
-######################################################################
-####### Distribute Basics ###
-######################################################################
-
-for d in doc:
- if d in defenv['SKIPDOC']:
- continue
- defenv.DistributeDoc(d)
-
-defenv.DistributeConf('nsisconf.nsh')
-
-######################################################################
-####### Stubs ###
-######################################################################
-
-def BuildStub(compression, solid):
- env = stub_env.Clone()
-
- suffix = ''
- if solid:
- suffix = '_solid'
-
- build_dir = '$BUILD_PREFIX/stub_%s%s' % (compression, suffix)
-
- exports = { 'env' : env, 'compression' : compression, 'solid_compression' : solid }
-
- target = defenv.SConscript(dirs = 'Source/exehead', build_dir = build_dir, duplicate = False, exports = exports)
- env.SideEffect('%s/stub_%s.map' % (build_dir, stub), target)
-
- env.DistributeStubs(target, names=compression+suffix)
-
- defenv.Alias(compression, target)
- defenv.Alias('stubs', target)
-
-for stub in stubs:
- if stub in defenv['SKIPSTUBS']:
- continue
-
- BuildStub(stub, False)
- BuildStub(stub, True)
-
-defenv.DistributeStubs('Source/exehead/uninst.ico',names='uninst')
-
-######################################################################
-####### makensis ###
-######################################################################
-
-build_dir = '$BUILD_PREFIX/makensis'
-exports = { 'env' : makensis_env }
-
-makensis = defenv.SConscript(dirs = 'Source', build_dir = build_dir, duplicate = False, exports = exports)
-
-makensis_env.SideEffect('%s/makensis.map' % build_dir, makensis)
-
-defenv.Alias('makensis', makensis)
-
-ins = defenv.DistributeBin(makensis,alias='install-compiler')
-
-######################################################################
-####### Common Functions ###
-######################################################################
-
-def AddEnvStandardFlags(env, defines, flags, entry, nodeflib):
- if defines:
- env.Append(CPPDEFINES = defines)
- if flags:
- env.Append(CCFLAGS = flags)
-
- if entry:
- env.Append(LINKFLAGS = '${ENTRY_FLAG("%s")}' % entry)
-
- if nodeflib:
- env.Append(LINKFLAGS = '$NODEFLIBS_FLAG') # no default libraries
-
-def AppendRES(env, source, res, resources):
- if res:
- target = MakeFileList(res)[0].name.replace('.rc', '-rc')
- target_res = env.RES(target, res)
- if resources:
- env.Depends(target_res, resources)
- source.append(target_res)
-
-def CleanMap(env, target, target_name):
- env.Clean(target, File(target_name + '.map'))
-
-def DistributeExtras(env, target, examples, docs):
- if examples:
- env.DistributeExamples(examples, path=target)
- if docs:
- env.DistributeDocs(docs, path=target)
-
-######################################################################
-####### Plug-ins ###
-######################################################################
-
-def BuildPlugin(target, source, libs, examples = None, docs = None,
- entry = 'DllMain', res = None, resources = None,
- defines = None, flags = None, nodeflib = True,
- cppused = False):
- env = plugin_env.Clone()
-
- if cppused and env['CPP_REQUIRES_STDLIB']:
- nodeflib = False
-
- AddEnvStandardFlags(env, defines, flags, entry, nodeflib)
-
- AppendRES(env, source, res, resources)
-
- plugin = env.SharedLibrary(target, source, LIBS = libs)
- defenv.Alias(target, plugin)
- defenv.Alias('plugins', plugin)
-
- defenv.Sign(plugin)
-
- CleanMap(env, plugin, target)
-
- for i in plugin:
- if str(i)[-4:].lower() == '.dll':
- plugin = i
- break
- env.DistributePlugin(plugin)
-
- DistributeExtras(env, target, examples, docs)
-
-for plugin in plugins:
- if plugin in defenv['SKIPPLUGINS']:
- continue
-
- path = 'Contrib/' + plugin
- build_dir = '$BUILD_PREFIX/' + plugin
- exports = {'BuildPlugin' : BuildPlugin, 'env' : plugin_env.Clone()}
-
- defenv.SConscript(dirs = path, build_dir = build_dir, duplicate = False, exports = exports)
-
-######################################################################
-####### Utilities ###
-######################################################################
-
-def BuildUtilEnv(defines = None, flags = None, entry = None,
- nodeflib = None, cross_platform = False):
- if not cross_platform:
- env = util_env.Clone()
- else:
- env = cp_util_env.Clone()
-
- AddEnvStandardFlags(env, defines, flags, entry, nodeflib)
-
- return env
-
-def BuildUtil(target, source, libs, entry = None, res = None,
- resources = None, defines = None, flags = None,
- nodeflib = False, file_name = '', path='', contrib = False,
- examples = None, docs = None, cross_platform = False,
- root_util = False):
- env = BuildUtilEnv(defines, flags, entry, nodeflib, cross_platform)
-
- AppendRES(env, source, res, resources)
-
- if file_name != '':
- target = "%s/%s" % (target, file_name)
-
- # make sure the environment suffix fits
- if env['PROGSUFFIX'] not in target:
- if '.' in target:
- env['PROGSUFFIX'] = target[target.rindex('.'):]
-
- util = env.Program(target, source, LIBS = libs)
- defenv.Alias(target, util)
- defenv.Alias('utils', util)
-
- defenv.Sign(util)
-
- CleanMap(env, util, target)
-
- if contrib:
- ins = env.DistributeContrib(util, path=path, alias='install-utils')
- elif cross_platform and not env['PLATFORM'] == 'win32' or root_util and env['PLATFORM'] == 'win32':
- ins = env.DistributeBin(util, path=path, alias='install-utils')
- else:
- ins = env.DistributeW32Bin(util, path=path, alias='install-utils')
-
- DistributeExtras(env, target, examples, docs)
-
- return util
-
-for util in utils:
- if util in defenv['SKIPUTILS']:
- continue
-
- path = 'Contrib/' + util
- build_dir = '$BUILD_PREFIX/' + util
- exports = {'BuildUtil' : BuildUtil, 'BuildUtilEnv' : BuildUtilEnv, 'env' : util_env}
-
- defenv.SConscript(dirs = path, build_dir = build_dir, duplicate = False, exports = exports)
-
-######################################################################
-####### Documentation ###
-######################################################################
-
-halibut = defenv.SConscript(
- dirs = 'Docs/src/bin/halibut',
- build_dir = '$BUILD_PREFIX/halibut',
- duplicate = False,
- exports = {'env' : defenv.Clone()}
-)
-
-if defenv['CHMDOCS']:
- defenv.SConscript(
- dirs = 'Docs/src',
- build_dir = '$BUILD_PREFIX/Docs/chm',
- duplicate = False,
- exports = {'halibut' : halibut, 'env' : defenv.Clone(), 'build_chm' : True}
- )
-else:
- defenv.SConscript(
- dirs = 'Docs/src',
- build_dir = '$BUILD_PREFIX/Docs/html',
- duplicate = False,
- exports = {'halibut' : halibut, 'env' : defenv.Clone(), 'build_chm' : False}
- )
-
-######################################################################
-####### Examples ###
-######################################################################
-
-defenv.SConscript(
- dirs = 'Examples',
- exports = {'env': defenv.Clone()}
-)
-
-######################################################################
-####### Includes ###
-######################################################################
-
-defenv.SConscript(
- dirs = 'Include',
- exports = {'env': defenv.Clone()}
-)
-
-######################################################################
-####### Miscellaneous ###
-######################################################################
-
-for i in misc:
- if i in defenv['SKIPMISC']:
- continue
-
- defenv.SConscript(dirs = 'Contrib/%s' % i)
-
-######################################################################
-####### Tests ###
-######################################################################
-
-# test code
-
-build_dir = '$BUILD_PREFIX/tests'
-exports = {'env' : test_env.Clone()}
-
-defenv.SConscript(
- dirs = 'Source/Tests',
- duplicate = False,
- exports = exports,
- build_dir = build_dir
-)
-
-defenv.Ignore('$BUILD_PREFIX', '$BUILD_PREFIX/tests')
-
-# test scripts
-
-test_scripts_env = defenv.Clone(ENV = os.environ) # env needed for some scripts
-test_scripts_env['ENV']['NSISDIR'] = os.path.abspath(str(defenv['TESTDISTDIR']))
-test_scripts_env['ENV']['NSISCONFDIR'] = os.path.abspath(str(defenv['TESTDISTDIR']))
-
-def test_scripts(target, source, env):
- from os import walk, sep
-
- instdir = source[0].path
-
- makensis = instdir + sep + 'makensis'
-
- tdlen = len(env.subst('$TESTDISTDIR'))
- skipped_tests = env['SKIPTESTS'].split(',')
- ignored_tests = env['IGNORETESTS'].split(',')
-
- for root, dirs, files in walk(instdir):
- for file in files:
- if file[-4:] == '.nsi':
- nsi = root + sep + file
- nsif = nsi[tdlen + 1:]
-
- if nsif in skipped_tests:
- continue
-
- if nsif in ignored_tests:
- cmd = env.Command(None, nsi, '-%s $SOURCE' % makensis)
- else:
- cmd = env.Command(None, nsi, '%s $SOURCE' % makensis)
- AlwaysBuild(cmd)
- env.Alias('test-scripts', cmd)
-
- return None
-
-test = test_scripts_env.Command('test-scripts.log', '$TESTDISTDIR', test_scripts)
-test_scripts_env.Alias('test-scripts', test)
-
-# test all
-
-defenv.Alias('test', ['test-code', 'test-scripts'])
+EnsurePythonVersion(1,6)
+
+try:
+ EnsureSConsVersion(0,96,93)
+except TypeError: # EnsureSConsVersion in older versions took only two parameters
+ print 'SCons 0.96.93 or greater is required, but you have an older version'
+ Exit(2)
+
+stubs = [
+ 'bzip2',
+ 'lzma',
+ 'zlib'
+]
+
+plugins = [
+ 'AdvSplash',
+ 'Banner',
+ 'BgImage',
+ 'Dialer',
+ 'InstallOptions',
+ 'LangDLL',
+ 'Library/TypeLib',
+ 'Math',
+ 'nsDialogs',
+ 'nsExec',
+ 'NSISdl',
+ 'Splash',
+ 'StartMenu',
+ 'System',
+ 'UserInfo',
+ 'VPatch/Source/Plugin'
+]
+
+utils = [
+ 'Library/LibraryLocal',
+ 'Library/RegTool',
+ 'MakeLangId',
+ 'Makensisw',
+ 'NSIS Menu',
+ 'UIs',
+ 'VPatch/Source/GenPat',
+ 'zip2exe'
+]
+
+misc = [
+ 'Graphics',
+ 'Language files',
+ 'MultiUser',
+ 'Modern UI',
+ 'Modern UI 2',
+ 'VPatch',
+ 'ExDLL'
+]
+
+doc = [
+ 'COPYING'
+]
+
+######################################################################
+####### Build Environment ###
+######################################################################
+
+path = ARGUMENTS.get('PATH', '')
+toolset = ARGUMENTS.get('TOOLSET', '')
+
+if toolset and path:
+ defenv = Environment(ENV = {'PATH' : path}, TOOLS = toolset.split(',') + ['zip'])
+else:
+ if path:
+ defenv = Environment(ENV = {'PATH' : path})
+ if toolset:
+ defenv = Environment(TOOLS = toolset.split(',') + ['zip'])
+if not toolset and not path:
+ defenv = Environment()
+
+Export('defenv')
+
+######################################################################
+####### Includes ###
+######################################################################
+
+SConscript('SCons/utils.py')
+
+######################################################################
+####### Options ###
+######################################################################
+
+import os
+hhc = 'no'
+if defenv.WhereIs('hhc', os.environ['PATH']):
+ hhc = 'yes'
+
+from time import strftime, gmtime
+cvs_version = strftime('%d-%b-%Y.cvs', gmtime())
+
+opts = Options()
+
+# load configuration options
+# it's important this will be done here so NSIS_CONFIG_CONST_DATA_PATH
+# will be available for the next few lines and so `dirs` can be set
+SConscript('SCons/config.py')
+
+opts.Update(defenv)
+Help(opts.GenerateHelpText(defenv))
+
+install_dirs = {
+ 'relocatable': {
+ 'dest': '',
+ 'prefix': '',
+ 'conf': '$PREFIX',
+ 'bin': '$PREFIX',
+ 'data': '$PREFIX',
+ 'doc': '$PREFIX',
+ 'inc_c': '$PREFIX',
+ },
+ 'static': {
+ 'dest': '',
+ 'prefix': '/usr/local',
+ 'conf': '$PREFIX/etc',
+ 'bin': '$PREFIX/bin',
+ 'data': '$PREFIX/share/nsis',
+ 'doc': '$PREFIX/share/doc/nsis',
+ 'inc_c': '$PREFIX/include/nsis',
+ }
+}
+
+if 'NSIS_CONFIG_CONST_DATA_PATH' in defenv['NSIS_CPPDEFINES']:
+ dirs = install_dirs['static']
+else:
+ dirs = install_dirs['relocatable']
+
+if 'msvc' in defenv['TOOLS'] or 'mstoolkit' in defenv['TOOLS']:
+ ignore_tests = 'none'
+else:
+ ignore_tests = ','.join(Split("""
+Examples/System/System.nsi
+Examples/LogicLib.nsi
+Examples/StrFunc.nsi
+Examples/TextFunc.nsi
+Examples/TextFuncTest.nsi
+Examples/FileFunc.nsi
+Examples/FileFuncTest.nsi
+Examples/Library.nsi
+Examples/makensis.nsi
+Examples/gfx.nsi
+Examples/nsDialogs/example.nsi
+Examples/nsDialogs/InstallOptions.nsi
+Examples/nsDialogs/welcome.nsi
+"""))
+
+# version
+opts.Add(('VERSION', 'Version of NSIS', cvs_version))
+opts.Add(('VER_MAJOR', 'Major version of NSIS (recommended for dist-installer)', None))
+opts.Add(('VER_MINOR', 'Minor version of NSIS (recommended for dist-installer)', None))
+opts.Add(('VER_REVISION', 'Revision of NSIS (recommended for dist-installer)', None))
+opts.Add(('VER_BUILD', 'Build version of NSIS (recommended for dist-installer)', None))
+# installation
+opts.Add(('PREFIX', 'Installation prefix', dirs['prefix']))
+opts.Add(ListOption('SKIPSTUBS', 'A list of stubs that will not be built', 'none', stubs))
+opts.Add(ListOption('SKIPPLUGINS', 'A list of plug-ins that will not be built', 'none', plugins))
+opts.Add(ListOption('SKIPUTILS', 'A list of utilities that will not be built', 'none', utils))
+opts.Add(ListOption('SKIPMISC', 'A list of plug-ins that will not be built', 'none', misc))
+opts.Add(ListOption('SKIPDOC', 'A list of doc files that will not be built/installed', 'none', doc))
+opts.Add(('SKIPTESTS', 'A comma-separated list of test files that will not be ran', 'none'))
+opts.Add(('IGNORETESTS', 'A comma-separated list of test files that will be ran but ignored', ignore_tests))
+# build tools
+opts.Add(('PATH', 'A colon-separated list of system paths instead of the default - TEMPORARY AND MAY DEPRECATE', None))
+opts.Add(('TOOLSET', 'A comma-separated list of specific tools used for building instead of the default', None))
+opts.Add(BoolOption('MSTOOLKIT', 'Use Microsoft Visual C++ Toolkit', 'no'))
+opts.Add(BoolOption('CHMDOCS', 'Build CHM documentation, requires hhc.exe', hhc))
+opts.Add(PathOption('APPEND_CPPPATH', 'Additional paths to search for include files', None))
+opts.Add(PathOption('APPEND_LIBPATH', 'Additional paths to search for libraries', None))
+opts.Add(('APPEND_CCFLAGS', 'Additional C/C++ compiler flags'))
+opts.Add(('APPEND_LINKFLAGS', 'Additional linker flags'))
+# build options
+opts.Add(BoolOption('DEBUG', 'Build executables with debugging information', 'no'))
+opts.Add(PathOption('CODESIGNER', 'A program used to sign executables', None))
+opts.Add(BoolOption('STRIP', 'Strips executables of any unrequired data such as symbols', 'yes'))
+opts.Add(BoolOption('STRIP_CP', 'Strips cross-platform executables of any unrequired data such as symbols', 'yes'))
+opts.Add(BoolOption('STRIP_W32', 'Strips Win32 executables of any unrequired data such as symbols', 'yes'))
+# path related build options
+opts.Add(('PREFIX_DEST', 'Intermediate installation prefix (extra install time prefix)', dirs['dest']))
+opts.Add(('PREFIX_CONF', 'Path to install nsisconf.nsh to', dirs['conf']))
+opts.Add(('PREFIX_BIN', 'Path to install native binaries to', dirs['bin']))
+opts.Add(('PREFIX_DATA', 'Path to install nsis data to (plugins, includes, stubs, contrib, win32 binaries)', dirs['data']))
+opts.Add(('PREFIX_DOC','Path to install nsis README / INSTALL / TODO files to.', dirs['doc']))
+opts.Add(('PREFIX_INC_C','Path to install nsis C header files to.', dirs['inc_c']))
+
+opts.Update(defenv)
+Help(opts.GenerateHelpText(defenv))
+
+# add prefixes defines
+if 'NSIS_CONFIG_CONST_DATA_PATH' in defenv['NSIS_CPPDEFINES']:
+ defenv.Append(NSIS_CPPDEFINES = [('PREFIX_CONF', '"%s"' % defenv.subst('$PREFIX_CONF'))])
+ defenv.Append(NSIS_CPPDEFINES = [('PREFIX_DATA', '"%s"' % defenv.subst('$PREFIX_DATA'))])
+
+# write configuration into sconf.h and defines.h
+sconf_h = open(File('#Source/exehead/sconf.h').abspath, 'w')
+sconf_h.write('// This file is automatically generated by SCons\n// DO NOT EDIT THIS FILE\n')
+
+defines_h = open(File('#Source/defines.h').abspath, 'w')
+defines_h.write('// This file is automatically generated by SCons\n// DO NOT EDIT THIS FILE\n')
+
+for i in defenv['NSIS_CPPDEFINES']:
+ if type(i) is not str:
+ sconf_h.write('#define %s %s\n' % (i[0], i[1]))
+ if str(i[1])[0] != '"':
+ defines_h.write('definedlist.add("%s", "%s");\n' % (i[0], i[1]))
+ else:
+ defines_h.write('definedlist.add("%s", %s);\n' % (i[0], i[1]))
+ else:
+ sconf_h.write('#define %s\n' % (i))
+ defines_h.write('definedlist.add("%s");\n' % (i))
+sconf_h.close()
+defines_h.close()
+
+# write version into version.h
+f = open(File('#Source/version.h').abspath, 'w')
+f.write('// This file is automatically generated by SCons\n// DO NOT EDIT THIS FILE\n')
+f.write('#define NSIS_VERSION "v%s"\n' % defenv['VERSION'])
+f.close()
+
+######################################################################
+####### Functions ###
+######################################################################
+
+defenv['ZIPDISTDIR'] = defenv.Dir('#nsis-$VERSION')
+defenv['INSTDISTDIR'] = defenv.Dir('#.instdist')
+defenv['TESTDISTDIR'] = defenv.Dir('#.test')
+defenv['DISTSUFFIX'] = ''
+
+if defenv.has_key('CODESIGNER'):
+ defenv['DISTSUFFIX'] = '-signed'
+
+defenv.Execute(Delete('$ZIPDISTDIR'))
+defenv.Execute(Delete('$INSTDISTDIR'))
+defenv.Execute(Delete('$TESTDISTDIR'))
+
+def SafeFile(f):
+ from types import StringType
+
+ if isinstance(f, StringType):
+ return File(f)
+
+ return f
+
+def MakeFileList(files):
+ from types import ListType, TupleType
+
+ if isinstance(files, (ListType, TupleType)):
+ return map(SafeFile, files)
+
+ return Flatten([SafeFile(files)])
+
+def Distribute(files, names, component, path, subpath, alias, install_alias=None):
+ from types import StringType
+
+ files = MakeFileList(files)
+
+ names = names or map(lambda x: x.name, files)
+ if isinstance(names, StringType):
+ names = [names]
+
+ for d in ('$ZIPDISTDIR', '$INSTDISTDIR', '$TESTDISTDIR'):
+ paths = map(lambda file: os.path.join(d, path, subpath, file), names)
+ defenv.InstallAs(paths, files)
+
+ if (defenv.has_key('PREFIX') and defenv['PREFIX']) or (defenv.has_key('PREFIX_DEST') and defenv['PREFIX_DEST']) :
+ prefix = '${PREFIX_DEST}${PREFIX_%s}' % component.upper()
+ paths = map(lambda file: os.path.join(prefix, path, subpath, file), names)
+ ins = defenv.InstallAs(paths, files)
+ else:
+ ins = []
+
+ if ins:
+ defenv.Alias('install', ins)
+ defenv.Alias('install-%s' % component, ins)
+ if alias:
+ defenv.Alias(alias, ins)
+ if install_alias:
+ defenv.Alias('install-%s' % install_alias, ins)
+
+ return ins
+
+def DistributeBin(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'bin', '', path, alias)
+
+def DistributeConf(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'conf', '', path, alias)
+
+def DistributeW32Bin(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Bin', path, alias, 'w32bin')
+
+def DistributeStubs(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Stubs', path, alias, 'stubs')
+
+def DistributePlugin(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Plugins', path, alias, 'plugins')
+
+def DistributeContrib(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Contrib', path, alias, 'contrib')
+
+def DistributeMenu(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Menu', path, alias, 'menu')
+
+def DistributeInclude(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Include', path, alias, 'includes')
+
+def DistributeDoc(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'doc', '', path, alias)
+
+def DistributeDocs(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'doc', 'Docs', path, alias, 'docs')
+
+def DistributeExamples(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'doc', 'Examples', path, alias, 'examples')
+
+def DistributeIncC(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'inc_c', '', path, alias, 'inc-c')
+
+def Sign(targets):
+ if defenv.has_key('CODESIGNER'):
+ for t in targets:
+ a = defenv.Action('$CODESIGNER "%s"' % t.path)
+ defenv.AddPostAction(t, a)
+
+def TestScript(scripts):
+ defenv.Install('$TESTDISTDIR/Tests', scripts)
+
+defenv.Distribute = Distribute
+defenv.DistributeBin = DistributeBin
+defenv.DistributeConf = DistributeConf
+defenv.DistributeW32Bin = DistributeW32Bin
+defenv.DistributeStubs = DistributeStubs
+defenv.DistributePlugin = DistributePlugin
+defenv.DistributeContrib = DistributeContrib
+defenv.DistributeMenu = DistributeMenu
+defenv.DistributeInclude = DistributeInclude
+defenv.DistributeDoc = DistributeDoc
+defenv.DistributeDocs = DistributeDocs
+defenv.DistributeExamples = DistributeExamples
+defenv.DistributeIncC = DistributeIncC
+defenv.Sign = Sign
+defenv.TestScript = TestScript
+
+######################################################################
+####### Environments ###
+######################################################################
+
+if defenv['DEBUG']:
+ defenv.Replace(BUILD_PREFIX = 'build/debug')
+else:
+ defenv.Replace(BUILD_PREFIX = 'build/release')
+
+if defenv['MSTOOLKIT']:
+ defenv.Tool('mstoolkit', toolpath = ['SCons/Tools'])
+
+defenv.Append(CCFLAGS = Split('$APPEND_CCFLAGS'))
+defenv.Append(LINKFLAGS = Split('$APPEND_LINKFLAGS'))
+defenv.Append(CPPPATH = Split('$APPEND_CPPPATH'))
+defenv.Append(LIBPATH = Split('$APPEND_LIBPATH'))
+
+defenv.Default('$BUILD_PREFIX')
+
+tools = defenv['TOOLS']
+
+envs = []
+
+if 'msvc' in tools or 'mstoolkit' in tools:
+ envs = SConscript('SCons/Config/ms')
+elif 'gcc' in tools:
+ envs = SConscript('SCons/Config/gnu')
+elif 'hpc++' in tools:
+ envs = SConscript('SCons/Config/hpc++')
+else:
+ envs = SConscript('SCons/Config/default')
+
+stub_env = envs[0]
+makensis_env = envs[1]
+plugin_env = envs[2]
+util_env = envs[3]
+cp_util_env = envs[4]
+test_env = envs[5]
+
+######################################################################
+####### Distribution ###
+######################################################################
+
+dist_zip = 'nsis-${VERSION}${DISTSUFFIX}.zip'
+zip_target = defenv.Zip(dist_zip, '$ZIPDISTDIR')
+defenv.Alias('dist-zip', zip_target)
+
+AlwaysBuild(defenv.AddPostAction(zip_target, Delete('$ZIPDISTDIR')))
+
+if defenv['PLATFORM'] == 'win32':
+ optchar = '/'
+else:
+ optchar = '-'
+
+defenv['INSTVER'] = '%sDVERSION=$VERSION' % optchar
+if defenv.has_key('VER_MAJOR') and defenv.has_key('VER_MINOR') \
+ and defenv.has_key('VER_REVISION') and defenv.has_key('VER_BUILD'):
+ defenv['INSTVER'] += ' %sDVER_MAJOR=$VER_MAJOR' % optchar
+ defenv['INSTVER'] += ' %sDVER_MINOR=$VER_MINOR' % optchar
+ defenv['INSTVER'] += ' %sDVER_REVISION=$VER_REVISION' % optchar
+ defenv['INSTVER'] += ' %sDVER_BUILD=$VER_BUILD' % optchar
+
+inst_env = {}
+inst_env['NSISDIR'] = os.path.abspath(str(defenv['INSTDISTDIR']))
+inst_env['NSISCONFDIR'] = os.path.abspath(str(defenv['INSTDISTDIR']))
+
+installer_target = defenv.Command('nsis-${VERSION}-setup${DISTSUFFIX}.exe',
+ '$INSTDISTDIR' + os.sep + 'Examples' + os.sep + 'makensis.nsi',
+ '$INSTDISTDIR' + os.sep + 'makensis$PROGSUFFIX ' +
+ '%sDOUTFILE=$TARGET.abspath $INSTVER $SOURCE' % optchar,
+ ENV = inst_env)
+defenv.Depends(installer_target, '$INSTDISTDIR')
+defenv.Sign(installer_target)
+defenv.Alias('dist-installer', installer_target)
+
+AlwaysBuild(defenv.AddPostAction(installer_target, Delete('$INSTDISTDIR')))
+
+defenv.Alias('dist', ['dist-zip', 'dist-installer'])
+
+######################################################################
+####### Distribute Basics ###
+######################################################################
+
+for d in doc:
+ if d in defenv['SKIPDOC']:
+ continue
+ defenv.DistributeDoc(d)
+
+defenv.DistributeConf('nsisconf.nsh')
+
+######################################################################
+####### Stubs ###
+######################################################################
+
+def BuildStub(compression, solid):
+ env = stub_env.Clone()
+
+ suffix = ''
+ if solid:
+ suffix = '_solid'
+
+ build_dir = '$BUILD_PREFIX/stub_%s%s' % (compression, suffix)
+
+ exports = { 'env' : env, 'compression' : compression, 'solid_compression' : solid }
+
+ target = defenv.SConscript(dirs = 'Source/exehead', build_dir = build_dir, duplicate = False, exports = exports)
+ env.SideEffect('%s/stub_%s.map' % (build_dir, stub), target)
+
+ env.DistributeStubs(target, names=compression+suffix)
+
+ defenv.Alias(compression, target)
+ defenv.Alias('stubs', target)
+
+for stub in stubs:
+ if stub in defenv['SKIPSTUBS']:
+ continue
+
+ BuildStub(stub, False)
+ BuildStub(stub, True)
+
+defenv.DistributeStubs('Source/exehead/uninst.ico',names='uninst')
+
+######################################################################
+####### makensis ###
+######################################################################
+
+build_dir = '$BUILD_PREFIX/makensis'
+exports = { 'env' : makensis_env }
+
+makensis = defenv.SConscript(dirs = 'Source', build_dir = build_dir, duplicate = False, exports = exports)
+
+makensis_env.SideEffect('%s/makensis.map' % build_dir, makensis)
+
+defenv.Alias('makensis', makensis)
+
+ins = defenv.DistributeBin(makensis,alias='install-compiler')
+
+######################################################################
+####### Common Functions ###
+######################################################################
+
+def AddEnvStandardFlags(env, defines, flags, entry, nodeflib):
+ if defines:
+ env.Append(CPPDEFINES = defines)
+ if flags:
+ env.Append(CCFLAGS = flags)
+
+ if entry:
+ env.Append(LINKFLAGS = '${ENTRY_FLAG("%s")}' % entry)
+
+ if nodeflib:
+ env.Append(LINKFLAGS = '$NODEFLIBS_FLAG') # no default libraries
+
+def AppendRES(env, source, res, resources):
+ if res:
+ target = MakeFileList(res)[0].name.replace('.rc', '-rc')
+ target_res = env.RES(target, res)
+ if resources:
+ env.Depends(target_res, resources)
+ source.append(target_res)
+
+def CleanMap(env, target, target_name):
+ env.Clean(target, File(target_name + '.map'))
+
+def DistributeExtras(env, target, examples, docs):
+ if examples:
+ env.DistributeExamples(examples, path=target)
+ if docs:
+ env.DistributeDocs(docs, path=target)
+
+######################################################################
+####### Plug-ins ###
+######################################################################
+
+def BuildPlugin(target, source, libs, examples = None, docs = None,
+ entry = 'DllMain', res = None, resources = None,
+ defines = None, flags = None, nodeflib = True,
+ cppused = False):
+ env = plugin_env.Clone()
+
+ if cppused and env['CPP_REQUIRES_STDLIB']:
+ nodeflib = False
+
+ AddEnvStandardFlags(env, defines, flags, entry, nodeflib)
+
+ AppendRES(env, source, res, resources)
+
+ plugin = env.SharedLibrary(target, source, LIBS = libs)
+ defenv.Alias(target, plugin)
+ defenv.Alias('plugins', plugin)
+
+ defenv.Sign(plugin)
+
+ CleanMap(env, plugin, target)
+
+ for i in plugin:
+ if str(i)[-4:].lower() == '.dll':
+ plugin = i
+ break
+ env.DistributePlugin(plugin)
+
+ DistributeExtras(env, target, examples, docs)
+
+for plugin in plugins:
+ if plugin in defenv['SKIPPLUGINS']:
+ continue
+
+ path = 'Contrib/' + plugin
+ build_dir = '$BUILD_PREFIX/' + plugin
+ exports = {'BuildPlugin' : BuildPlugin, 'env' : plugin_env.Clone()}
+
+ defenv.SConscript(dirs = path, build_dir = build_dir, duplicate = False, exports = exports)
+
+######################################################################
+####### Utilities ###
+######################################################################
+
+def BuildUtilEnv(defines = None, flags = None, entry = None,
+ nodeflib = None, cross_platform = False):
+ if not cross_platform:
+ env = util_env.Clone()
+ else:
+ env = cp_util_env.Clone()
+
+ AddEnvStandardFlags(env, defines, flags, entry, nodeflib)
+
+ return env
+
+def BuildUtil(target, source, libs, entry = None, res = None,
+ resources = None, defines = None, flags = None,
+ nodeflib = False, file_name = '', path='', contrib = False,
+ examples = None, docs = None, cross_platform = False,
+ root_util = False):
+ env = BuildUtilEnv(defines, flags, entry, nodeflib, cross_platform)
+
+ AppendRES(env, source, res, resources)
+
+ if file_name != '':
+ target = "%s/%s" % (target, file_name)
+
+ # make sure the environment suffix fits
+ if env['PROGSUFFIX'] not in target:
+ if '.' in target:
+ env['PROGSUFFIX'] = target[target.rindex('.'):]
+
+ util = env.Program(target, source, LIBS = libs)
+ defenv.Alias(target, util)
+ defenv.Alias('utils', util)
+
+ defenv.Sign(util)
+
+ CleanMap(env, util, target)
+
+ if contrib:
+ ins = env.DistributeContrib(util, path=path, alias='install-utils')
+ elif cross_platform and not env['PLATFORM'] == 'win32' or root_util and env['PLATFORM'] == 'win32':
+ ins = env.DistributeBin(util, path=path, alias='install-utils')
+ else:
+ ins = env.DistributeW32Bin(util, path=path, alias='install-utils')
+
+ DistributeExtras(env, target, examples, docs)
+
+ return util
+
+for util in utils:
+ if util in defenv['SKIPUTILS']:
+ continue
+
+ path = 'Contrib/' + util
+ build_dir = '$BUILD_PREFIX/' + util
+ exports = {'BuildUtil' : BuildUtil, 'BuildUtilEnv' : BuildUtilEnv, 'env' : util_env}
+
+ defenv.SConscript(dirs = path, build_dir = build_dir, duplicate = False, exports = exports)
+
+######################################################################
+####### Documentation ###
+######################################################################
+
+halibut = defenv.SConscript(
+ dirs = 'Docs/src/bin/halibut',
+ build_dir = '$BUILD_PREFIX/halibut',
+ duplicate = False,
+ exports = {'env' : defenv.Clone()}
+)
+
+if defenv['CHMDOCS']:
+ defenv.SConscript(
+ dirs = 'Docs/src',
+ build_dir = '$BUILD_PREFIX/Docs/chm',
+ duplicate = False,
+ exports = {'halibut' : halibut, 'env' : defenv.Clone(), 'build_chm' : True}
+ )
+else:
+ defenv.SConscript(
+ dirs = 'Docs/src',
+ build_dir = '$BUILD_PREFIX/Docs/html',
+ duplicate = False,
+ exports = {'halibut' : halibut, 'env' : defenv.Clone(), 'build_chm' : False}
+ )
+
+######################################################################
+####### Examples ###
+######################################################################
+
+defenv.SConscript(
+ dirs = 'Examples',
+ exports = {'env': defenv.Clone()}
+)
+
+######################################################################
+####### Includes ###
+######################################################################
+
+defenv.SConscript(
+ dirs = 'Include',
+ exports = {'env': defenv.Clone()}
+)
+
+######################################################################
+####### Miscellaneous ###
+######################################################################
+
+for i in misc:
+ if i in defenv['SKIPMISC']:
+ continue
+
+ defenv.SConscript(dirs = 'Contrib/%s' % i)
+
+######################################################################
+####### Tests ###
+######################################################################
+
+# test code
+
+build_dir = '$BUILD_PREFIX/tests'
+exports = {'env' : test_env.Clone()}
+
+defenv.SConscript(
+ dirs = 'Source/Tests',
+ duplicate = False,
+ exports = exports,
+ build_dir = build_dir
+)
+
+defenv.Ignore('$BUILD_PREFIX', '$BUILD_PREFIX/tests')
+
+# test scripts
+
+test_scripts_env = defenv.Clone(ENV = os.environ) # env needed for some scripts
+test_scripts_env['ENV']['NSISDIR'] = os.path.abspath(str(defenv['TESTDISTDIR']))
+test_scripts_env['ENV']['NSISCONFDIR'] = os.path.abspath(str(defenv['TESTDISTDIR']))
+
+def test_scripts(target, source, env):
+ from os import walk, sep
+
+ instdir = source[0].path
+
+ makensis = instdir + sep + 'makensis'
+
+ tdlen = len(env.subst('$TESTDISTDIR'))
+ skipped_tests = env['SKIPTESTS'].split(',')
+ ignored_tests = env['IGNORETESTS'].split(',')
+
+ for root, dirs, files in walk(instdir):
+ for file in files:
+ if file[-4:] == '.nsi':
+ nsi = root + sep + file
+ nsif = nsi[tdlen + 1:]
+
+ if nsif in skipped_tests:
+ continue
+
+ if nsif in ignored_tests:
+ cmd = env.Command(None, nsi, '-%s $SOURCE' % makensis)
+ else:
+ cmd = env.Command(None, nsi, '%s $SOURCE' % makensis)
+ AlwaysBuild(cmd)
+ env.Alias('test-scripts', cmd)
+
+ return None
+
+test = test_scripts_env.Command('test-scripts.log', '$TESTDISTDIR', test_scripts)
+test_scripts_env.Alias('test-scripts', test)
+
+# test all
+
+defenv.Alias('test', ['test-code', 'test-scripts'])
diff --git a/Scripts/release.py b/Scripts/release.py
index 2387441..1601e37 100755
--- a/Scripts/release.py
+++ b/Scripts/release.py
@@ -2,6 +2,7 @@
requires Python Image Library - http://www.pythonware.com/products/pil/
requires grep and diff - http://www.mingw.org/msys.shtml
requires command line svn - http://subversion.tigris.org/
+requires pysvn - http://pysvn.tigris.org/
example release.cfg:
=========================
@@ -59,6 +60,7 @@ import Image, ImageFont, ImageDraw
from ConfigParser import ConfigParser
from ftplib import FTP
import time
+import pysvn
### read config
@@ -156,6 +158,45 @@ def RunTests():
'tests failed - see test.log for details'
)
+def TestSubversionEOL():
+ print 'ensuring EOL...'
+
+ from os import walk
+ from os.path import join
+ from os.path import splitext
+
+ eoldict = {
+ '.nsh' : 'native',
+ '.nsi' : 'native',
+ '.txt' : 'native',
+ '.ini' : 'CRLF'
+ }
+
+ exceptions = ['newfile.txt', 'oldfile.txt']
+
+ svn = pysvn.Client()
+
+ for root, dirs, files in walk('..'):
+ if '.svn' not in dirs:
+ continue
+
+ def versioned(f):
+ s = svn.status(join(root, f))[0].text_status
+ return s != pysvn.wc_status_kind.unversioned
+
+ svn_files = filter(versioned, files)
+ svn_files = filter(lambda x: x not in exceptions, svn_files)
+
+ for f in svn_files:
+ ext = splitext(f)[1]
+ if ext in eoldict.keys():
+ eol = eoldict[ext]
+ s = svn.propget('svn:eol-style', join(root, f)).values()
+ if not s or s[0] != eol:
+ print '*** %s has bad eol-style' % f
+ log('*** %s has bad eol-style' % f)
+ exit()
+
def CreateMenuImage():
print 'creating images...'
@@ -392,6 +433,7 @@ def CloseLog():
Confirm()
StartLog()
RunTests()
+TestSubversionEOL()
CreateMenuImage()
CommitMenuImage()
TestInstaller()
diff --git a/Source/7zip/LZMADecode.c b/Source/7zip/LZMADecode.c
index 8b8fe0a..2f9df47 100755
--- a/Source/7zip/LZMADecode.c
+++ b/Source/7zip/LZMADecode.c
@@ -4,7 +4,7 @@
* This file is a part of LZMA compression module for NSIS.
*
* Original LZMA SDK Copyright (C) 1999-2006 Igor Pavlov
- * Modifications Copyright (C) 2003-2007 Amir Szekely <kichik@netvision.net.il>
+ * Modifications Copyright (C) 2003-2008 Amir Szekely <kichik@netvision.net.il>
*
* Licensed under the Common Public License version 1.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/7zip/LZMADecode.h b/Source/7zip/LZMADecode.h
index fd87af7..1445c0e 100755
--- a/Source/7zip/LZMADecode.h
+++ b/Source/7zip/LZMADecode.h
@@ -4,7 +4,7 @@
* This file is a part of LZMA compression module for NSIS.
*
* Original LZMA SDK Copyright (C) 1999-2006 Igor Pavlov
- * Modifications Copyright (C) 2003-2007 Amir Szekely <kichik@netvision.net.il>
+ * Modifications Copyright (C) 2003-2008 Amir Szekely <kichik@netvision.net.il>
*
* Licensed under the Common Public License version 1.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/DialogTemplate.cpp b/Source/DialogTemplate.cpp
index 0ece79d..109a1d7 100755
--- a/Source/DialogTemplate.cpp
+++ b/Source/DialogTemplate.cpp
@@ -435,6 +435,7 @@ void CDialogTemplate::CTrimToString(WORD id, char *str, int margins) {
void CDialogTemplate::ConvertToRTL() {
for (unsigned int i = 0; i < m_vItems.size(); i++) {
bool addExStyle = false;
+ bool addExLeftScrollbar = true;
char *szClass;
if (IS_INTRESOURCE(m_vItems[i]->szClass))
@@ -480,14 +481,22 @@ void CDialogTemplate::ConvertToRTL() {
}
else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && !stricmp(szClass, "SysTreeView32")) {
m_vItems[i]->dwStyle |= TVS_RTLREADING;
+ m_vItems[i]->dwExtStyle |= WS_EX_LAYOUTRTL;
addExStyle = true;
+ addExLeftScrollbar = false;
+ }
+ else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && !stricmp(szClass, "SysListView32")) {
+ m_vItems[i]->dwExtStyle |= WS_EX_LAYOUTRTL;
+ addExLeftScrollbar = false;
}
else addExStyle = true;
if (addExStyle)
m_vItems[i]->dwExtStyle |= WS_EX_RIGHT;
+ if (addExLeftScrollbar)
+ m_vItems[i]->dwExtStyle |= WS_EX_LEFTSCROLLBAR;
- m_vItems[i]->dwExtStyle |= WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR;
+ m_vItems[i]->dwExtStyle |= WS_EX_RTLREADING;
m_vItems[i]->sX = m_sWidth - m_vItems[i]->sWidth - m_vItems[i]->sX;
diff --git a/Source/Platform.h b/Source/Platform.h
index 98ef2cf..c64435a 100755
--- a/Source/Platform.h
+++ b/Source/Platform.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -521,6 +521,7 @@ typedef DWORDLONG ULONGLONG,*PULONGLONG;
# define WS_EX_RIGHTSCROLLBAR 0
# define WS_EX_RTLREADING 0x2000
# define WS_EX_LEFTSCROLLBAR 0x4000
+# define WS_EX_LAYOUTRTL 0x00400000
# define TVS_RTLREADING 64
diff --git a/Source/Plugins.cpp b/Source/Plugins.cpp
index 9c2999e..ddd0ff5 100755
--- a/Source/Plugins.cpp
+++ b/Source/Plugins.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/Plugins.h b/Source/Plugins.h
index ec9e809..54a668a 100755
--- a/Source/Plugins.h
+++ b/Source/Plugins.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/ResourceEditor.cpp b/Source/ResourceEditor.cpp
index 13e286f..8aefefc 100755
--- a/Source/ResourceEditor.cpp
+++ b/Source/ResourceEditor.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 2002-2007 Amir Szekely <kichik@users.sourceforge.net>
+ * Copyright (C) 2002-2008 Amir Szekely <kichik@users.sourceforge.net>
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/ResourceEditor.h b/Source/ResourceEditor.h
index d821fe2..5174e4d 100755
--- a/Source/ResourceEditor.h
+++ b/Source/ResourceEditor.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 2002-2007 Amir Szekely <kichik@users.sourceforge.net>
+ * Copyright (C) 2002-2008 Amir Szekely <kichik@users.sourceforge.net>
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/ResourceVersionInfo.cpp b/Source/ResourceVersionInfo.cpp
index 5fac171..655ff7d 100755
--- a/Source/ResourceVersionInfo.cpp
+++ b/Source/ResourceVersionInfo.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/ResourceVersionInfo.h b/Source/ResourceVersionInfo.h
index 1f1c5ec..8152526 100755
--- a/Source/ResourceVersionInfo.h
+++ b/Source/ResourceVersionInfo.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/ShConstants.cpp b/Source/ShConstants.cpp
index b3aa0fd..a70384a 100755
--- a/Source/ShConstants.cpp
+++ b/Source/ShConstants.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/Tests/preprocessor.nsi b/Source/Tests/preprocessor.nsi
index 9f25c9b..751fdce 100755
--- a/Source/Tests/preprocessor.nsi
+++ b/Source/Tests/preprocessor.nsi
@@ -1,224 +1,224 @@
-!ifndef file_is_included
-!define file_is_included
-
-Name preprocessor
-OutFile preprocessor.exe
-
-!ifdef some_define_that_doesnt_exist
-this should not be executed, so no error should be raised
-/*
-code inside comments should not be executed
-!ifdef
-*/
-# invalid preprocessor should be ignored
-!hello
-!endif
-
-!ifdef d1
-!error "d1 is not defined!"
-!else ifdef d2
-!error "d2 is not defined!"
-!else
-# this should be compiled
-!endif
-
-!define d1
-
-!ifdef d1
-# this should be compiled
-!else ifdef d2
-!error "d2 is not defined!"
-!else
-!error "d1 is defined!"
-!endif
-
-!undef d1
-!define d2
-
-!ifdef d1
-!error "d1 is not defined!"
-!else ifdef d2
-# this should be compiled
-!else
-!error "d2 is defined!"
-!endif
-
-!ifdef some_define_that_doesnt_exist
-the next !endif should be part of this line\
-!endif
-!\
-e\
-n\
-d\
-i\
-f
-
-!if 0
-/*
-this shouldn't be compiled
-!endif
-*/
-!endif
-
-# tests for !if statement
-!if 'test' == 'test'
- !if 1 <= 2
- !if ! 100 < 99.99
- !if 2.2 > 1.12
- !if ! 23 >= 37
- !if 1 && 1
- !if ! 0 || 0
-
- # this should be compiled
-
- !else
- !error "!if ! 0 || 0 is true!"
- !endif
- !else
- !error "!if 1 && 1 is true!"
- !endif
- !else
- !error "!if ! 23 >= 37 is true!"
- !endif
- !else
- !error "!if 2.2 > 1.12 is true!"
- !endif
- !else
- !error "!if ! 100 < 99.99 is true!"
- !endif
- !else
- !error "!if 1 <= 2 is true!"
- !endif
-!else
- !error "!if 'test' == 'test' is true!"
-!endif
-
-; testing of two math functions and a macro hack :)
-!define increase "!insertmacro increase"
-!macro increase DEFINE
- !define /math ${DEFINE}_MACROTEMP ${${DEFINE}} + 1
- !undef ${DEFINE}
- !define ${DEFINE} ${${DEFINE}_MACROTEMP}
- !undef ${DEFINE}_MACROTEMP
-!macroend
-
-!define number1 1 # 1
-!define /math number2 2 + 3
-!define /math number3 ${number2} - ${number1}
-${increase} number3
-!define /math number4 2 * ${number3}
-!define /math number5 ${number4} % 3
-
-!if ${number1} != 1
- !error "number1 != 1"
-!endif
-
-!if ${number2} != 5
- !error "number2 != 5"
-!endif
-
-!if ${number3} != 5
- !error "number3 != 5"
-!endif
-
-!if ${number4} != 10
- !error "number4 != 10"
-!endif
-
-!if ${number5} != 1
- !error "number5 != 1"
-!endif
-
-; end math functions
-
-# this should just give a warning, not an error
-!include /NONFATAL file_that_doesnt_exist.nsh
-
-# this should include this file just one time.
-!include preprocessor.nsi
-
-Section
-Return
-WriteUninstaller uninst.exe # avoid warning
-SectionEnd
-
-# test scopes
-
-!macro TEST_SCOPE scope def should_exist
-
- !if ${should_exist} == y
- !ifndef ${def}
- !error "${def} not defined in ${scope} scope"
- !endif
- !else
- !ifdef ${def}
- !error "${def} defined in ${scope} scope"
- !endif
- !endif
-
-!macroend
-
-!macro TEST_SCOPES scope global section function pageex uninstall
-
- !insertmacro TEST_SCOPE "${scope}" __GLOBAL__ ${global}
- !insertmacro TEST_SCOPE "${scope}" __SECTION__ ${section}
- !insertmacro TEST_SCOPE "${scope}" __FUNCTION__ ${function}
- !insertmacro TEST_SCOPE "${scope}" __PAGEEX__ ${pageex}
- !insertmacro TEST_SCOPE "${scope}" __UNINSTALL__ ${uninstall}
-
-!macroend
-
-!insertmacro TEST_SCOPES "global" y n n n n
-
-Section test
-!insertmacro TEST_SCOPES "section" n y n n n
-!if ${__SECTION__} != test
- !error "invalid __SECTION__ value"
-!endif
-SectionEnd
-
-Section un.test
-!insertmacro TEST_SCOPES "uninstall section" n y n n y
-!if ${__SECTION__} != test
- !error "invalid __SECTION__ value"
-!endif
-SectionEnd
-
-Function test
-Call test # avoid warning
-!insertmacro TEST_SCOPES "function" n n y n n
-!if ${__FUNCTION__} != test
- !error "invalid __FUNCTION__ value"
-!endif
-FunctionEnd
-
-Function un.test
-Call un.test # avoid warning
-!insertmacro TEST_SCOPES "uninstall function" n n y n y
-!if ${__FUNCTION__} != test
- !error "invalid __FUNCTION__ value"
-!endif
-FunctionEnd
-
-PageEx instfiles
-!insertmacro TEST_SCOPES "pageex" n n n y n
-!if ${__PAGEEX__} != instfiles
- !error "invalid __PAGEEX__ value"
-!endif
-PageExEnd
-
-PageEx un.instfiles
-!insertmacro TEST_SCOPES "uninstall pageex" n n n y y
-!if ${__PAGEEX__} != instfiles
- !error "invalid __PAGEEX__ value"
-!endif
-PageExEnd
-
-!insertmacro TEST_SCOPES "global" y n n n n
-
-!else
-
-# this should just give a warning, not an error
-!include /NONFATAL another_file_that_doesnt_exist.nsh
-
-!endif
+!ifndef file_is_included
+!define file_is_included
+
+Name preprocessor
+OutFile preprocessor.exe
+
+!ifdef some_define_that_doesnt_exist
+this should not be executed, so no error should be raised
+/*
+code inside comments should not be executed
+!ifdef
+*/
+# invalid preprocessor should be ignored
+!hello
+!endif
+
+!ifdef d1
+!error "d1 is not defined!"
+!else ifdef d2
+!error "d2 is not defined!"
+!else
+# this should be compiled
+!endif
+
+!define d1
+
+!ifdef d1
+# this should be compiled
+!else ifdef d2
+!error "d2 is not defined!"
+!else
+!error "d1 is defined!"
+!endif
+
+!undef d1
+!define d2
+
+!ifdef d1
+!error "d1 is not defined!"
+!else ifdef d2
+# this should be compiled
+!else
+!error "d2 is defined!"
+!endif
+
+!ifdef some_define_that_doesnt_exist
+the next !endif should be part of this line\
+!endif
+!\
+e\
+n\
+d\
+i\
+f
+
+!if 0
+/*
+this shouldn't be compiled
+!endif
+*/
+!endif
+
+# tests for !if statement
+!if 'test' == 'test'
+ !if 1 <= 2
+ !if ! 100 < 99.99
+ !if 2.2 > 1.12
+ !if ! 23 >= 37
+ !if 1 && 1
+ !if ! 0 || 0
+
+ # this should be compiled
+
+ !else
+ !error "!if ! 0 || 0 is true!"
+ !endif
+ !else
+ !error "!if 1 && 1 is true!"
+ !endif
+ !else
+ !error "!if ! 23 >= 37 is true!"
+ !endif
+ !else
+ !error "!if 2.2 > 1.12 is true!"
+ !endif
+ !else
+ !error "!if ! 100 < 99.99 is true!"
+ !endif
+ !else
+ !error "!if 1 <= 2 is true!"
+ !endif
+!else
+ !error "!if 'test' == 'test' is true!"
+!endif
+
+; testing of two math functions and a macro hack :)
+!define increase "!insertmacro increase"
+!macro increase DEFINE
+ !define /math ${DEFINE}_MACROTEMP ${${DEFINE}} + 1
+ !undef ${DEFINE}
+ !define ${DEFINE} ${${DEFINE}_MACROTEMP}
+ !undef ${DEFINE}_MACROTEMP
+!macroend
+
+!define number1 1 # 1
+!define /math number2 2 + 3
+!define /math number3 ${number2} - ${number1}
+${increase} number3
+!define /math number4 2 * ${number3}
+!define /math number5 ${number4} % 3
+
+!if ${number1} != 1
+ !error "number1 != 1"
+!endif
+
+!if ${number2} != 5
+ !error "number2 != 5"
+!endif
+
+!if ${number3} != 5
+ !error "number3 != 5"
+!endif
+
+!if ${number4} != 10
+ !error "number4 != 10"
+!endif
+
+!if ${number5} != 1
+ !error "number5 != 1"
+!endif
+
+; end math functions
+
+# this should just give a warning, not an error
+!include /NONFATAL file_that_doesnt_exist.nsh
+
+# this should include this file just one time.
+!include preprocessor.nsi
+
+Section
+Return
+WriteUninstaller uninst.exe # avoid warning
+SectionEnd
+
+# test scopes
+
+!macro TEST_SCOPE scope def should_exist
+
+ !if ${should_exist} == y
+ !ifndef ${def}
+ !error "${def} not defined in ${scope} scope"
+ !endif
+ !else
+ !ifdef ${def}
+ !error "${def} defined in ${scope} scope"
+ !endif
+ !endif
+
+!macroend
+
+!macro TEST_SCOPES scope global section function pageex uninstall
+
+ !insertmacro TEST_SCOPE "${scope}" __GLOBAL__ ${global}
+ !insertmacro TEST_SCOPE "${scope}" __SECTION__ ${section}
+ !insertmacro TEST_SCOPE "${scope}" __FUNCTION__ ${function}
+ !insertmacro TEST_SCOPE "${scope}" __PAGEEX__ ${pageex}
+ !insertmacro TEST_SCOPE "${scope}" __UNINSTALL__ ${uninstall}
+
+!macroend
+
+!insertmacro TEST_SCOPES "global" y n n n n
+
+Section test
+!insertmacro TEST_SCOPES "section" n y n n n
+!if ${__SECTION__} != test
+ !error "invalid __SECTION__ value"
+!endif
+SectionEnd
+
+Section un.test
+!insertmacro TEST_SCOPES "uninstall section" n y n n y
+!if ${__SECTION__} != test
+ !error "invalid __SECTION__ value"
+!endif
+SectionEnd
+
+Function test
+Call test # avoid warning
+!insertmacro TEST_SCOPES "function" n n y n n
+!if ${__FUNCTION__} != test
+ !error "invalid __FUNCTION__ value"
+!endif
+FunctionEnd
+
+Function un.test
+Call un.test # avoid warning
+!insertmacro TEST_SCOPES "uninstall function" n n y n y
+!if ${__FUNCTION__} != test
+ !error "invalid __FUNCTION__ value"
+!endif
+FunctionEnd
+
+PageEx instfiles
+!insertmacro TEST_SCOPES "pageex" n n n y n
+!if ${__PAGEEX__} != instfiles
+ !error "invalid __PAGEEX__ value"
+!endif
+PageExEnd
+
+PageEx un.instfiles
+!insertmacro TEST_SCOPES "uninstall pageex" n n n y y
+!if ${__PAGEEX__} != instfiles
+ !error "invalid __PAGEEX__ value"
+!endif
+PageExEnd
+
+!insertmacro TEST_SCOPES "global" y n n n n
+
+!else
+
+# this should just give a warning, not an error
+!include /NONFATAL another_file_that_doesnt_exist.nsh
+
+!endif
diff --git a/Source/Tests/root.txt b/Source/Tests/root.txt
index 3e09f16..e3629ef 100755
--- a/Source/Tests/root.txt
+++ b/Source/Tests/root.txt
@@ -1,6 +1,6 @@
-this is a list of bugs related to root directories, which can not yet be tested automatically
-
-* bug #1331292 - browsing for root network directory disables next button
-
-* root with space after it, without AllowRootDirInstall
- http://forums.winamp.com/showthread.php?threadid=222727
+this is a list of bugs related to root directories, which can not yet be tested automatically
+
+* bug #1331292 - browsing for root network directory disables next button
+
+* root with space after it, without AllowRootDirInstall
+ http://forums.winamp.com/showthread.php?threadid=222727
diff --git a/Source/afxres.h b/Source/afxres.h
index bf6fa63..a97e638 100755
--- a/Source/afxres.h
+++ b/Source/afxres.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/build.cpp b/Source/build.cpp
index f512f65..928d471 100755
--- a/Source/build.cpp
+++ b/Source/build.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/build.h b/Source/build.h
index 1defd58..31d677a 100755
--- a/Source/build.h
+++ b/Source/build.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/bzip2/blocksort.c b/Source/bzip2/blocksort.c
index d752a1a..b42878f 100755
--- a/Source/bzip2/blocksort.c
+++ b/Source/bzip2/blocksort.c
@@ -2,7 +2,7 @@
* This file is a part of the bzip2 compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.bzip.org/
diff --git a/Source/bzip2/bzlib.c b/Source/bzip2/bzlib.c
index 8fba030..baba256 100755
--- a/Source/bzip2/bzlib.c
+++ b/Source/bzip2/bzlib.c
@@ -2,7 +2,7 @@
* This file is a part of the bzip2 compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.bzip.org/
diff --git a/Source/bzip2/bzlib.h b/Source/bzip2/bzlib.h
index c5a5c37..11947ad 100755
--- a/Source/bzip2/bzlib.h
+++ b/Source/bzip2/bzlib.h
@@ -2,7 +2,7 @@
* This file is a part of the bzip2 compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.bzip.org/
diff --git a/Source/bzip2/compress.c b/Source/bzip2/compress.c
index 6263c5f..bd02018 100755
--- a/Source/bzip2/compress.c
+++ b/Source/bzip2/compress.c
@@ -2,7 +2,7 @@
* This file is a part of the bzip2 compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.bzip.org/
diff --git a/Source/bzip2/decompress.c b/Source/bzip2/decompress.c
index bf00a67..11f4e44 100755
--- a/Source/bzip2/decompress.c
+++ b/Source/bzip2/decompress.c
@@ -2,7 +2,7 @@
* This file is a part of the bzip2 compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.bzip.org/
diff --git a/Source/bzip2/huffman.c b/Source/bzip2/huffman.c
index 1273e60..c170cf0 100755
--- a/Source/bzip2/huffman.c
+++ b/Source/bzip2/huffman.c
@@ -2,7 +2,7 @@
* This file is a part of the bzip2 compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.bzip.org/
diff --git a/Source/cbzip2.h b/Source/cbzip2.h
index 638b16c..d4da7e7 100755
--- a/Source/cbzip2.h
+++ b/Source/cbzip2.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/clzma.cpp b/Source/clzma.cpp
index 2714055..2734f88 100755
--- a/Source/clzma.cpp
+++ b/Source/clzma.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/clzma.h b/Source/clzma.h
index ac90339..eb5e8a7 100755
--- a/Source/clzma.h
+++ b/Source/clzma.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/compressor.h b/Source/compressor.h
index 49524a0..29a39df 100755
--- a/Source/compressor.h
+++ b/Source/compressor.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/crc32.c b/Source/crc32.c
index e8fabf9..38993c9 100755
--- a/Source/crc32.c
+++ b/Source/crc32.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/crc32.h b/Source/crc32.h
index 92fb7c9..00c1dbb 100755
--- a/Source/crc32.h
+++ b/Source/crc32.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/czlib.h b/Source/czlib.h
index c929dea..fdf23fa 100755
--- a/Source/czlib.h
+++ b/Source/czlib.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/dirreader.cpp b/Source/dirreader.cpp
index 5dd0616..22a6d37 100755
--- a/Source/dirreader.cpp
+++ b/Source/dirreader.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/dirreader.h b/Source/dirreader.h
index d7426a8..f161ef2 100755
--- a/Source/dirreader.h
+++ b/Source/dirreader.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/Main.c b/Source/exehead/Main.c
index 5c91796..44cb4a2 100755
--- a/Source/exehead/Main.c
+++ b/Source/exehead/Main.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c
index 7f9ce03..2d89cf8 100755
--- a/Source/exehead/Ui.c
+++ b/Source/exehead/Ui.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft, Jeff Doozan and Contributors
+ * Copyright (C) 1999-2008 Nullsoft, Jeff Doozan and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/afxres.h b/Source/exehead/afxres.h
index 70bd1e4..92bd14d 100755
--- a/Source/exehead/afxres.h
+++ b/Source/exehead/afxres.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/bgbg.c b/Source/exehead/bgbg.c
index 42da5e1..75a4781 100755
--- a/Source/exehead/bgbg.c
+++ b/Source/exehead/bgbg.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/components.c b/Source/exehead/components.c
index f7643e4..18e1f75 100755
--- a/Source/exehead/components.c
+++ b/Source/exehead/components.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/components.h b/Source/exehead/components.h
index 6d77bea..71ab1be 100755
--- a/Source/exehead/components.h
+++ b/Source/exehead/components.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/config.h b/Source/exehead/config.h
index 4f50e79..ca422e6 100755
--- a/Source/exehead/config.h
+++ b/Source/exehead/config.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c
index 1566ffc..516a859 100755
--- a/Source/exehead/exec.c
+++ b/Source/exehead/exec.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/exec.h b/Source/exehead/exec.h
index 6af6603..ad2008e 100755
--- a/Source/exehead/exec.h
+++ b/Source/exehead/exec.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/fileform.c b/Source/exehead/fileform.c
index cb2618f..11d8cc0 100755
--- a/Source/exehead/fileform.c
+++ b/Source/exehead/fileform.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/fileform.h b/Source/exehead/fileform.h
index 66391f9..4e78c76 100755
--- a/Source/exehead/fileform.h
+++ b/Source/exehead/fileform.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/lang.h b/Source/exehead/lang.h
index 4c6d425..3d0adfb 100755
--- a/Source/exehead/lang.h
+++ b/Source/exehead/lang.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -19,17 +19,11 @@
// generic startup strings (these will never be overridable)
-#ifdef NSIS_CONFIG_CRC_SUPPORT
-#define _LANG_INVALIDCRC "The installer you are trying to use is corrupted or incomplete.\n" \
- "This could be the result of a damaged disk, a failed download or a virus.\n\n" \
- "You may want to contact the author of this installer to obtain a new copy.\n\n" \
- "It may be possible to skip this check using the /NCRC command line switch\n" \
- "(NOT RECOMMENDED)."
-#else
-#define _LANG_INVALIDCRC "The installer you are trying to use is corrupted or incomplete.\n" \
- "This could be the result of a damaged disk, a failed download or a virus.\n\n" \
- "You may want to contact the author of this installer to obtain a new copy."
-#endif
+#define _LANG_INVALIDCRC "Installer integrity check has failed. Common causes include\n" \
+ "incomplete download and damaged media. Contact the\n" \
+ "installer's author to obtain a new copy.\n\n" \
+ "More information at:\n" \
+ "http://nsis.sf.net/NSIS_Error"
#define _LANG_ERRORWRITINGTEMP "Error writing temporary file. Make sure your temp folder is valid."
diff --git a/Source/exehead/state.h b/Source/exehead/state.h
index 8aa5020..d53154e 100755
--- a/Source/exehead/state.h
+++ b/Source/exehead/state.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/ui.h b/Source/exehead/ui.h
index ae85609..8ee0cab 100755
--- a/Source/exehead/ui.h
+++ b/Source/exehead/ui.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/exehead/util.c b/Source/exehead/util.c
index afaacc7..80e18c1 100755
--- a/Source/exehead/util.c
+++ b/Source/exehead/util.c
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -139,7 +139,9 @@ void NSISCALL myDelete(char *buf, int flags)
#endif//NSIS_SUPPORT_RMDIR
trimslashtoend(buf);
- mystrcat(buf,"\\");
+ // only append backslash if the path isn't relative to the working directory [bug #1851273]
+ if (*buf || *lbuf == '\\')
+ mystrcat(buf,"\\");
fn=buf+mystrlen(buf);
diff --git a/Source/exehead/util.h b/Source/exehead/util.h
index 35a1846..f2bcbb3 100755
--- a/Source/exehead/util.h
+++ b/Source/exehead/util.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/fileform.cpp b/Source/fileform.cpp
index fddf866..b1ce87e 100755
--- a/Source/fileform.cpp
+++ b/Source/fileform.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/fileform.h b/Source/fileform.h
index 71afdaf..e3d6be5 100755
--- a/Source/fileform.h
+++ b/Source/fileform.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/growbuf.cpp b/Source/growbuf.cpp
index 28d8842..f7c942d 100755
--- a/Source/growbuf.cpp
+++ b/Source/growbuf.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/growbuf.h b/Source/growbuf.h
index b3c3fb1..14b6444 100755
--- a/Source/growbuf.h
+++ b/Source/growbuf.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/icon.cpp b/Source/icon.cpp
index e169fcd..30bb9bc 100755
--- a/Source/icon.cpp
+++ b/Source/icon.cpp
@@ -115,6 +115,8 @@ IconGroup load_icon_file(const char* filename)
throw runtime_error("unable to read offset from file");
}
+ FIX_ENDIAN_INT32_INPLACE(iconOffset);
+
fpos_t pos;
fgetpos(file, &pos);
@@ -257,6 +259,7 @@ void set_icon(CResourceEditor* re, WORD wIconId, IconGroup icon1, IconGroup icon
for (order_index = 0; order_index < order.size(); order_index++)
{
LPBYTE data = new BYTE[order[order_index].size];
+ memset(data, 0, order[order_index].size);
if (order_index < icon1.size())
{
diff --git a/Source/icon.h b/Source/icon.h
index e71f28b..7b014cb 100755
--- a/Source/icon.h
+++ b/Source/icon.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/lang.cpp b/Source/lang.cpp
index 1bf316f..a65bc02 100755
--- a/Source/lang.cpp
+++ b/Source/lang.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/lang.h b/Source/lang.h
index 6bf2a41..6979981 100755
--- a/Source/lang.h
+++ b/Source/lang.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/lineparse.cpp b/Source/lineparse.cpp
index d933aa1..5e591dc 100755
--- a/Source/lineparse.cpp
+++ b/Source/lineparse.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/lineparse.h b/Source/lineparse.h
index 326fbdb..dabaf65 100755
--- a/Source/lineparse.h
+++ b/Source/lineparse.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/makenssi.cpp b/Source/makenssi.cpp
index ef58fba..89d54cf 100755
--- a/Source/makenssi.cpp
+++ b/Source/makenssi.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -92,7 +92,7 @@ static void init_signals()
static void print_logo()
{
- fprintf(g_output,"MakeNSIS %s - Copyright 1995-2007 Contributors\n"
+ fprintf(g_output,"MakeNSIS %s - Copyright 1995-2008 Contributors\n"
"See the file COPYING for license details.\n"
"Credits can be found in the Users Manual.\n\n", NSIS_VERSION);
fflush(g_output);
@@ -100,7 +100,7 @@ static void print_logo()
static void print_license()
{
- fprintf(g_output,"Copyright (C) 1999-2007 Nullsoft and Contributors\n\n"
+ fprintf(g_output,"Copyright (C) 1999-2008 Nullsoft and Contributors\n\n"
"This license applies to everything in the NSIS package, except where otherwise\n"
"noted.\n\n"
"This software is provided 'as-is', without any express or implied warranty.\n"
diff --git a/Source/manifest.cpp b/Source/manifest.cpp
index abd55a6..2484757 100755
--- a/Source/manifest.cpp
+++ b/Source/manifest.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/manifest.h b/Source/manifest.h
index c336af6..8c2c3f9 100755
--- a/Source/manifest.h
+++ b/Source/manifest.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/mmap.cpp b/Source/mmap.cpp
index 25668c9..938f6a5 100755
--- a/Source/mmap.cpp
+++ b/Source/mmap.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/mmap.h b/Source/mmap.h
index 77d810b..5b7286a 100755
--- a/Source/mmap.h
+++ b/Source/mmap.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/script.cpp b/Source/script.cpp
index e291e1f..787cc17 100755
--- a/Source/script.cpp
+++ b/Source/script.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -285,16 +285,26 @@ int CEXEBuild::doParse(const char *str)
if (m_linebuild.getlen()>1)
m_linebuild.resize(m_linebuild.getlen()-2);
+ // warn of comment with line-continuation
+ if (m_linebuild.getlen())
+ {
+ LineParser prevline(inside_comment);
+ prevline.parse((char*)m_linebuild.get());
+ LineParser thisline(inside_comment);
+ thisline.parse((char*)str);
+
+ if (prevline.inComment() && !thisline.inComment())
+ {
+ warning_fl("comment contains line-continuation character, following line will be ignored");
+ }
+ }
+
+ // add new line to line buffer
m_linebuild.add(str,strlen(str)+1);
// keep waiting for more lines, if this line ends with a backslash
if (str[0] && CharPrev(str,str+strlen(str))[0] == '\\')
{
- line.parse((char*)m_linebuild.get());
- if (line.inComment())
- {
- warning_fl("comment contains line-continuation character, following line will be ignored");
- }
return PS_OK;
}
@@ -4862,7 +4872,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
ent.offsets[0]=add_string(line.gettoken_str(2+a));
ent.offsets[1]=GetUserVarIndex(line, 1+a);
ent.offsets[2]=!a;
- if (ent.offsets[0]<0) PRINTHELP()
+ if (ent.offsets[1]<0) PRINTHELP()
SCRIPT_MSG("GetFullPathName: %s->%s (%d)\n",
line.gettoken_str(2+a),line.gettoken_str(1+a),a?"sfn":"lfn");
}
@@ -5482,7 +5492,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
ent.offsets[1]=GetUserVarIndex(line,1);
ent.offsets[2]=0;
ent.offsets[3]=1;
- if (line.gettoken_str(1)[0] && ent.offsets[0]<0) PRINTHELP()
+ if (line.gettoken_str(1)[0] && ent.offsets[1]<0) PRINTHELP()
SCRIPT_MSG("GetCurInstType: %s\n",line.gettoken_str(1));
return add_entry(&ent);
#else//!NSIS_CONFIG_COMPONENTPAGE
diff --git a/Source/strlist.cpp b/Source/strlist.cpp
index 4af6959..892c701 100755
--- a/Source/strlist.cpp
+++ b/Source/strlist.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/strlist.h b/Source/strlist.h
index dd08855..d65d916 100755
--- a/Source/strlist.h
+++ b/Source/strlist.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/tokens.cpp b/Source/tokens.cpp
index 7d9ee4b..258f05e 100755
--- a/Source/tokens.cpp
+++ b/Source/tokens.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/tokens.h b/Source/tokens.h
index 65c415a..9b3f118 100755
--- a/Source/tokens.h
+++ b/Source/tokens.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -79,7 +79,7 @@ enum
TOK_LANGSTRING,
TOK_LANGSTRINGUP,
- // comrpession stuff
+ // compression stuff
TOK_SETCOMPRESS,
TOK_DBOPTIMIZE,
TOK_SETCOMPRESSOR,
@@ -129,7 +129,7 @@ enum
TOK_FUNCTIONEND,
TOK_ADDSIZE,
- // page oredering shit
+ // page ordering
TOK_PAGE,
TOK_UNINSTPAGE,
diff --git a/Source/util.cpp b/Source/util.cpp
index 25e515e..81e9a11 100755
--- a/Source/util.cpp
+++ b/Source/util.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@
#ifdef __APPLE__
namespace Apple { // defines struct section
+# define ENUM_DYLD_BOOL // for TRUE/FALSE, bug #1851365
# include <mach-o/dyld.h> // for _NSGetExecutablePath
};
# include <sys/param.h> // for MAXPATHLEN
diff --git a/Source/util.h b/Source/util.h
index 9f1a480..3c3e46b 100755
--- a/Source/util.h
+++ b/Source/util.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/winchar.cpp b/Source/winchar.cpp
index 87d446b..6cc81ee 100755
--- a/Source/winchar.cpp
+++ b/Source/winchar.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/winchar.h b/Source/winchar.h
index 07ac7e7..8645b14 100755
--- a/Source/winchar.h
+++ b/Source/winchar.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/writer.cpp b/Source/writer.cpp
index f41975f..b8f27c7 100755
--- a/Source/writer.cpp
+++ b/Source/writer.cpp
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/writer.h b/Source/writer.h
index 1a26581..be454d3 100755
--- a/Source/writer.h
+++ b/Source/writer.h
@@ -3,7 +3,7 @@
*
* This file is a part of NSIS.
*
- * Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Copyright (C) 1999-2008 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
diff --git a/Source/zlib/DEFLATE.H b/Source/zlib/DEFLATE.H
index 7dc521b..dfe15a5 100755
--- a/Source/zlib/DEFLATE.H
+++ b/Source/zlib/DEFLATE.H
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/Source/zlib/INFBLOCK.C b/Source/zlib/INFBLOCK.C
index 73aef2d..9306a56 100755
--- a/Source/zlib/INFBLOCK.C
+++ b/Source/zlib/INFBLOCK.C
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/Source/zlib/ZCONF.H b/Source/zlib/ZCONF.H
index d465607..efb3499 100755
--- a/Source/zlib/ZCONF.H
+++ b/Source/zlib/ZCONF.H
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/Source/zlib/ZLIB.H b/Source/zlib/ZLIB.H
index 1c983d8..8185960 100755
--- a/Source/zlib/ZLIB.H
+++ b/Source/zlib/ZLIB.H
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/Source/zlib/ZUTIL.H b/Source/zlib/ZUTIL.H
index cf27a2c..1f1addd 100755
--- a/Source/zlib/ZUTIL.H
+++ b/Source/zlib/ZUTIL.H
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/Source/zlib/deflate.c b/Source/zlib/deflate.c
index 6cd5bc2..5577adb 100755
--- a/Source/zlib/deflate.c
+++ b/Source/zlib/deflate.c
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/Source/zlib/trees.c b/Source/zlib/trees.c
index 43377e5..8f11181 100755
--- a/Source/zlib/trees.c
+++ b/Source/zlib/trees.c
@@ -2,7 +2,7 @@
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
- * Modifications Copyright (C) 1999-2007 Nullsoft and Contributors
+ * Modifications Copyright (C) 1999-2008 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
diff --git a/nsisconf.nsh b/nsisconf.nsh
index 48a4915..67c68f5 100755
--- a/nsisconf.nsh
+++ b/nsisconf.nsh
@@ -1,62 +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
-
+;------------------------
+;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