@@ -92,6 +92,9 @@ static char_u *start_dir = NULL; /* current working dir on startup */
9292
9393static int has_dash_c_arg = FALSE;
9494
95+ /* Various parameters passed between main() and other functions. */
96+ static mparm_T params ;
97+
9598 int
9699# ifdef VIMDLL
97100_export
106109# endif
107110(int argc , char * * argv )
108111{
109- char_u * fname = NULL ; /* file name from command line */
110- mparm_T params ; /* various parameters passed between
111- * main() and other functions. */
112112#ifdef STARTUPTIME
113113 int i ;
114114#endif
157157#endif
158158
159159#ifdef STARTUPTIME
160+ /* Need to find "--startuptime" before actually parsing arguments. */
160161 for (i = 1 ; i < argc ; ++ i )
161162 {
162163 if (STRICMP (argv [i ], "--startuptime" ) == 0 && i + 1 < argc )
241242 mch_chdir ((char * )start_dir );
242243 }
243244#endif
244- fname = alist_name (& GARGLIST [0 ]);
245+ params . fname = alist_name (& GARGLIST [0 ]);
245246 }
246247
247248#if defined(WIN32 ) && defined(FEAT_MBYTE )
263264 * Hint: to avoid this when typing a command use a forward slash.
264265 * If the cd fails, it doesn't matter.
265266 */
266- (void )vim_chdirfile (fname );
267+ (void )vim_chdirfile (params . fname );
267268 if (start_dir != NULL )
268269 mch_dirname (start_dir , MAXPATHL );
269270 }
281282 /*
282283 * When listing swap file names, don't do cursor positioning et. al.
283284 */
284- if (recoverymode && fname == NULL )
285+ if (recoverymode && params . fname == NULL )
285286 params .want_full_screen = FALSE;
286287
287288 /*
312313 if (getcwd ((char * )NameBuff , MAXPATHL ) != NULL
313314 && STRCMP (NameBuff , "/" ) == 0 )
314315 {
315- if (fname != NULL )
316- (void )vim_chdirfile (fname );
316+ if (params . fname != NULL )
317+ (void )vim_chdirfile (params . fname );
317318 else
318319 {
319320 expand_env ((char_u * )"$HOME" , NameBuff , MAXPATHL );
@@ -407,37 +408,23 @@ main
407408 * Newer version of MzScheme (Racket) require earlier (trampolined)
408409 * initialisation via scheme_main_setup.
409410 * Implement this by initialising it as early as possible
410- * and splitting off remaining Vim main into vim_main2
411+ * and splitting off remaining Vim main into vim_main2().
411412 */
412- {
413- /* Pack up preprocessed command line arguments.
414- * It is safe because Scheme does not access argc/argv. */
415- char * args [2 ];
416- args [0 ] = (char * )fname ;
417- args [1 ] = (char * )& params ;
418- return mzscheme_main (2 , args );
419- }
420- }
413+ return mzscheme_main ();
414+ #else
415+ return vim_main2 ();
421416#endif
417+ }
422418#endif /* NO_VIM_MAIN */
423419
424- /* vim_main2() needs to be produced when FEAT_MZSCHEME is defined even when
425- * NO_VIM_MAIN is defined. */
426- #ifdef FEAT_MZSCHEME
420+ /*
421+ * vim_main2() is needed for FEAT_MZSCHEME, but we define it always to keep
422+ * things simple.
423+ * It is also defined when NO_VIM_MAIN is defined, but then it's empty.
424+ */
427425 int
428- vim_main2 (int argc UNUSED , char * * argv UNUSED )
426+ vim_main2 (void )
429427{
430- # ifndef NO_VIM_MAIN
431- char_u * fname = (char_u * )argv [0 ];
432- mparm_T params ;
433-
434- memcpy (& params , argv [1 ], sizeof (params ));
435- # else
436- return 0 ;
437- }
438- # endif
439- #endif
440-
441428#ifndef NO_VIM_MAIN
442429 /* Reset 'loadplugins' for "-u NONE" before "--cmd" arguments.
443430 * Allows for setting 'loadplugins' there. */
@@ -493,7 +480,7 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
493480 * This uses the 'dir' option, therefore it must be after the
494481 * initializations.
495482 */
496- if (recoverymode && fname == NULL )
483+ if (recoverymode && params . fname == NULL )
497484 {
498485 recover_names (NULL , TRUE, 0 , NULL );
499486 mch_exit (0 );
@@ -888,16 +875,17 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
888875 */
889876 main_loop (FALSE, FALSE);
890877
878+ #endif /* NO_VIM_MAIN */
879+
891880 return 0 ;
892881}
893- #endif /* NO_VIM_MAIN */
894882#endif /* PROTO */
895883
896884/*
897885 * Initialisation shared by main() and some tests.
898886 */
899887 void
900- common_init (mparm_T * params )
888+ common_init (mparm_T * paramp )
901889{
902890
903891#ifdef FEAT_MBYTE
@@ -914,7 +902,7 @@ common_init(mparm_T *params)
914902#ifdef MAC_OS_CLASSIC
915903 /* Prepare for possibly starting GUI sometime */
916904 /* Macintosh needs this before any memory is allocated. */
917- gui_prepare (& params -> argc , params -> argv );
905+ gui_prepare (& paramp -> argc , paramp -> argv );
918906 TIME_MSG ("GUI prepared" );
919907#endif
920908
@@ -963,14 +951,14 @@ common_init(mparm_T *params)
963951 * --socketid
964952 * --windowid
965953 */
966- early_arg_scan (params );
954+ early_arg_scan (paramp );
967955
968956#ifdef FEAT_SUN_WORKSHOP
969- findYourself (params -> argv [0 ]);
957+ findYourself (paramp -> argv [0 ]);
970958#endif
971959#if defined(FEAT_GUI ) && !defined(MAC_OS_CLASSIC )
972960 /* Prepare for possibly starting GUI sometime */
973- gui_prepare (& params -> argc , params -> argv );
961+ gui_prepare (& paramp -> argc , paramp -> argv );
974962 TIME_MSG ("GUI prepared" );
975963#endif
976964
@@ -985,7 +973,7 @@ common_init(mparm_T *params)
985973 * (needed for :! to * work). mch_check_win() will also handle the -d or
986974 * -dev argument.
987975 */
988- params -> stdout_isatty = (mch_check_win (params -> argc , params -> argv ) != FAIL );
976+ paramp -> stdout_isatty = (mch_check_win (paramp -> argc , paramp -> argv ) != FAIL );
989977 TIME_MSG ("window checked" );
990978
991979 /*
0 commit comments