diff options
author | Bram Moolenaar <Bram@vim.org> | 2004-06-13 20:20:40 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2004-06-13 20:20:40 +0000 |
commit | 071d4279d6ab81b7187b48f3a0fc61e587b6db6c (patch) | |
tree | 221cbe3c40e043163c06f61c52a7ba2eb41e12ce /src/os_w32exe.c | |
parent | b4210b3bc14e2918f153a7307530fbe6eba659e1 (diff) | |
download | vim-git-071d4279d6ab81b7187b48f3a0fc61e587b6db6c.tar.gz |
updated for version 7.0001v7.0001
Diffstat (limited to 'src/os_w32exe.c')
-rw-r--r-- | src/os_w32exe.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/os_w32exe.c b/src/os_w32exe.c new file mode 100644 index 000000000..e37873b76 --- /dev/null +++ b/src/os_w32exe.c @@ -0,0 +1,136 @@ +/* vi:set ts=8 sts=4 sw=4: + * + * 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 + __ARGS((int argc, char **argv)); +int (_cdecl *pmain)(int, char **); + +#ifndef PROTO +#ifdef FEAT_GUI +#ifndef VIMDLL +void _cdecl SaveInst(HINSTANCE hInst); +#endif +void (_cdecl *pSaveInst)(HINSTANCE); +#endif + + int WINAPI +WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInst, + LPSTR lpszCmdLine, + int nCmdShow) +{ + int argc; + 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); + + /* Separate the command line into arguments. */ + 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(NULL); +#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); + free(tofree); + + return 0; +} +#endif |