mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
updated for version 7.0001
This commit is contained in:
136
src/os_w32exe.c
Normal file
136
src/os_w32exe.c
Normal file
@@ -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
|
Reference in New Issue
Block a user