annotate src/dosinst.h @ 30944:109aa4913cba v9.0.0806

patch 9.0.0806: 'langmap' works differently when there are modifiers Commit: https://github.com/vim/vim/commit/49660f5139d3fd55326a54eadf6bb31a3ffec2bf Author: zeertzjq <zeertzjq@outlook.com> Date: Thu Oct 20 17:59:38 2022 +0100 patch 9.0.0806: 'langmap' works differently when there are modifiers Problem: 'langmap' works differently when there are modifiers. Solution: Only apply 'langmap' to a character where modifiers have no effect. (closes #11395, closes #11404)
author Bram Moolenaar <Bram@vim.org>
date Thu, 20 Oct 2022 19:00:04 +0200
parents 495d55210aac
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
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 /*
18174
1ec6539cef68 patch 8.1.2082: some files have a weird name to fit in 8.3 characters
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
10 * dosinst.h: Common code for dosinst.c and uninstall.c
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 7
diff changeset
12
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 #include <stdio.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include <stdlib.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 #include <string.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 #include <sys/stat.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 #include <fcntl.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 #ifndef UNIX_LINT
19380
1e78bf92f168 patch 8.2.0248: MS-Windows: dealing with deprecation is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18753
diff changeset
20 # include <io.h>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 # include <ctype.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
23 # include <direct.h>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
25 # include <windows.h>
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
26 # include <shlobj.h>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 #ifdef UNIX_LINT
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
30 // Running lint on Unix: Some things are missing.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 char *searchpath(char *name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
34 #if defined(UNIX_LINT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 # include <unistd.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 # include <errno.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 #include "version.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
41 #if defined(UNIX_LINT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 # define vim_mkdir(x, y) mkdir((char *)(x), y)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 #else
16606
7e733046db1d patch 8.1.1306: Borland support is outdated and doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 15941
diff changeset
44 # define vim_mkdir(x, y) _mkdir((char *)(x))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 #endif
2287
573da4dac306 Make the dos installer work with more compilers.
Bram Moolenaar <bram@vim.org>
parents: 2217
diff changeset
46
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
47 #define sleep(n) Sleep((n) * 1000)
2287
573da4dac306 Make the dos installer work with more compilers.
Bram Moolenaar <bram@vim.org>
parents: 2217
diff changeset
48
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
49 // ----------------------------------------
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
52 #define BUFSIZE (MAX_PATH*2) // long enough to hold a file name path
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 #define NUL 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 #define FAIL 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 #define OK 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 #ifndef FALSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 # define FALSE 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 #ifndef TRUE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 # define TRUE 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64
2449
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
65 /*
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
66 * Modern way of creating registry entries, also works on 64 bit windows when
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
67 * compiled as a 32 bit program.
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
68 */
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
69 # ifndef KEY_WOW64_64KEY
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
70 # define KEY_WOW64_64KEY 0x0100
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
71 # endif
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
72 # ifndef KEY_WOW64_32KEY
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
73 # define KEY_WOW64_32KEY 0x0200
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
74 # endif
2449
943280505f72 Fix that uninstaller isn't found on 64-bit Windows.
Bram Moolenaar <bram@vim.org>
parents: 2287
diff changeset
75
29105
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
76 #ifdef __MINGW32__
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
77 # define UNUSED __attribute__((unused))
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
78 #else
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
79 # define UNUSED
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
80 #endif
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
81
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 #define VIM_STARTMENU "Programs\\Vim " VIM_VERSION_SHORT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
84 int interactive; // non-zero when running interactively
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 * Call malloc() and exit when out of memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 static void *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 alloc(int len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 {
15941
b9098585d945 patch 8.1.0976: dosinstall still has buffer overflow problems
Bram Moolenaar <Bram@vim.org>
parents: 15892
diff changeset
92 void *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93
15941
b9098585d945 patch 8.1.0976: dosinstall still has buffer overflow problems
Bram Moolenaar <Bram@vim.org>
parents: 15892
diff changeset
94 p = malloc(len);
b9098585d945 patch 8.1.0976: dosinstall still has buffer overflow problems
Bram Moolenaar <Bram@vim.org>
parents: 15892
diff changeset
95 if (p == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 printf("ERROR: out of memory\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 exit(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 }
15941
b9098585d945 patch 8.1.0976: dosinstall still has buffer overflow problems
Bram Moolenaar <Bram@vim.org>
parents: 15892
diff changeset
100 return p;
7
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 * The toupper() in Bcc 5.5 doesn't work, use our own implementation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 mytoupper(int c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 if (c >= 'a' && c <= 'z')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 return c - 'a' + 'A';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 myexit(int n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 if (!interactive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
119 // Present a prompt, otherwise error messages can't be read.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 printf("Press Enter to continue\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 rewind(stdin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 (void)getchar();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 exit(n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
128 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 /*
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
130 * Check if this is a 64-bit OS.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 */
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
132 static BOOL
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
133 is_64bit_os(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 {
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
135 #ifdef _WIN64
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
136 return TRUE;
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
137 #else
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
138 BOOL bIsWow64 = FALSE;
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
139 LPFN_ISWOW64PROCESS pIsWow64Process;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
141 pIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
142 GetModuleHandle("kernel32"), "IsWow64Process");
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
143 if (pIsWow64Process != NULL)
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
144 pIsWow64Process(GetCurrentProcess(), &bIsWow64);
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
145 return bIsWow64;
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
146 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 static char *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 searchpath(char *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 static char widename[2 * BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 static char location[2 * BUFSIZE + 2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
155 // There appears to be a bug in FindExecutableA() on Windows NT.
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
156 // Use FindExecutableW() instead...
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
157 MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)name, -1,
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
158 (LPWSTR)widename, BUFSIZE);
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
159 if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"",
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
160 (LPWSTR)location) > (HINSTANCE)32)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 {
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
162 WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1,
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
163 (LPSTR)widename, 2 * BUFSIZE, NULL, NULL);
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
164 return widename;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 * Call searchpath() and save the result in allocated memory, or return NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 static char *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 searchpath_save(char *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 char *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 p = searchpath(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 s = alloc(strlen(p) + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 strcpy(s, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185
826
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
186
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
187 #ifndef CSIDL_COMMON_PROGRAMS
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
188 # define CSIDL_COMMON_PROGRAMS 0x0017
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
189 #endif
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
190 #ifndef CSIDL_COMMON_DESKTOPDIRECTORY
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
191 # define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
192 #endif
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 782
diff changeset
193
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 * Get the path to a requested Windows shell folder.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 * Return FAIL on error, OK on success
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 get_shell_folder_path(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 char *shell_folder_path,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 const char *shell_folder_name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 * The following code was successfully built with make_mvc.mak.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 * The resulting executable worked on Windows 95, Millennium Edition, and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 * 2000 Professional. But it was changed after testing...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 */
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
209 LPITEMIDLIST pidl = 0; // Pointer to an Item ID list allocated below
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
210 LPMALLOC pMalloc; // Pointer to an IMalloc interface
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 int csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 int alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 static int desktop_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 static int programs_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 int *pcsidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 int r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 if (strcmp(shell_folder_name, "desktop") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 pcsidl = &desktop_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 alt_csidl = CSIDL_DESKTOP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 else if (strncmp(shell_folder_name, "Programs", 8) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 pcsidl = &programs_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 csidl = CSIDL_COMMON_PROGRAMS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 alt_csidl = CSIDL_PROGRAMS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 printf("\nERROR (internal) unrecognised shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
237 // Did this stuff before, use the same ID again.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 if (*pcsidl >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 csidl = *pcsidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 retry:
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
245 // Initialize pointer to IMalloc interface
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 if (NOERROR != SHGetMalloc(&pMalloc))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 printf("\nERROR getting interface for shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
253 // Get an ITEMIDLIST corresponding to the folder code
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 if (NOERROR != SHGetSpecialFolderLocation(0, csidl, &pidl))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 if (alt_csidl < 0 || NOERROR != SHGetSpecialFolderLocation(0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 alt_csidl, &pidl))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 printf("\nERROR getting ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 csidl = alt_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
267 // Translate that ITEMIDLIST to a string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 r = SHGetPathFromIDList(pidl, shell_folder_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
270 // Free the data associated with pidl
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 pMalloc->lpVtbl->Free(pMalloc, pidl);
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
272 // Release the IMalloc interface
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 pMalloc->lpVtbl->Release(pMalloc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 if (!r)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 if (alt_csidl >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
279 // We probably get here for Windows 95: the "all users"
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
280 // desktop/start menu entry doesn't exist.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 csidl = alt_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 goto retry;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 printf("\nERROR translating ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 shell_folder_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
290 // If there is an alternative: verify we can write in this directory.
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
291 // This should cause a retry when the "all users" directory exists but we
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
292 // are a normal user and can't write there.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 if (alt_csidl >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 char tbuf[BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 FILE *fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 strcpy(tbuf, shell_folder_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 strcat(tbuf, "\\vim write test");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 fd = fopen(tbuf, "w");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 if (fd == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 csidl = alt_csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 alt_csidl = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 goto retry;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 fclose(fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 unlink(tbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 * 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
313 * write test every time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 if (*pcsidl < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 *pcsidl = csidl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 if (strncmp(shell_folder_name, "Programs\\", 9) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 strcat(shell_folder_path, shell_folder_name + 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 * List of targets. The first one (index zero) is used for the default path
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 * for the batch files.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 */
782
d20041a02ee5 updated for version 7.0228
vimboss
parents: 714
diff changeset
328 #define TARGET_COUNT 9
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
332 char *name; // Vim exe name (without .exe)
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
333 char *batname; // batch file name
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
334 char *lnkname; // shortcut file name
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
335 char *exename; // exe file name
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
336 char *exenamearg; // exe file name when using exearg
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
337 char *exearg; // argument for vim.exe or gvim.exe
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
338 char *oldbat; // path to existing xxx.bat or NULL
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
339 char *oldexe; // path to existing xxx.exe or NULL
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
340 char batpath[BUFSIZE]; // path of batch file to create; not
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
341 // created when it's empty
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 } targets[TARGET_COUNT] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 {
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
344 {"all", "batch files", NULL, NULL, NULL, NULL, NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 {"vim", "vim.bat", "Vim.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
346 "vim.exe", "vim.exe", "", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 {"gvim", "gvim.bat", "gVim.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
348 "gvim.exe", "gvim.exe", "", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 {"evim", "evim.bat", "gVim Easy.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
350 "evim.exe", "gvim.exe", "-y", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 {"view", "view.bat", "Vim Read-only.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
352 "view.exe", "vim.exe", "-R", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 {"gview", "gview.bat", "gVim Read-only.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
354 "gview.exe", "gvim.exe", "-R", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 {"vimdiff", "vimdiff.bat", "Vim Diff.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
356 "vimdiff.exe","vim.exe", "-d", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 {"gvimdiff","gvimdiff.bat", "gVim Diff.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
358 "gvimdiff.exe","gvim.exe", "-d", NULL, NULL, ""},
782
d20041a02ee5 updated for version 7.0228
vimboss
parents: 714
diff changeset
359 {"vimtutor","vimtutor.bat", "Vim tutor.lnk",
29113
495d55210aac patch 8.2.5077: various warnings from clang on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 29105
diff changeset
360 "vimtutor.bat", "vimtutor.bat", "", NULL, NULL, ""},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362
19431
9800e126eaa2 patch 8.2.0273: MS-Windows uninstall may delete wrong batch file
Bram Moolenaar <Bram@vim.org>
parents: 19380
diff changeset
363 /* Uninstall key for vim.bat, etc. */
9800e126eaa2 patch 8.2.0273: MS-Windows uninstall may delete wrong batch file
Bram Moolenaar <Bram@vim.org>
parents: 19380
diff changeset
364 #define VIMBAT_UNINSTKEY "rem # uninstall key: " VIM_VERSION_NODOT " #"
9800e126eaa2 patch 8.2.0273: MS-Windows uninstall may delete wrong batch file
Bram Moolenaar <Bram@vim.org>
parents: 19380
diff changeset
365
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 #define ICON_COUNT 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 char *(icon_names[ICON_COUNT]) =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 {"gVim " VIM_VERSION_SHORT,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 "gVim Easy " VIM_VERSION_SHORT,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 "gVim Read only " VIM_VERSION_SHORT};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 char *(icon_link_names[ICON_COUNT]) =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 {"gVim " VIM_VERSION_SHORT ".lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 "gVim Easy " VIM_VERSION_SHORT ".lnk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 "gVim Read only " VIM_VERSION_SHORT ".lnk"};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375
12626
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
376 /* This is only used for dosinst.c. */
aca41efd888c patch 8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
377 #if defined(DOSINST)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 * Run an external command and wait for it to finish.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 run_command(char *cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 char *cmd_path;
15892
e43b5e6d9190 patch 8.1.0952: compilation warnings when building the MS-Windows installer
Bram Moolenaar <Bram@vim.org>
parents: 12626
diff changeset
385 char cmd_buf[BUFSIZE * 2 + 35];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
388 // On WinNT, 'start' is a shell built-in for cmd.exe rather than an
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
389 // executable (start.exe) like in Win9x.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 cmd_path = searchpath_save("cmd.exe");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 if (cmd_path != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
393 // There is a cmd.exe, so this might be Windows NT. If it is,
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
394 // we need to call cmd.exe explicitly. If it is a later OS,
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
395 // calling cmd.exe won't hurt if it is present.
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
396 // Also, "start" on NT expects a window title argument.
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
397 // Replace the slashes with backslashes.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 while ((p = strchr(cmd_path, '/')) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 *p = '\\';
2217
120502692d82 Improve the MS-Windows installer.
Bram Moolenaar <bram@vim.org>
parents: 1222
diff changeset
400 sprintf(cmd_buf, "%s /c start \"vimcmd\" /wait %s", cmd_path, cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 free(cmd_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
405 // No cmd.exe, just make the call and let the system handle it.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 sprintf(cmd_buf, "start /w %s", cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 system(cmd_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 * Append a backslash to "name" if there isn't one yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 */
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 2475
diff changeset
415 void
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 add_pathsep(char *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 int len = strlen(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 if (len > 0 && name[len - 1] != '\\' && name[len - 1] != '/')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 strcat(name, "\\");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 * The normal chdir() does not change the default drive. This one does.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 change_drive(int drive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 char temp[3] = "-:";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 temp[0] = (char)(drive + 'A' - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 return !SetCurrentDirectory(temp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 * Change directory to "path".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 * Return 0 for success, -1 for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 mch_chdir(char *path)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
442 if (path[0] == NUL) // just checking...
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 return 0;
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
444 if (path[1] == ':') // has a drive name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 if (change_drive(mytoupper(path[0]) - 'A' + 1))
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
447 return -1; // invalid drive name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 path += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 }
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
450 if (*path == NUL) // drive name only
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 return 0;
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
452 return chdir(path); // let the normal chdir() do the rest
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 * Expand the executable name into a full path name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 static char *
29105
faf7fcd1c8d5 patch 8.2.5073: clang on MS-Windows produces warnings
Bram Moolenaar <Bram@vim.org>
parents: 19431
diff changeset
459 my_fullpath(char *buf, char *fname UNUSED, int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
461 // Only GetModuleFileName() will get the long file name path.
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
462 // GetFullPathName() may still use the short (FAT) name.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 DWORD len_read = GetModuleFileName(NULL, buf, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 return (len_read > 0 && len_read < (DWORD)len) ? buf : NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 * Remove the tail from a file or directory name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 * Puts a NUL on the last '/' or '\'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 remove_tail(char *path)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 for (i = strlen(path) - 1; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 if (path[i] == '/' || path[i] == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 path[i] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
486 char installdir[MAX_PATH-9]; // top of the installation dir, where the
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
487 // install.exe is located, E.g.:
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
488 // "c:\vim\vim60"
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
489 int runtimeidx; // index in installdir[] where "vim60" starts
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
490 char *sysdrive; // system drive or "c:\"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 * Setup for using this program.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 * Sets "installdir[]".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 do_inits(char **argv)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 {
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
499 // Find out the full path of our executable.
15941
b9098585d945 patch 8.1.0976: dosinstall still has buffer overflow problems
Bram Moolenaar <Bram@vim.org>
parents: 15892
diff changeset
500 if (my_fullpath(installdir, argv[0], sizeof(installdir)) == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 printf("ERROR: Cannot get name of executable\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 myexit(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 }
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
505 // remove the tail, the executable name "install.exe"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 remove_tail(installdir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
508 // change to the installdir
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 mch_chdir(installdir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510
18753
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
511 // Find the system drive. Only used for searching the Vim executable, not
6e3dc2d630c2 patch 8.1.2366: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18174
diff changeset
512 // very important.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 sysdrive = getenv("SYSTEMDRIVE");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 if (sysdrive == NULL || *sysdrive == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 sysdrive = "C:\\";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 }