diff src/vimrun.c @ 7:3fc0f57ecb91 v7.0001

updated for version 7.0001
author vimboss
date Sun, 13 Jun 2004 20:20:40 +0000
parents
children e63691e7c504
line wrap: on
line diff
new file mode 100644
--- /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;
+}