mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* vi:set ts=8 sts=4 sw=4 noet:
 | ||
|  |  * | ||
|  |  * VIM - Vi IMproved	by Bram Moolenaar | ||
|  |  * | ||
|  |  * Do ":help uganda"  in Vim to read copying and usage conditions. | ||
|  |  * Do ":help credits" in Vim to see a list of people who contributed. | ||
|  |  * See README.txt for an overview of the Vim source code. | ||
|  |  */ | ||
|  | 
 | ||
|  | #define EXTERN
 | ||
|  | #include "vim.h"
 | ||
|  | 
 | ||
|  | #ifdef __CYGWIN__
 | ||
|  | # include <cygwin/version.h>
 | ||
|  | # include <sys/cygwin.h>	// for cygwin_conv_to_posix_path() and/or
 | ||
|  | 				// cygwin_conv_path()
 | ||
|  | # include <limits.h>
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
 | ||
|  | # include "iscygpty.h"
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | // Values for edit_type.
 | ||
|  | #define EDIT_NONE   0	    // no edit type yet
 | ||
|  | #define EDIT_FILE   1	    // file name argument[s] given, use argument list
 | ||
|  | #define EDIT_STDIN  2	    // read file from stdin
 | ||
|  | #define EDIT_TAG    3	    // tag name argument given, use tagname
 | ||
|  | #define EDIT_QF	    4	    // start in quickfix mode
 | ||
|  | 
 | ||
|  | #if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
 | ||
|  | static int file_owned(char *fname); | ||
|  | #endif
 | ||
|  | static void mainerr(int, char_u *); | ||
|  | static void early_arg_scan(mparm_T *parmp); | ||
|  | #ifndef NO_VIM_MAIN
 | ||
|  | static void usage(void); | ||
|  | static void parse_command_name(mparm_T *parmp); | ||
|  | static void command_line_scan(mparm_T *parmp); | ||
|  | static void check_tty(mparm_T *parmp); | ||
|  | static void read_stdin(void); | ||
|  | static void create_windows(mparm_T *parmp); | ||
|  | static void edit_buffers(mparm_T *parmp, char_u *cwd); | ||
|  | static void exe_pre_commands(mparm_T *parmp); | ||
|  | static void exe_commands(mparm_T *parmp); | ||
|  | static void source_startup_scripts(mparm_T *parmp); | ||
|  | static void main_start_gui(void); | ||
|  | static void check_swap_exists_action(void); | ||
|  | # ifdef FEAT_EVAL
 | ||
|  | static void set_progpath(char_u *argv0); | ||
|  | # endif
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Different types of error messages. | ||
|  |  */ | ||
|  | static char *(main_errors[]) = | ||
|  | { | ||
|  |     N_("Unknown option argument"), | ||
|  | #define ME_UNKNOWN_OPTION	0
 | ||
|  |     N_("Too many edit arguments"), | ||
|  | #define ME_TOO_MANY_ARGS	1
 | ||
|  |     N_("Argument missing after"), | ||
|  | #define ME_ARG_MISSING		2
 | ||
|  |     N_("Garbage after option argument"), | ||
|  | #define ME_GARBAGE		3
 | ||
|  |     N_("Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"), | ||
|  | #define ME_EXTRA_CMD		4
 | ||
|  |     N_("Invalid argument for"), | ||
|  | #define ME_INVALID_ARG		5
 | ||
|  | }; | ||
|  | 
 | ||
|  | #ifndef PROTO		// don't want a prototype for main()
 | ||
|  | 
 | ||
|  | // Various parameters passed between main() and other functions.
 | ||
|  | static mparm_T	params; | ||
|  | 
 | ||
|  | #ifdef _IOLBF
 | ||
|  | static void *s_vbuf = NULL;		// buffer for setvbuf()
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifndef NO_VIM_MAIN	// skip this for unittests
 | ||
|  | 
 | ||
|  | static char_u *start_dir = NULL;	// current working dir on startup
 | ||
|  | 
 | ||
|  | static int has_dash_c_arg = FALSE; | ||
|  | 
 | ||
|  | # ifdef VIMDLL
 | ||
|  | __declspec(dllexport) | ||
|  | # endif
 | ||
|  |     int | ||
|  | # ifdef MSWIN
 | ||
|  | VimMain | ||
|  | # else
 | ||
|  | main | ||
|  | # endif
 | ||
|  | (int argc, char **argv) | ||
|  | { | ||
|  | #if defined(STARTUPTIME) || defined(CLEAN_RUNTIMEPATH)
 | ||
|  |     int		i; | ||
|  | #endif
 | ||
|  | 
 | ||
|  |     /*
 | ||
|  |      * Do any system-specific initialisations.  These can NOT use IObuff or | ||
|  |      * NameBuff.  Thus emsg2() cannot be called! | ||
|  |      */ | ||
|  |     mch_early_init(); | ||
|  | 
 | ||
|  |     // Source startup scripts.
 | ||
|  |     source_startup_scripts(¶ms); | ||
|  | 
 | ||
|  | #if 0
 | ||
|  |     /*
 | ||
|  |      * Newer version of MzScheme (Racket) require earlier (trampolined) | ||
|  |      * initialisation via scheme_main_setup. | ||
|  |      */ | ||
|  |     return mzscheme_main(); | ||
|  | #else
 | ||
|  |     return vim_main2(); | ||
|  | #endif
 | ||
|  | } |