;NSIS Modern User Interface version 1.63
;InstallOptions Example Script
;Written by Joost Verburg

!define MUI_PRODUCT "##PACKTITLE" ;Define your own software name here
!define MUI_VERSION "##CATALOGUE" ;Define your own software version here

!include "MUI.nsh"
!include "Sections.nsh"

;!define TEMP $R0

;--------------------------------
;Configuration

  ;General
  OutFile "##PACKTITLE.exe"

  ;Folder selection page
  InstallDir "$PROGRAMFILES\Winamp"
  InstType Standard
  XPStyle on
  AutoCloseWindow true

;--------------------------------
;Modern UI Configuration

  !define MUI_CUSTOMPAGECOMMANDS

##LICPRE !define MUI_LICENSEPAGE
  !define MUI_DIRECTORYPAGE
  !define MUI_COMPONENTSPAGE

  
  !define MUI_ABORTWARNING
  
; !define MUI_UNINSTALLER
  !define MUI_UNCONFIRMPAGE

  !define MUI_BRANDINGTEXT "whyeye.org HybridIS for NSIS2"
  !define MUI_ICON "##ICON"
  !define MUI_CHECKBITMAP "##CHECKBITMAP"
  !define MUI_INSTALLCOLORS "C0C0C0 ffffff"

;--------------------------------
;Pages
  
##LICPRE !insertmacro MUI_PAGECOMMAND_LICENSE
  !insertmacro MUI_PAGECOMMAND_COMPONENTS
  !insertmacro MUI_PAGECOMMAND_DIRECTORY
  Page custom SetCustomA
  !insertmacro MUI_PAGECOMMAND_INSTFILES

;--------------------------------
;Languages
 
  !insertmacro MUI_LANGUAGE "English"
  
;--------------------------------
;Language Strings

  ;Description

  LangString DESC_AVS_Presets ${LANG_ENGLISH} "Selection of presets for Nullsoft AVS v2.5 and higher"
  LangString DESC_Visit_WWW ${LANG_ENGLISH} "Visit ##WEBNAME to find more presets"
  LangString DESC_AddBorder ${LANG_ENGLISH} "Add Border APE$\nby Goebish"
  LangString DESC_ChannelShift ${LANG_ENGLISH} "Channel Shift APE$\nby Steven Wittens"
  LangString DESC_ColorMap ${LANG_ENGLISH} "Color Map APE$\nby Steven Wittens"
  LangString DESC_ColorReduction ${LANG_ENGLISH} "Color Reduction APE$\nby Steven Wittens"
  LangString DESC_Convolution ${LANG_ENGLISH} "Convolution Filter APE$\nby Tom Holden"
  LangString DESC_MultiFilter ${LANG_ENGLISH} "Multi Filter APE$\nby Semi Essessi"
  LangString DESC_Multiplier ${LANG_ENGLISH} "Multiplier APE$\nby Steven Wittens"
	LangString DESC_Picture2 ${LANG_ENGLISH} "Picture II APE$\nby Steven Wittens"
  LangString DESC_Texer ${LANG_ENGLISH} "Texer APE$\nby Steven Wittens"
  LangString DESC_VideoDelay ${LANG_ENGLISH} "Video Delay APE$\nby Tom Holden"
  LangString DESC_Plugins ${LANG_ENGLISH} "Plugins required by some AVS presets"
  LangString DESC_Settings ${LANG_ENGLISH} "Specify your AVS settings (requires Winamp restart)"
  
  ;Header
  LangString TEXT_IO_TITLE ${LANG_ENGLISH} "InstallOptions Page"
  LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "Create your own dialog!"

;--------------------------------
;Data
  
##LICPRE LicenseData "##LICENSE"

;--------------------------------
;Reserve Files
  
  ;Things that need to be extracted on first (keep these lines before any File command!)
  ;Only useful for BZIP2 compression
  
 ReserveFile "settings.ini"

  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

;--------------------------------
;Installer Sections

Section -pre

  IfFileExists $INSTDIR\Winamp.exe winamp2
  IfFileExists $INSTDIR\Studio.exe winamp3

winamp2:
StrCpy $1 "Plugins\avs"
StrCpy $2 "Winamp.ini"
StrCpy $3 "Winamp.exe"
StrCpy $4 "Plugins"
StrCpy $6 "CloseWinamp"



;Call CloseWinamp
IfFileExists "$INSTDIR\$4\vis_avs.dll" End ExistAVS2Message

ExistAVS2Message:
MessageBox  MB_YESNO|MB_ICONEXCLAMATION "Setup could NOT detect vis_avs.dll in your Winamp 2.x directory. Do you want to download it now?$\n$\nPress 'No' to continue installation." IDNO End
File "AVS.url"
ExecShell open "AVS.url"
Delete "$TEMP\AVS.url"
Quit
Goto End

winamp3:
StrCpy $1 "Wacs\data\avs"
StrCpy $2 "Studio.ini"
StrCpy $3 "Studio.exe"
StrCpy $4 "Wacs"
StrCpy $6 "CloseWinamp3"

;Call CloseWinamp3
IfFileExists "$INSTDIR\$4\avs.wac" End ExistAVS3Message

ExistAVS3Message:
MessageBox  MB_YESNO|MB_ICONEXCLAMATION "Setup could NOT detect avs.wac in your Winamp 3.x directory. Do you want to download it now?$\n$\nPress 'No' to continue installation." IDNO End
File "AVS.url"
ExecShell open "AVS.url"
Delete "$TEMP\AVS.url"
Quit
End:
SectionEnd

Section "AVS Presets" AVS_Presets
SectionIn RO

  ;Add your stuff here

##SINGLE-AVSDIR  SetOutPath "$INSTDIR\$1\##PACKTITLE"
##SINGLE-AVSDIR file "##AVSPRESETS\*.avs"

##MULTI-AVSDIR SetOutPath "$INSTDIR\$1"
##MULTI-AVSDIR file /r "##AVSPRESETS\*.*"
  
##ADDPRE  SetOutPath "$INSTDIR\$1"
##ADDPRE##ADDBMP  file "##ADDFILES\*.bmp"
##ADDPRE##ADDAVI file "##ADDFILES\*.avi"
SectionEnd
  
##PRE-PLUGIN Subsection "Plugins" Plugins
##PRE-ADDBORDER  !include "ape\AddBorder.nsh"
##PRE-CHANNELSHIFT  !include "ape\ChannelShift.nsh"
##PRE-COLORMAP  !include "ape\ColorMap.nsh"
##PRE-COLORREDUCTION  !include "ape\ColorReduction.nsh"
##PRE-CONVOLUTION  !include "ape\ConvolutionFilter.nsh"
##PRE-MULTIFILTER  !include "ape\MultiFilter.nsh"
##PRE-MULTIPLIER  !include "ape\Multiplier.nsh"
##PRE-PICTURE2  !include "ape\Picture2.nsh"
##PRE-TEXER  !include "ape\Texer.nsh"
##PRE-VIDEODELAY  !include "ape\Delay.nsh"

##PRE-PLUGIN SubsectionEnd

Section "Settings" Settings
SectionIn 2
StrCmp $6 "CloseWinamp" CloseWinamp CloseWinamp3

CloseWinamp:
Call CloseWinamp
Goto Settings

CloseWinamp3:
Call CloseWinamp3
Goto Settings

Settings:
  !insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 13" "State"
  StrCmp $R1 "0" PreOverlay
	IfFileExists "$INSTDIR\$2.bak" BackupMessage CreateBackup
 
  BackupMessage:
	MessageBox MB_YESNO|MB_ICONEXCLAMATION "Do you want overwrite the old backup ($INSTDIR\$2.bak)?" IDNO PreOverlay
 
  CreateBackup:
	CopyFiles "$INSTDIR\$2" "$INSTDIR\$2.bak"
 
  PreOverlay:
  !insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 4" "State"
  StrCmp $R1 "1" Overlay NoOverlay
  Overlay:
  WriteINIStr $INSTDIR\$2 AVS cfg_bkgnd_render 3
  Goto ScreenHeight
  NoOverlay:
  WriteINIStr $INSTDIR\$2 AVS cfg_bkgnd_render 0
 
  ScreenHeight:
  !insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 9" "State"
  StrCmp $R1 "0" PixelDoubling
  WriteINIStr $INSTDIR\$2 AVS cfg_fs_height 100
	
	PixelDoubling:
	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 10" "State"
	StrCmp $R1 "0" PageFlipping
	WriteINIStr $INSTDIR\$2 AVS cfg_fs_d 3
	
	PageFlipping:
	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 11" "State"
	StrCmp $R1 "0" BeatDetection
	WriteINIStr $INSTDIR\$2 AVS cfg_fs_flip 1
	
  BeatDetection:
	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 12" "State"
	StrCmp $R1 "0" RandomTime
	WriteINIStr $INSTDIR\$2 AVS cfg_smartbeat 1
	
	RandomTime:
	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 6" "State"
	WriteINIStr $INSTDIR\$2 AVS cfg_fs_rnd_time $R1
	
	RandomMode:
	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 8" "State"
	StrCmp $R1 "0" Resolution
	WriteINIStr $INSTDIR\$2 AVS cfg_fs_rnd 1
	
	Resolution:
	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "settings.ini" "Field 3" "State"
StrCmp $R1 "(no changes)" Bitrate
StrCmp $R1 "320x200" g320x200 b320x200

g320x200:
WriteINIStr $INSTDIR\$2 AVS cfg_w 330
WriteINIStr $INSTDIR\$2 AVS cfg_h 220
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 320
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 200
Goto Bitrate
b320x200:
StrCmp $R1 "320x240" g320x240 b320x240

g320x240:
WriteINIStr $INSTDIR\$2 AVS cfg_w 330
WriteINIStr $INSTDIR\$2 AVS cfg_h 260
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 320
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 240
Goto Bitrate
b320x240:
StrCmp $R1 "400x300" g400x300 b400x300

g400x300:
WriteINIStr $INSTDIR\$2 AVS cfg_w 410
WriteINIStr $INSTDIR\$2 AVS cfg_h 320
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 400
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 300
Goto Bitrate
b400x300:
StrCmp $R1 "480x360" g480x360 b480x360

g480x360:
WriteINIStr $INSTDIR\$2 AVS cfg_w 490
WriteINIStr $INSTDIR\$2 AVS cfg_h 380
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 480
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 360
Goto Bitrate
b480x360:
StrCmp $R1 "512x384" g512x384 b512x384

g512x384:
WriteINIStr $INSTDIR\$2 AVS cfg_w 522
WriteINIStr $INSTDIR\$2 AVS cfg_h 404
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 512
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 384
Goto Bitrate
b512x384:
StrCmp $R1 "640x400" g640x400 b640x400

g640x400:
WriteINIStr $INSTDIR\$2 AVS cfg_w 650
WriteINIStr $INSTDIR\$2 AVS cfg_h 420
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 640
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 400
Goto Bitrate
b640x400:
StrCmp $R1 "640x480" g640x480 b640x480

g640x480:
WriteINIStr $INSTDIR\$2 AVS cfg_w 650
WriteINIStr $INSTDIR\$2 AVS cfg_h 500
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 640
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 480
Goto Bitrate
b640x480:
StrCmp $R1 "800x600" g800x600 b800x600

g800x600:
WriteINIStr $INSTDIR\$2 AVS cfg_w 810
WriteINIStr $INSTDIR\$2 AVS cfg_h 620
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 800
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 600
Goto Bitrate
b800x600:
StrCmp $R1 "1024x768" g1024x768 b1024x768

g1024x768:
WriteINIStr $INSTDIR\$2 AVS cfg_w 1034
WriteINIStr $INSTDIR\$2 AVS cfg_h 788
WriteINIStr $INSTDIR\$2 AVS cfg_fs_w 1024
WriteINIStr $INSTDIR\$2 AVS cfg_fs_h 768
Goto Bitrate
b1024x768:
MessageBox MB_OK "Abnormal Termination"
Quit
	
	
	
  Bitrate:
	WriteINIStr $INSTDIR\Winamp.ini AVS cfg_fs_bpp 32
  WriteINIStr $INSTDIR\$2 AVS config_pres_subdir "##PACKTITLE"
  WriteINIStr $INSTDIR\$2 Winamp visplugin_name vis_avs.dll

  
  
  Exec $INSTDIR\$3

SectionEnd

##PRE-WWW Section "Visit ##WEBNAME" Visit_WWW
##PRE-WWW SectionIn 1

##PRE-WWW    SetOutPath $TEMP
##PRE-WWW     File "WWW.url"
##PRE-WWW     ExecShell open "$TEMP\WWW.url"
##PRE-WWW     Delete "$TEMP\WWW.url"
##PRE-WWW SectionEnd


;Display the Finish header
;Insert this macro after the sections if you are not using a finish page
!insertmacro MUI_SECTIONS_FINISHHEADER


;--------------------------------
;Descriptions

!insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${AVS_Presets} $(DESC_AVS_Presets)
  !insertmacro MUI_DESCRIPTION_TEXT ${Visit_WWW} $(DESC_Visit_WWW)
  !insertmacro MUI_DESCRIPTION_TEXT ${AddBorder} $(DESC_AddBorder)
  !insertmacro MUI_DESCRIPTION_TEXT ${ChannelShift} $(DESC_ChannelShift)
  !insertmacro MUI_DESCRIPTION_TEXT ${ColorMap} $(DESC_ColorMap)
  !insertmacro MUI_DESCRIPTION_TEXT ${ColorReduction} $(DESC_ColorReduction)
  !insertmacro MUI_DESCRIPTION_TEXT ${Convolution} $(DESC_Convolution)
  !insertmacro MUI_DESCRIPTION_TEXT ${Multifilter} $(DESC_Multifilter)
  !insertmacro MUI_DESCRIPTION_TEXT ${Multiplier} $(DESC_Multiplier)
	!insertmacro MUI_DESCRIPTION_TEXT ${Picture2} $(DESC_Picture2)
  !insertmacro MUI_DESCRIPTION_TEXT ${Texer} $(DESC_Texer)
  !insertmacro MUI_DESCRIPTION_TEXT ${VideoDelay} $(DESC_VideoDelay)
  !insertmacro MUI_DESCRIPTION_TEXT ${Plugins} $(DESC_Plugins)
  !insertmacro MUI_DESCRIPTION_TEXT ${Settings} $(DESC_Settings)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)
!insertmacro MUI_FUNCTIONS_DESCRIPTION_END

;--------------------------------
;Installer Functions

Function .onInit

  ;Extract InstallOptions INI Files
 !insertmacro MUI_INSTALLOPTIONS_EXTRACT "settings.ini"

##PRESPLASH Sleep 50
##PRESPLASH  SetOutPath $TEMP
##PRESPLASH  File /oname=spltmp.bmp "##SPLASHSCREEN"

; optional
##PRESOUND  File /oname=spltmp.wav "##SPLASHSOUND"

##PRESPLASH  advsplash::show ##SPLASHTIME 0 100 ##TRANSPARENCY $TEMP\spltmp
##PRESPLASH  Pop $0
##PRESPLASH  Delete $TEMP\spltmp.exe
##PRESPLASH  Delete $TEMP\spltmp.bmp
##PRESOUND  Delete $TEMP\spltmp.wav

ReadRegStr $R3 HKLM \
              "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp3" \
              "UninstallString"
StrCmp $R3 "" Winamp2Check SecondCheck

Winamp2Check:
ReadRegStr $R2 HKLM \
              "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" \
              "UninstallString"
StrCmp $R2 "" End StripPath2

SecondCheck:
ReadRegStr $R6 HKLM \
              "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" \
              "UninstallString"
StrCmp $R6 "" StripPath3 WinampDialog

WinampDialog:
MessageBox MB_YESNO|MB_ICONEXCLAMATION "YES, continue installing in your Winamp 3.x directory.$\n$\nNO, install in your Winamp 2.x directory instead." IDNO Winamp2Check


StripPath3:
      StrCpy $INSTDIR $R3
      Call StripPath
      Goto End

StripPath2:
      StrCpy $INSTDIR $R2
      Call StripPath
      Goto End

End:
FunctionEnd  


Function SetCustomA 
 
  SectionGetFlags ${Settings} $R0 
  IntOp $R0 $R0 & ${SF_SELECTED} 
  IntCmp $R0 ${SF_SELECTED} show 
 
  Abort 
 
  show: 
 
  !insertmacro MUI_HEADER_TEXT "Choose AVS Preferences" "Choose your preferred settings for using AVS." 
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "settings.ini" 
 
FunctionEnd

;StripPath function by Frank Nagel
Function StripPath
  Push $8
  Push $9
  StrCmp $INSTDIR "" fin

    StrCpy $8 $INSTDIR 1 0 ; get firstchar
    StrCmp $8 '"' "" getparent 
      ; if first char is ", let's remove "'s first.
      StrCpy $INSTDIR $INSTDIR "" 1
      StrCpy $8 0
      rqloop:
        StrCpy $9 $INSTDIR 1 $8
        StrCmp $9 '"' rqdone
        StrCmp $9 "" rqdone
        IntOp $8 $8 + 1
        Goto rqloop
      rqdone:
      StrCpy $INSTDIR $INSTDIR $8
    getparent:
    ; the uninstall string goes to an EXE, let's get the directory.
    StrCpy $8 -1
    gploop:
      StrCpy $9 $INSTDIR 1 $8
      StrCmp $9 "" gpexit
      StrCmp $9 "\" gpexit
      IntOp $8 $8 - 1
      Goto gploop
    gpexit:
    StrCpy $INSTDIR $INSTDIR $8

    
  fin:
  Pop $9
  Pop $8
FunctionEnd

Function CloseWinamp
Push $5
loop:
FindWindow $5 "Winamp v1.x"
IntCmp $5 0 done
SendMessage $5 16 0 0
Sleep 100
Goto loop
done:
Pop $5
FunctionEnd


Function CloseWinamp3
Push $5
loop:
FindWindow $5 "STUDIO"
IntCmp $5 0 done
SendMessage $5 16 0 0
Sleep 100
Goto loop
done:
Pop $5
FunctionEnd

 Function ConnectInternet
 
   Push $R9
     
     ClearErrors
     Dialer::AttemptConnect
     IfErrors noie3
     
     Pop $R9
     StrCmp $R9 "online" connected
       MessageBox MB_OK|MB_ICONSTOP "Connection failed. The file could not be retrieved."
    Goto End
     
     noie3:
   
     ; IE3 not installed
     MessageBox MB_OK|MB_ICONINFORMATION \
     "You have to establish a connection to the internet."
     
     connected:
   
   Pop $R9
 End:  
 FunctionEnd
 
 Function RefreshShellIcons
   ; By jerome tremblay - april 2003
   System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v \
   (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
FunctionEnd

;eof