annotate src/os_w32exe.c @ 23:3f44e9abe4ec v7.0015

updated for version 7.0015
author vimboss
date Mon, 06 Sep 2004 17:44:46 +0000
parents 3fc0f57ecb91
children 404aac550f35
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 * GUI support by Robert Webb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * Windows GUI: main program (EXE) entry point:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 * Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 #ifdef __MINGW32__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 # ifndef _cdecl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 # define _cdecl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 /* cproto doesn't create a prototype for main() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 int _cdecl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 #if defined(FEAT_GUI_W32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 VimMain
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 main
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 __ARGS((int argc, char **argv));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 int (_cdecl *pmain)(int, char **);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
33 #ifdef FEAT_MBYTE
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
34 /* The commandline arguments in UCS2. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
35 static DWORD nArgsW = 0;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
36 static LPWSTR *ArglistW = NULL;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
37 static int global_argc;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
38 static char **global_argv;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
39
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
40 static int used_file_argc = 0; /* last argument in global_argv[] used
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
41 for the argument list. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
42 static int *used_file_indexes = NULL; /* indexes in global_argv[] for
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
43 command line arguments added to
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
44 the argument list */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
45 static int used_file_count = 0; /* nr of entries in used_file_indexes */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
46 static int used_file_literal = FALSE; /* take file names literally */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
47 static int used_file_full_path = FALSE; /* file name was full path */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
48 static int used_alist_count = 0;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
49 #endif
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
50
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 #ifndef PROTO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 #ifndef VIMDLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 void _cdecl SaveInst(HINSTANCE hInst);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 void (_cdecl *pSaveInst)(HINSTANCE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 int WINAPI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 WinMain(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 HINSTANCE hInstance,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 HINSTANCE hPrevInst,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 LPSTR lpszCmdLine,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 int nCmdShow)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 {
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
66 int argc = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 char **argv;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 char *tofree;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 char prog[256];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 #ifdef VIMDLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 HANDLE hLib;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 /* Ron: added full path name so that the $VIM variable will get set to our
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 * startup path (so the .vimrc file can be found w/o a VIM env. var.) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 GetModuleFileName(NULL, prog, 255);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
79 /* Separate the command line into arguments. Use the Unicode functions
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
80 * when possible. When 'encoding' is later changed these are used to
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
81 * recode the arguments. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
82 #ifdef FEAT_MBYTE
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
83 ArglistW = CommandLineToArgvW(GetCommandLineW(), &nArgsW);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
84 if (ArglistW != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 {
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
86 argv = malloc((nArgsW + 1) * sizeof(char *));
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
87 if (argv != NULL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
88 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
89 int i;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
90
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
91 argv[argc] = NULL;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
92 argc = nArgsW;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
93 for (i = 0; i < argc; ++i)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
94 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
95 int len;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
96
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
97 WideCharToMultiByte_alloc(GetACP(), 0,
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
98 ArglistW[i], wcslen(ArglistW[i]) + 1,
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
99 (LPSTR *)&argv[i], &len, 0, 0);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
100 if (argv[i] == NULL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
101 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
102 while (i > 0)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
103 free(argv[--i]);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
104 free(argv);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
105 argc = 0;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
106 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
107 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
108 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
111 if (argc == 0)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
112 #endif
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
113 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
114 argc = get_cmd_args(prog, (char *)lpszCmdLine, &argv, &tofree);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
115 if (argc == 0)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
116 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
117 MessageBox(0, "Could not allocate memory for command line.",
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
118 "VIM Error", 0);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
119 return 0;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
120 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
121 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
122
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
123 #ifdef FEAT_MBYTE
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
124 global_argc = argc;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
125 global_argv = argv;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
126 used_file_indexes = malloc(argc * sizeof(int));
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
127 #endif
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
128
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #ifdef DYNAMIC_GETTEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 /* Initialize gettext library */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 dyn_libintl_init(NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 #ifdef VIMDLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 // LoadLibrary - get name of dll to load in here:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 p = strrchr(prog, '\\');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 # ifdef DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 strcpy(p+1, "vim32d.dll");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 strcpy(p+1, "vim32.dll");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 hLib = LoadLibrary(prog);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 if (hLib == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 MessageBox(0, _("Could not load vim32.dll!"), _("VIM Error"), 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 goto errout;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 // fix up the function pointers
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 pSaveInst = GetProcAddress(hLib, (LPCSTR)2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 pmain = GetProcAddress(hLib, (LPCSTR)1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 if (pmain == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 MessageBox(0, _("Could not fix up function pointers to the DLL!"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 _("VIM Error"),0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 goto errout;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 pSaveInst = SaveInst;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 pmain =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 # if defined(FEAT_GUI_W32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 //&& defined(__MINGW32__)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 VimMain
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 main
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 pSaveInst(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 #ifdef __MINGW32__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 GetModuleHandle(NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 hInstance
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 pmain(argc, argv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 #ifdef VIMDLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 FreeLibrary(hLib);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 errout:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 free(argv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 free(tofree);
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
192 #ifdef FEAT_MBYTE
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
193 if (ArglistW != NULL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
194 GlobalFree(ArglistW);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
195 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 #endif
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
200
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
201 #ifdef FEAT_MBYTE
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
202 /*
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
203 * Remember "name" is an argument that was added to the argument list.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
204 * This avoids that we have to re-parse the argument list when fix_arg_enc()
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
205 * is called.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
206 */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
207 void
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
208 used_file_arg(name, literal, full_path)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
209 char *name;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
210 int literal;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
211 int full_path;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
212 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
213 int i;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
214
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
215 if (used_file_indexes == NULL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
216 return;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
217 for (i = used_file_argc + 1; i < global_argc; ++i)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
218 if (STRCMP(global_argv[i], name) == 0)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
219 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
220 used_file_argc = i;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
221 used_file_indexes[used_file_count++] = i;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
222 break;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
223 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
224 used_file_literal = literal;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
225 used_file_full_path = full_path;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
226 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
227
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
228 /*
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
229 * Remember the length of the argument list as it was. If it changes then we
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
230 * leave it alone when 'encoding' is set.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
231 */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
232 void
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
233 set_alist_count(void)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
234 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
235 used_alist_count = GARGCOUNT;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
236 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
237
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
238 /*
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
239 * Fix the encoding of the command line arguments. Invoked when 'encoding'
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
240 * has been changed while starting up. Use the UCS-2 command line arguments
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
241 * and convert them to 'encoding'.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
242 */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
243 void
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
244 fix_arg_enc()
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
245 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
246 int i;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
247 int idx;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
248 char_u *str;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
249
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
250 /* Safety checks:
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
251 * - if argument count differs between the wide and non-wide argument
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
252 * list, something must be wrong.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
253 * - the file name arguments must have been located.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
254 * - the length of the argument list wasn't changed by the user.
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
255 */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
256 if (global_argc != (int)nArgsW
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
257 || ArglistW == NULL
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
258 || used_file_indexes == NULL
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
259 || used_file_count == 0
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
260 || used_alist_count != GARGCOUNT)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
261 return;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
262
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
263 /* Clear the argument list. Make room for the new arguments. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
264 alist_clear(&global_alist);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
265 if (ga_grow(&global_alist.al_ga, used_file_count) == FAIL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
266 return; /* out of memory */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
267
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
268 for (i = 0; i < used_file_count; ++i)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
269 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
270 idx = used_file_indexes[i];
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
271 str = ucs2_to_enc(ArglistW[idx], NULL);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
272 if (str != NULL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
273 alist_add(&global_alist, str, used_file_literal ? 2 : 0);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
274 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
275
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
276 if (!used_file_literal)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
277 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
278 /* Now expand wildcards in the arguments. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
279 /* Temporarily add '(' and ')' to 'isfname'. These are valid
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
280 * filename characters but are excluded from 'isfname' to make
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
281 * "gf" work on a file name in parenthesis (e.g.: see vim.h). */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
282 do_cmdline_cmd((char_u *)":let SaVe_ISF = &isf|set isf+=(,)");
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
283 alist_expand();
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
284 do_cmdline_cmd((char_u *)":let &isf = SaVe_ISF|unlet SaVe_ISF");
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
285 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
286
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
287 /* If wildcard expansion failed, we are editing the first file of the
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
288 * arglist and there is no file name: Edit the first argument now. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
289 if (curwin->w_arg_idx == 0 && curbuf->b_fname == NULL)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
290 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
291 do_cmdline_cmd((char_u *)":rewind");
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
292 if (GARGCOUNT == 1 && used_file_full_path)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
293 (void)vim_chdirfile(alist_name(&GARGLIST[0]));
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
294 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
295 }
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
296 #endif
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 7
diff changeset
297