aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Visualization/vis_milk2/milkdrop.nsi
blob: c10333e6606d8570cd279951a1a4f5f73b9cfd92 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
;   LICENSE
;   -------
; Copyright 2005-2013 Nullsoft, Inc.
; All rights reserved.
; 
; Redistribution and use in source and binary forms, with or without modification, 
; are permitted provided that the following conditions are met:
; 
;   * Redistributions of source code must retain the above copyright notice,
;     this list of conditions and the following disclaimer. 
; 
;   * Redistributions in binary form must reproduce the above copyright notice,
;     this list of conditions and the following disclaimer in the documentation
;     and/or other materials provided with the distribution. 
; 
;   * Neither the name of Nullsoft nor the names of its contributors may be used to 
;     endorse or promote products derived from this software without specific prior written permission. 
;  
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR 
; CONTRIBUTORS 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.

; ----------------------------------------------------------------
; NOTE: this .nsi script was last built with 'makensis.exe' 
; version 1.98.  If you go to install it (unchanged) and get errors,
; try tracking down that older version, or try to figure out what
; has changed since then.  You can get NSIS at:
;
;               http://www.nullsoft.com/free/nsis/
; 
; This installer will produce a single EXE file that, when run, 
; will decompress and install your plugin and all of its data files 
; to Winamp 2 or Winamp 3.
; ----------------------------------------------------------------
; MODIFYING THIS SCRIPT TO CREATE AN INSTALLER FOR YOUR OWN PLUGIN:
; ----------------------------------------------------------------
;   1) there are three sections below, each marked 'EDIT THIS SECTION 
;        [x/3]' where 'x' is the section number.  These are the 3
;        places where you need to make changes to customize this
;        installer script for your particular plugin.  Go to each
;        and make the changes, reading the comments there for
;        more information.
;   2) download NSIS from http://www.nullsoft.com/free/nsis/, if you
;        haven't already.
;   3) run the command 'makensis.exe installer.nsi' to build
;        the executable.  (note: ignore the warning message about
;        'InstallRegKey' being used multiple times; this is necessary
;        to determine whether Winamp 2 or 3 is a better candidate
;        for the install.)
; ----------------------------------------------------------------
; WHAT THIS INSTALLER SCRIPT DOES:
; ----------------------------------------------------------------
;   If Winamp 2 is installed, it will install your plugin to Winamp 2, 
;   in the directory Winamp\Plugins (or whatever is specified as the 
;   vis plugins path, in Winamp\winamp.ini).  It will also select
;   the plugin as the current plugin.  (Note that Winamp must be
;   closed to do this, so if it's open, the installer will ask the 
;   user to close it before proceeding.)  At the end of a successful
;   install, it asks if they'd like to run Winamp.
; 
;   If Winamp 2 is not present but Winamp 3 is, or if the user manually
;   selects the Winamp 3 directory to install to, the plugin will be 
;   installed to Winamp 3 as a classic visualization plugin, to the 
;   directory Winamp3\Plugins.  At install time, if ClassicVis is not
;   installed, it will prompt the user to go download it.  If they
;   don't download it, it will tell them the installation failed.
;   If they already had it, or after they presumably download it,
;   the installer will briefly tell them how to select their new 
;   plugin and run it in Winamp 3, using ClassicVis.  Finally, at 
;   the end of a successful install, it asks if they'd like to run 
;   Winamp 3.
; ----------------------------------------------------------------



; -------------------- EDIT THIS SECTION [1/3] --------------------
; -------------------- EDIT THIS SECTION [1/3] --------------------
; -------------------- EDIT THIS SECTION [1/3] --------------------

  !define PLUGIN_NAME     "MilkDrop 2"                  ; Brief name of the component.  Can have spaces in it.
  !define INSTALL_CAPTION "MilkDrop 2.2 Setup"       ; Caption for the installer dialog
  !define PLUGIN_DLL      "vis_milk2.dll"              ; The filename of the actual plugin
  !define PLUGIN_OUTFILE  "milkdrop_2.exe"          ; Name of the installer to create

; ----------------------- END SECTION [1/3] -----------------------
; ----------------------- END SECTION [1/3] -----------------------
; ----------------------- END SECTION [1/3] -----------------------

; ----------------------------------------------------------------
Name ${PLUGIN_NAME}
Caption "${INSTALL_CAPTION}"
OutFile ${PLUGIN_OUTFILE}
; ----------------------------------------------------------------

; to determine the install directory, we start with Program Files\Winamp.
; then, if winamp 3 is found, override this and use that directory.
; finally, if winamp 2 is found, override again and use that directory.
InstallDir $PROGRAMFILES\Winamp
InstallDirRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp3" "UninstallString"
InstallDirRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "UninstallString"
DirText \
    "The installer has determined that this is the path to Winamp.$\rIf it is not correct, please change it.  You will not be able to proceed$\runtil a valid path is found." \
    "Select the directory in which Winamp 2 or 3 is installed:"

Function .onInit
  IfFileExists $INSTDIR\winamp.exe End      ; else if winamp.exe found (winamp2), we're good
  IfFileExists $INSTDIR\winamp3.exe End     ; if winamp3.exe found (winamp3), we're good
  IfFileExists $INSTDIR\studio.exe End      ; or if studio.exe found (older version of winamp3), we're good
  ; the above will work fine if winamp 2 or 3 is installed,
  ; but will break if winamp 2 or 3 was uninstalled *but the directory remains.*
  IfFileExists $PROGRAMFILES\Winamp\winamp.exe SelectNaturalWinamp2         ; last but not least, try the default winamp 2 directory
  IfFileExists $PROGRAMFILES\Winamp3\winamp3.exe SelectNaturalWinamp3       ; otherwise, try the default winamp 3 directory
  IfFileExists $PROGRAMFILES\Winamp3\studio.exe SelectNaturalWinamp3        ; otherwise, try the default winamp 3 directory
  ; if all of these failed, no good path to Winamp (2 or 3) could be found,
  ; and the 'Next' button will be disabled until the user can specify
  ; the correct folder.
  Goto End
  
  SelectNaturalWinamp3:
    strcpy $INSTDIR $PROGRAMFILES\Winamp3
    goto End
    
  SelectNaturalWinamp2:
    strcpy $INSTDIR $PROGRAMFILES\Winamp
    goto End  
  
  End:
FunctionEnd


Function .onVerifyInstDir
  IfFileExists $INSTDIR\Winamp.exe DirOk
  IfFileExists $INSTDIR\Winamp3.exe DirOk
  IfFileExists $INSTDIR\Studio.exe DirOk
  Abort   ; leaves the directory as the selected one, but disables the 'Next' button...
  
  DirOk:
FunctionEnd


  
  

Function QueryWinampVisPath 
  ; input: $INSTDIR, the currently-selected install dir (path to winamp)
  ; output: $1, the path to the winamp vis plugins subdirectory
  ;           -for winamp 3x, this is just $INSTDIR\plugins
  ;           -for winamp 2x, it comes from the winamp.ini file
  ;             (or just $INSTDIR\plugins if there is an error reading it.)
  IfFileExists $INSTDIR\Winamp.exe CaseWinamp2
  IfFileExists $INSTDIR\Winamp3.exe CaseWinamp3
  IfFileExists $INSTDIR\Studio.exe CaseWinamp3  ; legacy check
  goto CaseImpossible
          
  CaseWinamp2:
    StrCpy $1 $INSTDIR\Plugins\MilkDrop2
    ReadINIStr $8 $INSTDIR\winamp.ini Winamp VisDir
    StrCmp $8 "" End
    IfFileExists $8 0 End
      StrCpy $1 $8 ; update dir
    goto end
  
  CaseWinamp3: 
  CaseImpossible:
    StrCpy $1 $INSTDIR\Plugins\MilkDrop2
    goto end
    
  End: 
FunctionEnd


; The stuff to install
Section ""

  CloseWinamp2:
    ; make sure winamp is closed before we 1) try to install files
    ; and 2) (later) edit winamp.ini.  for 1), if they're running
    ; (or were running) some other vms-based plugin using 
    ; vms_desktop.dll, then if winamp is still open, the installer
    ; could have trouble overwriting vms_desktop.dll, or other files;
    ; the user would get an abort/retry/ignore box, but it's easier 
    ; to just play it safe.
    FindWindow $R0 "winamp v1.x"
    StrCmp $R0 0 "" RequestCloseWinamp2
    goto Winamp2Closed
  RequestCloseWinamp2:
    MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "Winamp is currently running; please close it,$\rand then hit OK to continue..." \
        IDCANCEL WarnWinampStillOpen
    goto CloseWinamp2
  WarnWinampStillOpen:
    FindWindow $R0 "winamp v1.x"
    StrCmp $R0 0 "" WarnWinampStillOpen2
    goto Winamp2Closed
  WarnWinampStillOpen2:
    MessageBox MB_OK|MB_ICONEXCLAMATION "Warning: Winamp is still open; as a result, the installer$\rwill not be able to set ${PLUGIN_NAME} as the default plugin; you will$\rhave to do this yourself.$\r$\rTo do so, wait until the installation is finished.  Then bring up $\rWinamp and hit CTRL+K.  From there, you will be able to select$\r${PLUGIN_NAME} from the list of visualization plug-ins, and it will$\rbecome the new default."
    goto Winamp2Closed
  Winamp2Closed:    

  ; this function sets $1 to point to the 'winamp\plugins\milkdrop2' folder:
  ; (see function definition above)
  Call QueryWinampVisPath

  ; -------------------- EDIT THIS SECTION [2/3] --------------------
  ; -------------------- EDIT THIS SECTION [2/3] --------------------
  ; -------------------- EDIT THIS SECTION [2/3] --------------------

  ; LIST FILES TO INCLUDE WITH THE INSTALLER

  ; For each file we want to install onto the destination system,
  ; we first set the output directory (relative to $1, which is
  ; the PLUGINS directory) and then list files.  The paths for
  ; the files will be local paths on your hard disk, but fear not -
  ; the files will be placed in the current output directory 
  ; (as last set by SetOutPath) on the destination system.
  
  ; So, first, we set the current output path (the folder to which 
  ; files will be decompressed on the user's system) to '$1', 
  ; which is the path to their winamp plugins folder.
  
  SetOutPath $1
  File "C:\program files\winamp\plugins\${PLUGIN_DLL}"
  
  SetOutPath $1\Milkdrop2\config
  File "C:\program files\winamp\plugins\milkdrop2\config\milk_msg.ini"
  File "C:\program files\winamp\plugins\milkdrop2\config\milk_img.ini"
  ;File "C:\program files\winamp\plugins\milkdrop2\config\milkdrop.ini"  ;this one will be generated - do not install

  SetOutPath $1\Milkdrop2\data
  File "C:\program files\winamp\plugins\milkdrop2\data\vms_desktop.dll"
  File "C:\program files\winamp\plugins\milkdrop2\data\comp_ps.fx"
  File "C:\program files\winamp\plugins\milkdrop2\data\comp_vs.fx"
  File "C:\program files\winamp\plugins\milkdrop2\data\warp_ps.fx"
  File "C:\program files\winamp\plugins\milkdrop2\data\warp_vs.fx"
  File "C:\program files\winamp\plugins\milkdrop2\data\include.fx"

  SetOutPath $1\Milkdrop2\docs
  File "C:\program files\winamp\plugins\milkdrop2\docs\milkdrop.html"
  File "C:\program files\winamp\plugins\milkdrop2\docs\milkdrop_preset_authoring.html"
  File "C:\program files\winamp\plugins\milkdrop2\docs\q_and_t_vars.gif"

  SetOutPath $1\Milkdrop2\textures
  File "C:\program files\winamp\plugins\milkdrop2\textures\*.*"
  
  SetOutPath $1\Milkdrop2\presets
  File "C:\program files\winamp\plugins\milkdrop2\presets\*.milk"
  
  hmmm
  SetOutPath $1\MilkDrop2\presets\3d
  File "C:\program files\winamp\plugins\milkdrop2\presets\3d\*.milk"
  
  hmmm
  SetOutPath $1\MilkDrop2\presets\inverted
  File "C:\program files\winamp\plugins\milkdrop2\presets\inverted\*.milk"
  
  ; ----------------------- END SECTION [2/3] -----------------------
  ; ----------------------- END SECTION [2/3] -----------------------
  ; ----------------------- END SECTION [2/3] -----------------------
  

  ; now time to create the Uninstaller:

  IfFileExists $INSTDIR\Winamp.exe UninstWinamp2
  IfFileExists $INSTDIR\Winamp3.exe UninstWinamp3
  IfFileExists $INSTDIR\Studio.exe UninstWinamp3  ; legacy check
  goto UninstDone

  UninstWinamp3:
    WriteRegStr HKLM SOFTWARE\${PLUGIN_DLL}Winamp3 "Install_Dir" "$INSTDIR"
    WriteRegStr HKLM SOFTWARE\${PLUGIN_DLL}Winamp3 "Install_Plugins_Dir" $1
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PLUGIN_DLL}Winamp3" "DisplayName" "${PLUGIN_NAME} for Winamp 3 (remove only)"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PLUGIN_DLL}Winamp3" "UninstallString" '"$INSTDIR\uninst-${PLUGIN_DLL}.exe"'
    WriteUninstaller "$INSTDIR\uninst-${PLUGIN_DLL}.exe"
    CreateDirectory "$SMPROGRAMS\Winamp3\Vis Plugin Uninstallers"
    CreateShortCut "$SMPROGRAMS\Winamp3\Vis Plugin Uninstallers\Uninstall ${PLUGIN_NAME}.lnk" "$INSTDIR\uninst-${PLUGIN_DLL}.exe" "" "$INSTDIR\uninst-${PLUGIN_DLL}.exe" 0
    goto UninstDone
  
  UninstWinamp2:
    WriteRegStr HKLM SOFTWARE\${PLUGIN_DLL}Winamp "Install_Dir" "$INSTDIR"
    WriteRegStr HKLM SOFTWARE\${PLUGIN_DLL}Winamp "Install_Plugins_Dir" $1
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PLUGIN_DLL}Winamp" "DisplayName" "${PLUGIN_NAME} for Winamp 2x (remove only)"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PLUGIN_DLL}Winamp" "UninstallString" '"$INSTDIR\uninst-${PLUGIN_DLL}.exe"'
    WriteUninstaller "$INSTDIR\uninst-${PLUGIN_DLL}.exe"
    CreateDirectory "$SMPROGRAMS\Winamp\Vis Plugin Uninstallers"
    CreateShortCut "$SMPROGRAMS\Winamp\Vis Plugin Uninstallers\Uninstall ${PLUGIN_NAME}.lnk" "$INSTDIR\uninst-${PLUGIN_DLL}.exe" "" "$INSTDIR\uninst-${PLUGIN_DLL}.exe" 0
    goto UninstDone
    
  UninstDone:

SectionEnd

;----------------------------------------------------------------------

UninstallText "This will uninstall the ${PLUGIN_NAME} plugin.  Hit next to continue."
ShowUninstDetails Show

Section "Uninstall"

  ; This section is the code that will be run when the user goes
  ; to Uninstall the plugin.

  IfFileExists $INSTDIR\Winamp.exe UninstStep1Winamp2
  IfFileExists $INSTDIR\Winamp3.exe UninstStep1Winamp3
  IfFileExists $INSTDIR\Studio.exe UninstStep1Winamp3  ; legacy check
  goto UninstScriptDone

  UninstStep1Winamp3:
    ReadRegStr $1 HKLM SOFTWARE\${PLUGIN_DLL}Winamp3 "Install_Plugins_Dir"
    goto UninstStep2
  UninstStep1Winamp2:
    ReadRegStr $1 HKLM SOFTWARE\${PLUGIN_DLL}Winamp "Install_Plugins_Dir"
    goto UninstStep2

  UninstStep2:
  
    ; -------------------- EDIT THIS SECTION [3/3] --------------------
    ; -------------------- EDIT THIS SECTION [3/3] --------------------
    ; -------------------- EDIT THIS SECTION [3/3] --------------------

    ; LIST OF FILES TO DELETE WHEN USER RUNS THE UNINSTALL

    Delete "$1\${PLUGIN_DLL}"
    ;Delete "$1\vms_desktop.dll"     ** DO NOT DELETE! **
    Delete "$1\milkdrop.html"
    Delete "$1\milkdrop_preset_authoring.html"
    Delete "$1\q_and_t_vars.gif"

    MessageBox MB_YESNO|MB_ICONQUESTION \
            "Clear your saved settings?:$\r     $1\milkdrop_config.ini$\r     $1\milk_msg.ini$\r     $1\milk_img.ini" \
            IDNO SaveSettings

    Delete "$1\milkdrop_config.ini"
    Delete "$1\milk_msg.ini"
    Delete "$1\milk_img.ini"

    SaveSettings:

    MessageBox MB_YESNO|MB_ICONQUESTION \
            "Delete all presets in these 3 directories?:$\r     $1\milkdrop$\r     $1\milkdrop\3d$\r     $1\milkdrop\inverted" \
            IDNO SavePresets
            
    Delete "$1\milkdrop2\inverted\*.milk"
    Delete "$1\milkdrop2\3d\*.milk"
    Delete "$1\milkdrop2\*.milk"
    RMDir  "$1\milkdrop2\inverted"
    RMDir  "$1\milkdrop2\3d"
    RMDir  "$1\milkdrop2"
    
    SavePresets:
      
    ; ----------------------- END SECTION [3/3] -----------------------
    ; ----------------------- END SECTION [3/3] -----------------------
    ; ----------------------- END SECTION [3/3] -----------------------
  
  IfFileExists $INSTDIR\Winamp.exe UninstStep3Winamp2
  IfFileExists $INSTDIR\Winamp3.exe UninstStep3Winamp3
  IfFileExists $INSTDIR\Studio.exe UninstStep3Winamp3  ; legacy check
  goto UninstScriptDone
    
  UninstStep3Winamp3:
    DeleteRegKey HKLM SOFTWARE\${PLUGIN_DLL}Winamp3
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PLUGIN_DLL}Winamp3"
    Delete $INSTDIR\uninst-${PLUGIN_DLL}.exe
    Delete "$SMPROGRAMS\Winamp3\Vis Plugin Uninstallers\Uninstall ${PLUGIN_NAME}.lnk"
    RMDir "$SMPROGRAMS\Winamp3\Vis Plugin Uninstallers"
    goto UninstScriptDone
  UninstStep3Winamp2:
    DeleteRegKey HKLM SOFTWARE\${PLUGIN_DLL}Winamp
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PLUGIN_DLL}Winamp"
    Delete $INSTDIR\uninst-${PLUGIN_DLL}.exe
    Delete "$SMPROGRAMS\Winamp\Vis Plugin Uninstallers\Uninstall ${PLUGIN_NAME}.lnk"
    RMDir "$SMPROGRAMS\Winamp\Vis Plugin Uninstallers"
    goto UninstScriptDone

  UninstScriptDone:
SectionEnd

;----------------------------------------------------------------------

Function .onInstSuccess
  IfFileExists $INSTDIR\Winamp.exe CaseWinamp2
  IfFileExists $INSTDIR\Winamp3.exe CaseWinamp3
  IfFileExists $INSTDIR\Studio.exe CaseWinamp3  ; legacy check
  goto CaseImpossible

  CaseWinamp3:
    IfFileExists $INSTDIR\wacs\classicvis.wac ClassicVisOk
    ; no classicvis -> give them instructions
    MessageBox MB_YESNO|MB_ICONEXCLAMATION \
            "IMPORTANT: You must download and install the Classic Visualization$\rComponent before ${PLUGIN_NAME} will work with Winamp 3.$\r$\rWould you like to download it now?" \
            IDNO FailNoClassicVis
    ExecShell "open" "http://www.winamp.com/components3/detail.jhtml?componentId=122130"
    MessageBox MB_OK|MB_ICONINFORMATION \
            "Your web browser will now open and allow you to download$\rthe Classic Visualization Component.  Please download$\rand install it.$\r$\rOnce it is installed, open Winamp 3 and hit CTRL+P$\rto open the Preferences screen.  Then, on the left,$\rscroll to 'Classic Visualizations' and select it.  From there,$\ryou can easily select, configure and run any plugins$\rinstalled to Winamp 2 or 3."
    goto end            
  FailNoClassicVis:
    MessageBox MB_OK|MB_ICONSTOP "Installation failed."
    goto end            
  ClassicVisOk:
    FindWindow $R0 "STUDIO"
    StrCmp $R0 0 "" DoneWinamp3
    MessageBox MB_YESNO|MB_ICONQUESTION \
            "${PLUGIN_NAME} was installed successfully.$\rWould you like to run Winamp 3 now?" \
            IDNO DoneWinamp3
    ; to do here: update 'oldvisname' string in the *xml* file winamp3\studio.xnf,
    ; and set 'oldvisidx' to "0"
    IfFileExists $INSTDIR\Winamp3.exe CaseWinamp3b
      Exec '"$INSTDIR\studio.exe"'
      goto DoneWinamp3
    CaseWinamp3b:
      Exec '"$INSTDIR\winamp3.exe"'
      goto DoneWinamp3
  DoneWinamp3:
    MessageBox MB_OK "While in Winamp 3, press CTRL+P to bring up the$\rPreferences screen, then scroll down and select$\rthe 'Classic Visualizations' option.  From there,$\ryou can select, configure, and run the ${PLUGIN_NAME} plugin."
    goto end
      
  CaseWinamp2:
    ; note: winamp 2 should already be closed at this point.
    WriteINIStr "$INSTDIR\Winamp.ini" "Winamp" "visplugin_name" ${PLUGIN_DLL}
    WriteINIStr "$INSTDIR\Winamp.ini" "Winamp" "visplugin_num" "0"
    MessageBox MB_YESNO|MB_ICONQUESTION \
            "${PLUGIN_NAME} was installed successfully.$\r$\rWhile in Winamp, press ALT+K to configure it (optional);$\rpress CTRL+SHIFT+K to execute it.$\r$\rWould you like to run Winamp now?" \
            IDNO end
        Exec '"$INSTDIR\Winamp.exe"'
    Goto end
  
  CaseImpossible:  
    MessageBox MB_OK|MB_ICONEXCLAMATION "ERROR: unable to find winamp.exe (winamp2) or studio.exe/winamp3.exe (winamp3) in the install directory..."
    Goto end
    
  End:
FunctionEnd

; eof