comparison 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
comparison
equal deleted inserted replaced
6:c2daee826b8f 7:3fc0f57ecb91
1 /* vi:set ts=8 sts=4 sw=4:
2 *
3 * VIM - Vi IMproved by Bram Moolenaar
4 * this file by Vince Negri
5 *
6 * Do ":help uganda" in Vim to read copying and usage conditions.
7 * Do ":help credits" in Vim to see a list of people who contributed.
8 * See README.txt for an overview of the Vim source code.
9 */
10
11 /*
12 * vimrun.c - Tiny Win32 program to safely run an external command in a
13 * DOS console.
14 * This program is required to avoid that typing CTRL-C in the DOS
15 * console kills Vim. Now it only kills vimrun.
16 */
17
18 #include <stdio.h>
19 #include <stdlib.h>
20 #ifndef __CYGWIN__
21 # include <conio.h>
22 #endif
23
24 #ifdef __BORLANDC__
25 extern char *
26 #ifdef _RTLDLL
27 __import
28 #endif
29 _oscmd;
30 # define _kbhit kbhit
31 # define _getch getch
32 #else
33 # ifdef __MINGW32__
34 # ifndef WIN32_LEAN_AND_MEAN
35 # define WIN32_LEAN_AND_MEAN
36 # endif
37 # include <windows.h>
38 # else
39 # ifdef __CYGWIN__
40 # ifndef WIN32_LEAN_AND_MEAN
41 # define WIN32_LEAN_AND_MEAN
42 # endif
43 # include <windows.h>
44 # define _getch getchar
45 # else
46 extern char *_acmdln;
47 # endif
48 # endif
49 #endif
50
51 int
52 main(void)
53 {
54 const char *p;
55 int retval;
56 int inquote = 0;
57 int silent = 0;
58
59 #ifdef __BORLANDC__
60 p = _oscmd;
61 #else
62 # if defined(__MINGW32__) || defined(__CYGWIN__)
63 p = (const char *)GetCommandLine();
64 # else
65 p = _acmdln;
66 # endif
67 #endif
68 /*
69 * Skip the executable name, which might be in "".
70 */
71 while (*p)
72 {
73 if (*p == '"')
74 inquote = !inquote;
75 else if (!inquote && *p == ' ')
76 {
77 ++p;
78 break;
79 }
80 ++p;
81 }
82
83 /*
84 * "-s" argument: don't wait for a key hit.
85 */
86 if (p[0] == '-' && p[1] == 's' && p[2] == ' ')
87 {
88 silent = 1;
89 p += 3;
90 while (*p == ' ')
91 ++p;
92 }
93
94 /* Print the command, including quotes and redirection. */
95 puts(p);
96
97 /*
98 * Do it!
99 */
100 retval = system(p);
101
102 if (retval != 0)
103 printf("shell returned %d\n", retval);
104
105 if (!silent)
106 {
107 puts("Hit any key to close this window...");
108
109 #ifndef __CYGWIN__
110 while (_kbhit())
111 (void)_getch();
112 #endif
113 (void)_getch();
114 }
115
116 return retval;
117 }