home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 7.3 / 7.3.819 < prev    next >
Encoding:
Internet Message Format  |  2013-02-14  |  16.0 KB

  1. To: vim_dev@googlegroups.com
  2. Subject: Patch 7.3.819
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 7.3.819
  11. Problem:    Compiling without +eval and with Python isn't working.
  12. Solution:   Add the eval feature when building with Python.
  13. Files:        src/if_py_both.h, src/feature.h, src/eval.c, src/ex_docmd.c,
  14.         src/normal.c, src/gui_gtk_x11.c
  15.  
  16.  
  17. *** ../vim-7.3.818/src/if_py_both.h    2012-12-05 16:30:03.000000000 +0100
  18. --- src/if_py_both.h    2013-02-14 19:22:59.000000000 +0100
  19. ***************
  20. *** 310,316 ****
  21.       return result;
  22.   }
  23.   
  24. - #ifdef FEAT_EVAL
  25.   /*
  26.    * Function to translate a typval_T into a PyObject; this will recursively
  27.    * translate lists/dictionaries into their Python equivalents.
  28. --- 310,315 ----
  29. ***************
  30. *** 425,436 ****
  31.   
  32.       return result;
  33.   }
  34. - #endif
  35.   
  36.       static PyObject *
  37.   VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
  38.   {
  39. - #ifdef FEAT_EVAL
  40.       char    *expr;
  41.       typval_T    *our_tv;
  42.       PyObject    *result;
  43. --- 424,433 ----
  44. ***************
  45. *** 466,475 ****
  46.       Py_END_ALLOW_THREADS
  47.   
  48.       return result;
  49. - #else
  50. -     PyErr_SetVim(_("expressions disabled at compile time"));
  51. -     return NULL;
  52. - #endif
  53.   }
  54.   
  55.   static PyObject *ConvertToPyObject(typval_T *);
  56. --- 463,468 ----
  57. ***************
  58. *** 477,483 ****
  59.       static PyObject *
  60.   VimEvalPy(PyObject *self UNUSED, PyObject *args UNUSED)
  61.   {
  62. - #ifdef FEAT_EVAL
  63.       char    *expr;
  64.       typval_T    *our_tv;
  65.       PyObject    *result;
  66. --- 470,475 ----
  67. ***************
  68. *** 506,515 ****
  69.       Py_END_ALLOW_THREADS
  70.   
  71.       return result;
  72. - #else
  73. -     PyErr_SetVim(_("expressions disabled at compile time"));
  74. -     return NULL;
  75. - #endif
  76.   }
  77.   
  78.       static PyObject *
  79. --- 498,503 ----
  80. ***************
  81. *** 946,952 ****
  82.   }
  83.   
  84.       static PyObject *
  85. ! DictionaryListKeys(PyObject *self)
  86.   {
  87.       dict_T    *dict = ((DictionaryObject *)(self))->dict;
  88.       long_u    todo = dict->dv_hashtab.ht_used;
  89. --- 934,940 ----
  90.   }
  91.   
  92.       static PyObject *
  93. ! DictionaryListKeys(PyObject *self UNUSED)
  94.   {
  95.       dict_T    *dict = ((DictionaryObject *)(self))->dict;
  96.       long_u    todo = dict->dv_hashtab.ht_used;
  97. ***************
  98. *** 2549,2555 ****
  99.       return 0;
  100.   }
  101.   
  102. - #ifdef FEAT_EVAL
  103.   typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
  104.   
  105.       static int
  106. --- 2537,2542 ----
  107. ***************
  108. *** 2781,2784 ****
  109.           return NULL;
  110.       }
  111.   }
  112. - #endif
  113. --- 2768,2770 ----
  114. *** ../vim-7.3.818/src/feature.h    2013-01-23 13:40:54.000000000 +0100
  115. --- src/feature.h    2013-02-14 19:25:33.000000000 +0100
  116. ***************
  117. *** 392,397 ****
  118. --- 392,404 ----
  119.   #endif
  120.   
  121.   /*
  122. +  * +python and +python3 require FEAT_EVAL.
  123. +  */
  124. + #if !defined(FEAT_EVAL) && (defined(FEAT_PYTHON3) || defined(FEAT_PYTHON))
  125. + # define FEAT_EVAL
  126. + #endif
  127. + /*
  128.    * +profile        Profiling for functions and scripts.
  129.    */
  130.   #if defined(FEAT_HUGE) \
  131. *** ../vim-7.3.818/src/eval.c    2013-02-13 17:34:59.000000000 +0100
  132. --- src/eval.c    2013-02-14 19:38:09.000000000 +0100
  133. ***************
  134. *** 917,923 ****
  135. --- 917,925 ----
  136.       hash_clear(&compat_hashtab);
  137.   
  138.       free_scriptnames();
  139. + # if defined(FEAT_CMDL_COMPL)
  140.       free_locales();
  141. + # endif
  142.   
  143.       /* global variables */
  144.       vars_clear(&globvarht);
  145. ***************
  146. *** 1561,1568 ****
  147.   }
  148.   
  149.   
  150. - #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
  151. -     || defined(FEAT_COMPL_FUNC) || defined(PROTO)
  152.   /*
  153.    * Call some vimL function and return the result in "*rettv".
  154.    * Uses argv[argc] for the function arguments.  Only Number and String
  155. --- 1563,1568 ----
  156. ***************
  157. *** 1640,1692 ****
  158.       return ret;
  159.   }
  160.   
  161. - # if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  162.   /*
  163. !  * Call vimL function "func" and return the result as a string.
  164. !  * Returns NULL when calling the function fails.
  165.    * Uses argv[argc] for the function arguments.
  166.    */
  167. !     void *
  168. ! call_func_retstr(func, argc, argv, safe)
  169.       char_u      *func;
  170.       int        argc;
  171.       char_u      **argv;
  172.       int        safe;        /* use the sandbox */
  173.   {
  174.       typval_T    rettv;
  175. !     char_u    *retval;
  176.   
  177.       /* All arguments are passed as strings, no conversion to number. */
  178.       if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
  179. !     return NULL;
  180.   
  181. !     retval = vim_strsave(get_tv_string(&rettv));
  182.       clear_tv(&rettv);
  183.       return retval;
  184.   }
  185. - # endif
  186.   
  187. ! # if defined(FEAT_COMPL_FUNC) || defined(PROTO)
  188.   /*
  189. !  * Call vimL function "func" and return the result as a number.
  190. !  * Returns -1 when calling the function fails.
  191.    * Uses argv[argc] for the function arguments.
  192.    */
  193. !     long
  194. ! call_func_retnr(func, argc, argv, safe)
  195.       char_u      *func;
  196.       int        argc;
  197.       char_u      **argv;
  198.       int        safe;        /* use the sandbox */
  199.   {
  200.       typval_T    rettv;
  201. !     long    retval;
  202.   
  203.       /* All arguments are passed as strings, no conversion to number. */
  204.       if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
  205. !     return -1;
  206.   
  207. !     retval = get_tv_number_chk(&rettv, NULL);
  208.       clear_tv(&rettv);
  209.       return retval;
  210.   }
  211. --- 1640,1693 ----
  212.       return ret;
  213.   }
  214.   
  215.   /*
  216. !  * Call vimL function "func" and return the result as a number.
  217. !  * Returns -1 when calling the function fails.
  218.    * Uses argv[argc] for the function arguments.
  219.    */
  220. !     long
  221. ! call_func_retnr(func, argc, argv, safe)
  222.       char_u      *func;
  223.       int        argc;
  224.       char_u      **argv;
  225.       int        safe;        /* use the sandbox */
  226.   {
  227.       typval_T    rettv;
  228. !     long    retval;
  229.   
  230.       /* All arguments are passed as strings, no conversion to number. */
  231.       if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
  232. !     return -1;
  233.   
  234. !     retval = get_tv_number_chk(&rettv, NULL);
  235.       clear_tv(&rettv);
  236.       return retval;
  237.   }
  238.   
  239. ! #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
  240. !     || defined(FEAT_COMPL_FUNC) || defined(PROTO)
  241. ! # if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  242.   /*
  243. !  * Call vimL function "func" and return the result as a string.
  244. !  * Returns NULL when calling the function fails.
  245.    * Uses argv[argc] for the function arguments.
  246.    */
  247. !     void *
  248. ! call_func_retstr(func, argc, argv, safe)
  249.       char_u      *func;
  250.       int        argc;
  251.       char_u      **argv;
  252.       int        safe;        /* use the sandbox */
  253.   {
  254.       typval_T    rettv;
  255. !     char_u    *retval;
  256.   
  257.       /* All arguments are passed as strings, no conversion to number. */
  258.       if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
  259. !     return NULL;
  260.   
  261. !     retval = vim_strsave(get_tv_string(&rettv));
  262.       clear_tv(&rettv);
  263.       return retval;
  264.   }
  265. ***************
  266. *** 1720,1726 ****
  267.   }
  268.   #endif
  269.   
  270.   /*
  271.    * Save the current function call pointer, and set it to NULL.
  272.    * Used when executing autocommands and for ":source".
  273. --- 1721,1726 ----
  274. ***************
  275. *** 9330,9336 ****
  276.    */
  277.       static void
  278.   f_cindent(argvars, rettv)
  279. !     typval_T    *argvars;
  280.       typval_T    *rettv;
  281.   {
  282.   #ifdef FEAT_CINDENT
  283. --- 9330,9336 ----
  284.    */
  285.       static void
  286.   f_cindent(argvars, rettv)
  287. !     typval_T    *argvars UNUSED;
  288.       typval_T    *rettv;
  289.   {
  290.   #ifdef FEAT_CINDENT
  291. ***************
  292. *** 10379,10387 ****
  293.   
  294.       static void
  295.   findfilendir(argvars, rettv, find_what)
  296. !     typval_T    *argvars;
  297.       typval_T    *rettv;
  298. !     int        find_what;
  299.   {
  300.   #ifdef FEAT_SEARCHPATH
  301.       char_u    *fname;
  302. --- 10379,10387 ----
  303.   
  304.       static void
  305.   findfilendir(argvars, rettv, find_what)
  306. !     typval_T    *argvars UNUSED;
  307.       typval_T    *rettv;
  308. !     int        find_what UNUSED;
  309.   {
  310.   #ifdef FEAT_SEARCHPATH
  311.       char_u    *fname;
  312. ***************
  313. *** 10751,10759 ****
  314.    */
  315.       static void
  316.   foldclosed_both(argvars, rettv, end)
  317. !     typval_T    *argvars;
  318.       typval_T    *rettv;
  319. !     int        end;
  320.   {
  321.   #ifdef FEAT_FOLDING
  322.       linenr_T    lnum;
  323. --- 10751,10759 ----
  324.    */
  325.       static void
  326.   foldclosed_both(argvars, rettv, end)
  327. !     typval_T    *argvars UNUSED;
  328.       typval_T    *rettv;
  329. !     int        end UNUSED;
  330.   {
  331.   #ifdef FEAT_FOLDING
  332.       linenr_T    lnum;
  333. ***************
  334. *** 10802,10809 ****
  335.    */
  336.       static void
  337.   f_foldlevel(argvars, rettv)
  338. !     typval_T    *argvars;
  339. !     typval_T    *rettv;
  340.   {
  341.   #ifdef FEAT_FOLDING
  342.       linenr_T    lnum;
  343. --- 10802,10809 ----
  344.    */
  345.       static void
  346.   f_foldlevel(argvars, rettv)
  347. !     typval_T    *argvars UNUSED;
  348. !     typval_T    *rettv UNUSED;
  349.   {
  350.   #ifdef FEAT_FOLDING
  351.       linenr_T    lnum;
  352. ***************
  353. *** 11583,11589 ****
  354.       static void
  355.   f_getmatches(argvars, rettv)
  356.       typval_T    *argvars UNUSED;
  357. !     typval_T    *rettv;
  358.   {
  359.   #ifdef FEAT_SEARCH_EXTRA
  360.       dict_T    *dict;
  361. --- 11583,11589 ----
  362.       static void
  363.   f_getmatches(argvars, rettv)
  364.       typval_T    *argvars UNUSED;
  365. !     typval_T    *rettv UNUSED;
  366.   {
  367.   #ifdef FEAT_SEARCH_EXTRA
  368.       dict_T    *dict;
  369. ***************
  370. *** 13589,13595 ****
  371.    */
  372.       static void
  373.   f_lispindent(argvars, rettv)
  374. !     typval_T    *argvars;
  375.       typval_T    *rettv;
  376.   {
  377.   #ifdef FEAT_LISP
  378. --- 13589,13595 ----
  379.    */
  380.       static void
  381.   f_lispindent(argvars, rettv)
  382. !     typval_T    *argvars UNUSED;
  383.       typval_T    *rettv;
  384.   {
  385.   #ifdef FEAT_LISP
  386. ***************
  387. *** 13983,13990 ****
  388.    */
  389.       static void
  390.   f_matchadd(argvars, rettv)
  391. !     typval_T    *argvars;
  392. !     typval_T    *rettv;
  393.   {
  394.   #ifdef FEAT_SEARCH_EXTRA
  395.       char_u    buf[NUMBUFLEN];
  396. --- 13983,13990 ----
  397.    */
  398.       static void
  399.   f_matchadd(argvars, rettv)
  400. !     typval_T    *argvars UNUSED;
  401. !     typval_T    *rettv UNUSED;
  402.   {
  403.   #ifdef FEAT_SEARCH_EXTRA
  404.       char_u    buf[NUMBUFLEN];
  405. ***************
  406. *** 14021,14027 ****
  407.    */
  408.       static void
  409.   f_matcharg(argvars, rettv)
  410. !     typval_T    *argvars;
  411.       typval_T    *rettv;
  412.   {
  413.       if (rettv_list_alloc(rettv) == OK)
  414. --- 14021,14027 ----
  415.    */
  416.       static void
  417.   f_matcharg(argvars, rettv)
  418. !     typval_T    *argvars UNUSED;
  419.       typval_T    *rettv;
  420.   {
  421.       if (rettv_list_alloc(rettv) == OK)
  422. ***************
  423. *** 14053,14060 ****
  424.    */
  425.       static void
  426.   f_matchdelete(argvars, rettv)
  427. !     typval_T    *argvars;
  428. !     typval_T    *rettv;
  429.   {
  430.   #ifdef FEAT_SEARCH_EXTRA
  431.       rettv->vval.v_number = match_delete(curwin,
  432. --- 14053,14060 ----
  433.    */
  434.       static void
  435.   f_matchdelete(argvars, rettv)
  436. !     typval_T    *argvars UNUSED;
  437. !     typval_T    *rettv UNUSED;
  438.   {
  439.   #ifdef FEAT_SEARCH_EXTRA
  440.       rettv->vval.v_number = match_delete(curwin,
  441. ***************
  442. *** 14871,14878 ****
  443.    */
  444.       static void
  445.   f_reltime(argvars, rettv)
  446. !     typval_T    *argvars;
  447. !     typval_T    *rettv;
  448.   {
  449.   #ifdef FEAT_RELTIME
  450.       proftime_T    res;
  451. --- 14871,14878 ----
  452.    */
  453.       static void
  454.   f_reltime(argvars, rettv)
  455. !     typval_T    *argvars UNUSED;
  456. !     typval_T    *rettv UNUSED;
  457.   {
  458.   #ifdef FEAT_RELTIME
  459.       proftime_T    res;
  460. ***************
  461. *** 14920,14926 ****
  462.    */
  463.       static void
  464.   f_reltimestr(argvars, rettv)
  465. !     typval_T    *argvars;
  466.       typval_T    *rettv;
  467.   {
  468.   #ifdef FEAT_RELTIME
  469. --- 14920,14926 ----
  470.    */
  471.       static void
  472.   f_reltimestr(argvars, rettv)
  473. !     typval_T    *argvars UNUSED;
  474.       typval_T    *rettv;
  475.   {
  476.   #ifdef FEAT_RELTIME
  477. ***************
  478. *** 15965,15971 ****
  479.       int        flags;        /* SP_SETPCMARK and other SP_ values */
  480.       pos_T    *match_pos;
  481.       linenr_T    lnum_stop;  /* stop at this line if not zero */
  482. !     long    time_limit; /* stop after this many msec */
  483.   {
  484.       char_u    *save_cpo;
  485.       char_u    *pat, *pat2 = NULL, *pat3 = NULL;
  486. --- 15965,15971 ----
  487.       int        flags;        /* SP_SETPCMARK and other SP_ values */
  488.       pos_T    *match_pos;
  489.       linenr_T    lnum_stop;  /* stop at this line if not zero */
  490. !     long    time_limit UNUSED; /* stop after this many msec */
  491.   {
  492.       char_u    *save_cpo;
  493.       char_u    *pat, *pat2 = NULL, *pat3 = NULL;
  494. ***************
  495. *** 16390,16397 ****
  496.    */
  497.       static void
  498.   f_setmatches(argvars, rettv)
  499. !     typval_T    *argvars;
  500. !     typval_T    *rettv;
  501.   {
  502.   #ifdef FEAT_SEARCH_EXTRA
  503.       list_T    *l;
  504. --- 16390,16397 ----
  505.    */
  506.       static void
  507.   f_setmatches(argvars, rettv)
  508. !     typval_T    *argvars UNUSED;
  509. !     typval_T    *rettv UNUSED;
  510.   {
  511.   #ifdef FEAT_SEARCH_EXTRA
  512.       list_T    *l;
  513. ***************
  514. *** 18463,18469 ****
  515.    */
  516.       static void
  517.   f_undofile(argvars, rettv)
  518. !     typval_T    *argvars;
  519.       typval_T    *rettv;
  520.   {
  521.       rettv->v_type = VAR_STRING;
  522. --- 18463,18469 ----
  523.    */
  524.       static void
  525.   f_undofile(argvars, rettv)
  526. !     typval_T    *argvars UNUSED;
  527.       typval_T    *rettv;
  528.   {
  529.       rettv->v_type = VAR_STRING;
  530. *** ../vim-7.3.818/src/ex_docmd.c    2012-12-05 19:13:11.000000000 +0100
  531. --- src/ex_docmd.c    2013-02-14 20:50:56.000000000 +0100
  532. ***************
  533. *** 1734,1739 ****
  534. --- 1734,1741 ----
  535.   #ifdef FEAT_EVAL
  536.           /* avoid that a function call in 'statusline' does this */
  537.           && !getline_equal(fgetline, cookie, get_func_line)
  538. + #endif
  539. + #ifdef FEAT_AUTOCMD
  540.           /* avoid that an autocommand, e.g. QuitPre, does this */
  541.           && !getline_equal(fgetline, cookie, getnextac)
  542.   #endif
  543. ***************
  544. *** 5375,5381 ****
  545. --- 5377,5385 ----
  546.   #endif
  547.       return FAIL;
  548.   }
  549. + #endif
  550.   
  551. + #if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
  552.   /*
  553.    * List of names for completion for ":command" with the EXPAND_ flag.
  554.    * Must be alphabetical for completion.
  555. ***************
  556. *** 5430,5436 ****
  557. --- 5434,5442 ----
  558.       {EXPAND_USER_VARS, "var"},
  559.       {0, NULL}
  560.   };
  561. + #endif
  562.   
  563. + #if defined(FEAT_USR_CMDS) || defined(PROTO)
  564.       static void
  565.   uc_list(name, name_len)
  566.       char_u    *name;
  567. ***************
  568. *** 6375,6384 ****
  569.       int        vallen;
  570.       int        *complp;
  571.       long    *argt;
  572. !     char_u    **compl_arg;
  573.   {
  574.       char_u    *arg = NULL;
  575.       size_t    arglen = 0;
  576.       int        i;
  577.       int        valend = vallen;
  578.   
  579. --- 6381,6392 ----
  580.       int        vallen;
  581.       int        *complp;
  582.       long    *argt;
  583. !     char_u    **compl_arg UNUSED;
  584.   {
  585.       char_u    *arg = NULL;
  586. + # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  587.       size_t    arglen = 0;
  588. + # endif
  589.       int        i;
  590.       int        valend = vallen;
  591.   
  592. ***************
  593. *** 6388,6394 ****
  594. --- 6396,6404 ----
  595.       if (value[i] == ',')
  596.       {
  597.           arg = &value[i + 1];
  598. + # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  599.           arglen = vallen - i - 1;
  600. + # endif
  601.           valend = i;
  602.           break;
  603.       }
  604. *** ../vim-7.3.818/src/normal.c    2013-01-24 21:00:15.000000000 +0100
  605. --- src/normal.c    2013-02-14 19:33:36.000000000 +0100
  606. ***************
  607. *** 2292,2298 ****
  608. --- 2292,2300 ----
  609.   {
  610.   #ifdef FEAT_EVAL
  611.       char_u    *(argv[1]);
  612. + # ifdef FEAT_VIRTUALEDIT
  613.       int        save_virtual_op = virtual_op;
  614. + # endif
  615.   
  616.       if (*p_opfunc == NUL)
  617.       EMSG(_("E774: 'operatorfunc' is empty"));
  618. ***************
  619. *** 2312,2324 ****
  620. --- 2314,2330 ----
  621.       else
  622.           argv[0] = (char_u *)"char";
  623.   
  624. + # ifdef FEAT_VIRTUALEDIT
  625.       /* Reset virtual_op so that 'virtualedit' can be changed in the
  626.        * function. */
  627.       virtual_op = MAYBE;
  628. + # endif
  629.   
  630.       (void)call_func_retnr(p_opfunc, 1, argv, FALSE);
  631.   
  632. + # ifdef FEAT_VIRTUALEDIT
  633.       virtual_op = save_virtual_op;
  634. + # endif
  635.       }
  636.   #else
  637.       EMSG(_("E775: Eval feature not available"));
  638. *** ../vim-7.3.818/src/gui_gtk_x11.c    2013-01-23 16:00:05.000000000 +0100
  639. --- src/gui_gtk_x11.c    2013-02-14 19:38:42.000000000 +0100
  640. ***************
  641. *** 5164,5171 ****
  642.       return FAIL;
  643.   }
  644.   
  645. ! #if defined(FEAT_TITLE) \
  646. !     || defined(PROTO)
  647.   /*
  648.    * Return the text window-id and display.  Only required for X-based GUI's
  649.    */
  650. --- 5164,5170 ----
  651.       return FAIL;
  652.   }
  653.   
  654. ! #if defined(FEAT_TITLE) || defined(FEAT_EVAL) || defined(PROTO)
  655.   /*
  656.    * Return the text window-id and display.  Only required for X-based GUI's
  657.    */
  658. *** ../vim-7.3.818/src/version.c    2013-02-14 20:58:30.000000000 +0100
  659. --- src/version.c    2013-02-14 22:09:41.000000000 +0100
  660. ***************
  661. *** 727,728 ****
  662. --- 727,730 ----
  663.   {   /* Add new patch number below this line */
  664. + /**/
  665. +     819,
  666.   /**/
  667.  
  668. -- 
  669. (letter from Mark to Mike, about the film's probable certificate)
  670.       For an 'A' we would have to: Lose as many shits as possible; Take Jesus
  671.       Christ out, if possible; Loose "I fart in your general direction"; Lose
  672.       "the oral sex"; Lose "oh, fuck off"; Lose "We make castanets out of your
  673.       testicles"
  674.                  "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
  675.  
  676.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  677. ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  678. \\\  an exciting new programming language -- http://www.Zimbu.org        ///
  679.  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
  680.