Clean up main.c:parse_command_name

This commit is contained in:
Mitchell Rosen
2014-02-22 12:38:23 -08:00
parent 87fdb40a03
commit 19296296db

View File

@@ -70,6 +70,8 @@ static int get_number_arg __ARGS((char_u *p, int *idx, int def));
static void init_locale __ARGS((void)); static void init_locale __ARGS((void));
# endif # endif
static void parse_command_name __ARGS((mparm_T *parmp)); static void parse_command_name __ARGS((mparm_T *parmp));
static bool parse_char_i __ARGS((char_u **input, char val));
static bool parse_string __ARGS((char_u **input, char* val, int len));
static void command_line_scan __ARGS((mparm_T *parmp)); static void command_line_scan __ARGS((mparm_T *parmp));
static void init_params __ARGS((mparm_T *parmp, int argc, char **argv)); static void init_params __ARGS((mparm_T *parmp, int argc, char **argv));
static void init_startuptime __ARGS((mparm_T *parmp)); static void init_startuptime __ARGS((mparm_T *parmp));
@@ -91,7 +93,7 @@ static void main_start_gui __ARGS((void));
# if defined(HAS_SWAP_EXISTS_ACTION) # if defined(HAS_SWAP_EXISTS_ACTION)
static void check_swap_exists_action __ARGS((void)); static void check_swap_exists_action __ARGS((void));
# endif # endif
#endif #endif /* NO_VIM_MAIN */
/* /*
@@ -899,39 +901,33 @@ static void parse_command_name(parmp)
set_vim_var_string(VV_PROGNAME, initstr, -1); set_vim_var_string(VV_PROGNAME, initstr, -1);
if (TOLOWER_ASC(initstr[0]) == 'r') { if (STRNICMP(initstr, "editor", 6) == 0)
restricted = TRUE; return;
++initstr;
}
/* Use evim mode for "evim" and "egvim", not for "editor". */ if (parse_char_i(&initstr, 'r'))
if (TOLOWER_ASC(initstr[0]) == 'e' restricted = TRUE;
&& (TOLOWER_ASC(initstr[1]) == 'v'
|| TOLOWER_ASC(initstr[1]) == 'g')) { if (parse_char_i(&initstr, 'e'))
parmp->evim_mode = TRUE; parmp->evim_mode = TRUE;
++initstr;
}
/* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */ /* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */
if (TOLOWER_ASC(initstr[0]) == 'g') { if (parse_char_i(&initstr, 'g'))
main_start_gui(); main_start_gui();
}
if (STRNICMP(initstr, "view", 4) == 0) { if (parse_string(&initstr, "view", 4)) {
readonlymode = TRUE; readonlymode = TRUE;
curbuf->b_p_ro = TRUE; curbuf->b_p_ro = TRUE;
p_uc = 10000; /* don't update very often */ p_uc = 10000; /* don't update very often */
initstr += 4; } else {
} else if (STRNICMP(initstr, "vim", 3) == 0) parse_string(&initstr, "vim", 3); /* consume "vim" if it's there */
initstr += 3;
/* Catch "[r][g]vimdiff" and "[r][g]viewdiff". */
if (STRICMP(initstr, "diff") == 0) {
parmp->diff_mode = TRUE;
} }
if (STRNICMP(initstr, "ex", 2) == 0) { /* Catch "[r][g]vimdiff" and "[r][g]viewdiff". */
if (STRNICMP(initstr + 2, "im", 2) == 0) if (parse_string(&initstr, "diff", 4))
parmp->diff_mode = TRUE;
if (parse_string(&initstr, "ex", 2)) {
if (parse_string(&initstr, "im", 2))
exmode_active = EXMODE_VIM; exmode_active = EXMODE_VIM;
else else
exmode_active = EXMODE_NORMAL; exmode_active = EXMODE_NORMAL;
@@ -939,6 +935,29 @@ static void parse_command_name(parmp)
} }
} }
static bool parse_char_i(input, val)
char_u **input;
char val;
{
if (TOLOWER_ASC(**input) == val) {
*input += 1; /* or (*input)++ WITH parens */
return true;
}
return false;
}
static bool parse_string(input, val, len)
char_u **input;
char *val;
int len;
{
if (STRNICMP(*input, val, len) == 0) {
*input += len;
return true;
}
return false;
}
/* /*
* Scan the command line arguments. * Scan the command line arguments.
*/ */