diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-10 22:02:40 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-10 22:02:40 +0200 |
commit | bcc1dcc981dfc092587d4fbd1327d82a03426c57 (patch) | |
tree | 354c7b0aa4338f503ce482cb82cd83c898b76233 /src/vimrun.c | |
parent | 446a973ce3ce4988607292c0e6345db788f12c7b (diff) | |
download | vim-git-bcc1dcc981dfc092587d4fbd1327d82a03426c57.tar.gz |
patch 7.4.2195v7.4.2195
Problem: MS-Windows: The vimrun program does not support Unicode.
Solution: Use GetCommandLineW(). Cleanup old #ifdefs. (Ken Takata)
Diffstat (limited to 'src/vimrun.c')
-rw-r--r-- | src/vimrun.c | 67 |
1 files changed, 21 insertions, 46 deletions
diff --git a/src/vimrun.c b/src/vimrun.c index 0006479b0..3db80cf44 100644 --- a/src/vimrun.c +++ b/src/vimrun.c @@ -17,89 +17,66 @@ #include <stdio.h> #include <stdlib.h> -#ifndef __CYGWIN__ -# include <conio.h> +#include <conio.h> +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN #endif +#include <windows.h> #ifdef __BORLANDC__ -extern char * -#ifdef _RTLDLL -__import -#endif -_oscmd; # define _kbhit kbhit # define _getch getch -#else -# ifdef __MINGW32__ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include <windows.h> -# else -# ifdef __CYGWIN__ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include <windows.h> -# define _getch getchar -# else -extern char *_acmdln; -# endif -# endif #endif int main(void) { - const char *p; - int retval; - int inquote = 0; - int silent = 0; + const wchar_t *p; + int retval; + int inquote = 0; + int silent = 0; + HANDLE hstdout; + DWORD written; + + p = (const wchar_t *)GetCommandLineW(); -#ifdef __BORLANDC__ - p = _oscmd; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) - p = (const char *)GetCommandLine(); -# else - p = _acmdln; -# endif -#endif /* * Skip the executable name, which might be in "". */ while (*p) { - if (*p == '"') + if (*p == L'"') inquote = !inquote; - else if (!inquote && *p == ' ') + else if (!inquote && *p == L' ') { ++p; break; } ++p; } - while (*p == ' ') + while (*p == L' ') ++p; /* * "-s" argument: don't wait for a key hit. */ - if (p[0] == '-' && p[1] == 's' && p[2] == ' ') + if (p[0] == L'-' && p[1] == L's' && p[2] == L' ') { silent = 1; p += 3; - while (*p == ' ') + while (*p == L' ') ++p; } /* Print the command, including quotes and redirection. */ - puts(p); + hstdout = GetStdHandle(STD_OUTPUT_HANDLE); + WriteConsoleW(hstdout, p, wcslen(p), &written, NULL); + WriteConsoleW(hstdout, L"\r\n", 2, &written, NULL); /* * Do it! */ - retval = system(p); + retval = _wsystem(p); if (retval == -1) perror("vimrun system(): "); @@ -110,10 +87,8 @@ main(void) { puts("Hit any key to close this window..."); -#ifndef __CYGWIN__ while (_kbhit()) (void)_getch(); -#endif (void)_getch(); } |