diff options
Diffstat (limited to 'Src/Plugins/Visualization/vis_milk2/milkdrop.nsi')
-rw-r--r-- | Src/Plugins/Visualization/vis_milk2/milkdrop.nsi | 439 |
1 files changed, 439 insertions, 0 deletions
diff --git a/Src/Plugins/Visualization/vis_milk2/milkdrop.nsi b/Src/Plugins/Visualization/vis_milk2/milkdrop.nsi new file mode 100644 index 00000000..c10333e6 --- /dev/null +++ b/Src/Plugins/Visualization/vis_milk2/milkdrop.nsi @@ -0,0 +1,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 + |