diff --git a/src/vimrun.c b/src/vimrun.c
new file mode 100644
index 0000000..fed5076
--- /dev/null
+++ b/src/vimrun.c
@@ -0,0 +1,117 @@
+/* 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;
+    }
+
+    /*
+     * "-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 != 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;
+}
