annotate src/dosinst.h @ 714:0f9f4761ad9c v7.0216

updated for version 7.0216
author vimboss
date Mon, 06 Mar 2006 23:29:24 +0000
parents 3fc0f57ecb91
children d20041a02ee5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 * dosinst.h: Common code for dosinst.c and uninstal.c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
12
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
13 /* Visual Studio 2005 has 'deprecated' many of the standard CRT functions */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
14 #if _MSC_VER >= 1400
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
15 # define _CRT_SECURE_NO_DEPRECATE
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
16 # define _CRT_NONSTDC_NO_DEPRECATE
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
17 #endif
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
18
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 #include <stdio.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 #include <stdlib.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 #include <string.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 #include <sys/stat.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 #include <fcntl.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 #ifndef UNIX_LINT
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
26 # include "vimio.h"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 # include <ctype.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 # ifndef __CYGWIN__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 # include <direct.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 # if defined(_WIN64) || defined(WIN32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 # define WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 # include <windows.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 # include <shlobj.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 # include <dir.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 # include <bios.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 # include <dos.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 #ifdef UNIX_LINT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 /* Running lint on Unix: Some things are missing. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 char *searchpath(char *name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 #if defined(DJGPP) || defined(UNIX_LINT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 # include <unistd.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 # include <errno.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 #include "version.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 #if defined(DJGPP) || defined(UNIX_LINT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 # define vim_mkdir(x, y) mkdir((char *)(x), y)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 # if defined(WIN3264) && !defined(__BORLANDC__)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 # define vim_mkdir(x, y) _mkdir((char *)(x))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 # define vim_mkdir(x, y) mkdir((char *)(x))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 /* ---------------------------------------- */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 #define BUFSIZE 512 /* long enough to hold a file name path */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 #define NUL 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 #define FAIL 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 #define OK 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 #ifndef FALSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 # define FALSE 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 #ifndef TRUE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 # define TRUE 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 #define VIM_STARTMENU "Programs\\Vim " VIM_VERSION_SHORT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 int interactive; /* non-zero when running interactively */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 * Call malloc() and exit when out of memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 static void *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 alloc(int len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 char *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 s = malloc(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 if (s == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 printf("ERROR: out of memory\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 exit(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 return (void *)s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 * The toupper() in Bcc 5.5 doesn't work, use our own implementation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 mytoupper(int c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 if (c >= 'a' && c <= 'z')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 return c - 'a' + 'A';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 myexit(int n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 if (!interactive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 /* Present a prompt, otherwise error messages can't be read. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 printf("Press Enter to continue\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 rewind(stdin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 (void)getchar();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 exit(n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 #ifdef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 /* This symbol is not defined in older versions of the SDK or Visual C++ */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #ifndef VER_PLATFORM_WIN32_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 # define VER_PLATFORM_WIN32_WINDOWS 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 static DWORD g_PlatformId;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 * VER_PLATFORM_WIN32_WINDOWS (Win95).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 PlatformId(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 static int done = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 if (!done)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 OSVERSIONINFO ovi;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 ovi.dwOSVersionInfoSize = sizeof(ovi);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 GetVersionEx(&ovi);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 g_PlatformId = ovi.dwPlatformId;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 done = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 # ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 /* Borland defines its own searchpath() in dir.h */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 # include <dir.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 static char *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 searchpath(char *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 static char widename[2 * BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 static char location[2 * BUFSIZE + 2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 /* There appears to be a bug in FindExecutableA() on Windows NT.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 * Use FindExecutableW() instead... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 PlatformId();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 if (g_PlatformId == VER_PLATFORM_WIN32_NT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)name, -1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 (LPWSTR)widename, BUFSIZE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 (LPWSTR)location) > (HINSTANCE)32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 (LPSTR)widename, 2 * BUFSIZE, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 return widename;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 if (FindExecutableA((LPCTSTR)name, (LPCTSTR)"",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 (LPTSTR)location) > (HINSTANCE)32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 return location;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 * Call searchpath() and save the result in allocated memory, or return NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 static char *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 searchpath_save(char *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 char *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 p = searchpath(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 s = alloc(strlen(p) + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 strcpy(s, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 #ifdef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 * Get the path to a requested Windows shell folder.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 * Return FAIL on error, OK on success
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 get_shell_folder_path(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 char *shell_folder_path,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 const char *shell_folder_name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 * The following code was successfully built with make_mvc.mak.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 * The resulting executable worked on Windows 95, Millennium Edition, and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 * 2000 Professional. But it was changed after testing...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 LPITEMIDLIST pidl = 0; /* Pointer to an Item ID list allocated below */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 LPMALLOC pMalloc; /* Pointer to an IMalloc interface */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 int csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 int alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 static int desktop_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 static int programs_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 int *pcsidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 int r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 if (strcmp(shell_folder_name, "desktop") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 pcsidl = &desktop_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 #ifdef CSIDL_COMMON_DESKTOPDIRECTORY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 alt_csidl = CSIDL_DESKTOP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 csidl = CSIDL_DESKTOP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 else if (strncmp(shell_folder_name, "Programs", 8) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 pcsidl = &programs_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 #ifdef CSIDL_COMMON_PROGRAMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 csidl = CSIDL_COMMON_PROGRAMS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 alt_csidl = CSIDL_PROGRAMS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 csidl = CSIDL_PROGRAMS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 printf("\nERROR (internal) unrecognised shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 /* Did this stuff before, use the same ID again. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 if (*pcsidl >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 csidl = *pcsidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 retry:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 /* Initialize pointer to IMalloc interface */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 if (NOERROR != SHGetMalloc(&pMalloc))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 printf("\nERROR getting interface for shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 /* Get an ITEMIDLIST corresponding to the folder code */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 if (NOERROR != SHGetSpecialFolderLocation(0, csidl, &pidl))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 if (alt_csidl < 0 || NOERROR != SHGetSpecialFolderLocation(0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 alt_csidl, &pidl))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 printf("\nERROR getting ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 csidl = alt_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 /* Translate that ITEMIDLIST to a string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 r = SHGetPathFromIDList(pidl, shell_folder_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 /* Free the data associated with pidl */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 pMalloc->lpVtbl->Free(pMalloc, pidl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 /* Release the IMalloc interface */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 pMalloc->lpVtbl->Release(pMalloc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 if (!r)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 if (alt_csidl >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 /* We probably get here for Windows 95: the "all users"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 * desktop/start menu entry doesn't exist. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 csidl = alt_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 goto retry;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 printf("\nERROR translating ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 /* If there is an alternative: verify we can write in this directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 * This should cause a retry when the "all users" directory exists but we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 * are a normal user and can't write there. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 if (alt_csidl >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 char tbuf[BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 FILE *fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 strcpy(tbuf, shell_folder_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 strcat(tbuf, "\\vim write test");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 fd = fopen(tbuf, "w");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 if (fd == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 csidl = alt_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 goto retry;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 fclose(fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 unlink(tbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 * Keep the found csidl for next time, so that we don't have to do the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 * write test every time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 if (*pcsidl < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 *pcsidl = csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 if (strncmp(shell_folder_name, "Programs\\", 9) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 strcat(shell_folder_path, shell_folder_name + 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 * List of targets. The first one (index zero) is used for the default path
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 * for the batch files.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 #define TARGET_COUNT 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 char *name; /* Vim exe name (without .exe) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 char *batname; /* batch file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 char *lnkname; /* shortcut file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360 char *exename; /* exe file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 char *exenamearg; /* exe file name when using exearg */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 char *exearg; /* argument for vim.exe or gvim.exe */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 char *oldbat; /* path to existing xxx.bat or NULL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 char *oldexe; /* path to existing xxx.exe or NULL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 char batpath[BUFSIZE]; /* path of batch file to create; not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 created when it's empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 } targets[TARGET_COUNT] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 {"all", "batch files"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 {"vim", "vim.bat", "Vim.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 "vim.exe", "vim.exe", ""},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 {"gvim", "gvim.bat", "gVim.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 "gvim.exe", "gvim.exe", ""},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 {"evim", "evim.bat", "gVim Easy.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 "evim.exe", "gvim.exe", "-y"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 {"view", "view.bat", "Vim Read-only.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 "view.exe", "vim.exe", "-R"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 {"gview", "gview.bat", "gVim Read-only.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 "gview.exe", "gvim.exe", "-R"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 {"vimdiff", "vimdiff.bat", "Vim Diff.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 "vimdiff.exe","vim.exe", "-d"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 {"gvimdiff","gvimdiff.bat", "gVim Diff.lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 "gvimdiff.exe","gvim.exe", "-d"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 #define ICON_COUNT 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 char *(icon_names[ICON_COUNT]) =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 {"gVim " VIM_VERSION_SHORT,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 "gVim Easy " VIM_VERSION_SHORT,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 "gVim Read only " VIM_VERSION_SHORT};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 char *(icon_link_names[ICON_COUNT]) =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 {"gVim " VIM_VERSION_SHORT ".lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 "gVim Easy " VIM_VERSION_SHORT ".lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 "gVim Read only " VIM_VERSION_SHORT ".lnk"};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 /* This is only used for dosinst.c and for uninstal.c when not being able to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 * directly access registry entries. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 #if !defined(WIN3264) || defined(DOSINST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 * Run an external command and wait for it to finish.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 run_command(char *cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 char *cmd_path;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 char cmd_buf[BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 /* On WinNT, 'start' is a shell built-in for cmd.exe rather than an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 * executable (start.exe) like in Win9x. DJGPP, being a DOS program,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 * is given the COMSPEC command.com by WinNT, so we have to find
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 * cmd.exe manually and use it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 cmd_path = searchpath_save("cmd.exe");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 if (cmd_path != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 /* There is a cmd.exe, so this might be Windows NT. If it is,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 * we need to call cmd.exe explicitly. If it is a later OS,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 * calling cmd.exe won't hurt if it is present.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 * Also, "wait" on NT expects a window title argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 /* Replace the slashes with backslashes. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 while ((p = strchr(cmd_path, '/')) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 *p = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 sprintf(cmd_buf, "%s /c start \"vimcmd\" /w %s", cmd_path, cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 free(cmd_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 /* No cmd.exe, just make the call and let the system handle it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 sprintf(cmd_buf, "start /w %s", cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 system(cmd_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 * Append a backslash to "name" if there isn't one yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 add_pathsep(char *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 int len = strlen(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 if (len > 0 && name[len - 1] != '\\' && name[len - 1] != '/')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 strcat(name, "\\");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 * The normal chdir() does not change the default drive. This one does.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 /*ARGSUSED*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 change_drive(int drive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 #ifdef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 char temp[3] = "-:";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 temp[0] = (char)(drive + 'A' - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 return !SetCurrentDirectory(temp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 # ifndef UNIX_LINT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 union REGS regs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 regs.h.ah = 0x0e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 regs.h.dl = drive - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 intdos(&regs, &regs); /* set default drive */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 regs.h.ah = 0x19;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 intdos(&regs, &regs); /* get default drive */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 if (regs.h.al == drive - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 * Change directory to "path".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 * Return 0 for success, -1 for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 mch_chdir(char *path)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 if (path[0] == NUL) /* just checking... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 if (path[1] == ':') /* has a drive name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 if (change_drive(mytoupper(path[0]) - 'A' + 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 return -1; /* invalid drive name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 path += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 if (*path == NUL) /* drive name only */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 return chdir(path); /* let the normal chdir() do the rest */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 * Expand the executable name into a full path name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 #if defined(__BORLANDC__) && !defined(WIN3264)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 /* Only Borland C++ has this. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 # define my_fullpath(b, n, l) _fullpath(b, n, l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 static char *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 my_fullpath(char *buf, char *fname, int len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 # ifdef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 /* Only GetModuleFileName() will get the long file name path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 * GetFullPathName() may still use the short (FAT) name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 DWORD len_read = GetModuleFileName(NULL, buf, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 return (len_read > 0 && len_read < (DWORD)len) ? buf : NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 char olddir[BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 char *p, *q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 char *retval = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 if (strchr(fname, ':') != NULL) /* allready expanded */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 strncpy(buf, fname, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 *buf = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 * change to the directory for a moment,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 * and then do the getwd() (and get back to where we were).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 * This will get the correct path name with "../" things.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 p = strrchr(fname, '/');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 q = strrchr(fname, '\\');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 if (q != NULL && (p == NULL || q > p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 p = q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 q = strrchr(fname, ':');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 if (q != NULL && (p == NULL || q > p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 p = q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 if (getcwd(olddir, BUFSIZE) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 p = NULL; /* can't get current dir: don't chdir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 retval = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 if (p == fname) /* /fname */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 q = p + 1; /* -> / */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 else if (q + 1 == p) /* ... c:\foo */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 q = p + 1; /* -> c:\ */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 else /* but c:\foo\bar */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 q = p; /* -> c:\foo */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 c = *q; /* truncate at start of fname */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 *q = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 if (mch_chdir(fname)) /* change to the directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 retval = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 fname = q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 if (c == '\\') /* if we cut the name at a */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 fname++; /* '\', don't add it again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 *q = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 if (getcwd(buf, len) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 retval = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 *buf = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 * Concatenate the file name to the path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 if (strlen(buf) + strlen(fname) >= len - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 printf("ERROR: File name too long!\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 myexit(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 add_pathsep(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 strcat(buf, fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 if (p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 mch_chdir(olddir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 /* Replace forward slashes with backslashes, required for the path to a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 * command. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 while ((p = strchr(buf, '/')) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 *p = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 * Remove the tail from a file or directory name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 * Puts a NUL on the last '/' or '\'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 remove_tail(char *path)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 for (i = strlen(path) - 1; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 if (path[i] == '/' || path[i] == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 path[i] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 char installdir[BUFSIZE]; /* top of the installation dir, where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 install.exe is located, E.g.:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 "c:\vim\vim60" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 int runtimeidx; /* index in installdir[] where "vim60" starts */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 char *sysdrive; /* system drive or "c:\" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 * Setup for using this program.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 * Sets "installdir[]".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 do_inits(char **argv)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 #ifdef DJGPP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 * Use Long File Names by default, if $LFN not set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 if (getenv("LFN") == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 putenv("LFN=y");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 /* Find out the full path of our executable. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 if (my_fullpath(installdir, argv[0], BUFSIZE) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 printf("ERROR: Cannot get name of executable\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 myexit(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 /* remove the tail, the executable name "install.exe" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 remove_tail(installdir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 /* change to the installdir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 mch_chdir(installdir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 /* Find the system drive. Only used for searching the Vim executable, not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 * very important. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 sysdrive = getenv("SYSTEMDRIVE");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 if (sysdrive == NULL || *sysdrive == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 sysdrive = "C:\\";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 }