/* vi:set ts=8 sts=4 sw=4:
 *
 * VIM - Vi IMproved	by Bram Moolenaar
 *			this file by Vince Negri
 *
 * 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.
 */

/*
 * vimrun.c - Tiny Win32 program to safely run an external command in a
 *	      DOS console.
 *	      This program is required to avoid that typing CTRL-C in the DOS
 *	      console kills Vim.  Now it only kills vimrun.
 */

#include <stdio.h>
#include <stdlib.h>
#ifndef __CYGWIN__
# include <conio.h>
#endif

#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;

#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 == '"')
	    inquote = !inquote;
	else if (!inquote && *p == ' ')
	{
	    ++p;
	    break;
	}
	++p;
    }
    while (*p == ' ')
        ++p;

    /*
     * "-s" argument: don't wait for a key hit.
     */
    if (p[0] == '-' && p[1] == 's' && p[2] == ' ')
    {
	silent = 1;
	p += 3;
	while (*p == ' ')
	    ++p;
    }

    /* Print the command, including quotes and redirection. */
    puts(p);

    /*
     * Do it!
     */
    retval = system(p);

    if (retval == -1)
	perror("vimrun system(): ");
    else if (retval != 0)
	printf("shell returned %d\n", retval);

    if (!silent)
    {
	puts("Hit any key to close this window...");

#ifndef __CYGWIN__
	while (_kbhit())
	    (void)_getch();
#endif
	(void)_getch();
    }

    return retval;
}
