diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:44:24 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:44:24 +0000 |
commit | 8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8 (patch) | |
tree | 3537e168b860f2742f6029d70501b5ed7d15d345 /src/os_w32exe.c | |
parent | Initial commit. (diff) | |
download | vim-8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8.tar.xz vim-8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8.zip |
Adding upstream version 2:8.1.0875.upstream/2%8.1.0875upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/os_w32exe.c | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/os_w32exe.c b/src/os_w32exe.c new file mode 100644 index 0000000..f96bff4 --- /dev/null +++ b/src/os_w32exe.c @@ -0,0 +1,137 @@ +/* vi:set ts=8 sts=4 sw=4 noet: + * + * VIM - Vi IMproved by Bram Moolenaar + * GUI support by Robert Webb + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. + * See README.txt for an overview of the Vim source code. + */ +/* + * Windows GUI: main program (EXE) entry point: + * + * Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code. + */ +#include "vim.h" + +#ifdef __MINGW32__ +# ifndef _cdecl +# define _cdecl +# endif +#endif + +/* cproto doesn't create a prototype for main() */ +int _cdecl +#if defined(FEAT_GUI_W32) +VimMain +#else + main +#endif + (int argc, char **argv); +static int (_cdecl *pmain)(int, char **); + +#ifndef PROTO +#ifdef FEAT_GUI +#ifndef VIMDLL +void _cdecl SaveInst(HINSTANCE hInst); +#endif +static void (_cdecl *pSaveInst)(HINSTANCE); +#endif + + int WINAPI +WinMain( + HINSTANCE hInstance UNUSED, + HINSTANCE hPrevInst UNUSED, + LPSTR lpszCmdLine, + int nCmdShow UNUSED) +{ + int argc = 0; + char **argv; + char *tofree; + char prog[256]; +#ifdef VIMDLL + char *p; + HANDLE hLib; +#endif + + /* Ron: added full path name so that the $VIM variable will get set to our + * startup path (so the .vimrc file can be found w/o a VIM env. var.) */ + GetModuleFileName(NULL, prog, 255); + + argc = get_cmd_args(prog, (char *)lpszCmdLine, &argv, &tofree); + if (argc == 0) + { + MessageBox(0, "Could not allocate memory for command line.", + "VIM Error", 0); + return 0; + } + +#ifdef DYNAMIC_GETTEXT + /* Initialize gettext library */ + dyn_libintl_init(); +#endif + +#ifdef VIMDLL + // LoadLibrary - get name of dll to load in here: + p = strrchr(prog, '\\'); + if (p != NULL) + { +# ifdef DEBUG + strcpy(p+1, "vim32d.dll"); +# else + strcpy(p+1, "vim32.dll"); +# endif + } + hLib = LoadLibrary(prog); + if (hLib == NULL) + { + MessageBox(0, _("Could not load vim32.dll!"), _("VIM Error"), 0); + goto errout; + } + // fix up the function pointers +# ifdef FEAT_GUI + pSaveInst = GetProcAddress(hLib, (LPCSTR)2); +# endif + pmain = GetProcAddress(hLib, (LPCSTR)1); + if (pmain == NULL) + { + MessageBox(0, _("Could not fix up function pointers to the DLL!"), + _("VIM Error"),0); + goto errout; + } +#else +# ifdef FEAT_GUI + pSaveInst = SaveInst; +# endif + pmain = +# if defined(FEAT_GUI_W32) + //&& defined(__MINGW32__) + VimMain +# else + main +# endif + ; +#endif +#ifdef FEAT_GUI + pSaveInst( +#ifdef __MINGW32__ + GetModuleHandle(NULL) +#else + hInstance +#endif + ); +#endif + pmain(argc, argv); + +#ifdef VIMDLL + FreeLibrary(hLib); +errout: +#endif + free(argv); + if (tofree != NULL) + free(tofree); + free_cmd_argsW(); + + return 0; +} +#endif |