Mercurial > vim
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 } |