2003-11-19 04:38:14 +00:00
/*
2002-08-02 10:01:35 +00:00
Copyright ( c ) 2002 Robert Rainwater
2004-01-01 17:39:21 +00:00
Contributors : Justin Frankel , Fritz Elfert , Amir Szekely , Sunil Kamath , Joost Verburg
2002-08-02 10:01:35 +00:00
This software is provided ' as - is ' , without any express or implied
warranty . In no event will the authors be held liable for any damages
arising from the use of this software .
Permission is granted to anyone to use this software for any purpose ,
including commercial applications , and to alter it and redistribute it
freely , subject to the following restrictions :
1. The origin of this software must not be misrepresented ; you must not
claim that you wrote the original software . If you use this software
in a product , an acknowledgment in the product documentation would be
appreciated but is not required .
2. Altered source versions must be plainly marked as such , and must not be
misrepresented as being the original software .
3. This notice may not be removed or altered from any source distribution .
2010-03-24 17:22:56 +00:00
Unicode support by Jim Park - - 08 / 10 / 2007
2002-08-02 10:01:35 +00:00
*/
# ifndef MAKENSIS_H
# define MAKENSIS_H
2005-05-12 16:49:50 +00:00
# define _WIN32_IE 0x0400
2012-10-13 01:47:50 +00:00
# include "../../Source/Platform.h"
2005-05-12 16:49:50 +00:00
# include <windows.h>
2002-08-02 10:01:35 +00:00
# include <commctrl.h>
2002-09-19 22:38:46 +00:00
# include "utils.h"
2002-08-02 10:01:35 +00:00
# define _RICHEDIT_VER 0x0200
2002-11-15 19:17:15 +00:00
# include <richedit.h>
2002-08-02 10:01:35 +00:00
# undef _RICHEDIT_VER
2018-11-04 21:25:52 +00:00
# define DpiAwarePerMonitor2() ( FALSE ) // Not yet
# define DpiAwarePerMonitor() ( FALSE )
# define SupportsWNT4() ( sizeof(void*) == 4 && !DpiAwarePerMonitor() ) // NT4 does not support the MultiMon API
# define SupportsW9X() ( sizeof(TCHAR) == 1 )
# define SupportsW95() ( FALSE && SupportsW9X() && !DpiAwarePerMonitor() )
2018-11-11 22:05:32 +00:00
// Defines
2020-07-31 20:07:43 +00:00
# define NSIS_URL "https: //nsis.sourceforge.io/"
2015-09-07 21:31:50 +00:00
# define NSIS_FORUM_URL "http: //forums.winamp.com/forumdisplay.php?forumid=65"
2020-07-31 20:07:43 +00:00
# define NSIS_UC_URL "https: //nsis.sourceforge.io/update.php?version="
# define NSIS_DL_URL "https: //nsis.sourceforge.io/download/"
2019-10-23 02:50:39 +00:00
# ifdef UNICODE
2020-04-21 18:53:55 +00:00
# define USAGE _T("Usage:\r\n\r\n \x2022 File \x203a Load Script...\r\n \x2022 Drag the .nsi file into this window\r\n \x2022 Right click the .nsi file and choose \"Compile NSIS Script\"\r\n")
2019-10-23 02:50:39 +00:00
# else
2020-04-21 18:53:55 +00:00
# define USAGE _T("Usage:\r\n\r\n - File | Load Script...\r\n - Drag the .nsi file into this window\r\n - Right click the .nsi file and choose \"Compile NSIS Script\"\r\n")
2019-10-23 02:50:39 +00:00
# endif
2012-10-13 01:47:50 +00:00
# define COPYRIGHT _T("Copyright (C) 2002 Robert Rainwater")
2013-05-26 19:47:22 +00:00
# define CONTRIB _T("Fritz Elfert, Justin Frankel, Amir Szekely, Sunil Kamath, Joost Verburg, Anders Kjersem")
2018-11-11 22:05:32 +00:00
# define DONATE _T("<A ID=\"D\">Donate< / A> to support NSIS development.")
# define DONATEURL { 'h'|x,'t','t'|x,'p',':'|x,' / '|x,' / '|x,'n'|x,'s'|x,'i'|x,'s'|x,'.'|x,'s'|x,'f'|x,'.','n'|x,'e'|x,'t'|x,' / '|x,'r',' / '|x,'D'|x,'o'|x,'n'|x,'a'|x,'t'|x,'e'|x,'\0' } // "Encrypted"
2020-07-31 20:07:43 +00:00
# define DOCPATH "https: //nsis.sourceforge.io/Docs/"
2010-03-24 17:22:56 +00:00
# define LOCALDOCS _T("\\NSIS.chm")
2013-05-26 19:47:22 +00:00
# define ERRBOXTITLE 0 //_T("Error")
2015-09-07 21:31:50 +00:00
# define NSISERROR _T("Unable to intialize MakeNSIS. Please verify that makensis.exe is in the same directory as makensisw.exe.")
2010-03-24 17:22:56 +00:00
# define DLGERROR _T("Unable to intialize MakeNSISW.")
# define SYMBOLSERROR _T("Symbol cannot contain whitespace characters")
# define MULTIDROPERROR _T("Dropping more than one script at a time is not supported")
# define NSISUPDATEPROMPT _T("Running NSIS Update will close MakeNSISW.\nContinue?")
2007-01-24 12:51:26 +00:00
# define REGSEC HKEY_CURRENT_USER
# define REGSECDEF HKEY_LOCAL_MACHINE
2010-03-24 17:22:56 +00:00
# define REGKEY _T("Software\\NSIS")
# define REGLOC _T("MakeNSISWPlacement")
2013-06-08 18:48:38 +00:00
# define REGVERBOSITY _T("MakeNSISWVerbosity")
2010-03-24 17:22:56 +00:00
# define REGCOMPRESSOR _T("MakeNSISWCompressor")
2019-10-13 16:49:35 +00:00
# define REGCOLORIZE _T("MakeNSISWColorize")
2010-03-24 17:22:56 +00:00
# define REGSYMSUBKEY _T("Symbols")
# define REGMRUSUBKEY _T("MRU")
# define EXENAME _T("makensis.exe")
2003-05-08 16:41:07 +00:00
# define MAX_STRING 256
# define TIMEOUT 100
2018-11-06 21:04:37 +00:00
# define MINWIDTH 400
# define MINHEIGHT 220
2010-03-24 17:22:56 +00:00
# define COMPRESSOR_MESSAGE _T("\n\nThe %s compressor created the smallest installer (%d bytes).")
# define RESTORED_COMPRESSOR_MESSAGE _T("\n\nThe %s compressor created the smallest installer (%d bytes).")
# define EXE_HEADER_COMPRESSOR_STAT _T("EXE header size:")
# define TOTAL_SIZE_COMPRESSOR_STAT _T("Total size:")
# define LOAD_SYMBOL_SET_DLG_NAME _T("Load Symbol Definitions Set")
# define SAVE_SYMBOL_SET_DLG_NAME _T("Save Symbol Definitions Set")
# define LOAD_BUTTON_TEXT _T("Load")
# define SAVE_BUTTON_TEXT _T("Save")
# define LOAD_SYMBOL_SET_MESSAGE _T("Please select a name for the Symbol Definitions Set to load.")
# define SAVE_SYMBOL_SET_MESSAGE _T("Please enter or select a name for the Symbol Definitions Set to save.")
2002-08-02 10:01:35 +00:00
# define WM_MAKENSIS_PROCESSCOMPLETE (WM_USER+1001)
2003-12-30 19:43:15 +00:00
# define WM_MAKENSIS_LOADSYMBOLSET (WM_USER+1002)
# define WM_MAKENSIS_SAVESYMBOLSET (WM_USER+1003)
2018-11-07 00:26:29 +00:00
# define WM_MAKENSIS_UPDATEUISTATE (WM_USER+1004)
2002-08-02 10:01:35 +00:00
2013-03-14 18:00:00 +00:00
namespace MakensisAPI {
extern const TCHAR * SigintEventNameFmt ;
extern const TCHAR * SigintEventNameLegacy ;
2020-04-20 17:21:04 +00:00
enum datatransfer_e {
2013-03-14 18:00:00 +00:00
NOTIFY_SCRIPT ,
NOTIFY_WARNING ,
NOTIFY_ERROR ,
2020-04-20 17:21:04 +00:00
NOTIFY_OUTPUT ,
PROMPT_FILEPATH
2013-03-14 18:00:00 +00:00
} ;
2013-05-04 13:32:47 +00:00
enum sndmsg_e {
QUERYHOST = WM_APP
} ;
enum QUERYHOST_e {
2020-04-20 17:21:04 +00:00
QH_OUTPUTCHARSET = 1 ,
QH_ENABLESTDERR ,
QH_SUPPORTEDVERSION
2013-05-04 13:32:47 +00:00
} ;
2020-04-20 17:21:04 +00:00
typedef struct {
unsigned char Platform ;
unsigned char Reserved ;
TCHAR Path [ 1 ] ;
} PROMPT_FILEPATH_DATA ;
2013-03-14 18:00:00 +00:00
}
2002-12-24 20:35:26 +00:00
2003-05-28 04:51:20 +00:00
typedef enum {
2007-04-10 19:48:54 +00:00
COMPRESSOR_NONE_SELECTED = - 1 ,
COMPRESSOR_SCRIPT = 0 ,
2003-05-28 04:51:20 +00:00
COMPRESSOR_ZLIB ,
2005-04-23 20:26:11 +00:00
COMPRESSOR_ZLIB_SOLID ,
2003-11-19 04:38:14 +00:00
COMPRESSOR_BZIP2 ,
2005-04-23 20:26:11 +00:00
COMPRESSOR_BZIP2_SOLID ,
2003-11-24 16:51:39 +00:00
COMPRESSOR_LZMA ,
2005-04-23 20:26:11 +00:00
COMPRESSOR_LZMA_SOLID ,
2003-11-20 17:48:20 +00:00
COMPRESSOR_BEST ,
2003-05-28 04:51:20 +00:00
} NCOMPRESSOR ;
2003-11-19 04:38:14 +00:00
2003-11-24 16:51:39 +00:00
# ifdef MAKENSISW_CPP
2011-11-09 18:12:57 +00:00
const TCHAR * compressor_names [ ] = { _T ( " " ) ,
2010-03-24 17:22:56 +00:00
_T ( " zlib " ) ,
_T ( " /SOLID zlib " ) ,
_T ( " bzip2 " ) ,
_T ( " /SOLID bzip2 " ) ,
_T ( " lzma " ) ,
_T ( " /SOLID lzma " ) ,
_T ( " Best " ) } ;
2011-11-09 18:12:57 +00:00
const TCHAR * compressor_display_names [ ] = { _T ( " Defined in Script/Compiler Default " ) ,
2010-03-24 17:22:56 +00:00
_T ( " ZLIB " ) ,
_T ( " ZLIB (solid) " ) ,
_T ( " BZIP2 " ) ,
_T ( " BZIP2 (solid) " ) ,
_T ( " LZMA " ) ,
_T ( " LZMA (solid) " ) ,
_T ( " Best Compressor " ) } ;
2016-03-07 14:34:21 +00:00
const WORD compressor_commands [ ] = { IDM_COMPRESSOR_SCRIPT ,
2003-11-24 16:51:39 +00:00
IDM_ZLIB ,
2005-04-23 20:26:11 +00:00
IDM_ZLIB_SOLID ,
2003-11-24 16:51:39 +00:00
IDM_BZIP2 ,
2005-04-23 20:26:11 +00:00
IDM_BZIP2_SOLID ,
2003-11-24 16:51:39 +00:00
IDM_LZMA ,
2005-04-23 20:26:11 +00:00
IDM_LZMA_SOLID ,
2003-11-24 16:51:39 +00:00
IDM_BEST } ;
# endif
# ifdef TOOLBAR_CPP
2005-04-23 20:26:11 +00:00
int compressor_bitmaps [ ] = { IDB_COMPRESSOR_SCRIPT ,
IDB_COMPRESSOR_ZLIB ,
IDB_COMPRESSOR_ZLIB ,
IDB_COMPRESSOR_BZIP2 ,
IDB_COMPRESSOR_BZIP2 ,
IDB_COMPRESSOR_LZMA ,
IDB_COMPRESSOR_LZMA ,
2003-11-24 16:51:39 +00:00
IDB_COMPRESSOR_BEST } ;
2005-04-23 20:26:11 +00:00
int compressor_strings [ ] = { IDS_SCRIPT ,
IDS_ZLIB ,
IDS_ZLIB_SOLID ,
IDS_BZIP2 ,
IDS_BZIP2_SOLID ,
IDS_LZMA ,
IDS_LZMA_SOLID ,
2003-11-24 16:51:39 +00:00
IDS_BEST } ;
# endif
2002-08-02 10:01:35 +00:00
// Extern Variables
2004-01-01 17:39:21 +00:00
2010-03-24 17:22:56 +00:00
extern const TCHAR * NSISW_VERSION ;
2018-11-04 21:25:52 +00:00
extern void * g_ModalDlgData ;
2002-08-02 10:01:35 +00:00
2015-09-07 21:31:50 +00:00
DWORD WINAPI MakeNSISProc ( LPVOID TreadParam ) ;
2013-05-26 19:47:22 +00:00
INT_PTR CALLBACK DialogProc ( HWND hwndDlg , UINT uMsg , WPARAM wParam , LPARAM lParam ) ;
2018-11-04 21:25:52 +00:00
typedef struct {
enum { TID_HEADER = 1 } ;
HFONT hHeaderFont , hFont , hBoldFont ;
INT AnimPos , AnimDir ;
UINT AnimSpeed , FinalHeaderPos ;
} ABOUTDLGDATA ;
INT_PTR ShowAboutDialog ( HWND hwndOwner ) ;
2013-05-26 19:47:22 +00:00
INT_PTR CALLBACK SettingsProc ( HWND hwndDlg , UINT msg , WPARAM wParam , LPARAM lParam ) ;
2018-11-04 21:25:52 +00:00
typedef struct {
void * pOldMDD ;
BOOL LoadingMode ;
} SYMSETDLGDATA ;
INT_PTR ShowSymbolSetDialog ( HWND hwndOwner , BOOL LoadingSet ) ;
2013-05-26 19:47:22 +00:00
INT_PTR CALLBACK CompressorProc ( HWND hwndDlg , UINT msg , WPARAM wParam , LPARAM lParam ) ;
2010-03-24 17:22:56 +00:00
void SetScript ( const TCHAR * script , bool clearArgs = true ) ;
2003-05-08 16:41:07 +00:00
void CompileNSISScript ( ) ;
2010-03-24 17:22:56 +00:00
TCHAR * BuildSymbols ( ) ;
2003-11-19 04:38:14 +00:00
void SetCompressor ( NCOMPRESSOR ) ;
2003-12-30 19:43:15 +00:00
void RestoreSymbols ( ) ;
void SaveSymbols ( ) ;
2015-09-28 16:08:54 +00:00
void FreeSymbolSet ( TCHAR * * ) ;
void DeleteSymbolSet ( const TCHAR * ) ;
TCHAR * * LoadSymbolSet ( const TCHAR * ) ;
void SaveSymbolSet ( const TCHAR * , TCHAR * * ) ;
2003-08-12 17:57:14 +00:00
void RestoreMRUList ( ) ;
void SaveMRUList ( ) ;
2002-08-02 10:01:35 +00:00
2002-10-09 20:41:37 +00:00
typedef struct NSISScriptData {
2010-03-24 17:22:56 +00:00
TCHAR * script ;
2007-04-18 18:19:02 +00:00
HGLOBAL script_cmd_args ;
2010-03-24 17:22:56 +00:00
TCHAR * compile_command ;
TCHAR * output_exe ;
TCHAR * input_script ;
TCHAR * branding ;
2010-05-05 14:14:48 +00:00
char * brandingv ;
2010-03-24 17:22:56 +00:00
TCHAR * * symbols ;
2003-05-08 16:41:07 +00:00
int retcode ;
2013-06-08 18:48:38 +00:00
bool userSelectCompressor ;
unsigned char verbosity ;
2003-05-08 16:41:07 +00:00
DWORD logLength ;
DWORD warnings ;
HINSTANCE hInstance ;
HWND hwnd ;
HMENU menu ;
2003-08-23 04:34:31 +00:00
HMENU fileSubmenu ;
HMENU editSubmenu ;
HMENU toolsSubmenu ;
2003-05-08 16:41:07 +00:00
HANDLE thread ;
2006-03-06 15:15:49 +00:00
HANDLE sigint_event ;
2013-03-14 18:00:00 +00:00
HANDLE sigint_event_legacy ;
2003-05-08 16:41:07 +00:00
HWND focused_hwnd ;
2003-11-25 21:06:37 +00:00
NCOMPRESSOR default_compressor ;
2003-05-28 04:51:20 +00:00
NCOMPRESSOR compressor ;
2011-11-09 18:12:57 +00:00
LPCTSTR compressor_name ;
2010-03-24 17:22:56 +00:00
TCHAR compressor_stats [ 512 ] ;
2011-11-09 18:12:57 +00:00
LPCTSTR best_compressor_name ;
2003-11-11 13:43:59 +00:00
// Added by Darren Owen (DrO) on 1/10/2003
int recompile_test ;
2002-10-09 20:41:37 +00:00
} NSCRIPTDATA ;
2005-06-19 10:56:42 +00:00
extern NSCRIPTDATA g_sdata ;
2002-10-09 20:41:37 +00:00
typedef struct ResizeData {
2003-05-08 16:41:07 +00:00
RECT resizeRect ;
RECT griprect ;
int dx ;
int dy ;
2019-05-23 21:58:23 +00:00
UINT bottompanelsize ;
2002-10-09 20:41:37 +00:00
} NRESIZEDATA ;
typedef struct FindReplaceDialog {
2003-05-08 16:41:07 +00:00
FINDREPLACE fr ;
UINT uFindReplaceMsg ;
HWND hwndFind ;
2002-10-09 20:41:37 +00:00
} NFINDREPLACE ;
typedef struct ToolTipStruct {
2003-05-08 16:41:07 +00:00
HWND tip ;
HWND tip_p ;
HHOOK hook ;
2002-10-09 20:41:37 +00:00
} NTOOLTIP ;
2007-03-11 15:58:46 +00:00
# endif