OSDN Git Service

Downgrade project file from VS2015 to VS2013
[winmerge-jp/winmerge-jp.git] / Installer / InnoSetup / WinMerge.iss
1 ;           Programmed by:  Christian Blackburn, Christian List, Kimmo Varis,\r
2 ;                 Purpose:  The is the Inno Setup installation script for distributing our WinMerge application.\r
3 ; Tools Needed To Compile:  Inno Setup 5.1.7+ (http://www.jrsoftware.org/isdl.php), Inno Setup QuickStart Pack 5.1.7+(http://www.jrsoftware.org/isdl.php)\r
4 ;                           note: the versions of Inno Setup and the QuickStart Pack should be identical to ensure proper function\r
5 ;Directly Dependant Files:  Because this is an installer. It would be difficult to list and maintain each of the files referenced\r
6 ;                           throughout the script in the header.  If you search this plain text script for a particular file in our Subversio repository and it\r
7 ;                           doesn't appear then this script is not directly dependant on that file.\r
8 ;Compilation Instructions:  1.  Open this file in Inno Setup or ISTool\r
9 ;                           2.  Make sure Compression=LZMA/Ultra, InternalCompressLevel=Ultra, and SolidCompression=True these values are lowered during\r
10 ;                               development to speed up compilation, however at release we want the intaller to be as strong as possible.\r
11 ;                           3. Check all files are present:\r
12 ;                                   -From ISTool Click\r
13 ;                           4.  Compile the script: "Project" --> "Verify Files..."\r
14 ;                                   -From Inno Setup "Click "Build" --> "Compile"\r
15 ;                                   -From ISTool Click "Project" --> "Compile Setup"\r
16 ;                           5.  The compiled installer will appear in the \InnoSetup\Output\ directory at currently should be around 1.5MBs in size.\r
17 ;\r
18 ; Installer To Do List:\r
19 ; #  Make the Install7ZipDll() Function automatically work with future versions of Merge7zDLL (Use GetCurentFileName)\r
20 ; #  Provide the option to or not to assign the Ctrl+Alt+M accelerator to WinMerge., make sure it's turned on for at least one icon\r
21 ; #  Add WinMerge to the user's path so they can execute comparison's from a Dos Prompt (Cmd.exe/Command.exe)\r
22 ; #  We need to unregister, and delete the ShellExtension Dll if the user doesn't want it, during installation\r
23 \r
24 ; #  Display integration options in gray rather than hiding them if the user doesn't have the application in question installed\r
25 ; #  We need to ask those that have the RCLLocalization.dll in their plugins folder if they actually want it, their answer will need to be stored in the registry\r
26 ; #  Write code to detect "\Programs\WinMerge\WinMerge" type start menu installs\r
27 ;\r
28 ; Custom Installer Pages:\r
29 ; #  Bundle 7-Zip with WinMerge or provide on the fly download capability.\r
30 ; #  Allow users to set their working directory via a custom installer page\r
31 ;\r
32 ; Things that make the user's life easier:\r
33 ; #  Create instructions and a sample language file using the Inno Setup Translator Tool (http://www2.arnes.si/~sopjsimo/translator.html)\r
34 ; #  Add "WinMerge is running would you like to close it now?" support with programmatic termination\r
35 ;     -Note: We'll need to add a declares statement to our ISX code so that we can use FindWindowEx directly or a mutex search or two\r
36 ; #  Rather than requiring users to restart we could just kill all intances of Explorer.exe, but we'll need to prompt the user first and restart it\r
37 ;    once the ShellExtension.dll file has been added or removed.\r
38 ;\r
39 ; Non-Essential Features:\r
40 ; #  See about getting a higher resolution copy of the Users's Guide.ico source art from somebody (A 32x32, and or 48x48 would be nice)\r
41 ; #  Using the registry set the order our icons appear within their group in the start menu.:\r
42 ;      1.  WinMerge\r
43 ;      2.  Read Me\r
44 ;      3.  Users's Guide\r
45 ;      4.  WinMerge on the Web\r
46 ;      5.  Uninstall WinMerge\r
47 ; #  Create the ability to install to two start menu groups simultaneously\r
48 ;\r
49 ; Not yet possible (Limited by Inno Setup):\r
50 ; #  While uninstalling prompt the user as to whether or not they'd like to remove their WinMerge preferences too?\r
51 \r
52 #define AppVersion GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe")\r
53 #define FriendlyAppVersion Copy(GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe"), 1, 5)\r
54 #define VS120COMNTOOLS GetEnv('VS120COMNTOOLS')\r
55 \r
56 [Setup]\r
57 AppName=WinMerge\r
58 AppVersion={#AppVersion}\r
59 AppVerName=WinMerge {#AppVersion}\r
60 AppPublisher=Thingamahoochie Software\r
61 AppPublisherURL=http://www.geocities.co.jp/SiliconValley-SanJose/8165/\r
62 AppSupportURL=http://www.geocities.co.jp/SiliconValley-SanJose/8165/\r
63 AppUpdatesURL=http://www.geocities.co.jp/SiliconValley-SanJose/8165/\r
64 \r
65 ; Installer executable's version resource info\r
66 VersionInfoCompany=http://www.geocities.co.jp/SiliconValley-SanJose/8165/\r
67 VersionInfoDescription=WinMerge Installer\r
68 VersionInfoVersion={#AppVersion}\r
69 \r
70 ;This is in case an older version of the installer happened to be\r
71 DirExistsWarning=no\r
72 \r
73 ;Tells the installer to only display a select language dialog if the an exact match wasn't found\r
74 ShowLanguageDialog=auto\r
75 \r
76 DefaultDirName={pf}\WinMerge\r
77 DefaultGroupName=WinMerge\r
78 DisableStartupPrompt=true\r
79 AllowNoIcons=true\r
80 InfoBeforeFile=..\..\Docs\users\GPL.rtf\r
81 InfoAfterFile=..\..\Docs\users\ReadMe.txt\r
82 \r
83 OutputBaseFilename=WinMerge-{#AppVersion}-Setup\r
84 \r
85 ;This must be admin to install C++ Runtimes and shell extension\r
86 PrivilegesRequired=admin\r
87 \r
88 ;Windows 2000 or later required\r
89 MinVersion=0,5.0\r
90 \r
91 UninstallDisplayIcon={app}\{code:ExeName}\r
92 \r
93 ;Artwork References\r
94 WizardImageFile=Art\Large Logo.bmp\r
95 WizardSmallImageFile=Art\Small Logo.bmp\r
96 WizardImageStretch=true\r
97 \r
98 ;It is confusing, if Setup/Uninstall use the same icon like WinMerge!\r
99 ;SetupIconFile=..\..\src\res\Merge.ico\r
100 \r
101 ;Compression Parameters\r
102 ;Please note while Compression=lzma/ultra and InternalCompressLevel=Ultra are better than max\r
103 ;they also require 320 MB of memory for compression. If you're system has at least 256MB RAM then by all\r
104 ;means set it to ultra before compilation\r
105 Compression=lzma/ultra\r
106 InternalCompressLevel=ultra\r
107 SolidCompression=true\r
108 \r
109 ; Update file associations for shell (project files)\r
110 ChangesAssociations=true\r
111 ; Updates PATH\r
112 ChangesEnvironment=true\r
113 OutputDir=..\..\Build\r
114 AlwaysShowComponentsList=true\r
115 \r
116 SignTool=signbat $f\r
117 SignedUninstaller=yes\r
118 \r
119 [Languages]\r
120 ;Inno Setup's Native Language\r
121 Name: English; MessagesFile: ..\..\Translations\InnoSetup\English.isl\r
122 \r
123 ;Localizations:\r
124 Name: Basque; MessagesFile: ..\..\Translations\InnoSetup\Basque.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt\r
125 Name: Bulgarian; MessagesFile: ..\..\Translations\InnoSetup\Bulgarian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt\r
126 Name: Catalan; MessagesFile: ..\..\Translations\InnoSetup\Catalan.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt\r
127 Name: Chinese_Simplified; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Simplified.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt\r
128 Name: Chinese_Traditional; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Traditional.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt\r
129 Name: Croatian; MessagesFile: ..\..\Translations\InnoSetup\Croatian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt\r
130 Name: Czech; MessagesFile: ..\..\Translations\InnoSetup\Czech.isl\r
131 Name: Danish; MessagesFile: ..\..\Translations\InnoSetup\Danish.isl\r
132 Name: Dutch; MessagesFile: ..\..\Translations\InnoSetup\Dutch.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt\r
133 Name: French; MessagesFile: ..\..\Translations\InnoSetup\French.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-French.txt\r
134 Name: Galician; MessagesFile: ..\..\Translations\InnoSetup\Galician.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt\r
135 Name: German; MessagesFile: ..\..\Translations\InnoSetup\German.isl\r
136 Name: Greek; MessagesFile: ..\..\Translations\InnoSetup\Greek.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt\r
137 Name: Hungarian; MessagesFile: ..\..\Translations\InnoSetup\Hungarian.isl\r
138 Name: Italian; MessagesFile: ..\..\Translations\InnoSetup\Italian.isl\r
139 Name: Japanese; MessagesFile: ..\..\Translations\InnoSetup\Japanese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt\r
140 Name: Korean; MessagesFile: ..\..\Translations\InnoSetup\Korean.isl\r
141 Name: Norwegian; MessagesFile: ..\..\Translations\InnoSetup\Norwegian.isl\r
142 Name: Persian; MessagesFile: ..\..\Translations\InnoSetup\Persian.isl\r
143 Name: Polish; MessagesFile: ..\..\Translations\InnoSetup\Polish.isl\r
144 Name: Portuguese; MessagesFile: ..\..\Translations\InnoSetup\Portuguese.isl\r
145 Name: PortugueseBrazilian; MessagesFile: ..\..\Translations\InnoSetup\Brazilian_Portuguese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt\r
146 Name: Romanian; MessagesFile: ..\..\Translations\InnoSetup\Romanian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt\r
147 Name: Russian; MessagesFile: ..\..\Translations\InnoSetup\Russian.isl\r
148 Name: Serbian; MessagesFile: ..\..\Translations\InnoSetup\Serbian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt\r
149 Name: Slovak; MessagesFile: ..\..\Translations\InnoSetup\Slovak.isl\r
150 Name: Slovenian; MessagesFile: ..\..\Translations\InnoSetup\Slovenian.isl\r
151 Name: Spanish; MessagesFile: ..\..\Translations\InnoSetup\Spanish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt\r
152 Name: Swedish; MessagesFile: ..\..\Translations\InnoSetup\Swedish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt\r
153 Name: Turkish; MessagesFile: ..\..\Translations\InnoSetup\Turkish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt\r
154 Name: Ukrainian; MessagesFile: ..\..\Translations\InnoSetup\Ukrainian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt\r
155 \r
156 \r
157 [Messages]\r
158 English.FinishedLabel=Setup has finished installing WinMerge on your computer.\r
159 English.SetupAppTitle=Setup - WinMerge {#AppVersion}\r
160 English.WizardInfoBefore=License Agreement\r
161 English.InfoBeforeLabel=GNU General Public License\r
162 \r
163 \r
164 [Types]\r
165 Name: typical; Description: {cm:TypicalInstallation}\r
166 Name: full; Description: {cm:FullInstallation}\r
167 Name: compact; Description: {cm:CompactInstallation}\r
168 Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom\r
169 \r
170 \r
171 [Components]\r
172 ; Executable, libraries, documentation\r
173 Name: Core; Description: {cm:AppCoreFiles}; Types: full custom typical compact; Flags: fixed\r
174 \r
175 Name: filters; Description: {cm:Filters}; Flags: disablenouninstallwarning; Types: full typical\r
176 Name: Plugins; Description: {cm:Plugins}; Flags: disablenouninstallwarning; Types: full\r
177 Name: Frhed; Description: {cm:Frhed}; Flags: disablenouninstallwarning; Types: full typical\r
178 Name: WinIMerge; Description: {cm:WinIMerge}; Flags: disablenouninstallwarning; Types: full typical\r
179 Name: ArchiveSupport; Description: {cm:ArchiveSupport}; Flags: disablenouninstallwarning; Types: full typical\r
180 Name: Patch; Description: {cm:Patch}; Flags: disablenouninstallwarning; Types: full typical\r
181 \r
182 ;Language components\r
183 Name: Languages; Description: {cm:Languages}; Flags: disablenouninstallwarning\r
184 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Basque\r
185 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Basque\r
186 \r
187 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Bulgarian\r
188 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Bulgarian\r
189 \r
190 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Catalan\r
191 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Catalan\r
192 \r
193 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Simplified\r
194 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Simplified\r
195 \r
196 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Traditional\r
197 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Traditional\r
198 \r
199 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Croatian\r
200 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Croatian\r
201 \r
202 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Czech\r
203 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Czech\r
204 \r
205 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Danish\r
206 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Danish\r
207 \r
208 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Dutch\r
209 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Dutch\r
210 \r
211 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not French\r
212 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: French\r
213 \r
214 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Galician\r
215 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Galician\r
216 \r
217 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not German\r
218 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: German\r
219 \r
220 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Greek\r
221 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Greek\r
222 \r
223 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Hungarian\r
224 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Hungarian\r
225 \r
226 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Italian\r
227 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Italian\r
228 \r
229 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Japanese\r
230 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Japanese\r
231 \r
232 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Korean\r
233 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Korean\r
234 \r
235 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Norwegian\r
236 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Norwegian\r
237 \r
238 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Persian\r
239 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Persian\r
240 \r
241 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Polish\r
242 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Polish\r
243 \r
244 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Portuguese\r
245 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Portuguese\r
246 \r
247 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not PortugueseBrazilian\r
248 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: PortugueseBrazilian\r
249 \r
250 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Romanian\r
251 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Romanian\r
252 \r
253 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Russian\r
254 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Russian\r
255 \r
256 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Serbian\r
257 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Serbian\r
258 \r
259 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovak\r
260 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovak\r
261 \r
262 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovenian\r
263 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovenian\r
264 \r
265 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Spanish\r
266 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Spanish\r
267 \r
268 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Swedish\r
269 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Swedish\r
270 \r
271 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Turkish\r
272 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Turkish\r
273 \r
274 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Ukrainian\r
275 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Ukrainian\r
276 \r
277 \r
278 [Tasks]\r
279 Name: ShellExtension; Description: {cm:ExplorerContextMenu}; GroupDescription: {cm:OptionalFeatures}\r
280 Name: modifypath; Description: {cm:AddToPath}; GroupDescription: {cm:OptionalFeatures}; Flags: unchecked\r
281 Name: TortoiseCVS; Description: {cm:IntegrateTortoiseCVS}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseCVSInstalled\r
282 Name: TortoiseGit; Description: {cm:IntegrateTortoiseGit}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseGitInstalled; MinVersion: 0,5.0.2195sp3\r
283 Name: TortoiseSVN; Description: {cm:IntegrateTortoiseSVN}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseSVNInstalled; MinVersion: 0,5.0.2195sp3\r
284 Name: ClearCase; Description: {cm:IntegrateClearCase}; GroupDescription: {cm:OptionalFeatures}; Check: ClearCaseInstalled\r
285 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked\r
286 Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0,6.1\r
287 \r
288 [InstallDelete]\r
289 ; Diff.txt is a file left over from previous versions of WinMerge (before version 2.0), we just delete it to be nice.\r
290 Type: files; Name: {app}\Diff.txt\r
291 \r
292 ;All of these files are removed so if the user upgrades their operating system or changes their language selections only the\r
293 ;necessary files will be left in the installation folder\r
294 ;Another reason these files might be strays is if a user extracted one of the experimental builds such as:\r
295 ;WinMerge.{#AppVersion}-exe.7z.\r
296 Name: {app}\WinMerge.exe; Type: files\r
297 Name: {app}\WinMergeU.exe; Type: files; MinVersion: 0, 4\r
298 \r
299 ;Remove manifest files as we don't need them in 2.6.2 / 2.7.1.1 or later\r
300 Name: {app}\WinMerge.exe.manifest; Type: files\r
301 Name: {app}\WinMergeU.exe.manifest; Type: files\r
302 \r
303 Name: {app}\Merge7z311.dll; Type: files\r
304 Name: {app}\Merge7z311U.dll; Type: files; MinVersion: 0, 4\r
305 \r
306 Name: {app}\Merge7z312.dll; Type: files\r
307 Name: {app}\Merge7z312U.dll; Type: files; MinVersion: 0, 4\r
308 \r
309 Name: {app}\Merge7z313.dll; Type: files\r
310 Name: {app}\Merge7z313U.dll; Type: files; MinVersion: 0, 4\r
311 \r
312 Name: {app}\Merge7z420.dll; Type: files\r
313 Name: {app}\Merge7z420U.dll; Type: files; MinVersion: 0, 4\r
314 \r
315 Name: {app}\Merge7z423.dll; Type: files\r
316 Name: {app}\Merge7z423U.dll; Type: files; MinVersion: 0, 4\r
317 \r
318 Name: {app}\Merge7z431.dll; Type: files\r
319 Name: {app}\Merge7z431U.dll; Type: files; MinVersion: 0, 4\r
320 \r
321 Name: {app}\Merge7z432.dll; Type: files\r
322 Name: {app}\Merge7z432U.dll; Type: files; MinVersion: 0, 4\r
323 \r
324 Name: {app}\Merge7z442.dll; Type: files\r
325 Name: {app}\Merge7z442U.dll; Type: files; MinVersion: 0, 4\r
326 \r
327 Name: {app}\Merge7z457.dll; Type: files\r
328 Name: {app}\Merge7z457U.dll; Type: files; MinVersion: 0, 4\r
329 \r
330 Name: {app}\Merge7z465.dll; Type: files\r
331 Name: {app}\Merge7z465U.dll; Type: files; MinVersion: 0, 4\r
332 \r
333 Name: {app}\Merge7z920.dll; Type: files\r
334 Name: {app}\Merge7z920U.dll; Type: files; MinVersion: 0, 4\r
335 \r
336 ;This won't work, because the file has to be unregistered, and explorer closed, first.\r
337 ;Name: {app}\ShellExtension.dll; Type: files; Check: TaskDisabled('ShellExtension')\r
338 \r
339 ; Remove existing .lang files - we don't need them anymore as we are\r
340 ; using PO files now.\r
341 Name: {app}\Languages\MergeBrazilian.lang; Type: files\r
342 Name: {app}\Languages\MergeBulgarian.lang; Type: files\r
343 Name: {app}\Languages\MergeCatalan.lang; Type: files\r
344 Name: {app}\Languages\MergeChineseSimplified.lang; Type: files\r
345 Name: {app}\Languages\MergeChineseTraditional.lang; Type: files\r
346 Name: {app}\Languages\MergeCzech.lang; Type: files\r
347 Name: {app}\Languages\MergeDanish.lang; Type: files\r
348 Name: {app}\Languages\MergeDutch.lang; Type: files\r
349 Name: {app}\Languages\MergeFrench.lang; Type: files\r
350 Name: {app}\Languages\MergeGerman.lang; Type: files\r
351 Name: {app}\Languages\MergeHungarian.lang; Type: files\r
352 Name: {app}\Languages\MergeItalian.lang; Type: files\r
353 Name: {app}\Languages\MergeJapanese.lang; Type: files\r
354 Name: {app}\Languages\MergeKorean.lang; Type: files\r
355 Name: {app}\Languages\MergeNorwegian.lang; Type: files\r
356 Name: {app}\Languages\MergePersian.lang; Type: files\r
357 Name: {app}\Languages\MergePolish.lang; Type: files\r
358 Name: {app}\Languages\MergePortuguese.lang; Type: files\r
359 Name: {app}\Languages\MergeSlovak.lang; Type: files\r
360 Name: {app}\Languages\MergeSpanish.lang; Type: files\r
361 Name: {app}\Languages\MergeRussian.lang; Type: files\r
362 Name: {app}\Languages\MergeSerbian.lang; Type: files\r
363 Name: {app}\Languages\MergeSwedish.lang; Type: files\r
364 Name: {app}\Languages\MergeTurkish.lang; Type: files\r
365 Name: {app}\MergePlugins\list.txt; Type: files; Check: not IsComponentSelected('Plugins')\r
366 \r
367 ;Removes the user's guide icon if the user deselects the user's guide component.\r
368 Name: {group}\{cm:UsersGuide}.lnk; Type: files; Check: not IsComponentSelected('Docs')\r
369 \r
370 ;This removes the quick launch icon in case the user chooses not to install it after previously having it installed\r
371 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
372 Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
373 \r
374 ;This removes the desktop icon in case the user chooses not to install it after previously having it installed\r
375 Name: {userdesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
376 Name: {commondesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
377 \r
378 ;Removes the Uninstall icon from the start menu...\r
379 Name: {group}\{cm:UninstallProgram,WinMerge}.lnk; Type: files;\r
380 \r
381 ;Remove ANSI executable link from start menu for NT-based Windows versions\r
382 ;This was installed earlier, but not anymore.\r
383 Name: {group}\WinMerge (ANSI).lnk; Type: files; MinVersion: 0,4\r
384 Name: {app}\Docs; Type: filesandordirs\r
385 \r
386 Name: {app}\MergePlugins\editor addin.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
387 Name: {app}\MergePlugins\insert datetime.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
388 Name: {app}\MergePlugins\CompareMSExcelFiles.dll; Type: Files; Check: IsComponentSelected('Plugins')\r
389 Name: {app}\MergePlugins\CompareMSWordFiles.dll; Type: Files; Check: IsComponentSelected('Plugins')\r
390 Name: {app}\MergePlugins; Type: DirIfEmpty; Check: not IsComponentSelected('Plugins')\r
391 \r
392 Name: {app}\Filters\ADAMulti.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
393 Name: {app}\Filters\ASPNET.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
394 Name: {app}\Filters\CSharp_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
395 Name: {app}\Filters\Delphi.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
396 Name: {app}\Filters\MASM.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
397 Name: {app}\Filters\Merge_GnuC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
398 Name: {app}\Filters\Merge_VC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
399 Name: {app}\Filters\Merge_VB_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
400 Name: {app}\Filters\SourceControl.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
401 Name: {app}\Filters\Symbian.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
402 Name: {app}\Filters\XML_html.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
403 Name: {app}\Filters\FileFilter.tmpl; Type: Files; Check: not IsComponentSelected('Filters')\r
404 Name: {app}\Filters; Type: DirIfEmpty; Check: not IsComponentSelected('Filters')\r
405 \r
406 \r
407 \r
408 [Dirs]\r
409 ;The always uninstall flag tells the uninstaller to remove the folder if it's empty regardless of whether or not it existed prior to the installation\r
410 Name: {app}; Flags: uninsalwaysuninstall\r
411 \r
412 \r
413 [Files]\r
414 ; WinMerge itself\r
415 Source: ..\..\Build\MergeUnicodeRelease\WinMergeU.exe; DestDir: {app}; Flags: promptifolder; Components: Core\r
416 \r
417 ; List of installed files\r
418 Source: ..\..\Docs\Users\Files.txt; DestDir: {app}; Flags: promptifolder; Components: Core\r
419 \r
420 ; Shell extension\r
421 Source: ..\..\Build\ShellExtensionUnicode Release MinDependency\ShellExtensionU.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder; MinVersion: 0, 4; Check: not IsWin64\r
422 ; 64-bit version of ShellExtension\r
423 Source: ..\..\Build\X64\ShellExtensionUnicode Release MinDependency\ShellExtensionX64.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder 64bit; MinVersion: 0,5.01.2600; Check: IsWin64\r
424 \r
425 ;Please do not reorder the 7z Dlls by version they compress better ordered by platform and then by version\r
426 Source: ..\..\Build\MergeUnicodeRelease\Merge7z\Merge7z920U.dll; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
427 Source: ..\..\Build\MergeUnicodeRelease\Merge7z\7z.dll; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
428 Source: ..\..\Build\MergeUnicodeRelease\Merge7z\*.txt; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
429 Source: ..\..\Build\MergeUnicodeRelease\Merge7z\Lang\*.txt; DestDir: {app}\Merge7z\Lang; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
430 \r
431 ; MergeLang.dll - translation helper dll\r
432 Source: ..\..\Build\MergeUnicodeRelease\MergeLang.dll; DestDir: {app}; Flags: promptifolder ignoreversion; Components: Core\r
433 \r
434 ; Language files\r
435 Source: ..\..\Translations\WinMerge\Basque.po; DestDir: {app}\Languages; Components: Languages\Basque; Flags: ignoreversion comparetimestamp\r
436 Source: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt; DestDir: {app}\Docs; Components: Languages\Basque\r
437 Source: ..\..\Translations\WinMerge\Brazilian.po; DestDir: {app}\Languages; Components: Languages\PortugueseBrazilian; Flags: ignoreversion comparetimestamp\r
438 Source: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt; DestDir: {app}\Docs; Components: Languages\PortugueseBrazilian\r
439 Source: ..\..\Translations\WinMerge\Bulgarian.po; DestDir: {app}\Languages; Components: Languages\Bulgarian; Flags: ignoreversion comparetimestamp\r
440 Source: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt; DestDir: {app}\Docs; Components: Languages\Bulgarian\r
441 Source: ..\..\Translations\WinMerge\Catalan.po; DestDir: {app}\Languages; Components: Languages\Catalan; Flags: ignoreversion comparetimestamp\r
442 Source: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt; DestDir: {app}\Docs; Components: Languages\Catalan\r
443 Source: ..\..\Translations\WinMerge\ChineseSimplified.po; DestDir: {app}\Languages; Components: Languages\Chinese_Simplified; Flags: ignoreversion comparetimestamp\r
444 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Simplified\r
445 Source: ..\..\Translations\WinMerge\ChineseTraditional.po; DestDir: {app}\Languages; Components: Languages\Chinese_Traditional; Flags: ignoreversion comparetimestamp\r
446 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Traditional\r
447 Source: ..\..\Translations\WinMerge\Croatian.po; DestDir: {app}\Languages; Components: Languages\Croatian; Flags: ignoreversion comparetimestamp\r
448 Source: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt; DestDir: {app}\Docs; Components: Languages\Croatian\r
449 Source: ..\..\Translations\WinMerge\Czech.po; DestDir: {app}\Languages; Components: Languages\Czech; Flags: ignoreversion comparetimestamp\r
450 Source: ..\..\Translations\WinMerge\Danish.po; DestDir: {app}\Languages; Components: Languages\Danish; Flags: ignoreversion comparetimestamp\r
451 Source: ..\..\Translations\WinMerge\Dutch.po; DestDir: {app}\Languages; Components: Languages\Dutch; Flags: ignoreversion comparetimestamp\r
452 Source: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt; DestDir: {app}\Docs; Components: Languages\Dutch\r
453 Source: ..\..\Translations\WinMerge\French.po; DestDir: {app}\Languages; Components: Languages\French; Flags: ignoreversion comparetimestamp\r
454 Source: ..\..\Translations\Docs\Readme\ReadMe-French.txt; DestDir: {app}\Docs; Components: Languages\French\r
455 Source: ..\..\Translations\WinMerge\Galician.po; DestDir: {app}\Languages; Components: Languages\Galician; Flags: ignoreversion comparetimestamp\r
456 Source: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt; DestDir: {app}\Docs; Components: Languages\Galician\r
457 Source: ..\..\Translations\WinMerge\German.po; DestDir: {app}\Languages; Components: Languages\German; Flags: ignoreversion comparetimestamp\r
458 Source: ..\..\Translations\WinMerge\Greek.po; DestDir: {app}\Languages; Components: Languages\Greek; Flags: ignoreversion comparetimestamp\r
459 Source: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt; DestDir: {app}\Docs; Components: Languages\Greek\r
460 Source: ..\..\Translations\WinMerge\Hungarian.po; DestDir: {app}\Languages; Components: Languages\Hungarian; Flags: ignoreversion comparetimestamp\r
461 Source: ..\..\Translations\WinMerge\Italian.po; DestDir: {app}\Languages; Components: Languages\Italian; Flags: ignoreversion comparetimestamp\r
462 Source: ..\..\Translations\WinMerge\Japanese.po; DestDir: {app}\Languages; Components: Languages\Japanese; Flags: ignoreversion comparetimestamp\r
463 Source: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt; DestDir: {app}\Docs; Components: Languages\Japanese\r
464 Source: ..\..\Build\Manual\htmlhelp\WinMerge_ja.chm; DestDir: {app}\Docs; Components: Languages\Japanese\r
465 Source: ..\..\Translations\WinMerge\Korean.po; DestDir: {app}\Languages; Components: Languages\Korean; Flags: ignoreversion comparetimestamp\r
466 Source: ..\..\Translations\WinMerge\Norwegian.po; DestDir: {app}\Languages; Components: Languages\Norwegian; Flags: ignoreversion comparetimestamp\r
467 Source: ..\..\Translations\WinMerge\Persian.po; DestDir: {app}\Languages; Components: Languages\Persian; Flags: ignoreversion comparetimestamp\r
468 Source: ..\..\Translations\WinMerge\Polish.po; DestDir: {app}\Languages; Components: Languages\Polish; Flags: ignoreversion comparetimestamp\r
469 Source: ..\..\Translations\WinMerge\Portuguese.po; DestDir: {app}\Languages; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp\r
470 Source: ..\..\Translations\WinMerge\Romanian.po; DestDir: {app}\Languages; Components: Languages\Romanian; Flags: ignoreversion comparetimestamp\r
471 Source: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt; DestDir: {app}\Docs; Components: Languages\Romanian\r
472 Source: ..\..\Translations\WinMerge\Russian.po; DestDir: {app}\Languages; Components: Languages\Russian; Flags: ignoreversion comparetimestamp\r
473 Source: ..\..\Translations\WinMerge\Serbian.po; DestDir: {app}\Languages; Components: Languages\Serbian; Flags: ignoreversion comparetimestamp\r
474 Source: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt; DestDir: {app}\Docs; Components: Languages\Serbian\r
475 Source: ..\..\Translations\WinMerge\Slovak.po; DestDir: {app}\Languages; Components: Languages\Slovak; Flags: ignoreversion comparetimestamp\r
476 Source: ..\..\Translations\WinMerge\Slovenian.po; DestDir: {app}\Languages; Components: Languages\Slovenian; Flags: ignoreversion comparetimestamp\r
477 Source: ..\..\Translations\WinMerge\Spanish.po; DestDir: {app}\Languages; Components: Languages\Spanish; Flags: ignoreversion comparetimestamp\r
478 Source: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt; DestDir: {app}\Docs; Components: Languages\Spanish\r
479 Source: ..\..\Translations\WinMerge\Swedish.po; DestDir: {app}\Languages; Components: Languages\Swedish; Flags: ignoreversion comparetimestamp\r
480 Source: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt; DestDir: {app}\Docs; Components: Languages\Swedish\r
481 Source: ..\..\Translations\WinMerge\Turkish.po; DestDir: {app}\Languages; Components: Languages\Turkish; Flags: ignoreversion comparetimestamp\r
482 Source: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt; DestDir: {app}\Docs; Components: Languages\Turkish\r
483 Source: ..\..\Translations\WinMerge\Ukrainian.po; DestDir: {app}\Languages; Components: Languages\Ukrainian; Flags: ignoreversion comparetimestamp\r
484 Source: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt; DestDir: {app}\Docs; Components: Languages\Ukrainian\r
485 \r
486 Source: ..\..\Filters\*.flt; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
487 Source: ..\..\Filters\FileFilter.tmpl; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
488 \r
489 ;Documentation\r
490 Source: ..\..\Docs\Users\ReadMe.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
491 Source: ..\..\Docs\Users\Contributors.txt; DestDir: {app}; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
492 Source: ..\..\Docs\Users\ReleaseNotes.html; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
493 Source: ..\..\Docs\Users\ChangeLog.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
494 Source: ..\..\Build\Manual\htmlhelp\WinMerge.chm; DestDir: {app}\Docs\; Flags: overwritereadonly uninsremovereadonly; Components: Core\r
495 Source: ..\..\Docs\users\GPL.rtf; DestDir: {app}\Docs\; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
496 \r
497 ;Plugins\r
498 ;Please note IgnoreVersion and CompareTimeStamp are to instruct the installer to not not check for version info and go straight to comparing modification dates\r
499 Source: ..\..\Plugins\dlls\editor addin.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
500 Source: ..\..\Plugins\dlls\insert datetime.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
501 Source: ..\..\Plugins\dlls\CompareMSExcelFiles.sct; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
502 Source: ..\..\Plugins\dlls\CompareMSWordFiles.sct; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
503 Source: ..\..\Plugins\dlls\ApplyPatch.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
504 Source: ..\..\Plugins\dlls\IgnoreColumns.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
505 Source: ..\..\Plugins\dlls\IgnoreCommentsC.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
506 Source: ..\..\Plugins\dlls\IgnoreFieldsComma.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
507 Source: ..\..\Plugins\dlls\IgnoreFieldsTab.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
508 Source: ..\..\Plugins\dlls\IgnoreLeadingLineNumbers.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins\r
509 \r
510 ;Frhed\r
511 Source: ..\..\Externals\frhed\GPL.txt; DestDir: {app}\Frhed; Components: Frhed\r
512 ;Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\frhed.exe; DestDir: {app}\Frhed; Components: Frhed\r
513 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\hekseditU.dll; DestDir: {app}\Frhed; Components: Frhed\r
514 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Docs\ChangeLog.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
515 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Docs\Contributors.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
516 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Docs\History.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
517 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Docs\Links.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
518 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Docs\Sample.tpl  ; DestDir: {app}\Frhed\Docs; Components: Frhed\r
519 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Languages\de.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
520 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Languages\fr.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
521 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Languages\ja.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
522 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Languages\nl.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
523 Source: ..\..\Externals\frhed\Build\FRHED_vc10\Win32\UnicodeRelease\Languages\heksedit.lng; DestDir: {app}\Frhed\Languages; Components: Frhed\r
524 \r
525 ;WinIMerge\r
526 Source: ..\..\Externals\winimerge\GPL.txt; DestDir: {app}\WinIMerge; Components: WinIMerge\r
527 Source: ..\..\Externals\winimerge\freeimage-license-gplv2.txt; DestDir: {app}\WinIMerge; Components: WinIMerge\r
528 ;Source: ..\..\Externals\winimerge\Build\Release\WinIMerge.exe; DestDir: {app}\WinIMerge; Components: WinIMerge\r
529 Source: ..\..\Externals\winimerge\Build\Release\WinIMergeLib.dll; DestDir: {app}\WinIMerge; Components: WinIMerge\r
530 Source: {#VS120COMNTOOLS}\..\..\VC\redist\x86\Microsoft.VC120.OpenMP\vcomp120.dll; DestDir: {app}; Components: WinIMerge\r
531 \r
532 ;GnuWin32 Patch for Windows\r
533 Source: C:\Program Files\WinMerge\GnuWin32\*.*; DestDir: {app}\GnuWin32; Flags: recursesubdirs; Components: Patch\r
534 \r
535 [Dirs]\r
536 Name: "{app}\MergePlugins"\r
537 \r
538 [Icons]\r
539 ;Start Menu Icons\r
540 Name: {group}\WinMerge; Filename: {app}\{code:ExeName}; AppUserModelID: "Thingamahoochie.WinMerge"\r
541 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe.txt; IconFileName: {win}\NOTEPAD.EXE\r
542 Name: {group}\{cm:UsersGuide}; Filename: {app}\Docs\WinMerge.chm\r
543 Name: {group}\{cm:UninstallProgram,WinMerge}; Filename: {uninstallexe}\r
544 Name: {group}\{cm:ProgramOnTheWeb,WinMerge}; Filename: http://www.geocities.co.jp/SiliconValley-SanJose/8165/\r
545 \r
546 ;Link to translated ReadMe in Start Menu\r
547 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Basque.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Basque\r
548 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Brazilian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: PortugueseBrazilian\r
549 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Bulgarian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Bulgarian\r
550 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Catalan.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Catalan\r
551 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseSimplified.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Simplified\r
552 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseTraditional.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Traditional\r
553 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Croatian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Croatian\r
554 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Dutch.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Dutch\r
555 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-French.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: French\r
556 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Galician.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Galician\r
557 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Greek.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Greek\r
558 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Japanese.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Japanese\r
559 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Romanian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Romanian\r
560 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Serbian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Serbian\r
561 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Spanish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Spanish\r
562 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Swedish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Swedish\r
563 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Turkish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Turkish\r
564 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Ukrainian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Ukrainian\r
565 \r
566 ;Desktop Icon\r
567 Name: {commondesktop}\WinMerge; Filename: {app}\{code:ExeName}; Tasks: desktopicon\r
568 \r
569 ;Quick Launch Icon\r
570 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon\r
571 \r
572 [Registry]\r
573 Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
574 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
575 Root: HKLM; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
576 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
577 \r
578 ;Add Project file extension (.WinMerge) to known extensions and\r
579 ;set WinMerge to open those files\r
580 ;set Notepad to edit project files\r
581 Root: HKCR; Subkey: .WinMerge; ValueType: String; ValueData: WinMerge.Project.File; Flags: uninsdeletekey\r
582 Root: HKCR; Subkey: WinMerge.Project.File; ValueType: String; ValueData: {cm:ProjectFileDesc}; Flags: uninsdeletekey\r
583 Root: HKCR; Subkey: WinMerge.Project.File\shell\open\command; ValueType: String; ValueData: """{app}\{code:ExeName}"" ""%1"""; Flags: uninsdeletekey\r
584 Root: HKCR; Subkey: WinMerge.Project.File\shell\edit\command; ValueType: String; ValueData: """NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletekey\r
585 Root: HKCR; Subkey: WinMerge.Project.File\DefaultIcon; ValueType: String; ValueData: """{app}\{code:ExeName}"",1"; Flags: uninsdeletekey\r
586 \r
587 ; delete obsolete values\r
588 ;In Inno Setup Version 4.18 ValueData couldn't be null and compile,\r
589 ;if this is fixed in a later version feel free to remove the parameter\r
590 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: LeftMax; Flags: deletevalue\r
591 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: DirViewMax; Flags: deletevalue\r
592 \r
593 ;This removes the key that remembers which messageboxes to hide from the user, this is because the text of that message\r
594 ;can change and make it more clear as to the user why they might want to pay attention to a particular dialog and also\r
595 ;because a particular message might be added or removed and a new message might occupy a previous message's ID number\r
596 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge\MessageBoxes; ValueType: none; Flags: deletekey\r
597 \r
598 Root: HKCR; SubKey: Directory\Shell\WinMerge\command; ValueType: none; Flags: deletekey noerror\r
599 Root: HKCR; SubKey: Directory\Shell\WinMerge; ValueType: none; Flags: deletekey noerror\r
600 \r
601 ;Adds "Start Menu" --> "Run" Support for WinMerge\r
602 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: none; Flags: uninsdeletekey\r
603 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: none; Flags: uninsdeletekey\r
604 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}\r
605 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}\r
606 \r
607 ;Registry Keys for use by ShellExtension.dll\r
608 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\{code:ExeName}\r
609 \r
610 ;Enables or disables the Context Menu preference based on what the user selects during install\r
611 ;Initially the Context menu is explicitly disabled:\r
612 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 0;\r
613 \r
614 ;If the user chose to use the context menu then we re-enable it.  This is necessary so it'll turn on and off not just on.\r
615 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension\r
616 Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: {code:ShellMenuEnabled}\r
617 \r
618 ;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application\r
619 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
620 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
621 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
622 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
623 \r
624 ;Tells TortoiseCVS to use WinMerge as its differencing application (this happens whether or not Tortoise is current installed, that way\r
625 ;if it is installed at a later date this will automatically support it)\r
626 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
627 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
628 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
629 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
630 \r
631 ;Set WinMerge as TortoiseGit diff tool\r
632 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseGit\r
633 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGITMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool\r
634 \r
635 ;Set WinMerge as TortoiseSVN diff tool\r
636 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN\r
637 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGITMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool\r
638 \r
639 ;Whatever the user chooses at the [Select Setup Language] dialog should also determine what language WinMerge will start up in\r
640 ;(unless the user already has a startup language specified)\r
641 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000042d; Flags: deletevalue; Languages: Basque\r
642 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000402; Flags: deletevalue; Languages: Bulgarian\r
643 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000403; Flags: deletevalue; Languages: Catalan\r
644 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000804; Flags: deletevalue; Languages: Chinese_Simplified\r
645 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000404; Flags: deletevalue; Languages: Chinese_Traditional\r
646 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041a; Flags: deletevalue; Languages: Croatian\r
647 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000405; Flags: deletevalue; Languages: Czech\r
648 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000406; Flags: deletevalue; Languages: Danish\r
649 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000413; Flags: deletevalue; Languages: Dutch\r
650 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000409; Flags: deletevalue; Languages: English\r
651 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040c; Flags: deletevalue; Languages: French\r
652 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000456; Flags: deletevalue; Languages: Galician\r
653 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000407; Flags: deletevalue; Languages: German\r
654 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000408; Flags: deletevalue; Languages: Greek\r
655 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040e; Flags: deletevalue; Languages: Hungarian\r
656 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000410; Flags: deletevalue; Languages: Italian\r
657 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000411; Flags: deletevalue; Languages: Japanese\r
658 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000412; Flags: deletevalue; Languages: Korean\r
659 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000414; Flags: deletevalue; Languages: Norwegian\r
660 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000429; Flags: deletevalue; Languages: Persian\r
661 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000415; Flags: deletevalue; Languages: Polish\r
662 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000816; Flags: deletevalue; Languages: Portuguese\r
663 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000416; Flags: deletevalue; Languages: PortugueseBrazilian\r
664 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000418; Flags: deletevalue; Languages: Romanian\r
665 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000419; Flags: deletevalue; Languages: Russian\r
666 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c1a; Flags: deletevalue; Languages: Serbian\r
667 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041b; Flags: deletevalue; Languages: Slovak\r
668 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000424; Flags: deletevalue; Languages: Slovenian\r
669 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c0a; Flags: deletevalue; Languages: Spanish\r
670 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041D; Flags: deletevalue; Languages: Swedish\r
671 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041f; Flags: deletevalue; Languages: Turkish\r
672 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000422; Flags: deletevalue; Languages: Ukrainian\r
673 \r
674 \r
675 [Run]\r
676 ;This will no longer appear unless the user chose to make a start menu group in the first place\r
677 Filename: {win}\Explorer.exe; Description: {cm:ViewStartMenuFolder}; Parameters: """{group}"""; Flags: waituntilidle postinstall skipifsilent unchecked; Check: GroupCreated\r
678 \r
679 Filename: {app}\{code:ExeName}; Description: {cm:LaunchProgram, WinMerge}; Flags: nowait postinstall skipifsilent runmaximized\r
680 \r
681 \r
682 [UninstallDelete]\r
683 ;Remove 7-zip integration dlls possibly installed (by hand or using separate installer)\r
684 Name: {app}\Merge7z*.dll; Type: files\r
685 Name: {app}\7zip_pad.xml; Type: files\r
686 Name: {app}\Codecs; Type: filesandordirs\r
687 Name: {app}\Formats; Type: filesandordirs\r
688 Name: {app}\Lang; Type: filesandordirs\r
689 \r
690 Name: {group}; Type: dirifempty\r
691 Name: {app}; Type: dirifempty\r
692 \r
693 \r
694 [Code]\r
695 Var\r
696     g_CheckListBox: TNewCheckListBox;\r
697 \r
698 {Determines whether or not the user chose to create a start menu}\r
699 Function GroupCreated(): boolean;\r
700 Var\r
701     {Stores the path of the start menu group Inno Setup may have created}\r
702     strGroup_Path: string;\r
703 Begin\r
704     {Saves the path that Inno Setup intended to create the start menu group at}\r
705     strGroup_Path := ExpandConstant('{group}');\r
706 \r
707     {If the start menu path isn't blank then..}\r
708     if strGroup_Path <> '' Then\r
709         Begin\r
710             {If the user choose to create the start menu then this folder will exist.\r
711             If the folder exists then GroupCreated = True otherwise it does not.}\r
712             Result := DirExists(strGroup_Path)\r
713         end\r
714     else\r
715         {Since the start menu path is null, we know that the user chose not to create a\r
716         start menu group (note in Inno Setup 4.18 this didn't yet work, but I'm sure it will in the future}\r
717         Result := False;\r
718 \r
719      {Debug\r
720 \r
721     If DirExists(strGroup_Path) = True Then\r
722         Msgbox('The group "' + ExpandConstant('group') + '" was found', mbInformation, mb_ok)\r
723     Else\r
724         Msgbox('The group "' + ExpandConstant('group') + '" doesn''t exist.', mbInformation, mb_ok); }\r
725 End;\r
726 \r
727 \r
728 {Returns the appropriate name of the .EXE being installed}\r
729 Function ExeName(Unused: string): string;\r
730 Begin\r
731   Result := 'WinMergeU.exe';\r
732 End;\r
733 \r
734 Function FixVersion(strInput: string): string;\r
735 {Returns a version with four segments A.B.C.D}\r
736 Var\r
737   {Stores the number of periods found within the version string}\r
738   intPeriods: integer;\r
739 \r
740   {Creates a counter}\r
741   i: integer;\r
742 \r
743   {Generates the string to be returned to the user}\r
744   strVersion: string;\r
745 Begin\r
746 \r
747   {Creates a copy of the input string before we tear it apart}\r
748   strVersion := strInput;\r
749 \r
750   {Until strInput is empty do..}\r
751   While Length(strInput) > 0 do\r
752     Begin\r
753       {if the first character of the input string is a period then}\r
754       If Copy(strInput, 1, 1) = '.' Then\r
755 \r
756         {Incriment the number of periods found}\r
757         intPeriods := intPeriods + 1;\r
758 \r
759       {Remove the first character from the Input string}\r
760       strInput := Copy(strINput, 2, length(strINput));\r
761     End;\r
762 \r
763   {For every period shy of 3 do..}\r
764   For i := 1 to 3 - intperiods do\r
765 \r
766     {Add a '.0' to the version string}\r
767     strVersion := strVersion + '.0';\r
768 \r
769   {Returns the Version string with the correct number of segments}\r
770   Result := strVersion;\r
771 \r
772 End;\r
773 \r
774 Function RemoveLeadingZeros(strInput: string): string;\r
775 {Removes the leading zeros if any from a numeric string}\r
776 Begin\r
777 \r
778   {While the first character of the string is a zero}\r
779   While Copy(strInput, 1, 1) = '0' Do\r
780     begin\r
781 \r
782     {Removes one leading zero from the input string}\r
783       strInput := Copy(strInput, 2, Length(strINput));\r
784     end;\r
785 \r
786   {Returns the formatted string}\r
787   Result := strInput;\r
788 \r
789 End;\r
790 \r
791 \r
792 {Returns whether or not the version string detected is meets the version number requirement}\r
793 Function VersionAtLeast(strVersion_Installed: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;\r
794 Var\r
795 \r
796   {Stores the Major of the Version installed (X.0.0.0)}\r
797   intMajor_Installed: Integer;\r
798 \r
799   {Stores the Minor of the Version installed (1.X.0.0)}\r
800   intMinor_Installed: Integer;\r
801 \r
802   {Stores the Revision of the Version installed (1.0.X.0)}\r
803   intRevision_Installed: Integer;\r
804 \r
805   {Stores the Revision of the Version installed (1.0.0.X)}\r
806   intBuild_Installed: Integer;\r
807 \r
808   {Stores the last valid character of a particular segment (Major, Minor, Revision) of the Version string}\r
809   intEnd_Pos: Integer;\r
810 \r
811 begin\r
812   {Debug\r
813   Msgbox('The version installed is ' + strVersion_Installed + ' and the required version is ' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild), mbINformation, mb_OK)\r
814         }\r
815 \r
816   {Makes sure the version string contains four numberic segments 5.2 ---> 5.2.0.0}\r
817   strVersion_Installed := FixVersion(strVersion_Installed);\r
818 \r
819   {If the version number is empty then quit the function}\r
820   if strVersion_Installed = '' Then\r
821     begin\r
822       Result := False;\r
823 \r
824       {Stops analyzing the version installed and returns that the version installed was inadequate}\r
825       exit;\r
826     end;\r
827 \r
828   {Starts detecting the Major value of the Version Installed}\r
829 \r
830   {Sets the end position equal to one character before the first period in the version number}\r
831   intEnd_Pos := Pos('.', strVersion_Installed) -1\r
832 \r
833   {Sets the major version equal to all character before the first period }\r
834   intMajor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);\r
835 \r
836   {Debug\r
837   msgbox('The Major version installed is ' + IntToStr(intMajor_installed) + ' and the required Major is ' + IntToStr(intMajor) + '.', mbInformation, MB_OK)\r
838         }\r
839 \r
840   {If the Major Version Installed is greater than the required value then...}\r
841   if intMajor_Installed > intMajor Then\r
842     begin\r
843       {Returns that the version number was adequate, since it actually exceeded the requirement}\r
844       Result := True;\r
845 \r
846         {Debug\r
847         msgbox(IntToStr(intMajor_installed) + ' > ' +  IntToStr(intMajor), mbInformation, MB_OK)\r
848         }\r
849 \r
850       {Stops analyzing the version number since we already know it met the requirement}\r
851       exit;\r
852     end;\r
853 \r
854   {If the Major version installed is less than the requirement then...}\r
855   If intMajor_Installed < intMajor Then\r
856     begin\r
857       {Debug\r
858        msgbox(IntToStr(intMajor_installed) + ' < ' +  IntToStr(intMajor), mbInformation, MB_OK)\r
859        }\r
860 \r
861       Result := False;\r
862 \r
863       {Stops analyzing the version number since we already know it's inadequate and returns False (inadequate)}\r
864       exit;\r
865     end;\r
866 \r
867 \r
868   {Starts detecting the Minor version of the Version Installed}\r
869 \r
870   {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Major Version)}\r
871   strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
872 \r
873   {Sets the end position equal to one character before the first period in the version number}\r
874   intEnd_Pos := Pos('.', strVersion_Installed) -1\r
875 \r
876   {Sets the Minor version equal to all character before the first period }\r
877         intMinor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0)\r
878 \r
879         {Debug\r
880   msgbox('The Minor version installed is ' + IntToStr(intMinor_installed) + ' and the required Minor is ' + IntToStr(intMinor) + '.', mbInformation, MB_OK)\r
881         }\r
882 \r
883         {If the Minor Version Installed is greater than the required value then...}\r
884         If intMinor_Installed > intMinor Then\r
885     begin\r
886       {Returns that the version number was adequate}\r
887       Result := True;\r
888 \r
889       {Stops further analyzation of the version number}\r
890       exit\r
891     end;\r
892 \r
893   {If the minor installed is less than what was required}\r
894   If intMinor_Installed < intMinor Then\r
895     Begin\r
896       Result := False;\r
897 \r
898       {Returns that the version installed did not meet the required value and stops analyzing the version number}\r
899       exit;\r
900     end;\r
901 \r
902 \r
903   {Starts Detecting the Revision of the Version Installed}\r
904 \r
905         {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Minor Version)}\r
906         strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
907 \r
908         {Sets the last character of the Revision to last character before the first period}\r
909         intEnd_Pos := Pos('.', strVersion_Installed) -1\r
910 \r
911         {Sets the Revision Installed equal to everything before the first period}\r
912         intRevision_Installed := strToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);\r
913 \r
914         {Debug\r
915   msgbox('The Revision version installed is ' + IntToStr(intRevision_installed) + ' and the required Revision is ' + IntToStr(intRevision) + '.', mbInformation, MB_OK)\r
916         }\r
917 \r
918         {If the Revision Installed is greater than the required value then...}\r
919   If intRevision_Installed > intRevision Then\r
920     begin\r
921       {Return that the version installed was adequate}\r
922       Result := True;\r
923 \r
924       {Stops further analyzation of the version number}\r
925       exit\r
926     end;\r
927 \r
928   {If the revision installed did not meet the requirement then...}\r
929   If intRevision_Installed < intRevision Then\r
930     begin\r
931       Result := False;\r
932 \r
933     {Return that the version number failed to meet the requirement and stops further analyzation of the version number}\r
934       exit;\r
935     end;\r
936 \r
937   {Start Detection the Build Installed}\r
938 \r
939         {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Revision) leaving behind only the build number}\r
940         strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
941 \r
942         {Set the build installed = to what's left of the strVersion_Installed text}\r
943         intBuild_installed := strToIntDef(RemoveLeadingZeros(strVersion_Installed), 0);\r
944 \r
945         {Debug\r
946   msgbox('The Build version installed is ' + IntToStr(intBuild_installed) + ' and the required Build is ' + IntToStr(intBuild) + '.', mbInformation, MB_OK)\r
947         }\r
948 \r
949         {If the build installed is greater than or equal to the requirement then...}\r
950         if intBuild_installed >= intBuild Then\r
951 \r
952          {Report that the version installed was adequate}\r
953     Result := True\r
954   else\r
955 \r
956     {Reports the inadequacy of the version installed and seases processing }\r
957     Result := False;\r
958 end;\r
959 \r
960 \r
961 {Determines whether or not TortoiseCVS is installed}\r
962 Function TortoiseCVSInstalled(): boolean;\r
963 Begin\r
964         {This absolutely must remain as \CustomIcons, because our application used to create some TortoiseCVS keys even if the application wasn't installed!}\r
965     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\CustomIcons') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\Icons');\r
966 End;\r
967 \r
968 {Determines whether or not TortoiseGit is installed}\r
969 Function TortoiseGitInstalled(): boolean;\r
970 Begin\r
971     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseGit') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseGit');\r
972 End;\r
973 \r
974 {Determines whether or not TortoiseSVN is installed}\r
975 Function TortoiseSVNInstalled(): boolean;\r
976 Begin\r
977     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseSVN') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseSVN');\r
978 End;\r
979 \r
980 Function OldGroup(): string;\r
981 Begin\r
982     {Stores where in \All Users\Programs\ our start menu used to be located}\r
983      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1', 'Inno Setup: Icon Group', Result)\r
984 End;\r
985 \r
986 Procedure DeletePreviousStartMenu();\r
987 Var\r
988         strOld: string;\r
989         strNew: string;\r
990         strMessage: string;\r
991         strShortcut: string;\r
992 Begin\r
993     {Detects the previous start menu group's path, if any}\r
994     strOld := OldGroup();\r
995 \r
996     {Detects the current start menu group's path, if any (not creating a group is a valid option)}\r
997     strNew := ExpandConstant('{group}');\r
998 \r
999     {removes the start menu portion of the path from the group path making it match the format of strOld}\r
1000     StringChange(strNew, ExpandConstant('{commonprograms}\'), '')\r
1001 \r
1002     {if the user does have a previous start menu location then..}\r
1003     If strOld <> '' Then\r
1004         Begin\r
1005             {If the current and previous start menu locations are different then...}\r
1006             If Uppercase(strOld) <> UpperCase(strNew) Then\r
1007                 Begin\r
1008                     strMessage := ExpandConstant('{cm:DeletePreviousStartMenu}');\r
1009                     strMessage := Format(strMessage, [strOld, strNew]);\r
1010 \r
1011                     {Display a dialog asking the user if they'd like to delete the previous start menu group}\r
1012                     {If they'd like to delete the previous start menu group then...}\r
1013                     If Msgbox(strMessage, mbConfirmation, mb_YesNo) = mrYes Then\r
1014                         Begin\r
1015                             strOld := ExpandConstant('{commonprograms}\') + strOld;\r
1016                             {Remove old start menu}\r
1017                             DelTree(strOld, True, True, True);\r
1018                         End;\r
1019                 End;\r
1020         End;\r
1021 End;\r
1022 \r
1023 {This event procedure is queed each time the user changes pages within the installer}\r
1024 Procedure CurPageChanged(CurPage: integer);\r
1025 Begin\r
1026     {if the installer reaches the file copy page then...}\r
1027     If CurPage = wpInstalling Then\r
1028             {Delete the previous start menu group if the location has changed since the last install}\r
1029             DeletePreviousStartMenu;\r
1030 End;\r
1031 \r
1032 // Checks if context menu is already enabled for shell extension\r
1033 // If so, we won't overwrite its existing value in [Registry] section\r
1034 Function ShellMenuEnabled(Unused: string): string;\r
1035 Var\r
1036   ContextMenuEnabled: DWORD;\r
1037 Begin\r
1038   ContextMenuEnabled := 0;\r
1039   RegQueryDWORDValue(HKCU, 'Software\Thingamahoochie\WinMerge', 'ContextMenuEnabled', ContextMenuEnabled);\r
1040   if IsTaskSelected('ShellExtension') then\r
1041     Result := inttostr(ContextMenuEnabled or 1)\r
1042   else\r
1043     Result := '0';\r
1044 End;\r
1045 \r
1046 {Replace one occurrence of OldStr in Str with NewStr}\r
1047 Function ReplaceSubString(Src: string; OldStr: string; NewStr: string) : string;\r
1048 Var\r
1049     OldStrStartAt: Integer;\r
1050 \r
1051 Begin\r
1052     OldStrStartAt := Pos(OldStr, Src);\r
1053     if OldStrStartAt > 0 then\r
1054     begin\r
1055         {Remove old string}\r
1056         Delete(Src, OldStrStartAt, Length(OldStr));\r
1057         {Insert new string}\r
1058         Insert(NewStr, Src, OldStrStartAt);\r
1059     end;\r
1060     Result := Src;\r
1061 End;\r
1062 \r
1063 {Returns WinMerge installed exeutable file name}\r
1064 Function WinMergeExeName(): string;\r
1065 Var\r
1066         Unused: String;\r
1067 \r
1068 Begin\r
1069     Result := ExpandConstant('{app}\') + ExeName(Unused);\r
1070 End;\r
1071 \r
1072 {Returns ClearCase external tools configuration file name}\r
1073 Function ClearCaseMapFile(): string;\r
1074 Begin\r
1075     if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Rational Software\', 'RSINSTALLDIR', Result) then\r
1076     begin\r
1077         Result := {pf} + '\Rational\';\r
1078     end;\r
1079     Result := Result + 'ClearCase\lib\mgrs\map';\r
1080 End;\r
1081 \r
1082 {Determines whether or not Rational ClearCase is installed}\r
1083 Function ClearCaseInstalled(): boolean;\r
1084 Begin\r
1085     Result := FileExists(ClearCaseMapFile());\r
1086 End;\r
1087 \r
1088 {Intergrate WinMerge as ClearCase external diff tool}\r
1089 Procedure IntegrateClearCase(OldExe: String; NewExe: String);\r
1090 Var\r
1091     MapFile: TStringList;\r
1092     FileName: String;\r
1093     I: Integer;\r
1094     BakFile: String;\r
1095 \r
1096 Begin\r
1097     FileName := ClearCaseMapFile();\r
1098     {Create a backup file of the original file first time it gets modified}\r
1099     BakFile := FileName + '.original';\r
1100     if not FileExists(BakFile) then\r
1101     begin\r
1102         FileCopy(FileName, BakFile, True);\r
1103     end;\r
1104     MapFile := TStringList.Create();\r
1105     {Read the entire map file to a string list}\r
1106     MapFile.LoadFromFile(FileName);\r
1107     if MapFile.Count > 0 then\r
1108     begin\r
1109         for I := 0 to MapFile.Count do\r
1110         begin\r
1111             {Search for the 'text_file_delta xcompare ...' line}\r
1112                         if (MapFile.Strings[I][1] <> ';') and (Pos('text_file_delta', MapFile.Strings[I]) > 0) and (Pos('xcompare', MapFile.Strings[I]) > 0) then\r
1113                         begin\r
1114                                 {Replace old executable name with a new executable name}\r
1115                                 MapFile.Strings[I] := ReplaceSubString(MapFile.Strings[I], OldExe, NewExe);\r
1116                             break;\r
1117                         end;\r
1118                 end;\r
1119                 { Save the modified file. }\r
1120                 MapFile.SaveToFile(FileName);\r
1121         end;\r
1122 End;\r
1123 \r
1124 // Add WinMerge to system path.\r
1125 // This requires certain order of things to work:\r
1126 // #1 ModPathDir function must be first (it gets called by others)\r
1127 // #2 include of modpath.iss so modpath code gets included\r
1128 // #3 CurStepChanged and CurUninstallStepChanged procedures as they call\r
1129 //    ModPath (in modpath.iss)\r
1130 function ModPathDir(): TArrayOfString;\r
1131 var\r
1132     Dir:        TArrayOfString;\r
1133 begin\r
1134     setArrayLength(Dir, 1)\r
1135         Dir[0] := ExpandConstant('{app}');\r
1136         Result := Dir;\r
1137 end;\r
1138 \r
1139 function UseAs3WayMergeTool(): Boolean;\r
1140 begin\r
1141     Result := g_CheckListBox.Checked[0];\r
1142 end;\r
1143 \r
1144 function TortoiseSVNGITMergeToolCommandLine(Unused: string): string;\r
1145 var\r
1146     lmr: string;\r
1147     Args: string;\r
1148 begin\r
1149     if g_CheckListBox.Checked[1] then begin\r
1150         lmr := 'r';\r
1151         Args := '/e /ub /fr /wl /wm /dl %bname /dm %tname /dr %yname  %base %theirs %mine /o %merged';\r
1152     end else if g_CheckListBox.Checked[2] then begin\r
1153         lmr := 'm';\r
1154         Args := '/e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname  %theirs %base %mine /o %merged';\r
1155     end else begin\r
1156         lmr := 'l';\r
1157         Args := '/e /ub /fl /wm /wr /dl %yname /dm %tname /dr %bname  %mine %theirs %base /o %merged';\r
1158     end;\r
1159     if g_CheckListBox.Checked[4] then begin\r
1160         Args := Args + ' /a' + lmr;\r
1161     end;\r
1162     Result := WinMergeExeName() + ' ' + Args;\r
1163 end;\r
1164 \r
1165 function ThreeWayMergePage_ShouldSkipPage(Page: TWizardPage): Boolean;\r
1166 begin\r
1167     Result := not (IsTaskSelected('TortoiseSVN') or IsTaskSelected('TortoiseGIT'));\r
1168 end;\r
1169 \r
1170 #include "modpath.iss"\r
1171 \r
1172 procedure CurStepChanged(CurStep: TSetupStep);\r
1173 Begin\r
1174     if CurStep = ssPostInstall then\r
1175     begin\r
1176                 if IsTaskSelected('modifypath') then\r
1177                         ModPath();\r
1178         if IsTaskSelected('ClearCase') then\r
1179         begin\r
1180             IntegrateClearCase('..\..\bin\cleardiffmrg.exe', WinMergeExeName());\r
1181         end;\r
1182     end;\r
1183 End;\r
1184 \r
1185 Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);\r
1186 var\r
1187         appdir:                 String;\r
1188         selectedTasks:  AnsiString;\r
1189 Begin\r
1190         appdir := ExpandConstant('{app}')\r
1191         if CurUninstallStep = usUninstall then begin\r
1192                 if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then\r
1193                         if Pos('modifypath', selectedTasks) > 0 then\r
1194                                 ModPath();\r
1195                 DeleteFile(appdir + '\uninsTasks.txt')\r
1196         end;\r
1197 \r
1198     if CurUninstallStep = usPostUninstall then\r
1199     begin\r
1200       if ClearCaseInstalled() then\r
1201         IntegrateClearCase(WinMergeExeName(), '..\..\bin\cleardiffmrg.exe');\r
1202     end;\r
1203 End;\r
1204 \r
1205 function BooleanToString(Value : Boolean) : String; \r
1206 begin\r
1207   if Value then\r
1208     Result := 'true'\r
1209   else\r
1210     Result := 'false';\r
1211 end;\r
1212 \r
1213 function StringToBoolean(Value : String) : Boolean; \r
1214 begin\r
1215   if Value = 'true' then\r
1216     Result := true\r
1217   else\r
1218     Result := false;\r
1219 end;\r
1220 \r
1221 procedure RegisterPreviousData(PreviousDataKey: Integer);\r
1222 begin\r
1223   SetPreviousData(PreviousDataKey, 'UseAs3WayMergeTool', BooleanToString(g_CheckListBox.Checked[0]));\r
1224   SetPreviousData(PreviousDataKey, 'MergeAtRightPane', BooleanToString(g_CheckListBox.Checked[1]));\r
1225   SetPreviousData(PreviousDataKey, 'MergeAtCenterPane', BooleanToString(g_CheckListBox.Checked[2]));\r
1226   SetPreviousData(PreviousDataKey, 'MergeAtLeftPane', BooleanToString(g_CheckListBox.Checked[3]));\r
1227   SetPreviousData(PreviousDataKey, 'AutoMergeAtStartup', BooleanToString(g_CheckListBox.Checked[4]));\r
1228 end;\r
1229 \r
1230 function GetSysColor(ColorType: Integer): Integer;\r
1231 external 'GetSysColor@user32.dll';\r
1232 \r
1233 procedure InitializeWizard();\r
1234 var\r
1235   Page: TWizardPage;\r
1236 begin\r
1237   Page := CreateCustomPage(wpSelectTasks, ExpandConstant('{cm:ThreeWayMergeWizardPageCaption}'), ExpandConstant('{cm:ThreeWayMergeWizardPageDescription}'));\r
1238   Page.OnShouldSkipPage := @ThreeWayMergePage_ShouldSkipPage;\r
1239 \r
1240   g_CheckListBox := TNewCheckListBox.Create(Page);\r
1241   g_CheckListBox.Width := Page.SurfaceWidth;\r
1242   g_CheckListBox.Height := ScaleY(128);\r
1243   g_CheckListBox.Flat := True;\r
1244   g_CheckListBox.BorderStyle := bsNone;\r
1245   g_CheckListBox.Color := GetSysColor(15);\r
1246   g_CheckListBox.Parent := Page.Surface;\r
1247   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:RegisterWinMergeAs3WayMergeTool}'), '', 0, StringToBoolean(GetPreviousData('UseAs3WayMergeTool', 'true')), True, False, True, nil);\r
1248   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtRightPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtRightPane', 'true')), True, nil);\r
1249   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtCenterPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtCenterPane', 'false')), True, nil);\r
1250   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtLeftPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtLeftPane', 'false')), True, nil);\r
1251   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:AutoMergeAtStartup}'), '', 1, StringToBoolean(GetPreviousData('AutoMergeAtStartup', 'true')), True, False, True, nil);\r
1252 end;\r