/* vi:set ts=8 sts=4 sw=4 noet: * VIM_TEST_SETUP let g:c_comment_strings = 1 * * 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 # include // for cygwin_conv_to_posix_path() and/or // cygwin_conv_path() # include #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 }