Hi John!

On Fr, 17 Sep 2010, John Little wrote:

> On Sep 18, 3:05 am, Bee <[email protected]> wrote:
> function! Random()
>     if !exists("s:seeded")
>         call libcallnr("libc.so.6", "srand", localtime() )
>         let s:seeded = 1
>     endif
>     return libcallnr("libc.so.6", "rand", 0 ) % 65536
> endfun
> 
> You might have to adjust that "libc.so.6" for your OS.

This reminds me, that I have wished a rand() function for very long.

So here is a very simple patch. It doesn't add much to the footprint. I 
am not sure, how portable the code is, though:


--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -4522,6 +4522,9 @@
                This can be used to avoid some things that would remove the
                popup menu.

+rand()                                         *rand()*
+               Returns a pseudo-random positive integer Number.
+
                                                        *E726* *E727*
 range({expr} [, {max} [, {stride}]])                           *range()*
                Returns a |List| with Numbers:
diff --git a/src/eval.c b/src/eval.c
--- a/src/eval.c
+++ b/src/eval.c
@@ -653,6 +653,7 @@
 static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_rand __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
@@ -7829,6 +7830,7 @@
     {"prevnonblank",   1, 1, f_prevnonblank},
     {"printf",         2, 19, f_printf},
     {"pumvisible",     0, 0, f_pumvisible},
+    {"rand",           0, 0, f_rand},
     {"range",          1, 3, f_range},
     {"readfile",       1, 3, f_readfile},
     {"reltime",                0, 2, f_reltime},
@@ -14224,6 +14226,18 @@
        rettv->vval.v_number = 1;
 #endif
 }
+/*
+ * "rand()" function
+ */
+    static void
+f_rand(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    rettv->v_type = VAR_NUMBER;
+    srand((varnumber_T)time(NULL));
+    rettv->vval.v_number = rand();
+}


regards,
Christian

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui