diff options
Diffstat (limited to '')
-rw-r--r-- | src/os_w32exe.c | 72 |
1 files changed, 57 insertions, 15 deletions
diff --git a/src/os_w32exe.c b/src/os_w32exe.c index c4f0294..7aa4ead 100644 --- a/src/os_w32exe.c +++ b/src/os_w32exe.c @@ -8,10 +8,10 @@ * See README.txt for an overview of the Vim source code. */ /* - * Windows GUI: main program (EXE) entry point: + * Windows GUI/Console: main program (EXE) entry point: * - * Ron Aaron <ronaharon@yahoo.com> wrote this and the (now deleted) DLL support - * code. + * Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code. + * Adapted by Ken Takata. */ #include "vim.h" @@ -20,32 +20,74 @@ __declspec(dllimport) #endif int VimMain(int argc, char **argv); -#ifndef VIMDLL + +#ifdef VIMDLL +# define SaveInst(hInst) // Do nothing +#else void SaveInst(HINSTANCE hInst); #endif -#ifndef PROTO -# ifdef FEAT_GUI +#ifdef FEAT_GUI int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInst UNUSED, LPWSTR lpszCmdLine UNUSED, int nCmdShow UNUSED) -# else +{ + SaveInst(hInstance); + return VimMain(0, NULL); +} +#else int wmain(int argc UNUSED, wchar_t **argv UNUSED) -# endif { -# ifndef VIMDLL -# ifdef FEAT_GUI - SaveInst(hInstance); -# else SaveInst(GetModuleHandleW(NULL)); -# endif -# endif + return VimMain(0, NULL); +} +#endif + +#ifdef USE_OWNSTARTUP +// Use our own entry point and don't use the default CRT startup code to +// reduce the size of (g)vim.exe. This works only when VIMDLL is defined. +// +// For MSVC, the /GS- compiler option is needed to avoid the undefined symbol +// error. (It disables the security check. However, it affects only this +// function and doesn't have any effect on Vim itself.) +// For MinGW, the -nostdlib compiler option and the --entry linker option are +// needed. +# ifdef FEAT_GUI + void WINAPI +wWinMainCRTStartup(void) +{ VimMain(0, NULL); +} +# else + void +wmainCRTStartup(void) +{ + VimMain(0, NULL); +} +# endif +#endif // USE_OWNSTARTUP + + +#if defined(VIMDLL) && defined(FEAT_MZSCHEME) - return 0; +# if defined(_MSC_VER) +static __declspec(thread) void *tls_space; +extern intptr_t _tls_index; +# elif defined(__MINGW32__) +static __thread void *tls_space; +extern intptr_t _tls_index; +# endif + +// Get TLS information that is needed for if_mzsch. + __declspec(dllexport) void +get_tls_info(void ***ptls_space, intptr_t *ptls_index) +{ + *ptls_space = &tls_space; + *ptls_index = _tls_index; + return; } #endif |