Initial commit

This commit is contained in:
Rim 2023-12-15 15:41:40 -05:00
commit 1f2f5df826
174 changed files with 35683 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 KiB

View File

@ -0,0 +1,191 @@
# Header, don't edit
NLF v6
# Start editing here
# Language ID
1033
# Font and size - dash (-) means default
-
-
# Codepage - dash (-) means ANSI code page
-
# RTL - anything else than RTL means LTR
-
# Translation by ..... (any credits should go here)
# ^Branding
Nullsoft Install System %s
# ^SetupCaption
$(^Name) Setup
# ^UninstallCaption
$(^Name) Uninstall
# ^LicenseSubCaption
: License Agreement
# ^ComponentsSubCaption
: Installation Options
# ^DirSubCaption
: Installation Folder
# ^InstallingSubCaption
: Installing
# ^CompletedSubCaption
: Completed
# ^UnComponentsSubCaption
: Uninstallation Options
# ^UnDirSubCaption
: Uninstallation Folder
# ^ConfirmSubCaption
: Confirmation
# ^UninstallingSubCaption
: Uninstalling
# ^UnCompletedSubCaption
: Completed
# ^BackBtn
< &Back
# ^NextBtn
&Next >
# ^AgreeBtn
I &Agree
# ^AcceptBtn
I &accept the terms of the License Agreement
# ^DontAcceptBtn
I &do not accept the terms of the License Agreement
# ^InstallBtn
&Install
# ^UninstallBtn
&Uninstall
# ^CancelBtn
Cancel
# ^CloseBtn
&Close
# ^BrowseBtn
B&rowse...
# ^ShowDetailsBtn
Show &details
# ^ClickNext
Click Next to continue.
# ^ClickInstall
Click Install to start the installation.
# ^ClickUninstall
Click Uninstall to start the uninstallation.
# ^Name
Name
# ^Completed
Completed
# ^LicenseText
Please review the license agreement before installing $(^NameDA). If you accept all terms of the agreement, click I Agree.
# ^LicenseTextCB
Please review the license agreement before installing $(^NameDA). If you accept all terms of the agreement, click the check box below. $_CLICK
# ^LicenseTextRB
Please review the license agreement before installing $(^NameDA). If you accept all terms of the agreement, select the first option below. $_CLICK
# ^UnLicenseText
Please review the license agreement before uninstalling $(^NameDA). If you accept all terms of the agreement, click I Agree.
# ^UnLicenseTextCB
Please review the license agreement before uninstalling $(^NameDA). If you accept all terms of the agreement, click the check box below. $_CLICK
# ^UnLicenseTextRB
Please review the license agreement before uninstalling $(^NameDA). If you accept all terms of the agreement, select the first option below. $_CLICK
# ^Custom
Custom
# ^ComponentsText
Check the components you want to install and uncheck the components you don't want to install. $_CLICK
# ^ComponentsSubText1
Select the type of install:
# ^ComponentsSubText2_NoInstTypes
Select components to install:
# ^ComponentsSubText2
Or, select the optional components you wish to install:
# ^UnComponentsText
Check the components you want to uninstall and uncheck the components you don't want to uninstall. $_CLICK
# ^UnComponentsSubText1
Select the type of uninstall:
# ^UnComponentsSubText2_NoInstTypes
Select components to uninstall:
# ^UnComponentsSubText2
Or, select the optional components you wish to uninstall:
# ^DirText
Setup will install $(^NameDA) in the following folder. To install in a different folder, click Browse and select another folder. $_CLICK
# ^DirSubText
Destination Folder
# ^DirBrowseText
Select the folder to install $(^NameDA) in:
# ^UnDirText
Setup will uninstall $(^NameDA) from the following folder. To uninstall from a different folder, click Browse and select another folder. $_CLICK
# ^UnDirSubText
""
# ^UnDirBrowseText
Select the folder to uninstall $(^NameDA) from:
# ^SpaceAvailable
"Space available: "
# ^SpaceRequired
"Space required: "
# ^UninstallingText
$(^NameDA) will be uninstalled from the following folder. $_CLICK
# ^UninstallingSubText
Uninstalling from:
# ^FileError
Error opening file for writing: \r\n\r\n$0\r\n\r\nClick Abort to stop the installation,\r\nRetry to try again, or\r\nIgnore to skip this file.
# ^FileError_NoIgnore
Error opening file for writing: \r\n\r\n$0\r\n\r\nClick Retry to try again, or\r\nCancel to stop the installation.
# ^CantWrite
"Can't write: "
# ^CopyFailed
Copy failed
# ^CopyTo
"Copy to "
# ^Registering
"Registering: "
# ^Unregistering
"Unregistering: "
# ^SymbolNotFound
"Could not find symbol: "
# ^CouldNotLoad
"Could not load: "
# ^CreateFolder
"Create folder: "
# ^CreateShortcut
"Create shortcut: "
# ^CreatedUninstaller
"Created uninstaller: "
# ^Delete
"Delete file: "
# ^DeleteOnReboot
"Delete on reboot: "
# ^ErrorCreatingShortcut
"Error creating shortcut: "
# ^ErrorCreating
"Error creating: "
# ^ErrorDecompressing
Error decompressing data! Corrupted installer?
# ^ErrorRegistering
Error registering DLL
# ^ExecShell
"ExecShell: "
# ^Exec
"Execute: "
# ^Extract
"Extract: "
# ^ErrorWriting
"Extract: error writing to file "
# ^InvalidOpcode
Installer corrupted: invalid opcode
# ^NoOLE
"No OLE for: "
# ^OutputFolder
"Output folder: "
# ^RemoveFolder
"Remove folder: "
# ^RenameOnReboot
"Rename on reboot: "
# ^Rename
"Rename: "
# ^Skipped
"Skipped: "
# ^CopyDetails
Copy Details To Clipboard
# ^LogInstall
Log install process
# ^Byte
B
# ^Kilo
K
# ^Mega
M
# ^Giga
G

View File

@ -0,0 +1,129 @@
;Language: English (1033)
;By Joost Verburg
!insertmacro LANGFILE "English" "English"
!ifdef MUI_WELCOMEPAGE
${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "SAMPLETEXT"
${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "This program will guide you through the installation of the $(^NameDA) SAMPLETEXT1.$\r$\n$\r$\nTo find more SAMPLETEXT2, visit SAMPLETEXT3. $\r$\n$\r$\nSAMPLETEXT4 $_CLICK"
!endif
!ifdef MUI_UNWELCOMEPAGE
${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "Welcome to the $(^NameDA) Uninstall Wizard"
${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "This wizard will guide you through the uninstallation of $(^NameDA).$\r$\n$\r$\nBefore starting the uninstallation, make sure $(^NameDA) is not running.$\r$\n$\r$\n$_CLICK"
!endif
!ifdef MUI_LICENSEPAGE
${LangFileString} MUI_TEXT_LICENSE_TITLE "License Agreement"
${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "Please review the license terms before installing $(^NameDA)."
${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "If you accept the terms of the agreement, click I Agree to continue. You must accept the agreement to install $(^NameDA)."
${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "If you accept the terms of the agreement, click the check box below. You must accept the agreement to install $(^NameDA). $_CLICK"
${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "If you accept the terms of the agreement, select the first option below. You must accept the agreement to install $(^NameDA). $_CLICK"
!endif
!ifdef MUI_UNLICENSEPAGE
${LangFileString} MUI_UNTEXT_LICENSE_TITLE "License Agreement"
${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "Please review the license terms before uninstalling $(^NameDA)."
${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "If you accept the terms of the agreement, click I Agree to continue. You must accept the agreement to uninstall $(^NameDA)."
${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "If you accept the terms of the agreement, click the check box below. You must accept the agreement to uninstall $(^NameDA). $_CLICK"
${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "If you accept the terms of the agreement, select the first option below. You must accept the agreement to uninstall $(^NameDA). $_CLICK"
!endif
!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
${LangFileString} MUI_INNERTEXT_LICENSE_TOP "Read the entire agreement:"
!endif
!ifdef MUI_COMPONENTSPAGE
${LangFileString} MUI_TEXT_COMPONENTS_TITLE "Choose Components"
${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "Choose which features of $(^NameDA) you want to install."
!endif
!ifdef MUI_UNCOMPONENTSPAGE
${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "Choose Components"
${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "Choose which features of $(^NameDA) you want to uninstall."
!endif
!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Description"
!ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Position your mouse over a component to see its description."
!else
${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Position your mouse over a component to see its description."
!endif
!endif
!ifdef MUI_DIRECTORYPAGE
${LangFileString} MUI_TEXT_DIRECTORY_TITLE "SAMPLETEXT5"
${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "You must locate your installation before $(^NameDA) can be properly installed."
!endif
!ifdef MUI_UNDIRECTORYPAGE
${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "Choose Uninstall Location"
${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "Choose the folder from which to uninstall $(^NameDA)."
!endif
!ifdef MUI_INSTFILESPAGE
${LangFileString} MUI_TEXT_INSTALLING_TITLE "Installing"
${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "Please wait while $(^NameDA) is being installed."
${LangFileString} MUI_TEXT_FINISH_TITLE "Installation Complete"
${LangFileString} MUI_TEXT_FINISH_SUBTITLE "Setup was completed successfully."
${LangFileString} MUI_TEXT_ABORT_TITLE "Installation Aborted"
${LangFileString} MUI_TEXT_ABORT_SUBTITLE "Setup was not completed successfully."
!endif
!ifdef MUI_UNINSTFILESPAGE
${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "Uninstalling"
${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE "Please wait while $(^NameDA) is being uninstalled."
${LangFileString} MUI_UNTEXT_FINISH_TITLE "Uninstallation Complete"
${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "Uninstall was completed successfully."
${LangFileString} MUI_UNTEXT_ABORT_TITLE "Uninstallation Aborted"
${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "Uninstall was not completed successfully."
!endif
!ifdef MUI_FINISHPAGE
${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "Completing the $(^NameDA) Setup Wizard"
${LangFileString} MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) has been installed on your computer. SAMPLETEXT6 $\r$\n$\r$\nClick Finish to close this wizard."
${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "Your computer must be restarted in order to complete the installation of $(^NameDA). Do you want to reboot now?"
!endif
!ifdef MUI_UNFINISHPAGE
${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "Completing the $(^NameDA) Uninstall Wizard"
${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) has been uninstalled from your computer.$\r$\n$\r$\nClick Finish to close this wizard."
${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "Your computer must be restarted in order to complete the uninstallation of $(^NameDA). Do you want to reboot now?"
!endif
!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "Reboot now"
${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "I want to manually reboot later"
${LangFileString} MUI_TEXT_FINISH_RUN "&Run $(^NameDA)"
${LangFileString} MUI_TEXT_FINISH_SHOWREADME "&Show Readme"
${LangFileString} MUI_BUTTONTEXT_FINISH "&Finish"
!endif
!ifdef MUI_STARTMENUPAGE
${LangFileString} MUI_TEXT_STARTMENU_TITLE "Choose Start Menu Folder"
${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "Choose a Start Menu folder for the $(^NameDA) shortcuts."
${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "Select the Start Menu folder in which you would like to create the program's shortcuts. You can also enter a name to create a new folder."
${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "Do not create shortcuts"
!endif
!ifdef MUI_UNCONFIRMPAGE
${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "Uninstall $(^NameDA)"
${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "Remove $(^NameDA) from your computer."
!endif
!ifdef MUI_ABORTWARNING
${LangFileString} MUI_TEXT_ABORTWARNING "Are you sure you want to quit before installing $(^Name)?"
!endif
!ifdef MUI_UNABORTWARNING
${LangFileString} MUI_UNTEXT_ABORTWARNING "Are you sure you want to quit $(^Name) Uninstall?"
!endif
!ifdef MULTIUSER_INSTALLMODEPAGE
${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Choose Users"
${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Choose for which users you want to install $(^NameDA)."
${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Select whether you want to install $(^NameDA) for yourself only or for all users of this computer. $(^ClickNext)"
${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS "Install for anyone using this computer"
${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Install just for me"
!endif

1
T7x/Contrib/License.txt Normal file
View File

@ -0,0 +1 @@
SAMPLELICENSEAGREEMENT

View File

@ -0,0 +1,72 @@
/*
NSIS Modern User Interface
Deprecated code - display warnings
*/
;--------------------------------
;InstallOptions
!define INSTALLOPTIONS_ERROR "MUI_INSTALLOPTIONS_* macros are no longer a part of MUI2. Include InstallOptions.nsh and use INSTALLOPTIONS_* macros instead. It is also recommended to upgrade to nsDialogs."
!macro MUI_INSTALLOPTIONS_EXTRACT FILE
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_EXTRACT_AS FILE FILENAME
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_DISPLAY FILE
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_DISPLAY_RETURN FILE
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_INITDIALOG FILE
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_SHOW
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_SHOW_RETURN
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_READ VAR FILE SECTION KEY
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE
!error "${INSTALLOPTIONS_ERROR}"
!macroend
!macro MUI_RESERVEFILE_INSTALLOPTIONS
!define MUI_DOLLAR "$"
!error "MUI_RESERVEFILE_INSTALLOPTIONS is no longer supported as InstallOptions is no longer used by MUI2. Instead, use ReserveFile '${MUI_DOLLAR}{NSISDIR}\Plugins\InstallOptions.dll'. It is also recommended to upgrade to nsDialogs."
!macroend

View File

@ -0,0 +1,304 @@
/*
NSIS Modern User Interface
Interface code for all pages
*/
;--------------------------------
;Variables
Var mui.Header.Text
Var mui.Header.Text.Font
Var mui.Header.SubText
Var mui.Header.Background
Var mui.Header.Image
Var mui.Branding.Text
Var mui.Branding.Background
Var mui.Line.Standard
Var mui.Line.FullWindow
Var mui.Button.Next
Var mui.Button.Cancel
Var mui.Button.Back
;--------------------------------
;General interface settings
!macro MUI_INTERFACE
!ifndef MUI_INTERFACE
!define MUI_INTERFACE
;These values are set after the interface settings in the script,
;so the script itself can override all values.
;Default interface settings in nsisconf.nsh
!ifdef MUI_INSERT_NSISCONF
!insertmacro MUI_NSISCONF
!endif
;Default interface settings
!insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
!insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
!insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
!insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
;Default header images
!ifdef MUI_HEADERIMAGE
!insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\UGX\banner.bmp"
!ifndef MUI_HEADERIMAGE_UNBITMAP
!define MUI_HEADERIMAGE_UNBITMAP "${MUI_HEADERIMAGE_BITMAP}"
!ifdef MUI_HEADERIMAGE_BITMAP_NOSTRETCH
!insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH ""
!endif
!endif
!ifdef MUI_HEADERIMAGE_BITMAP_RTL
!ifndef MUI_HEADERIMAGE_UNBITMAP_RTL
!define MUI_HEADERIMAGE_UNBITMAP_RTL "${MUI_HEADERIMAGE_BITMAP_RTL}"
!ifdef MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH
!insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH ""
!endif
!endif
!endif
!endif
;Default texts
!insertmacro MUI_DEFAULT MUI_ABORTWARNING_TEXT "$(MUI_TEXT_ABORTWARNING)"
!insertmacro MUI_DEFAULT MUI_UNABORTWARNING_TEXT "$(MUI_UNTEXT_ABORTWARNING)"
;Apply settings
XPStyle On ;XP style setting in manifest resource
;Dialog resources
ChangeUI all "${MUI_UI}"
!ifdef MUI_HEADERIMAGE
!ifndef MUI_HEADERIMAGE_RIGHT
ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE}"
!else
ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE_RIGHT}"
!endif
!endif
;Icons
Icon "${MUI_ICON}"
UninstallIcon "${MUI_UNICON}"
!endif
!macroend
;--------------------------------
;Abort warning message box
!macro MUI_ABORTWARNING
!ifdef MUI_ABORTWARNING_CANCEL_DEFAULT
MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit
!else
MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit
!endif
Abort
mui.Quit:
!macroend
!macro MUI_UNABORTWARNING
!ifdef MUI_UNABORTWARNING_CANCEL_DEFAULT
MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit
!else
MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit
!endif
Abort
mui.Quit:
!macroend
;--------------------------------
;Initialization of GUI
!macro MUI_HEADERIMAGE_INIT UNINSTALLER
;Load and display header image
!ifdef MUI_HEADERIMAGE
InitPluginsDir
!ifdef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL
${if} $(^RTL) == 1
File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL}"
!ifndef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL_NOSTRETCH
SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\modern-header.bmp"
!else
SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header.bmp"
!endif
${else}
!endif
File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UNINSTALLER}BITMAP}"
!ifndef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_NOSTRETCH
SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\modern-header.bmp"
!else
SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header.bmp"
!endif
!ifdef MUI_HEADERIMAGE_${UNINSTALLER}BITMAP_RTL
${endif}
!endif
!endif
!macroend
!macro MUI_GUIINIT_OUTERDIALOG UNINSTALLER
;Initialize outer dialog (fonts & colors)
;Header
GetDlgItem $mui.Header.Text $HWNDPARENT 1037
CreateFont $mui.Header.Text.Font "$(^Font)" "$(^FontSize)" "700"
SendMessage $mui.Header.Text ${WM_SETFONT} $mui.Header.Text.Font 0
GetDlgItem $mui.Header.SubText $HWNDPARENT 1038
!ifndef MUI_HEADER_TRANSPARENT_TEXT
SetCtlColors $mui.Header.Text "" "${MUI_BGCOLOR}"
SetCtlColors $mui.Header.SubText "" "${MUI_BGCOLOR}"
!else
SetCtlColors $mui.Header.Text "" "transparent"
SetCtlColors $mui.Header.SubText "" "transparent"
!endif
;Header image
!insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}"
;Header background
GetDlgItem $mui.Header.Background $HWNDPARENT 1034
SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}"
;Header image background
GetDlgItem $mui.Header.Image $HWNDPARENT 1039
SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}"
;Branding text
GetDlgItem $mui.Branding.Background $HWNDPARENT 1028
SetCtlColors $mui.Branding.Background /BRANDING
GetDlgItem $mui.Branding.Text $HWNDPARENT 1256
SetCtlColors $mui.Branding.Text /BRANDING
SendMessage $mui.Branding.Text ${WM_SETTEXT} 0 "STR:$(^Branding) "
;Lines
GetDlgItem $mui.Line.Standard $HWNDPARENT 1035
GetDlgItem $mui.Line.FullWindow $HWNDPARENT 1045
;Buttons
GetDlgItem $mui.Button.Next $HWNDPARENT 1
GetDlgItem $mui.Button.Cancel $HWNDPARENT 2
GetDlgItem $mui.Button.Back $HWNDPARENT 3
!macroend
;--------------------------------
;Interface functions
!macro MUI_FUNCTION_GUIINIT
Function .onGUIInit
!insertmacro MUI_GUIINIT_OUTERDIALOG ""
!ifdef MUI_PAGE_FUNCTION_GUIINIT
Call "${MUI_PAGE_FUNCTION_GUIINIT}"
!endif
!ifdef MUI_CUSTOMFUNCTION_GUIINIT
Call "${MUI_CUSTOMFUNCTION_GUIINIT}"
!endif
FunctionEnd
!macroend
!macro MUI_UNFUNCTION_GUIINIT
Function un.onGUIInit
!insertmacro MUI_GUIINIT_OUTERDIALOG UN
!ifdef MUI_UNPAGE_FUNCTION_GUIINIT
Call "${MUI_UNPAGE_FUNCTION_GUIINIT}"
!endif
!ifdef MUI_CUSTOMFUNCTION_UNGUIINIT
Call "${MUI_CUSTOMFUNCTION_UNGUIINIT}"
!endif
FunctionEnd
!macroend
!macro MUI_FUNCTION_ABORTWARNING
Function .onUserAbort
!ifdef MUI_PAGE_FUNCTION_ABORTWARNING
Call ${MUI_PAGE_FUNCTION_ABORTWARNING}
!endif
!ifdef MUI_ABORTWARNING
!insertmacro MUI_ABORTWARNING
!endif
!ifdef MUI_CUSTOMFUNCTION_ABORT
Call "${MUI_CUSTOMFUNCTION_ABORT}"
!endif
FunctionEnd
!macroend
!macro MUI_FUNCTION_UNABORTWARNING
Function un.onUserAbort
!ifdef MUI_UNPAGE_FUNCTION_ABORTWARNING
Call ${MUI_UNPAGE_FUNCTION_ABORTWARNING}
!endif
!ifdef MUI_UNABORTWARNING
!insertmacro MUI_UNABORTWARNING
!endif
!ifdef MUI_CUSTOMFUNCTION_UNABORT
Call "${MUI_CUSTOMFUNCTION_UNABORT}"
!endif
FunctionEnd
!macroend

View File

@ -0,0 +1,192 @@
/*
NSIS Modern User Interface
Localization
*/
;--------------------------------
;Variables
!macro MUI_LANGDLL_VARIABLES
!ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME
!ifndef MUI_LANGDLL_REGISTRY_VARAIBLES
!define MUI_LANGDLL_REGISTRY_VARAIBLES
;/GLOBAL because the macros are included in a function
Var /GLOBAL mui.LangDLL.RegistryLanguage
!endif
!endif
!macroend
;--------------------------------
;Include langauge files
!macro MUI_LANGUAGE LANGUAGE
;Include a language
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_INSERT
LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nlf"
;Include language file
!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nsh" "${NSISDIR}\Contrib\Language files\English.nsh"
;Add language to list of languages for selection dialog
!ifndef MUI_LANGDLL_LANGUAGES
!define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' "
!define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
!else
!ifdef MUI_LANGDLL_LANGUAGES_TEMP
!undef MUI_LANGDLL_LANGUAGES_TEMP
!endif
!define MUI_LANGDLL_LANGUAGES_TEMP "${MUI_LANGDLL_LANGUAGES}"
!undef MUI_LANGDLL_LANGUAGES
!ifdef MUI_LANGDLL_LANGUAGES_CP_TEMP
!undef MUI_LANGDLL_LANGUAGES_CP_TEMP
!endif
!define MUI_LANGDLL_LANGUAGES_CP_TEMP "${MUI_LANGDLL_LANGUAGES_CP}"
!undef MUI_LANGDLL_LANGUAGES_CP
!define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' ${MUI_LANGDLL_LANGUAGES_TEMP}"
!define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_LANGUAGES_CP_TEMP}"
!endif
!verbose pop
!macroend
;--------------------------------
;Language selection
!macro MUI_LANGDLL_DISPLAY
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_LANGDLL_VARIABLES
!insertmacro MUI_DEFAULT MUI_LANGDLL_WINDOWTITLE "Installer Language"
!insertmacro MUI_DEFAULT MUI_LANGDLL_INFO "Please select a language."
!ifdef MUI_LANGDLL_REGISTRY_VARAIBLES
ReadRegStr $mui.LangDLL.RegistryLanguage "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}"
${if} $mui.LangDLL.RegistryLanguage != ""
;Set default langauge to registry language
StrCpy $LANGUAGE $mui.LangDLL.RegistryLanguage
${endif}
!endif
!ifdef NSIS_CONFIG_SILENT_SUPPORT
${unless} ${Silent}
!endif
!ifndef MUI_LANGDLL_ALWAYSSHOW
!ifdef MUI_LANGDLL_REGISTRY_VARAIBLES
${if} $mui.LangDLL.RegistryLanguage == ""
!endif
!endif
;Show langauge selection dialog
!ifdef MUI_LANGDLL_ALLLANGUAGES
LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" A ${MUI_LANGDLL_LANGUAGES} ""
!else
LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" AC ${MUI_LANGDLL_LANGUAGES_CP} ""
!endif
Pop $LANGUAGE
${if} $LANGUAGE == "cancel"
Abort
${endif}
!ifndef MUI_LANGDLL_ALWAYSSHOW
!ifdef MUI_LANGDLL_REGISTRY_VARAIBLES
${endif}
!endif
!endif
!ifdef NSIS_CONFIG_SILENT_SUPPORT
${endif}
!endif
!verbose pop
!macroend
!macro MUI_LANGDLL_SAVELANGUAGE
;Save language in registry
!ifndef MUI_PAGE_UNINSTALLER
IfAbort mui.langdllsavelanguage_abort
!ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME
WriteRegStr "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" $LANGUAGE
!endif
mui.langdllsavelanguage_abort:
!endif
!macroend
!macro MUI_UNGETLANGUAGE
;Get language from registry in uninstaller
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_LANGDLL_VARIABLES
!ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME
ReadRegStr $mui.LangDLL.RegistryLanguage "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}"
${if} $mui.LangDLL.RegistryLanguage = ""
!endif
!insertmacro MUI_LANGDLL_DISPLAY
!ifdef MUI_LANGDLL_REGISTRY_ROOT & MUI_LANGDLL_REGISTRY_KEY & MUI_LANGDLL_REGISTRY_VALUENAME
${else}
StrCpy $LANGUAGE $mui.LangDLL.RegistryLanguage
${endif}
!endif
!verbose pop
!macroend
;--------------------------------
;Rerserve LangDLL file
!macro MUI_RESERVEFILE_LANGDLL
!verbose push
!verbose ${MUI_VERBOSE}
ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
!verbose pop
!macroend

View File

@ -0,0 +1,122 @@
/*
NSIS Modern User Interface - Version 2.0
Copyright 2002-2009 Joost Verburg
*/
!echo "NSIS Modern User Interface version 2.0 - Copyright 2002-2009 Joost Verburg"
;--------------------------------
!ifndef MUI_INCLUDED
!define MUI_INCLUDED
!define MUI_SYSVERSION "2.0"
!verbose push
!ifndef MUI_VERBOSE
!define MUI_VERBOSE 3
!endif
!verbose ${MUI_VERBOSE}
!addincludedir "${NSISDIR}\Contrib\Modern UI 2"
;--------------------------------
;Header files required by MUI
!include WinMessages.nsh
!include LogicLib.nsh
!include nsDialogs.nsh
!include LangFile.nsh
;--------------------------------
;Macros for compile-time defines
!macro MUI_DEFAULT SYMBOL CONTENT
;Define symbol if not yet defined
;For setting default values
!ifndef "${SYMBOL}"
!define "${SYMBOL}" "${CONTENT}"
!endif
!macroend
!macro MUI_SET SYMBOL CONTENT
;Define symbol and undefine if neccesary
!insertmacro MUI_UNSET "${SYMBOL}"
!define "${SYMBOL}" "${CONTENT}"
!macroend
!macro MUI_UNSET SYMBOL
;Undefine symbol if defined
!ifdef "${SYMBOL}"
!undef "${SYMBOL}"
!endif
!macroend
;--------------------------------
;MUI interface
!include "Deprecated.nsh"
!include "Interface.nsh"
!include "Localization.nsh"
!include "Pages.nsh"
;--------------------------------
;Pages
!include "Pages\Components.nsh"
!include "Pages\Directory.nsh"
!include "Pages\Finish.nsh"
!include "Pages\InstallFiles.nsh"
!include "Pages\License.nsh"
!include "Pages\StartMenu.nsh"
!include "Pages\UninstallConfirm.nsh"
!include "Pages\Welcome.nsh"
;--------------------------------
;Insert MUI code in script
!macro MUI_INSERT
!ifndef MUI_INSERT
!define MUI_INSERT
;This macro is included when the first language file is included,
;after the pages.
;Interface settings
!insertmacro MUI_INTERFACE
;Interface functions - Installer
!insertmacro MUI_FUNCTION_GUIINIT
!insertmacro MUI_FUNCTION_ABORTWARNING
;Interface functions - Uninstaller
!ifdef MUI_UNINSTALLER
!insertmacro MUI_UNFUNCTION_GUIINIT
!insertmacro MUI_FUNCTION_UNABORTWARNING
!endif
!endif
!macroend
!endif
!verbose pop

View File

@ -0,0 +1,160 @@
/*
NSIS Modern User Interface
Support code for all pages
*/
;--------------------------------
;Page initialization
!macro MUI_PAGE_INIT
;Include interface settings in neccesary
!insertmacro MUI_INTERFACE
;Define settings for installer page
!insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER
!insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER_PREFIX
!insertmacro MUI_UNSET MUI_PAGE_UNINSTALLER_FUNCPREFIX
!insertmacro MUI_SET MUI_PAGE_UNINSTALLER_PREFIX ""
!insertmacro MUI_SET MUI_PAGE_UNINSTALLER_FUNCPREFIX ""
;Generate unique ID
!insertmacro MUI_UNSET MUI_UNIQUEID
!define MUI_UNIQUEID ${__LINE__}
!macroend
!macro MUI_UNPAGE_INIT
;Include interface settings
!insertmacro MUI_INTERFACE
;Define prefixes for uninstaller page
!insertmacro MUI_SET MUI_UNINSTALLER ""
!insertmacro MUI_SET MUI_PAGE_UNINSTALLER ""
!insertmacro MUI_SET MUI_PAGE_UNINSTALLER_PREFIX "UN"
!insertmacro MUI_SET MUI_PAGE_UNINSTALLER_FUNCPREFIX "un."
;Generate unique ID
!insertmacro MUI_UNSET MUI_UNIQUEID
!define MUI_UNIQUEID ${__LINE__}
!macroend
;--------------------------------
;Header text for standard MUI page
!macro MUI_HEADER_TEXT_PAGE TEXT SUBTEXT
!ifdef MUI_PAGE_HEADER_TEXT & MUI_PAGE_HEADER_SUBTEXT
!insertmacro MUI_HEADER_TEXT "${MUI_PAGE_HEADER_TEXT}" "${MUI_PAGE_HEADER_SUBTEXT}"
!else ifdef MUI_PAGE_HEADER_TEXT
!insertmacro MUI_HEADER_TEXT "${MUI_PAGE_HEADER_TEXT}" "${SUBTEXT}"
!else ifdef MUI_PAGE_HEADER_SUBTEXT
!insertmacro MUI_HEADER_TEXT "${TEXT}" "${MUI_PAGE_HEADER_SUBTEXT}"
!else
!insertmacro MUI_HEADER_TEXT "${TEXT}" "${SUBTEXT}"
!endif
!insertmacro MUI_UNSET MUI_PAGE_HEADER_TEXT
!insertmacro MUI_UNSET MUI_PAGE_HEADER_SUBTEXT
!macroend
;--------------------------------
;Header text for custom page
!macro MUI_HEADER_TEXT TEXT SUBTEXT ;Called from script
!verbose push
!verbose ${MUI_VERBOSE}
!ifdef MUI_HEADER_TRANSPARENT_TEXT
LockWindow on
!endif
SendMessage $mui.Header.Text ${WM_SETTEXT} 0 "STR:${TEXT}"
SendMessage $mui.Header.SubText ${WM_SETTEXT} 0 "STR:${SUBTEXT}"
!ifdef MUI_HEADER_TRANSPARENT_TEXT
LockWindow off
!endif
!verbose pop
!macroend
;--------------------------------
;Custom page functions
!macro MUI_PAGE_FUNCTION_CUSTOM TYPE
!ifdef MUI_PAGE_CUSTOMFUNCTION_${TYPE}
Call "${MUI_PAGE_CUSTOMFUNCTION_${TYPE}}"
!undef MUI_PAGE_CUSTOMFUNCTION_${TYPE}
!endif
!macroend
;--------------------------------
;Support for full window pages (like welcome/finish page)
!macro MUI_PAGE_FUNCTION_FULLWINDOW
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_FULLWINDOW
!define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_FULLWINDOW
Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageLoadFullWindow
LockWindow on
;The branding text needs to be hidden because the full windows page
;overlaps with it.
ShowWindow $mui.Branding.Background ${SW_HIDE}
ShowWindow $mui.Branding.Text ${SW_HIDE}
;The texts need to be hidden because otherwise they may show through
;the page above when the Alt key is pressed.
ShowWindow $mui.Header.Text ${SW_HIDE}
ShowWindow $mui.Header.SubText ${SW_HIDE}
ShowWindow $mui.Header.Image ${SW_HIDE}
;Show line below full width of page
ShowWindow $mui.Line.Standard ${SW_HIDE}
ShowWindow $mui.Line.FullWindow ${SW_NORMAL}
LockWindow off
FunctionEnd
Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageUnloadFullWindow
;Set everything back to normal again
LockWindow on
ShowWindow $mui.Branding.Background ${SW_NORMAL}
ShowWindow $mui.Branding.Text ${SW_NORMAL}
ShowWindow $mui.Header.Text ${SW_NORMAL}
ShowWindow $mui.Header.SubText ${SW_NORMAL}
ShowWindow $mui.Header.Image ${SW_NORMAL}
ShowWindow $mui.Line.Standard ${SW_NORMAL}
ShowWindow $mui.Line.FullWindow ${SW_HIDE}
LockWindow off
FunctionEnd
!endif
!macroend

View File

@ -0,0 +1,242 @@
/*
NSIS Modern User Interface
Components page
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_COMPONENTSPAGE_INTERFACE
!ifndef MUI_COMPONENTSPAGE_INTERFACE
!define MUI_COMPONENTSPAGE_INTERFACE
Var mui.ComponentsPage
Var mui.ComponentsPage.Text
Var mui.ComponentsPage.InstTypesText
Var mui.ComponentsPage.ComponentsText
Var mui.ComponentsPage.InstTypes
Var mui.ComponentsPage.Components
Var mui.ComponentsPage.DescriptionTitle
Var mui.ComponentsPage.DescriptionText.Info
Var mui.ComponentsPage.DescriptionText
Var mui.ComponentsPage.SpaceRequired
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp"
!insertmacro MUI_DEFAULT MUI_UI_COMPONENTSPAGE_SMALLDESC "${NSISDIR}\Contrib\UIs\modern_smalldesc.exe"
!insertmacro MUI_DEFAULT MUI_UI_COMPONENTSPAGE_NODESC "${NSISDIR}\Contrib\UIs\modern_nodesc.exe"
;Apply settings
!ifdef MUI_COMPONENTSPAGE_SMALLDESC
ChangeUI IDD_SELCOM "${MUI_UI_COMPONENTSPAGE_SMALLDESC}"
!else ifdef MUI_COMPONENTSPAGE_NODESC
ChangeUI IDD_SELCOM "${MUI_UI_COMPONENTSPAGE_NODESC}"
!endif
CheckBitmap "${MUI_COMPONENTSPAGE_CHECKBITMAP}"
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_COMPONENTS
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}COMPONENTSPAGE ""
!insertmacro MUI_COMPONENTSPAGE_INTERFACE
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_TOP ""
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_COMPLIST ""
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_INSTTYPE ""
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE)"
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO)"
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}components
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsLeave_${MUI_UNIQUEID}
Caption " "
ComponentText "${MUI_COMPONENTSPAGE_TEXT_TOP}" "${MUI_COMPONENTSPAGE_TEXT_INSTTYPE}" "${MUI_COMPONENTSPAGE_TEXT_COMPLIST}"
PageExEnd
!insertmacro MUI_FUNCTION_COMPONENTSPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.ComponentsLeave_${MUI_UNIQUEID}
!undef MUI_COMPONENTSPAGE_TEXT_TOP
!undef MUI_COMPONENTSPAGE_TEXT_COMPLIST
!undef MUI_COMPONENTSPAGE_TEXT_INSTTYPE
!insertmacro MUI_UNSET MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE
!insertmacro MUI_UNSET MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO
!macroend
!macro MUI_PAGE_COMPONENTS
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_COMPONENTS
!verbose pop
!macroend
!macro MUI_UNPAGE_COMPONENTS
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_COMPONENTS
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_COMPONENTSPAGE PRE SHOW LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_COMPONENTS_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_COMPONENTS_SUBTITLE)
FunctionEnd
Function "${SHOW}"
;Get control hanldes
FindWindow $mui.ComponentsPage "#32770" "" $HWNDPARENT
GetDlgItem $mui.ComponentsPage.Text $mui.ComponentsPage 1006
GetDlgItem $mui.ComponentsPage.InstTypesText $mui.ComponentsPage 1021
GetDlgItem $mui.ComponentsPage.ComponentsText $mui.ComponentsPage 1022
GetDlgItem $mui.ComponentsPage.InstTypes $mui.ComponentsPage 1017
GetDlgItem $mui.ComponentsPage.Components $mui.ComponentsPage 1032
GetDlgItem $mui.ComponentsPage.DescriptionTitle $mui.ComponentsPage 1042
GetDlgItem $mui.ComponentsPage.DescriptionText $mui.ComponentsPage 1043
GetDlgItem $mui.ComponentsPage.SpaceRequired $mui.ComponentsPage 1023
;Default text in description textbox
SendMessage $mui.ComponentsPage.DescriptionTitle ${WM_SETTEXT} 0 "STR:${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}"
EnableWindow $mui.ComponentsPage.DescriptionText 0
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}"
StrCpy $mui.ComponentsPage.DescriptionText.Info "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}" ;Text for current components page
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend
;--------------------------------
;Script functions for components descriptions
!macro MUI_DESCRIPTION_BEGIN
${if} $0 == -1
;No mouse hover over component in list
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:"
EnableWindow $mui.ComponentsPage.DescriptionText 0
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:$mui.ComponentsPage.DescriptionText.Info"
!macroend
!macro MUI_DESCRIPTION_TEXT VAR TEXT
!verbose push
!verbose ${MUI_VERBOSE}
${elseif} $0 == ${VAR}
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:"
EnableWindow $mui.ComponentsPage.DescriptionText 1
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:${TEXT}"
!verbose pop
!macroend
!macro MUI_DESCRIPTION_END
!verbose push
!verbose ${MUI_VERBOSE}
${endif}
!verbose pop
!macroend
!macro MUI_FUNCTION_DESCRIPTION_BEGIN
!verbose push
!verbose ${MUI_VERBOSE}
Function .onMouseOverSection
!insertmacro MUI_DESCRIPTION_BEGIN
!verbose pop
!macroend
!macro MUI_FUNCTION_DESCRIPTION_END
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_DESCRIPTION_END
!ifdef MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION
Call "${MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION}"
!endif
FunctionEnd
!verbose pop
!macroend
!macro MUI_UNFUNCTION_DESCRIPTION_BEGIN
!verbose push
!verbose ${MUI_VERBOSE}
Function un.onMouseOverSection
!insertmacro MUI_DESCRIPTION_BEGIN
!verbose pop
!macroend
!macro MUI_UNFUNCTION_DESCRIPTION_END
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_DESCRIPTION_END
!ifdef MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION
Call "${MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION}"
!endif
FunctionEnd
!verbose pop
!macroend

View File

@ -0,0 +1,143 @@
/*
NSIS Modern User Interface
Directory page
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_DIRECTORYPAGE_INTERFACE
!ifndef MUI_DIRECTORYPAGE_INTERFACE
!define MUI_DIRECTORYPAGE_INTERFACE
Var mui.DirectoryPage
Var mui.DirectoryPage.Text
Var mui.DirectoryPage.DirectoryBox
Var mui.DirectoryPage.Directory
Var mui.DirectoryPage.BrowseButton
Var mui.DirectoryPage.SpaceRequired
Var mui.DirectoryPage.SpaceAvailable
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_DIRECTORY
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}DIRECTORYPAGE ""
!insertmacro MUI_DIRECTORYPAGE_INTERFACE
!insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_TOP "SAMPLETEXT"
!insertmacro MUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_DESTINATION "Location:"
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}directory
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID}
Caption " "
DirText "${MUI_DIRECTORYPAGE_TEXT_TOP}" "${MUI_DIRECTORYPAGE_TEXT_DESTINATION}"
!ifdef MUI_DIRECTORYPAGE_VARIABLE
DirVar "${MUI_DIRECTORYPAGE_VARIABLE}"
!endif
!ifdef MUI_DIRECTORYPAGE_VERIFYONLEAVE
DirVerify leave
!endif
PageExEnd
!insertmacro MUI_FUNCTION_DIRECTORYPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID}
!undef MUI_DIRECTORYPAGE_TEXT_TOP
!undef MUI_DIRECTORYPAGE_TEXT_DESTINATION
!insertmacro MUI_UNSET MUI_DIRECTORYPAGE_VARIABLE
!insertmacro MUI_UNSET MUI_DIRECTORYPAGE_VERIFYONLEAVE
!macroend
!macro MUI_PAGE_DIRECTORY
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_DIRECTORY
!verbose pop
!macroend
!macro MUI_UNPAGE_DIRECTORY
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_DIRECTORY
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_DIRECTORYPAGE PRE SHOW LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_DIRECTORY_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_DIRECTORY_SUBTITLE)
ReadRegStr $0 HKLM "SOFTWARE\Activision\Call of Duty WAW" "InstallPath"
ReadRegStr $1 HKLM "SOFTWARE\UGX-Mods\Map Installer" "InstallPath"
;If the key has already been created by a past installation, and if it matches the key found for the install path, continue
${if} $0 != ""
${AndIf} $0 == $1
Abort
${EndIf}
${if} $0 != ""
StrCpy $INSTDIR $0
WriteRegStr HKLM "Software\UGX-Mods\Map Installer" "InstallPath" "$INSTDIR"
Abort
${EndIf}
;If we haven't aborted yet, then this is a first time install and their installation key is missing from registry. Let them find their directory and then we will save it to the registry later in InstallFiles.nsh
FunctionEnd
Function "${SHOW}"
;Get control handles
FindWindow $mui.DirectoryPage "#32770" "" $HWNDPARENT
GetDlgItem $mui.DirectoryPage.Text $mui.DirectoryPage 1006
GetDlgItem $mui.DirectoryPage.DirectoryBox $mui.DirectoryPage 1020
GetDlgItem $mui.DirectoryPage.Directory $mui.DirectoryPage 1019
GetDlgItem $mui.DirectoryPage.BrowseButton $mui.DirectoryPage 1001
GetDlgItem $mui.DirectoryPage.SpaceRequired $mui.DirectoryPage 1023
GetDlgItem $mui.DirectoryPage.SpaceAvailable $mui.DirectoryPage 1024
!ifdef MUI_DIRECTORYPAGE_BGCOLOR
SetCtlColors $mui.DirectoryPage.Directory "" "${MUI_DIRECTORYPAGE_BGCOLOR}"
!endif
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend

View File

@ -0,0 +1,491 @@
/*
NSIS Modern User Interface
Finish page (implemented using nsDialogs)
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_FINISHPAGE_INTERFACE
!ifndef MUI_FINISHPAGE_INTERFACE
!define MUI_FINISHPAGE_INTERFACE
Var mui.FinishPage
Var mui.FinishPage.Image
Var mui.FinishPage.Image.Bitmap
Var mui.FinishPage.Title
Var mui.FinishPage.Title.Font
Var mui.FinishPage.Text
!endif
!ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
!ifndef MUI_FINISHPAGE_RETURNVALUE_VARIABLES
!define MUI_FINISHPAGE_RETURNVALUE_VARIABLES
Var mui.FinishPage.ReturnValue
!endif
!else ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME
!ifndef MUI_FINISHPAGE_RETURNVALUE_VARIABLES
!define MUI_FINISHPAGE_RETURNVALUE_VARIABLES
Var mui.FinishPage.ReturnValue
!endif
!endif
!ifdef MUI_FINISHPAGE_CANCEL_ENABLED
!ifndef MUI_FINISHPAGE_CANCEL_ENABLED_VARIABLES
!define MUI_FINISHPAGE_CANCEL_ENABLED_VARIABLES
Var mui.FinishPage.DisableAbortWarning
!endif
!endif
!ifdef MUI_FINISHPAGE_RUN
!ifndef MUI_FINISHPAGE_RUN_VARIABLES
!define MUI_FINISHPAGE_RUN_VARIABLES
Var mui.FinishPage.Run
!endif
!endif
!ifdef MUI_FINISHPAGE_SHOWREADME
!ifndef MUI_FINISHPAGE_SHOREADME_VARAIBLES
!define MUI_FINISHPAGE_SHOREADME_VARAIBLES
Var mui.FinishPage.ShowReadme
!endif
!endif
!ifdef MUI_FINISHPAGE_LINK
!ifndef MUI_FINISHPAGE_LINK_VARIABLES
!define MUI_FINISHPAGE_LINK_VARIABLES
Var mui.FinishPage.Link
!endif
!endif
!ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
!ifndef MUI_FINISHPAGE_REBOOT_VARIABLES
!define MUI_FINISHPAGE_REBOOT_VARIABLES
Var mui.FinishPage.RebootNow
Var mui.FinishPage.RebootLater
!endif
!endif
!insertmacro MUI_DEFAULT MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp"
!macroend
;--------------------------------
;Interface initialization
!macro MUI_FINISHPAGE_GUIINIT
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_GUINIT
!define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_GUINIT
Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.GUIInit
InitPluginsDir
File "/oname=$PLUGINSDIR\modern-wizard.bmp" "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}"
!ifdef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT
Call "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT}"
!endif
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE_NOAUTOCLOSE
SetAutoClose true
!endif
FunctionEnd
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.GUIInit
!endif
!macroend
;--------------------------------
;Abort warning
!macro MUI_FINISHPAGE_ABORTWARNING
!ifdef MUI_FINISHPAGE_CANCEL_ENABLED
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE_ABORTWARNING
!define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE_ABORTWARNING
Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.AbortWarning
${if} $mui.FinishPage.DisableAbortWarning == "1"
Quit
${endif}
!ifdef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_ABORTWARNING
Call ${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_ABORTWARNING}
!endif
FunctionEnd
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_ABORTWARNING ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.AbortWarning
!endif
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_FINISH
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}FINISHPAGE ""
!insertmacro MUI_FINISHPAGE_INTERFACE
!insertmacro MUI_FINISHPAGE_GUIINIT
!insertmacro MUI_FINISHPAGE_ABORTWARNING
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TITLE "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_TITLE)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_TEXT)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_BUTTON "$(MUI_BUTTONTEXT_FINISH)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_REBOOT)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTNOW "$(MUI_TEXT_FINISH_REBOOTNOW)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTLATER "$(MUI_TEXT_FINISH_REBOOTLATER)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_RUN_TEXT "$(MUI_TEXT_FINISH_RUN)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_SHOWREADME_TEXT "$(MUI_TEXT_FINISH_SHOWREADME)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_LINK_COLOR "000080"
!insertmacro MUI_PAGE_FUNCTION_FULLWINDOW
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Pre_${MUI_UNIQUEID} \
${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Leave_${MUI_UNIQUEID}
Caption " "
PageExEnd
!insertmacro MUI_FUNCTION_FINISHPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Pre_${MUI_UNIQUEID} \
${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Leave_${MUI_UNIQUEID} \
${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.FinishPage.Link_${MUI_UNIQUEID}
!insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE
!insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE_3LINES
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_LARGE
!insertmacro MUI_UNSET MUI_FINISHPAGE_BUTTON
!insertmacro MUI_UNSET MUI_FINISHPAGE_CANCEL_ENABLED
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOT
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOTNOW
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_REBOOTLATER
!insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTLATER_DEFAULT
!insertmacro MUI_UNSET MUI_FINISHPAGE_RUN
!insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_TEXT
!insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_PARAMETERS
!insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_NOTCHECKED
!insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_FUNCTION
!insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME
!insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_TEXT
!insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
!insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_FUNCTION
!insertmacro MUI_UNSET MUI_FINISHPAGE_LINK
!insertmacro MUI_UNSET MUI_FINISHPAGE_LINK_LOCATION
!insertmacro MUI_UNSET MUI_FINISHPAGE_LINK_COLOR
!insertmacro MUI_UNSET MUI_FINISHPAGE_NOREBOOTSUPPORT
!insertmacro MUI_UNSET MUI_FINISHPAGE_ABORTWARNINGCHECK
!insertmacro MUI_UNSET MUI_FINISHPAGE_CURFIELD_TOP
!insertmacro MUI_UNSET MUI_FINISHPAGE_CURFIELD_BOTTOM
!macroend
!macro MUI_PAGE_FINISH
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_FINISH
!verbose pop
!macroend
!macro MUI_UNPAGE_FINISH
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_FINISH
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_FINISHPAGE PRE LEAVE LINK
!ifdef MUI_FINISHPAGE_LINK
Function "${LINK}"
ExecShell open "${MUI_FINISHPAGE_LINK_LOCATION}"
FunctionEnd
!endif
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
;Set text on Next button
SendMessage $mui.Button.Next ${WM_SETTEXT} 0 "STR:${MUI_FINISHPAGE_BUTTON}"
;Enable cancel button if set in script
!ifdef MUI_FINISHPAGE_CANCEL_ENABLED
EnableWindow $mui.Button.Cancel 1
!endif
;Create dialog
nsDialogs::Create 1044
Pop $mui.FinishPage
nsDialogs::SetRTL $(^RTL)
SetCtlColors $mui.FinishPage "" "${MUI_BGCOLOR}"
;Image control
${NSD_CreateBitmap} 0u 0u 109u 193u ""
Pop $mui.FinishPage.Image
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
${NSD_SetStretchedImage} $mui.FinishPage.Image $PLUGINSDIR\modern-wizard.bmp $mui.FinishPage.Image.Bitmap
!else
${NSD_SetImage} $mui.FinishPage.Image $PLUGINSDIR\modern-wizard.bmp $mui.FinishPage.Image.Bitmap
!endif
;Positiong of controls
;Title
!ifndef MUI_FINISHPAGE_TITLE_3LINES
!define MUI_FINISHPAGE_TITLE_HEIGHT 28
!else
!define MUI_FINISHPAGE_TITLE_HEIGHT 38
!endif
;Text
;17 = 10 (top margin) + 7 (distance between texts)
!define /math MUI_FINISHPAGE_TEXT_TOP 17 + ${MUI_FINISHPAGE_TITLE_HEIGHT}
;Height if space required for radio buttons or check boxes
!ifndef MUI_FINISHPAGE_TEXT_LARGE
!define MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS 40
!else
!define MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS 60
!endif
!define /math MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS ${MUI_FINISHPAGE_TEXT_TOP} + ${MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS}
;Positioning of radio buttons to ask for a reboot
!ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
!define /math MUI_FINISHPAGE_REBOOTNOW_TOP ${MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS} + 5 ;Distance between text and options
;25 = 10 (height of first radio button) + 15 (distance between buttons)
!define /math MUI_FINISHPAGE_REBOOTLATER_TOP ${MUI_FINISHPAGE_REBOOTNOW_TOP} + 25
!endif
;Positioning of checkboxes
!ifdef MUI_FINISHPAGE_RUN
!define /math MUI_FINISHPAGE_RUN_TOP ${MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS} + 5 ;Distance between text and options
!endif
!ifdef MUI_FINISHPAGE_SHOWREADME
!ifdef MUI_FINISHPAGE_RUN
;25 = 10 (height of run checkbox) + 10 (distance between checkboxes)
!define /math MUI_FINISHPAGE_SHOWREADME_TOP ${MUI_FINISHPAGE_RUN_TOP} + 20
!else
!define /math MUI_FINISHPAGE_SHOWREADME_TOP ${MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS} + 5 ;Distance between text and options
!endif
!endif
!ifndef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME
;Height if full space is available for text and link
!ifndef MUI_FINISHPAGE_LINK
!define MUI_FINISHPAGE_TEXT_HEIGHT 130
!else
!define MUI_FINISHPAGE_TEXT_HEIGHT 120
!endif
!endif
!ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
${if} ${RebootFlag}
;Title text
${NSD_CreateLabel} 120u 10u 195u ${MUI_FINISHPAGE_TITLE_HEIGHT}u "${MUI_FINISHPAGE_TITLE}"
Pop $mui.FinishPage.Title
SetCtlColors $mui.FinishPage.Title "" "${MUI_BGCOLOR}"
CreateFont $mui.FinishPage.Title.Font "$(^Font)" "12" "700"
SendMessage $mui.FinishPage.Title ${WM_SETFONT} $mui.FinishPage.Title.Font 0
;Finish text
${NSD_CreateLabel} 120u 45u 195u ${MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS}u "${MUI_FINISHPAGE_TEXT_REBOOT}"
Pop $mui.FinishPage.Text
SetCtlColors $mui.FinishPage.Text "" "${MUI_BGCOLOR}"
;Radio buttons for reboot page
${NSD_CreateRadioButton} 120u ${MUI_FINISHPAGE_REBOOTNOW_TOP}u 195u 10u "${MUI_FINISHPAGE_TEXT_REBOOTNOW}"
Pop $mui.FinishPage.RebootNow
SetCtlColors $mui.FinishPage.RebootNow "" "${MUI_BGCOLOR}"
${NSD_CreateRadioButton} 120u ${MUI_FINISHPAGE_REBOOTLATER_TOP}u 195u 10u "${MUI_FINISHPAGE_TEXT_REBOOTLATER}"
Pop $mui.FinishPage.RebootLater
SetCtlColors $mui.FinishPage.RebootLater "" "${MUI_BGCOLOR}"
!ifndef MUI_FINISHPAGE_REBOOTLATER_DEFAULT
SendMessage $mui.FinishPage.RebootNow ${BM_SETCHECK} ${BST_CHECKED} 0
!else
SendMessage $mui.FinishPage.RebootLater ${BM_SETCHECK} ${BST_CHECKED} 0
!endif
${NSD_SetFocus} $mui.FinishPage.RebootNow
${else}
!endif
;Title text
${NSD_CreateLabel} 120u 10u 195u ${MUI_FINISHPAGE_TITLE_HEIGHT}u "${MUI_FINISHPAGE_TITLE}"
Pop $mui.FinishPage.Title
SetCtlColors $mui.FinishPage.Title "" "${MUI_BGCOLOR}"
CreateFont $mui.FinishPage.Title.Font "$(^Font)" "12" "700"
SendMessage $mui.FinishPage.Title ${WM_SETFONT} $mui.FinishPage.Title.Font 0
;Finish text
!ifndef MUI_FINISHPAGE_RUN & MUI_FINISHPAGE_SHOWREADME
${NSD_CreateLabel} 120u ${MUI_FINISHPAGE_TEXT_TOP}u 195u ${MUI_FINISHPAGE_TEXT_HEIGHT}u "${MUI_FINISHPAGE_TEXT}"
!else
${NSD_CreateLabel} 120u ${MUI_FINISHPAGE_TEXT_TOP}u 195u ${MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS}u "${MUI_FINISHPAGE_TEXT}"
!endif
Pop $mui.FinishPage.Text
SetCtlColors $mui.FinishPage.Text "" "${MUI_BGCOLOR}"
;Checkboxes
!ifdef MUI_FINISHPAGE_RUN
${NSD_CreateCheckbox} 120u ${MUI_FINISHPAGE_RUN_TOP}u 195u 10u "${MUI_FINISHPAGE_RUN_TEXT}"
Pop $mui.FinishPage.Run
SetCtlColors $mui.FinishPage.Run "" "${MUI_BGCOLOR}"
!ifndef MUI_FINISHPAGE_RUN_NOTCHECKED
SendMessage $mui.FinishPage.Run ${BM_SETCHECK} ${BST_CHECKED} 0
!endif
${NSD_SetFocus} $mui.FinishPage.Run
!endif
!ifdef MUI_FINISHPAGE_SHOWREADME
${NSD_CreateCheckbox} 120u ${MUI_FINISHPAGE_SHOWREADME_TOP}u 195u 10u "${MUI_FINISHPAGE_SHOWREADME_TEXT}"
Pop $mui.FinishPage.ShowReadme
SetCtlColors $mui.FinishPage.ShowReadme "" "${MUI_BGCOLOR}"
!ifndef MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
SendMessage $mui.FinishPage.ShowReadme ${BM_SETCHECK} ${BST_CHECKED} 0
!endif
!ifndef MUI_FINISHPAGE_RUN
${NSD_SetFocus} $mui.FinishPage.ShowReadme
!endif
!endif
;Link
!ifdef MUI_FINISHPAGE_LINK
${NSD_CreateLink} 120u 175u 195u 10u "${MUI_FINISHPAGE_LINK}"
Pop $mui.FinishPage.Link
SetCtlColors $mui.FinishPage.Link "${MUI_FINISHPAGE_LINK_COLOR}" "${MUI_BGCOLOR}"
${NSD_OnClick} $mui.FinishPage.Link "${LINK}"
!endif
!ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
${endif}
!endif
!ifdef MUI_FINISHPAGE_CANCEL_ENABLED
StrCpy $mui.FinishPage.DisableAbortWarning "1"
!endif
;Show page
Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageLoadFullWindow
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
nsDialogs::Show
Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageUnloadFullWindow
!ifdef MUI_FINISHPAGE_CANCEL_ENABLED
StrCpy $mui.FinishPage.DisableAbortWarning ""
!endif
;Delete image from memory
${NSD_FreeImage} $mui.FinishPage.Image.Bitmap
!insertmacro MUI_UNSET MUI_FINISHPAGE_TITLE_HEIGHT
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_TOP
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_HEIGHT
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_HEIGHT_BUTTONS
!insertmacro MUI_UNSET MUI_FINISHPAGE_TEXT_BOTTOM_BUTTONS
!insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTNOW_TOP
!insertmacro MUI_UNSET MUI_FINISHPAGE_REBOOTLATER_TOP
!insertmacro MUI_UNSET MUI_FINISHPAGE_RUN_TOP
!insertmacro MUI_UNSET MUI_FINISHPAGE_SHOWREADME_TOP
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
!ifndef MUI_FINISHPAGE_NOREBOOTSUPPORT
;Check whether the user has chosen to reboot the computer
${if} ${RebootFlag}
SendMessage $mui.FinishPage.RebootNow ${BM_GETCHECK} 0 0 $mui.FinishPage.ReturnValue
${if} $mui.FinishPage.ReturnValue = ${BST_CHECKED}
Reboot
${else}
Return
${endif}
${endif}
!endif
;Run functions depending on checkbox state
!ifdef MUI_FINISHPAGE_RUN
SendMessage $mui.FinishPage.Run ${BM_GETCHECK} 0 0 $mui.FinishPage.ReturnValue
${if} $mui.FinishPage.ReturnValue = ${BST_CHECKED}
!ifndef MUI_FINISHPAGE_RUN_FUNCTION
!ifndef MUI_FINISHPAGE_RUN_PARAMETERS
Exec "$\"${MUI_FINISHPAGE_RUN}$\""
!else
Exec "$\"${MUI_FINISHPAGE_RUN}$\" ${MUI_FINISHPAGE_RUN_PARAMETERS}"
!endif
!else
Call "${MUI_FINISHPAGE_RUN_FUNCTION}"
!endif
${endif}
!endif
!ifdef MUI_FINISHPAGE_SHOWREADME
SendMessage $mui.FinishPage.ShowReadme ${BM_GETCHECK} 0 0 $mui.FinishPage.ReturnValue
${if} $mui.FinishPage.ReturnValue = ${BST_CHECKED}
!ifndef MUI_FINISHPAGE_SHOWREADME_FUNCTION
ExecShell open "${MUI_FINISHPAGE_SHOWREADME}"
!else
Call "${MUI_FINISHPAGE_SHOWREADME_FUNCTION}"
!endif
${endif}
!endif
FunctionEnd
!macroend

View File

@ -0,0 +1,168 @@
/*
NSIS Modern User Interface
InstallFiles page
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_INSTFILESPAGE_INTERFACE
!ifndef MUI_INSTFILESYPAGE_INTERFACE
!define MUI_INSTFILESYPAGE_INTERFACE
!insertmacro MUI_DEFAULT MUI_INSTFILESPAGE_COLORS "/windows"
!insertmacro MUI_DEFAULT MUI_INSTFILESPAGE_PROGRESSBAR "smooth"
Var mui.InstFilesPage
Var mui.InstFilesPage.Text
Var mui.InstFilesPage.ProgressBar
Var mui.InstFilesPage.ShowLogButton
Var mui.InstFilesPage.Log
;Apply settings
InstallColors ${MUI_INSTFILESPAGE_COLORS}
InstProgressFlags ${MUI_INSTFILESPAGE_PROGRESSBAR}
SubCaption 4 " "
UninstallSubCaption 2 " "
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_INSTFILES
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INSTFILESPAGE ""
!insertmacro MUI_INSTFILESPAGE_INTERFACE
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}instfiles
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesLeave_${MUI_UNIQUEID}
Caption " "
PageExEnd
!insertmacro MUI_FUNCTION_INSTFILESPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.InstFilesLeave_${MUI_UNIQUEID}
!insertmacro MUI_UNSET MUI_INSTFILESPAGE_FINISHHEADER_TEXT
!insertmacro MUI_UNSET MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT
!insertmacro MUI_UNSET MUI_INSTFILESPAGE_ABORTWARNING_TEXT
!insertmacro MUI_UNSET MUI_INSTFILESPAGE_ABORTWARNING_SUBTEXT
!macroend
!macro MUI_PAGE_INSTFILES
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_INSTFILES
!verbose pop
!macroend
!macro MUI_UNPAGE_INSTFILES
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_INSTFILES
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_INSTFILESPAGE PRE SHOW LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLING_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLING_SUBTITLE)
FunctionEnd
Function "${SHOW}"
ReadRegStr $1 HKLM "SOFTWARE\UGX-Mods\Map Installer" "InstallPath"
;If this is a first time install with a broken CoDWaW install, save the dir they chose manually for next time.
${if} $1 == ""
WriteRegStr HKLM "Software\UGX-Mods\Map Installer" "InstallPath" "$INSTDIR"
${EndIf}
;Now that we have their root dir, set the install directory to where the mod actually needs to go. Just needed the root dir for bik files.
StrCpy $INSTDIR "$LOCALAPPDATA\Activision\CoDWaW\mods"
Rename $INSTDIR\$(^NameDA)\$(^NameDA)_load.bik $1\main\video\$(^NameDA)_load.bik
Rename "${NSISDIR}\Contrib\Graphics\Icons\ugx.ico" "$1\main\ugx.ico"
SetOutPath "$1"
CreateShortCut "$DESKTOP\UGX Community Maps\$(^NameDA).lnk" "$1\CoDWaW.exe" " +set fs_game $\"mods/$(^NameDA)$\"" "$1\main\ugx.ico"
SetOutPath "$INSTDIR"
;Get controls handles
FindWindow $mui.InstFilesPage "#32770" "" $HWNDPARENT
GetDlgItem $mui.InstFilesPage.Text $mui.InstFilesPage 1006
GetDlgItem $mui.InstFilesPage.ProgressBar $mui.InstFilesPage 1004
GetDlgItem $mui.InstFilesPage.ShowLogButton $mui.InstFilesPage 1027
GetDlgItem $mui.InstFilesPage.Log $mui.InstFilesPage 1016
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
;Set text on completed page header
IfAbort mui.endheader_abort
!ifdef MUI_INSTFILESPAGE_FINISHHEADER_TEXT & MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT
!insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_FINISHHEADER_TEXT}" "${MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT}"
!else ifdef MUI_INSTFILESPAGE_FINISHHEADER_TEXT
!insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_FINISHHEADER_TEXT}" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SUBTITLE)"
!else ifdef MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT
!insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_TITLE)" "${MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT}"
!else
!insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_TITLE)" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SUBTITLE)"
!endif
Goto mui.endheader_done
mui.endheader_abort:
!ifdef MUI_INSTFILESPAGE_ABORTHEADER_TEXT & MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT
!insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_ABORTHEADER_TEXT}" "${MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT}"
!else ifdef MUI_INSTFILESPAGE_ABORTHEADER_TEXT
!insertmacro MUI_HEADER_TEXT "${MUI_INSTFILESPAGE_ABORTHEADER_TEXT}" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_SUBTITLE)"
!else ifdef MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT
!insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_TITLE)" "${MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT}"
!else
!insertmacro MUI_HEADER_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_TITLE)" "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_ABORT_SUBTITLE)"
!endif
mui.endheader_done:
!insertmacro MUI_LANGDLL_SAVELANGUAGE
FunctionEnd
!macroend

View File

@ -0,0 +1,145 @@
/*
NSIS Modern User Interface
License page
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_LICENSEPAGE_INTERFACE
!ifndef MUI_LICENSEPAGE_INTERFACE
!define MUI_LICENSEPAGE_INTERFACE
Var mui.LicensePage
Var mui.Licensepage.TopText
Var mui.Licensepage.Text
Var mui.Licensepage.LicenseText
!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_BGCOLOR "/windows"
;Apply settings
LicenseBkColor "${MUI_LICENSEPAGE_BGCOLOR}"
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_LICENSE LICENSEDATA
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}LICENSEPAGE ""
!insertmacro MUI_LICENSEPAGE_INTERFACE
!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_TEXT_TOP "$(MUI_INNERTEXT_LICENSE_TOP)"
!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_BUTTON ""
!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_CHECKBOX_TEXT ""
!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT ""
!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE ""
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}license
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicensePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseLeave_${MUI_UNIQUEID}
Caption " "
LicenseData "${LICENSEDATA}"
!ifndef MUI_LICENSEPAGE_TEXT_BOTTOM
!ifndef MUI_LICENSEPAGE_CHECKBOX & MUI_LICENSEPAGE_RADIOBUTTONS
;LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM)" "${MUI_LICENSEPAGE_BUTTON}"
!else ifdef MUI_LICENSEPAGE_CHECKBOX
LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM_CHECKBOX)" "${MUI_LICENSEPAGE_BUTTON}"
!else
LicenseText "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS)" "${MUI_LICENSEPAGE_BUTTON}"
!endif
!else
LicenseText "${MUI_LICENSEPAGE_TEXT_BOTTOM}" "${MUI_LICENSEPAGE_BUTTON}"
!endif
!ifdef MUI_LICENSEPAGE_CHECKBOX
LicenseForceSelection checkbox "${MUI_LICENSEPAGE_CHECKBOX_TEXT}"
!else ifdef MUI_LICENSEPAGE_RADIOBUTTONS
LicenseForceSelection radiobuttons "${MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT}" "${MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE}"
!endif
PageExEnd
!insertmacro MUI_FUNCTION_LICENSEPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicensePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.LicenseLeave_${MUI_UNIQUEID}
!insertmacro MUI_UNSET MUI_LICENSEPAGE_TEXT_TOP
!insertmacro MUI_UNSET MUI_LICENSEPAGE_TEXT_BOTTOM
!insertmacro MUI_UNSET MUI_LICENSEPAGE_BUTTON
!insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX
!insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT
!insertmacro MUI_UNSET MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT_ACCEPT
!insertmacro MUI_UNSET MUI_LICENSEPAGE_CHECKBOX_TEXT_DECLINE
!verbose pop
!macroend
!macro MUI_PAGE_LICENSE LICENSEDATA
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_LICENSE "${LICENSEDATA}"
!verbose pop
!macroend
!macro MUI_UNPAGE_LICENSE LICENSEDATA
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_LICENSE "${LICENSEDATA}"
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_LICENSEPAGE PRE SHOW LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_LICENSE_TITLE) $(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_LICENSE_SUBTITLE)
FunctionEnd
Function "${SHOW}"
;Get conrol handles
FindWindow $mui.LicensePage "#32770" "" $HWNDPARENT
GetDlgItem $mui.LicensePage.TopText $mui.LicensePage 1040
GetDlgItem $mui.LicensePage.Text $mui.LicensePage 1006
GetDlgItem $mui.LicensePage.LicenseText $mui.LicensePage 1000
;Top text
SendMessage $mui.LicensePage.TopText ${WM_SETTEXT} 0 "STR:${MUI_LICENSEPAGE_TEXT_TOP}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend

View File

@ -0,0 +1,235 @@
/*
NSIS Modern User Interface
Start Menu folder page
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_STARTMENUPAGE_INTERFACE
!ifndef MUI_STARTMENUPAGE_INTERFACE
!define MUI_STARTMENUPAGE_INTERFACE
Var mui.StartMenuPage
Var mui.StartMenuPage.Location
Var mui.StartMenuPage.FolderList
Var mui.StartMenuPage.Temp
!endif
!ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
!ifndef MUI_STARTMENUPAGE_REGISTRY_VARIABLES
!define MUI_STARTMENUPAGE_REGISTRY_VARIABLES
Var mui.StartMenuPage.RegistryLocation
!endif
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_STARTMENU ID VAR
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}STARTMENUPAGE ""
!insertmacro MUI_STARTMENUPAGE_INTERFACE
!insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
!insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_TOP "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_TOP)"
!insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_CHECKBOX "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_CHECKBOX)"
!define MUI_STARTMENUPAGE_VARIABLE "${VAR}"
!define "MUI_STARTMENUPAGE_${ID}_VARIABLE" "${MUI_STARTMENUPAGE_VARIABLE}"
!define "MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
!ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT
!define "MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}"
!endif
!ifdef MUI_STARTMENUPAGE_REGISTRY_KEY
!define "MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}"
!endif
!ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME
!define "MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
!endif
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
Caption " "
PageExEnd
!insertmacro MUI_FUNCTION_STARTMENUPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
!undef MUI_STARTMENUPAGE_VARIABLE
!undef MUI_STARTMENUPAGE_TEXT_TOP
!undef MUI_STARTMENUPAGE_TEXT_CHECKBOX
!undef MUI_STARTMENUPAGE_DEFAULTFOLDER
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_NODISABLE
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_ROOT
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_KEY
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_VALUENAME
!macroend
!macro MUI_PAGE_STARTMENU ID VAR
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_STARTMENU "${ID}" "${VAR}"
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_STARTMENUPAGE PRE LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
;Get Start Menu location from registry
${if} "${MUI_STARTMENUPAGE_VARIABLE}" == ""
ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
${if} $mui.StartMenuPage.RegistryLocation != ""
StrCpy "${MUI_STARTMENUPAGE_VARIABLE}" $mui.StartMenuPage.RegistryLocation
${endif}
ClearErrors
${endif}
!endif
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE)
${if} $(^RTL) == "0"
!ifndef MUI_STARTMENUPAGE_NODISABLE
StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
!else
StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
!endif
${else}
!ifndef MUI_STARTMENUPAGE_NODISABLE
StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
!else
StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
!endif
${endif}
Pop $mui.StartMenuPage
;Get control handles
GetDlgItem $mui.StartMenuPage.Location $mui.StartMenuPage 1002
GetDlgItem $mui.StartMenuPage.FolderList $mui.StartMenuPage 1004
!ifdef MUI_STARTMENUPAGE_BGCOLOR
SetCtlColors $mui.StartMenuPage.Location "" "${MUI_STARTMENUPAGE_BGCOLOR}"
SetCtlColors $mui.StartMenuMenu.FolderList "" "${MUI_STARTMENUPAGE_BGCOLOR}"
!endif
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
StartMenu::Show
Pop $mui.StartMenuPage.Temp
${if} $mui.StartMenuPage.Temp == "success"
Pop "${MUI_STARTMENUPAGE_VARIABLE}"
${endif}
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend
;--------------------------------
;Script macros to get Start Menu folder
!macro MUI_STARTMENU_GETFOLDER ID VAR
!verbose push
!verbose ${MUI_VERBOSE}
;Get Start Menu folder from registry
;Can be called from the script in the uninstaller
!ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME
ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}"
${if} $mui.StartMenuPage.RegistryLocation != ""
StrCpy "${VAR}" $mui.StartMenuPage.RegistryLocation
${else}
StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
${endif}
!else
StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
!endif
!verbose pop
!macroend
!macro MUI_STARTMENU_WRITE_BEGIN ID
;The code in the script to write the shortcuts should be put between the
;MUI_STARTMENU_WRITE_BEGIN and MUI_STARTMENU_WRITE_END macros
!verbose push
!verbose ${MUI_VERBOSE}
!define MUI_STARTMENUPAGE_CURRENT_ID "${ID}"
StrCpy $mui.StartMenuPage.Temp "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1
;If the folder start with >, the user has chosen not to create a shortcut
${if} $mui.StartMenuPage.Temp != ">"
${if} "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" == ""
;Get folder from registry if the variable doesn't contain anything
!insertmacro MUI_STARTMENU_GETFOLDER "${MUI_STARTMENUPAGE_CURRENT_ID}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
${endif}
!verbose pop
!macroend
!macro MUI_STARTMENU_WRITE_END
!verbose push
!verbose ${MUI_VERBOSE}
!ifdef MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME
;Write folder to registry
WriteRegStr "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
!endif
${endif}
!undef MUI_STARTMENUPAGE_CURRENT_ID
!verbose pop
!macroend

View File

@ -0,0 +1,96 @@
/*
NSIS Modern User Interface
Uninstall confirmation page
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_UNCONFIRMPAGE_INTERFACE
!ifndef MUI_UNCONFIRMPAGE_INTERFACE
!define MUI_UNCONFIRMPAGE_INTERFACE
Var mui.UnConfirmPage
Var mui.UnConfirmPage.Text
Var mui.UnConfirmPage.DirectoryText
Var mui.UnConfirmPage.Directory
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_CONFIRM
!insertmacro MUI_SET MUI_UNCONFIRMPAGE ""
!insertmacro MUI_UNCONFIRMPAGE_INTERFACE
!insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_TOP ""
!insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_LOCATION ""
PageEx un.uninstConfirm
PageCallbacks un.mui.ConfirmPre_${MUI_UNIQUEID} un.mui.ConfirmShow_${MUI_UNIQUEID} un.mui.ConfirmLeave_${MUI_UNIQUEID}
Caption " "
UninstallText "${MUI_UNCONFIRMPAGE_TEXT_TOP}" "${MUI_UNCONFIRMPAGE_TEXT_LOCATION}"
PageExEnd
!insertmacro MUI_UNFUNCTION_CONFIRMPAGE un.mui.ConfirmPre_${MUI_UNIQUEID} un.mui.ConfirmShow_${MUI_UNIQUEID} un.mui.ConfirmLeave_${MUI_UNIQUEID}
!insertmacro MUI_UNSET MUI_UNCONFIRMPAGE_TEXT_TOP
!insertmacro MUI_UNSET MUI_UNCONFIRMPAGE_TEXT_LOCATION
!macroend
!macro MUI_UNPAGE_CONFIRM
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_CONFIRM
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_UNFUNCTION_CONFIRMPAGE PRE SHOW LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_UNTEXT_CONFIRM_TITLE) $(MUI_UNTEXT_CONFIRM_SUBTITLE)
FunctionEnd
Function "${SHOW}"
;Get controls handles
FindWindow $mui.UnConfirmPage "#32770" "" $HWNDPARENT
GetDlgItem $mui.UnConfirmPage.Text $mui.UnConfirmPage 1006
GetDlgItem $mui.UnConfirmPage.DirectoryText $mui.UnConfirmPage 1029
GetDlgItem $mui.UnConfirmPage.Directory $mui.UnConfirmPage 1000
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend

View File

@ -0,0 +1,180 @@
/*
NSIS Modern User Interface
Welcome page (implemented using nsDialogs)
*/
;--------------------------------
;Page interface settings and variables
!macro MUI_WELCOMEPAGE_INTERFACE
!ifndef MUI_WELCOMEPAGE_INTERFACE
!define MUI_WELCOMEPAGE_INTERFACE
Var mui.WelcomePage
Var mui.WelcomePage.Image
Var mui.WelcomePage.Image.Bitmap
Var mui.WelcomePage.Title
Var mui.WelcomePage.Title.Font
Var mui.WelcomePage.Text
!endif
!insertmacro MUI_DEFAULT MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\UGX\banner.bmp"
!macroend
;--------------------------------
;Interface initialization
!macro MUI_WELCOMEPAGE_GUIINIT
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEWELCOMEPAGE_GUINIT
!define MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEWELCOMEPAGE_GUINIT
Function ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePage.GUIInit
InitPluginsDir
File "/oname=$PLUGINSDIR\modern-wizard.bmp" "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP}"
!ifdef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT
Call "${MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT}"
!endif
FunctionEnd
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}PAGE_FUNCTION_GUIINIT ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePage.GUIInit
!endif
!macroend
;--------------------------------
;Page declaration
!macro MUI_PAGEDECLARATION_WELCOME
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEPAGE ""
!insertmacro MUI_WELCOMEPAGE_INTERFACE
!insertmacro MUI_WELCOMEPAGE_GUIINIT
!insertmacro MUI_DEFAULT MUI_WELCOMEPAGE_TITLE "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TITLE)"
!insertmacro MUI_DEFAULT MUI_WELCOMEPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TEXT)"
!insertmacro MUI_PAGE_FUNCTION_FULLWINDOW
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomeLeave_${MUI_UNIQUEID}
PageExEnd
!insertmacro MUI_FUNCTION_WELCOMEPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomePre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.WelcomeLeave_${MUI_UNIQUEID}
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TEXT
!macroend
!macro MUI_PAGE_WELCOME
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_PAGE_INIT
!insertmacro MUI_PAGEDECLARATION_WELCOME
!verbose pop
!macroend
!macro MUI_UNPAGE_WELCOME
!verbose push
!verbose ${MUI_VERBOSE}
!insertmacro MUI_UNPAGE_INIT
!insertmacro MUI_PAGEDECLARATION_WELCOME
!verbose pop
!macroend
;--------------------------------
;Page functions
!macro MUI_FUNCTION_WELCOMEPAGE PRE LEAVE
Function "${PRE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
;Create dialog
nsDialogs::Create 1044
Pop $mui.WelcomePage
nsDialogs::SetRTL $(^RTL)
SetCtlColors $mui.WelcomePage "" "${MUI_BGCOLOR}"
;Image control
${NSD_CreateBitmap} 0u 0u 109u 193u ""
Pop $mui.WelcomePage.Image
!ifndef MUI_${MUI_PAGE_UNINSTALLER_PREFIX}WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
${NSD_SetStretchedImage} $mui.WelcomePage.Image $PLUGINSDIR\modern-wizard.bmp $mui.WelcomePage.Image.Bitmap
!else
${NSD_SetImage} $mui.WelcomePage.Image $PLUGINSDIR\modern-wizard.bmp $mui.WelcomePage.Image.Bitmap
!endif
;Positiong of controls
;Title
!ifndef MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TITLE_HEIGHT 28
!else
!define MUI_WELCOMEPAGE_TITLE_HEIGHT 38
!endif
;Text
;17 = 10 (top margin) + 7 (distance between texts)
!define /math MUI_WELCOMEPAGE_TEXT_TOP 17 + ${MUI_WELCOMEPAGE_TITLE_HEIGHT}
;Title
${NSD_CreateLabel} 120u 10u 195u ${MUI_WELCOMEPAGE_TITLE_HEIGHT}u "${MUI_WELCOMEPAGE_TITLE}"
Pop $mui.WelcomePage.Title
SetCtlColors $mui.WelcomePage.Title "" "${MUI_BGCOLOR}"
CreateFont $mui.WelcomePage.Title.Font "$(^Font)" "12" "700"
SendMessage $mui.WelcomePage.Title ${WM_SETFONT} $mui.WelcomePage.Title.Font 0
;Welcome text
${NSD_CreateLabel} 120u ${MUI_WELCOMEPAGE_TEXT_TOP}u 195u 130u "${MUI_WELCOMEPAGE_TEXT}"
Pop $mui.WelcomePage.Text
SetCtlColors $mui.WelcomePage.Text "" "${MUI_BGCOLOR}"
;Show page
Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageLoadFullWindow
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
nsDialogs::Show
Call ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}muiPageUnloadFullWindow
;Delete image from memory
${NSD_FreeImage} $mui.WelcomePage.Image.Bitmap
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_HEIGHT
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TEXT_TOP
FunctionEnd
Function "${LEAVE}"
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend

BIN
T7x/Contrib/UIs/default.exe Normal file

Binary file not shown.

BIN
T7x/Contrib/UIs/modern.exe Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,81 @@
;Change this file to customize zip2exe generated installers
Name "${ZIP2EXE_NAME}"
OutFile "${ZIP2EXE_OUTFILE}"
AllowRootDirInstall true
!ifdef ZIP2EXE_COMPRESSOR_SOLID
!define SETCOMPRESSOR_SWITCH /SOLID
!else
!define SETCOMPRESSOR_SWITCH
!endif
SetCompressor ${SETCOMPRESSOR_SWITCH} bzip2
!ifdef ZIP2EXE_INSTALLDIR
InstallDir "${ZIP2EXE_INSTALLDIR}"
Function zip2exe.SetOutPath
SetOutPath "$INSTDIR"
FunctionEnd
!else ifdef ZIP2EXE_INSTALLDIR_WINAMP
InstallDir "$PROGRAMFILES\Winamp"
InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "UninstallString"
Function .onVerifyInstDir
IfFileExists $INSTDIR\winamp.exe WinampInstalled
Abort
WinampInstalled:
FunctionEnd
!ifdef ZIP2EXE_INSTALLDIR_WINAMPMODE
Var ZIP2EXE_TEMP1
Var ZIP2EXE_TEMP2
Function zip2exe.SetOutPath
!ifdef ZIP2EXE_INSTALLDIR_SKINS
StrCpy $ZIP2EXE_TEMP1 "$INSTDIR\Skins"
!else
StrCpy $ZIP2EXE_TEMP1 "$INSTDIR\Plugins"
!endif
ReadINIStr $ZIP2EXE_TEMP2 "$INSTDIR\winamp.ini" "Winamp" "${ZIP2EXE_INSTALLDIR_WINAMPMODE}"
StrCmp $ZIP2EXE_TEMP2 "" End
IfFileExists $ZIP2EXE_TEMP2 0 End
StrCpy $ZIP2EXE_TEMP1 $ZIP2EXE_TEMP2
End:
SetOutPath $ZIP2EXE_TEMP1
FunctionEnd
!else
Function zip2exe.SetOutPath
!ifdef ZIP2EXE_INSTALLDIR_PLUGINS
SetOutPath "$INSTDIR\Plugins"
!else
SetOutPath "$INSTDIR"
!endif
FunctionEnd
!endif
!endif
!macro SECTION_BEGIN
Section ""
Call zip2exe.SetOutPath
!macroend
!macro SECTION_END
SectionEnd
!macroend

View File

@ -0,0 +1,20 @@
; UGX-Mods auto-installer by treminaor
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "UGX Map Packager"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "UGX-Mods"
!define PRODUCT_WEB_SITE "http://ugx-mods.com"
!include "MUI2.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Contrib\License.txt"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

75
T7x/Include/Colors.nsh Normal file
View File

@ -0,0 +1,75 @@
!ifndef COLORS_NSH
!define COLORS_NSH
!verbose push
!verbose 3
# Squad
# Rob Segal
# Joel
# Yathosho
# Predefined HTML Hex colors
!define WHITE "FFFFFF"
!define BLACK "000000"
!define YELLOW "FFFF00"
!define RED "FF0000"
!define GREEN "00FF00"
!define BLUE "0000FF"
!define MAGENTA "FF00FF"
!define CYAN "00FFFF"
# Function to convert red , green and blue integer values to HTML Hex format
!define RGB '!insertmacro rgb2hex'
# Function to convert red, green and blue integer values to Hexadecimal (0xRRGGBB) format
!define HEX '!insertmacro rgb2hex2'
# Function to get the r value from a RGB number
!define GetRvalue '!insertmacro redvalue'
# Function to get the g value from a RGB number
!define GetGvalue '!insertmacro greenvalue'
# Function to get the b value from a RGB number
!define GetBvalue '!insertmacro bluevalue'
# Function to get the r value from a Hex number
!define GetRvalueX '!insertmacro bluevalue'
# Function to get the g value from a Hex number
!define GetGvalueX '!insertmacro greenvalue'
# Function to get the r value from a HEX number
!define GetBvalueX '!insertmacro redvalue'
!macro rgb2hex output R G B
IntFmt "${output}" "%02X" "${R}"
IntFmt "${output}" "${output}%02X" "${G}"
IntFmt "${output}" "${output}%02X" "${B}"
!macroend
!macro rgb2hex2 output R G B
IntFmt "${output}" "%02X" "${B}"
IntFmt "${output}" "${output}%02X" "${G}"
IntFmt "${output}" "${output}%02X" "${R}"
!macroend
!macro redvalue output hexval
StrCpy ${output} ${hexval} 2 0
IntFmt "${output}" "%02i" "0x${output}"
!macroend
!macro greenvalue output hexval
StrCpy ${output} ${hexval} 2 2
IntFmt "${output}" "%02i" "0x${output}"
!macroend
!macro bluevalue output hexval
StrCpy ${output} ${hexval} 2 4
IntFmt "${output}" "%02i" "0x${output}"
!macroend
!verbose pop
!endif

2017
T7x/Include/FileFunc.nsh Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,240 @@
/*
InstallOptions.nsh
Macros and conversion functions for InstallOptions
*/
!ifndef ___NSIS__INSTALL_OPTIONS__NSH___
!define ___NSIS__INSTALL_OPTIONS__NSH___
!include LogicLib.nsh
!macro INSTALLOPTIONS_FUNCTION_READ_CONVERT
!insertmacro INSTALLOPTIONS_FUNCTION_IO2NSIS ""
!macroend
!macro INSTALLOPTIONS_UNFUNCTION_READ_CONVERT
!insertmacro INSTALLOPTIONS_FUNCTION_IO2NSIS un.
!macroend
!macro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT
!insertmacro INSTALLOPTIONS_FUNCTION_NSIS2IO ""
!macroend
!macro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT
!insertmacro INSTALLOPTIONS_FUNCTION_NSIS2IO un.
!macroend
!macro INSTALLOPTIONS_FUNCTION_NSIS2IO UNINSTALLER_FUNCPREFIX
; Convert an NSIS string to a form suitable for use by InstallOptions
; Usage:
; Push <NSIS-string>
; Call Nsis2Io
; Pop <IO-string>
Function ${UNINSTALLER_FUNCPREFIX}Nsis2Io
Exch $0 ; The source
Push $1 ; The output
Push $2 ; Temporary char
Push $3 ; Length
Push $4 ; Loop index
StrCpy $1 "" ; Initialise the output
StrLen $3 $0
IntOp $3 $3 - 1
${For} $4 0 $3
StrCpy $2 $0 1 $4
${If} $2 == '\'
StrCpy $2 '\\'
${ElseIf} $2 == '$\r'
StrCpy $2 '\r'
${ElseIf} $2 == '$\n'
StrCpy $2 '\n'
${ElseIf} $2 == '$\t'
StrCpy $2 '\t'
${EndIf}
StrCpy $1 $1$2
${Next}
StrCpy $0 $1
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
!macroend
!macro INSTALLOPTIONS_FUNCTION_IO2NSIS UNINSTALLER_FUNCPREFIX
; Convert an InstallOptions string to a form suitable for use by NSIS
; Usage:
; Push <IO-string>
; Call Io2Nsis
; Pop <NSIS-string>
Function ${UNINSTALLER_FUNCPREFIX}Io2Nsis
Exch $0 ; The source
Push $1 ; The output
Push $2 ; Temporary char
Push $3 ; Length
Push $4 ; Loop index
StrCpy $1 "" ; Initialise the output
StrLen $3 $0
IntOp $3 $3 - 1
${For} $4 0 $3
StrCpy $2 $0 2 $4
${If} $2 == '\\'
StrCpy $2 '\'
IntOp $4 $4 + 1
${ElseIf} $2 == '\r'
StrCpy $2 '$\r'
IntOp $4 $4 + 1
${ElseIf} $2 == '\n'
StrCpy $2 '$\n'
IntOp $4 $4 + 1
${ElseIf} $2 == '\t'
StrCpy $2 '$\t'
IntOp $4 $4 + 1
${EndIf}
StrCpy $2 $2 1
StrCpy $1 $1$2
${Next}
StrCpy $0 $1
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
!macroend
!macro INSTALLOPTIONS_EXTRACT FILE
InitPluginsDir
File "/oname=$PLUGINSDIR\${FILE}" "${FILE}"
!insertmacro INSTALLOPTIONS_WRITE "${FILE}" "Settings" "RTL" "$(^RTL)"
!verbose pop
!macroend
!macro INSTALLOPTIONS_EXTRACT_AS FILE FILENAME
InitPluginsDir
File "/oname=$PLUGINSDIR\${FILENAME}" "${FILE}"
!insertmacro INSTALLOPTIONS_WRITE "${FILENAME}" "Settings" "RTL" "$(^RTL)"
!macroend
!macro INSTALLOPTIONS_DISPLAY FILE
Push $0
InstallOptions::dialog "$PLUGINSDIR\${FILE}"
Pop $0
Pop $0
!macroend
!macro INSTALLOPTIONS_DISPLAY_RETURN FILE
InstallOptions::dialog "$PLUGINSDIR\${FILE}"
!macroend
!macro INSTALLOPTIONS_INITDIALOG FILE
InstallOptions::initDialog "$PLUGINSDIR\${FILE}"
!macroend
!macro INSTALLOPTIONS_SHOW
Push $0
InstallOptions::show
Pop $0
Pop $0
!macroend
!macro INSTALLOPTIONS_SHOW_RETURN
InstallOptions::show
!macroend
!macro INSTALLOPTIONS_READ VAR FILE SECTION KEY
ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}"
!macroend
!macro INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE
WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" "${VALUE}"
!macroend
!macro INSTALLOPTIONS_READ_CONVERT VAR FILE SECTION KEY
ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}"
Push ${VAR}
Call Io2Nsis
Pop ${VAR}
!macroend
!macro INSTALLOPTIONS_READ_UNCONVERT VAR FILE SECTION KEY
ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}"
Push ${VAR}
Call un.Io2Nsis
Pop ${VAR}
!macroend
!macro INSTALLOPTIONS_WRITE_CONVERT FILE SECTION KEY VALUE
Push $0
StrCpy $0 "${VALUE}"
Push $0
Call Nsis2Io
Pop $0
WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" $0
Pop $0
!macroend
!macro INSTALLOPTIONS_WRITE_UNCONVERT FILE SECTION KEY VALUE
Push $0
StrCpy $0 "${VALUE}"
Push $0
Call un.Nsis2Io
Pop $0
WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" $0
Pop $0
!macroend
!endif # ___NSIS__INSTALL_OPTIONS__NSH___

133
T7x/Include/LangFile.nsh Normal file
View File

@ -0,0 +1,133 @@
/*
LangFile.nsh
Header file to create langauge files that can be
included with a single command.
Copyright 2008-2009 Joost Verburg
* Either LANGFILE_INCLUDE or LANGFILE_INCLUDE_WITHDEFAULT
can be called from the script to include a language
file.
- LANGFILE_INCLUDE takes the language file name as parameter.
- LANGFILE_INCLUDE_WITHDEFAULT takes as additional second
parameter the default language file to load missing strings
from.
* A language file start with:
!insertmacro LANGFILE_EXT "English"
using the same name as the standard NSIS language file.
* Language strings in the language file have the format:
${LangFileString} LANGSTRING_NAME "Text"
*/
!ifndef LANGFILE_INCLUDED
!define LANGFILE_INCLUDED
!macro LANGFILE_INCLUDE FILENAME
;Called from script: include a langauge file
!ifdef LangFileString
!undef LangFileString
!endif
!define LangFileString "!insertmacro LANGFILE_SETSTRING"
!define LANGFILE_SETNAMES
!include "${FILENAME}"
!undef LANGFILE_SETNAMES
;Create language strings
!undef LangFileString
!define LangFileString "!insertmacro LANGFILE_LANGSTRING"
!include "${FILENAME}"
!macroend
!macro LANGFILE_INCLUDE_WITHDEFAULT FILENAME FILENAME_DEFAULT
;Called from script: include a langauge file
;Obtains missing strings from a default file
!ifdef LangFileString
!undef LangFileString
!endif
!define LangFileString "!insertmacro LANGFILE_SETSTRING"
!define LANGFILE_SETNAMES
!include "${FILENAME}"
!undef LANGFILE_SETNAMES
;Include default language for missing strings
!include "${FILENAME_DEFAULT}"
;Create language strings
!undef LangFileString
!define LangFileString "!insertmacro LANGFILE_LANGSTRING"
!include "${FILENAME_DEFAULT}"
!macroend
!macro LANGFILE IDNAME NAME
;Start of standard NSIS language file
!ifdef LANGFILE_SETNAMES
!ifdef LANGFILE_IDNAME
!undef LANGFILE_IDNAME
!endif
!define LANGFILE_IDNAME "${IDNAME}"
!ifndef "LANGFILE_${IDNAME}_NAME"
!define "LANGFILE_${IDNAME}_NAME" "${NAME}"
!endif
!endif
!macroend
!macro LANGFILE_EXT IDNAME
;Start of installer language file
!ifdef LANGFILE_SETNAMES
!ifdef LANGFILE_IDNAME
!undef LANGFILE_IDNAME
!endif
!define LANGFILE_IDNAME "${IDNAME}"
!endif
!macroend
!macro LANGFILE_SETSTRING NAME VALUE
;Set define with translated string
!ifndef ${NAME}
!define "${NAME}" "${VALUE}"
!endif
!macroend
!macro LANGFILE_LANGSTRING NAME DUMMY
;Create a language string from a define and undefine
LangString "${NAME}" "${LANG_${LANGFILE_IDNAME}}" "${${NAME}}"
!undef "${NAME}"
!macroend
!endif

870
T7x/Include/Library.nsh Normal file
View File

@ -0,0 +1,870 @@
#
# Library.nsh
#
# A system for the installation and uninstallation of dynamic
# link libraries (DLL) and type libraries (TLB). Using this
# system you can handle the complete setup with one single
# line of code:
#
# * File copying
# * File copying on reboot
# * Version checks
# * Registration and unregistration
# * Registration and unregistration on reboot
# * Shared DLL counting
# * Windows File Protection checks
#
# For more information, read appendix B in the documentation.
#
!verbose push
!verbose 3
!ifndef LIB_INCLUDED
!define LIB_INCLUDED
!ifndef SHCNE_ASSOCCHANGED
!define SHCNE_ASSOCCHANGED 0x08000000
!endif
!ifndef SHCNF_IDLIST
!define SHCNF_IDLIST 0x0000
!endif
!define REGTOOL_VERSION v3
!define REGTOOL_KEY NSIS.Library.RegTool.${REGTOOL_VERSION}
!include LogicLib.nsh
!include x64.nsh
### GetParent macro, don't pass $1 or $2 as INTPUT or OUTPUT
!macro __InstallLib_Helper_GetParent INPUT OUTPUT
# Copied from FileFunc.nsh
StrCpy ${OUTPUT} ${INPUT}
Push $1
Push $2
StrCpy $2 ${OUTPUT} 1 -1
StrCmp $2 '\' 0 +3
StrCpy ${OUTPUT} ${OUTPUT} -1
goto -3
StrCpy $1 0
IntOp $1 $1 - 1
StrCpy $2 ${OUTPUT} 1 $1
StrCmp $2 '\' +2
StrCmp $2 '' 0 -3
StrCpy ${OUTPUT} ${OUTPUT} $1
Pop $2
Pop $1
!macroend
### Initialize session id (GUID)
!macro __InstallLib_Helper_InitSession
!ifndef __InstallLib_SessionGUID_Defined
!define __InstallLib_SessionGUID_Defined
Var /GLOBAL __INSTALLLLIB_SESSIONGUID
!endif
!define __InstallLib_Helper_InitSession_Label "Library_${__FILE__}${__LINE__}"
StrCmp $__INSTALLLLIB_SESSIONGUID '' 0 "${__InstallLib_Helper_InitSession_Label}"
System::Call 'ole32::CoCreateGuid(g .s)'
Pop $__INSTALLLLIB_SESSIONGUID
"${__InstallLib_Helper_InitSession_Label}:"
!undef __InstallLib_Helper_InitSession_Label
!macroend
### Add a RegTool entry to register after reboot
!macro __InstallLib_Helper_AddRegToolEntry mode filename tempdir
Push $R0
Push $R1
Push $R2
Push $R3
;------------------------
;Copy the parameters
Push "${filename}"
Push "${tempdir}"
Pop $R2 ; temporary directory
Pop $R1 ; file name to register
;------------------------
;Initialize session id
!insertmacro __InstallLib_Helper_InitSession
;------------------------
;Advance counter
StrCpy $R0 0
ReadRegDWORD $R0 HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count"
IntOp $R0 $R0 + 1
WriteRegDWORD HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count" "$R0"
;------------------------
;Setup RegTool
ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "${REGTOOL_KEY}"
StrCpy $R3 $R3 -4 1
IfFileExists $R3 +3
File /oname=$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe "${NSISDIR}\Bin\RegTool.bin"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
"${REGTOOL_KEY}" '"$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe" /S'
;------------------------
;Add RegTool entry
WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.file" "$R1"
WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.mode" "${mode}"
Pop $R3
Pop $R2
Pop $R1
Pop $R0
!macroend
### Get library version
!macro __InstallLib_Helper_GetVersion TYPE FILE
!tempfile LIBRARY_TEMP_NSH
!ifdef NSIS_WIN32_MAKENSIS
!execute '"${NSISDIR}\Bin\LibraryLocal.exe" "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
!else
!execute 'LibraryLocal "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
!if ${TYPE} == 'T'
!warning "LibraryLocal currently supports TypeLibs version detection on Windows only"
!endif
!endif
!include "${LIBRARY_TEMP_NSH}"
!delfile "${LIBRARY_TEMP_NSH}"
!undef LIBRARY_TEMP_NSH
!macroend
### Install library
!macro InstallLib libtype shared install localfile destfile tempbasedir
!verbose push
!verbose 3
Push $R0
Push $R1
Push $R2
Push $R3
Push $R4
Push $R5
;------------------------
;Define
!define INSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
!define INSTALLLIB_LIBTYPE_${libtype}
!define INSTALLLIB_LIBTYPE_SET INSTALLLIB_LIBTYPE_${libtype}
!define INSTALLLIB_SHARED_${shared}
!define INSTALLLIB_SHARED_SET INSTALLLIB_SHARED_${shared}
!define INSTALLLIB_INSTALL_${install}
!define INSTALLLIB_INSTALL_SET INSTALLLIB_INSTALL_${install}
;------------------------
;Validate
!ifndef INSTALLLIB_LIBTYPE_DLL & INSTALLLIB_LIBTYPE_REGDLL & INSTALLLIB_LIBTYPE_TLB & \
INSTALLLIB_LIBTYPE_REGDLLTLB & INSTALLLIB_LIBTYPE_REGEXE
!error "InstallLib: Incorrect setting for parameter: libtype"
!endif
!ifndef INSTALLLIB_INSTALL_REBOOT_PROTECTED & INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED & \
INSTALLLIB_INSTALL_NOREBOOT_PROTECTED & INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
!error "InstallLib: Incorrect setting for parameter: install"
!endif
;------------------------
;x64 settings
!ifdef LIBRARY_X64
${DisableX64FSRedirection}
!endif
;------------------------
;Copy the parameters used on run-time to a variable
;This allows the usage of variables as parameter
StrCpy $R4 "${destfile}"
StrCpy $R5 "${tempbasedir}"
;------------------------
;Shared library count
!ifndef INSTALLLIB_SHARED_NOTSHARED
StrCmp ${shared} "" 0 "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}"
!ifdef LIBRARY_X64
SetRegView 64
!endif
ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4
ClearErrors
IntOp $R0 $R0 + 1
WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4 $R0
!ifdef LIBRARY_X64
SetRegView lastused
!endif
"installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}:"
!endif
;------------------------
;Check Windows File Protection
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_PROTECTED
!define LIBRARY_DEFINE_DONE_LABEL
System::Call "sfc::SfcIsFileProtected(i 0, w R4) i.R0"
StrCmp $R0 "error" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
StrCmp $R0 "0" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
Goto "installlib.done_${INSTALLLIB_UNIQUE}"
"installlib.notprotected_${INSTALLLIB_UNIQUE}:"
!endif
;------------------------
;Check file
IfFileExists $R4 0 "installlib.copy_${INSTALLLIB_UNIQUE}"
;------------------------
;Get version information
!ifndef LIBRARY_IGNORE_VERSION
!insertmacro __InstallLib_Helper_GetVersion D "${LOCALFILE}"
!ifdef LIBRARY_VERSION_FILENOTFOUND
!error "InstallLib: The library ${LOCALFILE} could not be found."
!endif
!ifndef LIBRARY_VERSION_NONE
!define LIBRARY_DEFINE_UPGRADE_LABEL
!define LIBRARY_DEFINE_REGISTER_LABEL
StrCpy $R0 ${LIBRARY_VERSION_HIGH}
StrCpy $R1 ${LIBRARY_VERSION_LOW}
GetDLLVersion $R4 $R2 $R3
!undef LIBRARY_VERSION_HIGH
!undef LIBRARY_VERSION_LOW
!ifndef INSTALLLIB_LIBTYPE_TLB & INSTALLLIB_LIBTYPE_REGDLLTLB
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
!else
!insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}"
!ifdef LIBRARY_VERSION_FILENOTFOUND
!error "InstallLib: The library ${LOCALFILE} could not be found."
!endif
!ifndef LIBRARY_VERSION_NONE
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
IntCmpU $R1 $R3 0 "installlib.register_${INSTALLLIB_UNIQUE}" \
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
!else
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
!endif
!endif
!else
!undef LIBRARY_VERSION_NONE
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
!insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}"
!endif
!endif
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
!ifndef LIBRARY_VERSION_NONE
!ifndef LIBRARY_DEFINE_UPGRADE_LABEL
!define LIBRARY_DEFINE_UPGRADE_LABEL
!endif
!ifndef LIBRARY_DEFINE_REGISTER_LABEL
!define LIBRARY_DEFINE_REGISTER_LABEL
!endif
StrCpy $R0 ${LIBRARY_VERSION_HIGH}
StrCpy $R1 ${LIBRARY_VERSION_LOW}
TypeLib::GetLibVersion $R4
Pop $R3
Pop $R2
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
!undef LIBRARY_VERSION_HIGH
!undef LIBRARY_VERSION_LOW
!else
!undef LIBRARY_VERSION_NONE
!endif
!endif
!endif
;------------------------
;Upgrade
!ifdef LIBRARY_DEFINE_UPGRADE_LABEL
!undef LIBRARY_DEFINE_UPGRADE_LABEL
"installlib.upgrade_${INSTALLLIB_UNIQUE}:"
!endif
;------------------------
;Copy
!ifdef INSTALLLIB_INSTALL_NOREBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
"installlib.copy_${INSTALLLIB_UNIQUE}:"
StrCpy $R0 $R4
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
!else
!ifndef LIBRARY_DEFINE_REGISTER_LABEL
!define LIBRARY_DEFINE_REGISTER_LABEL
!endif
!ifndef LIBRARY_DEFINE_DONE_LABEL
!define LIBRARY_DEFINE_DONE_LABEL
!endif
ClearErrors
StrCpy $R0 $R4
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
IfErrors 0 "installlib.register_${INSTALLLIB_UNIQUE}"
SetOverwrite lastused
;------------------------
;Copy on reboot
GetTempFileName $R0 $R5
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
Rename /REBOOTOK $R0 $R4
;------------------------
;Register on reboot
Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
Goto "installlib.done_${INSTALLLIB_UNIQUE}"
"installlib.copy_${INSTALLLIB_UNIQUE}:"
StrCpy $R0 $R4
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
!endif
;------------------------
;Register
!ifdef LIBRARY_DEFINE_REGISTER_LABEL
!undef LIBRARY_DEFINE_REGISTER_LABEL
"installlib.register_${INSTALLLIB_UNIQUE}:"
!endif
!ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB | INSTALLLIB_LIBTYPE_REGEXE
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
IfRebootFlag 0 "installlib.regnoreboot_${INSTALLLIB_UNIQUE}"
Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
Goto "installlib.registerfinish_${INSTALLLIB_UNIQUE}"
"installlib.regnoreboot_${INSTALLLIB_UNIQUE}:"
!endif
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
TypeLib::Register $R4
!endif
!ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB
!ifndef LIBRARY_X64
RegDll $R4
!else
ExecWait '"$SYSDIR\regsvr32.exe" /s "$R4"'
!endif
!endif
!ifdef INSTALLLIB_LIBTYPE_REGEXE
ExecWait '"$R4" /regserver'
!endif
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
"installlib.registerfinish_${INSTALLLIB_UNIQUE}:"
!endif
!endif
!ifdef LIBRARY_SHELL_EXTENSION
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
!endif
!ifdef LIBRARY_COM
System::Call 'Ole32::CoFreeUnusedLibraries()'
!endif
;------------------------
;Done
!ifdef LIBRARY_DEFINE_DONE_LABEL
!undef LIBRARY_DEFINE_DONE_LABEL
"installlib.done_${INSTALLLIB_UNIQUE}:"
!endif
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Pop $R0
;------------------------
;End
Goto "installlib.end_${INSTALLLIB_UNIQUE}"
;------------------------
;Extract
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
SetOverwrite try
!else
SetOverwrite on
!endif
"installlib.file_${INSTALLLIB_UNIQUE}:"
SetFileAttributes $R0 FILE_ATTRIBUTE_NORMAL
ClearErrors
File /oname=$R0 "${LOCALFILE}"
Return
SetOverwrite lastused
;------------------------
;Register on reboot
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
"installlib.regonreboot_${INSTALLLIB_UNIQUE}:"
!ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB
!ifndef LIBRARY_X64
!insertmacro __InstallLib_Helper_AddRegToolEntry 'D' "$R4" "$R5"
!else
!insertmacro __InstallLib_Helper_AddRegToolEntry 'DX' "$R4" "$R5"
!endif
!endif
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
!insertmacro __InstallLib_Helper_AddRegToolEntry 'T' "$R4" "$R5"
!endif
!ifdef INSTALLLIB_LIBTYPE_REGEXE
!insertmacro __InstallLib_Helper_AddRegToolEntry 'E' "$R4" "$R5"
!endif
Return
!endif
;------------------------
;End label
"installlib.end_${INSTALLLIB_UNIQUE}:"
!ifdef LIBRARY_X64
${EnableX64FSRedirection}
!endif
;------------------------
;Undefine
!undef INSTALLLIB_UNIQUE
!undef ${INSTALLLIB_LIBTYPE_SET}
!undef INSTALLLIB_LIBTYPE_SET
!undef ${INSTALLLIB_SHARED_SET}
!undef INSTALLLIB_SHARED_SET
!undef ${INSTALLLIB_INSTALL_SET}
!undef INSTALLLIB_INSTALL_SET
!verbose pop
!macroend
### Uninstall library
!macro UnInstallLib libtype shared uninstall file
!verbose push
!verbose 3
Push $R0
Push $R1
;------------------------
;Define
!define UNINSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
!define UNINSTALLLIB_LIBTYPE_${libtype}
!define UNINSTALLLIB_LIBTYPE_SET UNINSTALLLIB_LIBTYPE_${libtype}
!define UNINSTALLLIB_SHARED_${shared}
!define UNINSTALLLIB_SHARED_SET UNINSTALLLIB_SHARED_${shared}
!define UNINSTALLLIB_UNINSTALL_${uninstall}
!define UNINSTALLLIB_UNINSTALL_SET UNINSTALLLIB_UNINSTALL_${uninstall}
;------------------------
;Validate
!ifndef UNINSTALLLIB_LIBTYPE_DLL & UNINSTALLLIB_LIBTYPE_REGDLL & UNINSTALLLIB_LIBTYPE_TLB & \
UNINSTALLLIB_LIBTYPE_REGDLLTLB & UNINSTALLLIB_LIBTYPE_REGEXE
!error "UnInstallLib: Incorrect setting for parameter: libtype"
!endif
!ifndef UNINSTALLLIB_SHARED_NOTSHARED & UNINSTALLLIB_SHARED_SHARED
!error "UnInstallLib: Incorrect setting for parameter: shared"
!endif
!ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE & UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED & \
UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED & UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED & \
UNINSTALLLIB_UNINSTALL_NOREBOOT_NOTPROTECTED
!error "UnInstallLib: Incorrect setting for parameter: uninstall"
!endif
;------------------------
;x64 settings
!ifdef LIBRARY_X64
${DisableX64FSRedirection}
!endif
;------------------------
;Copy the parameters used on run-time to a variable
;This allows the usage of variables as parameter
StrCpy $R1 "${file}"
;------------------------
;Shared library count
!ifdef UNINSTALLLIB_SHARED_SHARED
!define UNINSTALLLIB_DONE_LABEL
!ifdef LIBRARY_X64
SetRegView 64
!endif
ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
StrCmp $R0 "" "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
IntOp $R0 $R0 - 1
IntCmp $R0 0 "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" \
"uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}"
"uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}:"
DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
!ifndef UNINSTALLLIB_SHARED_SHAREDNOREMOVE
Goto "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
!endif
"uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}:"
WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
!ifdef LIBRARY_X64
SetRegView lastused
!endif
Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
"uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}:"
!ifdef LIBRARY_X64
SetRegView lastused
!endif
!endif
;------------------------
;Remove
!ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE
;------------------------
;Check Windows File Protection
!ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED
!ifndef UNINSTALLLIB_DONE_LABEL
!define UNINSTALLLIB_DONE_LABEL
!endif
System::Call "sfc::SfcIsFileProtected(i 0, w $R1) i.R0"
StrCmp $R0 "error" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
StrCmp $R0 "0" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
"uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}:"
!endif
;------------------------
;Unregister
!ifdef UNINSTALLLIB_LIBTYPE_REGDLL | UNINSTALLLIB_LIBTYPE_REGDLLTLB
!ifndef LIBRARY_X64
UnRegDLL $R1
!else
ExecWait '"$SYSDIR\regsvr32.exe" /s /u "$R1"'
!endif
!endif
!ifdef UNINSTALLLIB_LIBTYPE_REGEXE
ExecWait '"$R1" /unregserver'
!endif
!ifdef UNINSTALLLIB_LIBTYPE_TLB | UNINSTALLLIB_LIBTYPE_REGDLLTLB
TypeLib::UnRegister $R1
!endif
!ifdef LIBRARY_SHELL_EXTENSION
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
!endif
!ifdef LIBRARY_COM
System::Call 'Ole32::CoFreeUnusedLibraries()'
!endif
;------------------------
;Delete
Delete $R1
!ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED
${If} ${FileExists} $R1
# File is in use, can't just delete.
# Move file to another location before using Delete /REBOOTOK. This way, if
# the user installs a new version of the DLL, it won't be deleted after
# reboot. See bug #1097642 for more information on this.
# Try moving to $TEMP.
GetTempFileName $R0
Delete $R0
Rename $R1 $R0
${If} ${FileExists} $R1
# Still here, delete temporary file, in case the file was copied
# and not deleted. This happens when moving from network drives,
# for example.
Delete $R0
# Try moving to directory containing the file.
!insertmacro __InstallLib_Helper_GetParent $R1 $R0
GetTempFileName $R0 $R0
Delete $R0
Rename $R1 $R0
${If} ${FileExists} $R1
# Still here, delete temporary file.
Delete $R0
# Give up moving, simply Delete /REBOOTOK the file.
StrCpy $R0 $R1
${EndIf}
${EndIf}
# Delete the moved file.
Delete /REBOOTOK $R0
${EndIf}
!endif
!endif
;------------------------
;Done
!ifdef UNINSTALLLIB_DONE_LABEL
!undef UNINSTALLLIB_DONE_LABEL
"uninstalllib.done_${UNINSTALLLIB_UNIQUE}:"
!endif
!ifdef LIBRARY_X64
${EnableX64FSRedirection}
!endif
Pop $R1
Pop $R0
;------------------------
;Undefine
!undef UNINSTALLLIB_UNIQUE
!undef ${UNINSTALLLIB_LIBTYPE_SET}
!undef UNINSTALLLIB_LIBTYPE_SET
!undef ${UNINSTALLLIB_SHARED_SET}
!undef UNINSTALLLIB_SHARED_SET
!undef ${UNINSTALLLIB_UNINSTALL_SET}
!undef UNINSTALLLIB_UNINSTALL_SET
!verbose pop
!macroend
!endif
!verbose pop

792
T7x/Include/LogicLib.nsh Normal file
View File

@ -0,0 +1,792 @@
; NSIS LOGIC LIBRARY - LogicLib.nsh
; Version 2.6 - 08/12/2007
; By dselkirk@hotmail.com
; and eccles@users.sf.net
; with IfNot support added by Message
;
; Questions/Comments -
; See http://forums.winamp.com/showthread.php?s=&postid=1116241
;
; Description:
; Provides the use of various logic statements within NSIS.
;
; Usage:
; The following "statements" are available:
; If|IfNot|Unless..{ElseIf|ElseIfNot|ElseUnless}..[Else]..EndIf|EndUnless
; - Conditionally executes a block of statements, depending on the value
; of an expression. IfNot and Unless are equivalent and
; interchangeable, as are ElseIfNot and ElseUnless.
; AndIf|AndIfNot|AndUnless|OrIf|OrIfNot|OrUnless
; - Adds any number of extra conditions to If, IfNot, Unless, ElseIf,
; ElseIfNot and ElseUnless statements.
; IfThen|IfNotThen..|..|
; - Conditionally executes an inline statement, depending on the value
; of an expression.
; IfCmd..||..|
; - Conditionally executes an inline statement, depending on a true
; value of the provided NSIS function.
; Select..{Case[2|3|4|5]}..[CaseElse|Default]..EndSelect
; - Executes one of several blocks of statements, depending on the value
; of an expression.
; Switch..{Case|CaseElse|Default}..EndSwitch
; - Jumps to one of several labels, depending on the value of an
; expression.
; Do[While|Until]..{ExitDo|Continue|Break}..Loop[While|Until]
; - Repeats a block of statements until stopped, or depending on the
; value of an expression.
; While..{ExitWhile|Continue|Break}..EndWhile
; - An alias for DoWhile..Loop (for backwards-compatibility)
; For[Each]..{ExitFor|Continue|Break}..Next
; - Repeats a block of statements varying the value of a variable.
;
; The following "expressions" are available:
; Standard (built-in) string tests (which are case-insensitive):
; a == b; a != b
; Additional case-insensitive string tests (using System.dll):
; a S< b; a S>= b; a S> b; a S<= b
; Case-sensitive string tests:
; a S== b; a S!= b
; Standard (built-in) signed integer tests:
; a = b; a <> b; a < b; a >= b; a > b; a <= b
; Standard (built-in) unsigned integer tests:
; a U< b; a U>= b; a U> b; a U<= b
; 64-bit integer tests (using System.dll):
; a L= b; a L<> b; a L< b; a L>= b; a L> b; a L<= b
; Built-in NSIS flag tests:
; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
; Built-in NSIS other tests:
; ${FileExists} a
; Any conditional NSIS instruction test:
; ${Cmd} a
; Section flag tests:
; ${SectionIsSelected} a; ${SectionIsSectionGroup} a;
; ${SectionIsSectionGroupEnd} a; ${SectionIsBold} a;
; ${SectionIsReadOnly} a; ${SectionIsExpanded} a;
; ${SectionIsPartiallySelected} a
;
; Examples:
; See LogicLib.nsi in the Examples folder for lots of example usage.
!verbose push
!verbose 3
!ifndef LOGICLIB_VERBOSITY
!define LOGICLIB_VERBOSITY 3
!endif
!define _LOGICLIB_VERBOSITY ${LOGICLIB_VERBOSITY}
!undef LOGICLIB_VERBOSITY
!verbose ${_LOGICLIB_VERBOSITY}
!ifndef LOGICLIB
!define LOGICLIB
!define | "'"
!define || "' '"
!define LOGICLIB_COUNTER 0
!include Sections.nsh
!macro _LOGICLIB_TEMP
!ifndef _LOGICLIB_TEMP
!define _LOGICLIB_TEMP
Var /GLOBAL _LOGICLIB_TEMP ; Temporary variable to aid the more elaborate logic tests
!endif
!macroend
!macro _IncreaseCounter
!define _LOGICLIB_COUNTER ${LOGICLIB_COUNTER}
!undef LOGICLIB_COUNTER
!define /math LOGICLIB_COUNTER ${_LOGICLIB_COUNTER} + 1
!undef _LOGICLIB_COUNTER
!macroend
!macro _PushLogic
!insertmacro _PushScope Logic _LogicLib_Label_${LOGICLIB_COUNTER}
!insertmacro _IncreaseCounter
!macroend
!macro _PopLogic
!insertmacro _PopScope Logic
!macroend
!macro _PushScope Type label
!ifdef _${Type} ; If we already have a statement
!define _Cur${Type} ${_${Type}}
!undef _${Type}
!define _${Type} ${label}
!define ${_${Type}}Prev${Type} ${_Cur${Type}} ; Save the current logic
!undef _Cur${Type}
!else
!define _${Type} ${label} ; Initialise for first statement
!endif
!macroend
!macro _PopScope Type
!ifndef _${Type}
!error "Cannot use _Pop${Type} without a preceding _Push${Type}"
!endif
!ifdef ${_${Type}}Prev${Type} ; If a previous statment was active then restore it
!define _Cur${Type} ${_${Type}}
!undef _${Type}
!define _${Type} ${${_Cur${Type}}Prev${Type}}
!undef ${_Cur${Type}}Prev${Type}
!undef _Cur${Type}
!else
!undef _${Type}
!endif
!macroend
; String tests
!macro _== _a _b _t _f
StrCmp `${_a}` `${_b}` `${_t}` `${_f}`
!macroend
!macro _!= _a _b _t _f
!insertmacro _== `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
; Case-sensitive string tests
!macro _S== _a _b _t _f
StrCmpS `${_a}` `${_b}` `${_t}` `${_f}`
!macroend
!macro _S!= _a _b _t _f
!insertmacro _S== `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
; Extra string tests (cannot do these case-sensitively - I tried and lstrcmp still ignored the case)
!macro _StrCmpI _a _b _e _l _m
!insertmacro _LOGICLIB_TEMP
System::Call `kernel32::lstrcmpiA(ts, ts) i.s` `${_a}` `${_b}`
Pop $_LOGICLIB_TEMP
IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}`
!macroend
!macro _S< _a _b _t _f
!insertmacro _StrCmpI `${_a}` `${_b}` `${_f}` `${_t}` `${_f}`
!macroend
!macro _S>= _a _b _t _f
!insertmacro _S< `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
!macro _S> _a _b _t _f
!insertmacro _StrCmpI `${_a}` `${_b}` `${_f}` `${_f}` `${_t}`
!macroend
!macro _S<= _a _b _t _f
!insertmacro _S> `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
; Integer tests
!macro _= _a _b _t _f
IntCmp `${_a}` `${_b}` `${_t}` `${_f}` `${_f}`
!macroend
!macro _<> _a _b _t _f
!insertmacro _= `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
!macro _< _a _b _t _f
IntCmp `${_a}` `${_b}` `${_f}` `${_t}` `${_f}`
!macroend
!macro _>= _a _b _t _f
!insertmacro _< `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
!macro _> _a _b _t _f
IntCmp `${_a}` `${_b}` `${_f}` `${_f}` `${_t}`
!macroend
!macro _<= _a _b _t _f
!insertmacro _> `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
; Unsigned integer tests (NB: no need for extra equality tests)
!macro _U< _a _b _t _f
IntCmpU `${_a}` `${_b}` `${_f}` `${_t}` `${_f}`
!macroend
!macro _U>= _a _b _t _f
!insertmacro _U< `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
!macro _U> _a _b _t _f
IntCmpU `${_a}` `${_b}` `${_f}` `${_f}` `${_t}`
!macroend
!macro _U<= _a _b _t _f
!insertmacro _U> `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
; Int64 tests
!macro _Int64Cmp _a _o _b _t _f
!insertmacro _LOGICLIB_TEMP
System::Int64Op `${_a}` `${_o}` `${_b}`
Pop $_LOGICLIB_TEMP
!insertmacro _= $_LOGICLIB_TEMP 0 `${_f}` `${_t}`
!macroend
!macro _L= _a _b _t _f
!insertmacro _Int64Cmp `${_a}` = `${_b}` `${_t}` `${_f}`
!macroend
!macro _L<> _a _b _t _f
!insertmacro _L= `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
!macro _L< _a _b _t _f
!insertmacro _Int64Cmp `${_a}` < `${_b}` `${_t}` `${_f}`
!macroend
!macro _L>= _a _b _t _f
!insertmacro _L< `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
!macro _L> _a _b _t _f
!insertmacro _Int64Cmp `${_a}` > `${_b}` `${_t}` `${_f}`
!macroend
!macro _L<= _a _b _t _f
!insertmacro _L> `${_a}` `${_b}` `${_f}` `${_t}`
!macroend
; Flag tests
!macro _Abort _a _b _t _f
IfAbort `${_t}` `${_f}`
!macroend
!define Abort `"" Abort ""`
!macro _Errors _a _b _t _f
IfErrors `${_t}` `${_f}`
!macroend
!define Errors `"" Errors ""`
!macro _FileExists _a _b _t _f
IfFileExists `${_b}` `${_t}` `${_f}`
!macroend
!define FileExists `"" FileExists`
!macro _RebootFlag _a _b _t _f
IfRebootFlag `${_t}` `${_f}`
!macroend
!define RebootFlag `"" RebootFlag ""`
!macro _Silent _a _b _t _f
IfSilent `${_t}` `${_f}`
!macroend
!define Silent `"" Silent ""`
; "Any instruction" test
!macro _Cmd _a _b _t _f
!define _t=${_t}
!ifdef _t= ; If no true label then make one
!define __t _LogicLib_Label_${LOGICLIB_COUNTER}
!insertmacro _IncreaseCounter
!else
!define __t ${_t}
!endif
${_b} ${__t}
!define _f=${_f}
!ifndef _f= ; If a false label then go there
Goto ${_f}
!endif
!undef _f=${_f}
!ifdef _t= ; If we made our own true label then place it
${__t}:
!endif
!undef __t
!undef _t=${_t}
!macroend
!define Cmd `"" Cmd`
; Section flag test
!macro _SectionFlagIsSet _a _b _t _f
!insertmacro _LOGICLIB_TEMP
SectionGetFlags `${_b}` $_LOGICLIB_TEMP
IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & `${_a}`
!insertmacro _= $_LOGICLIB_TEMP `${_a}` `${_t}` `${_f}`
!macroend
!define SectionIsSelected `${SF_SELECTED} SectionFlagIsSet`
!define SectionIsSubSection `${SF_SUBSEC} SectionFlagIsSet`
!define SectionIsSubSectionEnd `${SF_SUBSECEND} SectionFlagIsSet`
!define SectionIsSectionGroup `${SF_SECGRP} SectionFlagIsSet`
!define SectionIsSectionGroupEnd `${SF_SECGRPEND} SectionFlagIsSet`
!define SectionIsBold `${SF_BOLD} SectionFlagIsSet`
!define SectionIsReadOnly `${SF_RO} SectionFlagIsSet`
!define SectionIsExpanded `${SF_EXPAND} SectionFlagIsSet`
!define SectionIsPartiallySelected `${SF_PSELECTED} SectionFlagIsSet`
!define IfCmd `!insertmacro _IfThen "" Cmd ${|}`
!macro _If _c _a _o _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!insertmacro _PushLogic
!define ${_Logic}If
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the Else
!insertmacro _IncreaseCounter
!define _c=${_c}
!ifdef _c=true ; If is true
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
!else ; If condition is false
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
!endif
!undef _c=${_c}
!verbose pop
!macroend
!define If `!insertmacro _If true`
!define Unless `!insertmacro _If false`
!define IfNot `!insertmacro _If false`
!macro _And _c _a _o _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}If
!error "Cannot use And without a preceding If or IfNot/Unless"
!endif
!ifndef ${_Logic}Else
!error "Cannot use And following an Else"
!endif
!define _c=${_c}
!ifdef _c=true ; If is true
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
!else ; If condition is false
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
!endif
!undef _c=${_c}
!verbose pop
!macroend
!define AndIf `!insertmacro _And true`
!define AndUnless `!insertmacro _And false`
!define AndIfNot `!insertmacro _And false`
!macro _Or _c _a _o _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}If
!error "Cannot use Or without a preceding If or IfNot/Unless"
!endif
!ifndef ${_Logic}Else
!error "Cannot use Or following an Else"
!endif
!define _label _LogicLib_Label_${LOGICLIB_COUNTER} ; Skip this test as we already
!insertmacro _IncreaseCounter
Goto ${_label} ; have a successful result
${${_Logic}Else}: ; Place the Else label
!undef ${_Logic}Else ; and remove it
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new If
!insertmacro _IncreaseCounter
!define _c=${_c}
!ifdef _c=true ; If is true
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
!else ; If condition is false
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
!endif
!undef _c=${_c}
${_label}:
!undef _label
!verbose pop
!macroend
!define OrIf `!insertmacro _Or true`
!define OrUnless `!insertmacro _Or false`
!define OrIfNot `!insertmacro _Or false`
!macro _Else
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}If
!error "Cannot use Else without a preceding If or IfNot/Unless"
!endif
!ifndef ${_Logic}Else
!error "Cannot use Else following an Else"
!endif
!ifndef ${_Logic}EndIf ; First Else for this If?
!define ${_Logic}EndIf _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the EndIf
!insertmacro _IncreaseCounter
!endif
Goto ${${_Logic}EndIf} ; Go to the EndIf
${${_Logic}Else}: ; Place the Else label
!undef ${_Logic}Else ; and remove it
!verbose pop
!macroend
!define Else `!insertmacro _Else`
!macro _ElseIf _c _a _o _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${Else} ; Perform the Else
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new If
!insertmacro _IncreaseCounter
!define _c=${_c}
!ifdef _c=true ; If is true
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
!else ; If condition is false
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
!endif
!undef _c=${_c}
!verbose pop
!macroend
!define ElseIf `!insertmacro _ElseIf true`
!define ElseUnless `!insertmacro _ElseIf false`
!define ElseIfNot `!insertmacro _ElseIf false`
!macro _EndIf _n
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}If
!error "Cannot use End${_n} without a preceding If or IfNot/Unless"
!endif
!ifdef ${_Logic}Else
${${_Logic}Else}: ; Place the Else label
!undef ${_Logic}Else ; and remove it
!endif
!ifdef ${_Logic}EndIf
${${_Logic}EndIf}: ; Place the EndIf
!undef ${_Logic}EndIf ; and remove it
!endif
!undef ${_Logic}If
!insertmacro _PopLogic
!verbose pop
!macroend
!define EndIf `!insertmacro _EndIf If`
!define EndUnless `!insertmacro _EndIf Unless`
!macro _IfThen _a _o _b _t
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${If} `${_a}` `${_o}` `${_b}`
${_t}
${EndIf}
!verbose pop
!macroend
!define IfThen `!insertmacro _IfThen`
!macro _IfNotThen _a _o _b _t
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${IfNot} `${_a}` `${_o}` `${_b}`
${_t}
${EndIf}
!verbose pop
!macroend
!define IfNotThen `!insertmacro _IfNotThen`
!macro _ForEach _v _f _t _o _s
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
StrCpy "${_v}" "${_f}" ; Assign the initial value
Goto +2 ; Skip the loop expression for the first iteration
!define _DoLoopExpression `IntOp "${_v}" "${_v}" "${_o}" "${_s}"` ; Define the loop expression
!define _o=${_o}
!ifdef _o=+ ; Check the loop expression operator
!define __o > ; to determine the correct loop condition
!else ifdef _o=-
!define __o <
!else
!error "Unsupported ForEach step operator (must be + or -)"
!endif
!undef _o=${_o}
!insertmacro _Do For false `${_v}` `${__o}` `${_t}` ; Let Do do the rest
!undef __o
!verbose pop
!macroend
!define ForEach `!insertmacro _ForEach`
!macro _For _v _f _t
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${ForEach} `${_v}` `${_f}` `${_t}` + 1 ; Pass on to ForEach
!verbose pop
!macroend
!define For `!insertmacro _For`
!define ExitFor `!insertmacro _Goto ExitFor For`
!define Next `!insertmacro _Loop For Next "" "" "" ""`
!define While `!insertmacro _Do While true`
!define ExitWhile `!insertmacro _Goto ExitWhile While`
!define EndWhile `!insertmacro _Loop While EndWhile "" "" "" ""`
!macro _Do _n _c _a _o _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!insertmacro _PushLogic
!define ${_Logic}${_n} _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the start of the loop
!insertmacro _IncreaseCounter
${${_Logic}${_n}}:
!insertmacro _PushScope Exit${_n} _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the end of the loop
!insertmacro _IncreaseCounter
!insertmacro _PushScope Break ${_Exit${_n}} ; Break goes to the end of the loop
!ifdef _DoLoopExpression
${_DoLoopExpression} ; Special extra parameter for inserting code
!undef _DoLoopExpression ; between the Continue label and the loop condition
!endif
!define _c=${_c}
!ifdef _c= ; No starting condition
!insertmacro _PushScope Continue _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for Continue at the end of the loop
!insertmacro _IncreaseCounter
!else
!insertmacro _PushScope Continue ${${_Logic}${_n}} ; Continue goes to the start of the loop
!ifdef _c=true ; If is true
!insertmacro _${_o} `${_a}` `${_b}` "" ${_Exit${_n}}
!else ; If condition is false
!insertmacro _${_o} `${_a}` `${_b}` ${_Exit${_n}} ""
!endif
!endif
!undef _c=${_c}
!define ${_Logic}Condition ${_c} ; Remember the condition used
!verbose pop
!macroend
!define Do `!insertmacro _Do Do "" "" "" ""`
!define DoWhile `!insertmacro _Do Do true`
!define DoUntil `!insertmacro _Do Do false`
!macro _Goto _n _s
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _${_n}
!error "Cannot use ${_n} without a preceding ${_s}"
!endif
Goto ${_${_n}}
!verbose pop
!macroend
!define ExitDo `!insertmacro _Goto ExitDo Do`
!macro _Loop _n _e _c _a _o _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}${_n}
!error "Cannot use ${_e} without a preceding ${_n}"
!endif
!define _c=${${_Logic}Condition}
!ifdef _c= ; If Do had no condition place the Continue label
${_Continue}:
!endif
!undef _c=${${_Logic}Condition}
!define _c=${_c}
!ifdef _c= ; No ending condition
Goto ${${_Logic}${_n}}
!else ifdef _c=true ; If condition is true
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}${_n}} ${_Exit${_n}}
!else ; If condition is false
!insertmacro _${_o} `${_a}` `${_b}` ${_Exit${_n}} ${${_Logic}${_n}}
!endif
!undef _c=${_c}
Goto ${_Continue} ; Just to ensure it is referenced at least once
Goto ${_Exit${_n}} ; Just to ensure it is referenced at least once
${_Exit${_n}}: ; Place the loop exit point
!undef ${_Logic}Condition
!insertmacro _PopScope Continue
!insertmacro _PopScope Break
!insertmacro _PopScope Exit${_n}
!undef ${_Logic}${_n}
!insertmacro _PopLogic
!verbose pop
!macroend
!define Loop `!insertmacro _Loop Do Loop "" "" "" ""`
!define LoopWhile `!insertmacro _Loop Do LoopWhile true`
!define LoopUntil `!insertmacro _Loop Do LoopUntil false`
!define Continue `!insertmacro _Goto Continue "For or Do or While"`
!define Break `!insertmacro _Goto Break "For or Do or While"`
!macro _Select _a
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!insertmacro _PushLogic
!define ${_Logic}Select `${_a}` ; Remember the left hand side of the comparison
!verbose pop
!macroend
!define Select `!insertmacro _Select`
!macro _Select_CaseElse
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}Select
!error "Cannot use Case without a preceding Select"
!endif
!ifdef ${_Logic}EndSelect ; This is set only after the first case
!ifndef ${_Logic}Else
!error "Cannot use Case following a CaseElse"
!endif
Goto ${${_Logic}EndSelect} ; Go to the EndSelect
${${_Logic}Else}: ; Place the Else label
!undef ${_Logic}Else ; and remove it
!else
!define ${_Logic}EndSelect _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the EndSelect
!insertmacro _IncreaseCounter
!endif
!verbose pop
!macroend
!define CaseElse `!insertmacro _CaseElse`
!define Case_Else `!insertmacro _CaseElse` ; Compatibility with 2.2 and earlier
!define Default `!insertmacro _CaseElse` ; For the C-minded
!macro _Select_Case _a
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${CaseElse} ; Perform the CaseElse
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
!insertmacro _IncreaseCounter
!insertmacro _== `${${_Logic}Select}` `${_a}` "" ${${_Logic}Else}
!verbose pop
!macroend
!define Case `!insertmacro _Case`
!macro _Case2 _a _b
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${CaseElse} ; Perform the CaseElse
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
!insertmacro _IncreaseCounter
!insertmacro _== `${${_Logic}Select}` `${_a}` +2 ""
!insertmacro _== `${${_Logic}Select}` `${_b}` "" ${${_Logic}Else}
!verbose pop
!macroend
!define Case2 `!insertmacro _Case2`
!macro _Case3 _a _b _c
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${CaseElse} ; Perform the CaseElse
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
!insertmacro _IncreaseCounter
!insertmacro _== `${${_Logic}Select}` `${_a}` +3 ""
!insertmacro _== `${${_Logic}Select}` `${_b}` +2 ""
!insertmacro _== `${${_Logic}Select}` `${_c}` "" ${${_Logic}Else}
!verbose pop
!macroend
!define Case3 `!insertmacro _Case3`
!macro _Case4 _a _b _c _d
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${CaseElse} ; Perform the CaseElse
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
!insertmacro _IncreaseCounter
!insertmacro _== `${${_Logic}Select}` `${_a}` +4 ""
!insertmacro _== `${${_Logic}Select}` `${_b}` +3 ""
!insertmacro _== `${${_Logic}Select}` `${_c}` +2 ""
!insertmacro _== `${${_Logic}Select}` `${_d}` "" ${${_Logic}Else}
!verbose pop
!macroend
!define Case4 `!insertmacro _Case4`
!macro _Case5 _a _b _c _d _e
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${CaseElse} ; Perform the CaseElse
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
!insertmacro _IncreaseCounter
!insertmacro _== `${${_Logic}Select}` `${_a}` +5 ""
!insertmacro _== `${${_Logic}Select}` `${_b}` +4 ""
!insertmacro _== `${${_Logic}Select}` `${_c}` +3 ""
!insertmacro _== `${${_Logic}Select}` `${_d}` +2 ""
!insertmacro _== `${${_Logic}Select}` `${_e}` "" ${${_Logic}Else}
!verbose pop
!macroend
!define Case5 `!insertmacro _Case5`
!macro _EndSelect
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}Select
!error "Cannot use EndSelect without a preceding Select"
!endif
!ifdef ${_Logic}Else
${${_Logic}Else}: ; Place the Else label
!undef ${_Logic}Else ; and remove it
!endif
!ifdef ${_Logic}EndSelect ; This won't be set if there weren't any cases
${${_Logic}EndSelect}: ; Place the EndSelect
!undef ${_Logic}EndSelect ; and remove it
!endif
!undef ${_Logic}Select
!insertmacro _PopLogic
!verbose pop
!macroend
!define EndSelect `!insertmacro _EndSelect`
!macro _Switch _a
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!insertmacro _PushLogic
!insertmacro _PushScope Switch ${_Logic} ; Keep a separate stack for switch data
!insertmacro _PushScope Break _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a lable for beyond the end of the switch
!insertmacro _IncreaseCounter
!define ${_Switch}Var `${_a}` ; Remember the left hand side of the comparison
!tempfile ${_Switch}Tmp ; Create a temporary file
!define ${_Logic}Switch _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the end of the switch
!insertmacro _IncreaseCounter
Goto ${${_Logic}Switch} ; and go there
!verbose pop
!macroend
!define Switch `!insertmacro _Switch`
!macro _Case _a
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifdef _Logic & ${_Logic}Select ; Check for an active Select
!insertmacro _Select_Case `${_a}`
!else ifndef _Switch ; If not then check for an active Switch
!error "Cannot use Case without a preceding Select or Switch"
!else
!define _label _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for this case,
!insertmacro _IncreaseCounter
${_label}: ; place it and add it's check to the temp file
!appendfile "${${_Switch}Tmp}" `!insertmacro _== $\`${${_Switch}Var}$\` $\`${_a}$\` ${_label} ""$\n`
!undef _label
!endif
!verbose pop
!macroend
!macro _CaseElse
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifdef _Logic & ${_Logic}Select ; Check for an active Select
!insertmacro _Select_CaseElse
!else ifndef _Switch ; If not then check for an active Switch
!error "Cannot use Case without a preceding Select or Switch"
!else ifdef ${_Switch}Else ; Already had a default case?
!error "Cannot use CaseElse following a CaseElse"
!else
!define ${_Switch}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the default case,
!insertmacro _IncreaseCounter
${${_Switch}Else}: ; and place it
!endif
!verbose pop
!macroend
!macro _EndSwitch
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
!ifndef _Logic | ${_Logic}Switch
!error "Cannot use EndSwitch without a preceding Switch"
!endif
Goto ${_Break} ; Skip the jump table
${${_Logic}Switch}: ; Place the end of the switch
!undef ${_Logic}Switch
!include "${${_Switch}Tmp}" ; Include the jump table
!delfile "${${_Switch}Tmp}" ; and clear it up
!ifdef ${_Switch}Else ; Was there a default case?
Goto ${${_Switch}Else} ; then go there if all else fails
!undef ${_Switch}Else
!endif
!undef ${_Switch}Tmp
!undef ${_Switch}Var
${_Break}: ; Place the break label
!insertmacro _PopScope Break
!insertmacro _PopScope Switch
!insertmacro _PopLogic
!verbose pop
!macroend
!define EndSwitch `!insertmacro _EndSwitch`
!endif ; LOGICLIB
!verbose 3
!define LOGICLIB_VERBOSITY ${_LOGICLIB_VERBOSITY}
!undef _LOGICLIB_VERBOSITY
!verbose pop

1
T7x/Include/MUI.nsh Normal file
View File

@ -0,0 +1 @@
!include "${NSISDIR}\Contrib\Modern UI\System.nsh"

1
T7x/Include/MUI2.nsh Normal file
View File

@ -0,0 +1 @@
!include "${NSISDIR}\Contrib\Modern UI 2\MUI2.nsh"

526
T7x/Include/Memento.nsh Normal file
View File

@ -0,0 +1,526 @@
!verbose push
!verbose 3
!include LogicLib.nsh
!include Sections.nsh
!ifndef ___MEMENTO_NSH___
!define ___MEMENTO_NSH___
#####################################
### Memento ###
#####################################
/*
Memento is a set of macros that allow installers to remember user selection
across separate runs of the installer. Currently, it can remember the state
of sections and mark new sections as bold. In the future, it'll integrate
InstallOptions and maybe even the Modern UI.
A usage example can be found in `Examples\Memento.nsi`.
*/
#####################################
### Usage Instructions ###
#####################################
/*
1. Declare usage of Memento by including Memento.nsh at the top of the script.
!include Memento.nsh
2. Define MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY with the a registry key
where sections' state should be saved.
!define MEMENTO_REGISTRY_ROOT HKLM
!define MEMENTO_REGISTRY_KEY \
Software\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram
3. Replace Section with ${MementoSection} and SectionEnd with ${MementoSectionEnd}
for sections that whose state should be remembered by Memento.
For sections that should be unselected by default, use ${MementoSection}'s
brother - ${MementoUnselectedSection}.
Sections that don't already have an identifier must be assigned one.
Section identifiers must stay the same across different versions of the
installer or their state will be forgotten.
4. Use ${MementoSectionDone} after the last ${MementoSection}.
5. Add a call to ${MementoSectionRestore} to .onInit to restore the state
of all sections from the registry.
Function .onInit
${MementoSectionRestore}
FunctionEnd
6. Add a call to ${MementoSectionSave} to .onInstSuccess to save the state
of all sections to the registry.
Function .onInstSuccess
${MementoSectionSave}
FunctionEnd
7. Tattoo the location of the chosen registry key on your arm.
*/
#####################################
### User API ###
#####################################
;
; ${MementoSection}
;
; Defines a section whose state is remembered by Memento.
;
; Usage is similar to Section.
;
; ${MementoSection} "name" "some_id"
;
!define MementoSection "!insertmacro MementoSection"
;
; ${MementoSectionEnd}
;
; Ends a section previously opened using ${MementoSection}.
;
; Usage is similar to SectionEnd.
;
; ${MementoSection} "name" "some_id"
; # some code...
; ${MementoSectionEnd}
;
;
; ${MementoUnselectedSection}
;
; Defines a section whose state is remembered by Memento and is
; unselected by default.
;
; Usage is similar to Section with the /o switch.
;
; ${MementoUnselectedSection} "name" "some_id"
;
!define MementoUnselectedSection "!insertmacro MementoUnselectedSection"
;
; ${MementoSectionEnd}
;
; Ends a section previously opened using ${MementoSection}.
;
; Usage is similar to SectionEnd.
;
; ${MementoSection} "name" "some_id"
; # some code...
; ${MementoSectionEnd}
;
!define MementoSectionEnd "!insertmacro MementoSectionEnd"
;
; ${MementoSectionDone}
;
; Used after all ${MementoSection} have been set.
;
; ${MementoSection} "name1" "some_id1"
; # some code...
; ${MementoSectionEnd}
;
; ${MementoSection} "name2" "some_id2"
; # some code...
; ${MementoSectionEnd}
;
; ${MementoSection} "name3" "some_id3"
; # some code...
; ${MementoSectionEnd}
;
; ${MementoSectionDone}
;
!define MementoSectionDone "!insertmacro MementoSectionDone"
;
; ${MementoSectionRestore}
;
; Restores the state of all Memento sections from the registry.
;
; Commonly used in .onInit.
;
; Function .onInit
;
; ${MementoSectionRestore}
;
; FunctionEnd
;
!define MementoSectionRestore "!insertmacro MementoSectionRestore"
;
; ${MementoSectionSave}
;
; Saves the state of all Memento sections to the registry.
;
; Commonly used in .onInstSuccess.
;
; Function .onInstSuccess
;
; ${MementoSectionSave}
;
; FunctionEnd
;
!define MementoSectionSave "!insertmacro MementoSectionSave"
#####################################
### Internal Defines ###
#####################################
!define __MementoSectionIndex 1
#####################################
### Internal Macros ###
#####################################
!macro __MementoCheckSettings
!ifndef MEMENTO_REGISTRY_ROOT | MEMENTO_REGISTRY_KEY
!error "MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY must be defined before using any of Memento's macros"
!endif
!macroend
!macro __MementoSection flags name id
!insertmacro __MementoCheckSettings
!ifndef __MementoSectionIndex
!error "MementoSectionDone already used!"
!endif
!define __MementoSectionLastSectionId `${id}`
!verbose pop
Section ${flags} `${name}` `${id}`
!verbose push
!verbose 3
!macroend
#####################################
### User Macros ###
#####################################
!macro MementoSection name id
!verbose push
!verbose 3
!insertmacro __MementoSection "" `${name}` `${id}`
!verbose pop
!macroend
!macro MementoUnselectedSection name id
!verbose push
!verbose 3
!insertmacro __MementoSection /o `${name}` `${id}`
!define __MementoSectionUnselected
!verbose pop
!macroend
!macro MementoSectionEnd
SectionEnd
!verbose push
!verbose 3
!insertmacro __MementoCheckSettings
!ifndef __MementoSectionIndex
!error "MementoSectionDone already used!"
!endif
!define /MATH __MementoSectionIndexNext \
${__MementoSectionIndex} + 1
Function __MementoSectionMarkNew${__MementoSectionIndex}
ClearErrors
ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
${If} ${Errors}
!insertmacro SetSectionFlag `${${__MementoSectionLastSectionId}}` ${SF_BOLD}
${EndIf}
GetFunctionAddress $0 __MementoSectionMarkNew${__MementoSectionIndexNext}
Goto $0
FunctionEnd
Function __MementoSectionRestoreStatus${__MementoSectionIndex}
ClearErrors
ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
!ifndef __MementoSectionUnselected
${If} ${Errors}
${OrIf} $0 != 0
!insertmacro SelectSection `${${__MementoSectionLastSectionId}}`
${Else}
!insertmacro UnselectSection `${${__MementoSectionLastSectionId}}`
${EndIf}
!else
!undef __MementoSectionUnselected
${If} ${Errors}
${OrIf} $0 == 0
!insertmacro UnselectSection `${${__MementoSectionLastSectionId}}`
${Else}
!insertmacro SelectSection `${${__MementoSectionLastSectionId}}`
${EndIf}
!endif
GetFunctionAddress $0 __MementoSectionRestoreStatus${__MementoSectionIndexNext}
Goto $0
FunctionEnd
Function __MementoSectionSaveStatus${__MementoSectionIndex}
${If} ${SectionIsSelected} `${${__MementoSectionLastSectionId}}`
WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 1
${Else}
WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 0
${EndIf}
GetFunctionAddress $0 __MementoSectionSaveStatus${__MementoSectionIndexNext}
Goto $0
FunctionEnd
!undef __MementoSectionIndex
!define __MementoSectionIndex ${__MementoSectionIndexNext}
!undef __MementoSectionIndexNext
!undef __MementoSectionLastSectionId
!verbose pop
!macroend
!macro MementoSectionDone
!verbose push
!verbose 3
!insertmacro __MementoCheckSettings
Function __MementoSectionMarkNew${__MementoSectionIndex}
FunctionEnd
Function __MementoSectionRestoreStatus${__MementoSectionIndex}
FunctionEnd
Function __MementoSectionSaveStatus${__MementoSectionIndex}
FunctionEnd
!undef __MementoSectionIndex
!verbose pop
!macroend
!macro MementoSectionRestore
!verbose push
!verbose 3
!insertmacro __MementoCheckSettings
Push $0
Push $1
Push $2
Push $3
# check for first usage
ClearErrors
ReadRegStr $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed
${If} ${Errors}
# use script defaults on first run
Goto done
${EndIf}
# mark new components in bold
Call __MementoSectionMarkNew1
# mark section groups in bold
StrCpy $0 0
StrCpy $1 ""
StrCpy $2 ""
StrCpy $3 ""
loop:
ClearErrors
${If} ${SectionIsBold} $0
${If} $1 != ""
!insertmacro SetSectionFlag $1 ${SF_BOLD}
${EndIf}
${If} $2 != ""
!insertmacro SetSectionFlag $2 ${SF_BOLD}
${EndIf}
${If} $3 != ""
!insertmacro SetSectionFlag $3 ${SF_BOLD}
${EndIf}
${ElseIf} ${Errors}
Goto loop_end
${EndIf}
${If} ${SectionIsSectionGroup} $0
${If} $1 == ""
StrCpy $1 $0
${ElseIf} $2 == ""
StrCpy $2 $0
${ElseIf} $3 == ""
StrCpy $3 $0
${EndIf}
${EndIf}
${If} ${SectionIsSectionGroupEnd} $0
${If} $3 != ""
StrCpy $3 ""
${ElseIf} $2 != ""
StrCpy $2 ""
${ElseIf} $1 != ""
StrCpy $1 ""
${EndIf}
${EndIf}
IntOp $0 $0 + 1
Goto loop
loop_end:
# restore sections' status
Call __MementoSectionRestoreStatus1
# all done
done:
Pop $3
Pop $2
Pop $1
Pop $0
!verbose pop
!macroend
!macro MementoSectionSave
!verbose push
!verbose 3
!insertmacro __MementoCheckSettings
Push $0
WriteRegStr ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed ""
Call __MementoSectionSaveStatus1
Pop $0
!verbose pop
!macroend
!endif # ___MEMENTO_NSH___
!verbose pop

469
T7x/Include/MultiUser.nsh Normal file
View File

@ -0,0 +1,469 @@
/*
MultiUser.nsh
Installer configuration for multi-user Windows environments
Copyright 2008-2009 Joost Verburg
*/
!ifndef MULTIUSER_INCLUDED
!define MULTIUSER_INCLUDED
!verbose push
!verbose 3
;Standard NSIS header files
!ifdef MULTIUSER_MUI
!include MUI2.nsh
!endif
!include nsDialogs.nsh
!include LogicLib.nsh
!include WinVer.nsh
!include FileFunc.nsh
;Variables
Var MultiUser.Privileges
Var MultiUser.InstallMode
;Command line installation mode setting
!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE
!include StrFunc.nsh
!ifndef StrStr_INCLUDED
${StrStr}
!endif
!ifndef MULTIUSER_NOUNINSTALL
!ifndef UnStrStr_INCLUDED
${UnStrStr}
!endif
!endif
Var MultiUser.Parameters
Var MultiUser.Result
!endif
;Installation folder stored in registry
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
Var MultiUser.InstDir
!endif
!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME
Var MultiUser.DefaultKeyValue
!endif
;Windows Vista UAC setting
!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin
RequestExecutionLevel admin
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power
RequestExecutionLevel admin
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Highest
RequestExecutionLevel highest
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS
!else
RequestExecutionLevel user
!endif
/*
Install modes
*/
!macro MULTIUSER_INSTALLMODE_ALLUSERS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
;Install mode initialization - per-machine
${ifnot} ${IsNT}
${orif} $MultiUser.Privileges == "Admin"
${orif} $MultiUser.Privileges == "Power"
StrCpy $MultiUser.InstallMode AllUsers
SetShellVarContext all
!if "${UNINSTALLER_PREFIX}" != UN
;Set default installation location for installer
!ifdef MULTIUSER_INSTALLMODE_INSTDIR
StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
!endif
!endif
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
ReadRegStr $MultiUser.InstDir HKLM "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}"
${if} $MultiUser.InstDir != ""
StrCpy $INSTDIR $MultiUser.InstDir
${endif}
!endif
!ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION
Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
!endif
${endif}
!macroend
!macro MULTIUSER_INSTALLMODE_CURRENTUSER UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
;Install mode initialization - per-user
${if} ${IsNT}
StrCpy $MultiUser.InstallMode CurrentUser
SetShellVarContext current
!if "${UNINSTALLER_PREFIX}" != UN
;Set default installation location for installer
!ifdef MULTIUSER_INSTALLMODE_INSTDIR
${if} ${AtLeastWin2000}
StrCpy $INSTDIR "$LOCALAPPDATA\${MULTIUSER_INSTALLMODE_INSTDIR}"
${else}
StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
${endif}
!endif
!endif
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
ReadRegStr $MultiUser.InstDir HKCU "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}"
${if} $MultiUser.InstDir != ""
StrCpy $INSTDIR $MultiUser.InstDir
${endif}
!endif
!ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION
Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
!endif
${endif}
!macroend
Function MultiUser.InstallMode.AllUsers
!insertmacro MULTIUSER_INSTALLMODE_ALLUSERS "" ""
FunctionEnd
Function MultiUser.InstallMode.CurrentUser
!insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER "" ""
FunctionEnd
!ifndef MULTIUSER_NOUNINSTALL
Function un.MultiUser.InstallMode.AllUsers
!insertmacro MULTIUSER_INSTALLMODE_ALLUSERS UN .un
FunctionEnd
Function un.MultiUser.InstallMode.CurrentUser
!insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER UN .un
FunctionEnd
!endif
/*
Installer/uninstaller initialization
*/
!macro MULTIUSER_INIT_QUIT UNINSTALLER_FUNCPREFIX
!ifdef MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUNCTIONQUIT
Call "${MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUCTIONQUIT}
!else
Quit
!endif
!macroend
!macro MULTIUSER_INIT_TEXTS
!ifndef MULTIUSER_INIT_TEXT_ADMINREQUIRED
!define MULTIUSER_INIT_TEXT_ADMINREQUIRED "$(^Caption) requires administrator priviledges."
!endif
!ifndef MULTIUSER_INIT_TEXT_POWERREQUIRED
!define MULTIUSER_INIT_TEXT_POWERREQUIRED "$(^Caption) requires at least Power User priviledges."
!endif
!ifndef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE
!define MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have sufficient privileges to install $(^Name) for all users of this compuetr."
!endif
!macroend
!macro MULTIUSER_INIT_CHECKS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
;Installer initialization - check privileges and set install mode
!insertmacro MULTIUSER_INIT_TEXTS
UserInfo::GetAccountType
Pop $MultiUser.Privileges
${if} ${IsNT}
;Check privileges
!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin
${if} $MultiUser.Privileges != "Admin"
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}"
!insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}"
${endif}
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power
${if} $MultiUser.Privileges != "Power"
${andif} $MultiUser.Privileges != "Admin"
${if} ${AtMostWinXP}
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_POWERREQUIRED}"
${else}
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}"
${endif}
!insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}"
${endif}
!endif
!ifdef MULTIUSER_EXECUTIONLEVEL_ALLUSERS
;Default to per-machine installation if possible
${if} $MultiUser.Privileges == "Admin"
${orif} $MultiUser.Privileges == "Power"
!ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
!else
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
!endif
!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME
;Set installation mode to setting from a previous installation
!ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
${if} $MultiUser.DefaultKeyValue == ""
ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
${if} $MultiUser.DefaultKeyValue != ""
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
${endif}
${endif}
!else
ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
${if} $MultiUser.DefaultKeyValue == ""
ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
${if} $MultiUser.DefaultKeyValue != ""
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
${endif}
${endif}
!endif
!endif
${else}
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
${endif}
!else
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
!endif
!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE
;Check for install mode setting on command line
${${UNINSTALLER_FUNCPREFIX}GetParameters} $MultiUser.Parameters
${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/CurrentUser"
${if} $MultiUser.Result != ""
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
${endif}
${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/AllUsers"
${if} $MultiUser.Result != ""
${if} $MultiUser.Privileges == "Admin"
${orif} $MultiUser.Privileges == "Power"
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
${else}
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE}"
${endif}
${endif}
!endif
${else}
;Not running Windows NT, per-user installation not supported
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
${endif}
!macroend
!macro MULTIUSER_INIT
!verbose push
!verbose 3
!insertmacro MULTIUSER_INIT_CHECKS "" ""
!verbose pop
!macroend
!ifndef MULTIUSER_NOUNINSTALL
!macro MULTIUSER_UNINIT
!verbose push
!verbose 3
!insertmacro MULTIUSER_INIT_CHECKS Un un.
!verbose pop
!macroend
!endif
/*
Modern UI 2 page
*/
!ifdef MULTIUSER_MUI
!macro MULTIUSER_INSTALLMODEPAGE_INTERFACE
!ifndef MULTIUSER_INSTALLMODEPAGE_INTERFACE
!define MULTIUSER_INSTALLMODEPAGE_INTERFACE
Var MultiUser.InstallModePage
Var MultiUser.InstallModePage.Text
Var MultiUser.InstallModePage.AllUsers
Var MultiUser.InstallModePage.CurrentUser
Var MultiUser.InstallModePage.ReturnValue
!endif
!macroend
!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE
!insertmacro MUI_SET MULTIUSER_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLMODEPAGE ""
!insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_TOP "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)"
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS "$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)"
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER "$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)"
PageEx custom
PageCallbacks MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID}
Caption " "
PageExEnd
!insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID}
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER
!macroend
!macro MULTIUSER_PAGE_INSTALLMODE
;Modern UI page for install mode
!verbose push
!verbose 3
!ifndef MULTIUSER_EXECUTIONLEVEL_ALLUSERS
!error "A mixed-mode installation requires MULTIUSER_EXECUTIONLEVEL to be set to Admin, Power or Highest."
!endif
!insertmacro MUI_PAGE_INIT
!insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE
!verbose pop
!macroend
!macro MULTIUSER_FUNCTION_INSTALLMODEPAGE PRE LEAVE
;Page functions of Modern UI page
Function "${PRE}"
${ifnot} ${IsNT}
Abort
${endif}
${if} $MultiUser.Privileges != "Power"
${andif} $MultiUser.Privileges != "Admin"
Abort
${endif}
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
!insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) $(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE)
nsDialogs::Create 1018
Pop $MultiUser.InstallModePage
${NSD_CreateLabel} 0u 0u 300u 20u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}"
Pop $MultiUser.InstallModePage.Text
${NSD_CreateRadioButton} 20u 50u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}"
Pop $MultiUser.InstallModePage.AllUsers
${NSD_CreateRadioButton} 20u 70u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}"
Pop $MultiUser.InstallModePage.CurrentUser
${if} $MultiUser.InstallMode == "AllUsers"
SendMessage $MultiUser.InstallModePage.AllUsers ${BM_SETCHECK} ${BST_CHECKED} 0
${else}
SendMessage $MultiUser.InstallModePage.CurrentUser ${BM_SETCHECK} ${BST_CHECKED} 0
${endif}
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
nsDialogs::Show
FunctionEnd
Function "${LEAVE}"
SendMessage $MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 $MultiUser.InstallModePage.ReturnValue
${if} $MultiUser.InstallModePage.ReturnValue = ${BST_CHECKED}
Call MultiUser.InstallMode.AllUsers
${else}
Call MultiUser.InstallMode.CurrentUser
${endif}
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
FunctionEnd
!macroend
!endif
!verbose pop
!endif

273
T7x/Include/Sections.nsh Normal file
View File

@ -0,0 +1,273 @@
; Sections.nsh
;
; Defines and macros for section control
;
; Include in your script using:
; !include "Sections.nsh"
;--------------------------------
!ifndef SECTIONS_INCLUDED
!define SECTIONS_INCLUDED
;--------------------------------
; Generic section defines
# section or section group is selected
!define SF_SELECTED 1
# section group
!define SF_SECGRP 2
!define SF_SUBSEC 2 # deprecated
# section group end marker
!define SF_SECGRPEND 4
!define SF_SUBSECEND 4 # deprecated
# bold text (Section !blah)
!define SF_BOLD 8
# read only (SectionIn RO)
!define SF_RO 16
# expanded section group (SectionGroup /e blah)
!define SF_EXPAND 32
# section group is partially selected
!define SF_PSELECTED 64 # internal
# internal
!define SF_TOGGLED 128 # internal
!define SF_NAMECHG 256 # internal
# mask to toggle off the selected flag
!define SECTION_OFF 0xFFFFFFFE
;--------------------------------
; Select / unselect / reserve section
!macro SelectSection SECTION
Push $0
Push $1
StrCpy $1 "${SECTION}"
SectionGetFlags $1 $0
IntOp $0 $0 | ${SF_SELECTED}
SectionSetFlags $1 $0
Pop $1
Pop $0
!macroend
!macro UnselectSection SECTION
Push $0
Push $1
StrCpy $1 "${SECTION}"
SectionGetFlags $1 $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags $1 $0
Pop $1
Pop $0
!macroend
; If section selected, will unselect, if unselected, will select
!macro ReverseSection SECTION
Push $0
Push $1
StrCpy $1 "${SECTION}"
SectionGetFlags $1 $0
IntOp $0 $0 ^ ${SF_SELECTED}
SectionSetFlags $1 $0
Pop $1
Pop $0
!macroend
;--------------------------------
; Macros for mutually exclusive section selection
; Written by Tim Gallagher
;
; See one-section.nsi for an example of usage
; Starts the Radio Button Block
; You should pass a variable that keeps the selected section
; as the first parameter for this macro. This variable should
; be initialized to the default section's index.
;
; As this macro uses $R0 and $R1 you can't use those two as the
; varible which will keep the selected section.
!macro StartRadioButtons var
!define StartRadioButtons_Var "${var}"
Push $R0
SectionGetFlags "${StartRadioButtons_Var}" $R0
IntOp $R0 $R0 & ${SECTION_OFF}
SectionSetFlags "${StartRadioButtons_Var}" $R0
Push $R1
StrCpy $R1 "${StartRadioButtons_Var}"
!macroend
; A radio button
!macro RadioButton SECTION_NAME
SectionGetFlags ${SECTION_NAME} $R0
IntOp $R0 $R0 & ${SF_SELECTED}
IntCmp $R0 ${SF_SELECTED} 0 +2 +2
StrCpy "${StartRadioButtons_Var}" ${SECTION_NAME}
!macroend
; Ends the radio button block
!macro EndRadioButtons
StrCmp $R1 "${StartRadioButtons_Var}" 0 +4 ; selection hasn't changed
SectionGetFlags "${StartRadioButtons_Var}" $R0
IntOp $R0 $R0 | ${SF_SELECTED}
SectionSetFlags "${StartRadioButtons_Var}" $R0
Pop $R1
Pop $R0
!undef StartRadioButtons_Var
!macroend
;--------------------------------
; These are two macros you can use to set a Section in an InstType
; or clear it from an InstType.
;
; Written by Robert Kehl
;
; For details, see http://nsis.sourceforge.net/wiki/SetSectionInInstType%2C_ClearSectionInInstType
;
; Use the defines below for the WANTED_INSTTYPE paramter.
!define INSTTYPE_1 1
!define INSTTYPE_2 2
!define INSTTYPE_3 4
!define INSTTYPE_4 8
!define INSTTYPE_5 16
!define INSTTYPE_6 32
!define INSTTYPE_7 64
!define INSTTYPE_8 128
!define INSTTYPE_9 256
!define INSTTYPE_10 512
!define INSTTYPE_11 1024
!define INSTTYPE_12 2048
!define INSTTYPE_13 4096
!define INSTTYPE_14 8192
!define INSTTYPE_15 16384
!define INSTTYPE_16 32768
!define INSTTYPE_17 65536
!define INSTTYPE_18 131072
!define INSTTYPE_19 262144
!define INSTTYPE_20 524288
!define INSTTYPE_21 1048576
!define INSTTYPE_22 2097152
!define INSTTYPE_23 4194304
!define INSTTYPE_24 8388608
!define INSTTYPE_25 16777216
!define INSTTYPE_26 33554432
!define INSTTYPE_27 67108864
!define INSTTYPE_28 134217728
!define INSTTYPE_29 268435456
!define INSTTYPE_30 536870912
!define INSTTYPE_31 1073741824
!define INSTTYPE_32 2147483648
!macro SetSectionInInstType SECTION_NAME WANTED_INSTTYPE
Push $0
Push $1
StrCpy $1 "${SECTION_NAME}"
SectionGetInstTypes $1 $0
IntOp $0 $0 | ${WANTED_INSTTYPE}
SectionSetInstTypes $1 $0
Pop $1
Pop $0
!macroend
!macro ClearSectionInInstType SECTION_NAME WANTED_INSTTYPE
Push $0
Push $1
Push $2
StrCpy $2 "${SECTION_NAME}"
SectionGetInstTypes $2 $0
StrCpy $1 ${WANTED_INSTTYPE}
IntOp $1 $1 ~
IntOp $0 $0 & $1
SectionSetInstTypes $2 $0
Pop $2
Pop $1
Pop $0
!macroend
;--------------------------------
; Set / clear / check bits in a section's flags
; Written by derekrprice
; Set one or more bits in a sections's flags
!macro SetSectionFlag SECTION BITS
Push $R0
Push $R1
StrCpy $R1 "${SECTION}"
SectionGetFlags $R1 $R0
IntOp $R0 $R0 | "${BITS}"
SectionSetFlags $R1 $R0
Pop $R1
Pop $R0
!macroend
; Clear one or more bits in section's flags
!macro ClearSectionFlag SECTION BITS
Push $R0
Push $R1
Push $R2
StrCpy $R2 "${SECTION}"
SectionGetFlags $R2 $R0
IntOp $R1 "${BITS}" ~
IntOp $R0 $R0 & $R1
SectionSetFlags $R2 $R0
Pop $R2
Pop $R1
Pop $R0
!macroend
; Check if one or more bits in section's flags are set
; If they are, jump to JUMPIFSET
; If not, jump to JUMPIFNOTSET
!macro SectionFlagIsSet SECTION BITS JUMPIFSET JUMPIFNOTSET
Push $R0
SectionGetFlags "${SECTION}" $R0
IntOp $R0 $R0 & "${BITS}"
IntCmp $R0 "${BITS}" +3
Pop $R0
StrCmp "" "${JUMPIFNOTSET}" +3 "${JUMPIFNOTSET}"
Pop $R0
Goto "${JUMPIFSET}"
!macroend
;--------------------------------
!endif

1784
T7x/Include/StrFunc.nsh Normal file

File diff suppressed because it is too large Load Diff

1214
T7x/Include/TextFunc.nsh Normal file

File diff suppressed because it is too large Load Diff

203
T7x/Include/UpgradeDLL.nsh Normal file
View File

@ -0,0 +1,203 @@
/*
NOTE:
-----
This macro is provided for backwards compatibility with NSIS 2.0 scripts.
It's recommended you update your scripts to use the new Library.nsh macros.
Macro - Upgrade DLL File
Written by Joost Verburg
------------------------
Parameters:
LOCALFILE Location of the new DLL file (on the compiler system)
DESTFILE Location of the DLL file that should be upgraded (on the user's system)
TEMPBASEDIR Directory on the user's system to store a temporary file when the system has
to be rebooted.
For Win9x/ME support, this should be on the same volume as DESTFILE.
The Windows temp directory could be located on any volume, so you cannot use
this directory.
Define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL that does not have to be registered.
Notes:
* If you want to support Windows 9x/ME, you can only use short filenames (8.3).
* This macro uses the GetDLLVersionLocal command to retrieve the version of local libraries.
This command is only supported when compiling on a Windows system.
------------------------
Example:
!insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR"
*/
!ifndef UPGRADEDLL_INCLUDED
!define UPGRADEDLL_INCLUDED
!macro __UpgradeDLL_Helper_AddRegToolEntry mode filename tempdir
Push $R0
Push $R1
Push $R2
Push $R3
;------------------------
;Copy the parameters
Push "${filename}"
Push "${tempdir}"
Pop $R2 ; temporary directory
Pop $R1 ; file name to register
;------------------------
;Advance counter
StrCpy $R0 0
ReadRegDWORD $R0 HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count"
IntOp $R0 $R0 + 1
WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count" "$R0"
;------------------------
;Setup RegTool
ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
StrCpy $R3 $R3 -4 1
IfFileExists $R3 +3
File /oname=$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool.bin"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
"NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe" /S'
;------------------------
;Add RegTool entry
WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.file" "$R1"
WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.mode" "${mode}"
Pop $R3
Pop $R2
Pop $R1
Pop $R0
!macroend
!macro UpgradeDLL LOCALFILE DESTFILE TEMPBASEDIR
Push $R0
Push $R1
Push $R2
Push $R3
Push $R4
Push $R5
!define UPGRADEDLL_UNIQUE "${__FILE__}${__LINE__}"
SetOverwrite try
;------------------------
;Copy the parameters used on run-time to a variable
;This allows the usage of variables as paramter
StrCpy $R4 "${DESTFILE}"
StrCpy $R5 "${TEMPBASEDIR}"
;------------------------
;Get version information
IfFileExists $R4 0 "upgradedll.copy_${UPGRADEDLL_UNIQUE}"
ClearErrors
GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
GetDLLVersion $R4 $R2 $R3
IfErrors "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
IntCmpU $R0 $R2 0 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
IntCmpU $R1 $R3 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.done_${UPGRADEDLL_UNIQUE}" \
"upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
;------------------------
;Upgrade
"upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:"
!ifndef UPGRADEDLL_NOREGISTER
;Unregister the DLL
UnRegDLL $R4
!endif
;------------------------
;Copy
ClearErrors
StrCpy $R0 $R4
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
IfErrors 0 "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}"
;------------------------
;Copy on reboot
GetTempFileName $R0 $R5
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
Rename /REBOOTOK $R0 $R4
;------------------------
;Register on reboot
!insertmacro __UpgradeDLL_Helper_AddRegToolEntry 'D' $R4 $R5
Goto "upgradedll.done_${UPGRADEDLL_UNIQUE}"
;------------------------
;DLL does not exist
"upgradedll.copy_${UPGRADEDLL_UNIQUE}:"
StrCpy $R0 $R4
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
;------------------------
;Register
"upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:"
!ifndef UPGRADEDLL_NOREGISTER
RegDLL $R4
!endif
;------------------------
;Done
"upgradedll.done_${UPGRADEDLL_UNIQUE}:"
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Pop $R0
;------------------------
;End
Goto "upgradedll.end_${UPGRADEDLL_UNIQUE}"
;------------------------
;Extract
"upgradedll.file_${UPGRADEDLL_UNIQUE}:"
File /oname=$R0 "${LOCALFILE}"
Return
"upgradedll.end_${UPGRADEDLL_UNIQUE}:"
SetOverwrite lastused
!undef UPGRADEDLL_UNIQUE
!macroend
!endif

56
T7x/Include/Util.nsh Normal file
View File

@ -0,0 +1,56 @@
; ---------------------
; Util.nsh
; ---------------------
;
; Voodoo macros to make end-user usage easier. This may be documented someday.
!verbose push
!verbose 3
!ifndef ___UTIL__NSH___
!define ___UTIL__NSH___
# see WinVer.nsh and *Func.nsh for usage examples
!macro CallArtificialFunction NAME
!ifndef __UNINSTALL__
!define CallArtificialFunction_TYPE inst
!else
!define CallArtificialFunction_TYPE uninst
!endif
Call :.${NAME}${CallArtificialFunction_TYPE}
!ifndef ${NAME}${CallArtificialFunction_TYPE}_DEFINED
Goto ${NAME}${CallArtificialFunction_TYPE}_DONE
!define ${NAME}${CallArtificialFunction_TYPE}_DEFINED
.${NAME}${CallArtificialFunction_TYPE}:
!insertmacro ${NAME}
Return
${NAME}${CallArtificialFunction_TYPE}_DONE:
!endif
!undef CallArtificialFunction_TYPE
!macroend
!define CallArtificialFunction `!insertmacro CallArtificialFunction`
# for usage of artificial functions inside artificial functions
# macro recursion is prohibited
!macro CallArtificialFunction2 NAME
!ifndef __UNINSTALL__
!define CallArtificialFunction2_TYPE inst
!else
!define CallArtificialFunction2_TYPE uninst
!endif
Call :.${NAME}${CallArtificialFunction2_TYPE}
!ifndef ${NAME}${CallArtificialFunction2_TYPE}_DEFINED
Goto ${NAME}${CallArtificialFunction2_TYPE}_DONE
!define ${NAME}${CallArtificialFunction2_TYPE}_DEFINED
.${NAME}${CallArtificialFunction2_TYPE}:
!insertmacro ${NAME}
Return
${NAME}${CallArtificialFunction2_TYPE}_DONE:
!endif
!undef CallArtificialFunction2_TYPE
!macroend
!define CallArtificialFunction2 `!insertmacro CallArtificialFunction2`
!endif # !___UTIL__NSH___
!verbose pop

View File

@ -0,0 +1,90 @@
/*
VB6RunTime.nsh
Setup of Visual Basic 6.0 run-time files, including the Oleaut32.dll security update
Copyright 2008-2009 Joost Verburg
To obtain the run-time files, download and extract
http://nsis.sourceforge.net/vb6runtime.zip
Script code for installation:
!insertmacro InstallVB6RunTime FOLDER ALREADY_INSTALLED
in which FOLDER is the location of the run-time files and ALREADY_INSTALLED is the
name of a variable that is empty when the application is installed for the first time
and non-empty otherwise
Script code for uninstallation:
!insertmacro UnInstallVB6RunTime
Remarks:
* You may have to install additional files for such Visual Basic application to work,
such as OCX files for user interface controls.
* Installation of the run-time files requires Administrator or Power User privileges.
Use the Multi-User header file to verify whether these privileges are available.
* Add a Modern UI finish page or another check (see IfRebootFlag in the NSIS Users
Manual) to allow the user to restart the computer when necessary.
*/
!ifndef VB6_INCLUDED
!define VB6_INCLUDED
!verbose push
!verbose 3
!include Library.nsh
!include WinVer.nsh
!macro VB6RunTimeInstall FOLDER ALREADY_INSTALLED
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\msvbvm60.dll" "$SYSDIR\msvbvm60.dll" "$SYSDIR"
;The files below will only be installed on Win9x/NT4
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\olepro32.dll" "$SYSDIR\olepro32.dll" "$SYSDIR"
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\comcat.dll" "$SYSDIR\comcat.dll" "$SYSDIR"
!insertmacro InstallLib DLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\asycfilt.dll" "$SYSDIR\asycfilt.dll" "$SYSDIR"
!insertmacro InstallLib TLB "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\stdole2.tlb" "$SYSDIR\stdole2.tlb" "$SYSDIR"
Push $R0
${if} ${IsNT}
${if} ${IsWinNT4}
ReadRegStr $R0 HKLM "System\CurrentControlSet\Control" "ProductOptions"
${if} $R0 == "Terminal Server"
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4TS\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
${else}
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
${endif}
${endif}
${else}
;No Oleaut32.dll with the security update has been released for Windows 9x.
;The NT4 version is used because NT4 and Win9x used to share the same 2.40 version
;and version 2.40.4519.0 is reported to work fine on Win9x.
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
${endif}
Pop $R0
!macroend
!macro VB6RunTimeUnInstall
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll"
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll"
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll"
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat.dll"
!insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll"
!insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb"
!macroend
!verbose pop
!endif

47
T7x/Include/VPatchLib.nsh Normal file
View File

@ -0,0 +1,47 @@
; PatchLib v3.0
; =============
;
; Library with macro for use with VPatch (DLL version) in NSIS 2.0.5+
; Created by Koen van de Sande
!include LogicLib.nsh
!macro VPatchFile PATCHDATA SOURCEFILE TEMPFILE
Push $1
Push $2
Push $3
Push $4
Push ${SOURCEFILE}
Push ${TEMPFILE}
Pop $2 # temp file
Pop $3 # source file
InitPluginsDir
GetTempFileName $1 $PLUGINSDIR
File /oname=$1 ${PATCHDATA}
vpatch::vpatchfile $1 $3 $2
Pop $4
DetailPrint $4
StrCpy $4 $4 2
${Unless} $4 == "OK"
SetErrors
${EndIf}
${If} ${FileExists} $2
Delete $3
Rename /REBOOTOK $2 $3
${EndIf}
Delete $1
Pop $4
Pop $3
Pop $2
Pop $1
!macroend

View File

@ -0,0 +1,74 @@
!ifndef __WIN_WINDEF__INC
!define __WIN_WINDEF__INC
!verbose push
!verbose 3
!ifndef __WIN_NOINC_WINDEF
!ifndef MAX_PATH
!define MAX_PATH 260
!endif
#define NULL 0
!macro _Win_MINMAX _intcmp _j1 _j2 _outvar _a _b
${_intcmp} "${_a}" "${_b}" ${_j1} ${_j1} ${_j2}
StrCpy ${_outvar} "${_a}"
goto +2
StrCpy ${_outvar} "${_b}"
!macroend
!ifndef __WIN_MS_NOMINMAX & min & max & min_u & max_u
!define min "!insertmacro _Win_MINMAX IntCmp +1 +3 "
!define max "!insertmacro _Win_MINMAX IntCmp +3 +1 "
!define min_u "!insertmacro _Win_MINMAX IntCmpU +1 +3 "
!define max_u "!insertmacro _Win_MINMAX IntCmpU +3 +1 "
!endif
!macro _Win_LOBYTE _outvar _in
IntOp ${_outvar} "${_in}" & 0xFF
!macroend
!define LOBYTE "!insertmacro _Win_LOBYTE "
!macro _Win_HIBYTE _outvar _in
IntOp ${_outvar} "${_in}" >> 8
${LOBYTE} ${_outvar} ${_outvar}
!macroend
!define HIBYTE "!insertmacro _Win_HIBYTE "
!macro _Win_LOWORD _outvar _in
IntOp ${_outvar} "${_in}" & 0xFFFF
!macroend
!define LOWORD "!insertmacro _Win_LOWORD "
!macro _Win_HIWORD _outvar _in
IntOp ${outvar} "${_in}" >> 16 ;sign extended :(
${LOWORD} ${_outvar} ${outvar} ;make sure we strip off the upper word
!macroend
!define HIWORD "!insertmacro _Win_HIWORD "
!macro _Win_MAKEWORD _outvar _tmpvar _lo _hi
${LOBYTE} ${_outvar} "${_hi}"
${LOBYTE} ${_tmpvar} "${_lo}"
IntOp ${_outvar} ${_outvar} << 8
IntOp ${_outvar} ${_outvar} | ${_tmpvar}
!macroend
!define MAKEWORD "!insertmacro _Win_MAKEWORD "
!macro _Win_MAKELONG32 _outvar _tmpvar _wlo _whi
${LOWORD} ${_outvar} "${_wlo}"
IntOp ${_tmpvar} "${_whi}" << 16
IntOp ${_outvar} ${_outvar} | ${_tmpvar}
!macroend
!define MAKELONG "!insertmacro _Win_MAKELONG32 "
!if "${__WIN_PTRSIZE}" <= 4
!define MAKEWPARAM "${MAKELONG}"
!define MAKELPARAM "${MAKELONG}"
!define MAKELRESULT "${MAKELONG}"
!else
!error "Missing 64bit imp!"
!endif
!endif /* __WIN_NOINC_WINDEF */
!verbose pop
!endif /* __WIN_WINDEF__INC */

View File

@ -0,0 +1,64 @@
!ifndef __WIN_WINERROR__INC
!define __WIN_WINERROR__INC
!verbose push
!verbose 3
!ifndef __WIN_NOINC_WINERROR
#define NO_ERROR 0
!define ERROR_SUCCESS 0
!define ERROR_INVALID_FUNCTION 1
!define ERROR_FILE_NOT_FOUND 2
!define ERROR_PATH_NOT_FOUND 3
!define ERROR_TOO_MANY_OPEN_FILES 4
!define ERROR_ACCESS_DENIED 5
!define ERROR_INVALID_HANDLE 6
!define ERROR_ARENA_TRASHED 7
!define ERROR_NOT_ENOUGH_MEMORY 8
!define ERROR_INVALID_BLOCK 9
!define ERROR_BAD_ENVIRONMENT 10
!define ERROR_BAD_FORMAT 11
!define ERROR_INVALID_ACCESS 12
!define ERROR_INVALID_DATA 13
!define ERROR_OUTOFMEMORY 14
!define ERROR_INVALID_DRIVE 15
!define ERROR_CURRENT_DIRECTORY 16
!define ERROR_NOT_SAME_DEVICE 17
!define ERROR_NO_MORE_FILES 18
!define ERROR_WRITE_PROTECT 19
!define ERROR_BAD_UNIT 20
!define ERROR_NOT_READY 21
!define ERROR_BAD_COMMAND 22
!define ERROR_CRC 23
!define ERROR_BAD_LENGTH 24
!define ERROR_SEEK 25
!define ERROR_NOT_DOS_DISK 26
!define ERROR_SECTOR_NOT_FOUND 27
!define ERROR_OUT_OF_PAPER 28
!define ERROR_WRITE_FAULT 29
!define ERROR_READ_FAULT 30
!define ERROR_GEN_FAILURE 31
!define ERROR_SHARING_VIOLATION 32
!define ERROR_LOCK_VIOLATION 33
!define ERROR_WRONG_DISK 34
!define ERROR_SHARING_BUFFER_EXCEEDED 36
!define ERROR_HANDLE_EOF 38
!define ERROR_HANDLE_DISK_FULL 39
!define ERROR_NOT_SUPPORTED 50
!define SEVERITY_SUCCESS 0
!define SEVERITY_ERROR 1
!define E_UNEXPECTED 0x8000FFFF
!define E_NOTIMPL 0x80004001
!define E_OUTOFMEMORY 0x8007000E
!define E_INVALIDARG 0x80070057
!define E_NOINTERFACE 0x80004002
!define E_POINTER 0x80004003
!define E_HANDLE 0x80070006
!define E_ABORT 0x80004004
!define E_FAIL 0x80004005
!define E_ACCESSDENIED 0x80070005
!define E_PENDING 0x8000000A
!endif /* __WIN_NOINC_WINERROR */
!verbose pop
!endif /* __WIN_WINERROR__INC */

209
T7x/Include/Win/WinNT.nsh Normal file
View File

@ -0,0 +1,209 @@
!ifndef __WIN_WINNT__INC
!define __WIN_WINNT__INC
!verbose push
!verbose 3
!ifndef __WIN_NOINC_WINNT
#define MINCHAR 0x80
#define MAXCHAR 0x7f
!define MINSHORT 0x8000
!define MAXSHORT 0x7fff
!define MINLONG 0x80000000
!define MAXLONG 0x7fffffff
!define MAXBYTE 0xff
!define MAXWORD 0xffff
!define MAXDWORD 0xffffffff
!ifndef WIN32_NO_STATUS
!define STATUS_WAIT_0 0x00000000
!define STATUS_ABANDONED_WAIT_0 0x00000080
!define STATUS_USER_APC 0x000000C0
!define STATUS_TIMEOUT 0x00000102
!define STATUS_PENDING 0x00000103
!define DBG_EXCEPTION_HANDLED 0x00010001
!define DBG_CONTINUE 0x00010002
!define STATUS_SEGMENT_NOTIFICATION 0x40000005
!define DBG_TERMINATE_THREAD 0x40010003
!define DBG_TERMINATE_PROCESS 0x40010004
!define DBG_CONTROL_C 0x40010005
!define DBG_CONTROL_BREAK 0x40010008
!define DBG_COMMAND_EXCEPTION 0x40010009
!define STATUS_GUARD_PAGE_VIOLATION 0x80000001
!define STATUS_DATATYPE_MISALIGNMENT 0x80000002
!define STATUS_BREAKPOINT 0x80000003
!define STATUS_SINGLE_STEP 0x80000004
!define DBG_EXCEPTION_NOT_HANDLED 0x80010001
!define STATUS_ACCESS_VIOLATION 0xC0000005
!define STATUS_IN_PAGE_ERROR 0xC0000006
!define STATUS_INVALID_HANDLE 0xC0000008
!define STATUS_NO_MEMORY 0xC0000017
!define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
!define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
!define STATUS_INVALID_DISPOSITION 0xC0000026
!define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
!define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
!define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
!define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
!define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
!define STATUS_FLOAT_OVERFLOW 0xC0000091
!define STATUS_FLOAT_STACK_CHECK 0xC0000092
!define STATUS_FLOAT_UNDERFLOW 0xC0000093
!define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
!define STATUS_INTEGER_OVERFLOW 0xC0000095
!define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
!define STATUS_STACK_OVERFLOW 0xC00000FD
!define STATUS_CONTROL_C_EXIT 0xC000013A
!define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
!define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
!define STATUS_REG_NAT_CONSUMPTION 0xC00002C9
!define STATUS_SXS_EARLY_DEACTIVATION 0xC015000F
!define STATUS_SXS_INVALID_DEACTIVATION 0xC0150010
!endif /*WIN32_NO_STATUS*/
#define MAXIMUM_WAIT_OBJECTS 64
!define DELETE 0x00010000
!define READ_CONTROL 0x00020000
!define WRITE_DAC 0x00040000
!define WRITE_OWNER 0x00080000
!define SYNCHRONIZE 0x00100000
!define STANDARD_RIGHTS_REQUIRED 0x000F0000
!define STANDARD_RIGHTS_READ ${READ_CONTROL}
!define STANDARD_RIGHTS_WRITE ${READ_CONTROL}
!define STANDARD_RIGHTS_EXECUTE ${READ_CONTROL}
!define STANDARD_RIGHTS_ALL 0x001F0000
!define SPECIFIC_RIGHTS_ALL 0x0000FFFF
!define ACCESS_SYSTEM_SECURITY 0x01000000
!define MAXIMUM_ALLOWED 0x02000000
!define GENERIC_READ 0x80000000
!define GENERIC_WRITE 0x40000000
!define GENERIC_EXECUTE 0x20000000
!define GENERIC_ALL 0x10000000
!define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
!define SE_PRIVILEGE_ENABLED 0x00000002
!define SE_PRIVILEGE_REMOVED 0x00000004
!define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
!define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
!define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
!define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
!define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
!define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
!define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
!define SE_TCB_NAME "SeTcbPrivilege"
!define SE_SECURITY_NAME "SeSecurityPrivilege"
!define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
!define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
!define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
!define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
!define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
!define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
!define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
!define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
!define SE_BACKUP_NAME "SeBackupPrivilege"
!define SE_RESTORE_NAME "SeRestorePrivilege"
!define SE_SHUTDOWN_NAME "SeShutdownPrivilege"
!define SE_DEBUG_NAME "SeDebugPrivilege"
!define SE_AUDIT_NAME "SeAuditPrivilege"
!define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
!define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
!define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
!define SE_UNDOCK_NAME "SeUndockPrivilege"
!define SE_SYNC_AGENT_NAME "SeSyncAgentPrivilege"
!define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
!define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
!define SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
!define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
!define TOKEN_ASSIGN_PRIMARY 0x0001
!define TOKEN_DUPLICATE 0x0002
!define TOKEN_IMPERSONATE 0x0004
!define TOKEN_QUERY 0x0008
!define TOKEN_QUERY_SOURCE 0x0010
!define TOKEN_ADJUST_PRIVILEGES 0x0020
!define TOKEN_ADJUST_GROUPS 0x0040
!define TOKEN_ADJUST_DEFAULT 0x0080
!define TOKEN_ADJUST_SESSIONID 0x0100
!define TOKEN_ALL_ACCESS_P 0xF00FF
!define /math TOKEN_ALL_ACCESS ${TOKEN_ALL_ACCESS_P} | ${TOKEN_ADJUST_SESSIONID}
!define /math TOKEN_READ ${STANDARD_RIGHTS_READ} | ${TOKEN_QUERY}
!define TOKEN_WRITE 0x200E0 ;(STANDARD_RIGHTS_WRITE|TOKEN_ADJUST_PRIVILEGES|TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_DEFAULT)
!define TOKEN_EXECUTE ${STANDARD_RIGHTS_EXECUTE}
!define PROCESS_TERMINATE 0x0001
!define PROCESS_CREATE_THREAD 0x0002
!define PROCESS_SET_SESSIONID 0x0004
!define PROCESS_VM_OPERATION 0x0008
!define PROCESS_VM_READ 0x0010
!define PROCESS_VM_WRITE 0x0020
!define PROCESS_DUP_HANDLE 0x0040
!define PROCESS_CREATE_PROCESS 0x0080
!define PROCESS_SET_QUOTA 0x0100
!define PROCESS_SET_INFORMATION 0x0200
!define PROCESS_QUERY_INFORMATION 0x0400
!define PROCESS_SUSPEND_RESUME 0x0800
!define PROCESS_ALL_ACCESS 0x1F0FFF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
!define THREAD_TERMINATE 0x0001
!define THREAD_SUSPEND_RESUME 0x0002
!define THREAD_GET_CONTEXT 0x0008
!define THREAD_SET_CONTEXT 0x0010
!define THREAD_SET_INFORMATION 0x0020
!define THREAD_QUERY_INFORMATION 0x0040
!define THREAD_SET_THREAD_TOKEN 0x0080
!define THREAD_IMPERSONATE 0x0100
!define THREAD_DIRECT_IMPERSONATION 0x0200
!define THREAD_ALL_ACCESS 0x1F03FF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
!define JOB_OBJECT_ASSIGN_PROCESS 0x0001
!define JOB_OBJECT_SET_ATTRIBUTES 0x0002
!define JOB_OBJECT_QUERY 0x0004
!define JOB_OBJECT_TERMINATE 0x0008
!define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
!define JOB_OBJECT_ALL_ACCESS 0x1F001F ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F )
!define EVENT_MODIFY_STATE 0x0002
!define EVENT_ALL_ACCESS 0x1F0003 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
!define MUTANT_QUERY_STATE 0x0001
!define MUTANT_ALL_ACCESS 0x1F0001 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
!define FILE_SHARE_READ 0x00000001
!define FILE_SHARE_WRITE 0x00000002
!define FILE_SHARE_DELETE 0x00000004
!define FILE_ATTRIBUTE_READONLY 0x00000001
!define FILE_ATTRIBUTE_HIDDEN 0x00000002
!define FILE_ATTRIBUTE_SYSTEM 0x00000004
!define FILE_ATTRIBUTE_DIRECTORY 0x00000010
!define FILE_ATTRIBUTE_ARCHIVE 0x00000020
!define FILE_ATTRIBUTE_DEVICE 0x00000040
!define FILE_ATTRIBUTE_NORMAL 0x00000080
!define FILE_ATTRIBUTE_TEMPORARY 0x00000100
!define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
!define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
!define FILE_ATTRIBUTE_COMPRESSED 0x00000800
!define FILE_ATTRIBUTE_OFFLINE 0x00001000
!define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
!define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
!define DUPLICATE_CLOSE_SOURCE 0x00000001
!define DUPLICATE_SAME_ACCESS 0x00000002
!define VER_PLATFORM_WIN32s 0
!define VER_PLATFORM_WIN32_WINDOWS 1
!define VER_PLATFORM_WIN32_NT 2
!ifndef REG_SZ & NSIS_WINDOWS__NO_REGTYPES
!define REG_NONE 0
!define REG_SZ 1
!define REG_EXPAND_SZ 2
!define REG_BINARY 3
!define REG_DWORD 4
!define REG_DWORD_LITTLE_ENDIAN 4
!define REG_DWORD_BIG_ENDIAN 5
!define REG_LINK 6
!define REG_MULTI_SZ 7
!endif
!endif /* __WIN_NOINC_WINNT */
!verbose pop
!endif /* __WIN_WINNT__INC */

199
T7x/Include/Win/WinUser.nsh Normal file
View File

@ -0,0 +1,199 @@
!ifndef __WIN_WINUSER__INC
!define __WIN_WINUSER__INC
!verbose push
!verbose 3
!ifndef __WIN_MS_NOUSER & __WIN_NOINC_WINUSER
!ifndef __WIN_MS_NOVIRTUALKEYCODES
!define VK_LBUTTON 0x01
!define VK_RBUTTON 0x02
!define VK_CANCEL 0x03
!define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */
!define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */
!define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */
!define VK_BACK 0x08
!define VK_TAB 0x09
!define VK_CLEAR 0x0C
!define VK_RETURN 0x0D
!define VK_SHIFT 0x10
!define VK_CONTROL 0x11
!define VK_MENU 0x12
!define VK_PAUSE 0x13
!define VK_CAPITAL 0x14
!define VK_ESCAPE 0x1B
!define VK_CONVERT 0x1C
!define VK_NONCONVERT 0x1D
!define VK_ACCEPT 0x1E
!define VK_MODECHANGE 0x1F
!define VK_SPACE 0x20
!define VK_PRIOR 0x21
!define VK_NEXT 0x22
!define VK_END 0x23
!define VK_HOME 0x24
!define VK_LEFT 0x25
!define VK_UP 0x26
!define VK_RIGHT 0x27
!define VK_DOWN 0x28
!define VK_SELECT 0x29
!define VK_PRINT 0x2A
!define VK_EXECUTE 0x2B
!define VK_SNAPSHOT 0x2C
!define VK_INSERT 0x2D
!define VK_DELETE 0x2E
!define VK_HELP 0x2F
; VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
; VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
!define VK_LWIN 0x5B
!define VK_RWIN 0x5C
!define VK_APPS 0x5D
!define VK_SLEEP 0x5F
!define VK_NUMPAD0 0x60
!define VK_NUMPAD1 0x61
!define VK_NUMPAD2 0x62
!define VK_NUMPAD3 0x63
!define VK_NUMPAD4 0x64
!define VK_NUMPAD5 0x65
!define VK_NUMPAD6 0x66
!define VK_NUMPAD7 0x67
!define VK_NUMPAD8 0x68
!define VK_NUMPAD9 0x69
!define VK_MULTIPLY 0x6A
!define VK_ADD 0x6B
!define VK_SEPARATOR 0x6C
!define VK_SUBTRACT 0x6D
!define VK_DECIMAL 0x6E
!define VK_DIVIDE 0x6F
!define VK_F1 0x70
!define VK_F2 0x71
!define VK_F3 0x72
!define VK_F4 0x73
!define VK_F5 0x74
!define VK_F6 0x75
!define VK_F7 0x76
!define VK_F8 0x77
!define VK_F9 0x78
!define VK_F10 0x79
!define VK_F11 0x7A
!define VK_F12 0x7B
!define VK_NUMLOCK 0x90
!define VK_SCROLL 0x91
!define VK_OEM_NEC_EQUAL 0x92 ; '=' key on numpad
!define VK_LSHIFT 0xA0
!define VK_RSHIFT 0xA1
!define VK_LCONTROL 0xA2
!define VK_RCONTROL 0xA3
!define VK_LMENU 0xA4
!define VK_RMENU 0xA5
!endif
!ifndef __WIN_MS_NOWINOFFSETS
/* in nsDialogs.nsh...
!define GWL_STYLE -16
!define GWL_EXSTYLE -20 */
!define GWLP_WNDPROC -4
!define GWLP_HINSTANCE -6
!define GWLP_HWNDPARENT -8
!define GWLP_USERDATA -21
!define GWLP_ID -12
!define DWLP_MSGRESULT 0
!define /math DWLP_DLGPROC ${DWLP_MSGRESULT} + ${__WIN_PTRSIZE} ;DWLP_MSGRESULT + sizeof(LRESULT)
!define /math DWLP_USER ${DWLP_DLGPROC} + ${__WIN_PTRSIZE} ;DWLP_DLGPROC + sizeof(DLGPROC)
!endif
!ifndef __WIN_MS_NONCMESSAGES
!define HTERROR -2
!define HTTRANSPARENT -1
!define HTNOWHERE 0
!define HTCLIENT 1
!define HTCAPTION 2
!define HTSYSMENU 3
!define HTGROWBOX 4
!define HTSIZE ${HTGROWBOX}
!define HTMENU 5
!define HTHSCROLL 6
!define HTVSCROLL 7
!define HTMINBUTTON 8
!define HTMAXBUTTON 9
!define HTLEFT 10
!define HTRIGHT 11
!define HTTOP 12
!define HTTOPLEFT 13
!define HTTOPRIGHT 14
!define HTBOTTOM 15
!define HTBOTTOMLEFT 16
!define HTBOTTOMRIGHT 17
!define HTBORDER 18
!define HTREDUCE ${HTMINBUTTON}
!define HTZOOM ${HTMAXBUTTON}
!define HTSIZEFIRST ${HTLEFT}
!define HTSIZELAST ${HTBOTTOMRIGHT}
!define HTOBJECT 19
!define HTCLOSE 20
!define HTHELP 21
!endif
!ifndef __WIN_MS_NOSYSCOMMANDS
!define SC_SIZE 0xF000
!define SC_MOVE 0xF010
!define SC_MINIMIZE 0xF020
!define SC_MAXIMIZE 0xF030
!define SC_NEXTWINDOW 0xF040
!define SC_PREVWINDOW 0xF050
!define SC_CLOSE 0xF060
!define SC_VSCROLL 0xF070
!define SC_HSCROLL 0xF080
!define SC_MOUSEMENU 0xF090
!define SC_KEYMENU 0xF100
!define SC_ARRANGE 0xF110
!define SC_RESTORE 0xF120
!define SC_TASKLIST 0xF130
!define SC_SCREENSAVE 0xF140
!define SC_HOTKEY 0xF150
!define SC_DEFAULT 0xF160
!define SC_MONITORPOWER 0xF170
!define SC_CONTEXTHELP 0xF180
!define SC_SEPARATOR 0xF00F
!endif
!define IDC_ARROW 32512
!define IDC_IBEAM 32513
!define IDC_WAIT 32514
!define IDC_CROSS 32515
!define IDC_UPARROW 32516
!define IDC_SIZENWSE 32642
!define IDC_SIZENESW 32643
!define IDC_SIZEWE 32644
!define IDC_SIZENS 32645
!define IDC_SIZEALL 32646
!define IDC_NO 32648
!define IDC_HAND 32649
!define IDC_APPSTARTING 32650
!define IDC_HELP 32651
/* in nsDialogs.nsh...
!define IMAGE_BITMAP 0
!define IMAGE_ICON 1
!define IMAGE_CURSOR 2*/
/* in nsDialogs.nsh...
!define LR_DEFAULTCOLOR 0x0000
!define LR_MONOCHROME 0x0001
!define LR_COLOR 0x0002
!define LR_COPYRETURNORG 0x0004
!define LR_COPYDELETEORG 0x0008
!define LR_LOADFROMFILE 0x0010
!define LR_LOADTRANSPARENT 0x0020
!define LR_DEFAULTSIZE 0x0040
!define LR_VGACOLOR 0x0080
!define LR_LOADMAP3DCOLORS 0x1000
!define LR_CREATEDIBSECTION 0x2000
!define LR_COPYFROMRESOURCE 0x4000
!define LR_SHARED 0x8000*/
!define GA_PARENT 1
!define GA_ROOT 2
!define GA_ROOTOWNER 3
!endif /* __WIN_MS_NOUSER & __WIN_NOINC_WINUSER */
!verbose pop
!endif /* __WIN_WINUSER__INC */

214
T7x/Include/WinCore.nsh Normal file
View File

@ -0,0 +1,214 @@
/*
WinCore.nsh & Win\*.nsh - Collection of common windows defines
!define __WIN_NOINC_xxx to exclude a windows header file
!define __WIN_MS_xxx to exclude specific things (The original #ifdef xxx checks can be found in the official Microsoft headers)
*/
!ifndef __WIN_WINDOWS__INC
!define __WIN_WINDOWS__INC
!verbose push
!verbose 3
!define __WIN_PTRSIZE 4 ;will we ever see a 64 bit version?
!include Win\WinDef.nsh
!include Win\WinError.nsh
!include Win\WinNT.nsh
!include Win\WinUser.nsh
!ifndef __WIN_MS_NOWINMESSAGES
!include WinMessages.nsh
!endif
/**************************************************
WinBase.h
**************************************************/
!ifndef __WIN_NOINC_WINBASE
!define INVALID_HANDLE_VALUE -1
!define INVALID_FILE_SIZE 0xFFFFFFFF
!define INVALID_SET_FILE_POINTER -1
!define INVALID_FILE_ATTRIBUTES -1
!define WAIT_FAILED 0xFFFFFFFF
!define WAIT_OBJECT_0 0 ;((STATUS_WAIT_0 ) + 0 )
!define WAIT_ABANDONED 0x80 ;((STATUS_ABANDONED_WAIT_0 ) + 0 )
!define WAIT_ABANDONED_0 0x80 ;((STATUS_ABANDONED_WAIT_0 ) + 0 )
!define DRIVE_UNKNOWN 0
!define DRIVE_NO_ROOT_DIR 1
!define DRIVE_REMOVABLE 2
!define DRIVE_FIXED 3
!define DRIVE_REMOTE 4
!define DRIVE_CDROM 5
!define DRIVE_RAMDISK 6
!define FILE_TYPE_UNKNOWN 0x0000
!define FILE_TYPE_DISK 0x0001
!define FILE_TYPE_CHAR 0x0002
!define FILE_TYPE_PIPE 0x0003
!define FILE_TYPE_REMOTE 0x8000
!define STD_INPUT_HANDLE -10
!define STD_OUTPUT_HANDLE -11
!define STD_ERROR_HANDLE -12
#define IGNORE 0 ; Ignore signal
!define INFINITE 0xFFFFFFFF ; Infinite timeout
!endif /* __WIN_NOINC_WINBASE */
/**************************************************
WinGDI.h
**************************************************/
!ifndef __WIN_MS_NOGDI & __WIN_NOINC_WINGDI
!define HORZRES 8
!define VERTRES 10
!define BITSPIXEL 12
!define LOGPIXELSX 88
!define LOGPIXELSY 90
!define COLORRES 108
!define VREFRESH 116
!define DESKTOPVERTRES 117
!define DESKTOPHORZRES 118
!endif /* __WIN_MS_NOGDI & __WIN_NOINC_WINGDI */
/**************************************************
WinReg.h
**************************************************/
!ifndef __WIN_NOINC_WINREG
!ifndef __WIN_NOHKEY & HKEY_CLASSES_ROOT & HKEY_CURRENT_USER & HKEY_LOCAL_MACHINE & HKEY_USERS
!define HKEY_CLASSES_ROOT 0x80000000
!define HKEY_CURRENT_USER 0x80000001
!define HKEY_LOCAL_MACHINE 0x80000002
!define HKEY_USERS 0x80000003
!define HKEY_PERFORMANCE_DATA 0x80000004
!define HKEY_PERFORMANCE_TEXT 0x80000050
!define HKEY_PERFORMANCE_NLSTEXT 0x80000060
!define HKEY_CURRENT_CONFIG 0x80000005
!define HKEY_DYN_DATA 0x80000006
!ifndef __WIN_NOSHORTHKEY & HKCR & HKCU & HKLM
!define HKCR ${HKEY_CLASSES_ROOT}
!define HKCU ${HKEY_CURRENT_USER}
!define HKLM ${HKEY_LOCAL_MACHINE}
!endif
!endif
!endif /* __WIN_NOINC_WINREG */
/**************************************************
WindowsX.h
**************************************************/
!ifndef __WIN_NOINC_WINDOWSX
!ifndef GET_X_LPARAM & GET_Y_LPARAM
!macro _Win_GET_X_LPARAM _outvar _in
IntOp ${_outvar} "${_in}" << 16 ;We can't just use LOWORD, we need to keep the sign,
IntOp ${_outvar} ${_outvar} >> 16 ;so we let NSIS sign extend for us
!macroend
!define GET_X_LPARAM "!insertmacro _Win_GET_X_LPARAM "
!macro _Win_GET_Y_LPARAM _outvar _in
IntOp ${_outvar} "${_in}" >> 16
!macroend
!define GET_Y_LPARAM "!insertmacro _Win_GET_Y_LPARAM "
!endif
!endif /* __WIN_NOINC_WINDOWSX */
/**************************************************
ShlObj.h
**************************************************/
!ifndef __WIN_NOINC_SHLOBJ
!ifndef __WIN_NOSHELLFOLDERCSIDL
!define CSIDL_DESKTOP 0x0000
!define CSIDL_INTERNET 0x0001 ;Internet Explorer (icon on desktop)
!define CSIDL_PROGRAMS 0x0002 ;Start Menu\Programs
!define CSIDL_CONTROLS 0x0003 ;My Computer\Control Panel
!define CSIDL_PRINTERS 0x0004 ;My Computer\Printers
!define CSIDL_PERSONAL 0x0005 ;My Documents
!define CSIDL_FAVORITES 0x0006 ;<user name>\Favorites
!define CSIDL_STARTUP 0x0007 ;Start Menu\Programs\Startup
!define CSIDL_RECENT 0x0008 ;<user name>\Recent
!define CSIDL_SENDTO 0x0009 ;<user name>\SendTo
!define CSIDL_BITBUCKET 0x000a ;<desktop>\Recycle Bin
!define CSIDL_STARTMENU 0x000b ;<user name>\Start Menu
!define CSIDL_MYDOCUMENTS 0x000c ;logical "My Documents" desktop icon
!define CSIDL_MYMUSIC 0x000d ;"My Music" folder
!define CSIDL_MYVIDEO 0x000e ;"My Videos" folder
!define CSIDL_DESKTOPDIRECTORY 0x0010 ;<user name>\Desktop
!define CSIDL_DRIVES 0x0011 ;My Computer
!define CSIDL_NETWORK 0x0012 ;Network Neighborhood
!define CSIDL_NETHOOD 0x0013 ;<user name>\nethood
!define CSIDL_FONTS 0x0014 ;windows\fonts
!define CSIDL_TEMPLATES 0x0015
!define CSIDL_COMMON_STARTMENU 0x0016 ;All Users\Start Menu
!define CSIDL_COMMON_PROGRAMS 0x0017 ;All Users\Start Menu\Programs
!define CSIDL_COMMON_STARTUP 0x0018 ;All Users\Startup
!define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 ;All Users\Desktop
!define CSIDL_APPDATA 0x001a ;<user name>\Application Data
!define CSIDL_PRINTHOOD 0x001b ;<user name>\PrintHood
!define CSIDL_LOCAL_APPDATA 0x001c ;<user name>\Local Settings\Applicaiton Data (non roaming)
!define CSIDL_ALTSTARTUP 0x001d ;non localized startup
!define CSIDL_COMMON_ALTSTARTUP 0x001e ;non localized common startup
!define CSIDL_COMMON_FAVORITES 0x001f
!define CSIDL_INTERNET_CACHE 0x0020
!define CSIDL_COOKIES 0x0021
!define CSIDL_HISTORY 0x0022
!define CSIDL_COMMON_APPDATA 0x0023 ;All Users\Application Data
!define CSIDL_WINDOWS 0x0024 ;GetWindowsDirectory
!define CSIDL_SYSTEM 0x0025 ;GetSystemDirectory
!define CSIDL_PROGRAM_FILES 0x0026 ;C:\Program Files
!define CSIDL_MYPICTURES 0x0027
!define CSIDL_PROFILE 0x0028 ;USERPROFILE
!define CSIDL_SYSTEMX86 0x0029 ;x86 system directory on RISC
!define CSIDL_PROGRAM_FILESX86 0x002a ;x86 C:\Program Files on RISC
!define CSIDL_PROGRAM_FILES_COMMON 0x002b ;C:\Program Files\Common
!define CSIDL_PROGRAM_FILES_COMMONX86 0x002c ;x86 Program Files\Common on RISC
!define CSIDL_COMMON_TEMPLATES 0x002d ;All Users\Templates
!define CSIDL_COMMON_DOCUMENTS 0x002e ;All Users\Documents
!define CSIDL_COMMON_ADMINTOOLS 0x002f ;All Users\Start Menu\Programs\Administrative Tools
!define CSIDL_ADMINTOOLS 0x0030 ;<user name>\Start Menu\Programs\Administrative Tools
!define CSIDL_CONNECTIONS 0x0031 ;Network and Dial-up Connections
!define CSIDL_COMMON_MUSIC 0x0035 ;All Users\My Music
!define CSIDL_COMMON_PICTURES 0x0036 ;All Users\My Pictures
!define CSIDL_COMMON_VIDEO 0x0037 ;All Users\My Video
!define CSIDL_RESOURCES 0x0038 ;Resource Direcotry
!define CSIDL_RESOURCES_LOCALIZED 0x0039 ;Localized Resource Direcotry
!define CSIDL_COMMON_OEM_LINKS 0x003a ;Links to All Users OEM specific apps
!define CSIDL_CDBURN_AREA 0x003b ;USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
!define CSIDL_COMPUTERSNEARME 0x003d ;Computers Near Me (computered from Workgroup membership)
!define CSIDL_FLAG_CREATE 0x8000 ;combine with CSIDL_ value to force folder creation in SHGetFolderPath()
!define CSIDL_FLAG_DONT_VERIFY 0x4000 ;combine with CSIDL_ value to return an unverified folder path
!define CSIDL_FLAG_NO_ALIAS 0x1000 ;combine with CSIDL_ value to insure non-alias versions of the pidl
!define CSIDL_FLAG_PER_USER_INIT 0x0800 ;combine with CSIDL_ value to indicate per-user init (eg. upgrade)
!define CSIDL_FLAG_MASK 0xFF00
!endif /* __WIN_NOSHELLFOLDERCSIDL */
!endif /* __WIN_NOINC_SHLOBJ */
!verbose pop
!endif /* __WIN_WINDOWS__INC */

592
T7x/Include/WinMessages.nsh Normal file
View File

@ -0,0 +1,592 @@
/*
_____________________________________________________________________________
List of common Windows Messages
_____________________________________________________________________________
2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
Usage example:
---------------------------------------------------
Name "Output"
OutFile "Output.exe"
!include "WinMessages.nsh"
Section
FindWindow $0 '#32770' '' $HWNDPARENT
GetDlgItem $1 $0 1027
SendMessage $1 ${WM_SETTEXT} 0 'STR:MyText'
SectionEnd
---------------------------------------------------
Prefix Message category
-------------------------
SW ShowWindow Commands
BM Button control
CB Combo box control
EM Edit control
LB List box control
WM General window
ABM Application desktop toolbar
DBT Device
DM Default push button control
HDM Header control
LVM List view control
SB Status bar window
SBM Scroll bar control
STM Static control
TCM Tab control
PBM Progress bar
-----------------------------------
NOT included messages (WM_USER + X)
-----------------------------------
CBEM Extended combo box control
CDM Common dialog box
DL Drag list box
DTM Date and time picker control
HKM Hot key control
IPM IP address control
MCM Month calendar control
PGM Pager control
PSM Property sheet
RB Rebar control
TB Toolbar
TBM Trackbar
TTM Tooltip control
TVM Tree-view control
UDM Up-down control
-----------------------------------
*/
!ifndef WINMESSAGES_INCLUDED
!define WINMESSAGES_INCLUDED
!verbose push
!verbose 3
!define HWND_BROADCAST 0xFFFF
#ShowWindow Commands#
!define SW_HIDE 0
!define SW_SHOWNORMAL 1
!define SW_NORMAL 1
!define SW_SHOWMINIMIZED 2
!define SW_SHOWMAXIMIZED 3
!define SW_MAXIMIZE 3
!define SW_SHOWNOACTIVATE 4
!define SW_SHOW 5
!define SW_MINIMIZE 6
!define SW_SHOWMINNOACTIVE 7
!define SW_SHOWNA 8
!define SW_RESTORE 9
!define SW_SHOWDEFAULT 10
!define SW_FORCEMINIMIZE 11
!define SW_MAX 11
#Button Control Messages#
!define BM_CLICK 0x00F5
!define BM_GETCHECK 0x00F0
!define BM_GETIMAGE 0x00F6
!define BM_GETSTATE 0x00F2
!define BM_SETCHECK 0x00F1
!define BM_SETIMAGE 0x00F7
!define BM_SETSTATE 0x00F3
!define BM_SETSTYLE 0x00F4
!define BST_UNCHECKED 0
!define BST_CHECKED 1
!define BST_INDETERMINATE 2
!define BST_PUSHED 4
!define BST_FOCUS 8
#Combo Box Messages#
!define CB_ADDSTRING 0x0143
!define CB_DELETESTRING 0x0144
!define CB_DIR 0x0145
!define CB_FINDSTRING 0x014C
!define CB_FINDSTRINGEXACT 0x0158
!define CB_GETCOUNT 0x0146
!define CB_GETCURSEL 0x0147
!define CB_GETDROPPEDCONTROLRECT 0x0152
!define CB_GETDROPPEDSTATE 0x0157
!define CB_GETDROPPEDWIDTH 0x015f
!define CB_GETEDITSEL 0x0140
!define CB_GETEXTENDEDUI 0x0156
!define CB_GETHORIZONTALEXTENT 0x015d
!define CB_GETITEMDATA 0x0150
!define CB_GETITEMHEIGHT 0x0154
!define CB_GETLBTEXT 0x0148
!define CB_GETLBTEXTLEN 0x0149
!define CB_GETLOCALE 0x015A
!define CB_GETTOPINDEX 0x015b
!define CB_INITSTORAGE 0x0161
!define CB_INSERTSTRING 0x014A
!define CB_LIMITTEXT 0x0141
!define CB_MSGMAX 0x015B # 0x0162 0x0163
!define CB_MULTIPLEADDSTRING 0x0163
!define CB_RESETCONTENT 0x014B
!define CB_SELECTSTRING 0x014D
!define CB_SETCURSEL 0x014E
!define CB_SETDROPPEDWIDTH 0x0160
!define CB_SETEDITSEL 0x0142
!define CB_SETEXTENDEDUI 0x0155
!define CB_SETHORIZONTALEXTENT 0x015e
!define CB_SETITEMDATA 0x0151
!define CB_SETITEMHEIGHT 0x0153
!define CB_SETLOCALE 0x0159
!define CB_SETTOPINDEX 0x015c
!define CB_SHOWDROPDOWN 0x014F
!define CB_ERR -1
#Edit Control Messages#
!define EM_CANUNDO 0x00C6
!define EM_CHARFROMPOS 0x00D7
!define EM_EMPTYUNDOBUFFER 0x00CD
!define EM_EXLIMITTEXT 0x0435
!define EM_FMTLINES 0x00C8
!define EM_GETFIRSTVISIBLELINE 0x00CE
!define EM_GETHANDLE 0x00BD
!define EM_GETIMESTATUS 0x00D9
!define EM_GETLIMITTEXT 0x00D5
!define EM_GETLINE 0x00C4
!define EM_GETLINECOUNT 0x00BA
!define EM_GETMARGINS 0x00D4
!define EM_GETMODIFY 0x00B8
!define EM_GETPASSWORDCHAR 0x00D2
!define EM_GETRECT 0x00B2
!define EM_GETSEL 0x00B0
!define EM_GETTHUMB 0x00BE
!define EM_GETWORDBREAKPROC 0x00D1
!define EM_LIMITTEXT 0x00C5
!define EM_LINEFROMCHAR 0x00C9
!define EM_LINEINDEX 0x00BB
!define EM_LINELENGTH 0x00C1
!define EM_LINESCROLL 0x00B6
!define EM_POSFROMCHAR 0x00D6
!define EM_REPLACESEL 0x00C2
!define EM_SCROLL 0x00B5
!define EM_SCROLLCARET 0x00B7
!define EM_SETHANDLE 0x00BC
!define EM_SETIMESTATUS 0x00D8
!define EM_SETLIMITTEXT 0x00C5 # Same as EM_LIMITTEXT
!define EM_SETMARGINS 0x00D3
!define EM_SETMODIFY 0x00B9
!define EM_SETPASSWORDCHAR 0x00CC
!define EM_SETREADONLY 0x00CF
!define EM_SETRECT 0x00B3
!define EM_SETRECTNP 0x00B4
!define EM_SETSEL 0x00B1
!define EM_SETTABSTOPS 0x00CB
!define EM_SETWORDBREAKPROC 0x00D0
!define EM_UNDO 0x00C7
#Listbox Messages#
!define LB_ADDFILE 0x0196
!define LB_ADDSTRING 0x0180
!define LB_DELETESTRING 0x0182
!define LB_DIR 0x018D
!define LB_FINDSTRING 0x018F
!define LB_FINDSTRINGEXACT 0x01A2
!define LB_GETANCHORINDEX 0x019D
!define LB_GETCARETINDEX 0x019F
!define LB_GETCOUNT 0x018B
!define LB_GETCURSEL 0x0188
!define LB_GETHORIZONTALEXTENT 0x0193
!define LB_GETITEMDATA 0x0199
!define LB_GETITEMHEIGHT 0x01A1
!define LB_GETITEMRECT 0x0198
!define LB_GETLOCALE 0x01A6
!define LB_GETSEL 0x0187
!define LB_GETSELCOUNT 0x0190
!define LB_GETSELITEMS 0x0191
!define LB_GETTEXT 0x0189
!define LB_GETTEXTLEN 0x018A
!define LB_GETTOPINDEX 0x018E
!define LB_INITSTORAGE 0x01A8
!define LB_INSERTSTRING 0x0181
!define LB_ITEMFROMPOINT 0x01A9
!define LB_MSGMAX 0x01A8 # 0x01B0 0x01B1
!define LB_MULTIPLEADDSTRING 0x01B1
!define LB_RESETCONTENT 0x0184
!define LB_SELECTSTRING 0x018C
!define LB_SELITEMRANGE 0x019B
!define LB_SELITEMRANGEEX 0x0183
!define LB_SETANCHORINDEX 0x019C
!define LB_SETCARETINDEX 0x019E
!define LB_SETCOLUMNWIDTH 0x0195
!define LB_SETCOUNT 0x01A7
!define LB_SETCURSEL 0x0186
!define LB_SETHORIZONTALEXTENT 0x0194
!define LB_SETITEMDATA 0x019A
!define LB_SETITEMHEIGHT 0x01A0
!define LB_SETLOCALE 0x01A5
!define LB_SETSEL 0x0185
!define LB_SETTABSTOPS 0x0192
!define LB_SETTOPINDEX 0x0197
!define LB_ERR -1
#Window Messages#
!define WM_ACTIVATE 0x0006
!define WM_ACTIVATEAPP 0x001C
!define WM_AFXFIRST 0x0360
!define WM_AFXLAST 0x037F
!define WM_APP 0x8000
!define WM_APPCOMMAND 0x0319
!define WM_ASKCBFORMATNAME 0x030C
!define WM_CANCELJOURNAL 0x004B
!define WM_CANCELMODE 0x001F
!define WM_CAPTURECHANGED 0x0215
!define WM_CHANGECBCHAIN 0x030D
!define WM_CHANGEUISTATE 0x0127
!define WM_CHAR 0x0102
!define WM_CHARTOITEM 0x002F
!define WM_CHILDACTIVATE 0x0022
!define WM_CLEAR 0x0303
!define WM_CLOSE 0x0010
!define WM_COMMAND 0x0111
!define WM_COMMNOTIFY 0x0044 # no longer suported
!define WM_COMPACTING 0x0041
!define WM_COMPAREITEM 0x0039
!define WM_CONTEXTMENU 0x007B
!define WM_CONVERTREQUESTEX 0x108
!define WM_COPY 0x0301
!define WM_COPYDATA 0x004A
!define WM_CREATE 0x0001
!define WM_CTLCOLOR 0x0019
!define WM_CTLCOLORBTN 0x0135
!define WM_CTLCOLORDLG 0x0136
!define WM_CTLCOLOREDIT 0x0133
!define WM_CTLCOLORLISTBOX 0x0134
!define WM_CTLCOLORMSGBOX 0x0132
!define WM_CTLCOLORSCROLLBAR 0x0137
!define WM_CTLCOLORSTATIC 0x0138
!define WM_CUT 0x0300
!define WM_DDE_FIRST 0x3E0
!define WM_DEADCHAR 0x0103
!define WM_DELETEITEM 0x002D
!define WM_DESTROY 0x0002
!define WM_DESTROYCLIPBOARD 0x0307
!define WM_DEVICECHANGE 0x0219
!define WM_DEVMODECHANGE 0x001B
!define WM_DISPLAYCHANGE 0x007E
!define WM_DRAWCLIPBOARD 0x0308
!define WM_DRAWITEM 0x002B
!define WM_DROPFILES 0x0233
!define WM_ENABLE 0x000A
!define WM_ENDSESSION 0x0016
!define WM_ENTERIDLE 0x0121
!define WM_ENTERMENULOOP 0x0211
!define WM_ENTERSIZEMOVE 0x0231
!define WM_ERASEBKGND 0x0014
!define WM_EXITMENULOOP 0x0212
!define WM_EXITSIZEMOVE 0x0232
!define WM_FONTCHANGE 0x001D
!define WM_GETDLGCODE 0x0087
!define WM_GETFONT 0x0031
!define WM_GETHOTKEY 0x0033
!define WM_GETICON 0x007F
!define WM_GETMINMAXINFO 0x0024
!define WM_GETOBJECT 0x003D
!define WM_GETTEXT 0x000D
!define WM_GETTEXTLENGTH 0x000E
!define WM_HANDHELDFIRST 0x0358
!define WM_HANDHELDLAST 0x035F
!define WM_HELP 0x0053
!define WM_HOTKEY 0x0312
!define WM_HSCROLL 0x0114
!define WM_HSCROLLCLIPBOARD 0x030E
!define WM_ICONERASEBKGND 0x0027
!define WM_IME_CHAR 0x0286
!define WM_IME_COMPOSITION 0x010F
!define WM_IME_COMPOSITIONFULL 0x0284
!define WM_IME_CONTROL 0x0283
!define WM_IME_ENDCOMPOSITION 0x010E
!define WM_IME_KEYDOWN 0x0290
!define WM_IME_KEYLAST 0x010F
!define WM_IME_KEYUP 0x0291
!define WM_IME_NOTIFY 0x0282
!define WM_IME_REQUEST 0x0288
!define WM_IME_SELECT 0x0285
!define WM_IME_SETCONTEXT 0x0281
!define WM_IME_STARTCOMPOSITION 0x010D
!define WM_INITDIALOG 0x0110
!define WM_INITMENU 0x0116
!define WM_INITMENUPOPUP 0x0117
!define WM_INPUT 0x00FF
!define WM_INPUTLANGCHANGE 0x0051
!define WM_INPUTLANGCHANGEREQUEST 0x0050
!define WM_KEYDOWN 0x0100
!define WM_KEYFIRST 0x0100
!define WM_KEYLAST 0x0108
!define WM_KEYUP 0x0101
!define WM_KILLFOCUS 0x0008
!define WM_LBUTTONDBLCLK 0x0203
!define WM_LBUTTONDOWN 0x0201
!define WM_LBUTTONUP 0x0202
!define WM_MBUTTONDBLCLK 0x0209
!define WM_MBUTTONDOWN 0x0207
!define WM_MBUTTONUP 0x0208
!define WM_MDIACTIVATE 0x0222
!define WM_MDICASCADE 0x0227
!define WM_MDICREATE 0x0220
!define WM_MDIDESTROY 0x0221
!define WM_MDIGETACTIVE 0x0229
!define WM_MDIICONARRANGE 0x0228
!define WM_MDIMAXIMIZE 0x0225
!define WM_MDINEXT 0x0224
!define WM_MDIREFRESHMENU 0x0234
!define WM_MDIRESTORE 0x0223
!define WM_MDISETMENU 0x0230
!define WM_MDITILE 0x0226
!define WM_MEASUREITEM 0x002C
!define WM_MENUCHAR 0x0120
!define WM_MENUCOMMAND 0x0126
!define WM_MENUDRAG 0x0123
!define WM_MENUGETOBJECT 0x0124
!define WM_MENURBUTTONUP 0x0122
!define WM_MENUSELECT 0x011F
!define WM_MOUSEACTIVATE 0x0021
!define WM_MOUSEFIRST 0x0200
!define WM_MOUSEHOVER 0x02A1
!define WM_MOUSELAST 0x0209 # 0x020A 0x020D
!define WM_MOUSELEAVE 0x02A3
!define WM_MOUSEMOVE 0x0200
!define WM_MOUSEWHEEL 0x020A
!define WM_MOVE 0x0003
!define WM_MOVING 0x0216
!define WM_NCACTIVATE 0x0086
!define WM_NCCALCSIZE 0x0083
!define WM_NCCREATE 0x0081
!define WM_NCDESTROY 0x0082
!define WM_NCHITTEST 0x0084
!define WM_NCLBUTTONDBLCLK 0x00A3
!define WM_NCLBUTTONDOWN 0x00A1
!define WM_NCLBUTTONUP 0x00A2
!define WM_NCMBUTTONDBLCLK 0x00A9
!define WM_NCMBUTTONDOWN 0x00A7
!define WM_NCMBUTTONUP 0x00A8
!define WM_NCMOUSEHOVER 0x02A0
!define WM_NCMOUSELEAVE 0x02A2
!define WM_NCMOUSEMOVE 0x00A0
!define WM_NCPAINT 0x0085
!define WM_NCRBUTTONDBLCLK 0x00A6
!define WM_NCRBUTTONDOWN 0x00A4
!define WM_NCRBUTTONUP 0x00A5
!define WM_NCXBUTTONDBLCLK 0x00AD
!define WM_NCXBUTTONDOWN 0x00AB
!define WM_NCXBUTTONUP 0x00AC
!define WM_NEXTDLGCTL 0x0028
!define WM_NEXTMENU 0x0213
!define WM_NOTIFY 0x004E
!define WM_NOTIFYFORMAT 0x0055
!define WM_NULL 0x0000
!define WM_PAINT 0x000F
!define WM_PAINTCLIPBOARD 0x0309
!define WM_PAINTICON 0x0026
!define WM_PALETTECHANGED 0x0311
!define WM_PALETTEISCHANGING 0x0310
!define WM_PARENTNOTIFY 0x0210
!define WM_PASTE 0x0302
!define WM_PENWINFIRST 0x0380
!define WM_PENWINLAST 0x038F
!define WM_POWER 0x0048
!define WM_POWERBROADCAST 0x0218
!define WM_PRINT 0x0317
!define WM_PRINTCLIENT 0x0318
!define WM_QUERYDRAGICON 0x0037
!define WM_QUERYENDSESSION 0x0011
!define WM_QUERYNEWPALETTE 0x030F
!define WM_QUERYOPEN 0x0013
!define WM_QUERYUISTATE 0x0129
!define WM_QUEUESYNC 0x0023
!define WM_QUIT 0x0012
!define WM_RBUTTONDBLCLK 0x0206
!define WM_RBUTTONDOWN 0x0204
!define WM_RBUTTONUP 0x0205
!define WM_RASDIALEVENT 0xCCCD
!define WM_RENDERALLFORMATS 0x0306
!define WM_RENDERFORMAT 0x0305
!define WM_SETCURSOR 0x0020
!define WM_SETFOCUS 0x0007
!define WM_SETFONT 0x0030
!define WM_SETHOTKEY 0x0032
!define WM_SETICON 0x0080
!define WM_SETREDRAW 0x000B
!define WM_SETTEXT 0x000C
!define WM_SETTINGCHANGE 0x001A # Same as WM_WININICHANGE
!define WM_SHOWWINDOW 0x0018
!define WM_SIZE 0x0005
!define WM_SIZECLIPBOARD 0x030B
!define WM_SIZING 0x0214
!define WM_SPOOLERSTATUS 0x002A
!define WM_STYLECHANGED 0x007D
!define WM_STYLECHANGING 0x007C
!define WM_SYNCPAINT 0x0088
!define WM_SYSCHAR 0x0106
!define WM_SYSCOLORCHANGE 0x0015
!define WM_SYSCOMMAND 0x0112
!define WM_SYSDEADCHAR 0x0107
!define WM_SYSKEYDOWN 0x0104
!define WM_SYSKEYUP 0x0105
!define WM_TABLET_FIRST 0x02C0
!define WM_TABLET_LAST 0x02DF
!define WM_THEMECHANGED 0x031A
!define WM_TCARD 0x0052
!define WM_TIMECHANGE 0x001E
!define WM_TIMER 0x0113
!define WM_UNDO 0x0304
!define WM_UNICHAR 0x0109
!define WM_UNINITMENUPOPUP 0x0125
!define WM_UPDATEUISTATE 0x0128
!define WM_USER 0x400
!define WM_USERCHANGED 0x0054
!define WM_VKEYTOITEM 0x002E
!define WM_VSCROLL 0x0115
!define WM_VSCROLLCLIPBOARD 0x030A
!define WM_WINDOWPOSCHANGED 0x0047
!define WM_WINDOWPOSCHANGING 0x0046
!define WM_WININICHANGE 0x001A
!define WM_WTSSESSION_CHANGE 0x02B1
!define WM_XBUTTONDBLCLK 0x020D
!define WM_XBUTTONDOWN 0x020B
!define WM_XBUTTONUP 0x020C
#Application desktop toolbar#
!define ABM_ACTIVATE 0x00000006 # lParam == TRUE/FALSE means activate/deactivate
!define ABM_GETAUTOHIDEBAR 0x00000007
!define ABM_GETSTATE 0x00000004
!define ABM_GETTASKBARPOS 0x00000005
!define ABM_NEW 0x00000000
!define ABM_QUERYPOS 0x00000002
!define ABM_REMOVE 0x00000001
!define ABM_SETAUTOHIDEBAR 0x00000008 # This can fail, you MUST check the result
!define ABM_SETPOS 0x00000003
!define ABM_WINDOWPOSCHANGED 0x0000009
#Device#
!define DBT_APPYBEGIN 0x0000
!define DBT_APPYEND 0x0001
!define DBT_CONFIGCHANGECANCELED 0x0019
!define DBT_CONFIGCHANGED 0x0018
!define DBT_CONFIGMGAPI32 0x0022
!define DBT_CONFIGMGPRIVATE 0x7FFF
!define DBT_CUSTOMEVENT 0x8006 # User-defined event
!define DBT_DEVICEARRIVAL 0x8000 # System detected a new device
!define DBT_DEVICEQUERYREMOVE 0x8001 # Wants to remove, may fail
!define DBT_DEVICEQUERYREMOVEFAILED 0x8002 # Removal aborted
!define DBT_DEVICEREMOVECOMPLETE 0x8004 # Device is gone
!define DBT_DEVICEREMOVEPENDING 0x8003 # About to remove, still avail.
!define DBT_DEVICETYPESPECIFIC 0x8005 # Type specific event
!define DBT_DEVNODES_CHANGED 0x0007
!define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 # Device interface class
!define DBT_DEVTYP_DEVNODE 0x00000001 # Devnode number
!define DBT_DEVTYP_HANDLE 0x00000006 # File system handle
!define DBT_DEVTYP_NET 0x00000004 # Network resource
!define DBT_DEVTYP_OEM 0x00000000 # Oem-defined device type
!define DBT_DEVTYP_PORT 0x00000003 # Serial, parallel
!define DBT_DEVTYP_VOLUME 0x00000002 # Logical volume
!define DBT_LOW_DISK_SPACE 0x0048
!define DBT_MONITORCHANGE 0x001B
!define DBT_NO_DISK_SPACE 0x0047
!define DBT_QUERYCHANGECONFIG 0x0017
!define DBT_SHELLLOGGEDON 0x0020
!define DBT_USERDEFINED 0xFFFF
!define DBT_VOLLOCKLOCKFAILED 0x8043
!define DBT_VOLLOCKLOCKRELEASED 0x8045
!define DBT_VOLLOCKLOCKTAKEN 0x8042
!define DBT_VOLLOCKQUERYLOCK 0x8041
!define DBT_VOLLOCKQUERYUNLOCK 0x8044
!define DBT_VOLLOCKUNLOCKFAILED 0x8046
!define DBT_VPOWERDAPI 0x8100 # VPOWERD API for Win95
!define DBT_VXDINITCOMPLETE 0x0023
#Default push button control#
!define DM_BITSPERPEL 0x00040000
!define DM_COLLATE 0x00008000
!define DM_COLOR 0x00000800
!define DM_COPIES 0x00000100
!define DM_DEFAULTSOURCE 0x00000200
!define DM_DISPLAYFLAGS 0x00200000
!define DM_DISPLAYFREQUENCY 0x00400000
!define DM_DITHERTYPE 0x04000000
!define DM_DUPLEX 0x00001000
!define DM_FORMNAME 0x00010000
!define DM_GRAYSCALE 0x00000001 # This flag is no longer valid
!define DM_ICMINTENT 0x01000000
!define DM_ICMMETHOD 0x00800000
!define DM_INTERLACED 0x00000002 # This flag is no longer valid
!define DM_LOGPIXELS 0x00020000
!define DM_MEDIATYPE 0x02000000
!define DM_NUP 0x00000040
!define DM_ORIENTATION 0x00000001
!define DM_PANNINGHEIGHT 0x10000000
!define DM_PANNINGWIDTH 0x08000000
!define DM_PAPERLENGTH 0x00000004
!define DM_PAPERSIZE 0x00000002
!define DM_PAPERWIDTH 0x00000008
!define DM_PELSHEIGHT 0x00100000
!define DM_PELSWIDTH 0x00080000
!define DM_POSITION 0x00000020
!define DM_PRINTQUALITY 0x00000400
!define DM_SCALE 0x00000010
!define DM_SPECVERSION 0x0320 # 0x0400 0x0401
!define DM_TTOPTION 0x00004000
!define DM_YRESOLUTION 0x00002000
#Header control#
!define HDM_FIRST 0x1200
#List view control#
!define LVM_FIRST 0x1000
#Status bar window#
!define SB_CONST_ALPHA 0x00000001
!define SB_GRAD_RECT 0x00000010
!define SB_GRAD_TRI 0x00000020
!define SB_NONE 0x00000000
!define SB_PIXEL_ALPHA 0x00000002
!define SB_PREMULT_ALPHA 0x00000004
!define SB_SIMPLEID 0x00ff
#Scroll bar control#
!define SBM_ENABLE_ARROWS 0x00E4 # Not in win3.1
!define SBM_GETPOS 0x00E1 # Not in win3.1
!define SBM_GETRANGE 0x00E3 # Not in win3.1
!define SBM_GETSCROLLINFO 0x00EA
!define SBM_SETPOS 0x00E0 # Not in win3.1
!define SBM_SETRANGE 0x00E2 # Not in win3.1
!define SBM_SETRANGEREDRAW 0x00E6 # Not in win3.1
!define SBM_SETSCROLLINFO 0x00E9
#Static control#
!define STM_GETICON 0x0171
!define STM_GETIMAGE 0x0173
!define STM_MSGMAX 0x0174
!define STM_ONLY_THIS_INTERFACE 0x00000001
!define STM_ONLY_THIS_NAME 0x00000008
!define STM_ONLY_THIS_PROTOCOL 0x00000002
!define STM_ONLY_THIS_TYPE 0x00000004
!define STM_SETICON 0x0170
!define STM_SETIMAGE 0x0172
#Tab control#
!define TCM_FIRST 0x1300
#Progress bar control#
!define PBM_SETRANGE 0x0401
!define PBM_SETPOS 0x0402
!define PBM_DELTAPOS 0x0403
!define PBM_SETSTEP 0x0404
!define PBM_STEPIT 0x0405
!define PBM_GETPOS 0x0408
!define PBM_SETMARQUEE 0x040a
!verbose pop
!endif

480
T7x/Include/WinVer.nsh Normal file
View File

@ -0,0 +1,480 @@
; ---------------------
; WinVer.nsh
; ---------------------
;
; LogicLib extensions for handling Windows versions and service packs.
;
; IsNT checks if the installer is running on Windows NT family (NT4, 2000, XP, etc.)
;
; ${If} ${IsNT}
; DetailPrint "Running on NT. Installing Unicode enabled application."
; ${Else}
; DetailPrint "Not running on NT. Installing ANSI application."
; ${EndIf}
;
; IsServer checks if the installer is running on a server version of Windows (NT4, 2003, 2008, etc.)
;
; AtLeastWin<version> checks if the installer is running on Windows version at least as specified.
; IsWin<version> checks if the installer is running on Windows version exactly as specified.
; AtMostWin<version> checks if the installer is running on Windows version at most as specified.
;
; <version> can be replaced with the following values:
;
; 95
; 98
; ME
;
; NT4
; 2000
; XP
; 2003
; Vista
; 2008
; 7
; 2008R2
;
; AtLeastServicePack checks if the installer is running on Windows service pack version at least as specified.
; IsServicePack checks if the installer is running on Windows service pack version exactly as specified.
; AtMostServicePack checks if the installer is running on Windows service version pack at most as specified.
;
; Usage examples:
;
; ${If} ${IsNT}
; DetailPrint "Running on NT family."
; DetailPrint "Surely not running on 95, 98 or ME."
; ${AndIf} ${AtLeastWinNT4}
; DetailPrint "Running on NT4 or better. Could even be 2003."
; ${EndIf}
;
; ${If} ${AtLeastWinXP}
; DetailPrint "Running on XP or better."
; ${EndIf}
;
; ${If} ${IsWin2000}
; DetailPrint "Running on 2000."
; ${EndIf}
;
; ${If} ${IsWin2000}
; ${AndIf} ${AtLeastServicePack} 3
; ${OrIf} ${AtLeastWinXP}
; DetailPrint "Running Win2000 SP3 or above"
; ${EndIf}
;
; ${If} ${AtMostWinXP}
; DetailPrint "Running on XP or older. Surely not running on Vista. Maybe 98, or even 95."
; ${EndIf}
;
; Warning:
;
; Windows 95 and NT both use the same version number. To avoid getting NT4 misidentified
; as Windows 95 and vice-versa or 98 as a version higher than NT4, always use IsNT to
; check if running on the NT family.
;
; ${If} ${AtLeastWin95}
; ${And} ${AtMostWinME}
; DetailPrint "Running 95, 98 or ME."
; DetailPrint "Actually, maybe it's NT4?"
; ${If} ${IsNT}
; DetailPrint "Yes, it's NT4! oops..."
; ${Else}
; DetailPrint "Nope, not NT4. phew..."
; ${EndIf}
; ${EndIf}
;
;
; Other useful extensions are:
;
; * IsWin2003R2
; * IsStarterEdition
; * OSHasMediaCenter
; * OSHasTabletSupport
;
!verbose push
!verbose 3
!ifndef ___WINVER__NSH___
!define ___WINVER__NSH___
!include LogicLib.nsh
!include Util.nsh
# masks for our variables
!define _WINVER_VERXBIT 0x00000001
!define _WINVER_MASKVMAJ 0x7F000000
!define _WINVER_MASKVMIN 0x00FF0000
!define _WINVER_NTBIT 0x80000000
!define _WINVER_NTMASK 0x7FFFFFFF
!define _WINVER_NTSRVBIT 0x40000000
!define _WINVER_MASKVBLD 0x0000FFFF
!define _WINVER_MASKSP 0x000F0000
# possible variable values for different versions
!define WINVER_95_NT 0x04000000 ;4.00.0950
!define WINVER_95 0x04000000 ;4.00.0950
!define WINVER_98_NT 0x040a0000 ;4.10.1998
!define WINVER_98 0x040a0000 ;4.10.1998
;define WINVER_98SE 0x040a0000 ;4.10.2222
!define WINVER_ME_NT 0x045a0000 ;4.90.3000
!define WINVER_ME 0x045a0000 ;4.90.3000
;define WINVER_NT3d51 ;3.51.1057
!define WINVER_NT4_NT 0x84000000 ;4.00.1381
!define WINVER_NT4 0x04000000 ;4.00.1381
!define WINVER_2000_NT 0x85000000 ;5.00.2195
!define WINVER_2000 0x05000000 ;5.00.2195
!define WINVER_XP_NT 0x85010000 ;5.01.2600
!define WINVER_XP 0x05010000 ;5.01.2600
;define WINVER_XP64 ;5.02.3790
!define WINVER_2003_NT 0x85020000 ;5.02.3790
!define WINVER_2003 0x05020000 ;5.02.3790
!define WINVER_VISTA_NT 0x86000000 ;6.00.6000
!define WINVER_VISTA 0x06000000 ;6.00.6000
!define WINVER_2008_NT 0x86000001 ;6.00.6001
!define WINVER_2008 0x06000001 ;6.00.6001
!define WINVER_7_NT 0x86010000 ;6.01.????
!define WINVER_7 0x06010000 ;6.01.????
!define WINVER_2008R2_NT 0x86010001 ;6.01.????
!define WINVER_2008R2 0x06010001 ;6.01.????
# use this to make all nt > 9x
!ifdef WINVER_NT4_OVER_W95
!define __WINVERTMP ${WINVER_NT4}
!undef WINVER_NT4
!define /math WINVER_NT4 ${__WINVERTMP} | ${_WINVER_VERXBIT}
!undef __WINVERTMP
!endif
# some definitions from header files
!define OSVERSIONINFOA_SIZE 148
!define OSVERSIONINFOEXA_SIZE 156
!define VER_PLATFORM_WIN32_NT 2
!define VER_NT_WORKSTATION 1
!define SM_TABLETPC 86
!define SM_MEDIACENTER 87
!define SM_STARTER 88
!define SM_SERVERR2 89
# variable declaration
!macro __WinVer_DeclareVars
!ifndef __WINVER_VARS_DECLARED
!define __WINVER_VARS_DECLARED
Var /GLOBAL __WINVERV
Var /GLOBAL __WINVERSP
!endif
!macroend
# lazy initialization macro
!ifmacrondef __WinVer_Call_GetVersionEx
!macro __WinVer_Call_GetVersionEx STRUCT_SIZE
System::Call '*$0(i ${STRUCT_SIZE})'
System::Call kernel32::GetVersionEx(ir0)i.r3
!macroend
!endif
!macro __WinVer_InitVars
# variables
!insertmacro __WinVer_DeclareVars
# only calculate version once
StrCmp $__WINVERV "" _winver_noveryet
Return
_winver_noveryet:
# push used registers on the stack
Push $0
Push $1 ;maj
Push $2 ;min
Push $3 ;bld
Push $R0 ;temp
# allocate memory
System::Alloc ${OSVERSIONINFOEXA_SIZE}
Pop $0
# use OSVERSIONINFOEX
!insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOEXA_SIZE}
IntCmp $3 0 "" _winver_ex _winver_ex
# OSVERSIONINFOEX not allowed (Win9x or NT4 w/SP < 6), use OSVERSIONINFO
!insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOA_SIZE}
_winver_ex:
# get results from struct
System::Call '*$0(i.s,i.r1,i.r2,i.r3,i.s,&t128.s,&i2.s,&i2,&i2,&i1.s,&i1)'
# free struct
System::Free $0
# win9x has major and minor info in high word of dwBuildNumber - remove it
IntOp $3 $3 & 0xFFFF
# get dwOSVersionInfoSize
Pop $R0
# get dwPlatformId
Pop $0
# NT?
IntCmp $0 ${VER_PLATFORM_WIN32_NT} "" _winver_notnt _winver_notnt
IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTBIT}
IntOp $__WINVERV $__WINVERV | ${_WINVER_NTBIT}
_winver_notnt:
# get service pack information
IntCmp $0 ${VER_PLATFORM_WIN32_NT} _winver_nt "" _winver_nt # win9x
# get szCSDVersion
Pop $0
# copy second char
StrCpy $0 $0 1 1
# discard invalid wServicePackMajor and wProductType
Pop $R0
Pop $R0
# switch
StrCmp $0 'A' "" +3
StrCpy $0 1
Goto _winver_sp_done
StrCmp $0 'B' "" +3
StrCpy $0 2
Goto _winver_sp_done
StrCmp $0 'C' "" +3
StrCpy $0 3
Goto _winver_sp_done
StrCpy $0 0
Goto _winver_sp_done
_winver_nt: # nt
IntCmp $R0 ${OSVERSIONINFOEXA_SIZE} "" _winver_sp_noex _winver_sp_noex
# discard szCSDVersion
Pop $0
# get wProductType
Exch
Pop $0
# is server?
IntCmp $0 ${VER_NT_WORKSTATION} _winver_noserver _winver_noserver ""
IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTSRVBIT}
_winver_noserver:
# get wServicePackMajor
Pop $0
# done with sp
Goto _winver_sp_done
_winver_sp_noex: # OSVERSIONINFO, not OSVERSIONINFOEX
#### TODO
## For IsServer to support < NT4SP6, we need to check the registry
## here to see if we are a server and/or DC
# get szCSDVersion
Pop $0
# discard invalid wServicePackMajor and wProductType
Pop $R0
Pop $R0
# get service pack number from text
StrCpy $R0 $0 13
StrCmp $R0 "Service Pack " "" +3
StrCpy $0 $0 "" 13 # cut "Service Pack "
Goto +2
StrCpy $0 0 # no service pack
!ifdef WINVER_NT4_OVER_W95
IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT}
!endif
_winver_sp_done:
# store service pack
IntOp $0 $0 << 16
IntOp $__WINVERSP $__WINVERSP | $0
### now for the version
# is server?
IntOp $0 $__WINVERSP & ${_WINVER_NTSRVBIT}
# windows xp x64?
IntCmp $0 0 "" _winver_not_xp_x64 _winver_not_xp_x64 # not server
IntCmp $1 5 "" _winver_not_xp_x64 _winver_not_xp_x64 # maj 5
IntCmp $2 2 "" _winver_not_xp_x64 _winver_not_xp_x64 # min 2
# change XP x64 from 5.2 to 5.1 so it's still XP
StrCpy $2 1
_winver_not_xp_x64:
# server 2008?
IntCmp $0 0 _winver_not_ntserver # server
IntCmp 6 $1 "" "" _winver_not_ntserver # maj 6
# extra bit so Server 2008 comes after Vista SP1 that has the same minor version, same for Win7 vs 2008R2
IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT}
_winver_not_ntserver:
# pack version
IntOp $1 $1 << 24 # VerMajor
IntOp $__WINVERV $__WINVERV | $1
IntOp $0 $2 << 16
IntOp $__WINVERV $__WINVERV | $0 # VerMinor
IntOp $__WINVERSP $__WINVERSP | $3 # VerBuild
# restore registers
Pop $R0
Pop $3
Pop $2
Pop $1
Pop $0
!macroend
# version comparison LogicLib macros
!macro _WinVerAtLeast _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${CallArtificialFunction} __WinVer_InitVars
IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK}
!insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
!macroend
!macro _WinVerIs _a _b _t _f
${CallArtificialFunction} __WinVer_InitVars
!insertmacro _= $__WINVERV `${_b}` `${_t}` `${_f}`
!macroend
!macro _WinVerAtMost _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${CallArtificialFunction} __WinVer_InitVars
IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK}
!insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
!macroend
!macro __WinVer_DefineOSTest Test OS Suffix
!define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}${Suffix}}`
!macroend
!macro __WinVer_DefineOSTests Test Suffix
!insertmacro __WinVer_DefineOSTest ${Test} 95 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} 98 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} ME '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} NT4 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} 2000 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} XP '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} 2003 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} VISTA '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} 2008 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} 7 '${Suffix}'
!insertmacro __WinVer_DefineOSTest ${Test} 2008R2 '${Suffix}'
!macroend
!insertmacro __WinVer_DefineOSTests AtLeast ""
!insertmacro __WinVer_DefineOSTests Is _NT
!insertmacro __WinVer_DefineOSTests AtMost ""
# version feature LogicLib macros
!macro _IsNT _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${CallArtificialFunction} __WinVer_InitVars
IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTBIT}
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
!macroend
!define IsNT `"" IsNT ""`
!macro _IsServerOS _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${CallArtificialFunction} __WinVer_InitVars
IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTSRVBIT}
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
!macroend
!define IsServerOS `"" IsServerOS ""`
# service pack macros
!macro _WinVer_GetServicePackLevel OUTVAR
${CallArtificialFunction} __WinVer_InitVars
IntOp ${OUTVAR} $__WINVERSP & ${_WINVER_MASKSP}
IntOp ${OUTVAR} ${OUTVAR} >> 16
!macroend
!define WinVerGetServicePackLevel '!insertmacro _WinVer_GetServicePackLevel '
!macro _AtLeastServicePack _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
!insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
!macroend
!define AtLeastServicePack `"" AtLeastServicePack`
!macro _AtMostServicePack _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
!insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
!macroend
!define AtMostServicePack `"" AtMostServicePack`
!macro _IsServicePack _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
!insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
!macroend
!define IsServicePack `"" IsServicePack`
# special feature LogicLib macros
!macro _WinVer_SysMetricCheck m _b _t _f
!insertmacro _LOGICLIB_TEMP
System::Call user32::GetSystemMetrics(i${m})i.s
pop $_LOGICLIB_TEMP
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
!macroend
!define IsWin2003R2 `${SM_SERVERR2} WinVer_SysMetricCheck ""`
!define IsStarterEdition `${SM_STARTER} WinVer_SysMetricCheck ""`
!define OSHasMediaCenter `${SM_MEDIACENTER} WinVer_SysMetricCheck ""`
!define OSHasTabletSupport `${SM_TABLETPC} WinVer_SysMetricCheck ""`
# version retrieval macros
!macro __WinVer_GetVer var rshift mask outvar
${CallArtificialFunction} __WinVer_InitVars
!if "${mask}" != ""
IntOp ${outvar} ${var} & ${mask}
!if "${rshift}" != ""
IntOp ${outvar} ${outvar} >> ${rshift}
!endif
!else
IntOp ${outvar} ${var} >> ${rshift}
!endif
!macroend
!define WinVerGetMajor '!insertmacro __WinVer_GetVer $__WINVERV 24 ${_WINVER_MASKVMAJ}'
!define WinVerGetMinor '!insertmacro __WinVer_GetVer $__WINVERV 16 ${_WINVER_MASKVMIN}'
!define WinVerGetBuild '!insertmacro __WinVer_GetVer $__WINVERSP "" ${_WINVER_MASKVBLD}'
# done
!endif # !___WINVER__NSH___
!verbose pop

1803
T7x/Include/WordFunc.nsh Normal file

File diff suppressed because it is too large Load Diff

860
T7x/Include/nsDialogs.nsh Normal file
View File

@ -0,0 +1,860 @@
/*
nsDialogs.nsh
Header file for creating custom installer pages with nsDialogs
*/
!ifndef NSDIALOGS_INCLUDED
!define NSDIALOGS_INCLUDED
!verbose push
!verbose 3
!include LogicLib.nsh
!include WinMessages.nsh
!define WS_EX_DLGMODALFRAME 0x00000001
!define WS_EX_NOPARENTNOTIFY 0x00000004
!define WS_EX_TOPMOST 0x00000008
!define WS_EX_ACCEPTFILES 0x00000010
!define WS_EX_TRANSPARENT 0x00000020
!define WS_EX_MDICHILD 0x00000040
!define WS_EX_TOOLWINDOW 0x00000080
!define WS_EX_WINDOWEDGE 0x00000100
!define WS_EX_CLIENTEDGE 0x00000200
!define WS_EX_CONTEXTHELP 0x00000400
!define WS_EX_RIGHT 0x00001000
!define WS_EX_LEFT 0x00000000
!define WS_EX_RTLREADING 0x00002000
!define WS_EX_LTRREADING 0x00000000
!define WS_EX_LEFTSCROLLBAR 0x00004000
!define WS_EX_RIGHTSCROLLBAR 0x00000000
!define WS_EX_CONTROLPARENT 0x00010000
!define WS_EX_STATICEDGE 0x00020000
!define WS_EX_APPWINDOW 0x00040000
!define WS_CHILD 0x40000000
!define WS_VISIBLE 0x10000000
!define WS_DISABLED 0x08000000
!define WS_CLIPSIBLINGS 0x04000000
!define WS_CLIPCHILDREN 0x02000000
!define WS_MAXIMIZE 0x01000000
!define WS_VSCROLL 0x00200000
!define WS_HSCROLL 0x00100000
!define WS_GROUP 0x00020000
!define WS_TABSTOP 0x00010000
!define ES_LEFT 0x00000000
!define ES_CENTER 0x00000001
!define ES_RIGHT 0x00000002
!define ES_MULTILINE 0x00000004
!define ES_UPPERCASE 0x00000008
!define ES_LOWERCASE 0x00000010
!define ES_PASSWORD 0x00000020
!define ES_AUTOVSCROLL 0x00000040
!define ES_AUTOHSCROLL 0x00000080
!define ES_NOHIDESEL 0x00000100
!define ES_OEMCONVERT 0x00000400
!define ES_READONLY 0x00000800
!define ES_WANTRETURN 0x00001000
!define ES_NUMBER 0x00002000
!define SS_LEFT 0x00000000
!define SS_CENTER 0x00000001
!define SS_RIGHT 0x00000002
!define SS_ICON 0x00000003
!define SS_BLACKRECT 0x00000004
!define SS_GRAYRECT 0x00000005
!define SS_WHITERECT 0x00000006
!define SS_BLACKFRAME 0x00000007
!define SS_GRAYFRAME 0x00000008
!define SS_WHITEFRAME 0x00000009
!define SS_USERITEM 0x0000000A
!define SS_SIMPLE 0x0000000B
!define SS_LEFTNOWORDWRAP 0x0000000C
!define SS_OWNERDRAW 0x0000000D
!define SS_BITMAP 0x0000000E
!define SS_ENHMETAFILE 0x0000000F
!define SS_ETCHEDHORZ 0x00000010
!define SS_ETCHEDVERT 0x00000011
!define SS_ETCHEDFRAME 0x00000012
!define SS_TYPEMASK 0x0000001F
!define SS_REALSIZECONTROL 0x00000040
!define SS_NOPREFIX 0x00000080
!define SS_NOTIFY 0x00000100
!define SS_CENTERIMAGE 0x00000200
!define SS_RIGHTJUST 0x00000400
!define SS_REALSIZEIMAGE 0x00000800
!define SS_SUNKEN 0x00001000
!define SS_EDITCONTROL 0x00002000
!define SS_ENDELLIPSIS 0x00004000
!define SS_PATHELLIPSIS 0x00008000
!define SS_WORDELLIPSIS 0x0000C000
!define SS_ELLIPSISMASK 0x0000C000
!define BS_PUSHBUTTON 0x00000000
!define BS_DEFPUSHBUTTON 0x00000001
!define BS_CHECKBOX 0x00000002
!define BS_AUTOCHECKBOX 0x00000003
!define BS_RADIOBUTTON 0x00000004
!define BS_3STATE 0x00000005
!define BS_AUTO3STATE 0x00000006
!define BS_GROUPBOX 0x00000007
!define BS_USERBUTTON 0x00000008
!define BS_AUTORADIOBUTTON 0x00000009
!define BS_PUSHBOX 0x0000000A
!define BS_OWNERDRAW 0x0000000B
!define BS_TYPEMASK 0x0000000F
!define BS_LEFTTEXT 0x00000020
!define BS_TEXT 0x00000000
!define BS_ICON 0x00000040
!define BS_BITMAP 0x00000080
!define BS_LEFT 0x00000100
!define BS_RIGHT 0x00000200
!define BS_CENTER 0x00000300
!define BS_TOP 0x00000400
!define BS_BOTTOM 0x00000800
!define BS_VCENTER 0x00000C00
!define BS_PUSHLIKE 0x00001000
!define BS_MULTILINE 0x00002000
!define BS_NOTIFY 0x00004000
!define BS_FLAT 0x00008000
!define BS_RIGHTBUTTON ${BS_LEFTTEXT}
!define CBS_SIMPLE 0x0001
!define CBS_DROPDOWN 0x0002
!define CBS_DROPDOWNLIST 0x0003
!define CBS_OWNERDRAWFIXED 0x0010
!define CBS_OWNERDRAWVARIABLE 0x0020
!define CBS_AUTOHSCROLL 0x0040
!define CBS_OEMCONVERT 0x0080
!define CBS_SORT 0x0100
!define CBS_HASSTRINGS 0x0200
!define CBS_NOINTEGRALHEIGHT 0x0400
!define CBS_DISABLENOSCROLL 0x0800
!define CBS_UPPERCASE 0x2000
!define CBS_LOWERCASE 0x4000
!define LBS_NOTIFY 0x0001
!define LBS_SORT 0x0002
!define LBS_NOREDRAW 0x0004
!define LBS_MULTIPLESEL 0x0008
!define LBS_OWNERDRAWFIXED 0x0010
!define LBS_OWNERDRAWVARIABLE 0x0020
!define LBS_HASSTRINGS 0x0040
!define LBS_USETABSTOPS 0x0080
!define LBS_NOINTEGRALHEIGHT 0x0100
!define LBS_MULTICOLUMN 0x0200
!define LBS_WANTKEYBOARDINPUT 0x0400
!define LBS_EXTENDEDSEL 0x0800
!define LBS_DISABLENOSCROLL 0x1000
!define LBS_NODATA 0x2000
!define LBS_NOSEL 0x4000
!define LBS_COMBOBOX 0x8000
!define LR_DEFAULTCOLOR 0x0000
!define LR_MONOCHROME 0x0001
!define LR_COLOR 0x0002
!define LR_COPYRETURNORG 0x0004
!define LR_COPYDELETEORG 0x0008
!define LR_LOADFROMFILE 0x0010
!define LR_LOADTRANSPARENT 0x0020
!define LR_DEFAULTSIZE 0x0040
!define LR_VGACOLOR 0x0080
!define LR_LOADMAP3DCOLORS 0x1000
!define LR_CREATEDIBSECTION 0x2000
!define LR_COPYFROMRESOURCE 0x4000
!define LR_SHARED 0x8000
!define IMAGE_BITMAP 0
!define IMAGE_ICON 1
!define IMAGE_CURSOR 2
!define IMAGE_ENHMETAFILE 3
!define GWL_STYLE -16
!define GWL_EXSTYLE -20
!define DEFAULT_STYLES ${WS_CHILD}|${WS_VISIBLE}|${WS_CLIPSIBLINGS}
!define __NSD_HLine_CLASS STATIC
!define __NSD_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN}
!define __NSD_HLine_EXSTYLE ${WS_EX_TRANSPARENT}
!define __NSD_VLine_CLASS STATIC
!define __NSD_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN}
!define __NSD_VLine_EXSTYLE ${WS_EX_TRANSPARENT}
!define __NSD_Label_CLASS STATIC
!define __NSD_Label_STYLE ${DEFAULT_STYLES}|${SS_NOTIFY}
!define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}
!define __NSD_Icon_CLASS STATIC
!define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}|${SS_NOTIFY}
!define __NSD_Icon_EXSTYLE 0
!define __NSD_Bitmap_CLASS STATIC
!define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}|${SS_NOTIFY}
!define __NSD_Bitmap_EXSTYLE 0
!define __NSD_BrowseButton_CLASS BUTTON
!define __NSD_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
!define __NSD_BrowseButton_EXSTYLE 0
!define __NSD_Link_CLASS LINK
!define __NSD_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW}
!define __NSD_Link_EXSTYLE 0
!define __NSD_Button_CLASS BUTTON
!define __NSD_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
!define __NSD_Button_EXSTYLE 0
!define __NSD_GroupBox_CLASS BUTTON
!define __NSD_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX}
!define __NSD_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT}
!define __NSD_CheckBox_CLASS BUTTON
!define __NSD_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE}
!define __NSD_CheckBox_EXSTYLE 0
!define __NSD_RadioButton_CLASS BUTTON
!define __NSD_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE}
!define __NSD_RadioButton_EXSTYLE 0
!define __NSD_Text_CLASS EDIT
!define __NSD_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
!define __NSD_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_Password_CLASS EDIT
!define __NSD_Password_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_PASSWORD}
!define __NSD_Password_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_Number_CLASS EDIT
!define __NSD_Number_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_NUMBER}
!define __NSD_Number_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_FileRequest_CLASS EDIT
!define __NSD_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
!define __NSD_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_DirRequest_CLASS EDIT
!define __NSD_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
!define __NSD_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_ComboBox_CLASS COMBOBOX
!define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWN}
!define __NSD_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_DropList_CLASS COMBOBOX
!define __NSD_DropList_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWNLIST}
!define __NSD_DropList_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_ListBox_CLASS LISTBOX
!define __NSD_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY}
!define __NSD_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define __NSD_ProgressBar_CLASS msctls_progress32
!define __NSD_ProgressBar_STYLE ${DEFAULT_STYLES}
!define __NSD_ProgressBar_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!macro __NSD_DefineControl NAME
!define NSD_Create${NAME} "nsDialogs::CreateControl ${__NSD_${Name}_CLASS} ${__NSD_${Name}_STYLE} ${__NSD_${Name}_EXSTYLE}"
!macroend
!insertmacro __NSD_DefineControl HLine
!insertmacro __NSD_DefineControl VLine
!insertmacro __NSD_DefineControl Label
!insertmacro __NSD_DefineControl Icon
!insertmacro __NSD_DefineControl Bitmap
!insertmacro __NSD_DefineControl BrowseButton
!insertmacro __NSD_DefineControl Link
!insertmacro __NSD_DefineControl Button
!insertmacro __NSD_DefineControl GroupBox
!insertmacro __NSD_DefineControl CheckBox
!insertmacro __NSD_DefineControl RadioButton
!insertmacro __NSD_DefineControl Text
!insertmacro __NSD_DefineControl Password
!insertmacro __NSD_DefineControl Number
!insertmacro __NSD_DefineControl FileRequest
!insertmacro __NSD_DefineControl DirRequest
!insertmacro __NSD_DefineControl ComboBox
!insertmacro __NSD_DefineControl DropList
!insertmacro __NSD_DefineControl ListBox
!insertmacro __NSD_DefineControl ProgressBar
!macro __NSD_OnControlEvent EVENT HWND FUNCTION
Push $0
Push $1
StrCpy $1 "${HWND}"
GetFunctionAddress $0 "${FUNCTION}"
nsDialogs::On${EVENT} $1 $0
Pop $1
Pop $0
!macroend
!macro __NSD_DefineControlCallback EVENT
!define NSD_On${EVENT} `!insertmacro __NSD_OnControlEvent ${EVENT}`
!macroend
!macro __NSD_OnDialogEvent EVENT FUNCTION
Push $0
GetFunctionAddress $0 "${FUNCTION}"
nsDialogs::On${EVENT} $0
Pop $0
!macroend
!macro __NSD_DefineDialogCallback EVENT
!define NSD_On${EVENT} `!insertmacro __NSD_OnDialogEvent ${EVENT}`
!macroend
!insertmacro __NSD_DefineControlCallback Click
!insertmacro __NSD_DefineControlCallback Change
!insertmacro __NSD_DefineControlCallback Notify
!insertmacro __NSD_DefineDialogCallback Back
!macro _NSD_CreateTimer FUNCTION INTERVAL
Push $0
GetFunctionAddress $0 "${FUNCTION}"
nsDialogs::CreateTimer $0 "${INTERVAL}"
Pop $0
!macroend
!define NSD_CreateTimer `!insertmacro _NSD_CreateTimer`
!macro _NSD_KillTimer FUNCTION
Push $0
GetFunctionAddress $0 "${FUNCTION}"
nsDialogs::KillTimer $0
Pop $0
!macroend
!define NSD_KillTimer `!insertmacro _NSD_KillTimer`
!macro _NSD_AddStyle CONTROL STYLE
Push $0
System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_STYLE}) i .r0"
System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_STYLE}, i $0|${STYLE})"
Pop $0
!macroend
!define NSD_AddStyle "!insertmacro _NSD_AddStyle"
!macro _NSD_AddExStyle CONTROL EXSTYLE
Push $0
System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}) i .r0"
System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}, i $0|${EXSTYLE})"
Pop $0
!macroend
!define NSD_AddExStyle "!insertmacro _NSD_AddExStyle"
!macro __NSD_GetText CONTROL VAR
System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})
Pop ${VAR}
!macroend
!define NSD_GetText `!insertmacro __NSD_GetText`
!macro __NSD_SetText CONTROL TEXT
SendMessage ${CONTROL} ${WM_SETTEXT} 0 `STR:${TEXT}`
!macroend
!define NSD_SetText `!insertmacro __NSD_SetText`
!macro _NSD_SetTextLimit CONTROL LIMIT
SendMessage ${CONTROL} ${EM_SETLIMITTEXT} ${LIMIT} 0
!macroend
!define NSD_SetTextLimit "!insertmacro _NSD_SetTextLimit"
!macro __NSD_GetState CONTROL VAR
SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR}
!macroend
!define NSD_GetState `!insertmacro __NSD_GetState`
!macro __NSD_SetState CONTROL STATE
SendMessage ${CONTROL} ${BM_SETCHECK} ${STATE} 0
!macroend
!define NSD_SetState `!insertmacro __NSD_SetState`
!macro __NSD_Check CONTROL
${NSD_SetState} ${CONTROL} ${BST_CHECKED}
!macroend
!define NSD_Check `!insertmacro __NSD_Check`
!macro __NSD_Uncheck CONTROL
${NSD_SetState} ${CONTROL} ${BST_UNCHECKED}
!macroend
!define NSD_Uncheck `!insertmacro __NSD_Uncheck`
!macro __NSD_SetFocus HWND
System::Call "user32::SetFocus(i${HWND})"
!macroend
!define NSD_SetFocus `!insertmacro __NSD_SetFocus`
!macro _NSD_CB_AddString CONTROL STRING
SendMessage ${CONTROL} ${CB_ADDSTRING} 0 `STR:${STRING}`
!macroend
!define NSD_CB_AddString "!insertmacro _NSD_CB_AddString"
!macro _NSD_CB_SelectString CONTROL STRING
SendMessage ${CONTROL} ${CB_SELECTSTRING} -1 `STR:${STRING}`
!macroend
!define NSD_CB_SelectString "!insertmacro _NSD_CB_SelectString"
!macro _NSD_LB_AddString CONTROL STRING
SendMessage ${CONTROL} ${LB_ADDSTRING} 0 `STR:${STRING}`
!macroend
!define NSD_LB_AddString "!insertmacro _NSD_LB_AddString"
!macro __NSD_LB_DelString CONTROL STRING
SendMessage ${CONTROL} ${LB_DELETESTRING} 0 `STR:${STRING}`
!macroend
!define NSD_LB_DelString `!insertmacro __NSD_LB_DelString`
!macro __NSD_LB_Clear CONTROL VAR
SendMessage ${CONTROL} ${LB_RESETCONTENT} 0 0 ${VAR}
!macroend
!define NSD_LB_Clear `!insertmacro __NSD_LB_Clear`
!macro __NSD_LB_GetCount CONTROL VAR
SendMessage ${CONTROL} ${LB_GETCOUNT} 0 0 ${VAR}
!macroend
!define NSD_LB_GetCount `!insertmacro __NSD_LB_GetCount`
!macro _NSD_LB_SelectString CONTROL STRING
SendMessage ${CONTROL} ${LB_SELECTSTRING} -1 `STR:${STRING}`
!macroend
!define NSD_LB_SelectString "!insertmacro _NSD_LB_SelectString"
!macro __NSD_LB_GetSelection CONTROL VAR
SendMessage ${CONTROL} ${LB_GETCURSEL} 0 0 ${VAR}
System::Call 'user32::SendMessage(i ${CONTROL}, i ${LB_GETTEXT}, i ${VAR}, t .s)'
Pop ${VAR}
!macroend
!define NSD_LB_GetSelection `!insertmacro __NSD_LB_GetSelection`
!macro __NSD_LoadAndSetImage _LIHINSTMODE _IMGTYPE _LIHINSTSRC _LIFLAGS CONTROL IMAGE HANDLE
Push $0
Push $R0
StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0
!if "${_LIHINSTMODE}" == "exeresource"
System::Call 'kernel32::GetModuleHandle(i0) i.r0'
!undef _LIHINSTSRC
!define _LIHINSTSRC r0
!endif
System::Call 'user32::LoadImage(i ${_LIHINSTSRC}, ts, i ${_IMGTYPE}, i0, i0, i${_LIFLAGS}) i.r0' "${IMAGE}"
SendMessage $R0 ${STM_SETIMAGE} ${_IMGTYPE} $0
Pop $R0
Exch $0
Pop ${HANDLE}
!macroend
!macro __NSD_SetIconFromExeResource CONTROL IMAGE HANDLE
!insertmacro __NSD_LoadAndSetImage exeresource ${IMAGE_ICON} 0 ${LR_DEFAULTSIZE} "${CONTROL}" "${IMAGE}" ${HANDLE}
!macroend
!macro __NSD_SetIconFromInstaller CONTROL HANDLE
!insertmacro __NSD_SetIconFromExeResource "${CONTROL}" "#103" ${HANDLE}
!macroend
!define NSD_SetImage `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_BITMAP} 0 "${LR_LOADFROMFILE}"`
!define NSD_SetBitmap `${NSD_SetImage}`
!define NSD_SetIcon `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_ICON} 0 "${LR_LOADFROMFILE}|${LR_DEFAULTSIZE}"`
!define NSD_SetIconFromExeResource `!insertmacro __NSD_SetIconFromExeResource`
!define NSD_SetIconFromInstaller `!insertmacro __NSD_SetIconFromInstaller`
!macro __NSD_SetStretchedImage CONTROL IMAGE HANDLE
Push $0
Push $1
Push $2
Push $R0
StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0
StrCpy $1 ""
StrCpy $2 ""
System::Call '*(i, i, i, i) i.s'
Pop $0
${If} $0 <> 0
System::Call 'user32::GetClientRect(iR0, ir0)'
System::Call '*$0(i, i, i .s, i .s)'
System::Free $0
Pop $1
Pop $2
${EndIf}
System::Call 'user32::LoadImage(i0, ts, i ${IMAGE_BITMAP}, ir1, ir2, i${LR_LOADFROMFILE}) i.s' "${IMAGE}"
Pop $0
SendMessage $R0 ${STM_SETIMAGE} ${IMAGE_BITMAP} $0
Pop $R0
Pop $2
Pop $1
Exch $0
Pop ${HANDLE}
!macroend
!define NSD_SetStretchedImage `!insertmacro __NSD_SetStretchedImage`
!macro __NSD_FreeImage IMAGE
${If} ${IMAGE} <> 0
System::Call gdi32::DeleteObject(is) ${IMAGE}
${EndIf}
!macroend
!define NSD_FreeImage `!insertmacro __NSD_FreeImage`
!define NSD_FreeBitmap `${NSD_FreeImage}`
!macro __NSD_FreeIcon IMAGE
System::Call user32::DestroyIcon(is) ${IMAGE}
!macroend
!define NSD_FreeIcon `!insertmacro __NSD_FreeIcon`
!macro __NSD_ClearImage _IMGTYPE CONTROL
SendMessage ${CONTROL} ${STM_SETIMAGE} ${_IMGTYPE} 0
!macroend
!define NSD_ClearImage `!insertmacro __NSD_ClearImage ${IMAGE_BITMAP}`
!define NSD_ClearIcon `!insertmacro __NSD_ClearImage ${IMAGE_ICON}`
!define DEBUG `System::Call kernel32::OutputDebugString(ts)`
!macro __NSD_ControlCase TYPE
${Case} ${TYPE}
${NSD_Create${TYPE}} $R3u $R4u $R5u $R6u $R7
Pop $R9
${Break}
!macroend
!macro __NSD_ControlCaseEx TYPE
${Case} ${TYPE}
Call ${TYPE}
${Break}
!macroend
!macro NSD_FUNCTION_INIFILE
!insertmacro NSD_INIFILE ""
!macroend
!macro NSD_UNFUNCTION_INIFILE
!insertmacro NSD_INIFILE un.
!macroend
!macro NSD_INIFILE UNINSTALLER_FUNCPREFIX
;Functions to create dialogs based on old InstallOptions INI files
Function ${UNINSTALLER_FUNCPREFIX}CreateDialogFromINI
# $0 = ini
ReadINIStr $R0 $0 Settings RECT
${If} $R0 == ""
StrCpy $R0 1018
${EndIf}
nsDialogs::Create $R0
Pop $R9
ReadINIStr $R0 $0 Settings RTL
nsDialogs::SetRTL $R0
ReadINIStr $R0 $0 Settings NumFields
${DEBUG} "NumFields = $R0"
${For} $R1 1 $R0
${DEBUG} "Creating field $R1"
ReadINIStr $R2 $0 "Field $R1" Type
${DEBUG} " Type = $R2"
ReadINIStr $R3 $0 "Field $R1" Left
${DEBUG} " Left = $R3"
ReadINIStr $R4 $0 "Field $R1" Top
${DEBUG} " Top = $R4"
ReadINIStr $R5 $0 "Field $R1" Right
${DEBUG} " Right = $R5"
ReadINIStr $R6 $0 "Field $R1" Bottom
${DEBUG} " Bottom = $R6"
IntOp $R5 $R5 - $R3
${DEBUG} " Width = $R5"
IntOp $R6 $R6 - $R4
${DEBUG} " Height = $R6"
ReadINIStr $R7 $0 "Field $R1" Text
${DEBUG} " Text = $R7"
${Switch} $R2
!insertmacro __NSD_ControlCase HLine
!insertmacro __NSD_ControlCase VLine
!insertmacro __NSD_ControlCase Label
!insertmacro __NSD_ControlCase Icon
!insertmacro __NSD_ControlCase Bitmap
!insertmacro __NSD_ControlCaseEx Link
!insertmacro __NSD_ControlCase Button
!insertmacro __NSD_ControlCase GroupBox
!insertmacro __NSD_ControlCase CheckBox
!insertmacro __NSD_ControlCase RadioButton
!insertmacro __NSD_ControlCase Text
!insertmacro __NSD_ControlCase Password
!insertmacro __NSD_ControlCaseEx FileRequest
!insertmacro __NSD_ControlCaseEx DirRequest
!insertmacro __NSD_ControlCase ComboBox
!insertmacro __NSD_ControlCase DropList
!insertmacro __NSD_ControlCase ListBox
${EndSwitch}
WriteINIStr $0 "Field $R1" HWND $R9
${Next}
nsDialogs::Show
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}UpdateINIState
${DEBUG} "Updating INI state"
ReadINIStr $R0 $0 Settings NumFields
${DEBUG} "NumField = $R0"
${For} $R1 1 $R0
ReadINIStr $R2 $0 "Field $R1" HWND
ReadINIStr $R3 $0 "Field $R1" "Type"
${Switch} $R3
${Case} "CheckBox"
${Case} "RadioButton"
${DEBUG} " HWND = $R2"
${NSD_GetState} $R2 $R2
${DEBUG} " Window selection = $R2"
${Break}
${CaseElse}
${DEBUG} " HWND = $R2"
${NSD_GetText} $R2 $R2
${DEBUG} " Window text = $R2"
${Break}
${EndSwitch}
WriteINIStr $0 "Field $R1" STATE $R2
${Next}
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}FileRequest
IntOp $R5 $R5 - 15
IntOp $R8 $R3 + $R5
${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
Pop $R8
nsDialogs::SetUserData $R8 $R1 # remember field id
WriteINIStr $0 "Field $R1" HWND2 $R8
${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
ReadINIStr $R9 $0 "Field $R1" State
${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
Pop $R9
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}DirRequest
IntOp $R5 $R5 - 15
IntOp $R8 $R3 + $R5
${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
Pop $R8
nsDialogs::SetUserData $R8 $R1 # remember field id
WriteINIStr $0 "Field $R1" HWND2 $R8
${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
ReadINIStr $R9 $0 "Field $R1" State
${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
Pop $R9
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
Pop $R0
nsDialogs::GetUserData $R0
Pop $R1
ReadINIStr $R2 $0 "Field $R1" HWND
ReadINIStr $R4 $0 "Field $R1" Filter
${NSD_GetText} $R2 $R3
nsDialogs::SelectFileDialog save $R3 $R4
Pop $R3
${If} $R3 != ""
SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
${EndIf}
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
Pop $R0
nsDialogs::GetUserData $R0
Pop $R1
ReadINIStr $R2 $0 "Field $R1" HWND
ReadINIStr $R3 $0 "Field $R1" Text
${NSD_GetText} $R2 $R4
nsDialogs::SelectFolderDialog $R3 $R4
Pop $R3
${If} $R3 != error
SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
${EndIf}
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}Link
${NSD_CreateLink} $R3u $R4u $R5u $R6u $R7
Pop $R9
nsDialogs::SetUserData $R9 $R1 # remember field id
${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink
FunctionEnd
Function ${UNINSTALLER_FUNCPREFIX}OnLink
Pop $R0
nsDialogs::GetUserData $R0
Pop $R1
ReadINIStr $R1 $0 "Field $R1" STATE
ExecShell "" $R1
FunctionEnd
!macroend
!verbose pop
!endif

54
T7x/Include/x64.nsh Normal file
View File

@ -0,0 +1,54 @@
; ---------------------
; x64.nsh
; ---------------------
;
; A few simple macros to handle installations on x64 machines.
;
; RunningX64 checks if the installer is running on x64.
;
; ${If} ${RunningX64}
; MessageBox MB_OK "running on x64"
; ${EndIf}
;
; DisableX64FSRedirection disables file system redirection.
; EnableX64FSRedirection enables file system redirection.
;
; SetOutPath $SYSDIR
; ${DisableX64FSRedirection}
; File some.dll # extracts to C:\Windows\System32
; ${EnableX64FSRedirection}
; File some.dll # extracts to C:\Windows\SysWOW64
;
!ifndef ___X64__NSH___
!define ___X64__NSH___
!include LogicLib.nsh
!macro _RunningX64 _a _b _t _f
!insertmacro _LOGICLIB_TEMP
System::Call kernel32::GetCurrentProcess()i.s
System::Call kernel32::IsWow64Process(is,*i.s)
Pop $_LOGICLIB_TEMP
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
!macroend
!define RunningX64 `"" RunningX64 ""`
!macro DisableX64FSRedirection
System::Call kernel32::Wow64EnableWow64FsRedirection(i0)
!macroend
!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection"
!macro EnableX64FSRedirection
System::Call kernel32::Wow64EnableWow64FsRedirection(i1)
!macroend
!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection"
!endif # !___X64__NSH___

BIN
T7x/Plugins/AdvSplash.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/Banner.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/BgImage.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/Dialer.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
T7x/Plugins/LangDLL.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/Math.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/NSISdl.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/Splash.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/StartMenu.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/System.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/TypeLib.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/UserInfo.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/VPatch.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/nsDialogs.dll Normal file

Binary file not shown.

BIN
T7x/Plugins/nsExec.dll Normal file

Binary file not shown.

1
T7x/Readme.txt Normal file
View File

@ -0,0 +1 @@
This is a test

BIN
T7x/Stubs/bzip2 Normal file

Binary file not shown.

BIN
T7x/Stubs/bzip2_solid Normal file

Binary file not shown.

BIN
T7x/Stubs/lzma Normal file

Binary file not shown.

BIN
T7x/Stubs/lzma_solid Normal file

Binary file not shown.

BIN
T7x/Stubs/uninst Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

BIN
T7x/Stubs/zlib Normal file

Binary file not shown.

BIN
T7x/Stubs/zlib_solid Normal file

Binary file not shown.

View File

@ -0,0 +1,40 @@
# T7 Server Config
Config for T7 Dedicated Servers for use with the T7x Client.
# How to use
1. Download the BO3 Unranked Dedicated Server via Steam (It's located in the "Tools" section in your steam library.)
2. Open the Unranked Server folder in windows explorer (if you own BO3 on Steam and have it installed it will be in your BO3 Game Folder)
3. Add t7x.exe to the UnrankedServer Folder
4. Download this repository and extract startup batch files as well as the t7x and zone folder to the UnrankedServer Folder
5. Edit the config(s) in /zone to your liking.
6. (Optional) Edit your game rules under boiii/gamesettings/mp.
6. Port forward UDP 27017.
7. Start the Server using BOIII_MP_Server.bat or T7x_ZM_Server.bat
# Additional Steps required for hosting Zombies Dedicated Servers
As of right now you need to take additional Steps to host Zombies Servers.
For Zombie Dedis to work they need to have the Zombies Maps and common FastFiles, these do not come with the UnrankedServer Files. This means you need to copy those over from your installed BO3 game folder.
Copy common fastfiles that is needed for zombies.
```
zone/en_zm_patch.ff
zone/en_zm_common.ff
zone/zm_patch.ff
zone/zm_common.fd
zone/zm_common.ff
zone/zm_levelcommon.ff
```
Now for the map. Shadows of Evil is zm_zod.
```
zone/en_zm_zod.ff
zone/en_zm_zod_patch.ff
zone/zm_zod.ff
zone/zm_zod_patch.ff
```
from your BO3 Game folder into the UnrankedServer's ```zone``` Folder. Do the same with the FastFiles of the Maps you want to host on the Server, you do not need to copy the .xpak files, those hold Textures and Sounds which the Server doesn't need. You can use the zm_server.cfg as a short name references if you want to grab the others.
You are now ready to start the Server using T7x_ZM_Server.bat. If the server still instantly closes while opening the T7x_ZM_Server.bat or T7x_CP_Server.bat. Check the console_mp.log from identities\dedicatedpc\ folder. Scroll down until you see "Could not find zone: xxxx".

View File

@ -0,0 +1,36 @@
@echo off
::///////////////////////////////////////////////////////////////////////
::/// T7x Dedicated Server Configuration start-up file ///
::///////////////////////////////////////////////////////////////////////
::// //
::// Your Game Server Port. //
::// Make sure you Port Forward both UDP & TCP //
::///////////////////////////////////////////////////////////////////////
set GamePort=27017
::///////////////////////////////////////////////////////////////////////
::// Below edits are optional unless you run multiable servers or mods.//
::///////////////////////////////////////////////////////////////////////
::// Load a mod on your server //
::// Example: ModfolderName=mods/bots //
::// //
::// UNLOAD a mod on your server //
::// Example: ModfolderName= //
::///////////////////////////////////////////////////////////////////////
set ModFolderName=
::///////////////////////////////////////////////////////////////////////
::// Your edited server.cfg in the "zone" folder goes here... //
::// This is were you edit your hostname, rcon, inactivity, etc //
::// (Optional) //
::///////////////////////////////////////////////////////////////////////
set ServerFilename=server_cp.cfg
::///////////////////////////////////////////////////////////////////////
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
::///////////////////////////////////////////////////////////////////////
start t7x.exe -dedicated +set fs_game "%ModFolderName%" +set net_port "%GamePort%" +set logfile 2 +exec %ServerFilename%

View File

@ -0,0 +1,36 @@
@echo off
::///////////////////////////////////////////////////////////////////////
::/// T7x Dedicated Server Configuration start-up file ///
::///////////////////////////////////////////////////////////////////////
::// //
::// Your Game Server Port. //
::// Make sure you Port Forward both UDP & TCP //
::///////////////////////////////////////////////////////////////////////
set GamePort=27017
::///////////////////////////////////////////////////////////////////////
::// Below edits are optional unless you run multiable servers or mods.//
::///////////////////////////////////////////////////////////////////////
::// Load a mod on your server //
::// Example: ModfolderName=mods/bots //
::// //
::// UNLOAD a mod on your server //
::// Example: ModfolderName= //
::///////////////////////////////////////////////////////////////////////
set ModFolderName=
::///////////////////////////////////////////////////////////////////////
::// Your edited server.cfg in the "zone" folder goes here... //
::// This is were you edit your hostname, rcon, inactivity, etc //
::// (Optional) //
::///////////////////////////////////////////////////////////////////////
set ServerFilename=server.cfg
::///////////////////////////////////////////////////////////////////////
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
::///////////////////////////////////////////////////////////////////////
start t7x.exe -dedicated +set fs_game "%ModFolderName%" +set net_port "%GamePort%" +set logfile 2 +exec %ServerFilename%

View File

@ -0,0 +1,36 @@
@echo off
::///////////////////////////////////////////////////////////////////////
::/// T7x Dedicated Server Configuration start-up file ///
::///////////////////////////////////////////////////////////////////////
::// //
::// Your Game Server Port. //
::// Make sure you Port Forward both UDP & TCP //
::///////////////////////////////////////////////////////////////////////
set GamePort=27017
::///////////////////////////////////////////////////////////////////////
::// Below edits are optional unless you run multiable servers or mods.//
::///////////////////////////////////////////////////////////////////////
::// Load a mod on your server //
::// Example: ModfolderName=mods/bots //
::// //
::// UNLOAD a mod on your server //
::// Example: ModfolderName= //
::///////////////////////////////////////////////////////////////////////
set ModFolderName=
::///////////////////////////////////////////////////////////////////////
::// Your edited server.cfg in the "zone" folder goes here... //
::// This is were you edit your hostname, rcon, inactivity, etc //
::// (Optional) //
::///////////////////////////////////////////////////////////////////////
set ServerFilename=server_zm.cfg
::///////////////////////////////////////////////////////////////////////
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
::///////////////////////////////////////////////////////////////////////
start t7x.exe -dedicated +set fs_game "%ModFolderName%" +set net_port "%GamePort%" +set logfile 2 +exec %ServerFilename%

View File

@ -0,0 +1,19 @@
Snake,BOT
Diamante,BOT
Dss0,BOT
st0rm,BOT
Louvenarde,BOT
serious,BOT
JariK,BOT
xensik,BOT
Jebus3211,BOT
FragsAreUs,BOT
Fry,BOT
X3RX35,BOT
Brent,BOT
Joel,BOT
RektInator,BOT
Doctor,BOT
Jimbo,BOT
Laupetin,BOT

View File

@ -0,0 +1,16 @@
gametype_setting scorelimit 7500
gametype_setting timelimit 10
gametype_setting prematchperiod 0
gametype_setting roundlimit 1
gametype_setting playerNumlives 0
gametype_setting playerrespawndelay 0
gametype_setting waverespawndelay 0
gametype_setting disableweapondrop 1
gametype_setting allowAnnouncer 0
gametype_setting startRound 1
gametype_setting magic 1
gametype_setting headshotsonly 0
gametype_setting allowdogs 0
gametype_setting disableClassSelection 0
gametype_setting disableCompass 1
gametype_setting characterCustomization 0

Some files were not shown because too many files have changed in this diff Show More