diff src/eval.c @ 18:293621502c4d v7.0010

updated for version 7.0010
author vimboss
date Sun, 18 Jul 2004 21:34:53 +0000
parents 3ba373b54370
children a81bc802c17c
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -263,6 +263,7 @@ static void f_bufname __ARGS((VAR argvar
 static void f_bufnr __ARGS((VAR argvars, VAR retvar));
 static void f_bufwinnr __ARGS((VAR argvars, VAR retvar));
 static void f_byte2line __ARGS((VAR argvars, VAR retvar));
+static void f_byteidx __ARGS((VAR argvars, VAR retvar));
 static void f_char2nr __ARGS((VAR argvars, VAR retvar));
 static void f_cindent __ARGS((VAR argvars, VAR retvar));
 static void f_col __ARGS((VAR argvars, VAR retvar));
@@ -349,6 +350,7 @@ static void f_remote_foreground __ARGS((
 static void f_remote_peek __ARGS((VAR argvars, VAR retvar));
 static void f_remote_read __ARGS((VAR argvars, VAR retvar));
 static void f_remote_send __ARGS((VAR argvars, VAR retvar));
+static void f_repeat __ARGS((VAR argvars, VAR retvar));
 static void f_server2client __ARGS((VAR argvars, VAR retvar));
 static void f_serverlist __ARGS((VAR argvars, VAR retvar));
 static void f_setline __ARGS((VAR argvars, VAR retvar));
@@ -2817,6 +2819,7 @@ static struct fst
     {"bufnr",		1, 1, f_bufnr},
     {"bufwinnr",	1, 1, f_bufwinnr},
     {"byte2line",	1, 1, f_byte2line},
+    {"byteidx",		2, 2, f_byteidx},
     {"char2nr",		1, 1, f_char2nr},
     {"cindent",		1, 1, f_cindent},
     {"col",		1, 1, f_col},
@@ -2896,6 +2899,7 @@ static struct fst
     {"remote_read",	1, 1, f_remote_read},
     {"remote_send",	2, 3, f_remote_send},
     {"rename",		2, 2, f_rename},
+    {"repeat",		2, 2, f_repeat},
     {"resolve",		1, 1, f_resolve},
     {"search",		1, 2, f_search},
     {"searchpair",	3, 5, f_searchpair},
@@ -3588,6 +3592,42 @@ f_byte2line(argvars, retvar)
 }
 
 /*
+ * "byteidx()" function
+ */
+/*ARGSUSED*/
+    static void
+f_byteidx(argvars, retvar)
+    VAR		argvars;
+    VAR		retvar;
+{
+#ifdef FEAT_MBYTE
+    char_u	*t;
+#endif
+    char_u	*str;
+    long	idx;
+
+    str = get_var_string(&argvars[0]);
+    idx = get_var_number(&argvars[1]);
+    retvar->var_val.var_number = -1;
+    if (idx < 0)
+	return;
+
+#ifdef FEAT_MBYTE
+    t = str;
+    for ( ; idx > 0; idx--)
+    {
+	if (*t == NUL)		/* EOL reached */
+	    return;
+	t += mb_ptr2len_check(t);
+    }
+    retvar->var_val.var_number = t - str;
+#else
+    if (idx <= STRLEN(str))
+	retvar->var_val.var_number = idx;
+#endif
+}
+
+/*
  * "char2nr(string)" function
  */
     static void
@@ -6920,6 +6960,45 @@ f_remote_foreground(argvars, retvar)
 #endif
 }
 
+/*
+ * "repeat()" function
+ */
+/*ARGSUSED*/
+    static void
+f_repeat(argvars, retvar)
+    VAR		argvars;
+    VAR		retvar;
+{
+    char_u	*p;
+    int		n;
+    int		slen;
+    int		len;
+    char_u	*r;
+    int		i;
+
+    p = get_var_string(&argvars[0]);
+    n = get_var_number(&argvars[1]);
+
+    retvar->var_type = VAR_STRING;
+    retvar->var_val.var_string = NULL;
+
+    slen = (int)STRLEN(p);
+    len = slen * n;
+
+    if (len <= 0)
+        return;
+
+    r = alloc(len + 1);
+    if (r != NULL)
+    {
+        for (i = 0; i < n; i++)
+	    mch_memmove(r + i * slen, p, (size_t)slen);
+        r[len] = NUL;
+    }
+
+    retvar->var_val.var_string = r;
+}
+
 #ifdef HAVE_STRFTIME
 /*
  * "strftime({format}[, {time}])" function