diff --git a/Contrib/ExDLL/exdll.c b/Contrib/ExDLL/exdll.c index 231d7a85..a999380d 100644 --- a/Contrib/ExDLL/exdll.c +++ b/Contrib/ExDLL/exdll.c @@ -6,7 +6,8 @@ HINSTANCE g_hInstance; HWND g_hwndParent; void __declspec(dllexport) myFunction(HWND hwndParent, int string_size, - char *variables, stack_t **stacktop) + char *variables, stack_t **stacktop, + extra_parameters *extra) { g_hwndParent=hwndParent; diff --git a/Contrib/ExDLL/exdll.h b/Contrib/ExDLL/exdll.h index c5bd3b11..c1799365 100644 --- a/Contrib/ExDLL/exdll.h +++ b/Contrib/ExDLL/exdll.h @@ -57,6 +57,25 @@ INST_LANG, // $LANGUAGE __INST_LAST }; +typedef struct { + int autoclose; + int all_user_var; + int exec_error; + int abort; + int exec_reboot; + int reboot_called; + int cur_insttype; + int insttype_changed; + int silent; + int instdir_error; + int rtl; + int errlvl; +} exec_flags; + +typedef struct { + exec_flags *exec_flags; + int (__stdcall *ExecuteCodeSegment)(int, HWND); +} extra_parameters; // utility functions (not required but often useful) static int __stdcall popstring(char *str) diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index 6eac83e0..f0d6998c 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -26,6 +26,14 @@ static stack_t *g_st; exec_flags g_exec_flags; +struct { + exec_flags *flags; + void *ExecuteCodeSegment; +} plugin_extra_parameters = { + &g_exec_flags, + &ExecuteCodeSegment +}; + #if defined(NSIS_SUPPORT_ACTIVEXREG) || defined(NSIS_SUPPORT_CREATESHORTCUT) HRESULT g_hres; #endif @@ -924,17 +932,18 @@ static int NSISCALL ExecuteEntry(entry *entry_) } else { - void (*func)(HWND,int,char*,void*); + void (*func)(HWND,int,char*,void*,void*); func=(void*)funke; func( g_hwnd, NSIS_MAX_STRLEN, (char*)g_usrvars, #ifdef NSIS_SUPPORT_STACK - (void*)&g_st + (void*)&g_st, #else - NULL + NULL, #endif//NSIS_SUPPORT_STACK + &plugin_extra_parameters ); } } diff --git a/Source/exehead/fileform.h b/Source/exehead/fileform.h index 708fc8e8..833f9fe3 100644 --- a/Source/exehead/fileform.h +++ b/Source/exehead/fileform.h @@ -1,4 +1,5 @@ #include "config.h" +#include "../Platform.h" #ifndef _FILEFORM_H_ #define _FILEFORM_H_ @@ -462,11 +463,16 @@ typedef struct #ifdef NSIS_SUPPORT_REBOOT int exec_reboot; int reboot_called; +#else + int _; + int __; #endif int cur_insttype; int insttype_changed; #ifdef NSIS_CONFIG_SILENT_SUPPORT int silent; +#else + int ___; #endif int instdir_error; int rtl; diff --git a/TODO.txt b/TODO.txt index 83b6713c..10b29f22 100644 --- a/TODO.txt +++ b/TODO.txt @@ -9,8 +9,6 @@ NSIS * Empty subsections should not show -* More powerful plug-ins (access to ExecFunc and flags and even more) - * Option to cancel the installation process * DirShow back